From 7b2c999699ab2187f96243e8d776efc2df46f90a Mon Sep 17 00:00:00 2001 From: Andreas Tille Date: Sat, 17 Feb 2018 20:45:07 +0000 Subject: [PATCH] Import python-pysam_0.14+ds.orig.tar.gz [dgit import orig python-pysam_0.14+ds.orig.tar.gz] --- .gitignore | 85 + .travis.yml | 28 + AUTHORS | 34 + COPYING | 21 + INSTALL | 102 + MANIFEST.in | 60 + NEWS | 652 + README.rst | 50 + bcftools/HMM.c | 509 + bcftools/HMM.c.pysam.c | 511 + bcftools/HMM.h | 138 + bcftools/bam2bcf.c | 866 + bcftools/bam2bcf.c.pysam.c | 868 + bcftools/bam2bcf.h | 138 + bcftools/bam2bcf_indel.c | 470 + bcftools/bam2bcf_indel.c.pysam.c | 472 + bcftools/bam_sample.c | 393 + bcftools/bam_sample.c.pysam.c | 395 + bcftools/bam_sample.h | 50 + bcftools/bcftools.h | 79 + bcftools/bcftools.pysam.c | 68 + bcftools/bcftools.pysam.h | 47 + bcftools/bin.c | 104 + bcftools/bin.c.pysam.c | 106 + bcftools/bin.h | 65 + bcftools/call.h | 127 + bcftools/ccall.c | 337 + bcftools/ccall.c.pysam.c | 339 + bcftools/config.h | 2 + bcftools/consensus.c | 768 + bcftools/consensus.c.pysam.c | 770 + bcftools/convert.c | 1376 + bcftools/convert.c.pysam.c | 1378 + bcftools/convert.h | 44 + bcftools/csq.c | 3839 + bcftools/csq.c.pysam.c | 3841 + bcftools/em.c | 259 + bcftools/em.c.pysam.c | 261 + bcftools/filter.c | 2192 + bcftools/filter.c.pysam.c | 2194 + bcftools/filter.h | 52 + bcftools/gvcf.c | 227 + bcftools/gvcf.c.pysam.c | 229 + bcftools/gvcf.h | 41 + bcftools/hclust.c | 400 + bcftools/hclust.c.pysam.c | 402 + bcftools/hclust.h | 77 + bcftools/khash_str2str.h | 106 + bcftools/kheap.h | 174 + bcftools/kmin.c | 209 + bcftools/kmin.c.pysam.c | 211 + bcftools/kmin.h | 46 + bcftools/main.c | 285 + bcftools/main.c.pysam.c | 287 + bcftools/mcall.c | 1579 + bcftools/mcall.c.pysam.c | 1581 + bcftools/mpileup.c | 1107 + bcftools/mpileup.c.pysam.c | 1109 + bcftools/mw.h | 1944 + bcftools/ploidy.c | 268 + bcftools/ploidy.c.pysam.c | 270 + bcftools/ploidy.h | 129 + bcftools/prob1.c | 533 + bcftools/prob1.c.pysam.c | 535 + bcftools/prob1.h | 93 + bcftools/rbuf.h | 261 + bcftools/regidx.c | 598 + bcftools/regidx.c.pysam.c | 600 + bcftools/regidx.h | 191 + bcftools/reheader.c | 521 + bcftools/reheader.c.pysam.c | 523 + bcftools/smpl_ilist.c | 106 + bcftools/smpl_ilist.c.pysam.c | 108 + bcftools/smpl_ilist.h | 47 + bcftools/tabix.c | 131 + bcftools/tabix.c.pysam.c | 133 + bcftools/tsv2vcf.c | 122 + bcftools/tsv2vcf.c.pysam.c | 124 + bcftools/tsv2vcf.h | 85 + bcftools/vcfannotate.c | 2020 + bcftools/vcfannotate.c.pysam.c | 2022 + bcftools/vcfbuf.c | 442 + bcftools/vcfbuf.c.pysam.c | 444 + bcftools/vcfbuf.h | 81 + bcftools/vcfcall.c | 869 + bcftools/vcfcall.c.pysam.c | 871 + bcftools/vcfcnv.c | 1418 + bcftools/vcfcnv.c.pysam.c | 1420 + bcftools/vcfconcat.c | 825 + bcftools/vcfconcat.c.pysam.c | 827 + bcftools/vcfconvert.c | 1531 + bcftools/vcfconvert.c.pysam.c | 1533 + bcftools/vcffilter.c | 573 + bcftools/vcffilter.c.pysam.c | 575 + bcftools/vcfgtcheck.c | 822 + bcftools/vcfgtcheck.c.pysam.c | 824 + bcftools/vcfindex.c | 231 + bcftools/vcfindex.c.pysam.c | 233 + bcftools/vcfisec.c | 600 + bcftools/vcfisec.c.pysam.c | 602 + bcftools/vcfmerge.c | 2508 + bcftools/vcfmerge.c.pysam.c | 2510 + bcftools/vcfnorm.c | 1895 + bcftools/vcfnorm.c.pysam.c | 1897 + bcftools/vcfplugin.c | 657 + bcftools/vcfplugin.c.pysam.c | 659 + bcftools/vcfquery.c | 390 + bcftools/vcfquery.c.pysam.c | 392 + bcftools/vcfroh.c | 1224 + bcftools/vcfroh.c.pysam.c | 1226 + bcftools/vcfsom.c | 715 + bcftools/vcfsom.c.pysam.c | 717 + bcftools/vcfsort.c | 306 + bcftools/vcfsort.c.pysam.c | 308 + bcftools/vcfstats.c | 1724 + bcftools/vcfstats.c.pysam.c | 1726 + bcftools/vcfview.c | 764 + bcftools/vcfview.c.pysam.c | 766 + bcftools/vcmp.c | 132 + bcftools/vcmp.c.pysam.c | 134 + bcftools/vcmp.h | 62 + bcftools/version.c | 55 + bcftools/version.c.pysam.c | 57 + bcftools/version.h | 1 + benchmark/cython_flagstat.py | 23 + benchmark/python_flagstat.py | 23 + buildwheels.sh | 69 + ci/conda-recipe/build.sh | 8 + ci/conda-recipe/meta.yaml | 29 + ci/install-CGAT-tools.sh | 281 + cy_build.py | 86 + doc/Makefile | 96 + doc/api.rst | 221 + doc/benchmarking.rst | 68 + doc/conf.py | 223 + doc/developer.rst | 74 + doc/faq.rst | 278 + doc/glossary.rst | 119 + doc/index.rst | 73 + doc/installation.rst | 108 + doc/make.bat | 112 + doc/release.rst | 650 + doc/usage.rst | 422 + import.py | 228 + import/pysam.c | 68 + import/pysam.h | 47 + .../BuildRead.pyx | 24 + .../PysamTestModule_link_pre_489/__init__.py | 3 + linker_tests/link_pre_489/cy_build.py | 86 + linker_tests/link_pre_489/setup.py | 28 + .../link_pre_489/tests/test_module.py | 15 + .../BuildRead.pyx | 24 + .../__init__.py | 3 + linker_tests/link_with_rpath/setup.py | 36 + .../link_with_rpath/tests/test_module.py | 15 + .../BuildRead.pyx | 24 + .../__init__.py | 3 + linker_tests/link_without_rpath/setup.py | 35 + .../link_without_rpath/tests/test_module.py | 15 + pysam.py | 1 + pysam/Pileup.py | 282 + pysam/VCF.py.obsolete | 1087 + pysam/__init__.py | 100 + pysam/alternatives.py.obsolete | 82 + pysam/bcftools.py | 24 + pysam/cbcftools_util.h | 6 + pysam/csamtools_util.h | 6 + pysam/htslib_util.c | 159 + pysam/htslib_util.h | 114 + pysam/include/__init__.py | 0 pysam/libcalignedsegment.pxd | 103 + pysam/libcalignedsegment.pyx | 3268 + pysam/libcalignmentfile.pxd | 165 + pysam/libcalignmentfile.pyx | 2805 + pysam/libcbcf.pxd | 141 + pysam/libcbcf.pyx | 4417 + pysam/libcbcftools.pxd | 9 + pysam/libcbcftools.pyx | 2 + pysam/libcbgzf.pyx | 238 + pysam/libcfaidx.pxd | 80 + pysam/libcfaidx.pyx | 666 + pysam/libchtslib.pxd | 2602 + pysam/libchtslib.pyx | 713 + pysam/libcsamfile.pxd | 45 + pysam/libcsamfile.pyx | 43 + pysam/libcsamtools.pxd | 9 + pysam/libcsamtools.pyx | 2 + pysam/libctabix.pxd | 127 + pysam/libctabix.pyx | 1300 + pysam/libctabixproxies.pxd | 61 + pysam/libctabixproxies.pyx | 833 + pysam/libcutils.pxd | 28 + pysam/libcutils.pyx | 394 + pysam/libcvcf.pxd | 2 + pysam/libcvcf.pyx | 1203 + pysam/pysam_stream.h | 13 + pysam/pysam_util.c | 36 + pysam/pysam_util.h | 5 + pysam/samtools.py | 46 + pysam/utils.py | 104 + pysam/version.py | 10 + requirements.txt | 1 + run_tests_travis.sh | 121 + samtools/LICENSE | 33 + samtools/README | 54 + samtools/bam.c | 247 + samtools/bam.c.pysam.c | 249 + samtools/bam.h | 580 + samtools/bam2bcf.c | 843 + samtools/bam2bcf.c.pysam.c | 845 + samtools/bam2bcf.h | 139 + samtools/bam2bcf_indel.c | 539 + samtools/bam2bcf_indel.c.pysam.c | 541 + samtools/bam2depth.c | 311 + samtools/bam2depth.c.pysam.c | 313 + samtools/bam_addrprg.c | 482 + samtools/bam_addrprg.c.pysam.c | 484 + samtools/bam_aux.c | 81 + samtools/bam_aux.c.pysam.c | 83 + samtools/bam_cat.c | 637 + samtools/bam_cat.c.pysam.c | 639 + samtools/bam_color.c | 171 + samtools/bam_color.c.pysam.c | 173 + samtools/bam_endian.h | 66 + samtools/bam_flags.c | 70 + samtools/bam_flags.c.pysam.c | 72 + samtools/bam_import.c | 65 + samtools/bam_import.c.pysam.c | 67 + samtools/bam_index.c | 145 + samtools/bam_index.c.pysam.c | 147 + samtools/bam_lpileup.c | 226 + samtools/bam_lpileup.c.pysam.c | 228 + samtools/bam_lpileup.h | 57 + samtools/bam_markdup.c | 1039 + samtools/bam_markdup.c.pysam.c | 1041 + samtools/bam_mate.c | 483 + samtools/bam_mate.c.pysam.c | 485 + samtools/bam_md.c | 321 + samtools/bam_md.c.pysam.c | 323 + samtools/bam_plbuf.c | 68 + samtools/bam_plbuf.c.pysam.c | 70 + samtools/bam_plbuf.h | 55 + samtools/bam_plcmd.c | 1140 + samtools/bam_plcmd.c.pysam.c | 1142 + samtools/bam_quickcheck.c | 186 + samtools/bam_quickcheck.c.pysam.c | 188 + samtools/bam_reheader.c | 514 + samtools/bam_reheader.c.pysam.c | 516 + samtools/bam_rmdup.c | 322 + samtools/bam_rmdup.c.pysam.c | 324 + samtools/bam_rmdupse.c | 227 + samtools/bam_rmdupse.c.pysam.c | 229 + samtools/bam_sort.c | 2360 + samtools/bam_sort.c.pysam.c | 2362 + samtools/bam_split.c | 626 + samtools/bam_split.c.pysam.c | 628 + samtools/bam_stat.c | 177 + samtools/bam_stat.c.pysam.c | 179 + samtools/bamshuf.c | 322 + samtools/bamshuf.c.pysam.c | 324 + samtools/bamtk.c | 209 + samtools/bamtk.c.pysam.c | 211 + samtools/bedcov.c | 187 + samtools/bedcov.c.pysam.c | 189 + samtools/bedidx.c | 600 + samtools/bedidx.c.pysam.c | 602 + samtools/bedidx.h | 20 + samtools/cut_target.c | 249 + samtools/cut_target.c.pysam.c | 251 + samtools/dict.c | 158 + samtools/dict.c.pysam.c | 160 + samtools/faidx.c | 105 + samtools/faidx.c.pysam.c | 107 + samtools/lz4/LICENSE | 24 + samtools/lz4/lz4.c | 1478 + samtools/lz4/lz4.c.pysam.c | 1480 + samtools/lz4/lz4.h | 463 + samtools/misc/ace2sam.c | 254 + samtools/misc/ace2sam.c.pysam.c | 256 + samtools/padding.c | 637 + samtools/padding.c.pysam.c | 639 + samtools/phase.c | 790 + samtools/phase.c.pysam.c | 792 + samtools/sam.c | 147 + samtools/sam.c.pysam.c | 149 + samtools/sam.h | 145 + samtools/sam_header.c | 836 + samtools/sam_header.c.pysam.c | 838 + samtools/sam_header.h | 72 + samtools/sam_opts.c | 161 + samtools/sam_opts.c.pysam.c | 163 + samtools/sam_opts.h | 102 + samtools/sam_utils.c | 88 + samtools/sam_utils.c.pysam.c | 90 + samtools/sam_view.c | 1582 + samtools/sam_view.c.pysam.c | 1584 + samtools/sample.c | 134 + samtools/sample.c.pysam.c | 136 + samtools/sample.h | 41 + samtools/samtools.h | 40 + samtools/samtools.pysam.c | 68 + samtools/samtools.pysam.h | 47 + samtools/stats.c | 1732 + samtools/stats.c.pysam.c | 1734 + samtools/stats_isize.c | 221 + samtools/stats_isize.c.pysam.c | 223 + samtools/stats_isize.h | 83 + samtools/test/merge/test_bam_translate.c | 598 + .../test/merge/test_bam_translate.c.pysam.c | 600 + samtools/test/merge/test_rtrans_build.c | 120 + .../test/merge/test_rtrans_build.c.pysam.c | 122 + samtools/test/merge/test_trans_tbl_init.c | 576 + .../test/merge/test_trans_tbl_init.c.pysam.c | 578 + samtools/test/split/test_count_rg.c | 125 + samtools/test/split/test_count_rg.c.pysam.c | 127 + .../test/split/test_expand_format_string.c | 125 + .../split/test_expand_format_string.c.pysam.c | 127 + samtools/test/split/test_filter_header_rg.c | 201 + .../split/test_filter_header_rg.c.pysam.c | 203 + samtools/test/split/test_parse_args.c | 217 + samtools/test/split/test_parse_args.c.pysam.c | 219 + samtools/test/test.c | 55 + samtools/test/test.c.pysam.c | 57 + samtools/test/test.h | 35 + samtools/test/tview/test_get_rg_sample.c | 83 + .../test/tview/test_get_rg_sample.c.pysam.c | 85 + samtools/tmp_file.c | 507 + samtools/tmp_file.c.pysam.c | 509 + samtools/tmp_file.h | 144 + samtools/version.h | 1 + samtools/win32/xcurses.h | 1377 + samtools/win32/zconf.h | 332 + samtools/win32/zlib.h | 1357 + save/example.py | 79 + save/pysam_bench.py | 63 + save/pysam_test2.6.py | 1607 + save/pysam_test_stdin.py | 10 + save/pysam_testpp.py | 13 + save/segfault_tests.py | 37 + save/vcf_test.py | 123 + setup.cfg | 10 + setup.py | 439 + tests/00README.txt | 32 + tests/AlignedSegment_bench.py | 30 + tests/AlignedSegment_test.py | 1348 + tests/AlignmentFileFetchTestUtils.py | 86 + tests/AlignmentFileFetch_bench.py | 98 + tests/AlignmentFileHeader_test.py | 325 + tests/AlignmentFilePileup_bench.py | 147 + tests/AlignmentFilePileup_test.py | 384 + tests/AlignmentFile_bench.py | 60 + tests/AlignmentFile_test.py | 2356 + tests/PileupTestUtils.py | 160 + tests/StreamFiledescriptors_test.py | 89 + tests/TestUtils.py | 267 + tests/VariantFileFetchTestUtils.py | 69 + tests/VariantFile_bench.py | 59 + tests/VariantFile_test.py | 611 + tests/_compile_test.pyx | 29 + tests/_compile_test.pyxbld | 8 + tests/_cython_flagstat.pyx | 18 + tests/_cython_flagstat.pyxbld | 8 + tests/cbcf_data/Makefile | 23 + tests/cbcf_data/example_empty.vcf | 0 tests/cbcf_data/example_vcf40.vcf | 24 + tests/cbcf_data/example_vcf42.vcf | 24 + tests/cbcf_data/example_vcf42_only_header.vcf | 19 + tests/cbcf_data/example_vcf42_withcontigs.vcf | 27 + tests/cbcf_data/gnomad.vcf | 200 + tests/cbcf_data/gnomad_fixed.vcf | 200 + tests/cbcf_data/missing_genotypes.vcf | 6 + tests/compile_test.py | 48 + tests/faidx_bench.py | 71 + tests/faidx_test.py | 320 + tests/linking_test.py | 92 + tests/pysam_data/Makefile | 102 + tests/pysam_data/ex1.bed | 2 + tests/pysam_data/ex1.fa | 56 + tests/pysam_data/ex1.sam.gz | Bin 0 -> 113194 bytes tests/pysam_data/ex1.vcf.gz | Bin 0 -> 16982 bytes tests/pysam_data/ex1.vcf.gz.tbi | Bin 0 -> 5636 bytes tests/pysam_data/ex10.sam | 16 + tests/pysam_data/ex3.sam | 13 + tests/pysam_data/ex4.sam | 9 + tests/pysam_data/ex5.sam | 5 + tests/pysam_data/ex6.sam | 5 + tests/pysam_data/ex7.sam.donottest | 2 + tests/pysam_data/ex8.sam | 3 + tests/pysam_data/ex9_fail.sam | 1022 + tests/pysam_data/ex9_nofail.sam | 1021 + tests/pysam_data/ex_spliced.sam | 297 + tests/pysam_data/example_aligned_pairs.sam | 81 + tests/pysam_data/example_btag.sam | 6 + tests/pysam_data/example_empty_header.sam | 321 + .../pysam_data/example_empty_with_header.sam | 1 + tests/pysam_data/example_no_seq_in_header.bam | Bin 0 -> 953 bytes .../example_unmapped_reads_no_sq.sam | 3 + tests/pysam_data/example_user_header.sam | 8 + tests/pysam_data/faidx_empty_seq.fq | 40 + tests/pysam_data/faidx_ex1.fa | 6540 + tests/pysam_data/faidx_ex1.fq | 13080 ++ tests/pysam_data/issue100.sam | 27 + tests/pysam_data/rg_with_tab.sam | 3273 + tests/pysam_data/softclip.sam | 6 + tests/pysam_data/tag_bug.sam | 16 + tests/pysam_data/test.gtf | 10 + tests/pysam_data/test.gtf.gz | Bin 0 -> 311 bytes tests/pysam_data/test_mapped_unmapped.sam | 28 + tests/pysam_data/test_query_position.sam | 9 + tests/pysam_data/test_unaligned.sam | 6 + tests/refactoring.pl | 60 + tests/refactoring.txt | 198 + tests/samtools_test.py | 409 + tests/tabix_bench.py | 180 + tests/tabix_data/empty.bed.gz | Bin 0 -> 28 bytes tests/tabix_data/empty.bed.gz.tbi | Bin 0 -> 75 bytes tests/tabix_data/example.bed | 164 + tests/tabix_data/example.bed.gz | Bin 0 -> 819 bytes tests/tabix_data/example.bed.gz.tbi | Bin 0 -> 192 bytes tests/tabix_data/example.gff2.gz | Bin 0 -> 238 bytes tests/tabix_data/example.gff2.gz.tbi | Bin 0 -> 107 bytes tests/tabix_data/example.gff3.gz | Bin 0 -> 3067 bytes tests/tabix_data/example.gff3.gz.tbi | Bin 0 -> 1457 bytes tests/tabix_data/example.gtf.gz | Bin 0 -> 3778 bytes tests/tabix_data/example.gtf.gz.tbi | Bin 0 -> 196 bytes tests/tabix_data/example.sam.gz | Bin 0 -> 398 bytes tests/tabix_data/example.sam.gz.tbi | Bin 0 -> 128 bytes tests/tabix_data/example.vcf.gz | Bin 0 -> 328 bytes tests/tabix_data/example.vcf.gz.tbi | Bin 0 -> 182 bytes tests/tabix_data/example.vcf40 | 23 + tests/tabix_data/example_0v23.bed.gz | Bin 0 -> 819 bytes tests/tabix_data/example_0v23.bed.gz.tbi | Bin 0 -> 244 bytes tests/tabix_data/example_0v23.vcf.gz | Bin 0 -> 328 bytes tests/tabix_data/example_0v23.vcf.gz.tbi | Bin 0 -> 155 bytes tests/tabix_data/example_0v26.bed.gz | Bin 0 -> 819 bytes tests/tabix_data/example_0v26.bed.gz.tbi | Bin 0 -> 244 bytes tests/tabix_data/example_0v26.vcf.gz | Bin 0 -> 328 bytes tests/tabix_data/example_0v26.vcf.gz.tbi | Bin 0 -> 155 bytes tests/tabix_data/example_badcomments.bed.gz | Bin 0 -> 879 bytes .../tabix_data/example_badcomments.bed.gz.tbi | Bin 0 -> 194 bytes tests/tabix_data/example_badcomments.gtf.gz | Bin 0 -> 3825 bytes .../tabix_data/example_badcomments.gtf.gz.tbi | Bin 0 -> 198 bytes tests/tabix_data/example_badcomments.sam.gz | Bin 0 -> 398 bytes .../tabix_data/example_badcomments.sam.gz.tbi | Bin 0 -> 128 bytes tests/tabix_data/example_badcomments.vcf.gz | Bin 0 -> 753 bytes .../tabix_data/example_badcomments.vcf.gz.tbi | Bin 0 -> 186 bytes tests/tabix_data/example_comments.bed.gz | Bin 0 -> 849 bytes tests/tabix_data/example_comments.bed.gz.tbi | Bin 0 -> 194 bytes tests/tabix_data/example_comments.gtf.gz | Bin 0 -> 3792 bytes tests/tabix_data/example_comments.gtf.gz.tbi | Bin 0 -> 198 bytes tests/tabix_data/example_comments.sam.gz | Bin 0 -> 398 bytes tests/tabix_data/example_comments.sam.gz.tbi | Bin 0 -> 128 bytes tests/tabix_data/example_comments.vcf.gz | Bin 0 -> 753 bytes tests/tabix_data/example_comments.vcf.gz.tbi | Bin 0 -> 186 bytes tests/tabix_data/example_large.bed | 100000 +++++++++++++++ tests/tabix_data/example_large.bed.gz | Bin 0 -> 459587 bytes tests/tabix_data/example_large.bed.gz.tbi | Bin 0 -> 7877 bytes tests/tabix_data/example_unicode.vcf | 23 + tests/tabix_data/gtf_toofew_fields.gtf.gz | Bin 0 -> 400 bytes tests/tabix_data/gtf_toomany_fields.gtf.gz | Bin 0 -> 400 bytes tests/tabix_data/gtf_wrong_fields.gtf.gz | Bin 0 -> 400 bytes tests/tabix_data/vcf/10.vcf | 84 + tests/tabix_data/vcf/11.vcf | 216 + tests/tabix_data/vcf/12.vcf | 1000 + tests/tabix_data/vcf/13.vcf | 220 + tests/tabix_data/vcf/15.vcf | 317 + tests/tabix_data/vcf/16.vcf | 369 + tests/tabix_data/vcf/18.vcf | 1000 + tests/tabix_data/vcf/2.vcf | 334 + tests/tabix_data/vcf/20.vcf | 307 + tests/tabix_data/vcf/21.vcf | 310 + tests/tabix_data/vcf/22.vcf | 1000 + tests/tabix_data/vcf/23.vcf | 419 + tests/tabix_data/vcf/24.vcf | 724 + tests/tabix_data/vcf/3.vcf | 1000 + tests/tabix_data/vcf/4.vcf | 318 + tests/tabix_data/vcf/5.vcf | 1000 + tests/tabix_data/vcf/6.vcf | 278 + tests/tabix_data/vcf/7.vcf | 317 + tests/tabix_data/vcf/8.vcf | 84 + tests/tabix_data/vcf/9.vcf | 1000 + tests/tabix_data/vcf/README.txt | 11 + tests/tabix_data/vcf/issue85.vcf | 26 + tests/tabix_data/vcf/vcf_v42.vcf | 25 + tests/tabix_test.py | 1255 + tests/tabixproxies_test.py | 362 + tests/test_samtools_python.py | 46 + win32/getopt.c | 1261 + win32/getopt.h | 187 + win32/stdint.h | 799 + win32/unistd.h | 26 + 491 files changed, 308114 insertions(+) create mode 100644 .gitignore create mode 100644 .travis.yml create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 INSTALL create mode 100644 MANIFEST.in create mode 100644 NEWS create mode 100644 README.rst create mode 100644 bcftools/HMM.c create mode 100644 bcftools/HMM.c.pysam.c create mode 100644 bcftools/HMM.h create mode 100644 bcftools/bam2bcf.c create mode 100644 bcftools/bam2bcf.c.pysam.c create mode 100644 bcftools/bam2bcf.h create mode 100644 bcftools/bam2bcf_indel.c create mode 100644 bcftools/bam2bcf_indel.c.pysam.c create mode 100644 bcftools/bam_sample.c create mode 100644 bcftools/bam_sample.c.pysam.c create mode 100644 bcftools/bam_sample.h create mode 100644 bcftools/bcftools.h create mode 100644 bcftools/bcftools.pysam.c create mode 100644 bcftools/bcftools.pysam.h create mode 100644 bcftools/bin.c create mode 100644 bcftools/bin.c.pysam.c create mode 100644 bcftools/bin.h create mode 100644 bcftools/call.h create mode 100644 bcftools/ccall.c create mode 100644 bcftools/ccall.c.pysam.c create mode 100644 bcftools/config.h create mode 100644 bcftools/consensus.c create mode 100644 bcftools/consensus.c.pysam.c create mode 100644 bcftools/convert.c create mode 100644 bcftools/convert.c.pysam.c create mode 100644 bcftools/convert.h create mode 100644 bcftools/csq.c create mode 100644 bcftools/csq.c.pysam.c create mode 100644 bcftools/em.c create mode 100644 bcftools/em.c.pysam.c create mode 100644 bcftools/filter.c create mode 100644 bcftools/filter.c.pysam.c create mode 100644 bcftools/filter.h create mode 100644 bcftools/gvcf.c create mode 100644 bcftools/gvcf.c.pysam.c create mode 100644 bcftools/gvcf.h create mode 100644 bcftools/hclust.c create mode 100644 bcftools/hclust.c.pysam.c create mode 100644 bcftools/hclust.h create mode 100644 bcftools/khash_str2str.h create mode 100644 bcftools/kheap.h create mode 100644 bcftools/kmin.c create mode 100644 bcftools/kmin.c.pysam.c create mode 100644 bcftools/kmin.h create mode 100644 bcftools/main.c create mode 100644 bcftools/main.c.pysam.c create mode 100644 bcftools/mcall.c create mode 100644 bcftools/mcall.c.pysam.c create mode 100644 bcftools/mpileup.c create mode 100644 bcftools/mpileup.c.pysam.c create mode 100644 bcftools/mw.h create mode 100644 bcftools/ploidy.c create mode 100644 bcftools/ploidy.c.pysam.c create mode 100644 bcftools/ploidy.h create mode 100644 bcftools/prob1.c create mode 100644 bcftools/prob1.c.pysam.c create mode 100644 bcftools/prob1.h create mode 100644 bcftools/rbuf.h create mode 100644 bcftools/regidx.c create mode 100644 bcftools/regidx.c.pysam.c create mode 100644 bcftools/regidx.h create mode 100644 bcftools/reheader.c create mode 100644 bcftools/reheader.c.pysam.c create mode 100644 bcftools/smpl_ilist.c create mode 100644 bcftools/smpl_ilist.c.pysam.c create mode 100644 bcftools/smpl_ilist.h create mode 100644 bcftools/tabix.c create mode 100644 bcftools/tabix.c.pysam.c create mode 100644 bcftools/tsv2vcf.c create mode 100644 bcftools/tsv2vcf.c.pysam.c create mode 100644 bcftools/tsv2vcf.h create mode 100644 bcftools/vcfannotate.c create mode 100644 bcftools/vcfannotate.c.pysam.c create mode 100644 bcftools/vcfbuf.c create mode 100644 bcftools/vcfbuf.c.pysam.c create mode 100644 bcftools/vcfbuf.h create mode 100644 bcftools/vcfcall.c create mode 100644 bcftools/vcfcall.c.pysam.c create mode 100644 bcftools/vcfcnv.c create mode 100644 bcftools/vcfcnv.c.pysam.c create mode 100644 bcftools/vcfconcat.c create mode 100644 bcftools/vcfconcat.c.pysam.c create mode 100644 bcftools/vcfconvert.c create mode 100644 bcftools/vcfconvert.c.pysam.c create mode 100644 bcftools/vcffilter.c create mode 100644 bcftools/vcffilter.c.pysam.c create mode 100644 bcftools/vcfgtcheck.c create mode 100644 bcftools/vcfgtcheck.c.pysam.c create mode 100644 bcftools/vcfindex.c create mode 100644 bcftools/vcfindex.c.pysam.c create mode 100644 bcftools/vcfisec.c create mode 100644 bcftools/vcfisec.c.pysam.c create mode 100644 bcftools/vcfmerge.c create mode 100644 bcftools/vcfmerge.c.pysam.c create mode 100644 bcftools/vcfnorm.c create mode 100644 bcftools/vcfnorm.c.pysam.c create mode 100644 bcftools/vcfplugin.c create mode 100644 bcftools/vcfplugin.c.pysam.c create mode 100644 bcftools/vcfquery.c create mode 100644 bcftools/vcfquery.c.pysam.c create mode 100644 bcftools/vcfroh.c create mode 100644 bcftools/vcfroh.c.pysam.c create mode 100644 bcftools/vcfsom.c create mode 100644 bcftools/vcfsom.c.pysam.c create mode 100644 bcftools/vcfsort.c create mode 100644 bcftools/vcfsort.c.pysam.c create mode 100644 bcftools/vcfstats.c create mode 100644 bcftools/vcfstats.c.pysam.c create mode 100644 bcftools/vcfview.c create mode 100644 bcftools/vcfview.c.pysam.c create mode 100644 bcftools/vcmp.c create mode 100644 bcftools/vcmp.c.pysam.c create mode 100644 bcftools/vcmp.h create mode 100644 bcftools/version.c create mode 100644 bcftools/version.c.pysam.c create mode 100644 bcftools/version.h create mode 100644 benchmark/cython_flagstat.py create mode 100644 benchmark/python_flagstat.py create mode 100755 buildwheels.sh create mode 100644 ci/conda-recipe/build.sh create mode 100644 ci/conda-recipe/meta.yaml create mode 100755 ci/install-CGAT-tools.sh create mode 100644 cy_build.py create mode 100644 doc/Makefile create mode 100644 doc/api.rst create mode 100644 doc/benchmarking.rst create mode 100644 doc/conf.py create mode 100644 doc/developer.rst create mode 100644 doc/faq.rst create mode 100644 doc/glossary.rst create mode 100644 doc/index.rst create mode 100644 doc/installation.rst create mode 100644 doc/make.bat create mode 100644 doc/release.rst create mode 100644 doc/usage.rst create mode 100644 import.py create mode 100644 import/pysam.c create mode 100644 import/pysam.h create mode 100644 linker_tests/link_pre_489/PysamTestModule_link_pre_489/BuildRead.pyx create mode 100644 linker_tests/link_pre_489/PysamTestModule_link_pre_489/__init__.py create mode 100644 linker_tests/link_pre_489/cy_build.py create mode 100644 linker_tests/link_pre_489/setup.py create mode 100644 linker_tests/link_pre_489/tests/test_module.py create mode 100644 linker_tests/link_with_rpath/PysamTestModule_link_with_rpath/BuildRead.pyx create mode 100644 linker_tests/link_with_rpath/PysamTestModule_link_with_rpath/__init__.py create mode 100644 linker_tests/link_with_rpath/setup.py create mode 100644 linker_tests/link_with_rpath/tests/test_module.py create mode 100644 linker_tests/link_without_rpath/PysamTestModule_link_without_rpath/BuildRead.pyx create mode 100644 linker_tests/link_without_rpath/PysamTestModule_link_without_rpath/__init__.py create mode 100644 linker_tests/link_without_rpath/setup.py create mode 100644 linker_tests/link_without_rpath/tests/test_module.py create mode 100644 pysam.py create mode 100644 pysam/Pileup.py create mode 100644 pysam/VCF.py.obsolete create mode 100644 pysam/__init__.py create mode 100644 pysam/alternatives.py.obsolete create mode 100644 pysam/bcftools.py create mode 100644 pysam/cbcftools_util.h create mode 100644 pysam/csamtools_util.h create mode 100644 pysam/htslib_util.c create mode 100644 pysam/htslib_util.h create mode 100644 pysam/include/__init__.py create mode 100644 pysam/libcalignedsegment.pxd create mode 100644 pysam/libcalignedsegment.pyx create mode 100644 pysam/libcalignmentfile.pxd create mode 100644 pysam/libcalignmentfile.pyx create mode 100644 pysam/libcbcf.pxd create mode 100644 pysam/libcbcf.pyx create mode 100644 pysam/libcbcftools.pxd create mode 100644 pysam/libcbcftools.pyx create mode 100644 pysam/libcbgzf.pyx create mode 100644 pysam/libcfaidx.pxd create mode 100644 pysam/libcfaidx.pyx create mode 100644 pysam/libchtslib.pxd create mode 100644 pysam/libchtslib.pyx create mode 100644 pysam/libcsamfile.pxd create mode 100644 pysam/libcsamfile.pyx create mode 100644 pysam/libcsamtools.pxd create mode 100644 pysam/libcsamtools.pyx create mode 100644 pysam/libctabix.pxd create mode 100644 pysam/libctabix.pyx create mode 100644 pysam/libctabixproxies.pxd create mode 100644 pysam/libctabixproxies.pyx create mode 100644 pysam/libcutils.pxd create mode 100644 pysam/libcutils.pyx create mode 100644 pysam/libcvcf.pxd create mode 100644 pysam/libcvcf.pyx create mode 100644 pysam/pysam_stream.h create mode 100644 pysam/pysam_util.c create mode 100644 pysam/pysam_util.h create mode 100644 pysam/samtools.py create mode 100644 pysam/utils.py create mode 100644 pysam/version.py create mode 100644 requirements.txt create mode 100755 run_tests_travis.sh create mode 100644 samtools/LICENSE create mode 100644 samtools/README create mode 100644 samtools/bam.c create mode 100644 samtools/bam.c.pysam.c create mode 100644 samtools/bam.h create mode 100644 samtools/bam2bcf.c create mode 100644 samtools/bam2bcf.c.pysam.c create mode 100644 samtools/bam2bcf.h create mode 100644 samtools/bam2bcf_indel.c create mode 100644 samtools/bam2bcf_indel.c.pysam.c create mode 100644 samtools/bam2depth.c create mode 100644 samtools/bam2depth.c.pysam.c create mode 100644 samtools/bam_addrprg.c create mode 100644 samtools/bam_addrprg.c.pysam.c create mode 100644 samtools/bam_aux.c create mode 100644 samtools/bam_aux.c.pysam.c create mode 100644 samtools/bam_cat.c create mode 100644 samtools/bam_cat.c.pysam.c create mode 100644 samtools/bam_color.c create mode 100644 samtools/bam_color.c.pysam.c create mode 100644 samtools/bam_endian.h create mode 100644 samtools/bam_flags.c create mode 100644 samtools/bam_flags.c.pysam.c create mode 100644 samtools/bam_import.c create mode 100644 samtools/bam_import.c.pysam.c create mode 100644 samtools/bam_index.c create mode 100644 samtools/bam_index.c.pysam.c create mode 100644 samtools/bam_lpileup.c create mode 100644 samtools/bam_lpileup.c.pysam.c create mode 100644 samtools/bam_lpileup.h create mode 100644 samtools/bam_markdup.c create mode 100644 samtools/bam_markdup.c.pysam.c create mode 100644 samtools/bam_mate.c create mode 100644 samtools/bam_mate.c.pysam.c create mode 100644 samtools/bam_md.c create mode 100644 samtools/bam_md.c.pysam.c create mode 100644 samtools/bam_plbuf.c create mode 100644 samtools/bam_plbuf.c.pysam.c create mode 100644 samtools/bam_plbuf.h create mode 100644 samtools/bam_plcmd.c create mode 100644 samtools/bam_plcmd.c.pysam.c create mode 100644 samtools/bam_quickcheck.c create mode 100644 samtools/bam_quickcheck.c.pysam.c create mode 100644 samtools/bam_reheader.c create mode 100644 samtools/bam_reheader.c.pysam.c create mode 100644 samtools/bam_rmdup.c create mode 100644 samtools/bam_rmdup.c.pysam.c create mode 100644 samtools/bam_rmdupse.c create mode 100644 samtools/bam_rmdupse.c.pysam.c create mode 100644 samtools/bam_sort.c create mode 100644 samtools/bam_sort.c.pysam.c create mode 100644 samtools/bam_split.c create mode 100644 samtools/bam_split.c.pysam.c create mode 100644 samtools/bam_stat.c create mode 100644 samtools/bam_stat.c.pysam.c create mode 100644 samtools/bamshuf.c create mode 100644 samtools/bamshuf.c.pysam.c create mode 100644 samtools/bamtk.c create mode 100644 samtools/bamtk.c.pysam.c create mode 100644 samtools/bedcov.c create mode 100644 samtools/bedcov.c.pysam.c create mode 100644 samtools/bedidx.c create mode 100644 samtools/bedidx.c.pysam.c create mode 100644 samtools/bedidx.h create mode 100644 samtools/cut_target.c create mode 100644 samtools/cut_target.c.pysam.c create mode 100644 samtools/dict.c create mode 100644 samtools/dict.c.pysam.c create mode 100644 samtools/faidx.c create mode 100644 samtools/faidx.c.pysam.c create mode 100644 samtools/lz4/LICENSE create mode 100644 samtools/lz4/lz4.c create mode 100644 samtools/lz4/lz4.c.pysam.c create mode 100644 samtools/lz4/lz4.h create mode 100644 samtools/misc/ace2sam.c create mode 100644 samtools/misc/ace2sam.c.pysam.c create mode 100644 samtools/padding.c create mode 100644 samtools/padding.c.pysam.c create mode 100644 samtools/phase.c create mode 100644 samtools/phase.c.pysam.c create mode 100644 samtools/sam.c create mode 100644 samtools/sam.c.pysam.c create mode 100644 samtools/sam.h create mode 100644 samtools/sam_header.c create mode 100644 samtools/sam_header.c.pysam.c create mode 100644 samtools/sam_header.h create mode 100644 samtools/sam_opts.c create mode 100644 samtools/sam_opts.c.pysam.c create mode 100644 samtools/sam_opts.h create mode 100644 samtools/sam_utils.c create mode 100644 samtools/sam_utils.c.pysam.c create mode 100644 samtools/sam_view.c create mode 100644 samtools/sam_view.c.pysam.c create mode 100644 samtools/sample.c create mode 100644 samtools/sample.c.pysam.c create mode 100644 samtools/sample.h create mode 100644 samtools/samtools.h create mode 100644 samtools/samtools.pysam.c create mode 100644 samtools/samtools.pysam.h create mode 100644 samtools/stats.c create mode 100644 samtools/stats.c.pysam.c create mode 100644 samtools/stats_isize.c create mode 100644 samtools/stats_isize.c.pysam.c create mode 100644 samtools/stats_isize.h create mode 100644 samtools/test/merge/test_bam_translate.c create mode 100644 samtools/test/merge/test_bam_translate.c.pysam.c create mode 100644 samtools/test/merge/test_rtrans_build.c create mode 100644 samtools/test/merge/test_rtrans_build.c.pysam.c create mode 100644 samtools/test/merge/test_trans_tbl_init.c create mode 100644 samtools/test/merge/test_trans_tbl_init.c.pysam.c create mode 100644 samtools/test/split/test_count_rg.c create mode 100644 samtools/test/split/test_count_rg.c.pysam.c create mode 100644 samtools/test/split/test_expand_format_string.c create mode 100644 samtools/test/split/test_expand_format_string.c.pysam.c create mode 100644 samtools/test/split/test_filter_header_rg.c create mode 100644 samtools/test/split/test_filter_header_rg.c.pysam.c create mode 100644 samtools/test/split/test_parse_args.c create mode 100644 samtools/test/split/test_parse_args.c.pysam.c create mode 100644 samtools/test/test.c create mode 100644 samtools/test/test.c.pysam.c create mode 100644 samtools/test/test.h create mode 100644 samtools/test/tview/test_get_rg_sample.c create mode 100644 samtools/test/tview/test_get_rg_sample.c.pysam.c create mode 100644 samtools/tmp_file.c create mode 100644 samtools/tmp_file.c.pysam.c create mode 100644 samtools/tmp_file.h create mode 100644 samtools/version.h create mode 100644 samtools/win32/xcurses.h create mode 100644 samtools/win32/zconf.h create mode 100644 samtools/win32/zlib.h create mode 100644 save/example.py create mode 100644 save/pysam_bench.py create mode 100755 save/pysam_test2.6.py create mode 100644 save/pysam_test_stdin.py create mode 100644 save/pysam_testpp.py create mode 100755 save/segfault_tests.py create mode 100644 save/vcf_test.py create mode 100644 setup.cfg create mode 100644 setup.py create mode 100644 tests/00README.txt create mode 100644 tests/AlignedSegment_bench.py create mode 100644 tests/AlignedSegment_test.py create mode 100644 tests/AlignmentFileFetchTestUtils.py create mode 100644 tests/AlignmentFileFetch_bench.py create mode 100644 tests/AlignmentFileHeader_test.py create mode 100644 tests/AlignmentFilePileup_bench.py create mode 100644 tests/AlignmentFilePileup_test.py create mode 100644 tests/AlignmentFile_bench.py create mode 100644 tests/AlignmentFile_test.py create mode 100644 tests/PileupTestUtils.py create mode 100644 tests/StreamFiledescriptors_test.py create mode 100644 tests/TestUtils.py create mode 100644 tests/VariantFileFetchTestUtils.py create mode 100644 tests/VariantFile_bench.py create mode 100644 tests/VariantFile_test.py create mode 100644 tests/_compile_test.pyx create mode 100644 tests/_compile_test.pyxbld create mode 100644 tests/_cython_flagstat.pyx create mode 100644 tests/_cython_flagstat.pyxbld create mode 100644 tests/cbcf_data/Makefile create mode 100644 tests/cbcf_data/example_empty.vcf create mode 100644 tests/cbcf_data/example_vcf40.vcf create mode 100644 tests/cbcf_data/example_vcf42.vcf create mode 100644 tests/cbcf_data/example_vcf42_only_header.vcf create mode 100644 tests/cbcf_data/example_vcf42_withcontigs.vcf create mode 100644 tests/cbcf_data/gnomad.vcf create mode 100644 tests/cbcf_data/gnomad_fixed.vcf create mode 100644 tests/cbcf_data/missing_genotypes.vcf create mode 100644 tests/compile_test.py create mode 100644 tests/faidx_bench.py create mode 100644 tests/faidx_test.py create mode 100644 tests/linking_test.py create mode 100644 tests/pysam_data/Makefile create mode 100644 tests/pysam_data/ex1.bed create mode 100644 tests/pysam_data/ex1.fa create mode 100644 tests/pysam_data/ex1.sam.gz create mode 100644 tests/pysam_data/ex1.vcf.gz create mode 100644 tests/pysam_data/ex1.vcf.gz.tbi create mode 100644 tests/pysam_data/ex10.sam create mode 100644 tests/pysam_data/ex3.sam create mode 100644 tests/pysam_data/ex4.sam create mode 100644 tests/pysam_data/ex5.sam create mode 100644 tests/pysam_data/ex6.sam create mode 100644 tests/pysam_data/ex7.sam.donottest create mode 100644 tests/pysam_data/ex8.sam create mode 100644 tests/pysam_data/ex9_fail.sam create mode 100644 tests/pysam_data/ex9_nofail.sam create mode 100644 tests/pysam_data/ex_spliced.sam create mode 100644 tests/pysam_data/example_aligned_pairs.sam create mode 100644 tests/pysam_data/example_btag.sam create mode 100644 tests/pysam_data/example_empty_header.sam create mode 100644 tests/pysam_data/example_empty_with_header.sam create mode 100644 tests/pysam_data/example_no_seq_in_header.bam create mode 100644 tests/pysam_data/example_unmapped_reads_no_sq.sam create mode 100644 tests/pysam_data/example_user_header.sam create mode 100644 tests/pysam_data/faidx_empty_seq.fq create mode 100644 tests/pysam_data/faidx_ex1.fa create mode 100644 tests/pysam_data/faidx_ex1.fq create mode 100644 tests/pysam_data/issue100.sam create mode 100644 tests/pysam_data/rg_with_tab.sam create mode 100644 tests/pysam_data/softclip.sam create mode 100644 tests/pysam_data/tag_bug.sam create mode 100644 tests/pysam_data/test.gtf create mode 100644 tests/pysam_data/test.gtf.gz create mode 100644 tests/pysam_data/test_mapped_unmapped.sam create mode 100644 tests/pysam_data/test_query_position.sam create mode 100644 tests/pysam_data/test_unaligned.sam create mode 100644 tests/refactoring.pl create mode 100644 tests/refactoring.txt create mode 100644 tests/samtools_test.py create mode 100644 tests/tabix_bench.py create mode 100644 tests/tabix_data/empty.bed.gz create mode 100644 tests/tabix_data/empty.bed.gz.tbi create mode 100644 tests/tabix_data/example.bed create mode 100644 tests/tabix_data/example.bed.gz create mode 100644 tests/tabix_data/example.bed.gz.tbi create mode 100644 tests/tabix_data/example.gff2.gz create mode 100644 tests/tabix_data/example.gff2.gz.tbi create mode 100644 tests/tabix_data/example.gff3.gz create mode 100644 tests/tabix_data/example.gff3.gz.tbi create mode 100644 tests/tabix_data/example.gtf.gz create mode 100644 tests/tabix_data/example.gtf.gz.tbi create mode 100644 tests/tabix_data/example.sam.gz create mode 100644 tests/tabix_data/example.sam.gz.tbi create mode 100644 tests/tabix_data/example.vcf.gz create mode 100644 tests/tabix_data/example.vcf.gz.tbi create mode 100644 tests/tabix_data/example.vcf40 create mode 100644 tests/tabix_data/example_0v23.bed.gz create mode 100644 tests/tabix_data/example_0v23.bed.gz.tbi create mode 100644 tests/tabix_data/example_0v23.vcf.gz create mode 100644 tests/tabix_data/example_0v23.vcf.gz.tbi create mode 100644 tests/tabix_data/example_0v26.bed.gz create mode 100644 tests/tabix_data/example_0v26.bed.gz.tbi create mode 100644 tests/tabix_data/example_0v26.vcf.gz create mode 100644 tests/tabix_data/example_0v26.vcf.gz.tbi create mode 100644 tests/tabix_data/example_badcomments.bed.gz create mode 100644 tests/tabix_data/example_badcomments.bed.gz.tbi create mode 100644 tests/tabix_data/example_badcomments.gtf.gz create mode 100644 tests/tabix_data/example_badcomments.gtf.gz.tbi create mode 100644 tests/tabix_data/example_badcomments.sam.gz create mode 100644 tests/tabix_data/example_badcomments.sam.gz.tbi create mode 100644 tests/tabix_data/example_badcomments.vcf.gz create mode 100644 tests/tabix_data/example_badcomments.vcf.gz.tbi create mode 100644 tests/tabix_data/example_comments.bed.gz create mode 100644 tests/tabix_data/example_comments.bed.gz.tbi create mode 100644 tests/tabix_data/example_comments.gtf.gz create mode 100644 tests/tabix_data/example_comments.gtf.gz.tbi create mode 100644 tests/tabix_data/example_comments.sam.gz create mode 100644 tests/tabix_data/example_comments.sam.gz.tbi create mode 100644 tests/tabix_data/example_comments.vcf.gz create mode 100644 tests/tabix_data/example_comments.vcf.gz.tbi create mode 100644 tests/tabix_data/example_large.bed create mode 100644 tests/tabix_data/example_large.bed.gz create mode 100644 tests/tabix_data/example_large.bed.gz.tbi create mode 100644 tests/tabix_data/example_unicode.vcf create mode 100644 tests/tabix_data/gtf_toofew_fields.gtf.gz create mode 100644 tests/tabix_data/gtf_toomany_fields.gtf.gz create mode 100644 tests/tabix_data/gtf_wrong_fields.gtf.gz create mode 100644 tests/tabix_data/vcf/10.vcf create mode 100644 tests/tabix_data/vcf/11.vcf create mode 100644 tests/tabix_data/vcf/12.vcf create mode 100644 tests/tabix_data/vcf/13.vcf create mode 100644 tests/tabix_data/vcf/15.vcf create mode 100644 tests/tabix_data/vcf/16.vcf create mode 100644 tests/tabix_data/vcf/18.vcf create mode 100644 tests/tabix_data/vcf/2.vcf create mode 100644 tests/tabix_data/vcf/20.vcf create mode 100644 tests/tabix_data/vcf/21.vcf create mode 100644 tests/tabix_data/vcf/22.vcf create mode 100644 tests/tabix_data/vcf/23.vcf create mode 100644 tests/tabix_data/vcf/24.vcf create mode 100644 tests/tabix_data/vcf/3.vcf create mode 100644 tests/tabix_data/vcf/4.vcf create mode 100644 tests/tabix_data/vcf/5.vcf create mode 100644 tests/tabix_data/vcf/6.vcf create mode 100644 tests/tabix_data/vcf/7.vcf create mode 100644 tests/tabix_data/vcf/8.vcf create mode 100644 tests/tabix_data/vcf/9.vcf create mode 100644 tests/tabix_data/vcf/README.txt create mode 100644 tests/tabix_data/vcf/issue85.vcf create mode 100644 tests/tabix_data/vcf/vcf_v42.vcf create mode 100644 tests/tabix_test.py create mode 100644 tests/tabixproxies_test.py create mode 100644 tests/test_samtools_python.py create mode 100644 win32/getopt.c create mode 100644 win32/getopt.h create mode 100644 win32/stdint.h create mode 100644 win32/unistd.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..74fde57 --- /dev/null +++ b/.gitignore @@ -0,0 +1,85 @@ +# editor files +*~ +*# + +# test directory +tests/pysam/ +tests/tmp* +tests/*.bam +tests/*.bai +tests/*.gz +tests/*.c +tests/*.pyxbldc +tests/*.sam +tests/*.fai +tests/pysam_data +tests/cbcf_data +tests/tabix_data + +samtools/config.h +htslib/config.status +htslib/config.h +htslib/config.log +htslib/config.mk +pysam/config.py + +# linking tests +BuildRead.c +# cython files +pysam/libc*.c + +###### Generic python ignores below ###### + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +bin/ +build/ +develop-eggs/ +dist/ +eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg +doc/_build + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +.tox/ +.coverage +.cache +nosetests.xml +coverage.xml + +# Translations +*.mo + +# Mr Developer +.mr.developer.cfg +.project +.pydevproject + +# Rope +.ropeproject + +# Django stuff: +*.log +*.pot + +# Sphinx documentation +docs/_build/ diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..f874a90 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,28 @@ +os: + - linx + - osx + +language: c +sudo: false + +env: + matrix: + - CONDA_PY=2.7 + - CONDA_PY=3.4 + - CONDA_PY=3.5 + - CONDA_PY=3.6 + global: + - PYSAM_LINKING_TEST=1 + +addons: + apt: + packages: + - gcc + - g++ + +script: + - ./run_tests_travis.sh + +notifications: + email: + - andreas.heger@gmail.com diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..4b00536 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,34 @@ +List of contributors: + +Andreas Heger, Tildon Grant Belgard, Florian Finkernagel, Leo +Goodstadt, Martin Goodson all contributed code to pysam. + +Kevin B. Jacobs implemented a Cython wrapper for the VCF/BCF +reader/writer in htslib. + +Gerton Lunter provided a validating VCF parser. + +Marcel Martin implemented python 3 compatibility. +Ben Schiller contributed a Windows compatible clone. + +The sources in the directory samtools are from the samtools project: +http://samtools.sourceforge.net/. All of these are available under the +MIT licence. The attributions for this code are as follows: + +Heng Li from the Sanger Institute wrote most of the initial source code +of SAMtools and various converters. + +Bob Handsaker from the Broad Institute is a major contributor to the +SAM/BAM specification. He designed and implemented the BGZF format, the +underlying indexable compression format for the BAM format. BGZF does +not support arithmetic between file offsets. + +Jue Ruan for the Beijing Genome Institute designed and implemented the +RAZF format, an alternative indexable compression format. RAZF supports +arithmetic between file offsets, at the cost of increased index file +size and the full compatibility with gzip. RAZF is optional and only +used in `faidx' for indexing RAZF compressed fasta files. + +Colin Hercus updated novo2sam.pl to support gapped alignment by +novoalign. + diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..82fa2f4 --- /dev/null +++ b/COPYING @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2008-2009 Genome Research Ltd. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..9636125 --- /dev/null +++ b/INSTALL @@ -0,0 +1,102 @@ +An online version of the installation instructions can be found here: +http://pysam.readthedocs.io/en/latest/installation.html + +================ +Installing pysam +================ + +Pysam can be installed through conda_, pypi_ and from the repository. +The recommended way to install pysam is through conda/bioconda. + +Conda installation +================== + +To install pysam in your current conda_ environment, type:: + + conda config --add channels r + conda config --add channels bioconda + conda install pysam + +This will install pysam from the bioconda_ channel and automatically +makes sure that dependencies are installed. Also, compilation flags +will be set automatically, which will potentially save a lot of +trouble on OS X. + +Pypi installation +================= + +Pysam provides a python interface to the functionality contained +within the htslib_ C library. There are two ways that these two +can be combined, ``builtin`` and ``external``. + +Builtin +------- + +The typical installation will be through pypi_:: + + pip install pysam + +This will compile the ``builtin`` htslib source code within pysam. + +htslib_ can be configured at compilation to turn on additional +features such support using encrypted configurations, enable plugins, +and more. See the htslib_ project for more information on these. + +Pysam will attempt to configure htslib_ to turn on some advanced +features. If these fail, for example due to missing library +dependencies (`libcurl`, `libcrypto`), it will fall back to +conservative defaults. + +Options can be passed to the configure script explicitely by +setting the environment variable `HTSLIB_CONFIGURE_OPTIONS`. +For example:: + + export HTSLIB_CONFIGURE_OPTIONS=--enable-plugins + pip install pysam + +External +-------- + +pysam can be combined with an externally installed htslib_ +library. This is a good way to avoid duplication of libraries. To link +against an externally installed library, set the environment variables +`HTSLIB_LIBRARY_DIR` and `HTSLIB_INCLUDE_DIR` before installing:: + + export HTSLIB_LIBRARY_DIR=/usr/local/lib + export HTSLIB_INCLUDE_DIR=/usr/local/include + pip install pysam + +Note that the location of the file :file:`libhts.so` needs to be known +to the linker once you run pysam, for example by setting the +environment-varirable `LD_LIBRARY_PATH`. + +Note that generally the pysam and htslib version need to be compatible. See +the release notes for more information. + +Installation from repository +============================ + +pysam depends on cython_ to provide the connectivity to the htslib_ C +library. The installation of the source tarball (:file:`.tar.gz`) +contains pre-built C-files and cython needs not be present +during installation. However, when installing from the repository, +cython needs to be installed beforehand. + +To install from repository, type:: + + python setup.py install + +For compilation options, see the section on Pypi installation above. + +Requirements +============ + +Depending on the installation method, requirements for building pysam differ. + +When installing through conda_, dependencies will be resolved by the +package manager. The pip_ installation and installation from source +require a C compiler and its standard libraries as well as all +requirements for building htslib. Htslib requirements are listed in +the htslib/INSTALL file. + +Installing from the repository will require cython_ to be installed. diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..531159d --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,60 @@ +# +# Use .add_data_files and .add_data_dir methods in a appropriate +# setup.py files to include non-python files such as documentation, +# data, etc files to distribution. Avoid using MANIFEST.in for that. +# +include MANIFEST.in +include COPYING +include NEWS +include INSTALL +include KNOWN_BUGS +include THANKS +include cy_build.py +include requirements.txt +include pysam/libc*.pxd +include pysam/libc*.pyx +include pysam/libc*.c +include pysam/*.c +include pysam/*.h + +# exclude tests from pypi tar-ball - they +# require additional data +prune tests/ + +# samtools +include samtools/configure +include samtools/config.mk.in +include samtools/config.h.in +include samtools/*.h +include samtools/*.c +exclude samtools/config.h +include samtools/*/*.h + +# bcftools +include bcftools/*.h +include bcftools/*.c +exclude bcftools/config.h + +# htslib +include htslib/*.c +include htslib/*.h +include htslib/INSTALL +include htslib/NEWS +exclude htslib/config.h +include htslib/Makefile +include htslib/htslib_vars.mk +include htslib/configure +include htslib/config.mk.in +include htslib/config.h.in +include htslib/htslib.pc.in +include htslib/htslib/*.h +include htslib/cram/*.c +include htslib/cram/*.h +include htslib/win/*.c +include htslib/win/*.h +include cy_build.py +include pysam.py +include requirements.txt + +# documentation +include doc/* diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..bca0d0c --- /dev/null +++ b/NEWS @@ -0,0 +1,652 @@ +An online version of the installation instructions can be found here: +http://pysam.readthedocs.io/en/latest/release.html + +============= +Release notes +============= + +Release 0.14.0 +============== + +This release wraps htslib/samtools versions 1.7.0. + +* SAM/BAM/CRAM headers are now managed by a separate AlignmentHeader + class. +* AlignmentFile.header.as_dict() returns an ordered dictionary. +* Use "stop" instead of "end" to ensure consistency to + VariantFile. The end designations have been kept for backwards + compatibility. + +* [#611] and [#293] CRAM repeated fetch now works, each iterator + reloads index if multiple_iterators=True +* [#608] pysam now wraps htslib 1.7 and samtools 1.7. +* [#580] reference_name and next_reference_name can now be set to "*" + (will be converted to None to indicate an unmapped location) +* [#302] providing no coordinate to count_coverage will not count from + start/end of contig. +* [#325] @SQ records will be automatically added to header if they are + absent from text section of header. +* [#529] add get_forward_sequence() and get_forward_qualities() + methods +* [#577] add from_string() and to_dict()/from_dict() methods to + AlignedSegment. Rename tostring() to to_string() throughout for + consistency +* [#589] return None from build_alignment_sequence if no MD tag is set +* [#528] add PileupColumn.__len__ method + +Backwards incompatible changes: + +* AlignmentFile.header now returns an AlignmentHeader object. Use + AlignmentFile.header.to_dict() to get the dictionary as + previously. Most dictionary accessor methods (keys(), values(), + __getitem__, ...) have been implemented to ensure some level of + backwards compatibility when only reading. + + The rationale for this change is to have consistency between + AlignmentFile and VariantFile. + +* AlignmentFile and FastaFile now raise IOError instead of OSError + +Medium term we plan to have a 1.0 release. The pysam +interface has grown over the years and the API is cluttered with +deprecated names (Samfile, getrname(), gettid(), ...). To work towards +this, the next release (0.15.0) will yield DeprecationWarnings +for any parts of the API that are considered obsolete and will not be +in 1.0. Once 1.0 has been reached, we will use semantic versioning. + +Release 0.13.0 +=============== + +This release wraps htslib/samtools/bcftools versions 1.6.0 and +contains a series of bugfixes. + +* [#544] reading header from remote TabixFiles now works. +* [#531] add missing tag types H and A. A python float will now be + added as 'f' type instead of 'd' type. +* [#543] use FastaFile instead of Fastafile in pileup. +* [#546] set is_modified flag in setAttribute so updated attributes + are output. +* [#537] allow tabix index files to be created in a custom location. +* [#530] add get_index_statistics() method + +Release 0.12.0.1 +================ + +Bugfix release to solve compilation issue due to missinge +bcftools/config.h file. + +Release 0.12.0 +============== + +This release wraps htslib/samtools/bcftools versions 1.5.0 and +contains a series of bugfixes. + +* [#473] A new FastxRecord class that can be instantiated from class and + modified in-place. Replaces PersistentFastqProxy. +* [#521] In AligmentFile, Simplify file detection logic and allow remote index files + * Removed attempts to guess data and index file names; this is magic left + to htslib. + * Removed file existence check prior to opening files with htslib + * Better error checking after opening files that raise the appropriate + error (IOError for when errno is set, ValueError otherwise for backward + compatibility). + * Report IO errors when loading an index by name. + * Allow remote indices (tested using S3 signed URLs). + * Document filepath_index and make it an alias for index_filename. + * Added a require_index parameter to AlignmentFile +* [#526] handle unset ref when creating new records +* [#513] fix bcf_translate to skip deleted FORMAT fields to avoid + segfaults +* [#516] expose IO errors via IOError exceptions +* [#487] add tabix line_skip, remove 'pileup' preset +* add FastxRecord, replaces PersistentFastqProxy (still present for + backwards compatibility) +* [#496] upgrade to htslib/samtools/bcftools versions 1.5 +* add start/stop to AlignmentFile.fetch() to be consistent with + VariantFile.fetch(). "end" is kept for backwards compatibility. +* [#512] add get_index_statistics() method to AlignmentFile. + +Upcoming changes: + +In the next release we are plannig to separate the header information +from AlignmentFile into a separate class AlignmentHeader. This layout +is similar to VariantFile/VariantHeader. With this change we will +ensure that an AlignedSegment record will be linked to a header so +that chromosome names can be automatically translated from the numeric +representation. As a consequence, the way new AlignedSegment records +are created will need to change as the constructor requires a header:: + + header = pysam.AlignmentHeader( + reference_names=["chr1", "chr2"], + reference_lengths=[1000, 1000]) + + read = pysam.AlignedSegment(header) + +This will affect all code that instantiates AlignedSegment objects +directly. We have not yet merged to allow users to provide feed-back. +The pull-request is here: https://github.com/pysam-developers/pysam/pull/518 +Please comment on github. + +Release 0.11.2.2 +================ + +Bugfix release to address two issues: + +* Changes in 0.11.2.1 broke the GTF/GFF3 parser. Corrected and + more tests have been added. +* [#479] Correct VariantRecord edge cases described in issue + +Release 0.11.2.1 +================ + +Release to fix release tar-ball containing 0.11.1 pre-compiled +C-files. + +Release 0.11.2 +============== + +This release wraps htslib/samtools/bcfools versions 1.4.1 in response +to a security fix in these libraries. Additionaly the following +issues have been fixed: + +* [#452] add GFF3 support for tabix parsers +* [#461] Multiple fixes related to VariantRecordInfo and handling of INFO/END +* [#447] limit query name to 251 characters (only partially addresses issue) + +VariantFile and related object fixes + +* Restore VariantFile.\_\_dealloc\_\_ +* Correct handling of bcf_str_missing in bcf_array_to_object and + bcf_object_to_array +* Added update() and pop() methods to some dict-like proxy objects +* scalar INFO entries could not be set again after being deleted +* VariantRecordInfo.__delitem__ now allows unset flags to be deleted without + raising a KeyError +* Multiple other fixes for VariantRecordInfo methods +* INFO/END is now accessible only via VariantRecord.stop and + VariantRecord.rlen. Even if present behind the scenes, it is no longer + accessible via VariantRecordInfo. +* Add argument to issue a warning instead of an exception if input appears + to be truncated + +Other features and fixes: + +* Make AlignmentFile \_\_dealloc\_\_ and close more + stringent +* Add argument AlignmentFile to issue a warning instead of an + exception if input appears to be truncated + +Release 0.11.1 +============== + +Bugfix release + +* [#440] add deprecated 'always' option to infer_query_length for backwards compatibility. + +Release 0.11.0 +============== + +This release wraps the latest versions of htslib/samtools/bcftools and +implements a few bugfixes. + +* [#413] Wrap HTSlib/Samtools/BCFtools 1.4 +* [#422] Fix missing pysam.sort.usage() message +* [#411] Fix BGZfile initialization bug +* [#412] Add seek support for BGZFile +* [#395] Make BGZfile iterable +* [#433] Correct getQueryEnd +* [#419] Export SAM enums such as pysam.CMATCH +* [#415] Fix access by tid in AlignmentFile.fetch() +* [#405] Writing SAM now outputs a header by default. +* [#332] split infer_query_length(always) into infer_query_length and infer_read_length + +Release 0.10.0 +============== + +This release implements further functionality in the VariantFile API +and includes several bugfixes: + +* treat special case -c option in samtools view outputs to stdout even + if -o given, fixes #315 +* permit reading BAM files with CSI index, closes #370 +* raise Error if query name exceeds maximum length, fixes #373 +* new method to compute hash value for AlignedSegment +* AlignmentFile, VariantFile and TabixFile all inherit from HTSFile +* Avoid segfault by detecting out of range reference_id and + next_reference in AlignedSegment.tostring +* Issue #355: Implement streams using file descriptors for VariantFile +* upgrade to htslib 1.3.2 +* fix compilation with musl libc +* Issue #316, #360: Rename all Cython modules to have lib as a prefix +* Issue #332, hardclipped bases in cigar included by + pysam.AlignedSegment.infer_query_length() +* Added support for Python 3.6 filename encoding protocol +* Issue #371, fix incorrect parsing of scalar INFO and FORMAT fields in VariantRecord +* Issue #331, fix failure in VariantFile.reset() method +* Issue #314, add VariantHeader.new_record(), VariantFile.new_record() and + VariantRecord.copy() methods to create new VariantRecord objects +* Added VariantRecordFilter.add() method to allow setting new VariantRecord filters +* Preliminary (potentially unsafe) support for removing and altering header metadata +* Many minor fixes and improvements to VariantFile and related objects + +Please note that all internal cython extensions now have a lib prefix +to facilitate linking against pysam extension modules. Any user cython +extensions using cimport to import pysam definitions will need +changes, for example:: + + cimport pysam.csamtools + +will become:: + + cimport pysam.libcamtools + +Release 0.9.1 +============= + +This is a bugfix release addressing some installation problems +in pysam 0.9.0, in particular: + +* patch included htslib to work with older libcurl versions, fixes #262. +* do not require cython for python 3 install, fixes #260 +* FastaFile does not accept filepath_index any more, see #270 +* add AlignedSegment.get_cigar_stats method. +* py3 bugfix in VariantFile.subset_samples, fixes #272 +* add missing sysconfig import, fixes #278 +* do not redirect stdout, but instead write to a separately + created file. This should resolve issues when pysam is used + in notebooks or other environments that redirect stdout. +* wrap htslib-1.3.1, samtools-1.3.1 and bcftools-1.3.1 +* use bgzf throughout instead of gzip +* allow specifying a fasta reference for CRAM file when opening + for both read and write, fixes #280 + +Release 0.9.0 +============= + +Overview +-------- + +The 0.9.0 release upgrades htslib to htslib 1.3 and numerous other +enchancements and bugfixes. See below for a detailed list. + +`Htslib 1.3 `_ +comes with additional capabilities for remote file access which depend +on the presence of optional system libraries. As a consequence, the +installation script :file:`setup.py` has become more complex. For an +overview, see :ref:`installation`. We have tested installation on +linux and OS X, but could not capture all variations. It is possible +that a 0.9.1 release might follow soon addressing installation issues. + +The :py:class:`~.pysam.VariantFile` class provides access to +:term:`vcf` and :term:`bcf` formatted files. The class is certainly +usable and interface is reaching completion, but the API and the +functionality is subject to change. + +Detailed release notes +---------------------- + +* upgrade to htslib 1.3 +* python 3 compatibility tested throughout. +* added a first set of bcftools commands in the pysam.bcftools + submodule. +* samtools commands are now in the pysam.samtools module. For + backwards compatibility they are still imported into the pysam + namespace. +* samtools/bcftools return stdout as a single (byte) string. As output + can be binary (VCF.gz, BAM) this is necessary to ensure py2/py3 + compatibility. To replicate the previous behaviour in py2.7, use:: + + pysam.samtools.view(self.filename).splitlines(True) + +* get_tags() returns the tag type as a character, not an integer (#214) +* TabixFile now raises ValueError on indices created by tabix <1.0 (#206) +* improve OSX installation and develop mode +* FastxIterator now handles empty sequences (#204) +* TabixFile.isremote is not TabixFile.is_remote in line with AlignmentFile +* AlignmentFile.count() has extra optional argument read_callback +* setup.py has been changed to: + * install a single builtin htslib library. Previously, each pysam + module contained its own version. This reduces compilation time + and code bloat. + * run configure for the builtin htslib library in order to detect + optional libraries such as libcurl. Configure behaviour can be + controlled by setting the environmet variable + HTSLIB_CONFIGURE_OPTIONS. +* get_reference_sequence() now returns the reference sequence and not + something looking like it. This bug had effects on + get_aligned_pairs(with_seq=True), see #225. If you have relied on on + get_aligned_pairs(with_seq=True) in pysam-0.8.4, please check your + results. +* improved autodetection of file formats in AlignmentFile and VariantFile. + +Release 0.8.4 +============= + +This release contains numerous bugfixes and a first implementation of +a pythonic interface to VCF/BCF files. Note that this code is still +incomplete and preliminary, but does offer a nearly complete immutable +Pythonic interface to VCF/BCF metadata and data with reading and +writing capability. + +Potential isses when upgrading from v0.8.3: + +* binary tags are now returned as python arrays + +* renamed several methods for pep8 compatibility, old names still retained for + backwards compatibility, but should be considered deprecated. + * gettid() is now get_tid() + * getrname() is now get_reference_name() + * parseRegion() is now parse_region() + +* some methods have changed for pep8 compatibility without the old + names being present: + * fromQualityString() is now qualitystring_to_array() + * toQualityString() is now qualities_to_qualitystring() + +* faidx now returns strings and not binary strings in py3. + +* The cython components have been broken up into smaller files with + more specific content. This will affect users using the cython + interfaces. + +Edited list of commit log changes: + +* fixes AlignmentFile.check_index to return True +* add RG/PM header tag - closes #179 +* add with_seq option to get_aligned_pairs +* use char * inside reconsituteReferenceSequence +* add soft clipping for get_reference_sequence +* add get_reference_sequence +* queryEnd now computes length from cigar string if no sequence present, closes #176 +* tolerate missing space at end of gtf files, closes #162 +* do not raise Error when receiving output on stderr +* add docu about fetching without index, closes #170 +* FastaFile and FastxFile now return strings in python3, closes #173 +* py3 compat: relative -> absolute imports. +* add reference_name and next_reference_name attributes to AlignedSegment +* add function signatures to cvcf cython. Added note about other VCF code. +* add context manager functions to FastaFile +* add reference_name and next_reference_name attributes to AlignedSegment +* PileupColumn also gets a reference_name attribute. +* add context manager functions to FastaFile +* TabixFile.header for remote files raises AttributeError, fixes #157 +* add context manager interface to TabixFile, closes #165 +* change ctypedef enum to typedef enum for cython 0.23 +* add function signatures to cvcf cython, also added note about other VCF code +* remove exception for custom upper-case header record tags. +* rename VALID_HEADER_FIELDS to KNOWN_HEADER_FIELDS +* fix header record tag parsing for custom tags. +* use cython.str in count_coverage, fixes #141 +* avoid maketrans (issues with python3) +* refactoring: AlignedSegment now in separate module +* do not execute remote tests if URL not available +* fix the unmapped count, incl reads with no SQ group +* add raw output to tags +* added write access for binary tags +* bugfix in call to resize +* implemented writing of binary tags from arrays +* implemented convert_binary_tag to use arrays +* add special cases for reads that are unmapped or whose mates are unmapped. +* rename TabProxies to ctabixproxies +* remove underscores from utility functions +* move utility methods into cutils +* remove callback argument to fetch - closes #128 +* avoid calling close in dealloc +* add unit tests for File object opening +* change AlignmentFile.open to filepath_or_object +* implement copy.copy, close #65 +* add chaching of array attributes in AlignedSegment, closes #121 +* add export of Fastafile +* remove superfluous pysam_dispatch +* use persist option in FastqFile +* get_tag: expose tag type if requested with `with_value_type` +* fix to allow reading vcf record info via tabix-based vcf reader +* add pFastqProxy and pFastqFile objects to make it possible to work with multiple fastq records per file handle, unlike FastqProxy/FastqFile. +* release GIL around htslib IO operations +* More work on read/write support, API improvements +* add `phased` property on `VariantRecordSample` +* add mutable properties to VariantRecord +* BCF fixes and start of read/write support +* VariantHeaderRecord objects now act like mappings for attributes. +* add VariantHeader.alts dict from alt ID->Record. +* Bug fix to strong representation of structured header records. +* VariantHeader is now mutable + + +Release 0.8.3 +============= + +* samtools command now accept the "catch_stdout" option. + +* get_aligned_pairs now works for soft-clipped reads. + +* query_position is now None when a PileupRead is not aligned + to a particular position. + +* AlignedSegments are now comparable and hashable. + +Release 0.8.2.1 +=============== + +* Installation bugfix release. + +Release 0.8.2 +============= + +* Pysam now wraps htslib 1.2.1 and samtools version 1.2. + +* Added CRAM file support to pysam. + +* New alignment info interface. + * opt() and setTag are deprecated, use get_tag() and set_tag() + instead. + * added has_tag() + * tags is deprecated, use get_tags() and set_tags() instead. + +* FastqFile is now FastxFile to reflect that the latter permits + iteration over both fastq- and fasta-formatted files. + +* A Cython wrapper for htslib VCF/BCF reader/writer. The wrapper + provides a nearly complete Pythonic interface to VCF/BCF metadata + with reading and writing capability. However, the interface is still + incomplete and preliminary and lacks capability to mutate the + resulting data. + +Release 0.8.1 +============= + +* Pysam now wraps htslib and samtools versions 1.1. + +* Bugfixes, most notable: + * issue #43: uncompressed BAM output + * issue #42: skip tests requiring network if none available + * issue #19: multiple iterators can now be made to work on the same tabix file + * issue #24: All strings returned from/passed to the pysam API are now unicode in python 3 + * issue #5: type guessing for lists of integers fixed + +* API changes for consistency. The old API is still present, + but deprecated. + In particular: + + * Tabixfile -> TabixFile + * Fastafile -> FastaFile + * Fastqfile -> FastqFile + * Samfile -> AlignmentFile + * AlignedRead -> AlignedSegment + * qname -> query_name + * tid -> reference_id + * pos -> reference_start + * mapq -> mapping_quality + * rnext -> next_reference_id + * pnext -> next_reference_start + * cigar -> cigartuples + * cigarstring -> cigarstring + * tlen -> template_length + * seq -> query_sequence + * qual -> query_qualities, now returns array + * qqual -> query_alignment_qualities, now returns array + * tags -> tags + * alen -> reference_length, reference is always "alignment", so removed + * aend -> reference_end + * rlen -> query_length + * query -> query_alignment_sequence + * qstart -> query_alignment_start + * qend -> query_alignment_end + * qlen -> query_alignment_length + * mrnm -> next_reference_id + * mpos -> next_reference_start + * rname -> reference_id + * isize -> template_length + * blocks -> get_blocks() + * aligned_pairs -> get_aligned_pairs() + * inferred_length -> infer_query_length() + * positions -> get_reference_positions() + * overlap() -> get_overlap() + + * All strings are now passed to or received from the pysam API + as strings, no more bytes. + +Other changes: + * AlignmentFile.fetch(reopen) option is now multiple_iterators. The + default changed to not reopen a file unless requested by the user. + * FastaFile.getReferenceLength is now FastaFile.get_reference_length + +Backwards incompatible changes + +* Empty cigarstring now returns None (intstead of '') +* Empty cigar now returns None (instead of []) +* When using the extension classes in cython modules, AlignedRead + needs to be substituted with AlignedSegment. +* fancy_str() has been removed +* qual, qqual now return arrays + +Release 0.8.0 +============= + +* Disabled features + * IteratorColumn.setMask() disabled as htslib does not implement + this functionality? + +* Not implemented yet: + * reading SAM files without header + +Tabix files between version 0.7.8 and 0.8.0 are +not compatible and need to be re-indexed. + +While version 0.7.8 and 0.8.0 should be mostly +compatible, there are some notable exceptions: + +* tabix iterators will fail if there are comments + in the middle or the end of a file. + +* tabix raises always ValueError for invalid intervals. + Previously, different types of errors were raised + (KeyError, IndexError, ValueError) depending on + the type of invalid intervals (missing chromosome, + out-of-range, malformatted interval). + + +Release 0.7.8 +============= + +* added AlignedRead.setTag method +* added AlignedRead.blocks +* unsetting CIGAR strings is now possible +* empty CIGAR string returns empty list +* added reopen flag to Samfile.fetch() +* various bugfixes + +Release 0.7.7 +============= + +* added Fastafile.references, .nreferences and .lengths +* tabix_iterator now uses kseq.h for python 2.7 + +Release 0.7.6 +============= + +* added inferred_length property +* issue 122: MACOSX getline missing, now it works? +* seq and qual can be set None +* added Fastqfile + +Release 0.7.5 +============= + +* switch to samtools 0.1.19 +* issue 122: MACOSX getline missing +* issue 130: clean up tempfiles +* various other bugfixes + +Release 0.7.4 +============= + +* further bugfixes to setup.py and package layout + +Release 0.7.3 +============= + +* further bugfixes to setup.py +* upgraded distribute_setup.py to 0.6.34 + +Release 0.7.2 +============= + +* bugfix in installer - failed when cython not present +* changed installation locations of shared libraries + +Release 0.7.1 +============= + +* bugfix: missing PP tag PG records in header +* added pre-built .c files to distribution + +Release 0.7 +=========== + +* switch to tabix 0.2.6 +* added cigarstring field +* python3 compatibility +* added B tag handling +* added check_sq and check_header options to Samfile.__init__ +* added lazy GTF parsing to tabix +* reworked support for VCF format parsing +* bugfixes + +Release 0.6 +=========== + +* switch to samtools 0.1.18 +* various bugfixes +* removed references to deprecated 'samtools pileup' functionality +* AlignedRead.tags now returns an empty list if there are no tags. +* added pnext, rnext and tlen + +Release 0.5 +=========== + +* switch to samtools 0.1.16 and tabix 0.2.5 +* improved tabix parsing, added vcf support +* re-organized code to permit linking against pysam +* various bugfixes +* added Samfile.positions and Samfile.overlap + +Release 0.4 +=========== + +* switch to samtools 0.1.12a and tabix 0.2.3 +* added snp and indel calling. +* switch from pyrex to cython +* changed handling of samtools stderr +* various bugfixes +* added Samfile.count and Samfile.mate +* deprecated AlignedRead.rname, added AlignedRead.tid + +Release 0.3 +=========== + +* switch to samtools 0.1.8 +* added support for tabix files +* numerous bugfixes including +* permit simultaneous iterators on the same file +* working access to remote files diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..eb065f0 --- /dev/null +++ b/README.rst @@ -0,0 +1,50 @@ +===== +Pysam +===== + +|build-status| |docs| + +Pysam is a python module for reading and manipulating files in the +SAM/BAM format. The SAM/BAM format is a way to store efficiently large +numbers of alignments (`Li 2009`_), such as those routinely created by +next-generation sequencing methods. + +Pysam is a lightweight wrapper of the samtools_ C-API. Pysam also +includes an interface for tabix_. + +If you are using the conda packaging manager (e.g. miniconda or anaconda), +you can install pysam from the `bioconda channel `_:: + + conda config --add channels r + conda config --add channels bioconda + conda install pysam + +Installation through bioconda is the recommended way to install pysam +as it resolves non-python dependencies and uses pre-configured +compilation options. Especially for OS X this will potentially save a +lot of trouble. + +Pysam is available through `pypi +`_. To install, type:: + + pip install pysam + +Pysam documentation is available through https://readthedocs.org/ from +`here `_ + +Questions and comments are very welcome and should be sent to the +`pysam user group `_ + +.. _samtools: http://samtools.sourceforge.net/ +.. _tabix: http://samtools.sourceforge.net/tabix.shtml +.. _Li 2009: http://www.ncbi.nlm.nih.gov/pubmed/19505943 + +.. |build-status| image:: https://travis-ci.org/pysam-developers/pysam.svg + :alt: build status + :scale: 100% + :target: https://travis-ci.org/pysam-developers/pysam + +.. |docs| image:: https://readthedocs.org/projects/pysam/badge/?version=latest + :alt: Documentation Status + :scale: 100% + :target: https://pysam.readthedocs.org/en/latest/?badge=latest diff --git a/bcftools/HMM.c b/bcftools/HMM.c new file mode 100644 index 0000000..70ad8d6 --- /dev/null +++ b/bcftools/HMM.c @@ -0,0 +1,509 @@ +/* The MIT License + + Copyright (c) 2014-2015 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ + +#include +#include +#include +#include +#include +#include "HMM.h" + +typedef struct +{ + int nstates; // number of hmm's states + uint32_t snap_at_pos; // snapshot at this position, 0 when inactive + double *vit_prob; // viterbi probabilities, NULL for uniform probs + double *fwd_prob; // transition probabilities + double *bwd_prob; // transition probabilities +} +snapshot_t; + +struct _hmm_t +{ + int nstates; // number of states + + double *vprob, *vprob_tmp; // viterbi probs [nstates] + uint8_t *vpath; // viterbi path [nstates*nvpath] + double *bwd, *bwd_tmp; // bwd probs [nstates] + double *fwd; // fwd probs [nstates*(nfwd+1)] + int nvpath, nfwd; + + int ntprob_arr; // number of pre-calculated tprob matrices + double *curr_tprob, *tmp; // Temporary arrays; curr_tprob is short lived, valid only for + // one site (that is, one step of Viterbi algorithm) + double *tprob_arr; // Array of transition matrices, precalculated to ntprob_arr + // positions. The first matrix is the initial tprob matrix + // set by hmm_init() or hmm_set_tprob() + set_tprob_f set_tprob; // Optional user function to set / modify transition probabilities + // at each site (one step of Viterbi algorithm) + void *set_tprob_data; + snapshot_t init, state; // Initial and current state probs. Set state from snapshot if prev_snap_pos!=0 or from init otherwise + snapshot_t *snapshot; // snapshot->snap_at_pos .. request a snapshot at this position + // hmm->state.snap_at_pos .. the current state comes from snapshot made at this position +}; + +uint8_t *hmm_get_viterbi_path(hmm_t *hmm) { return hmm->vpath; } +double *hmm_get_tprob(hmm_t *hmm) { return hmm->tprob_arr; } +int hmm_get_nstates(hmm_t *hmm) { return hmm->nstates; } +double *hmm_get_fwd_bwd_prob(hmm_t *hmm) { return hmm->fwd; } + +static inline void multiply_matrix(int n, double *a, double *b, double *dst, double *tmp) +{ + double *out = dst; + if ( a==dst || b==dst ) + out = tmp; + + int i,j,k; + for (i=0; iinit.snap_at_pos = hmm->state.snap_at_pos = 0; + + if ( !hmm->init.vit_prob ) + hmm->init.vit_prob = (double*) malloc(sizeof(double)*hmm->nstates); + if ( !hmm->init.fwd_prob ) + hmm->init.fwd_prob = (double*) malloc(sizeof(double)*hmm->nstates); + if ( !hmm->init.bwd_prob ) + hmm->init.bwd_prob = (double*) malloc(sizeof(double)*hmm->nstates); + + if ( !hmm->state.vit_prob ) + hmm->state.vit_prob = (double*) malloc(sizeof(double)*hmm->nstates); + if ( !hmm->state.fwd_prob ) + hmm->state.fwd_prob = (double*) malloc(sizeof(double)*hmm->nstates); + if ( !hmm->state.bwd_prob ) + hmm->state.bwd_prob = (double*) malloc(sizeof(double)*hmm->nstates); + + int i; + if ( probs ) + { + memcpy(hmm->init.vit_prob,probs,sizeof(double)*hmm->nstates); + double sum = 0; + for (i=0; instates; i++) sum += hmm->init.vit_prob[i]; + for (i=0; instates; i++) hmm->init.vit_prob[i] /= sum; + } + else + for (i=0; instates; i++) hmm->init.vit_prob[i] = 1./hmm->nstates; + + memcpy(hmm->init.fwd_prob,hmm->init.vit_prob,sizeof(double)*hmm->nstates); // these remain unchanged + memcpy(hmm->init.bwd_prob,hmm->init.vit_prob,sizeof(double)*hmm->nstates); + memcpy(hmm->state.vit_prob,hmm->init.vit_prob,sizeof(double)*hmm->nstates); // can be changed by snapshotting + memcpy(hmm->state.fwd_prob,hmm->init.fwd_prob,sizeof(double)*hmm->nstates); + memcpy(hmm->state.bwd_prob,hmm->init.bwd_prob,sizeof(double)*hmm->nstates); +} +hmm_t *hmm_init(int nstates, double *tprob, int ntprob) +{ + hmm_t *hmm = (hmm_t*) calloc(1,sizeof(hmm_t)); + hmm->nstates = nstates; + hmm->curr_tprob = (double*) malloc(sizeof(double)*nstates*nstates); + hmm->tmp = (double*) malloc(sizeof(double)*nstates*nstates); + hmm_set_tprob(hmm, tprob, ntprob); + hmm_init_states(hmm, NULL); + return hmm; +} + +void *hmm_snapshot(hmm_t *hmm, void *_snapshot, uint32_t pos) +{ + snapshot_t *snapshot = (snapshot_t*) _snapshot; + if ( snapshot && snapshot->nstates!=hmm->nstates ) + { + free(snapshot); + snapshot = NULL; + } + if ( !snapshot ) + { + // Allocate the snapshot as a single memory block so that it can be + // free()-ed by the user. So make sure the arrays are aligned.. + size_t str_size = sizeof(snapshot_t); + size_t dbl_size = sizeof(double); + size_t pad_size = (dbl_size - str_size % dbl_size) % dbl_size; + uint8_t *mem = (uint8_t*) malloc(str_size + pad_size + dbl_size*2*hmm->nstates); + snapshot = (snapshot_t*) mem; + snapshot->nstates = hmm->nstates; + snapshot->vit_prob = (double*) (mem + str_size + pad_size); + snapshot->fwd_prob = snapshot->vit_prob + hmm->nstates; + } + snapshot->snap_at_pos = pos; + hmm->snapshot = snapshot; + return snapshot; +} +void hmm_restore(hmm_t *hmm, void *_snapshot) +{ + snapshot_t *snapshot = (snapshot_t*) _snapshot; + if ( !snapshot || !snapshot->snap_at_pos ) + { + hmm->state.snap_at_pos = 0; + memcpy(hmm->state.vit_prob,hmm->init.vit_prob,sizeof(double)*hmm->nstates); + memcpy(hmm->state.fwd_prob,hmm->init.fwd_prob,sizeof(double)*hmm->nstates); + } + else + { + hmm->state.snap_at_pos = snapshot->snap_at_pos; + memcpy(hmm->state.vit_prob,snapshot->vit_prob,sizeof(double)*hmm->nstates); + memcpy(hmm->state.fwd_prob,snapshot->fwd_prob,sizeof(double)*hmm->nstates); + } +} +void hmm_reset(hmm_t *hmm, void *_snapshot) +{ + snapshot_t *snapshot = (snapshot_t*) _snapshot; + if ( snapshot ) snapshot->snap_at_pos = 0; + hmm->state.snap_at_pos = 0; + memcpy(hmm->state.vit_prob,hmm->init.vit_prob,sizeof(double)*hmm->nstates); + memcpy(hmm->state.fwd_prob,hmm->init.fwd_prob,sizeof(double)*hmm->nstates); +} + +void hmm_set_tprob(hmm_t *hmm, double *tprob, int ntprob) +{ + hmm->ntprob_arr = ntprob; + if ( ntprob<=0 ) ntprob = 1; + + if ( !hmm->tprob_arr ) + hmm->tprob_arr = (double*) malloc(sizeof(double)*hmm->nstates*hmm->nstates*ntprob); + + memcpy(hmm->tprob_arr,tprob,sizeof(double)*hmm->nstates*hmm->nstates); + + int i; + for (i=1; instates, hmm->tprob_arr, hmm->tprob_arr+(i-1)*hmm->nstates*hmm->nstates, hmm->tprob_arr+i*hmm->nstates*hmm->nstates, hmm->tmp); +} + +void hmm_set_tprob_func(hmm_t *hmm, set_tprob_f set_tprob, void *data) +{ + hmm->set_tprob = set_tprob; + hmm->set_tprob_data = data; +} + +static void _set_tprob(hmm_t *hmm, int pos_diff) +{ + assert( pos_diff>=0 ); + + int i, n; + + n = hmm->ntprob_arr ? pos_diff % hmm->ntprob_arr : 0; // n-th precalculated matrix + memcpy(hmm->curr_tprob, hmm->tprob_arr+n*hmm->nstates*hmm->nstates, sizeof(*hmm->curr_tprob)*hmm->nstates*hmm->nstates); + + if ( hmm->ntprob_arr > 0 ) + { + n = pos_diff / hmm->ntprob_arr; // number of full blocks to jump + for (i=0; instates, hmm->tprob_arr+(hmm->ntprob_arr-1)*hmm->nstates*hmm->nstates, hmm->curr_tprob, hmm->curr_tprob, hmm->tmp); + } +} + +void hmm_run_viterbi(hmm_t *hmm, int n, double *eprobs, uint32_t *sites) +{ + // Init arrays when run for the first time + if ( hmm->nvpath < n ) + { + hmm->nvpath = n; + hmm->vpath = (uint8_t*) realloc(hmm->vpath, sizeof(uint8_t)*hmm->nvpath*hmm->nstates); + } + if ( !hmm->vprob ) + { + hmm->vprob = (double*) malloc(sizeof(double)*hmm->nstates); + hmm->vprob_tmp = (double*) malloc(sizeof(double)*hmm->nstates); + } + + // Init all states with equal likelihood + int i,j, nstates = hmm->nstates; + memcpy(hmm->vprob, hmm->state.vit_prob, sizeof(*hmm->state.vit_prob)*nstates); + uint32_t prev_pos = hmm->state.snap_at_pos ? hmm->state.snap_at_pos : sites[0]; + + // Run Viterbi + for (i=0; ivpath[i*nstates]; + double *eprob = &eprobs[i*nstates]; + + int pos_diff = sites[i] == prev_pos ? 0 : sites[i] - prev_pos - 1; + _set_tprob(hmm, pos_diff); + if ( hmm->set_tprob ) hmm->set_tprob(hmm, prev_pos, sites[i], hmm->set_tprob_data, hmm->curr_tprob); + prev_pos = sites[i]; + + double vnorm = 0; + for (j=0; jvprob[k] * MAT(hmm->curr_tprob,hmm->nstates,j,k); + if ( vmax < pval ) { vmax = pval; k_vmax = k; } + } + vpath[j] = k_vmax; + hmm->vprob_tmp[j] = vmax * eprob[j]; + vnorm += hmm->vprob_tmp[j]; + } + for (j=0; jvprob_tmp[j] /= vnorm; + double *tmp = hmm->vprob; hmm->vprob = hmm->vprob_tmp; hmm->vprob_tmp = tmp; + + if ( hmm->snapshot && sites[i]==hmm->snapshot->snap_at_pos ) + memcpy(hmm->snapshot->vit_prob, hmm->vprob, sizeof(*hmm->vprob)*nstates); + } + + // Find the most likely state + int iptr = 0; + for (i=1; ivprob[iptr] < hmm->vprob[i] ) iptr = i; + + // Trace back the Viterbi path, we are reusing vpath for storing the states (vpath[i*nstates]) + for (i=n-1; i>=0; i--) + { + assert( iptrvpath[i*nstates + iptr]vpath[i*nstates + iptr]; + hmm->vpath[i*nstates] = iptr; // reusing the array for different purpose here + } +} + +void hmm_run_fwd_bwd(hmm_t *hmm, int n, double *eprobs, uint32_t *sites) +{ + // Init arrays when run for the first time + if ( hmm->nfwd < n ) + { + hmm->nfwd = n; + hmm->fwd = (double*) realloc(hmm->fwd, sizeof(double)*(hmm->nfwd+1)*hmm->nstates); + } + if ( !hmm->bwd ) + { + hmm->bwd = (double*) malloc(sizeof(double)*hmm->nstates); + hmm->bwd_tmp = (double*) malloc(sizeof(double)*hmm->nstates); + } + + + int i,j,k, nstates = hmm->nstates; + memcpy(hmm->fwd, hmm->state.fwd_prob, sizeof(*hmm->state.fwd_prob)*nstates); + memcpy(hmm->bwd, hmm->state.bwd_prob, sizeof(*hmm->state.bwd_prob)*nstates); + uint32_t prev_pos = hmm->state.snap_at_pos ? hmm->state.snap_at_pos : sites[0]; + + // Run fwd + for (i=0; ifwd[i*nstates]; + double *fwd = &hmm->fwd[(i+1)*nstates]; + double *eprob = &eprobs[i*nstates]; + + int pos_diff = sites[i] == prev_pos ? 0 : sites[i] - prev_pos - 1; + + _set_tprob(hmm, pos_diff); + if ( hmm->set_tprob ) hmm->set_tprob(hmm, prev_pos, sites[i], hmm->set_tprob_data, hmm->curr_tprob); + prev_pos = sites[i]; + + double norm = 0; + for (j=0; jcurr_tprob,hmm->nstates,j,k); + fwd[j] = pval * eprob[j]; + norm += fwd[j]; + } + for (j=0; jsnapshot && sites[i]==hmm->snapshot->snap_at_pos ) + memcpy(hmm->snapshot->fwd_prob, fwd, sizeof(*fwd)*nstates); + } + + // Run bwd + double *bwd = hmm->bwd, *bwd_tmp = hmm->bwd_tmp; + prev_pos = sites[n-1]; + for (i=0; ifwd[(n-i)*nstates]; + double *eprob = &eprobs[(n-i-1)*nstates]; + + int pos_diff = sites[n-i-1] == prev_pos ? 0 : prev_pos - sites[n-i-1] - 1; + + _set_tprob(hmm, pos_diff); + if ( hmm->set_tprob ) hmm->set_tprob(hmm, sites[n-i-1], prev_pos, hmm->set_tprob_data, hmm->curr_tprob); + prev_pos = sites[n-i-1]; + + double bwd_norm = 0; + for (j=0; jcurr_tprob,hmm->nstates,k,j); + bwd_tmp[j] = pval; + bwd_norm += pval; + } + double norm = 0; + for (j=0; jnfwd < n ) + { + hmm->nfwd = n; + hmm->fwd = (double*) realloc(hmm->fwd, sizeof(double)*(hmm->nfwd+1)*hmm->nstates); + } + if ( !hmm->bwd ) + { + hmm->bwd = (double*) malloc(sizeof(double)*hmm->nstates); + hmm->bwd_tmp = (double*) malloc(sizeof(double)*hmm->nstates); + } + + // Init all states with equal likelihood + int i,j,k, nstates = hmm->nstates; + memcpy(hmm->fwd, hmm->state.fwd_prob, sizeof(*hmm->state.fwd_prob)*nstates); + memcpy(hmm->bwd, hmm->state.bwd_prob, sizeof(*hmm->state.bwd_prob)*nstates); + uint32_t prev_pos = hmm->state.snap_at_pos ? hmm->state.snap_at_pos : sites[0]; + + // New transition matrix: temporary values + double *tmp_xi = (double*) calloc(nstates*nstates,sizeof(double)); + double *tmp_gamma = (double*) calloc(nstates,sizeof(double)); + double *fwd_bwd = (double*) malloc(sizeof(double)*nstates); + + // Run fwd + for (i=0; ifwd[i*nstates]; + double *fwd = &hmm->fwd[(i+1)*nstates]; + double *eprob = &eprobs[i*nstates]; + + int pos_diff = sites[i] == prev_pos ? 0 : sites[i] - prev_pos - 1; + + _set_tprob(hmm, pos_diff); + if ( hmm->set_tprob ) hmm->set_tprob(hmm, prev_pos, sites[i], hmm->set_tprob_data, hmm->curr_tprob); + prev_pos = sites[i]; + + double norm = 0; + for (j=0; jcurr_tprob,hmm->nstates,j,k); + fwd[j] = pval * eprob[j]; + norm += fwd[j]; + } + for (j=0; jbwd, *bwd_tmp = hmm->bwd_tmp; + prev_pos = sites[n-1]; + for (i=0; ifwd[(n-i)*nstates]; + double *eprob = &eprobs[(n-i-1)*nstates]; + + int pos_diff = sites[n-i-1] == prev_pos ? 0 : prev_pos - sites[n-i-1] - 1; + + _set_tprob(hmm, pos_diff); + if ( hmm->set_tprob ) hmm->set_tprob(hmm, sites[n-i-1], prev_pos, hmm->set_tprob_data, hmm->curr_tprob); + prev_pos = sites[n-i-1]; + + double bwd_norm = 0; + for (j=0; jcurr_tprob,hmm->nstates,k,j); + bwd_tmp[j] = pval; + bwd_norm += pval; + } + double norm = 0; + for (j=0; jtprob_arr,hmm->nstates,k,j)*eprob[k] / norm; + } + } + + for (j=0; jcurr_tprob,nstates,k,j) = MAT(tmp_xi,nstates,k,j) / tmp_gamma[j]; + norm += MAT(hmm->curr_tprob,nstates,k,j); + } + for (k=0; kcurr_tprob,nstates,k,j) /= norm; + } + free(tmp_gamma); + free(tmp_xi); + free(fwd_bwd); + return hmm->curr_tprob; +} + +void hmm_destroy(hmm_t *hmm) +{ + free(hmm->init.vit_prob); + free(hmm->init.fwd_prob); + free(hmm->init.bwd_prob); + free(hmm->state.vit_prob); + free(hmm->state.fwd_prob); + free(hmm->state.bwd_prob); + free(hmm->vprob); + free(hmm->vprob_tmp); + free(hmm->vpath); + free(hmm->curr_tprob); + free(hmm->tmp); + free(hmm->tprob_arr); + free(hmm->fwd); + free(hmm->bwd); + free(hmm->bwd_tmp); + free(hmm); +} + diff --git a/bcftools/HMM.c.pysam.c b/bcftools/HMM.c.pysam.c new file mode 100644 index 0000000..2280c0d --- /dev/null +++ b/bcftools/HMM.c.pysam.c @@ -0,0 +1,511 @@ +#include "bcftools.pysam.h" + +/* The MIT License + + Copyright (c) 2014-2015 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ + +#include +#include +#include +#include +#include +#include "HMM.h" + +typedef struct +{ + int nstates; // number of hmm's states + uint32_t snap_at_pos; // snapshot at this position, 0 when inactive + double *vit_prob; // viterbi probabilities, NULL for uniform probs + double *fwd_prob; // transition probabilities + double *bwd_prob; // transition probabilities +} +snapshot_t; + +struct _hmm_t +{ + int nstates; // number of states + + double *vprob, *vprob_tmp; // viterbi probs [nstates] + uint8_t *vpath; // viterbi path [nstates*nvpath] + double *bwd, *bwd_tmp; // bwd probs [nstates] + double *fwd; // fwd probs [nstates*(nfwd+1)] + int nvpath, nfwd; + + int ntprob_arr; // number of pre-calculated tprob matrices + double *curr_tprob, *tmp; // Temporary arrays; curr_tprob is short lived, valid only for + // one site (that is, one step of Viterbi algorithm) + double *tprob_arr; // Array of transition matrices, precalculated to ntprob_arr + // positions. The first matrix is the initial tprob matrix + // set by hmm_init() or hmm_set_tprob() + set_tprob_f set_tprob; // Optional user function to set / modify transition probabilities + // at each site (one step of Viterbi algorithm) + void *set_tprob_data; + snapshot_t init, state; // Initial and current state probs. Set state from snapshot if prev_snap_pos!=0 or from init otherwise + snapshot_t *snapshot; // snapshot->snap_at_pos .. request a snapshot at this position + // hmm->state.snap_at_pos .. the current state comes from snapshot made at this position +}; + +uint8_t *hmm_get_viterbi_path(hmm_t *hmm) { return hmm->vpath; } +double *hmm_get_tprob(hmm_t *hmm) { return hmm->tprob_arr; } +int hmm_get_nstates(hmm_t *hmm) { return hmm->nstates; } +double *hmm_get_fwd_bwd_prob(hmm_t *hmm) { return hmm->fwd; } + +static inline void multiply_matrix(int n, double *a, double *b, double *dst, double *tmp) +{ + double *out = dst; + if ( a==dst || b==dst ) + out = tmp; + + int i,j,k; + for (i=0; iinit.snap_at_pos = hmm->state.snap_at_pos = 0; + + if ( !hmm->init.vit_prob ) + hmm->init.vit_prob = (double*) malloc(sizeof(double)*hmm->nstates); + if ( !hmm->init.fwd_prob ) + hmm->init.fwd_prob = (double*) malloc(sizeof(double)*hmm->nstates); + if ( !hmm->init.bwd_prob ) + hmm->init.bwd_prob = (double*) malloc(sizeof(double)*hmm->nstates); + + if ( !hmm->state.vit_prob ) + hmm->state.vit_prob = (double*) malloc(sizeof(double)*hmm->nstates); + if ( !hmm->state.fwd_prob ) + hmm->state.fwd_prob = (double*) malloc(sizeof(double)*hmm->nstates); + if ( !hmm->state.bwd_prob ) + hmm->state.bwd_prob = (double*) malloc(sizeof(double)*hmm->nstates); + + int i; + if ( probs ) + { + memcpy(hmm->init.vit_prob,probs,sizeof(double)*hmm->nstates); + double sum = 0; + for (i=0; instates; i++) sum += hmm->init.vit_prob[i]; + for (i=0; instates; i++) hmm->init.vit_prob[i] /= sum; + } + else + for (i=0; instates; i++) hmm->init.vit_prob[i] = 1./hmm->nstates; + + memcpy(hmm->init.fwd_prob,hmm->init.vit_prob,sizeof(double)*hmm->nstates); // these remain unchanged + memcpy(hmm->init.bwd_prob,hmm->init.vit_prob,sizeof(double)*hmm->nstates); + memcpy(hmm->state.vit_prob,hmm->init.vit_prob,sizeof(double)*hmm->nstates); // can be changed by snapshotting + memcpy(hmm->state.fwd_prob,hmm->init.fwd_prob,sizeof(double)*hmm->nstates); + memcpy(hmm->state.bwd_prob,hmm->init.bwd_prob,sizeof(double)*hmm->nstates); +} +hmm_t *hmm_init(int nstates, double *tprob, int ntprob) +{ + hmm_t *hmm = (hmm_t*) calloc(1,sizeof(hmm_t)); + hmm->nstates = nstates; + hmm->curr_tprob = (double*) malloc(sizeof(double)*nstates*nstates); + hmm->tmp = (double*) malloc(sizeof(double)*nstates*nstates); + hmm_set_tprob(hmm, tprob, ntprob); + hmm_init_states(hmm, NULL); + return hmm; +} + +void *hmm_snapshot(hmm_t *hmm, void *_snapshot, uint32_t pos) +{ + snapshot_t *snapshot = (snapshot_t*) _snapshot; + if ( snapshot && snapshot->nstates!=hmm->nstates ) + { + free(snapshot); + snapshot = NULL; + } + if ( !snapshot ) + { + // Allocate the snapshot as a single memory block so that it can be + // free()-ed by the user. So make sure the arrays are aligned.. + size_t str_size = sizeof(snapshot_t); + size_t dbl_size = sizeof(double); + size_t pad_size = (dbl_size - str_size % dbl_size) % dbl_size; + uint8_t *mem = (uint8_t*) malloc(str_size + pad_size + dbl_size*2*hmm->nstates); + snapshot = (snapshot_t*) mem; + snapshot->nstates = hmm->nstates; + snapshot->vit_prob = (double*) (mem + str_size + pad_size); + snapshot->fwd_prob = snapshot->vit_prob + hmm->nstates; + } + snapshot->snap_at_pos = pos; + hmm->snapshot = snapshot; + return snapshot; +} +void hmm_restore(hmm_t *hmm, void *_snapshot) +{ + snapshot_t *snapshot = (snapshot_t*) _snapshot; + if ( !snapshot || !snapshot->snap_at_pos ) + { + hmm->state.snap_at_pos = 0; + memcpy(hmm->state.vit_prob,hmm->init.vit_prob,sizeof(double)*hmm->nstates); + memcpy(hmm->state.fwd_prob,hmm->init.fwd_prob,sizeof(double)*hmm->nstates); + } + else + { + hmm->state.snap_at_pos = snapshot->snap_at_pos; + memcpy(hmm->state.vit_prob,snapshot->vit_prob,sizeof(double)*hmm->nstates); + memcpy(hmm->state.fwd_prob,snapshot->fwd_prob,sizeof(double)*hmm->nstates); + } +} +void hmm_reset(hmm_t *hmm, void *_snapshot) +{ + snapshot_t *snapshot = (snapshot_t*) _snapshot; + if ( snapshot ) snapshot->snap_at_pos = 0; + hmm->state.snap_at_pos = 0; + memcpy(hmm->state.vit_prob,hmm->init.vit_prob,sizeof(double)*hmm->nstates); + memcpy(hmm->state.fwd_prob,hmm->init.fwd_prob,sizeof(double)*hmm->nstates); +} + +void hmm_set_tprob(hmm_t *hmm, double *tprob, int ntprob) +{ + hmm->ntprob_arr = ntprob; + if ( ntprob<=0 ) ntprob = 1; + + if ( !hmm->tprob_arr ) + hmm->tprob_arr = (double*) malloc(sizeof(double)*hmm->nstates*hmm->nstates*ntprob); + + memcpy(hmm->tprob_arr,tprob,sizeof(double)*hmm->nstates*hmm->nstates); + + int i; + for (i=1; instates, hmm->tprob_arr, hmm->tprob_arr+(i-1)*hmm->nstates*hmm->nstates, hmm->tprob_arr+i*hmm->nstates*hmm->nstates, hmm->tmp); +} + +void hmm_set_tprob_func(hmm_t *hmm, set_tprob_f set_tprob, void *data) +{ + hmm->set_tprob = set_tprob; + hmm->set_tprob_data = data; +} + +static void _set_tprob(hmm_t *hmm, int pos_diff) +{ + assert( pos_diff>=0 ); + + int i, n; + + n = hmm->ntprob_arr ? pos_diff % hmm->ntprob_arr : 0; // n-th precalculated matrix + memcpy(hmm->curr_tprob, hmm->tprob_arr+n*hmm->nstates*hmm->nstates, sizeof(*hmm->curr_tprob)*hmm->nstates*hmm->nstates); + + if ( hmm->ntprob_arr > 0 ) + { + n = pos_diff / hmm->ntprob_arr; // number of full blocks to jump + for (i=0; instates, hmm->tprob_arr+(hmm->ntprob_arr-1)*hmm->nstates*hmm->nstates, hmm->curr_tprob, hmm->curr_tprob, hmm->tmp); + } +} + +void hmm_run_viterbi(hmm_t *hmm, int n, double *eprobs, uint32_t *sites) +{ + // Init arrays when run for the first time + if ( hmm->nvpath < n ) + { + hmm->nvpath = n; + hmm->vpath = (uint8_t*) realloc(hmm->vpath, sizeof(uint8_t)*hmm->nvpath*hmm->nstates); + } + if ( !hmm->vprob ) + { + hmm->vprob = (double*) malloc(sizeof(double)*hmm->nstates); + hmm->vprob_tmp = (double*) malloc(sizeof(double)*hmm->nstates); + } + + // Init all states with equal likelihood + int i,j, nstates = hmm->nstates; + memcpy(hmm->vprob, hmm->state.vit_prob, sizeof(*hmm->state.vit_prob)*nstates); + uint32_t prev_pos = hmm->state.snap_at_pos ? hmm->state.snap_at_pos : sites[0]; + + // Run Viterbi + for (i=0; ivpath[i*nstates]; + double *eprob = &eprobs[i*nstates]; + + int pos_diff = sites[i] == prev_pos ? 0 : sites[i] - prev_pos - 1; + _set_tprob(hmm, pos_diff); + if ( hmm->set_tprob ) hmm->set_tprob(hmm, prev_pos, sites[i], hmm->set_tprob_data, hmm->curr_tprob); + prev_pos = sites[i]; + + double vnorm = 0; + for (j=0; jvprob[k] * MAT(hmm->curr_tprob,hmm->nstates,j,k); + if ( vmax < pval ) { vmax = pval; k_vmax = k; } + } + vpath[j] = k_vmax; + hmm->vprob_tmp[j] = vmax * eprob[j]; + vnorm += hmm->vprob_tmp[j]; + } + for (j=0; jvprob_tmp[j] /= vnorm; + double *tmp = hmm->vprob; hmm->vprob = hmm->vprob_tmp; hmm->vprob_tmp = tmp; + + if ( hmm->snapshot && sites[i]==hmm->snapshot->snap_at_pos ) + memcpy(hmm->snapshot->vit_prob, hmm->vprob, sizeof(*hmm->vprob)*nstates); + } + + // Find the most likely state + int iptr = 0; + for (i=1; ivprob[iptr] < hmm->vprob[i] ) iptr = i; + + // Trace back the Viterbi path, we are reusing vpath for storing the states (vpath[i*nstates]) + for (i=n-1; i>=0; i--) + { + assert( iptrvpath[i*nstates + iptr]vpath[i*nstates + iptr]; + hmm->vpath[i*nstates] = iptr; // reusing the array for different purpose here + } +} + +void hmm_run_fwd_bwd(hmm_t *hmm, int n, double *eprobs, uint32_t *sites) +{ + // Init arrays when run for the first time + if ( hmm->nfwd < n ) + { + hmm->nfwd = n; + hmm->fwd = (double*) realloc(hmm->fwd, sizeof(double)*(hmm->nfwd+1)*hmm->nstates); + } + if ( !hmm->bwd ) + { + hmm->bwd = (double*) malloc(sizeof(double)*hmm->nstates); + hmm->bwd_tmp = (double*) malloc(sizeof(double)*hmm->nstates); + } + + + int i,j,k, nstates = hmm->nstates; + memcpy(hmm->fwd, hmm->state.fwd_prob, sizeof(*hmm->state.fwd_prob)*nstates); + memcpy(hmm->bwd, hmm->state.bwd_prob, sizeof(*hmm->state.bwd_prob)*nstates); + uint32_t prev_pos = hmm->state.snap_at_pos ? hmm->state.snap_at_pos : sites[0]; + + // Run fwd + for (i=0; ifwd[i*nstates]; + double *fwd = &hmm->fwd[(i+1)*nstates]; + double *eprob = &eprobs[i*nstates]; + + int pos_diff = sites[i] == prev_pos ? 0 : sites[i] - prev_pos - 1; + + _set_tprob(hmm, pos_diff); + if ( hmm->set_tprob ) hmm->set_tprob(hmm, prev_pos, sites[i], hmm->set_tprob_data, hmm->curr_tprob); + prev_pos = sites[i]; + + double norm = 0; + for (j=0; jcurr_tprob,hmm->nstates,j,k); + fwd[j] = pval * eprob[j]; + norm += fwd[j]; + } + for (j=0; jsnapshot && sites[i]==hmm->snapshot->snap_at_pos ) + memcpy(hmm->snapshot->fwd_prob, fwd, sizeof(*fwd)*nstates); + } + + // Run bwd + double *bwd = hmm->bwd, *bwd_tmp = hmm->bwd_tmp; + prev_pos = sites[n-1]; + for (i=0; ifwd[(n-i)*nstates]; + double *eprob = &eprobs[(n-i-1)*nstates]; + + int pos_diff = sites[n-i-1] == prev_pos ? 0 : prev_pos - sites[n-i-1] - 1; + + _set_tprob(hmm, pos_diff); + if ( hmm->set_tprob ) hmm->set_tprob(hmm, sites[n-i-1], prev_pos, hmm->set_tprob_data, hmm->curr_tprob); + prev_pos = sites[n-i-1]; + + double bwd_norm = 0; + for (j=0; jcurr_tprob,hmm->nstates,k,j); + bwd_tmp[j] = pval; + bwd_norm += pval; + } + double norm = 0; + for (j=0; jnfwd < n ) + { + hmm->nfwd = n; + hmm->fwd = (double*) realloc(hmm->fwd, sizeof(double)*(hmm->nfwd+1)*hmm->nstates); + } + if ( !hmm->bwd ) + { + hmm->bwd = (double*) malloc(sizeof(double)*hmm->nstates); + hmm->bwd_tmp = (double*) malloc(sizeof(double)*hmm->nstates); + } + + // Init all states with equal likelihood + int i,j,k, nstates = hmm->nstates; + memcpy(hmm->fwd, hmm->state.fwd_prob, sizeof(*hmm->state.fwd_prob)*nstates); + memcpy(hmm->bwd, hmm->state.bwd_prob, sizeof(*hmm->state.bwd_prob)*nstates); + uint32_t prev_pos = hmm->state.snap_at_pos ? hmm->state.snap_at_pos : sites[0]; + + // New transition matrix: temporary values + double *tmp_xi = (double*) calloc(nstates*nstates,sizeof(double)); + double *tmp_gamma = (double*) calloc(nstates,sizeof(double)); + double *fwd_bwd = (double*) malloc(sizeof(double)*nstates); + + // Run fwd + for (i=0; ifwd[i*nstates]; + double *fwd = &hmm->fwd[(i+1)*nstates]; + double *eprob = &eprobs[i*nstates]; + + int pos_diff = sites[i] == prev_pos ? 0 : sites[i] - prev_pos - 1; + + _set_tprob(hmm, pos_diff); + if ( hmm->set_tprob ) hmm->set_tprob(hmm, prev_pos, sites[i], hmm->set_tprob_data, hmm->curr_tprob); + prev_pos = sites[i]; + + double norm = 0; + for (j=0; jcurr_tprob,hmm->nstates,j,k); + fwd[j] = pval * eprob[j]; + norm += fwd[j]; + } + for (j=0; jbwd, *bwd_tmp = hmm->bwd_tmp; + prev_pos = sites[n-1]; + for (i=0; ifwd[(n-i)*nstates]; + double *eprob = &eprobs[(n-i-1)*nstates]; + + int pos_diff = sites[n-i-1] == prev_pos ? 0 : prev_pos - sites[n-i-1] - 1; + + _set_tprob(hmm, pos_diff); + if ( hmm->set_tprob ) hmm->set_tprob(hmm, sites[n-i-1], prev_pos, hmm->set_tprob_data, hmm->curr_tprob); + prev_pos = sites[n-i-1]; + + double bwd_norm = 0; + for (j=0; jcurr_tprob,hmm->nstates,k,j); + bwd_tmp[j] = pval; + bwd_norm += pval; + } + double norm = 0; + for (j=0; jtprob_arr,hmm->nstates,k,j)*eprob[k] / norm; + } + } + + for (j=0; jcurr_tprob,nstates,k,j) = MAT(tmp_xi,nstates,k,j) / tmp_gamma[j]; + norm += MAT(hmm->curr_tprob,nstates,k,j); + } + for (k=0; kcurr_tprob,nstates,k,j) /= norm; + } + free(tmp_gamma); + free(tmp_xi); + free(fwd_bwd); + return hmm->curr_tprob; +} + +void hmm_destroy(hmm_t *hmm) +{ + free(hmm->init.vit_prob); + free(hmm->init.fwd_prob); + free(hmm->init.bwd_prob); + free(hmm->state.vit_prob); + free(hmm->state.fwd_prob); + free(hmm->state.bwd_prob); + free(hmm->vprob); + free(hmm->vprob_tmp); + free(hmm->vpath); + free(hmm->curr_tprob); + free(hmm->tmp); + free(hmm->tprob_arr); + free(hmm->fwd); + free(hmm->bwd); + free(hmm->bwd_tmp); + free(hmm); +} + diff --git a/bcftools/HMM.h b/bcftools/HMM.h new file mode 100644 index 0000000..70c9cb8 --- /dev/null +++ b/bcftools/HMM.h @@ -0,0 +1,138 @@ +/* The MIT License + + Copyright (c) 2014-2015 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ + +#ifndef __HMM_H__ +#define __HMM_H__ + +#define MAT(matrix,ndim,i,j) (matrix)[(ndim)*(i)+(j)] // P(i|j), that is, transition j->i + +typedef struct _hmm_t hmm_t; + +typedef void (*set_tprob_f) (hmm_t *hmm, uint32_t prev_pos, uint32_t pos, void *data, double *tprob); + +/** + * hmm_init() - initialize HMM + * @nstates: number of states + * @tprob: transition probabilities matrix (nstates x nstates), for elements ordering + * see the MAT macro above. + * @ntprob: number of precalculated tprob matrices or 0 for constant probs, independent + * of distance + */ +hmm_t *hmm_init(int nstates, double *tprob, int ntprob); +void hmm_set_tprob(hmm_t *hmm, double *tprob, int ntprob); + +#define HMM_VIT 1 +#define HMM_FWD 2 +#define HMM_BWD 4 + +/** + * hmm_init_states() - initial state probabilities + * @probs: initial state probabilities or NULL to reset to default + * + * If uncalled, all states are initialized with the same likelihood + */ +void hmm_init_states(hmm_t *hmm, double *probs); + +/** + * hmm_snapshot() - take the model's snapshot, intended for sliding HMM + * @snapshot: NULL or snapshot returned by previous hmm_snapshot() call, must be free()-ed by the caller + * @pos: take the snapshot at this position + * + * If both restore() and snapshot() are needed, restore() must be called first. + */ +void *hmm_snapshot(hmm_t *hmm, void *snapshot, uint32_t pos); + +/** + * hmm_restore() - restore model's snapshot, intended for sliding HMM + * @snapshot: snapshot returned by hmm_snapshot() call or NULL to reset + * @isite: take the snapshot at i-th step + * + * If both restore() and snapshot() are needed, restore() must be called first. + */ +void hmm_restore(hmm_t *hmm, void *snapshot); +void hmm_reset(hmm_t *hmm, void *snapshot); + +/** + * hmm_get_tprob() - return the array of transition matrices, precalculated + * to ntprob positions. The first matrix is the initial tprob matrix + * set by hmm_init() or hmm_set_tprob() + */ +double *hmm_get_tprob(hmm_t *hmm); +int hmm_get_nstates(hmm_t *hmm); + +/** + * hmm_set_tprob_func() - custom setter of transition probabilities + */ +void hmm_set_tprob_func(hmm_t *hmm, set_tprob_f set_tprob, void *data); + +/** + * hmm_run_viterbi() - run Viterbi algorithm + * @nsites: number of sites + * @eprob: emission probabilities for each site and state (nsites x nstates) + * @sites: list of positions + * + * When done, hmm->vpath[] contains the calculated Viterbi path. The states + * are indexed starting from 0, a state at i-th site can be accessed as + * vpath[nstates*i]. + */ +void hmm_run_viterbi(hmm_t *hmm, int nsites, double *eprob, uint32_t *sites); + +/** + * hmm_get_viterbi_path() - the viterbi path: state at ith site is the + * (nstates*isite)-th element + */ +uint8_t *hmm_get_viterbi_path(hmm_t *hmm); + +/** + * hmm_run_fwd_bwd() - run the forward-backward algorithm + * @nsites: number of sites + * @eprob: emission probabilities for each site and state (nsites x nstates) + * @sites: list of positions + */ +void hmm_run_fwd_bwd(hmm_t *hmm, int nsites, double *eprob, uint32_t *sites); + +/** + * hmm_get_fwd_bwd_prob() - the probability of i-th state at j-th site can + * be accessed as fwd_bwd[j*nstates+i]. + */ +double *hmm_get_fwd_bwd_prob(hmm_t *hmm); + +/** + * hmm_run_baum_welch() - run one iteration of Baum-Welch algorithm + * @nsites: number of sites + * @eprob: emission probabilities for each site and state (nsites x nstates) + * @sites: list of positions + * + * Same as hmm_run_fwd_bwd, in addition a pointer to a matrix with the new + * transition probabilities is returned. In this verison, emission + * probabilities are not updated. + */ +double *hmm_run_baum_welch(hmm_t *hmm, int nsites, double *eprob, uint32_t *sites); + +void hmm_destroy(hmm_t *hmm); + +#endif + diff --git a/bcftools/bam2bcf.c b/bcftools/bam2bcf.c new file mode 100644 index 0000000..c8dc91b --- /dev/null +++ b/bcftools/bam2bcf.c @@ -0,0 +1,866 @@ +/* bam2bcf.c -- variant calling. + + Copyright (C) 2010-2012 Broad Institute. + Copyright (C) 2012-2014 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "bam2bcf.h" + +extern void ks_introsort_uint32_t(size_t n, uint32_t a[]); + +#define CALL_DEFTHETA 0.83 +#define DEF_MAPQ 20 + +#define CAP_DIST 25 + +bcf_callaux_t *bcf_call_init(double theta, int min_baseQ) +{ + bcf_callaux_t *bca; + if (theta <= 0.) theta = CALL_DEFTHETA; + bca = (bcf_callaux_t*) calloc(1, sizeof(bcf_callaux_t)); + bca->capQ = 60; + bca->openQ = 40; bca->extQ = 20; bca->tandemQ = 100; + bca->min_baseQ = min_baseQ; + bca->e = errmod_init(1. - theta); + bca->min_frac = 0.002; + bca->min_support = 1; + bca->per_sample_flt = 0; + bca->npos = 100; + bca->ref_pos = (int*) malloc(bca->npos*sizeof(int)); + bca->alt_pos = (int*) malloc(bca->npos*sizeof(int)); + bca->nqual = 60; + bca->ref_mq = (int*) malloc(bca->nqual*sizeof(int)); + bca->alt_mq = (int*) malloc(bca->nqual*sizeof(int)); + bca->ref_bq = (int*) malloc(bca->nqual*sizeof(int)); + bca->alt_bq = (int*) malloc(bca->nqual*sizeof(int)); + bca->fwd_mqs = (int*) malloc(bca->nqual*sizeof(int)); + bca->rev_mqs = (int*) malloc(bca->nqual*sizeof(int)); + return bca; +} + +void bcf_call_destroy(bcf_callaux_t *bca) +{ + if (bca == 0) return; + errmod_destroy(bca->e); + if (bca->npos) { free(bca->ref_pos); free(bca->alt_pos); bca->npos = 0; } + free(bca->ref_mq); free(bca->alt_mq); free(bca->ref_bq); free(bca->alt_bq); + free(bca->fwd_mqs); free(bca->rev_mqs); + bca->nqual = 0; + free(bca->bases); free(bca->inscns); free(bca); +} + +// position in the sequence with respect to the aligned part of the read +static int get_position(const bam_pileup1_t *p, int *len) +{ + int icig, n_tot_bases = 0, iread = 0, edist = p->qpos + 1; + for (icig=0; icigb->core.n_cigar; icig++) + { + int cig = bam_get_cigar(p->b)[icig] & BAM_CIGAR_MASK; + int ncig = bam_get_cigar(p->b)[icig] >> BAM_CIGAR_SHIFT; + if ( cig==BAM_CMATCH || cig==BAM_CEQUAL || cig==BAM_CDIFF ) + { + n_tot_bases += ncig; + iread += ncig; + continue; + } + if ( cig==BAM_CINS ) + { + n_tot_bases += ncig; + iread += ncig; + continue; + } + if ( cig==BAM_CSOFT_CLIP ) + { + iread += ncig; + if ( iread<=p->qpos ) edist -= ncig; + continue; + } + if ( cig==BAM_CDEL ) continue; + if ( cig==BAM_CHARD_CLIP ) continue; + if ( cig==BAM_CPAD ) continue; + if ( cig==BAM_CREF_SKIP ) continue; + fprintf(stderr,"todo: cigar %d\n", cig); + assert(0); + } + *len = n_tot_bases; + return edist; +} + +void bcf_callaux_clean(bcf_callaux_t *bca, bcf_call_t *call) +{ + memset(bca->ref_pos,0,sizeof(int)*bca->npos); + memset(bca->alt_pos,0,sizeof(int)*bca->npos); + memset(bca->ref_mq,0,sizeof(int)*bca->nqual); + memset(bca->alt_mq,0,sizeof(int)*bca->nqual); + memset(bca->ref_bq,0,sizeof(int)*bca->nqual); + memset(bca->alt_bq,0,sizeof(int)*bca->nqual); + memset(bca->fwd_mqs,0,sizeof(int)*bca->nqual); + memset(bca->rev_mqs,0,sizeof(int)*bca->nqual); + if ( call->ADF ) memset(call->ADF,0,sizeof(int32_t)*(call->n+1)*B2B_MAX_ALLELES); + if ( call->ADR ) memset(call->ADR,0,sizeof(int32_t)*(call->n+1)*B2B_MAX_ALLELES); +} + +/* + Notes: + - Called from bam_plcmd.c by mpileup. Amongst other things, sets the bcf_callret1_t.qsum frequencies + which are carried over via bcf_call_combine and bcf_call2bcf to the output BCF as the QS annotation. + Later it's used for multiallelic calling by bcftools -m + - ref_base is the 4-bit representation of the reference base. It is negative if we are looking at an indel. + */ +/* + * This function is called once for each sample. + * _n is number of pilesups pl contributing reads to this sample + * pl is pointer to array of _n pileups (one pileup per read) + * ref_base is the 4-bit representation of the reference base. It is negative if we are looking at an indel. + * bca is the settings to perform calls across all samples + * r is the returned value of the call + */ +int bcf_call_glfgen(int _n, const bam_pileup1_t *pl, int ref_base, bcf_callaux_t *bca, bcf_callret1_t *r) +{ + int i, n, ref4, is_indel, ori_depth = 0; + + // clean from previous run + r->ori_depth = 0; + r->mq0 = 0; + memset(r->qsum,0,sizeof(float)*4); + memset(r->anno,0,sizeof(double)*16); + memset(r->p,0,sizeof(float)*25); + + if (ref_base >= 0) { + ref4 = seq_nt16_int[ref_base]; + is_indel = 0; + } else ref4 = 4, is_indel = 1; + if (_n == 0) return -1; + // enlarge the bases array if necessary + if (bca->max_bases < _n) { + bca->max_bases = _n; + kroundup32(bca->max_bases); + bca->bases = (uint16_t*)realloc(bca->bases, 2 * bca->max_bases); + } + // fill the bases array + for (i = n = 0; i < _n; ++i) { + const bam_pileup1_t *p = pl + i; + int q, b, mapQ, baseQ, is_diff, min_dist, seqQ; + if (p->is_refskip || (p->b->core.flag&BAM_FUNMAP)) continue; + if (p->is_del && !is_indel) continue; + ++ori_depth; + if (is_indel) + { + b = p->aux>>16&0x3f; + baseQ = q = p->aux&0xff; + // This read is not counted as indel. Instead of skipping it, treat it as ref. It is + // still only an approximation, but gives more accurate AD counts and calls correctly + // hets instead of alt-homs in some cases (see test/mpileup/indel-AD.1.sam) + if ( q < bca->min_baseQ ) b = 0, q = (int)bam_get_qual(p->b)[p->qpos]; + seqQ = p->aux>>8&0xff; + is_diff = (b != 0); + } + else + { + b = bam_seqi(bam_get_seq(p->b), p->qpos); // base + b = seq_nt16_int[b? b : ref_base]; // b is the 2-bit base + baseQ = q = (int)bam_get_qual(p->b)[p->qpos]; + if (q < bca->min_baseQ) continue; + seqQ = 99; + is_diff = (ref4 < 4 && b == ref4)? 0 : 1; + } + mapQ = p->b->core.qual < 255? p->b->core.qual : DEF_MAPQ; // special case for mapQ==255 + if ( !mapQ ) r->mq0++; + if (q > seqQ) q = seqQ; + mapQ = mapQ < bca->capQ? mapQ : bca->capQ; + if (q > mapQ) q = mapQ; + if (q > 63) q = 63; + if (q < 4) q = 4; // MQ=0 reads count as BQ=4 + bca->bases[n++] = q<<5 | (int)bam_is_rev(p->b)<<4 | b; + // collect annotations + if (b < 4) + { + r->qsum[b] += q; + if ( r->ADF ) + { + if ( bam_is_rev(p->b) ) + r->ADR[b]++; + else + r->ADF[b]++; + } + } + ++r->anno[0<<2|is_diff<<1|bam_is_rev(p->b)]; + min_dist = p->b->core.l_qseq - 1 - p->qpos; + if (min_dist > p->qpos) min_dist = p->qpos; + if (min_dist > CAP_DIST) min_dist = CAP_DIST; + r->anno[1<<2|is_diff<<1|0] += baseQ; + r->anno[1<<2|is_diff<<1|1] += baseQ * baseQ; + r->anno[2<<2|is_diff<<1|0] += mapQ; + r->anno[2<<2|is_diff<<1|1] += mapQ * mapQ; + r->anno[3<<2|is_diff<<1|0] += min_dist; + r->anno[3<<2|is_diff<<1|1] += min_dist * min_dist; + + // collect for bias tests + if ( baseQ > 59 ) baseQ = 59; + if ( mapQ > 59 ) mapQ = 59; + int len, pos = get_position(p, &len); + int epos = (double)pos/(len+1) * bca->npos; + int ibq = baseQ/60. * bca->nqual; + int imq = mapQ/60. * bca->nqual; + if ( bam_is_rev(p->b) ) bca->rev_mqs[imq]++; + else bca->fwd_mqs[imq]++; + if ( bam_seqi(bam_get_seq(p->b),p->qpos) == ref_base ) + { + bca->ref_pos[epos]++; + bca->ref_bq[ibq]++; + bca->ref_mq[imq]++; + } + else + { + bca->alt_pos[epos]++; + bca->alt_bq[ibq]++; + bca->alt_mq[imq]++; + } + } + r->ori_depth = ori_depth; + // glfgen + errmod_cal(bca->e, n, 5, bca->bases, r->p); // calculate PL of each genotype + return n; +} + + +/* + * calc_vdb() - returns value between zero (most biased) and one (no bias) + * on success, or HUGE_VAL when VDB cannot be calculated because + * of insufficient depth (<2x) + * + * Variant Distance Bias tests if the variant bases are positioned within the + * reads with sufficient randomness. Unlike other tests, it looks only at + * variant reads and therefore gives different kind of information than Read + * Position Bias for instance. VDB was developed for detecting artefacts in + * RNA-seq calls where reads from spliced transcripts span splice site + * boundaries. The current implementation differs somewhat from the original + * version described in supplementary material of PMID:22524474, but the idea + * remains the same. (Here the random variable tested is the average distance + * from the averaged position, not the average pairwise distance.) + * + * For coverage of 2x, the calculation is exact but is approximated for the + * rest. The result is most accurate between 4-200x. For 3x or >200x, the + * reported values are slightly more favourable than those of a true random + * distribution. + */ +double calc_vdb(int *pos, int npos) +{ + // Note well: the parameters were obtained by fitting to simulated data of + // 100bp reads. This assumes rescaling to 100bp in bcf_call_glfgen(). + const int readlen = 100; + assert( npos==readlen ); + + #define nparam 15 + const float param[nparam][3] = { {3,0.079,18}, {4,0.09,19.8}, {5,0.1,20.5}, {6,0.11,21.5}, + {7,0.125,21.6}, {8,0.135,22}, {9,0.14,22.2}, {10,0.153,22.3}, {15,0.19,22.8}, + {20,0.22,23.2}, {30,0.26,23.4}, {40,0.29,23.5}, {50,0.35,23.65}, {100,0.5,23.7}, + {200,0.7,23.7} }; + + int i, dp = 0; + float mean_pos = 0, mean_diff = 0; + for (i=0; i=200 ) + i = nparam; // shortcut for big depths + else + { + for (i=0; i=dp ) break; + } + float pshift, pscale; + if ( i==nparam ) + { + // the depth is too high, go with 200x + pscale = param[nparam-1][1]; + pshift = param[nparam-1][2]; + } + else if ( i>0 && param[i][0]!=dp ) + { + // linear interpolation of parameters + pscale = (param[i-1][1] + param[i][1])*0.5; + pshift = (param[i-1][2] + param[i][2])*0.5; + } + else + { + pscale = param[i][1]; + pshift = param[i][2]; + } + return 0.5*kf_erfc(-(mean_diff-pshift)*pscale); +} + +double calc_chisq_bias(int *a, int *b, int n) +{ + int na = 0, nb = 0, i, ndf = n; + for (i=0; i= 2 && m >= 2); + + return (n < 8 && m < 8 && U < 50) + ? mw[n-2][m-2][U] + : mann_whitney_1947_(n,m,U); +} + +double mann_whitney_1947_cdf(int n, int m, int U) +{ + int i; + double sum = 0; + for (i=0; i<=U; i++) + sum += mann_whitney_1947(n,m,i); + return sum; +} + +double calc_mwu_bias_cdf(int *a, int *b, int n) +{ + int na = 0, nb = 0, i; + double U = 0, ties = 0; + for (i=0; i=8 && nb>=8 and reasonable if na<8 or nb<8 + if ( na>=8 || nb>=8 ) + { + double mean = ((double)na*nb)*0.5; + // Correction for ties: + // double N = na+nb; + // double var2 = (N*N-1)*N-ties; + // if ( var2==0 ) return 1.0; + // var2 *= ((double)na*nb)/N/(N-1)/12.0; + // No correction for ties: + double var2 = ((double)na*nb)*(na+nb+1)/12.0; + double z = (U_min - mean)/sqrt(2*var2); // z is N(0,1) + return 2.0 - kf_erfc(z); // which is 1 + erf(z) + } + + // Exact calculation + double pval = 2*mann_whitney_1947_cdf(na,nb,U_min); + return pval>1 ? 1 : pval; +} + +double calc_mwu_bias(int *a, int *b, int n) +{ + int na = 0, nb = 0, i; + double U = 0, ties = 0; + for (i=0; imean ? (2.0*mean-U)/mean : U/mean; + } + // Correction for ties: + // double N = na+nb; + // double var2 = (N*N-1)*N-ties; + // if ( var2==0 ) return 1.0; + // var2 *= ((double)na*nb)/N/(N-1)/12.0; + // No correction for ties: + double var2 = ((double)na*nb)*(na+nb+1)/12.0; + if ( na>=8 || nb>=8 ) + { + // Normal approximation, very good for na>=8 && nb>=8 and reasonable if na<8 or nb<8 + return exp(-0.5*(U-mean)*(U-mean)/var2); + } + + // Exact calculation + return mann_whitney_1947(na,nb,U) * sqrt(2*M_PI*var2); +} + +static inline double logsumexp2(double a, double b) +{ + if ( a>b ) + return log(1 + exp(b-a)) + a; + else + return log(1 + exp(a-b)) + b; +} + +void calc_SegBias(const bcf_callret1_t *bcr, bcf_call_t *call) +{ + call->seg_bias = HUGE_VAL; + if ( !bcr ) return; + + int nr = call->anno[2] + call->anno[3]; // number of observed non-reference reads + if ( !nr ) return; + + int avg_dp = (call->anno[0] + call->anno[1] + nr) / call->n; // average depth + double M = floor((double)nr / avg_dp + 0.5); // an approximate number of variants samples in the population + if ( M>call->n ) M = call->n; // clamp M at the number of samples + else if ( M==0 ) M = 1; + double f = M / 2. / call->n; // allele frequency + double p = (double) nr / call->n; // number of variant reads per sample expected if variant not real (poisson) + double q = (double) nr / M; // number of variant reads per sample expected if variant is real (poisson) + double sum = 0; + const double log2 = log(2.0); + + // fprintf(stderr,"M=%.1f p=%e q=%e f=%f dp=%d\n",M,p,q,f,avg_dp); + int i; + for (i=0; in; i++) + { + int oi = bcr[i].anno[2] + bcr[i].anno[3]; // observed number of non-ref reads + double tmp; + if ( oi ) + { + // tmp = log(f) + oi*log(q/p) - q + log(2*(1-f) + f*pow(2,oi)*exp(-q)) + p; // this can under/overflow + tmp = logsumexp2(log(2*(1-f)), log(f) + oi*log2 - q); + tmp += log(f) + oi*log(q/p) - q + p; + } + else + tmp = log(2*f*(1-f)*exp(-q) + f*f*exp(-2*q) + (1-f)*(1-f)) + p; + sum += tmp; + // fprintf(stderr,"oi=%d %e\n", oi,tmp); + } + call->seg_bias = sum; +} + +/** + * bcf_call_combine() - sets the PL array and VDB, RPB annotations, finds the top two alleles + * @n: number of samples + * @calls: each sample's calls + * @bca: auxiliary data structure for holding temporary values + * @ref_base: the reference base + * @call: filled with the annotations + * + * Combines calls across the various samples being studied + * 1. For each allele at each base across all samples the quality is summed so + * you end up with a set of quality sums for each allele present 2. The quality + * sums are sorted. + * 3. Using the sorted quality sums we now create the allele ordering array + * A\subN. This is done by doing the following: + * a) If the reference allele is known it always comes first, otherwise N + * comes first. + * b) Then the rest of the alleles are output in descending order of quality + * sum (which we already know the qsum array was sorted). Any allelles with + * qsum 0 will be excluded. + * 4. Using the allele ordering array we create the genotype ordering array. + * In the worst case with an unknown reference this will be: A0/A0 A1/A0 A1/A1 + * A2/A0 A2/A1 A2/A2 A3/A0 A3/A1 A3/A2 A3/A3 A4/A0 A4/A1 A4/A2 A4/A3 A4/A4 + * 5. The genotype ordering array is then used to extract data from the error + * model 5*5 matrix and is used to produce a Phread likelihood array for each + * sample. + */ +int bcf_call_combine(int n, const bcf_callret1_t *calls, bcf_callaux_t *bca, int ref_base /*4-bit*/, bcf_call_t *call) +{ + int ref4, i, j; + float qsum[5] = {0,0,0,0,0}; + if (ref_base >= 0) { + call->ori_ref = ref4 = seq_nt16_int[ref_base]; + if (ref4 > 4) ref4 = 4; + } else call->ori_ref = -1, ref4 = 0; + + // calculate qsum, this is done by summing normalized qsum across all samples, + // to account for differences in coverage + for (i = 0; i < n; ++i) + { + float sum = 0; + for (j = 0; j < 4; ++j) sum += calls[i].qsum[j]; + if ( sum ) + for (j = 0; j < 4; j++) qsum[j] += calls[i].qsum[j] / sum; + } + + // sort qsum in ascending order (insertion sort) + float *ptr[5], *tmp; + for (i=0; i<5; i++) ptr[i] = &qsum[i]; + for (i=1; i<4; i++) + for (j=i; j>0 && *ptr[j] < *ptr[j-1]; j--) + tmp = ptr[j], ptr[j] = ptr[j-1], ptr[j-1] = tmp; + + // Set the reference allele and alternative allele(s) + for (i=0; i<5; i++) call->a[i] = -1; + for (i=0; i<5; i++) call->qsum[i] = 0; + call->unseen = -1; + call->a[0] = ref4; + for (i=3, j=1; i>=0; i--) // i: alleles sorted by QS; j, a[j]: output allele ordering + { + int ipos = ptr[i] - qsum; // position in sorted qsum array + if ( ipos==ref4 ) + call->qsum[0] = qsum[ipos]; // REF's qsum + else + { + if ( !qsum[ipos] ) break; // qsum is 0, this and consequent alleles are not seen in the pileup + call->qsum[j] = qsum[ipos]; + call->a[j++] = ipos; + } + } + if (ref_base >= 0) + { + // for SNPs, find the "unseen" base + if (((ref4 < 4 && j < 4) || (ref4 == 4 && j < 5)) && i >= 0) + call->unseen = j, call->a[j++] = ptr[i] - qsum; + call->n_alleles = j; + } + else + { + call->n_alleles = j; + if (call->n_alleles == 1) return -1; // no reliable supporting read. stop doing anything + } + /* + * Set the phread likelihood array (call->PL) This array is 15 entries long + * for each sample because that is size of an upper or lower triangle of a + * worst case 5x5 matrix of possible genotypes. This worst case matrix will + * occur when all 4 possible alleles are present and the reference allele + * is unknown. The sides of the matrix will correspond to the reference + * allele (if known) followed by the alleles present in descending order of + * quality sum + */ + { + int x, g[15], z; + double sum_min = 0.; + x = call->n_alleles * (call->n_alleles + 1) / 2; + // get the possible genotypes + // this is done by creating an ordered list of locations g for call (allele a, allele b) in the genotype likelihood matrix + for (i = z = 0; i < call->n_alleles; ++i) { + for (j = 0; j <= i; ++j) { + g[z++] = call->a[j] * 5 + call->a[i]; + } + } + // for each sample calculate the PL + for (i = 0; i < n; ++i) + { + int32_t *PL = call->PL + x * i; + const bcf_callret1_t *r = calls + i; + float min = FLT_MAX; + for (j = 0; j < x; ++j) { + if (min > r->p[g[j]]) min = r->p[g[j]]; + } + sum_min += min; + for (j = 0; j < x; ++j) { + int y; + y = (int)(r->p[g[j]] - min + .499); + if (y > 255) y = 255; + PL[j] = y; + } + } + if ( call->DP4 ) + { + for (i=0; iDP4[4*i] = calls[i].anno[0]; + call->DP4[4*i+1] = calls[i].anno[1]; + call->DP4[4*i+2] = calls[i].anno[2]; + call->DP4[4*i+3] = calls[i].anno[3]; + } + } + if ( call->ADF ) + { + assert( call->n_alleles<=B2B_MAX_ALLELES ); // this is always true for SNPs and so far for indels as well + + // reorder ADR,ADF to match the allele ordering at this site + int32_t tmp[B2B_MAX_ALLELES]; + int32_t *adr = call->ADR + B2B_MAX_ALLELES, *adr_out = call->ADR + B2B_MAX_ALLELES; + int32_t *adf = call->ADF + B2B_MAX_ALLELES, *adf_out = call->ADF + B2B_MAX_ALLELES; + int32_t *adr_tot = call->ADR; // the first bin stores total counts per site + int32_t *adf_tot = call->ADF; + for (i=0; in_alleles; j++) + { + tmp[j] = adr[ call->a[j] ]; + adr_tot[j] += tmp[j]; + } + for (j=0; jn_alleles; j++) adr_out[j] = tmp[j]; + for (j=0; jn_alleles; j++) + { + tmp[j] = adf[ call->a[j] ]; + adf_tot[j] += tmp[j]; + } + for (j=0; jn_alleles; j++) adf_out[j] = tmp[j]; + adf_out += call->n_alleles; + adr_out += call->n_alleles; + adr += B2B_MAX_ALLELES; + adf += B2B_MAX_ALLELES; + } + } + +// if (ref_base < 0) fprintf(stderr, "%d,%d,%f,%d\n", call->n_alleles, x, sum_min, call->unseen); + call->shift = (int)(sum_min + .499); + } + // combine annotations + memset(call->anno, 0, 16 * sizeof(double)); + call->ori_depth = 0; + call->depth = 0; + call->mq0 = 0; + for (i = 0; i < n; ++i) { + call->depth += calls[i].anno[0] + calls[i].anno[1] + calls[i].anno[2] + calls[i].anno[3]; + call->ori_depth += calls[i].ori_depth; + call->mq0 += calls[i].mq0; + for (j = 0; j < 16; ++j) call->anno[j] += calls[i].anno[j]; + } + + calc_SegBias(calls, call); + + // calc_chisq_bias("XPOS", call->bcf_hdr->id[BCF_DT_CTG][call->tid].key, call->pos, bca->ref_pos, bca->alt_pos, bca->npos); + // calc_chisq_bias("XMQ", call->bcf_hdr->id[BCF_DT_CTG][call->tid].key, call->pos, bca->ref_mq, bca->alt_mq, bca->nqual); + // calc_chisq_bias("XBQ", call->bcf_hdr->id[BCF_DT_CTG][call->tid].key, call->pos, bca->ref_bq, bca->alt_bq, bca->nqual); + + call->mwu_pos = calc_mwu_bias(bca->ref_pos, bca->alt_pos, bca->npos); + call->mwu_mq = calc_mwu_bias(bca->ref_mq, bca->alt_mq, bca->nqual); + call->mwu_bq = calc_mwu_bias(bca->ref_bq, bca->alt_bq, bca->nqual); + call->mwu_mqs = calc_mwu_bias(bca->fwd_mqs, bca->rev_mqs, bca->nqual); + +#if CDF_MWU_TESTS + call->mwu_pos_cdf = calc_mwu_bias_cdf(bca->ref_pos, bca->alt_pos, bca->npos); + call->mwu_mq_cdf = calc_mwu_bias_cdf(bca->ref_mq, bca->alt_mq, bca->nqual); + call->mwu_bq_cdf = calc_mwu_bias_cdf(bca->ref_bq, bca->alt_bq, bca->nqual); + call->mwu_mqs_cdf = calc_mwu_bias_cdf(bca->fwd_mqs, bca->rev_mqs, bca->nqual); +#endif + + call->vdb = calc_vdb(bca->alt_pos, bca->npos); + + return 0; +} + +int bcf_call2bcf(bcf_call_t *bc, bcf1_t *rec, bcf_callret1_t *bcr, int fmt_flag, const bcf_callaux_t *bca, const char *ref) +{ + extern double kt_fisher_exact(int n11, int n12, int n21, int n22, double *_left, double *_right, double *two); + int i, j, nals = 1; + + bcf_hdr_t *hdr = bc->bcf_hdr; + rec->rid = bc->tid; + rec->pos = bc->pos; + rec->qual = 0; + + bc->tmp.l = 0; + if (bc->ori_ref < 0) // indel + { + // REF + kputc(ref[bc->pos], &bc->tmp); + for (j = 0; j < bca->indelreg; ++j) kputc(ref[bc->pos+1+j], &bc->tmp); + + // ALT + for (i=1; i<4; i++) + { + if (bc->a[i] < 0) break; + kputc(',', &bc->tmp); kputc(ref[bc->pos], &bc->tmp); + + if (bca->indel_types[bc->a[i]] < 0) { // deletion + for (j = -bca->indel_types[bc->a[i]]; j < bca->indelreg; ++j) + kputc(ref[bc->pos+1+j], &bc->tmp); + } else { // insertion; cannot be a reference unless a bug + char *inscns = &bca->inscns[bc->a[i] * bca->maxins]; + for (j = 0; j < bca->indel_types[bc->a[i]]; ++j) + kputc("ACGTN"[(int)inscns[j]], &bc->tmp); + for (j = 0; j < bca->indelreg; ++j) kputc(ref[bc->pos+1+j], &bc->tmp); + } + nals++; + } + } + else // SNP + { + kputc("ACGTN"[bc->ori_ref], &bc->tmp); + for (i=1; i<5; i++) + { + if (bc->a[i] < 0) break; + kputc(',', &bc->tmp); + if ( bc->unseen==i ) kputs("<*>", &bc->tmp); + else kputc("ACGT"[bc->a[i]], &bc->tmp); + nals++; + } + } + bcf_update_alleles_str(hdr, rec, bc->tmp.s); + + bc->tmp.l = 0; + + // INFO + if (bc->ori_ref < 0) + { + bcf_update_info_flag(hdr, rec, "INDEL", NULL, 1); + bcf_update_info_int32(hdr, rec, "IDV", &bca->max_support, 1); + bcf_update_info_float(hdr, rec, "IMF", &bca->max_frac, 1); + } + bcf_update_info_int32(hdr, rec, "DP", &bc->ori_depth, 1); + if ( fmt_flag&B2B_INFO_ADF ) + bcf_update_info_int32(hdr, rec, "ADF", bc->ADF, rec->n_allele); + if ( fmt_flag&B2B_INFO_ADR ) + bcf_update_info_int32(hdr, rec, "ADR", bc->ADR, rec->n_allele); + if ( fmt_flag&(B2B_INFO_AD|B2B_INFO_DPR) ) + { + for (i=0; in_allele; i++) bc->ADF[i] += bc->ADR[i]; + if ( fmt_flag&B2B_INFO_AD ) + bcf_update_info_int32(hdr, rec, "AD", bc->ADF, rec->n_allele); + if ( fmt_flag&B2B_INFO_DPR ) + bcf_update_info_int32(hdr, rec, "DPR", bc->ADF, rec->n_allele); + } + + float tmpf[16]; + for (i=0; i<16; i++) tmpf[i] = bc->anno[i]; + bcf_update_info_float(hdr, rec, "I16", tmpf, 16); + bcf_update_info_float(hdr, rec, "QS", bc->qsum, nals); + + if ( bc->vdb != HUGE_VAL ) bcf_update_info_float(hdr, rec, "VDB", &bc->vdb, 1); + if ( bc->seg_bias != HUGE_VAL ) bcf_update_info_float(hdr, rec, "SGB", &bc->seg_bias, 1); + if ( bc->mwu_pos != HUGE_VAL ) bcf_update_info_float(hdr, rec, "RPB", &bc->mwu_pos, 1); + if ( bc->mwu_mq != HUGE_VAL ) bcf_update_info_float(hdr, rec, "MQB", &bc->mwu_mq, 1); + if ( bc->mwu_mqs != HUGE_VAL ) bcf_update_info_float(hdr, rec, "MQSB", &bc->mwu_mqs, 1); + if ( bc->mwu_bq != HUGE_VAL ) bcf_update_info_float(hdr, rec, "BQB", &bc->mwu_bq, 1); +#if CDF_MWU_TESTS + if ( bc->mwu_pos_cdf != HUGE_VAL ) bcf_update_info_float(hdr, rec, "RPB2", &bc->mwu_pos_cdf, 1); + if ( bc->mwu_mq_cdf != HUGE_VAL ) bcf_update_info_float(hdr, rec, "MQB2", &bc->mwu_mq_cdf, 1); + if ( bc->mwu_mqs_cdf != HUGE_VAL ) bcf_update_info_float(hdr, rec, "MQSB2", &bc->mwu_mqs_cdf, 1); + if ( bc->mwu_bq_cdf != HUGE_VAL ) bcf_update_info_float(hdr, rec, "BQB2", &bc->mwu_bq_cdf, 1); +#endif + tmpf[0] = bc->ori_depth ? (float)bc->mq0/bc->ori_depth : 0; + bcf_update_info_float(hdr, rec, "MQ0F", tmpf, 1); + + // FORMAT + rec->n_sample = bc->n; + bcf_update_format_int32(hdr, rec, "PL", bc->PL, nals*(nals+1)/2 * rec->n_sample); + if ( fmt_flag&B2B_FMT_DP ) + { + int32_t *ptr = (int32_t*) bc->fmt_arr; + for (i=0; in; i++) + ptr[i] = bc->DP4[4*i] + bc->DP4[4*i+1] + bc->DP4[4*i+2] + bc->DP4[4*i+3]; + bcf_update_format_int32(hdr, rec, "DP", bc->fmt_arr, rec->n_sample); + } + if ( fmt_flag&B2B_FMT_DV ) + { + int32_t *ptr = (int32_t*) bc->fmt_arr; + for (i=0; in; i++) + ptr[i] = bc->DP4[4*i+2] + bc->DP4[4*i+3]; + bcf_update_format_int32(hdr, rec, "DV", bc->fmt_arr, rec->n_sample); + } + if ( fmt_flag&B2B_FMT_SP ) + { + int32_t *ptr = (int32_t*) bc->fmt_arr; + for (i=0; in; i++) + { + int fwd_ref = bc->DP4[4*i], rev_ref = bc->DP4[4*i+1], fwd_alt = bc->DP4[4*i+2], rev_alt = bc->DP4[4*i+3]; + if ( fwd_ref+rev_ref<2 || fwd_alt+rev_alt<2 || fwd_ref+fwd_alt<2 || rev_ref+rev_alt<2 ) + ptr[i] = 0; + else + { + double left, right, two; + kt_fisher_exact(fwd_ref, rev_ref, fwd_alt, rev_alt, &left, &right, &two); + int32_t x = (int)(-4.343 * log(two) + .499); + if (x > 255) x = 255; + ptr[i] = x; + } + } + bcf_update_format_int32(hdr, rec, "SP", bc->fmt_arr, rec->n_sample); + } + if ( fmt_flag&B2B_FMT_DP4 ) + bcf_update_format_int32(hdr, rec, "DP4", bc->DP4, rec->n_sample*4); + if ( fmt_flag&B2B_FMT_ADF ) + bcf_update_format_int32(hdr, rec, "ADF", bc->ADF+B2B_MAX_ALLELES, rec->n_sample*rec->n_allele); + if ( fmt_flag&B2B_FMT_ADR ) + bcf_update_format_int32(hdr, rec, "ADR", bc->ADR+B2B_MAX_ALLELES, rec->n_sample*rec->n_allele); + if ( fmt_flag&(B2B_FMT_AD|B2B_FMT_DPR) ) + { + for (i=0; in_sample*rec->n_allele; i++) bc->ADF[B2B_MAX_ALLELES+i] += bc->ADR[B2B_MAX_ALLELES+i]; + if ( fmt_flag&B2B_FMT_AD ) + bcf_update_format_int32(hdr, rec, "AD", bc->ADF+B2B_MAX_ALLELES, rec->n_sample*rec->n_allele); + if ( fmt_flag&B2B_FMT_DPR ) + bcf_update_format_int32(hdr, rec, "DPR", bc->ADF+B2B_MAX_ALLELES, rec->n_sample*rec->n_allele); + } + + return 0; +} diff --git a/bcftools/bam2bcf.c.pysam.c b/bcftools/bam2bcf.c.pysam.c new file mode 100644 index 0000000..e6d72dd --- /dev/null +++ b/bcftools/bam2bcf.c.pysam.c @@ -0,0 +1,868 @@ +#include "bcftools.pysam.h" + +/* bam2bcf.c -- variant calling. + + Copyright (C) 2010-2012 Broad Institute. + Copyright (C) 2012-2014 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "bam2bcf.h" + +extern void ks_introsort_uint32_t(size_t n, uint32_t a[]); + +#define CALL_DEFTHETA 0.83 +#define DEF_MAPQ 20 + +#define CAP_DIST 25 + +bcf_callaux_t *bcf_call_init(double theta, int min_baseQ) +{ + bcf_callaux_t *bca; + if (theta <= 0.) theta = CALL_DEFTHETA; + bca = (bcf_callaux_t*) calloc(1, sizeof(bcf_callaux_t)); + bca->capQ = 60; + bca->openQ = 40; bca->extQ = 20; bca->tandemQ = 100; + bca->min_baseQ = min_baseQ; + bca->e = errmod_init(1. - theta); + bca->min_frac = 0.002; + bca->min_support = 1; + bca->per_sample_flt = 0; + bca->npos = 100; + bca->ref_pos = (int*) malloc(bca->npos*sizeof(int)); + bca->alt_pos = (int*) malloc(bca->npos*sizeof(int)); + bca->nqual = 60; + bca->ref_mq = (int*) malloc(bca->nqual*sizeof(int)); + bca->alt_mq = (int*) malloc(bca->nqual*sizeof(int)); + bca->ref_bq = (int*) malloc(bca->nqual*sizeof(int)); + bca->alt_bq = (int*) malloc(bca->nqual*sizeof(int)); + bca->fwd_mqs = (int*) malloc(bca->nqual*sizeof(int)); + bca->rev_mqs = (int*) malloc(bca->nqual*sizeof(int)); + return bca; +} + +void bcf_call_destroy(bcf_callaux_t *bca) +{ + if (bca == 0) return; + errmod_destroy(bca->e); + if (bca->npos) { free(bca->ref_pos); free(bca->alt_pos); bca->npos = 0; } + free(bca->ref_mq); free(bca->alt_mq); free(bca->ref_bq); free(bca->alt_bq); + free(bca->fwd_mqs); free(bca->rev_mqs); + bca->nqual = 0; + free(bca->bases); free(bca->inscns); free(bca); +} + +// position in the sequence with respect to the aligned part of the read +static int get_position(const bam_pileup1_t *p, int *len) +{ + int icig, n_tot_bases = 0, iread = 0, edist = p->qpos + 1; + for (icig=0; icigb->core.n_cigar; icig++) + { + int cig = bam_get_cigar(p->b)[icig] & BAM_CIGAR_MASK; + int ncig = bam_get_cigar(p->b)[icig] >> BAM_CIGAR_SHIFT; + if ( cig==BAM_CMATCH || cig==BAM_CEQUAL || cig==BAM_CDIFF ) + { + n_tot_bases += ncig; + iread += ncig; + continue; + } + if ( cig==BAM_CINS ) + { + n_tot_bases += ncig; + iread += ncig; + continue; + } + if ( cig==BAM_CSOFT_CLIP ) + { + iread += ncig; + if ( iread<=p->qpos ) edist -= ncig; + continue; + } + if ( cig==BAM_CDEL ) continue; + if ( cig==BAM_CHARD_CLIP ) continue; + if ( cig==BAM_CPAD ) continue; + if ( cig==BAM_CREF_SKIP ) continue; + fprintf(bcftools_stderr,"todo: cigar %d\n", cig); + assert(0); + } + *len = n_tot_bases; + return edist; +} + +void bcf_callaux_clean(bcf_callaux_t *bca, bcf_call_t *call) +{ + memset(bca->ref_pos,0,sizeof(int)*bca->npos); + memset(bca->alt_pos,0,sizeof(int)*bca->npos); + memset(bca->ref_mq,0,sizeof(int)*bca->nqual); + memset(bca->alt_mq,0,sizeof(int)*bca->nqual); + memset(bca->ref_bq,0,sizeof(int)*bca->nqual); + memset(bca->alt_bq,0,sizeof(int)*bca->nqual); + memset(bca->fwd_mqs,0,sizeof(int)*bca->nqual); + memset(bca->rev_mqs,0,sizeof(int)*bca->nqual); + if ( call->ADF ) memset(call->ADF,0,sizeof(int32_t)*(call->n+1)*B2B_MAX_ALLELES); + if ( call->ADR ) memset(call->ADR,0,sizeof(int32_t)*(call->n+1)*B2B_MAX_ALLELES); +} + +/* + Notes: + - Called from bam_plcmd.c by mpileup. Amongst other things, sets the bcf_callret1_t.qsum frequencies + which are carried over via bcf_call_combine and bcf_call2bcf to the output BCF as the QS annotation. + Later it's used for multiallelic calling by bcftools -m + - ref_base is the 4-bit representation of the reference base. It is negative if we are looking at an indel. + */ +/* + * This function is called once for each sample. + * _n is number of pilesups pl contributing reads to this sample + * pl is pointer to array of _n pileups (one pileup per read) + * ref_base is the 4-bit representation of the reference base. It is negative if we are looking at an indel. + * bca is the settings to perform calls across all samples + * r is the returned value of the call + */ +int bcf_call_glfgen(int _n, const bam_pileup1_t *pl, int ref_base, bcf_callaux_t *bca, bcf_callret1_t *r) +{ + int i, n, ref4, is_indel, ori_depth = 0; + + // clean from previous run + r->ori_depth = 0; + r->mq0 = 0; + memset(r->qsum,0,sizeof(float)*4); + memset(r->anno,0,sizeof(double)*16); + memset(r->p,0,sizeof(float)*25); + + if (ref_base >= 0) { + ref4 = seq_nt16_int[ref_base]; + is_indel = 0; + } else ref4 = 4, is_indel = 1; + if (_n == 0) return -1; + // enlarge the bases array if necessary + if (bca->max_bases < _n) { + bca->max_bases = _n; + kroundup32(bca->max_bases); + bca->bases = (uint16_t*)realloc(bca->bases, 2 * bca->max_bases); + } + // fill the bases array + for (i = n = 0; i < _n; ++i) { + const bam_pileup1_t *p = pl + i; + int q, b, mapQ, baseQ, is_diff, min_dist, seqQ; + if (p->is_refskip || (p->b->core.flag&BAM_FUNMAP)) continue; + if (p->is_del && !is_indel) continue; + ++ori_depth; + if (is_indel) + { + b = p->aux>>16&0x3f; + baseQ = q = p->aux&0xff; + // This read is not counted as indel. Instead of skipping it, treat it as ref. It is + // still only an approximation, but gives more accurate AD counts and calls correctly + // hets instead of alt-homs in some cases (see test/mpileup/indel-AD.1.sam) + if ( q < bca->min_baseQ ) b = 0, q = (int)bam_get_qual(p->b)[p->qpos]; + seqQ = p->aux>>8&0xff; + is_diff = (b != 0); + } + else + { + b = bam_seqi(bam_get_seq(p->b), p->qpos); // base + b = seq_nt16_int[b? b : ref_base]; // b is the 2-bit base + baseQ = q = (int)bam_get_qual(p->b)[p->qpos]; + if (q < bca->min_baseQ) continue; + seqQ = 99; + is_diff = (ref4 < 4 && b == ref4)? 0 : 1; + } + mapQ = p->b->core.qual < 255? p->b->core.qual : DEF_MAPQ; // special case for mapQ==255 + if ( !mapQ ) r->mq0++; + if (q > seqQ) q = seqQ; + mapQ = mapQ < bca->capQ? mapQ : bca->capQ; + if (q > mapQ) q = mapQ; + if (q > 63) q = 63; + if (q < 4) q = 4; // MQ=0 reads count as BQ=4 + bca->bases[n++] = q<<5 | (int)bam_is_rev(p->b)<<4 | b; + // collect annotations + if (b < 4) + { + r->qsum[b] += q; + if ( r->ADF ) + { + if ( bam_is_rev(p->b) ) + r->ADR[b]++; + else + r->ADF[b]++; + } + } + ++r->anno[0<<2|is_diff<<1|bam_is_rev(p->b)]; + min_dist = p->b->core.l_qseq - 1 - p->qpos; + if (min_dist > p->qpos) min_dist = p->qpos; + if (min_dist > CAP_DIST) min_dist = CAP_DIST; + r->anno[1<<2|is_diff<<1|0] += baseQ; + r->anno[1<<2|is_diff<<1|1] += baseQ * baseQ; + r->anno[2<<2|is_diff<<1|0] += mapQ; + r->anno[2<<2|is_diff<<1|1] += mapQ * mapQ; + r->anno[3<<2|is_diff<<1|0] += min_dist; + r->anno[3<<2|is_diff<<1|1] += min_dist * min_dist; + + // collect for bias tests + if ( baseQ > 59 ) baseQ = 59; + if ( mapQ > 59 ) mapQ = 59; + int len, pos = get_position(p, &len); + int epos = (double)pos/(len+1) * bca->npos; + int ibq = baseQ/60. * bca->nqual; + int imq = mapQ/60. * bca->nqual; + if ( bam_is_rev(p->b) ) bca->rev_mqs[imq]++; + else bca->fwd_mqs[imq]++; + if ( bam_seqi(bam_get_seq(p->b),p->qpos) == ref_base ) + { + bca->ref_pos[epos]++; + bca->ref_bq[ibq]++; + bca->ref_mq[imq]++; + } + else + { + bca->alt_pos[epos]++; + bca->alt_bq[ibq]++; + bca->alt_mq[imq]++; + } + } + r->ori_depth = ori_depth; + // glfgen + errmod_cal(bca->e, n, 5, bca->bases, r->p); // calculate PL of each genotype + return n; +} + + +/* + * calc_vdb() - returns value between zero (most biased) and one (no bias) + * on success, or HUGE_VAL when VDB cannot be calculated because + * of insufficient depth (<2x) + * + * Variant Distance Bias tests if the variant bases are positioned within the + * reads with sufficient randomness. Unlike other tests, it looks only at + * variant reads and therefore gives different kind of information than Read + * Position Bias for instance. VDB was developed for detecting artefacts in + * RNA-seq calls where reads from spliced transcripts span splice site + * boundaries. The current implementation differs somewhat from the original + * version described in supplementary material of PMID:22524474, but the idea + * remains the same. (Here the random variable tested is the average distance + * from the averaged position, not the average pairwise distance.) + * + * For coverage of 2x, the calculation is exact but is approximated for the + * rest. The result is most accurate between 4-200x. For 3x or >200x, the + * reported values are slightly more favourable than those of a true random + * distribution. + */ +double calc_vdb(int *pos, int npos) +{ + // Note well: the parameters were obtained by fitting to simulated data of + // 100bp reads. This assumes rescaling to 100bp in bcf_call_glfgen(). + const int readlen = 100; + assert( npos==readlen ); + + #define nparam 15 + const float param[nparam][3] = { {3,0.079,18}, {4,0.09,19.8}, {5,0.1,20.5}, {6,0.11,21.5}, + {7,0.125,21.6}, {8,0.135,22}, {9,0.14,22.2}, {10,0.153,22.3}, {15,0.19,22.8}, + {20,0.22,23.2}, {30,0.26,23.4}, {40,0.29,23.5}, {50,0.35,23.65}, {100,0.5,23.7}, + {200,0.7,23.7} }; + + int i, dp = 0; + float mean_pos = 0, mean_diff = 0; + for (i=0; i=200 ) + i = nparam; // shortcut for big depths + else + { + for (i=0; i=dp ) break; + } + float pshift, pscale; + if ( i==nparam ) + { + // the depth is too high, go with 200x + pscale = param[nparam-1][1]; + pshift = param[nparam-1][2]; + } + else if ( i>0 && param[i][0]!=dp ) + { + // linear interpolation of parameters + pscale = (param[i-1][1] + param[i][1])*0.5; + pshift = (param[i-1][2] + param[i][2])*0.5; + } + else + { + pscale = param[i][1]; + pshift = param[i][2]; + } + return 0.5*kf_erfc(-(mean_diff-pshift)*pscale); +} + +double calc_chisq_bias(int *a, int *b, int n) +{ + int na = 0, nb = 0, i, ndf = n; + for (i=0; i= 2 && m >= 2); + + return (n < 8 && m < 8 && U < 50) + ? mw[n-2][m-2][U] + : mann_whitney_1947_(n,m,U); +} + +double mann_whitney_1947_cdf(int n, int m, int U) +{ + int i; + double sum = 0; + for (i=0; i<=U; i++) + sum += mann_whitney_1947(n,m,i); + return sum; +} + +double calc_mwu_bias_cdf(int *a, int *b, int n) +{ + int na = 0, nb = 0, i; + double U = 0, ties = 0; + for (i=0; i=8 && nb>=8 and reasonable if na<8 or nb<8 + if ( na>=8 || nb>=8 ) + { + double mean = ((double)na*nb)*0.5; + // Correction for ties: + // double N = na+nb; + // double var2 = (N*N-1)*N-ties; + // if ( var2==0 ) return 1.0; + // var2 *= ((double)na*nb)/N/(N-1)/12.0; + // No correction for ties: + double var2 = ((double)na*nb)*(na+nb+1)/12.0; + double z = (U_min - mean)/sqrt(2*var2); // z is N(0,1) + return 2.0 - kf_erfc(z); // which is 1 + erf(z) + } + + // Exact calculation + double pval = 2*mann_whitney_1947_cdf(na,nb,U_min); + return pval>1 ? 1 : pval; +} + +double calc_mwu_bias(int *a, int *b, int n) +{ + int na = 0, nb = 0, i; + double U = 0, ties = 0; + for (i=0; imean ? (2.0*mean-U)/mean : U/mean; + } + // Correction for ties: + // double N = na+nb; + // double var2 = (N*N-1)*N-ties; + // if ( var2==0 ) return 1.0; + // var2 *= ((double)na*nb)/N/(N-1)/12.0; + // No correction for ties: + double var2 = ((double)na*nb)*(na+nb+1)/12.0; + if ( na>=8 || nb>=8 ) + { + // Normal approximation, very good for na>=8 && nb>=8 and reasonable if na<8 or nb<8 + return exp(-0.5*(U-mean)*(U-mean)/var2); + } + + // Exact calculation + return mann_whitney_1947(na,nb,U) * sqrt(2*M_PI*var2); +} + +static inline double logsumexp2(double a, double b) +{ + if ( a>b ) + return log(1 + exp(b-a)) + a; + else + return log(1 + exp(a-b)) + b; +} + +void calc_SegBias(const bcf_callret1_t *bcr, bcf_call_t *call) +{ + call->seg_bias = HUGE_VAL; + if ( !bcr ) return; + + int nr = call->anno[2] + call->anno[3]; // number of observed non-reference reads + if ( !nr ) return; + + int avg_dp = (call->anno[0] + call->anno[1] + nr) / call->n; // average depth + double M = floor((double)nr / avg_dp + 0.5); // an approximate number of variants samples in the population + if ( M>call->n ) M = call->n; // clamp M at the number of samples + else if ( M==0 ) M = 1; + double f = M / 2. / call->n; // allele frequency + double p = (double) nr / call->n; // number of variant reads per sample expected if variant not real (poisson) + double q = (double) nr / M; // number of variant reads per sample expected if variant is real (poisson) + double sum = 0; + const double log2 = log(2.0); + + // fprintf(bcftools_stderr,"M=%.1f p=%e q=%e f=%f dp=%d\n",M,p,q,f,avg_dp); + int i; + for (i=0; in; i++) + { + int oi = bcr[i].anno[2] + bcr[i].anno[3]; // observed number of non-ref reads + double tmp; + if ( oi ) + { + // tmp = log(f) + oi*log(q/p) - q + log(2*(1-f) + f*pow(2,oi)*exp(-q)) + p; // this can under/overflow + tmp = logsumexp2(log(2*(1-f)), log(f) + oi*log2 - q); + tmp += log(f) + oi*log(q/p) - q + p; + } + else + tmp = log(2*f*(1-f)*exp(-q) + f*f*exp(-2*q) + (1-f)*(1-f)) + p; + sum += tmp; + // fprintf(bcftools_stderr,"oi=%d %e\n", oi,tmp); + } + call->seg_bias = sum; +} + +/** + * bcf_call_combine() - sets the PL array and VDB, RPB annotations, finds the top two alleles + * @n: number of samples + * @calls: each sample's calls + * @bca: auxiliary data structure for holding temporary values + * @ref_base: the reference base + * @call: filled with the annotations + * + * Combines calls across the various samples being studied + * 1. For each allele at each base across all samples the quality is summed so + * you end up with a set of quality sums for each allele present 2. The quality + * sums are sorted. + * 3. Using the sorted quality sums we now create the allele ordering array + * A\subN. This is done by doing the following: + * a) If the reference allele is known it always comes first, otherwise N + * comes first. + * b) Then the rest of the alleles are output in descending order of quality + * sum (which we already know the qsum array was sorted). Any allelles with + * qsum 0 will be excluded. + * 4. Using the allele ordering array we create the genotype ordering array. + * In the worst case with an unknown reference this will be: A0/A0 A1/A0 A1/A1 + * A2/A0 A2/A1 A2/A2 A3/A0 A3/A1 A3/A2 A3/A3 A4/A0 A4/A1 A4/A2 A4/A3 A4/A4 + * 5. The genotype ordering array is then used to extract data from the error + * model 5*5 matrix and is used to produce a Phread likelihood array for each + * sample. + */ +int bcf_call_combine(int n, const bcf_callret1_t *calls, bcf_callaux_t *bca, int ref_base /*4-bit*/, bcf_call_t *call) +{ + int ref4, i, j; + float qsum[5] = {0,0,0,0,0}; + if (ref_base >= 0) { + call->ori_ref = ref4 = seq_nt16_int[ref_base]; + if (ref4 > 4) ref4 = 4; + } else call->ori_ref = -1, ref4 = 0; + + // calculate qsum, this is done by summing normalized qsum across all samples, + // to account for differences in coverage + for (i = 0; i < n; ++i) + { + float sum = 0; + for (j = 0; j < 4; ++j) sum += calls[i].qsum[j]; + if ( sum ) + for (j = 0; j < 4; j++) qsum[j] += calls[i].qsum[j] / sum; + } + + // sort qsum in ascending order (insertion sort) + float *ptr[5], *tmp; + for (i=0; i<5; i++) ptr[i] = &qsum[i]; + for (i=1; i<4; i++) + for (j=i; j>0 && *ptr[j] < *ptr[j-1]; j--) + tmp = ptr[j], ptr[j] = ptr[j-1], ptr[j-1] = tmp; + + // Set the reference allele and alternative allele(s) + for (i=0; i<5; i++) call->a[i] = -1; + for (i=0; i<5; i++) call->qsum[i] = 0; + call->unseen = -1; + call->a[0] = ref4; + for (i=3, j=1; i>=0; i--) // i: alleles sorted by QS; j, a[j]: output allele ordering + { + int ipos = ptr[i] - qsum; // position in sorted qsum array + if ( ipos==ref4 ) + call->qsum[0] = qsum[ipos]; // REF's qsum + else + { + if ( !qsum[ipos] ) break; // qsum is 0, this and consequent alleles are not seen in the pileup + call->qsum[j] = qsum[ipos]; + call->a[j++] = ipos; + } + } + if (ref_base >= 0) + { + // for SNPs, find the "unseen" base + if (((ref4 < 4 && j < 4) || (ref4 == 4 && j < 5)) && i >= 0) + call->unseen = j, call->a[j++] = ptr[i] - qsum; + call->n_alleles = j; + } + else + { + call->n_alleles = j; + if (call->n_alleles == 1) return -1; // no reliable supporting read. stop doing anything + } + /* + * Set the phread likelihood array (call->PL) This array is 15 entries long + * for each sample because that is size of an upper or lower triangle of a + * worst case 5x5 matrix of possible genotypes. This worst case matrix will + * occur when all 4 possible alleles are present and the reference allele + * is unknown. The sides of the matrix will correspond to the reference + * allele (if known) followed by the alleles present in descending order of + * quality sum + */ + { + int x, g[15], z; + double sum_min = 0.; + x = call->n_alleles * (call->n_alleles + 1) / 2; + // get the possible genotypes + // this is done by creating an ordered list of locations g for call (allele a, allele b) in the genotype likelihood matrix + for (i = z = 0; i < call->n_alleles; ++i) { + for (j = 0; j <= i; ++j) { + g[z++] = call->a[j] * 5 + call->a[i]; + } + } + // for each sample calculate the PL + for (i = 0; i < n; ++i) + { + int32_t *PL = call->PL + x * i; + const bcf_callret1_t *r = calls + i; + float min = FLT_MAX; + for (j = 0; j < x; ++j) { + if (min > r->p[g[j]]) min = r->p[g[j]]; + } + sum_min += min; + for (j = 0; j < x; ++j) { + int y; + y = (int)(r->p[g[j]] - min + .499); + if (y > 255) y = 255; + PL[j] = y; + } + } + if ( call->DP4 ) + { + for (i=0; iDP4[4*i] = calls[i].anno[0]; + call->DP4[4*i+1] = calls[i].anno[1]; + call->DP4[4*i+2] = calls[i].anno[2]; + call->DP4[4*i+3] = calls[i].anno[3]; + } + } + if ( call->ADF ) + { + assert( call->n_alleles<=B2B_MAX_ALLELES ); // this is always true for SNPs and so far for indels as well + + // reorder ADR,ADF to match the allele ordering at this site + int32_t tmp[B2B_MAX_ALLELES]; + int32_t *adr = call->ADR + B2B_MAX_ALLELES, *adr_out = call->ADR + B2B_MAX_ALLELES; + int32_t *adf = call->ADF + B2B_MAX_ALLELES, *adf_out = call->ADF + B2B_MAX_ALLELES; + int32_t *adr_tot = call->ADR; // the first bin stores total counts per site + int32_t *adf_tot = call->ADF; + for (i=0; in_alleles; j++) + { + tmp[j] = adr[ call->a[j] ]; + adr_tot[j] += tmp[j]; + } + for (j=0; jn_alleles; j++) adr_out[j] = tmp[j]; + for (j=0; jn_alleles; j++) + { + tmp[j] = adf[ call->a[j] ]; + adf_tot[j] += tmp[j]; + } + for (j=0; jn_alleles; j++) adf_out[j] = tmp[j]; + adf_out += call->n_alleles; + adr_out += call->n_alleles; + adr += B2B_MAX_ALLELES; + adf += B2B_MAX_ALLELES; + } + } + +// if (ref_base < 0) fprintf(bcftools_stderr, "%d,%d,%f,%d\n", call->n_alleles, x, sum_min, call->unseen); + call->shift = (int)(sum_min + .499); + } + // combine annotations + memset(call->anno, 0, 16 * sizeof(double)); + call->ori_depth = 0; + call->depth = 0; + call->mq0 = 0; + for (i = 0; i < n; ++i) { + call->depth += calls[i].anno[0] + calls[i].anno[1] + calls[i].anno[2] + calls[i].anno[3]; + call->ori_depth += calls[i].ori_depth; + call->mq0 += calls[i].mq0; + for (j = 0; j < 16; ++j) call->anno[j] += calls[i].anno[j]; + } + + calc_SegBias(calls, call); + + // calc_chisq_bias("XPOS", call->bcf_hdr->id[BCF_DT_CTG][call->tid].key, call->pos, bca->ref_pos, bca->alt_pos, bca->npos); + // calc_chisq_bias("XMQ", call->bcf_hdr->id[BCF_DT_CTG][call->tid].key, call->pos, bca->ref_mq, bca->alt_mq, bca->nqual); + // calc_chisq_bias("XBQ", call->bcf_hdr->id[BCF_DT_CTG][call->tid].key, call->pos, bca->ref_bq, bca->alt_bq, bca->nqual); + + call->mwu_pos = calc_mwu_bias(bca->ref_pos, bca->alt_pos, bca->npos); + call->mwu_mq = calc_mwu_bias(bca->ref_mq, bca->alt_mq, bca->nqual); + call->mwu_bq = calc_mwu_bias(bca->ref_bq, bca->alt_bq, bca->nqual); + call->mwu_mqs = calc_mwu_bias(bca->fwd_mqs, bca->rev_mqs, bca->nqual); + +#if CDF_MWU_TESTS + call->mwu_pos_cdf = calc_mwu_bias_cdf(bca->ref_pos, bca->alt_pos, bca->npos); + call->mwu_mq_cdf = calc_mwu_bias_cdf(bca->ref_mq, bca->alt_mq, bca->nqual); + call->mwu_bq_cdf = calc_mwu_bias_cdf(bca->ref_bq, bca->alt_bq, bca->nqual); + call->mwu_mqs_cdf = calc_mwu_bias_cdf(bca->fwd_mqs, bca->rev_mqs, bca->nqual); +#endif + + call->vdb = calc_vdb(bca->alt_pos, bca->npos); + + return 0; +} + +int bcf_call2bcf(bcf_call_t *bc, bcf1_t *rec, bcf_callret1_t *bcr, int fmt_flag, const bcf_callaux_t *bca, const char *ref) +{ + extern double kt_fisher_exact(int n11, int n12, int n21, int n22, double *_left, double *_right, double *two); + int i, j, nals = 1; + + bcf_hdr_t *hdr = bc->bcf_hdr; + rec->rid = bc->tid; + rec->pos = bc->pos; + rec->qual = 0; + + bc->tmp.l = 0; + if (bc->ori_ref < 0) // indel + { + // REF + kputc(ref[bc->pos], &bc->tmp); + for (j = 0; j < bca->indelreg; ++j) kputc(ref[bc->pos+1+j], &bc->tmp); + + // ALT + for (i=1; i<4; i++) + { + if (bc->a[i] < 0) break; + kputc(',', &bc->tmp); kputc(ref[bc->pos], &bc->tmp); + + if (bca->indel_types[bc->a[i]] < 0) { // deletion + for (j = -bca->indel_types[bc->a[i]]; j < bca->indelreg; ++j) + kputc(ref[bc->pos+1+j], &bc->tmp); + } else { // insertion; cannot be a reference unless a bug + char *inscns = &bca->inscns[bc->a[i] * bca->maxins]; + for (j = 0; j < bca->indel_types[bc->a[i]]; ++j) + kputc("ACGTN"[(int)inscns[j]], &bc->tmp); + for (j = 0; j < bca->indelreg; ++j) kputc(ref[bc->pos+1+j], &bc->tmp); + } + nals++; + } + } + else // SNP + { + kputc("ACGTN"[bc->ori_ref], &bc->tmp); + for (i=1; i<5; i++) + { + if (bc->a[i] < 0) break; + kputc(',', &bc->tmp); + if ( bc->unseen==i ) kputs("<*>", &bc->tmp); + else kputc("ACGT"[bc->a[i]], &bc->tmp); + nals++; + } + } + bcf_update_alleles_str(hdr, rec, bc->tmp.s); + + bc->tmp.l = 0; + + // INFO + if (bc->ori_ref < 0) + { + bcf_update_info_flag(hdr, rec, "INDEL", NULL, 1); + bcf_update_info_int32(hdr, rec, "IDV", &bca->max_support, 1); + bcf_update_info_float(hdr, rec, "IMF", &bca->max_frac, 1); + } + bcf_update_info_int32(hdr, rec, "DP", &bc->ori_depth, 1); + if ( fmt_flag&B2B_INFO_ADF ) + bcf_update_info_int32(hdr, rec, "ADF", bc->ADF, rec->n_allele); + if ( fmt_flag&B2B_INFO_ADR ) + bcf_update_info_int32(hdr, rec, "ADR", bc->ADR, rec->n_allele); + if ( fmt_flag&(B2B_INFO_AD|B2B_INFO_DPR) ) + { + for (i=0; in_allele; i++) bc->ADF[i] += bc->ADR[i]; + if ( fmt_flag&B2B_INFO_AD ) + bcf_update_info_int32(hdr, rec, "AD", bc->ADF, rec->n_allele); + if ( fmt_flag&B2B_INFO_DPR ) + bcf_update_info_int32(hdr, rec, "DPR", bc->ADF, rec->n_allele); + } + + float tmpf[16]; + for (i=0; i<16; i++) tmpf[i] = bc->anno[i]; + bcf_update_info_float(hdr, rec, "I16", tmpf, 16); + bcf_update_info_float(hdr, rec, "QS", bc->qsum, nals); + + if ( bc->vdb != HUGE_VAL ) bcf_update_info_float(hdr, rec, "VDB", &bc->vdb, 1); + if ( bc->seg_bias != HUGE_VAL ) bcf_update_info_float(hdr, rec, "SGB", &bc->seg_bias, 1); + if ( bc->mwu_pos != HUGE_VAL ) bcf_update_info_float(hdr, rec, "RPB", &bc->mwu_pos, 1); + if ( bc->mwu_mq != HUGE_VAL ) bcf_update_info_float(hdr, rec, "MQB", &bc->mwu_mq, 1); + if ( bc->mwu_mqs != HUGE_VAL ) bcf_update_info_float(hdr, rec, "MQSB", &bc->mwu_mqs, 1); + if ( bc->mwu_bq != HUGE_VAL ) bcf_update_info_float(hdr, rec, "BQB", &bc->mwu_bq, 1); +#if CDF_MWU_TESTS + if ( bc->mwu_pos_cdf != HUGE_VAL ) bcf_update_info_float(hdr, rec, "RPB2", &bc->mwu_pos_cdf, 1); + if ( bc->mwu_mq_cdf != HUGE_VAL ) bcf_update_info_float(hdr, rec, "MQB2", &bc->mwu_mq_cdf, 1); + if ( bc->mwu_mqs_cdf != HUGE_VAL ) bcf_update_info_float(hdr, rec, "MQSB2", &bc->mwu_mqs_cdf, 1); + if ( bc->mwu_bq_cdf != HUGE_VAL ) bcf_update_info_float(hdr, rec, "BQB2", &bc->mwu_bq_cdf, 1); +#endif + tmpf[0] = bc->ori_depth ? (float)bc->mq0/bc->ori_depth : 0; + bcf_update_info_float(hdr, rec, "MQ0F", tmpf, 1); + + // FORMAT + rec->n_sample = bc->n; + bcf_update_format_int32(hdr, rec, "PL", bc->PL, nals*(nals+1)/2 * rec->n_sample); + if ( fmt_flag&B2B_FMT_DP ) + { + int32_t *ptr = (int32_t*) bc->fmt_arr; + for (i=0; in; i++) + ptr[i] = bc->DP4[4*i] + bc->DP4[4*i+1] + bc->DP4[4*i+2] + bc->DP4[4*i+3]; + bcf_update_format_int32(hdr, rec, "DP", bc->fmt_arr, rec->n_sample); + } + if ( fmt_flag&B2B_FMT_DV ) + { + int32_t *ptr = (int32_t*) bc->fmt_arr; + for (i=0; in; i++) + ptr[i] = bc->DP4[4*i+2] + bc->DP4[4*i+3]; + bcf_update_format_int32(hdr, rec, "DV", bc->fmt_arr, rec->n_sample); + } + if ( fmt_flag&B2B_FMT_SP ) + { + int32_t *ptr = (int32_t*) bc->fmt_arr; + for (i=0; in; i++) + { + int fwd_ref = bc->DP4[4*i], rev_ref = bc->DP4[4*i+1], fwd_alt = bc->DP4[4*i+2], rev_alt = bc->DP4[4*i+3]; + if ( fwd_ref+rev_ref<2 || fwd_alt+rev_alt<2 || fwd_ref+fwd_alt<2 || rev_ref+rev_alt<2 ) + ptr[i] = 0; + else + { + double left, right, two; + kt_fisher_exact(fwd_ref, rev_ref, fwd_alt, rev_alt, &left, &right, &two); + int32_t x = (int)(-4.343 * log(two) + .499); + if (x > 255) x = 255; + ptr[i] = x; + } + } + bcf_update_format_int32(hdr, rec, "SP", bc->fmt_arr, rec->n_sample); + } + if ( fmt_flag&B2B_FMT_DP4 ) + bcf_update_format_int32(hdr, rec, "DP4", bc->DP4, rec->n_sample*4); + if ( fmt_flag&B2B_FMT_ADF ) + bcf_update_format_int32(hdr, rec, "ADF", bc->ADF+B2B_MAX_ALLELES, rec->n_sample*rec->n_allele); + if ( fmt_flag&B2B_FMT_ADR ) + bcf_update_format_int32(hdr, rec, "ADR", bc->ADR+B2B_MAX_ALLELES, rec->n_sample*rec->n_allele); + if ( fmt_flag&(B2B_FMT_AD|B2B_FMT_DPR) ) + { + for (i=0; in_sample*rec->n_allele; i++) bc->ADF[B2B_MAX_ALLELES+i] += bc->ADR[B2B_MAX_ALLELES+i]; + if ( fmt_flag&B2B_FMT_AD ) + bcf_update_format_int32(hdr, rec, "AD", bc->ADF+B2B_MAX_ALLELES, rec->n_sample*rec->n_allele); + if ( fmt_flag&B2B_FMT_DPR ) + bcf_update_format_int32(hdr, rec, "DPR", bc->ADF+B2B_MAX_ALLELES, rec->n_sample*rec->n_allele); + } + + return 0; +} diff --git a/bcftools/bam2bcf.h b/bcftools/bam2bcf.h new file mode 100644 index 0000000..f81f9cf --- /dev/null +++ b/bcftools/bam2bcf.h @@ -0,0 +1,138 @@ +/* bam2bcf.h -- variant calling. + + Copyright (C) 2010-2012 Broad Institute. + Copyright (C) 2012-2014,2016 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#ifndef BAM2BCF_H +#define BAM2BCF_H + +#include +#include +#include + +/** + * A simplified version of Mann-Whitney U-test is calculated + * by default (no CDF) because it is faster and seems to work + * better in machine learning filtering. When enabled by setting + * CDF_MWU_TESTS, additional annotations will appear on mpileup's + * output (RPB2 in addition to RPB, etc.). + */ +#ifndef CDF_MWU_TESTS +#define CDF_MWU_TESTS 0 +#endif + +#define B2B_INDEL_NULL 10000 + +#define B2B_FMT_DP (1<<0) +#define B2B_FMT_SP (1<<1) +#define B2B_FMT_DV (1<<2) +#define B2B_FMT_DP4 (1<<3) +#define B2B_FMT_DPR (1<<4) +#define B2B_INFO_DPR (1<<5) +#define B2B_FMT_AD (1<<6) +#define B2B_FMT_ADF (1<<7) +#define B2B_FMT_ADR (1<<8) +#define B2B_INFO_AD (1<<9) +#define B2B_INFO_ADF (1<<10) +#define B2B_INFO_ADR (1<<11) + +#define B2B_MAX_ALLELES 5 + +typedef struct __bcf_callaux_t { + int capQ, min_baseQ; + int openQ, extQ, tandemQ; // for indels + uint32_t min_support, max_support; // for collecting indel candidates + double min_frac; // for collecting indel candidates + float max_frac; // for collecting indel candidates + int per_sample_flt; // indel filtering strategy + int *ref_pos, *alt_pos, npos, *ref_mq, *alt_mq, *ref_bq, *alt_bq, *fwd_mqs, *rev_mqs, nqual; // for bias tests + // for internal uses + int max_bases; + int indel_types[4]; // indel lengths + int maxins, indelreg; + int read_len; + char *inscns; + uint16_t *bases; // 5bit: unused, 6:quality, 1:is_rev, 4:2-bit base or indel allele (index to bcf_callaux_t.indel_types) + errmod_t *e; + void *rghash; +} bcf_callaux_t; + +typedef struct { + uint32_t ori_depth; + unsigned int mq0; + int32_t *ADF, *ADR; + float qsum[4]; + // The fields are: + // depth fwd .. ref (0) and non-ref (2) + // depth rev .. ref (1) and non-ref (3) + // baseQ .. ref (4) and non-ref (6) + // baseQ^2 .. ref (5) and non-ref (7) + // mapQ .. ref (8) and non-ref (10) + // mapQ^2 .. ref (9) and non-ref (11) + // minDist .. ref (12) and non-ref (14) + // minDist^2 .. ref (13) and non-ref (15) + // Note that this probably needs a more thorough fix: int types in + // bcf_call_t do overflow with high-coverage data, such as exomes, and + // BCFv2 supports only floats which may not suffice. + double anno[16]; + float p[25]; // phred-scaled likelihood of each genotype +} bcf_callret1_t; + +typedef struct { + int tid, pos; + bcf_hdr_t *bcf_hdr; + int a[5]; // alleles: ref, alt, alt2, alt3 + float qsum[5]; // for the QS tag + int n, n_alleles, shift, ori_ref, unseen; + int n_supp; // number of supporting non-reference reads + double anno[16]; + unsigned int depth, ori_depth, mq0; + int32_t *PL, *DP4, *ADR, *ADF; + uint8_t *fmt_arr; + float vdb; // variant distance bias + float mwu_pos, mwu_mq, mwu_bq, mwu_mqs; +#if CDF_MWU_TESTS + float mwu_pos_cdf, mwu_mq_cdf, mwu_bq_cdf, mwu_mqs_cdf; +#endif + float seg_bias; + kstring_t tmp; +} bcf_call_t; + +#ifdef __cplusplus +extern "C" { +#endif + + bcf_callaux_t *bcf_call_init(double theta, int min_baseQ); + void bcf_call_destroy(bcf_callaux_t *bca); + int bcf_call_glfgen(int _n, const bam_pileup1_t *pl, int ref_base, bcf_callaux_t *bca, bcf_callret1_t *r); + int bcf_call_combine(int n, const bcf_callret1_t *calls, bcf_callaux_t *bca, int ref_base /*4-bit*/, bcf_call_t *call); + int bcf_call2bcf(bcf_call_t *bc, bcf1_t *b, bcf_callret1_t *bcr, int fmt_flag, + const bcf_callaux_t *bca, const char *ref); + int bcf_call_gap_prep(int n, int *n_plp, bam_pileup1_t **plp, int pos, bcf_callaux_t *bca, const char *ref); + void bcf_callaux_clean(bcf_callaux_t *bca, bcf_call_t *call); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/bcftools/bam2bcf_indel.c b/bcftools/bam2bcf_indel.c new file mode 100644 index 0000000..6c367da --- /dev/null +++ b/bcftools/bam2bcf_indel.c @@ -0,0 +1,470 @@ +/* bam2bcf_indel.c -- indel caller. + + Copyright (C) 2010, 2011 Broad Institute. + Copyright (C) 2012-2014,2016 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include "bam2bcf.h" + +#include +KSORT_INIT_GENERIC(uint32_t) + +#define MINUS_CONST 0x10000000 +#define INDEL_WINDOW_SIZE 50 + +static int tpos2qpos(const bam1_core_t *c, const uint32_t *cigar, int32_t tpos, int is_left, int32_t *_tpos) +{ + int k, x = c->pos, y = 0, last_y = 0; + *_tpos = c->pos; + for (k = 0; k < c->n_cigar; ++k) { + int op = cigar[k] & BAM_CIGAR_MASK; + int l = cigar[k] >> BAM_CIGAR_SHIFT; + if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { + if (c->pos > tpos) return y; + if (x + l > tpos) { + *_tpos = tpos; + return y + (tpos - x); + } + x += l; y += l; + last_y = y; + } else if (op == BAM_CINS || op == BAM_CSOFT_CLIP) y += l; + else if (op == BAM_CDEL || op == BAM_CREF_SKIP) { + if (x + l > tpos) { + *_tpos = is_left? x : x + l; + return y; + } + x += l; + } + } + *_tpos = x; + return last_y; +} +// FIXME: check if the inserted sequence is consistent with the homopolymer run +// l is the relative gap length and l_run is the length of the homopolymer on the reference +static inline int est_seqQ(const bcf_callaux_t *bca, int l, int l_run) +{ + int q, qh; + q = bca->openQ + bca->extQ * (abs(l) - 1); + qh = l_run >= 3? (int)(bca->tandemQ * (double)abs(l) / l_run + .499) : 1000; + return q < qh? q : qh; +} + +static inline int est_indelreg(int pos, const char *ref, int l, char *ins4) +{ + int i, j, max = 0, max_i = pos, score = 0; + l = abs(l); + for (i = pos + 1, j = 0; ref[i]; ++i, ++j) { + if (ins4) score += (toupper(ref[i]) != "ACGTN"[(int)ins4[j%l]])? -10 : 1; + else score += (toupper(ref[i]) != toupper(ref[pos+1+j%l]))? -10 : 1; + if (score < 0) break; + if (max < score) max = score, max_i = i; + } + return max_i - pos; +} + +/* + notes: + - n .. number of samples + - the routine sets bam_pileup1_t.aux of each read as follows: + - 6: unused + - 6: the call; index to bcf_callaux_t.indel_types .. (aux>>16)&0x3f + - 8: estimated sequence quality .. (aux>>8)&0xff + - 8: indel quality .. aux&0xff + */ +int bcf_call_gap_prep(int n, int *n_plp, bam_pileup1_t **plp, int pos, bcf_callaux_t *bca, const char *ref) +{ + int i, s, j, k, t, n_types, *types, max_rd_len, left, right, max_ins, *score1, *score2, max_ref2; + int N, K, l_run, ref_type, n_alt; + char *inscns = 0, *ref2, *query, **ref_sample; + if (ref == 0 || bca == 0) return -1; + + // determine if there is a gap + for (s = N = 0; s < n; ++s) { + for (i = 0; i < n_plp[s]; ++i) + if (plp[s][i].indel != 0) break; + if (i < n_plp[s]) break; + } + if (s == n) return -1; // there is no indel at this position. + for (s = N = 0; s < n; ++s) N += n_plp[s]; // N is the total number of reads + { // find out how many types of indels are present + bca->max_support = bca->max_frac = 0; + int m, n_alt = 0, n_tot = 0, indel_support_ok = 0; + uint32_t *aux; + aux = (uint32_t*) calloc(N + 1, 4); + m = max_rd_len = 0; + aux[m++] = MINUS_CONST; // zero indel is always a type + for (s = 0; s < n; ++s) { + int na = 0, nt = 0; + for (i = 0; i < n_plp[s]; ++i) { + const bam_pileup1_t *p = plp[s] + i; + ++nt; + if (p->indel != 0) { + ++na; + aux[m++] = MINUS_CONST + p->indel; + } + j = bam_cigar2qlen(p->b->core.n_cigar, bam_get_cigar(p->b)); + if (j > max_rd_len) max_rd_len = j; + } + double frac = (double)na/nt; + if ( !indel_support_ok && na >= bca->min_support && frac >= bca->min_frac ) + indel_support_ok = 1; + if ( na > bca->max_support && frac > 0 ) bca->max_support = na, bca->max_frac = frac; + n_alt += na; + n_tot += nt; + } + // To prevent long stretches of N's to be mistaken for indels (sometimes thousands of bases), + // check the number of N's in the sequence and skip places where half or more reference bases are Ns. + int nN=0; for (i=pos; i-pos(i-pos) ) { free(aux); return -1; } + + ks_introsort(uint32_t, m, aux); + // squeeze out identical types + for (i = 1, n_types = 1; i < m; ++i) + if (aux[i] != aux[i-1]) ++n_types; + // Taking totals makes it hard to call rare indels + if ( !bca->per_sample_flt ) + indel_support_ok = ( (double)n_alt / n_tot < bca->min_frac || n_alt < bca->min_support ) ? 0 : 1; + if ( n_types == 1 || !indel_support_ok ) { // then skip + free(aux); return -1; + } + if (n_types >= 64) { + free(aux); + // TODO revisit how/whether to control printing this warning + if (hts_verbose >= 2) + fprintf(stderr, "[%s] excessive INDEL alleles at position %d. Skip the position.\n", __func__, pos + 1); + return -1; + } + types = (int*)calloc(n_types, sizeof(int)); + t = 0; + types[t++] = aux[0] - MINUS_CONST; + for (i = 1; i < m; ++i) + if (aux[i] != aux[i-1]) + types[t++] = aux[i] - MINUS_CONST; + free(aux); + for (t = 0; t < n_types; ++t) + if (types[t] == 0) break; + ref_type = t; // the index of the reference type (0) + } + { // calculate left and right boundary + left = pos > INDEL_WINDOW_SIZE? pos - INDEL_WINDOW_SIZE : 0; + right = pos + INDEL_WINDOW_SIZE; + if (types[0] < 0) right -= types[0]; + // in case the alignments stand out the reference + for (i = pos; i < right; ++i) + if (ref[i] == 0) break; + right = i; + } + /* The following block fixes a long-existing flaw in the INDEL + * calling model: the interference of nearby SNPs. However, it also + * reduces the power because sometimes, substitutions caused by + * indels are not distinguishable from true mutations. Multiple + * sequence realignment helps to increase the power. + * + * Masks mismatches present in at least 70% of the reads with 'N'. + */ + { // construct per-sample consensus + int L = right - left + 1, max_i, max2_i; + uint32_t *cns, max, max2; + char *ref0, *r; + ref_sample = (char**) calloc(n, sizeof(char*)); + cns = (uint32_t*) calloc(L, 4); + ref0 = (char*) calloc(L, 1); + for (i = 0; i < right - left; ++i) + ref0[i] = seq_nt16_table[(int)ref[i+left]]; + for (s = 0; s < n; ++s) { + r = ref_sample[s] = (char*) calloc(L, 1); + memset(cns, 0, sizeof(int) * L); + // collect ref and non-ref counts + for (i = 0; i < n_plp[s]; ++i) { + bam_pileup1_t *p = plp[s] + i; + bam1_t *b = p->b; + uint32_t *cigar = bam_get_cigar(b); + uint8_t *seq = bam_get_seq(b); + int x = b->core.pos, y = 0; + for (k = 0; k < b->core.n_cigar; ++k) { + int op = cigar[k]&0xf; + int j, l = cigar[k]>>4; + if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { + for (j = 0; j < l; ++j) + if (x + j >= left && x + j < right) + cns[x+j-left] += (bam_seqi(seq, y+j) == ref0[x+j-left])? 1 : 0x10000; + x += l; y += l; + } else if (op == BAM_CDEL || op == BAM_CREF_SKIP) x += l; + else if (op == BAM_CINS || op == BAM_CSOFT_CLIP) y += l; + } + } + // determine the consensus + for (i = 0; i < right - left; ++i) r[i] = ref0[i]; + max = max2 = 0; max_i = max2_i = -1; + for (i = 0; i < right - left; ++i) { + if (cns[i]>>16 >= max>>16) max2 = max, max2_i = max_i, max = cns[i], max_i = i; + else if (cns[i]>>16 >= max2>>16) max2 = cns[i], max2_i = i; + } + if ((double)(max&0xffff) / ((max&0xffff) + (max>>16)) >= 0.7) max_i = -1; + if ((double)(max2&0xffff) / ((max2&0xffff) + (max2>>16)) >= 0.7) max2_i = -1; + if (max_i >= 0) r[max_i] = 15; + if (max2_i >= 0) r[max2_i] = 15; + //for (i = 0; i < right - left; ++i) fputc("=ACMGRSVTWYHKDBN"[(int)r[i]], stderr); fputc('\n', stderr); + } + free(ref0); free(cns); + } + { // the length of the homopolymer run around the current position + int c = seq_nt16_table[(int)ref[pos + 1]]; + if (c == 15) l_run = 1; + else { + for (i = pos + 2; ref[i]; ++i) + if (seq_nt16_table[(int)ref[i]] != c) break; + l_run = i; + for (i = pos; i >= 0; --i) + if (seq_nt16_table[(int)ref[i]] != c) break; + l_run -= i + 1; + } + } + // construct the consensus sequence + max_ins = types[n_types - 1]; // max_ins is at least 0 + if (max_ins > 0) { + int *inscns_aux = (int*) calloc(5 * n_types * max_ins, sizeof(int)); + // count the number of occurrences of each base at each position for each type of insertion + for (t = 0; t < n_types; ++t) { + if (types[t] > 0) { + for (s = 0; s < n; ++s) { + for (i = 0; i < n_plp[s]; ++i) { + bam_pileup1_t *p = plp[s] + i; + if (p->indel == types[t]) { + uint8_t *seq = bam_get_seq(p->b); + for (k = 1; k <= p->indel; ++k) { + int c = seq_nt16_int[bam_seqi(seq, p->qpos + k)]; + assert(c<5); + ++inscns_aux[(t*max_ins+(k-1))*5 + c]; + } + } + } + } + } + } + // use the majority rule to construct the consensus + inscns = (char*) calloc(n_types * max_ins, 1); + for (t = 0; t < n_types; ++t) { + for (j = 0; j < types[t]; ++j) { + int max = 0, max_k = -1, *ia = &inscns_aux[(t*max_ins+j)*5]; + for (k = 0; k < 5; ++k) + if (ia[k] > max) + max = ia[k], max_k = k; + inscns[t*max_ins + j] = max? max_k : 4; + if ( max_k==4 ) { types[t] = 0; break; } // discard insertions which contain N's + } + } + free(inscns_aux); + } + // compute the likelihood given each type of indel for each read + max_ref2 = right - left + 2 + 2 * (max_ins > -types[0]? max_ins : -types[0]); + ref2 = (char*) calloc(max_ref2, 1); + query = (char*) calloc(right - left + max_rd_len + max_ins + 2, 1); + score1 = (int*) calloc(N * n_types, sizeof(int)); + score2 = (int*) calloc(N * n_types, sizeof(int)); + bca->indelreg = 0; + for (t = 0; t < n_types; ++t) { + int l, ir; + probaln_par_t apf1 = { 1e-4, 1e-2, 10 }, apf2 = { 1e-6, 1e-3, 10 }; + apf1.bw = apf2.bw = abs(types[t]) + 3; + // compute indelreg + if (types[t] == 0) ir = 0; + else if (types[t] > 0) ir = est_indelreg(pos, ref, types[t], &inscns[t*max_ins]); + else ir = est_indelreg(pos, ref, -types[t], 0); + if (ir > bca->indelreg) bca->indelreg = ir; +// fprintf(stderr, "%d, %d, %d\n", pos, types[t], ir); + // realignment + for (s = K = 0; s < n; ++s) { + // write ref2 + for (k = 0, j = left; j <= pos; ++j) + ref2[k++] = seq_nt16_int[(int)ref_sample[s][j-left]]; + if (types[t] <= 0) j += -types[t]; + else for (l = 0; l < types[t]; ++l) + ref2[k++] = inscns[t*max_ins + l]; + for (; j < right && ref[j]; ++j) + ref2[k++] = seq_nt16_int[(int)ref_sample[s][j-left]]; + for (; k < max_ref2; ++k) ref2[k] = 4; + if (j < right) right = j; + // align each read to ref2 + for (i = 0; i < n_plp[s]; ++i, ++K) { + bam_pileup1_t *p = plp[s] + i; + int qbeg, qend, tbeg, tend, sc, kk; + uint8_t *seq = bam_get_seq(p->b); + uint32_t *cigar = bam_get_cigar(p->b); + if (p->b->core.flag&4) continue; // unmapped reads + // FIXME: the following loop should be better moved outside; nonetheless, realignment should be much slower anyway. + for (kk = 0; kk < p->b->core.n_cigar; ++kk) + if ((cigar[kk]&BAM_CIGAR_MASK) == BAM_CREF_SKIP) break; + if (kk < p->b->core.n_cigar) continue; + // FIXME: the following skips soft clips, but using them may be more sensitive. + // determine the start and end of sequences for alignment + qbeg = tpos2qpos(&p->b->core, bam_get_cigar(p->b), left, 0, &tbeg); + qend = tpos2qpos(&p->b->core, bam_get_cigar(p->b), right, 1, &tend); + if (types[t] < 0) { + int l = -types[t]; + tbeg = tbeg - l > left? tbeg - l : left; + } + // write the query sequence + for (l = qbeg; l < qend; ++l) + query[l - qbeg] = seq_nt16_int[bam_seqi(seq, l)]; + { // do realignment; this is the bottleneck + const uint8_t *qual = bam_get_qual(p->b), *bq; + uint8_t *qq; + qq = (uint8_t*) calloc(qend - qbeg, 1); + bq = (uint8_t*)bam_aux_get(p->b, "ZQ"); + if (bq) ++bq; // skip type + for (l = qbeg; l < qend; ++l) { + qq[l - qbeg] = bq? qual[l] + (bq[l] - 64) : qual[l]; + if (qq[l - qbeg] > 30) qq[l - qbeg] = 30; + if (qq[l - qbeg] < 7) qq[l - qbeg] = 7; + } + sc = probaln_glocal((uint8_t*)ref2 + tbeg - left, tend - tbeg + abs(types[t]), + (uint8_t*)query, qend - qbeg, qq, &apf1, 0, 0); + l = (int)(100. * sc / (qend - qbeg) + .499); // used for adjusting indelQ below + if (l > 255) l = 255; + score1[K*n_types + t] = score2[K*n_types + t] = sc<<8 | l; + if (sc > 5) { + sc = probaln_glocal((uint8_t*)ref2 + tbeg - left, tend - tbeg + abs(types[t]), + (uint8_t*)query, qend - qbeg, qq, &apf2, 0, 0); + l = (int)(100. * sc / (qend - qbeg) + .499); + if (l > 255) l = 255; + score2[K*n_types + t] = sc<<8 | l; + } + free(qq); + } +#if 0 + for (l = 0; l < tend - tbeg + abs(types[t]); ++l) + fputc("ACGTN"[(int)ref2[tbeg-left+l]], stderr); + fputc('\n', stderr); + for (l = 0; l < qend - qbeg; ++l) fputc("ACGTN"[(int)query[l]], stderr); + fputc('\n', stderr); + fprintf(stderr, "pos=%d type=%d read=%d:%d name=%s qbeg=%d tbeg=%d score=%d\n", pos, types[t], s, i, bam_get_qname(p->b), qbeg, tbeg, sc); +#endif + } + } + } + free(ref2); free(query); + { // compute indelQ + int sc_a[16], sumq_a[16]; + int tmp, *sc = sc_a, *sumq = sumq_a; + if (n_types > 16) { + sc = (int *)malloc(n_types * sizeof(int)); + sumq = (int *)malloc(n_types * sizeof(int)); + } + memset(sumq, 0, n_types * sizeof(int)); + for (s = K = 0; s < n; ++s) { + for (i = 0; i < n_plp[s]; ++i, ++K) { + bam_pileup1_t *p = plp[s] + i; + int *sct = &score1[K*n_types], indelQ1, indelQ2, seqQ, indelQ; + for (t = 0; t < n_types; ++t) sc[t] = sct[t]<<6 | t; + for (t = 1; t < n_types; ++t) // insertion sort + for (j = t; j > 0 && sc[j] < sc[j-1]; --j) + tmp = sc[j], sc[j] = sc[j-1], sc[j-1] = tmp; + /* errmod_cal() assumes that if the call is wrong, the + * likelihoods of other events are equal. This is about + * right for substitutions, but is not desired for + * indels. To reuse errmod_cal(), I have to make + * compromise for multi-allelic indels. + */ + if ((sc[0]&0x3f) == ref_type) { + indelQ1 = (sc[1]>>14) - (sc[0]>>14); + seqQ = est_seqQ(bca, types[sc[1]&0x3f], l_run); + } else { + for (t = 0; t < n_types; ++t) // look for the reference type + if ((sc[t]&0x3f) == ref_type) break; + indelQ1 = (sc[t]>>14) - (sc[0]>>14); + seqQ = est_seqQ(bca, types[sc[0]&0x3f], l_run); + } + tmp = sc[0]>>6 & 0xff; + indelQ1 = tmp > 111? 0 : (int)((1. - tmp/111.) * indelQ1 + .499); // reduce indelQ + sct = &score2[K*n_types]; + for (t = 0; t < n_types; ++t) sc[t] = sct[t]<<6 | t; + for (t = 1; t < n_types; ++t) // insertion sort + for (j = t; j > 0 && sc[j] < sc[j-1]; --j) + tmp = sc[j], sc[j] = sc[j-1], sc[j-1] = tmp; + if ((sc[0]&0x3f) == ref_type) { + indelQ2 = (sc[1]>>14) - (sc[0]>>14); + } else { + for (t = 0; t < n_types; ++t) // look for the reference type + if ((sc[t]&0x3f) == ref_type) break; + indelQ2 = (sc[t]>>14) - (sc[0]>>14); + } + tmp = sc[0]>>6 & 0xff; + indelQ2 = tmp > 111? 0 : (int)((1. - tmp/111.) * indelQ2 + .499); + // pick the smaller between indelQ1 and indelQ2 + indelQ = indelQ1 < indelQ2? indelQ1 : indelQ2; + if (indelQ > 255) indelQ = 255; + if (seqQ > 255) seqQ = 255; + p->aux = (sc[0]&0x3f)<<16 | seqQ<<8 | indelQ; // use 22 bits in total + sumq[sc[0]&0x3f] += indelQ < seqQ? indelQ : seqQ; +// fprintf(stderr, "pos=%d read=%d:%d name=%s call=%d indelQ=%d seqQ=%d\n", pos, s, i, bam1_qname(p->b), types[sc[0]&0x3f], indelQ, seqQ); + } + } + // determine bca->indel_types[] and bca->inscns + bca->maxins = max_ins; + bca->inscns = (char*) realloc(bca->inscns, bca->maxins * 4); + for (t = 0; t < n_types; ++t) + sumq[t] = sumq[t]<<6 | t; + for (t = 1; t < n_types; ++t) // insertion sort + for (j = t; j > 0 && sumq[j] > sumq[j-1]; --j) + tmp = sumq[j], sumq[j] = sumq[j-1], sumq[j-1] = tmp; + for (t = 0; t < n_types; ++t) // look for the reference type + if ((sumq[t]&0x3f) == ref_type) break; + if (t) { // then move the reference type to the first + tmp = sumq[t]; + for (; t > 0; --t) sumq[t] = sumq[t-1]; + sumq[0] = tmp; + } + for (t = 0; t < 4; ++t) bca->indel_types[t] = B2B_INDEL_NULL; + for (t = 0; t < 4 && t < n_types; ++t) { + bca->indel_types[t] = types[sumq[t]&0x3f]; + memcpy(&bca->inscns[t * bca->maxins], &inscns[(sumq[t]&0x3f) * max_ins], bca->maxins); + } + // update p->aux + for (s = n_alt = 0; s < n; ++s) { + for (i = 0; i < n_plp[s]; ++i) { + bam_pileup1_t *p = plp[s] + i; + int x = types[p->aux>>16&0x3f]; + for (j = 0; j < 4; ++j) + if (x == bca->indel_types[j]) break; + p->aux = j<<16 | (j == 4? 0 : (p->aux&0xffff)); + if ((p->aux>>16&0x3f) > 0) ++n_alt; + //fprintf(stderr, "X pos=%d read=%d:%d name=%s call=%d type=%d seqQ=%d indelQ=%d\n", pos, s, i, bam_get_qname(p->b), (p->aux>>16)&0x3f, bca->indel_types[(p->aux>>16)&0x3f], (p->aux>>8)&0xff, p->aux&0xff); + } + } + + if (sc != sc_a) free(sc); + if (sumq != sumq_a) free(sumq); + } + free(score1); free(score2); + // free + for (i = 0; i < n; ++i) free(ref_sample[i]); + free(ref_sample); + free(types); free(inscns); + return n_alt > 0? 0 : -1; +} diff --git a/bcftools/bam2bcf_indel.c.pysam.c b/bcftools/bam2bcf_indel.c.pysam.c new file mode 100644 index 0000000..67fff21 --- /dev/null +++ b/bcftools/bam2bcf_indel.c.pysam.c @@ -0,0 +1,472 @@ +#include "bcftools.pysam.h" + +/* bam2bcf_indel.c -- indel caller. + + Copyright (C) 2010, 2011 Broad Institute. + Copyright (C) 2012-2014,2016 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include "bam2bcf.h" + +#include +KSORT_INIT_GENERIC(uint32_t) + +#define MINUS_CONST 0x10000000 +#define INDEL_WINDOW_SIZE 50 + +static int tpos2qpos(const bam1_core_t *c, const uint32_t *cigar, int32_t tpos, int is_left, int32_t *_tpos) +{ + int k, x = c->pos, y = 0, last_y = 0; + *_tpos = c->pos; + for (k = 0; k < c->n_cigar; ++k) { + int op = cigar[k] & BAM_CIGAR_MASK; + int l = cigar[k] >> BAM_CIGAR_SHIFT; + if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { + if (c->pos > tpos) return y; + if (x + l > tpos) { + *_tpos = tpos; + return y + (tpos - x); + } + x += l; y += l; + last_y = y; + } else if (op == BAM_CINS || op == BAM_CSOFT_CLIP) y += l; + else if (op == BAM_CDEL || op == BAM_CREF_SKIP) { + if (x + l > tpos) { + *_tpos = is_left? x : x + l; + return y; + } + x += l; + } + } + *_tpos = x; + return last_y; +} +// FIXME: check if the inserted sequence is consistent with the homopolymer run +// l is the relative gap length and l_run is the length of the homopolymer on the reference +static inline int est_seqQ(const bcf_callaux_t *bca, int l, int l_run) +{ + int q, qh; + q = bca->openQ + bca->extQ * (abs(l) - 1); + qh = l_run >= 3? (int)(bca->tandemQ * (double)abs(l) / l_run + .499) : 1000; + return q < qh? q : qh; +} + +static inline int est_indelreg(int pos, const char *ref, int l, char *ins4) +{ + int i, j, max = 0, max_i = pos, score = 0; + l = abs(l); + for (i = pos + 1, j = 0; ref[i]; ++i, ++j) { + if (ins4) score += (toupper(ref[i]) != "ACGTN"[(int)ins4[j%l]])? -10 : 1; + else score += (toupper(ref[i]) != toupper(ref[pos+1+j%l]))? -10 : 1; + if (score < 0) break; + if (max < score) max = score, max_i = i; + } + return max_i - pos; +} + +/* + notes: + - n .. number of samples + - the routine sets bam_pileup1_t.aux of each read as follows: + - 6: unused + - 6: the call; index to bcf_callaux_t.indel_types .. (aux>>16)&0x3f + - 8: estimated sequence quality .. (aux>>8)&0xff + - 8: indel quality .. aux&0xff + */ +int bcf_call_gap_prep(int n, int *n_plp, bam_pileup1_t **plp, int pos, bcf_callaux_t *bca, const char *ref) +{ + int i, s, j, k, t, n_types, *types, max_rd_len, left, right, max_ins, *score1, *score2, max_ref2; + int N, K, l_run, ref_type, n_alt; + char *inscns = 0, *ref2, *query, **ref_sample; + if (ref == 0 || bca == 0) return -1; + + // determine if there is a gap + for (s = N = 0; s < n; ++s) { + for (i = 0; i < n_plp[s]; ++i) + if (plp[s][i].indel != 0) break; + if (i < n_plp[s]) break; + } + if (s == n) return -1; // there is no indel at this position. + for (s = N = 0; s < n; ++s) N += n_plp[s]; // N is the total number of reads + { // find out how many types of indels are present + bca->max_support = bca->max_frac = 0; + int m, n_alt = 0, n_tot = 0, indel_support_ok = 0; + uint32_t *aux; + aux = (uint32_t*) calloc(N + 1, 4); + m = max_rd_len = 0; + aux[m++] = MINUS_CONST; // zero indel is always a type + for (s = 0; s < n; ++s) { + int na = 0, nt = 0; + for (i = 0; i < n_plp[s]; ++i) { + const bam_pileup1_t *p = plp[s] + i; + ++nt; + if (p->indel != 0) { + ++na; + aux[m++] = MINUS_CONST + p->indel; + } + j = bam_cigar2qlen(p->b->core.n_cigar, bam_get_cigar(p->b)); + if (j > max_rd_len) max_rd_len = j; + } + double frac = (double)na/nt; + if ( !indel_support_ok && na >= bca->min_support && frac >= bca->min_frac ) + indel_support_ok = 1; + if ( na > bca->max_support && frac > 0 ) bca->max_support = na, bca->max_frac = frac; + n_alt += na; + n_tot += nt; + } + // To prevent long stretches of N's to be mistaken for indels (sometimes thousands of bases), + // check the number of N's in the sequence and skip places where half or more reference bases are Ns. + int nN=0; for (i=pos; i-pos(i-pos) ) { free(aux); return -1; } + + ks_introsort(uint32_t, m, aux); + // squeeze out identical types + for (i = 1, n_types = 1; i < m; ++i) + if (aux[i] != aux[i-1]) ++n_types; + // Taking totals makes it hard to call rare indels + if ( !bca->per_sample_flt ) + indel_support_ok = ( (double)n_alt / n_tot < bca->min_frac || n_alt < bca->min_support ) ? 0 : 1; + if ( n_types == 1 || !indel_support_ok ) { // then skip + free(aux); return -1; + } + if (n_types >= 64) { + free(aux); + // TODO revisit how/whether to control printing this warning + if (hts_verbose >= 2) + fprintf(bcftools_stderr, "[%s] excessive INDEL alleles at position %d. Skip the position.\n", __func__, pos + 1); + return -1; + } + types = (int*)calloc(n_types, sizeof(int)); + t = 0; + types[t++] = aux[0] - MINUS_CONST; + for (i = 1; i < m; ++i) + if (aux[i] != aux[i-1]) + types[t++] = aux[i] - MINUS_CONST; + free(aux); + for (t = 0; t < n_types; ++t) + if (types[t] == 0) break; + ref_type = t; // the index of the reference type (0) + } + { // calculate left and right boundary + left = pos > INDEL_WINDOW_SIZE? pos - INDEL_WINDOW_SIZE : 0; + right = pos + INDEL_WINDOW_SIZE; + if (types[0] < 0) right -= types[0]; + // in case the alignments stand out the reference + for (i = pos; i < right; ++i) + if (ref[i] == 0) break; + right = i; + } + /* The following block fixes a long-existing flaw in the INDEL + * calling model: the interference of nearby SNPs. However, it also + * reduces the power because sometimes, substitutions caused by + * indels are not distinguishable from true mutations. Multiple + * sequence realignment helps to increase the power. + * + * Masks mismatches present in at least 70% of the reads with 'N'. + */ + { // construct per-sample consensus + int L = right - left + 1, max_i, max2_i; + uint32_t *cns, max, max2; + char *ref0, *r; + ref_sample = (char**) calloc(n, sizeof(char*)); + cns = (uint32_t*) calloc(L, 4); + ref0 = (char*) calloc(L, 1); + for (i = 0; i < right - left; ++i) + ref0[i] = seq_nt16_table[(int)ref[i+left]]; + for (s = 0; s < n; ++s) { + r = ref_sample[s] = (char*) calloc(L, 1); + memset(cns, 0, sizeof(int) * L); + // collect ref and non-ref counts + for (i = 0; i < n_plp[s]; ++i) { + bam_pileup1_t *p = plp[s] + i; + bam1_t *b = p->b; + uint32_t *cigar = bam_get_cigar(b); + uint8_t *seq = bam_get_seq(b); + int x = b->core.pos, y = 0; + for (k = 0; k < b->core.n_cigar; ++k) { + int op = cigar[k]&0xf; + int j, l = cigar[k]>>4; + if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { + for (j = 0; j < l; ++j) + if (x + j >= left && x + j < right) + cns[x+j-left] += (bam_seqi(seq, y+j) == ref0[x+j-left])? 1 : 0x10000; + x += l; y += l; + } else if (op == BAM_CDEL || op == BAM_CREF_SKIP) x += l; + else if (op == BAM_CINS || op == BAM_CSOFT_CLIP) y += l; + } + } + // determine the consensus + for (i = 0; i < right - left; ++i) r[i] = ref0[i]; + max = max2 = 0; max_i = max2_i = -1; + for (i = 0; i < right - left; ++i) { + if (cns[i]>>16 >= max>>16) max2 = max, max2_i = max_i, max = cns[i], max_i = i; + else if (cns[i]>>16 >= max2>>16) max2 = cns[i], max2_i = i; + } + if ((double)(max&0xffff) / ((max&0xffff) + (max>>16)) >= 0.7) max_i = -1; + if ((double)(max2&0xffff) / ((max2&0xffff) + (max2>>16)) >= 0.7) max2_i = -1; + if (max_i >= 0) r[max_i] = 15; + if (max2_i >= 0) r[max2_i] = 15; + //for (i = 0; i < right - left; ++i) fputc("=ACMGRSVTWYHKDBN"[(int)r[i]], bcftools_stderr); fputc('\n', bcftools_stderr); + } + free(ref0); free(cns); + } + { // the length of the homopolymer run around the current position + int c = seq_nt16_table[(int)ref[pos + 1]]; + if (c == 15) l_run = 1; + else { + for (i = pos + 2; ref[i]; ++i) + if (seq_nt16_table[(int)ref[i]] != c) break; + l_run = i; + for (i = pos; i >= 0; --i) + if (seq_nt16_table[(int)ref[i]] != c) break; + l_run -= i + 1; + } + } + // construct the consensus sequence + max_ins = types[n_types - 1]; // max_ins is at least 0 + if (max_ins > 0) { + int *inscns_aux = (int*) calloc(5 * n_types * max_ins, sizeof(int)); + // count the number of occurrences of each base at each position for each type of insertion + for (t = 0; t < n_types; ++t) { + if (types[t] > 0) { + for (s = 0; s < n; ++s) { + for (i = 0; i < n_plp[s]; ++i) { + bam_pileup1_t *p = plp[s] + i; + if (p->indel == types[t]) { + uint8_t *seq = bam_get_seq(p->b); + for (k = 1; k <= p->indel; ++k) { + int c = seq_nt16_int[bam_seqi(seq, p->qpos + k)]; + assert(c<5); + ++inscns_aux[(t*max_ins+(k-1))*5 + c]; + } + } + } + } + } + } + // use the majority rule to construct the consensus + inscns = (char*) calloc(n_types * max_ins, 1); + for (t = 0; t < n_types; ++t) { + for (j = 0; j < types[t]; ++j) { + int max = 0, max_k = -1, *ia = &inscns_aux[(t*max_ins+j)*5]; + for (k = 0; k < 5; ++k) + if (ia[k] > max) + max = ia[k], max_k = k; + inscns[t*max_ins + j] = max? max_k : 4; + if ( max_k==4 ) { types[t] = 0; break; } // discard insertions which contain N's + } + } + free(inscns_aux); + } + // compute the likelihood given each type of indel for each read + max_ref2 = right - left + 2 + 2 * (max_ins > -types[0]? max_ins : -types[0]); + ref2 = (char*) calloc(max_ref2, 1); + query = (char*) calloc(right - left + max_rd_len + max_ins + 2, 1); + score1 = (int*) calloc(N * n_types, sizeof(int)); + score2 = (int*) calloc(N * n_types, sizeof(int)); + bca->indelreg = 0; + for (t = 0; t < n_types; ++t) { + int l, ir; + probaln_par_t apf1 = { 1e-4, 1e-2, 10 }, apf2 = { 1e-6, 1e-3, 10 }; + apf1.bw = apf2.bw = abs(types[t]) + 3; + // compute indelreg + if (types[t] == 0) ir = 0; + else if (types[t] > 0) ir = est_indelreg(pos, ref, types[t], &inscns[t*max_ins]); + else ir = est_indelreg(pos, ref, -types[t], 0); + if (ir > bca->indelreg) bca->indelreg = ir; +// fprintf(bcftools_stderr, "%d, %d, %d\n", pos, types[t], ir); + // realignment + for (s = K = 0; s < n; ++s) { + // write ref2 + for (k = 0, j = left; j <= pos; ++j) + ref2[k++] = seq_nt16_int[(int)ref_sample[s][j-left]]; + if (types[t] <= 0) j += -types[t]; + else for (l = 0; l < types[t]; ++l) + ref2[k++] = inscns[t*max_ins + l]; + for (; j < right && ref[j]; ++j) + ref2[k++] = seq_nt16_int[(int)ref_sample[s][j-left]]; + for (; k < max_ref2; ++k) ref2[k] = 4; + if (j < right) right = j; + // align each read to ref2 + for (i = 0; i < n_plp[s]; ++i, ++K) { + bam_pileup1_t *p = plp[s] + i; + int qbeg, qend, tbeg, tend, sc, kk; + uint8_t *seq = bam_get_seq(p->b); + uint32_t *cigar = bam_get_cigar(p->b); + if (p->b->core.flag&4) continue; // unmapped reads + // FIXME: the following loop should be better moved outside; nonetheless, realignment should be much slower anyway. + for (kk = 0; kk < p->b->core.n_cigar; ++kk) + if ((cigar[kk]&BAM_CIGAR_MASK) == BAM_CREF_SKIP) break; + if (kk < p->b->core.n_cigar) continue; + // FIXME: the following skips soft clips, but using them may be more sensitive. + // determine the start and end of sequences for alignment + qbeg = tpos2qpos(&p->b->core, bam_get_cigar(p->b), left, 0, &tbeg); + qend = tpos2qpos(&p->b->core, bam_get_cigar(p->b), right, 1, &tend); + if (types[t] < 0) { + int l = -types[t]; + tbeg = tbeg - l > left? tbeg - l : left; + } + // write the query sequence + for (l = qbeg; l < qend; ++l) + query[l - qbeg] = seq_nt16_int[bam_seqi(seq, l)]; + { // do realignment; this is the bottleneck + const uint8_t *qual = bam_get_qual(p->b), *bq; + uint8_t *qq; + qq = (uint8_t*) calloc(qend - qbeg, 1); + bq = (uint8_t*)bam_aux_get(p->b, "ZQ"); + if (bq) ++bq; // skip type + for (l = qbeg; l < qend; ++l) { + qq[l - qbeg] = bq? qual[l] + (bq[l] - 64) : qual[l]; + if (qq[l - qbeg] > 30) qq[l - qbeg] = 30; + if (qq[l - qbeg] < 7) qq[l - qbeg] = 7; + } + sc = probaln_glocal((uint8_t*)ref2 + tbeg - left, tend - tbeg + abs(types[t]), + (uint8_t*)query, qend - qbeg, qq, &apf1, 0, 0); + l = (int)(100. * sc / (qend - qbeg) + .499); // used for adjusting indelQ below + if (l > 255) l = 255; + score1[K*n_types + t] = score2[K*n_types + t] = sc<<8 | l; + if (sc > 5) { + sc = probaln_glocal((uint8_t*)ref2 + tbeg - left, tend - tbeg + abs(types[t]), + (uint8_t*)query, qend - qbeg, qq, &apf2, 0, 0); + l = (int)(100. * sc / (qend - qbeg) + .499); + if (l > 255) l = 255; + score2[K*n_types + t] = sc<<8 | l; + } + free(qq); + } +#if 0 + for (l = 0; l < tend - tbeg + abs(types[t]); ++l) + fputc("ACGTN"[(int)ref2[tbeg-left+l]], bcftools_stderr); + fputc('\n', bcftools_stderr); + for (l = 0; l < qend - qbeg; ++l) fputc("ACGTN"[(int)query[l]], bcftools_stderr); + fputc('\n', bcftools_stderr); + fprintf(bcftools_stderr, "pos=%d type=%d read=%d:%d name=%s qbeg=%d tbeg=%d score=%d\n", pos, types[t], s, i, bam_get_qname(p->b), qbeg, tbeg, sc); +#endif + } + } + } + free(ref2); free(query); + { // compute indelQ + int sc_a[16], sumq_a[16]; + int tmp, *sc = sc_a, *sumq = sumq_a; + if (n_types > 16) { + sc = (int *)malloc(n_types * sizeof(int)); + sumq = (int *)malloc(n_types * sizeof(int)); + } + memset(sumq, 0, n_types * sizeof(int)); + for (s = K = 0; s < n; ++s) { + for (i = 0; i < n_plp[s]; ++i, ++K) { + bam_pileup1_t *p = plp[s] + i; + int *sct = &score1[K*n_types], indelQ1, indelQ2, seqQ, indelQ; + for (t = 0; t < n_types; ++t) sc[t] = sct[t]<<6 | t; + for (t = 1; t < n_types; ++t) // insertion sort + for (j = t; j > 0 && sc[j] < sc[j-1]; --j) + tmp = sc[j], sc[j] = sc[j-1], sc[j-1] = tmp; + /* errmod_cal() assumes that if the call is wrong, the + * likelihoods of other events are equal. This is about + * right for substitutions, but is not desired for + * indels. To reuse errmod_cal(), I have to make + * compromise for multi-allelic indels. + */ + if ((sc[0]&0x3f) == ref_type) { + indelQ1 = (sc[1]>>14) - (sc[0]>>14); + seqQ = est_seqQ(bca, types[sc[1]&0x3f], l_run); + } else { + for (t = 0; t < n_types; ++t) // look for the reference type + if ((sc[t]&0x3f) == ref_type) break; + indelQ1 = (sc[t]>>14) - (sc[0]>>14); + seqQ = est_seqQ(bca, types[sc[0]&0x3f], l_run); + } + tmp = sc[0]>>6 & 0xff; + indelQ1 = tmp > 111? 0 : (int)((1. - tmp/111.) * indelQ1 + .499); // reduce indelQ + sct = &score2[K*n_types]; + for (t = 0; t < n_types; ++t) sc[t] = sct[t]<<6 | t; + for (t = 1; t < n_types; ++t) // insertion sort + for (j = t; j > 0 && sc[j] < sc[j-1]; --j) + tmp = sc[j], sc[j] = sc[j-1], sc[j-1] = tmp; + if ((sc[0]&0x3f) == ref_type) { + indelQ2 = (sc[1]>>14) - (sc[0]>>14); + } else { + for (t = 0; t < n_types; ++t) // look for the reference type + if ((sc[t]&0x3f) == ref_type) break; + indelQ2 = (sc[t]>>14) - (sc[0]>>14); + } + tmp = sc[0]>>6 & 0xff; + indelQ2 = tmp > 111? 0 : (int)((1. - tmp/111.) * indelQ2 + .499); + // pick the smaller between indelQ1 and indelQ2 + indelQ = indelQ1 < indelQ2? indelQ1 : indelQ2; + if (indelQ > 255) indelQ = 255; + if (seqQ > 255) seqQ = 255; + p->aux = (sc[0]&0x3f)<<16 | seqQ<<8 | indelQ; // use 22 bits in total + sumq[sc[0]&0x3f] += indelQ < seqQ? indelQ : seqQ; +// fprintf(bcftools_stderr, "pos=%d read=%d:%d name=%s call=%d indelQ=%d seqQ=%d\n", pos, s, i, bam1_qname(p->b), types[sc[0]&0x3f], indelQ, seqQ); + } + } + // determine bca->indel_types[] and bca->inscns + bca->maxins = max_ins; + bca->inscns = (char*) realloc(bca->inscns, bca->maxins * 4); + for (t = 0; t < n_types; ++t) + sumq[t] = sumq[t]<<6 | t; + for (t = 1; t < n_types; ++t) // insertion sort + for (j = t; j > 0 && sumq[j] > sumq[j-1]; --j) + tmp = sumq[j], sumq[j] = sumq[j-1], sumq[j-1] = tmp; + for (t = 0; t < n_types; ++t) // look for the reference type + if ((sumq[t]&0x3f) == ref_type) break; + if (t) { // then move the reference type to the first + tmp = sumq[t]; + for (; t > 0; --t) sumq[t] = sumq[t-1]; + sumq[0] = tmp; + } + for (t = 0; t < 4; ++t) bca->indel_types[t] = B2B_INDEL_NULL; + for (t = 0; t < 4 && t < n_types; ++t) { + bca->indel_types[t] = types[sumq[t]&0x3f]; + memcpy(&bca->inscns[t * bca->maxins], &inscns[(sumq[t]&0x3f) * max_ins], bca->maxins); + } + // update p->aux + for (s = n_alt = 0; s < n; ++s) { + for (i = 0; i < n_plp[s]; ++i) { + bam_pileup1_t *p = plp[s] + i; + int x = types[p->aux>>16&0x3f]; + for (j = 0; j < 4; ++j) + if (x == bca->indel_types[j]) break; + p->aux = j<<16 | (j == 4? 0 : (p->aux&0xffff)); + if ((p->aux>>16&0x3f) > 0) ++n_alt; + //fprintf(bcftools_stderr, "X pos=%d read=%d:%d name=%s call=%d type=%d seqQ=%d indelQ=%d\n", pos, s, i, bam_get_qname(p->b), (p->aux>>16)&0x3f, bca->indel_types[(p->aux>>16)&0x3f], (p->aux>>8)&0xff, p->aux&0xff); + } + } + + if (sc != sc_a) free(sc); + if (sumq != sumq_a) free(sumq); + } + free(score1); free(score2); + // free + for (i = 0; i < n; ++i) free(ref_sample[i]); + free(ref_sample); + free(types); free(inscns); + return n_alt > 0? 0 : -1; +} diff --git a/bcftools/bam_sample.c b/bcftools/bam_sample.c new file mode 100644 index 0000000..66f5729 --- /dev/null +++ b/bcftools/bam_sample.c @@ -0,0 +1,393 @@ +/* bam_sample.c -- group data by sample. + + Copyright (C) 2010, 2011 Broad Institute. + Copyright (C) 2013, 2016 Genome Research Ltd. + + Author: Heng Li , Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include "bam_sample.h" +#include "bcftools.h" + + +typedef struct +{ + char *fname; + void *rg2idx; // hash: read group name to BCF output sample index. Maintained by bsmpl_add_readgroup + int default_idx; // default BCF output sample index, set only when all readgroups are treated as one sample +} +file_t; + +struct _bam_smpl_t +{ + kstring_t tmp; + file_t *files; + int ignore_rg, nsmpl, nfiles; + char **smpl; // list of BCF output sample names. Maintained by bsmpl_add_readgroup + void *sample_list; // hash: BAM input sample name to BCF output sample name. This is the -s/-S list + int sample_logic; // the -s/-S logic, 1: include, 0: exclude + void *rg_list; // hash: BAM/rg_id to sample name or */rg_id for global ids. This is the -G list + int rg_logic; // the -G logic, 1: include, 0: exclude + void *name2idx; // hash: BCF output sample name to BCF output sample index. Maintained by bsmpl_add_readgroup +}; + +bam_smpl_t *bam_smpl_init(void) +{ + bam_smpl_t *bsmpl; + bsmpl = (bam_smpl_t*) calloc(1, sizeof(bam_smpl_t)); + bsmpl->name2idx = khash_str2int_init(); + return bsmpl; +} + +void bam_smpl_destroy(bam_smpl_t *bsmpl) +{ + if ( !bsmpl ) return; + if ( bsmpl->name2idx ) khash_str2int_destroy_free(bsmpl->name2idx); + if ( bsmpl->sample_list ) khash_str2str_destroy_free_all(bsmpl->sample_list); + if ( bsmpl->rg_list ) khash_str2str_destroy_free_all(bsmpl->rg_list); + int i; + for (i=0; infiles; i++) + { + file_t *file = &bsmpl->files[i]; + if ( file->rg2idx ) khash_str2int_destroy_free(file->rg2idx); + free(file->fname); + } + free(bsmpl->smpl); + free(bsmpl->files); + free(bsmpl->tmp.s); + free(bsmpl); +} + +void bam_smpl_ignore_readgroups(bam_smpl_t* bsmpl) +{ + bsmpl->ignore_rg = 1; +} + +static void bsmpl_add_readgroup(bam_smpl_t *bsmpl, file_t *file, const char *rg_id, const char *smpl_name) +{ + int ismpl = -1; + if ( smpl_name ) + { + if ( khash_str2int_get(bsmpl->name2idx,smpl_name,&ismpl) < 0 ) + { + // new sample + bsmpl->nsmpl++; + bsmpl->smpl = (char**) realloc(bsmpl->smpl,sizeof(char*)*bsmpl->nsmpl); + bsmpl->smpl[bsmpl->nsmpl-1] = strdup(smpl_name); + ismpl = khash_str2int_inc(bsmpl->name2idx,bsmpl->smpl[bsmpl->nsmpl-1]); + } + } + if ( !strcmp("*",rg_id) ) + { + // all read groups in the bam treated as the same sample + file->default_idx = ismpl; + return; + } + if ( !file->rg2idx ) file->rg2idx = khash_str2int_init(); + if ( khash_str2int_has_key(file->rg2idx,rg_id) ) return; // duplicate @RG:ID + khash_str2int_set(file->rg2idx, strdup(rg_id), ismpl); +} +static int bsmpl_keep_readgroup(bam_smpl_t *bsmpl, file_t *file, const char *rg_id, const char **smpl_name) +{ + char *rg_smpl = khash_str2str_get(bsmpl->rg_list,rg_id); // unique read group present in one bam only + if ( !rg_smpl ) + { + // read group specific to this bam + bsmpl->tmp.l = 0; + ksprintf(&bsmpl->tmp,"%s\t%s",rg_id,file->fname); + rg_smpl = khash_str2str_get(bsmpl->rg_list,bsmpl->tmp.s); + } + if ( !rg_smpl ) + { + // any read group in this file? + bsmpl->tmp.l = 0; + ksprintf(&bsmpl->tmp,"*\t%s",file->fname); + rg_smpl = khash_str2str_get(bsmpl->rg_list,bsmpl->tmp.s); + } + if ( !rg_smpl && bsmpl->rg_logic ) return 0; + if ( rg_smpl && !bsmpl->rg_logic ) return 0; + + if ( rg_smpl && rg_smpl[0]!='\t' ) *smpl_name = rg_smpl; // rename the sample + return 1; +} + +/* + The logic of this function is a bit complicated because we want to work + also with broken bams containing read groups that are not listed in the + header. The desired behavior is as follows: + - when -G is given, read groups which are not listed in the header must + be given explicitly using the "?" symbol in -G. + Otherwise: + - if the bam has no header, all reads in the file are assigned to a + single sample named after the file + - if there is at least one sample defined in the header, reads with no + read group id or with a read group id not listed in the header are + assigned to the first sample encountered in the header +*/ +int bam_smpl_add_bam(bam_smpl_t *bsmpl, char *bam_hdr, const char *fname) +{ + bsmpl->nfiles++; + bsmpl->files = (file_t*) realloc(bsmpl->files,bsmpl->nfiles*sizeof(file_t)); + file_t *file = &bsmpl->files[bsmpl->nfiles-1]; + memset(file,0,sizeof(file_t)); + file->fname = strdup(fname); + file->default_idx = -1; + + if ( bsmpl->ignore_rg || !bam_hdr ) + { + // The option --ignore-RG is set or there is no BAM header: use the file name as the sample name + bsmpl_add_readgroup(bsmpl,file,"*",file->fname); + return bsmpl->nfiles-1; + } + + void *bam_smpls = khash_str2int_init(); + int first_smpl = -1, nskipped = 0; + const char *p = bam_hdr, *q, *r; + while ((q = strstr(p, "@RG")) != 0) + { + p = q + 3; + r = q = 0; + if ((q = strstr(p, "\tID:")) != 0) q += 4; + if ((r = strstr(p, "\tSM:")) != 0) r += 4; + if (r && q) + { + char *u, *v; + int ioq, ior; + for (u = (char*)q; *u && *u != '\t' && *u != '\n'; ++u); + for (v = (char*)r; *v && *v != '\t' && *v != '\n'; ++v); + ioq = *u; ior = *v; *u = *v = '\0'; + + // q now points to a null terminated read group id + // r points to a null terminated sample name + if ( !strcmp("*",q) || !strcmp("?",q) ) + error("Error: the read group IDs \"*\" and \"?\" have a special meaning in the mpileup code. Please fix the code or the bam: %s\n", fname); + + int accept_rg = 1; + if ( bsmpl->sample_list ) + { + // restrict samples based on the -s/-S options + char *name = khash_str2str_get(bsmpl->sample_list,r); + if ( bsmpl->sample_logic==0 ) + accept_rg = name ? 0 : 1; + else if ( !name ) + accept_rg = 0; + else + r = name; + } + if ( accept_rg && bsmpl->rg_list ) + { + // restrict readgroups based on the -G option, possibly renaming the sample + accept_rg = bsmpl_keep_readgroup(bsmpl,file,q,&r); + } + if ( accept_rg ) + bsmpl_add_readgroup(bsmpl,file,q,r); + else + { + bsmpl_add_readgroup(bsmpl,file,q,NULL); // ignore this RG but note that it was seen in the header + nskipped++; + } + + if ( first_smpl<0 ) + khash_str2int_get(bsmpl->name2idx,r,&first_smpl); + if ( !khash_str2int_has_key(bam_smpls,r) ) + khash_str2int_inc(bam_smpls,strdup(r)); + + *u = ioq; *v = ior; + } + else + break; + p = q > r ? q : r; + } + int nsmpls = khash_str2int_size(bam_smpls); + khash_str2int_destroy_free(bam_smpls); + + const char *smpl_name = NULL; + int accept_null_rg = 1; + if ( bsmpl->rg_list && !bsmpl_keep_readgroup(bsmpl,file,"?",&smpl_name) ) accept_null_rg = 0; + if ( bsmpl->sample_list && first_smpl==-1 ) accept_null_rg = 0; + + if ( !accept_null_rg && first_smpl==-1 ) + { + // no suitable read group is available in this bam: ignore the whole file. + free(file->fname); + bsmpl->nfiles--; + return -1; + } + if ( !accept_null_rg ) return bsmpl->nfiles-1; + if ( nsmpls==1 && !nskipped ) + { + file->default_idx = first_smpl; + return bsmpl->nfiles-1; + } + if ( !smpl_name ) smpl_name = first_smpl==-1 ? file->fname : bsmpl->smpl[first_smpl]; + + bsmpl_add_readgroup(bsmpl,file,"?",smpl_name); + return bsmpl->nfiles-1; +} + +const char **bam_smpl_get_samples(bam_smpl_t *bsmpl, int *nsmpl) +{ + *nsmpl = bsmpl->nsmpl; + return (const char**)bsmpl->smpl; +} + +int bam_smpl_get_sample_id(bam_smpl_t *bsmpl, int bam_id, bam1_t *bam_rec) +{ + file_t *file = &bsmpl->files[bam_id]; + if ( file->default_idx >= 0 ) return file->default_idx; + + char *aux_rg = (char*) bam_aux_get(bam_rec, "RG"); + aux_rg = aux_rg ? aux_rg+1 : "?"; + + int rg_id; + if ( khash_str2int_get(file->rg2idx, aux_rg, &rg_id)==0 ) return rg_id; + if ( khash_str2int_get(file->rg2idx, "?", &rg_id)==0 ) return rg_id; + return -1; +} + +int bam_smpl_add_samples(bam_smpl_t *bsmpl, char *list, int is_file) +{ + if ( list[0]!='^' ) bsmpl->sample_logic = 1; + else list++; + + int i, nsamples = 0; + char **samples = hts_readlist(list, is_file, &nsamples); + if ( !nsamples ) return 0; + + kstring_t ori = {0,0,0}; + kstring_t ren = {0,0,0}; + + bsmpl->sample_list = khash_str2str_init(); + for (i=0; isample_list,strdup(ori.s),strdup(ren.l?ren.s:ori.s)); + free(samples[i]); + } + free(samples); + free(ori.s); + free(ren.s); + return nsamples; +} + +int bam_smpl_add_readgroups(bam_smpl_t *bsmpl, char *list, int is_file) +{ + if ( list[0]!='^' ) bsmpl->rg_logic = 1; + else list++; + + int i, nrows = 0; + char **rows = hts_readlist(list, is_file, &nrows); + if ( !nrows ) return 0; + + kstring_t fld1 = {0,0,0}; + kstring_t fld2 = {0,0,0}; + kstring_t fld3 = {0,0,0}; + + bsmpl->rg_list = khash_str2str_init(); + for (i=0; irg_list,fld1.s); + if ( !value ) + khash_str2str_set(bsmpl->rg_list,strdup(fld1.s),strdup(fld2.l?fld2.s:"\t")); + else if ( strcmp(value,fld2.l?fld2.s:"\t") ) + error("Error: The read group \"%s\" was assigned to two different samples: \"%s\" and \"%s\"\n", fld1.s,value,fld2.l?fld2.s:"\t"); + free(rows[i]); + } + free(rows); + free(fld1.s); + free(fld2.s); + free(fld3.s); + return nrows; +} + + diff --git a/bcftools/bam_sample.c.pysam.c b/bcftools/bam_sample.c.pysam.c new file mode 100644 index 0000000..c25358f --- /dev/null +++ b/bcftools/bam_sample.c.pysam.c @@ -0,0 +1,395 @@ +#include "bcftools.pysam.h" + +/* bam_sample.c -- group data by sample. + + Copyright (C) 2010, 2011 Broad Institute. + Copyright (C) 2013, 2016 Genome Research Ltd. + + Author: Heng Li , Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include "bam_sample.h" +#include "bcftools.h" + + +typedef struct +{ + char *fname; + void *rg2idx; // hash: read group name to BCF output sample index. Maintained by bsmpl_add_readgroup + int default_idx; // default BCF output sample index, set only when all readgroups are treated as one sample +} +file_t; + +struct _bam_smpl_t +{ + kstring_t tmp; + file_t *files; + int ignore_rg, nsmpl, nfiles; + char **smpl; // list of BCF output sample names. Maintained by bsmpl_add_readgroup + void *sample_list; // hash: BAM input sample name to BCF output sample name. This is the -s/-S list + int sample_logic; // the -s/-S logic, 1: include, 0: exclude + void *rg_list; // hash: BAM/rg_id to sample name or */rg_id for global ids. This is the -G list + int rg_logic; // the -G logic, 1: include, 0: exclude + void *name2idx; // hash: BCF output sample name to BCF output sample index. Maintained by bsmpl_add_readgroup +}; + +bam_smpl_t *bam_smpl_init(void) +{ + bam_smpl_t *bsmpl; + bsmpl = (bam_smpl_t*) calloc(1, sizeof(bam_smpl_t)); + bsmpl->name2idx = khash_str2int_init(); + return bsmpl; +} + +void bam_smpl_destroy(bam_smpl_t *bsmpl) +{ + if ( !bsmpl ) return; + if ( bsmpl->name2idx ) khash_str2int_destroy_free(bsmpl->name2idx); + if ( bsmpl->sample_list ) khash_str2str_destroy_free_all(bsmpl->sample_list); + if ( bsmpl->rg_list ) khash_str2str_destroy_free_all(bsmpl->rg_list); + int i; + for (i=0; infiles; i++) + { + file_t *file = &bsmpl->files[i]; + if ( file->rg2idx ) khash_str2int_destroy_free(file->rg2idx); + free(file->fname); + } + free(bsmpl->smpl); + free(bsmpl->files); + free(bsmpl->tmp.s); + free(bsmpl); +} + +void bam_smpl_ignore_readgroups(bam_smpl_t* bsmpl) +{ + bsmpl->ignore_rg = 1; +} + +static void bsmpl_add_readgroup(bam_smpl_t *bsmpl, file_t *file, const char *rg_id, const char *smpl_name) +{ + int ismpl = -1; + if ( smpl_name ) + { + if ( khash_str2int_get(bsmpl->name2idx,smpl_name,&ismpl) < 0 ) + { + // new sample + bsmpl->nsmpl++; + bsmpl->smpl = (char**) realloc(bsmpl->smpl,sizeof(char*)*bsmpl->nsmpl); + bsmpl->smpl[bsmpl->nsmpl-1] = strdup(smpl_name); + ismpl = khash_str2int_inc(bsmpl->name2idx,bsmpl->smpl[bsmpl->nsmpl-1]); + } + } + if ( !strcmp("*",rg_id) ) + { + // all read groups in the bam treated as the same sample + file->default_idx = ismpl; + return; + } + if ( !file->rg2idx ) file->rg2idx = khash_str2int_init(); + if ( khash_str2int_has_key(file->rg2idx,rg_id) ) return; // duplicate @RG:ID + khash_str2int_set(file->rg2idx, strdup(rg_id), ismpl); +} +static int bsmpl_keep_readgroup(bam_smpl_t *bsmpl, file_t *file, const char *rg_id, const char **smpl_name) +{ + char *rg_smpl = khash_str2str_get(bsmpl->rg_list,rg_id); // unique read group present in one bam only + if ( !rg_smpl ) + { + // read group specific to this bam + bsmpl->tmp.l = 0; + ksprintf(&bsmpl->tmp,"%s\t%s",rg_id,file->fname); + rg_smpl = khash_str2str_get(bsmpl->rg_list,bsmpl->tmp.s); + } + if ( !rg_smpl ) + { + // any read group in this file? + bsmpl->tmp.l = 0; + ksprintf(&bsmpl->tmp,"*\t%s",file->fname); + rg_smpl = khash_str2str_get(bsmpl->rg_list,bsmpl->tmp.s); + } + if ( !rg_smpl && bsmpl->rg_logic ) return 0; + if ( rg_smpl && !bsmpl->rg_logic ) return 0; + + if ( rg_smpl && rg_smpl[0]!='\t' ) *smpl_name = rg_smpl; // rename the sample + return 1; +} + +/* + The logic of this function is a bit complicated because we want to work + also with broken bams containing read groups that are not listed in the + header. The desired behavior is as follows: + - when -G is given, read groups which are not listed in the header must + be given explicitly using the "?" symbol in -G. + Otherwise: + - if the bam has no header, all reads in the file are assigned to a + single sample named after the file + - if there is at least one sample defined in the header, reads with no + read group id or with a read group id not listed in the header are + assigned to the first sample encountered in the header +*/ +int bam_smpl_add_bam(bam_smpl_t *bsmpl, char *bam_hdr, const char *fname) +{ + bsmpl->nfiles++; + bsmpl->files = (file_t*) realloc(bsmpl->files,bsmpl->nfiles*sizeof(file_t)); + file_t *file = &bsmpl->files[bsmpl->nfiles-1]; + memset(file,0,sizeof(file_t)); + file->fname = strdup(fname); + file->default_idx = -1; + + if ( bsmpl->ignore_rg || !bam_hdr ) + { + // The option --ignore-RG is set or there is no BAM header: use the file name as the sample name + bsmpl_add_readgroup(bsmpl,file,"*",file->fname); + return bsmpl->nfiles-1; + } + + void *bam_smpls = khash_str2int_init(); + int first_smpl = -1, nskipped = 0; + const char *p = bam_hdr, *q, *r; + while ((q = strstr(p, "@RG")) != 0) + { + p = q + 3; + r = q = 0; + if ((q = strstr(p, "\tID:")) != 0) q += 4; + if ((r = strstr(p, "\tSM:")) != 0) r += 4; + if (r && q) + { + char *u, *v; + int ioq, ior; + for (u = (char*)q; *u && *u != '\t' && *u != '\n'; ++u); + for (v = (char*)r; *v && *v != '\t' && *v != '\n'; ++v); + ioq = *u; ior = *v; *u = *v = '\0'; + + // q now points to a null terminated read group id + // r points to a null terminated sample name + if ( !strcmp("*",q) || !strcmp("?",q) ) + error("Error: the read group IDs \"*\" and \"?\" have a special meaning in the mpileup code. Please fix the code or the bam: %s\n", fname); + + int accept_rg = 1; + if ( bsmpl->sample_list ) + { + // restrict samples based on the -s/-S options + char *name = khash_str2str_get(bsmpl->sample_list,r); + if ( bsmpl->sample_logic==0 ) + accept_rg = name ? 0 : 1; + else if ( !name ) + accept_rg = 0; + else + r = name; + } + if ( accept_rg && bsmpl->rg_list ) + { + // restrict readgroups based on the -G option, possibly renaming the sample + accept_rg = bsmpl_keep_readgroup(bsmpl,file,q,&r); + } + if ( accept_rg ) + bsmpl_add_readgroup(bsmpl,file,q,r); + else + { + bsmpl_add_readgroup(bsmpl,file,q,NULL); // ignore this RG but note that it was seen in the header + nskipped++; + } + + if ( first_smpl<0 ) + khash_str2int_get(bsmpl->name2idx,r,&first_smpl); + if ( !khash_str2int_has_key(bam_smpls,r) ) + khash_str2int_inc(bam_smpls,strdup(r)); + + *u = ioq; *v = ior; + } + else + break; + p = q > r ? q : r; + } + int nsmpls = khash_str2int_size(bam_smpls); + khash_str2int_destroy_free(bam_smpls); + + const char *smpl_name = NULL; + int accept_null_rg = 1; + if ( bsmpl->rg_list && !bsmpl_keep_readgroup(bsmpl,file,"?",&smpl_name) ) accept_null_rg = 0; + if ( bsmpl->sample_list && first_smpl==-1 ) accept_null_rg = 0; + + if ( !accept_null_rg && first_smpl==-1 ) + { + // no suitable read group is available in this bam: ignore the whole file. + free(file->fname); + bsmpl->nfiles--; + return -1; + } + if ( !accept_null_rg ) return bsmpl->nfiles-1; + if ( nsmpls==1 && !nskipped ) + { + file->default_idx = first_smpl; + return bsmpl->nfiles-1; + } + if ( !smpl_name ) smpl_name = first_smpl==-1 ? file->fname : bsmpl->smpl[first_smpl]; + + bsmpl_add_readgroup(bsmpl,file,"?",smpl_name); + return bsmpl->nfiles-1; +} + +const char **bam_smpl_get_samples(bam_smpl_t *bsmpl, int *nsmpl) +{ + *nsmpl = bsmpl->nsmpl; + return (const char**)bsmpl->smpl; +} + +int bam_smpl_get_sample_id(bam_smpl_t *bsmpl, int bam_id, bam1_t *bam_rec) +{ + file_t *file = &bsmpl->files[bam_id]; + if ( file->default_idx >= 0 ) return file->default_idx; + + char *aux_rg = (char*) bam_aux_get(bam_rec, "RG"); + aux_rg = aux_rg ? aux_rg+1 : "?"; + + int rg_id; + if ( khash_str2int_get(file->rg2idx, aux_rg, &rg_id)==0 ) return rg_id; + if ( khash_str2int_get(file->rg2idx, "?", &rg_id)==0 ) return rg_id; + return -1; +} + +int bam_smpl_add_samples(bam_smpl_t *bsmpl, char *list, int is_file) +{ + if ( list[0]!='^' ) bsmpl->sample_logic = 1; + else list++; + + int i, nsamples = 0; + char **samples = hts_readlist(list, is_file, &nsamples); + if ( !nsamples ) return 0; + + kstring_t ori = {0,0,0}; + kstring_t ren = {0,0,0}; + + bsmpl->sample_list = khash_str2str_init(); + for (i=0; isample_list,strdup(ori.s),strdup(ren.l?ren.s:ori.s)); + free(samples[i]); + } + free(samples); + free(ori.s); + free(ren.s); + return nsamples; +} + +int bam_smpl_add_readgroups(bam_smpl_t *bsmpl, char *list, int is_file) +{ + if ( list[0]!='^' ) bsmpl->rg_logic = 1; + else list++; + + int i, nrows = 0; + char **rows = hts_readlist(list, is_file, &nrows); + if ( !nrows ) return 0; + + kstring_t fld1 = {0,0,0}; + kstring_t fld2 = {0,0,0}; + kstring_t fld3 = {0,0,0}; + + bsmpl->rg_list = khash_str2str_init(); + for (i=0; irg_list,fld1.s); + if ( !value ) + khash_str2str_set(bsmpl->rg_list,strdup(fld1.s),strdup(fld2.l?fld2.s:"\t")); + else if ( strcmp(value,fld2.l?fld2.s:"\t") ) + error("Error: The read group \"%s\" was assigned to two different samples: \"%s\" and \"%s\"\n", fld1.s,value,fld2.l?fld2.s:"\t"); + free(rows[i]); + } + free(rows); + free(fld1.s); + free(fld2.s); + free(fld3.s); + return nrows; +} + + diff --git a/bcftools/bam_sample.h b/bcftools/bam_sample.h new file mode 100644 index 0000000..5cbcc39 --- /dev/null +++ b/bcftools/bam_sample.h @@ -0,0 +1,50 @@ +/* bam_sample.h -- group data by sample. + + Copyright (C) 2010 Broad Institute. + Copyright (C) 2016 Genome Research Ltd. + + Author: Heng Li , Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#ifndef BAM_SAMPLE_H +#define BAM_SAMPLE_H + +#include + +typedef struct _bam_smpl_t bam_smpl_t; + +bam_smpl_t *bam_smpl_init(void); + +int bam_smpl_add_samples(bam_smpl_t *bsmpl, char *list, int is_file); +int bam_smpl_add_readgroups(bam_smpl_t *bsmpl, char *list, int is_file); +void bam_smpl_ignore_readgroups(bam_smpl_t* bsmpl); + +// The above should be called only before bams are added. Returns the BAM id +// to be passed to bam_smpl_get_sample_id() later. It is safe to assume +// sequential numbering, starting from 0. +// +int bam_smpl_add_bam(bam_smpl_t *bsmpl, char *bam_hdr, const char *fname); + +const char **bam_smpl_get_samples(bam_smpl_t *bsmpl, int *nsmpl); +int bam_smpl_get_sample_id(bam_smpl_t *bsmpl, int bam_id, bam1_t *bam_rec); + +void bam_smpl_destroy(bam_smpl_t *bsmpl); + +#endif diff --git a/bcftools/bcftools.h b/bcftools/bcftools.h new file mode 100644 index 0000000..dde3ab0 --- /dev/null +++ b/bcftools/bcftools.h @@ -0,0 +1,79 @@ +/* bcftools.h -- utility function declarations. + + Copyright (C) 2013 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#ifndef BCFTOOLS_H +#define BCFTOOLS_H + +#include +#include +#include +#include + +#define FT_TAB_TEXT 0 // custom tab-delimited text file +#define FT_GZ 1 +#define FT_VCF 2 +#define FT_VCF_GZ (FT_GZ|FT_VCF) +#define FT_BCF (1<<2) +#define FT_BCF_GZ (FT_GZ|FT_BCF) +#define FT_STDIN (1<<3) + +char *bcftools_version(void); +void error(const char *format, ...) HTS_NORETURN; +void bcf_hdr_append_version(bcf_hdr_t *hdr, int argc, char **argv, const char *cmd); +const char *hts_bcf_wmode(int file_type); + +void *smalloc(size_t size); // safe malloc + +static inline char gt2iupac(char a, char b) +{ + static const char iupac[4][4] = { {'A','M','R','W'},{'M','C','S','Y'},{'R','S','G','K'},{'W','Y','K','T'} }; + if ( a>='a' ) a -= 'a' - 'A'; + if ( b>='a' ) b -= 'a' - 'A'; + if ( a=='A' ) a = 0; + else if ( a=='C' ) a = 1; + else if ( a=='G' ) a = 2; + else if ( a=='T' ) a = 3; + else return 'N'; + if ( b=='A' ) b = 0; + else if ( b=='C' ) b = 1; + else if ( b=='G' ) b = 2; + else if ( b=='T' ) b = 3; + else return 'N'; + return iupac[(int)a][(int)b]; +} + +static inline char nt_to_upper(char nt) +{ + if ( nt < 97 ) return nt; + return nt - 32; +} + +static inline double phred_score(double prob) +{ + if ( prob==0 ) return 99; + prob = -4.3429*log(prob); + return prob>99 ? 99 : prob; +} + +#endif diff --git a/bcftools/bcftools.pysam.c b/bcftools/bcftools.pysam.c new file mode 100644 index 0000000..63dfed5 --- /dev/null +++ b/bcftools/bcftools.pysam.c @@ -0,0 +1,68 @@ +#include +#include +#include +#include +#include +#include + +#include "bcftools.pysam.h" + +FILE * bcftools_stderr = NULL; +FILE * bcftools_stdout = NULL; +const char * bcftools_stdout_fn = NULL; +int bcftools_stdout_fileno = STDOUT_FILENO; + + +FILE * bcftools_set_stderr(int fd) +{ + if (bcftools_stderr != NULL) + fclose(bcftools_stderr); + bcftools_stderr = fdopen(fd, "w"); + return bcftools_stderr; +} + +void bcftools_unset_stderr(void) +{ + if (bcftools_stderr != NULL) + fclose(bcftools_stderr); + bcftools_stderr = fopen("/dev/null", "w"); +} + +FILE * bcftools_set_stdout(int fd) +{ + if (bcftools_stdout != NULL) + fclose(bcftools_stdout); + bcftools_stdout = fdopen(fd, "w"); + if (bcftools_stdout == NULL) + { + fprintf(bcftools_stderr, "could not set stdout to fd %i", fd); + } + bcftools_stdout_fileno = fd; + return bcftools_stdout; +} + +void bcftools_set_stdout_fn(const char *fn) +{ + bcftools_stdout_fn = fn; +} + +void bcftools_unset_stdout(void) +{ + if (bcftools_stdout != NULL) + fclose(bcftools_stdout); + bcftools_stdout = fopen("/dev/null", "w"); + bcftools_stdout_fileno = STDOUT_FILENO; +} + +void bcftools_set_optind(int val) +{ + // setting this in cython via + // "from posix.unistd cimport optind" + // did not work. + // + // setting to 0 forces a complete re-initialization + optind = val; +} + + + diff --git a/bcftools/bcftools.pysam.h b/bcftools/bcftools.pysam.h new file mode 100644 index 0000000..4c3806c --- /dev/null +++ b/bcftools/bcftools.pysam.h @@ -0,0 +1,47 @@ +#ifndef BCFTOOLS_PYSAM_H +#define BCFTOOLS_PYSAM_H + +#include "stdio.h" + +extern FILE * bcftools_stderr; + +extern FILE * bcftools_stdout; + +extern const char * bcftools_stdout_fn; + +/*! set pysam standard error to point to file descriptor + + Setting the stderr will close the previous stderr. + */ +FILE * bcftools_set_stderr(int fd); + +/*! set pysam standard output to point to file descriptor + + Setting the stderr will close the previous stdout. + */ +FILE * bcftools_set_stdout(int fd); + +/*! set pysam standard output to point to filename + + */ +void bcftools_set_stdout_fn(const char * fn); + +/*! set pysam standard error to /dev/null. + + Unsetting the stderr will close the previous stderr. + */ +void bcftools_unset_stderr(void); + +/*! set pysam standard error to /dev/null. + + Unsetting the stderr will close the previous stderr. + */ +void bcftools_unset_stdout(void); + +int bcftools_dispatch(int argc, char *argv[]); + +void bcftools_set_optind(int); + +extern int bcftools_main(int argc, char *argv[]); + +#endif diff --git a/bcftools/bin.c b/bcftools/bin.c new file mode 100644 index 0000000..b558b20 --- /dev/null +++ b/bcftools/bin.c @@ -0,0 +1,104 @@ +/* The MIT License + + Copyright (c) 2016 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ + +#include +#include "bcftools.h" +#include "bin.h" + +struct _bin_t +{ + float *bins; + int nbins; +}; + +bin_t *bin_init(const char *list_def, float min, float max) +{ + bin_t *bin = (bin_t*) calloc(1,sizeof(bin_t)); + + // a comma indicates a list, otherwise a file + int is_file = strchr(list_def,',') ? 0 : 1; + int i, nlist; + char **list = hts_readlist(list_def, is_file, &nlist); + bin->nbins = nlist; + bin->bins = (float*) malloc(sizeof(float)*nlist); + for (i=0; ibins[i] = strtod(list[i],&tmp); + if ( !tmp ) error("Could not parse %s: %s\n", list_def, list[i]); + if ( min!=max && (bin->bins[i]bins[i]>max) ) + error("Expected values from the interval [%f,%f], found %s\n", list[i]); + free(list[i]); + } + free(list); + + if ( min!=max ) + { + // make sure we've got both boundaries: min,max. + assert( nlist>1 ); + float max_err = (bin->bins[1] - bin->bins[0])*1e-6; + if ( fabs(bin->bins[0] - min) > max_err ) + { + bin->bins = (float*) realloc(bin->bins, (++bin->nbins)*sizeof(float)); + memmove(bin->bins+1, bin->bins, sizeof(float)*(bin->nbins-1)); + bin->bins[0] = min; + } + if ( fabs(bin->bins[bin->nbins-1] - max) > max_err ) + { + bin->bins = (float*) realloc(bin->bins, (++bin->nbins)*sizeof(float)); + bin->bins[bin->nbins-1] = max; + } + } + return bin; +} + +void bin_destroy(bin_t *bin) +{ + free(bin->bins); + free(bin); +} + +int bin_get_size(bin_t *bin) { return bin->nbins; } + +float bin_get_value(bin_t *bin, int idx) { return bin->bins[idx]; } + +int bin_get_idx(bin_t *bin, float value) +{ + if ( bin->bins[bin->nbins-1] < value ) return bin->nbins-1; + + // Binary search in half-closed,half-open intervals [) + int imin = 0, imax = bin->nbins - 2; + while ( iminbins[i] ) imax = i - 1; + else if ( value > bin->bins[i] ) imin = i + 1; + else return i; + } + if ( bin->bins[imax] <= value ) return imax; + return imin - 1; +} + diff --git a/bcftools/bin.c.pysam.c b/bcftools/bin.c.pysam.c new file mode 100644 index 0000000..4880231 --- /dev/null +++ b/bcftools/bin.c.pysam.c @@ -0,0 +1,106 @@ +#include "bcftools.pysam.h" + +/* The MIT License + + Copyright (c) 2016 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ + +#include +#include "bcftools.h" +#include "bin.h" + +struct _bin_t +{ + float *bins; + int nbins; +}; + +bin_t *bin_init(const char *list_def, float min, float max) +{ + bin_t *bin = (bin_t*) calloc(1,sizeof(bin_t)); + + // a comma indicates a list, otherwise a file + int is_file = strchr(list_def,',') ? 0 : 1; + int i, nlist; + char **list = hts_readlist(list_def, is_file, &nlist); + bin->nbins = nlist; + bin->bins = (float*) malloc(sizeof(float)*nlist); + for (i=0; ibins[i] = strtod(list[i],&tmp); + if ( !tmp ) error("Could not parse %s: %s\n", list_def, list[i]); + if ( min!=max && (bin->bins[i]bins[i]>max) ) + error("Expected values from the interval [%f,%f], found %s\n", list[i]); + free(list[i]); + } + free(list); + + if ( min!=max ) + { + // make sure we've got both boundaries: min,max. + assert( nlist>1 ); + float max_err = (bin->bins[1] - bin->bins[0])*1e-6; + if ( fabs(bin->bins[0] - min) > max_err ) + { + bin->bins = (float*) realloc(bin->bins, (++bin->nbins)*sizeof(float)); + memmove(bin->bins+1, bin->bins, sizeof(float)*(bin->nbins-1)); + bin->bins[0] = min; + } + if ( fabs(bin->bins[bin->nbins-1] - max) > max_err ) + { + bin->bins = (float*) realloc(bin->bins, (++bin->nbins)*sizeof(float)); + bin->bins[bin->nbins-1] = max; + } + } + return bin; +} + +void bin_destroy(bin_t *bin) +{ + free(bin->bins); + free(bin); +} + +int bin_get_size(bin_t *bin) { return bin->nbins; } + +float bin_get_value(bin_t *bin, int idx) { return bin->bins[idx]; } + +int bin_get_idx(bin_t *bin, float value) +{ + if ( bin->bins[bin->nbins-1] < value ) return bin->nbins-1; + + // Binary search in half-closed,half-open intervals [) + int imin = 0, imax = bin->nbins - 2; + while ( iminbins[i] ) imax = i - 1; + else if ( value > bin->bins[i] ) imin = i + 1; + else return i; + } + if ( bin->bins[imax] <= value ) return imax; + return imin - 1; +} + diff --git a/bcftools/bin.h b/bcftools/bin.h new file mode 100644 index 0000000..ab9e5b1 --- /dev/null +++ b/bcftools/bin.h @@ -0,0 +1,65 @@ +/* The MIT License + + Copyright (c) 2016 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ + +/* + Simple binning of float values into predefined bins +*/ + +#ifndef __BIN_H__ +#define __BIN_H__ + +#include + +typedef struct _bin_t bin_t; + +/* + * bin_init() - init bins + * @list: list of half-open intervals [). If the list does not contain commas, + * it is interpreted as a file name. + * @min,max: extreme values. This is for user convenience so that well-known + * extremes can be left out from the list. Ignored if min=max + */ +bin_t *bin_init(const char *list, float min, float max); +void bin_destroy(bin_t *bin); + +/* + * bin_get_size() - number of boundaries, subtract 1 to get the number of bins + */ +int bin_get_size(bin_t *bin); + +/* + bin_get_idx() - find the bin index which corresponds to the value (binary search) + Returns the bin index 0 <= idx <= size-2 or -1,size-1 for out of range values. + */ +int bin_get_idx(bin_t *bin, float value); + +/* + bin_get_value() - get the i-th boundary value, i=0,..,size-1 + */ +float bin_get_value(bin_t *bin, int ith); + +#endif + diff --git a/bcftools/call.h b/bcftools/call.h new file mode 100644 index 0000000..0d707a0 --- /dev/null +++ b/bcftools/call.h @@ -0,0 +1,127 @@ +/* call.h -- variant calling declarations. + + Copyright (C) 2013-2014 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#ifndef __CALL_H__ +#define __CALL_H__ + +#include +#include +#include "vcmp.h" + +#define CALL_KEEPALT 1 +#define CALL_VARONLY (1<<1) +#define CALL_CONSTR_TRIO (1<<2) +#define CALL_CONSTR_ALLELES (1<<3) +// +// +#define CALL_FMT_GQ (1<<6) +#define CALL_FMT_GP (1<<7) + +#define FATHER 0 +#define MOTHER 1 +#define CHILD 2 +typedef struct +{ + char *name; + int sample[3]; // father, mother, child + int type; // see FTYPE_* definitions in mcall.c +} +family_t; + +typedef struct _ccall_t ccall_t; +typedef struct +{ + // mcall only + float *qsum; // QS(sum) values + int nqsum, npdg; + int *als_map, nals_map; // mapping from full set of alleles to trimmed set of alleles (old -> new) + int *pl_map, npl_map; // same as above for PLs, but reverse (new -> old) + char **als; // array to hold the trimmed set of alleles to appear on output + int nals; // size of the als array + family_t *fams; // list of families and samples for trio calling + int nfams, mfams; + int ntrio[5][5]; // possible trio genotype combinations and their counts; first idx: + uint16_t *trio[5][5]; // family type, second index: allele count (2-4, first two are unused) + double *GLs; + float *GPs; // FORMAT/GP: posterior probabilities + int32_t *GQs; // FORMAT/GQ: genotype qualities + int32_t *itmp; // temporary int array, used for new PLs with CALL_CONSTR_ALLELES + int n_itmp, nGPs; + vcmp_t *vcmp; + double trio_Pm_SNPs, trio_Pm_del, trio_Pm_ins; // P(mendelian) for trio calling, see mcall_call_trio_genotypes() + int32_t *ugts, *cgts; // unconstraind and constrained GTs + uint32_t output_tags; + char *prior_AN, *prior_AC; // reference panel AF tags (AF=AC/AN) + + // ccall only + double indel_frac, min_perm_p, min_lrt; + double prior_type, pref; + double ref_lk, lk_sum; + int ngrp1_samples, n_perm; + int nhets, ndiploid; + char *prior_file; + ccall_t *cdat; + + // shared + bcf_srs_t *srs; // BCF synced readers holding target alleles for CALL_CONSTR_ALLELES + bcf1_t *rec; + bcf_hdr_t *hdr; + uint32_t flag; // One or more of the CALL_* flags defined above + uint8_t *ploidy, all_diploid, unseen; + + double pl2p[256]; // PL to 10^(-PL/10) table + int32_t *PLs; // VCF PL likelihoods (rw) + int nPLs, mPLs, nac; + int32_t *gts, *ac; // GTs and AC (w) + double *pdg; // PLs converted to P(D|G) + float *anno16; int n16; // see anno[16] in bam2bcf.h + double theta; // prior +} +call_t; + +void error(const char *format, ...); + +/* + * call() - return -1 value on critical error; -2 to skip the site; or the number of non-reference + * alleles on success. + */ +int mcall(call_t *call, bcf1_t *rec); // multiallic and rare-variant calling model +int ccall(call_t *call, bcf1_t *rec); // the default consensus calling model +int qcall(call_t *call, bcf1_t *rec); // QCall output + +void mcall_init(call_t *call); +void ccall_init(call_t *call); +void qcall_init(call_t *call); + +void mcall_destroy(call_t *call); +void ccall_destroy(call_t *call); +void qcall_destroy(call_t *call); + +void call_init_pl2p(call_t *call); +uint32_t *call_trio_prep(int is_x, int is_son); + +void init_allele_trimming_maps(call_t *call, int als, int nals); +void mcall_trim_numberR(call_t *call, bcf1_t *rec, int nals, int nout_als, int out_als); + +#endif diff --git a/bcftools/ccall.c b/bcftools/ccall.c new file mode 100644 index 0000000..9f6958a --- /dev/null +++ b/bcftools/ccall.c @@ -0,0 +1,337 @@ +/* ccall.c -- consensus variant calling. + + Copyright (C) 2013-2014 Genome Research Ltd. + Portions copyright (C) 2010 Broad Institute. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include "call.h" +#include "kmin.h" +#include "prob1.h" + +// Most of the original -c calling was moved to bcftools as it was +// and its data structures were wrapped into the ccal_t to make it +// functional quickly. This is not the desired state. +struct _ccall_t +{ + bcf_p1aux_t *p1; +}; + +void ccall_init(call_t *call) +{ + call->cdat = (ccall_t*) calloc(1,sizeof(ccall_t)); + call_init_pl2p(call); + call->cdat->p1 = bcf_p1_init(bcf_hdr_nsamples(call->hdr), call->ploidy); + call->gts = (int*) calloc(bcf_hdr_nsamples(call->hdr)*2,sizeof(int)); // assuming at most diploid everywhere + call->nals_map = 5; + call->als_map = (int*) malloc(sizeof(int)*call->nals_map); + + bcf_hdr_append(call->hdr,"##FORMAT="); + if ( call->output_tags & CALL_FMT_GQ ) + { + bcf_hdr_append(call->hdr,"##FORMAT="); + call->GQs = (int32_t*) malloc(sizeof(int32_t)*bcf_hdr_nsamples(call->hdr)); + } + if ( call->output_tags & CALL_FMT_GP ) + error("Sorry, -f GP is not supported with -c\n"); + bcf_hdr_append(call->hdr,"##INFO="); + // Todo: groups not migrated to 'bcftools call' yet + bcf_hdr_append(call->hdr,"##INFO="); + bcf_hdr_append(call->hdr,"##INFO="); + bcf_hdr_append(call->hdr,"##INFO=\n"); + bcf_hdr_append(call->hdr,"##INFO=\n"); + bcf_hdr_append(call->hdr,"##INFO=\n"); + bcf_hdr_append(call->hdr,"##INFO=\n"); + bcf_hdr_append(call->hdr,"##INFO=\n"); + // bcf_hdr_append(call->hdr,); + // bcf_hdr_append(call->hdr,); + bcf_hdr_append(call->hdr,"##INFO="); + + return; +} +void ccall_destroy(call_t *call) +{ + free(call->itmp); + free(call->als_map); + free(call->gts); + free(call->anno16); + free(call->PLs); + free(call->GQs); + free(call->pdg); + bcf_p1_destroy(call->cdat->p1); + free(call->cdat); + return; +} + +// Inits P(D|G): convert PLs from log space, only two alleles (three PLs) are used. +// NB: The original samtools calling code uses pdgs in reverse order (AA comes +// first, RR last), while the -m calling model uses the canonical order. +static void set_pdg3(double *pl2p, int *PLs, double *pdg, int n_smpl, int n_gt) +{ + int i; + for (i=0; ip[0] = a->p[1] = a->p[2] = a->p[3] = 1.; + for (i=0; i<4; i++) a->d[i] = anno[i]; + a->depth = anno[0] + anno[1] + anno[2] + anno[3]; + a->is_tested = (anno[0] + anno[1] > 0 && anno[2] + anno[3] > 0); + if (a->depth == 0) return -1; + a->mq = (int)(sqrt((anno[9] + anno[11]) / a->depth) + .499); + kt_fisher_exact(anno[0], anno[1], anno[2], anno[3], &left, &right, &a->p[0]); + for (i = 1; i < 4; ++i) + a->p[i] = ttest(anno[0] + anno[1], anno[2] + anno[3], anno+4*i); + return 0; +} + +int test16(float *anno16, anno16_t *a) +{ + a->p[0] = a->p[1] = a->p[2] = a->p[3] = 1.; + a->d[0] = a->d[1] = a->d[2] = a->d[3] = 0.; + a->mq = a->depth = a->is_tested = 0; + return test16_core(anno16, a); +} +static int update_bcf1(call_t *call, bcf1_t *rec, const bcf_p1rst_t *pr, double em[10]) +{ + int has_I16, is_var; + float fq, r; + anno16_t a; + float tmpf[4], tmpi; + + bcf_get_info_float(call->hdr, rec, "I16", &call->anno16, &call->n16); + + has_I16 = test16(call->anno16, &a) >= 0? 1 : 0; + + // print EM + if (em[0] >= 0) + { + tmpf[0] = 1 - em[0]; + bcf_update_info_float(call->hdr, rec, "AF1", tmpf, 1); + } + if (em[4] >= 0 && em[4] <= 0.05) + { + tmpf[0] = em[3]; tmpf[1] = em[2]; tmpf[2] = em[1]; tmpf[3] = em[4]; + bcf_update_info_float(call->hdr, rec, "G3", tmpf, 3); + bcf_update_info_float(call->hdr, rec, "HWE", &tmpf[3], 1); + } + if (em[5] >= 0 && em[6] >= 0) + { + tmpf[0] = 1 - em[5]; tmpf[1] = 1 - em[6]; + bcf_update_info_float(call->hdr, rec, "AF2", tmpf, 2); + } + if (em[7] >= 0) + { + tmpf[0] = em[7]; + bcf_update_info_float(call->hdr, rec, "LRT", tmpf, 1); + } + if (em[8] >= 0) + { + tmpf[0] = em[8]; + bcf_update_info_float(call->hdr, rec, "LRT2", tmpf, 1); + } + + bcf_p1aux_t *p1 = call->cdat->p1; + if (p1->cons_llr > 0) + { + tmpi = p1->cons_llr; + bcf_update_info_int32(call->hdr, rec, "CLR", &tmpi, 1); + // todo: trio calling with -c + if (p1->cons_gt > 0) + { + char tmp[4]; + tmp[0] = p1->cons_gt&0xff; tmp[1] = p1->cons_gt>>8&0xff; tmp[2] = p1->cons_gt>>16&0xff; tmp[3] = 0; + bcf_update_info_string(call->hdr, rec, "UGT", tmp); + tmp[0] = p1->cons_gt>>32&0xff; tmp[1] = p1->cons_gt>>40&0xff; tmp[2] = p1->cons_gt>>48&0xff; + bcf_update_info_string(call->hdr, rec, "CGT", tmp); + } + } + is_var = (pr->p_ref < call->pref); + r = is_var? pr->p_ref : pr->p_var; + + bcf_update_info_int32(call->hdr, rec, "AC1", &pr->ac, 1); + int32_t dp[4]; dp[0] = call->anno16[0]; dp[1] = call->anno16[1]; dp[2] = call->anno16[2]; dp[3] = call->anno16[3]; + bcf_update_info_int32(call->hdr, rec, "DP4", dp, 4); + bcf_update_info_int32(call->hdr, rec, "MQ", &a.mq, 1); + + fq = pr->p_ref_folded < 0.5? -4.343 * log(pr->p_ref_folded) : 4.343 * log(pr->p_var_folded); + if (fq < -999) fq = -999; + if (fq > 999) fq = 999; + bcf_update_info_float(call->hdr, rec, "FQ", &fq, 1); + + assert( pr->cmp[0]<0 ); + // todo + // if (pr->cmp[0] >= 0.) { // two sample groups + // int i, q[3]; + // for (i = 1; i < 3; ++i) { + // double x = pr->cmp[i] + pr->cmp[0]/2.; + // q[i] = x == 0? 255 : (int)(-4.343 * log(x) + .499); + // if (q[i] > 255) q[i] = 255; + // } + // if (pr->perm_rank >= 0) ksprintf(&s, "PR=%d;", pr->perm_rank); + // + // ksprintf(&s, "PCHI2=%.3g;PC2=%d,%d;", q[1], q[2], pr->p_chi2); + // } + + if (has_I16 && a.is_tested) + { + int i; + for (i=0; i<4; i++) tmpf[i] = a.p[i]; + bcf_update_info_float(call->hdr, rec, "PV4", tmpf, 4); + } + bcf_update_info_int32(call->hdr, rec, "I16", NULL, 0); // remove I16 tag + bcf_update_info_int32(call->hdr, rec, "QS", NULL, 0); // remove QS tag + + rec->qual = r < 1e-100? 999 : -4.343 * log(r); + if (rec->qual > 999) rec->qual = 999; + + // Remove unused alleles + int nals_ori = rec->n_allele, nals = !is_var && !(call->flag & CALL_KEEPALT) ? 1 : pr->rank0 < 2? 2 : pr->rank0+1; + if ( call->flag & CALL_KEEPALT && call->unseen==nals-1 ) nals--; + + if ( nalsn_allele ) + { + bcf_update_alleles(call->hdr, rec, (const char**)rec->d.allele, nals); + + // Update PLs + int npls_src = call->nPLs / rec->n_sample, npls_dst = nals*(nals+1)/2; + int *pls_src = call->PLs - npls_src, *pls_dst = call->PLs - npls_dst; + int isample, i; + for (isample = 0; isample < rec->n_sample; isample++) + { + pls_src += npls_src; + pls_dst += npls_dst; + if ( !call->ploidy || call->ploidy[isample]==2 ) + { + for (i=0; ihdr, rec, "PL", call->PLs, npls_dst*rec->n_sample); + } + + // Call genotypes + int i; + for (i=0; in_sample; i++) + { + int x = ( is_var || call->output_tags & CALL_FMT_GQ ) ? bcf_p1_call_gt(p1, pr->f_exp, i, is_var) : 2; + int gt = x&3; + if ( !call->ploidy || call->ploidy[i]==2 ) + { + if ( gt==1 ) + { + call->gts[2*i] = bcf_gt_unphased(0); + call->gts[2*i+1] = bcf_gt_unphased(1); + } + else if ( gt==0 ) + { + call->gts[2*i] = bcf_gt_unphased(1); + call->gts[2*i+1] = bcf_gt_unphased(1); + } + else + { + call->gts[2*i] = bcf_gt_unphased(0); + call->gts[2*i+1] = bcf_gt_unphased(0); + } + if ( call->output_tags & CALL_FMT_GQ ) call->GQs[i] = x>>2; + } + else + { + if ( gt==0 ) call->gts[2*i] = bcf_gt_unphased(1); + else call->gts[2*i] = bcf_gt_unphased(0); + call->gts[2*i+1] = bcf_int32_vector_end; + if ( call->output_tags & CALL_FMT_GQ ) call->GQs[i] = bcf_int32_missing; + } + } + bcf_update_genotypes(call->hdr, rec, call->gts, rec->n_sample*2); + if ( call->output_tags & CALL_FMT_GQ ) + bcf_update_format_int32(call->hdr, rec, "GQ", call->GQs, rec->n_sample); + + // trim Number=R tags + int out_als = 0; + for (i=0; ihdr); + + // Get the genotype likelihoods + int nals = rec->n_allele; + call->nPLs = bcf_get_format_int32(call->hdr, rec, "PL", &call->PLs, &call->mPLs); + if ( call->nPLs!=nsmpl*nals*(nals+1)/2 && call->nPLs!=nsmpl*nals ) // diploid+haploid or haploid only + error("Wrong number of PL fields? nals=%d npl=%d\n", nals,call->nPLs); + + // Convert PLs to probabilities, only first two alleles are considered + int ngts = nals*(nals+1)/2; + hts_expand(double, 3*nsmpl, call->npdg, call->pdg); + set_pdg3(call->pl2p, call->PLs, call->pdg, nsmpl, ngts); + + double em[10] = {-1.,-1.,-1.,-1.,-1.,-1.,-1.,-1.,-1.,-1.}; + int ret = bcf_em1(call, rec, call->ngrp1_samples, 0x1ff, em); + + bcf_p1rst_t pr; + int do_contrast = (em[7] >= 0 && em[7] < call->min_lrt) ? 1 : 0; + ret = bcf_p1_cal(call, rec, do_contrast, call->cdat->p1, &pr); + if (pr.p_ref >= call->pref && (call->flag & CALL_VARONLY)) return 0; + if (ret >= 0) ret = update_bcf1(call, rec, &pr, em); + return ret; +} + diff --git a/bcftools/ccall.c.pysam.c b/bcftools/ccall.c.pysam.c new file mode 100644 index 0000000..696b455 --- /dev/null +++ b/bcftools/ccall.c.pysam.c @@ -0,0 +1,339 @@ +#include "bcftools.pysam.h" + +/* ccall.c -- consensus variant calling. + + Copyright (C) 2013-2014 Genome Research Ltd. + Portions copyright (C) 2010 Broad Institute. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include "call.h" +#include "kmin.h" +#include "prob1.h" + +// Most of the original -c calling was moved to bcftools as it was +// and its data structures were wrapped into the ccal_t to make it +// functional quickly. This is not the desired state. +struct _ccall_t +{ + bcf_p1aux_t *p1; +}; + +void ccall_init(call_t *call) +{ + call->cdat = (ccall_t*) calloc(1,sizeof(ccall_t)); + call_init_pl2p(call); + call->cdat->p1 = bcf_p1_init(bcf_hdr_nsamples(call->hdr), call->ploidy); + call->gts = (int*) calloc(bcf_hdr_nsamples(call->hdr)*2,sizeof(int)); // assuming at most diploid everywhere + call->nals_map = 5; + call->als_map = (int*) malloc(sizeof(int)*call->nals_map); + + bcf_hdr_append(call->hdr,"##FORMAT="); + if ( call->output_tags & CALL_FMT_GQ ) + { + bcf_hdr_append(call->hdr,"##FORMAT="); + call->GQs = (int32_t*) malloc(sizeof(int32_t)*bcf_hdr_nsamples(call->hdr)); + } + if ( call->output_tags & CALL_FMT_GP ) + error("Sorry, -f GP is not supported with -c\n"); + bcf_hdr_append(call->hdr,"##INFO="); + // Todo: groups not migrated to 'bcftools call' yet + bcf_hdr_append(call->hdr,"##INFO="); + bcf_hdr_append(call->hdr,"##INFO="); + bcf_hdr_append(call->hdr,"##INFO=\n"); + bcf_hdr_append(call->hdr,"##INFO=\n"); + bcf_hdr_append(call->hdr,"##INFO=\n"); + bcf_hdr_append(call->hdr,"##INFO=\n"); + bcf_hdr_append(call->hdr,"##INFO=\n"); + // bcf_hdr_append(call->hdr,); + // bcf_hdr_append(call->hdr,); + bcf_hdr_append(call->hdr,"##INFO="); + + return; +} +void ccall_destroy(call_t *call) +{ + free(call->itmp); + free(call->als_map); + free(call->gts); + free(call->anno16); + free(call->PLs); + free(call->GQs); + free(call->pdg); + bcf_p1_destroy(call->cdat->p1); + free(call->cdat); + return; +} + +// Inits P(D|G): convert PLs from log space, only two alleles (three PLs) are used. +// NB: The original samtools calling code uses pdgs in reverse order (AA comes +// first, RR last), while the -m calling model uses the canonical order. +static void set_pdg3(double *pl2p, int *PLs, double *pdg, int n_smpl, int n_gt) +{ + int i; + for (i=0; ip[0] = a->p[1] = a->p[2] = a->p[3] = 1.; + for (i=0; i<4; i++) a->d[i] = anno[i]; + a->depth = anno[0] + anno[1] + anno[2] + anno[3]; + a->is_tested = (anno[0] + anno[1] > 0 && anno[2] + anno[3] > 0); + if (a->depth == 0) return -1; + a->mq = (int)(sqrt((anno[9] + anno[11]) / a->depth) + .499); + kt_fisher_exact(anno[0], anno[1], anno[2], anno[3], &left, &right, &a->p[0]); + for (i = 1; i < 4; ++i) + a->p[i] = ttest(anno[0] + anno[1], anno[2] + anno[3], anno+4*i); + return 0; +} + +int test16(float *anno16, anno16_t *a) +{ + a->p[0] = a->p[1] = a->p[2] = a->p[3] = 1.; + a->d[0] = a->d[1] = a->d[2] = a->d[3] = 0.; + a->mq = a->depth = a->is_tested = 0; + return test16_core(anno16, a); +} +static int update_bcf1(call_t *call, bcf1_t *rec, const bcf_p1rst_t *pr, double em[10]) +{ + int has_I16, is_var; + float fq, r; + anno16_t a; + float tmpf[4], tmpi; + + bcf_get_info_float(call->hdr, rec, "I16", &call->anno16, &call->n16); + + has_I16 = test16(call->anno16, &a) >= 0? 1 : 0; + + // print EM + if (em[0] >= 0) + { + tmpf[0] = 1 - em[0]; + bcf_update_info_float(call->hdr, rec, "AF1", tmpf, 1); + } + if (em[4] >= 0 && em[4] <= 0.05) + { + tmpf[0] = em[3]; tmpf[1] = em[2]; tmpf[2] = em[1]; tmpf[3] = em[4]; + bcf_update_info_float(call->hdr, rec, "G3", tmpf, 3); + bcf_update_info_float(call->hdr, rec, "HWE", &tmpf[3], 1); + } + if (em[5] >= 0 && em[6] >= 0) + { + tmpf[0] = 1 - em[5]; tmpf[1] = 1 - em[6]; + bcf_update_info_float(call->hdr, rec, "AF2", tmpf, 2); + } + if (em[7] >= 0) + { + tmpf[0] = em[7]; + bcf_update_info_float(call->hdr, rec, "LRT", tmpf, 1); + } + if (em[8] >= 0) + { + tmpf[0] = em[8]; + bcf_update_info_float(call->hdr, rec, "LRT2", tmpf, 1); + } + + bcf_p1aux_t *p1 = call->cdat->p1; + if (p1->cons_llr > 0) + { + tmpi = p1->cons_llr; + bcf_update_info_int32(call->hdr, rec, "CLR", &tmpi, 1); + // todo: trio calling with -c + if (p1->cons_gt > 0) + { + char tmp[4]; + tmp[0] = p1->cons_gt&0xff; tmp[1] = p1->cons_gt>>8&0xff; tmp[2] = p1->cons_gt>>16&0xff; tmp[3] = 0; + bcf_update_info_string(call->hdr, rec, "UGT", tmp); + tmp[0] = p1->cons_gt>>32&0xff; tmp[1] = p1->cons_gt>>40&0xff; tmp[2] = p1->cons_gt>>48&0xff; + bcf_update_info_string(call->hdr, rec, "CGT", tmp); + } + } + is_var = (pr->p_ref < call->pref); + r = is_var? pr->p_ref : pr->p_var; + + bcf_update_info_int32(call->hdr, rec, "AC1", &pr->ac, 1); + int32_t dp[4]; dp[0] = call->anno16[0]; dp[1] = call->anno16[1]; dp[2] = call->anno16[2]; dp[3] = call->anno16[3]; + bcf_update_info_int32(call->hdr, rec, "DP4", dp, 4); + bcf_update_info_int32(call->hdr, rec, "MQ", &a.mq, 1); + + fq = pr->p_ref_folded < 0.5? -4.343 * log(pr->p_ref_folded) : 4.343 * log(pr->p_var_folded); + if (fq < -999) fq = -999; + if (fq > 999) fq = 999; + bcf_update_info_float(call->hdr, rec, "FQ", &fq, 1); + + assert( pr->cmp[0]<0 ); + // todo + // if (pr->cmp[0] >= 0.) { // two sample groups + // int i, q[3]; + // for (i = 1; i < 3; ++i) { + // double x = pr->cmp[i] + pr->cmp[0]/2.; + // q[i] = x == 0? 255 : (int)(-4.343 * log(x) + .499); + // if (q[i] > 255) q[i] = 255; + // } + // if (pr->perm_rank >= 0) ksprintf(&s, "PR=%d;", pr->perm_rank); + // + // ksprintf(&s, "PCHI2=%.3g;PC2=%d,%d;", q[1], q[2], pr->p_chi2); + // } + + if (has_I16 && a.is_tested) + { + int i; + for (i=0; i<4; i++) tmpf[i] = a.p[i]; + bcf_update_info_float(call->hdr, rec, "PV4", tmpf, 4); + } + bcf_update_info_int32(call->hdr, rec, "I16", NULL, 0); // remove I16 tag + bcf_update_info_int32(call->hdr, rec, "QS", NULL, 0); // remove QS tag + + rec->qual = r < 1e-100? 999 : -4.343 * log(r); + if (rec->qual > 999) rec->qual = 999; + + // Remove unused alleles + int nals_ori = rec->n_allele, nals = !is_var && !(call->flag & CALL_KEEPALT) ? 1 : pr->rank0 < 2? 2 : pr->rank0+1; + if ( call->flag & CALL_KEEPALT && call->unseen==nals-1 ) nals--; + + if ( nalsn_allele ) + { + bcf_update_alleles(call->hdr, rec, (const char**)rec->d.allele, nals); + + // Update PLs + int npls_src = call->nPLs / rec->n_sample, npls_dst = nals*(nals+1)/2; + int *pls_src = call->PLs - npls_src, *pls_dst = call->PLs - npls_dst; + int isample, i; + for (isample = 0; isample < rec->n_sample; isample++) + { + pls_src += npls_src; + pls_dst += npls_dst; + if ( !call->ploidy || call->ploidy[isample]==2 ) + { + for (i=0; ihdr, rec, "PL", call->PLs, npls_dst*rec->n_sample); + } + + // Call genotypes + int i; + for (i=0; in_sample; i++) + { + int x = ( is_var || call->output_tags & CALL_FMT_GQ ) ? bcf_p1_call_gt(p1, pr->f_exp, i, is_var) : 2; + int gt = x&3; + if ( !call->ploidy || call->ploidy[i]==2 ) + { + if ( gt==1 ) + { + call->gts[2*i] = bcf_gt_unphased(0); + call->gts[2*i+1] = bcf_gt_unphased(1); + } + else if ( gt==0 ) + { + call->gts[2*i] = bcf_gt_unphased(1); + call->gts[2*i+1] = bcf_gt_unphased(1); + } + else + { + call->gts[2*i] = bcf_gt_unphased(0); + call->gts[2*i+1] = bcf_gt_unphased(0); + } + if ( call->output_tags & CALL_FMT_GQ ) call->GQs[i] = x>>2; + } + else + { + if ( gt==0 ) call->gts[2*i] = bcf_gt_unphased(1); + else call->gts[2*i] = bcf_gt_unphased(0); + call->gts[2*i+1] = bcf_int32_vector_end; + if ( call->output_tags & CALL_FMT_GQ ) call->GQs[i] = bcf_int32_missing; + } + } + bcf_update_genotypes(call->hdr, rec, call->gts, rec->n_sample*2); + if ( call->output_tags & CALL_FMT_GQ ) + bcf_update_format_int32(call->hdr, rec, "GQ", call->GQs, rec->n_sample); + + // trim Number=R tags + int out_als = 0; + for (i=0; ihdr); + + // Get the genotype likelihoods + int nals = rec->n_allele; + call->nPLs = bcf_get_format_int32(call->hdr, rec, "PL", &call->PLs, &call->mPLs); + if ( call->nPLs!=nsmpl*nals*(nals+1)/2 && call->nPLs!=nsmpl*nals ) // diploid+haploid or haploid only + error("Wrong number of PL fields? nals=%d npl=%d\n", nals,call->nPLs); + + // Convert PLs to probabilities, only first two alleles are considered + int ngts = nals*(nals+1)/2; + hts_expand(double, 3*nsmpl, call->npdg, call->pdg); + set_pdg3(call->pl2p, call->PLs, call->pdg, nsmpl, ngts); + + double em[10] = {-1.,-1.,-1.,-1.,-1.,-1.,-1.,-1.,-1.,-1.}; + int ret = bcf_em1(call, rec, call->ngrp1_samples, 0x1ff, em); + + bcf_p1rst_t pr; + int do_contrast = (em[7] >= 0 && em[7] < call->min_lrt) ? 1 : 0; + ret = bcf_p1_cal(call, rec, do_contrast, call->cdat->p1, &pr); + if (pr.p_ref >= call->pref && (call->flag & CALL_VARONLY)) return 0; + if (ret >= 0) ret = update_bcf1(call, rec, &pr, em); + return ret; +} + diff --git a/bcftools/config.h b/bcftools/config.h new file mode 100644 index 0000000..f8fff59 --- /dev/null +++ b/bcftools/config.h @@ -0,0 +1,2 @@ +/* empty config.h created by pysam */ +/* conservative compilation options */ diff --git a/bcftools/consensus.c b/bcftools/consensus.c new file mode 100644 index 0000000..544eca6 --- /dev/null +++ b/bcftools/consensus.c @@ -0,0 +1,768 @@ +/* The MIT License + + Copyright (c) 2014-2017 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "regidx.h" +#include "bcftools.h" +#include "rbuf.h" +#include "filter.h" + +// Logic of the filters: include or exclude sites which match the filters? +#define FLT_INCLUDE 1 +#define FLT_EXCLUDE 2 + +#define PICK_REF 1 +#define PICK_ALT 2 +#define PICK_LONG 4 +#define PICK_SHORT 8 + +typedef struct +{ + int num; // number of ungapped blocks in this chain + int *block_lengths; // length of the ungapped blocks in this chain + int *ref_gaps; // length of the gaps on the reference sequence between blocks + int *alt_gaps; // length of the gaps on the alternative sequence between blocks + int ori_pos; + int ref_last_block_ori; // start position on the reference sequence of the following ungapped block (0-based) + int alt_last_block_ori; // start position on the alternative sequence of the following ungapped block (0-based) +} +chain_t; + + +typedef struct +{ + kstring_t fa_buf; // buffered reference sequence + int fa_ori_pos; // start position of the fa_buffer (wrt original sequence) + int fa_frz_pos; // protected position to avoid conflicting variants (last pos for SNPs/ins) + int fa_mod_off; // position difference of fa_frz_pos in the ori and modified sequence (ins positive) + int fa_end_pos; // region's end position in the original sequence + int fa_length; // region's length in the original sequence (in case end_pos not provided in the FASTA header) + int fa_case; // output upper case or lower case? + int fa_src_pos; // last genomic coordinate read from the input fasta (0-based) + + rbuf_t vcf_rbuf; + bcf1_t **vcf_buf; + int nvcf_buf, rid; + + regidx_t *mask; + regitr_t *itr; + + int chain_id; // chain_id, to provide a unique ID to each chain in the chain output + chain_t *chain; // chain structure to store the sequence of ungapped blocks between the ref and alt sequences + // Note that the chain is re-initialised for each chromosome/seq_region + + filter_t *filter; + char *filter_str; + int filter_logic; // include or exclude sites which match the filters? One of FLT_INCLUDE/FLT_EXCLUDE + + bcf_srs_t *files; + bcf_hdr_t *hdr; + FILE *fp_out; + FILE *fp_chain; + char **argv; + int argc, output_iupac, haplotype, allele, isample; + char *fname, *ref_fname, *sample, *output_fname, *mask_fname, *chain_fname; +} +args_t; + +static chain_t* init_chain(chain_t *chain, int ref_ori_pos) +{ +// fprintf(stderr, "init_chain(*chain, ref_ori_pos=%d)\n", ref_ori_pos); + chain = (chain_t*) calloc(1,sizeof(chain_t)); + chain->num = 0; + chain->block_lengths = NULL; + chain->ref_gaps = NULL; + chain->alt_gaps = NULL; + chain->ori_pos = ref_ori_pos; + chain->ref_last_block_ori = ref_ori_pos; + chain->alt_last_block_ori = ref_ori_pos; + return chain; +} + +static void destroy_chain(args_t *args) +{ + chain_t *chain = args->chain; + free(chain->ref_gaps); + free(chain->alt_gaps); + free(chain->block_lengths); + free(chain); + chain = NULL; +} + +static void print_chain(args_t *args) +{ + /* + Example chain format (see: https://genome.ucsc.edu/goldenPath/help/chain.html): + chain 1 500 + 480 500 1 501 + 480 501 1 + 12 3 1 + 1 0 3 + 484 + + chain line is: + - chain + - score (sum of the length of ungapped block in this case) + - ref_seqname (from the fasta header, parsed by htslib) + - ref_seqlength (from the fasta header) + - ref_strand (+ or -; always + for bcf-consensus) + - ref_start (as defined in the fasta header) + - ref_end (as defined in the fasta header) + - alt_seqname (same as ref_seqname as bcf-consensus only considers SNPs and indels) + - alt_seqlength (adjusted to match the length of the alt sequence) + - alt_strand (+ or -; always + for bcf-consensus) + - alt_start (same as ref_start, as no edits are recorded/applied before that position) + - alt_end (adjusted to match the length of the alt sequence) + - chain_num (just an auto-increment id) + + the other (sorted) lines are: + - length of the ungapped alignment block + - gap on the ref sequence between this and the next block (all but the last line) + - gap on the alt sequence between this and the next block (all but the last line) + */ + chain_t *chain = args->chain; + int n = chain->num; + int ref_end_pos = args->fa_length + chain->ori_pos; + int last_block_size = ref_end_pos - chain->ref_last_block_ori; + int alt_end_pos = chain->alt_last_block_ori + last_block_size; + int score = 0; + for (n=0; nnum; n++) { + score += chain->block_lengths[n]; + } + score += last_block_size; + fprintf(args->fp_chain, "chain %d %s %d + %d %d %s %d + %d %d %d\n", score, bcf_hdr_id2name(args->hdr,args->rid), ref_end_pos, chain->ori_pos, ref_end_pos, bcf_hdr_id2name(args->hdr,args->rid), alt_end_pos, chain->ori_pos, alt_end_pos, ++args->chain_id); + for (n=0; nnum; n++) { + fprintf(args->fp_chain, "%d %d %d\n", chain->block_lengths[n], chain->ref_gaps[n], chain->alt_gaps[n]); + } + fprintf(args->fp_chain, "%d\n\n", last_block_size); +} + +static void push_chain_gap(chain_t *chain, int ref_start, int ref_len, int alt_start, int alt_len) +{ +// fprintf(stderr, "push_chain_gap(*chain, ref_start=%d, ref_len=%d, alt_start=%d, alt_len=%d)\n", ref_start, ref_len, alt_start, alt_len); + int num = chain->num; + + if (ref_start <= chain->ref_last_block_ori) { + // In case this variant is back-to-back with the previous one + chain->ref_last_block_ori = ref_start + ref_len; + chain->alt_last_block_ori = alt_start + alt_len; + chain->ref_gaps[num-1] += ref_len; + chain->alt_gaps[num-1] += alt_len; + + } else { + // Extend the ungapped blocks, store the gap length + chain->block_lengths = (int*) realloc(chain->block_lengths, (num + 1) * sizeof(int)); + chain->ref_gaps = (int*) realloc(chain->ref_gaps, (num + 1) * sizeof(int)); + chain->alt_gaps = (int*) realloc(chain->alt_gaps, (num + 1) * sizeof(int)); + chain->block_lengths[num] = ref_start - chain->ref_last_block_ori; + chain->ref_gaps[num] = ref_len; + chain->alt_gaps[num] = alt_len; + // Update the start positions of the next block + chain->ref_last_block_ori = ref_start + ref_len; + chain->alt_last_block_ori = alt_start + alt_len; + // Increment the number of ungapped blocks + chain->num++; + } +} + +static void init_data(args_t *args) +{ + args->files = bcf_sr_init(); + args->files->require_index = 1; + if ( !bcf_sr_add_reader(args->files,args->fname) ) error("Failed to open %s: %s\n", args->fname, bcf_sr_strerror(args->files->errnum)); + args->hdr = args->files->readers[0].header; + args->isample = -1; + if ( args->sample ) + { + args->isample = bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,args->sample); + if ( args->isample<0 ) error("No such sample: %s\n", args->sample); + } + if ( (args->haplotype || args->allele) && args->isample<0 ) + { + if ( bcf_hdr_nsamples(args->hdr) > 1 ) error("The --sample option is expected with --haplotype\n"); + args->isample = 0; + } + if ( args->mask_fname ) + { + args->mask = regidx_init(args->mask_fname,NULL,NULL,0,NULL); + if ( !args->mask ) error("Failed to initialize mask regions\n"); + args->itr = regitr_init(args->mask); + } + // In case we want to store the chains + if ( args->chain_fname ) + { + args->fp_chain = fopen(args->chain_fname,"w"); + if ( ! args->fp_chain ) error("Failed to create %s: %s\n", args->chain_fname, strerror(errno)); + args->chain_id = 0; + } + rbuf_init(&args->vcf_rbuf, 100); + args->vcf_buf = (bcf1_t**) calloc(args->vcf_rbuf.m, sizeof(bcf1_t*)); + if ( args->output_fname ) { + args->fp_out = fopen(args->output_fname,"w"); + if ( ! args->fp_out ) error("Failed to create %s: %s\n", args->output_fname, strerror(errno)); + } + else args->fp_out = stdout; + if ( args->isample<0 ) fprintf(stderr,"Note: the --sample option not given, applying all records\n"); + if ( args->filter_str ) + args->filter = filter_init(args->hdr, args->filter_str); +} + +static void destroy_data(args_t *args) +{ + if (args->filter) filter_destroy(args->filter); + bcf_sr_destroy(args->files); + int i; + for (i=0; ivcf_rbuf.m; i++) + if ( args->vcf_buf[i] ) bcf_destroy1(args->vcf_buf[i]); + free(args->vcf_buf); + free(args->fa_buf.s); + if ( args->mask ) regidx_destroy(args->mask); + if ( args->itr ) regitr_destroy(args->itr); + if ( args->chain_fname ) + if ( fclose(args->fp_chain) ) error("Close failed: %s\n", args->chain_fname); + if ( fclose(args->fp_out) ) error("Close failed: %s\n", args->output_fname); +} + +static void init_region(args_t *args, char *line) +{ + char *ss, *se = line; + while ( *se && !isspace(*se) && *se!=':' ) se++; + int from = 0, to = 0; + char tmp, *tmp_ptr = NULL; + if ( *se ) + { + tmp = *se; *se = 0; tmp_ptr = se; + ss = ++se; + from = strtol(ss,&se,10); + if ( ss==se || !*se || *se!='-' ) from = 0; + else + { + from--; + ss = ++se; + to = strtol(ss,&se,10); + if ( ss==se || (*se && !isspace(*se)) ) { from = 0; to = 0; } + else to--; + } + } + args->rid = bcf_hdr_name2id(args->hdr,line); + if ( args->rid<0 ) fprintf(stderr,"Warning: Sequence \"%s\" not in %s\n", line,args->fname); + args->fa_buf.l = 0; + args->fa_length = 0; + args->fa_end_pos = to; + args->fa_ori_pos = from; + args->fa_src_pos = from; + args->fa_mod_off = 0; + args->fa_frz_pos = -1; + args->fa_case = -1; + args->vcf_rbuf.n = 0; + bcf_sr_seek(args->files,line,args->fa_ori_pos); + if ( tmp_ptr ) *tmp_ptr = tmp; + fprintf(args->fp_out,">%s\n",line); + if (args->chain_fname ) + { + args->chain = init_chain(args->chain, args->fa_ori_pos); + } else { + args->chain = NULL; + } +} + +static bcf1_t **next_vcf_line(args_t *args) +{ + if ( args->vcf_rbuf.n ) + { + int i = rbuf_shift(&args->vcf_rbuf); + return &args->vcf_buf[i]; + } + while ( bcf_sr_next_line(args->files) ) + { + if ( args->filter ) + { + int is_ok = filter_test(args->filter, bcf_sr_get_line(args->files,0), NULL); + if ( args->filter_logic & FLT_EXCLUDE ) is_ok = is_ok ? 0 : 1; + if ( !is_ok ) continue; + } + return &args->files->readers[0].buffer[0]; + } + return NULL; +} +static void unread_vcf_line(args_t *args, bcf1_t **rec_ptr) +{ + bcf1_t *rec = *rec_ptr; + if ( args->vcf_rbuf.n >= args->vcf_rbuf.m ) + error("FIXME: too many overlapping records near %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1); + + // Insert the new record in the buffer. The line would be overwritten in + // the next bcf_sr_next_line call, therefore we need to swap it with an + // unused one + int i = rbuf_append(&args->vcf_rbuf); + if ( !args->vcf_buf[i] ) args->vcf_buf[i] = bcf_init1(); + bcf1_t *tmp = rec; *rec_ptr = args->vcf_buf[i]; args->vcf_buf[i] = tmp; +} +static void flush_fa_buffer(args_t *args, int len) +{ + if ( !args->fa_buf.l ) return; + + int nwr = 0; + while ( nwr + 60 <= args->fa_buf.l ) + { + if ( fwrite(args->fa_buf.s+nwr,1,60,args->fp_out) != 60 ) error("Could not write: %s\n", args->output_fname); + if ( fwrite("\n",1,1,args->fp_out) != 1 ) error("Could not write: %s\n", args->output_fname); + nwr += 60; + } + if ( nwr ) + args->fa_ori_pos += nwr; + + if ( len ) + { + // not finished on this chr yet and the buffer cannot be emptied completely + if ( nwr && nwr < args->fa_buf.l ) + memmove(args->fa_buf.s,args->fa_buf.s+nwr,args->fa_buf.l-nwr); + args->fa_buf.l -= nwr; + return; + } + + // empty the whole buffer + if ( nwr == args->fa_buf.l ) { args->fa_buf.l = 0; return; } + + if ( fwrite(args->fa_buf.s+nwr,1,args->fa_buf.l - nwr,args->fp_out) != args->fa_buf.l - nwr ) error("Could not write: %s\n", args->output_fname); + if ( fwrite("\n",1,1,args->fp_out) != 1 ) error("Could not write: %s\n", args->output_fname); + + args->fa_ori_pos += args->fa_buf.l - nwr - args->fa_mod_off; + args->fa_mod_off = 0; + args->fa_buf.l = 0; +} +static void apply_variant(args_t *args, bcf1_t *rec) +{ + if ( rec->n_allele==1 ) return; + + if ( rec->pos <= args->fa_frz_pos ) + { + fprintf(stderr,"The site %s:%d overlaps with another variant, skipping...\n", bcf_seqname(args->hdr,rec),rec->pos+1); + return; + } + if ( args->mask ) + { + char *chr = (char*)bcf_hdr_id2name(args->hdr,args->rid); + int start = rec->pos; + int end = rec->pos + rec->rlen - 1; + if ( regidx_overlap(args->mask, chr,start,end,NULL) ) return; + } + + int i, ialt = 1; + if ( args->isample >= 0 ) + { + bcf_unpack(rec, BCF_UN_FMT); + bcf_fmt_t *fmt = bcf_get_fmt(args->hdr, rec, "GT"); + if ( !fmt ) return; + + if ( fmt->type!=BCF_BT_INT8 ) + error("Todo: GT field represented with BCF_BT_INT8, too many alleles at %s:%d?\n",bcf_seqname(args->hdr,rec),rec->pos+1); + uint8_t *ptr = fmt->p + fmt->size*args->isample; + + if ( args->haplotype ) + { + if ( args->haplotype > fmt->n ) error("Can't apply %d-th haplotype at %s:%d\n", args->haplotype,bcf_seqname(args->hdr,rec),rec->pos+1); + ialt = ptr[args->haplotype-1]; + if ( bcf_gt_is_missing(ialt) || ialt==bcf_int32_vector_end ) return; + ialt = bcf_gt_allele(ialt); + } + else if ( args->output_iupac ) + { + ialt = ptr[0]; + if ( bcf_gt_is_missing(ialt) || ialt==bcf_int32_vector_end ) return; + ialt = bcf_gt_allele(ialt); + + int jalt; + if ( fmt->n>1 ) + { + jalt = ptr[1]; + if ( bcf_gt_is_missing(jalt) || jalt==bcf_int32_vector_end ) jalt = ialt; + else jalt = bcf_gt_allele(jalt); + } + else jalt = ialt; + if ( rec->n_allele <= ialt || rec->n_allele <= jalt ) error("Invalid VCF, too few ALT alleles at %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1); + if ( ialt!=jalt && !rec->d.allele[ialt][1] && !rec->d.allele[jalt][1] ) // is this a het snp? + { + char ial = rec->d.allele[ialt][0]; + char jal = rec->d.allele[jalt][0]; + rec->d.allele[ialt][0] = gt2iupac(ial,jal); + } + } + else + { + int is_hom = 1; + for (i=0; in; i++) + { + if ( bcf_gt_is_missing(ptr[i]) ) return; // ignore missing or half-missing genotypes + if ( ptr[i]==bcf_int32_vector_end ) break; + ialt = bcf_gt_allele(ptr[i]); + if ( i>0 && ialt!=bcf_gt_allele(ptr[i-1]) ) { is_hom = 0; break; } + } + if ( !is_hom ) + { + int prev_len = 0, jalt; + for (i=0; in; i++) + { + if ( ptr[i]==bcf_int32_vector_end ) break; + jalt = bcf_gt_allele(ptr[i]); + if ( rec->n_allele <= jalt ) error("Broken VCF, too few alts at %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1); + if ( args->allele & (PICK_LONG|PICK_SHORT) ) + { + int len = jalt==0 ? rec->rlen : strlen(rec->d.allele[jalt]); + if ( i==0 ) ialt = jalt, prev_len = len; + else if ( len == prev_len ) + { + if ( args->allele & PICK_REF && jalt==0 ) ialt = jalt, prev_len = len; + else if ( args->allele & PICK_ALT && ialt==0 ) ialt = jalt, prev_len = len; + } + else if ( args->allele & PICK_LONG && len > prev_len ) ialt = jalt, prev_len = len; + else if ( args->allele & PICK_SHORT && len < prev_len ) ialt = jalt, prev_len = len; + } + else + { + if ( args->allele & PICK_REF && jalt==0 ) ialt = jalt; + else if ( args->allele & PICK_ALT && ialt==0 ) ialt = jalt; + } + } + } + } + if ( !ialt ) return; // ref allele + if ( rec->n_allele <= ialt ) error("Broken VCF, too few alts at %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1); + } + else if ( args->output_iupac && !rec->d.allele[0][1] && !rec->d.allele[1][1] ) + { + char ial = rec->d.allele[0][0]; + char jal = rec->d.allele[1][0]; + rec->d.allele[1][0] = gt2iupac(ial,jal); + } + + int len_diff = 0, alen = 0; + int idx = rec->pos - args->fa_ori_pos + args->fa_mod_off; + if ( idx<0 ) + { + fprintf(stderr,"Warning: ignoring overlapping variant starting at %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1); + return; + } + if ( rec->rlen > args->fa_buf.l - idx ) + { + rec->rlen = args->fa_buf.l - idx; + alen = strlen(rec->d.allele[ialt]); + if ( alen > rec->rlen ) + { + rec->d.allele[ialt][rec->rlen] = 0; + fprintf(stderr,"Warning: trimming variant starting at %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1); + } + } + if ( idx>=args->fa_buf.l ) + error("FIXME: %s:%d .. idx=%d, ori_pos=%d, len=%d, off=%d\n",bcf_seqname(args->hdr,rec),rec->pos+1,idx,args->fa_ori_pos,args->fa_buf.l,args->fa_mod_off); + + // sanity check the reference base + if ( rec->d.allele[ialt][0]=='<' ) + { + if ( strcasecmp(rec->d.allele[ialt], "") ) + error("Symbolic alleles other than are currently not supported: %s at %s:%d\n",rec->d.allele[ialt],bcf_seqname(args->hdr,rec),rec->pos+1); + assert( rec->d.allele[0][1]==0 ); // todo: for now expecting strlen(REF) = 1 + len_diff = 1-rec->rlen; + rec->d.allele[ialt] = rec->d.allele[0]; // according to VCF spec, REF must precede the event + alen = strlen(rec->d.allele[ialt]); + } + else if ( strncasecmp(rec->d.allele[0],args->fa_buf.s+idx,rec->rlen) ) + { + // fprintf(stderr,"%d .. [%s], idx=%d ori=%d off=%d\n",args->fa_ori_pos,args->fa_buf.s,idx,args->fa_ori_pos,args->fa_mod_off); + char tmp = 0; + if ( args->fa_buf.l - idx > rec->rlen ) + { + tmp = args->fa_buf.s[idx+rec->rlen]; + args->fa_buf.s[idx+rec->rlen] = 0; + } + error( + "The fasta sequence does not match the REF allele at %s:%d:\n" + " .vcf: [%s]\n" + " .vcf: [%s] <- (ALT)\n" + " .fa: [%s]%c%s\n", + bcf_seqname(args->hdr,rec),rec->pos+1, rec->d.allele[0], rec->d.allele[ialt], args->fa_buf.s+idx, + tmp?tmp:' ',tmp?args->fa_buf.s+idx+rec->rlen+1:"" + ); + } + else + { + alen = strlen(rec->d.allele[ialt]); + len_diff = alen - rec->rlen; + } + + if ( args->fa_case ) + for (i=0; id.allele[ialt][i] = toupper(rec->d.allele[ialt][i]); + else + for (i=0; id.allele[ialt][i] = tolower(rec->d.allele[ialt][i]); + + if ( len_diff <= 0 ) + { + // deletion or same size event + for (i=0; ifa_buf.s[idx+i] = rec->d.allele[ialt][i]; + if ( len_diff ) + memmove(args->fa_buf.s+idx+alen,args->fa_buf.s+idx+rec->rlen,args->fa_buf.l-idx-rec->rlen); + } + else + { + // insertion + ks_resize(&args->fa_buf, args->fa_buf.l + len_diff); + memmove(args->fa_buf.s + idx + rec->rlen + len_diff, args->fa_buf.s + idx + rec->rlen, args->fa_buf.l - idx - rec->rlen); + for (i=0; ifa_buf.s[idx+i] = rec->d.allele[ialt][i]; + } + if (args->chain && len_diff != 0) + { + // If first nucleotide of both REF and ALT are the same... (indels typically include the nucleotide before the variant) + if ( strncasecmp(rec->d.allele[0],rec->d.allele[ialt],1) == 0) + { + // ...extend the block by 1 bp: start is 1 bp further and alleles are 1 bp shorter + push_chain_gap(args->chain, rec->pos + 1, rec->rlen - 1, rec->pos + 1 + args->fa_mod_off, alen - 1); + } + else + { + // otherwise, just the coordinates of the variant as given + push_chain_gap(args->chain, rec->pos, rec->rlen, rec->pos + args->fa_mod_off, alen); + } + } + args->fa_buf.l += len_diff; + args->fa_mod_off += len_diff; + args->fa_frz_pos = rec->pos + rec->rlen - 1; +} + + +static void mask_region(args_t *args, char *seq, int len) +{ + char *chr = (char*)bcf_hdr_id2name(args->hdr,args->rid); + int start = args->fa_src_pos - len; + int end = args->fa_src_pos; + + if ( !regidx_overlap(args->mask, chr,start,end, args->itr) ) return; + + int idx_start, idx_end, i; + while ( regitr_overlap(args->itr) ) + { + idx_start = args->itr->beg - start; + idx_end = args->itr->end - start; + if ( idx_start < 0 ) idx_start = 0; + if ( idx_end >= len ) idx_end = len - 1; + for (i=idx_start; i<=idx_end; i++) seq[i] = 'N'; + } +} + +static void consensus(args_t *args) +{ + htsFile *fasta = hts_open(args->ref_fname, "rb"); + if ( !fasta ) error("Error reading %s\n", args->ref_fname); + kstring_t str = {0,0,0}; + while ( hts_getline(fasta, KS_SEP_LINE, &str) > 0 ) + { + if ( str.s[0]=='>' ) + { + // new sequence encountered + if (args->chain) { + print_chain(args); + destroy_chain(args); + } + // apply all cached variants + while ( args->vcf_rbuf.n ) + { + bcf1_t *rec = args->vcf_buf[args->vcf_rbuf.f]; + if ( rec->rid!=args->rid || ( args->fa_end_pos && rec->pos > args->fa_end_pos ) ) break; + int i = rbuf_shift(&args->vcf_rbuf); + apply_variant(args, args->vcf_buf[i]); + } + flush_fa_buffer(args, 0); + init_region(args, str.s+1); + continue; + } + args->fa_length += str.l; + args->fa_src_pos += str.l; + + // determine if uppercase or lowercase is used in this fasta file + if ( args->fa_case==-1 ) args->fa_case = toupper(str.s[0])==str.s[0] ? 1 : 0; + + if ( args->mask && args->rid>=0) mask_region(args, str.s, str.l); + kputs(str.s, &args->fa_buf); + + bcf1_t **rec_ptr = NULL; + while ( args->rid>=0 && (rec_ptr = next_vcf_line(args)) ) + { + bcf1_t *rec = *rec_ptr; + + // still the same chr and the same region? if not, fasta buf can be flushed + if ( rec->rid!=args->rid || ( args->fa_end_pos && rec->pos > args->fa_end_pos ) ) + { + // save the vcf record until next time and flush + unread_vcf_line(args, rec_ptr); + rec_ptr = NULL; + break; + } + + // is the vcf record well beyond cached fasta buffer? if yes, the buf can be flushed + if ( args->fa_ori_pos + args->fa_buf.l - args->fa_mod_off <= rec->pos ) + { + unread_vcf_line(args, rec_ptr); + rec_ptr = NULL; + break; + } + + // is the cached fasta buffer full enough? if not, read more fasta, no flushing + if ( args->fa_ori_pos + args->fa_buf.l - args->fa_mod_off < rec->pos + rec->rlen ) + { + unread_vcf_line(args, rec_ptr); + break; + } + apply_variant(args, rec); + } + if ( !rec_ptr ) flush_fa_buffer(args, 60); + } + bcf1_t **rec_ptr = NULL; + while ( args->rid>=0 && (rec_ptr = next_vcf_line(args)) ) + { + bcf1_t *rec = *rec_ptr; + if ( rec->rid!=args->rid ) break; + if ( args->fa_end_pos && rec->pos > args->fa_end_pos ) break; + if ( args->fa_ori_pos + args->fa_buf.l - args->fa_mod_off <= rec->pos ) break; + apply_variant(args, rec); + } + if (args->chain) + { + print_chain(args); + destroy_chain(args); + } + flush_fa_buffer(args, 0); + hts_close(fasta); + free(str.s); +} + +static void usage(args_t *args) +{ + fprintf(stderr, "\n"); + fprintf(stderr, "About: Create consensus sequence by applying VCF variants to a reference fasta\n"); + fprintf(stderr, " file. By default, the program will apply all ALT variants. Using the\n"); + fprintf(stderr, " --sample (and, optionally, --haplotype) option will apply genotype\n"); + fprintf(stderr, " (or haplotype) calls from FORMAT/GT. The program ignores allelic depth\n"); + fprintf(stderr, " information, such as INFO/AD or FORMAT/AD.\n"); + fprintf(stderr, "Usage: bcftools consensus [OPTIONS] \n"); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " -c, --chain write a chain file for liftover\n"); + fprintf(stderr, " -e, --exclude exclude sites for which the expression is true (see man page for details)\n"); + fprintf(stderr, " -f, --fasta-ref reference sequence in fasta format\n"); + fprintf(stderr, " -H, --haplotype choose which allele to use from the FORMAT/GT field, note\n"); + fprintf(stderr, " the codes are case-insensitive:\n"); + fprintf(stderr, " 1: first allele from GT\n"); + fprintf(stderr, " 2: second allele\n"); + fprintf(stderr, " R: REF allele in het genotypes\n"); + fprintf(stderr, " A: ALT allele\n"); + fprintf(stderr, " LR,LA: longer allele and REF/ALT if equal length\n"); + fprintf(stderr, " SR,SA: shorter allele and REF/ALT if equal length\n"); + fprintf(stderr, " -i, --include select sites for which the expression is true (see man page for details)\n"); + fprintf(stderr, " -I, --iupac-codes output variants in the form of IUPAC ambiguity codes\n"); + fprintf(stderr, " -m, --mask replace regions with N\n"); + fprintf(stderr, " -o, --output write output to a file [standard output]\n"); + fprintf(stderr, " -s, --sample apply variants of the given sample\n"); + fprintf(stderr, "Examples:\n"); + fprintf(stderr, " # Get the consensus for one region. The fasta header lines are then expected\n"); + fprintf(stderr, " # in the form \">chr:from-to\".\n"); + fprintf(stderr, " samtools faidx ref.fa 8:11870-11890 | bcftools consensus in.vcf.gz > out.fa\n"); + fprintf(stderr, "\n"); + exit(1); +} + +int main_consensus(int argc, char *argv[]) +{ + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + + static struct option loptions[] = + { + {"exclude",required_argument,NULL,'e'}, + {"include",required_argument,NULL,'i'}, + {"sample",1,0,'s'}, + {"iupac-codes",0,0,'I'}, + {"haplotype",1,0,'H'}, + {"output",1,0,'o'}, + {"fasta-ref",1,0,'f'}, + {"mask",1,0,'m'}, + {"chain",1,0,'c'}, + {0,0,0,0} + }; + int c; + while ((c = getopt_long(argc, argv, "h?s:1Ii:e:H:f:o:m:c:",loptions,NULL)) >= 0) + { + switch (c) + { + case 's': args->sample = optarg; break; + case 'o': args->output_fname = optarg; break; + case 'I': args->output_iupac = 1; break; + case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break; + case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break; + case 'f': args->ref_fname = optarg; break; + case 'm': args->mask_fname = optarg; break; + case 'c': args->chain_fname = optarg; break; + case 'H': + if ( !strcasecmp(optarg,"R") ) args->allele |= PICK_REF; + else if ( !strcasecmp(optarg,"A") ) args->allele |= PICK_ALT; + else if ( !strcasecmp(optarg,"L") ) args->allele |= PICK_LONG|PICK_REF; + else if ( !strcasecmp(optarg,"S") ) args->allele |= PICK_SHORT|PICK_REF; + else if ( !strcasecmp(optarg,"LR") ) args->allele |= PICK_LONG|PICK_REF; + else if ( !strcasecmp(optarg,"LA") ) args->allele |= PICK_LONG|PICK_ALT; + else if ( !strcasecmp(optarg,"SR") ) args->allele |= PICK_SHORT|PICK_REF; + else if ( !strcasecmp(optarg,"SA") ) args->allele |= PICK_SHORT|PICK_ALT; + else + { + args->haplotype = optarg[0] - '0'; + if ( args->haplotype <=0 ) error("Expected positive integer with --haplotype\n"); + } + break; + default: usage(args); break; + } + } + if ( optind>=argc ) usage(args); + args->fname = argv[optind]; + + if ( !args->ref_fname && !isatty(fileno((FILE *)stdin)) ) args->ref_fname = "-"; + if ( !args->ref_fname ) usage(args); + + init_data(args); + consensus(args); + destroy_data(args); + free(args); + + return 0; +} + + diff --git a/bcftools/consensus.c.pysam.c b/bcftools/consensus.c.pysam.c new file mode 100644 index 0000000..9ba5dd0 --- /dev/null +++ b/bcftools/consensus.c.pysam.c @@ -0,0 +1,770 @@ +#include "bcftools.pysam.h" + +/* The MIT License + + Copyright (c) 2014-2017 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "regidx.h" +#include "bcftools.h" +#include "rbuf.h" +#include "filter.h" + +// Logic of the filters: include or exclude sites which match the filters? +#define FLT_INCLUDE 1 +#define FLT_EXCLUDE 2 + +#define PICK_REF 1 +#define PICK_ALT 2 +#define PICK_LONG 4 +#define PICK_SHORT 8 + +typedef struct +{ + int num; // number of ungapped blocks in this chain + int *block_lengths; // length of the ungapped blocks in this chain + int *ref_gaps; // length of the gaps on the reference sequence between blocks + int *alt_gaps; // length of the gaps on the alternative sequence between blocks + int ori_pos; + int ref_last_block_ori; // start position on the reference sequence of the following ungapped block (0-based) + int alt_last_block_ori; // start position on the alternative sequence of the following ungapped block (0-based) +} +chain_t; + + +typedef struct +{ + kstring_t fa_buf; // buffered reference sequence + int fa_ori_pos; // start position of the fa_buffer (wrt original sequence) + int fa_frz_pos; // protected position to avoid conflicting variants (last pos for SNPs/ins) + int fa_mod_off; // position difference of fa_frz_pos in the ori and modified sequence (ins positive) + int fa_end_pos; // region's end position in the original sequence + int fa_length; // region's length in the original sequence (in case end_pos not provided in the FASTA header) + int fa_case; // output upper case or lower case? + int fa_src_pos; // last genomic coordinate read from the input fasta (0-based) + + rbuf_t vcf_rbuf; + bcf1_t **vcf_buf; + int nvcf_buf, rid; + + regidx_t *mask; + regitr_t *itr; + + int chain_id; // chain_id, to provide a unique ID to each chain in the chain output + chain_t *chain; // chain structure to store the sequence of ungapped blocks between the ref and alt sequences + // Note that the chain is re-initialised for each chromosome/seq_region + + filter_t *filter; + char *filter_str; + int filter_logic; // include or exclude sites which match the filters? One of FLT_INCLUDE/FLT_EXCLUDE + + bcf_srs_t *files; + bcf_hdr_t *hdr; + FILE *fp_out; + FILE *fp_chain; + char **argv; + int argc, output_iupac, haplotype, allele, isample; + char *fname, *ref_fname, *sample, *output_fname, *mask_fname, *chain_fname; +} +args_t; + +static chain_t* init_chain(chain_t *chain, int ref_ori_pos) +{ +// fprintf(bcftools_stderr, "init_chain(*chain, ref_ori_pos=%d)\n", ref_ori_pos); + chain = (chain_t*) calloc(1,sizeof(chain_t)); + chain->num = 0; + chain->block_lengths = NULL; + chain->ref_gaps = NULL; + chain->alt_gaps = NULL; + chain->ori_pos = ref_ori_pos; + chain->ref_last_block_ori = ref_ori_pos; + chain->alt_last_block_ori = ref_ori_pos; + return chain; +} + +static void destroy_chain(args_t *args) +{ + chain_t *chain = args->chain; + free(chain->ref_gaps); + free(chain->alt_gaps); + free(chain->block_lengths); + free(chain); + chain = NULL; +} + +static void print_chain(args_t *args) +{ + /* + Example chain format (see: https://genome.ucsc.edu/goldenPath/help/chain.html): + chain 1 500 + 480 500 1 501 + 480 501 1 + 12 3 1 + 1 0 3 + 484 + + chain line is: + - chain + - score (sum of the length of ungapped block in this case) + - ref_seqname (from the fasta header, parsed by htslib) + - ref_seqlength (from the fasta header) + - ref_strand (+ or -; always + for bcf-consensus) + - ref_start (as defined in the fasta header) + - ref_end (as defined in the fasta header) + - alt_seqname (same as ref_seqname as bcf-consensus only considers SNPs and indels) + - alt_seqlength (adjusted to match the length of the alt sequence) + - alt_strand (+ or -; always + for bcf-consensus) + - alt_start (same as ref_start, as no edits are recorded/applied before that position) + - alt_end (adjusted to match the length of the alt sequence) + - chain_num (just an auto-increment id) + + the other (sorted) lines are: + - length of the ungapped alignment block + - gap on the ref sequence between this and the next block (all but the last line) + - gap on the alt sequence between this and the next block (all but the last line) + */ + chain_t *chain = args->chain; + int n = chain->num; + int ref_end_pos = args->fa_length + chain->ori_pos; + int last_block_size = ref_end_pos - chain->ref_last_block_ori; + int alt_end_pos = chain->alt_last_block_ori + last_block_size; + int score = 0; + for (n=0; nnum; n++) { + score += chain->block_lengths[n]; + } + score += last_block_size; + fprintf(args->fp_chain, "chain %d %s %d + %d %d %s %d + %d %d %d\n", score, bcf_hdr_id2name(args->hdr,args->rid), ref_end_pos, chain->ori_pos, ref_end_pos, bcf_hdr_id2name(args->hdr,args->rid), alt_end_pos, chain->ori_pos, alt_end_pos, ++args->chain_id); + for (n=0; nnum; n++) { + fprintf(args->fp_chain, "%d %d %d\n", chain->block_lengths[n], chain->ref_gaps[n], chain->alt_gaps[n]); + } + fprintf(args->fp_chain, "%d\n\n", last_block_size); +} + +static void push_chain_gap(chain_t *chain, int ref_start, int ref_len, int alt_start, int alt_len) +{ +// fprintf(bcftools_stderr, "push_chain_gap(*chain, ref_start=%d, ref_len=%d, alt_start=%d, alt_len=%d)\n", ref_start, ref_len, alt_start, alt_len); + int num = chain->num; + + if (ref_start <= chain->ref_last_block_ori) { + // In case this variant is back-to-back with the previous one + chain->ref_last_block_ori = ref_start + ref_len; + chain->alt_last_block_ori = alt_start + alt_len; + chain->ref_gaps[num-1] += ref_len; + chain->alt_gaps[num-1] += alt_len; + + } else { + // Extend the ungapped blocks, store the gap length + chain->block_lengths = (int*) realloc(chain->block_lengths, (num + 1) * sizeof(int)); + chain->ref_gaps = (int*) realloc(chain->ref_gaps, (num + 1) * sizeof(int)); + chain->alt_gaps = (int*) realloc(chain->alt_gaps, (num + 1) * sizeof(int)); + chain->block_lengths[num] = ref_start - chain->ref_last_block_ori; + chain->ref_gaps[num] = ref_len; + chain->alt_gaps[num] = alt_len; + // Update the start positions of the next block + chain->ref_last_block_ori = ref_start + ref_len; + chain->alt_last_block_ori = alt_start + alt_len; + // Increment the number of ungapped blocks + chain->num++; + } +} + +static void init_data(args_t *args) +{ + args->files = bcf_sr_init(); + args->files->require_index = 1; + if ( !bcf_sr_add_reader(args->files,args->fname) ) error("Failed to open %s: %s\n", args->fname, bcf_sr_strerror(args->files->errnum)); + args->hdr = args->files->readers[0].header; + args->isample = -1; + if ( args->sample ) + { + args->isample = bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,args->sample); + if ( args->isample<0 ) error("No such sample: %s\n", args->sample); + } + if ( (args->haplotype || args->allele) && args->isample<0 ) + { + if ( bcf_hdr_nsamples(args->hdr) > 1 ) error("The --sample option is expected with --haplotype\n"); + args->isample = 0; + } + if ( args->mask_fname ) + { + args->mask = regidx_init(args->mask_fname,NULL,NULL,0,NULL); + if ( !args->mask ) error("Failed to initialize mask regions\n"); + args->itr = regitr_init(args->mask); + } + // In case we want to store the chains + if ( args->chain_fname ) + { + args->fp_chain = fopen(args->chain_fname,"w"); + if ( ! args->fp_chain ) error("Failed to create %s: %s\n", args->chain_fname, strerror(errno)); + args->chain_id = 0; + } + rbuf_init(&args->vcf_rbuf, 100); + args->vcf_buf = (bcf1_t**) calloc(args->vcf_rbuf.m, sizeof(bcf1_t*)); + if ( args->output_fname ) { + args->fp_out = fopen(args->output_fname,"w"); + if ( ! args->fp_out ) error("Failed to create %s: %s\n", args->output_fname, strerror(errno)); + } + else args->fp_out = bcftools_stdout; + if ( args->isample<0 ) fprintf(bcftools_stderr,"Note: the --sample option not given, applying all records\n"); + if ( args->filter_str ) + args->filter = filter_init(args->hdr, args->filter_str); +} + +static void destroy_data(args_t *args) +{ + if (args->filter) filter_destroy(args->filter); + bcf_sr_destroy(args->files); + int i; + for (i=0; ivcf_rbuf.m; i++) + if ( args->vcf_buf[i] ) bcf_destroy1(args->vcf_buf[i]); + free(args->vcf_buf); + free(args->fa_buf.s); + if ( args->mask ) regidx_destroy(args->mask); + if ( args->itr ) regitr_destroy(args->itr); + if ( args->chain_fname ) + if ( fclose(args->fp_chain) ) error("Close failed: %s\n", args->chain_fname); + if ( fclose(args->fp_out) ) error("Close failed: %s\n", args->output_fname); +} + +static void init_region(args_t *args, char *line) +{ + char *ss, *se = line; + while ( *se && !isspace(*se) && *se!=':' ) se++; + int from = 0, to = 0; + char tmp, *tmp_ptr = NULL; + if ( *se ) + { + tmp = *se; *se = 0; tmp_ptr = se; + ss = ++se; + from = strtol(ss,&se,10); + if ( ss==se || !*se || *se!='-' ) from = 0; + else + { + from--; + ss = ++se; + to = strtol(ss,&se,10); + if ( ss==se || (*se && !isspace(*se)) ) { from = 0; to = 0; } + else to--; + } + } + args->rid = bcf_hdr_name2id(args->hdr,line); + if ( args->rid<0 ) fprintf(bcftools_stderr,"Warning: Sequence \"%s\" not in %s\n", line,args->fname); + args->fa_buf.l = 0; + args->fa_length = 0; + args->fa_end_pos = to; + args->fa_ori_pos = from; + args->fa_src_pos = from; + args->fa_mod_off = 0; + args->fa_frz_pos = -1; + args->fa_case = -1; + args->vcf_rbuf.n = 0; + bcf_sr_seek(args->files,line,args->fa_ori_pos); + if ( tmp_ptr ) *tmp_ptr = tmp; + fprintf(args->fp_out,">%s\n",line); + if (args->chain_fname ) + { + args->chain = init_chain(args->chain, args->fa_ori_pos); + } else { + args->chain = NULL; + } +} + +static bcf1_t **next_vcf_line(args_t *args) +{ + if ( args->vcf_rbuf.n ) + { + int i = rbuf_shift(&args->vcf_rbuf); + return &args->vcf_buf[i]; + } + while ( bcf_sr_next_line(args->files) ) + { + if ( args->filter ) + { + int is_ok = filter_test(args->filter, bcf_sr_get_line(args->files,0), NULL); + if ( args->filter_logic & FLT_EXCLUDE ) is_ok = is_ok ? 0 : 1; + if ( !is_ok ) continue; + } + return &args->files->readers[0].buffer[0]; + } + return NULL; +} +static void unread_vcf_line(args_t *args, bcf1_t **rec_ptr) +{ + bcf1_t *rec = *rec_ptr; + if ( args->vcf_rbuf.n >= args->vcf_rbuf.m ) + error("FIXME: too many overlapping records near %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1); + + // Insert the new record in the buffer. The line would be overwritten in + // the next bcf_sr_next_line call, therefore we need to swap it with an + // unused one + int i = rbuf_append(&args->vcf_rbuf); + if ( !args->vcf_buf[i] ) args->vcf_buf[i] = bcf_init1(); + bcf1_t *tmp = rec; *rec_ptr = args->vcf_buf[i]; args->vcf_buf[i] = tmp; +} +static void flush_fa_buffer(args_t *args, int len) +{ + if ( !args->fa_buf.l ) return; + + int nwr = 0; + while ( nwr + 60 <= args->fa_buf.l ) + { + if ( fwrite(args->fa_buf.s+nwr,1,60,args->fp_out) != 60 ) error("Could not write: %s\n", args->output_fname); + if ( fwrite("\n",1,1,args->fp_out) != 1 ) error("Could not write: %s\n", args->output_fname); + nwr += 60; + } + if ( nwr ) + args->fa_ori_pos += nwr; + + if ( len ) + { + // not finished on this chr yet and the buffer cannot be emptied completely + if ( nwr && nwr < args->fa_buf.l ) + memmove(args->fa_buf.s,args->fa_buf.s+nwr,args->fa_buf.l-nwr); + args->fa_buf.l -= nwr; + return; + } + + // empty the whole buffer + if ( nwr == args->fa_buf.l ) { args->fa_buf.l = 0; return; } + + if ( fwrite(args->fa_buf.s+nwr,1,args->fa_buf.l - nwr,args->fp_out) != args->fa_buf.l - nwr ) error("Could not write: %s\n", args->output_fname); + if ( fwrite("\n",1,1,args->fp_out) != 1 ) error("Could not write: %s\n", args->output_fname); + + args->fa_ori_pos += args->fa_buf.l - nwr - args->fa_mod_off; + args->fa_mod_off = 0; + args->fa_buf.l = 0; +} +static void apply_variant(args_t *args, bcf1_t *rec) +{ + if ( rec->n_allele==1 ) return; + + if ( rec->pos <= args->fa_frz_pos ) + { + fprintf(bcftools_stderr,"The site %s:%d overlaps with another variant, skipping...\n", bcf_seqname(args->hdr,rec),rec->pos+1); + return; + } + if ( args->mask ) + { + char *chr = (char*)bcf_hdr_id2name(args->hdr,args->rid); + int start = rec->pos; + int end = rec->pos + rec->rlen - 1; + if ( regidx_overlap(args->mask, chr,start,end,NULL) ) return; + } + + int i, ialt = 1; + if ( args->isample >= 0 ) + { + bcf_unpack(rec, BCF_UN_FMT); + bcf_fmt_t *fmt = bcf_get_fmt(args->hdr, rec, "GT"); + if ( !fmt ) return; + + if ( fmt->type!=BCF_BT_INT8 ) + error("Todo: GT field represented with BCF_BT_INT8, too many alleles at %s:%d?\n",bcf_seqname(args->hdr,rec),rec->pos+1); + uint8_t *ptr = fmt->p + fmt->size*args->isample; + + if ( args->haplotype ) + { + if ( args->haplotype > fmt->n ) error("Can't apply %d-th haplotype at %s:%d\n", args->haplotype,bcf_seqname(args->hdr,rec),rec->pos+1); + ialt = ptr[args->haplotype-1]; + if ( bcf_gt_is_missing(ialt) || ialt==bcf_int32_vector_end ) return; + ialt = bcf_gt_allele(ialt); + } + else if ( args->output_iupac ) + { + ialt = ptr[0]; + if ( bcf_gt_is_missing(ialt) || ialt==bcf_int32_vector_end ) return; + ialt = bcf_gt_allele(ialt); + + int jalt; + if ( fmt->n>1 ) + { + jalt = ptr[1]; + if ( bcf_gt_is_missing(jalt) || jalt==bcf_int32_vector_end ) jalt = ialt; + else jalt = bcf_gt_allele(jalt); + } + else jalt = ialt; + if ( rec->n_allele <= ialt || rec->n_allele <= jalt ) error("Invalid VCF, too few ALT alleles at %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1); + if ( ialt!=jalt && !rec->d.allele[ialt][1] && !rec->d.allele[jalt][1] ) // is this a het snp? + { + char ial = rec->d.allele[ialt][0]; + char jal = rec->d.allele[jalt][0]; + rec->d.allele[ialt][0] = gt2iupac(ial,jal); + } + } + else + { + int is_hom = 1; + for (i=0; in; i++) + { + if ( bcf_gt_is_missing(ptr[i]) ) return; // ignore missing or half-missing genotypes + if ( ptr[i]==bcf_int32_vector_end ) break; + ialt = bcf_gt_allele(ptr[i]); + if ( i>0 && ialt!=bcf_gt_allele(ptr[i-1]) ) { is_hom = 0; break; } + } + if ( !is_hom ) + { + int prev_len = 0, jalt; + for (i=0; in; i++) + { + if ( ptr[i]==bcf_int32_vector_end ) break; + jalt = bcf_gt_allele(ptr[i]); + if ( rec->n_allele <= jalt ) error("Broken VCF, too few alts at %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1); + if ( args->allele & (PICK_LONG|PICK_SHORT) ) + { + int len = jalt==0 ? rec->rlen : strlen(rec->d.allele[jalt]); + if ( i==0 ) ialt = jalt, prev_len = len; + else if ( len == prev_len ) + { + if ( args->allele & PICK_REF && jalt==0 ) ialt = jalt, prev_len = len; + else if ( args->allele & PICK_ALT && ialt==0 ) ialt = jalt, prev_len = len; + } + else if ( args->allele & PICK_LONG && len > prev_len ) ialt = jalt, prev_len = len; + else if ( args->allele & PICK_SHORT && len < prev_len ) ialt = jalt, prev_len = len; + } + else + { + if ( args->allele & PICK_REF && jalt==0 ) ialt = jalt; + else if ( args->allele & PICK_ALT && ialt==0 ) ialt = jalt; + } + } + } + } + if ( !ialt ) return; // ref allele + if ( rec->n_allele <= ialt ) error("Broken VCF, too few alts at %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1); + } + else if ( args->output_iupac && !rec->d.allele[0][1] && !rec->d.allele[1][1] ) + { + char ial = rec->d.allele[0][0]; + char jal = rec->d.allele[1][0]; + rec->d.allele[1][0] = gt2iupac(ial,jal); + } + + int len_diff = 0, alen = 0; + int idx = rec->pos - args->fa_ori_pos + args->fa_mod_off; + if ( idx<0 ) + { + fprintf(bcftools_stderr,"Warning: ignoring overlapping variant starting at %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1); + return; + } + if ( rec->rlen > args->fa_buf.l - idx ) + { + rec->rlen = args->fa_buf.l - idx; + alen = strlen(rec->d.allele[ialt]); + if ( alen > rec->rlen ) + { + rec->d.allele[ialt][rec->rlen] = 0; + fprintf(bcftools_stderr,"Warning: trimming variant starting at %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1); + } + } + if ( idx>=args->fa_buf.l ) + error("FIXME: %s:%d .. idx=%d, ori_pos=%d, len=%d, off=%d\n",bcf_seqname(args->hdr,rec),rec->pos+1,idx,args->fa_ori_pos,args->fa_buf.l,args->fa_mod_off); + + // sanity check the reference base + if ( rec->d.allele[ialt][0]=='<' ) + { + if ( strcasecmp(rec->d.allele[ialt], "") ) + error("Symbolic alleles other than are currently not supported: %s at %s:%d\n",rec->d.allele[ialt],bcf_seqname(args->hdr,rec),rec->pos+1); + assert( rec->d.allele[0][1]==0 ); // todo: for now expecting strlen(REF) = 1 + len_diff = 1-rec->rlen; + rec->d.allele[ialt] = rec->d.allele[0]; // according to VCF spec, REF must precede the event + alen = strlen(rec->d.allele[ialt]); + } + else if ( strncasecmp(rec->d.allele[0],args->fa_buf.s+idx,rec->rlen) ) + { + // fprintf(bcftools_stderr,"%d .. [%s], idx=%d ori=%d off=%d\n",args->fa_ori_pos,args->fa_buf.s,idx,args->fa_ori_pos,args->fa_mod_off); + char tmp = 0; + if ( args->fa_buf.l - idx > rec->rlen ) + { + tmp = args->fa_buf.s[idx+rec->rlen]; + args->fa_buf.s[idx+rec->rlen] = 0; + } + error( + "The fasta sequence does not match the REF allele at %s:%d:\n" + " .vcf: [%s]\n" + " .vcf: [%s] <- (ALT)\n" + " .fa: [%s]%c%s\n", + bcf_seqname(args->hdr,rec),rec->pos+1, rec->d.allele[0], rec->d.allele[ialt], args->fa_buf.s+idx, + tmp?tmp:' ',tmp?args->fa_buf.s+idx+rec->rlen+1:"" + ); + } + else + { + alen = strlen(rec->d.allele[ialt]); + len_diff = alen - rec->rlen; + } + + if ( args->fa_case ) + for (i=0; id.allele[ialt][i] = toupper(rec->d.allele[ialt][i]); + else + for (i=0; id.allele[ialt][i] = tolower(rec->d.allele[ialt][i]); + + if ( len_diff <= 0 ) + { + // deletion or same size event + for (i=0; ifa_buf.s[idx+i] = rec->d.allele[ialt][i]; + if ( len_diff ) + memmove(args->fa_buf.s+idx+alen,args->fa_buf.s+idx+rec->rlen,args->fa_buf.l-idx-rec->rlen); + } + else + { + // insertion + ks_resize(&args->fa_buf, args->fa_buf.l + len_diff); + memmove(args->fa_buf.s + idx + rec->rlen + len_diff, args->fa_buf.s + idx + rec->rlen, args->fa_buf.l - idx - rec->rlen); + for (i=0; ifa_buf.s[idx+i] = rec->d.allele[ialt][i]; + } + if (args->chain && len_diff != 0) + { + // If first nucleotide of both REF and ALT are the same... (indels typically include the nucleotide before the variant) + if ( strncasecmp(rec->d.allele[0],rec->d.allele[ialt],1) == 0) + { + // ...extend the block by 1 bp: start is 1 bp further and alleles are 1 bp shorter + push_chain_gap(args->chain, rec->pos + 1, rec->rlen - 1, rec->pos + 1 + args->fa_mod_off, alen - 1); + } + else + { + // otherwise, just the coordinates of the variant as given + push_chain_gap(args->chain, rec->pos, rec->rlen, rec->pos + args->fa_mod_off, alen); + } + } + args->fa_buf.l += len_diff; + args->fa_mod_off += len_diff; + args->fa_frz_pos = rec->pos + rec->rlen - 1; +} + + +static void mask_region(args_t *args, char *seq, int len) +{ + char *chr = (char*)bcf_hdr_id2name(args->hdr,args->rid); + int start = args->fa_src_pos - len; + int end = args->fa_src_pos; + + if ( !regidx_overlap(args->mask, chr,start,end, args->itr) ) return; + + int idx_start, idx_end, i; + while ( regitr_overlap(args->itr) ) + { + idx_start = args->itr->beg - start; + idx_end = args->itr->end - start; + if ( idx_start < 0 ) idx_start = 0; + if ( idx_end >= len ) idx_end = len - 1; + for (i=idx_start; i<=idx_end; i++) seq[i] = 'N'; + } +} + +static void consensus(args_t *args) +{ + htsFile *fasta = hts_open(args->ref_fname, "rb"); + if ( !fasta ) error("Error reading %s\n", args->ref_fname); + kstring_t str = {0,0,0}; + while ( hts_getline(fasta, KS_SEP_LINE, &str) > 0 ) + { + if ( str.s[0]=='>' ) + { + // new sequence encountered + if (args->chain) { + print_chain(args); + destroy_chain(args); + } + // apply all cached variants + while ( args->vcf_rbuf.n ) + { + bcf1_t *rec = args->vcf_buf[args->vcf_rbuf.f]; + if ( rec->rid!=args->rid || ( args->fa_end_pos && rec->pos > args->fa_end_pos ) ) break; + int i = rbuf_shift(&args->vcf_rbuf); + apply_variant(args, args->vcf_buf[i]); + } + flush_fa_buffer(args, 0); + init_region(args, str.s+1); + continue; + } + args->fa_length += str.l; + args->fa_src_pos += str.l; + + // determine if uppercase or lowercase is used in this fasta file + if ( args->fa_case==-1 ) args->fa_case = toupper(str.s[0])==str.s[0] ? 1 : 0; + + if ( args->mask && args->rid>=0) mask_region(args, str.s, str.l); + kputs(str.s, &args->fa_buf); + + bcf1_t **rec_ptr = NULL; + while ( args->rid>=0 && (rec_ptr = next_vcf_line(args)) ) + { + bcf1_t *rec = *rec_ptr; + + // still the same chr and the same region? if not, fasta buf can be flushed + if ( rec->rid!=args->rid || ( args->fa_end_pos && rec->pos > args->fa_end_pos ) ) + { + // save the vcf record until next time and flush + unread_vcf_line(args, rec_ptr); + rec_ptr = NULL; + break; + } + + // is the vcf record well beyond cached fasta buffer? if yes, the buf can be flushed + if ( args->fa_ori_pos + args->fa_buf.l - args->fa_mod_off <= rec->pos ) + { + unread_vcf_line(args, rec_ptr); + rec_ptr = NULL; + break; + } + + // is the cached fasta buffer full enough? if not, read more fasta, no flushing + if ( args->fa_ori_pos + args->fa_buf.l - args->fa_mod_off < rec->pos + rec->rlen ) + { + unread_vcf_line(args, rec_ptr); + break; + } + apply_variant(args, rec); + } + if ( !rec_ptr ) flush_fa_buffer(args, 60); + } + bcf1_t **rec_ptr = NULL; + while ( args->rid>=0 && (rec_ptr = next_vcf_line(args)) ) + { + bcf1_t *rec = *rec_ptr; + if ( rec->rid!=args->rid ) break; + if ( args->fa_end_pos && rec->pos > args->fa_end_pos ) break; + if ( args->fa_ori_pos + args->fa_buf.l - args->fa_mod_off <= rec->pos ) break; + apply_variant(args, rec); + } + if (args->chain) + { + print_chain(args); + destroy_chain(args); + } + flush_fa_buffer(args, 0); + hts_close(fasta); + free(str.s); +} + +static void usage(args_t *args) +{ + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "About: Create consensus sequence by applying VCF variants to a reference fasta\n"); + fprintf(bcftools_stderr, " file. By default, the program will apply all ALT variants. Using the\n"); + fprintf(bcftools_stderr, " --sample (and, optionally, --haplotype) option will apply genotype\n"); + fprintf(bcftools_stderr, " (or haplotype) calls from FORMAT/GT. The program ignores allelic depth\n"); + fprintf(bcftools_stderr, " information, such as INFO/AD or FORMAT/AD.\n"); + fprintf(bcftools_stderr, "Usage: bcftools consensus [OPTIONS] \n"); + fprintf(bcftools_stderr, "Options:\n"); + fprintf(bcftools_stderr, " -c, --chain write a chain file for liftover\n"); + fprintf(bcftools_stderr, " -e, --exclude exclude sites for which the expression is true (see man page for details)\n"); + fprintf(bcftools_stderr, " -f, --fasta-ref reference sequence in fasta format\n"); + fprintf(bcftools_stderr, " -H, --haplotype choose which allele to use from the FORMAT/GT field, note\n"); + fprintf(bcftools_stderr, " the codes are case-insensitive:\n"); + fprintf(bcftools_stderr, " 1: first allele from GT\n"); + fprintf(bcftools_stderr, " 2: second allele\n"); + fprintf(bcftools_stderr, " R: REF allele in het genotypes\n"); + fprintf(bcftools_stderr, " A: ALT allele\n"); + fprintf(bcftools_stderr, " LR,LA: longer allele and REF/ALT if equal length\n"); + fprintf(bcftools_stderr, " SR,SA: shorter allele and REF/ALT if equal length\n"); + fprintf(bcftools_stderr, " -i, --include select sites for which the expression is true (see man page for details)\n"); + fprintf(bcftools_stderr, " -I, --iupac-codes output variants in the form of IUPAC ambiguity codes\n"); + fprintf(bcftools_stderr, " -m, --mask replace regions with N\n"); + fprintf(bcftools_stderr, " -o, --output write output to a file [standard output]\n"); + fprintf(bcftools_stderr, " -s, --sample apply variants of the given sample\n"); + fprintf(bcftools_stderr, "Examples:\n"); + fprintf(bcftools_stderr, " # Get the consensus for one region. The fasta header lines are then expected\n"); + fprintf(bcftools_stderr, " # in the form \">chr:from-to\".\n"); + fprintf(bcftools_stderr, " samtools faidx ref.fa 8:11870-11890 | bcftools consensus in.vcf.gz > out.fa\n"); + fprintf(bcftools_stderr, "\n"); + exit(1); +} + +int main_consensus(int argc, char *argv[]) +{ + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + + static struct option loptions[] = + { + {"exclude",required_argument,NULL,'e'}, + {"include",required_argument,NULL,'i'}, + {"sample",1,0,'s'}, + {"iupac-codes",0,0,'I'}, + {"haplotype",1,0,'H'}, + {"output",1,0,'o'}, + {"fasta-ref",1,0,'f'}, + {"mask",1,0,'m'}, + {"chain",1,0,'c'}, + {0,0,0,0} + }; + int c; + while ((c = getopt_long(argc, argv, "h?s:1Ii:e:H:f:o:m:c:",loptions,NULL)) >= 0) + { + switch (c) + { + case 's': args->sample = optarg; break; + case 'o': args->output_fname = optarg; break; + case 'I': args->output_iupac = 1; break; + case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break; + case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break; + case 'f': args->ref_fname = optarg; break; + case 'm': args->mask_fname = optarg; break; + case 'c': args->chain_fname = optarg; break; + case 'H': + if ( !strcasecmp(optarg,"R") ) args->allele |= PICK_REF; + else if ( !strcasecmp(optarg,"A") ) args->allele |= PICK_ALT; + else if ( !strcasecmp(optarg,"L") ) args->allele |= PICK_LONG|PICK_REF; + else if ( !strcasecmp(optarg,"S") ) args->allele |= PICK_SHORT|PICK_REF; + else if ( !strcasecmp(optarg,"LR") ) args->allele |= PICK_LONG|PICK_REF; + else if ( !strcasecmp(optarg,"LA") ) args->allele |= PICK_LONG|PICK_ALT; + else if ( !strcasecmp(optarg,"SR") ) args->allele |= PICK_SHORT|PICK_REF; + else if ( !strcasecmp(optarg,"SA") ) args->allele |= PICK_SHORT|PICK_ALT; + else + { + args->haplotype = optarg[0] - '0'; + if ( args->haplotype <=0 ) error("Expected positive integer with --haplotype\n"); + } + break; + default: usage(args); break; + } + } + if ( optind>=argc ) usage(args); + args->fname = argv[optind]; + + if ( !args->ref_fname && !isatty(fileno((FILE *)stdin)) ) args->ref_fname = "-"; + if ( !args->ref_fname ) usage(args); + + init_data(args); + consensus(args); + destroy_data(args); + free(args); + + return 0; +} + + diff --git a/bcftools/convert.c b/bcftools/convert.c new file mode 100644 index 0000000..05dce01 --- /dev/null +++ b/bcftools/convert.c @@ -0,0 +1,1376 @@ +/* convert.c -- functions for converting between VCF/BCF and related formats. + + Copyright (C) 2013-2017 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "convert.h" + +#define T_CHROM 1 +#define T_POS 2 +#define T_ID 3 +#define T_REF 4 +#define T_ALT 5 +#define T_QUAL 6 +#define T_FILTER 7 +#define T_INFO 8 +#define T_FORMAT 9 +#define T_SAMPLE 10 +#define T_SEP 11 +#define T_IS_TS 12 +#define T_TYPE 13 +#define T_MASK 14 +#define T_GT 15 +#define T_TGT 16 +#define T_LINE 17 +#define T_CHROM_POS_ID 18 // not publicly advertised +#define T_GT_TO_PROB3 19 // not publicly advertised +#define T_PL_TO_PROB3 20 // not publicly advertised +#define T_GP_TO_PROB3 21 // not publicly advertised +#define T_FIRST_ALT 22 // not publicly advertised +#define T_IUPAC_GT 23 +#define T_GT_TO_HAP 24 // not publicly advertised +#define T_GT_TO_HAP2 25 // not publicly advertised +#define T_TBCSQ 26 +#define T_END 27 +#define T_POS0 28 +#define T_END0 29 + +typedef struct _fmt_t +{ + int type, id, is_gt_field, ready, subscript; + char *key; + bcf_fmt_t *fmt; + void *usr; // user data (optional) + void (*handler)(convert_t *, bcf1_t *, struct _fmt_t *, int, kstring_t *); + void (*destroy)(void*); // clean user data (optional) +} +fmt_t; + +struct _convert_t +{ + fmt_t *fmt; + int nfmt, mfmt; + int nsamples, *samples; + bcf_hdr_t *header; + int max_unpack; + char *format_str; + bcf_srs_t *readers; // required only for %MASK + int nreaders; + void *dat; + int ndat; + char *undef_info_tag; + int allow_undef_tags; +}; + +typedef struct +{ + kstring_t hap1,hap2; + char **str; + int n, m; +} +bcsq_t; + +static void process_chrom(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) { kputs(convert->header->id[BCF_DT_CTG][line->rid].key, str); } +static void process_pos(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) { kputw(line->pos+1, str); } +static void process_pos0(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) { kputw(line->pos, str); } +static void process_end(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) { kputw(line->pos+line->rlen, str); } +static void process_end0(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) { kputw(line->pos+line->rlen-1, str); } +static void process_id(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) { kputs(line->d.id, str); } +static void process_ref(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) { kputs(line->d.allele[0], str); } +static void process_alt(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + int i; + if ( line->n_allele==1 ) + { + kputc('.', str); + return; + } + if ( fmt->subscript>=0 ) + { + if ( line->n_allele > fmt->subscript+1 ) + kputs(line->d.allele[fmt->subscript+1], str); + else + kputc('.', str); + return; + } + for (i=1; in_allele; i++) + { + if ( i>1 ) kputc(',', str); + kputs(line->d.allele[i], str); + } +} +static void process_first_alt(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + if ( line->n_allele==1 ) + kputc('.', str); + else + kputs(line->d.allele[1], str); +} +static void process_qual(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + if ( bcf_float_is_missing(line->qual) ) kputc('.', str); + else kputd(line->qual, str); +} +static void process_filter(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + int i; + if ( line->d.n_flt ) + { + for (i=0; id.n_flt; i++) + { + if (i) kputc(';', str); + kputs(convert->header->id[BCF_DT_ID][line->d.flt[i]].key, str); + } + } + else kputc('.', str); +} +static inline int32_t bcf_array_ivalue(void *bcf_array, int type, int idx) +{ + if ( type==BCF_BT_INT8 ) + { + int8_t val = ((int8_t*)bcf_array)[idx]; + if ( val==bcf_int8_missing ) return bcf_int32_missing; + if ( val==bcf_int8_vector_end ) return bcf_int32_vector_end; + return val; + } + if ( type==BCF_BT_INT16 ) + { + int16_t val = ((int16_t*)bcf_array)[idx]; + if ( val==bcf_int16_missing ) return bcf_int32_missing; + if ( val==bcf_int16_vector_end ) return bcf_int32_vector_end; + return val; + } + return ((int32_t*)bcf_array)[idx]; +} +static void process_info(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + if ( fmt->id<0 ) + { + kputc('.', str); + return; + } + + int i; + for (i=0; in_info; i++) + if ( line->d.info[i].key == fmt->id ) break; + + // output "." if the tag is not present + if ( i==line->n_info ) + { + kputc('.', str); + return; + } + + bcf_info_t *info = &line->d.info[i]; + + // if this is a flag, output 1 + if ( info->len <=0 ) + { + kputc('1', str); + return; + } + + if ( info->len == 1 ) + { + switch (info->type) + { + case BCF_BT_INT8: if ( info->v1.i==bcf_int8_missing ) kputc('.', str); else kputw(info->v1.i, str); break; + case BCF_BT_INT16: if ( info->v1.i==bcf_int16_missing ) kputc('.', str); else kputw(info->v1.i, str); break; + case BCF_BT_INT32: if ( info->v1.i==bcf_int32_missing ) kputc('.', str); else kputw(info->v1.i, str); break; + case BCF_BT_FLOAT: if ( bcf_float_is_missing(info->v1.f) ) kputc('.', str); else kputd(info->v1.f, str); break; + case BCF_BT_CHAR: kputc(info->v1.i, str); break; + default: fprintf(stderr,"todo: type %d\n", info->type); exit(1); break; + } + } + else if ( fmt->subscript >=0 ) + { + if ( info->len <= fmt->subscript ) + { + kputc('.', str); + return; + } + #define BRANCH(type_t, is_missing, is_vector_end, kprint) { \ + type_t val = ((type_t *) info->vptr)[fmt->subscript]; \ + if ( is_missing || is_vector_end ) kputc('.',str); \ + else kprint; \ + } + switch (info->type) + { + case BCF_BT_INT8: BRANCH(int8_t, val==bcf_int8_missing, val==bcf_int8_vector_end, kputw(val, str)); break; + case BCF_BT_INT16: BRANCH(int16_t, val==bcf_int16_missing, val==bcf_int16_vector_end, kputw(val, str)); break; + case BCF_BT_INT32: BRANCH(int32_t, val==bcf_int32_missing, val==bcf_int32_vector_end, kputw(val, str)); break; + case BCF_BT_FLOAT: BRANCH(float, bcf_float_is_missing(val), bcf_float_is_vector_end(val), kputd(val, str)); break; + default: fprintf(stderr,"todo: type %d\n", info->type); exit(1); break; + } + #undef BRANCH + } + else + bcf_fmt_array(str, info->len, info->type, info->vptr); +} +static void init_format(convert_t *convert, bcf1_t *line, fmt_t *fmt) +{ + fmt->id = bcf_hdr_id2int(convert->header, BCF_DT_ID, fmt->key); + if ( !bcf_hdr_idinfo_exists(convert->header,BCF_HL_FMT,fmt->id) ) fmt->id = -1; + fmt->fmt = NULL; + if ( fmt->id >= 0 ) + { + int i; + for (i=0; i<(int)line->n_fmt; i++) + if ( line->d.fmt[i].id==fmt->id ) { fmt->fmt = &line->d.fmt[i]; break; } + } + else if ( !convert->allow_undef_tags ) + error("Error: no such tag defined in the VCF header: FORMAT/%s\n", fmt->key); + + fmt->ready = 1; +} +static void process_format(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + if ( !fmt->ready ) + init_format(convert, line, fmt); + + if ( fmt->fmt==NULL ) + { + kputc('.', str); + return; + } + else if ( fmt->subscript >=0 ) + { + if ( fmt->fmt->n <= fmt->subscript ) + { + kputc('.', str); + return; + } + if ( fmt->fmt->type == BCF_BT_FLOAT ) + { + float *ptr = (float*)(fmt->fmt->p + isample*fmt->fmt->size); + if ( bcf_float_is_missing(ptr[fmt->subscript]) || bcf_float_is_vector_end(ptr[fmt->subscript]) ) + kputc('.', str); + else + kputd(ptr[fmt->subscript], str); + } + else if ( fmt->fmt->type != BCF_BT_CHAR ) + { + int32_t ival = bcf_array_ivalue(fmt->fmt->p+isample*fmt->fmt->size,fmt->fmt->type,fmt->subscript); + if ( ival==bcf_int32_missing || ival==bcf_int32_vector_end ) + kputc('.', str); + else + kputw(ival, str); + } + else error("TODO: %s:%d .. fmt->type=%d\n", __FILE__,__LINE__, fmt->fmt->type); + } + else + bcf_fmt_array(str, fmt->fmt->n, fmt->fmt->type, fmt->fmt->p + isample*fmt->fmt->size); +} +static void process_gt(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + if ( !fmt->ready ) + init_format(convert, line, fmt); + + if ( fmt->fmt==NULL ) + { + kputc('.', str); + return; + } + bcf_format_gt(fmt->fmt, isample, str); +} +static void process_tgt(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + if ( !fmt->ready ) + init_format(convert, line, fmt); + + if ( fmt->fmt==NULL ) + { + kputc('.', str); + return; + } + + assert( fmt->fmt->type==BCF_BT_INT8 ); + + int l; + int8_t *x = (int8_t*)(fmt->fmt->p + isample*fmt->fmt->size); // FIXME: does not work with n_alt >= 64 + for (l = 0; l < fmt->fmt->n && x[l] != bcf_int8_vector_end; ++l) + { + if (l) kputc("/|"[x[l]&1], str); + if (x[l]>>1) + { + int ial = (x[l]>>1) - 1; + kputs(line->d.allele[ial], str); + } + else + kputc('.', str); + } + if (l == 0) kputc('.', str); +} +static void destroy_tbcsq(void *usr) +{ + if ( !usr ) return; + bcsq_t *csq = (bcsq_t*) usr; + free(csq->hap1.s); + free(csq->hap2.s); + if ( csq->n ) + free(csq->str[0]); + free(csq->str); + free(csq); +} +static void process_tbcsq(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + if ( !fmt->ready ) + { + init_format(convert, line, fmt); + + bcsq_t *csq; + if ( fmt->usr ) + { + csq = (bcsq_t*) fmt->usr; + if ( csq->n ) + free(csq->str[0]); + csq->n = 0; + } + else + csq = (bcsq_t*) calloc(1,sizeof(bcsq_t)); + fmt->usr = csq; + + int i=0, len = 0; + char *tmp = NULL; + if ( bcf_get_info_string(convert->header,line,fmt->key,&tmp,&len)<0 ) + { + csq->n = 0; + return; + } + do + { + csq->n++; + hts_expand(char*, csq->n, csq->m, csq->str); + csq->str[ csq->n-1 ] = tmp + i; + while ( iusr; + + if ( fmt->fmt==NULL || !csq->n ) return; + + csq->hap1.l = 0; + csq->hap2.l = 0; + + int mask = fmt->subscript==0 ? 3 : 1; // merge both haplotypes if subscript==0 + + #define BRANCH(type_t, nbits) { \ + type_t *x = (type_t*)(fmt->fmt->p + isample*fmt->fmt->size); \ + int i,j; \ + if ( fmt->subscript<=0 || fmt->subscript==1 ) \ + { \ + for (j=0; j < fmt->fmt->n; j++) \ + { \ + type_t val = x[j]; \ + if ( !val ) continue; \ + for (i=0; istr[(j*32+i)/2], &csq->hap1); kputc_(',', &csq->hap1); } \ + } \ + } \ + if ( fmt->subscript<0 || fmt->subscript==2 ) \ + { \ + for (j=0; j < fmt->fmt->n; j++) \ + { \ + type_t val = x[j]; \ + if ( !val ) continue; \ + for (i=1; istr[(j*32+i)/2], &csq->hap2); kputc_(',', &csq->hap2); } \ + } \ + } \ + } + switch (fmt->fmt->type) + { + case BCF_BT_INT8: BRANCH(uint8_t, 8); break; + case BCF_BT_INT16: BRANCH(uint16_t,16); break; + case BCF_BT_INT32: BRANCH(uint32_t,32); break; + default: error("Unexpected type: %d\n", fmt->fmt->type); exit(1); break; + } + #undef BRANCH + + if ( !csq->hap1.l && !csq->hap2.l ) return; + + if ( csq->hap1.l ) csq->hap1.s[--csq->hap1.l] = 0; + if ( csq->hap2.l ) csq->hap2.s[--csq->hap2.l] = 0; + + if ( fmt->subscript<0 ) + { + kputs(csq->hap1.l?csq->hap1.s:".", str); + kputc_('\t', str); + kputs(csq->hap2.l?csq->hap2.s:".", str); + } + else if ( fmt->subscript<2 ) + kputs(csq->hap1.l?csq->hap1.s:".", str); + else + kputs(csq->hap2.l?csq->hap2.s:".", str); +} +static void init_format_iupac(convert_t *convert, bcf1_t *line, fmt_t *fmt) +{ + init_format(convert, line, fmt); + if ( fmt->fmt==NULL ) return; + + // Init mapping between alleles and IUPAC table + hts_expand(uint8_t, line->n_allele, convert->ndat, convert->dat); + int8_t *dat = (int8_t*)convert->dat; + int i; + for (i=0; in_allele; i++) + { + if ( line->d.allele[i][1] ) dat[i] = -1; + else + { + switch (line->d.allele[i][0]) + { + case 'A': dat[i] = 0; break; + case 'C': dat[i] = 1; break; + case 'G': dat[i] = 2; break; + case 'T': dat[i] = 3; break; + case 'a': dat[i] = 0; break; + case 'c': dat[i] = 1; break; + case 'g': dat[i] = 2; break; + case 't': dat[i] = 3; break; + default: dat[i] = -1; + } + } + } +} +static void process_iupac_gt(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + if ( !fmt->ready ) + init_format_iupac(convert, line, fmt); + + if ( fmt->fmt==NULL ) + { + kputc('.', str); + return; + } + + assert( fmt->fmt->type==BCF_BT_INT8 ); + + static const char iupac[4][4] = { {'A','M','R','W'},{'M','C','S','Y'},{'R','S','G','K'},{'W','Y','K','T'} }; + int8_t *dat = (int8_t*)convert->dat; + + int8_t *x = (int8_t*)(fmt->fmt->p + isample*fmt->fmt->size); // FIXME: does not work with n_alt >= 64 + int l = 0; + while ( lfmt->n && x[l]!=bcf_int8_vector_end && x[l]!=bcf_int8_missing ) l++; + + if ( l==2 ) + { + // diploid + int ia = (x[0]>>1) - 1, ib = (x[1]>>1) - 1; + if ( ia>=0 && ian_allele && ib>=0 && ibn_allele && dat[ia]>=0 && dat[ib]>=0 ) + { + kputc(iupac[dat[ia]][dat[ib]], str); + return; + } + } + for (l = 0; l < fmt->fmt->n && x[l] != bcf_int8_vector_end; ++l) + { + if (l) kputc("/|"[x[l]&1], str); + if (x[l]>>1) + { + int ial = (x[l]>>1) - 1; + kputs(line->d.allele[ial], str); + } + else + kputc('.', str); + } + if (l == 0) kputc('.', str); +} +static void process_sample(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + kputs(convert->header->samples[isample], str); +} +static void process_sep(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) { if (fmt->key) kputs(fmt->key, str); } +static void process_is_ts(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + int is_ts = 0; + if ( bcf_get_variant_types(line) & (VCF_SNP|VCF_MNP) ) + is_ts = abs(bcf_acgt2int(*line->d.allele[0])-bcf_acgt2int(*line->d.allele[1])) == 2 ? 1 : 0; + kputc(is_ts ? '1' : '0', str); +} +static void process_type(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + int line_type = bcf_get_variant_types(line); + int i = 0; + if ( line_type == VCF_REF ) { kputs("REF", str); i++; } + if ( line_type & VCF_SNP ) { if (i) kputc(',',str); kputs("SNP", str); i++; } + if ( line_type & VCF_MNP ) { if (i) kputc(',',str); kputs("MNP", str); i++; } + if ( line_type & VCF_INDEL ) { if (i) kputc(',',str); kputs("INDEL", str); i++; } + if ( line_type & VCF_OTHER ) { if (i) kputc(',',str); kputs("OTHER", str); i++; } + if ( line_type & VCF_BND ) { if (i) kputc(',',str); kputs("BND", str); i++; } +} +static void process_line(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + vcf_format1(convert->header, line, str); +} +static void process_chrom_pos_id(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + if ( line->d.id[0]!='.' || line->d.id[1] ) + { + // ID is present + kputs(line->d.id, str); + } + else + { + // use CHROM:POS instead of ID + kputs(convert->header->id[BCF_DT_CTG][line->rid].key, str); + kputc(':', str); + kputw(line->pos+1, str); + } +} +static void process_gt_to_prob3(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + int m,n,i; + + m = convert->ndat / sizeof(int32_t); + n = bcf_get_genotypes(convert->header,line,&convert->dat,&m); + convert->ndat = m * sizeof(int32_t); + + if ( n<=0 ) + { + // Throw an error or silently proceed? + // + // for (i=0; insamples; i++) kputs(" 0.33 0.33 0.33", str); + // return; + + error("Error parsing GT tag at %s:%d\n", bcf_seqname(convert->header,line),line->pos+1); + } + + n /= convert->nsamples; + for (i=0; insamples; i++) + { + int32_t *ptr = (int32_t*)convert->dat + i*n; + int j; + for (j=0; jndat / sizeof(int32_t); + n = bcf_get_format_int32(convert->header,line,"PL",&convert->dat,&m); + convert->ndat = m * sizeof(int32_t); + + if ( n<=0 ) + { + // Throw an error or silently proceed? + // + // for (i=0; insamples; i++) kputs(" 0.33 0.33 0.33", str); + // return; + + error("Error parsing PL tag at %s:%d\n", bcf_seqname(convert->header,line),line->pos+1); + } + + n /= convert->nsamples; + for (i=0; insamples; i++) + { + int32_t *ptr = (int32_t*)convert->dat + i*n; + int j; + float sum = 0; + for (j=0; jn_allele ) + { + // haploid + kputc(' ',str); + ksprintf(str,"%f",pow(10,-0.1*ptr[0])/sum); + kputs(" 0 ", str); + ksprintf(str,"%f",pow(10,-0.1*ptr[1])/sum); + } + else + { + // diploid + kputc(' ',str); + ksprintf(str,"%f",pow(10,-0.1*ptr[0])/sum); + kputc(' ',str); + ksprintf(str,"%f",pow(10,-0.1*ptr[1])/sum); + kputc(' ',str); + ksprintf(str,"%f",pow(10,-0.1*ptr[2])/sum); + } + } +} +static void process_gp_to_prob3(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + int m,n,i; + + m = convert->ndat / sizeof(float); + n = bcf_get_format_float(convert->header,line,"GP",&convert->dat,&m); + convert->ndat = m * sizeof(float); + + if ( n<=0 ) + { + // Throw an error or silently proceed? + // + // for (i=0; insamples; i++) kputs(" 0.33 0.33 0.33", str); + // return; + + error("Error parsing GP tag at %s:%d\n", bcf_seqname(convert->header,line),line->pos+1); + } + + n /= convert->nsamples; + for (i=0; insamples; i++) + { + float sum = 0, *ptr = (float*)convert->dat + i*n; + int j; + for (j=0; j1 ) error("[%s:%d:%f] GP value outside range [0,1]; bcftools convert expects the VCF4.3+ spec for the GP field encoding genotype posterior probabilities", bcf_seqname(convert->header,line),line->pos+1,ptr[j]); + sum+=ptr[j]; + } + if ( j==line->n_allele ) + ksprintf(str," %f %f %f",ptr[0],0.,ptr[1]); // haploid + else + ksprintf(str," %f %f %f",ptr[0],ptr[1],ptr[2]); // diploid + } +} + +static void process_gt_to_hap(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + // https://mathgen.stats.ox.ac.uk/impute/impute_v2.html#-known_haps_g + + // File containing known haplotypes for the study cohort. The format + // is the same as the output format from IMPUTE2's -phase option: + // five header columns (as in the -g file) followed by two columns + // (haplotypes) per individual. Allowed values in the haplotype + // columns are 0, 1, and ?. + + // If your study dataset is fully phased, you can replace the -g file + // with a -known_haps_g file. This will cause IMPUTE2 to perform + // haploid imputation, although it will still report diploid imputation + // probabilities in the main output file. If any genotypes are missing, + // they can be marked as '? ?' (two question marks separated by one + // space) in the input file. (The program does not allow just one + // allele from a diploid genotype to be missing.) If the reference + // panels are also phased, IMPUTE2 will perform a single, fast + // imputation step rather than its standard MCMC module this is how + // the program imputes into pre-phased GWAS haplotypes. + + // The -known_haps_g file can also be used to specify study + // genotypes that are "partially" phased, in the sense that some + // genotypes are phased relative to a fixed reference point while + // others are not. We anticipate that this will be most useful when + // trying to phase resequencing data onto a scaffold of known + // haplotypes. To mark a known genotype as unphased, place an + // asterisk immediately after each allele, with no space between + // the allele (0/1) and the asterisk (*); e.g., "0* 1*" for a + // heterozygous genotype of unknown phase. + + int i, gt_id = bcf_hdr_id2int(convert->header, BCF_DT_ID, "GT"); + if ( !bcf_hdr_idinfo_exists(convert->header,BCF_HL_FMT,gt_id) ) + error("FORMAT/GT tag not present at %s:%d\n", bcf_seqname(convert->header, line), line->pos+1); + if ( !(line->unpacked & BCF_UN_FMT) ) bcf_unpack(line, BCF_UN_FMT); + bcf_fmt_t *fmt_gt = NULL; + for (i=0; in_fmt; i++) + if ( line->d.fmt[i].id==gt_id ) { fmt_gt = &line->d.fmt[i]; break; } + if ( !fmt_gt ) + error("FORMAT/GT tag not present at %s:%d\n", bcf_seqname(convert->header, line), line->pos+1); + + // Alloc all memory in advance to avoid kput routines. The biggest allowed allele index is 99 + if ( line->n_allele > 100 ) + error("Too many alleles (%d) at %s:%d\n", line->n_allele, bcf_seqname(convert->header, line), line->pos+1); + if ( ks_resize(str, str->l+convert->nsamples*8) != 0 ) + error("Could not alloc %d bytes\n", str->l + convert->nsamples*8); + + if ( fmt_gt->type!=BCF_BT_INT8 ) // todo: use BRANCH_INT if the VCF is valid + error("Uh, too many alleles (%d) or redundant BCF representation at %s:%d\n", line->n_allele, bcf_seqname(convert->header, line), line->pos+1); + + int8_t *ptr = ((int8_t*) fmt_gt->p) - fmt_gt->n; + for (i=0; insamples; i++) + { + ptr += fmt_gt->n; + if ( ptr[0]==2 ) + { + if ( ptr[1]==3 ) /* 0|0 */ + { + str->s[str->l++] = '0'; str->s[str->l++] = ' '; str->s[str->l++] = '0'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==5 ) /* 0|1 */ + { + str->s[str->l++] = '0'; str->s[str->l++] = ' '; str->s[str->l++] = '1'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==bcf_int8_vector_end ) /* 0 */ + { + str->s[str->l++] = '0'; str->s[str->l++] = ' '; str->s[str->l++] = '-'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==2 ) /* 0/0 */ + { + str->s[str->l++] = '0'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; str->s[str->l++] = '0'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==4 ) /* 0/1 */ + { + str->s[str->l++] = '0'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; str->s[str->l++] = '1'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + else if ( bcf_gt_is_missing(ptr[1]) ) /* 0/. */ + { + str->s[str->l++] = '?'; str->s[str->l++] = ' '; str->s[str->l++] = '?'; str->s[str->l++] = ' '; + } + else if ( bcf_gt_is_phased(ptr[1]) ) /* 0|x */ + { + str->s[str->l++] = '0'; str->s[str->l++] = ' '; + kputw(bcf_gt_allele(ptr[1]),str); + str->s[str->l++] = ' '; + } + else /* 0/x */ + { + str->s[str->l++] = '0'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + kputw(bcf_gt_allele(ptr[1]),str); + str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + } + else if ( ptr[0]==4 ) + { + if ( ptr[1]==3 ) /* 1|0 */ + { + str->s[str->l++] = '1'; str->s[str->l++] = ' '; str->s[str->l++] = '0'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==5 ) /* 1|1 */ + { + str->s[str->l++] = '1'; str->s[str->l++] = ' '; str->s[str->l++] = '1'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==bcf_int8_vector_end ) /* 1 */ + { + str->s[str->l++] = '1'; str->s[str->l++] = ' '; str->s[str->l++] = '-'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==2 ) /* 1/0 */ + { + str->s[str->l++] = '1'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; str->s[str->l++] = '0'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==4 ) /* 1/1 */ + { + str->s[str->l++] = '1'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; str->s[str->l++] = '1'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + else if ( bcf_gt_is_missing(ptr[1]) ) /* 1/. */ + { + str->s[str->l++] = '?'; str->s[str->l++] = ' '; str->s[str->l++] = '?'; str->s[str->l++] = ' '; + } + else if ( bcf_gt_is_phased(ptr[1]) ) /* 1|x */ + { + str->s[str->l++] = '1'; str->s[str->l++] = ' '; + kputw(bcf_gt_allele(ptr[1]),str); + str->s[str->l++] = ' '; + } + else /* 1/x */ + { + str->s[str->l++] = '1'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + kputw(bcf_gt_allele(ptr[1]),str); + str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + } + else if ( bcf_gt_is_missing(ptr[0]) ) + { + if ( ptr[1]==bcf_int8_vector_end ) + { + str->s[str->l++] = '?'; str->s[str->l++] = ' '; str->s[str->l++] = '-'; str->s[str->l++] = ' '; + } + else + { + str->s[str->l++] = '?'; str->s[str->l++] = ' '; str->s[str->l++] = '?'; str->s[str->l++] = ' '; + } + } + else if ( ptr[1]==bcf_int8_vector_end ) + { + /* use REF for something else than first ALT */ + str->s[str->l++] = '0'; str->s[str->l++] = ' '; str->s[str->l++] = '-'; str->s[str->l++] = ' '; + } + else + { + kputw(bcf_gt_allele(ptr[0]),str); + if ( bcf_gt_is_phased(ptr[1]) ) str->s[str->l++] = '*'; + str->s[str->l++] = ' '; + kputw(bcf_gt_allele(ptr[1]),str); + if ( bcf_gt_is_phased(ptr[1]) ) str->s[str->l++] = '*'; + str->s[str->l++] = ' '; + } + } + str->s[--str->l] = 0; // delete the last space +} +static void process_gt_to_hap2(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + // same as process_gt_to_hap but converts haploid genotypes into diploid + + int i, gt_id = bcf_hdr_id2int(convert->header, BCF_DT_ID, "GT"); + if ( !bcf_hdr_idinfo_exists(convert->header,BCF_HL_FMT,gt_id) ) + error("FORMAT/GT tag not present at %s:%d\n", bcf_seqname(convert->header, line), line->pos+1); + if ( !(line->unpacked & BCF_UN_FMT) ) bcf_unpack(line, BCF_UN_FMT); + bcf_fmt_t *fmt_gt = NULL; + for (i=0; in_fmt; i++) + if ( line->d.fmt[i].id==gt_id ) { fmt_gt = &line->d.fmt[i]; break; } + if ( !fmt_gt ) + error("FORMAT/GT tag not present at %s:%d\n", bcf_seqname(convert->header, line), line->pos+1); + + // Alloc all memory in advance to avoid kput routines. The biggest allowed allele index is 99 + if ( line->n_allele > 100 ) + error("Too many alleles (%d) at %s:%d\n", line->n_allele, bcf_seqname(convert->header, line), line->pos+1); + if ( ks_resize(str, str->l+convert->nsamples*8) != 0 ) + error("Could not alloc %d bytes\n", str->l + convert->nsamples*8); + + if ( fmt_gt->type!=BCF_BT_INT8 ) // todo: use BRANCH_INT if the VCF is valid + error("Uh, too many alleles (%d) or redundant BCF representation at %s:%d\n", line->n_allele, bcf_seqname(convert->header, line), line->pos+1); + + int8_t *ptr = ((int8_t*) fmt_gt->p) - fmt_gt->n; + for (i=0; insamples; i++) + { + ptr += fmt_gt->n; + if ( ptr[0]==2 ) + { + if ( ptr[1]==3 ) /* 0|0 */ + { + str->s[str->l++] = '0'; str->s[str->l++] = ' '; str->s[str->l++] = '0'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==5 ) /* 0|1 */ + { + str->s[str->l++] = '0'; str->s[str->l++] = ' '; str->s[str->l++] = '1'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==bcf_int8_vector_end ) /* 0 -> 0|0 */ + { + str->s[str->l++] = '0'; str->s[str->l++] = ' '; str->s[str->l++] = '0'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==2 ) /* 0/0 */ + { + str->s[str->l++] = '0'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; str->s[str->l++] = '0'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==4 ) /* 0/1 */ + { + str->s[str->l++] = '0'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; str->s[str->l++] = '1'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + else if ( bcf_gt_is_missing(ptr[1]) ) /* 0/. */ + { + str->s[str->l++] = '?'; str->s[str->l++] = ' '; str->s[str->l++] = '?'; str->s[str->l++] = ' '; + } + else if ( bcf_gt_is_phased(ptr[1]) ) /* 0|x */ + { + str->s[str->l++] = '0'; str->s[str->l++] = ' '; + kputw(bcf_gt_allele(ptr[1]),str); + str->s[str->l++] = ' '; + } + else /* 0/x */ + { + str->s[str->l++] = '0'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + kputw(bcf_gt_allele(ptr[1]),str); + str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + } + else if ( ptr[0]==4 ) + { + if ( ptr[1]==3 ) /* 1|0 */ + { + str->s[str->l++] = '1'; str->s[str->l++] = ' '; str->s[str->l++] = '0'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==5 ) /* 1|1 */ + { + str->s[str->l++] = '1'; str->s[str->l++] = ' '; str->s[str->l++] = '1'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==bcf_int8_vector_end ) /* 1 -> 1|1 */ + { + str->s[str->l++] = '1'; str->s[str->l++] = ' '; str->s[str->l++] = '1'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==2 ) /* 1/0 */ + { + str->s[str->l++] = '1'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; str->s[str->l++] = '0'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==4 ) /* 1/1 */ + { + str->s[str->l++] = '1'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; str->s[str->l++] = '1'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + else if ( bcf_gt_is_missing(ptr[1]) ) /* 1/. */ + { + str->s[str->l++] = '?'; str->s[str->l++] = ' '; str->s[str->l++] = '?'; str->s[str->l++] = ' '; + } + else if ( bcf_gt_is_phased(ptr[1]) ) /* 1|x */ + { + str->s[str->l++] = '1'; str->s[str->l++] = ' '; + kputw(bcf_gt_allele(ptr[1]),str); + str->s[str->l++] = ' '; + } + else /* 1/x */ + { + str->s[str->l++] = '1'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + kputw(bcf_gt_allele(ptr[1]),str); + str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + } + else if ( bcf_gt_is_missing(ptr[0]) ) + { + str->s[str->l++] = '?'; str->s[str->l++] = ' '; str->s[str->l++] = '?'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==bcf_int8_vector_end ) + { + /* use REF for something else than first ALT */ + str->s[str->l++] = '0'; str->s[str->l++] = ' '; str->s[str->l++] = '0'; str->s[str->l++] = ' '; + } + else + { + kputw(bcf_gt_allele(ptr[0]),str); + if ( bcf_gt_is_phased(ptr[1]) ) str->s[str->l++] = '*'; + str->s[str->l++] = ' '; + kputw(bcf_gt_allele(ptr[1]),str); + if ( bcf_gt_is_phased(ptr[1]) ) str->s[str->l++] = '*'; + str->s[str->l++] = ' '; + } + } + str->s[--str->l] = 0; // delete the last space +} + +static fmt_t *register_tag(convert_t *convert, int type, char *key, int is_gtf) +{ + convert->nfmt++; + if ( convert->nfmt > convert->mfmt ) + { + convert->mfmt += 10; + convert->fmt = (fmt_t*) realloc(convert->fmt, convert->mfmt*sizeof(fmt_t)); + } + fmt_t *fmt = &convert->fmt[ convert->nfmt-1 ]; + fmt->type = type; + fmt->key = key ? strdup(key) : NULL; + fmt->is_gt_field = is_gtf; + fmt->subscript = -1; + fmt->usr = NULL; + fmt->destroy = NULL; + + // Allow non-format tags, such as CHROM, INFO, etc., to appear amongst the format tags. + if ( key ) + { + int id = bcf_hdr_id2int(convert->header, BCF_DT_ID, key); + if ( fmt->type==T_FORMAT && !bcf_hdr_idinfo_exists(convert->header,BCF_HL_FMT,id) ) + { + if ( !strcmp("CHROM",key) ) { fmt->type = T_CHROM; } + else if ( !strcmp("POS",key) ) { fmt->type = T_POS; } + else if ( !strcmp("POS0",key) ) { fmt->type = T_POS0; } + else if ( !strcmp("END",key) ) { fmt->type = T_END; } + else if ( !strcmp("END0",key) ) { fmt->type = T_END0; } + else if ( !strcmp("ID",key) ) { fmt->type = T_ID; } + else if ( !strcmp("REF",key) ) { fmt->type = T_REF; } + else if ( !strcmp("ALT",key) ) { fmt->type = T_ALT; } + else if ( !strcmp("FIRST_ALT",key) ) { fmt->type = T_FIRST_ALT; } + else if ( !strcmp("QUAL",key) ) { fmt->type = T_QUAL; } + else if ( !strcmp("FILTER",key) ) { fmt->type = T_FILTER; } + else if ( !strcmp("_CHROM_POS_ID",key) ) { fmt->type = T_CHROM_POS_ID; } + else if ( id>=0 && bcf_hdr_idinfo_exists(convert->header,BCF_HL_INFO,id) ) + { + fmt->type = T_INFO; + fprintf(stderr,"Warning: Assuming INFO/%s\n", key); + } + } + } + + switch (fmt->type) + { + case T_FIRST_ALT: fmt->handler = &process_first_alt; break; + case T_CHROM_POS_ID: fmt->handler = &process_chrom_pos_id; break; + case T_GT_TO_PROB3: fmt->handler = &process_gt_to_prob3; break; + case T_PL_TO_PROB3: fmt->handler = &process_pl_to_prob3; break; + case T_GP_TO_PROB3: fmt->handler = &process_gp_to_prob3; break; + case T_CHROM: fmt->handler = &process_chrom; break; + case T_POS: fmt->handler = &process_pos; break; + case T_POS0: fmt->handler = &process_pos0; break; + case T_END: fmt->handler = &process_end; break; + case T_END0: fmt->handler = &process_end0; break; + case T_ID: fmt->handler = &process_id; break; + case T_REF: fmt->handler = &process_ref; break; + case T_ALT: fmt->handler = &process_alt; break; + case T_QUAL: fmt->handler = &process_qual; break; + case T_FILTER: fmt->handler = &process_filter; convert->max_unpack |= BCF_UN_FLT; break; + case T_INFO: fmt->handler = &process_info; convert->max_unpack |= BCF_UN_INFO; break; + case T_FORMAT: fmt->handler = &process_format; convert->max_unpack |= BCF_UN_FMT; break; + case T_SAMPLE: fmt->handler = &process_sample; break; + case T_SEP: fmt->handler = &process_sep; break; + case T_IS_TS: fmt->handler = &process_is_ts; break; + case T_TYPE: fmt->handler = &process_type; break; + case T_MASK: fmt->handler = NULL; break; + case T_GT: fmt->handler = &process_gt; convert->max_unpack |= BCF_UN_FMT; break; + case T_TGT: fmt->handler = &process_tgt; convert->max_unpack |= BCF_UN_FMT; break; + case T_IUPAC_GT: fmt->handler = &process_iupac_gt; convert->max_unpack |= BCF_UN_FMT; break; + case T_GT_TO_HAP: fmt->handler = &process_gt_to_hap; convert->max_unpack |= BCF_UN_FMT; break; + case T_GT_TO_HAP2: fmt->handler = &process_gt_to_hap2; convert->max_unpack |= BCF_UN_FMT; break; + case T_TBCSQ: fmt->handler = &process_tbcsq; fmt->destroy = &destroy_tbcsq; convert->max_unpack |= BCF_UN_FMT; break; + case T_LINE: fmt->handler = &process_line; convert->max_unpack |= BCF_UN_FMT; break; + default: error("TODO: handler for type %d\n", fmt->type); + } + if ( key && fmt->type==T_INFO ) + { + fmt->id = bcf_hdr_id2int(convert->header, BCF_DT_ID, key); + if ( !bcf_hdr_idinfo_exists(convert->header,BCF_HL_INFO,fmt->id) ) + { + fmt->id = -1; + convert->undef_info_tag = strdup(key); + } + } + return fmt; +} + +static int parse_subscript(char **p) +{ + char *q = *p; + if ( *q!='{' ) return -1; + q++; + while ( *q && *q!='}' && isdigit(*q) ) q++; + if ( *q!='}' ) return -1; + int idx = atoi((*p)+1); + *p = q+1; + return idx; +} + +static char *parse_tag(convert_t *convert, char *p, int is_gtf) +{ + char *q = ++p; + while ( *q && (isalnum(*q) || *q=='_' || *q=='.') ) q++; + kstring_t str = {0,0,0}; + if ( q-p==0 ) error("Could not parse format string: %s\n", convert->format_str); + kputsn(p, q-p, &str); + if ( is_gtf ) + { + if ( !strcmp(str.s, "SAMPLE") ) register_tag(convert, T_SAMPLE, "SAMPLE", is_gtf); + else if ( !strcmp(str.s, "GT") ) register_tag(convert, T_GT, "GT", is_gtf); + else if ( !strcmp(str.s, "TGT") ) register_tag(convert, T_TGT, "GT", is_gtf); + else if ( !strcmp(str.s, "TBCSQ") ) + { + fmt_t *fmt = register_tag(convert, T_TBCSQ, "BCSQ", is_gtf); + fmt->subscript = parse_subscript(&q); + if ( fmt->subscript==-1 ) + { + if ( !strncmp(q,"{*}",3) ) { fmt->subscript = 0; q += 3; } + } + else fmt->subscript++; + } + else if ( !strcmp(str.s, "IUPACGT") ) register_tag(convert, T_IUPAC_GT, "GT", is_gtf); + else if ( !strcmp(str.s, "INFO") ) + { + if ( *q!='/' ) error("Could not parse format string: %s\n", convert->format_str); + p = ++q; + str.l = 0; + while ( *q && (isalnum(*q) || *q=='_' || *q=='.') ) q++; + if ( q-p==0 ) error("Could not parse format string: %s\n", convert->format_str); + kputsn(p, q-p, &str); + fmt_t *fmt = register_tag(convert, T_INFO, str.s, is_gtf); + fmt->subscript = parse_subscript(&q); + } + else + { + fmt_t *fmt = register_tag(convert, T_FORMAT, str.s, is_gtf); + fmt->subscript = parse_subscript(&q); + } + } + else + { + if ( !strcmp(str.s, "CHROM") ) register_tag(convert, T_CHROM, str.s, is_gtf); + else if ( !strcmp(str.s, "POS") ) register_tag(convert, T_POS, str.s, is_gtf); + else if ( !strcmp(str.s, "POS0") ) register_tag(convert, T_POS0, str.s, is_gtf); + else if ( !strcmp(str.s, "END") ) register_tag(convert, T_END, str.s, is_gtf); + else if ( !strcmp(str.s, "END0") ) register_tag(convert, T_END0, str.s, is_gtf); + else if ( !strcmp(str.s, "ID") ) register_tag(convert, T_ID, str.s, is_gtf); + else if ( !strcmp(str.s, "REF") ) register_tag(convert, T_REF, str.s, is_gtf); + else if ( !strcmp(str.s, "ALT") ) + { + fmt_t *fmt = register_tag(convert, T_ALT, str.s, is_gtf); + fmt->subscript = parse_subscript(&q); + } + else if ( !strcmp(str.s, "FIRST_ALT") ) register_tag(convert, T_FIRST_ALT, str.s, is_gtf); + else if ( !strcmp(str.s, "QUAL") ) register_tag(convert, T_QUAL, str.s, is_gtf); + else if ( !strcmp(str.s, "FILTER") ) register_tag(convert, T_FILTER, str.s, is_gtf); + else if ( !strcmp(str.s, "QUAL") ) register_tag(convert, T_QUAL, str.s, is_gtf); + else if ( !strcmp(str.s, "IS_TS") ) register_tag(convert, T_IS_TS, str.s, is_gtf); + else if ( !strcmp(str.s, "TYPE") ) register_tag(convert, T_TYPE, str.s, is_gtf); + else if ( !strcmp(str.s, "MASK") ) register_tag(convert, T_MASK, str.s, is_gtf); + else if ( !strcmp(str.s, "LINE") ) register_tag(convert, T_LINE, str.s, is_gtf); + else if ( !strcmp(str.s, "_CHROM_POS_ID") ) register_tag(convert, T_CHROM_POS_ID, str.s, is_gtf); + else if ( !strcmp(str.s, "_GT_TO_PROB3") ) register_tag(convert, T_GT_TO_PROB3, str.s, is_gtf); + else if ( !strcmp(str.s, "_PL_TO_PROB3") ) register_tag(convert, T_PL_TO_PROB3, str.s, is_gtf); + else if ( !strcmp(str.s, "_GP_TO_PROB3") ) register_tag(convert, T_GP_TO_PROB3, str.s, is_gtf); + else if ( !strcmp(str.s, "_GT_TO_HAP") ) register_tag(convert, T_GT_TO_HAP, str.s, is_gtf); + else if ( !strcmp(str.s, "_GT_TO_HAP2") ) register_tag(convert, T_GT_TO_HAP2, str.s, is_gtf); + else if ( !strcmp(str.s, "INFO") ) + { + if ( *q!='/' ) error("Could not parse format string: %s\n", convert->format_str); + p = ++q; + str.l = 0; + while ( *q && (isalnum(*q) || *q=='_' || *q=='.') ) q++; + if ( q-p==0 ) error("Could not parse format string: %s\n", convert->format_str); + kputsn(p, q-p, &str); + fmt_t *fmt = register_tag(convert, T_INFO, str.s, is_gtf); + fmt->subscript = parse_subscript(&q); + } + else + { + fmt_t *fmt = register_tag(convert, T_INFO, str.s, is_gtf); + fmt->subscript = parse_subscript(&q); + } + } + free(str.s); + return q; +} + +static char *parse_sep(convert_t *convert, char *p, int is_gtf) +{ + char *q = p; + kstring_t str = {0,0,0}; + while ( *q && *q!='[' && *q!=']' && *q!='%' ) + { + if ( *q=='\\' ) + { + q++; + if ( *q=='n' ) kputc('\n', &str); + else if ( *q=='t' ) kputc('\t', &str); + else kputc(*q, &str); + } + else kputc(*q, &str); + q++; + } + if ( !str.l ) error("Could not parse format string: %s\n", convert->format_str); + register_tag(convert, T_SEP, str.s, is_gtf); + free(str.s); + return q; +} + +convert_t *convert_init(bcf_hdr_t *hdr, int *samples, int nsamples, const char *format_str) +{ + convert_t *convert = (convert_t*) calloc(1,sizeof(convert_t)); + convert->header = hdr; + convert->format_str = strdup(format_str); + convert->max_unpack = BCF_UN_STR; + + int i, is_gtf = 0; + char *p = convert->format_str; + while ( *p ) + { + //fprintf(stderr,"<%s>\n", p); + switch (*p) + { + case '[': is_gtf = 1; p++; break; + case ']': is_gtf = 0; register_tag(convert, T_SEP, NULL, 0); p++; break; + case '%': p = parse_tag(convert, p, is_gtf); break; + default: p = parse_sep(convert, p, is_gtf); break; + } + } + if ( is_gtf ) + error("Could not parse the format string, missing the square bracket \"]\": %s\n", convert->format_str); + + if ( nsamples ) + { + convert->nsamples = nsamples; + convert->samples = (int*) malloc(sizeof(int)*nsamples); + for (i=0; insamples; i++) convert->samples[i] = samples[i]; + } + else + { + convert->nsamples = bcf_hdr_nsamples(convert->header); + convert->samples = (int*) malloc(sizeof(int)*convert->nsamples); + for (i=0; insamples; i++) convert->samples[i] = i; + } + return convert; +} + +void convert_destroy(convert_t *convert) +{ + int i; + for (i=0; infmt; i++) + { + if ( convert->fmt[i].destroy ) convert->fmt[i].destroy(convert->fmt[i].usr); + free(convert->fmt[i].key); + } + free(convert->fmt); + free(convert->undef_info_tag); + free(convert->dat); + free(convert->samples); + free(convert->format_str); + free(convert); +} + + +int convert_header(convert_t *convert, kstring_t *str) +{ + int i, icol = 0, l_ori = str->l; + bcf_hdr_t *hdr = convert->header; + + // Supress the header output if LINE is present + for (i=0; infmt; i++) + if ( convert->fmt[i].type == T_LINE ) break; + if ( i!=convert->nfmt ) + return str->l - l_ori; + + kputs("# ", str); + for (i=0; infmt; i++) + { + // Genotype fields + if ( convert->fmt[i].is_gt_field ) + { + int j = i, js, k; + while ( convert->fmt[j].is_gt_field ) j++; + for (js=0; jsnsamples; js++) + { + int ks = convert->samples[js]; + for (k=i; kfmt[k].type == T_SEP ) + { + if ( convert->fmt[k].key ) kputs(convert->fmt[k].key, str); + } + else if ( convert->fmt[k].type == T_SAMPLE ) + ksprintf(str, "[%d]%s", ++icol, convert->fmt[k].key); + else + ksprintf(str, "[%d]%s:%s", ++icol, hdr->samples[ks], convert->fmt[k].key); + } + } + i = j-1; + continue; + } + // Fixed fields + if ( convert->fmt[i].type == T_SEP ) + { + if ( convert->fmt[i].key ) kputs(convert->fmt[i].key, str); + continue; + } + ksprintf(str, "[%d]%s", ++icol, convert->fmt[i].key); + } + return str->l - l_ori; +} + +int convert_line(convert_t *convert, bcf1_t *line, kstring_t *str) +{ + if ( !convert->allow_undef_tags && convert->undef_info_tag ) + error("Error: no such tag defined in the VCF header: INFO/%s. FORMAT fields must be in square brackets, e.g. \"[ %s]\"\n", convert->undef_info_tag,convert->undef_info_tag); + + int l_ori = str->l; + bcf_unpack(line, convert->max_unpack); + + int i, ir; + str->l = 0; + for (i=0; infmt; i++) + { + // Genotype fields. + if ( convert->fmt[i].is_gt_field ) + { + int j = i, js, k; + while ( jnfmt && convert->fmt[j].is_gt_field ) + { + convert->fmt[j].ready = 0; + j++; + } + for (js=0; jsnsamples; js++) + { + // Here comes a hack designed for TBCSQ. When running on large files, + // such as 1000GP, there are too many empty fields in the output and + // it's very very slow. Therefore in case the handler does not add + // anything to the string, we trim all genotype fields enclosed in square + // brackets here. This may be changed in future, time will show... + size_t l_start = str->l; + + int ks = convert->samples[js]; + for (k=i; kfmt[k].type == T_MASK ) + { + for (ir=0; irnreaders; ir++) + kputc(bcf_sr_has_line(convert->readers,ir)?'1':'0', str); + } + else if ( convert->fmt[k].handler ) + { + size_t l = str->l; + convert->fmt[k].handler(convert, line, &convert->fmt[k], ks, str); + if ( l==str->l ) { str->l = l_start; break; } // only TBCSQ does this + } + } + } + i = j-1; + continue; + } + // Fixed fields + if ( convert->fmt[i].type == T_MASK ) + { + for (ir=0; irnreaders; ir++) + kputc(bcf_sr_has_line(convert->readers,ir)?'1':'0', str); + } + else if ( convert->fmt[i].handler ) + convert->fmt[i].handler(convert, line, &convert->fmt[i], -1, str); + + } + return str->l - l_ori; +} + +int convert_set_option(convert_t *convert, enum convert_option opt, ...) +{ + int ret = 0; + va_list args; + + va_start(args, opt); + switch (opt) + { + case allow_undef_tags: + convert->allow_undef_tags = va_arg(args, int); + break; + default: + ret = -1; + } + va_end(args); + return ret; +} + +int convert_max_unpack(convert_t *convert) +{ + return convert->max_unpack; +} + diff --git a/bcftools/convert.c.pysam.c b/bcftools/convert.c.pysam.c new file mode 100644 index 0000000..db7b6c1 --- /dev/null +++ b/bcftools/convert.c.pysam.c @@ -0,0 +1,1378 @@ +#include "bcftools.pysam.h" + +/* convert.c -- functions for converting between VCF/BCF and related formats. + + Copyright (C) 2013-2017 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "convert.h" + +#define T_CHROM 1 +#define T_POS 2 +#define T_ID 3 +#define T_REF 4 +#define T_ALT 5 +#define T_QUAL 6 +#define T_FILTER 7 +#define T_INFO 8 +#define T_FORMAT 9 +#define T_SAMPLE 10 +#define T_SEP 11 +#define T_IS_TS 12 +#define T_TYPE 13 +#define T_MASK 14 +#define T_GT 15 +#define T_TGT 16 +#define T_LINE 17 +#define T_CHROM_POS_ID 18 // not publicly advertised +#define T_GT_TO_PROB3 19 // not publicly advertised +#define T_PL_TO_PROB3 20 // not publicly advertised +#define T_GP_TO_PROB3 21 // not publicly advertised +#define T_FIRST_ALT 22 // not publicly advertised +#define T_IUPAC_GT 23 +#define T_GT_TO_HAP 24 // not publicly advertised +#define T_GT_TO_HAP2 25 // not publicly advertised +#define T_TBCSQ 26 +#define T_END 27 +#define T_POS0 28 +#define T_END0 29 + +typedef struct _fmt_t +{ + int type, id, is_gt_field, ready, subscript; + char *key; + bcf_fmt_t *fmt; + void *usr; // user data (optional) + void (*handler)(convert_t *, bcf1_t *, struct _fmt_t *, int, kstring_t *); + void (*destroy)(void*); // clean user data (optional) +} +fmt_t; + +struct _convert_t +{ + fmt_t *fmt; + int nfmt, mfmt; + int nsamples, *samples; + bcf_hdr_t *header; + int max_unpack; + char *format_str; + bcf_srs_t *readers; // required only for %MASK + int nreaders; + void *dat; + int ndat; + char *undef_info_tag; + int allow_undef_tags; +}; + +typedef struct +{ + kstring_t hap1,hap2; + char **str; + int n, m; +} +bcsq_t; + +static void process_chrom(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) { kputs(convert->header->id[BCF_DT_CTG][line->rid].key, str); } +static void process_pos(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) { kputw(line->pos+1, str); } +static void process_pos0(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) { kputw(line->pos, str); } +static void process_end(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) { kputw(line->pos+line->rlen, str); } +static void process_end0(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) { kputw(line->pos+line->rlen-1, str); } +static void process_id(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) { kputs(line->d.id, str); } +static void process_ref(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) { kputs(line->d.allele[0], str); } +static void process_alt(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + int i; + if ( line->n_allele==1 ) + { + kputc('.', str); + return; + } + if ( fmt->subscript>=0 ) + { + if ( line->n_allele > fmt->subscript+1 ) + kputs(line->d.allele[fmt->subscript+1], str); + else + kputc('.', str); + return; + } + for (i=1; in_allele; i++) + { + if ( i>1 ) kputc(',', str); + kputs(line->d.allele[i], str); + } +} +static void process_first_alt(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + if ( line->n_allele==1 ) + kputc('.', str); + else + kputs(line->d.allele[1], str); +} +static void process_qual(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + if ( bcf_float_is_missing(line->qual) ) kputc('.', str); + else kputd(line->qual, str); +} +static void process_filter(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + int i; + if ( line->d.n_flt ) + { + for (i=0; id.n_flt; i++) + { + if (i) kputc(';', str); + kputs(convert->header->id[BCF_DT_ID][line->d.flt[i]].key, str); + } + } + else kputc('.', str); +} +static inline int32_t bcf_array_ivalue(void *bcf_array, int type, int idx) +{ + if ( type==BCF_BT_INT8 ) + { + int8_t val = ((int8_t*)bcf_array)[idx]; + if ( val==bcf_int8_missing ) return bcf_int32_missing; + if ( val==bcf_int8_vector_end ) return bcf_int32_vector_end; + return val; + } + if ( type==BCF_BT_INT16 ) + { + int16_t val = ((int16_t*)bcf_array)[idx]; + if ( val==bcf_int16_missing ) return bcf_int32_missing; + if ( val==bcf_int16_vector_end ) return bcf_int32_vector_end; + return val; + } + return ((int32_t*)bcf_array)[idx]; +} +static void process_info(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + if ( fmt->id<0 ) + { + kputc('.', str); + return; + } + + int i; + for (i=0; in_info; i++) + if ( line->d.info[i].key == fmt->id ) break; + + // output "." if the tag is not present + if ( i==line->n_info ) + { + kputc('.', str); + return; + } + + bcf_info_t *info = &line->d.info[i]; + + // if this is a flag, output 1 + if ( info->len <=0 ) + { + kputc('1', str); + return; + } + + if ( info->len == 1 ) + { + switch (info->type) + { + case BCF_BT_INT8: if ( info->v1.i==bcf_int8_missing ) kputc('.', str); else kputw(info->v1.i, str); break; + case BCF_BT_INT16: if ( info->v1.i==bcf_int16_missing ) kputc('.', str); else kputw(info->v1.i, str); break; + case BCF_BT_INT32: if ( info->v1.i==bcf_int32_missing ) kputc('.', str); else kputw(info->v1.i, str); break; + case BCF_BT_FLOAT: if ( bcf_float_is_missing(info->v1.f) ) kputc('.', str); else kputd(info->v1.f, str); break; + case BCF_BT_CHAR: kputc(info->v1.i, str); break; + default: fprintf(bcftools_stderr,"todo: type %d\n", info->type); exit(1); break; + } + } + else if ( fmt->subscript >=0 ) + { + if ( info->len <= fmt->subscript ) + { + kputc('.', str); + return; + } + #define BRANCH(type_t, is_missing, is_vector_end, kprint) { \ + type_t val = ((type_t *) info->vptr)[fmt->subscript]; \ + if ( is_missing || is_vector_end ) kputc('.',str); \ + else kprint; \ + } + switch (info->type) + { + case BCF_BT_INT8: BRANCH(int8_t, val==bcf_int8_missing, val==bcf_int8_vector_end, kputw(val, str)); break; + case BCF_BT_INT16: BRANCH(int16_t, val==bcf_int16_missing, val==bcf_int16_vector_end, kputw(val, str)); break; + case BCF_BT_INT32: BRANCH(int32_t, val==bcf_int32_missing, val==bcf_int32_vector_end, kputw(val, str)); break; + case BCF_BT_FLOAT: BRANCH(float, bcf_float_is_missing(val), bcf_float_is_vector_end(val), kputd(val, str)); break; + default: fprintf(bcftools_stderr,"todo: type %d\n", info->type); exit(1); break; + } + #undef BRANCH + } + else + bcf_fmt_array(str, info->len, info->type, info->vptr); +} +static void init_format(convert_t *convert, bcf1_t *line, fmt_t *fmt) +{ + fmt->id = bcf_hdr_id2int(convert->header, BCF_DT_ID, fmt->key); + if ( !bcf_hdr_idinfo_exists(convert->header,BCF_HL_FMT,fmt->id) ) fmt->id = -1; + fmt->fmt = NULL; + if ( fmt->id >= 0 ) + { + int i; + for (i=0; i<(int)line->n_fmt; i++) + if ( line->d.fmt[i].id==fmt->id ) { fmt->fmt = &line->d.fmt[i]; break; } + } + else if ( !convert->allow_undef_tags ) + error("Error: no such tag defined in the VCF header: FORMAT/%s\n", fmt->key); + + fmt->ready = 1; +} +static void process_format(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + if ( !fmt->ready ) + init_format(convert, line, fmt); + + if ( fmt->fmt==NULL ) + { + kputc('.', str); + return; + } + else if ( fmt->subscript >=0 ) + { + if ( fmt->fmt->n <= fmt->subscript ) + { + kputc('.', str); + return; + } + if ( fmt->fmt->type == BCF_BT_FLOAT ) + { + float *ptr = (float*)(fmt->fmt->p + isample*fmt->fmt->size); + if ( bcf_float_is_missing(ptr[fmt->subscript]) || bcf_float_is_vector_end(ptr[fmt->subscript]) ) + kputc('.', str); + else + kputd(ptr[fmt->subscript], str); + } + else if ( fmt->fmt->type != BCF_BT_CHAR ) + { + int32_t ival = bcf_array_ivalue(fmt->fmt->p+isample*fmt->fmt->size,fmt->fmt->type,fmt->subscript); + if ( ival==bcf_int32_missing || ival==bcf_int32_vector_end ) + kputc('.', str); + else + kputw(ival, str); + } + else error("TODO: %s:%d .. fmt->type=%d\n", __FILE__,__LINE__, fmt->fmt->type); + } + else + bcf_fmt_array(str, fmt->fmt->n, fmt->fmt->type, fmt->fmt->p + isample*fmt->fmt->size); +} +static void process_gt(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + if ( !fmt->ready ) + init_format(convert, line, fmt); + + if ( fmt->fmt==NULL ) + { + kputc('.', str); + return; + } + bcf_format_gt(fmt->fmt, isample, str); +} +static void process_tgt(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + if ( !fmt->ready ) + init_format(convert, line, fmt); + + if ( fmt->fmt==NULL ) + { + kputc('.', str); + return; + } + + assert( fmt->fmt->type==BCF_BT_INT8 ); + + int l; + int8_t *x = (int8_t*)(fmt->fmt->p + isample*fmt->fmt->size); // FIXME: does not work with n_alt >= 64 + for (l = 0; l < fmt->fmt->n && x[l] != bcf_int8_vector_end; ++l) + { + if (l) kputc("/|"[x[l]&1], str); + if (x[l]>>1) + { + int ial = (x[l]>>1) - 1; + kputs(line->d.allele[ial], str); + } + else + kputc('.', str); + } + if (l == 0) kputc('.', str); +} +static void destroy_tbcsq(void *usr) +{ + if ( !usr ) return; + bcsq_t *csq = (bcsq_t*) usr; + free(csq->hap1.s); + free(csq->hap2.s); + if ( csq->n ) + free(csq->str[0]); + free(csq->str); + free(csq); +} +static void process_tbcsq(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + if ( !fmt->ready ) + { + init_format(convert, line, fmt); + + bcsq_t *csq; + if ( fmt->usr ) + { + csq = (bcsq_t*) fmt->usr; + if ( csq->n ) + free(csq->str[0]); + csq->n = 0; + } + else + csq = (bcsq_t*) calloc(1,sizeof(bcsq_t)); + fmt->usr = csq; + + int i=0, len = 0; + char *tmp = NULL; + if ( bcf_get_info_string(convert->header,line,fmt->key,&tmp,&len)<0 ) + { + csq->n = 0; + return; + } + do + { + csq->n++; + hts_expand(char*, csq->n, csq->m, csq->str); + csq->str[ csq->n-1 ] = tmp + i; + while ( iusr; + + if ( fmt->fmt==NULL || !csq->n ) return; + + csq->hap1.l = 0; + csq->hap2.l = 0; + + int mask = fmt->subscript==0 ? 3 : 1; // merge both haplotypes if subscript==0 + + #define BRANCH(type_t, nbits) { \ + type_t *x = (type_t*)(fmt->fmt->p + isample*fmt->fmt->size); \ + int i,j; \ + if ( fmt->subscript<=0 || fmt->subscript==1 ) \ + { \ + for (j=0; j < fmt->fmt->n; j++) \ + { \ + type_t val = x[j]; \ + if ( !val ) continue; \ + for (i=0; istr[(j*32+i)/2], &csq->hap1); kputc_(',', &csq->hap1); } \ + } \ + } \ + if ( fmt->subscript<0 || fmt->subscript==2 ) \ + { \ + for (j=0; j < fmt->fmt->n; j++) \ + { \ + type_t val = x[j]; \ + if ( !val ) continue; \ + for (i=1; istr[(j*32+i)/2], &csq->hap2); kputc_(',', &csq->hap2); } \ + } \ + } \ + } + switch (fmt->fmt->type) + { + case BCF_BT_INT8: BRANCH(uint8_t, 8); break; + case BCF_BT_INT16: BRANCH(uint16_t,16); break; + case BCF_BT_INT32: BRANCH(uint32_t,32); break; + default: error("Unexpected type: %d\n", fmt->fmt->type); exit(1); break; + } + #undef BRANCH + + if ( !csq->hap1.l && !csq->hap2.l ) return; + + if ( csq->hap1.l ) csq->hap1.s[--csq->hap1.l] = 0; + if ( csq->hap2.l ) csq->hap2.s[--csq->hap2.l] = 0; + + if ( fmt->subscript<0 ) + { + kputs(csq->hap1.l?csq->hap1.s:".", str); + kputc_('\t', str); + kputs(csq->hap2.l?csq->hap2.s:".", str); + } + else if ( fmt->subscript<2 ) + kputs(csq->hap1.l?csq->hap1.s:".", str); + else + kputs(csq->hap2.l?csq->hap2.s:".", str); +} +static void init_format_iupac(convert_t *convert, bcf1_t *line, fmt_t *fmt) +{ + init_format(convert, line, fmt); + if ( fmt->fmt==NULL ) return; + + // Init mapping between alleles and IUPAC table + hts_expand(uint8_t, line->n_allele, convert->ndat, convert->dat); + int8_t *dat = (int8_t*)convert->dat; + int i; + for (i=0; in_allele; i++) + { + if ( line->d.allele[i][1] ) dat[i] = -1; + else + { + switch (line->d.allele[i][0]) + { + case 'A': dat[i] = 0; break; + case 'C': dat[i] = 1; break; + case 'G': dat[i] = 2; break; + case 'T': dat[i] = 3; break; + case 'a': dat[i] = 0; break; + case 'c': dat[i] = 1; break; + case 'g': dat[i] = 2; break; + case 't': dat[i] = 3; break; + default: dat[i] = -1; + } + } + } +} +static void process_iupac_gt(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + if ( !fmt->ready ) + init_format_iupac(convert, line, fmt); + + if ( fmt->fmt==NULL ) + { + kputc('.', str); + return; + } + + assert( fmt->fmt->type==BCF_BT_INT8 ); + + static const char iupac[4][4] = { {'A','M','R','W'},{'M','C','S','Y'},{'R','S','G','K'},{'W','Y','K','T'} }; + int8_t *dat = (int8_t*)convert->dat; + + int8_t *x = (int8_t*)(fmt->fmt->p + isample*fmt->fmt->size); // FIXME: does not work with n_alt >= 64 + int l = 0; + while ( lfmt->n && x[l]!=bcf_int8_vector_end && x[l]!=bcf_int8_missing ) l++; + + if ( l==2 ) + { + // diploid + int ia = (x[0]>>1) - 1, ib = (x[1]>>1) - 1; + if ( ia>=0 && ian_allele && ib>=0 && ibn_allele && dat[ia]>=0 && dat[ib]>=0 ) + { + kputc(iupac[dat[ia]][dat[ib]], str); + return; + } + } + for (l = 0; l < fmt->fmt->n && x[l] != bcf_int8_vector_end; ++l) + { + if (l) kputc("/|"[x[l]&1], str); + if (x[l]>>1) + { + int ial = (x[l]>>1) - 1; + kputs(line->d.allele[ial], str); + } + else + kputc('.', str); + } + if (l == 0) kputc('.', str); +} +static void process_sample(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + kputs(convert->header->samples[isample], str); +} +static void process_sep(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) { if (fmt->key) kputs(fmt->key, str); } +static void process_is_ts(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + int is_ts = 0; + if ( bcf_get_variant_types(line) & (VCF_SNP|VCF_MNP) ) + is_ts = abs(bcf_acgt2int(*line->d.allele[0])-bcf_acgt2int(*line->d.allele[1])) == 2 ? 1 : 0; + kputc(is_ts ? '1' : '0', str); +} +static void process_type(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + int line_type = bcf_get_variant_types(line); + int i = 0; + if ( line_type == VCF_REF ) { kputs("REF", str); i++; } + if ( line_type & VCF_SNP ) { if (i) kputc(',',str); kputs("SNP", str); i++; } + if ( line_type & VCF_MNP ) { if (i) kputc(',',str); kputs("MNP", str); i++; } + if ( line_type & VCF_INDEL ) { if (i) kputc(',',str); kputs("INDEL", str); i++; } + if ( line_type & VCF_OTHER ) { if (i) kputc(',',str); kputs("OTHER", str); i++; } + if ( line_type & VCF_BND ) { if (i) kputc(',',str); kputs("BND", str); i++; } +} +static void process_line(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + vcf_format1(convert->header, line, str); +} +static void process_chrom_pos_id(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + if ( line->d.id[0]!='.' || line->d.id[1] ) + { + // ID is present + kputs(line->d.id, str); + } + else + { + // use CHROM:POS instead of ID + kputs(convert->header->id[BCF_DT_CTG][line->rid].key, str); + kputc(':', str); + kputw(line->pos+1, str); + } +} +static void process_gt_to_prob3(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + int m,n,i; + + m = convert->ndat / sizeof(int32_t); + n = bcf_get_genotypes(convert->header,line,&convert->dat,&m); + convert->ndat = m * sizeof(int32_t); + + if ( n<=0 ) + { + // Throw an error or silently proceed? + // + // for (i=0; insamples; i++) kputs(" 0.33 0.33 0.33", str); + // return; + + error("Error parsing GT tag at %s:%d\n", bcf_seqname(convert->header,line),line->pos+1); + } + + n /= convert->nsamples; + for (i=0; insamples; i++) + { + int32_t *ptr = (int32_t*)convert->dat + i*n; + int j; + for (j=0; jndat / sizeof(int32_t); + n = bcf_get_format_int32(convert->header,line,"PL",&convert->dat,&m); + convert->ndat = m * sizeof(int32_t); + + if ( n<=0 ) + { + // Throw an error or silently proceed? + // + // for (i=0; insamples; i++) kputs(" 0.33 0.33 0.33", str); + // return; + + error("Error parsing PL tag at %s:%d\n", bcf_seqname(convert->header,line),line->pos+1); + } + + n /= convert->nsamples; + for (i=0; insamples; i++) + { + int32_t *ptr = (int32_t*)convert->dat + i*n; + int j; + float sum = 0; + for (j=0; jn_allele ) + { + // haploid + kputc(' ',str); + ksprintf(str,"%f",pow(10,-0.1*ptr[0])/sum); + kputs(" 0 ", str); + ksprintf(str,"%f",pow(10,-0.1*ptr[1])/sum); + } + else + { + // diploid + kputc(' ',str); + ksprintf(str,"%f",pow(10,-0.1*ptr[0])/sum); + kputc(' ',str); + ksprintf(str,"%f",pow(10,-0.1*ptr[1])/sum); + kputc(' ',str); + ksprintf(str,"%f",pow(10,-0.1*ptr[2])/sum); + } + } +} +static void process_gp_to_prob3(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + int m,n,i; + + m = convert->ndat / sizeof(float); + n = bcf_get_format_float(convert->header,line,"GP",&convert->dat,&m); + convert->ndat = m * sizeof(float); + + if ( n<=0 ) + { + // Throw an error or silently proceed? + // + // for (i=0; insamples; i++) kputs(" 0.33 0.33 0.33", str); + // return; + + error("Error parsing GP tag at %s:%d\n", bcf_seqname(convert->header,line),line->pos+1); + } + + n /= convert->nsamples; + for (i=0; insamples; i++) + { + float sum = 0, *ptr = (float*)convert->dat + i*n; + int j; + for (j=0; j1 ) error("[%s:%d:%f] GP value outside range [0,1]; bcftools convert expects the VCF4.3+ spec for the GP field encoding genotype posterior probabilities", bcf_seqname(convert->header,line),line->pos+1,ptr[j]); + sum+=ptr[j]; + } + if ( j==line->n_allele ) + ksprintf(str," %f %f %f",ptr[0],0.,ptr[1]); // haploid + else + ksprintf(str," %f %f %f",ptr[0],ptr[1],ptr[2]); // diploid + } +} + +static void process_gt_to_hap(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + // https://mathgen.stats.ox.ac.uk/impute/impute_v2.html#-known_haps_g + + // File containing known haplotypes for the study cohort. The format + // is the same as the output format from IMPUTE2's -phase option: + // five header columns (as in the -g file) followed by two columns + // (haplotypes) per individual. Allowed values in the haplotype + // columns are 0, 1, and ?. + + // If your study dataset is fully phased, you can replace the -g file + // with a -known_haps_g file. This will cause IMPUTE2 to perform + // haploid imputation, although it will still report diploid imputation + // probabilities in the main output file. If any genotypes are missing, + // they can be marked as '? ?' (two question marks separated by one + // space) in the input file. (The program does not allow just one + // allele from a diploid genotype to be missing.) If the reference + // panels are also phased, IMPUTE2 will perform a single, fast + // imputation step rather than its standard MCMC module this is how + // the program imputes into pre-phased GWAS haplotypes. + + // The -known_haps_g file can also be used to specify study + // genotypes that are "partially" phased, in the sense that some + // genotypes are phased relative to a fixed reference point while + // others are not. We anticipate that this will be most useful when + // trying to phase resequencing data onto a scaffold of known + // haplotypes. To mark a known genotype as unphased, place an + // asterisk immediately after each allele, with no space between + // the allele (0/1) and the asterisk (*); e.g., "0* 1*" for a + // heterozygous genotype of unknown phase. + + int i, gt_id = bcf_hdr_id2int(convert->header, BCF_DT_ID, "GT"); + if ( !bcf_hdr_idinfo_exists(convert->header,BCF_HL_FMT,gt_id) ) + error("FORMAT/GT tag not present at %s:%d\n", bcf_seqname(convert->header, line), line->pos+1); + if ( !(line->unpacked & BCF_UN_FMT) ) bcf_unpack(line, BCF_UN_FMT); + bcf_fmt_t *fmt_gt = NULL; + for (i=0; in_fmt; i++) + if ( line->d.fmt[i].id==gt_id ) { fmt_gt = &line->d.fmt[i]; break; } + if ( !fmt_gt ) + error("FORMAT/GT tag not present at %s:%d\n", bcf_seqname(convert->header, line), line->pos+1); + + // Alloc all memory in advance to avoid kput routines. The biggest allowed allele index is 99 + if ( line->n_allele > 100 ) + error("Too many alleles (%d) at %s:%d\n", line->n_allele, bcf_seqname(convert->header, line), line->pos+1); + if ( ks_resize(str, str->l+convert->nsamples*8) != 0 ) + error("Could not alloc %d bytes\n", str->l + convert->nsamples*8); + + if ( fmt_gt->type!=BCF_BT_INT8 ) // todo: use BRANCH_INT if the VCF is valid + error("Uh, too many alleles (%d) or redundant BCF representation at %s:%d\n", line->n_allele, bcf_seqname(convert->header, line), line->pos+1); + + int8_t *ptr = ((int8_t*) fmt_gt->p) - fmt_gt->n; + for (i=0; insamples; i++) + { + ptr += fmt_gt->n; + if ( ptr[0]==2 ) + { + if ( ptr[1]==3 ) /* 0|0 */ + { + str->s[str->l++] = '0'; str->s[str->l++] = ' '; str->s[str->l++] = '0'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==5 ) /* 0|1 */ + { + str->s[str->l++] = '0'; str->s[str->l++] = ' '; str->s[str->l++] = '1'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==bcf_int8_vector_end ) /* 0 */ + { + str->s[str->l++] = '0'; str->s[str->l++] = ' '; str->s[str->l++] = '-'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==2 ) /* 0/0 */ + { + str->s[str->l++] = '0'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; str->s[str->l++] = '0'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==4 ) /* 0/1 */ + { + str->s[str->l++] = '0'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; str->s[str->l++] = '1'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + else if ( bcf_gt_is_missing(ptr[1]) ) /* 0/. */ + { + str->s[str->l++] = '?'; str->s[str->l++] = ' '; str->s[str->l++] = '?'; str->s[str->l++] = ' '; + } + else if ( bcf_gt_is_phased(ptr[1]) ) /* 0|x */ + { + str->s[str->l++] = '0'; str->s[str->l++] = ' '; + kputw(bcf_gt_allele(ptr[1]),str); + str->s[str->l++] = ' '; + } + else /* 0/x */ + { + str->s[str->l++] = '0'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + kputw(bcf_gt_allele(ptr[1]),str); + str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + } + else if ( ptr[0]==4 ) + { + if ( ptr[1]==3 ) /* 1|0 */ + { + str->s[str->l++] = '1'; str->s[str->l++] = ' '; str->s[str->l++] = '0'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==5 ) /* 1|1 */ + { + str->s[str->l++] = '1'; str->s[str->l++] = ' '; str->s[str->l++] = '1'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==bcf_int8_vector_end ) /* 1 */ + { + str->s[str->l++] = '1'; str->s[str->l++] = ' '; str->s[str->l++] = '-'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==2 ) /* 1/0 */ + { + str->s[str->l++] = '1'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; str->s[str->l++] = '0'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==4 ) /* 1/1 */ + { + str->s[str->l++] = '1'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; str->s[str->l++] = '1'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + else if ( bcf_gt_is_missing(ptr[1]) ) /* 1/. */ + { + str->s[str->l++] = '?'; str->s[str->l++] = ' '; str->s[str->l++] = '?'; str->s[str->l++] = ' '; + } + else if ( bcf_gt_is_phased(ptr[1]) ) /* 1|x */ + { + str->s[str->l++] = '1'; str->s[str->l++] = ' '; + kputw(bcf_gt_allele(ptr[1]),str); + str->s[str->l++] = ' '; + } + else /* 1/x */ + { + str->s[str->l++] = '1'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + kputw(bcf_gt_allele(ptr[1]),str); + str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + } + else if ( bcf_gt_is_missing(ptr[0]) ) + { + if ( ptr[1]==bcf_int8_vector_end ) + { + str->s[str->l++] = '?'; str->s[str->l++] = ' '; str->s[str->l++] = '-'; str->s[str->l++] = ' '; + } + else + { + str->s[str->l++] = '?'; str->s[str->l++] = ' '; str->s[str->l++] = '?'; str->s[str->l++] = ' '; + } + } + else if ( ptr[1]==bcf_int8_vector_end ) + { + /* use REF for something else than first ALT */ + str->s[str->l++] = '0'; str->s[str->l++] = ' '; str->s[str->l++] = '-'; str->s[str->l++] = ' '; + } + else + { + kputw(bcf_gt_allele(ptr[0]),str); + if ( bcf_gt_is_phased(ptr[1]) ) str->s[str->l++] = '*'; + str->s[str->l++] = ' '; + kputw(bcf_gt_allele(ptr[1]),str); + if ( bcf_gt_is_phased(ptr[1]) ) str->s[str->l++] = '*'; + str->s[str->l++] = ' '; + } + } + str->s[--str->l] = 0; // delete the last space +} +static void process_gt_to_hap2(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str) +{ + // same as process_gt_to_hap but converts haploid genotypes into diploid + + int i, gt_id = bcf_hdr_id2int(convert->header, BCF_DT_ID, "GT"); + if ( !bcf_hdr_idinfo_exists(convert->header,BCF_HL_FMT,gt_id) ) + error("FORMAT/GT tag not present at %s:%d\n", bcf_seqname(convert->header, line), line->pos+1); + if ( !(line->unpacked & BCF_UN_FMT) ) bcf_unpack(line, BCF_UN_FMT); + bcf_fmt_t *fmt_gt = NULL; + for (i=0; in_fmt; i++) + if ( line->d.fmt[i].id==gt_id ) { fmt_gt = &line->d.fmt[i]; break; } + if ( !fmt_gt ) + error("FORMAT/GT tag not present at %s:%d\n", bcf_seqname(convert->header, line), line->pos+1); + + // Alloc all memory in advance to avoid kput routines. The biggest allowed allele index is 99 + if ( line->n_allele > 100 ) + error("Too many alleles (%d) at %s:%d\n", line->n_allele, bcf_seqname(convert->header, line), line->pos+1); + if ( ks_resize(str, str->l+convert->nsamples*8) != 0 ) + error("Could not alloc %d bytes\n", str->l + convert->nsamples*8); + + if ( fmt_gt->type!=BCF_BT_INT8 ) // todo: use BRANCH_INT if the VCF is valid + error("Uh, too many alleles (%d) or redundant BCF representation at %s:%d\n", line->n_allele, bcf_seqname(convert->header, line), line->pos+1); + + int8_t *ptr = ((int8_t*) fmt_gt->p) - fmt_gt->n; + for (i=0; insamples; i++) + { + ptr += fmt_gt->n; + if ( ptr[0]==2 ) + { + if ( ptr[1]==3 ) /* 0|0 */ + { + str->s[str->l++] = '0'; str->s[str->l++] = ' '; str->s[str->l++] = '0'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==5 ) /* 0|1 */ + { + str->s[str->l++] = '0'; str->s[str->l++] = ' '; str->s[str->l++] = '1'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==bcf_int8_vector_end ) /* 0 -> 0|0 */ + { + str->s[str->l++] = '0'; str->s[str->l++] = ' '; str->s[str->l++] = '0'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==2 ) /* 0/0 */ + { + str->s[str->l++] = '0'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; str->s[str->l++] = '0'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==4 ) /* 0/1 */ + { + str->s[str->l++] = '0'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; str->s[str->l++] = '1'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + else if ( bcf_gt_is_missing(ptr[1]) ) /* 0/. */ + { + str->s[str->l++] = '?'; str->s[str->l++] = ' '; str->s[str->l++] = '?'; str->s[str->l++] = ' '; + } + else if ( bcf_gt_is_phased(ptr[1]) ) /* 0|x */ + { + str->s[str->l++] = '0'; str->s[str->l++] = ' '; + kputw(bcf_gt_allele(ptr[1]),str); + str->s[str->l++] = ' '; + } + else /* 0/x */ + { + str->s[str->l++] = '0'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + kputw(bcf_gt_allele(ptr[1]),str); + str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + } + else if ( ptr[0]==4 ) + { + if ( ptr[1]==3 ) /* 1|0 */ + { + str->s[str->l++] = '1'; str->s[str->l++] = ' '; str->s[str->l++] = '0'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==5 ) /* 1|1 */ + { + str->s[str->l++] = '1'; str->s[str->l++] = ' '; str->s[str->l++] = '1'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==bcf_int8_vector_end ) /* 1 -> 1|1 */ + { + str->s[str->l++] = '1'; str->s[str->l++] = ' '; str->s[str->l++] = '1'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==2 ) /* 1/0 */ + { + str->s[str->l++] = '1'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; str->s[str->l++] = '0'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==4 ) /* 1/1 */ + { + str->s[str->l++] = '1'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; str->s[str->l++] = '1'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + else if ( bcf_gt_is_missing(ptr[1]) ) /* 1/. */ + { + str->s[str->l++] = '?'; str->s[str->l++] = ' '; str->s[str->l++] = '?'; str->s[str->l++] = ' '; + } + else if ( bcf_gt_is_phased(ptr[1]) ) /* 1|x */ + { + str->s[str->l++] = '1'; str->s[str->l++] = ' '; + kputw(bcf_gt_allele(ptr[1]),str); + str->s[str->l++] = ' '; + } + else /* 1/x */ + { + str->s[str->l++] = '1'; str->s[str->l++] = '*'; str->s[str->l++] = ' '; + kputw(bcf_gt_allele(ptr[1]),str); + str->s[str->l++] = '*'; str->s[str->l++] = ' '; + } + } + else if ( bcf_gt_is_missing(ptr[0]) ) + { + str->s[str->l++] = '?'; str->s[str->l++] = ' '; str->s[str->l++] = '?'; str->s[str->l++] = ' '; + } + else if ( ptr[1]==bcf_int8_vector_end ) + { + /* use REF for something else than first ALT */ + str->s[str->l++] = '0'; str->s[str->l++] = ' '; str->s[str->l++] = '0'; str->s[str->l++] = ' '; + } + else + { + kputw(bcf_gt_allele(ptr[0]),str); + if ( bcf_gt_is_phased(ptr[1]) ) str->s[str->l++] = '*'; + str->s[str->l++] = ' '; + kputw(bcf_gt_allele(ptr[1]),str); + if ( bcf_gt_is_phased(ptr[1]) ) str->s[str->l++] = '*'; + str->s[str->l++] = ' '; + } + } + str->s[--str->l] = 0; // delete the last space +} + +static fmt_t *register_tag(convert_t *convert, int type, char *key, int is_gtf) +{ + convert->nfmt++; + if ( convert->nfmt > convert->mfmt ) + { + convert->mfmt += 10; + convert->fmt = (fmt_t*) realloc(convert->fmt, convert->mfmt*sizeof(fmt_t)); + } + fmt_t *fmt = &convert->fmt[ convert->nfmt-1 ]; + fmt->type = type; + fmt->key = key ? strdup(key) : NULL; + fmt->is_gt_field = is_gtf; + fmt->subscript = -1; + fmt->usr = NULL; + fmt->destroy = NULL; + + // Allow non-format tags, such as CHROM, INFO, etc., to appear amongst the format tags. + if ( key ) + { + int id = bcf_hdr_id2int(convert->header, BCF_DT_ID, key); + if ( fmt->type==T_FORMAT && !bcf_hdr_idinfo_exists(convert->header,BCF_HL_FMT,id) ) + { + if ( !strcmp("CHROM",key) ) { fmt->type = T_CHROM; } + else if ( !strcmp("POS",key) ) { fmt->type = T_POS; } + else if ( !strcmp("POS0",key) ) { fmt->type = T_POS0; } + else if ( !strcmp("END",key) ) { fmt->type = T_END; } + else if ( !strcmp("END0",key) ) { fmt->type = T_END0; } + else if ( !strcmp("ID",key) ) { fmt->type = T_ID; } + else if ( !strcmp("REF",key) ) { fmt->type = T_REF; } + else if ( !strcmp("ALT",key) ) { fmt->type = T_ALT; } + else if ( !strcmp("FIRST_ALT",key) ) { fmt->type = T_FIRST_ALT; } + else if ( !strcmp("QUAL",key) ) { fmt->type = T_QUAL; } + else if ( !strcmp("FILTER",key) ) { fmt->type = T_FILTER; } + else if ( !strcmp("_CHROM_POS_ID",key) ) { fmt->type = T_CHROM_POS_ID; } + else if ( id>=0 && bcf_hdr_idinfo_exists(convert->header,BCF_HL_INFO,id) ) + { + fmt->type = T_INFO; + fprintf(bcftools_stderr,"Warning: Assuming INFO/%s\n", key); + } + } + } + + switch (fmt->type) + { + case T_FIRST_ALT: fmt->handler = &process_first_alt; break; + case T_CHROM_POS_ID: fmt->handler = &process_chrom_pos_id; break; + case T_GT_TO_PROB3: fmt->handler = &process_gt_to_prob3; break; + case T_PL_TO_PROB3: fmt->handler = &process_pl_to_prob3; break; + case T_GP_TO_PROB3: fmt->handler = &process_gp_to_prob3; break; + case T_CHROM: fmt->handler = &process_chrom; break; + case T_POS: fmt->handler = &process_pos; break; + case T_POS0: fmt->handler = &process_pos0; break; + case T_END: fmt->handler = &process_end; break; + case T_END0: fmt->handler = &process_end0; break; + case T_ID: fmt->handler = &process_id; break; + case T_REF: fmt->handler = &process_ref; break; + case T_ALT: fmt->handler = &process_alt; break; + case T_QUAL: fmt->handler = &process_qual; break; + case T_FILTER: fmt->handler = &process_filter; convert->max_unpack |= BCF_UN_FLT; break; + case T_INFO: fmt->handler = &process_info; convert->max_unpack |= BCF_UN_INFO; break; + case T_FORMAT: fmt->handler = &process_format; convert->max_unpack |= BCF_UN_FMT; break; + case T_SAMPLE: fmt->handler = &process_sample; break; + case T_SEP: fmt->handler = &process_sep; break; + case T_IS_TS: fmt->handler = &process_is_ts; break; + case T_TYPE: fmt->handler = &process_type; break; + case T_MASK: fmt->handler = NULL; break; + case T_GT: fmt->handler = &process_gt; convert->max_unpack |= BCF_UN_FMT; break; + case T_TGT: fmt->handler = &process_tgt; convert->max_unpack |= BCF_UN_FMT; break; + case T_IUPAC_GT: fmt->handler = &process_iupac_gt; convert->max_unpack |= BCF_UN_FMT; break; + case T_GT_TO_HAP: fmt->handler = &process_gt_to_hap; convert->max_unpack |= BCF_UN_FMT; break; + case T_GT_TO_HAP2: fmt->handler = &process_gt_to_hap2; convert->max_unpack |= BCF_UN_FMT; break; + case T_TBCSQ: fmt->handler = &process_tbcsq; fmt->destroy = &destroy_tbcsq; convert->max_unpack |= BCF_UN_FMT; break; + case T_LINE: fmt->handler = &process_line; convert->max_unpack |= BCF_UN_FMT; break; + default: error("TODO: handler for type %d\n", fmt->type); + } + if ( key && fmt->type==T_INFO ) + { + fmt->id = bcf_hdr_id2int(convert->header, BCF_DT_ID, key); + if ( !bcf_hdr_idinfo_exists(convert->header,BCF_HL_INFO,fmt->id) ) + { + fmt->id = -1; + convert->undef_info_tag = strdup(key); + } + } + return fmt; +} + +static int parse_subscript(char **p) +{ + char *q = *p; + if ( *q!='{' ) return -1; + q++; + while ( *q && *q!='}' && isdigit(*q) ) q++; + if ( *q!='}' ) return -1; + int idx = atoi((*p)+1); + *p = q+1; + return idx; +} + +static char *parse_tag(convert_t *convert, char *p, int is_gtf) +{ + char *q = ++p; + while ( *q && (isalnum(*q) || *q=='_' || *q=='.') ) q++; + kstring_t str = {0,0,0}; + if ( q-p==0 ) error("Could not parse format string: %s\n", convert->format_str); + kputsn(p, q-p, &str); + if ( is_gtf ) + { + if ( !strcmp(str.s, "SAMPLE") ) register_tag(convert, T_SAMPLE, "SAMPLE", is_gtf); + else if ( !strcmp(str.s, "GT") ) register_tag(convert, T_GT, "GT", is_gtf); + else if ( !strcmp(str.s, "TGT") ) register_tag(convert, T_TGT, "GT", is_gtf); + else if ( !strcmp(str.s, "TBCSQ") ) + { + fmt_t *fmt = register_tag(convert, T_TBCSQ, "BCSQ", is_gtf); + fmt->subscript = parse_subscript(&q); + if ( fmt->subscript==-1 ) + { + if ( !strncmp(q,"{*}",3) ) { fmt->subscript = 0; q += 3; } + } + else fmt->subscript++; + } + else if ( !strcmp(str.s, "IUPACGT") ) register_tag(convert, T_IUPAC_GT, "GT", is_gtf); + else if ( !strcmp(str.s, "INFO") ) + { + if ( *q!='/' ) error("Could not parse format string: %s\n", convert->format_str); + p = ++q; + str.l = 0; + while ( *q && (isalnum(*q) || *q=='_' || *q=='.') ) q++; + if ( q-p==0 ) error("Could not parse format string: %s\n", convert->format_str); + kputsn(p, q-p, &str); + fmt_t *fmt = register_tag(convert, T_INFO, str.s, is_gtf); + fmt->subscript = parse_subscript(&q); + } + else + { + fmt_t *fmt = register_tag(convert, T_FORMAT, str.s, is_gtf); + fmt->subscript = parse_subscript(&q); + } + } + else + { + if ( !strcmp(str.s, "CHROM") ) register_tag(convert, T_CHROM, str.s, is_gtf); + else if ( !strcmp(str.s, "POS") ) register_tag(convert, T_POS, str.s, is_gtf); + else if ( !strcmp(str.s, "POS0") ) register_tag(convert, T_POS0, str.s, is_gtf); + else if ( !strcmp(str.s, "END") ) register_tag(convert, T_END, str.s, is_gtf); + else if ( !strcmp(str.s, "END0") ) register_tag(convert, T_END0, str.s, is_gtf); + else if ( !strcmp(str.s, "ID") ) register_tag(convert, T_ID, str.s, is_gtf); + else if ( !strcmp(str.s, "REF") ) register_tag(convert, T_REF, str.s, is_gtf); + else if ( !strcmp(str.s, "ALT") ) + { + fmt_t *fmt = register_tag(convert, T_ALT, str.s, is_gtf); + fmt->subscript = parse_subscript(&q); + } + else if ( !strcmp(str.s, "FIRST_ALT") ) register_tag(convert, T_FIRST_ALT, str.s, is_gtf); + else if ( !strcmp(str.s, "QUAL") ) register_tag(convert, T_QUAL, str.s, is_gtf); + else if ( !strcmp(str.s, "FILTER") ) register_tag(convert, T_FILTER, str.s, is_gtf); + else if ( !strcmp(str.s, "QUAL") ) register_tag(convert, T_QUAL, str.s, is_gtf); + else if ( !strcmp(str.s, "IS_TS") ) register_tag(convert, T_IS_TS, str.s, is_gtf); + else if ( !strcmp(str.s, "TYPE") ) register_tag(convert, T_TYPE, str.s, is_gtf); + else if ( !strcmp(str.s, "MASK") ) register_tag(convert, T_MASK, str.s, is_gtf); + else if ( !strcmp(str.s, "LINE") ) register_tag(convert, T_LINE, str.s, is_gtf); + else if ( !strcmp(str.s, "_CHROM_POS_ID") ) register_tag(convert, T_CHROM_POS_ID, str.s, is_gtf); + else if ( !strcmp(str.s, "_GT_TO_PROB3") ) register_tag(convert, T_GT_TO_PROB3, str.s, is_gtf); + else if ( !strcmp(str.s, "_PL_TO_PROB3") ) register_tag(convert, T_PL_TO_PROB3, str.s, is_gtf); + else if ( !strcmp(str.s, "_GP_TO_PROB3") ) register_tag(convert, T_GP_TO_PROB3, str.s, is_gtf); + else if ( !strcmp(str.s, "_GT_TO_HAP") ) register_tag(convert, T_GT_TO_HAP, str.s, is_gtf); + else if ( !strcmp(str.s, "_GT_TO_HAP2") ) register_tag(convert, T_GT_TO_HAP2, str.s, is_gtf); + else if ( !strcmp(str.s, "INFO") ) + { + if ( *q!='/' ) error("Could not parse format string: %s\n", convert->format_str); + p = ++q; + str.l = 0; + while ( *q && (isalnum(*q) || *q=='_' || *q=='.') ) q++; + if ( q-p==0 ) error("Could not parse format string: %s\n", convert->format_str); + kputsn(p, q-p, &str); + fmt_t *fmt = register_tag(convert, T_INFO, str.s, is_gtf); + fmt->subscript = parse_subscript(&q); + } + else + { + fmt_t *fmt = register_tag(convert, T_INFO, str.s, is_gtf); + fmt->subscript = parse_subscript(&q); + } + } + free(str.s); + return q; +} + +static char *parse_sep(convert_t *convert, char *p, int is_gtf) +{ + char *q = p; + kstring_t str = {0,0,0}; + while ( *q && *q!='[' && *q!=']' && *q!='%' ) + { + if ( *q=='\\' ) + { + q++; + if ( *q=='n' ) kputc('\n', &str); + else if ( *q=='t' ) kputc('\t', &str); + else kputc(*q, &str); + } + else kputc(*q, &str); + q++; + } + if ( !str.l ) error("Could not parse format string: %s\n", convert->format_str); + register_tag(convert, T_SEP, str.s, is_gtf); + free(str.s); + return q; +} + +convert_t *convert_init(bcf_hdr_t *hdr, int *samples, int nsamples, const char *format_str) +{ + convert_t *convert = (convert_t*) calloc(1,sizeof(convert_t)); + convert->header = hdr; + convert->format_str = strdup(format_str); + convert->max_unpack = BCF_UN_STR; + + int i, is_gtf = 0; + char *p = convert->format_str; + while ( *p ) + { + //fprintf(bcftools_stderr,"<%s>\n", p); + switch (*p) + { + case '[': is_gtf = 1; p++; break; + case ']': is_gtf = 0; register_tag(convert, T_SEP, NULL, 0); p++; break; + case '%': p = parse_tag(convert, p, is_gtf); break; + default: p = parse_sep(convert, p, is_gtf); break; + } + } + if ( is_gtf ) + error("Could not parse the format string, missing the square bracket \"]\": %s\n", convert->format_str); + + if ( nsamples ) + { + convert->nsamples = nsamples; + convert->samples = (int*) malloc(sizeof(int)*nsamples); + for (i=0; insamples; i++) convert->samples[i] = samples[i]; + } + else + { + convert->nsamples = bcf_hdr_nsamples(convert->header); + convert->samples = (int*) malloc(sizeof(int)*convert->nsamples); + for (i=0; insamples; i++) convert->samples[i] = i; + } + return convert; +} + +void convert_destroy(convert_t *convert) +{ + int i; + for (i=0; infmt; i++) + { + if ( convert->fmt[i].destroy ) convert->fmt[i].destroy(convert->fmt[i].usr); + free(convert->fmt[i].key); + } + free(convert->fmt); + free(convert->undef_info_tag); + free(convert->dat); + free(convert->samples); + free(convert->format_str); + free(convert); +} + + +int convert_header(convert_t *convert, kstring_t *str) +{ + int i, icol = 0, l_ori = str->l; + bcf_hdr_t *hdr = convert->header; + + // Supress the header output if LINE is present + for (i=0; infmt; i++) + if ( convert->fmt[i].type == T_LINE ) break; + if ( i!=convert->nfmt ) + return str->l - l_ori; + + kputs("# ", str); + for (i=0; infmt; i++) + { + // Genotype fields + if ( convert->fmt[i].is_gt_field ) + { + int j = i, js, k; + while ( convert->fmt[j].is_gt_field ) j++; + for (js=0; jsnsamples; js++) + { + int ks = convert->samples[js]; + for (k=i; kfmt[k].type == T_SEP ) + { + if ( convert->fmt[k].key ) kputs(convert->fmt[k].key, str); + } + else if ( convert->fmt[k].type == T_SAMPLE ) + ksprintf(str, "[%d]%s", ++icol, convert->fmt[k].key); + else + ksprintf(str, "[%d]%s:%s", ++icol, hdr->samples[ks], convert->fmt[k].key); + } + } + i = j-1; + continue; + } + // Fixed fields + if ( convert->fmt[i].type == T_SEP ) + { + if ( convert->fmt[i].key ) kputs(convert->fmt[i].key, str); + continue; + } + ksprintf(str, "[%d]%s", ++icol, convert->fmt[i].key); + } + return str->l - l_ori; +} + +int convert_line(convert_t *convert, bcf1_t *line, kstring_t *str) +{ + if ( !convert->allow_undef_tags && convert->undef_info_tag ) + error("Error: no such tag defined in the VCF header: INFO/%s. FORMAT fields must be in square brackets, e.g. \"[ %s]\"\n", convert->undef_info_tag,convert->undef_info_tag); + + int l_ori = str->l; + bcf_unpack(line, convert->max_unpack); + + int i, ir; + str->l = 0; + for (i=0; infmt; i++) + { + // Genotype fields. + if ( convert->fmt[i].is_gt_field ) + { + int j = i, js, k; + while ( jnfmt && convert->fmt[j].is_gt_field ) + { + convert->fmt[j].ready = 0; + j++; + } + for (js=0; jsnsamples; js++) + { + // Here comes a hack designed for TBCSQ. When running on large files, + // such as 1000GP, there are too many empty fields in the output and + // it's very very slow. Therefore in case the handler does not add + // anything to the string, we trim all genotype fields enclosed in square + // brackets here. This may be changed in future, time will show... + size_t l_start = str->l; + + int ks = convert->samples[js]; + for (k=i; kfmt[k].type == T_MASK ) + { + for (ir=0; irnreaders; ir++) + kputc(bcf_sr_has_line(convert->readers,ir)?'1':'0', str); + } + else if ( convert->fmt[k].handler ) + { + size_t l = str->l; + convert->fmt[k].handler(convert, line, &convert->fmt[k], ks, str); + if ( l==str->l ) { str->l = l_start; break; } // only TBCSQ does this + } + } + } + i = j-1; + continue; + } + // Fixed fields + if ( convert->fmt[i].type == T_MASK ) + { + for (ir=0; irnreaders; ir++) + kputc(bcf_sr_has_line(convert->readers,ir)?'1':'0', str); + } + else if ( convert->fmt[i].handler ) + convert->fmt[i].handler(convert, line, &convert->fmt[i], -1, str); + + } + return str->l - l_ori; +} + +int convert_set_option(convert_t *convert, enum convert_option opt, ...) +{ + int ret = 0; + va_list args; + + va_start(args, opt); + switch (opt) + { + case allow_undef_tags: + convert->allow_undef_tags = va_arg(args, int); + break; + default: + ret = -1; + } + va_end(args); + return ret; +} + +int convert_max_unpack(convert_t *convert) +{ + return convert->max_unpack; +} + diff --git a/bcftools/convert.h b/bcftools/convert.h new file mode 100644 index 0000000..3712338 --- /dev/null +++ b/bcftools/convert.h @@ -0,0 +1,44 @@ +/* convert.h -- functions for converting between VCF/BCF and related formats. + + Copyright (C) 2014 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#ifndef __CONVERT_H__ +#define __CONVERT_H__ + +#include + +typedef struct _convert_t convert_t; +enum convert_option +{ + allow_undef_tags +}; + +convert_t *convert_init(bcf_hdr_t *hdr, int *samples, int nsamples, const char *str); +void convert_destroy(convert_t *convert); +int convert_set_option(convert_t *convert, enum convert_option opt, ...); +int convert_header(convert_t *convert, kstring_t *str); +int convert_line(convert_t *convert, bcf1_t *rec, kstring_t *str); +int convert_max_unpack(convert_t *convert); + +#endif + diff --git a/bcftools/csq.c b/bcftools/csq.c new file mode 100644 index 0000000..94ac442 --- /dev/null +++ b/bcftools/csq.c @@ -0,0 +1,3839 @@ +/* The MIT License + + Copyright (c) 2016 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ +/* + Things that would be nice to have + - for stop-lost events (also in frameshifts) report the number of truncated aa's + - memory could be greatly reduced by indexing gff (but it is quite compact already) + - deletions that go beyond transcript boundaries are not checked at sequence level + - alloc tscript->ref in hap_finalize, introduce fa_off_beg:16,fa_off_end:16 + - see test/csq/ENST00000573314/insertion-overlap.vcf #1476288882 + + Read about transcript types here + http://vega.sanger.ac.uk/info/about/gene_and_transcript_types.html + http://www.ensembl.org/info/genome/variation/predicted_data.html + http://www.gencodegenes.org/gencode_biotypes.html + + List of supported biotypes + antisense + IG_C_gene + IG_D_gene + IG_J_gene + IG_LV_gene + IG_V_gene + lincRNA + macro_lncRNA + miRNA + misc_RNA + Mt_rRNA + Mt_tRNA + polymorphic_pseudogene + processed_transcript + protein_coding + ribozyme + rRNA + sRNA + scRNA + scaRNA + sense_intronic + sense_overlapping + snRNA + snoRNA + TR_C_gene + TR_D_gene + TR_J_gene + TR_V_gene + + The gff parsing logic + We collect features such by combining gff lines A,B,C as follows: + A .. gene line with a supported biotype + A.ID=~/^gene:/ + + B .. transcript line referencing A + B.ID=~/^transcript:/ && B.Parent=~/^gene:A.ID/ + + C .. corresponding CDS, exon, and UTR lines: + C[3] in {"CDS","exon","three_prime_UTR","five_prime_UTR"} && C.Parent=~/^transcript:B.ID/ + + For coding biotypes ("protein_coding" or "polymorphic_pseudogene") the + complete chain link C -> B -> A is required. For the rest, link B -> A suffices. + + + The supported consequence types, sorted by impact: + splice_acceptor_variant .. end region of an intron changed (2bp at the 3' end of an intron) + splice_donor_variant .. start region of an intron changed (2bp at the 5' end of an intron) + stop_gained .. DNA sequence variant resulting in a stop codon + frameshift_variant .. number of inserted/deleted bases not a multiple of three, disrupted translational frame + stop_lost .. elongated transcript, stop codon changed + start_lost .. the first codon changed + inframe_altering .. combination of indels leading to unchanged reading frame and length + inframe_insertion .. inserted coding sequence, unchanged reading frame + inframe_deletion .. deleted coding sequence, unchanged reading frame + missense_variant .. amino acid (aa) change, unchanged length + splice_region_variant .. change within 1-3 bases of the exon or 3-8 bases of the intron + synonymous_variant .. DNA sequence variant resulting in no amino acid change + stop_retained_variant .. different stop codon + non_coding_variant .. variant in non-coding sequence, such as RNA gene + 5_prime_UTR_variant + 3_prime_UTR_variant + intron_variant .. reported only if none of the above + intergenic_variant .. reported only if none of the above + + + The annotation algorithm. + The algorithm checks if the variant falls in a region of a supported type. The + search is performed in the following order, until a match is found: + 1. idx_cds(gf_cds_t) - lookup CDS by position, create haplotypes, call consequences + 2. idx_utr(gf_utr_t) - check UTR hits + 3. idx_exon(gf_exon_t) - check for splice variants + 4. idx_tscript(tscript_t) - check for intronic variants, RNAs, etc. + + These regidx indexes are created by parsing a gff3 file as follows: + 1. create the array "ftr" of all UTR, CDS, exons. This will be + processed later and pruned based on transcript types we want to keep. + In the same go, create the hash "id2tr" of transcripts to keep + (based on biotype) which maps from transcript_id to a transcript. At + the same time also build the hash "gid2gene" which maps from gene_id to + gf_gene_t pointer. + + 2. build "idx_cds", "idx_tscript", "idx_utr" and "idx_exon" indexes. + Use only features from "ftr" which are present in "id2tr". + + 3. clean data that won't be needed anymore: ftr, id2tr, gid2gene. + + Data structures. + idx_cds, idx_utr, idx_exon, idx_tscript: + as described above, regidx structures for fast lookup of exons/transcripts + overlapping a region, the payload is a pointer to tscript.cds +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "filter.h" +#include "regidx.h" +#include "kheap.h" +#include "smpl_ilist.h" +#include "rbuf.h" + +#ifndef __FUNCTION__ +# define __FUNCTION__ __func__ +#endif + +// Logic of the filters: include or exclude sites which match the filters? +#define FLT_INCLUDE 1 +#define FLT_EXCLUDE 2 + +// Definition of splice_region, splice_acceptor and splice_donor +#define N_SPLICE_DONOR 2 +#define N_SPLICE_REGION_EXON 3 +#define N_SPLICE_REGION_INTRON 8 + +#define N_REF_PAD 10 // number of bases to avoid boundary effects + +#define STRAND_REV 0 +#define STRAND_FWD 1 + +#define TRIM_NONE 0 +#define TRIM_5PRIME 1 +#define TRIM_3PRIME 2 + +// How to treat phased/unphased genotypes +#define PHASE_REQUIRE 0 // --phase r +#define PHASE_MERGE 1 // --phase m +#define PHASE_AS_IS 2 // --phase a +#define PHASE_SKIP 3 // --phase s +#define PHASE_NON_REF 4 // --phase R +#define PHASE_DROP_GT 5 // --samples - + +// Node types in the haplotype tree +#define HAP_CDS 0 +#define HAP_ROOT 1 +#define HAP_SSS 2 // start/stop/splice + +#define CSQ_PRINTED_UPSTREAM (1<<0) +#define CSQ_SYNONYMOUS_VARIANT (1<<1) +#define CSQ_MISSENSE_VARIANT (1<<2) +#define CSQ_STOP_LOST (1<<3) +#define CSQ_STOP_GAINED (1<<4) +#define CSQ_INFRAME_DELETION (1<<5) +#define CSQ_INFRAME_INSERTION (1<<6) +#define CSQ_FRAMESHIFT_VARIANT (1<<7) +#define CSQ_SPLICE_ACCEPTOR (1<<8) +#define CSQ_SPLICE_DONOR (1<<9) +#define CSQ_START_LOST (1<<10) +#define CSQ_SPLICE_REGION (1<<11) +#define CSQ_STOP_RETAINED (1<<12) +#define CSQ_UTR5 (1<<13) +#define CSQ_UTR3 (1<<14) +#define CSQ_NON_CODING (1<<15) +#define CSQ_INTRON (1<<16) +//#define CSQ_INTERGENIC (1<<17) +#define CSQ_INFRAME_ALTERING (1<<18) +#define CSQ_UPSTREAM_STOP (1<<19) // adds * in front of the csq string +#define CSQ_INCOMPLETE_CDS (1<<20) // to remove START/STOP in incomplete CDS, see ENSG00000173376/synon.vcf +#define CSQ_CODING_SEQUENCE (1<<21) // cannot tell exactly what it is, but it does affect the coding sequence + +// Haplotype-aware consequences, printed in one vcf record only, the rest has a reference @12345 +#define CSQ_COMPOUND (CSQ_SYNONYMOUS_VARIANT|CSQ_MISSENSE_VARIANT|CSQ_STOP_LOST|CSQ_STOP_GAINED| \ + CSQ_INFRAME_DELETION|CSQ_INFRAME_INSERTION|CSQ_FRAMESHIFT_VARIANT| \ + CSQ_START_LOST|CSQ_STOP_RETAINED|CSQ_INFRAME_ALTERING|CSQ_INCOMPLETE_CDS| \ + CSQ_UPSTREAM_STOP) +#define CSQ_START_STOP (CSQ_STOP_LOST|CSQ_STOP_GAINED|CSQ_STOP_RETAINED|CSQ_START_LOST) + +#define CSQ_PRN_STRAND(csq) ((csq)&CSQ_COMPOUND && !((csq)&(CSQ_SPLICE_ACCEPTOR|CSQ_SPLICE_DONOR|CSQ_SPLICE_REGION))) +#define CSQ_PRN_TSCRIPT (~(CSQ_INTRON|CSQ_NON_CODING)) +#define CSQ_PRN_BIOTYPE CSQ_NON_CODING + +// see kput_vcsq() +const char *csq_strings[] = +{ + NULL, + "synonymous", + "missense", + "stop_lost", + "stop_gained", + "inframe_deletion", + "inframe_insertion", + "frameshift", + "splice_acceptor", + "splice_donor", + "start_lost", + "splice_region", + "stop_retained", + "5_prime_utr", + "3_prime_utr", + "non_coding", + "intron", + "intergenic", + "inframe_altering", + NULL, + NULL, + "coding_sequence" +}; + + +// GFF line types +#define GFF_TSCRIPT_LINE 1 +#define GFF_GENE_LINE 2 + + +/* + Genomic features, for fast lookup by position to overlapping features +*/ +#define GF_coding_bit 6 +#define GF_is_coding(x) ((x) & (1<5I|121ACG>A+124TA>T" + + vcrec_t + single VCF record and csq tied to this record. (Haplotype can have multiple + consequences in several VCF records. Each record can have multiple consequences + from multiple haplotypes.) + + csq_t + a top-level consequence tied to a haplotype + + vbuf_t + pos2vbuf + VCF records with the same position clustered together for a fast lookup via pos2vbuf +*/ +typedef struct _vbuf_t vbuf_t; +typedef struct _vcsq_t vcsq_t; +struct _vcsq_t +{ + uint32_t strand:1, + type:31; // one of CSQ_* types + uint32_t trid; + uint32_t biotype; // one of GF_* types + char *gene; // gene name + bcf1_t *ref; // if type&CSQ_PRINTED_UPSTREAM, ref consequence "@1234" + kstring_t vstr; // variant string, eg 5TY>5I|121ACG>A+124TA>T +}; +typedef struct +{ + bcf1_t *line; + uint32_t *smpl; // bitmask of sample consequences with first/second haplotype interleaved + uint32_t nfmt:4, nvcsq:28, mvcsq; + vcsq_t *vcsq; // there can be multiple consequences for a single VCF record +} +vrec_t; +typedef struct +{ + uint32_t pos; + vrec_t *vrec; // vcf line that this csq is tied to; needed when printing haplotypes (hap_stage_vcf) + int idx; // 0-based index of the csq at the VCF line, for FMT/BCSQ + vcsq_t type; +} +csq_t; +struct _vbuf_t +{ + vrec_t **vrec; // buffer of VCF lines with the same position + int n, m; +}; +KHASH_MAP_INIT_INT(pos2vbuf, vbuf_t*) + + +/* + Structures related to haplotype-aware consequences in coding regions + + hap_node_t + node of a haplotype tree. Each transcript has one tree + + tscript_t + despite its general name, it is intended for coding transcripts only + + hap_t + hstack_t + for traversal of the haplotype tree and braking combined + consequences into independent parts +*/ +typedef struct _hap_node_t hap_node_t; +struct _hap_node_t +{ + char *seq; // cds segment [parent_node,this_node) + char *var; // variant "ref>alt" + uint32_t type:2, // HAP_ROOT or HAP_CDS + csq:30; // this node's consequence + int dlen; // alt minus ref length: <0 del, >0 ins, 0 substitution + uint32_t rbeg; // variant's VCF position (0-based, inclusive) + int32_t rlen; // variant's rlen; alen=rlen+dlen; fake for non CDS types + uint32_t sbeg; // variant's position on the spliced reference transcript (0-based, inclusive, N_REF_PAD not included) + uint32_t icds; // which exon does this node's variant overlaps + hap_node_t **child, *prev; // children haplotypes and previous coding node + int nchild, mchild; + bcf1_t *cur_rec, *rec; // current VCF record and node's VCF record + uint32_t nend; // number of haplotypes ending in this node + int *cur_child, mcur_child; // mapping from the allele to the currently active child + csq_t *csq_list; // list of haplotype's consequences, broken by position + int ncsq_list, mcsq_list; +}; +struct _tscript_t +{ + uint32_t id; // transcript id + uint32_t beg,end; // transcript's beg and end coordinate (ref strand, 0-based, inclusive) + uint32_t strand:1, // STRAND_REV or STRAND_FWD + ncds:31, // number of exons + mcds; + gf_cds_t **cds; // ordered list of exons + char *ref; // reference sequence, padded with N_REF_PAD bases on both ends + char *sref; // spliced reference sequence, padded with N_REF_PAD bases on both ends + hap_node_t *root; // root of the haplotype tree + hap_node_t **hap; // pointer to haplotype leaves, two for each sample + int nhap, nsref; // number of haplotypes and length of sref, including 2*N_REF_PAD + uint32_t trim:2, // complete, 5' or 3' trimmed, see TRIM_* types + type:30; // one of GF_* types + gf_gene_t *gene; +}; +static inline int cmp_tscript(tscript_t **a, tscript_t **b) +{ + return ( (*a)->end < (*b)->end ) ? 1 : 0; +} +KHEAP_INIT(trhp, tscript_t*, cmp_tscript) +typedef khp_trhp_t tr_heap_t; +typedef struct +{ + hap_node_t *node; // current node + int ichild; // current child in the active node + int dlen; // total dlen, from the root to the active node + size_t slen; // total sequence length, from the root to the active node +} +hstack_t; +typedef struct +{ + int mstack; + hstack_t *stack; + tscript_t *tr; // tr->ref: spliced transcript on ref strand + kstring_t sseq; // spliced haplotype sequence on ref strand + kstring_t tseq; // the variable part of translated haplotype transcript, coding strand + kstring_t tref; // the variable part of translated reference transcript, coding strand + uint32_t sbeg; // stack's sbeg, for cases first node's type is HAP_SSS + int upstream_stop; +} +hap_t; + + +/* + Helper structures, only for initialization + + ftr_t + temporary list of all exons, CDS, UTRs +*/ +KHASH_MAP_INIT_INT(int2tscript, tscript_t*) +KHASH_MAP_INIT_INT(int2gene, gf_gene_t*) +typedef struct +{ + int type; // GF_CDS, GF_EXON, GF_5UTR, GF_3UTR + uint32_t beg; + uint32_t end; + uint32_t trid; + uint32_t strand:1; // STRAND_REV,STRAND_FWD + uint32_t phase:2; // 0, 1 or 2 + uint32_t iseq:29; +} +ftr_t; +/* + Mapping from GFF ID string (such as ENST00000450305 or Zm00001d027230_P001) + to integer id. To keep the memory requirements low, the original version + relied on IDs in the form of a string prefix and a numerical id. However, + it turns out that this assumption is not valid for some ensembl GFFs, see + for example Zea_mays.AGPv4.36.gff3.gz + */ +typedef struct +{ + void *str2id; // khash_str2int + int nstr, mstr; + char **str; // numeric id to string +} +id_tbl_t; +typedef struct +{ + // all exons, CDS, UTRs + ftr_t *ftr; + int nftr, mftr; + + // mapping from gene id to gf_gene_t + kh_int2gene_t *gid2gene; + + // mapping from transcript id to tscript, for quick CDS anchoring + kh_int2tscript_t *id2tr; + + // sequences + void *seq2int; // str2int hash + char **seq; + int nseq, mseq; + + // ignored biotypes + void *ignored_biotypes; + + id_tbl_t gene_ids; // temporary table for mapping between gene id (eg. Zm00001d027245) and a numeric idx +} +aux_t; + +typedef struct _args_t +{ + // the main regidx lookups, from chr:beg-end to overlapping features and + // index iterator + regidx_t *idx_cds, *idx_utr, *idx_exon, *idx_tscript; + regitr_t *itr; + + // temporary structures, deleted after initializtion + aux_t init; + + // text tab-delimited output (out) or vcf/bcf output (out_fh) + FILE *out; + htsFile *out_fh; + + // vcf + bcf_srs_t *sr; + bcf_hdr_t *hdr; + int hdr_nsmpl; // actual number of samples in the vcf, for bcf_update_format_values() + + // include or exclude sites which match the filters + filter_t *filter; + char *filter_str; + int filter_logic; // FLT_INCLUDE or FLT_EXCLUDE + + // samples to process + int sample_is_file; + char *sample_list; + smpl_ilist_t *smpl; + + char *outdir, **argv, *fa_fname, *gff_fname, *output_fname; + char *bcsq_tag; + int argc, output_type; + int phase, quiet, local_csq; + int ncsq_max, nfmt_bcsq; // maximum number of csq per site that can be accessed from FORMAT/BCSQ + int ncsq_small_warned; + + int rid; // current chromosome + tr_heap_t *active_tr; // heap of active transcripts for quick flushing + hap_t *hap; // transcript haplotype recursion + vbuf_t **vcf_buf; // buffered VCF lines to annotate with CSQ and flush + rbuf_t vcf_rbuf; // round buffer indexes to vcf_buf + kh_pos2vbuf_t *pos2vbuf; // fast lookup of buffered lines by position + tscript_t **rm_tr; // buffer of transcripts to clean + int nrm_tr, mrm_tr; + csq_t *csq_buf; // pool of csq not managed by hap_node_t, i.e. non-CDS csqs + int ncsq_buf, mcsq_buf; + id_tbl_t tscript_ids; // mapping between transcript id (eg. Zm00001d027245_T001) and a numeric idx + + faidx_t *fai; + kstring_t str, str2; + int32_t *gt_arr, mgt_arr; +} +args_t; + +// AAA, AAC, ... +const char *gencode = "KNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVV*Y*YSSSS*CWCLFLF"; +const uint8_t nt4[] = +{ + 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, + 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, + 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, + 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, + 4,0,4,1, 4,4,4,2, 4,4,4,4, 4,4,4,4, + 4,4,4,4, 3,4,4,4, 4,4,4,4, 4,4,4,4, + 4,0,4,1, 4,4,4,2, 4,4,4,4, 4,4,4,4, + 4,4,4,4, 3 +}; +const uint8_t cnt4[] = +{ + 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, + 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, + 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, + 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, + 4,3,4,2, 4,4,4,1, 4,4,4,4, 4,4,4,4, + 4,4,4,4, 0,4,4,4, 4,4,4,4, 4,4,4,4, + 4,3,4,2, 4,4,4,1, 4,4,4,4, 4,4,4,4, + 4,4,4,4, 0 +}; +#define dna2aa(x) gencode[ nt4[(uint8_t)(x)[0]]<<4 | nt4[(uint8_t)(x)[1]]<<2 | nt4[(uint8_t)(x)[2]] ] +#define cdna2aa(x) gencode[ cnt4[(uint8_t)(x)[2]]<<4 | cnt4[(uint8_t)(x)[1]]<<2 | cnt4[(uint8_t)(x)[0]] ] + +static const char *gf_strings_noncoding[] = +{ + "MT_rRNA", "MT_tRNA", "lincRNA", "miRNA", "misc_RNA", "rRNA", "snRNA", "snoRNA", "processed_transcript", + "antisense", "macro_lncRNA", "ribozyme", "sRNA", "scRNA", "scaRNA", "sense_intronic", "sense_overlapping", + "pseudogene", "processed_pseudogene", "artifact", "IG_pseudogene", "IG_C_pseudogene", "IG_J_pseudogene", + "IG_V_pseudogene", "TR_V_pseudogene", "TR_J_pseudogene", "MT_tRNA_pseudogene", "misc_RNA_pseudogene", + "miRNA_pseudogene", "ribozyme", "retained_intron", "retrotransposed", "Trna_pseudogene", "transcribed_processed_pseudogene", + "transcribed_unprocessed_pseudogene", "transcribed_unitary_pseudogene", "translated_unprocessed_pseudogene", + "translated_processed_pseudogene", "known_ncRNA", "unitary_pseudogene", "unprocessed_pseudogene", + "LRG_gene", "3_prime_overlapping_ncRNA", "disrupted_domain", "vaultRNA", "bidirectional_promoter_lncRNA", "ambiguous_orf" +}; +static const char *gf_strings_coding[] = { "protein_coding", "polymorphic_pseudogene", "IG_C", "IG_D", "IG_J", "IG_LV", "IG_V", "TR_C", "TR_D", "TR_J", "TR_V", "NMD", "non_stop_decay"}; +static const char *gf_strings_special[] = { "CDS", "exon", "3_prime_UTR", "5_prime_UTR" }; + +const char *gf_type2gff_string(int type) +{ + if ( !GF_is_coding(type) ) + { + if ( type < (1<init; + char c = chr_end[1]; + chr_end[1] = 0; + int iseq; + if ( khash_str2int_get(aux->seq2int, chr_beg, &iseq)!=0 ) + { + hts_expand(char*, aux->nseq+1, aux->mseq, aux->seq); + aux->seq[aux->nseq] = strdup(chr_beg); + iseq = khash_str2int_inc(aux->seq2int, aux->seq[aux->nseq]); + aux->nseq++; + assert( aux->nseq < 256 ); // see gf_gene_t.iseq + } + chr_end[1] = c; + return iseq; +} +static inline char *gff_skip(const char *line, char *ss) +{ + while ( *ss && *ss!='\t' ) ss++; + if ( !*ss ) error("[%s:%d %s] Could not parse the line: %s\n",__FILE__,__LINE__,__FUNCTION__,line); + return ss+1; +} +static inline void gff_parse_chr(const char *line, char **chr_beg, char **chr_end) +{ + char *se = (char*) line; + while ( *se && *se!='\t' ) se++; + if ( !*se ) error("[%s:%d %s] Could not parse the line: %s\n",__FILE__,__LINE__,__FUNCTION__,line); + *chr_beg = (char*) line; + *chr_end = se-1; +} +static inline char *gff_parse_beg_end(const char *line, char *ss, uint32_t *beg, uint32_t *end) +{ + char *se = ss; + *beg = strtol(ss, &se, 10) - 1; + if ( ss==se ) error("[%s:%d %s] Could not parse the line:\n\t%s\n\t%s\n",__FILE__,__LINE__,__FUNCTION__,line,ss); + ss = se+1; + *end = strtol(ss, &se, 10) - 1; + if ( ss==se ) error("[%s:%d %s] Could not parse the line: %s\n",__FILE__,__LINE__,__FUNCTION__,line); + return se+1; +} +static void gff_id_init(id_tbl_t *tbl) +{ + memset(tbl, 0, sizeof(*tbl)); + tbl->str2id = khash_str2int_init(); +} +static void gff_id_destroy(id_tbl_t *tbl) +{ + khash_str2int_destroy_free(tbl->str2id); + free(tbl->str); +} +static inline uint32_t gff_id_parse(id_tbl_t *tbl, const char *line, const char *needle, char *ss) +{ + ss = strstr(ss,needle); // e.g. "ID=transcript:" + if ( !ss ) error("[%s:%d %s] Could not parse the line, \"%s\" not present: %s\n",__FILE__,__LINE__,__FUNCTION__,needle,line); + ss += strlen(needle); + + char *se = ss; + while ( *se && *se!=';' && !isspace(*se) ) se++; + char tmp = *se; + *se = 0; + + int id; + if ( khash_str2int_get(tbl->str2id, ss, &id) < 0 ) + { + id = tbl->nstr++; + hts_expand(char*, tbl->nstr, tbl->mstr, tbl->str); + tbl->str[id] = strdup(ss); + int ret = khash_str2int_set(tbl->str2id, tbl->str[id], id); + } + *se = tmp; + + return id; +} +static inline int gff_parse_type(char *line) +{ + line = strstr(line,"ID="); + if ( !line ) return -1; + line += 3; + if ( !strncmp(line,"transcript:",11) ) return GFF_TSCRIPT_LINE; + else if ( !strncmp(line,"gene:",5) ) return GFF_GENE_LINE; + return -1; +} +static inline int gff_parse_biotype(char *_line) +{ + char *line = strstr(_line,"biotype="); + if ( !line ) return -1; + + line += 8; + switch (*line) + { + case 'p': + if ( !strncmp(line,"protein_coding",14) ) return GF_PROTEIN_CODING; + else if ( !strncmp(line,"pseudogene",10) ) return GF_PSEUDOGENE; + else if ( !strncmp(line,"processed_transcript",20) ) return GF_PROCESSED_TRANSCRIPT; + else if ( !strncmp(line,"processed_pseudogene",20) ) return GF_PROCESSED_PSEUDOGENE; + else if ( !strncmp(line,"polymorphic_pseudogene",22) ) return GF_POLYMORPHIC_PSEUDOGENE; + break; + case 'a': + if ( !strncmp(line,"artifact",8) ) return GF_ARTIFACT; + else if ( !strncmp(line,"antisense",9) ) return GF_ANTISENSE; + else if ( !strncmp(line,"ambiguous_orf",13) ) return GF_AMBIGUOUS_ORF; + break; + case 'I': + if ( !strncmp(line,"IG_C_gene",9) ) return GF_IG_C; + else if ( !strncmp(line,"IG_D_gene",9) ) return GF_IG_D; + else if ( !strncmp(line,"IG_J_gene",9) ) return GF_IG_J; + else if ( !strncmp(line,"IG_LV_gene",10) ) return GF_IG_LV; + else if ( !strncmp(line,"IG_V_gene",9) ) return GF_IG_V; + else if ( !strncmp(line,"IG_pseudogene",13) ) return GF_IG_PSEUDOGENE; + else if ( !strncmp(line,"IG_C_pseudogene",15) ) return GF_IG_C_PSEUDOGENE; + else if ( !strncmp(line,"IG_J_pseudogene",15) ) return GF_IG_J_PSEUDOGENE; + else if ( !strncmp(line,"IG_V_pseudogene",15) ) return GF_IG_V_PSEUDOGENE; + break; + case 'T': + if ( !strncmp(line,"TR_C_gene",9) ) return GF_TR_C; + else if ( !strncmp(line,"TR_D_gene",9) ) return GF_TR_D; + else if ( !strncmp(line,"TR_J_gene",9) ) return GF_TR_J; + else if ( !strncmp(line,"TR_V_gene",9) ) return GF_TR_V; + else if ( !strncmp(line,"TR_V_pseudogene",15) ) return GF_TR_V_PSEUDOGENE; + else if ( !strncmp(line,"TR_J_pseudogene",15) ) return GF_TR_J_PSEUDOGENE; + break; + case 'M': + if ( !strncmp(line,"Mt_tRNA_pseudogene",18) ) return GF_MT_tRNA_PSEUDOGENE; + else if ( !strncmp(line,"Mt_tRNA",7) ) return GF_MT_tRNA; + else if ( !strncmp(line,"Mt_rRNA",7) ) return GF_MT_tRNA; + break; + case 'l': + if ( !strncmp(line,"lincRNA",7) ) return GF_lincRNA; + break; + case 'm': + if ( !strncmp(line,"macro_lncRNA",12) ) return GF_macro_lncRNA; + else if ( !strncmp(line,"misc_RNA_pseudogene",19) ) return GF_misc_RNA_PSEUDOGENE; + else if ( !strncmp(line,"miRNA_pseudogene",16) ) return GF_miRNA_PSEUDOGENE; + else if ( !strncmp(line,"miRNA",5) ) return GF_miRNA; + else if ( !strncmp(line,"misc_RNA",8) ) return GF_MISC_RNA; + break; + case 'r': + if ( !strncmp(line,"rRNA",4) ) return GF_rRNA; + else if ( !strncmp(line,"ribozyme",8) ) return GF_RIBOZYME; + else if ( !strncmp(line,"retained_intron",15) ) return GF_RETAINED_INTRON; + else if ( !strncmp(line,"retrotransposed",15) ) return GF_RETROTRANSPOSED; + break; + case 's': + if ( !strncmp(line,"snRNA",5) ) return GF_snRNA; + else if ( !strncmp(line,"sRNA",4) ) return GF_sRNA; + else if ( !strncmp(line,"scRNA",5) ) return GF_scRNA; + else if ( !strncmp(line,"scaRNA",6) ) return GF_scaRNA; + else if ( !strncmp(line,"snoRNA",6) ) return GF_snoRNA; + else if ( !strncmp(line,"sense_intronic",14) ) return GF_SENSE_INTRONIC; + else if ( !strncmp(line,"sense_overlapping",17) ) return GF_SENSE_OVERLAPPING; + break; + case 't': + if ( !strncmp(line,"tRNA_pseudogene",15) ) return GF_tRNA_PSEUDOGENE; + else if ( !strncmp(line,"transcribed_processed_pseudogene",32) ) return GF_TRANSCRIBED_PROCESSED_PSEUDOGENE; + else if ( !strncmp(line,"transcribed_unprocessed_pseudogene",34) ) return GF_TRANSCRIBED_UNPROCESSED_PSEUDOGENE; + else if ( !strncmp(line,"transcribed_unitary_pseudogene",30) ) return GF_TRANSCRIBED_UNITARY_PSEUDOGENE; + else if ( !strncmp(line,"translated_unprocessed_pseudogene",33) ) return GF_TRANSLATED_UNPROCESSED_PSEUDOGENE; + else if ( !strncmp(line,"translated_processed_pseudogene",31) ) return GF_TRANSLATED_PROCESSED_PSEUDOGENE; + break; + case 'n': + if ( !strncmp(line,"nonsense_mediated_decay",23) ) return GF_NMD; + else if ( !strncmp(line,"non_stop_decay",14) ) return GF_NON_STOP_DECAY; + break; + case 'k': + if ( !strncmp(line,"known_ncrna",11) ) return GF_KNOWN_NCRNA; + break; + case 'u': + if ( !strncmp(line,"unitary_pseudogene",18) ) return GF_UNITARY_PSEUDOGENE; + else if ( !strncmp(line,"unprocessed_pseudogene",22) ) return GF_UNPROCESSED_PSEUDOGENE; + break; + case 'L': + if ( !strncmp(line,"LRG_gene",8) ) return GF_LRG_GENE; + break; + case '3': + if ( !strncmp(line,"3prime_overlapping_ncRNA",24) ) return GF_3PRIME_OVERLAPPING_ncRNA; + break; + case 'd': + if ( !strncmp(line,"disrupted_domain",16) ) return GF_DISRUPTED_DOMAIN; + break; + case 'v': + if ( !strncmp(line,"vaultRNA",8) ) return GF_vaultRNA; + break; + case 'b': + if ( !strncmp(line,"bidirectional_promoter_lncRNA",29) ) return GF_BIDIRECTIONAL_PROMOTER_lncRNA; + break; + } + return 0; +} +static inline int gff_ignored_biotype(args_t *args, char *ss) +{ + ss = strstr(ss,"biotype="); + if ( !ss ) return 0; + + ss += 8; + char *se = ss, tmp; + while ( *se && *se!=';' ) se++; + tmp = *se; + *se = 0; + + char *key = ss; + int n = 0; + if ( khash_str2int_get(args->init.ignored_biotypes, ss, &n)!=0 ) key = strdup(ss); + khash_str2int_set(args->init.ignored_biotypes, key, n+1); + + *se = tmp; + return 1; +} +gf_gene_t *gene_init(aux_t *aux, uint32_t gene_id) +{ + khint_t k = kh_get(int2gene, aux->gid2gene, (int)gene_id); + gf_gene_t *gene = (k == kh_end(aux->gid2gene)) ? NULL : kh_val(aux->gid2gene, k); + if ( !gene ) + { + gene = (gf_gene_t*) calloc(1,sizeof(gf_gene_t)); + int ret; + k = kh_put(int2gene, aux->gid2gene, (int)gene_id, &ret); + kh_val(aux->gid2gene,k) = gene; + } + return gene; +} +void gff_parse_transcript(args_t *args, const char *line, char *ss, ftr_t *ftr) +{ + aux_t *aux = &args->init; + int biotype = gff_parse_biotype(ss); + if ( biotype <= 0 ) + { + if ( !gff_ignored_biotype(args, ss) && args->quiet<2 ) fprintf(stderr,"ignored transcript: %s\n",line); + return; + } + + // create a mapping from transcript_id to gene_id + uint32_t trid = gff_id_parse(&args->tscript_ids, line, "ID=transcript:", ss); + uint32_t gene_id = gff_id_parse(&args->init.gene_ids, line, "Parent=gene:", ss); + + tscript_t *tr = (tscript_t*) calloc(1,sizeof(tscript_t)); + tr->id = trid; + tr->strand = ftr->strand; + tr->gene = gene_init(aux, gene_id); + tr->type = biotype; + tr->beg = ftr->beg; + tr->end = ftr->end; + + khint_t k; + int ret; + k = kh_put(int2tscript, aux->id2tr, (int)trid, &ret); + kh_val(aux->id2tr,k) = tr; +} +void gff_parse_gene(args_t *args, const char *line, char *ss, char *chr_beg, char *chr_end, ftr_t *ftr) +{ + int biotype = gff_parse_biotype(ss); + if ( biotype <= 0 ) + { + if ( !gff_ignored_biotype(args, ss) && args->quiet<2 ) fprintf(stderr,"ignored gene: %s\n",line); + return; + } + + aux_t *aux = &args->init; + + // substring search for "ID=gene:ENSG00000437963" + uint32_t gene_id = gff_id_parse(&aux->gene_ids, line, "ID=gene:", ss); + gf_gene_t *gene = gene_init(aux, gene_id); + assert( !gene->name ); // the gene_id should be unique + + gene->iseq = feature_set_seq(args, chr_beg,chr_end); + + // substring search for "Name=OR4F5" + ss = strstr(chr_end+2,"Name="); + if ( ss ) + { + ss += 5; + char *se = ss; + while ( *se && *se!=';' && !isspace(*se) ) se++; + gene->name = (char*) malloc(se-ss+1); + memcpy(gene->name,ss,se-ss); + gene->name[se-ss] = 0; + } + else + gene->name = strdup(aux->gene_ids.str[gene_id]); // Name= field is not present, use the gene ID instead +} +int gff_parse(args_t *args, char *line, ftr_t *ftr) +{ + // - skip empty lines and commented lines + // - columns + // 1. chr + // 2. + // 3. CDS, transcript, gene, ... + // 4-5. beg,end + // 6. + // 7. strand + // 8. phase + // 9. Parent=transcript:ENST(\d+);ID=... etc + + char *ss = line; + if ( !*ss ) return -1; // skip blank lines + if ( *ss=='#' ) return -1; // skip comments + + char *chr_beg, *chr_end; + gff_parse_chr(line, &chr_beg, &chr_end); + ss = gff_skip(line, chr_end + 2); + + // 3. column: is this a CDS, transcript, gene, etc. + if ( !strncmp("exon\t",ss,5) ) { ftr->type = GF_EXON; ss += 5; } + else if ( !strncmp("CDS\t",ss,4) ) { ftr->type = GF_CDS; ss += 4; } + else if ( !strncmp("three_prime_UTR\t",ss,16) ) { ftr->type = GF_UTR3; ss += 16; } + else if ( !strncmp("five_prime_UTR\t",ss,15) ) { ftr->type = GF_UTR5; ss += 15; } + else + { + ss = gff_skip(line, ss); + ss = gff_parse_beg_end(line, ss, &ftr->beg,&ftr->end); + ss = gff_skip(line, ss); + int type = gff_parse_type(ss); + if ( type!=GFF_TSCRIPT_LINE && type!=GFF_GENE_LINE ) + { + // we ignore these, debug print to see new types: + ss = strstr(ss,"ID="); + if ( !ss ) return -1; // no ID, ignore the line + if ( !strncmp("chromosome",ss+3,10) ) return -1; + if ( !strncmp("supercontig",ss+3,11) ) return -1; + if ( args->quiet<2 ) fprintf(stderr,"ignored: %s\n", line); + return -1; + } + + // 7. column: strand + if ( *ss == '+' ) ftr->strand = STRAND_FWD; + else if ( *ss == '-' ) ftr->strand = STRAND_REV; + else error("Unknown strand: %c .. %s\n", *ss,ss); + + if ( type==GFF_TSCRIPT_LINE ) + gff_parse_transcript(args, line, ss, ftr); + else + gff_parse_gene(args, line, ss, chr_beg, chr_end, ftr); + + return -1; + } + ss = gff_parse_beg_end(line, ss, &ftr->beg,&ftr->end); + ss = gff_skip(line, ss); + + // 7. column: strand + if ( *ss == '+' ) ftr->strand = STRAND_FWD; + else if ( *ss == '-' ) ftr->strand = STRAND_REV; + else { if ( args->quiet<2 ) fprintf(stderr,"Skipping unknown strand: %c\n", *ss); return -1; } + ss += 2; + + // 8. column: phase (codon offset) + if ( *ss == '0' ) ftr->phase = 0; + else if ( *ss == '1' ) ftr->phase = 1; + else if ( *ss == '2' ) ftr->phase = 2; + else if ( *ss == '.' ) ftr->phase = 0; // exons do not have phase + else { if ( args->quiet<2 ) fprintf(stderr,"Skipping unknown phase: %c, %s\n", *ss, line); return -1; } + ss += 2; + + // substring search for "Parent=transcript:ENST00000437963" + ftr->trid = gff_id_parse(&args->tscript_ids, line, "Parent=transcript:", ss); + ftr->iseq = feature_set_seq(args, chr_beg,chr_end); + return 0; +} + +static int cmp_cds_ptr(const void *a, const void *b) +{ + // comparison function for qsort of transcripts's CDS + if ( (*((gf_cds_t**)a))->beg < (*((gf_cds_t**)b))->beg ) return -1; + if ( (*((gf_cds_t**)a))->beg > (*((gf_cds_t**)b))->beg ) return 1; + return 0; +} + +static inline void chr_beg_end(aux_t *aux, int iseq, char **chr_beg, char **chr_end) +{ + *chr_beg = *chr_end = aux->seq[iseq]; + while ( (*chr_end)[1] ) (*chr_end)++; +} +tscript_t *tscript_init(aux_t *aux, uint32_t trid) +{ + khint_t k = kh_get(int2tscript, aux->id2tr, (int)trid); + tscript_t *tr = (k == kh_end(aux->id2tr)) ? NULL : kh_val(aux->id2tr, k); + assert( tr ); + return tr; +} +void register_cds(args_t *args, ftr_t *ftr) +{ + // Make the CDS searchable via idx_cds. Note we do not malloc tr->cds just yet. + // ftr is the result of parsing a gff CDS line + aux_t *aux = &args->init; + + tscript_t *tr = tscript_init(aux, ftr->trid); + if ( tr->strand != ftr->strand ) error("Conflicting strand in transcript %"PRIu32" .. %d vs %d\n",ftr->trid,tr->strand,ftr->strand); + + gf_cds_t *cds = (gf_cds_t*) malloc(sizeof(gf_cds_t)); + cds->tr = tr; + cds->beg = ftr->beg; + cds->len = ftr->end - ftr->beg + 1; + cds->icds = 0; // to keep valgrind on mac happy + cds->phase = ftr->phase; + + hts_expand(gf_cds_t*,tr->ncds+1,tr->mcds,tr->cds); + tr->cds[tr->ncds++] = cds; +} +void register_utr(args_t *args, ftr_t *ftr) +{ + aux_t *aux = &args->init; + gf_utr_t *utr = (gf_utr_t*) malloc(sizeof(gf_utr_t)); + utr->which = ftr->type==GF_UTR3 ? prime3 : prime5; + utr->beg = ftr->beg; + utr->end = ftr->end; + utr->tr = tscript_init(aux, ftr->trid); + + char *chr_beg, *chr_end; + chr_beg_end(&args->init, utr->tr->gene->iseq, &chr_beg, &chr_end); + regidx_push(args->idx_utr, chr_beg,chr_end, utr->beg,utr->end, &utr); +} +void register_exon(args_t *args, ftr_t *ftr) +{ + aux_t *aux = &args->init; + gf_exon_t *exon = (gf_exon_t*) malloc(sizeof(gf_exon_t)); + exon->beg = ftr->beg; + exon->end = ftr->end; + exon->tr = tscript_init(aux, ftr->trid); + + char *chr_beg, *chr_end; + chr_beg_end(&args->init, exon->tr->gene->iseq, &chr_beg, &chr_end); + regidx_push(args->idx_exon, chr_beg,chr_end, exon->beg - N_SPLICE_REGION_INTRON, exon->end + N_SPLICE_REGION_INTRON, &exon); +} + +void tscript_init_cds(args_t *args) +{ + aux_t *aux = &args->init; + + // Sort CDS in all transcripts, set offsets, check their phase, length, create index (idx_cds) + khint_t k; + for (k=0; kid2tr); k++) + { + if ( !kh_exist(aux->id2tr, k) ) continue; + tscript_t *tr = (tscript_t*) kh_val(aux->id2tr, k); + + // position-to-tscript lookup + char *chr_beg, *chr_end; + chr_beg_end(aux, tr->gene->iseq, &chr_beg, &chr_end); + regidx_push(args->idx_tscript, chr_beg, chr_end, tr->beg, tr->end, &tr); + + if ( !tr->ncds ) continue; // transcript with no CDS + + // sort CDs + qsort(tr->cds, tr->ncds, sizeof(gf_cds_t*), cmp_cds_ptr); + + // trim non-coding start + int i, len = 0; + if ( tr->strand==STRAND_FWD ) + { + if ( tr->cds[0]->phase ) tr->trim |= TRIM_5PRIME; + tr->cds[0]->beg += tr->cds[0]->phase; + tr->cds[0]->len -= tr->cds[0]->phase; + tr->cds[0]->phase = 0; + + // sanity check phase + for (i=0; incds; i++) + { + int phase = tr->cds[i]->phase ? 3 - tr->cds[i]->phase : 0; + if ( phase!=len%3) + error("GFF3 assumption failed for transcript %s, CDS=%d: phase!=len%%3 (phase=%d, len=%d)\n",args->tscript_ids.str[tr->id],tr->cds[i]->beg+1,phase,len); + assert( phase == len%3 ); + len += tr->cds[i]->len; + } + } + else + { + // Check that the phase is not bigger than CDS length. Curiously, this can really happen, + // see Mus_musculus.GRCm38.85.gff3.gz, transcript:ENSMUST00000163141 + // todo: the same for the fwd strand + i = tr->ncds - 1; + int phase = tr->cds[i]->phase; + if ( phase ) tr->trim |= TRIM_5PRIME; + while ( i>=0 && phase > tr->cds[i]->len ) + { + phase -= tr->cds[i]->len; + tr->cds[i]->phase = 0; + tr->cds[i]->len = 0; + i--; + } + tr->cds[i]->len -= tr->cds[i]->phase; + tr->cds[i]->phase = 0; + + // sanity check phase + for (i=tr->ncds-1; i>=0; i--) + { + int phase = tr->cds[i]->phase ? 3 - tr->cds[i]->phase : 0; + if ( phase!=len%3) + error("GFF3 assumption failed for transcript %s, CDS=%d: phase!=len%%3 (phase=%d, len=%d)\n",args->tscript_ids.str[tr->id],tr->cds[i]->beg+1,phase,len); + len += tr->cds[i]->len; + } + } + + // set len. At the same check that CDS within a transcript do not overlap + len = 0; + for (i=0; incds; i++) + { + tr->cds[i]->icds = i; + len += tr->cds[i]->len; + if ( !i ) continue; + + gf_cds_t *a = tr->cds[i-1]; + gf_cds_t *b = tr->cds[i]; + if ( a->beg + a->len - 1 >= b->beg ) + error("Error: CDS overlap in the transcript %"PRIu32": %"PRIu32"-%"PRIu32" and %"PRIu32"-%"PRIu32"\n", + kh_key(aux->id2tr, k), a->beg+1,a->beg+a->len, b->beg+1,b->beg+b->len); + } + if ( len%3 != 0 ) + { + // There are 13k transcripts with incomplete 3' CDS. See for example ENST00000524289 + // http://sep2015.archive.ensembl.org/Homo_sapiens/Transcript/Sequence_cDNA?db=core;g=ENSG00000155868;r=5:157138846-157159019;t=ENST00000524289 + // Also, the incomplete CDS can be too short (1 or 2bp), so it is not enough to trim the last one. + + tr->trim |= TRIM_3PRIME; + if ( tr->strand==STRAND_FWD ) + { + i = tr->ncds - 1; + while ( i>=0 && len%3 ) + { + int dlen = tr->cds[i]->len >= len%3 ? len%3 : tr->cds[i]->len; + tr->cds[i]->len -= dlen; + len -= dlen; + i--; + } + } + else + { + i = 0; + while ( incds && len%3 ) + { + int dlen = tr->cds[i]->len >= len%3 ? len%3 : tr->cds[i]->len; + tr->cds[i]->len -= dlen; + tr->cds[i]->beg += dlen; + len -= dlen; + i++; + } + } + } + + // set CDS offsets and insert into regidx + len=0; + for (i=0; incds; i++) + { + tr->cds[i]->pos = len; + len += tr->cds[i]->len; + regidx_push(args->idx_cds, chr_beg,chr_end, tr->cds[i]->beg,tr->cds[i]->beg+tr->cds[i]->len-1, &tr->cds[i]); + } + } +} + +void regidx_free_gf(void *payload) { free(*((gf_cds_t**)payload)); } +void regidx_free_tscript(void *payload) { tscript_t *tr = *((tscript_t**)payload); free(tr->cds); free(tr); } + +void init_gff(args_t *args) +{ + aux_t *aux = &args->init; + aux->seq2int = khash_str2int_init(); // chrom's numeric id + aux->gid2gene = kh_init(int2gene); // gene id to gf_gene_t, for idx_gene + aux->id2tr = kh_init(int2tscript); // transcript id to tscript_t + args->idx_tscript = regidx_init(NULL, NULL, regidx_free_tscript, sizeof(tscript_t*), NULL); + aux->ignored_biotypes = khash_str2int_init(); + gff_id_init(&aux->gene_ids); + gff_id_init(&args->tscript_ids); + + // parse gff + kstring_t str = {0,0,0}; + htsFile *fp = hts_open(args->gff_fname,"r"); + if ( !fp ) error("Failed to read %s\n", args->gff_fname); + while ( hts_getline(fp, KS_SEP_LINE, &str) > 0 ) + { + hts_expand(ftr_t, aux->nftr+1, aux->mftr, aux->ftr); + int ret = gff_parse(args, str.s, aux->ftr + aux->nftr); + if ( !ret ) aux->nftr++; + } + free(str.s); + if ( hts_close(fp)!=0 ) error("Close failed: %s\n", args->gff_fname); + + + // process gff information: connect CDS and exons to transcripts + args->idx_cds = regidx_init(NULL, NULL, regidx_free_gf, sizeof(gf_cds_t*), NULL); + args->idx_utr = regidx_init(NULL, NULL, regidx_free_gf, sizeof(gf_utr_t*), NULL); + args->idx_exon = regidx_init(NULL, NULL, regidx_free_gf, sizeof(gf_exon_t*), NULL); + args->itr = regitr_init(NULL); + + int i; + for (i=0; inftr; i++) + { + ftr_t *ftr = &aux->ftr[i]; + + // check whether to keep this feature: is there a mapping trid -> gene_id -> gene? + khint_t k = kh_get(int2tscript, aux->id2tr, (int)ftr->trid); + if ( k==kh_end(aux->id2tr) ) continue; // no such transcript + + tscript_t *tr = kh_val(aux->id2tr,k); + if ( !tr->gene->name ) + { + // not a supported biotype (e.g. gene:pseudogene, transcript:processed_transcript) + regidx_free_tscript(&tr); + kh_del(int2tscript, aux->id2tr,k); + continue; + } + + // populate regidx by category: + // ftr->type .. GF_CDS, GF_EXON, GF_UTR3, GF_UTR5 + // gene->type .. GF_PROTEIN_CODING, GF_MT_rRNA, GF_IG_C, ... + if ( ftr->type==GF_CDS ) register_cds(args, ftr); + else if ( ftr->type==GF_EXON ) register_exon(args, ftr); + else if ( ftr->type==GF_UTR5 ) register_utr(args, ftr); + else if ( ftr->type==GF_UTR3 ) register_utr(args, ftr); + else + error("something: %s\t%d\t%d\t%s\t%s\n", aux->seq[ftr->iseq],ftr->beg+1,ftr->end+1,args->tscript_ids.str[ftr->trid],gf_type2gff_string(ftr->type)); + } + tscript_init_cds(args); + + if ( !args->quiet ) + { + fprintf(stderr,"Indexed %d transcripts, %d exons, %d CDSs, %d UTRs\n", + regidx_nregs(args->idx_tscript), + regidx_nregs(args->idx_exon), + regidx_nregs(args->idx_cds), + regidx_nregs(args->idx_utr)); + } + + free(aux->ftr); + khash_str2int_destroy_free(aux->seq2int); + // keeping only to destroy the genes at the end: kh_destroy(int2gene,aux->gid2gene); + kh_destroy(int2tscript,aux->id2tr); + free(aux->seq); + gff_id_destroy(&aux->gene_ids); + + if ( args->quiet<2 && khash_str2int_size(aux->ignored_biotypes) ) + { + khash_t(str2int) *ign = (khash_t(str2int)*)aux->ignored_biotypes; + fprintf(stderr,"Ignored the following biotypes:\n"); + for (i = kh_begin(ign); i < kh_end(ign); i++) + { + if ( !kh_exist(ign,i)) continue; + fprintf(stderr,"\t%dx\t.. %s\n", kh_value(ign,i), kh_key(ign,i)); + } + } + khash_str2int_destroy_free(aux->ignored_biotypes); +} + +void init_data(args_t *args) +{ + args->nfmt_bcsq = 1 + (args->ncsq_max - 1) / 32; + + if ( !args->quiet ) fprintf(stderr,"Parsing %s ...\n", args->gff_fname); + init_gff(args); + + args->rid = -1; + + if ( args->filter_str ) + args->filter = filter_init(args->hdr, args->filter_str); + + args->fai = fai_load(args->fa_fname); + if ( !args->fai ) error("Failed to load the fai index: %s\n", args->fa_fname); + + args->pos2vbuf = kh_init(pos2vbuf); + args->active_tr = khp_init(trhp); + args->hap = (hap_t*) calloc(1,sizeof(hap_t)); + + // init samples + if ( !bcf_hdr_nsamples(args->hdr) ) args->phase = PHASE_DROP_GT; + if ( args->sample_list && !strcmp("-",args->sample_list) ) + { + // ignore all samples + if ( args->output_type==FT_TAB_TEXT ) + { + // significant speedup for plain VCFs + bcf_hdr_set_samples(args->hdr,NULL,0); + } + args->phase = PHASE_DROP_GT; + } + else + args->smpl = smpl_ilist_init(args->hdr, args->sample_list, args->sample_is_file, SMPL_STRICT); + args->hdr_nsmpl = args->phase==PHASE_DROP_GT ? 0 : bcf_hdr_nsamples(args->hdr); + + if ( args->output_type==FT_TAB_TEXT ) + { + args->out = args->output_fname ? fopen(args->output_fname,"w") : stdout; + if ( !args->out ) error("Failed to open %s: %s\n", args->output_fname,strerror(errno)); + + fprintf(args->out,"# This file was produced by: bcftools +csq(%s+htslib-%s)\n", bcftools_version(),hts_version()); + fprintf(args->out,"# The command line was:\tbcftools +%s", args->argv[0]); + int i; + for (i=1; iargc; i++) + fprintf(args->out," %s",args->argv[i]); + fprintf(args->out,"\n"); + fprintf(args->out,"# LOG\t[2]Message\n"); + fprintf(args->out,"# CSQ"); i = 1; + fprintf(args->out,"\t[%d]Sample", ++i); + fprintf(args->out,"\t[%d]Haplotype", ++i); + fprintf(args->out,"\t[%d]Chromosome", ++i); + fprintf(args->out,"\t[%d]Position", ++i); + fprintf(args->out,"\t[%d]Consequence", ++i); + fprintf(args->out,"\n"); + } + else + { + args->out_fh = hts_open(args->output_fname? args->output_fname : "-",hts_bcf_wmode(args->output_type)); + if ( args->out_fh == NULL ) error("Can't write to %s: %s\n", args->output_fname? args->output_fname : "standard output", strerror(errno)); + bcf_hdr_append_version(args->hdr,args->argc,args->argv,"bcftools/csq"); + bcf_hdr_printf(args->hdr,"##INFO=",args->bcsq_tag, args->local_csq ? "Local" : "Haplotype-aware"); + if ( args->hdr_nsmpl ) + bcf_hdr_printf(args->hdr,"##FORMAT=",args->bcsq_tag); + bcf_hdr_write(args->out_fh, args->hdr); + } + if ( !args->quiet ) fprintf(stderr,"Calling...\n"); +} + +void destroy_data(args_t *args) +{ + regidx_destroy(args->idx_cds); + regidx_destroy(args->idx_utr); + regidx_destroy(args->idx_exon); + regidx_destroy(args->idx_tscript); + regitr_destroy(args->itr); + + khint_t k,i,j; + for (k=0; kinit.gid2gene); k++) + { + if ( !kh_exist(args->init.gid2gene, k) ) continue; + gf_gene_t *gene = (gf_gene_t*) kh_val(args->init.gid2gene, k); + free(gene->name); + free(gene); + } + kh_destroy(int2gene,args->init.gid2gene); + + if ( args->filter ) + filter_destroy(args->filter); + + khp_destroy(trhp,args->active_tr); + kh_destroy(pos2vbuf,args->pos2vbuf); + if ( args->smpl ) smpl_ilist_destroy(args->smpl); + int ret; + if ( args->out_fh ) + ret = hts_close(args->out_fh); + else + ret = fclose(args->out); + if ( ret ) error("Error: close failed .. %s\n", args->output_fname?args->output_fname:"stdout"); + for (i=0; ivcf_rbuf.m; i++) + { + vbuf_t *vbuf = args->vcf_buf[i]; + if ( !vbuf ) continue; + for (j=0; jm; j++) + { + if ( !vbuf->vrec[j] ) continue; + if ( vbuf->vrec[j]->line ) bcf_destroy(vbuf->vrec[j]->line); + free(vbuf->vrec[j]->smpl); + free(vbuf->vrec[j]->vcsq); + free(vbuf->vrec[j]); + } + free(vbuf->vrec); + free(vbuf); + } + free(args->vcf_buf); + free(args->rm_tr); + free(args->csq_buf); + free(args->hap->stack); + free(args->hap->sseq.s); + free(args->hap->tseq.s); + free(args->hap->tref.s); + free(args->hap); + fai_destroy(args->fai); + free(args->gt_arr); + free(args->str.s); + free(args->str2.s); + gff_id_destroy(&args->tscript_ids); +} + +/* + The splice_* functions are for consquences around splice sites: start,stop,splice_* + */ +#define SPLICE_VAR_REF 0 // ref: ACGT>ACGT, csq not applicable, skip completely +#define SPLICE_OUTSIDE 1 // splice acceptor or similar; csq set and is done, does not overlap the region +#define SPLICE_INSIDE 2 // overlaps coding region; csq can be set but coding prediction is needed +#define SPLICE_OVERLAP 3 // indel overlaps region boundary, csq set but could not determine csq +typedef struct +{ + tscript_t *tr; + struct { + int32_t pos, rlen, alen; + char *ref, *alt; + bcf1_t *rec; + } vcf; + uint16_t check_acceptor:1, // check distance from exon start (fwd) or end (rev) + check_start:1, // this is the first coding exon (relative to transcript orientation), check first (fwd) or last (rev) codon + check_stop:1, // this is the last coding exon (relative to transcript orientation), check last (fwd) or first (rev) codon + check_donor:1, // as with check_acceptor + check_region_beg:1, // do/don't check for splices at this end, eg. in the first or last exon + check_region_end:1, // + check_utr:1, // check splice sites (acceptor/donor/region_*) only if not in utr + set_refalt:1; // set kref,kalt, if set, check also for synonymous events + uint32_t csq; + int tbeg, tend; // number of trimmed bases from beg and end of ref,alt allele + uint32_t ref_beg, // ref coordinates with spurious bases removed, ACC>AC can become AC>A or CC>C, whichever gives + ref_end; // a more conservative csq (the first and last base in kref.s) + kstring_t kref, kalt; // trimmed alleles, set only with SPLICE_OLAP +} +splice_t; +void splice_init(splice_t *splice, bcf1_t *rec) +{ + memset(splice,0,sizeof(*splice)); + splice->vcf.rec = rec; + splice->vcf.pos = rec->pos; + splice->vcf.rlen = rec->rlen; + splice->vcf.ref = rec->d.allele[0]; +} +static inline void splice_build_hap(splice_t *splice, uint32_t beg, int len) +{ + // len>0 .. beg is the first base, del filled from right + // len<0 .. beg is the last base, del filled from left + + int rlen, alen, rbeg, abeg; // first base to include (ref coordinates) + if ( len<0 ) + { + rlen = alen = -len; + rbeg = beg - rlen + 1; + int dlen = splice->vcf.alen - splice->vcf.rlen; + if ( dlen<0 && beg < splice->ref_end ) // incomplete del, beg is in the middle + dlen += splice->ref_end - beg; + abeg = rbeg + dlen; + } + else + { + rbeg = abeg = beg; + rlen = alen = len; + // check for incomplete del as above?? + } + +#define XDBG 0 +#if XDBG +fprintf(stderr,"build_hap: rbeg=%d + %d abeg=%d \n",rbeg,rlen,abeg); +#endif + splice->kref.l = 0; + splice->kalt.l = 0; + + // add the part before vcf.ref, in the vcf.ref and after vcf.ref + int roff; // how many vcf.ref bases already used + if ( rbeg < splice->vcf.pos ) + { + assert( splice->tr->beg <= rbeg ); // this can be extended thanks to N_REF_PAD + kputsn(splice->tr->ref + N_REF_PAD + rbeg - splice->tr->beg, splice->vcf.pos - rbeg, &splice->kref); + roff = 0; + } + else + roff = rbeg - splice->vcf.pos; +#if XDBG +fprintf(stderr,"r1: %s roff=%d\n",splice->kref.s,roff); +#endif + + if ( roff < splice->vcf.rlen && splice->kref.l < rlen ) + { + int len = splice->vcf.rlen - roff; // len still available in vcf.ref + if ( len > rlen - splice->kref.l ) len = rlen - splice->kref.l; // how much of ref allele is still needed + kputsn(splice->vcf.ref + roff, len, &splice->kref); + } +#if XDBG +fprintf(stderr,"r2: %s\n",splice->kref.s); +#endif + + uint32_t end = splice->vcf.pos + splice->vcf.rlen; // position just after the ref allele + if ( splice->kref.l < rlen ) + { + if ( end + rlen - splice->kref.l - 1 > splice->tr->end ) // trim, the requested sequence is too long (could be extended, see N_REF_PAD) + rlen -= end + rlen - splice->kref.l - 1 - splice->tr->end; + if ( splice->kref.l < rlen ) + kputsn(splice->tr->ref + N_REF_PAD + end - splice->tr->beg, rlen - splice->kref.l, &splice->kref); + } +#if XDBG +fprintf(stderr,"r3: %s\n",splice->kref.s); +#endif + + + int aoff; + if ( abeg < splice->vcf.pos ) + { + assert( splice->tr->beg <= abeg ); + kputsn(splice->tr->ref + N_REF_PAD + abeg - splice->tr->beg, splice->vcf.pos - abeg, &splice->kalt); + aoff = 0; + } + else + aoff = abeg - splice->vcf.pos; +#if XDBG +fprintf(stderr,"a1: %s aoff=%d\n",splice->kalt.s,aoff); +#endif + + if ( aoff < splice->vcf.alen && splice->kalt.l < alen ) + { + int len = splice->vcf.alen - aoff; // len still available in vcf.alt + if ( len > alen - splice->kalt.l ) len = alen - splice->kalt.l; // how much of alt allele is still needed + kputsn(splice->vcf.alt + aoff, len, &splice->kalt); + aoff -= len; + } + if ( aoff < 0 ) aoff = 0; + else aoff--; +#if XDBG +fprintf(stderr,"a2: %s aoff=%d\n",splice->kalt.s,aoff); +#endif + + end = splice->vcf.pos + splice->vcf.rlen; // position just after the ref allele + if ( splice->kalt.l < alen ) + { + if ( end + alen + aoff - splice->kalt.l - 1 > splice->tr->end ) // trim, the requested sequence is too long + alen -= end + alen + aoff - splice->kalt.l - 1 - splice->tr->end; + if ( alen > 0 && alen > splice->kalt.l ) + kputsn(splice->tr->ref + aoff + N_REF_PAD + end - splice->tr->beg, alen - splice->kalt.l, &splice->kalt); + } +#if XDBG +fprintf(stderr,"a3: %s\n",splice->kalt.s); +fprintf(stderr," [%s]\n [%s]\n\n",splice->kref.s,splice->kalt.s); +#endif +} +void csq_stage(args_t *args, csq_t *csq, bcf1_t *rec); +static inline int csq_stage_utr(args_t *args, regitr_t *itr, bcf1_t *rec, uint32_t trid) +{ + while ( regitr_overlap(itr) ) + { + gf_utr_t *utr = regitr_payload(itr, gf_utr_t*); + tscript_t *tr = utr->tr; + if ( tr->id != trid ) continue; + csq_t csq; + memset(&csq, 0, sizeof(csq_t)); + csq.pos = rec->pos; + csq.type.type = utr->which==prime5 ? CSQ_UTR5 : CSQ_UTR3; + csq.type.biotype = tr->type; + csq.type.strand = tr->strand; + csq.type.trid = tr->id; + csq.type.gene = tr->gene->name; + csq_stage(args, &csq, rec); + return csq.type.type; + } + return 0; +} +static inline void csq_stage_splice(args_t *args, bcf1_t *rec, tscript_t *tr, uint32_t type) +{ +#if XDBG +fprintf(stderr,"csq_stage_splice %d: type=%d\n",rec->pos+1,type); +#endif + if ( !type ) return; + csq_t csq; + memset(&csq, 0, sizeof(csq_t)); + csq.pos = rec->pos; + csq.type.type = type; + csq.type.biotype = tr->type; + csq.type.strand = tr->strand; + csq.type.trid = tr->id; + csq.type.gene = tr->gene->name; + csq_stage(args, &csq, rec); +} +static inline int splice_csq_ins(args_t *args, splice_t *splice, uint32_t ex_beg, uint32_t ex_end) +{ + // coordinates that matter for consequences, eg AC>ACG trimmed to C>CG, 1bp + // before and after the inserted bases + if ( splice->tbeg || splice->vcf.ref[0]!=splice->vcf.alt[0] ) + { + splice->ref_beg = splice->vcf.pos + splice->tbeg - 1; + splice->ref_end = splice->vcf.pos + splice->vcf.rlen - splice->tend; + } + else + { + if ( splice->tend ) splice->tend--; + splice->ref_beg = splice->vcf.pos; + splice->ref_end = splice->vcf.pos + splice->vcf.rlen - splice->tend; + } +#if XDBG +fprintf(stderr,"ins: %s>%s .. ex=%d,%d beg,end=%d,%d tbeg,tend=%d,%d check_utr=%d start,stop,beg,end=%d,%d,%d,%d\n", splice->vcf.ref,splice->vcf.alt,ex_beg,ex_end,splice->ref_beg,splice->ref_end,splice->tbeg,splice->tend,splice->check_utr,splice->check_start,splice->check_stop,splice->check_region_beg,splice->check_region_end); +#endif + + int ret; + if ( splice->ref_beg >= ex_end ) // fully outside, beyond the exon + { + if ( splice->check_utr ) + { + regitr_t *itr = regitr_init(NULL); + const char *chr = bcf_seqname(args->hdr,splice->vcf.rec); + if ( regidx_overlap(args->idx_utr,chr,splice->ref_beg+1,splice->ref_beg+1, itr) ) // adjacent utr + { + ret = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id); + if ( ret!=0 ) + { + regitr_destroy(itr); + return SPLICE_OUTSIDE; // overlaps utr + } + } + regitr_destroy(itr); + } + if ( !splice->check_region_end ) return SPLICE_OUTSIDE; + char *ref = NULL, *alt = NULL; + if ( splice->set_refalt ) // seq identity is checked only when tr->ref is available + { + splice_build_hap(splice, ex_end+1, N_SPLICE_REGION_INTRON); + ref = splice->kref.s, alt = splice->kalt.s; + } + if ( splice->ref_beg < ex_end + N_SPLICE_REGION_INTRON && splice->ref_end > ex_end + N_SPLICE_DONOR ) + { + splice->csq |= CSQ_SPLICE_REGION; + if ( ref && !strncmp(ref,alt,N_SPLICE_REGION_INTRON) ) splice->csq |= CSQ_SYNONYMOUS_VARIANT; + } + if ( splice->ref_beg < ex_end + N_SPLICE_DONOR ) + { + if ( splice->check_donor && splice->tr->strand==STRAND_FWD ) splice->csq |= CSQ_SPLICE_DONOR; + if ( splice->check_acceptor && splice->tr->strand==STRAND_REV ) splice->csq |= CSQ_SPLICE_ACCEPTOR; + if ( ref && !strncmp(ref,alt,N_SPLICE_DONOR) ) splice->csq |= CSQ_SYNONYMOUS_VARIANT; + } + csq_stage_splice(args, splice->vcf.rec, splice->tr, splice->csq); + return SPLICE_OUTSIDE; + } + if ( splice->ref_end < ex_beg || (splice->ref_end == ex_beg && !splice->check_region_beg) ) // fully outside, before the exon + { + if ( splice->check_utr ) + { + regitr_t *itr = regitr_init(NULL); + const char *chr = bcf_seqname(args->hdr,splice->vcf.rec); + if ( regidx_overlap(args->idx_utr,chr,splice->ref_end-1,splice->ref_end-1, itr) ) // adjacent utr + { + ret = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id); + if ( ret!=0 ) + { + regitr_destroy(itr); + return SPLICE_OUTSIDE; // overlaps utr + } + } + regitr_destroy(itr); + } + if ( !splice->check_region_beg ) return SPLICE_OUTSIDE; + char *ref = NULL, *alt = NULL; + if ( splice->set_refalt ) // seq identity is checked only when tr->ref is available + { + splice_build_hap(splice, ex_beg - N_SPLICE_REGION_INTRON, N_SPLICE_REGION_INTRON); + ref = splice->kref.s, alt = splice->kalt.s; + } + if ( splice->ref_end > ex_beg - N_SPLICE_REGION_INTRON && splice->ref_beg < ex_beg - N_SPLICE_DONOR ) + { + splice->csq |= CSQ_SPLICE_REGION; + if ( ref && !strncmp(ref,alt,N_SPLICE_REGION_INTRON) ) splice->csq |= CSQ_SYNONYMOUS_VARIANT; + } + if ( splice->ref_end > ex_beg - N_SPLICE_DONOR ) + { + if ( splice->check_donor && splice->tr->strand==STRAND_REV ) splice->csq |= CSQ_SPLICE_DONOR; + if ( splice->check_acceptor && splice->tr->strand==STRAND_FWD ) splice->csq |= CSQ_SPLICE_ACCEPTOR; + if ( ref && !strncmp(ref+N_SPLICE_REGION_INTRON-N_SPLICE_DONOR,alt+N_SPLICE_REGION_INTRON-N_SPLICE_DONOR,N_SPLICE_DONOR) ) splice->csq |= CSQ_SYNONYMOUS_VARIANT; + } + csq_stage_splice(args, splice->vcf.rec, splice->tr, splice->csq); + return SPLICE_OUTSIDE; + } + // overlaps the exon or inside the exon + // possible todo: find better alignment for frameshifting variants? + if ( splice->ref_beg <= ex_beg + 2 ) // in the first 3bp + { + if ( splice->check_region_beg ) splice->csq |= CSQ_SPLICE_REGION; + if ( splice->tr->strand==STRAND_FWD ) { if ( splice->check_start ) splice->csq |= CSQ_START_LOST; } + else { if ( splice->check_stop ) splice->csq |= CSQ_STOP_LOST; } + } + if ( splice->ref_end > ex_end - 2 ) + { + if ( splice->check_region_end ) splice->csq |= CSQ_SPLICE_REGION; + if ( splice->tr->strand==STRAND_REV ) { if ( splice->check_start ) splice->csq |= CSQ_START_LOST; } + else { if ( splice->check_stop ) splice->csq |= CSQ_STOP_LOST; } + } + if ( splice->set_refalt ) + { + // Make sure the variant will not end up left aligned to avoid overlapping vcf records + // splice_build_hap(splice, splice->ref_beg, splice->vcf.alen - splice->tend - splice->tbeg + 1); + // splice->vcf.rlen -= splice->tbeg + splice->tend - 1; + // if ( splice->kref.l > splice->vcf.rlen ) { splice->kref.l = splice->vcf.rlen; splice->kref.s[splice->kref.l] = 0; } + if ( splice->ref_beg < splice->vcf.pos ) // this must have been caused by too much trimming from right + { + int dlen = splice->vcf.pos - splice->ref_beg; + assert( dlen==1 ); + splice->tbeg += dlen; + if ( splice->tbeg + splice->tend == splice->vcf.rlen ) splice->tend -= dlen; + splice->ref_beg = splice->vcf.pos; + } + if ( splice->ref_end==ex_beg ) splice->tend--; // prevent zero-length ref allele + splice_build_hap(splice, splice->ref_beg, splice->vcf.alen - splice->tend - splice->tbeg + 1); + splice->vcf.rlen -= splice->tbeg + splice->tend - 1; + if ( splice->kref.l > splice->vcf.rlen ) { splice->kref.l = splice->vcf.rlen; splice->kref.s[splice->kref.l] = 0; } + } + csq_stage_splice(args, splice->vcf.rec, splice->tr, splice->csq); + return SPLICE_INSIDE; +} + +static inline int splice_csq_del(args_t *args, splice_t *splice, uint32_t ex_beg, uint32_t ex_end) +{ + // coordinates that matter for consequences, eg AC>ACG trimmed to C>CG + splice->ref_beg = splice->vcf.pos + splice->tbeg - 1; // 1b before the deleted base + splice->ref_end = splice->vcf.pos + splice->vcf.rlen - splice->tend - 1; // the last deleted base + +#if XDBG +fprintf(stderr,"del: %s>%s .. ex=%d,%d beg,end=%d,%d tbeg,tend=%d,%d check_utr=%d start,stop,beg,end=%d,%d,%d,%d\n", splice->vcf.ref,splice->vcf.alt,ex_beg,ex_end,splice->ref_beg,splice->ref_end,splice->tbeg,splice->tend,splice->check_utr,splice->check_start,splice->check_stop,splice->check_region_beg,splice->check_region_end); +#endif + + if ( splice->ref_beg + 1 < ex_beg ) // the part before the exon; ref_beg is off by -1 + { + if ( splice->check_region_beg ) + { + int csq = 0; + if ( splice->check_utr ) + { + regitr_t *itr = regitr_init(NULL); + const char *chr = bcf_seqname(args->hdr,splice->vcf.rec); + if ( regidx_overlap(args->idx_utr,chr,splice->ref_beg,ex_beg-1, itr) ) // adjacent utr + csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id); + regitr_destroy(itr); + } + if ( !csq ) + { + char *ref = NULL, *alt = NULL; + if ( splice->set_refalt ) // seq identity is checked only when tr->ref is available + { + // filling from the left does not work for ENST00000341065/frame3.vcf + // CAG.GTGGCCAG CAG.GTGGCCAG + // CA-.--GGCCAG vs CAG.---GCCAG + // splice_build_hap(splice, ex_beg-1, -N_SPLICE_REGION_INTRON); + // + // filling from the right: + splice_build_hap(splice, ex_beg - N_SPLICE_REGION_INTRON, N_SPLICE_REGION_INTRON); + ref = splice->kref.s, alt = splice->kalt.s; + } + if ( splice->ref_end >= ex_beg - N_SPLICE_REGION_INTRON && splice->ref_beg < ex_beg - N_SPLICE_DONOR ) + { + splice->csq |= CSQ_SPLICE_REGION; + if ( ref && alt && !strncmp(ref,alt,N_SPLICE_REGION_INTRON) ) splice->csq |= CSQ_SYNONYMOUS_VARIANT; + } + if ( splice->ref_end >= ex_beg - N_SPLICE_DONOR ) + { + if ( splice->check_donor && splice->tr->strand==STRAND_REV ) splice->csq |= CSQ_SPLICE_DONOR; + if ( splice->check_acceptor && splice->tr->strand==STRAND_FWD ) splice->csq |= CSQ_SPLICE_ACCEPTOR; + if ( ref && alt && !strncmp(ref+N_SPLICE_REGION_INTRON-N_SPLICE_DONOR,alt+N_SPLICE_REGION_INTRON-N_SPLICE_DONOR,N_SPLICE_DONOR) ) splice->csq |= CSQ_SYNONYMOUS_VARIANT; + } + } + } + if ( splice->ref_end >= ex_beg ) + { + splice->tbeg = splice->ref_beg - splice->vcf.pos + 1; + splice->ref_beg = ex_beg - 1; + if ( splice->tbeg + splice->tend == splice->vcf.alen ) + { + // the deletion overlaps ex_beg and cannot be easily realigned to the right + if ( !splice->tend ) + { + splice->csq |= CSQ_CODING_SEQUENCE; + return SPLICE_OVERLAP; + } + splice->tend--; + } + } + } + if ( ex_end < splice->ref_end ) // the part after the exon + { + if ( splice->check_region_end ) + { + int csq = 0; + if ( splice->check_utr ) + { + regitr_t *itr = regitr_init(NULL); + const char *chr = bcf_seqname(args->hdr,splice->vcf.rec); + if ( regidx_overlap(args->idx_utr,chr,ex_end+1,splice->ref_end, itr) ) // adjacent utr + csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id); + regitr_destroy(itr); + } + if ( !csq ) + { + char *ref = NULL, *alt = NULL; + if ( splice->set_refalt ) // seq identity is checked only when tr->ref is available + { + splice_build_hap(splice, ex_end+1, N_SPLICE_REGION_INTRON); // ref,alt positioned at the first intron base + ref = splice->kref.s, alt = splice->kalt.s; + } + if ( splice->ref_beg < ex_end + N_SPLICE_REGION_INTRON && splice->ref_end > ex_end + N_SPLICE_DONOR ) + { + splice->csq |= CSQ_SPLICE_REGION; + if ( ref && alt && !strncmp(ref,alt,N_SPLICE_REGION_INTRON) ) splice->csq |= CSQ_SYNONYMOUS_VARIANT; + } + if ( splice->ref_beg < ex_end + N_SPLICE_DONOR ) + { + if ( splice->check_donor && splice->tr->strand==STRAND_FWD ) splice->csq |= CSQ_SPLICE_DONOR; + if ( splice->check_acceptor && splice->tr->strand==STRAND_REV ) splice->csq |= CSQ_SPLICE_ACCEPTOR; + if ( ref && alt && !strncmp(ref+N_SPLICE_REGION_INTRON-N_SPLICE_DONOR,alt+N_SPLICE_REGION_INTRON-N_SPLICE_DONOR,N_SPLICE_DONOR) ) splice->csq |= CSQ_SYNONYMOUS_VARIANT; + } + } + } + if ( splice->ref_beg < ex_end ) + { + splice->tend = splice->vcf.rlen - (splice->ref_end - splice->vcf.pos + 1); + splice->ref_end = ex_end; + } + } + if ( splice->ref_end < ex_beg || splice->ref_beg >= ex_end ) + { + csq_stage_splice(args, splice->vcf.rec, splice->tr, splice->csq); + return SPLICE_OUTSIDE; + } + + if ( splice->ref_beg < ex_beg + 2 ) // ref_beg is off by -1 + { + if ( splice->check_region_beg ) splice->csq |= CSQ_SPLICE_REGION; + if ( splice->tr->strand==STRAND_FWD ) { if ( splice->check_start ) splice->csq |= CSQ_START_LOST; } + else { if ( splice->check_stop ) splice->csq |= CSQ_STOP_LOST; } + } + if ( splice->ref_end > ex_end - 3 ) + { + if ( splice->check_region_end ) splice->csq |= CSQ_SPLICE_REGION; + if ( splice->tr->strand==STRAND_REV ) { if ( splice->check_start ) splice->csq |= CSQ_START_LOST; } + else { if ( splice->check_stop ) splice->csq |= CSQ_STOP_LOST; } + } + if ( splice->set_refalt ) + { + if ( splice->tbeg>0 ) splice->tbeg--; //why is this? + if ( splice->vcf.rlen > splice->tbeg + splice->tend && splice->vcf.alen > splice->tbeg + splice->tend ) + { + splice->vcf.rlen -= splice->tbeg + splice->tend; + splice->vcf.alen -= splice->tbeg + splice->tend; + } + splice->kref.l = 0; kputsn(splice->vcf.ref + splice->tbeg, splice->vcf.rlen, &splice->kref); + splice->kalt.l = 0; kputsn(splice->vcf.alt + splice->tbeg, splice->vcf.alen, &splice->kalt); + if ( (splice->ref_beg+1 < ex_beg && splice->ref_end >= ex_beg) || (splice->ref_beg+1 < ex_end && splice->ref_end >= ex_end) ) // ouch, ugly ENST00000409523/long-overlapping-del.vcf + { + splice->csq |= (splice->ref_end - splice->ref_beg + 1)%3 ? CSQ_FRAMESHIFT_VARIANT : CSQ_INFRAME_DELETION; + return SPLICE_OVERLAP; + } + } + csq_stage_splice(args, splice->vcf.rec, splice->tr, splice->csq); + return SPLICE_INSIDE; +} + +static inline int splice_csq_mnp(args_t *args, splice_t *splice, uint32_t ex_beg, uint32_t ex_end) +{ + // not a real variant, can be ignored: eg ACGT>ACGT + if ( splice->tbeg + splice->tend == splice->vcf.rlen ) return SPLICE_VAR_REF; + + splice->ref_beg = splice->vcf.pos + splice->tbeg; + splice->ref_end = splice->vcf.pos + splice->vcf.rlen - splice->tend - 1; + +#if XDBG +fprintf(stderr,"mnp: %s>%s .. ex=%d,%d beg,end=%d,%d tbeg,tend=%d,%d check_utr=%d start,stop,beg,end=%d,%d,%d,%d\n", splice->vcf.ref,splice->vcf.alt,ex_beg,ex_end,splice->ref_beg,splice->ref_end,splice->tbeg,splice->tend,splice->check_utr,splice->check_start,splice->check_stop,splice->check_region_beg,splice->check_region_end); +#endif + + if ( splice->ref_beg < ex_beg ) // the part before the exon + { + if ( splice->check_region_beg ) + { + int csq = 0; + if ( splice->check_utr ) + { + regitr_t *itr = regitr_init(NULL); + const char *chr = bcf_seqname(args->hdr,splice->vcf.rec); + if ( regidx_overlap(args->idx_utr,chr,splice->ref_beg,ex_beg-1, itr) ) // adjacent utr + csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id); + regitr_destroy(itr); + } + if ( !csq ) + { + if ( splice->ref_end >= ex_beg - N_SPLICE_REGION_INTRON && splice->ref_beg < ex_beg - N_SPLICE_DONOR ) + splice->csq |= CSQ_SPLICE_REGION; + if ( splice->ref_end >= ex_beg - N_SPLICE_DONOR ) + { + if ( splice->check_donor && splice->tr->strand==STRAND_REV ) splice->csq |= CSQ_SPLICE_DONOR; + if ( splice->check_acceptor && splice->tr->strand==STRAND_FWD ) splice->csq |= CSQ_SPLICE_ACCEPTOR; + } + } + } + if ( splice->ref_end >= ex_beg ) + { + splice->tbeg = splice->ref_beg - splice->vcf.pos; + splice->ref_beg = ex_beg; + } + } + if ( ex_end < splice->ref_end ) // the part after the exon + { + if ( splice->check_region_end ) + { + int csq = 0; + if ( splice->check_utr ) + { + regitr_t *itr = regitr_init(NULL); + const char *chr = bcf_seqname(args->hdr,splice->vcf.rec); + if ( regidx_overlap(args->idx_utr,chr,ex_end+1,splice->ref_end, itr) ) // adjacent utr + csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id); + regitr_destroy(itr); + } + if ( !csq ) + { + if ( splice->ref_beg <= ex_end + N_SPLICE_REGION_INTRON && splice->ref_end > ex_end + N_SPLICE_DONOR ) + splice->csq |= CSQ_SPLICE_REGION; + if ( splice->ref_beg <= ex_end + N_SPLICE_DONOR ) + { + if ( splice->check_donor && splice->tr->strand==STRAND_FWD ) splice->csq |= CSQ_SPLICE_DONOR; + if ( splice->check_acceptor && splice->tr->strand==STRAND_REV ) splice->csq |= CSQ_SPLICE_ACCEPTOR; + } + } + } + if ( splice->ref_beg <= ex_end ) + { + splice->tend = splice->vcf.rlen - (splice->ref_end - splice->vcf.pos + 1); + splice->ref_end = ex_end; + } + } + if ( splice->ref_end < ex_beg || splice->ref_beg > ex_end ) + { + csq_stage_splice(args, splice->vcf.rec, splice->tr, splice->csq); + return SPLICE_OUTSIDE; + } + + if ( splice->ref_beg < ex_beg + 3 ) + { + if ( splice->check_region_beg ) splice->csq |= CSQ_SPLICE_REGION; + if ( splice->tr->strand==STRAND_FWD ) { if ( splice->check_start ) splice->csq |= CSQ_START_LOST; } + else { if ( splice->check_stop ) splice->csq |= CSQ_STOP_LOST; } + } + if ( splice->ref_end > ex_end - 3 ) + { + if ( splice->check_region_end ) splice->csq |= CSQ_SPLICE_REGION; + if ( splice->tr->strand==STRAND_REV ) { if ( splice->check_start ) splice->csq |= CSQ_START_LOST; } + else { if ( splice->check_stop ) splice->csq |= CSQ_STOP_LOST; } + } + if ( splice->set_refalt ) + { + splice->vcf.rlen -= splice->tbeg + splice->tend; + splice->kref.l = 0; kputsn(splice->vcf.ref + splice->tbeg, splice->vcf.rlen, &splice->kref); + splice->kalt.l = 0; kputsn(splice->vcf.alt + splice->tbeg, splice->vcf.rlen, &splice->kalt); + } + csq_stage_splice(args, splice->vcf.rec, splice->tr, splice->csq); + return SPLICE_INSIDE; +} +static inline int splice_csq(args_t *args, splice_t *splice, uint32_t ex_beg, uint32_t ex_end) +{ + splice->csq = 0; + splice->vcf.alen = strlen(splice->vcf.alt); + + int rlen1 = splice->vcf.rlen - 1, alen1 = splice->vcf.alen - 1, i = 0; + splice->tbeg = 0, splice->tend = 0; + + // trim from the right, then from the left + while ( i<=rlen1 && i<=alen1 ) + { + if ( splice->vcf.ref[rlen1-i] != splice->vcf.alt[alen1-i] ) break; + i++; + } + splice->tend = i; + rlen1 -= i, alen1 -= i, i = 0; + while ( i<=rlen1 && i<=alen1 ) + { + if ( splice->vcf.ref[i] != splice->vcf.alt[i] ) break; + i++; + } + splice->tbeg = i; + + // The mnp, ins and del code was split into near-identical functions for clarity and debugging; + // possible todo: generalize once stable + if ( splice->vcf.rlen==splice->vcf.alen ) return splice_csq_mnp(args, splice, ex_beg, ex_end); + if ( splice->vcf.rlen < splice->vcf.alen ) return splice_csq_ins(args, splice, ex_beg, ex_end); + if ( splice->vcf.rlen > splice->vcf.alen ) return splice_csq_del(args, splice, ex_beg, ex_end); + + return 0; +} + +// return value: 0 added, 1 overlapping variant, 2 silent discard (intronic,alt=ref) +int hap_init(args_t *args, hap_node_t *parent, hap_node_t *child, gf_cds_t *cds, bcf1_t *rec, int ial) +{ + int i; + kstring_t str = {0,0,0}; + tscript_t *tr = cds->tr; + child->icds = cds->icds; // index of cds in the tscript's list of exons + + splice_t splice; + splice_init(&splice, rec); + splice.tr = tr; + splice.vcf.alt = rec->d.allele[ial]; + splice.check_acceptor = splice.check_donor = splice.set_refalt = splice.check_utr = 1; + if ( !(tr->trim & TRIM_5PRIME) ) + { + if ( tr->strand==STRAND_FWD ) { if ( child->icds==0 ) splice.check_start = 1; } + else { if ( child->icds==tr->ncds-1 ) splice.check_start = 1; } + } + if ( !(tr->trim & TRIM_3PRIME) ) + { + if ( tr->strand==STRAND_FWD ) { if ( child->icds==tr->ncds-1 ) splice.check_stop = 1; } + else { if ( child->icds==0 ) splice.check_stop = 1; } + } + if ( splice.check_start ) // do not check starts in incomplete CDS, defined as not starting with M + { + if ( tr->strand==STRAND_FWD ) { if ( dna2aa(tr->ref+N_REF_PAD+cds->beg-tr->beg) != 'M' ) splice.check_start = 0; } + else { if ( cdna2aa(tr->ref+N_REF_PAD+cds->beg-tr->beg+cds->len-3) != 'M' ) splice.check_start = 0; } + } + if ( child->icds!=0 ) splice.check_region_beg = 1; + if ( child->icds!=tr->ncds-1 ) splice.check_region_end = 1; + +#if XDBG +fprintf(stderr,"\n%d [%s][%s] check start:%d,stop:%d\n",splice.vcf.pos+1,splice.vcf.ref,splice.vcf.alt,splice.check_start,splice.check_stop); +#endif + int ret = splice_csq(args, &splice, cds->beg, cds->beg + cds->len - 1); +#if XDBG +fprintf(stderr,"cds splice_csq: %d [%s][%s] .. beg,end=%d %d, ret=%d, csq=%d\n\n",splice.vcf.pos+1,splice.kref.s,splice.kalt.s,splice.ref_beg+1,splice.ref_end+1,ret,splice.csq); +#endif + + if ( ret==SPLICE_VAR_REF ) return 2; // not a variant, eg REF=CA ALT=CA + if ( ret==SPLICE_OUTSIDE || ret==SPLICE_OVERLAP ) // not a coding csq + { + free(splice.kref.s); + free(splice.kalt.s); + + if ( !splice.csq ) return 2; // fully intronic, no csq + + // splice_region/acceptor/donor + child->seq = NULL; + child->sbeg = 0; + child->rbeg = rec->pos; + child->rlen = 0; + child->dlen = 0; + kputs(rec->d.allele[0],&str); + kputc('>',&str); + kputs(rec->d.allele[ial],&str); + child->var = str.s; + child->type = HAP_SSS; + child->csq = splice.csq; + child->prev = parent->type==HAP_SSS ? parent->prev : parent; + child->rec = rec; + return 0; + } + if ( splice.csq & CSQ_SYNONYMOUS_VARIANT ) splice.csq &= ~CSQ_SYNONYMOUS_VARIANT; // synonymous&splice,frame could become synonymous&frame,splice + + int dbeg = 0; + if ( splice.ref_beg < cds->beg ) + { + // The vcf record overlaps the exon boundary, but the variant itself + // should fit inside since we are here. This will need more work. + // #1475227917 + dbeg = cds->beg - splice.ref_beg; + splice.kref.l -= dbeg; + splice.ref_beg = cds->beg; + assert( dbeg <= splice.kalt.l ); + } + + if ( parent->type==HAP_SSS ) parent = parent->prev; + if ( parent->type==HAP_CDS ) + { + i = parent->icds; + if ( i!=cds->icds ) + { + // the variant is on a new exon, finish up the previous + int len = tr->cds[i]->len - parent->rbeg - parent->rlen + tr->cds[i]->beg; + if ( len > 0 ) + kputsn_(tr->ref + N_REF_PAD + parent->rbeg + parent->rlen - tr->beg, len, &str); + } + + // append any skipped non-variant exons + while ( ++i < cds->icds ) + kputsn_(tr->ref + N_REF_PAD + tr->cds[i]->beg - tr->beg, tr->cds[i]->len, &str); + + if ( parent->icds==child->icds ) + { + int len = splice.ref_beg - parent->rbeg - parent->rlen; + if ( len < 0 ) // overlapping variants + { + free(str.s); + return 1; + } + kputsn_(tr->ref + N_REF_PAD + parent->rbeg + parent->rlen - tr->beg, len, &str); + } + else + kputsn_(tr->ref + N_REF_PAD + cds->beg - tr->beg, splice.ref_beg - cds->beg, &str); + } + kputs(splice.kalt.s + dbeg, &str); + + child->seq = str.s; + child->sbeg = cds->pos + (splice.ref_beg - cds->beg); + child->rbeg = splice.ref_beg; + child->rlen = splice.kref.l; + child->type = HAP_CDS; + child->prev = parent; + child->rec = rec; + child->csq = splice.csq; + + // set vlen and the "ref>alt" string + { + int rlen = strlen(rec->d.allele[0]); + int alen = strlen(rec->d.allele[ial]); + child->dlen = alen - rlen; + child->var = (char*) malloc(rlen+alen+2); + memcpy(child->var,rec->d.allele[0],rlen); + child->var[rlen] = '>'; + memcpy(child->var+rlen+1,rec->d.allele[ial],alen); + child->var[rlen+alen+1] = 0; + } + + // yuck, the whole CDS is modified/deleted, not ready for this, todo. + if ( child->rbeg + child->rlen > cds->beg + cds->len ) + { + child->type = HAP_SSS; + if ( !child->csq ) child->csq |= CSQ_CODING_SEQUENCE; // hack, specifically for ENST00000390520/deletion-overlap.vcf + } + + free(splice.kref.s); + free(splice.kalt.s); + return 0; +} +void hap_destroy(hap_node_t *hap) +{ + int i; + for (i=0; inchild; i++) + if ( hap->child[i] ) hap_destroy(hap->child[i]); + for (i=0; imcsq_list; i++) free(hap->csq_list[i].type.vstr.s); + free(hap->csq_list); + free(hap->child); + free(hap->cur_child); + free(hap->seq); + free(hap->var); + free(hap); +} + + +/* + ref: spliced reference and its length (ref.l) + seq: part of the spliced query transcript on the reference strand to translate, its + length (seq.l) and the total length of the complete transcript (seq.m) + sbeg: seq offset within the spliced query transcript + rbeg: seq offset within ref, 0-based + rend: last base of seq within ref, plus one. If seq does not contain indels, it is rend=rbeg+seq->l + strand: coding strand - 0:rev, 1:fwd + tseq: translated sequence (aa) + fill: frameshift, fill until the end (strand=fwd) or from the start (strand=rev) + */ +void cds_translate(kstring_t *_ref, kstring_t *_seq, uint32_t sbeg, uint32_t rbeg, uint32_t rend, int strand, kstring_t *tseq, int fill) +{ +#if XDBG +fprintf(stderr,"translate: %d %d %d fill=%d seq.l=%d\n",sbeg,rbeg,rend,fill,(int)_seq->l); +#endif + char tmp[3], *codon, *end; + int i, len, npad; + + kstring_t ref = *_ref; + kstring_t seq = *_seq; + + tseq->l = 0; + if ( !seq.l ) + { + kputc('?', tseq); + return; + } + +#define DBG 0 +#if DBG + fprintf(stderr,"translate: sbeg,rbeg,rend=%d %d %d fill=%d seq.l=%d\n",sbeg,rbeg,rend,fill,(int)_seq->l); + fprintf(stderr," ref: l=%d %s\n", (int)ref.l,ref.s); + fprintf(stderr," seq: l=%d m=%d ", (int)seq.l,(int)seq.m); + for (i=0; i1 + fprintf(stderr," npad: %d\n",npad); +#endif + assert( npad<=rbeg ); + + for (i=0; i1 + fprintf(stderr,"\t i=%d\n", i); +#endif + if ( i==3 ) + { + kputc_(dna2aa(tmp), tseq); +#if DBG>1 + fprintf(stderr,"[1]%c%c%c\n",tmp[0],tmp[1],tmp[2]); +#endif + codon = seq.s + 3 - npad; // next codon + end = codon + len - 1 - (len % 3); // last position of a valid codon + while ( codon < end ) + { + kputc_(dna2aa(codon), tseq); +#if DBG>1 + fprintf(stderr,"[2]%c%c%c\n",codon[0],codon[1],codon[2]); +#endif + codon += 3; + } + end = seq.s + seq.l - 1; + for (i=0; codon+i<=end; i++) tmp[i] = codon[i]; + } + + // right padding + codon = ref.s + rend + N_REF_PAD; + if ( i>0 ) + { +#if DBG>1 + if(i==1)fprintf(stderr,"[3]%c\n",tmp[0]); + if(i==2)fprintf(stderr,"[3]%c%c\n",tmp[0],tmp[1]); +#endif + for (; i<3; i++) + { + tmp[i] = *codon; + codon++; + } + kputc_(dna2aa(tmp), tseq); +#if DBG>1 + fprintf(stderr,"[4]%c%c%c\n",tmp[0],tmp[1],tmp[2]); +#endif + } + if ( fill!=0 ) + { + end = ref.s + ref.l - N_REF_PAD; + while ( codon+3 <= end ) + { + kputc_(dna2aa(codon), tseq); +#if DBG>1 + fprintf(stderr,"[5]%c%c%c\t%c\n",codon[0],codon[1],codon[2],dna2aa(codon)); +#endif + codon += 3; + } + } + } + else // STRAND_REV + { + // right padding - number of bases to take from ref + npad = (seq.m - (sbeg + seq.l)) % 3; +#if DBG>1 + fprintf(stderr," npad: %d\n",npad); +#endif +if ( !(npad>=0 && sbeg+seq.l+npad<=seq.m) ) fprintf(stderr,"sbeg=%d seq.l=%d seq.m=%d\n",sbeg,(int)seq.l,(int)seq.m); + assert( npad>=0 && sbeg+seq.l+npad<=seq.m ); // todo: first codon on the rev strand + + if ( npad==2 ) + { + tmp[1] = ref.s[rend+N_REF_PAD]; + tmp[2] = ref.s[rend+N_REF_PAD+1]; + i = 0; + } + else if ( npad==1 ) + { + tmp[2] = ref.s[rend+N_REF_PAD]; + i = 1; + } + else + i = 2; + + end = seq.s + seq.l; + for (; i>=0 && end>seq.s; i--) tmp[i] = *(--end); +#if DBG>1 + fprintf(stderr,"\t i=%d\n", i); + if(i==1)fprintf(stderr,"[0] %c\n",tmp[2]); + if(i==0)fprintf(stderr,"[0] %c%c\n",tmp[1],tmp[2]); +#endif + if ( i==-1 ) + { +#if DBG>1 + fprintf(stderr,"[1]%c%c%c\t%c\n",tmp[0],tmp[1],tmp[2], cdna2aa(tmp)); +#endif + kputc_(cdna2aa(tmp), tseq); + codon = end - 3; + while ( codon >= seq.s ) + { + kputc_(cdna2aa(codon), tseq); +#if DBG>1 + fprintf(stderr,"[2]%c%c%c\t%c\n",codon[0],codon[1],codon[2], cdna2aa(codon)); +#endif + codon -= 3; + } + if ( seq.s-codon==2 ) + { + tmp[2] = seq.s[0]; + i = 1; + } + else if ( seq.s-codon==1 ) + { + tmp[1] = seq.s[0]; + tmp[2] = seq.s[1]; + i = 0; + } + else + i = -1; +#if DBG>1 + if(i==1)fprintf(stderr,"[3] %c\n",tmp[2]); + if(i==0)fprintf(stderr,"[3] %c%c\n",tmp[1],tmp[2]); +#endif + } + // left padding + end = ref.s + N_REF_PAD + rbeg; + if ( i>=0 ) + { + for (; i>=0 && end>=ref.s; i--) tmp[i] = *(--end); + kputc_(cdna2aa(tmp), tseq); +#if DBG>1 + fprintf(stderr,"[4]%c%c%c\t%c\n",tmp[0],tmp[1],tmp[2],cdna2aa(tmp)); +#endif + } + if ( fill!=0 ) + { + codon = end - 3; + while ( codon >= ref.s + N_REF_PAD ) + { + kputc_(cdna2aa(codon), tseq); +#if DBG>1 + fprintf(stderr,"[5]%c%c%c\t%c\n",codon[0],codon[1],codon[2],cdna2aa(codon)); +#endif + codon -= 3; + } + } + } + kputc_(0,tseq); tseq->l--; +#if DBG + fprintf(stderr," tseq: %s\n", tseq->s); +#endif +} + +void tscript_splice_ref(tscript_t *tr) +{ + int i, len = 0; + for (i=0; incds; i++) + len += tr->cds[i]->len; + + tr->nsref = len + 2*N_REF_PAD; + tr->sref = (char*) malloc(len + 1 + 2*N_REF_PAD); + len = 0; + + memcpy(tr->sref, tr->ref + tr->cds[0]->beg - tr->beg, N_REF_PAD); + len += N_REF_PAD; + + for (i=0; incds; i++) + { + memcpy(tr->sref + len, tr->ref + N_REF_PAD + tr->cds[i]->beg - tr->beg, tr->cds[i]->len); + len += tr->cds[i]->len; + } + memcpy(tr->sref + len, tr->ref + N_REF_PAD + tr->cds[tr->ncds-1]->beg - tr->beg, N_REF_PAD); + len += N_REF_PAD; + + tr->sref[len] = 0; +} + +// returns: 0 if consequence was added, 1 if it already exists or could not be added +int csq_push(args_t *args, csq_t *csq, bcf1_t *rec) +{ +#if XDBG +fprintf(stderr,"csq_push: %d .. %d\n",rec->pos+1,csq->type.type); +#endif + khint_t k = kh_get(pos2vbuf, args->pos2vbuf, (int)csq->pos); + vbuf_t *vbuf = (k == kh_end(args->pos2vbuf)) ? NULL : kh_val(args->pos2vbuf, k); + if ( !vbuf ) error("This should not happen. %s:%d %s\n",bcf_seqname(args->hdr,rec),csq->pos+1,csq->type.vstr); + + int i; + for (i=0; in; i++) + if ( vbuf->vrec[i]->line==rec ) break; + if ( i==vbuf->n ) error("This should not happen.. %s:%d %s\n", bcf_seqname(args->hdr,rec),csq->pos+1,csq->type.vstr); + vrec_t *vrec = vbuf->vrec[i]; + + // if the variant overlaps donor/acceptor and also splice region, report only donor/acceptor + if ( csq->type.type & CSQ_SPLICE_REGION && csq->type.type & (CSQ_SPLICE_DONOR|CSQ_SPLICE_ACCEPTOR) ) + csq->type.type &= ~CSQ_SPLICE_REGION; + + if ( csq->type.type & CSQ_PRINTED_UPSTREAM ) + { + for (i=0; invcsq; i++) + { + // Same as below, to avoid records like + // 3630 .. @3632,stop_lost|AL627309.1|ENST00000423372|protein_coding|- + // 3632 .. stop_lost|AL627309.1|ENST00000423372|protein_coding|-|260*>260G|3630T>A+3632A>C + if ( csq->type.type&CSQ_START_STOP && vrec->vcsq[i].type&CSQ_START_STOP ) + { + vrec->vcsq[i] = csq->type; + goto exit_duplicate; + } + if ( !(vrec->vcsq[i].type & CSQ_PRINTED_UPSTREAM) ) continue; + if ( csq->type.ref != vrec->vcsq[i].ref ) continue; + goto exit_duplicate; + } + } + else if ( csq->type.type & CSQ_COMPOUND ) + { + for (i=0; invcsq; i++) + { + if ( csq->type.trid != vrec->vcsq[i].trid && (csq->type.type|vrec->vcsq[i].type)&CSQ_PRN_TSCRIPT ) continue; + if ( csq->type.biotype != vrec->vcsq[i].biotype ) continue; + if ( csq->type.gene != vrec->vcsq[i].gene ) continue; + if ( csq->type.vstr.s || vrec->vcsq[i].vstr.s ) + { + // This is a bit hacky, but we want a simpler and more predictable output. The splice_csq() function + // can trigger stop/start events based on indel overlap, then another stop/start event can be triggered + // from add_csq() or test_cds_local() based on sequence comparison, and on output we could find two + // consequences: + // stop_lost|AL627309.1|ENST00000423372|protein_coding|- + // stop_lost&inframe_insertion|AL627309.1|ENST00000423372|protein_coding|-|260*>260CL|3630T>TAAA + if ( !csq->type.vstr.s || !vrec->vcsq[i].vstr.s ) + { + if ( csq->type.type&CSQ_START_STOP && vrec->vcsq[i].type&CSQ_START_STOP ) + { + vrec->vcsq[i].type |= csq->type.type; + + // remove stop_lost&synonymous if stop_retained set + if ( vrec->vcsq[i].type&CSQ_STOP_RETAINED ) + vrec->vcsq[i].type &= ~(CSQ_STOP_LOST|CSQ_SYNONYMOUS_VARIANT); + + if ( !vrec->vcsq[i].vstr.s ) vrec->vcsq[i].vstr = csq->type.vstr; + goto exit_duplicate; + } + continue; + } + if ( strcmp(csq->type.vstr.s,vrec->vcsq[i].vstr.s) ) continue; + } + vrec->vcsq[i].type |= csq->type.type; + goto exit_duplicate; + } + } + else + { + for (i=0; invcsq; i++) + { + if ( csq->type.trid != vrec->vcsq[i].trid && (csq->type.type|vrec->vcsq[i].type)&CSQ_PRN_TSCRIPT) continue; + if ( csq->type.biotype != vrec->vcsq[i].biotype ) continue; + if ( !(vrec->vcsq[i].type & CSQ_COMPOUND) ) + { + vrec->vcsq[i].type |= csq->type.type; + goto exit_duplicate; + } + if ( vrec->vcsq[i].type==(vrec->vcsq[i].type|csq->type.type) ) goto exit_duplicate; + } + } + // no such csq yet in this vcf record + csq->vrec = vrec; + csq->idx = i; + vrec->nvcsq++; + hts_expand0(vcsq_t, vrec->nvcsq, vrec->mvcsq, vrec->vcsq); + vrec->vcsq[i] = csq->type; + return 0; + +exit_duplicate: + csq->vrec = vrec; + csq->idx = i; + return 1; +} + +// soff .. position of the variant within the trimmed query transcript +// sbeg .. position of the variant within the query transcript +// rbeg .. position on the reference transcript (if there are no indels, then rbeg=send) +// rpos .. VCF position +#define node2soff(i) (hap->stack[i].slen - (hap->stack[i].node->rlen + hap->stack[i].node->dlen)) +#define node2sbeg(i) (hap->sbeg + node2soff(i)) +#define node2send(i) (hap->sbeg + hap->stack[i].slen) +#define node2rbeg(i) (hap->stack[i].node->sbeg) +#define node2rend(i) (hap->stack[i].node->sbeg + hap->stack[i].node->rlen) +#define node2rpos(i) (hap->stack[i].node->rec->pos) + +void kput_vcsq(args_t *args, vcsq_t *csq, kstring_t *str) +{ + // Remove start/stop from incomplete CDS, but only if there is another + // consequence as something must be reported + if ( csq->type & CSQ_INCOMPLETE_CDS && (csq->type & ~(CSQ_START_STOP|CSQ_INCOMPLETE_CDS|CSQ_UPSTREAM_STOP)) ) csq->type &= ~(CSQ_START_STOP|CSQ_INCOMPLETE_CDS); + + // Remove missense from start/stops + if ( csq->type & CSQ_START_STOP && csq->type & CSQ_MISSENSE_VARIANT ) csq->type &= ~CSQ_MISSENSE_VARIANT; + + if ( csq->type & CSQ_PRINTED_UPSTREAM && csq->ref ) + { + kputc_('@',str); + kputw(csq->ref->pos+1, str); + return; + } + if ( csq->type & CSQ_UPSTREAM_STOP ) + kputc_('*',str); + + int i, n = sizeof(csq_strings)/sizeof(char*); + for (i=1; itype&(1<type&(1<gene ) kputs(csq->gene , str); + + kputc_('|', str); + if ( csq->type & CSQ_PRN_TSCRIPT ) kputs(args->tscript_ids.str[csq->trid], str); + + kputc_('|', str); + kputs(gf_type2gff_string(csq->biotype), str); + + if ( CSQ_PRN_STRAND(csq->type) || csq->vstr.l ) + kputs(csq->strand==STRAND_FWD ? "|+" : "|-", str); + + if ( csq->vstr.l ) + kputs(csq->vstr.s, str); +} + +void hap_add_csq(args_t *args, hap_t *hap, hap_node_t *node, int tlen, int ibeg, int iend, int dlen, int indel) +{ + int i; + tscript_t *tr = hap->tr; + int ref_node = tr->strand==STRAND_FWD ? ibeg : iend; + + int icsq = node->ncsq_list++; + hts_expand0(csq_t,node->ncsq_list,node->mcsq_list,node->csq_list); + csq_t *csq = &node->csq_list[icsq]; + csq->pos = hap->stack[ref_node].node->rec->pos; + csq->type.trid = tr->id; + csq->type.gene = tr->gene->name; + csq->type.strand = tr->strand; + csq->type.biotype = tr->type; + + // only now we see the translated sequence and can determine if the stop/start changes are real + int rm_csq = 0; + csq->type.type = 0; + for (i=ibeg; i<=iend; i++) + csq->type.type |= hap->stack[i].node->csq & CSQ_COMPOUND; + if ( dlen==0 && indel ) csq->type.type |= CSQ_INFRAME_ALTERING; + + int has_upstream_stop = hap->upstream_stop; + if ( hap->stack[ibeg].node->type != HAP_SSS ) + { + // check for truncating stops + for (i=0; itref.l; i++) + if ( hap->tref.s[i]=='*' ) break; + if ( i!=hap->tref.l ) + { + hap->tref.l = i+1; + hap->tref.s[i+1] = 0; + } + for (i=0; itseq.l; i++) + if ( hap->tseq.s[i]=='*' ) break; + if ( i!=hap->tseq.l ) + { + hap->tseq.l = i+1; + hap->tseq.s[i+1] = 0; + hap->upstream_stop = 1; + } + if ( csq->type.type & CSQ_STOP_LOST ) + { + if ( hap->tref.s[hap->tref.l-1]=='*' && hap->tref.s[hap->tref.l-1] == hap->tseq.s[hap->tseq.l-1] ) + { + rm_csq |= CSQ_STOP_LOST; + csq->type.type |= CSQ_STOP_RETAINED; + } + else if ( hap->tref.s[hap->tref.l-1]!='*' ) + { + // This is CDS 3' incomplete ENSG00000173376/synon.vcf, can also be missense + // We observe in real data a change to a stop, ENST00000528237/retained-stop-incomplete-cds.vcf + if ( hap->tseq.s[hap->tseq.l-1] == '*' ) + { + rm_csq |= CSQ_STOP_GAINED; + csq->type.type |= CSQ_STOP_RETAINED; + } + else + csq->type.type |= CSQ_INCOMPLETE_CDS; + } + } + if ( csq->type.type & CSQ_START_LOST && hap->tref.s[0]!='M' ) + { + rm_csq |= CSQ_START_LOST; + csq->type.type &= ~CSQ_START_LOST; + } + if ( dlen!=0 ) + { + if ( dlen%3 ) + csq->type.type |= CSQ_FRAMESHIFT_VARIANT; + else if ( dlen<0 ) + csq->type.type |= CSQ_INFRAME_DELETION; + else + csq->type.type |= CSQ_INFRAME_INSERTION; + } + else + { + for (i=0; itref.l; i++) + if ( hap->tref.s[i] != hap->tseq.s[i] ) break; + if ( i==hap->tref.l ) + csq->type.type |= CSQ_SYNONYMOUS_VARIANT; + else if ( hap->tref.s[i] == '*' ) + csq->type.type |= CSQ_STOP_LOST; + else if ( hap->tseq.s[i] == '*' ) + csq->type.type |= CSQ_STOP_GAINED; + else + csq->type.type |= CSQ_MISSENSE_VARIANT; + } + } + if ( has_upstream_stop ) csq->type.type |= CSQ_UPSTREAM_STOP; + csq->type.type &= ~rm_csq; + + if ( hap->stack[ibeg].node->type == HAP_SSS ) + { + node->csq_list[icsq].type.type |= hap->stack[ibeg].node->csq & ~rm_csq; + node->csq_list[icsq].type.ref = hap->stack[ibeg].node->rec; + node->csq_list[icsq].type.biotype = tr->type; + csq_push(args, node->csq_list+icsq, hap->stack[ibeg].node->rec); + return; + } + + kstring_t str = node->csq_list[icsq].type.vstr; + str.l = 0; + + // create the aa variant string + int aa_rbeg = tr->strand==STRAND_FWD ? node2rbeg(ibeg)/3+1 : (hap->tr->nsref - 2*N_REF_PAD - node2rend(iend))/3+1; + int aa_sbeg = tr->strand==STRAND_FWD ? node2sbeg(ibeg)/3+1 : (tlen - node2send(iend))/3+1; + kputc_('|', &str); + kputw(aa_rbeg, &str); + kputs(hap->tref.s, &str); + if ( !(csq->type.type & CSQ_SYNONYMOUS_VARIANT) ) + { + kputc_('>', &str); + kputw(aa_sbeg, &str); + kputs(hap->tseq.s, &str); + } + kputc_('|', &str); + + // create the dna variant string and, in case of combined variants, + // insert silent CSQ_PRINTED_UPSTREAM variants + for (i=ibeg; i<=iend; i++) + { + if ( i>ibeg ) kputc_('+', &str); + kputw(node2rpos(i)+1, &str); + kputs(hap->stack[i].node->var, &str); + } + node->csq_list[icsq].type.vstr = str; + csq_push(args, node->csq_list+icsq, hap->stack[ref_node].node->rec); + + for (i=ibeg; i<=iend; i++) + { + // csq are printed at one position only for combined variants, the rest is + // silent and references the first + if ( hap->stack[i].node->csq & ~CSQ_COMPOUND ) + { + node->ncsq_list++; + hts_expand0(csq_t,node->ncsq_list,node->mcsq_list,node->csq_list); + csq_t *tmp_csq = &node->csq_list[node->ncsq_list - 1]; + tmp_csq->pos = hap->stack[i].node->rec->pos; + tmp_csq->type.trid = tr->id; + tmp_csq->type.gene = tr->gene->name; + tmp_csq->type.strand = tr->strand; + tmp_csq->type.type = hap->stack[i].node->csq & ~CSQ_COMPOUND & ~rm_csq; + tmp_csq->type.biotype = tr->type; + tmp_csq->type.vstr.l = 0; + kputs(str.s,&tmp_csq->type.vstr); + csq_push(args, tmp_csq, hap->stack[i].node->rec); + } + if ( i!=ref_node && (node->csq_list[icsq].type.type & CSQ_COMPOUND || !(hap->stack[i].node->csq & ~CSQ_COMPOUND)) ) + { + node->ncsq_list++; + hts_expand0(csq_t,node->ncsq_list,node->mcsq_list,node->csq_list); + csq_t *tmp_csq = &node->csq_list[node->ncsq_list - 1]; + tmp_csq->pos = hap->stack[i].node->rec->pos; + tmp_csq->type.trid = tr->id; + tmp_csq->type.gene = tr->gene->name; + tmp_csq->type.strand = tr->strand; + tmp_csq->type.type = CSQ_PRINTED_UPSTREAM | hap->stack[i].node->csq; + tmp_csq->type.biotype = tr->type; + tmp_csq->type.ref = hap->stack[ref_node].node->rec; + tmp_csq->type.vstr.l = 0; + csq_push(args, tmp_csq, hap->stack[i].node->rec); + } + } +} + +void hap_finalize(args_t *args, hap_t *hap) +{ + tscript_t *tr = hap->tr; + if ( !tr->sref ) + tscript_splice_ref(tr); + + kstring_t sref; + sref.s = tr->sref; + sref.l = tr->nsref; + sref.m = sref.l; + + int istack = 0; + hts_expand(hstack_t,1,hap->mstack,hap->stack); + + hap->sseq.l = 0; + hap->tseq.l = 0; + hap->stack[0].node = tr->root; + hap->stack[0].ichild = -1; + hap->stack[0].slen = 0; + hap->stack[0].dlen = 0; + + while ( istack>=0 ) + { + hstack_t *stack = &hap->stack[istack]; + hap_node_t *node = hap->stack[istack].node; + while ( ++hap->stack[istack].ichild < node->nchild ) + { + if ( node->child[stack->ichild] ) break; + } + if ( stack->ichild == node->nchild ) { istack--; continue; } + + node = node->child[stack->ichild]; + + istack++; + hts_expand(hstack_t,istack+1,hap->mstack,hap->stack); + stack = &hap->stack[istack-1]; + + hap->stack[istack].node = node; + hap->stack[istack].ichild = -1; + + hap->sseq.l = stack->slen; + if ( node->type==HAP_CDS ) kputs(node->seq, &hap->sseq); + hap->stack[istack].slen = hap->sseq.l; + hap->stack[istack].dlen = hap->stack[istack-1].dlen + node->dlen; + + if ( !node->nend ) continue; // not a leaf node + + // The spliced sequence has been built for the current haplotype and stored + // in hap->sseq. Now we break it and output as independent parts + + kstring_t sseq; + sseq.m = sref.m - 2*N_REF_PAD + hap->stack[istack].dlen; // total length of the spliced query transcript + hap->upstream_stop = 0; + + int i = 1, dlen = 0, ibeg, indel = 0; + while ( istack[i].node->type == HAP_SSS ) i++; + hap->sbeg = hap->stack[i].node->sbeg; + + if ( tr->strand==STRAND_FWD ) + { + i = 0, ibeg = -1; + while ( ++i <= istack ) + { + if ( hap->stack[i].node->type == HAP_SSS ) + { + // start/stop/splice site overlap: don't know how to build the haplotypes correctly, skipping + hap_add_csq(args,hap,node,0,i,i,0,0); + continue; + } + dlen += hap->stack[i].node->dlen; + if ( hap->stack[i].node->dlen ) indel = 1; + if ( isseq.l ) + { + sseq.l = hap->stack[i].slen - ioff; + sseq.s = hap->sseq.s + ioff; + } + else // splice site overlap, see #1475227917 + sseq.l = fill = 0; + cds_translate(&sref, &sseq, icur,rbeg,rend, tr->strand, &hap->tseq, fill); + + // ref + sseq.l = node2rend(i) - rbeg; + sseq.s = sref.s + N_REF_PAD + rbeg; + sseq.m = sref.m - 2*N_REF_PAD; + cds_translate(&sref, &sseq, rbeg,rbeg,rend, tr->strand, &hap->tref, fill); + sseq.m = sref.m - 2*N_REF_PAD + hap->stack[istack].dlen; + + hap_add_csq(args,hap,node,0, ibeg,i,dlen,indel); + ibeg = -1; + dlen = 0; + indel = 0; + } + } + else + { + i = istack + 1, ibeg = -1; + while ( --i > 0 ) + { + if ( hap->stack[i].node->type == HAP_SSS ) + { + hap_add_csq(args,hap,node,0,i,i,0,0); + continue; + } + dlen += hap->stack[i].node->dlen; + if ( hap->stack[i].node->dlen ) indel = 1; + if ( i>1 && hap->stack[i-1].node->type != HAP_SSS ) + { + if ( dlen%3 ) + { + if ( ibeg==-1 ) ibeg = i; + continue; + } + int icur = sseq.m - 1 - node2sbeg(i); + int inext = sseq.m - 1 - node2sbeg(i-1); + if ( icur/3 == inext/3 ) + { + if ( ibeg==-1 ) ibeg = i; + continue; + } + } + if ( ibeg<0 ) ibeg = i; + int ioff = node2soff(i); + int icur = node2sbeg(i); + int rbeg = node2rbeg(i); + int rend = node2rend(ibeg); + int fill = dlen%3; + + // alt + if ( hap->sseq.l ) + { + sseq.l = hap->stack[ibeg].slen - ioff; + sseq.s = hap->sseq.s + ioff; + } + else // splice site overlap, see #1475227917 + sseq.l = fill = 0; + cds_translate(&sref, &sseq, icur,rbeg,rend, tr->strand, &hap->tseq, fill); + + // ref + sseq.l = node2rend(ibeg) - rbeg; + sseq.s = sref.s + N_REF_PAD + rbeg; + sseq.m = sref.m - 2*N_REF_PAD; + cds_translate(&sref, &sseq, rbeg,rbeg,rend, tr->strand, &hap->tref, fill); + sseq.m = sref.m - 2*N_REF_PAD + hap->stack[istack].dlen; + + hap_add_csq(args,hap,node,sseq.m, i,ibeg,dlen,indel); + ibeg = -1; + dlen = 0; + indel = 0; + } + } + } +} + +static inline void csq_print_text(args_t *args, csq_t *csq, int ismpl, int ihap) +{ + if ( csq->type.type & CSQ_PRINTED_UPSTREAM ) return; + + char *smpl = ismpl >= 0 ? args->hdr->samples[ismpl] : "-"; + const char *chr = bcf_hdr_id2name(args->hdr,args->rid); + + fprintf(args->out,"CSQ\t%s\t", smpl); + if ( ihap>0 ) + fprintf(args->out,"%d", ihap); + else + fprintf(args->out,"-"); + + args->str.l = 0; + kput_vcsq(args, &csq->type, &args->str); + fprintf(args->out,"\t%s\t%d\t%s\n",chr,csq->pos+1,args->str.s); +} +static inline void hap_print_text(args_t *args, tscript_t *tr, int ismpl, int ihap, hap_node_t *node) +{ + if ( !node || !node->ncsq_list ) return; + + char *smpl = ismpl >= 0 ? args->hdr->samples[ismpl] : "-"; + const char *chr = bcf_hdr_id2name(args->hdr,args->rid); + + int i; + for (i=0; incsq_list; i++) + { + csq_t *csq = node->csq_list + i; + if ( csq->type.type & CSQ_PRINTED_UPSTREAM ) continue; + assert( csq->type.vstr.l ); + + fprintf(args->out,"CSQ\t%s\t", smpl); + if ( ihap>0 ) + fprintf(args->out,"%d", ihap); + else + fprintf(args->out,"-"); + + args->str.l = 0; + kput_vcsq(args, &csq->type, &args->str); + fprintf(args->out,"\t%s\t%d\t%s\n",chr,csq->pos+1,args->str.s); + } +} + +static inline void hap_stage_vcf(args_t *args, tscript_t *tr, int ismpl, int ihap, hap_node_t *node) +{ + if ( !node || !node->ncsq_list || ismpl<0 ) return; + + int i; + for (i=0; incsq_list; i++) + { + csq_t *csq = node->csq_list + i; + vrec_t *vrec = csq->vrec; + int icsq = 2*csq->idx + ihap; + if ( icsq >= args->ncsq_max ) // more than ncsq_max consequences, so can't fit it in FMT + { + int print_warning = 1; + if ( args->quiet ) + { + if ( args->quiet > 1 || args->ncsq_small_warned ) print_warning = 0; + args->ncsq_small_warned = 1; + } + if ( print_warning ) + { + fprintf(stderr,"Warning: --ncsq %d is too small to annotate %s at %s:%d with %d-th csq\n", + args->ncsq_max/2,args->hdr->samples[ismpl],bcf_hdr_id2name(args->hdr,args->rid),vrec->line->pos+1,csq->idx+1); + if ( args->quiet ) fprintf(stderr,"(This warning is printed only once)\n"); + } + break; + } + if ( vrec->nfmt < 1 + icsq/32 ) vrec->nfmt = 1 + icsq/32; + vrec->smpl[ismpl*args->nfmt_bcsq + icsq/32] |= 1 << (icsq % 32); + } +} + +void hap_flush(args_t *args, uint32_t pos) +{ + int i,j; + tr_heap_t *heap = args->active_tr; + + while ( heap->ndat && heap->dat[0]->end<=pos ) + { + tscript_t *tr = heap->dat[0]; + khp_delete(trhp, heap); + + args->hap->tr = tr; + if ( tr->root && tr->root->nchild ) // normal, non-localized calling + { + hap_finalize(args, args->hap); + + if ( args->output_type==FT_TAB_TEXT ) // plain text output, not a vcf + { + if ( args->phase==PHASE_DROP_GT ) + hap_print_text(args, tr, -1,0, tr->hap[0]); + else + { + for (i=0; ismpl->n; i++) + { + for (j=0; j<2; j++) + hap_print_text(args, tr, args->smpl->idx[i],j+1, tr->hap[i*2+j]); + } + } + } + else if ( args->phase!=PHASE_DROP_GT ) + { + for (i=0; ismpl->n; i++) + { + for (j=0; j<2; j++) + hap_stage_vcf(args, tr, args->smpl->idx[i],j, tr->hap[i*2+j]); + } + } + } + + // mark the transcript for deletion. Cannot delete it immediately because + // by-position VCF output will need them when flushed by vcf_buf_push + args->nrm_tr++; + hts_expand(tscript_t*,args->nrm_tr,args->mrm_tr,args->rm_tr); + args->rm_tr[args->nrm_tr-1] = tr; + } +} + +#define SWAP(type_t, a, b) { type_t t = a; a = b; b = t; } + +void vbuf_push(args_t *args, bcf1_t **rec_ptr) +{ + int i; + + assert(rec_ptr); + bcf1_t *rec = *rec_ptr; + + // check for duplicate records + i = args->vcf_rbuf.n ? rbuf_last(&args->vcf_rbuf) : -1; + if ( i<0 || args->vcf_buf[i]->vrec[0]->line->pos!=rec->pos ) + { + // vcf record with a new pos + rbuf_expand0(&args->vcf_rbuf, vbuf_t*, args->vcf_rbuf.n+1, args->vcf_buf); + i = rbuf_append(&args->vcf_rbuf); + if ( !args->vcf_buf[i] ) args->vcf_buf[i] = (vbuf_t*) calloc(1,sizeof(vbuf_t)); + args->vcf_buf[i]->n = 0; + } + vbuf_t *vbuf = args->vcf_buf[i]; + vbuf->n++; + hts_expand0(vrec_t*, vbuf->n, vbuf->m, vbuf->vrec); + if ( !vbuf->vrec[vbuf->n - 1] ) + vbuf->vrec[vbuf->n - 1] = (vrec_t*) calloc(1,sizeof(vrec_t)); + + vrec_t *vrec = vbuf->vrec[vbuf->n - 1]; + if ( args->phase!=PHASE_DROP_GT && args->smpl->n ) + { + if ( !vrec->smpl ) vrec->smpl = (uint32_t*) calloc(args->hdr_nsmpl,sizeof(*vrec->smpl) * args->nfmt_bcsq); + else memset(vrec->smpl,0,args->hdr_nsmpl*sizeof(*vrec->smpl) * args->nfmt_bcsq); + } + if ( !vrec->line ) vrec->line = bcf_init1(); + SWAP(bcf1_t*, (*rec_ptr), vrec->line); + + int ret; + khint_t k = kh_put(pos2vbuf, args->pos2vbuf, (int)rec->pos, &ret); + kh_val(args->pos2vbuf,k) = vbuf; +} + +void vbuf_flush(args_t *args) +{ + if ( args->active_tr->ndat ) return; // cannot output buffered VCF lines (args.vbuf) until all active transcripts are gone + + int i,j; + while ( (i=rbuf_shift(&args->vcf_rbuf))>=0 ) + { + vbuf_t *vbuf = args->vcf_buf[i]; + for (i=0; in; i++) + { + vrec_t *vrec = vbuf->vrec[i]; + if ( !args->out_fh ) // not a VCF output + { + vrec->nvcsq = 0; + continue; + } + if ( !vrec->nvcsq ) + { + bcf_write(args->out_fh, args->hdr, vrec->line); + continue; + } + + args->str.l = 0; + kput_vcsq(args, &vrec->vcsq[0], &args->str); + for (j=1; jnvcsq; j++) + { + kputc_(',', &args->str); + kput_vcsq(args, &vrec->vcsq[j], &args->str); + } + bcf_update_info_string(args->hdr, vrec->line, args->bcsq_tag, args->str.s); + if ( args->hdr_nsmpl ) + { + if ( vrec->nfmt < args->nfmt_bcsq ) + for (j=1; jhdr_nsmpl; j++) memcpy(vrec->smpl+j*vrec->nfmt, vrec->smpl+j*args->nfmt_bcsq, vrec->nfmt*sizeof(*vrec->smpl)); + bcf_update_format_int32(args->hdr, vrec->line, args->bcsq_tag, vrec->smpl, args->hdr_nsmpl*vrec->nfmt); + } + vrec->nvcsq = 0; + bcf_write(args->out_fh, args->hdr, vrec->line); + } + if ( vbuf->n ) + { + khint_t k = kh_get(pos2vbuf, args->pos2vbuf, vbuf->vrec[0]->line->pos); + if ( k != kh_end(args->pos2vbuf) ) kh_del(pos2vbuf, args->pos2vbuf, k); + } + vbuf->n = 0; + } + + for (i=0; inrm_tr; i++) + { + tscript_t *tr = args->rm_tr[i]; + if ( tr->root ) hap_destroy(tr->root); + tr->root = NULL; + free(tr->hap); + free(tr->ref); + free(tr->sref); + } + args->nrm_tr = 0; + args->ncsq_buf = 0; +} + +void tscript_init_ref(args_t *args, tscript_t *tr, const char *chr) +{ + int i, len; + int pad_beg = tr->beg >= N_REF_PAD ? N_REF_PAD : tr->beg; + + tr->ref = faidx_fetch_seq(args->fai, chr, tr->beg - pad_beg, tr->end + N_REF_PAD, &len); + if ( !tr->ref ) + error("faidx_fetch_seq failed %s:%d-%d\n", chr,tr->beg+1,tr->end+1); + + int pad_end = len - (tr->end - tr->beg + 1 + pad_beg); + if ( pad_beg + pad_end != 2*N_REF_PAD ) + { + char *ref = (char*) malloc(tr->end - tr->beg + 1 + 2*N_REF_PAD); + for (i=0; i < N_REF_PAD - pad_beg; i++) ref[i] = 'N'; + memcpy(ref+i, tr->ref, len); + for (i=0; i < N_REF_PAD - pad_end; i++) ref[i+len] = 'N'; + free(tr->ref); + tr->ref = ref; + } +} + +static void sanity_check_ref(args_t *args, tscript_t *tr, bcf1_t *rec) +{ + char *ref = tr->ref + (rec->pos + N_REF_PAD >= tr->beg ? rec->pos - tr->beg + N_REF_PAD : 0); + char *vcf = rec->d.allele[0] + (rec->pos + N_REF_PAD >= tr->beg ? 0 : tr->beg - N_REF_PAD - rec->pos); + assert( vcf - rec->d.allele[0] < strlen(rec->d.allele[0]) ); + while ( *ref && *vcf ) + { + if ( *ref!=*vcf && toupper(*ref)!=toupper(*vcf) ) + error("Error: the fasta reference does not match the VCF REF allele at %s:%d .. %s\n", bcf_seqname(args->hdr,rec),rec->pos+1,rec->d.allele[0]); + ref++; + vcf++; + } +} + +int test_cds_local(args_t *args, bcf1_t *rec) +{ + int i,j, ret = 0; + const char *chr = bcf_seqname(args->hdr,rec); + // note that the off-by-one extension of rlen is deliberate to account for insertions + if ( !regidx_overlap(args->idx_cds,chr,rec->pos,rec->pos+rec->rlen, args->itr) ) return 0; + + // structures to fake the normal test_cds machinery + hap_node_t root, node; + root.type = HAP_ROOT; + kstring_t *tref = &args->hap->tref, *tseq = &args->hap->tseq; + + while ( regitr_overlap(args->itr) ) + { + gf_cds_t *cds = regitr_payload(args->itr,gf_cds_t*); + tscript_t *tr = cds->tr; + if ( !GF_is_coding(tr->type) ) continue; + ret = 1; + + if ( !tr->ref ) + { + tscript_init_ref(args, tr, chr); + tscript_splice_ref(tr); + khp_insert(trhp, args->active_tr, &tr); // only to clean the reference afterwards + } + + sanity_check_ref(args, tr, rec); + + kstring_t sref; + sref.s = tr->sref; + sref.l = tr->nsref; + sref.m = sref.l; + + for (i=1; in_allele; i++) + { + if ( hap_init(args, &root, &node, cds, rec, i)!=0 ) continue; + + csq_t csq; + memset(&csq, 0, sizeof(csq_t)); + csq.pos = rec->pos; + csq.type.biotype = tr->type; + csq.type.strand = tr->strand; + csq.type.trid = tr->id; + csq.type.gene = tr->gene->name; + + int csq_type = node.csq; + + // code repetition: it would be nice to reuse the code from hap_add_csq, needs have refactoring though + if ( node.type == HAP_SSS ) + { + csq.type.type = csq_type; + csq_stage(args, &csq, rec); + } + else + { + kstring_t sseq; + sseq.m = sref.m - 2*N_REF_PAD + node.dlen; + sseq.s = node.seq; + int alen = sseq.l = strlen(sseq.s); + int fill = node.dlen%3 && alen ? 1 : 0; // see #1475227917 + cds_translate(&sref, &sseq, node.sbeg,node.sbeg,node.sbeg+node.rlen, tr->strand, tseq, fill); + + sseq.m = sref.m - 2*N_REF_PAD; + sseq.s = sref.s + N_REF_PAD + node.sbeg; + sseq.l = node.rlen; + cds_translate(&sref, &sseq, node.sbeg,node.sbeg,node.sbeg+node.rlen, tr->strand, tref, fill); + + // check for truncating stops + for (j=0; jl; j++) + if ( tref->s[j]=='*' ) break; + if ( j!=tref->l ) + { + tref->l = j+1; + tref->s[j+1] = 0; + } + for (j=0; jl; j++) + if ( tseq->s[j]=='*' ) break; + if ( j!=tseq->l ) + { + tseq->l = j+1; + tseq->s[j+1] = 0; + } + if ( csq_type & CSQ_STOP_LOST ) + { + if ( tref->s[tref->l-1]=='*' && tref->s[tref->l-1] == tseq->s[tseq->l-1] ) + { + csq_type &= ~CSQ_STOP_LOST; + csq_type |= CSQ_STOP_RETAINED; + } + else if (tref->s[tref->l-1]!='*' ) + { + // This is CDS 3' incomplete ENSG00000173376/synon.vcf, can also be missense + // We observe in real data a change to a stop, ENST00000528237/retained-stop-incomplete-cds.vcf + if ( tseq->s[tseq->l-1] == '*' ) + { + csq_type &= ~CSQ_STOP_GAINED; + csq_type |= CSQ_STOP_RETAINED; + } + else + csq_type |= CSQ_INCOMPLETE_CDS; + } + } + if ( csq_type & CSQ_START_LOST && tref->s[0]!='M' ) + csq_type &= ~CSQ_START_LOST; + if ( node.dlen!=0 ) + { + if ( node.dlen%3 ) + csq_type |= CSQ_FRAMESHIFT_VARIANT; + else if ( node.dlen<0 ) + csq_type |= CSQ_INFRAME_DELETION; + else + csq_type |= CSQ_INFRAME_INSERTION; + } + else + { + for (j=0; jl; j++) + if ( tref->s[j] != tseq->s[j] ) break; + if ( j==tref->l ) + csq_type |= CSQ_SYNONYMOUS_VARIANT; + else if ( tref->s[j] == '*' ) + csq_type |= CSQ_STOP_LOST; + else if ( tseq->s[j] == '*' ) + csq_type |= CSQ_STOP_GAINED; + else + csq_type |= CSQ_MISSENSE_VARIANT; + } + if ( csq_type & CSQ_COMPOUND ) + { + // create the aa variant string + kstring_t str = {0,0,0}; + int aa_rbeg = tr->strand==STRAND_FWD ? node.sbeg/3+1 : (tr->nsref - 2*N_REF_PAD - node.sbeg - node.rlen)/3+1; + int aa_sbeg = tr->strand==STRAND_FWD ? node.sbeg/3+1 : (tr->nsref - 2*N_REF_PAD + node.dlen - node.sbeg - alen)/3+1; + kputc_('|', &str); + kputw(aa_rbeg, &str); + kputs(tref->s, &str); + if ( !(csq_type & CSQ_SYNONYMOUS_VARIANT) ) + { + kputc_('>', &str); + kputw(aa_sbeg, &str); + kputs(tseq->s, &str); + } + kputc_('|', &str); + kputw(rec->pos+1, &str); + kputs(node.var, &str); + csq.type.vstr = str; + csq.type.type = csq_type & CSQ_COMPOUND; + csq_stage(args, &csq, rec); + + // all this only to clean vstr when vrec is flushed + if ( !tr->root ) + tr->root = (hap_node_t*) calloc(1,sizeof(hap_node_t)); + tr->root->ncsq_list++; + hts_expand0(csq_t,tr->root->ncsq_list,tr->root->mcsq_list,tr->root->csq_list); + csq_t *rm_csq = tr->root->csq_list + tr->root->ncsq_list - 1; + rm_csq->type.vstr = str; + } + if ( csq_type & ~CSQ_COMPOUND ) + { + csq.type.type = csq_type & ~CSQ_COMPOUND; + csq.type.vstr.l = 0; + csq_stage(args, &csq, rec); + } + } + free(node.seq); + free(node.var); + } + } + return ret; +} + +int test_cds(args_t *args, bcf1_t *rec) +{ + int i, ret = 0, hap_ret; + const char *chr = bcf_seqname(args->hdr,rec); + // note that the off-by-one extension of rlen is deliberate to account for insertions + if ( !regidx_overlap(args->idx_cds,chr,rec->pos,rec->pos+rec->rlen, args->itr) ) return 0; + while ( regitr_overlap(args->itr) ) + { + gf_cds_t *cds = regitr_payload(args->itr,gf_cds_t*); + tscript_t *tr = cds->tr; + if ( !GF_is_coding(tr->type) ) continue; + ret = 1; + if ( !tr->root ) + { + // initialize the transcript and its haplotype tree, fetch the reference sequence + tscript_init_ref(args, tr, chr); + + tr->root = (hap_node_t*) calloc(1,sizeof(hap_node_t)); + tr->nhap = args->phase==PHASE_DROP_GT ? 1 : 2*args->smpl->n; // maximum ploidy = diploid + tr->hap = (hap_node_t**) malloc(tr->nhap*sizeof(hap_node_t*)); + for (i=0; inhap; i++) tr->hap[i] = NULL; + tr->root->nend = tr->nhap; + tr->root->type = HAP_ROOT; + + khp_insert(trhp, args->active_tr, &tr); + } + + sanity_check_ref(args, tr, rec); + + if ( args->phase==PHASE_DROP_GT ) + { + if ( rec->d.allele[1][0]=='<' || rec->d.allele[1][0]=='*' ) { continue; } + hap_node_t *parent = tr->hap[0] ? tr->hap[0] : tr->root; + hap_node_t *child = (hap_node_t*)calloc(1,sizeof(hap_node_t)); + if ( (hap_ret=hap_init(args, parent, child, cds, rec, 1))!=0 ) + { + // overlapping or intron variant, cannot apply + if ( hap_ret==1 ) + { + if ( !args->quiet ) + fprintf(stderr,"Warning: Skipping overlapping variants at %s:%d\t%s>%s\n", chr,rec->pos+1,rec->d.allele[0],rec->d.allele[1]); + if ( args->out ) + fprintf(args->out,"LOG\tWarning: Skipping overlapping variants at %s:%d\t%s>%s\n", chr,rec->pos+1,rec->d.allele[0],rec->d.allele[1]); + } + else ret = 1; // prevent reporting as intron in test_tscript + free(child); + continue; + } + parent->nend--; + parent->nchild = 1; + parent->mchild = 1; + parent->child = (hap_node_t**) malloc(sizeof(hap_node_t*)); + parent->child[0] = child; + tr->hap[0] = child; + tr->hap[0]->nend = 1; + continue; + } + + // apply the VCF variants and extend the haplotype tree + int j, ismpl, ihap, ngts = bcf_get_genotypes(args->hdr, rec, &args->gt_arr, &args->mgt_arr); + ngts /= bcf_hdr_nsamples(args->hdr); + if ( ngts!=1 && ngts!=2 ) + { + if ( !args->quiet ) + fprintf(stderr,"Warning: Skipping site with non-diploid/non-haploid genotypes at %s:%d\t%s>%s\n", chr,rec->pos+1,rec->d.allele[0],rec->d.allele[1]); + if ( args->out ) + fprintf(args->out,"LOG\tWarning: Skipping site with non-diploid/non-haploid genotypes at %s:%d\t%s>%s\n", chr,rec->pos+1,rec->d.allele[0],rec->d.allele[1]); + continue; + } + for (ismpl=0; ismplsmpl->n; ismpl++) + { + int32_t *gt = args->gt_arr + args->smpl->idx[ismpl]*ngts; + if ( gt[0]==bcf_gt_missing ) continue; + + if ( ngts>1 && gt[0]!=gt[1] && gt[1]!=bcf_gt_missing && gt[1]!=bcf_int32_vector_end ) + { + if ( args->phase==PHASE_MERGE ) + { + if ( !bcf_gt_allele(gt[0]) ) gt[0] = gt[1]; + } + if ( !bcf_gt_is_phased(gt[0]) && !bcf_gt_is_phased(gt[1]) ) + { + if ( args->phase==PHASE_REQUIRE ) + error("Unphased genotype at %s:%d, sample %s. See the --phase option.\n", chr,rec->pos+1,args->hdr->samples[args->smpl->idx[ismpl]]); + if ( args->phase==PHASE_SKIP ) + continue; + if ( args->phase==PHASE_NON_REF ) + { + if ( !bcf_gt_allele(gt[0]) ) gt[0] = gt[1]; + else if ( !bcf_gt_allele(gt[1]) ) gt[1] = gt[0]; + } + } + } + + for (ihap=0; ihapn_allele ); + if ( rec->d.allele[ial][0]=='<' || rec->d.allele[ial][0]=='*' ) { continue; } + + hap_node_t *parent = tr->hap[i] ? tr->hap[i] : tr->root; + if ( parent->cur_rec==rec && parent->cur_child[ial]>=0 ) + { + // this haplotype has been seen in another sample + tr->hap[i] = parent->child[ parent->cur_child[ial] ]; + tr->hap[i]->nend++; + parent->nend--; + continue; + } + + hap_node_t *child = (hap_node_t*)calloc(1,sizeof(hap_node_t)); + if ( (hap_ret=hap_init(args, parent, child, cds, rec, ial))!=0 ) + { + // overlapping or intron variant, cannot apply + if ( hap_ret==1 ) + { + if ( !args->quiet ) + fprintf(stderr,"Warning: Skipping overlapping variants at %s:%d, sample %s\t%s>%s\n", + chr,rec->pos+1,args->hdr->samples[args->smpl->idx[ismpl]],rec->d.allele[0],rec->d.allele[ial]); + if ( args->out ) + fprintf(args->out,"LOG\tWarning: Skipping overlapping variants at %s:%d, sample %s\t%s>%s\n", + chr,rec->pos+1,args->hdr->samples[args->smpl->idx[ismpl]],rec->d.allele[0],rec->d.allele[ial]); + } + free(child); + continue; + } + + if ( parent->cur_rec!=rec ) + { + hts_expand(int,rec->n_allele,parent->mcur_child,parent->cur_child); + for (j=0; jn_allele; j++) parent->cur_child[j] = -1; + parent->cur_rec = rec; + } + + j = parent->nchild++; + hts_expand0(hap_node_t*,parent->nchild,parent->mchild,parent->child); + parent->cur_child[ial] = j; + parent->child[j] = child; + tr->hap[i] = child; + tr->hap[i]->nend++; + parent->nend--; + } + } + } + return ret; +} + +void csq_stage(args_t *args, csq_t *csq, bcf1_t *rec) +{ + // known issues: tab output leads to unsorted output. This is because + // coding haplotypes are printed in one go and buffering is not used + // with tab output. VCF output is OK though. + if ( csq_push(args, csq, rec)!=0 ) return; // the consequence already exists + + int i,j,ngt = 0; + if ( args->phase!=PHASE_DROP_GT ) + { + ngt = bcf_get_genotypes(args->hdr, rec, &args->gt_arr, &args->mgt_arr); + if ( ngt>0 ) ngt /= bcf_hdr_nsamples(args->hdr); + } + if ( ngt<=0 ) + { + if ( args->output_type==FT_TAB_TEXT ) + csq_print_text(args, csq, -1,0); + return; + } + assert( ngt<=2 ); + + if ( args->output_type==FT_TAB_TEXT ) + { + for (i=0; ismpl->n; i++) + { + int32_t *gt = args->gt_arr + args->smpl->idx[i]*ngt; + for (j=0; jsmpl->idx[i],j+1); + } + } + return; + } + + vrec_t *vrec = csq->vrec; + for (i=0; ismpl->n; i++) + { + int32_t *gt = args->gt_arr + args->smpl->idx[i]*ngt; + for (j=0; jidx + j; + if ( icsq >= args->ncsq_max ) // more than ncsq_max consequences, so can't fit it in FMT + { + int ismpl = args->smpl->idx[i]; + int print_warning = 1; + if ( args->quiet ) + { + if ( args->quiet > 1 || args->ncsq_small_warned ) print_warning = 0; + args->ncsq_small_warned = 1; + } + if ( print_warning ) + { + fprintf(stderr,"Warning: --ncsq %d is too small to annotate %s at %s:%d with %d-th csq\n", + args->ncsq_max/2,args->hdr->samples[ismpl],bcf_hdr_id2name(args->hdr,args->rid),vrec->line->pos+1,csq->idx+1); + if ( args->quiet ) fprintf(stderr,"(This warning is printed only once)\n"); + } + break; + } + if ( vrec->nfmt < 1 + icsq/32 ) vrec->nfmt = 1 + icsq/32; + vrec->smpl[i*args->nfmt_bcsq + icsq/32] |= 1 << (icsq % 32); + } + } +} +int test_utr(args_t *args, bcf1_t *rec) +{ + const char *chr = bcf_seqname(args->hdr,rec); + // note that the off-by-one extension of rlen is deliberate to account for insertions + if ( !regidx_overlap(args->idx_utr,chr,rec->pos,rec->pos+rec->rlen, args->itr) ) return 0; + + splice_t splice; + splice_init(&splice, rec); + + int i, ret = 0; + while ( regitr_overlap(args->itr) ) + { + gf_utr_t *utr = regitr_payload(args->itr, gf_utr_t*); + tscript_t *tr = splice.tr = utr->tr; + for (i=1; in_allele; i++) + { + if ( rec->d.allele[1][0]=='<' || rec->d.allele[1][0]=='*' ) { continue; } + splice.vcf.alt = rec->d.allele[i]; + int splice_ret = splice_csq(args, &splice, utr->beg, utr->end); + if ( splice_ret!=SPLICE_INSIDE && splice_ret!=SPLICE_OVERLAP ) continue; + csq_t csq; + memset(&csq, 0, sizeof(csq_t)); + csq.pos = rec->pos; + csq.type.type = utr->which==prime5 ? CSQ_UTR5 : CSQ_UTR3; + csq.type.biotype = tr->type; + csq.type.strand = tr->strand; + csq.type.trid = tr->id; + csq.type.gene = tr->gene->name; + csq_stage(args, &csq, rec); + ret = 1; + } + } + assert(!splice.kref.s); + assert(!splice.kalt.s); + return ret; +} +int test_splice(args_t *args, bcf1_t *rec) +{ + const char *chr = bcf_seqname(args->hdr,rec); + if ( !regidx_overlap(args->idx_exon,chr,rec->pos,rec->pos + rec->rlen, args->itr) ) return 0; + + splice_t splice; + splice_init(&splice, rec); + splice.check_acceptor = splice.check_donor = 1; + + int i, ret = 0; + while ( regitr_overlap(args->itr) ) + { + gf_exon_t *exon = regitr_payload(args->itr, gf_exon_t*); + splice.tr = exon->tr; + if ( !splice.tr->ncds ) continue; // not a coding transcript, no interest in splice sites + + splice.check_region_beg = splice.tr->beg==exon->beg ? 0 : 1; + splice.check_region_end = splice.tr->end==exon->end ? 0 : 1; + + for (i=1; in_allele; i++) + { + if ( rec->d.allele[1][0]=='<' || rec->d.allele[1][0]=='*' ) { continue; } + splice.vcf.alt = rec->d.allele[i]; + splice_csq(args, &splice, exon->beg, exon->end); + if ( splice.csq ) ret = 1; + } + } + free(splice.kref.s); + free(splice.kalt.s); + return ret; +} +int test_tscript(args_t *args, bcf1_t *rec) +{ + const char *chr = bcf_seqname(args->hdr,rec); + if ( !regidx_overlap(args->idx_tscript,chr,rec->pos,rec->pos+rec->rlen, args->itr) ) return 0; + + splice_t splice; + splice_init(&splice, rec); + + int i, ret = 0; + while ( regitr_overlap(args->itr) ) + { + tscript_t *tr = splice.tr = regitr_payload(args->itr, tscript_t*); + for (i=1; in_allele; i++) + { + if ( rec->d.allele[1][0]=='<' || rec->d.allele[1][0]=='*' ) { continue; } + splice.vcf.alt = rec->d.allele[i]; + int splice_ret = splice_csq(args, &splice, tr->beg, tr->end); + if ( splice_ret!=SPLICE_INSIDE && splice_ret!=SPLICE_OVERLAP ) continue; // SPLICE_OUTSIDE or SPLICE_REF + csq_t csq; + memset(&csq, 0, sizeof(csq_t)); + csq.pos = rec->pos; + csq.type.type = GF_is_coding(tr->type) ? CSQ_INTRON : CSQ_NON_CODING; + csq.type.biotype = tr->type; + csq.type.strand = tr->strand; + csq.type.trid = tr->id; + csq.type.gene = tr->gene->name; + csq_stage(args, &csq, rec); + ret = 1; + } + } + assert(!splice.kref.s); + assert(!splice.kalt.s); + return ret; +} + +void process(args_t *args, bcf1_t **rec_ptr) +{ + if ( !rec_ptr ) + { + hap_flush(args, REGIDX_MAX); + vbuf_flush(args); + return; + } + + bcf1_t *rec = *rec_ptr; + + int call_csq = 1; + if ( !rec->n_allele ) call_csq = 0; // no alternate allele + else if ( rec->n_allele==2 && (rec->d.allele[1][0]=='<' || rec->d.allele[1][0]=='*') ) call_csq = 0; // gVCF, no alt allele + else if ( args->filter ) + { + call_csq = filter_test(args->filter, rec, NULL); + if ( args->filter_logic==FLT_EXCLUDE ) call_csq = call_csq ? 0 : 1; + } + if ( !call_csq ) + { + if ( !args->out_fh ) return; // not a VCF output + vbuf_push(args, rec_ptr); + vbuf_flush(args); + return; + } + + if ( args->rid != rec->rid ) + { + hap_flush(args, REGIDX_MAX); + vbuf_flush(args); + } + args->rid = rec->rid; + vbuf_push(args, rec_ptr); + + int hit = args->local_csq ? test_cds_local(args, rec) : test_cds(args, rec); + hit += test_utr(args, rec); + hit += test_splice(args, rec); + if ( !hit ) test_tscript(args, rec); + + hap_flush(args, rec->pos-1); + vbuf_flush(args); + + return; +} + +static const char *usage(void) +{ + return + "\n" + "About: Haplotype-aware consequence caller.\n" + "Usage: bcftools csq [options] in.vcf\n" + "\n" + "Required options:\n" + " -f, --fasta-ref reference file in fasta format\n" + " -g, --gff-annot gff3 annotation file\n" + "\n" + "CSQ options:\n" + " -c, --custom-tag use this tag instead of the default BCSQ\n" + " -l, --local-csq localized predictions, consider only one VCF record at a time\n" + " -n, --ncsq maximum number of consequences to consider per site [16]\n" + " -p, --phase how to construct haplotypes and how to deal with unphased data: [r]\n" + " a: take GTs as is, create haplotypes regardless of phase (0/1 -> 0|1)\n" + " m: merge *all* GTs into a single haplotype (0/1 -> 1, 1/2 -> 1)\n" + " r: require phased GTs, throw an error on unphased het GTs\n" + " R: create non-reference haplotypes if possible (0/1 -> 1|1, 1/2 -> 1|2)\n" + " s: skip unphased GTs\n" + "Options:\n" + " -e, --exclude exclude sites for which the expression is true\n" + " -i, --include select sites for which the expression is true\n" + " -o, --output write output to a file [standard output]\n" + " -O, --output-type b: compressed BCF, u: uncompressed BCF, z: compressed VCF\n" + " v: uncompressed VCF, t: plain tab-delimited text output [v]\n" + " -q, --quiet suppress warning messages. Can be given two times for even less messages\n" + " -r, --regions restrict to comma-separated list of regions\n" + " -R, --regions-file restrict to regions listed in a file\n" + " -s, --samples <-|list> samples to include or \"-\" to apply all variants and ignore samples\n" + " -S, --samples-file samples to include\n" + " -t, --targets similar to -r but streams rather than index-jumps\n" + " -T, --targets-file similar to -R but streams rather than index-jumps\n" + "\n" + "Example:\n" + " bcftools csq -f hs37d5.fa -g Homo_sapiens.GRCh37.82.gff3.gz in.vcf\n" + "\n" + " # GFF3 annotation files can be downloaded from Ensembl. e.g. for human:\n" + " ftp://ftp.ensembl.org/pub/current_gff3/homo_sapiens/\n" + " ftp://ftp.ensembl.org/pub/grch37/release-84/gff3/homo_sapiens/\n" + "\n"; +} + +int main_csq(int argc, char *argv[]) +{ + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->output_type = FT_VCF; + args->bcsq_tag = "BCSQ"; + args->ncsq_max = 2*16; + + static struct option loptions[] = + { + {"help",0,0,'h'}, + {"ncsq",1,0,'n'}, + {"custom-tag",1,0,'c'}, + {"local-csq",0,0,'l'}, + {"gff-annot",1,0,'g'}, + {"fasta-ref",1,0,'f'}, + {"include",1,0,'i'}, + {"exclude",1,0,'e'}, + {"output",1,0,'o'}, + {"output-type",1,NULL,'O'}, + {"phase",1,0,'p'}, + {"quiet",0,0,'q'}, + {"regions",1,0,'r'}, + {"regions-file",1,0,'R'}, + {"samples",1,0,'s'}, + {"samples-file",1,0,'S'}, + {"targets",1,0,'t'}, + {"targets-file",1,0,'T'}, + {0,0,0,0} + }; + int c, targets_is_file = 0, regions_is_file = 0; + char *targets_list = NULL, *regions_list = NULL; + while ((c = getopt_long(argc, argv, "?hr:R:t:T:i:e:f:o:O:g:s:S:p:qc:ln:",loptions,NULL)) >= 0) + { + switch (c) + { + case 'l': args->local_csq = 1; break; + case 'c': args->bcsq_tag = optarg; break; + case 'q': args->quiet++; break; + case 'p': + switch (optarg[0]) + { + case 'a': args->phase = PHASE_AS_IS; break; + case 'm': args->phase = PHASE_MERGE; break; + case 'r': args->phase = PHASE_REQUIRE; break; + case 'R': args->phase = PHASE_NON_REF; break; + case 's': args->phase = PHASE_SKIP; break; + default: error("The -p code \"%s\" not recognised\n", optarg); + } + break; + case 'f': args->fa_fname = optarg; break; + case 'g': args->gff_fname = optarg; break; + case 'n': + args->ncsq_max = 2 * atoi(optarg); + if ( args->ncsq_max <=0 ) error("Expected positive integer with -n, got %s\n", optarg); + break; + case 'o': args->output_fname = optarg; break; + case 'O': + switch (optarg[0]) { + case 't': args->output_type = FT_TAB_TEXT; break; + case 'b': args->output_type = FT_BCF_GZ; break; + case 'u': args->output_type = FT_BCF; break; + case 'z': args->output_type = FT_VCF_GZ; break; + case 'v': args->output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + } + break; + case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break; + case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break; + case 'r': regions_list = optarg; break; + case 'R': regions_list = optarg; regions_is_file = 1; break; + case 's': args->sample_list = optarg; break; + case 'S': args->sample_list = optarg; args->sample_is_file = 1; break; + case 't': targets_list = optarg; break; + case 'T': targets_list = optarg; targets_is_file = 1; break; + case 'h': + case '?': error("%s",usage()); + default: error("The option not recognised: %s\n\n", optarg); break; + } + } + char *fname = NULL; + if ( optind==argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin + else error("%s", usage()); + } + else fname = argv[optind]; + if ( argc - optind>1 ) error("%s", usage()); + if ( !args->fa_fname ) error("Missing the --fa-ref option\n"); + if ( !args->gff_fname ) error("Missing the --gff option\n"); + args->sr = bcf_sr_init(); + if ( targets_list && bcf_sr_set_targets(args->sr, targets_list, targets_is_file, 0)<0 ) + error("Failed to read the targets: %s\n", targets_list); + if ( regions_list && bcf_sr_set_regions(args->sr, regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", regions_list); + if ( !bcf_sr_add_reader(args->sr, fname) ) + error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->sr->errnum)); + args->hdr = bcf_sr_get_header(args->sr,0); + + init_data(args); + while ( bcf_sr_next_line(args->sr) ) + { + process(args, &args->sr->readers[0].buffer[0]); + } + process(args,NULL); + + destroy_data(args); + bcf_sr_destroy(args->sr); + free(args); + + return 0; +} + diff --git a/bcftools/csq.c.pysam.c b/bcftools/csq.c.pysam.c new file mode 100644 index 0000000..978bd59 --- /dev/null +++ b/bcftools/csq.c.pysam.c @@ -0,0 +1,3841 @@ +#include "bcftools.pysam.h" + +/* The MIT License + + Copyright (c) 2016 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ +/* + Things that would be nice to have + - for stop-lost events (also in frameshifts) report the number of truncated aa's + - memory could be greatly reduced by indexing gff (but it is quite compact already) + - deletions that go beyond transcript boundaries are not checked at sequence level + - alloc tscript->ref in hap_finalize, introduce fa_off_beg:16,fa_off_end:16 + - see test/csq/ENST00000573314/insertion-overlap.vcf #1476288882 + + Read about transcript types here + http://vega.sanger.ac.uk/info/about/gene_and_transcript_types.html + http://www.ensembl.org/info/genome/variation/predicted_data.html + http://www.gencodegenes.org/gencode_biotypes.html + + List of supported biotypes + antisense + IG_C_gene + IG_D_gene + IG_J_gene + IG_LV_gene + IG_V_gene + lincRNA + macro_lncRNA + miRNA + misc_RNA + Mt_rRNA + Mt_tRNA + polymorphic_pseudogene + processed_transcript + protein_coding + ribozyme + rRNA + sRNA + scRNA + scaRNA + sense_intronic + sense_overlapping + snRNA + snoRNA + TR_C_gene + TR_D_gene + TR_J_gene + TR_V_gene + + The gff parsing logic + We collect features such by combining gff lines A,B,C as follows: + A .. gene line with a supported biotype + A.ID=~/^gene:/ + + B .. transcript line referencing A + B.ID=~/^transcript:/ && B.Parent=~/^gene:A.ID/ + + C .. corresponding CDS, exon, and UTR lines: + C[3] in {"CDS","exon","three_prime_UTR","five_prime_UTR"} && C.Parent=~/^transcript:B.ID/ + + For coding biotypes ("protein_coding" or "polymorphic_pseudogene") the + complete chain link C -> B -> A is required. For the rest, link B -> A suffices. + + + The supported consequence types, sorted by impact: + splice_acceptor_variant .. end region of an intron changed (2bp at the 3' end of an intron) + splice_donor_variant .. start region of an intron changed (2bp at the 5' end of an intron) + stop_gained .. DNA sequence variant resulting in a stop codon + frameshift_variant .. number of inserted/deleted bases not a multiple of three, disrupted translational frame + stop_lost .. elongated transcript, stop codon changed + start_lost .. the first codon changed + inframe_altering .. combination of indels leading to unchanged reading frame and length + inframe_insertion .. inserted coding sequence, unchanged reading frame + inframe_deletion .. deleted coding sequence, unchanged reading frame + missense_variant .. amino acid (aa) change, unchanged length + splice_region_variant .. change within 1-3 bases of the exon or 3-8 bases of the intron + synonymous_variant .. DNA sequence variant resulting in no amino acid change + stop_retained_variant .. different stop codon + non_coding_variant .. variant in non-coding sequence, such as RNA gene + 5_prime_UTR_variant + 3_prime_UTR_variant + intron_variant .. reported only if none of the above + intergenic_variant .. reported only if none of the above + + + The annotation algorithm. + The algorithm checks if the variant falls in a region of a supported type. The + search is performed in the following order, until a match is found: + 1. idx_cds(gf_cds_t) - lookup CDS by position, create haplotypes, call consequences + 2. idx_utr(gf_utr_t) - check UTR hits + 3. idx_exon(gf_exon_t) - check for splice variants + 4. idx_tscript(tscript_t) - check for intronic variants, RNAs, etc. + + These regidx indexes are created by parsing a gff3 file as follows: + 1. create the array "ftr" of all UTR, CDS, exons. This will be + processed later and pruned based on transcript types we want to keep. + In the same go, create the hash "id2tr" of transcripts to keep + (based on biotype) which maps from transcript_id to a transcript. At + the same time also build the hash "gid2gene" which maps from gene_id to + gf_gene_t pointer. + + 2. build "idx_cds", "idx_tscript", "idx_utr" and "idx_exon" indexes. + Use only features from "ftr" which are present in "id2tr". + + 3. clean data that won't be needed anymore: ftr, id2tr, gid2gene. + + Data structures. + idx_cds, idx_utr, idx_exon, idx_tscript: + as described above, regidx structures for fast lookup of exons/transcripts + overlapping a region, the payload is a pointer to tscript.cds +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "filter.h" +#include "regidx.h" +#include "kheap.h" +#include "smpl_ilist.h" +#include "rbuf.h" + +#ifndef __FUNCTION__ +# define __FUNCTION__ __func__ +#endif + +// Logic of the filters: include or exclude sites which match the filters? +#define FLT_INCLUDE 1 +#define FLT_EXCLUDE 2 + +// Definition of splice_region, splice_acceptor and splice_donor +#define N_SPLICE_DONOR 2 +#define N_SPLICE_REGION_EXON 3 +#define N_SPLICE_REGION_INTRON 8 + +#define N_REF_PAD 10 // number of bases to avoid boundary effects + +#define STRAND_REV 0 +#define STRAND_FWD 1 + +#define TRIM_NONE 0 +#define TRIM_5PRIME 1 +#define TRIM_3PRIME 2 + +// How to treat phased/unphased genotypes +#define PHASE_REQUIRE 0 // --phase r +#define PHASE_MERGE 1 // --phase m +#define PHASE_AS_IS 2 // --phase a +#define PHASE_SKIP 3 // --phase s +#define PHASE_NON_REF 4 // --phase R +#define PHASE_DROP_GT 5 // --samples - + +// Node types in the haplotype tree +#define HAP_CDS 0 +#define HAP_ROOT 1 +#define HAP_SSS 2 // start/stop/splice + +#define CSQ_PRINTED_UPSTREAM (1<<0) +#define CSQ_SYNONYMOUS_VARIANT (1<<1) +#define CSQ_MISSENSE_VARIANT (1<<2) +#define CSQ_STOP_LOST (1<<3) +#define CSQ_STOP_GAINED (1<<4) +#define CSQ_INFRAME_DELETION (1<<5) +#define CSQ_INFRAME_INSERTION (1<<6) +#define CSQ_FRAMESHIFT_VARIANT (1<<7) +#define CSQ_SPLICE_ACCEPTOR (1<<8) +#define CSQ_SPLICE_DONOR (1<<9) +#define CSQ_START_LOST (1<<10) +#define CSQ_SPLICE_REGION (1<<11) +#define CSQ_STOP_RETAINED (1<<12) +#define CSQ_UTR5 (1<<13) +#define CSQ_UTR3 (1<<14) +#define CSQ_NON_CODING (1<<15) +#define CSQ_INTRON (1<<16) +//#define CSQ_INTERGENIC (1<<17) +#define CSQ_INFRAME_ALTERING (1<<18) +#define CSQ_UPSTREAM_STOP (1<<19) // adds * in front of the csq string +#define CSQ_INCOMPLETE_CDS (1<<20) // to remove START/STOP in incomplete CDS, see ENSG00000173376/synon.vcf +#define CSQ_CODING_SEQUENCE (1<<21) // cannot tell exactly what it is, but it does affect the coding sequence + +// Haplotype-aware consequences, printed in one vcf record only, the rest has a reference @12345 +#define CSQ_COMPOUND (CSQ_SYNONYMOUS_VARIANT|CSQ_MISSENSE_VARIANT|CSQ_STOP_LOST|CSQ_STOP_GAINED| \ + CSQ_INFRAME_DELETION|CSQ_INFRAME_INSERTION|CSQ_FRAMESHIFT_VARIANT| \ + CSQ_START_LOST|CSQ_STOP_RETAINED|CSQ_INFRAME_ALTERING|CSQ_INCOMPLETE_CDS| \ + CSQ_UPSTREAM_STOP) +#define CSQ_START_STOP (CSQ_STOP_LOST|CSQ_STOP_GAINED|CSQ_STOP_RETAINED|CSQ_START_LOST) + +#define CSQ_PRN_STRAND(csq) ((csq)&CSQ_COMPOUND && !((csq)&(CSQ_SPLICE_ACCEPTOR|CSQ_SPLICE_DONOR|CSQ_SPLICE_REGION))) +#define CSQ_PRN_TSCRIPT (~(CSQ_INTRON|CSQ_NON_CODING)) +#define CSQ_PRN_BIOTYPE CSQ_NON_CODING + +// see kput_vcsq() +const char *csq_strings[] = +{ + NULL, + "synonymous", + "missense", + "stop_lost", + "stop_gained", + "inframe_deletion", + "inframe_insertion", + "frameshift", + "splice_acceptor", + "splice_donor", + "start_lost", + "splice_region", + "stop_retained", + "5_prime_utr", + "3_prime_utr", + "non_coding", + "intron", + "intergenic", + "inframe_altering", + NULL, + NULL, + "coding_sequence" +}; + + +// GFF line types +#define GFF_TSCRIPT_LINE 1 +#define GFF_GENE_LINE 2 + + +/* + Genomic features, for fast lookup by position to overlapping features +*/ +#define GF_coding_bit 6 +#define GF_is_coding(x) ((x) & (1<5I|121ACG>A+124TA>T" + + vcrec_t + single VCF record and csq tied to this record. (Haplotype can have multiple + consequences in several VCF records. Each record can have multiple consequences + from multiple haplotypes.) + + csq_t + a top-level consequence tied to a haplotype + + vbuf_t + pos2vbuf + VCF records with the same position clustered together for a fast lookup via pos2vbuf +*/ +typedef struct _vbuf_t vbuf_t; +typedef struct _vcsq_t vcsq_t; +struct _vcsq_t +{ + uint32_t strand:1, + type:31; // one of CSQ_* types + uint32_t trid; + uint32_t biotype; // one of GF_* types + char *gene; // gene name + bcf1_t *ref; // if type&CSQ_PRINTED_UPSTREAM, ref consequence "@1234" + kstring_t vstr; // variant string, eg 5TY>5I|121ACG>A+124TA>T +}; +typedef struct +{ + bcf1_t *line; + uint32_t *smpl; // bitmask of sample consequences with first/second haplotype interleaved + uint32_t nfmt:4, nvcsq:28, mvcsq; + vcsq_t *vcsq; // there can be multiple consequences for a single VCF record +} +vrec_t; +typedef struct +{ + uint32_t pos; + vrec_t *vrec; // vcf line that this csq is tied to; needed when printing haplotypes (hap_stage_vcf) + int idx; // 0-based index of the csq at the VCF line, for FMT/BCSQ + vcsq_t type; +} +csq_t; +struct _vbuf_t +{ + vrec_t **vrec; // buffer of VCF lines with the same position + int n, m; +}; +KHASH_MAP_INIT_INT(pos2vbuf, vbuf_t*) + + +/* + Structures related to haplotype-aware consequences in coding regions + + hap_node_t + node of a haplotype tree. Each transcript has one tree + + tscript_t + despite its general name, it is intended for coding transcripts only + + hap_t + hstack_t + for traversal of the haplotype tree and braking combined + consequences into independent parts +*/ +typedef struct _hap_node_t hap_node_t; +struct _hap_node_t +{ + char *seq; // cds segment [parent_node,this_node) + char *var; // variant "ref>alt" + uint32_t type:2, // HAP_ROOT or HAP_CDS + csq:30; // this node's consequence + int dlen; // alt minus ref length: <0 del, >0 ins, 0 substitution + uint32_t rbeg; // variant's VCF position (0-based, inclusive) + int32_t rlen; // variant's rlen; alen=rlen+dlen; fake for non CDS types + uint32_t sbeg; // variant's position on the spliced reference transcript (0-based, inclusive, N_REF_PAD not included) + uint32_t icds; // which exon does this node's variant overlaps + hap_node_t **child, *prev; // children haplotypes and previous coding node + int nchild, mchild; + bcf1_t *cur_rec, *rec; // current VCF record and node's VCF record + uint32_t nend; // number of haplotypes ending in this node + int *cur_child, mcur_child; // mapping from the allele to the currently active child + csq_t *csq_list; // list of haplotype's consequences, broken by position + int ncsq_list, mcsq_list; +}; +struct _tscript_t +{ + uint32_t id; // transcript id + uint32_t beg,end; // transcript's beg and end coordinate (ref strand, 0-based, inclusive) + uint32_t strand:1, // STRAND_REV or STRAND_FWD + ncds:31, // number of exons + mcds; + gf_cds_t **cds; // ordered list of exons + char *ref; // reference sequence, padded with N_REF_PAD bases on both ends + char *sref; // spliced reference sequence, padded with N_REF_PAD bases on both ends + hap_node_t *root; // root of the haplotype tree + hap_node_t **hap; // pointer to haplotype leaves, two for each sample + int nhap, nsref; // number of haplotypes and length of sref, including 2*N_REF_PAD + uint32_t trim:2, // complete, 5' or 3' trimmed, see TRIM_* types + type:30; // one of GF_* types + gf_gene_t *gene; +}; +static inline int cmp_tscript(tscript_t **a, tscript_t **b) +{ + return ( (*a)->end < (*b)->end ) ? 1 : 0; +} +KHEAP_INIT(trhp, tscript_t*, cmp_tscript) +typedef khp_trhp_t tr_heap_t; +typedef struct +{ + hap_node_t *node; // current node + int ichild; // current child in the active node + int dlen; // total dlen, from the root to the active node + size_t slen; // total sequence length, from the root to the active node +} +hstack_t; +typedef struct +{ + int mstack; + hstack_t *stack; + tscript_t *tr; // tr->ref: spliced transcript on ref strand + kstring_t sseq; // spliced haplotype sequence on ref strand + kstring_t tseq; // the variable part of translated haplotype transcript, coding strand + kstring_t tref; // the variable part of translated reference transcript, coding strand + uint32_t sbeg; // stack's sbeg, for cases first node's type is HAP_SSS + int upstream_stop; +} +hap_t; + + +/* + Helper structures, only for initialization + + ftr_t + temporary list of all exons, CDS, UTRs +*/ +KHASH_MAP_INIT_INT(int2tscript, tscript_t*) +KHASH_MAP_INIT_INT(int2gene, gf_gene_t*) +typedef struct +{ + int type; // GF_CDS, GF_EXON, GF_5UTR, GF_3UTR + uint32_t beg; + uint32_t end; + uint32_t trid; + uint32_t strand:1; // STRAND_REV,STRAND_FWD + uint32_t phase:2; // 0, 1 or 2 + uint32_t iseq:29; +} +ftr_t; +/* + Mapping from GFF ID string (such as ENST00000450305 or Zm00001d027230_P001) + to integer id. To keep the memory requirements low, the original version + relied on IDs in the form of a string prefix and a numerical id. However, + it turns out that this assumption is not valid for some ensembl GFFs, see + for example Zea_mays.AGPv4.36.gff3.gz + */ +typedef struct +{ + void *str2id; // khash_str2int + int nstr, mstr; + char **str; // numeric id to string +} +id_tbl_t; +typedef struct +{ + // all exons, CDS, UTRs + ftr_t *ftr; + int nftr, mftr; + + // mapping from gene id to gf_gene_t + kh_int2gene_t *gid2gene; + + // mapping from transcript id to tscript, for quick CDS anchoring + kh_int2tscript_t *id2tr; + + // sequences + void *seq2int; // str2int hash + char **seq; + int nseq, mseq; + + // ignored biotypes + void *ignored_biotypes; + + id_tbl_t gene_ids; // temporary table for mapping between gene id (eg. Zm00001d027245) and a numeric idx +} +aux_t; + +typedef struct _args_t +{ + // the main regidx lookups, from chr:beg-end to overlapping features and + // index iterator + regidx_t *idx_cds, *idx_utr, *idx_exon, *idx_tscript; + regitr_t *itr; + + // temporary structures, deleted after initializtion + aux_t init; + + // text tab-delimited output (out) or vcf/bcf output (out_fh) + FILE *out; + htsFile *out_fh; + + // vcf + bcf_srs_t *sr; + bcf_hdr_t *hdr; + int hdr_nsmpl; // actual number of samples in the vcf, for bcf_update_format_values() + + // include or exclude sites which match the filters + filter_t *filter; + char *filter_str; + int filter_logic; // FLT_INCLUDE or FLT_EXCLUDE + + // samples to process + int sample_is_file; + char *sample_list; + smpl_ilist_t *smpl; + + char *outdir, **argv, *fa_fname, *gff_fname, *output_fname; + char *bcsq_tag; + int argc, output_type; + int phase, quiet, local_csq; + int ncsq_max, nfmt_bcsq; // maximum number of csq per site that can be accessed from FORMAT/BCSQ + int ncsq_small_warned; + + int rid; // current chromosome + tr_heap_t *active_tr; // heap of active transcripts for quick flushing + hap_t *hap; // transcript haplotype recursion + vbuf_t **vcf_buf; // buffered VCF lines to annotate with CSQ and flush + rbuf_t vcf_rbuf; // round buffer indexes to vcf_buf + kh_pos2vbuf_t *pos2vbuf; // fast lookup of buffered lines by position + tscript_t **rm_tr; // buffer of transcripts to clean + int nrm_tr, mrm_tr; + csq_t *csq_buf; // pool of csq not managed by hap_node_t, i.e. non-CDS csqs + int ncsq_buf, mcsq_buf; + id_tbl_t tscript_ids; // mapping between transcript id (eg. Zm00001d027245_T001) and a numeric idx + + faidx_t *fai; + kstring_t str, str2; + int32_t *gt_arr, mgt_arr; +} +args_t; + +// AAA, AAC, ... +const char *gencode = "KNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVV*Y*YSSSS*CWCLFLF"; +const uint8_t nt4[] = +{ + 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, + 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, + 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, + 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, + 4,0,4,1, 4,4,4,2, 4,4,4,4, 4,4,4,4, + 4,4,4,4, 3,4,4,4, 4,4,4,4, 4,4,4,4, + 4,0,4,1, 4,4,4,2, 4,4,4,4, 4,4,4,4, + 4,4,4,4, 3 +}; +const uint8_t cnt4[] = +{ + 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, + 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, + 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, + 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, + 4,3,4,2, 4,4,4,1, 4,4,4,4, 4,4,4,4, + 4,4,4,4, 0,4,4,4, 4,4,4,4, 4,4,4,4, + 4,3,4,2, 4,4,4,1, 4,4,4,4, 4,4,4,4, + 4,4,4,4, 0 +}; +#define dna2aa(x) gencode[ nt4[(uint8_t)(x)[0]]<<4 | nt4[(uint8_t)(x)[1]]<<2 | nt4[(uint8_t)(x)[2]] ] +#define cdna2aa(x) gencode[ cnt4[(uint8_t)(x)[2]]<<4 | cnt4[(uint8_t)(x)[1]]<<2 | cnt4[(uint8_t)(x)[0]] ] + +static const char *gf_strings_noncoding[] = +{ + "MT_rRNA", "MT_tRNA", "lincRNA", "miRNA", "misc_RNA", "rRNA", "snRNA", "snoRNA", "processed_transcript", + "antisense", "macro_lncRNA", "ribozyme", "sRNA", "scRNA", "scaRNA", "sense_intronic", "sense_overlapping", + "pseudogene", "processed_pseudogene", "artifact", "IG_pseudogene", "IG_C_pseudogene", "IG_J_pseudogene", + "IG_V_pseudogene", "TR_V_pseudogene", "TR_J_pseudogene", "MT_tRNA_pseudogene", "misc_RNA_pseudogene", + "miRNA_pseudogene", "ribozyme", "retained_intron", "retrotransposed", "Trna_pseudogene", "transcribed_processed_pseudogene", + "transcribed_unprocessed_pseudogene", "transcribed_unitary_pseudogene", "translated_unprocessed_pseudogene", + "translated_processed_pseudogene", "known_ncRNA", "unitary_pseudogene", "unprocessed_pseudogene", + "LRG_gene", "3_prime_overlapping_ncRNA", "disrupted_domain", "vaultRNA", "bidirectional_promoter_lncRNA", "ambiguous_orf" +}; +static const char *gf_strings_coding[] = { "protein_coding", "polymorphic_pseudogene", "IG_C", "IG_D", "IG_J", "IG_LV", "IG_V", "TR_C", "TR_D", "TR_J", "TR_V", "NMD", "non_stop_decay"}; +static const char *gf_strings_special[] = { "CDS", "exon", "3_prime_UTR", "5_prime_UTR" }; + +const char *gf_type2gff_string(int type) +{ + if ( !GF_is_coding(type) ) + { + if ( type < (1<init; + char c = chr_end[1]; + chr_end[1] = 0; + int iseq; + if ( khash_str2int_get(aux->seq2int, chr_beg, &iseq)!=0 ) + { + hts_expand(char*, aux->nseq+1, aux->mseq, aux->seq); + aux->seq[aux->nseq] = strdup(chr_beg); + iseq = khash_str2int_inc(aux->seq2int, aux->seq[aux->nseq]); + aux->nseq++; + assert( aux->nseq < 256 ); // see gf_gene_t.iseq + } + chr_end[1] = c; + return iseq; +} +static inline char *gff_skip(const char *line, char *ss) +{ + while ( *ss && *ss!='\t' ) ss++; + if ( !*ss ) error("[%s:%d %s] Could not parse the line: %s\n",__FILE__,__LINE__,__FUNCTION__,line); + return ss+1; +} +static inline void gff_parse_chr(const char *line, char **chr_beg, char **chr_end) +{ + char *se = (char*) line; + while ( *se && *se!='\t' ) se++; + if ( !*se ) error("[%s:%d %s] Could not parse the line: %s\n",__FILE__,__LINE__,__FUNCTION__,line); + *chr_beg = (char*) line; + *chr_end = se-1; +} +static inline char *gff_parse_beg_end(const char *line, char *ss, uint32_t *beg, uint32_t *end) +{ + char *se = ss; + *beg = strtol(ss, &se, 10) - 1; + if ( ss==se ) error("[%s:%d %s] Could not parse the line:\n\t%s\n\t%s\n",__FILE__,__LINE__,__FUNCTION__,line,ss); + ss = se+1; + *end = strtol(ss, &se, 10) - 1; + if ( ss==se ) error("[%s:%d %s] Could not parse the line: %s\n",__FILE__,__LINE__,__FUNCTION__,line); + return se+1; +} +static void gff_id_init(id_tbl_t *tbl) +{ + memset(tbl, 0, sizeof(*tbl)); + tbl->str2id = khash_str2int_init(); +} +static void gff_id_destroy(id_tbl_t *tbl) +{ + khash_str2int_destroy_free(tbl->str2id); + free(tbl->str); +} +static inline uint32_t gff_id_parse(id_tbl_t *tbl, const char *line, const char *needle, char *ss) +{ + ss = strstr(ss,needle); // e.g. "ID=transcript:" + if ( !ss ) error("[%s:%d %s] Could not parse the line, \"%s\" not present: %s\n",__FILE__,__LINE__,__FUNCTION__,needle,line); + ss += strlen(needle); + + char *se = ss; + while ( *se && *se!=';' && !isspace(*se) ) se++; + char tmp = *se; + *se = 0; + + int id; + if ( khash_str2int_get(tbl->str2id, ss, &id) < 0 ) + { + id = tbl->nstr++; + hts_expand(char*, tbl->nstr, tbl->mstr, tbl->str); + tbl->str[id] = strdup(ss); + int ret = khash_str2int_set(tbl->str2id, tbl->str[id], id); + } + *se = tmp; + + return id; +} +static inline int gff_parse_type(char *line) +{ + line = strstr(line,"ID="); + if ( !line ) return -1; + line += 3; + if ( !strncmp(line,"transcript:",11) ) return GFF_TSCRIPT_LINE; + else if ( !strncmp(line,"gene:",5) ) return GFF_GENE_LINE; + return -1; +} +static inline int gff_parse_biotype(char *_line) +{ + char *line = strstr(_line,"biotype="); + if ( !line ) return -1; + + line += 8; + switch (*line) + { + case 'p': + if ( !strncmp(line,"protein_coding",14) ) return GF_PROTEIN_CODING; + else if ( !strncmp(line,"pseudogene",10) ) return GF_PSEUDOGENE; + else if ( !strncmp(line,"processed_transcript",20) ) return GF_PROCESSED_TRANSCRIPT; + else if ( !strncmp(line,"processed_pseudogene",20) ) return GF_PROCESSED_PSEUDOGENE; + else if ( !strncmp(line,"polymorphic_pseudogene",22) ) return GF_POLYMORPHIC_PSEUDOGENE; + break; + case 'a': + if ( !strncmp(line,"artifact",8) ) return GF_ARTIFACT; + else if ( !strncmp(line,"antisense",9) ) return GF_ANTISENSE; + else if ( !strncmp(line,"ambiguous_orf",13) ) return GF_AMBIGUOUS_ORF; + break; + case 'I': + if ( !strncmp(line,"IG_C_gene",9) ) return GF_IG_C; + else if ( !strncmp(line,"IG_D_gene",9) ) return GF_IG_D; + else if ( !strncmp(line,"IG_J_gene",9) ) return GF_IG_J; + else if ( !strncmp(line,"IG_LV_gene",10) ) return GF_IG_LV; + else if ( !strncmp(line,"IG_V_gene",9) ) return GF_IG_V; + else if ( !strncmp(line,"IG_pseudogene",13) ) return GF_IG_PSEUDOGENE; + else if ( !strncmp(line,"IG_C_pseudogene",15) ) return GF_IG_C_PSEUDOGENE; + else if ( !strncmp(line,"IG_J_pseudogene",15) ) return GF_IG_J_PSEUDOGENE; + else if ( !strncmp(line,"IG_V_pseudogene",15) ) return GF_IG_V_PSEUDOGENE; + break; + case 'T': + if ( !strncmp(line,"TR_C_gene",9) ) return GF_TR_C; + else if ( !strncmp(line,"TR_D_gene",9) ) return GF_TR_D; + else if ( !strncmp(line,"TR_J_gene",9) ) return GF_TR_J; + else if ( !strncmp(line,"TR_V_gene",9) ) return GF_TR_V; + else if ( !strncmp(line,"TR_V_pseudogene",15) ) return GF_TR_V_PSEUDOGENE; + else if ( !strncmp(line,"TR_J_pseudogene",15) ) return GF_TR_J_PSEUDOGENE; + break; + case 'M': + if ( !strncmp(line,"Mt_tRNA_pseudogene",18) ) return GF_MT_tRNA_PSEUDOGENE; + else if ( !strncmp(line,"Mt_tRNA",7) ) return GF_MT_tRNA; + else if ( !strncmp(line,"Mt_rRNA",7) ) return GF_MT_tRNA; + break; + case 'l': + if ( !strncmp(line,"lincRNA",7) ) return GF_lincRNA; + break; + case 'm': + if ( !strncmp(line,"macro_lncRNA",12) ) return GF_macro_lncRNA; + else if ( !strncmp(line,"misc_RNA_pseudogene",19) ) return GF_misc_RNA_PSEUDOGENE; + else if ( !strncmp(line,"miRNA_pseudogene",16) ) return GF_miRNA_PSEUDOGENE; + else if ( !strncmp(line,"miRNA",5) ) return GF_miRNA; + else if ( !strncmp(line,"misc_RNA",8) ) return GF_MISC_RNA; + break; + case 'r': + if ( !strncmp(line,"rRNA",4) ) return GF_rRNA; + else if ( !strncmp(line,"ribozyme",8) ) return GF_RIBOZYME; + else if ( !strncmp(line,"retained_intron",15) ) return GF_RETAINED_INTRON; + else if ( !strncmp(line,"retrotransposed",15) ) return GF_RETROTRANSPOSED; + break; + case 's': + if ( !strncmp(line,"snRNA",5) ) return GF_snRNA; + else if ( !strncmp(line,"sRNA",4) ) return GF_sRNA; + else if ( !strncmp(line,"scRNA",5) ) return GF_scRNA; + else if ( !strncmp(line,"scaRNA",6) ) return GF_scaRNA; + else if ( !strncmp(line,"snoRNA",6) ) return GF_snoRNA; + else if ( !strncmp(line,"sense_intronic",14) ) return GF_SENSE_INTRONIC; + else if ( !strncmp(line,"sense_overlapping",17) ) return GF_SENSE_OVERLAPPING; + break; + case 't': + if ( !strncmp(line,"tRNA_pseudogene",15) ) return GF_tRNA_PSEUDOGENE; + else if ( !strncmp(line,"transcribed_processed_pseudogene",32) ) return GF_TRANSCRIBED_PROCESSED_PSEUDOGENE; + else if ( !strncmp(line,"transcribed_unprocessed_pseudogene",34) ) return GF_TRANSCRIBED_UNPROCESSED_PSEUDOGENE; + else if ( !strncmp(line,"transcribed_unitary_pseudogene",30) ) return GF_TRANSCRIBED_UNITARY_PSEUDOGENE; + else if ( !strncmp(line,"translated_unprocessed_pseudogene",33) ) return GF_TRANSLATED_UNPROCESSED_PSEUDOGENE; + else if ( !strncmp(line,"translated_processed_pseudogene",31) ) return GF_TRANSLATED_PROCESSED_PSEUDOGENE; + break; + case 'n': + if ( !strncmp(line,"nonsense_mediated_decay",23) ) return GF_NMD; + else if ( !strncmp(line,"non_stop_decay",14) ) return GF_NON_STOP_DECAY; + break; + case 'k': + if ( !strncmp(line,"known_ncrna",11) ) return GF_KNOWN_NCRNA; + break; + case 'u': + if ( !strncmp(line,"unitary_pseudogene",18) ) return GF_UNITARY_PSEUDOGENE; + else if ( !strncmp(line,"unprocessed_pseudogene",22) ) return GF_UNPROCESSED_PSEUDOGENE; + break; + case 'L': + if ( !strncmp(line,"LRG_gene",8) ) return GF_LRG_GENE; + break; + case '3': + if ( !strncmp(line,"3prime_overlapping_ncRNA",24) ) return GF_3PRIME_OVERLAPPING_ncRNA; + break; + case 'd': + if ( !strncmp(line,"disrupted_domain",16) ) return GF_DISRUPTED_DOMAIN; + break; + case 'v': + if ( !strncmp(line,"vaultRNA",8) ) return GF_vaultRNA; + break; + case 'b': + if ( !strncmp(line,"bidirectional_promoter_lncRNA",29) ) return GF_BIDIRECTIONAL_PROMOTER_lncRNA; + break; + } + return 0; +} +static inline int gff_ignored_biotype(args_t *args, char *ss) +{ + ss = strstr(ss,"biotype="); + if ( !ss ) return 0; + + ss += 8; + char *se = ss, tmp; + while ( *se && *se!=';' ) se++; + tmp = *se; + *se = 0; + + char *key = ss; + int n = 0; + if ( khash_str2int_get(args->init.ignored_biotypes, ss, &n)!=0 ) key = strdup(ss); + khash_str2int_set(args->init.ignored_biotypes, key, n+1); + + *se = tmp; + return 1; +} +gf_gene_t *gene_init(aux_t *aux, uint32_t gene_id) +{ + khint_t k = kh_get(int2gene, aux->gid2gene, (int)gene_id); + gf_gene_t *gene = (k == kh_end(aux->gid2gene)) ? NULL : kh_val(aux->gid2gene, k); + if ( !gene ) + { + gene = (gf_gene_t*) calloc(1,sizeof(gf_gene_t)); + int ret; + k = kh_put(int2gene, aux->gid2gene, (int)gene_id, &ret); + kh_val(aux->gid2gene,k) = gene; + } + return gene; +} +void gff_parse_transcript(args_t *args, const char *line, char *ss, ftr_t *ftr) +{ + aux_t *aux = &args->init; + int biotype = gff_parse_biotype(ss); + if ( biotype <= 0 ) + { + if ( !gff_ignored_biotype(args, ss) && args->quiet<2 ) fprintf(bcftools_stderr,"ignored transcript: %s\n",line); + return; + } + + // create a mapping from transcript_id to gene_id + uint32_t trid = gff_id_parse(&args->tscript_ids, line, "ID=transcript:", ss); + uint32_t gene_id = gff_id_parse(&args->init.gene_ids, line, "Parent=gene:", ss); + + tscript_t *tr = (tscript_t*) calloc(1,sizeof(tscript_t)); + tr->id = trid; + tr->strand = ftr->strand; + tr->gene = gene_init(aux, gene_id); + tr->type = biotype; + tr->beg = ftr->beg; + tr->end = ftr->end; + + khint_t k; + int ret; + k = kh_put(int2tscript, aux->id2tr, (int)trid, &ret); + kh_val(aux->id2tr,k) = tr; +} +void gff_parse_gene(args_t *args, const char *line, char *ss, char *chr_beg, char *chr_end, ftr_t *ftr) +{ + int biotype = gff_parse_biotype(ss); + if ( biotype <= 0 ) + { + if ( !gff_ignored_biotype(args, ss) && args->quiet<2 ) fprintf(bcftools_stderr,"ignored gene: %s\n",line); + return; + } + + aux_t *aux = &args->init; + + // substring search for "ID=gene:ENSG00000437963" + uint32_t gene_id = gff_id_parse(&aux->gene_ids, line, "ID=gene:", ss); + gf_gene_t *gene = gene_init(aux, gene_id); + assert( !gene->name ); // the gene_id should be unique + + gene->iseq = feature_set_seq(args, chr_beg,chr_end); + + // substring search for "Name=OR4F5" + ss = strstr(chr_end+2,"Name="); + if ( ss ) + { + ss += 5; + char *se = ss; + while ( *se && *se!=';' && !isspace(*se) ) se++; + gene->name = (char*) malloc(se-ss+1); + memcpy(gene->name,ss,se-ss); + gene->name[se-ss] = 0; + } + else + gene->name = strdup(aux->gene_ids.str[gene_id]); // Name= field is not present, use the gene ID instead +} +int gff_parse(args_t *args, char *line, ftr_t *ftr) +{ + // - skip empty lines and commented lines + // - columns + // 1. chr + // 2. + // 3. CDS, transcript, gene, ... + // 4-5. beg,end + // 6. + // 7. strand + // 8. phase + // 9. Parent=transcript:ENST(\d+);ID=... etc + + char *ss = line; + if ( !*ss ) return -1; // skip blank lines + if ( *ss=='#' ) return -1; // skip comments + + char *chr_beg, *chr_end; + gff_parse_chr(line, &chr_beg, &chr_end); + ss = gff_skip(line, chr_end + 2); + + // 3. column: is this a CDS, transcript, gene, etc. + if ( !strncmp("exon\t",ss,5) ) { ftr->type = GF_EXON; ss += 5; } + else if ( !strncmp("CDS\t",ss,4) ) { ftr->type = GF_CDS; ss += 4; } + else if ( !strncmp("three_prime_UTR\t",ss,16) ) { ftr->type = GF_UTR3; ss += 16; } + else if ( !strncmp("five_prime_UTR\t",ss,15) ) { ftr->type = GF_UTR5; ss += 15; } + else + { + ss = gff_skip(line, ss); + ss = gff_parse_beg_end(line, ss, &ftr->beg,&ftr->end); + ss = gff_skip(line, ss); + int type = gff_parse_type(ss); + if ( type!=GFF_TSCRIPT_LINE && type!=GFF_GENE_LINE ) + { + // we ignore these, debug print to see new types: + ss = strstr(ss,"ID="); + if ( !ss ) return -1; // no ID, ignore the line + if ( !strncmp("chromosome",ss+3,10) ) return -1; + if ( !strncmp("supercontig",ss+3,11) ) return -1; + if ( args->quiet<2 ) fprintf(bcftools_stderr,"ignored: %s\n", line); + return -1; + } + + // 7. column: strand + if ( *ss == '+' ) ftr->strand = STRAND_FWD; + else if ( *ss == '-' ) ftr->strand = STRAND_REV; + else error("Unknown strand: %c .. %s\n", *ss,ss); + + if ( type==GFF_TSCRIPT_LINE ) + gff_parse_transcript(args, line, ss, ftr); + else + gff_parse_gene(args, line, ss, chr_beg, chr_end, ftr); + + return -1; + } + ss = gff_parse_beg_end(line, ss, &ftr->beg,&ftr->end); + ss = gff_skip(line, ss); + + // 7. column: strand + if ( *ss == '+' ) ftr->strand = STRAND_FWD; + else if ( *ss == '-' ) ftr->strand = STRAND_REV; + else { if ( args->quiet<2 ) fprintf(bcftools_stderr,"Skipping unknown strand: %c\n", *ss); return -1; } + ss += 2; + + // 8. column: phase (codon offset) + if ( *ss == '0' ) ftr->phase = 0; + else if ( *ss == '1' ) ftr->phase = 1; + else if ( *ss == '2' ) ftr->phase = 2; + else if ( *ss == '.' ) ftr->phase = 0; // exons do not have phase + else { if ( args->quiet<2 ) fprintf(bcftools_stderr,"Skipping unknown phase: %c, %s\n", *ss, line); return -1; } + ss += 2; + + // substring search for "Parent=transcript:ENST00000437963" + ftr->trid = gff_id_parse(&args->tscript_ids, line, "Parent=transcript:", ss); + ftr->iseq = feature_set_seq(args, chr_beg,chr_end); + return 0; +} + +static int cmp_cds_ptr(const void *a, const void *b) +{ + // comparison function for qsort of transcripts's CDS + if ( (*((gf_cds_t**)a))->beg < (*((gf_cds_t**)b))->beg ) return -1; + if ( (*((gf_cds_t**)a))->beg > (*((gf_cds_t**)b))->beg ) return 1; + return 0; +} + +static inline void chr_beg_end(aux_t *aux, int iseq, char **chr_beg, char **chr_end) +{ + *chr_beg = *chr_end = aux->seq[iseq]; + while ( (*chr_end)[1] ) (*chr_end)++; +} +tscript_t *tscript_init(aux_t *aux, uint32_t trid) +{ + khint_t k = kh_get(int2tscript, aux->id2tr, (int)trid); + tscript_t *tr = (k == kh_end(aux->id2tr)) ? NULL : kh_val(aux->id2tr, k); + assert( tr ); + return tr; +} +void register_cds(args_t *args, ftr_t *ftr) +{ + // Make the CDS searchable via idx_cds. Note we do not malloc tr->cds just yet. + // ftr is the result of parsing a gff CDS line + aux_t *aux = &args->init; + + tscript_t *tr = tscript_init(aux, ftr->trid); + if ( tr->strand != ftr->strand ) error("Conflicting strand in transcript %"PRIu32" .. %d vs %d\n",ftr->trid,tr->strand,ftr->strand); + + gf_cds_t *cds = (gf_cds_t*) malloc(sizeof(gf_cds_t)); + cds->tr = tr; + cds->beg = ftr->beg; + cds->len = ftr->end - ftr->beg + 1; + cds->icds = 0; // to keep valgrind on mac happy + cds->phase = ftr->phase; + + hts_expand(gf_cds_t*,tr->ncds+1,tr->mcds,tr->cds); + tr->cds[tr->ncds++] = cds; +} +void register_utr(args_t *args, ftr_t *ftr) +{ + aux_t *aux = &args->init; + gf_utr_t *utr = (gf_utr_t*) malloc(sizeof(gf_utr_t)); + utr->which = ftr->type==GF_UTR3 ? prime3 : prime5; + utr->beg = ftr->beg; + utr->end = ftr->end; + utr->tr = tscript_init(aux, ftr->trid); + + char *chr_beg, *chr_end; + chr_beg_end(&args->init, utr->tr->gene->iseq, &chr_beg, &chr_end); + regidx_push(args->idx_utr, chr_beg,chr_end, utr->beg,utr->end, &utr); +} +void register_exon(args_t *args, ftr_t *ftr) +{ + aux_t *aux = &args->init; + gf_exon_t *exon = (gf_exon_t*) malloc(sizeof(gf_exon_t)); + exon->beg = ftr->beg; + exon->end = ftr->end; + exon->tr = tscript_init(aux, ftr->trid); + + char *chr_beg, *chr_end; + chr_beg_end(&args->init, exon->tr->gene->iseq, &chr_beg, &chr_end); + regidx_push(args->idx_exon, chr_beg,chr_end, exon->beg - N_SPLICE_REGION_INTRON, exon->end + N_SPLICE_REGION_INTRON, &exon); +} + +void tscript_init_cds(args_t *args) +{ + aux_t *aux = &args->init; + + // Sort CDS in all transcripts, set offsets, check their phase, length, create index (idx_cds) + khint_t k; + for (k=0; kid2tr); k++) + { + if ( !kh_exist(aux->id2tr, k) ) continue; + tscript_t *tr = (tscript_t*) kh_val(aux->id2tr, k); + + // position-to-tscript lookup + char *chr_beg, *chr_end; + chr_beg_end(aux, tr->gene->iseq, &chr_beg, &chr_end); + regidx_push(args->idx_tscript, chr_beg, chr_end, tr->beg, tr->end, &tr); + + if ( !tr->ncds ) continue; // transcript with no CDS + + // sort CDs + qsort(tr->cds, tr->ncds, sizeof(gf_cds_t*), cmp_cds_ptr); + + // trim non-coding start + int i, len = 0; + if ( tr->strand==STRAND_FWD ) + { + if ( tr->cds[0]->phase ) tr->trim |= TRIM_5PRIME; + tr->cds[0]->beg += tr->cds[0]->phase; + tr->cds[0]->len -= tr->cds[0]->phase; + tr->cds[0]->phase = 0; + + // sanity check phase + for (i=0; incds; i++) + { + int phase = tr->cds[i]->phase ? 3 - tr->cds[i]->phase : 0; + if ( phase!=len%3) + error("GFF3 assumption failed for transcript %s, CDS=%d: phase!=len%%3 (phase=%d, len=%d)\n",args->tscript_ids.str[tr->id],tr->cds[i]->beg+1,phase,len); + assert( phase == len%3 ); + len += tr->cds[i]->len; + } + } + else + { + // Check that the phase is not bigger than CDS length. Curiously, this can really happen, + // see Mus_musculus.GRCm38.85.gff3.gz, transcript:ENSMUST00000163141 + // todo: the same for the fwd strand + i = tr->ncds - 1; + int phase = tr->cds[i]->phase; + if ( phase ) tr->trim |= TRIM_5PRIME; + while ( i>=0 && phase > tr->cds[i]->len ) + { + phase -= tr->cds[i]->len; + tr->cds[i]->phase = 0; + tr->cds[i]->len = 0; + i--; + } + tr->cds[i]->len -= tr->cds[i]->phase; + tr->cds[i]->phase = 0; + + // sanity check phase + for (i=tr->ncds-1; i>=0; i--) + { + int phase = tr->cds[i]->phase ? 3 - tr->cds[i]->phase : 0; + if ( phase!=len%3) + error("GFF3 assumption failed for transcript %s, CDS=%d: phase!=len%%3 (phase=%d, len=%d)\n",args->tscript_ids.str[tr->id],tr->cds[i]->beg+1,phase,len); + len += tr->cds[i]->len; + } + } + + // set len. At the same check that CDS within a transcript do not overlap + len = 0; + for (i=0; incds; i++) + { + tr->cds[i]->icds = i; + len += tr->cds[i]->len; + if ( !i ) continue; + + gf_cds_t *a = tr->cds[i-1]; + gf_cds_t *b = tr->cds[i]; + if ( a->beg + a->len - 1 >= b->beg ) + error("Error: CDS overlap in the transcript %"PRIu32": %"PRIu32"-%"PRIu32" and %"PRIu32"-%"PRIu32"\n", + kh_key(aux->id2tr, k), a->beg+1,a->beg+a->len, b->beg+1,b->beg+b->len); + } + if ( len%3 != 0 ) + { + // There are 13k transcripts with incomplete 3' CDS. See for example ENST00000524289 + // http://sep2015.archive.ensembl.org/Homo_sapiens/Transcript/Sequence_cDNA?db=core;g=ENSG00000155868;r=5:157138846-157159019;t=ENST00000524289 + // Also, the incomplete CDS can be too short (1 or 2bp), so it is not enough to trim the last one. + + tr->trim |= TRIM_3PRIME; + if ( tr->strand==STRAND_FWD ) + { + i = tr->ncds - 1; + while ( i>=0 && len%3 ) + { + int dlen = tr->cds[i]->len >= len%3 ? len%3 : tr->cds[i]->len; + tr->cds[i]->len -= dlen; + len -= dlen; + i--; + } + } + else + { + i = 0; + while ( incds && len%3 ) + { + int dlen = tr->cds[i]->len >= len%3 ? len%3 : tr->cds[i]->len; + tr->cds[i]->len -= dlen; + tr->cds[i]->beg += dlen; + len -= dlen; + i++; + } + } + } + + // set CDS offsets and insert into regidx + len=0; + for (i=0; incds; i++) + { + tr->cds[i]->pos = len; + len += tr->cds[i]->len; + regidx_push(args->idx_cds, chr_beg,chr_end, tr->cds[i]->beg,tr->cds[i]->beg+tr->cds[i]->len-1, &tr->cds[i]); + } + } +} + +void regidx_free_gf(void *payload) { free(*((gf_cds_t**)payload)); } +void regidx_free_tscript(void *payload) { tscript_t *tr = *((tscript_t**)payload); free(tr->cds); free(tr); } + +void init_gff(args_t *args) +{ + aux_t *aux = &args->init; + aux->seq2int = khash_str2int_init(); // chrom's numeric id + aux->gid2gene = kh_init(int2gene); // gene id to gf_gene_t, for idx_gene + aux->id2tr = kh_init(int2tscript); // transcript id to tscript_t + args->idx_tscript = regidx_init(NULL, NULL, regidx_free_tscript, sizeof(tscript_t*), NULL); + aux->ignored_biotypes = khash_str2int_init(); + gff_id_init(&aux->gene_ids); + gff_id_init(&args->tscript_ids); + + // parse gff + kstring_t str = {0,0,0}; + htsFile *fp = hts_open(args->gff_fname,"r"); + if ( !fp ) error("Failed to read %s\n", args->gff_fname); + while ( hts_getline(fp, KS_SEP_LINE, &str) > 0 ) + { + hts_expand(ftr_t, aux->nftr+1, aux->mftr, aux->ftr); + int ret = gff_parse(args, str.s, aux->ftr + aux->nftr); + if ( !ret ) aux->nftr++; + } + free(str.s); + if ( hts_close(fp)!=0 ) error("Close failed: %s\n", args->gff_fname); + + + // process gff information: connect CDS and exons to transcripts + args->idx_cds = regidx_init(NULL, NULL, regidx_free_gf, sizeof(gf_cds_t*), NULL); + args->idx_utr = regidx_init(NULL, NULL, regidx_free_gf, sizeof(gf_utr_t*), NULL); + args->idx_exon = regidx_init(NULL, NULL, regidx_free_gf, sizeof(gf_exon_t*), NULL); + args->itr = regitr_init(NULL); + + int i; + for (i=0; inftr; i++) + { + ftr_t *ftr = &aux->ftr[i]; + + // check whether to keep this feature: is there a mapping trid -> gene_id -> gene? + khint_t k = kh_get(int2tscript, aux->id2tr, (int)ftr->trid); + if ( k==kh_end(aux->id2tr) ) continue; // no such transcript + + tscript_t *tr = kh_val(aux->id2tr,k); + if ( !tr->gene->name ) + { + // not a supported biotype (e.g. gene:pseudogene, transcript:processed_transcript) + regidx_free_tscript(&tr); + kh_del(int2tscript, aux->id2tr,k); + continue; + } + + // populate regidx by category: + // ftr->type .. GF_CDS, GF_EXON, GF_UTR3, GF_UTR5 + // gene->type .. GF_PROTEIN_CODING, GF_MT_rRNA, GF_IG_C, ... + if ( ftr->type==GF_CDS ) register_cds(args, ftr); + else if ( ftr->type==GF_EXON ) register_exon(args, ftr); + else if ( ftr->type==GF_UTR5 ) register_utr(args, ftr); + else if ( ftr->type==GF_UTR3 ) register_utr(args, ftr); + else + error("something: %s\t%d\t%d\t%s\t%s\n", aux->seq[ftr->iseq],ftr->beg+1,ftr->end+1,args->tscript_ids.str[ftr->trid],gf_type2gff_string(ftr->type)); + } + tscript_init_cds(args); + + if ( !args->quiet ) + { + fprintf(bcftools_stderr,"Indexed %d transcripts, %d exons, %d CDSs, %d UTRs\n", + regidx_nregs(args->idx_tscript), + regidx_nregs(args->idx_exon), + regidx_nregs(args->idx_cds), + regidx_nregs(args->idx_utr)); + } + + free(aux->ftr); + khash_str2int_destroy_free(aux->seq2int); + // keeping only to destroy the genes at the end: kh_destroy(int2gene,aux->gid2gene); + kh_destroy(int2tscript,aux->id2tr); + free(aux->seq); + gff_id_destroy(&aux->gene_ids); + + if ( args->quiet<2 && khash_str2int_size(aux->ignored_biotypes) ) + { + khash_t(str2int) *ign = (khash_t(str2int)*)aux->ignored_biotypes; + fprintf(bcftools_stderr,"Ignored the following biotypes:\n"); + for (i = kh_begin(ign); i < kh_end(ign); i++) + { + if ( !kh_exist(ign,i)) continue; + fprintf(bcftools_stderr,"\t%dx\t.. %s\n", kh_value(ign,i), kh_key(ign,i)); + } + } + khash_str2int_destroy_free(aux->ignored_biotypes); +} + +void init_data(args_t *args) +{ + args->nfmt_bcsq = 1 + (args->ncsq_max - 1) / 32; + + if ( !args->quiet ) fprintf(bcftools_stderr,"Parsing %s ...\n", args->gff_fname); + init_gff(args); + + args->rid = -1; + + if ( args->filter_str ) + args->filter = filter_init(args->hdr, args->filter_str); + + args->fai = fai_load(args->fa_fname); + if ( !args->fai ) error("Failed to load the fai index: %s\n", args->fa_fname); + + args->pos2vbuf = kh_init(pos2vbuf); + args->active_tr = khp_init(trhp); + args->hap = (hap_t*) calloc(1,sizeof(hap_t)); + + // init samples + if ( !bcf_hdr_nsamples(args->hdr) ) args->phase = PHASE_DROP_GT; + if ( args->sample_list && !strcmp("-",args->sample_list) ) + { + // ignore all samples + if ( args->output_type==FT_TAB_TEXT ) + { + // significant speedup for plain VCFs + bcf_hdr_set_samples(args->hdr,NULL,0); + } + args->phase = PHASE_DROP_GT; + } + else + args->smpl = smpl_ilist_init(args->hdr, args->sample_list, args->sample_is_file, SMPL_STRICT); + args->hdr_nsmpl = args->phase==PHASE_DROP_GT ? 0 : bcf_hdr_nsamples(args->hdr); + + if ( args->output_type==FT_TAB_TEXT ) + { + args->out = args->output_fname ? fopen(args->output_fname,"w") : bcftools_stdout; + if ( !args->out ) error("Failed to open %s: %s\n", args->output_fname,strerror(errno)); + + fprintf(args->out,"# This file was produced by: bcftools +csq(%s+htslib-%s)\n", bcftools_version(),hts_version()); + fprintf(args->out,"# The command line was:\tbcftools +%s", args->argv[0]); + int i; + for (i=1; iargc; i++) + fprintf(args->out," %s",args->argv[i]); + fprintf(args->out,"\n"); + fprintf(args->out,"# LOG\t[2]Message\n"); + fprintf(args->out,"# CSQ"); i = 1; + fprintf(args->out,"\t[%d]Sample", ++i); + fprintf(args->out,"\t[%d]Haplotype", ++i); + fprintf(args->out,"\t[%d]Chromosome", ++i); + fprintf(args->out,"\t[%d]Position", ++i); + fprintf(args->out,"\t[%d]Consequence", ++i); + fprintf(args->out,"\n"); + } + else + { + args->out_fh = hts_open(args->output_fname? args->output_fname : "-",hts_bcf_wmode(args->output_type)); + if ( args->out_fh == NULL ) error("Can't write to %s: %s\n", args->output_fname? args->output_fname : "standard output", strerror(errno)); + bcf_hdr_append_version(args->hdr,args->argc,args->argv,"bcftools/csq"); + bcf_hdr_printf(args->hdr,"##INFO=",args->bcsq_tag, args->local_csq ? "Local" : "Haplotype-aware"); + if ( args->hdr_nsmpl ) + bcf_hdr_printf(args->hdr,"##FORMAT=",args->bcsq_tag); + bcf_hdr_write(args->out_fh, args->hdr); + } + if ( !args->quiet ) fprintf(bcftools_stderr,"Calling...\n"); +} + +void destroy_data(args_t *args) +{ + regidx_destroy(args->idx_cds); + regidx_destroy(args->idx_utr); + regidx_destroy(args->idx_exon); + regidx_destroy(args->idx_tscript); + regitr_destroy(args->itr); + + khint_t k,i,j; + for (k=0; kinit.gid2gene); k++) + { + if ( !kh_exist(args->init.gid2gene, k) ) continue; + gf_gene_t *gene = (gf_gene_t*) kh_val(args->init.gid2gene, k); + free(gene->name); + free(gene); + } + kh_destroy(int2gene,args->init.gid2gene); + + if ( args->filter ) + filter_destroy(args->filter); + + khp_destroy(trhp,args->active_tr); + kh_destroy(pos2vbuf,args->pos2vbuf); + if ( args->smpl ) smpl_ilist_destroy(args->smpl); + int ret; + if ( args->out_fh ) + ret = hts_close(args->out_fh); + else + ret = fclose(args->out); + if ( ret ) error("Error: close failed .. %s\n", args->output_fname?args->output_fname:"bcftools_stdout"); + for (i=0; ivcf_rbuf.m; i++) + { + vbuf_t *vbuf = args->vcf_buf[i]; + if ( !vbuf ) continue; + for (j=0; jm; j++) + { + if ( !vbuf->vrec[j] ) continue; + if ( vbuf->vrec[j]->line ) bcf_destroy(vbuf->vrec[j]->line); + free(vbuf->vrec[j]->smpl); + free(vbuf->vrec[j]->vcsq); + free(vbuf->vrec[j]); + } + free(vbuf->vrec); + free(vbuf); + } + free(args->vcf_buf); + free(args->rm_tr); + free(args->csq_buf); + free(args->hap->stack); + free(args->hap->sseq.s); + free(args->hap->tseq.s); + free(args->hap->tref.s); + free(args->hap); + fai_destroy(args->fai); + free(args->gt_arr); + free(args->str.s); + free(args->str2.s); + gff_id_destroy(&args->tscript_ids); +} + +/* + The splice_* functions are for consquences around splice sites: start,stop,splice_* + */ +#define SPLICE_VAR_REF 0 // ref: ACGT>ACGT, csq not applicable, skip completely +#define SPLICE_OUTSIDE 1 // splice acceptor or similar; csq set and is done, does not overlap the region +#define SPLICE_INSIDE 2 // overlaps coding region; csq can be set but coding prediction is needed +#define SPLICE_OVERLAP 3 // indel overlaps region boundary, csq set but could not determine csq +typedef struct +{ + tscript_t *tr; + struct { + int32_t pos, rlen, alen; + char *ref, *alt; + bcf1_t *rec; + } vcf; + uint16_t check_acceptor:1, // check distance from exon start (fwd) or end (rev) + check_start:1, // this is the first coding exon (relative to transcript orientation), check first (fwd) or last (rev) codon + check_stop:1, // this is the last coding exon (relative to transcript orientation), check last (fwd) or first (rev) codon + check_donor:1, // as with check_acceptor + check_region_beg:1, // do/don't check for splices at this end, eg. in the first or last exon + check_region_end:1, // + check_utr:1, // check splice sites (acceptor/donor/region_*) only if not in utr + set_refalt:1; // set kref,kalt, if set, check also for synonymous events + uint32_t csq; + int tbeg, tend; // number of trimmed bases from beg and end of ref,alt allele + uint32_t ref_beg, // ref coordinates with spurious bases removed, ACC>AC can become AC>A or CC>C, whichever gives + ref_end; // a more conservative csq (the first and last base in kref.s) + kstring_t kref, kalt; // trimmed alleles, set only with SPLICE_OLAP +} +splice_t; +void splice_init(splice_t *splice, bcf1_t *rec) +{ + memset(splice,0,sizeof(*splice)); + splice->vcf.rec = rec; + splice->vcf.pos = rec->pos; + splice->vcf.rlen = rec->rlen; + splice->vcf.ref = rec->d.allele[0]; +} +static inline void splice_build_hap(splice_t *splice, uint32_t beg, int len) +{ + // len>0 .. beg is the first base, del filled from right + // len<0 .. beg is the last base, del filled from left + + int rlen, alen, rbeg, abeg; // first base to include (ref coordinates) + if ( len<0 ) + { + rlen = alen = -len; + rbeg = beg - rlen + 1; + int dlen = splice->vcf.alen - splice->vcf.rlen; + if ( dlen<0 && beg < splice->ref_end ) // incomplete del, beg is in the middle + dlen += splice->ref_end - beg; + abeg = rbeg + dlen; + } + else + { + rbeg = abeg = beg; + rlen = alen = len; + // check for incomplete del as above?? + } + +#define XDBG 0 +#if XDBG +fprintf(bcftools_stderr,"build_hap: rbeg=%d + %d abeg=%d \n",rbeg,rlen,abeg); +#endif + splice->kref.l = 0; + splice->kalt.l = 0; + + // add the part before vcf.ref, in the vcf.ref and after vcf.ref + int roff; // how many vcf.ref bases already used + if ( rbeg < splice->vcf.pos ) + { + assert( splice->tr->beg <= rbeg ); // this can be extended thanks to N_REF_PAD + kputsn(splice->tr->ref + N_REF_PAD + rbeg - splice->tr->beg, splice->vcf.pos - rbeg, &splice->kref); + roff = 0; + } + else + roff = rbeg - splice->vcf.pos; +#if XDBG +fprintf(bcftools_stderr,"r1: %s roff=%d\n",splice->kref.s,roff); +#endif + + if ( roff < splice->vcf.rlen && splice->kref.l < rlen ) + { + int len = splice->vcf.rlen - roff; // len still available in vcf.ref + if ( len > rlen - splice->kref.l ) len = rlen - splice->kref.l; // how much of ref allele is still needed + kputsn(splice->vcf.ref + roff, len, &splice->kref); + } +#if XDBG +fprintf(bcftools_stderr,"r2: %s\n",splice->kref.s); +#endif + + uint32_t end = splice->vcf.pos + splice->vcf.rlen; // position just after the ref allele + if ( splice->kref.l < rlen ) + { + if ( end + rlen - splice->kref.l - 1 > splice->tr->end ) // trim, the requested sequence is too long (could be extended, see N_REF_PAD) + rlen -= end + rlen - splice->kref.l - 1 - splice->tr->end; + if ( splice->kref.l < rlen ) + kputsn(splice->tr->ref + N_REF_PAD + end - splice->tr->beg, rlen - splice->kref.l, &splice->kref); + } +#if XDBG +fprintf(bcftools_stderr,"r3: %s\n",splice->kref.s); +#endif + + + int aoff; + if ( abeg < splice->vcf.pos ) + { + assert( splice->tr->beg <= abeg ); + kputsn(splice->tr->ref + N_REF_PAD + abeg - splice->tr->beg, splice->vcf.pos - abeg, &splice->kalt); + aoff = 0; + } + else + aoff = abeg - splice->vcf.pos; +#if XDBG +fprintf(bcftools_stderr,"a1: %s aoff=%d\n",splice->kalt.s,aoff); +#endif + + if ( aoff < splice->vcf.alen && splice->kalt.l < alen ) + { + int len = splice->vcf.alen - aoff; // len still available in vcf.alt + if ( len > alen - splice->kalt.l ) len = alen - splice->kalt.l; // how much of alt allele is still needed + kputsn(splice->vcf.alt + aoff, len, &splice->kalt); + aoff -= len; + } + if ( aoff < 0 ) aoff = 0; + else aoff--; +#if XDBG +fprintf(bcftools_stderr,"a2: %s aoff=%d\n",splice->kalt.s,aoff); +#endif + + end = splice->vcf.pos + splice->vcf.rlen; // position just after the ref allele + if ( splice->kalt.l < alen ) + { + if ( end + alen + aoff - splice->kalt.l - 1 > splice->tr->end ) // trim, the requested sequence is too long + alen -= end + alen + aoff - splice->kalt.l - 1 - splice->tr->end; + if ( alen > 0 && alen > splice->kalt.l ) + kputsn(splice->tr->ref + aoff + N_REF_PAD + end - splice->tr->beg, alen - splice->kalt.l, &splice->kalt); + } +#if XDBG +fprintf(bcftools_stderr,"a3: %s\n",splice->kalt.s); +fprintf(bcftools_stderr," [%s]\n [%s]\n\n",splice->kref.s,splice->kalt.s); +#endif +} +void csq_stage(args_t *args, csq_t *csq, bcf1_t *rec); +static inline int csq_stage_utr(args_t *args, regitr_t *itr, bcf1_t *rec, uint32_t trid) +{ + while ( regitr_overlap(itr) ) + { + gf_utr_t *utr = regitr_payload(itr, gf_utr_t*); + tscript_t *tr = utr->tr; + if ( tr->id != trid ) continue; + csq_t csq; + memset(&csq, 0, sizeof(csq_t)); + csq.pos = rec->pos; + csq.type.type = utr->which==prime5 ? CSQ_UTR5 : CSQ_UTR3; + csq.type.biotype = tr->type; + csq.type.strand = tr->strand; + csq.type.trid = tr->id; + csq.type.gene = tr->gene->name; + csq_stage(args, &csq, rec); + return csq.type.type; + } + return 0; +} +static inline void csq_stage_splice(args_t *args, bcf1_t *rec, tscript_t *tr, uint32_t type) +{ +#if XDBG +fprintf(bcftools_stderr,"csq_stage_splice %d: type=%d\n",rec->pos+1,type); +#endif + if ( !type ) return; + csq_t csq; + memset(&csq, 0, sizeof(csq_t)); + csq.pos = rec->pos; + csq.type.type = type; + csq.type.biotype = tr->type; + csq.type.strand = tr->strand; + csq.type.trid = tr->id; + csq.type.gene = tr->gene->name; + csq_stage(args, &csq, rec); +} +static inline int splice_csq_ins(args_t *args, splice_t *splice, uint32_t ex_beg, uint32_t ex_end) +{ + // coordinates that matter for consequences, eg AC>ACG trimmed to C>CG, 1bp + // before and after the inserted bases + if ( splice->tbeg || splice->vcf.ref[0]!=splice->vcf.alt[0] ) + { + splice->ref_beg = splice->vcf.pos + splice->tbeg - 1; + splice->ref_end = splice->vcf.pos + splice->vcf.rlen - splice->tend; + } + else + { + if ( splice->tend ) splice->tend--; + splice->ref_beg = splice->vcf.pos; + splice->ref_end = splice->vcf.pos + splice->vcf.rlen - splice->tend; + } +#if XDBG +fprintf(bcftools_stderr,"ins: %s>%s .. ex=%d,%d beg,end=%d,%d tbeg,tend=%d,%d check_utr=%d start,stop,beg,end=%d,%d,%d,%d\n", splice->vcf.ref,splice->vcf.alt,ex_beg,ex_end,splice->ref_beg,splice->ref_end,splice->tbeg,splice->tend,splice->check_utr,splice->check_start,splice->check_stop,splice->check_region_beg,splice->check_region_end); +#endif + + int ret; + if ( splice->ref_beg >= ex_end ) // fully outside, beyond the exon + { + if ( splice->check_utr ) + { + regitr_t *itr = regitr_init(NULL); + const char *chr = bcf_seqname(args->hdr,splice->vcf.rec); + if ( regidx_overlap(args->idx_utr,chr,splice->ref_beg+1,splice->ref_beg+1, itr) ) // adjacent utr + { + ret = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id); + if ( ret!=0 ) + { + regitr_destroy(itr); + return SPLICE_OUTSIDE; // overlaps utr + } + } + regitr_destroy(itr); + } + if ( !splice->check_region_end ) return SPLICE_OUTSIDE; + char *ref = NULL, *alt = NULL; + if ( splice->set_refalt ) // seq identity is checked only when tr->ref is available + { + splice_build_hap(splice, ex_end+1, N_SPLICE_REGION_INTRON); + ref = splice->kref.s, alt = splice->kalt.s; + } + if ( splice->ref_beg < ex_end + N_SPLICE_REGION_INTRON && splice->ref_end > ex_end + N_SPLICE_DONOR ) + { + splice->csq |= CSQ_SPLICE_REGION; + if ( ref && !strncmp(ref,alt,N_SPLICE_REGION_INTRON) ) splice->csq |= CSQ_SYNONYMOUS_VARIANT; + } + if ( splice->ref_beg < ex_end + N_SPLICE_DONOR ) + { + if ( splice->check_donor && splice->tr->strand==STRAND_FWD ) splice->csq |= CSQ_SPLICE_DONOR; + if ( splice->check_acceptor && splice->tr->strand==STRAND_REV ) splice->csq |= CSQ_SPLICE_ACCEPTOR; + if ( ref && !strncmp(ref,alt,N_SPLICE_DONOR) ) splice->csq |= CSQ_SYNONYMOUS_VARIANT; + } + csq_stage_splice(args, splice->vcf.rec, splice->tr, splice->csq); + return SPLICE_OUTSIDE; + } + if ( splice->ref_end < ex_beg || (splice->ref_end == ex_beg && !splice->check_region_beg) ) // fully outside, before the exon + { + if ( splice->check_utr ) + { + regitr_t *itr = regitr_init(NULL); + const char *chr = bcf_seqname(args->hdr,splice->vcf.rec); + if ( regidx_overlap(args->idx_utr,chr,splice->ref_end-1,splice->ref_end-1, itr) ) // adjacent utr + { + ret = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id); + if ( ret!=0 ) + { + regitr_destroy(itr); + return SPLICE_OUTSIDE; // overlaps utr + } + } + regitr_destroy(itr); + } + if ( !splice->check_region_beg ) return SPLICE_OUTSIDE; + char *ref = NULL, *alt = NULL; + if ( splice->set_refalt ) // seq identity is checked only when tr->ref is available + { + splice_build_hap(splice, ex_beg - N_SPLICE_REGION_INTRON, N_SPLICE_REGION_INTRON); + ref = splice->kref.s, alt = splice->kalt.s; + } + if ( splice->ref_end > ex_beg - N_SPLICE_REGION_INTRON && splice->ref_beg < ex_beg - N_SPLICE_DONOR ) + { + splice->csq |= CSQ_SPLICE_REGION; + if ( ref && !strncmp(ref,alt,N_SPLICE_REGION_INTRON) ) splice->csq |= CSQ_SYNONYMOUS_VARIANT; + } + if ( splice->ref_end > ex_beg - N_SPLICE_DONOR ) + { + if ( splice->check_donor && splice->tr->strand==STRAND_REV ) splice->csq |= CSQ_SPLICE_DONOR; + if ( splice->check_acceptor && splice->tr->strand==STRAND_FWD ) splice->csq |= CSQ_SPLICE_ACCEPTOR; + if ( ref && !strncmp(ref+N_SPLICE_REGION_INTRON-N_SPLICE_DONOR,alt+N_SPLICE_REGION_INTRON-N_SPLICE_DONOR,N_SPLICE_DONOR) ) splice->csq |= CSQ_SYNONYMOUS_VARIANT; + } + csq_stage_splice(args, splice->vcf.rec, splice->tr, splice->csq); + return SPLICE_OUTSIDE; + } + // overlaps the exon or inside the exon + // possible todo: find better alignment for frameshifting variants? + if ( splice->ref_beg <= ex_beg + 2 ) // in the first 3bp + { + if ( splice->check_region_beg ) splice->csq |= CSQ_SPLICE_REGION; + if ( splice->tr->strand==STRAND_FWD ) { if ( splice->check_start ) splice->csq |= CSQ_START_LOST; } + else { if ( splice->check_stop ) splice->csq |= CSQ_STOP_LOST; } + } + if ( splice->ref_end > ex_end - 2 ) + { + if ( splice->check_region_end ) splice->csq |= CSQ_SPLICE_REGION; + if ( splice->tr->strand==STRAND_REV ) { if ( splice->check_start ) splice->csq |= CSQ_START_LOST; } + else { if ( splice->check_stop ) splice->csq |= CSQ_STOP_LOST; } + } + if ( splice->set_refalt ) + { + // Make sure the variant will not end up left aligned to avoid overlapping vcf records + // splice_build_hap(splice, splice->ref_beg, splice->vcf.alen - splice->tend - splice->tbeg + 1); + // splice->vcf.rlen -= splice->tbeg + splice->tend - 1; + // if ( splice->kref.l > splice->vcf.rlen ) { splice->kref.l = splice->vcf.rlen; splice->kref.s[splice->kref.l] = 0; } + if ( splice->ref_beg < splice->vcf.pos ) // this must have been caused by too much trimming from right + { + int dlen = splice->vcf.pos - splice->ref_beg; + assert( dlen==1 ); + splice->tbeg += dlen; + if ( splice->tbeg + splice->tend == splice->vcf.rlen ) splice->tend -= dlen; + splice->ref_beg = splice->vcf.pos; + } + if ( splice->ref_end==ex_beg ) splice->tend--; // prevent zero-length ref allele + splice_build_hap(splice, splice->ref_beg, splice->vcf.alen - splice->tend - splice->tbeg + 1); + splice->vcf.rlen -= splice->tbeg + splice->tend - 1; + if ( splice->kref.l > splice->vcf.rlen ) { splice->kref.l = splice->vcf.rlen; splice->kref.s[splice->kref.l] = 0; } + } + csq_stage_splice(args, splice->vcf.rec, splice->tr, splice->csq); + return SPLICE_INSIDE; +} + +static inline int splice_csq_del(args_t *args, splice_t *splice, uint32_t ex_beg, uint32_t ex_end) +{ + // coordinates that matter for consequences, eg AC>ACG trimmed to C>CG + splice->ref_beg = splice->vcf.pos + splice->tbeg - 1; // 1b before the deleted base + splice->ref_end = splice->vcf.pos + splice->vcf.rlen - splice->tend - 1; // the last deleted base + +#if XDBG +fprintf(bcftools_stderr,"del: %s>%s .. ex=%d,%d beg,end=%d,%d tbeg,tend=%d,%d check_utr=%d start,stop,beg,end=%d,%d,%d,%d\n", splice->vcf.ref,splice->vcf.alt,ex_beg,ex_end,splice->ref_beg,splice->ref_end,splice->tbeg,splice->tend,splice->check_utr,splice->check_start,splice->check_stop,splice->check_region_beg,splice->check_region_end); +#endif + + if ( splice->ref_beg + 1 < ex_beg ) // the part before the exon; ref_beg is off by -1 + { + if ( splice->check_region_beg ) + { + int csq = 0; + if ( splice->check_utr ) + { + regitr_t *itr = regitr_init(NULL); + const char *chr = bcf_seqname(args->hdr,splice->vcf.rec); + if ( regidx_overlap(args->idx_utr,chr,splice->ref_beg,ex_beg-1, itr) ) // adjacent utr + csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id); + regitr_destroy(itr); + } + if ( !csq ) + { + char *ref = NULL, *alt = NULL; + if ( splice->set_refalt ) // seq identity is checked only when tr->ref is available + { + // filling from the left does not work for ENST00000341065/frame3.vcf + // CAG.GTGGCCAG CAG.GTGGCCAG + // CA-.--GGCCAG vs CAG.---GCCAG + // splice_build_hap(splice, ex_beg-1, -N_SPLICE_REGION_INTRON); + // + // filling from the right: + splice_build_hap(splice, ex_beg - N_SPLICE_REGION_INTRON, N_SPLICE_REGION_INTRON); + ref = splice->kref.s, alt = splice->kalt.s; + } + if ( splice->ref_end >= ex_beg - N_SPLICE_REGION_INTRON && splice->ref_beg < ex_beg - N_SPLICE_DONOR ) + { + splice->csq |= CSQ_SPLICE_REGION; + if ( ref && alt && !strncmp(ref,alt,N_SPLICE_REGION_INTRON) ) splice->csq |= CSQ_SYNONYMOUS_VARIANT; + } + if ( splice->ref_end >= ex_beg - N_SPLICE_DONOR ) + { + if ( splice->check_donor && splice->tr->strand==STRAND_REV ) splice->csq |= CSQ_SPLICE_DONOR; + if ( splice->check_acceptor && splice->tr->strand==STRAND_FWD ) splice->csq |= CSQ_SPLICE_ACCEPTOR; + if ( ref && alt && !strncmp(ref+N_SPLICE_REGION_INTRON-N_SPLICE_DONOR,alt+N_SPLICE_REGION_INTRON-N_SPLICE_DONOR,N_SPLICE_DONOR) ) splice->csq |= CSQ_SYNONYMOUS_VARIANT; + } + } + } + if ( splice->ref_end >= ex_beg ) + { + splice->tbeg = splice->ref_beg - splice->vcf.pos + 1; + splice->ref_beg = ex_beg - 1; + if ( splice->tbeg + splice->tend == splice->vcf.alen ) + { + // the deletion overlaps ex_beg and cannot be easily realigned to the right + if ( !splice->tend ) + { + splice->csq |= CSQ_CODING_SEQUENCE; + return SPLICE_OVERLAP; + } + splice->tend--; + } + } + } + if ( ex_end < splice->ref_end ) // the part after the exon + { + if ( splice->check_region_end ) + { + int csq = 0; + if ( splice->check_utr ) + { + regitr_t *itr = regitr_init(NULL); + const char *chr = bcf_seqname(args->hdr,splice->vcf.rec); + if ( regidx_overlap(args->idx_utr,chr,ex_end+1,splice->ref_end, itr) ) // adjacent utr + csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id); + regitr_destroy(itr); + } + if ( !csq ) + { + char *ref = NULL, *alt = NULL; + if ( splice->set_refalt ) // seq identity is checked only when tr->ref is available + { + splice_build_hap(splice, ex_end+1, N_SPLICE_REGION_INTRON); // ref,alt positioned at the first intron base + ref = splice->kref.s, alt = splice->kalt.s; + } + if ( splice->ref_beg < ex_end + N_SPLICE_REGION_INTRON && splice->ref_end > ex_end + N_SPLICE_DONOR ) + { + splice->csq |= CSQ_SPLICE_REGION; + if ( ref && alt && !strncmp(ref,alt,N_SPLICE_REGION_INTRON) ) splice->csq |= CSQ_SYNONYMOUS_VARIANT; + } + if ( splice->ref_beg < ex_end + N_SPLICE_DONOR ) + { + if ( splice->check_donor && splice->tr->strand==STRAND_FWD ) splice->csq |= CSQ_SPLICE_DONOR; + if ( splice->check_acceptor && splice->tr->strand==STRAND_REV ) splice->csq |= CSQ_SPLICE_ACCEPTOR; + if ( ref && alt && !strncmp(ref+N_SPLICE_REGION_INTRON-N_SPLICE_DONOR,alt+N_SPLICE_REGION_INTRON-N_SPLICE_DONOR,N_SPLICE_DONOR) ) splice->csq |= CSQ_SYNONYMOUS_VARIANT; + } + } + } + if ( splice->ref_beg < ex_end ) + { + splice->tend = splice->vcf.rlen - (splice->ref_end - splice->vcf.pos + 1); + splice->ref_end = ex_end; + } + } + if ( splice->ref_end < ex_beg || splice->ref_beg >= ex_end ) + { + csq_stage_splice(args, splice->vcf.rec, splice->tr, splice->csq); + return SPLICE_OUTSIDE; + } + + if ( splice->ref_beg < ex_beg + 2 ) // ref_beg is off by -1 + { + if ( splice->check_region_beg ) splice->csq |= CSQ_SPLICE_REGION; + if ( splice->tr->strand==STRAND_FWD ) { if ( splice->check_start ) splice->csq |= CSQ_START_LOST; } + else { if ( splice->check_stop ) splice->csq |= CSQ_STOP_LOST; } + } + if ( splice->ref_end > ex_end - 3 ) + { + if ( splice->check_region_end ) splice->csq |= CSQ_SPLICE_REGION; + if ( splice->tr->strand==STRAND_REV ) { if ( splice->check_start ) splice->csq |= CSQ_START_LOST; } + else { if ( splice->check_stop ) splice->csq |= CSQ_STOP_LOST; } + } + if ( splice->set_refalt ) + { + if ( splice->tbeg>0 ) splice->tbeg--; //why is this? + if ( splice->vcf.rlen > splice->tbeg + splice->tend && splice->vcf.alen > splice->tbeg + splice->tend ) + { + splice->vcf.rlen -= splice->tbeg + splice->tend; + splice->vcf.alen -= splice->tbeg + splice->tend; + } + splice->kref.l = 0; kputsn(splice->vcf.ref + splice->tbeg, splice->vcf.rlen, &splice->kref); + splice->kalt.l = 0; kputsn(splice->vcf.alt + splice->tbeg, splice->vcf.alen, &splice->kalt); + if ( (splice->ref_beg+1 < ex_beg && splice->ref_end >= ex_beg) || (splice->ref_beg+1 < ex_end && splice->ref_end >= ex_end) ) // ouch, ugly ENST00000409523/long-overlapping-del.vcf + { + splice->csq |= (splice->ref_end - splice->ref_beg + 1)%3 ? CSQ_FRAMESHIFT_VARIANT : CSQ_INFRAME_DELETION; + return SPLICE_OVERLAP; + } + } + csq_stage_splice(args, splice->vcf.rec, splice->tr, splice->csq); + return SPLICE_INSIDE; +} + +static inline int splice_csq_mnp(args_t *args, splice_t *splice, uint32_t ex_beg, uint32_t ex_end) +{ + // not a real variant, can be ignored: eg ACGT>ACGT + if ( splice->tbeg + splice->tend == splice->vcf.rlen ) return SPLICE_VAR_REF; + + splice->ref_beg = splice->vcf.pos + splice->tbeg; + splice->ref_end = splice->vcf.pos + splice->vcf.rlen - splice->tend - 1; + +#if XDBG +fprintf(bcftools_stderr,"mnp: %s>%s .. ex=%d,%d beg,end=%d,%d tbeg,tend=%d,%d check_utr=%d start,stop,beg,end=%d,%d,%d,%d\n", splice->vcf.ref,splice->vcf.alt,ex_beg,ex_end,splice->ref_beg,splice->ref_end,splice->tbeg,splice->tend,splice->check_utr,splice->check_start,splice->check_stop,splice->check_region_beg,splice->check_region_end); +#endif + + if ( splice->ref_beg < ex_beg ) // the part before the exon + { + if ( splice->check_region_beg ) + { + int csq = 0; + if ( splice->check_utr ) + { + regitr_t *itr = regitr_init(NULL); + const char *chr = bcf_seqname(args->hdr,splice->vcf.rec); + if ( regidx_overlap(args->idx_utr,chr,splice->ref_beg,ex_beg-1, itr) ) // adjacent utr + csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id); + regitr_destroy(itr); + } + if ( !csq ) + { + if ( splice->ref_end >= ex_beg - N_SPLICE_REGION_INTRON && splice->ref_beg < ex_beg - N_SPLICE_DONOR ) + splice->csq |= CSQ_SPLICE_REGION; + if ( splice->ref_end >= ex_beg - N_SPLICE_DONOR ) + { + if ( splice->check_donor && splice->tr->strand==STRAND_REV ) splice->csq |= CSQ_SPLICE_DONOR; + if ( splice->check_acceptor && splice->tr->strand==STRAND_FWD ) splice->csq |= CSQ_SPLICE_ACCEPTOR; + } + } + } + if ( splice->ref_end >= ex_beg ) + { + splice->tbeg = splice->ref_beg - splice->vcf.pos; + splice->ref_beg = ex_beg; + } + } + if ( ex_end < splice->ref_end ) // the part after the exon + { + if ( splice->check_region_end ) + { + int csq = 0; + if ( splice->check_utr ) + { + regitr_t *itr = regitr_init(NULL); + const char *chr = bcf_seqname(args->hdr,splice->vcf.rec); + if ( regidx_overlap(args->idx_utr,chr,ex_end+1,splice->ref_end, itr) ) // adjacent utr + csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id); + regitr_destroy(itr); + } + if ( !csq ) + { + if ( splice->ref_beg <= ex_end + N_SPLICE_REGION_INTRON && splice->ref_end > ex_end + N_SPLICE_DONOR ) + splice->csq |= CSQ_SPLICE_REGION; + if ( splice->ref_beg <= ex_end + N_SPLICE_DONOR ) + { + if ( splice->check_donor && splice->tr->strand==STRAND_FWD ) splice->csq |= CSQ_SPLICE_DONOR; + if ( splice->check_acceptor && splice->tr->strand==STRAND_REV ) splice->csq |= CSQ_SPLICE_ACCEPTOR; + } + } + } + if ( splice->ref_beg <= ex_end ) + { + splice->tend = splice->vcf.rlen - (splice->ref_end - splice->vcf.pos + 1); + splice->ref_end = ex_end; + } + } + if ( splice->ref_end < ex_beg || splice->ref_beg > ex_end ) + { + csq_stage_splice(args, splice->vcf.rec, splice->tr, splice->csq); + return SPLICE_OUTSIDE; + } + + if ( splice->ref_beg < ex_beg + 3 ) + { + if ( splice->check_region_beg ) splice->csq |= CSQ_SPLICE_REGION; + if ( splice->tr->strand==STRAND_FWD ) { if ( splice->check_start ) splice->csq |= CSQ_START_LOST; } + else { if ( splice->check_stop ) splice->csq |= CSQ_STOP_LOST; } + } + if ( splice->ref_end > ex_end - 3 ) + { + if ( splice->check_region_end ) splice->csq |= CSQ_SPLICE_REGION; + if ( splice->tr->strand==STRAND_REV ) { if ( splice->check_start ) splice->csq |= CSQ_START_LOST; } + else { if ( splice->check_stop ) splice->csq |= CSQ_STOP_LOST; } + } + if ( splice->set_refalt ) + { + splice->vcf.rlen -= splice->tbeg + splice->tend; + splice->kref.l = 0; kputsn(splice->vcf.ref + splice->tbeg, splice->vcf.rlen, &splice->kref); + splice->kalt.l = 0; kputsn(splice->vcf.alt + splice->tbeg, splice->vcf.rlen, &splice->kalt); + } + csq_stage_splice(args, splice->vcf.rec, splice->tr, splice->csq); + return SPLICE_INSIDE; +} +static inline int splice_csq(args_t *args, splice_t *splice, uint32_t ex_beg, uint32_t ex_end) +{ + splice->csq = 0; + splice->vcf.alen = strlen(splice->vcf.alt); + + int rlen1 = splice->vcf.rlen - 1, alen1 = splice->vcf.alen - 1, i = 0; + splice->tbeg = 0, splice->tend = 0; + + // trim from the right, then from the left + while ( i<=rlen1 && i<=alen1 ) + { + if ( splice->vcf.ref[rlen1-i] != splice->vcf.alt[alen1-i] ) break; + i++; + } + splice->tend = i; + rlen1 -= i, alen1 -= i, i = 0; + while ( i<=rlen1 && i<=alen1 ) + { + if ( splice->vcf.ref[i] != splice->vcf.alt[i] ) break; + i++; + } + splice->tbeg = i; + + // The mnp, ins and del code was split into near-identical functions for clarity and debugging; + // possible todo: generalize once stable + if ( splice->vcf.rlen==splice->vcf.alen ) return splice_csq_mnp(args, splice, ex_beg, ex_end); + if ( splice->vcf.rlen < splice->vcf.alen ) return splice_csq_ins(args, splice, ex_beg, ex_end); + if ( splice->vcf.rlen > splice->vcf.alen ) return splice_csq_del(args, splice, ex_beg, ex_end); + + return 0; +} + +// return value: 0 added, 1 overlapping variant, 2 silent discard (intronic,alt=ref) +int hap_init(args_t *args, hap_node_t *parent, hap_node_t *child, gf_cds_t *cds, bcf1_t *rec, int ial) +{ + int i; + kstring_t str = {0,0,0}; + tscript_t *tr = cds->tr; + child->icds = cds->icds; // index of cds in the tscript's list of exons + + splice_t splice; + splice_init(&splice, rec); + splice.tr = tr; + splice.vcf.alt = rec->d.allele[ial]; + splice.check_acceptor = splice.check_donor = splice.set_refalt = splice.check_utr = 1; + if ( !(tr->trim & TRIM_5PRIME) ) + { + if ( tr->strand==STRAND_FWD ) { if ( child->icds==0 ) splice.check_start = 1; } + else { if ( child->icds==tr->ncds-1 ) splice.check_start = 1; } + } + if ( !(tr->trim & TRIM_3PRIME) ) + { + if ( tr->strand==STRAND_FWD ) { if ( child->icds==tr->ncds-1 ) splice.check_stop = 1; } + else { if ( child->icds==0 ) splice.check_stop = 1; } + } + if ( splice.check_start ) // do not check starts in incomplete CDS, defined as not starting with M + { + if ( tr->strand==STRAND_FWD ) { if ( dna2aa(tr->ref+N_REF_PAD+cds->beg-tr->beg) != 'M' ) splice.check_start = 0; } + else { if ( cdna2aa(tr->ref+N_REF_PAD+cds->beg-tr->beg+cds->len-3) != 'M' ) splice.check_start = 0; } + } + if ( child->icds!=0 ) splice.check_region_beg = 1; + if ( child->icds!=tr->ncds-1 ) splice.check_region_end = 1; + +#if XDBG +fprintf(bcftools_stderr,"\n%d [%s][%s] check start:%d,stop:%d\n",splice.vcf.pos+1,splice.vcf.ref,splice.vcf.alt,splice.check_start,splice.check_stop); +#endif + int ret = splice_csq(args, &splice, cds->beg, cds->beg + cds->len - 1); +#if XDBG +fprintf(bcftools_stderr,"cds splice_csq: %d [%s][%s] .. beg,end=%d %d, ret=%d, csq=%d\n\n",splice.vcf.pos+1,splice.kref.s,splice.kalt.s,splice.ref_beg+1,splice.ref_end+1,ret,splice.csq); +#endif + + if ( ret==SPLICE_VAR_REF ) return 2; // not a variant, eg REF=CA ALT=CA + if ( ret==SPLICE_OUTSIDE || ret==SPLICE_OVERLAP ) // not a coding csq + { + free(splice.kref.s); + free(splice.kalt.s); + + if ( !splice.csq ) return 2; // fully intronic, no csq + + // splice_region/acceptor/donor + child->seq = NULL; + child->sbeg = 0; + child->rbeg = rec->pos; + child->rlen = 0; + child->dlen = 0; + kputs(rec->d.allele[0],&str); + kputc('>',&str); + kputs(rec->d.allele[ial],&str); + child->var = str.s; + child->type = HAP_SSS; + child->csq = splice.csq; + child->prev = parent->type==HAP_SSS ? parent->prev : parent; + child->rec = rec; + return 0; + } + if ( splice.csq & CSQ_SYNONYMOUS_VARIANT ) splice.csq &= ~CSQ_SYNONYMOUS_VARIANT; // synonymous&splice,frame could become synonymous&frame,splice + + int dbeg = 0; + if ( splice.ref_beg < cds->beg ) + { + // The vcf record overlaps the exon boundary, but the variant itself + // should fit inside since we are here. This will need more work. + // #1475227917 + dbeg = cds->beg - splice.ref_beg; + splice.kref.l -= dbeg; + splice.ref_beg = cds->beg; + assert( dbeg <= splice.kalt.l ); + } + + if ( parent->type==HAP_SSS ) parent = parent->prev; + if ( parent->type==HAP_CDS ) + { + i = parent->icds; + if ( i!=cds->icds ) + { + // the variant is on a new exon, finish up the previous + int len = tr->cds[i]->len - parent->rbeg - parent->rlen + tr->cds[i]->beg; + if ( len > 0 ) + kputsn_(tr->ref + N_REF_PAD + parent->rbeg + parent->rlen - tr->beg, len, &str); + } + + // append any skipped non-variant exons + while ( ++i < cds->icds ) + kputsn_(tr->ref + N_REF_PAD + tr->cds[i]->beg - tr->beg, tr->cds[i]->len, &str); + + if ( parent->icds==child->icds ) + { + int len = splice.ref_beg - parent->rbeg - parent->rlen; + if ( len < 0 ) // overlapping variants + { + free(str.s); + return 1; + } + kputsn_(tr->ref + N_REF_PAD + parent->rbeg + parent->rlen - tr->beg, len, &str); + } + else + kputsn_(tr->ref + N_REF_PAD + cds->beg - tr->beg, splice.ref_beg - cds->beg, &str); + } + kputs(splice.kalt.s + dbeg, &str); + + child->seq = str.s; + child->sbeg = cds->pos + (splice.ref_beg - cds->beg); + child->rbeg = splice.ref_beg; + child->rlen = splice.kref.l; + child->type = HAP_CDS; + child->prev = parent; + child->rec = rec; + child->csq = splice.csq; + + // set vlen and the "ref>alt" string + { + int rlen = strlen(rec->d.allele[0]); + int alen = strlen(rec->d.allele[ial]); + child->dlen = alen - rlen; + child->var = (char*) malloc(rlen+alen+2); + memcpy(child->var,rec->d.allele[0],rlen); + child->var[rlen] = '>'; + memcpy(child->var+rlen+1,rec->d.allele[ial],alen); + child->var[rlen+alen+1] = 0; + } + + // yuck, the whole CDS is modified/deleted, not ready for this, todo. + if ( child->rbeg + child->rlen > cds->beg + cds->len ) + { + child->type = HAP_SSS; + if ( !child->csq ) child->csq |= CSQ_CODING_SEQUENCE; // hack, specifically for ENST00000390520/deletion-overlap.vcf + } + + free(splice.kref.s); + free(splice.kalt.s); + return 0; +} +void hap_destroy(hap_node_t *hap) +{ + int i; + for (i=0; inchild; i++) + if ( hap->child[i] ) hap_destroy(hap->child[i]); + for (i=0; imcsq_list; i++) free(hap->csq_list[i].type.vstr.s); + free(hap->csq_list); + free(hap->child); + free(hap->cur_child); + free(hap->seq); + free(hap->var); + free(hap); +} + + +/* + ref: spliced reference and its length (ref.l) + seq: part of the spliced query transcript on the reference strand to translate, its + length (seq.l) and the total length of the complete transcript (seq.m) + sbeg: seq offset within the spliced query transcript + rbeg: seq offset within ref, 0-based + rend: last base of seq within ref, plus one. If seq does not contain indels, it is rend=rbeg+seq->l + strand: coding strand - 0:rev, 1:fwd + tseq: translated sequence (aa) + fill: frameshift, fill until the end (strand=fwd) or from the start (strand=rev) + */ +void cds_translate(kstring_t *_ref, kstring_t *_seq, uint32_t sbeg, uint32_t rbeg, uint32_t rend, int strand, kstring_t *tseq, int fill) +{ +#if XDBG +fprintf(bcftools_stderr,"translate: %d %d %d fill=%d seq.l=%d\n",sbeg,rbeg,rend,fill,(int)_seq->l); +#endif + char tmp[3], *codon, *end; + int i, len, npad; + + kstring_t ref = *_ref; + kstring_t seq = *_seq; + + tseq->l = 0; + if ( !seq.l ) + { + kputc('?', tseq); + return; + } + +#define DBG 0 +#if DBG + fprintf(bcftools_stderr,"translate: sbeg,rbeg,rend=%d %d %d fill=%d seq.l=%d\n",sbeg,rbeg,rend,fill,(int)_seq->l); + fprintf(bcftools_stderr," ref: l=%d %s\n", (int)ref.l,ref.s); + fprintf(bcftools_stderr," seq: l=%d m=%d ", (int)seq.l,(int)seq.m); + for (i=0; i1 + fprintf(bcftools_stderr," npad: %d\n",npad); +#endif + assert( npad<=rbeg ); + + for (i=0; i1 + fprintf(bcftools_stderr,"\t i=%d\n", i); +#endif + if ( i==3 ) + { + kputc_(dna2aa(tmp), tseq); +#if DBG>1 + fprintf(bcftools_stderr,"[1]%c%c%c\n",tmp[0],tmp[1],tmp[2]); +#endif + codon = seq.s + 3 - npad; // next codon + end = codon + len - 1 - (len % 3); // last position of a valid codon + while ( codon < end ) + { + kputc_(dna2aa(codon), tseq); +#if DBG>1 + fprintf(bcftools_stderr,"[2]%c%c%c\n",codon[0],codon[1],codon[2]); +#endif + codon += 3; + } + end = seq.s + seq.l - 1; + for (i=0; codon+i<=end; i++) tmp[i] = codon[i]; + } + + // right padding + codon = ref.s + rend + N_REF_PAD; + if ( i>0 ) + { +#if DBG>1 + if(i==1)fprintf(bcftools_stderr,"[3]%c\n",tmp[0]); + if(i==2)fprintf(bcftools_stderr,"[3]%c%c\n",tmp[0],tmp[1]); +#endif + for (; i<3; i++) + { + tmp[i] = *codon; + codon++; + } + kputc_(dna2aa(tmp), tseq); +#if DBG>1 + fprintf(bcftools_stderr,"[4]%c%c%c\n",tmp[0],tmp[1],tmp[2]); +#endif + } + if ( fill!=0 ) + { + end = ref.s + ref.l - N_REF_PAD; + while ( codon+3 <= end ) + { + kputc_(dna2aa(codon), tseq); +#if DBG>1 + fprintf(bcftools_stderr,"[5]%c%c%c\t%c\n",codon[0],codon[1],codon[2],dna2aa(codon)); +#endif + codon += 3; + } + } + } + else // STRAND_REV + { + // right padding - number of bases to take from ref + npad = (seq.m - (sbeg + seq.l)) % 3; +#if DBG>1 + fprintf(bcftools_stderr," npad: %d\n",npad); +#endif +if ( !(npad>=0 && sbeg+seq.l+npad<=seq.m) ) fprintf(bcftools_stderr,"sbeg=%d seq.l=%d seq.m=%d\n",sbeg,(int)seq.l,(int)seq.m); + assert( npad>=0 && sbeg+seq.l+npad<=seq.m ); // todo: first codon on the rev strand + + if ( npad==2 ) + { + tmp[1] = ref.s[rend+N_REF_PAD]; + tmp[2] = ref.s[rend+N_REF_PAD+1]; + i = 0; + } + else if ( npad==1 ) + { + tmp[2] = ref.s[rend+N_REF_PAD]; + i = 1; + } + else + i = 2; + + end = seq.s + seq.l; + for (; i>=0 && end>seq.s; i--) tmp[i] = *(--end); +#if DBG>1 + fprintf(bcftools_stderr,"\t i=%d\n", i); + if(i==1)fprintf(bcftools_stderr,"[0] %c\n",tmp[2]); + if(i==0)fprintf(bcftools_stderr,"[0] %c%c\n",tmp[1],tmp[2]); +#endif + if ( i==-1 ) + { +#if DBG>1 + fprintf(bcftools_stderr,"[1]%c%c%c\t%c\n",tmp[0],tmp[1],tmp[2], cdna2aa(tmp)); +#endif + kputc_(cdna2aa(tmp), tseq); + codon = end - 3; + while ( codon >= seq.s ) + { + kputc_(cdna2aa(codon), tseq); +#if DBG>1 + fprintf(bcftools_stderr,"[2]%c%c%c\t%c\n",codon[0],codon[1],codon[2], cdna2aa(codon)); +#endif + codon -= 3; + } + if ( seq.s-codon==2 ) + { + tmp[2] = seq.s[0]; + i = 1; + } + else if ( seq.s-codon==1 ) + { + tmp[1] = seq.s[0]; + tmp[2] = seq.s[1]; + i = 0; + } + else + i = -1; +#if DBG>1 + if(i==1)fprintf(bcftools_stderr,"[3] %c\n",tmp[2]); + if(i==0)fprintf(bcftools_stderr,"[3] %c%c\n",tmp[1],tmp[2]); +#endif + } + // left padding + end = ref.s + N_REF_PAD + rbeg; + if ( i>=0 ) + { + for (; i>=0 && end>=ref.s; i--) tmp[i] = *(--end); + kputc_(cdna2aa(tmp), tseq); +#if DBG>1 + fprintf(bcftools_stderr,"[4]%c%c%c\t%c\n",tmp[0],tmp[1],tmp[2],cdna2aa(tmp)); +#endif + } + if ( fill!=0 ) + { + codon = end - 3; + while ( codon >= ref.s + N_REF_PAD ) + { + kputc_(cdna2aa(codon), tseq); +#if DBG>1 + fprintf(bcftools_stderr,"[5]%c%c%c\t%c\n",codon[0],codon[1],codon[2],cdna2aa(codon)); +#endif + codon -= 3; + } + } + } + kputc_(0,tseq); tseq->l--; +#if DBG + fprintf(bcftools_stderr," tseq: %s\n", tseq->s); +#endif +} + +void tscript_splice_ref(tscript_t *tr) +{ + int i, len = 0; + for (i=0; incds; i++) + len += tr->cds[i]->len; + + tr->nsref = len + 2*N_REF_PAD; + tr->sref = (char*) malloc(len + 1 + 2*N_REF_PAD); + len = 0; + + memcpy(tr->sref, tr->ref + tr->cds[0]->beg - tr->beg, N_REF_PAD); + len += N_REF_PAD; + + for (i=0; incds; i++) + { + memcpy(tr->sref + len, tr->ref + N_REF_PAD + tr->cds[i]->beg - tr->beg, tr->cds[i]->len); + len += tr->cds[i]->len; + } + memcpy(tr->sref + len, tr->ref + N_REF_PAD + tr->cds[tr->ncds-1]->beg - tr->beg, N_REF_PAD); + len += N_REF_PAD; + + tr->sref[len] = 0; +} + +// returns: 0 if consequence was added, 1 if it already exists or could not be added +int csq_push(args_t *args, csq_t *csq, bcf1_t *rec) +{ +#if XDBG +fprintf(bcftools_stderr,"csq_push: %d .. %d\n",rec->pos+1,csq->type.type); +#endif + khint_t k = kh_get(pos2vbuf, args->pos2vbuf, (int)csq->pos); + vbuf_t *vbuf = (k == kh_end(args->pos2vbuf)) ? NULL : kh_val(args->pos2vbuf, k); + if ( !vbuf ) error("This should not happen. %s:%d %s\n",bcf_seqname(args->hdr,rec),csq->pos+1,csq->type.vstr); + + int i; + for (i=0; in; i++) + if ( vbuf->vrec[i]->line==rec ) break; + if ( i==vbuf->n ) error("This should not happen.. %s:%d %s\n", bcf_seqname(args->hdr,rec),csq->pos+1,csq->type.vstr); + vrec_t *vrec = vbuf->vrec[i]; + + // if the variant overlaps donor/acceptor and also splice region, report only donor/acceptor + if ( csq->type.type & CSQ_SPLICE_REGION && csq->type.type & (CSQ_SPLICE_DONOR|CSQ_SPLICE_ACCEPTOR) ) + csq->type.type &= ~CSQ_SPLICE_REGION; + + if ( csq->type.type & CSQ_PRINTED_UPSTREAM ) + { + for (i=0; invcsq; i++) + { + // Same as below, to avoid records like + // 3630 .. @3632,stop_lost|AL627309.1|ENST00000423372|protein_coding|- + // 3632 .. stop_lost|AL627309.1|ENST00000423372|protein_coding|-|260*>260G|3630T>A+3632A>C + if ( csq->type.type&CSQ_START_STOP && vrec->vcsq[i].type&CSQ_START_STOP ) + { + vrec->vcsq[i] = csq->type; + goto exit_duplicate; + } + if ( !(vrec->vcsq[i].type & CSQ_PRINTED_UPSTREAM) ) continue; + if ( csq->type.ref != vrec->vcsq[i].ref ) continue; + goto exit_duplicate; + } + } + else if ( csq->type.type & CSQ_COMPOUND ) + { + for (i=0; invcsq; i++) + { + if ( csq->type.trid != vrec->vcsq[i].trid && (csq->type.type|vrec->vcsq[i].type)&CSQ_PRN_TSCRIPT ) continue; + if ( csq->type.biotype != vrec->vcsq[i].biotype ) continue; + if ( csq->type.gene != vrec->vcsq[i].gene ) continue; + if ( csq->type.vstr.s || vrec->vcsq[i].vstr.s ) + { + // This is a bit hacky, but we want a simpler and more predictable output. The splice_csq() function + // can trigger stop/start events based on indel overlap, then another stop/start event can be triggered + // from add_csq() or test_cds_local() based on sequence comparison, and on output we could find two + // consequences: + // stop_lost|AL627309.1|ENST00000423372|protein_coding|- + // stop_lost&inframe_insertion|AL627309.1|ENST00000423372|protein_coding|-|260*>260CL|3630T>TAAA + if ( !csq->type.vstr.s || !vrec->vcsq[i].vstr.s ) + { + if ( csq->type.type&CSQ_START_STOP && vrec->vcsq[i].type&CSQ_START_STOP ) + { + vrec->vcsq[i].type |= csq->type.type; + + // remove stop_lost&synonymous if stop_retained set + if ( vrec->vcsq[i].type&CSQ_STOP_RETAINED ) + vrec->vcsq[i].type &= ~(CSQ_STOP_LOST|CSQ_SYNONYMOUS_VARIANT); + + if ( !vrec->vcsq[i].vstr.s ) vrec->vcsq[i].vstr = csq->type.vstr; + goto exit_duplicate; + } + continue; + } + if ( strcmp(csq->type.vstr.s,vrec->vcsq[i].vstr.s) ) continue; + } + vrec->vcsq[i].type |= csq->type.type; + goto exit_duplicate; + } + } + else + { + for (i=0; invcsq; i++) + { + if ( csq->type.trid != vrec->vcsq[i].trid && (csq->type.type|vrec->vcsq[i].type)&CSQ_PRN_TSCRIPT) continue; + if ( csq->type.biotype != vrec->vcsq[i].biotype ) continue; + if ( !(vrec->vcsq[i].type & CSQ_COMPOUND) ) + { + vrec->vcsq[i].type |= csq->type.type; + goto exit_duplicate; + } + if ( vrec->vcsq[i].type==(vrec->vcsq[i].type|csq->type.type) ) goto exit_duplicate; + } + } + // no such csq yet in this vcf record + csq->vrec = vrec; + csq->idx = i; + vrec->nvcsq++; + hts_expand0(vcsq_t, vrec->nvcsq, vrec->mvcsq, vrec->vcsq); + vrec->vcsq[i] = csq->type; + return 0; + +exit_duplicate: + csq->vrec = vrec; + csq->idx = i; + return 1; +} + +// soff .. position of the variant within the trimmed query transcript +// sbeg .. position of the variant within the query transcript +// rbeg .. position on the reference transcript (if there are no indels, then rbeg=send) +// rpos .. VCF position +#define node2soff(i) (hap->stack[i].slen - (hap->stack[i].node->rlen + hap->stack[i].node->dlen)) +#define node2sbeg(i) (hap->sbeg + node2soff(i)) +#define node2send(i) (hap->sbeg + hap->stack[i].slen) +#define node2rbeg(i) (hap->stack[i].node->sbeg) +#define node2rend(i) (hap->stack[i].node->sbeg + hap->stack[i].node->rlen) +#define node2rpos(i) (hap->stack[i].node->rec->pos) + +void kput_vcsq(args_t *args, vcsq_t *csq, kstring_t *str) +{ + // Remove start/stop from incomplete CDS, but only if there is another + // consequence as something must be reported + if ( csq->type & CSQ_INCOMPLETE_CDS && (csq->type & ~(CSQ_START_STOP|CSQ_INCOMPLETE_CDS|CSQ_UPSTREAM_STOP)) ) csq->type &= ~(CSQ_START_STOP|CSQ_INCOMPLETE_CDS); + + // Remove missense from start/stops + if ( csq->type & CSQ_START_STOP && csq->type & CSQ_MISSENSE_VARIANT ) csq->type &= ~CSQ_MISSENSE_VARIANT; + + if ( csq->type & CSQ_PRINTED_UPSTREAM && csq->ref ) + { + kputc_('@',str); + kputw(csq->ref->pos+1, str); + return; + } + if ( csq->type & CSQ_UPSTREAM_STOP ) + kputc_('*',str); + + int i, n = sizeof(csq_strings)/sizeof(char*); + for (i=1; itype&(1<type&(1<gene ) kputs(csq->gene , str); + + kputc_('|', str); + if ( csq->type & CSQ_PRN_TSCRIPT ) kputs(args->tscript_ids.str[csq->trid], str); + + kputc_('|', str); + kputs(gf_type2gff_string(csq->biotype), str); + + if ( CSQ_PRN_STRAND(csq->type) || csq->vstr.l ) + kputs(csq->strand==STRAND_FWD ? "|+" : "|-", str); + + if ( csq->vstr.l ) + kputs(csq->vstr.s, str); +} + +void hap_add_csq(args_t *args, hap_t *hap, hap_node_t *node, int tlen, int ibeg, int iend, int dlen, int indel) +{ + int i; + tscript_t *tr = hap->tr; + int ref_node = tr->strand==STRAND_FWD ? ibeg : iend; + + int icsq = node->ncsq_list++; + hts_expand0(csq_t,node->ncsq_list,node->mcsq_list,node->csq_list); + csq_t *csq = &node->csq_list[icsq]; + csq->pos = hap->stack[ref_node].node->rec->pos; + csq->type.trid = tr->id; + csq->type.gene = tr->gene->name; + csq->type.strand = tr->strand; + csq->type.biotype = tr->type; + + // only now we see the translated sequence and can determine if the stop/start changes are real + int rm_csq = 0; + csq->type.type = 0; + for (i=ibeg; i<=iend; i++) + csq->type.type |= hap->stack[i].node->csq & CSQ_COMPOUND; + if ( dlen==0 && indel ) csq->type.type |= CSQ_INFRAME_ALTERING; + + int has_upstream_stop = hap->upstream_stop; + if ( hap->stack[ibeg].node->type != HAP_SSS ) + { + // check for truncating stops + for (i=0; itref.l; i++) + if ( hap->tref.s[i]=='*' ) break; + if ( i!=hap->tref.l ) + { + hap->tref.l = i+1; + hap->tref.s[i+1] = 0; + } + for (i=0; itseq.l; i++) + if ( hap->tseq.s[i]=='*' ) break; + if ( i!=hap->tseq.l ) + { + hap->tseq.l = i+1; + hap->tseq.s[i+1] = 0; + hap->upstream_stop = 1; + } + if ( csq->type.type & CSQ_STOP_LOST ) + { + if ( hap->tref.s[hap->tref.l-1]=='*' && hap->tref.s[hap->tref.l-1] == hap->tseq.s[hap->tseq.l-1] ) + { + rm_csq |= CSQ_STOP_LOST; + csq->type.type |= CSQ_STOP_RETAINED; + } + else if ( hap->tref.s[hap->tref.l-1]!='*' ) + { + // This is CDS 3' incomplete ENSG00000173376/synon.vcf, can also be missense + // We observe in real data a change to a stop, ENST00000528237/retained-stop-incomplete-cds.vcf + if ( hap->tseq.s[hap->tseq.l-1] == '*' ) + { + rm_csq |= CSQ_STOP_GAINED; + csq->type.type |= CSQ_STOP_RETAINED; + } + else + csq->type.type |= CSQ_INCOMPLETE_CDS; + } + } + if ( csq->type.type & CSQ_START_LOST && hap->tref.s[0]!='M' ) + { + rm_csq |= CSQ_START_LOST; + csq->type.type &= ~CSQ_START_LOST; + } + if ( dlen!=0 ) + { + if ( dlen%3 ) + csq->type.type |= CSQ_FRAMESHIFT_VARIANT; + else if ( dlen<0 ) + csq->type.type |= CSQ_INFRAME_DELETION; + else + csq->type.type |= CSQ_INFRAME_INSERTION; + } + else + { + for (i=0; itref.l; i++) + if ( hap->tref.s[i] != hap->tseq.s[i] ) break; + if ( i==hap->tref.l ) + csq->type.type |= CSQ_SYNONYMOUS_VARIANT; + else if ( hap->tref.s[i] == '*' ) + csq->type.type |= CSQ_STOP_LOST; + else if ( hap->tseq.s[i] == '*' ) + csq->type.type |= CSQ_STOP_GAINED; + else + csq->type.type |= CSQ_MISSENSE_VARIANT; + } + } + if ( has_upstream_stop ) csq->type.type |= CSQ_UPSTREAM_STOP; + csq->type.type &= ~rm_csq; + + if ( hap->stack[ibeg].node->type == HAP_SSS ) + { + node->csq_list[icsq].type.type |= hap->stack[ibeg].node->csq & ~rm_csq; + node->csq_list[icsq].type.ref = hap->stack[ibeg].node->rec; + node->csq_list[icsq].type.biotype = tr->type; + csq_push(args, node->csq_list+icsq, hap->stack[ibeg].node->rec); + return; + } + + kstring_t str = node->csq_list[icsq].type.vstr; + str.l = 0; + + // create the aa variant string + int aa_rbeg = tr->strand==STRAND_FWD ? node2rbeg(ibeg)/3+1 : (hap->tr->nsref - 2*N_REF_PAD - node2rend(iend))/3+1; + int aa_sbeg = tr->strand==STRAND_FWD ? node2sbeg(ibeg)/3+1 : (tlen - node2send(iend))/3+1; + kputc_('|', &str); + kputw(aa_rbeg, &str); + kputs(hap->tref.s, &str); + if ( !(csq->type.type & CSQ_SYNONYMOUS_VARIANT) ) + { + kputc_('>', &str); + kputw(aa_sbeg, &str); + kputs(hap->tseq.s, &str); + } + kputc_('|', &str); + + // create the dna variant string and, in case of combined variants, + // insert silent CSQ_PRINTED_UPSTREAM variants + for (i=ibeg; i<=iend; i++) + { + if ( i>ibeg ) kputc_('+', &str); + kputw(node2rpos(i)+1, &str); + kputs(hap->stack[i].node->var, &str); + } + node->csq_list[icsq].type.vstr = str; + csq_push(args, node->csq_list+icsq, hap->stack[ref_node].node->rec); + + for (i=ibeg; i<=iend; i++) + { + // csq are printed at one position only for combined variants, the rest is + // silent and references the first + if ( hap->stack[i].node->csq & ~CSQ_COMPOUND ) + { + node->ncsq_list++; + hts_expand0(csq_t,node->ncsq_list,node->mcsq_list,node->csq_list); + csq_t *tmp_csq = &node->csq_list[node->ncsq_list - 1]; + tmp_csq->pos = hap->stack[i].node->rec->pos; + tmp_csq->type.trid = tr->id; + tmp_csq->type.gene = tr->gene->name; + tmp_csq->type.strand = tr->strand; + tmp_csq->type.type = hap->stack[i].node->csq & ~CSQ_COMPOUND & ~rm_csq; + tmp_csq->type.biotype = tr->type; + tmp_csq->type.vstr.l = 0; + kputs(str.s,&tmp_csq->type.vstr); + csq_push(args, tmp_csq, hap->stack[i].node->rec); + } + if ( i!=ref_node && (node->csq_list[icsq].type.type & CSQ_COMPOUND || !(hap->stack[i].node->csq & ~CSQ_COMPOUND)) ) + { + node->ncsq_list++; + hts_expand0(csq_t,node->ncsq_list,node->mcsq_list,node->csq_list); + csq_t *tmp_csq = &node->csq_list[node->ncsq_list - 1]; + tmp_csq->pos = hap->stack[i].node->rec->pos; + tmp_csq->type.trid = tr->id; + tmp_csq->type.gene = tr->gene->name; + tmp_csq->type.strand = tr->strand; + tmp_csq->type.type = CSQ_PRINTED_UPSTREAM | hap->stack[i].node->csq; + tmp_csq->type.biotype = tr->type; + tmp_csq->type.ref = hap->stack[ref_node].node->rec; + tmp_csq->type.vstr.l = 0; + csq_push(args, tmp_csq, hap->stack[i].node->rec); + } + } +} + +void hap_finalize(args_t *args, hap_t *hap) +{ + tscript_t *tr = hap->tr; + if ( !tr->sref ) + tscript_splice_ref(tr); + + kstring_t sref; + sref.s = tr->sref; + sref.l = tr->nsref; + sref.m = sref.l; + + int istack = 0; + hts_expand(hstack_t,1,hap->mstack,hap->stack); + + hap->sseq.l = 0; + hap->tseq.l = 0; + hap->stack[0].node = tr->root; + hap->stack[0].ichild = -1; + hap->stack[0].slen = 0; + hap->stack[0].dlen = 0; + + while ( istack>=0 ) + { + hstack_t *stack = &hap->stack[istack]; + hap_node_t *node = hap->stack[istack].node; + while ( ++hap->stack[istack].ichild < node->nchild ) + { + if ( node->child[stack->ichild] ) break; + } + if ( stack->ichild == node->nchild ) { istack--; continue; } + + node = node->child[stack->ichild]; + + istack++; + hts_expand(hstack_t,istack+1,hap->mstack,hap->stack); + stack = &hap->stack[istack-1]; + + hap->stack[istack].node = node; + hap->stack[istack].ichild = -1; + + hap->sseq.l = stack->slen; + if ( node->type==HAP_CDS ) kputs(node->seq, &hap->sseq); + hap->stack[istack].slen = hap->sseq.l; + hap->stack[istack].dlen = hap->stack[istack-1].dlen + node->dlen; + + if ( !node->nend ) continue; // not a leaf node + + // The spliced sequence has been built for the current haplotype and stored + // in hap->sseq. Now we break it and output as independent parts + + kstring_t sseq; + sseq.m = sref.m - 2*N_REF_PAD + hap->stack[istack].dlen; // total length of the spliced query transcript + hap->upstream_stop = 0; + + int i = 1, dlen = 0, ibeg, indel = 0; + while ( istack[i].node->type == HAP_SSS ) i++; + hap->sbeg = hap->stack[i].node->sbeg; + + if ( tr->strand==STRAND_FWD ) + { + i = 0, ibeg = -1; + while ( ++i <= istack ) + { + if ( hap->stack[i].node->type == HAP_SSS ) + { + // start/stop/splice site overlap: don't know how to build the haplotypes correctly, skipping + hap_add_csq(args,hap,node,0,i,i,0,0); + continue; + } + dlen += hap->stack[i].node->dlen; + if ( hap->stack[i].node->dlen ) indel = 1; + if ( isseq.l ) + { + sseq.l = hap->stack[i].slen - ioff; + sseq.s = hap->sseq.s + ioff; + } + else // splice site overlap, see #1475227917 + sseq.l = fill = 0; + cds_translate(&sref, &sseq, icur,rbeg,rend, tr->strand, &hap->tseq, fill); + + // ref + sseq.l = node2rend(i) - rbeg; + sseq.s = sref.s + N_REF_PAD + rbeg; + sseq.m = sref.m - 2*N_REF_PAD; + cds_translate(&sref, &sseq, rbeg,rbeg,rend, tr->strand, &hap->tref, fill); + sseq.m = sref.m - 2*N_REF_PAD + hap->stack[istack].dlen; + + hap_add_csq(args,hap,node,0, ibeg,i,dlen,indel); + ibeg = -1; + dlen = 0; + indel = 0; + } + } + else + { + i = istack + 1, ibeg = -1; + while ( --i > 0 ) + { + if ( hap->stack[i].node->type == HAP_SSS ) + { + hap_add_csq(args,hap,node,0,i,i,0,0); + continue; + } + dlen += hap->stack[i].node->dlen; + if ( hap->stack[i].node->dlen ) indel = 1; + if ( i>1 && hap->stack[i-1].node->type != HAP_SSS ) + { + if ( dlen%3 ) + { + if ( ibeg==-1 ) ibeg = i; + continue; + } + int icur = sseq.m - 1 - node2sbeg(i); + int inext = sseq.m - 1 - node2sbeg(i-1); + if ( icur/3 == inext/3 ) + { + if ( ibeg==-1 ) ibeg = i; + continue; + } + } + if ( ibeg<0 ) ibeg = i; + int ioff = node2soff(i); + int icur = node2sbeg(i); + int rbeg = node2rbeg(i); + int rend = node2rend(ibeg); + int fill = dlen%3; + + // alt + if ( hap->sseq.l ) + { + sseq.l = hap->stack[ibeg].slen - ioff; + sseq.s = hap->sseq.s + ioff; + } + else // splice site overlap, see #1475227917 + sseq.l = fill = 0; + cds_translate(&sref, &sseq, icur,rbeg,rend, tr->strand, &hap->tseq, fill); + + // ref + sseq.l = node2rend(ibeg) - rbeg; + sseq.s = sref.s + N_REF_PAD + rbeg; + sseq.m = sref.m - 2*N_REF_PAD; + cds_translate(&sref, &sseq, rbeg,rbeg,rend, tr->strand, &hap->tref, fill); + sseq.m = sref.m - 2*N_REF_PAD + hap->stack[istack].dlen; + + hap_add_csq(args,hap,node,sseq.m, i,ibeg,dlen,indel); + ibeg = -1; + dlen = 0; + indel = 0; + } + } + } +} + +static inline void csq_print_text(args_t *args, csq_t *csq, int ismpl, int ihap) +{ + if ( csq->type.type & CSQ_PRINTED_UPSTREAM ) return; + + char *smpl = ismpl >= 0 ? args->hdr->samples[ismpl] : "-"; + const char *chr = bcf_hdr_id2name(args->hdr,args->rid); + + fprintf(args->out,"CSQ\t%s\t", smpl); + if ( ihap>0 ) + fprintf(args->out,"%d", ihap); + else + fprintf(args->out,"-"); + + args->str.l = 0; + kput_vcsq(args, &csq->type, &args->str); + fprintf(args->out,"\t%s\t%d\t%s\n",chr,csq->pos+1,args->str.s); +} +static inline void hap_print_text(args_t *args, tscript_t *tr, int ismpl, int ihap, hap_node_t *node) +{ + if ( !node || !node->ncsq_list ) return; + + char *smpl = ismpl >= 0 ? args->hdr->samples[ismpl] : "-"; + const char *chr = bcf_hdr_id2name(args->hdr,args->rid); + + int i; + for (i=0; incsq_list; i++) + { + csq_t *csq = node->csq_list + i; + if ( csq->type.type & CSQ_PRINTED_UPSTREAM ) continue; + assert( csq->type.vstr.l ); + + fprintf(args->out,"CSQ\t%s\t", smpl); + if ( ihap>0 ) + fprintf(args->out,"%d", ihap); + else + fprintf(args->out,"-"); + + args->str.l = 0; + kput_vcsq(args, &csq->type, &args->str); + fprintf(args->out,"\t%s\t%d\t%s\n",chr,csq->pos+1,args->str.s); + } +} + +static inline void hap_stage_vcf(args_t *args, tscript_t *tr, int ismpl, int ihap, hap_node_t *node) +{ + if ( !node || !node->ncsq_list || ismpl<0 ) return; + + int i; + for (i=0; incsq_list; i++) + { + csq_t *csq = node->csq_list + i; + vrec_t *vrec = csq->vrec; + int icsq = 2*csq->idx + ihap; + if ( icsq >= args->ncsq_max ) // more than ncsq_max consequences, so can't fit it in FMT + { + int print_warning = 1; + if ( args->quiet ) + { + if ( args->quiet > 1 || args->ncsq_small_warned ) print_warning = 0; + args->ncsq_small_warned = 1; + } + if ( print_warning ) + { + fprintf(bcftools_stderr,"Warning: --ncsq %d is too small to annotate %s at %s:%d with %d-th csq\n", + args->ncsq_max/2,args->hdr->samples[ismpl],bcf_hdr_id2name(args->hdr,args->rid),vrec->line->pos+1,csq->idx+1); + if ( args->quiet ) fprintf(bcftools_stderr,"(This warning is printed only once)\n"); + } + break; + } + if ( vrec->nfmt < 1 + icsq/32 ) vrec->nfmt = 1 + icsq/32; + vrec->smpl[ismpl*args->nfmt_bcsq + icsq/32] |= 1 << (icsq % 32); + } +} + +void hap_flush(args_t *args, uint32_t pos) +{ + int i,j; + tr_heap_t *heap = args->active_tr; + + while ( heap->ndat && heap->dat[0]->end<=pos ) + { + tscript_t *tr = heap->dat[0]; + khp_delete(trhp, heap); + + args->hap->tr = tr; + if ( tr->root && tr->root->nchild ) // normal, non-localized calling + { + hap_finalize(args, args->hap); + + if ( args->output_type==FT_TAB_TEXT ) // plain text output, not a vcf + { + if ( args->phase==PHASE_DROP_GT ) + hap_print_text(args, tr, -1,0, tr->hap[0]); + else + { + for (i=0; ismpl->n; i++) + { + for (j=0; j<2; j++) + hap_print_text(args, tr, args->smpl->idx[i],j+1, tr->hap[i*2+j]); + } + } + } + else if ( args->phase!=PHASE_DROP_GT ) + { + for (i=0; ismpl->n; i++) + { + for (j=0; j<2; j++) + hap_stage_vcf(args, tr, args->smpl->idx[i],j, tr->hap[i*2+j]); + } + } + } + + // mark the transcript for deletion. Cannot delete it immediately because + // by-position VCF output will need them when flushed by vcf_buf_push + args->nrm_tr++; + hts_expand(tscript_t*,args->nrm_tr,args->mrm_tr,args->rm_tr); + args->rm_tr[args->nrm_tr-1] = tr; + } +} + +#define SWAP(type_t, a, b) { type_t t = a; a = b; b = t; } + +void vbuf_push(args_t *args, bcf1_t **rec_ptr) +{ + int i; + + assert(rec_ptr); + bcf1_t *rec = *rec_ptr; + + // check for duplicate records + i = args->vcf_rbuf.n ? rbuf_last(&args->vcf_rbuf) : -1; + if ( i<0 || args->vcf_buf[i]->vrec[0]->line->pos!=rec->pos ) + { + // vcf record with a new pos + rbuf_expand0(&args->vcf_rbuf, vbuf_t*, args->vcf_rbuf.n+1, args->vcf_buf); + i = rbuf_append(&args->vcf_rbuf); + if ( !args->vcf_buf[i] ) args->vcf_buf[i] = (vbuf_t*) calloc(1,sizeof(vbuf_t)); + args->vcf_buf[i]->n = 0; + } + vbuf_t *vbuf = args->vcf_buf[i]; + vbuf->n++; + hts_expand0(vrec_t*, vbuf->n, vbuf->m, vbuf->vrec); + if ( !vbuf->vrec[vbuf->n - 1] ) + vbuf->vrec[vbuf->n - 1] = (vrec_t*) calloc(1,sizeof(vrec_t)); + + vrec_t *vrec = vbuf->vrec[vbuf->n - 1]; + if ( args->phase!=PHASE_DROP_GT && args->smpl->n ) + { + if ( !vrec->smpl ) vrec->smpl = (uint32_t*) calloc(args->hdr_nsmpl,sizeof(*vrec->smpl) * args->nfmt_bcsq); + else memset(vrec->smpl,0,args->hdr_nsmpl*sizeof(*vrec->smpl) * args->nfmt_bcsq); + } + if ( !vrec->line ) vrec->line = bcf_init1(); + SWAP(bcf1_t*, (*rec_ptr), vrec->line); + + int ret; + khint_t k = kh_put(pos2vbuf, args->pos2vbuf, (int)rec->pos, &ret); + kh_val(args->pos2vbuf,k) = vbuf; +} + +void vbuf_flush(args_t *args) +{ + if ( args->active_tr->ndat ) return; // cannot output buffered VCF lines (args.vbuf) until all active transcripts are gone + + int i,j; + while ( (i=rbuf_shift(&args->vcf_rbuf))>=0 ) + { + vbuf_t *vbuf = args->vcf_buf[i]; + for (i=0; in; i++) + { + vrec_t *vrec = vbuf->vrec[i]; + if ( !args->out_fh ) // not a VCF output + { + vrec->nvcsq = 0; + continue; + } + if ( !vrec->nvcsq ) + { + bcf_write(args->out_fh, args->hdr, vrec->line); + continue; + } + + args->str.l = 0; + kput_vcsq(args, &vrec->vcsq[0], &args->str); + for (j=1; jnvcsq; j++) + { + kputc_(',', &args->str); + kput_vcsq(args, &vrec->vcsq[j], &args->str); + } + bcf_update_info_string(args->hdr, vrec->line, args->bcsq_tag, args->str.s); + if ( args->hdr_nsmpl ) + { + if ( vrec->nfmt < args->nfmt_bcsq ) + for (j=1; jhdr_nsmpl; j++) memcpy(vrec->smpl+j*vrec->nfmt, vrec->smpl+j*args->nfmt_bcsq, vrec->nfmt*sizeof(*vrec->smpl)); + bcf_update_format_int32(args->hdr, vrec->line, args->bcsq_tag, vrec->smpl, args->hdr_nsmpl*vrec->nfmt); + } + vrec->nvcsq = 0; + bcf_write(args->out_fh, args->hdr, vrec->line); + } + if ( vbuf->n ) + { + khint_t k = kh_get(pos2vbuf, args->pos2vbuf, vbuf->vrec[0]->line->pos); + if ( k != kh_end(args->pos2vbuf) ) kh_del(pos2vbuf, args->pos2vbuf, k); + } + vbuf->n = 0; + } + + for (i=0; inrm_tr; i++) + { + tscript_t *tr = args->rm_tr[i]; + if ( tr->root ) hap_destroy(tr->root); + tr->root = NULL; + free(tr->hap); + free(tr->ref); + free(tr->sref); + } + args->nrm_tr = 0; + args->ncsq_buf = 0; +} + +void tscript_init_ref(args_t *args, tscript_t *tr, const char *chr) +{ + int i, len; + int pad_beg = tr->beg >= N_REF_PAD ? N_REF_PAD : tr->beg; + + tr->ref = faidx_fetch_seq(args->fai, chr, tr->beg - pad_beg, tr->end + N_REF_PAD, &len); + if ( !tr->ref ) + error("faidx_fetch_seq failed %s:%d-%d\n", chr,tr->beg+1,tr->end+1); + + int pad_end = len - (tr->end - tr->beg + 1 + pad_beg); + if ( pad_beg + pad_end != 2*N_REF_PAD ) + { + char *ref = (char*) malloc(tr->end - tr->beg + 1 + 2*N_REF_PAD); + for (i=0; i < N_REF_PAD - pad_beg; i++) ref[i] = 'N'; + memcpy(ref+i, tr->ref, len); + for (i=0; i < N_REF_PAD - pad_end; i++) ref[i+len] = 'N'; + free(tr->ref); + tr->ref = ref; + } +} + +static void sanity_check_ref(args_t *args, tscript_t *tr, bcf1_t *rec) +{ + char *ref = tr->ref + (rec->pos + N_REF_PAD >= tr->beg ? rec->pos - tr->beg + N_REF_PAD : 0); + char *vcf = rec->d.allele[0] + (rec->pos + N_REF_PAD >= tr->beg ? 0 : tr->beg - N_REF_PAD - rec->pos); + assert( vcf - rec->d.allele[0] < strlen(rec->d.allele[0]) ); + while ( *ref && *vcf ) + { + if ( *ref!=*vcf && toupper(*ref)!=toupper(*vcf) ) + error("Error: the fasta reference does not match the VCF REF allele at %s:%d .. %s\n", bcf_seqname(args->hdr,rec),rec->pos+1,rec->d.allele[0]); + ref++; + vcf++; + } +} + +int test_cds_local(args_t *args, bcf1_t *rec) +{ + int i,j, ret = 0; + const char *chr = bcf_seqname(args->hdr,rec); + // note that the off-by-one extension of rlen is deliberate to account for insertions + if ( !regidx_overlap(args->idx_cds,chr,rec->pos,rec->pos+rec->rlen, args->itr) ) return 0; + + // structures to fake the normal test_cds machinery + hap_node_t root, node; + root.type = HAP_ROOT; + kstring_t *tref = &args->hap->tref, *tseq = &args->hap->tseq; + + while ( regitr_overlap(args->itr) ) + { + gf_cds_t *cds = regitr_payload(args->itr,gf_cds_t*); + tscript_t *tr = cds->tr; + if ( !GF_is_coding(tr->type) ) continue; + ret = 1; + + if ( !tr->ref ) + { + tscript_init_ref(args, tr, chr); + tscript_splice_ref(tr); + khp_insert(trhp, args->active_tr, &tr); // only to clean the reference afterwards + } + + sanity_check_ref(args, tr, rec); + + kstring_t sref; + sref.s = tr->sref; + sref.l = tr->nsref; + sref.m = sref.l; + + for (i=1; in_allele; i++) + { + if ( hap_init(args, &root, &node, cds, rec, i)!=0 ) continue; + + csq_t csq; + memset(&csq, 0, sizeof(csq_t)); + csq.pos = rec->pos; + csq.type.biotype = tr->type; + csq.type.strand = tr->strand; + csq.type.trid = tr->id; + csq.type.gene = tr->gene->name; + + int csq_type = node.csq; + + // code repetition: it would be nice to reuse the code from hap_add_csq, needs have refactoring though + if ( node.type == HAP_SSS ) + { + csq.type.type = csq_type; + csq_stage(args, &csq, rec); + } + else + { + kstring_t sseq; + sseq.m = sref.m - 2*N_REF_PAD + node.dlen; + sseq.s = node.seq; + int alen = sseq.l = strlen(sseq.s); + int fill = node.dlen%3 && alen ? 1 : 0; // see #1475227917 + cds_translate(&sref, &sseq, node.sbeg,node.sbeg,node.sbeg+node.rlen, tr->strand, tseq, fill); + + sseq.m = sref.m - 2*N_REF_PAD; + sseq.s = sref.s + N_REF_PAD + node.sbeg; + sseq.l = node.rlen; + cds_translate(&sref, &sseq, node.sbeg,node.sbeg,node.sbeg+node.rlen, tr->strand, tref, fill); + + // check for truncating stops + for (j=0; jl; j++) + if ( tref->s[j]=='*' ) break; + if ( j!=tref->l ) + { + tref->l = j+1; + tref->s[j+1] = 0; + } + for (j=0; jl; j++) + if ( tseq->s[j]=='*' ) break; + if ( j!=tseq->l ) + { + tseq->l = j+1; + tseq->s[j+1] = 0; + } + if ( csq_type & CSQ_STOP_LOST ) + { + if ( tref->s[tref->l-1]=='*' && tref->s[tref->l-1] == tseq->s[tseq->l-1] ) + { + csq_type &= ~CSQ_STOP_LOST; + csq_type |= CSQ_STOP_RETAINED; + } + else if (tref->s[tref->l-1]!='*' ) + { + // This is CDS 3' incomplete ENSG00000173376/synon.vcf, can also be missense + // We observe in real data a change to a stop, ENST00000528237/retained-stop-incomplete-cds.vcf + if ( tseq->s[tseq->l-1] == '*' ) + { + csq_type &= ~CSQ_STOP_GAINED; + csq_type |= CSQ_STOP_RETAINED; + } + else + csq_type |= CSQ_INCOMPLETE_CDS; + } + } + if ( csq_type & CSQ_START_LOST && tref->s[0]!='M' ) + csq_type &= ~CSQ_START_LOST; + if ( node.dlen!=0 ) + { + if ( node.dlen%3 ) + csq_type |= CSQ_FRAMESHIFT_VARIANT; + else if ( node.dlen<0 ) + csq_type |= CSQ_INFRAME_DELETION; + else + csq_type |= CSQ_INFRAME_INSERTION; + } + else + { + for (j=0; jl; j++) + if ( tref->s[j] != tseq->s[j] ) break; + if ( j==tref->l ) + csq_type |= CSQ_SYNONYMOUS_VARIANT; + else if ( tref->s[j] == '*' ) + csq_type |= CSQ_STOP_LOST; + else if ( tseq->s[j] == '*' ) + csq_type |= CSQ_STOP_GAINED; + else + csq_type |= CSQ_MISSENSE_VARIANT; + } + if ( csq_type & CSQ_COMPOUND ) + { + // create the aa variant string + kstring_t str = {0,0,0}; + int aa_rbeg = tr->strand==STRAND_FWD ? node.sbeg/3+1 : (tr->nsref - 2*N_REF_PAD - node.sbeg - node.rlen)/3+1; + int aa_sbeg = tr->strand==STRAND_FWD ? node.sbeg/3+1 : (tr->nsref - 2*N_REF_PAD + node.dlen - node.sbeg - alen)/3+1; + kputc_('|', &str); + kputw(aa_rbeg, &str); + kputs(tref->s, &str); + if ( !(csq_type & CSQ_SYNONYMOUS_VARIANT) ) + { + kputc_('>', &str); + kputw(aa_sbeg, &str); + kputs(tseq->s, &str); + } + kputc_('|', &str); + kputw(rec->pos+1, &str); + kputs(node.var, &str); + csq.type.vstr = str; + csq.type.type = csq_type & CSQ_COMPOUND; + csq_stage(args, &csq, rec); + + // all this only to clean vstr when vrec is flushed + if ( !tr->root ) + tr->root = (hap_node_t*) calloc(1,sizeof(hap_node_t)); + tr->root->ncsq_list++; + hts_expand0(csq_t,tr->root->ncsq_list,tr->root->mcsq_list,tr->root->csq_list); + csq_t *rm_csq = tr->root->csq_list + tr->root->ncsq_list - 1; + rm_csq->type.vstr = str; + } + if ( csq_type & ~CSQ_COMPOUND ) + { + csq.type.type = csq_type & ~CSQ_COMPOUND; + csq.type.vstr.l = 0; + csq_stage(args, &csq, rec); + } + } + free(node.seq); + free(node.var); + } + } + return ret; +} + +int test_cds(args_t *args, bcf1_t *rec) +{ + int i, ret = 0, hap_ret; + const char *chr = bcf_seqname(args->hdr,rec); + // note that the off-by-one extension of rlen is deliberate to account for insertions + if ( !regidx_overlap(args->idx_cds,chr,rec->pos,rec->pos+rec->rlen, args->itr) ) return 0; + while ( regitr_overlap(args->itr) ) + { + gf_cds_t *cds = regitr_payload(args->itr,gf_cds_t*); + tscript_t *tr = cds->tr; + if ( !GF_is_coding(tr->type) ) continue; + ret = 1; + if ( !tr->root ) + { + // initialize the transcript and its haplotype tree, fetch the reference sequence + tscript_init_ref(args, tr, chr); + + tr->root = (hap_node_t*) calloc(1,sizeof(hap_node_t)); + tr->nhap = args->phase==PHASE_DROP_GT ? 1 : 2*args->smpl->n; // maximum ploidy = diploid + tr->hap = (hap_node_t**) malloc(tr->nhap*sizeof(hap_node_t*)); + for (i=0; inhap; i++) tr->hap[i] = NULL; + tr->root->nend = tr->nhap; + tr->root->type = HAP_ROOT; + + khp_insert(trhp, args->active_tr, &tr); + } + + sanity_check_ref(args, tr, rec); + + if ( args->phase==PHASE_DROP_GT ) + { + if ( rec->d.allele[1][0]=='<' || rec->d.allele[1][0]=='*' ) { continue; } + hap_node_t *parent = tr->hap[0] ? tr->hap[0] : tr->root; + hap_node_t *child = (hap_node_t*)calloc(1,sizeof(hap_node_t)); + if ( (hap_ret=hap_init(args, parent, child, cds, rec, 1))!=0 ) + { + // overlapping or intron variant, cannot apply + if ( hap_ret==1 ) + { + if ( !args->quiet ) + fprintf(bcftools_stderr,"Warning: Skipping overlapping variants at %s:%d\t%s>%s\n", chr,rec->pos+1,rec->d.allele[0],rec->d.allele[1]); + if ( args->out ) + fprintf(args->out,"LOG\tWarning: Skipping overlapping variants at %s:%d\t%s>%s\n", chr,rec->pos+1,rec->d.allele[0],rec->d.allele[1]); + } + else ret = 1; // prevent reporting as intron in test_tscript + free(child); + continue; + } + parent->nend--; + parent->nchild = 1; + parent->mchild = 1; + parent->child = (hap_node_t**) malloc(sizeof(hap_node_t*)); + parent->child[0] = child; + tr->hap[0] = child; + tr->hap[0]->nend = 1; + continue; + } + + // apply the VCF variants and extend the haplotype tree + int j, ismpl, ihap, ngts = bcf_get_genotypes(args->hdr, rec, &args->gt_arr, &args->mgt_arr); + ngts /= bcf_hdr_nsamples(args->hdr); + if ( ngts!=1 && ngts!=2 ) + { + if ( !args->quiet ) + fprintf(bcftools_stderr,"Warning: Skipping site with non-diploid/non-haploid genotypes at %s:%d\t%s>%s\n", chr,rec->pos+1,rec->d.allele[0],rec->d.allele[1]); + if ( args->out ) + fprintf(args->out,"LOG\tWarning: Skipping site with non-diploid/non-haploid genotypes at %s:%d\t%s>%s\n", chr,rec->pos+1,rec->d.allele[0],rec->d.allele[1]); + continue; + } + for (ismpl=0; ismplsmpl->n; ismpl++) + { + int32_t *gt = args->gt_arr + args->smpl->idx[ismpl]*ngts; + if ( gt[0]==bcf_gt_missing ) continue; + + if ( ngts>1 && gt[0]!=gt[1] && gt[1]!=bcf_gt_missing && gt[1]!=bcf_int32_vector_end ) + { + if ( args->phase==PHASE_MERGE ) + { + if ( !bcf_gt_allele(gt[0]) ) gt[0] = gt[1]; + } + if ( !bcf_gt_is_phased(gt[0]) && !bcf_gt_is_phased(gt[1]) ) + { + if ( args->phase==PHASE_REQUIRE ) + error("Unphased genotype at %s:%d, sample %s. See the --phase option.\n", chr,rec->pos+1,args->hdr->samples[args->smpl->idx[ismpl]]); + if ( args->phase==PHASE_SKIP ) + continue; + if ( args->phase==PHASE_NON_REF ) + { + if ( !bcf_gt_allele(gt[0]) ) gt[0] = gt[1]; + else if ( !bcf_gt_allele(gt[1]) ) gt[1] = gt[0]; + } + } + } + + for (ihap=0; ihapn_allele ); + if ( rec->d.allele[ial][0]=='<' || rec->d.allele[ial][0]=='*' ) { continue; } + + hap_node_t *parent = tr->hap[i] ? tr->hap[i] : tr->root; + if ( parent->cur_rec==rec && parent->cur_child[ial]>=0 ) + { + // this haplotype has been seen in another sample + tr->hap[i] = parent->child[ parent->cur_child[ial] ]; + tr->hap[i]->nend++; + parent->nend--; + continue; + } + + hap_node_t *child = (hap_node_t*)calloc(1,sizeof(hap_node_t)); + if ( (hap_ret=hap_init(args, parent, child, cds, rec, ial))!=0 ) + { + // overlapping or intron variant, cannot apply + if ( hap_ret==1 ) + { + if ( !args->quiet ) + fprintf(bcftools_stderr,"Warning: Skipping overlapping variants at %s:%d, sample %s\t%s>%s\n", + chr,rec->pos+1,args->hdr->samples[args->smpl->idx[ismpl]],rec->d.allele[0],rec->d.allele[ial]); + if ( args->out ) + fprintf(args->out,"LOG\tWarning: Skipping overlapping variants at %s:%d, sample %s\t%s>%s\n", + chr,rec->pos+1,args->hdr->samples[args->smpl->idx[ismpl]],rec->d.allele[0],rec->d.allele[ial]); + } + free(child); + continue; + } + + if ( parent->cur_rec!=rec ) + { + hts_expand(int,rec->n_allele,parent->mcur_child,parent->cur_child); + for (j=0; jn_allele; j++) parent->cur_child[j] = -1; + parent->cur_rec = rec; + } + + j = parent->nchild++; + hts_expand0(hap_node_t*,parent->nchild,parent->mchild,parent->child); + parent->cur_child[ial] = j; + parent->child[j] = child; + tr->hap[i] = child; + tr->hap[i]->nend++; + parent->nend--; + } + } + } + return ret; +} + +void csq_stage(args_t *args, csq_t *csq, bcf1_t *rec) +{ + // known issues: tab output leads to unsorted output. This is because + // coding haplotypes are printed in one go and buffering is not used + // with tab output. VCF output is OK though. + if ( csq_push(args, csq, rec)!=0 ) return; // the consequence already exists + + int i,j,ngt = 0; + if ( args->phase!=PHASE_DROP_GT ) + { + ngt = bcf_get_genotypes(args->hdr, rec, &args->gt_arr, &args->mgt_arr); + if ( ngt>0 ) ngt /= bcf_hdr_nsamples(args->hdr); + } + if ( ngt<=0 ) + { + if ( args->output_type==FT_TAB_TEXT ) + csq_print_text(args, csq, -1,0); + return; + } + assert( ngt<=2 ); + + if ( args->output_type==FT_TAB_TEXT ) + { + for (i=0; ismpl->n; i++) + { + int32_t *gt = args->gt_arr + args->smpl->idx[i]*ngt; + for (j=0; jsmpl->idx[i],j+1); + } + } + return; + } + + vrec_t *vrec = csq->vrec; + for (i=0; ismpl->n; i++) + { + int32_t *gt = args->gt_arr + args->smpl->idx[i]*ngt; + for (j=0; jidx + j; + if ( icsq >= args->ncsq_max ) // more than ncsq_max consequences, so can't fit it in FMT + { + int ismpl = args->smpl->idx[i]; + int print_warning = 1; + if ( args->quiet ) + { + if ( args->quiet > 1 || args->ncsq_small_warned ) print_warning = 0; + args->ncsq_small_warned = 1; + } + if ( print_warning ) + { + fprintf(bcftools_stderr,"Warning: --ncsq %d is too small to annotate %s at %s:%d with %d-th csq\n", + args->ncsq_max/2,args->hdr->samples[ismpl],bcf_hdr_id2name(args->hdr,args->rid),vrec->line->pos+1,csq->idx+1); + if ( args->quiet ) fprintf(bcftools_stderr,"(This warning is printed only once)\n"); + } + break; + } + if ( vrec->nfmt < 1 + icsq/32 ) vrec->nfmt = 1 + icsq/32; + vrec->smpl[i*args->nfmt_bcsq + icsq/32] |= 1 << (icsq % 32); + } + } +} +int test_utr(args_t *args, bcf1_t *rec) +{ + const char *chr = bcf_seqname(args->hdr,rec); + // note that the off-by-one extension of rlen is deliberate to account for insertions + if ( !regidx_overlap(args->idx_utr,chr,rec->pos,rec->pos+rec->rlen, args->itr) ) return 0; + + splice_t splice; + splice_init(&splice, rec); + + int i, ret = 0; + while ( regitr_overlap(args->itr) ) + { + gf_utr_t *utr = regitr_payload(args->itr, gf_utr_t*); + tscript_t *tr = splice.tr = utr->tr; + for (i=1; in_allele; i++) + { + if ( rec->d.allele[1][0]=='<' || rec->d.allele[1][0]=='*' ) { continue; } + splice.vcf.alt = rec->d.allele[i]; + int splice_ret = splice_csq(args, &splice, utr->beg, utr->end); + if ( splice_ret!=SPLICE_INSIDE && splice_ret!=SPLICE_OVERLAP ) continue; + csq_t csq; + memset(&csq, 0, sizeof(csq_t)); + csq.pos = rec->pos; + csq.type.type = utr->which==prime5 ? CSQ_UTR5 : CSQ_UTR3; + csq.type.biotype = tr->type; + csq.type.strand = tr->strand; + csq.type.trid = tr->id; + csq.type.gene = tr->gene->name; + csq_stage(args, &csq, rec); + ret = 1; + } + } + assert(!splice.kref.s); + assert(!splice.kalt.s); + return ret; +} +int test_splice(args_t *args, bcf1_t *rec) +{ + const char *chr = bcf_seqname(args->hdr,rec); + if ( !regidx_overlap(args->idx_exon,chr,rec->pos,rec->pos + rec->rlen, args->itr) ) return 0; + + splice_t splice; + splice_init(&splice, rec); + splice.check_acceptor = splice.check_donor = 1; + + int i, ret = 0; + while ( regitr_overlap(args->itr) ) + { + gf_exon_t *exon = regitr_payload(args->itr, gf_exon_t*); + splice.tr = exon->tr; + if ( !splice.tr->ncds ) continue; // not a coding transcript, no interest in splice sites + + splice.check_region_beg = splice.tr->beg==exon->beg ? 0 : 1; + splice.check_region_end = splice.tr->end==exon->end ? 0 : 1; + + for (i=1; in_allele; i++) + { + if ( rec->d.allele[1][0]=='<' || rec->d.allele[1][0]=='*' ) { continue; } + splice.vcf.alt = rec->d.allele[i]; + splice_csq(args, &splice, exon->beg, exon->end); + if ( splice.csq ) ret = 1; + } + } + free(splice.kref.s); + free(splice.kalt.s); + return ret; +} +int test_tscript(args_t *args, bcf1_t *rec) +{ + const char *chr = bcf_seqname(args->hdr,rec); + if ( !regidx_overlap(args->idx_tscript,chr,rec->pos,rec->pos+rec->rlen, args->itr) ) return 0; + + splice_t splice; + splice_init(&splice, rec); + + int i, ret = 0; + while ( regitr_overlap(args->itr) ) + { + tscript_t *tr = splice.tr = regitr_payload(args->itr, tscript_t*); + for (i=1; in_allele; i++) + { + if ( rec->d.allele[1][0]=='<' || rec->d.allele[1][0]=='*' ) { continue; } + splice.vcf.alt = rec->d.allele[i]; + int splice_ret = splice_csq(args, &splice, tr->beg, tr->end); + if ( splice_ret!=SPLICE_INSIDE && splice_ret!=SPLICE_OVERLAP ) continue; // SPLICE_OUTSIDE or SPLICE_REF + csq_t csq; + memset(&csq, 0, sizeof(csq_t)); + csq.pos = rec->pos; + csq.type.type = GF_is_coding(tr->type) ? CSQ_INTRON : CSQ_NON_CODING; + csq.type.biotype = tr->type; + csq.type.strand = tr->strand; + csq.type.trid = tr->id; + csq.type.gene = tr->gene->name; + csq_stage(args, &csq, rec); + ret = 1; + } + } + assert(!splice.kref.s); + assert(!splice.kalt.s); + return ret; +} + +void process(args_t *args, bcf1_t **rec_ptr) +{ + if ( !rec_ptr ) + { + hap_flush(args, REGIDX_MAX); + vbuf_flush(args); + return; + } + + bcf1_t *rec = *rec_ptr; + + int call_csq = 1; + if ( !rec->n_allele ) call_csq = 0; // no alternate allele + else if ( rec->n_allele==2 && (rec->d.allele[1][0]=='<' || rec->d.allele[1][0]=='*') ) call_csq = 0; // gVCF, no alt allele + else if ( args->filter ) + { + call_csq = filter_test(args->filter, rec, NULL); + if ( args->filter_logic==FLT_EXCLUDE ) call_csq = call_csq ? 0 : 1; + } + if ( !call_csq ) + { + if ( !args->out_fh ) return; // not a VCF output + vbuf_push(args, rec_ptr); + vbuf_flush(args); + return; + } + + if ( args->rid != rec->rid ) + { + hap_flush(args, REGIDX_MAX); + vbuf_flush(args); + } + args->rid = rec->rid; + vbuf_push(args, rec_ptr); + + int hit = args->local_csq ? test_cds_local(args, rec) : test_cds(args, rec); + hit += test_utr(args, rec); + hit += test_splice(args, rec); + if ( !hit ) test_tscript(args, rec); + + hap_flush(args, rec->pos-1); + vbuf_flush(args); + + return; +} + +static const char *usage(void) +{ + return + "\n" + "About: Haplotype-aware consequence caller.\n" + "Usage: bcftools csq [options] in.vcf\n" + "\n" + "Required options:\n" + " -f, --fasta-ref reference file in fasta format\n" + " -g, --gff-annot gff3 annotation file\n" + "\n" + "CSQ options:\n" + " -c, --custom-tag use this tag instead of the default BCSQ\n" + " -l, --local-csq localized predictions, consider only one VCF record at a time\n" + " -n, --ncsq maximum number of consequences to consider per site [16]\n" + " -p, --phase how to construct haplotypes and how to deal with unphased data: [r]\n" + " a: take GTs as is, create haplotypes regardless of phase (0/1 -> 0|1)\n" + " m: merge *all* GTs into a single haplotype (0/1 -> 1, 1/2 -> 1)\n" + " r: require phased GTs, throw an error on unphased het GTs\n" + " R: create non-reference haplotypes if possible (0/1 -> 1|1, 1/2 -> 1|2)\n" + " s: skip unphased GTs\n" + "Options:\n" + " -e, --exclude exclude sites for which the expression is true\n" + " -i, --include select sites for which the expression is true\n" + " -o, --output write output to a file [standard output]\n" + " -O, --output-type b: compressed BCF, u: uncompressed BCF, z: compressed VCF\n" + " v: uncompressed VCF, t: plain tab-delimited text output [v]\n" + " -q, --quiet suppress warning messages. Can be given two times for even less messages\n" + " -r, --regions restrict to comma-separated list of regions\n" + " -R, --regions-file restrict to regions listed in a file\n" + " -s, --samples <-|list> samples to include or \"-\" to apply all variants and ignore samples\n" + " -S, --samples-file samples to include\n" + " -t, --targets similar to -r but streams rather than index-jumps\n" + " -T, --targets-file similar to -R but streams rather than index-jumps\n" + "\n" + "Example:\n" + " bcftools csq -f hs37d5.fa -g Homo_sapiens.GRCh37.82.gff3.gz in.vcf\n" + "\n" + " # GFF3 annotation files can be downloaded from Ensembl. e.g. for human:\n" + " ftp://ftp.ensembl.org/pub/current_gff3/homo_sapiens/\n" + " ftp://ftp.ensembl.org/pub/grch37/release-84/gff3/homo_sapiens/\n" + "\n"; +} + +int main_csq(int argc, char *argv[]) +{ + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->output_type = FT_VCF; + args->bcsq_tag = "BCSQ"; + args->ncsq_max = 2*16; + + static struct option loptions[] = + { + {"help",0,0,'h'}, + {"ncsq",1,0,'n'}, + {"custom-tag",1,0,'c'}, + {"local-csq",0,0,'l'}, + {"gff-annot",1,0,'g'}, + {"fasta-ref",1,0,'f'}, + {"include",1,0,'i'}, + {"exclude",1,0,'e'}, + {"output",1,0,'o'}, + {"output-type",1,NULL,'O'}, + {"phase",1,0,'p'}, + {"quiet",0,0,'q'}, + {"regions",1,0,'r'}, + {"regions-file",1,0,'R'}, + {"samples",1,0,'s'}, + {"samples-file",1,0,'S'}, + {"targets",1,0,'t'}, + {"targets-file",1,0,'T'}, + {0,0,0,0} + }; + int c, targets_is_file = 0, regions_is_file = 0; + char *targets_list = NULL, *regions_list = NULL; + while ((c = getopt_long(argc, argv, "?hr:R:t:T:i:e:f:o:O:g:s:S:p:qc:ln:",loptions,NULL)) >= 0) + { + switch (c) + { + case 'l': args->local_csq = 1; break; + case 'c': args->bcsq_tag = optarg; break; + case 'q': args->quiet++; break; + case 'p': + switch (optarg[0]) + { + case 'a': args->phase = PHASE_AS_IS; break; + case 'm': args->phase = PHASE_MERGE; break; + case 'r': args->phase = PHASE_REQUIRE; break; + case 'R': args->phase = PHASE_NON_REF; break; + case 's': args->phase = PHASE_SKIP; break; + default: error("The -p code \"%s\" not recognised\n", optarg); + } + break; + case 'f': args->fa_fname = optarg; break; + case 'g': args->gff_fname = optarg; break; + case 'n': + args->ncsq_max = 2 * atoi(optarg); + if ( args->ncsq_max <=0 ) error("Expected positive integer with -n, got %s\n", optarg); + break; + case 'o': args->output_fname = optarg; break; + case 'O': + switch (optarg[0]) { + case 't': args->output_type = FT_TAB_TEXT; break; + case 'b': args->output_type = FT_BCF_GZ; break; + case 'u': args->output_type = FT_BCF; break; + case 'z': args->output_type = FT_VCF_GZ; break; + case 'v': args->output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + } + break; + case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break; + case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break; + case 'r': regions_list = optarg; break; + case 'R': regions_list = optarg; regions_is_file = 1; break; + case 's': args->sample_list = optarg; break; + case 'S': args->sample_list = optarg; args->sample_is_file = 1; break; + case 't': targets_list = optarg; break; + case 'T': targets_list = optarg; targets_is_file = 1; break; + case 'h': + case '?': error("%s",usage()); + default: error("The option not recognised: %s\n\n", optarg); break; + } + } + char *fname = NULL; + if ( optind==argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin + else error("%s", usage()); + } + else fname = argv[optind]; + if ( argc - optind>1 ) error("%s", usage()); + if ( !args->fa_fname ) error("Missing the --fa-ref option\n"); + if ( !args->gff_fname ) error("Missing the --gff option\n"); + args->sr = bcf_sr_init(); + if ( targets_list && bcf_sr_set_targets(args->sr, targets_list, targets_is_file, 0)<0 ) + error("Failed to read the targets: %s\n", targets_list); + if ( regions_list && bcf_sr_set_regions(args->sr, regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", regions_list); + if ( !bcf_sr_add_reader(args->sr, fname) ) + error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->sr->errnum)); + args->hdr = bcf_sr_get_header(args->sr,0); + + init_data(args); + while ( bcf_sr_next_line(args->sr) ) + { + process(args, &args->sr->readers[0].buffer[0]); + } + process(args,NULL); + + destroy_data(args); + bcf_sr_destroy(args->sr); + free(args); + + return 0; +} + diff --git a/bcftools/em.c b/bcftools/em.c new file mode 100644 index 0000000..a976f22 --- /dev/null +++ b/bcftools/em.c @@ -0,0 +1,259 @@ +/* em.c -- mathematical functions. + + Copyright (C) 2010, 2011 Broad Institute. + Portions copyright (C) 2013 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include "kmin.h" +#include "call.h" + +#define ITER_MAX 50 +#define ITER_TRY 10 +#define EPS 1e-5 + +extern double kf_gammaq(double, double); + +/* + Generic routines + */ + +// estimate site allele frequency in a very naive and inaccurate way +static double est_freq(int n, const double *pdg) +{ + int i, gcnt[3], tmp1; + // get a rough estimate of the genotype frequency + gcnt[0] = gcnt[1] = gcnt[2] = 0; + for (i = 0; i < n; ++i) { + const double *p = pdg + i * 3; + if (p[0] != 1. || p[1] != 1. || p[2] != 1.) { + int which = p[0] > p[1]? 0 : 1; + which = p[which] > p[2]? which : 2; + ++gcnt[which]; + } + } + tmp1 = gcnt[0] + gcnt[1] + gcnt[2]; + return (tmp1 == 0)? -1.0 : (.5 * gcnt[1] + gcnt[2]) / tmp1; +} + +/* + Single-locus EM + */ + +typedef struct { + int beg, end; + const double *pdg; +} minaux1_t; + +static double prob1(double f, void *data) +{ + minaux1_t *a = (minaux1_t*)data; + double p = 1., l = 0., f3[3]; + int i; +// printf("brent %lg\n", f); + if (f < 0 || f > 1) return 1e300; + f3[0] = (1.-f)*(1.-f); f3[1] = 2.*f*(1.-f); f3[2] = f*f; + for (i = a->beg; i < a->end; ++i) { + const double *pdg = a->pdg + i * 3; + p *= pdg[0] * f3[0] + pdg[1] * f3[1] + pdg[2] * f3[2]; + if (p < 1e-200) l -= log(p), p = 1.; + } + return l - log(p); +} + +// one EM iteration for allele frequency estimate +static double freq_iter(double *f, const double *_pdg, int beg, int end) +{ + double f0 = *f, f3[3], err; + int i; +// printf("em %lg\n", *f); + f3[0] = (1.-f0)*(1.-f0); f3[1] = 2.*f0*(1.-f0); f3[2] = f0*f0; + for (i = beg, f0 = 0.; i < end; ++i) { + const double *pdg = _pdg + i * 3; + f0 += (pdg[1] * f3[1] + 2. * pdg[2] * f3[2]) + / (pdg[0] * f3[0] + pdg[1] * f3[1] + pdg[2] * f3[2]); + } + f0 /= (end - beg) * 2; + err = fabs(f0 - *f); + *f = f0; + return err; +} + +/* The following function combines EM and Brent's method. When the signal from + * the data is strong, EM is faster but sometimes, EM may converge very slowly. + * When this happens, we switch to Brent's method. The idea is learned from + * Rasmus Nielsen. + */ +static double freqml(double f0, int beg, int end, const double *pdg) +{ + int i; + double f; + for (i = 0, f = f0; i < ITER_TRY; ++i) + if (freq_iter(&f, pdg, beg, end) < EPS) break; + if (i == ITER_TRY) { // haven't converged yet; try Brent's method + minaux1_t a; + a.beg = beg; a.end = end; a.pdg = pdg; + kmin_brent(prob1, f0 == f? .5*f0 : f0, f, (void*)&a, EPS, &f); + } + return f; +} + +// one EM iteration for genotype frequency estimate +static double g3_iter(double g[3], const double *_pdg, int beg, int end) +{ + double err, gg[3]; + int i; + gg[0] = gg[1] = gg[2] = 0.; +// printf("%lg,%lg,%lg\n", g[0], g[1], g[2]); + for (i = beg; i < end; ++i) { + double sum, tmp[3]; + const double *pdg = _pdg + i * 3; + tmp[0] = pdg[0] * g[0]; tmp[1] = pdg[1] * g[1]; tmp[2] = pdg[2] * g[2]; + sum = (tmp[0] + tmp[1] + tmp[2]) * (end - beg); + gg[0] += tmp[0] / sum; gg[1] += tmp[1] / sum; gg[2] += tmp[2] / sum; + } + err = fabs(gg[0] - g[0]) > fabs(gg[1] - g[1])? fabs(gg[0] - g[0]) : fabs(gg[1] - g[1]); + err = err > fabs(gg[2] - g[2])? err : fabs(gg[2] - g[2]); + g[0] = gg[0]; g[1] = gg[1]; g[2] = gg[2]; + return err; +} + +// perform likelihood ratio test +static double lk_ratio_test(int n, int n1, const double *pdg, double f3[3][3]) +{ + double r; + int i; + for (i = 0, r = 1.; i < n1; ++i) { + const double *p = pdg + i * 3; + r *= (p[0] * f3[1][0] + p[1] * f3[1][1] + p[2] * f3[1][2]) + / (p[0] * f3[0][0] + p[1] * f3[0][1] + p[2] * f3[0][2]); + } + for (; i < n; ++i) { + const double *p = pdg + i * 3; + r *= (p[0] * f3[2][0] + p[1] * f3[2][1] + p[2] * f3[2][2]) + / (p[0] * f3[0][0] + p[1] * f3[0][1] + p[2] * f3[0][2]); + } + return r; +} + +// x[0]: ref frequency +// x[1..3]: alt-alt, alt-ref, ref-ref frequenc +// x[4]: HWE P-value +// x[5..6]: group1 freq, group2 freq +// x[7]: 1-degree P-value +// x[8]: 2-degree P-value +int bcf_em1(call_t *call, const bcf1_t *rec, int n1, int flag, double x[10]) +{ + double *pdg; + int i, n; //, n2; + if (rec->n_allele < 2) return -1; // one allele only + // initialization + if (n1 < 0 || n1 > rec->n_sample) n1 = 0; + if (flag & 1<<7) flag |= 7<<5; // compute group freq if LRT is required + if (flag & 0xf<<1) flag |= 0xf<<1; + n = rec->n_sample; //n2 = n - n1; + pdg = call->pdg; + if (pdg == 0) return -1; + for (i = 0; i < 10; ++i) x[i] = -1.; // set to negative + { + if ((x[0] = est_freq(n, pdg)) < 0.) return -1; // no data + x[0] = freqml(x[0], 0, n, pdg); + } + if (flag & (0xf<<1|3<<8)) { // estimate the genotype frequency and test HWE + double *g = x + 1, f3[3], r; + f3[0] = g[0] = (1 - x[0]) * (1 - x[0]); + f3[1] = g[1] = 2 * x[0] * (1 - x[0]); + f3[2] = g[2] = x[0] * x[0]; + for (i = 0; i < ITER_MAX; ++i) + if (g3_iter(g, pdg, 0, n) < EPS) break; + // Hardy-Weinberg equilibrium (HWE) + for (i = 0, r = 1.; i < n; ++i) { + double *p = pdg + i * 3; + r *= (p[0] * g[0] + p[1] * g[1] + p[2] * g[2]) / (p[0] * f3[0] + p[1] * f3[1] + p[2] * f3[2]); + } + x[4] = kf_gammaq(.5, log(r)); + } + if ((flag & 7<<5) && n1 > 0 && n1 < n) { // group frequency + x[5] = freqml(x[0], 0, n1, pdg); + x[6] = freqml(x[0], n1, n, pdg); + } + if ((flag & 1<<7) && n1 > 0 && n1 < n) { // 1-degree P-value + double f[3], f3[3][3], tmp; + f[0] = x[0]; f[1] = x[5]; f[2] = x[6]; + for (i = 0; i < 3; ++i) + f3[i][0] = (1-f[i])*(1-f[i]), f3[i][1] = 2*f[i]*(1-f[i]), f3[i][2] = f[i]*f[i]; + tmp = log(lk_ratio_test(n, n1, pdg, f3)); + if (tmp < 0) tmp = 0; + x[7] = kf_gammaq(.5, tmp); + } + if ((flag & 3<<8) && n1 > 0 && n1 < n) { // 2-degree P-value + double g[3][3], tmp; + for (i = 0; i < 3; ++i) memcpy(g[i], x + 1, 3 * sizeof(double)); + for (i = 0; i < ITER_MAX; ++i) + if (g3_iter(g[1], pdg, 0, n1) < EPS) break; + for (i = 0; i < ITER_MAX; ++i) + if (g3_iter(g[2], pdg, n1, n) < EPS) break; + tmp = log(lk_ratio_test(n, n1, pdg, g)); + if (tmp < 0) tmp = 0; + x[8] = kf_gammaq(1., tmp); + } + return 0; +} + +/* + Two-locus EM (LD) + */ + +#define _G1(h, k) ((h>>1&1) + (k>>1&1)) +#define _G2(h, k) ((h&1) + (k&1)) + +#if 0 +// 0: the previous site; 1: the current site +static int pair_freq_iter(int n, double *pdg[2], double f[4]) +{ + double ff[4]; + int i, k, h; +// printf("%lf,%lf,%lf,%lf\n", f[0], f[1], f[2], f[3]); + memset(ff, 0, 4 * sizeof(double)); + for (i = 0; i < n; ++i) { + double *p[2], sum, tmp; + p[0] = pdg[0] + i * 3; p[1] = pdg[1] + i * 3; + for (k = 0, sum = 0.; k < 4; ++k) + for (h = 0; h < 4; ++h) + sum += f[k] * f[h] * p[0][_G1(k,h)] * p[1][_G2(k,h)]; + for (k = 0; k < 4; ++k) { + tmp = f[0] * (p[0][_G1(0,k)] * p[1][_G2(0,k)] + p[0][_G1(k,0)] * p[1][_G2(k,0)]) + + f[1] * (p[0][_G1(1,k)] * p[1][_G2(1,k)] + p[0][_G1(k,1)] * p[1][_G2(k,1)]) + + f[2] * (p[0][_G1(2,k)] * p[1][_G2(2,k)] + p[0][_G1(k,2)] * p[1][_G2(k,2)]) + + f[3] * (p[0][_G1(3,k)] * p[1][_G2(3,k)] + p[0][_G1(k,3)] * p[1][_G2(k,3)]); + ff[k] += f[k] * tmp / sum; + } + } + for (k = 0; k < 4; ++k) f[k] = ff[k] / (2 * n); + return 0; +} +#endif + + diff --git a/bcftools/em.c.pysam.c b/bcftools/em.c.pysam.c new file mode 100644 index 0000000..db27d06 --- /dev/null +++ b/bcftools/em.c.pysam.c @@ -0,0 +1,261 @@ +#include "bcftools.pysam.h" + +/* em.c -- mathematical functions. + + Copyright (C) 2010, 2011 Broad Institute. + Portions copyright (C) 2013 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include "kmin.h" +#include "call.h" + +#define ITER_MAX 50 +#define ITER_TRY 10 +#define EPS 1e-5 + +extern double kf_gammaq(double, double); + +/* + Generic routines + */ + +// estimate site allele frequency in a very naive and inaccurate way +static double est_freq(int n, const double *pdg) +{ + int i, gcnt[3], tmp1; + // get a rough estimate of the genotype frequency + gcnt[0] = gcnt[1] = gcnt[2] = 0; + for (i = 0; i < n; ++i) { + const double *p = pdg + i * 3; + if (p[0] != 1. || p[1] != 1. || p[2] != 1.) { + int which = p[0] > p[1]? 0 : 1; + which = p[which] > p[2]? which : 2; + ++gcnt[which]; + } + } + tmp1 = gcnt[0] + gcnt[1] + gcnt[2]; + return (tmp1 == 0)? -1.0 : (.5 * gcnt[1] + gcnt[2]) / tmp1; +} + +/* + Single-locus EM + */ + +typedef struct { + int beg, end; + const double *pdg; +} minaux1_t; + +static double prob1(double f, void *data) +{ + minaux1_t *a = (minaux1_t*)data; + double p = 1., l = 0., f3[3]; + int i; +// fprintf(bcftools_stdout, "brent %lg\n", f); + if (f < 0 || f > 1) return 1e300; + f3[0] = (1.-f)*(1.-f); f3[1] = 2.*f*(1.-f); f3[2] = f*f; + for (i = a->beg; i < a->end; ++i) { + const double *pdg = a->pdg + i * 3; + p *= pdg[0] * f3[0] + pdg[1] * f3[1] + pdg[2] * f3[2]; + if (p < 1e-200) l -= log(p), p = 1.; + } + return l - log(p); +} + +// one EM iteration for allele frequency estimate +static double freq_iter(double *f, const double *_pdg, int beg, int end) +{ + double f0 = *f, f3[3], err; + int i; +// fprintf(bcftools_stdout, "em %lg\n", *f); + f3[0] = (1.-f0)*(1.-f0); f3[1] = 2.*f0*(1.-f0); f3[2] = f0*f0; + for (i = beg, f0 = 0.; i < end; ++i) { + const double *pdg = _pdg + i * 3; + f0 += (pdg[1] * f3[1] + 2. * pdg[2] * f3[2]) + / (pdg[0] * f3[0] + pdg[1] * f3[1] + pdg[2] * f3[2]); + } + f0 /= (end - beg) * 2; + err = fabs(f0 - *f); + *f = f0; + return err; +} + +/* The following function combines EM and Brent's method. When the signal from + * the data is strong, EM is faster but sometimes, EM may converge very slowly. + * When this happens, we switch to Brent's method. The idea is learned from + * Rasmus Nielsen. + */ +static double freqml(double f0, int beg, int end, const double *pdg) +{ + int i; + double f; + for (i = 0, f = f0; i < ITER_TRY; ++i) + if (freq_iter(&f, pdg, beg, end) < EPS) break; + if (i == ITER_TRY) { // haven't converged yet; try Brent's method + minaux1_t a; + a.beg = beg; a.end = end; a.pdg = pdg; + kmin_brent(prob1, f0 == f? .5*f0 : f0, f, (void*)&a, EPS, &f); + } + return f; +} + +// one EM iteration for genotype frequency estimate +static double g3_iter(double g[3], const double *_pdg, int beg, int end) +{ + double err, gg[3]; + int i; + gg[0] = gg[1] = gg[2] = 0.; +// fprintf(bcftools_stdout, "%lg,%lg,%lg\n", g[0], g[1], g[2]); + for (i = beg; i < end; ++i) { + double sum, tmp[3]; + const double *pdg = _pdg + i * 3; + tmp[0] = pdg[0] * g[0]; tmp[1] = pdg[1] * g[1]; tmp[2] = pdg[2] * g[2]; + sum = (tmp[0] + tmp[1] + tmp[2]) * (end - beg); + gg[0] += tmp[0] / sum; gg[1] += tmp[1] / sum; gg[2] += tmp[2] / sum; + } + err = fabs(gg[0] - g[0]) > fabs(gg[1] - g[1])? fabs(gg[0] - g[0]) : fabs(gg[1] - g[1]); + err = err > fabs(gg[2] - g[2])? err : fabs(gg[2] - g[2]); + g[0] = gg[0]; g[1] = gg[1]; g[2] = gg[2]; + return err; +} + +// perform likelihood ratio test +static double lk_ratio_test(int n, int n1, const double *pdg, double f3[3][3]) +{ + double r; + int i; + for (i = 0, r = 1.; i < n1; ++i) { + const double *p = pdg + i * 3; + r *= (p[0] * f3[1][0] + p[1] * f3[1][1] + p[2] * f3[1][2]) + / (p[0] * f3[0][0] + p[1] * f3[0][1] + p[2] * f3[0][2]); + } + for (; i < n; ++i) { + const double *p = pdg + i * 3; + r *= (p[0] * f3[2][0] + p[1] * f3[2][1] + p[2] * f3[2][2]) + / (p[0] * f3[0][0] + p[1] * f3[0][1] + p[2] * f3[0][2]); + } + return r; +} + +// x[0]: ref frequency +// x[1..3]: alt-alt, alt-ref, ref-ref frequenc +// x[4]: HWE P-value +// x[5..6]: group1 freq, group2 freq +// x[7]: 1-degree P-value +// x[8]: 2-degree P-value +int bcf_em1(call_t *call, const bcf1_t *rec, int n1, int flag, double x[10]) +{ + double *pdg; + int i, n; //, n2; + if (rec->n_allele < 2) return -1; // one allele only + // initialization + if (n1 < 0 || n1 > rec->n_sample) n1 = 0; + if (flag & 1<<7) flag |= 7<<5; // compute group freq if LRT is required + if (flag & 0xf<<1) flag |= 0xf<<1; + n = rec->n_sample; //n2 = n - n1; + pdg = call->pdg; + if (pdg == 0) return -1; + for (i = 0; i < 10; ++i) x[i] = -1.; // set to negative + { + if ((x[0] = est_freq(n, pdg)) < 0.) return -1; // no data + x[0] = freqml(x[0], 0, n, pdg); + } + if (flag & (0xf<<1|3<<8)) { // estimate the genotype frequency and test HWE + double *g = x + 1, f3[3], r; + f3[0] = g[0] = (1 - x[0]) * (1 - x[0]); + f3[1] = g[1] = 2 * x[0] * (1 - x[0]); + f3[2] = g[2] = x[0] * x[0]; + for (i = 0; i < ITER_MAX; ++i) + if (g3_iter(g, pdg, 0, n) < EPS) break; + // Hardy-Weinberg equilibrium (HWE) + for (i = 0, r = 1.; i < n; ++i) { + double *p = pdg + i * 3; + r *= (p[0] * g[0] + p[1] * g[1] + p[2] * g[2]) / (p[0] * f3[0] + p[1] * f3[1] + p[2] * f3[2]); + } + x[4] = kf_gammaq(.5, log(r)); + } + if ((flag & 7<<5) && n1 > 0 && n1 < n) { // group frequency + x[5] = freqml(x[0], 0, n1, pdg); + x[6] = freqml(x[0], n1, n, pdg); + } + if ((flag & 1<<7) && n1 > 0 && n1 < n) { // 1-degree P-value + double f[3], f3[3][3], tmp; + f[0] = x[0]; f[1] = x[5]; f[2] = x[6]; + for (i = 0; i < 3; ++i) + f3[i][0] = (1-f[i])*(1-f[i]), f3[i][1] = 2*f[i]*(1-f[i]), f3[i][2] = f[i]*f[i]; + tmp = log(lk_ratio_test(n, n1, pdg, f3)); + if (tmp < 0) tmp = 0; + x[7] = kf_gammaq(.5, tmp); + } + if ((flag & 3<<8) && n1 > 0 && n1 < n) { // 2-degree P-value + double g[3][3], tmp; + for (i = 0; i < 3; ++i) memcpy(g[i], x + 1, 3 * sizeof(double)); + for (i = 0; i < ITER_MAX; ++i) + if (g3_iter(g[1], pdg, 0, n1) < EPS) break; + for (i = 0; i < ITER_MAX; ++i) + if (g3_iter(g[2], pdg, n1, n) < EPS) break; + tmp = log(lk_ratio_test(n, n1, pdg, g)); + if (tmp < 0) tmp = 0; + x[8] = kf_gammaq(1., tmp); + } + return 0; +} + +/* + Two-locus EM (LD) + */ + +#define _G1(h, k) ((h>>1&1) + (k>>1&1)) +#define _G2(h, k) ((h&1) + (k&1)) + +#if 0 +// 0: the previous site; 1: the current site +static int pair_freq_iter(int n, double *pdg[2], double f[4]) +{ + double ff[4]; + int i, k, h; +// fprintf(bcftools_stdout, "%lf,%lf,%lf,%lf\n", f[0], f[1], f[2], f[3]); + memset(ff, 0, 4 * sizeof(double)); + for (i = 0; i < n; ++i) { + double *p[2], sum, tmp; + p[0] = pdg[0] + i * 3; p[1] = pdg[1] + i * 3; + for (k = 0, sum = 0.; k < 4; ++k) + for (h = 0; h < 4; ++h) + sum += f[k] * f[h] * p[0][_G1(k,h)] * p[1][_G2(k,h)]; + for (k = 0; k < 4; ++k) { + tmp = f[0] * (p[0][_G1(0,k)] * p[1][_G2(0,k)] + p[0][_G1(k,0)] * p[1][_G2(k,0)]) + + f[1] * (p[0][_G1(1,k)] * p[1][_G2(1,k)] + p[0][_G1(k,1)] * p[1][_G2(k,1)]) + + f[2] * (p[0][_G1(2,k)] * p[1][_G2(2,k)] + p[0][_G1(k,2)] * p[1][_G2(k,2)]) + + f[3] * (p[0][_G1(3,k)] * p[1][_G2(3,k)] + p[0][_G1(k,3)] * p[1][_G2(k,3)]); + ff[k] += f[k] * tmp / sum; + } + } + for (k = 0; k < 4; ++k) f[k] = ff[k] / (2 * n); + return 0; +} +#endif + + diff --git a/bcftools/filter.c b/bcftools/filter.c new file mode 100644 index 0000000..3dc91a7 --- /dev/null +++ b/bcftools/filter.c @@ -0,0 +1,2192 @@ +/* filter.c -- filter expressions. + + Copyright (C) 2013-2015 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "filter.h" +#include "bcftools.h" +#include +#include + +#ifndef __FUNCTION__ +# define __FUNCTION__ __func__ +#endif + +uint64_t bcf_double_missing = 0x7ff0000000000001; +uint64_t bcf_double_vector_end = 0x7ff0000000000002; +static inline void bcf_double_set(double *ptr, uint64_t value) +{ + union { uint64_t i; double d; } u; + u.i = value; + *ptr = u.d; +} +static inline int bcf_double_test(double d, uint64_t value) +{ + union { uint64_t i; double d; } u; + u.d = d; + return u.i==value ? 1 : 0; +} +#define bcf_double_set_vector_end(x) bcf_double_set(&(x),bcf_double_vector_end) +#define bcf_double_set_missing(x) bcf_double_set(&(x),bcf_double_missing) +#define bcf_double_is_vector_end(x) bcf_double_test((x),bcf_double_vector_end) +#define bcf_double_is_missing(x) bcf_double_test((x),bcf_double_missing) + + +typedef struct _token_t +{ + // read-only values, same for all VCF lines + int tok_type; // one of the TOK_* keys below + char *key; // set only for string constants, otherwise NULL + char *tag; // for debugging and printout only, VCF tag name + double threshold; // filtering threshold + int hdr_id, type; // BCF header lookup ID and one of BCF_HT_* types + int idx; // 0-based index to VCF vectors, -1: not a vector, + // -2: list (e.g. [0,1,2] or [1..3] or [1..] or any field[*], which is equivalent to [0..]) + int *idxs, nidxs; // set indexes to 0 to exclude, to 1 to include, and last element negative if unlimited + void (*setter)(filter_t *, bcf1_t *, struct _token_t *); + int (*comparator)(struct _token_t *, struct _token_t *, int op_type, bcf1_t *); + void *hash; // test presence of str value in the hash via comparator + regex_t *regex; // precompiled regex for string comparison + + // modified on filter evaluation at each VCF line + double *values; + kstring_t str_value; + int is_str, is_missing; // is_missing is set only for constants, variables are controled via nvalues + int pass_site; // -1 not applicable, 0 fails, >0 pass + uint8_t *pass_samples; // status of individual samples + int nsamples; // number of samples + int nvalues, mvalues; // number of used values: n=0 for missing values, n=1 for scalars, for strings n=str_value.l + int nstr1; // per-sample string length, set only with str_value.l>0 && nsamples>1 +} +token_t; + +struct _filter_t +{ + bcf_hdr_t *hdr; + char *str; + int nfilters; + token_t *filters, **flt_stack; // filtering input tokens (in RPN) and evaluation stack + int32_t *tmpi; + float *tmpf; + kstring_t tmps; + int max_unpack, mtmpi, mtmpf, nsamples; +}; + + +#define TOK_VAL 0 +#define TOK_LFT 1 // ( +#define TOK_RGT 2 // ) +#define TOK_LE 3 // less or equal +#define TOK_LT 4 // less than +#define TOK_EQ 5 // equal +#define TOK_BT 6 // bigger than +#define TOK_BE 7 // bigger or equal +#define TOK_NE 8 // not equal +#define TOK_OR 9 // | +#define TOK_AND 10 // & +#define TOK_ADD 11 // + +#define TOK_SUB 12 // - +#define TOK_MULT 13 // * +#define TOK_DIV 14 // / +#define TOK_MAX 15 +#define TOK_MIN 16 +#define TOK_AVG 17 +#define TOK_AND_VEC 18 // && (operator applied in samples) +#define TOK_OR_VEC 19 // || (operator applied in samples) +#define TOK_LIKE 20 // ~ regular expression +#define TOK_NLIKE 21 // !~ regular expression +#define TOK_SUM 22 +#define TOK_ABS 23 +#define TOK_LEN 24 +#define TOK_FUNC 25 + +// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 +// ( ) [ < = > ] ! | & + - * / M m a A O ~ ^ S . l +static int op_prec[] = {0,1,1,5,5,5,5,5,5,2,3, 6, 6, 7, 7, 8, 8, 8, 3, 2, 5, 5, 8, 8, 8}; +#define TOKEN_STRING "x()[<=>]!|&+-*/MmaAO~^f" + +static int filters_next_token(char **str, int *len) +{ + char *tmp = *str; + while ( *tmp && isspace(*tmp) ) tmp++; + *str = tmp; + *len = 0; + + // test for doubles: d.ddde[+-]dd + if ( isdigit(*str[0]) || *str[0]=='.' ) // strtod would eat +/- + { + double HTS_UNUSED v = strtod(*str, &tmp); + if ( *str!=tmp && (!tmp[0] || !isalnum(tmp[0])) ) + { + *len = tmp - (*str); + return TOK_VAL; + } + tmp = *str; + } + + if ( !strncasecmp(tmp,"MAX(",4) ) { (*str) += 3; return TOK_MAX; } + if ( !strncasecmp(tmp,"MIN(",4) ) { (*str) += 3; return TOK_MIN; } + if ( !strncasecmp(tmp,"AVG(",4) ) { (*str) += 3; return TOK_AVG; } + if ( !strncasecmp(tmp,"SUM(",4) ) { (*str) += 3; return TOK_SUM; } + if ( !strncasecmp(tmp,"ABS(",4) ) { (*str) += 3; return TOK_ABS; } + if ( !strncasecmp(tmp,"STRLEN(",7) ) { (*str) += 6; return TOK_LEN; } + if ( !strncasecmp(tmp,"%MAX(",5) ) { (*str) += 4; return TOK_MAX; } // for backward compatibility + if ( !strncasecmp(tmp,"%MIN(",5) ) { (*str) += 4; return TOK_MIN; } // for backward compatibility + if ( !strncasecmp(tmp,"%AVG(",5) ) { (*str) += 4; return TOK_AVG; } // for backward compatibility + if ( !strncasecmp(tmp,"%SUM(",5) ) { (*str) += 4; return TOK_SUM; } // for backward compatibility + if ( !strncasecmp(tmp,"INFO/",5) ) tmp += 5; + if ( !strncasecmp(tmp,"FORMAT/",7) ) tmp += 7; + if ( !strncasecmp(tmp,"FMT/",4) ) tmp += 4; + + if ( tmp[0]=='@' ) // file name + { + while ( *tmp && !isspace(*tmp) && *tmp!='=' && *tmp!='!' ) tmp++; + *len = tmp - (*str); + return TOK_VAL; + } + + int square_brackets = 0; + while ( tmp[0] ) + { + if ( tmp[0]=='"' ) break; + if ( tmp[0]=='\'' ) break; + if ( isspace(tmp[0]) ) break; + if ( tmp[0]=='<' ) break; + if ( tmp[0]=='>' ) break; + if ( tmp[0]=='=' ) break; + if ( tmp[0]=='!' ) break; + if ( tmp[0]=='&' ) break; + if ( tmp[0]=='|' ) break; + if ( tmp[0]=='(' ) break; + if ( tmp[0]==')' ) break; + if ( tmp[0]=='+' ) break; + if ( tmp[0]=='*' && !square_brackets ) break; + if ( tmp[0]=='-' && !square_brackets ) break; + if ( tmp[0]=='/' ) break; + if ( tmp[0]=='~' ) break; + if ( tmp[0]==']' ) { if (square_brackets) tmp++; break; } + if ( tmp[0]=='[' ) square_brackets++; + tmp++; + } + if ( tmp > *str ) + { + *len = tmp - (*str); + return TOK_VAL; + } + if ( tmp[0]=='"' || tmp[0]=='\'' ) + { + int quote = tmp[0]; + tmp++; + while ( *tmp && tmp[0]!=quote ) tmp++; + if ( !*tmp ) return -1; // missing quotes + *len = tmp - (*str) + 1; + return TOK_VAL; + } + if ( tmp[0]=='!' ) + { + if ( tmp[1]=='=' ) { (*str) += 2; return TOK_NE; } + if ( tmp[1]=='~' ) { (*str) += 2; return TOK_NLIKE; } + } + if ( tmp[0]=='<' ) + { + if ( tmp[1]=='=' ) { (*str) += 2; return TOK_LE; } + (*str) += 1; return TOK_LT; + } + if ( tmp[0]=='>' ) + { + if ( tmp[1]=='=' ) { (*str) += 2; return TOK_BE; } + (*str) += 1; return TOK_BT; + } + if ( tmp[0]=='=' ) + { + if ( tmp[1]=='=' ) { (*str) += 2; return TOK_EQ; } + (*str) += 1; return TOK_EQ; + } + if ( tmp[0]=='(' ) { (*str) += 1; return TOK_LFT; } + if ( tmp[0]==')' ) { (*str) += 1; return TOK_RGT; } + if ( tmp[0]=='&' && tmp[1]=='&' ) { (*str) += 2; return TOK_AND_VEC; } + if ( tmp[0]=='|' && tmp[1]=='|' ) { (*str) += 2; return TOK_OR_VEC; } + if ( tmp[0]=='&' ) { (*str) += 1; return TOK_AND; } + if ( tmp[0]=='|' ) { (*str) += 1; return TOK_OR; } + if ( tmp[0]=='+' ) { (*str) += 1; return TOK_ADD; } + if ( tmp[0]=='-' ) { (*str) += 1; return TOK_SUB; } + if ( tmp[0]=='*' ) { (*str) += 1; return TOK_MULT; } + if ( tmp[0]=='/' ) { (*str) += 1; return TOK_DIV; } + if ( tmp[0]=='~' ) { (*str) += 1; return TOK_LIKE; } + + *len = tmp - (*str); + return TOK_VAL; +} + +static void filters_set_qual(filter_t *flt, bcf1_t *line, token_t *tok) +{ + float *ptr = &line->qual; + if ( bcf_float_is_missing(*ptr) ) + tok->nvalues = 0; + else + { + tok->values[0] = (double)line->qual; + tok->nvalues = 1; + } +} +static void filters_set_type(filter_t *flt, bcf1_t *line, token_t *tok) +{ + tok->values[0] = bcf_get_variant_types(line); + if ( !tok->values[0] ) tok->values[0] = 1; // mistake in htslib: VCF_* should start with 1 + else tok->values[0] = ((int)tok->values[0]) << 1; + tok->nvalues = 1; +} +static void filters_set_info(filter_t *flt, bcf1_t *line, token_t *tok) +{ + assert( tok->hdr_id >=0 ); + int i; + for (i=0; in_info; i++) + if ( line->d.info[i].key == tok->hdr_id ) break; + + if ( i==line->n_info ) + tok->nvalues = 0; + else if ( line->d.info[i].type==BCF_BT_CHAR ) + { + int n = line->d.info[i].len; + if ( n >= tok->str_value.m ) + { + tok->str_value.m = n + 1; + tok->str_value.s = (char*) realloc(tok->str_value.s, tok->str_value.m); + if ( !tok->str_value.s ) error("Failed to alloc %d bytes\n", (int)tok->str_value.m); + } + memcpy(tok->str_value.s, line->d.info[i].vptr, n); + tok->str_value.s[n] = 0; + tok->nvalues = tok->str_value.l = n; + } + else if ( line->d.info[i].type==BCF_BT_FLOAT ) + { + if ( bcf_float_is_missing(line->d.info[i].v1.f) ) tok->nvalues = 0; + else + { + tok->values[0] = line->d.info[i].v1.f; + tok->nvalues = 1; + } + tok->str_value.l = 0; + } + else + { + tok->str_value.l = 0; + if ( line->d.info[i].type==BCF_BT_INT8 && line->d.info[i].v1.i==bcf_int8_missing ) tok->nvalues = 0; + else if ( line->d.info[i].type==BCF_BT_INT16 && line->d.info[i].v1.i==bcf_int16_missing ) tok->nvalues = 0; + else if ( line->d.info[i].type==BCF_BT_INT32 && line->d.info[i].v1.i==bcf_int32_missing ) tok->nvalues = 0; + else + { + tok->values[0] = line->d.info[i].v1.i; + tok->nvalues = 1; + } + } +} +static int filters_cmp_bit_and(token_t *atok, token_t *btok, int op_type, bcf1_t *line) +{ + int a = (int)(atok->nvalues?atok->values[0]:atok->threshold); + int b = (int)(btok->nvalues?btok->values[0]:btok->threshold); + if ( op_type==TOK_LIKE ) return a&b ? 1 : 0; + return a&b ? 0 : 1; +} +static int filters_cmp_filter(token_t *atok, token_t *btok, int op_type, bcf1_t *line) +{ + int i; + if ( op_type==TOK_NE ) // AND logic: none of the filters can match + { + if ( !line->d.n_flt ) + { + if ( atok->hdr_id==-1 ) return 0; // missing value + return 1; // no filter present, eval to true + } + for (i=0; id.n_flt; i++) + if ( atok->hdr_id==line->d.flt[i] ) return 0; + return 1; + } + // TOK_EQ with OR logic: at least one of the filters must match + if ( !line->d.n_flt ) + { + if ( atok->hdr_id==-1 ) return 1; + return 0; // no filter present, eval to false + } + for (i=0; id.n_flt; i++) + if ( atok->hdr_id==line->d.flt[i] ) return 1; + return 0; +} +static int filters_cmp_id(token_t *atok, token_t *btok, int op_type, bcf1_t *line) +{ + // multiple IDs not supported yet (easy to add though) + + if ( btok->hash ) + { + token_t *tmp = atok; atok = btok; btok = tmp; + } + if ( atok->hash ) + { + int ret = khash_str2int_has_key(atok->hash, line->d.id); + if ( op_type==TOK_EQ ) return ret; + return ret ? 0 : 1; + } + + if ( op_type==TOK_EQ ) return strcmp(btok->str_value.s,line->d.id) ? 0 : 1; + return strcmp(btok->str_value.s,line->d.id) ? 1 : 0; +} + +/** + * bcf_get_info_value() - get single INFO value, int64_t or double + * @line: BCF line + * @info_id: tag ID, as returned by bcf_hdr_id2int + * @ivec: 0-based index to retrieve, -1 when single value is expected + * @vptr: pointer to memory location of sufficient size to accomodate + * info_id's type + * + * The returned value is -1 if tag is not present, 0 if present but + * values is missing or ivec is out of range, and 1 on success. + */ +static int bcf_get_info_value(bcf1_t *line, int info_id, int ivec, void *value) +{ + int j; + for (j=0; jn_info; j++) + if ( line->d.info[j].key == info_id ) break; + if ( j==line->n_info ) return -1; + + bcf_info_t *info = &line->d.info[j]; + if ( info->len == 1 ) + { + if ( info->type==BCF_BT_FLOAT ) *((double*)value) = info->v1.f; + else if ( info->type==BCF_BT_INT8 || info->type==BCF_BT_INT16 || info->type==BCF_BT_INT32 ) *((int64_t*)value) = info->v1.i; + return 1; + } + + if ( ivec<0 ) ivec = 0; + + #define BRANCH(type_t, is_missing, is_vector_end, out_type_t) { \ + type_t *p = (type_t *) info->vptr; \ + for (j=0; jlen; j++) \ + { \ + if ( is_vector_end ) return 0; \ + } \ + if ( is_missing ) return 0; \ + *((out_type_t*)value) = p[j]; \ + return 1; \ + } + switch (info->type) { + case BCF_BT_INT8: BRANCH(int8_t, p[j]==bcf_int8_missing, p[j]==bcf_int8_vector_end, int64_t); break; + case BCF_BT_INT16: BRANCH(int16_t, p[j]==bcf_int16_missing, p[j]==bcf_int16_vector_end, int64_t); break; + case BCF_BT_INT32: BRANCH(int32_t, p[j]==bcf_int32_missing, p[j]==bcf_int32_vector_end, int64_t); break; + case BCF_BT_FLOAT: BRANCH(float, bcf_float_is_missing(p[j]), bcf_float_is_vector_end(p[j]), double); break; + default: fprintf(stderr,"todo: type %d\n", info->type); exit(1); break; + } + #undef BRANCH + return -1; // this shouldn't happen +} + +static void filters_set_pos(filter_t *flt, bcf1_t *line, token_t *tok) +{ + tok->values[0] = line->pos+1; + tok->nvalues = 1; +} + +static void filters_set_info_int(filter_t *flt, bcf1_t *line, token_t *tok) +{ + if ( tok->idx==-2 ) + { + tok->nvalues = bcf_get_info_int32(flt->hdr,line,tok->tag,&flt->tmpi,&flt->mtmpi); + if ( tok->nvalues<=0 ) tok->nvalues = 0; + else + { + hts_expand(double,tok->nvalues,tok->mvalues,tok->values); + int i, j = 0, end = tok->idxs[tok->nidxs-1] < 0 ? tok->nvalues - 1 : tok->nidxs - 1; + if ( end >= tok->nvalues ) end = tok->nvalues - 1; + for (i=0; i<=end; i++) + if ( i>=tok->nidxs || tok->idxs[i] ) tok->values[j++] = flt->tmpi[i]; + tok->nvalues = j; + } + } + else + { + int64_t value; + if ( bcf_get_info_value(line,tok->hdr_id,tok->idx,&value) <= 0 ) + tok->nvalues = 0; + else + { + tok->values[0] = value; + tok->nvalues = 1; + } + } +} + +static void filters_set_info_float(filter_t *flt, bcf1_t *line, token_t *tok) +{ + if ( tok->idx==-2 ) + { + tok->nvalues = bcf_get_info_float(flt->hdr,line,tok->tag,&flt->tmpf,&flt->mtmpf); + if ( tok->nvalues<=0 ) tok->nvalues = 0; + else + { + hts_expand(double,tok->nvalues,tok->mvalues,tok->values); + int i, j = 0, end = tok->idxs[tok->nidxs-1] < 0 ? tok->nvalues - 1 : tok->nidxs - 1; + if ( end >= tok->nvalues ) end = tok->nvalues - 1; + for (i=0; i<=end; i++) + if ( i>=tok->nidxs || tok->idxs[i] ) + { + if ( bcf_float_is_missing(flt->tmpf[i]) ) bcf_double_set_missing(tok->values[j]); + else tok->values[j] = flt->tmpf[i]; + j++; + } + tok->nvalues = j; + } + } + else + { + double value; + if ( bcf_get_info_value(line,tok->hdr_id,tok->idx,&value) <= 0 ) + tok->nvalues = 0; + else + { + tok->values[0] = value; + tok->nvalues = 1; + } + } +} + +static void filters_set_info_string(filter_t *flt, bcf1_t *line, token_t *tok) +{ + int32_t m = tok->str_value.m; + int n = bcf_get_info_string(flt->hdr,line,tok->tag,&tok->str_value.s,&m); + tok->str_value.m = m; + if ( n<0 ) { tok->nvalues = tok->str_value.l = 0; return; } + + if ( tok->idx>=0 ) + { + // get ith field (i=tok->idx) + int i = 0; + char *ss = tok->str_value.s, *se = tok->str_value.s + n; + while ( ssidx ) + { + if ( *ss==',' ) i++; + ss++; + } + if ( ss==se || i!=tok->idx ) { tok->nvalues = tok->str_value.l = 0; return; } + se = ss; + while ( se - tok->str_value.s < n && *se!=',' ) se++; + if ( ss==tok->str_value.s ) *se = 0; + else + { + memmove(tok->str_value.s, ss, se-ss); + tok->str_value.s[se-ss] = 0; + } + tok->str_value.l = se - ss; + } + else if ( tok->idx==-2 && tok->idxs[0]==-1 ) // keep all values, TAG[*] + tok->str_value.l = n; + else if ( tok->idx==-2 ) + { + flt->tmps.l = 0; + ks_resize(&flt->tmps, n); + int i, end = tok->idxs[tok->nidxs-1] < 0 ? n - 1 : tok->nidxs - 1; + if ( end >= n ) end = n - 1; + char *beg = tok->str_value.s, *dst = flt->tmps.s; + for (i=0; i<=end; i++) + { + char *end = beg; + while ( *end && *end!=',' ) end++; + + if ( i>=tok->nidxs || tok->idxs[i] ) + { + memcpy(dst, beg, end - beg); + dst += end - beg; + dst[0] = ','; + dst++; + } + + beg = end+1; + } + dst[0] = 0; + tok->str_value.l = dst - flt->tmps.s; + + #define SWAP(type_t, a, b) { type_t t = a; a = b; b = t; } + SWAP(char *, flt->tmps.s, tok->str_value.s); + SWAP(size_t, flt->tmps.m, tok->str_value.m); + } + tok->nvalues = tok->str_value.l; +} + +static void filters_set_info_flag(filter_t *flt, bcf1_t *line, token_t *tok) +{ + int j; + for (j=0; jn_info; j++) + if ( line->d.info[j].key == tok->hdr_id ) break; + tok->values[0] = j==line->n_info ? 0 : 1; + tok->nvalues = 1; +} + +static void filters_set_format_int(filter_t *flt, bcf1_t *line, token_t *tok) +{ + int i; + if ( (tok->nvalues=bcf_get_format_int32(flt->hdr,line,tok->tag,&flt->tmpi,&flt->mtmpi))<0 ) + { + tok->nvalues = tok->nsamples = 0; + return; + } + if ( tok->idx >= -1 ) // scalar or vector index + { + hts_expand(double,flt->nsamples,tok->mvalues,tok->values); + int nvals = tok->nvalues / line->n_sample; + int idx = tok->idx >= 0 ? tok->idx : 0; + int is_missing = 1; + int32_t *ptr = flt->tmpi; + for (i=0; in_sample; i++) + { + if ( ptr[idx]==bcf_int32_missing || ptr[idx]==bcf_int32_vector_end ) + bcf_double_set_missing(tok->values[i]); + else + { + tok->values[i] = ptr[idx]; + is_missing = 0; + } + ptr += nvals; + } + if ( is_missing ) tok->nvalues = 0; + else tok->nvalues = line->n_sample; + tok->nsamples = tok->nvalues; + return; + } + if ( tok->idx == -2 ) + { + hts_expand(double,tok->nvalues,tok->mvalues,tok->values); + int nvals = tok->nvalues / line->n_sample; + int idx = tok->idx >= 0 ? tok->idx : 0; + int is_missing = 1; + int k, j = 0, end = tok->idxs[tok->nidxs-1] < 0 ? nvals - 1 : tok->nidxs - 1; + if ( end >= nvals ) end = nvals - 1; + int32_t *ptr = flt->tmpi; + for (i=0; in_sample; i++) + { + for (k=0; k<=end; k++) + if ( k>=tok->nidxs || tok->idxs[k] ) + { + if ( ptr[k]==bcf_int32_missing || ptr[k]==bcf_int32_vector_end ) + bcf_double_set_missing(tok->values[j]); + else + { + tok->values[j] = ptr[k]; + is_missing = 0; + } + j++; + } + ptr += nvals; + } + if ( is_missing ) tok->nvalues = tok->nsamples = 0; + else + { + tok->nsamples = line->n_sample; + tok->nvalues = j; + } + return; + } +} +static void filters_set_format_float(filter_t *flt, bcf1_t *line, token_t *tok) +{ + int i; + if ( (tok->nvalues=bcf_get_format_float(flt->hdr,line,tok->tag,&flt->tmpf,&flt->mtmpf))<0 ) + { + tok->nvalues = tok->nsamples = 0; + return; + } + if ( tok->idx >= -1 ) // scalar or vector index + { + hts_expand(double,flt->nsamples,tok->mvalues,tok->values); + int nvals = tok->nvalues / line->n_sample; + int idx = tok->idx >= 0 ? tok->idx : 0; + int is_missing = 1; + float *ptr = flt->tmpf; + for (i=0; in_sample; i++) + { + if ( bcf_float_is_missing(ptr[idx]) || bcf_float_is_vector_end(ptr[idx]) ) + bcf_double_set_missing(tok->values[i]); + else + { + tok->values[i] = ptr[idx]; + is_missing = 0; + } + ptr += nvals; + } + if ( is_missing ) tok->nvalues = 0; + else tok->nvalues = line->n_sample; + tok->nsamples = tok->nvalues; + return; + } + if ( tok->idx == -2 ) + { + hts_expand(double,tok->nvalues,tok->mvalues,tok->values); + int nvals = tok->nvalues / line->n_sample; + int idx = tok->idx >= 0 ? tok->idx : 0; + int is_missing = 1; + int k, j = 0, end = tok->idxs[tok->nidxs-1] < 0 ? nvals - 1 : tok->nidxs - 1; + if ( end >= nvals ) end = nvals - 1; + float *ptr = flt->tmpf; + for (i=0; in_sample; i++) + { + for (k=0; k<=end; k++) + if ( k>=tok->nidxs || tok->idxs[k] ) + { + if ( bcf_float_is_missing(ptr[k]) || bcf_float_is_vector_end(ptr[k]) ) + bcf_double_set_missing(tok->values[j]); + else + { + tok->values[j] = ptr[k]; + is_missing = 0; + } + j++; + } + ptr += nvals; + } + if ( is_missing ) tok->nvalues = tok->nsamples = 0; + else + { + tok->nsamples = line->n_sample; + tok->nvalues = j; + } + return; + } +} +static void filters_set_format_string(filter_t *flt, bcf1_t *line, token_t *tok) +{ + tok->str_value.l = tok->nvalues = 0; + if ( !line->n_sample ) return; + + int ndim = tok->str_value.m; + int nstr = bcf_get_format_char(flt->hdr, line, tok->tag, &tok->str_value.s, &ndim); + tok->str_value.m = ndim; + + if ( nstr<=0 ) return; + + if ( tok->idx == -1 || (tok->idx==-2 && tok->idxs[0]==-1) ) // scalar or keep all values of a vector: TAG[*] + { + tok->nsamples = line->n_sample; + tok->nstr1 = ndim / line->n_sample; + tok->nvalues = tok->str_value.l = nstr; + return; + } + + int nstr1 = nstr / line->n_sample; + + // vector, one or multiple indices + int i; + for (i=0; in_sample; i++) + { + char *dst = tok->str_value.s + i*nstr1, *str = dst; + int nval = 0, ibeg = 0; + while ( ibeg < nstr1 ) + { + int iend = ibeg + 1; + while ( iend < nstr1 && str[iend] && str[iend]!=',' ) iend++; + + int keep = 0; + if ( tok->idx >=0 ) + keep = tok->idx==nval ? 1 : 0; + else if ( nval < tok->nidxs ) + keep = tok->idxs[nval] ? 1 : 0; + else if ( tok->idxs[tok->nidxs-1] < 0 ) + keep = 1; + + if ( keep ) + { + if ( ibeg>0 ) memmove(dst, str+ibeg, iend-ibeg+1); + dst += iend - ibeg + 1; + if ( tok->idx>=0 ) break; + } + if ( !str[iend] ) break; + ibeg = iend + 1; + nval++; + } + if ( dst==str ) { dst[0] = '.'; dst+=2; } + if ( dst - str < nstr1 ) memset(dst-1, 0, nstr1 - (dst - str)); + } + tok->nvalues = tok->str_value.l = nstr; + tok->nstr1 = nstr1; + tok->nsamples = line->n_sample; +} +static void _filters_set_genotype(filter_t *flt, bcf1_t *line, token_t *tok, int type) +{ + bcf_fmt_t *fmt = bcf_get_fmt(flt->hdr, line, "GT"); + if ( !fmt ) + { + tok->nvalues = tok->str_value.l = 0; + return; + } + + int i,j, nsmpl = bcf_hdr_nsamples(flt->hdr), nvals = type==2 ? 3 : 4; + if ( tok->str_value.m <= nvals*nsmpl ) + { + tok->str_value.m = nvals*nsmpl + 1; + tok->str_value.s = (char*)realloc(tok->str_value.s, tok->str_value.m); + } + +#define BRANCH_INT(type_t,vector_end) \ + { \ + for (i=0; in_sample; i++) \ + { \ + type_t *ptr = (type_t*) (fmt->p + i*fmt->size); \ + int is_het = 0, has_ref = 0, missing = 0; \ + for (j=0; jn; j++) \ + { \ + if ( ptr[j]==vector_end ) break; /* smaller ploidy */ \ + if ( bcf_gt_is_missing(ptr[j]) ) { missing=1; break; } /* missing allele */ \ + int ial = ptr[j]; \ + if ( bcf_gt_allele(ial)==0 ) has_ref = 1; \ + if ( j>0 ) \ + { \ + int jal = ptr[j-1]; \ + if ( bcf_gt_allele(ial)!=bcf_gt_allele(jal) ) is_het = 1; \ + } \ + } \ + char *dst = &tok->str_value.s[nvals*i]; \ + if ( !j || missing ) dst[0]='.', dst[1]=0; /* ., missing genotype */ \ + else if ( type==3 ) \ + { \ + if ( j==1 ) dst[0]='h', dst[1]='a', dst[2]='p', dst[3] = 0; /* hap, haploid */ \ + else if ( !is_het ) dst[0]='h', dst[1]='o', dst[2]='m', dst[3] = 0; /* hom */ \ + else dst[0]='h', dst[1]='e', dst[2]='t', dst[3] = 0; /* het */ \ + } \ + else \ + { \ + if ( j==1 ) \ + { \ + if ( has_ref ) dst[0]='r', dst[1]=0; /* r, haploid */ \ + else dst[0]='a', dst[1]=0; /* a, haploid */ \ + } \ + else if ( !is_het ) \ + { \ + if ( has_ref ) dst[0]='r', dst[1]='r', dst[2] = 0; /* rr */ \ + else dst[0]='a', dst[1]='a', dst[2] = 0; /* aa */ \ + } \ + else \ + { \ + if ( has_ref ) dst[0]='r', dst[1]='a', dst[2] = 0; /* ra */ \ + else dst[0]='a', dst[1]='A', dst[2] = 0; /* aA */ \ + } \ + } \ + } \ + } + switch (fmt->type) { + case BCF_BT_INT8: BRANCH_INT(int8_t, bcf_int8_vector_end); break; + case BCF_BT_INT16: BRANCH_INT(int16_t, bcf_int16_vector_end); break; + case BCF_BT_INT32: BRANCH_INT(int32_t, bcf_int32_vector_end); break; + default: error("The GT type is not lineognised: %d at %s:%d\n",fmt->type, bcf_seqname(flt->hdr,line),line->pos+1); break; + } +#undef BRANCH_INT + tok->nsamples = nsmpl; + tok->nvalues = tok->str_value.l = nvals*nsmpl; + tok->str_value.s[tok->str_value.l] = 0; + tok->nstr1 = nvals; +} +static void filters_set_genotype2(filter_t *flt, bcf1_t *line, token_t *tok) { _filters_set_genotype(flt, line, tok, 2); } +static void filters_set_genotype3(filter_t *flt, bcf1_t *line, token_t *tok) { _filters_set_genotype(flt, line, tok, 3); } + +static void filters_set_genotype_string(filter_t *flt, bcf1_t *line, token_t *tok) +{ + bcf_fmt_t *fmt = bcf_get_fmt(flt->hdr, line, "GT"); + if ( !fmt ) + { + tok->nvalues = tok->nsamples = 0; + return; + } + int i, blen = 4, nsmpl = bcf_hdr_nsamples(flt->hdr); + kstring_t str; + +gt_length_too_big: + tok->str_value.l = 0; + for (i=0; istr_value.l; + + bcf_format_gt(fmt, i, &tok->str_value); + kputc_(0, &tok->str_value); + if ( tok->str_value.l - plen > blen ) + { + // too many alternate alleles or ploidy is too large, the genotype does not fit + // three characters ("0/0" vs "10/10"). + blen *= 2; + goto gt_length_too_big; + } + + plen = tok->str_value.l - plen; + while ( plen < blen ) + { + kputc_(0, &tok->str_value); + plen++; + } + } + tok->nsamples = nsmpl; + tok->nvalues = tok->str_value.l; + tok->nstr1 = blen; +} +static void filters_set_ref_string(filter_t *flt, bcf1_t *line, token_t *tok) +{ + tok->str_value.l = 0; + kputs(line->d.allele[0], &tok->str_value); + tok->nvalues = tok->str_value.l; +} +static void filters_set_alt_string(filter_t *flt, bcf1_t *line, token_t *tok) +{ + tok->str_value.l = 0; + if ( tok->idx>=0 ) + { + if ( line->n_allele > tok->idx + 1 ) + kputs(line->d.allele[tok->idx + 1], &tok->str_value); + else + kputc('.', &tok->str_value); + tok->idx = 0; + } + else if ( tok->idx==-2 ) + { + int i, j = 0, end = tok->idxs[tok->nidxs-1] < 0 ? line->n_allele - 1 : tok->nidxs - 1; + if ( end >= line->n_allele - 1 ) end = line->n_allele - 2; + for (i=0; i<=end; i++) + if ( i>=tok->nidxs || tok->idxs[i] ) + { + if ( tok->str_value.l ) kputc(',', &tok->str_value); + kputs(line->d.allele[i+1], &tok->str_value); + } + } + else if ( line->n_allele>1 ) + { + kputs(line->d.allele[1], &tok->str_value); + int i; + for (i=2; in_allele; i++) + { + kputc(',', &tok->str_value); + kputs(line->d.allele[i], &tok->str_value); + } + } + else if ( line->n_allele==1 ) + kputc('.', &tok->str_value); + tok->nvalues = tok->str_value.l; +} +static void filters_set_nmissing(filter_t *flt, bcf1_t *line, token_t *tok) +{ + bcf_unpack(line, BCF_UN_FMT); + if ( !line->n_sample ) + { + tok->nvalues = 1; + tok->values[0] = 0; + return; + } + + int i,igt = bcf_hdr_id2int(flt->hdr, BCF_DT_ID, "GT"); + bcf_fmt_t *fmt = NULL; + for (i=0; in_fmt; i++) + if ( line->d.fmt[i].id==igt ) { fmt = &line->d.fmt[i]; break; } + if ( !fmt ) + { + tok->nvalues = 0; + return; + } + if ( fmt->type!=BCF_BT_INT8 ) error("TODO: the GT fmt_type is not int8\n"); + + int j,nmissing = 0; + for (i=0; in_sample; i++) + { + int8_t *ptr = (int8_t*) (fmt->p + i*fmt->size); + for (j=0; jn; j++) + { + if ( ptr[j]==bcf_int8_vector_end ) break; + if ( ptr[j]==bcf_gt_missing ) { nmissing++; break; } + } + } + tok->nvalues = 1; + tok->values[0] = tok->tag[0]=='N' ? nmissing : (double)nmissing / line->n_sample; +} +static void filters_set_nalt(filter_t *flt, bcf1_t *line, token_t *tok) +{ + tok->nvalues = 1; + tok->values[0] = line->n_allele - 1; +} +static void filters_set_ac(filter_t *flt, bcf1_t *line, token_t *tok) +{ + hts_expand(int32_t, line->n_allele, flt->mtmpi, flt->tmpi); + if ( !bcf_calc_ac(flt->hdr, line, flt->tmpi, BCF_UN_INFO|BCF_UN_FMT) ) + { + tok->nvalues = 0; + return; + } + int i, an = flt->tmpi[0]; + for (i=1; in_allele; i++) an += flt->tmpi[i]; + if ( !an ) + { + tok->nvalues = 0; + return; + } + flt->tmpi[0] = an; // for filters_set_[mac|af|maf] + if ( tok->idx>=0 ) + { + tok->nvalues = 1; + tok->values[0] = tok->idx+1n_allele ? flt->tmpi[tok->idx+1] : 0; + } + else if ( line->n_allele==1 ) // no ALT + { + tok->nvalues = 1; + tok->values[0] = 0; + } + else + { + hts_expand(double,line->n_allele,tok->mvalues,tok->values); + for (i=1; in_allele; i++) + tok->values[i-1] = flt->tmpi[i]; + tok->nvalues = line->n_allele - 1; + } +} +static void filters_set_an(filter_t *flt, bcf1_t *line, token_t *tok) +{ + filters_set_ac(flt,line,tok); + tok->values[0] = tok->nvalues ? flt->tmpi[0] : 0; + tok->nvalues = 1; +} +static void filters_set_mac(filter_t *flt, bcf1_t *line, token_t *tok) +{ + filters_set_ac(flt,line,tok); + if ( !tok->nvalues ) return; + int i, an = flt->tmpi[0]; + for (i=0; invalues; i++) + if ( tok->values[i] > an*0.5 ) tok->values[i] = an - tok->values[i]; +} +static void filters_set_af(filter_t *flt, bcf1_t *line, token_t *tok) +{ + filters_set_ac(flt,line,tok); + if ( !tok->nvalues ) return; + int i, an = flt->tmpi[0]; + for (i=0; invalues; i++) + tok->values[i] /= (double)an; +} +static void filters_set_maf(filter_t *flt, bcf1_t *line, token_t *tok) +{ + filters_set_ac(flt,line,tok); + if ( !tok->nvalues ) return; + int i, an = flt->tmpi[0]; + for (i=0; invalues; i++) + { + tok->values[i] /= (double)an; + if ( tok->values[i] > 0.5 ) tok->values[i] = 1 - tok->values[i]; + } +} + +static void set_max(filter_t *flt, bcf1_t *line, token_t *tok) +{ + double val = -HUGE_VAL; + int i; + for (i=0; invalues; i++) + { + if ( !bcf_double_is_missing(tok->values[i]) && val < tok->values[i] ) val = tok->values[i]; + } + tok->values[0] = val; + tok->nvalues = 1; + tok->nsamples = 0; +} +static void set_min(filter_t *flt, bcf1_t *line, token_t *tok) +{ + double val = HUGE_VAL; + int i; + for (i=0; invalues; i++) + if ( !bcf_double_is_missing(tok->values[i]) && val > tok->values[i] ) val = tok->values[i]; + tok->values[0] = val; + tok->nvalues = 1; + tok->nsamples = 0; +} +static void set_avg(filter_t *flt, bcf1_t *line, token_t *tok) +{ + double val = 0; + int i, n = 0; + for (i=0; invalues; i++) + if ( !bcf_double_is_missing(tok->values[i]) ) { val += tok->values[i]; n++; } + tok->values[0] = n ? val / n : 0; + tok->nvalues = 1; + tok->nsamples = 0; +} +static void set_sum(filter_t *flt, bcf1_t *line, token_t *tok) +{ + double val = 0; + int i, n = 0; + for (i=0; invalues; i++) + if ( !bcf_double_is_missing(tok->values[i]) ) { val += tok->values[i]; n++; } + tok->values[0] = val; + tok->nvalues = 1; + tok->nsamples = 0; +} +static void set_abs(filter_t *flt, bcf1_t *line, token_t *tok) +{ + if ( tok->is_str ) error("ABS() can be applied only on numeric values\n"); + int i; + for (i=0; invalues; i++) + tok->values[i] = fabs(tok->values[i]); +} +static void set_strlen(filter_t *flt, bcf1_t *line, token_t *tok) +{ + tok->is_str = 0; + if ( !tok->str_value.l ) return; + if ( tok->idx==-2 ) + { + int i = 0; + char *ss = tok->str_value.s; + while ( *ss ) + { + char *se = ss; + while ( *se && *se!=',' ) se++; + hts_expand(double, i+1, tok->mvalues, tok->values); + if ( !*se ) tok->values[i] = strlen(ss); + else + { + *se = 0; + tok->values[i] = strlen(ss); + *se = ','; + } + ss = *se ? se + 1 : se; + i++; + } + tok->nvalues = i; + } + else + { + tok->values[0] = strlen(tok->str_value.s); + tok->nvalues = 1; + } + tok->str_value.l = 0; +} +#define VECTOR_ARITHMETICS(atok,btok,AOP) \ +{ \ + int i, has_values = 0; \ + if ( !(atok)->nvalues || !(btok)->nvalues ) /* missing values */ \ + { \ + (atok)->nvalues = 0; (atok)->nsamples = 0; \ + } \ + else \ + { \ + if ( ((atok)->nsamples && (btok)->nsamples) || (!(atok)->nsamples && !(btok)->nsamples)) \ + { \ + for (i=0; i<(atok)->nvalues; i++) \ + { \ + if ( bcf_double_is_missing((atok)->values[i]) ) continue; \ + if ( bcf_double_is_missing((btok)->values[i]) ) { bcf_double_set_missing((atok)->values[i]); continue; } \ + has_values = 1; \ + (atok)->values[i] = (atok)->values[i] AOP (btok)->values[i]; \ + } \ + } \ + else if ( (btok)->nsamples ) \ + { \ + hts_expand(double,(btok)->nvalues,(atok)->mvalues,(atok)->values); \ + for (i=0; i<(btok)->nvalues; i++) \ + { \ + if ( bcf_double_is_missing((atok)->values[0]) || bcf_double_is_missing((btok)->values[i]) ) \ + { \ + bcf_double_set_missing((atok)->values[i]); \ + continue; \ + } \ + has_values = 1; \ + (atok)->values[i] = (atok)->values[0] AOP (btok)->values[i]; \ + } \ + (atok)->nvalues = (btok)->nvalues; \ + (atok)->nsamples = (btok)->nsamples; \ + } \ + else if ( (atok)->nsamples ) \ + { \ + for (i=0; i<(atok)->nvalues; i++) \ + { \ + if ( bcf_double_is_missing((atok)->values[i]) || bcf_double_is_missing((btok)->values[0]) ) \ + { \ + bcf_double_set_missing((atok)->values[i]); \ + continue; \ + } \ + has_values = 1; \ + (atok)->values[i] = (atok)->values[i] AOP (btok)->values[0]; \ + } \ + } \ + } \ + if ( !has_values ) { (atok)->nvalues = 0; (atok)->nsamples = 0; } \ +} + +static int vector_logic_and(token_t *atok, token_t *btok, int and_type) +{ + // We are comparing either two scalars (result of INFO tag vs a threshold), two vectors (two FORMAT fields), + // or a vector and a scalar (FORMAT field vs threshold) + int i, pass_site = 0; + if ( !atok->nvalues || !btok->nvalues ) + { + atok->nvalues = atok->nsamples = 0; + return 0; + } + if ( !atok->nsamples && !btok->nsamples ) return atok->pass_site && btok->pass_site; + if ( atok->nsamples && btok->nsamples ) + { + if ( and_type==TOK_AND ) + { + // perform AND within a sample + for (i=0; insamples; i++) + { + atok->pass_samples[i] = atok->pass_samples[i] && btok->pass_samples[i]; + if ( !pass_site && atok->pass_samples[i] ) pass_site = 1; + } + } + else + { + // perform AND across samples + int pass_a = 0, pass_b = 0; + for (i=0; insamples; i++) + { + if ( atok->pass_samples[i] ) pass_a = 1; + atok->pass_samples[i] = atok->pass_samples[i] && btok->pass_samples[i]; + } + for (i=0; insamples; i++) + { + if ( btok->pass_samples[i] ) { pass_b = 1; break; } + } + pass_site = pass_a && pass_b; + } + return pass_site; + } + if ( btok->nsamples ) + { + for (i=0; insamples; i++) + { + atok->pass_samples[i] = atok->pass_site && btok->pass_samples[i]; + if ( !pass_site && atok->pass_samples[i] ) pass_site = 1; + } + atok->nsamples = btok->nsamples; + return pass_site; + } + /* atok->nsamples!=0 */ + for (i=0; insamples; i++) + { + atok->pass_samples[i] = atok->pass_samples[i] && btok->pass_site; + if ( !pass_site && atok->pass_samples[i] ) pass_site = 1; + } + return pass_site; +} +static int vector_logic_or(token_t *atok, token_t *btok, int or_type) +{ + int i, pass_site = 0; + if ( !atok->nvalues && !btok->nvalues ) // missing sites in both + { + atok->nvalues = atok->nsamples = 0; + return 0; + } + if ( !atok->nvalues ) // missing value in a + { + for (i=0; insamples; i++) + atok->pass_samples[i] = btok->pass_samples[i]; + atok->nsamples = btok->nsamples; + atok->nvalues = 1; + return btok->pass_site; + } + if ( !btok->nvalues ) // missing value in b + { + btok->nvalues = 1; + return atok->pass_site; + } + + if ( !atok->nsamples && !btok->nsamples ) return atok->pass_site || btok->pass_site; + if ( !atok->nsamples ) + { + if ( or_type==TOK_OR ) + { + for (i=0; insamples; i++) + { + atok->pass_samples[i] = btok->pass_samples[i]; + if ( atok->pass_site || atok->pass_samples[i] ) pass_site = 1; + } + } + else + { + for (i=0; insamples; i++) + { + atok->pass_samples[i] = atok->pass_site || btok->pass_samples[i]; + if ( atok->pass_samples[i] ) pass_site = 1; + } + } + atok->nsamples = btok->nsamples; + return pass_site; + } + if ( !btok->nsamples ) // vector vs site + { + if ( or_type==TOK_OR ) + { + for (i=0; insamples; i++) + if ( btok->pass_site || atok->pass_samples[i] ) pass_site = 1; + } + else + { + for (i=0; insamples; i++) + { + atok->pass_samples[i] = atok->pass_samples[i] || btok->pass_site; + if ( atok->pass_samples[i] ) pass_site = 1; + } + } + return pass_site; + } + for (i=0; insamples; i++) + { + atok->pass_samples[i] = atok->pass_samples[i] || btok->pass_samples[i]; + if ( !pass_site && atok->pass_samples[i] ) pass_site = 1; + } + return pass_site; +} + +#define CMP_MISSING(atok,btok,CMP_OP,ret) \ +{ \ + if ( (atok)->nsamples || (btok)->nsamples ) error("todo: Querying of missing values in FORMAT\n"); \ + token_t *tok = (atok)->is_missing ? (btok) : (atok); \ + (ret) = ( tok->nvalues CMP_OP 1 ) ? 0 : 1; \ + tok->nvalues = 1; \ +} + +#define CMP_VECTORS(atok,btok,CMP_OP,ret) \ +{ \ + int i, j, has_values = 0, pass_site = 0; \ + if ( !(atok)->nvalues || !(btok)->nvalues ) { (atok)->nvalues = 0; (atok)->nsamples = 0; (ret) = 0; } \ + else \ + { \ + if ( (atok)->idx<=-2 || (btok)->idx<=-2 ) \ + { \ + /* any field can match: [*] */ \ + for (i=0; i<(atok)->nvalues; i++) \ + { \ + for (j=0; j<(btok)->nvalues; j++) \ + if ( (atok)->values[i] CMP_OP (btok)->values[j] ) { pass_site = 1; i = (atok)->nvalues; break; } \ + } \ + } \ + else if ( (atok)->nsamples && (btok)->nsamples ) \ + { \ + for (i=0; i<(atok)->nsamples; i++) \ + { \ + has_values = 1; \ + if ( (atok)->values[i] CMP_OP (btok)->values[i] ) { (atok)->pass_samples[i] = 1; pass_site = 1; } \ + else (atok)->pass_samples[i] = 0; \ + } \ + if ( !has_values ) (atok)->nvalues = 0; \ + } \ + else if ( (atok)->nsamples ) \ + { \ + for (i=0; i<(atok)->nsamples; i++) \ + { \ + /*if ( bcf_double_is_missing((atok)->values[i]) ) { (atok)->pass_samples[i] = 0; continue; }*/ \ + has_values = 1; \ + if ( (atok)->values[i] CMP_OP (btok)->values[0] ) { (atok)->pass_samples[i] = 1; pass_site = 1; } \ + else (atok)->pass_samples[i] = 0; \ + } \ + if ( !has_values ) (atok)->nvalues = 0; \ + } \ + else if ( (btok)->nsamples ) \ + { \ + for (i=0; i<(btok)->nsamples; i++) \ + { \ + if ( bcf_double_is_missing((btok)->values[i]) ) { (atok)->pass_samples[i] = 0; continue; } \ + has_values = 1; \ + if ( (atok)->values[0] CMP_OP (btok)->values[i] ) { (atok)->pass_samples[i] = 1; pass_site = 1; } \ + else (atok)->pass_samples[i] = 0; \ + } \ + (atok)->nvalues = (btok)->nvalues; \ + (atok)->nsamples = (btok)->nsamples; \ + if ( !has_values ) (atok)->nvalues = 0; \ + } \ + else \ + { \ + if ( (atok)->values[0] CMP_OP (btok)->values[0] ) { pass_site = 1; } \ + } \ + /*fprintf(stderr,"pass=%d\n", pass_site);*/ \ + (ret) = pass_site; \ + } \ +} +static int cmp_vector_strings(token_t *atok, token_t *btok, int logic) // logic: TOK_EQ or TOK_NE +{ + if ( !atok->str_value.l ) { return 0; } + if ( !btok->str_value.l ) { atok->str_value.l = 0; return 0; } + int i, pass_site = 0; + if ( atok->nsamples && atok->nsamples==btok->nsamples ) + { + for (i=0; insamples; i++) + { + char *astr = atok->str_value.s + i*atok->nstr1; + char *bstr = btok->str_value.s + i*btok->nstr1; + char *aend = astr + atok->str_value.l, *a = astr; + while ( astr_value.l, *b = bstr; + while ( bpass_samples[i] = 0; + else atok->pass_samples[i] = strncmp(astr,bstr,a-astr)==0 ? 1 : 0; + if ( logic!=TOK_EQ ) + atok->pass_samples[i] = atok->pass_samples[i] ? 0 : 1; + pass_site |= atok->pass_samples[i]; + } + if ( !atok->nsamples ) atok->nsamples = btok->nsamples; + } + else if ( !atok->nsamples && !btok->nsamples ) + { + if ( atok->idx==-2 || btok->idx==-2 ) + { + // any field can match: [*] + if ( atok->idx==-2 && btok->idx==-2 ) + error("fixme: Expected at least one scalar value [%s %s %s]\n", atok->tag ? atok->tag : btok->tag, atok->str_value,btok->str_value); + token_t *xtok, *ytok; // xtok is scalar, ytok array + if ( btok->idx==-2 ) { xtok = atok; ytok = btok; } + else { xtok = btok; ytok = atok; } + char *xstr = xtok->str_value.s, *xend = xstr + xtok->str_value.l; + char *ystr = ytok->str_value.s, *yend = ystr + ytok->str_value.l, *y = ystr; + while ( y<=yend ) + { + if ( y==yend || *y==',' ) + { + if ( y-ystr==xend-xstr && !strncmp(xstr,ystr,xend-xstr) ) + { + pass_site = 1; + break; + } + ystr = y+1; + } + y++; + } + } + else + pass_site = strcmp(atok->str_value.s,btok->str_value.s) ? 0 : 1; + if ( logic!=TOK_EQ ) pass_site = pass_site ? 0 : 1; + } + else + { + token_t *xtok, *ytok; + if ( !atok->nsamples ) { xtok = atok; ytok = btok; } + else { xtok = btok; ytok = atok; } + char *xstr = xtok->str_value.s; + char *xend = xstr + xtok->str_value.l, *x = xstr; + while ( xnsamples; i++) + { + char *ystr = ytok->str_value.s + i*ytok->nstr1; + char *ybeg = ystr, *yend = ystr + ytok->nstr1; + int pass = 0; + while ( ybeg < yend ) + { + char *y = ybeg; + while ( ypass_samples[i] = pass; + pass_site |= pass; + } + if ( !atok->nsamples ) + atok->nvalues = atok->nsamples = btok->nsamples; // is it a bug? not sure if atok->nvalues should be set + } + return pass_site; +} +static int regex_vector_strings(token_t *atok, token_t *btok, int negate) +{ + int i, pass_site = 0; + if ( atok->nsamples ) + { + for (i=0; insamples; i++) + { + char *ptr = atok->str_value.s + i*atok->nstr1; + atok->pass_samples[i] = regexec(btok->regex, ptr, 0,NULL,0) ? 0 : 1; + if ( negate ) atok->pass_samples[i] = atok->pass_samples[i] ? 0 : 1; + pass_site |= atok->pass_samples[i]; + } + return pass_site; + } + pass_site = regexec(btok->regex, atok->str_value.s, 0,NULL,0) ? 0 : 1; + if ( negate ) pass_site = pass_site ? 0 : 1; + return pass_site; +} + +static void parse_tag_idx(char *tag, char *tag_idx, token_t *tok) // tag_idx points just after "TAG[" +{ + // TAG[*] .. any field + if ( !strncmp("*]", tag_idx, 3) ) + { + tok->idxs = (int*) malloc(sizeof(int)); + tok->idxs[0] = -1; + tok->nidxs = 1; + tok->idx = -2; + return; + } + + // TAG[integer] .. one field + char *end, *beg = tag_idx; + tok->idx = strtol(tag_idx, &end, 10); + if ( tok->idx >= 0 && *end==']' ) return; + + + // TAG[0,1] or TAG[0-2] or [1-] etc + int i, ibeg = -1; + while ( *beg && *beg!=']' ) + { + int idx = strtol(beg, &end, 10); + if ( end[0]==',' ) beg = end + 1; + else if ( end[0]==']' ) beg = end; + else if ( end[0]=='-' ) { beg = end + 1; ibeg = idx; continue; } + else error("Could not parse the index: %s[%s\n", tag, tag_idx+1); + if ( idx >= tok->nidxs ) + { + tok->idxs = (int*) realloc(tok->idxs, sizeof(int)*(idx+1)); + memset(tok->idxs + tok->nidxs, 0, sizeof(int)*(idx - tok->nidxs + 1)); + tok->nidxs = idx + 1; + } + if ( ibeg>=0 ) + { + for (i=ibeg; i<=idx; i++) tok->idxs[i] = 1; + ibeg = -1; + } + tok->idxs[idx] = 1; + } + if ( ibeg >=0 ) + { + if ( ibeg >= tok->nidxs ) + { + tok->idxs = (int*) realloc(tok->idxs, sizeof(int)*(ibeg+1)); + memset(tok->idxs + tok->nidxs, 0, sizeof(int)*(ibeg - tok->nidxs + 1)); + tok->nidxs = ibeg + 1; + } + tok->idxs[ibeg] = -1; + } + tok->idx = -2; +} +static int filters_init1(filter_t *filter, char *str, int len, token_t *tok) +{ + tok->tok_type = TOK_VAL; + tok->hdr_id = -1; + tok->pass_site = -1; + tok->idx = -1; + + // is this a string constant? + if ( str[0]=='"' || str[0]=='\'' ) + { + int quote = str[0]; + if ( str[len-1] != quote ) error("TODO: [%s]\n", filter->str); + tok->key = (char*) calloc(len-1,sizeof(char)); + hts_expand(double,1,tok->mvalues,tok->values); + tok->values[0] = len-2; + memcpy(tok->key,str+1,len-2); + tok->key[len-2] = 0; + tok->is_str = 1; + tok->nvalues = len-2; + if ( !strcmp(".",tok->key) ) tok->is_missing = 1; + return 0; + } + + // is it a file? + if ( str[0]=='@' ) + { + tok->tag = (char*) calloc(len+1,sizeof(char)); + memcpy(tok->tag,str,len); + tok->tag[len] = 0; + wordexp_t wexp; + wordexp(tok->tag+1, &wexp, 0); + if ( !wexp.we_wordc ) error("No such file: %s\n", tok->tag+1); + int i, n; + char **list = hts_readlist(wexp.we_wordv[0], 1, &n); + if ( !list ) error("Could not read: %s\n", wexp.we_wordv[0]); + wordfree(&wexp); + tok->hash = khash_str2int_init(); + for (i=0; ihash,list[i]) ) + khash_str2int_inc(tok->hash,list[i]); + else + free(list[i]); + } + free(list); + return 0; + } + + int is_fmt = -1; + if ( !strncasecmp(str,"FMT/",4) ) { str += 4; len -= 4; is_fmt = 1; } + else if ( !strncasecmp(str,"FORMAT/",7) ) { str += 7; len -= 7; is_fmt = 1; } + else + { + if ( !strncasecmp(str,"INFO/",5) ) { is_fmt = 0; str += 5; len -= 5; } + else if ( !strncasecmp(str,"QUAL",len) || !strncmp(str,"%QUAL",len) /* for backward compatibility */ ) + { + tok->setter = filters_set_qual; + tok->tag = strdup("QUAL"); + return 0; + } + else if ( !strncasecmp(str,"TYPE",len) || !strncmp(str,"%TYPE",len) /* for backward compatibility */ ) + { + tok->setter = filters_set_type; + tok->tag = strdup("TYPE"); + return 0; + } + else if ( !strncasecmp(str,"FILTER",len) || !strncmp(str,"%FILTER",len) /* for backward compatibility */ ) + { + tok->comparator = filters_cmp_filter; + tok->tag = strdup("FILTER"); + filter->max_unpack |= BCF_UN_FLT; + return 0; + } + else if ( !strncasecmp(str,"ID",len) || !strncasecmp(str,"%ID",len) /* for backward compatibility */ ) + { + tok->comparator = filters_cmp_id; + tok->tag = strdup("ID"); + return 0; + } + else if ( !strncasecmp(str,"POS",len) ) + { + tok->setter = &filters_set_pos; + tok->tag = strdup("POS"); + return 0; + } + else if ( !strncasecmp(str,"REF",len) ) + { + tok->setter = &filters_set_ref_string; + tok->is_str = 1; + tok->tag = strdup("REF"); + return 0; + } + else if ( !strncasecmp(str,"ALT",len) ) + { + tok->setter = &filters_set_alt_string; + tok->is_str = 1; + tok->tag = strdup("ALT"); + return 0; + } + else if ( !strncasecmp(str,"N_ALT",len) ) + { + tok->setter = &filters_set_nalt; + tok->tag = strdup("N_ALT"); + return 0; + } + else if ( !strncasecmp(str,"N_SAMPLES",len) ) + { + tok->tok_type = TOK_VAL; + tok->threshold = bcf_hdr_nsamples(filter->hdr); + return 0; + } + else if ( !strncasecmp(str,"N_MISSING",len) ) + { + tok->setter = &filters_set_nmissing; + tok->tag = strdup("N_MISSING"); + return 0; + } + else if ( !strncasecmp(str,"F_MISSING",len) ) + { + tok->setter = &filters_set_nmissing; + tok->tag = strdup("F_MISSING"); + return 0; + } + } + + // does it have array subscript? + int is_array = 0; + kstring_t tmp = {0,0,0}; + kputsn(str, len, &tmp); + if ( tmp.s[tmp.l-1] == ']' ) + { + int i; + for (i=0; ihdr_id = bcf_hdr_id2int(filter->hdr,BCF_DT_ID,tmp.s); + if ( is_fmt==-1 ) + { + if ( tok->hdr_id >=0 ) + { + if ( bcf_hdr_idinfo_exists(filter->hdr,BCF_HL_INFO,tok->hdr_id) ) is_fmt = 0; + else if ( bcf_hdr_idinfo_exists(filter->hdr,BCF_HL_FMT,tok->hdr_id) ) is_fmt = 1; + } + if ( is_fmt==-1 ) is_fmt = 0; + } + tok->type = is_fmt ? BCF_HL_FMT : BCF_HL_INFO; + if ( is_fmt ) filter->max_unpack |= BCF_UN_FMT; + if ( tok->hdr_id>=0 ) + { + if ( is_fmt && !strcmp("GT",tmp.s) ) + { + tok->setter = &filters_set_genotype_string; tok->is_str = 1; + } + else if ( is_fmt ) + { + if ( !bcf_hdr_idinfo_exists(filter->hdr,BCF_HL_FMT,tok->hdr_id) ) + error("No such FORMAT field: %s\n", tmp.s); + if ( bcf_hdr_id2number(filter->hdr,BCF_HL_FMT,tok->hdr_id)!=1 && !is_array ) + error("Error: FORMAT vectors must be subscripted, e.g. %s[0] or %s[*]\n", tmp.s, tmp.s); + switch ( bcf_hdr_id2type(filter->hdr,BCF_HL_FMT,tok->hdr_id) ) + { + case BCF_HT_INT: tok->setter = &filters_set_format_int; break; + case BCF_HT_REAL: tok->setter = &filters_set_format_float; break; + case BCF_HT_STR: tok->setter = &filters_set_format_string; tok->is_str = 1; break; + default: error("[%s:%d %s] FIXME\n", __FILE__,__LINE__,__FUNCTION__); + } + } + else if ( !bcf_hdr_idinfo_exists(filter->hdr,BCF_HL_INFO,tok->hdr_id) ) + error("No such INFO field: %s\n", tmp.s); + else + { + if ( bcf_hdr_id2type(filter->hdr,BCF_HL_INFO,tok->hdr_id) == BCF_HT_FLAG ) + tok->setter = filters_set_info_flag; + else + { + if ( bcf_hdr_id2type(filter->hdr,BCF_HL_INFO,tok->hdr_id) == BCF_HT_STR ) tok->is_str = 1; + if ( bcf_hdr_id2number(filter->hdr,BCF_HL_INFO,tok->hdr_id)==1 ) + tok->setter = filters_set_info; + else + { + switch ( bcf_hdr_id2type(filter->hdr,BCF_HL_INFO,tok->hdr_id) ) + { + case BCF_HT_INT: tok->setter = &filters_set_info_int; break; + case BCF_HT_REAL: tok->setter = &filters_set_info_float; break; + case BCF_HT_STR: tok->setter = &filters_set_info_string; tok->is_str = 1; break; + default: error("[%s:%d %s] FIXME\n", __FILE__,__LINE__,__FUNCTION__); + } + if (!is_array) + { + tok->idx = -2; + tok->idxs = (int*) malloc(sizeof(int)); + tok->idxs[0] = -1; + tok->nidxs = 1; + } + } + } + filter->max_unpack |= BCF_UN_INFO; + } + tok->tag = strdup(tmp.s); + if ( tmp.s ) free(tmp.s); + return 0; + } + else if ( !strcasecmp(tmp.s,"ALT") ) + { + tok->setter = &filters_set_alt_string; + tok->is_str = 1; + tok->tag = strdup(tmp.s); + free(tmp.s); + return 0; + } + else if ( !strcasecmp(tmp.s,"AN") ) + { + tok->setter = &filters_set_an; + tok->tag = strdup("AN"); + free(tmp.s); + return 0; + } + else if ( !strcasecmp(tmp.s,"AC") ) + { + tok->setter = &filters_set_ac; + tok->tag = strdup("AC"); + free(tmp.s); + return 0; + } + else if ( !strcasecmp(tmp.s,"MAC") ) + { + tok->setter = &filters_set_mac; + tok->tag = strdup("MAC"); + free(tmp.s); + return 0; + } + else if ( !strcasecmp(tmp.s,"AF") ) + { + tok->setter = &filters_set_af; + tok->tag = strdup("AF"); + free(tmp.s); + return 0; + } + else if ( !strcasecmp(tmp.s,"MAF") ) + { + tok->setter = &filters_set_maf; + tok->tag = strdup("MAF"); + free(tmp.s); + return 0; + } + + // is it a value? Here we parse as integer/float separately and use strtof + // rather than strtod, because the more accurate double representation + // would invalidate floating point comparisons like QUAL=59.2, obtained via + // htslib/vcf parser + char *end; + tok->threshold = strtol(tmp.s, &end, 10); // integer? + if ( end - tmp.s != strlen(tmp.s) ) + { + errno = 0; + tok->threshold = strtof(tmp.s, &end); // float? + if ( errno!=0 || end!=tmp.s+len ) error("[%s:%d %s] Error: the tag \"INFO/%s\" is not defined in the VCF header\n", __FILE__,__LINE__,__FUNCTION__,tmp.s); + } + + if ( tmp.s ) free(tmp.s); + return 0; +} + + +static void filter_debug_print(token_t *toks, token_t **tok_ptrs, int ntoks) +{ + int i; + for (i=0; itok_type==TOK_VAL ) + { + if ( tok->key ) + fprintf(stderr,"%s", tok->key); + else if ( tok->tag ) + fprintf(stderr,"%s", tok->tag); + else + fprintf(stderr,"%e", tok->threshold); + } + else + fprintf(stderr,"%c", TOKEN_STRING[tok->tok_type]); + if ( tok->setter ) fprintf(stderr,"\t[setter %p]", tok->setter); + fprintf(stderr,"\n"); + } +} + +static void str_to_lower(char *str) +{ + while ( *str ) { *str = tolower(*str); str++; } +} + + +// Parse filter expression and convert to reverse polish notation. Dijkstra's shunting-yard algorithm +filter_t *filter_init(bcf_hdr_t *hdr, const char *str) +{ + filter_t *filter = (filter_t *) calloc(1,sizeof(filter_t)); + filter->str = strdup(str); + filter->hdr = hdr; + filter->max_unpack |= BCF_UN_STR; + + int nops = 0, mops = 0, *ops = NULL; // operators stack + int nout = 0, mout = 0; // filter tokens, RPN + token_t *out = NULL; + char *tmp = filter->str; + int last_op = -1; + while ( *tmp ) + { + int len, ret; + ret = filters_next_token(&tmp, &len); + if ( ret==-1 ) error("Missing quotes in: %s\n", str); + + // fprintf(stderr,"token=[%c] .. [%s] %d\n", TOKEN_STRING[ret], tmp, len); + // int i; for (i=0; i0 && ops[nops-1]!=TOK_LFT ) + { + nout++; + hts_expand0(token_t, nout, mout, out); + out[nout-1].tok_type = ops[nops-1]; + nops--; + } + if ( nops<=0 ) error("Could not parse: %s\n", str); + nops--; + } + else if ( ret!=TOK_VAL ) // one of the operators + { + // detect unary minus: replace -value with -1*(value) + if ( ret==TOK_SUB && last_op!=TOK_VAL && last_op!=TOK_RGT ) + { + nout++; + hts_expand0(token_t, nout, mout, out); + token_t *tok = &out[nout-1]; + tok->tok_type = TOK_VAL; + tok->hdr_id = -1; + tok->pass_site = -1; + tok->threshold = -1.0; + ret = TOK_MULT; + } + else + { + while ( nops>0 && op_prec[ret] < op_prec[ops[nops-1]] ) + { + nout++; + hts_expand0(token_t, nout, mout, out); + out[nout-1].tok_type = ops[nops-1]; + nops--; + } + } + nops++; + hts_expand(int, nops, mops, ops); + ops[nops-1] = ret; + } + else if ( !len ) + { + if ( *tmp && !isspace(*tmp) ) error("Could not parse the expression: [%s]\n", str); + break; // all tokens read + } + else // annotation name or filtering value + { + nout++; + hts_expand0(token_t, nout, mout, out); + filters_init1(filter, tmp, len, &out[nout-1]); + tmp += len; + } + last_op = ret; + } + while ( nops>0 ) + { + if ( ops[nops-1]==TOK_LFT || ops[nops-1]==TOK_RGT ) error("Could not parse the expression: [%s]\n", filter->str); + nout++; + hts_expand0(token_t, nout, mout, out); + out[nout-1].tok_type = ops[nops-1]; + nops--; + } + + // In the special cases of TYPE and FILTER the BCF header IDs are yet unknown. Walk through the + // list of operators and convert the strings (e.g. "PASS") to BCF ids. The string value token must be + // just before or after the FILTER token and they must be followed with a comparison operator. + // At this point we also initialize regex expressions which, in RPN, must preceed the LIKE/NLIKE operator. + // Additionally, treat "." as missing value rather than a string in numeric equalities. + // This code is fragile: improve me. + int i; + for (i=0; i0 && out[j].is_str && out[j].key && !strcmp(".",out[j].key) ) + { + int type = bcf_hdr_id2type(filter->hdr,out[k].type,out[k].hdr_id); + if ( type==BCF_HT_INT ) { out[j].is_str = 0; out[j].is_missing = 1; bcf_double_set_missing(out[j].values[0]); } + if ( type==BCF_HT_REAL ) { out[j].is_str = 0; out[j].is_missing = 1; bcf_double_set_missing(out[j].values[0]); } + } + } + if ( out[i].tok_type==TOK_LIKE || out[i].tok_type==TOK_NLIKE ) + { + int j = i-1; + if ( !out[j].key ) + error("Could not parse the expression, wrong value for regex operator: %s\n", filter->str); + out[j].regex = (regex_t *) malloc(sizeof(regex_t)); + int cflags = REG_NOSUB; + int len = strlen(out[j].key); + if ( len>2 && out[j].key[len-1]=='i' && out[j].key[len-2]=='/' && out[j].key[len-3]!='\\' ) + { + out[j].key[len-2] = 0; + cflags |= REG_ICASE; + } + if ( regcomp(out[j].regex, out[j].key, cflags) ) + error("Could not compile the regex expression \"%s\": %s\n", out[j].key,filter->str); + } + if ( out[i].tok_type!=TOK_VAL ) continue; + if ( !out[i].tag ) continue; + if ( !strcmp(out[i].tag,"TYPE") ) + { + if ( i+1==nout ) error("Could not parse the expression: %s\n", filter->str); + int itok, ival; + if ( out[i+1].tok_type==TOK_EQ || out[i+1].tok_type==TOK_NE ) ival = i - 1, itok = i + 1; + else if ( out[i+1].tok_type==TOK_LIKE || out[i+1].tok_type==TOK_NLIKE ) ival = i - 1, itok = i + 1; + else if ( out[i+2].tok_type==TOK_EQ || out[i+2].tok_type==TOK_NE ) itok = i + 2, ival = i + 1; + else if ( out[i+2].tok_type==TOK_LIKE || out[i+2].tok_type==TOK_NLIKE ) itok = i + 2, ival = i + 1; + else error("[%s:%d %s] Could not parse the expression: %s\n", __FILE__,__LINE__,__FUNCTION__, filter->str); + if ( !strcasecmp(out[ival].key,"snp") || !strcasecmp(out[ival].key,"snps") ) { out[ival].threshold = VCF_SNP<<1; out[ival].is_str = 0; } + else if ( !strcasecmp(out[ival].key,"indel") || !strcasecmp(out[ival].key,"indels") ) { out[ival].threshold = VCF_INDEL<<1; out[ival].is_str = 0; } + else if ( !strcasecmp(out[ival].key,"mnp") || !strcasecmp(out[ival].key,"mnps") ) { out[ival].threshold = VCF_MNP<<1; out[ival].is_str = 0; } + else if ( !strcasecmp(out[ival].key,"other") ) { out[ival].threshold = VCF_OTHER<<1; out[ival].is_str = 0; } + else if ( !strcasecmp(out[ival].key,"bnd") ) { out[ival].threshold = VCF_BND<<1; out[ival].is_str = 0; } + else if ( !strcasecmp(out[ival].key,"ref") ) { out[ival].threshold = 1; out[ival].is_str = 0; } + else error("The type \"%s\" not recognised: %s\n", out[ival].key, filter->str); + if ( out[itok].tok_type==TOK_LIKE || out[itok].tok_type==TOK_NLIKE ) out[itok].comparator = filters_cmp_bit_and; + out[ival].tag = out[ival].key; out[ival].key = NULL; + i = itok; + continue; + } + if ( !strcmp(out[i].tag,"GT") ) + { + if ( i+1==nout ) error("Could not parse the expression: %s\n", filter->str); + int ival; + if ( out[i+1].tok_type==TOK_EQ || out[i+1].tok_type==TOK_NE ) ival = i - 1; + else if ( out[i+1].tok_type==TOK_LIKE || out[i+1].tok_type==TOK_NLIKE ) ival = i - 1; + else if ( out[i+2].tok_type==TOK_EQ || out[i+2].tok_type==TOK_NE ) ival = i + 1; + else if ( out[i+2].tok_type==TOK_LIKE || out[i+2].tok_type==TOK_NLIKE ) ival = i + 1; + else error("[%s:%d %s] Could not parse the expression: %s\n", __FILE__,__LINE__,__FUNCTION__, filter->str); + + // assign correct setters and unify expressions, eg ar->ra, HOM->hom, etc + if ( !strcasecmp(out[ival].key,"hom") ) { out[i].setter = filters_set_genotype3; str_to_lower(out[ival].key); } + else if ( !strcasecmp(out[ival].key,"het") ) { out[i].setter = filters_set_genotype3; str_to_lower(out[ival].key); } + else if ( !strcasecmp(out[ival].key,"hap") ) { out[i].setter = filters_set_genotype3; str_to_lower(out[ival].key); } + else if ( !strcasecmp(out[ival].key,"rr") ) { out[i].setter = filters_set_genotype2; str_to_lower(out[ival].key); } + else if ( !strcasecmp(out[ival].key,"ra") || !strcasecmp(out[ival].key,"ar") ) { out[i].setter = filters_set_genotype2; out[ival].key[0]='r'; out[ival].key[1]='a'; } // ra + else if ( !strcmp(out[ival].key,"aA") || !strcmp(out[ival].key,"Aa") ) { out[i].setter = filters_set_genotype2; out[ival].key[0]='a'; out[ival].key[1]='A'; } // aA + else if ( !strcasecmp(out[ival].key,"aa") ) { out[i].setter = filters_set_genotype2; out[ival].key[0]='a'; out[ival].key[1]='a'; } // aa + else if ( !strcasecmp(out[ival].key,"a") ) { out[i].setter = filters_set_genotype2; out[ival].key[0]='a'; out[ival].key[1]=0; } // a + else if ( !strcasecmp(out[ival].key,"r") ) { out[i].setter = filters_set_genotype2; out[ival].key[0]='r'; out[ival].key[1]=0; } // r + continue; + } + if ( !strcmp(out[i].tag,"FILTER") ) + { + if ( i+1==nout ) error("Could not parse the expression: %s\n", filter->str); + int itok = i, ival; + if ( out[i+1].tok_type==TOK_EQ || out[i+1].tok_type==TOK_NE ) ival = i - 1; + else if ( out[i+1].tok_type==TOK_LIKE ) out[i+1].tok_type = TOK_EQ, ival = i - 1; + else if ( out[i+1].tok_type==TOK_NLIKE ) out[i+1].tok_type = TOK_NE, ival = i - 1; + else if ( out[i+2].tok_type==TOK_EQ || out[i+2].tok_type==TOK_NE ) ival = ++i; + else if ( out[i+2].tok_type==TOK_LIKE ) out[i+2].tok_type = TOK_EQ, ival = ++i; + else if ( out[i+2].tok_type==TOK_NLIKE ) out[i+2].tok_type = TOK_NE, ival = ++i; + else error("[%s:%d %s] Could not parse the expression: %s\n", __FILE__,__LINE__,__FUNCTION__, filter->str); + if ( out[ival].tok_type!=TOK_VAL || !out[ival].key ) + error("[%s:%d %s] Could not parse the expression, an unquoted string value perhaps? %s\n", __FILE__,__LINE__,__FUNCTION__, filter->str); + if ( strcmp(".",out[ival].key) ) + { + out[ival].hdr_id = bcf_hdr_id2int(filter->hdr, BCF_DT_ID, out[ival].key); + if ( !bcf_hdr_idinfo_exists(filter->hdr,BCF_HL_FLT,out[ival].hdr_id) ) + error("The filter \"%s\" not present in the VCF header\n", out[ival].key); + } + else + out[ival].hdr_id = -1; + out[ival].tag = out[ival].key; out[ival].key = NULL; + out[itok].hdr_id = out[ival].hdr_id; + continue; + } + } + filter->nsamples = filter->max_unpack&BCF_UN_FMT ? bcf_hdr_nsamples(filter->hdr) : 0; + for (i=0; insamples ) + { + out[i].pass_samples = (uint8_t*)malloc(filter->nsamples); + int j; + for (j=0; jnsamples; j++) out[i].pass_samples[j] = 1; + } + } + + if (0) filter_debug_print(out, NULL, nout); + + if ( mops ) free(ops); + filter->filters = out; + filter->nfilters = nout; + filter->flt_stack = (token_t **)malloc(sizeof(token_t*)*nout); + return filter; +} + +void filter_destroy(filter_t *filter) +{ + int i; + for (i=0; infilters; i++) + { + if ( filter->filters[i].key ) free(filter->filters[i].key); + free(filter->filters[i].str_value.s); + free(filter->filters[i].tag); + free(filter->filters[i].idxs); + free(filter->filters[i].values); + free(filter->filters[i].pass_samples); + if (filter->filters[i].hash) khash_str2int_destroy_free(filter->filters[i].hash); + if (filter->filters[i].regex) + { + regfree(filter->filters[i].regex); + free(filter->filters[i].regex); + } + } + free(filter->filters); + free(filter->flt_stack); + free(filter->str); + free(filter->tmpi); + free(filter->tmpf); + free(filter->tmps.s); + free(filter); +} + +int filter_test(filter_t *filter, bcf1_t *line, const uint8_t **samples) +{ + bcf_unpack(line, filter->max_unpack); + + int i, nstack = 0; + for (i=0; infilters; i++) + { + filter->filters[i].nsamples = 0; + filter->filters[i].nvalues = 0; + filter->filters[i].pass_site = -1; + + if ( filter->filters[i].tok_type == TOK_VAL ) + { + if ( filter->filters[i].setter ) // variable, query the VCF line + filter->filters[i].setter(filter, line, &filter->filters[i]); + else if ( filter->filters[i].key ) // string constant + { + filter->filters[i].str_value.l = 0; + kputs(filter->filters[i].key, &filter->filters[i].str_value); + filter->filters[i].nvalues = filter->filters[i].str_value.l; + } + else // numeric constant + { + filter->filters[i].values[0] = filter->filters[i].threshold; + filter->filters[i].nvalues = 1; + } + filter->flt_stack[nstack++] = &filter->filters[i]; + continue; + } + else if ( filter->filters[i].tok_type == TOK_FUNC ) // all functions take only one argument + { + filter->filters[i].setter(filter, line, filter->flt_stack[nstack-1]); + continue; + } + if ( nstack<2 ) + error("Error occurred while processing the filter \"%s\" (1:%d)\n", filter->str,nstack); // too few values left on the stack + + int is_str = filter->flt_stack[nstack-1]->is_str + filter->flt_stack[nstack-2]->is_str; + + if ( filter->filters[i].tok_type == TOK_OR || filter->filters[i].tok_type == TOK_OR_VEC ) + { + if ( filter->flt_stack[nstack-1]->pass_site<0 || filter->flt_stack[nstack-2]->pass_site<0 ) + error("Error occurred while processing the filter \"%s\" (%d %d OR)\n", filter->str,filter->flt_stack[nstack-2]->pass_site,filter->flt_stack[nstack-1]->pass_site); + filter->flt_stack[nstack-2]->pass_site = vector_logic_or(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1], filter->filters[i].tok_type); + nstack--; + continue; + } + if ( filter->filters[i].tok_type == TOK_AND || filter->filters[i].tok_type == TOK_AND_VEC ) + { + if ( filter->flt_stack[nstack-1]->pass_site<0 || filter->flt_stack[nstack-2]->pass_site<0 ) + error("Error occurred while processing the filter \"%s\" (%d %d AND)\n", filter->str,filter->flt_stack[nstack-2]->pass_site,filter->flt_stack[nstack-1]->pass_site); + filter->flt_stack[nstack-2]->pass_site = vector_logic_and(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1], filter->filters[i].tok_type); + nstack--; + continue; + } + + if ( filter->filters[i].tok_type == TOK_ADD ) + { + VECTOR_ARITHMETICS(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],+); + nstack--; + continue; + } + else if ( filter->filters[i].tok_type == TOK_SUB ) + { + VECTOR_ARITHMETICS(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],-); + nstack--; + continue; + } + else if ( filter->filters[i].tok_type == TOK_MULT ) + { + VECTOR_ARITHMETICS(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],*); + nstack--; + continue; + } + else if ( filter->filters[i].tok_type == TOK_DIV ) + { + VECTOR_ARITHMETICS(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],/); + nstack--; + continue; + } + + int is_true = 0; + if ( filter->filters[i].comparator ) + is_true = filter->filters[i].comparator(filter->flt_stack[nstack-1],filter->flt_stack[nstack-2],filter->filters[i].tok_type,line); + else if ( !filter->flt_stack[nstack-1]->nvalues || !filter->flt_stack[nstack-2]->nvalues ) + { + int skip = 0; + if ( !filter->flt_stack[nstack-2]->is_missing && !filter->flt_stack[nstack-1]->is_missing ) skip = 1; + if ( filter->filters[i].tok_type != TOK_EQ && filter->filters[i].tok_type != TOK_NE ) skip = 1; + + if ( skip ) + filter->flt_stack[nstack-2]->nvalues = filter->flt_stack[nstack-2]->nsamples = 0; + else if ( filter->filters[i].tok_type == TOK_EQ ) + CMP_MISSING(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],==,is_true) + else if ( filter->filters[i].tok_type == TOK_NE ) + CMP_MISSING(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],!=,is_true) + } + else if ( filter->filters[i].tok_type == TOK_EQ ) + { + if ( filter->flt_stack[nstack-1]->comparator ) + is_true = filter->flt_stack[nstack-1]->comparator(filter->flt_stack[nstack-1],filter->flt_stack[nstack-2],TOK_EQ,line); + else if ( filter->flt_stack[nstack-2]->comparator ) + is_true = filter->flt_stack[nstack-2]->comparator(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],TOK_EQ,line); + else if ( is_str==2 ) // both are strings + is_true = cmp_vector_strings(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],TOK_EQ); + else if ( is_str==1 ) + error("Comparing string to numeric value: %s\n", filter->str); + else + CMP_VECTORS(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],==,is_true); + } + else if ( filter->filters[i].tok_type == TOK_NE ) + { + if ( filter->flt_stack[nstack-1]->comparator ) + is_true = filter->flt_stack[nstack-1]->comparator(filter->flt_stack[nstack-1],filter->flt_stack[nstack-2],TOK_NE,line); + else if ( filter->flt_stack[nstack-2]->comparator ) + is_true = filter->flt_stack[nstack-2]->comparator(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],TOK_NE,line); + else if ( is_str==2 ) + is_true = cmp_vector_strings(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],TOK_NE); + else if ( is_str==1 ) + error("Comparing string to numeric value: %s\n", filter->str); + else + CMP_VECTORS(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],!=,is_true); + } + else if ( filter->filters[i].tok_type == TOK_LIKE || filter->filters[i].tok_type == TOK_NLIKE ) + { + if ( is_str==2 ) + is_true = regex_vector_strings(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1], filter->filters[i].tok_type == TOK_LIKE ? 0 : 1); + else + error("The regex operator can be used on strings only: %s\n", filter->str); + } + else if ( is_str>0 ) + error("Wrong operator in string comparison: %s [%s,%s]\n", filter->str, filter->flt_stack[nstack-1]->str_value, filter->flt_stack[nstack-2]->str_value); + else if ( filter->filters[i].tok_type == TOK_LE ) + CMP_VECTORS(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],<=,is_true) + else if ( filter->filters[i].tok_type == TOK_LT ) + CMP_VECTORS(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],<,is_true) + else if ( filter->filters[i].tok_type == TOK_BT ) + CMP_VECTORS(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],>,is_true) + else if ( filter->filters[i].tok_type == TOK_BE ) + CMP_VECTORS(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],>=,is_true) + else + error("FIXME: did not expect this .. tok_type %d = %d\n", i, filter->filters[i].tok_type); + + filter->flt_stack[nstack-2]->pass_site = is_true; + nstack--; + } + if ( nstack>1 ) error("Error occurred while processing the filter \"%s\" (2:%d)\n", filter->str,nstack); // too few values left on the stack + if ( samples ) + { + *samples = filter->max_unpack&BCF_UN_FMT ? filter->flt_stack[0]->pass_samples : NULL; + if ( *samples && !filter->flt_stack[0]->nsamples ) + { + for (i=0; insamples; i++) + filter->flt_stack[0]->pass_samples[i] = filter->flt_stack[0]->pass_site; + } + } + return filter->flt_stack[0]->pass_site; +} + +int filter_max_unpack(filter_t *flt) +{ + return flt->max_unpack; +} diff --git a/bcftools/filter.c.pysam.c b/bcftools/filter.c.pysam.c new file mode 100644 index 0000000..0beb592 --- /dev/null +++ b/bcftools/filter.c.pysam.c @@ -0,0 +1,2194 @@ +#include "bcftools.pysam.h" + +/* filter.c -- filter expressions. + + Copyright (C) 2013-2015 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "filter.h" +#include "bcftools.h" +#include +#include + +#ifndef __FUNCTION__ +# define __FUNCTION__ __func__ +#endif + +uint64_t bcf_double_missing = 0x7ff0000000000001; +uint64_t bcf_double_vector_end = 0x7ff0000000000002; +static inline void bcf_double_set(double *ptr, uint64_t value) +{ + union { uint64_t i; double d; } u; + u.i = value; + *ptr = u.d; +} +static inline int bcf_double_test(double d, uint64_t value) +{ + union { uint64_t i; double d; } u; + u.d = d; + return u.i==value ? 1 : 0; +} +#define bcf_double_set_vector_end(x) bcf_double_set(&(x),bcf_double_vector_end) +#define bcf_double_set_missing(x) bcf_double_set(&(x),bcf_double_missing) +#define bcf_double_is_vector_end(x) bcf_double_test((x),bcf_double_vector_end) +#define bcf_double_is_missing(x) bcf_double_test((x),bcf_double_missing) + + +typedef struct _token_t +{ + // read-only values, same for all VCF lines + int tok_type; // one of the TOK_* keys below + char *key; // set only for string constants, otherwise NULL + char *tag; // for debugging and printout only, VCF tag name + double threshold; // filtering threshold + int hdr_id, type; // BCF header lookup ID and one of BCF_HT_* types + int idx; // 0-based index to VCF vectors, -1: not a vector, + // -2: list (e.g. [0,1,2] or [1..3] or [1..] or any field[*], which is equivalent to [0..]) + int *idxs, nidxs; // set indexes to 0 to exclude, to 1 to include, and last element negative if unlimited + void (*setter)(filter_t *, bcf1_t *, struct _token_t *); + int (*comparator)(struct _token_t *, struct _token_t *, int op_type, bcf1_t *); + void *hash; // test presence of str value in the hash via comparator + regex_t *regex; // precompiled regex for string comparison + + // modified on filter evaluation at each VCF line + double *values; + kstring_t str_value; + int is_str, is_missing; // is_missing is set only for constants, variables are controled via nvalues + int pass_site; // -1 not applicable, 0 fails, >0 pass + uint8_t *pass_samples; // status of individual samples + int nsamples; // number of samples + int nvalues, mvalues; // number of used values: n=0 for missing values, n=1 for scalars, for strings n=str_value.l + int nstr1; // per-sample string length, set only with str_value.l>0 && nsamples>1 +} +token_t; + +struct _filter_t +{ + bcf_hdr_t *hdr; + char *str; + int nfilters; + token_t *filters, **flt_stack; // filtering input tokens (in RPN) and evaluation stack + int32_t *tmpi; + float *tmpf; + kstring_t tmps; + int max_unpack, mtmpi, mtmpf, nsamples; +}; + + +#define TOK_VAL 0 +#define TOK_LFT 1 // ( +#define TOK_RGT 2 // ) +#define TOK_LE 3 // less or equal +#define TOK_LT 4 // less than +#define TOK_EQ 5 // equal +#define TOK_BT 6 // bigger than +#define TOK_BE 7 // bigger or equal +#define TOK_NE 8 // not equal +#define TOK_OR 9 // | +#define TOK_AND 10 // & +#define TOK_ADD 11 // + +#define TOK_SUB 12 // - +#define TOK_MULT 13 // * +#define TOK_DIV 14 // / +#define TOK_MAX 15 +#define TOK_MIN 16 +#define TOK_AVG 17 +#define TOK_AND_VEC 18 // && (operator applied in samples) +#define TOK_OR_VEC 19 // || (operator applied in samples) +#define TOK_LIKE 20 // ~ regular expression +#define TOK_NLIKE 21 // !~ regular expression +#define TOK_SUM 22 +#define TOK_ABS 23 +#define TOK_LEN 24 +#define TOK_FUNC 25 + +// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 +// ( ) [ < = > ] ! | & + - * / M m a A O ~ ^ S . l +static int op_prec[] = {0,1,1,5,5,5,5,5,5,2,3, 6, 6, 7, 7, 8, 8, 8, 3, 2, 5, 5, 8, 8, 8}; +#define TOKEN_STRING "x()[<=>]!|&+-*/MmaAO~^f" + +static int filters_next_token(char **str, int *len) +{ + char *tmp = *str; + while ( *tmp && isspace(*tmp) ) tmp++; + *str = tmp; + *len = 0; + + // test for doubles: d.ddde[+-]dd + if ( isdigit(*str[0]) || *str[0]=='.' ) // strtod would eat +/- + { + double HTS_UNUSED v = strtod(*str, &tmp); + if ( *str!=tmp && (!tmp[0] || !isalnum(tmp[0])) ) + { + *len = tmp - (*str); + return TOK_VAL; + } + tmp = *str; + } + + if ( !strncasecmp(tmp,"MAX(",4) ) { (*str) += 3; return TOK_MAX; } + if ( !strncasecmp(tmp,"MIN(",4) ) { (*str) += 3; return TOK_MIN; } + if ( !strncasecmp(tmp,"AVG(",4) ) { (*str) += 3; return TOK_AVG; } + if ( !strncasecmp(tmp,"SUM(",4) ) { (*str) += 3; return TOK_SUM; } + if ( !strncasecmp(tmp,"ABS(",4) ) { (*str) += 3; return TOK_ABS; } + if ( !strncasecmp(tmp,"STRLEN(",7) ) { (*str) += 6; return TOK_LEN; } + if ( !strncasecmp(tmp,"%MAX(",5) ) { (*str) += 4; return TOK_MAX; } // for backward compatibility + if ( !strncasecmp(tmp,"%MIN(",5) ) { (*str) += 4; return TOK_MIN; } // for backward compatibility + if ( !strncasecmp(tmp,"%AVG(",5) ) { (*str) += 4; return TOK_AVG; } // for backward compatibility + if ( !strncasecmp(tmp,"%SUM(",5) ) { (*str) += 4; return TOK_SUM; } // for backward compatibility + if ( !strncasecmp(tmp,"INFO/",5) ) tmp += 5; + if ( !strncasecmp(tmp,"FORMAT/",7) ) tmp += 7; + if ( !strncasecmp(tmp,"FMT/",4) ) tmp += 4; + + if ( tmp[0]=='@' ) // file name + { + while ( *tmp && !isspace(*tmp) && *tmp!='=' && *tmp!='!' ) tmp++; + *len = tmp - (*str); + return TOK_VAL; + } + + int square_brackets = 0; + while ( tmp[0] ) + { + if ( tmp[0]=='"' ) break; + if ( tmp[0]=='\'' ) break; + if ( isspace(tmp[0]) ) break; + if ( tmp[0]=='<' ) break; + if ( tmp[0]=='>' ) break; + if ( tmp[0]=='=' ) break; + if ( tmp[0]=='!' ) break; + if ( tmp[0]=='&' ) break; + if ( tmp[0]=='|' ) break; + if ( tmp[0]=='(' ) break; + if ( tmp[0]==')' ) break; + if ( tmp[0]=='+' ) break; + if ( tmp[0]=='*' && !square_brackets ) break; + if ( tmp[0]=='-' && !square_brackets ) break; + if ( tmp[0]=='/' ) break; + if ( tmp[0]=='~' ) break; + if ( tmp[0]==']' ) { if (square_brackets) tmp++; break; } + if ( tmp[0]=='[' ) square_brackets++; + tmp++; + } + if ( tmp > *str ) + { + *len = tmp - (*str); + return TOK_VAL; + } + if ( tmp[0]=='"' || tmp[0]=='\'' ) + { + int quote = tmp[0]; + tmp++; + while ( *tmp && tmp[0]!=quote ) tmp++; + if ( !*tmp ) return -1; // missing quotes + *len = tmp - (*str) + 1; + return TOK_VAL; + } + if ( tmp[0]=='!' ) + { + if ( tmp[1]=='=' ) { (*str) += 2; return TOK_NE; } + if ( tmp[1]=='~' ) { (*str) += 2; return TOK_NLIKE; } + } + if ( tmp[0]=='<' ) + { + if ( tmp[1]=='=' ) { (*str) += 2; return TOK_LE; } + (*str) += 1; return TOK_LT; + } + if ( tmp[0]=='>' ) + { + if ( tmp[1]=='=' ) { (*str) += 2; return TOK_BE; } + (*str) += 1; return TOK_BT; + } + if ( tmp[0]=='=' ) + { + if ( tmp[1]=='=' ) { (*str) += 2; return TOK_EQ; } + (*str) += 1; return TOK_EQ; + } + if ( tmp[0]=='(' ) { (*str) += 1; return TOK_LFT; } + if ( tmp[0]==')' ) { (*str) += 1; return TOK_RGT; } + if ( tmp[0]=='&' && tmp[1]=='&' ) { (*str) += 2; return TOK_AND_VEC; } + if ( tmp[0]=='|' && tmp[1]=='|' ) { (*str) += 2; return TOK_OR_VEC; } + if ( tmp[0]=='&' ) { (*str) += 1; return TOK_AND; } + if ( tmp[0]=='|' ) { (*str) += 1; return TOK_OR; } + if ( tmp[0]=='+' ) { (*str) += 1; return TOK_ADD; } + if ( tmp[0]=='-' ) { (*str) += 1; return TOK_SUB; } + if ( tmp[0]=='*' ) { (*str) += 1; return TOK_MULT; } + if ( tmp[0]=='/' ) { (*str) += 1; return TOK_DIV; } + if ( tmp[0]=='~' ) { (*str) += 1; return TOK_LIKE; } + + *len = tmp - (*str); + return TOK_VAL; +} + +static void filters_set_qual(filter_t *flt, bcf1_t *line, token_t *tok) +{ + float *ptr = &line->qual; + if ( bcf_float_is_missing(*ptr) ) + tok->nvalues = 0; + else + { + tok->values[0] = (double)line->qual; + tok->nvalues = 1; + } +} +static void filters_set_type(filter_t *flt, bcf1_t *line, token_t *tok) +{ + tok->values[0] = bcf_get_variant_types(line); + if ( !tok->values[0] ) tok->values[0] = 1; // mistake in htslib: VCF_* should start with 1 + else tok->values[0] = ((int)tok->values[0]) << 1; + tok->nvalues = 1; +} +static void filters_set_info(filter_t *flt, bcf1_t *line, token_t *tok) +{ + assert( tok->hdr_id >=0 ); + int i; + for (i=0; in_info; i++) + if ( line->d.info[i].key == tok->hdr_id ) break; + + if ( i==line->n_info ) + tok->nvalues = 0; + else if ( line->d.info[i].type==BCF_BT_CHAR ) + { + int n = line->d.info[i].len; + if ( n >= tok->str_value.m ) + { + tok->str_value.m = n + 1; + tok->str_value.s = (char*) realloc(tok->str_value.s, tok->str_value.m); + if ( !tok->str_value.s ) error("Failed to alloc %d bytes\n", (int)tok->str_value.m); + } + memcpy(tok->str_value.s, line->d.info[i].vptr, n); + tok->str_value.s[n] = 0; + tok->nvalues = tok->str_value.l = n; + } + else if ( line->d.info[i].type==BCF_BT_FLOAT ) + { + if ( bcf_float_is_missing(line->d.info[i].v1.f) ) tok->nvalues = 0; + else + { + tok->values[0] = line->d.info[i].v1.f; + tok->nvalues = 1; + } + tok->str_value.l = 0; + } + else + { + tok->str_value.l = 0; + if ( line->d.info[i].type==BCF_BT_INT8 && line->d.info[i].v1.i==bcf_int8_missing ) tok->nvalues = 0; + else if ( line->d.info[i].type==BCF_BT_INT16 && line->d.info[i].v1.i==bcf_int16_missing ) tok->nvalues = 0; + else if ( line->d.info[i].type==BCF_BT_INT32 && line->d.info[i].v1.i==bcf_int32_missing ) tok->nvalues = 0; + else + { + tok->values[0] = line->d.info[i].v1.i; + tok->nvalues = 1; + } + } +} +static int filters_cmp_bit_and(token_t *atok, token_t *btok, int op_type, bcf1_t *line) +{ + int a = (int)(atok->nvalues?atok->values[0]:atok->threshold); + int b = (int)(btok->nvalues?btok->values[0]:btok->threshold); + if ( op_type==TOK_LIKE ) return a&b ? 1 : 0; + return a&b ? 0 : 1; +} +static int filters_cmp_filter(token_t *atok, token_t *btok, int op_type, bcf1_t *line) +{ + int i; + if ( op_type==TOK_NE ) // AND logic: none of the filters can match + { + if ( !line->d.n_flt ) + { + if ( atok->hdr_id==-1 ) return 0; // missing value + return 1; // no filter present, eval to true + } + for (i=0; id.n_flt; i++) + if ( atok->hdr_id==line->d.flt[i] ) return 0; + return 1; + } + // TOK_EQ with OR logic: at least one of the filters must match + if ( !line->d.n_flt ) + { + if ( atok->hdr_id==-1 ) return 1; + return 0; // no filter present, eval to false + } + for (i=0; id.n_flt; i++) + if ( atok->hdr_id==line->d.flt[i] ) return 1; + return 0; +} +static int filters_cmp_id(token_t *atok, token_t *btok, int op_type, bcf1_t *line) +{ + // multiple IDs not supported yet (easy to add though) + + if ( btok->hash ) + { + token_t *tmp = atok; atok = btok; btok = tmp; + } + if ( atok->hash ) + { + int ret = khash_str2int_has_key(atok->hash, line->d.id); + if ( op_type==TOK_EQ ) return ret; + return ret ? 0 : 1; + } + + if ( op_type==TOK_EQ ) return strcmp(btok->str_value.s,line->d.id) ? 0 : 1; + return strcmp(btok->str_value.s,line->d.id) ? 1 : 0; +} + +/** + * bcf_get_info_value() - get single INFO value, int64_t or double + * @line: BCF line + * @info_id: tag ID, as returned by bcf_hdr_id2int + * @ivec: 0-based index to retrieve, -1 when single value is expected + * @vptr: pointer to memory location of sufficient size to accomodate + * info_id's type + * + * The returned value is -1 if tag is not present, 0 if present but + * values is missing or ivec is out of range, and 1 on success. + */ +static int bcf_get_info_value(bcf1_t *line, int info_id, int ivec, void *value) +{ + int j; + for (j=0; jn_info; j++) + if ( line->d.info[j].key == info_id ) break; + if ( j==line->n_info ) return -1; + + bcf_info_t *info = &line->d.info[j]; + if ( info->len == 1 ) + { + if ( info->type==BCF_BT_FLOAT ) *((double*)value) = info->v1.f; + else if ( info->type==BCF_BT_INT8 || info->type==BCF_BT_INT16 || info->type==BCF_BT_INT32 ) *((int64_t*)value) = info->v1.i; + return 1; + } + + if ( ivec<0 ) ivec = 0; + + #define BRANCH(type_t, is_missing, is_vector_end, out_type_t) { \ + type_t *p = (type_t *) info->vptr; \ + for (j=0; jlen; j++) \ + { \ + if ( is_vector_end ) return 0; \ + } \ + if ( is_missing ) return 0; \ + *((out_type_t*)value) = p[j]; \ + return 1; \ + } + switch (info->type) { + case BCF_BT_INT8: BRANCH(int8_t, p[j]==bcf_int8_missing, p[j]==bcf_int8_vector_end, int64_t); break; + case BCF_BT_INT16: BRANCH(int16_t, p[j]==bcf_int16_missing, p[j]==bcf_int16_vector_end, int64_t); break; + case BCF_BT_INT32: BRANCH(int32_t, p[j]==bcf_int32_missing, p[j]==bcf_int32_vector_end, int64_t); break; + case BCF_BT_FLOAT: BRANCH(float, bcf_float_is_missing(p[j]), bcf_float_is_vector_end(p[j]), double); break; + default: fprintf(bcftools_stderr,"todo: type %d\n", info->type); exit(1); break; + } + #undef BRANCH + return -1; // this shouldn't happen +} + +static void filters_set_pos(filter_t *flt, bcf1_t *line, token_t *tok) +{ + tok->values[0] = line->pos+1; + tok->nvalues = 1; +} + +static void filters_set_info_int(filter_t *flt, bcf1_t *line, token_t *tok) +{ + if ( tok->idx==-2 ) + { + tok->nvalues = bcf_get_info_int32(flt->hdr,line,tok->tag,&flt->tmpi,&flt->mtmpi); + if ( tok->nvalues<=0 ) tok->nvalues = 0; + else + { + hts_expand(double,tok->nvalues,tok->mvalues,tok->values); + int i, j = 0, end = tok->idxs[tok->nidxs-1] < 0 ? tok->nvalues - 1 : tok->nidxs - 1; + if ( end >= tok->nvalues ) end = tok->nvalues - 1; + for (i=0; i<=end; i++) + if ( i>=tok->nidxs || tok->idxs[i] ) tok->values[j++] = flt->tmpi[i]; + tok->nvalues = j; + } + } + else + { + int64_t value; + if ( bcf_get_info_value(line,tok->hdr_id,tok->idx,&value) <= 0 ) + tok->nvalues = 0; + else + { + tok->values[0] = value; + tok->nvalues = 1; + } + } +} + +static void filters_set_info_float(filter_t *flt, bcf1_t *line, token_t *tok) +{ + if ( tok->idx==-2 ) + { + tok->nvalues = bcf_get_info_float(flt->hdr,line,tok->tag,&flt->tmpf,&flt->mtmpf); + if ( tok->nvalues<=0 ) tok->nvalues = 0; + else + { + hts_expand(double,tok->nvalues,tok->mvalues,tok->values); + int i, j = 0, end = tok->idxs[tok->nidxs-1] < 0 ? tok->nvalues - 1 : tok->nidxs - 1; + if ( end >= tok->nvalues ) end = tok->nvalues - 1; + for (i=0; i<=end; i++) + if ( i>=tok->nidxs || tok->idxs[i] ) + { + if ( bcf_float_is_missing(flt->tmpf[i]) ) bcf_double_set_missing(tok->values[j]); + else tok->values[j] = flt->tmpf[i]; + j++; + } + tok->nvalues = j; + } + } + else + { + double value; + if ( bcf_get_info_value(line,tok->hdr_id,tok->idx,&value) <= 0 ) + tok->nvalues = 0; + else + { + tok->values[0] = value; + tok->nvalues = 1; + } + } +} + +static void filters_set_info_string(filter_t *flt, bcf1_t *line, token_t *tok) +{ + int32_t m = tok->str_value.m; + int n = bcf_get_info_string(flt->hdr,line,tok->tag,&tok->str_value.s,&m); + tok->str_value.m = m; + if ( n<0 ) { tok->nvalues = tok->str_value.l = 0; return; } + + if ( tok->idx>=0 ) + { + // get ith field (i=tok->idx) + int i = 0; + char *ss = tok->str_value.s, *se = tok->str_value.s + n; + while ( ssidx ) + { + if ( *ss==',' ) i++; + ss++; + } + if ( ss==se || i!=tok->idx ) { tok->nvalues = tok->str_value.l = 0; return; } + se = ss; + while ( se - tok->str_value.s < n && *se!=',' ) se++; + if ( ss==tok->str_value.s ) *se = 0; + else + { + memmove(tok->str_value.s, ss, se-ss); + tok->str_value.s[se-ss] = 0; + } + tok->str_value.l = se - ss; + } + else if ( tok->idx==-2 && tok->idxs[0]==-1 ) // keep all values, TAG[*] + tok->str_value.l = n; + else if ( tok->idx==-2 ) + { + flt->tmps.l = 0; + ks_resize(&flt->tmps, n); + int i, end = tok->idxs[tok->nidxs-1] < 0 ? n - 1 : tok->nidxs - 1; + if ( end >= n ) end = n - 1; + char *beg = tok->str_value.s, *dst = flt->tmps.s; + for (i=0; i<=end; i++) + { + char *end = beg; + while ( *end && *end!=',' ) end++; + + if ( i>=tok->nidxs || tok->idxs[i] ) + { + memcpy(dst, beg, end - beg); + dst += end - beg; + dst[0] = ','; + dst++; + } + + beg = end+1; + } + dst[0] = 0; + tok->str_value.l = dst - flt->tmps.s; + + #define SWAP(type_t, a, b) { type_t t = a; a = b; b = t; } + SWAP(char *, flt->tmps.s, tok->str_value.s); + SWAP(size_t, flt->tmps.m, tok->str_value.m); + } + tok->nvalues = tok->str_value.l; +} + +static void filters_set_info_flag(filter_t *flt, bcf1_t *line, token_t *tok) +{ + int j; + for (j=0; jn_info; j++) + if ( line->d.info[j].key == tok->hdr_id ) break; + tok->values[0] = j==line->n_info ? 0 : 1; + tok->nvalues = 1; +} + +static void filters_set_format_int(filter_t *flt, bcf1_t *line, token_t *tok) +{ + int i; + if ( (tok->nvalues=bcf_get_format_int32(flt->hdr,line,tok->tag,&flt->tmpi,&flt->mtmpi))<0 ) + { + tok->nvalues = tok->nsamples = 0; + return; + } + if ( tok->idx >= -1 ) // scalar or vector index + { + hts_expand(double,flt->nsamples,tok->mvalues,tok->values); + int nvals = tok->nvalues / line->n_sample; + int idx = tok->idx >= 0 ? tok->idx : 0; + int is_missing = 1; + int32_t *ptr = flt->tmpi; + for (i=0; in_sample; i++) + { + if ( ptr[idx]==bcf_int32_missing || ptr[idx]==bcf_int32_vector_end ) + bcf_double_set_missing(tok->values[i]); + else + { + tok->values[i] = ptr[idx]; + is_missing = 0; + } + ptr += nvals; + } + if ( is_missing ) tok->nvalues = 0; + else tok->nvalues = line->n_sample; + tok->nsamples = tok->nvalues; + return; + } + if ( tok->idx == -2 ) + { + hts_expand(double,tok->nvalues,tok->mvalues,tok->values); + int nvals = tok->nvalues / line->n_sample; + int idx = tok->idx >= 0 ? tok->idx : 0; + int is_missing = 1; + int k, j = 0, end = tok->idxs[tok->nidxs-1] < 0 ? nvals - 1 : tok->nidxs - 1; + if ( end >= nvals ) end = nvals - 1; + int32_t *ptr = flt->tmpi; + for (i=0; in_sample; i++) + { + for (k=0; k<=end; k++) + if ( k>=tok->nidxs || tok->idxs[k] ) + { + if ( ptr[k]==bcf_int32_missing || ptr[k]==bcf_int32_vector_end ) + bcf_double_set_missing(tok->values[j]); + else + { + tok->values[j] = ptr[k]; + is_missing = 0; + } + j++; + } + ptr += nvals; + } + if ( is_missing ) tok->nvalues = tok->nsamples = 0; + else + { + tok->nsamples = line->n_sample; + tok->nvalues = j; + } + return; + } +} +static void filters_set_format_float(filter_t *flt, bcf1_t *line, token_t *tok) +{ + int i; + if ( (tok->nvalues=bcf_get_format_float(flt->hdr,line,tok->tag,&flt->tmpf,&flt->mtmpf))<0 ) + { + tok->nvalues = tok->nsamples = 0; + return; + } + if ( tok->idx >= -1 ) // scalar or vector index + { + hts_expand(double,flt->nsamples,tok->mvalues,tok->values); + int nvals = tok->nvalues / line->n_sample; + int idx = tok->idx >= 0 ? tok->idx : 0; + int is_missing = 1; + float *ptr = flt->tmpf; + for (i=0; in_sample; i++) + { + if ( bcf_float_is_missing(ptr[idx]) || bcf_float_is_vector_end(ptr[idx]) ) + bcf_double_set_missing(tok->values[i]); + else + { + tok->values[i] = ptr[idx]; + is_missing = 0; + } + ptr += nvals; + } + if ( is_missing ) tok->nvalues = 0; + else tok->nvalues = line->n_sample; + tok->nsamples = tok->nvalues; + return; + } + if ( tok->idx == -2 ) + { + hts_expand(double,tok->nvalues,tok->mvalues,tok->values); + int nvals = tok->nvalues / line->n_sample; + int idx = tok->idx >= 0 ? tok->idx : 0; + int is_missing = 1; + int k, j = 0, end = tok->idxs[tok->nidxs-1] < 0 ? nvals - 1 : tok->nidxs - 1; + if ( end >= nvals ) end = nvals - 1; + float *ptr = flt->tmpf; + for (i=0; in_sample; i++) + { + for (k=0; k<=end; k++) + if ( k>=tok->nidxs || tok->idxs[k] ) + { + if ( bcf_float_is_missing(ptr[k]) || bcf_float_is_vector_end(ptr[k]) ) + bcf_double_set_missing(tok->values[j]); + else + { + tok->values[j] = ptr[k]; + is_missing = 0; + } + j++; + } + ptr += nvals; + } + if ( is_missing ) tok->nvalues = tok->nsamples = 0; + else + { + tok->nsamples = line->n_sample; + tok->nvalues = j; + } + return; + } +} +static void filters_set_format_string(filter_t *flt, bcf1_t *line, token_t *tok) +{ + tok->str_value.l = tok->nvalues = 0; + if ( !line->n_sample ) return; + + int ndim = tok->str_value.m; + int nstr = bcf_get_format_char(flt->hdr, line, tok->tag, &tok->str_value.s, &ndim); + tok->str_value.m = ndim; + + if ( nstr<=0 ) return; + + if ( tok->idx == -1 || (tok->idx==-2 && tok->idxs[0]==-1) ) // scalar or keep all values of a vector: TAG[*] + { + tok->nsamples = line->n_sample; + tok->nstr1 = ndim / line->n_sample; + tok->nvalues = tok->str_value.l = nstr; + return; + } + + int nstr1 = nstr / line->n_sample; + + // vector, one or multiple indices + int i; + for (i=0; in_sample; i++) + { + char *dst = tok->str_value.s + i*nstr1, *str = dst; + int nval = 0, ibeg = 0; + while ( ibeg < nstr1 ) + { + int iend = ibeg + 1; + while ( iend < nstr1 && str[iend] && str[iend]!=',' ) iend++; + + int keep = 0; + if ( tok->idx >=0 ) + keep = tok->idx==nval ? 1 : 0; + else if ( nval < tok->nidxs ) + keep = tok->idxs[nval] ? 1 : 0; + else if ( tok->idxs[tok->nidxs-1] < 0 ) + keep = 1; + + if ( keep ) + { + if ( ibeg>0 ) memmove(dst, str+ibeg, iend-ibeg+1); + dst += iend - ibeg + 1; + if ( tok->idx>=0 ) break; + } + if ( !str[iend] ) break; + ibeg = iend + 1; + nval++; + } + if ( dst==str ) { dst[0] = '.'; dst+=2; } + if ( dst - str < nstr1 ) memset(dst-1, 0, nstr1 - (dst - str)); + } + tok->nvalues = tok->str_value.l = nstr; + tok->nstr1 = nstr1; + tok->nsamples = line->n_sample; +} +static void _filters_set_genotype(filter_t *flt, bcf1_t *line, token_t *tok, int type) +{ + bcf_fmt_t *fmt = bcf_get_fmt(flt->hdr, line, "GT"); + if ( !fmt ) + { + tok->nvalues = tok->str_value.l = 0; + return; + } + + int i,j, nsmpl = bcf_hdr_nsamples(flt->hdr), nvals = type==2 ? 3 : 4; + if ( tok->str_value.m <= nvals*nsmpl ) + { + tok->str_value.m = nvals*nsmpl + 1; + tok->str_value.s = (char*)realloc(tok->str_value.s, tok->str_value.m); + } + +#define BRANCH_INT(type_t,vector_end) \ + { \ + for (i=0; in_sample; i++) \ + { \ + type_t *ptr = (type_t*) (fmt->p + i*fmt->size); \ + int is_het = 0, has_ref = 0, missing = 0; \ + for (j=0; jn; j++) \ + { \ + if ( ptr[j]==vector_end ) break; /* smaller ploidy */ \ + if ( bcf_gt_is_missing(ptr[j]) ) { missing=1; break; } /* missing allele */ \ + int ial = ptr[j]; \ + if ( bcf_gt_allele(ial)==0 ) has_ref = 1; \ + if ( j>0 ) \ + { \ + int jal = ptr[j-1]; \ + if ( bcf_gt_allele(ial)!=bcf_gt_allele(jal) ) is_het = 1; \ + } \ + } \ + char *dst = &tok->str_value.s[nvals*i]; \ + if ( !j || missing ) dst[0]='.', dst[1]=0; /* ., missing genotype */ \ + else if ( type==3 ) \ + { \ + if ( j==1 ) dst[0]='h', dst[1]='a', dst[2]='p', dst[3] = 0; /* hap, haploid */ \ + else if ( !is_het ) dst[0]='h', dst[1]='o', dst[2]='m', dst[3] = 0; /* hom */ \ + else dst[0]='h', dst[1]='e', dst[2]='t', dst[3] = 0; /* het */ \ + } \ + else \ + { \ + if ( j==1 ) \ + { \ + if ( has_ref ) dst[0]='r', dst[1]=0; /* r, haploid */ \ + else dst[0]='a', dst[1]=0; /* a, haploid */ \ + } \ + else if ( !is_het ) \ + { \ + if ( has_ref ) dst[0]='r', dst[1]='r', dst[2] = 0; /* rr */ \ + else dst[0]='a', dst[1]='a', dst[2] = 0; /* aa */ \ + } \ + else \ + { \ + if ( has_ref ) dst[0]='r', dst[1]='a', dst[2] = 0; /* ra */ \ + else dst[0]='a', dst[1]='A', dst[2] = 0; /* aA */ \ + } \ + } \ + } \ + } + switch (fmt->type) { + case BCF_BT_INT8: BRANCH_INT(int8_t, bcf_int8_vector_end); break; + case BCF_BT_INT16: BRANCH_INT(int16_t, bcf_int16_vector_end); break; + case BCF_BT_INT32: BRANCH_INT(int32_t, bcf_int32_vector_end); break; + default: error("The GT type is not lineognised: %d at %s:%d\n",fmt->type, bcf_seqname(flt->hdr,line),line->pos+1); break; + } +#undef BRANCH_INT + tok->nsamples = nsmpl; + tok->nvalues = tok->str_value.l = nvals*nsmpl; + tok->str_value.s[tok->str_value.l] = 0; + tok->nstr1 = nvals; +} +static void filters_set_genotype2(filter_t *flt, bcf1_t *line, token_t *tok) { _filters_set_genotype(flt, line, tok, 2); } +static void filters_set_genotype3(filter_t *flt, bcf1_t *line, token_t *tok) { _filters_set_genotype(flt, line, tok, 3); } + +static void filters_set_genotype_string(filter_t *flt, bcf1_t *line, token_t *tok) +{ + bcf_fmt_t *fmt = bcf_get_fmt(flt->hdr, line, "GT"); + if ( !fmt ) + { + tok->nvalues = tok->nsamples = 0; + return; + } + int i, blen = 4, nsmpl = bcf_hdr_nsamples(flt->hdr); + kstring_t str; + +gt_length_too_big: + tok->str_value.l = 0; + for (i=0; istr_value.l; + + bcf_format_gt(fmt, i, &tok->str_value); + kputc_(0, &tok->str_value); + if ( tok->str_value.l - plen > blen ) + { + // too many alternate alleles or ploidy is too large, the genotype does not fit + // three characters ("0/0" vs "10/10"). + blen *= 2; + goto gt_length_too_big; + } + + plen = tok->str_value.l - plen; + while ( plen < blen ) + { + kputc_(0, &tok->str_value); + plen++; + } + } + tok->nsamples = nsmpl; + tok->nvalues = tok->str_value.l; + tok->nstr1 = blen; +} +static void filters_set_ref_string(filter_t *flt, bcf1_t *line, token_t *tok) +{ + tok->str_value.l = 0; + kputs(line->d.allele[0], &tok->str_value); + tok->nvalues = tok->str_value.l; +} +static void filters_set_alt_string(filter_t *flt, bcf1_t *line, token_t *tok) +{ + tok->str_value.l = 0; + if ( tok->idx>=0 ) + { + if ( line->n_allele > tok->idx + 1 ) + kputs(line->d.allele[tok->idx + 1], &tok->str_value); + else + kputc('.', &tok->str_value); + tok->idx = 0; + } + else if ( tok->idx==-2 ) + { + int i, j = 0, end = tok->idxs[tok->nidxs-1] < 0 ? line->n_allele - 1 : tok->nidxs - 1; + if ( end >= line->n_allele - 1 ) end = line->n_allele - 2; + for (i=0; i<=end; i++) + if ( i>=tok->nidxs || tok->idxs[i] ) + { + if ( tok->str_value.l ) kputc(',', &tok->str_value); + kputs(line->d.allele[i+1], &tok->str_value); + } + } + else if ( line->n_allele>1 ) + { + kputs(line->d.allele[1], &tok->str_value); + int i; + for (i=2; in_allele; i++) + { + kputc(',', &tok->str_value); + kputs(line->d.allele[i], &tok->str_value); + } + } + else if ( line->n_allele==1 ) + kputc('.', &tok->str_value); + tok->nvalues = tok->str_value.l; +} +static void filters_set_nmissing(filter_t *flt, bcf1_t *line, token_t *tok) +{ + bcf_unpack(line, BCF_UN_FMT); + if ( !line->n_sample ) + { + tok->nvalues = 1; + tok->values[0] = 0; + return; + } + + int i,igt = bcf_hdr_id2int(flt->hdr, BCF_DT_ID, "GT"); + bcf_fmt_t *fmt = NULL; + for (i=0; in_fmt; i++) + if ( line->d.fmt[i].id==igt ) { fmt = &line->d.fmt[i]; break; } + if ( !fmt ) + { + tok->nvalues = 0; + return; + } + if ( fmt->type!=BCF_BT_INT8 ) error("TODO: the GT fmt_type is not int8\n"); + + int j,nmissing = 0; + for (i=0; in_sample; i++) + { + int8_t *ptr = (int8_t*) (fmt->p + i*fmt->size); + for (j=0; jn; j++) + { + if ( ptr[j]==bcf_int8_vector_end ) break; + if ( ptr[j]==bcf_gt_missing ) { nmissing++; break; } + } + } + tok->nvalues = 1; + tok->values[0] = tok->tag[0]=='N' ? nmissing : (double)nmissing / line->n_sample; +} +static void filters_set_nalt(filter_t *flt, bcf1_t *line, token_t *tok) +{ + tok->nvalues = 1; + tok->values[0] = line->n_allele - 1; +} +static void filters_set_ac(filter_t *flt, bcf1_t *line, token_t *tok) +{ + hts_expand(int32_t, line->n_allele, flt->mtmpi, flt->tmpi); + if ( !bcf_calc_ac(flt->hdr, line, flt->tmpi, BCF_UN_INFO|BCF_UN_FMT) ) + { + tok->nvalues = 0; + return; + } + int i, an = flt->tmpi[0]; + for (i=1; in_allele; i++) an += flt->tmpi[i]; + if ( !an ) + { + tok->nvalues = 0; + return; + } + flt->tmpi[0] = an; // for filters_set_[mac|af|maf] + if ( tok->idx>=0 ) + { + tok->nvalues = 1; + tok->values[0] = tok->idx+1n_allele ? flt->tmpi[tok->idx+1] : 0; + } + else if ( line->n_allele==1 ) // no ALT + { + tok->nvalues = 1; + tok->values[0] = 0; + } + else + { + hts_expand(double,line->n_allele,tok->mvalues,tok->values); + for (i=1; in_allele; i++) + tok->values[i-1] = flt->tmpi[i]; + tok->nvalues = line->n_allele - 1; + } +} +static void filters_set_an(filter_t *flt, bcf1_t *line, token_t *tok) +{ + filters_set_ac(flt,line,tok); + tok->values[0] = tok->nvalues ? flt->tmpi[0] : 0; + tok->nvalues = 1; +} +static void filters_set_mac(filter_t *flt, bcf1_t *line, token_t *tok) +{ + filters_set_ac(flt,line,tok); + if ( !tok->nvalues ) return; + int i, an = flt->tmpi[0]; + for (i=0; invalues; i++) + if ( tok->values[i] > an*0.5 ) tok->values[i] = an - tok->values[i]; +} +static void filters_set_af(filter_t *flt, bcf1_t *line, token_t *tok) +{ + filters_set_ac(flt,line,tok); + if ( !tok->nvalues ) return; + int i, an = flt->tmpi[0]; + for (i=0; invalues; i++) + tok->values[i] /= (double)an; +} +static void filters_set_maf(filter_t *flt, bcf1_t *line, token_t *tok) +{ + filters_set_ac(flt,line,tok); + if ( !tok->nvalues ) return; + int i, an = flt->tmpi[0]; + for (i=0; invalues; i++) + { + tok->values[i] /= (double)an; + if ( tok->values[i] > 0.5 ) tok->values[i] = 1 - tok->values[i]; + } +} + +static void set_max(filter_t *flt, bcf1_t *line, token_t *tok) +{ + double val = -HUGE_VAL; + int i; + for (i=0; invalues; i++) + { + if ( !bcf_double_is_missing(tok->values[i]) && val < tok->values[i] ) val = tok->values[i]; + } + tok->values[0] = val; + tok->nvalues = 1; + tok->nsamples = 0; +} +static void set_min(filter_t *flt, bcf1_t *line, token_t *tok) +{ + double val = HUGE_VAL; + int i; + for (i=0; invalues; i++) + if ( !bcf_double_is_missing(tok->values[i]) && val > tok->values[i] ) val = tok->values[i]; + tok->values[0] = val; + tok->nvalues = 1; + tok->nsamples = 0; +} +static void set_avg(filter_t *flt, bcf1_t *line, token_t *tok) +{ + double val = 0; + int i, n = 0; + for (i=0; invalues; i++) + if ( !bcf_double_is_missing(tok->values[i]) ) { val += tok->values[i]; n++; } + tok->values[0] = n ? val / n : 0; + tok->nvalues = 1; + tok->nsamples = 0; +} +static void set_sum(filter_t *flt, bcf1_t *line, token_t *tok) +{ + double val = 0; + int i, n = 0; + for (i=0; invalues; i++) + if ( !bcf_double_is_missing(tok->values[i]) ) { val += tok->values[i]; n++; } + tok->values[0] = val; + tok->nvalues = 1; + tok->nsamples = 0; +} +static void set_abs(filter_t *flt, bcf1_t *line, token_t *tok) +{ + if ( tok->is_str ) error("ABS() can be applied only on numeric values\n"); + int i; + for (i=0; invalues; i++) + tok->values[i] = fabs(tok->values[i]); +} +static void set_strlen(filter_t *flt, bcf1_t *line, token_t *tok) +{ + tok->is_str = 0; + if ( !tok->str_value.l ) return; + if ( tok->idx==-2 ) + { + int i = 0; + char *ss = tok->str_value.s; + while ( *ss ) + { + char *se = ss; + while ( *se && *se!=',' ) se++; + hts_expand(double, i+1, tok->mvalues, tok->values); + if ( !*se ) tok->values[i] = strlen(ss); + else + { + *se = 0; + tok->values[i] = strlen(ss); + *se = ','; + } + ss = *se ? se + 1 : se; + i++; + } + tok->nvalues = i; + } + else + { + tok->values[0] = strlen(tok->str_value.s); + tok->nvalues = 1; + } + tok->str_value.l = 0; +} +#define VECTOR_ARITHMETICS(atok,btok,AOP) \ +{ \ + int i, has_values = 0; \ + if ( !(atok)->nvalues || !(btok)->nvalues ) /* missing values */ \ + { \ + (atok)->nvalues = 0; (atok)->nsamples = 0; \ + } \ + else \ + { \ + if ( ((atok)->nsamples && (btok)->nsamples) || (!(atok)->nsamples && !(btok)->nsamples)) \ + { \ + for (i=0; i<(atok)->nvalues; i++) \ + { \ + if ( bcf_double_is_missing((atok)->values[i]) ) continue; \ + if ( bcf_double_is_missing((btok)->values[i]) ) { bcf_double_set_missing((atok)->values[i]); continue; } \ + has_values = 1; \ + (atok)->values[i] = (atok)->values[i] AOP (btok)->values[i]; \ + } \ + } \ + else if ( (btok)->nsamples ) \ + { \ + hts_expand(double,(btok)->nvalues,(atok)->mvalues,(atok)->values); \ + for (i=0; i<(btok)->nvalues; i++) \ + { \ + if ( bcf_double_is_missing((atok)->values[0]) || bcf_double_is_missing((btok)->values[i]) ) \ + { \ + bcf_double_set_missing((atok)->values[i]); \ + continue; \ + } \ + has_values = 1; \ + (atok)->values[i] = (atok)->values[0] AOP (btok)->values[i]; \ + } \ + (atok)->nvalues = (btok)->nvalues; \ + (atok)->nsamples = (btok)->nsamples; \ + } \ + else if ( (atok)->nsamples ) \ + { \ + for (i=0; i<(atok)->nvalues; i++) \ + { \ + if ( bcf_double_is_missing((atok)->values[i]) || bcf_double_is_missing((btok)->values[0]) ) \ + { \ + bcf_double_set_missing((atok)->values[i]); \ + continue; \ + } \ + has_values = 1; \ + (atok)->values[i] = (atok)->values[i] AOP (btok)->values[0]; \ + } \ + } \ + } \ + if ( !has_values ) { (atok)->nvalues = 0; (atok)->nsamples = 0; } \ +} + +static int vector_logic_and(token_t *atok, token_t *btok, int and_type) +{ + // We are comparing either two scalars (result of INFO tag vs a threshold), two vectors (two FORMAT fields), + // or a vector and a scalar (FORMAT field vs threshold) + int i, pass_site = 0; + if ( !atok->nvalues || !btok->nvalues ) + { + atok->nvalues = atok->nsamples = 0; + return 0; + } + if ( !atok->nsamples && !btok->nsamples ) return atok->pass_site && btok->pass_site; + if ( atok->nsamples && btok->nsamples ) + { + if ( and_type==TOK_AND ) + { + // perform AND within a sample + for (i=0; insamples; i++) + { + atok->pass_samples[i] = atok->pass_samples[i] && btok->pass_samples[i]; + if ( !pass_site && atok->pass_samples[i] ) pass_site = 1; + } + } + else + { + // perform AND across samples + int pass_a = 0, pass_b = 0; + for (i=0; insamples; i++) + { + if ( atok->pass_samples[i] ) pass_a = 1; + atok->pass_samples[i] = atok->pass_samples[i] && btok->pass_samples[i]; + } + for (i=0; insamples; i++) + { + if ( btok->pass_samples[i] ) { pass_b = 1; break; } + } + pass_site = pass_a && pass_b; + } + return pass_site; + } + if ( btok->nsamples ) + { + for (i=0; insamples; i++) + { + atok->pass_samples[i] = atok->pass_site && btok->pass_samples[i]; + if ( !pass_site && atok->pass_samples[i] ) pass_site = 1; + } + atok->nsamples = btok->nsamples; + return pass_site; + } + /* atok->nsamples!=0 */ + for (i=0; insamples; i++) + { + atok->pass_samples[i] = atok->pass_samples[i] && btok->pass_site; + if ( !pass_site && atok->pass_samples[i] ) pass_site = 1; + } + return pass_site; +} +static int vector_logic_or(token_t *atok, token_t *btok, int or_type) +{ + int i, pass_site = 0; + if ( !atok->nvalues && !btok->nvalues ) // missing sites in both + { + atok->nvalues = atok->nsamples = 0; + return 0; + } + if ( !atok->nvalues ) // missing value in a + { + for (i=0; insamples; i++) + atok->pass_samples[i] = btok->pass_samples[i]; + atok->nsamples = btok->nsamples; + atok->nvalues = 1; + return btok->pass_site; + } + if ( !btok->nvalues ) // missing value in b + { + btok->nvalues = 1; + return atok->pass_site; + } + + if ( !atok->nsamples && !btok->nsamples ) return atok->pass_site || btok->pass_site; + if ( !atok->nsamples ) + { + if ( or_type==TOK_OR ) + { + for (i=0; insamples; i++) + { + atok->pass_samples[i] = btok->pass_samples[i]; + if ( atok->pass_site || atok->pass_samples[i] ) pass_site = 1; + } + } + else + { + for (i=0; insamples; i++) + { + atok->pass_samples[i] = atok->pass_site || btok->pass_samples[i]; + if ( atok->pass_samples[i] ) pass_site = 1; + } + } + atok->nsamples = btok->nsamples; + return pass_site; + } + if ( !btok->nsamples ) // vector vs site + { + if ( or_type==TOK_OR ) + { + for (i=0; insamples; i++) + if ( btok->pass_site || atok->pass_samples[i] ) pass_site = 1; + } + else + { + for (i=0; insamples; i++) + { + atok->pass_samples[i] = atok->pass_samples[i] || btok->pass_site; + if ( atok->pass_samples[i] ) pass_site = 1; + } + } + return pass_site; + } + for (i=0; insamples; i++) + { + atok->pass_samples[i] = atok->pass_samples[i] || btok->pass_samples[i]; + if ( !pass_site && atok->pass_samples[i] ) pass_site = 1; + } + return pass_site; +} + +#define CMP_MISSING(atok,btok,CMP_OP,ret) \ +{ \ + if ( (atok)->nsamples || (btok)->nsamples ) error("todo: Querying of missing values in FORMAT\n"); \ + token_t *tok = (atok)->is_missing ? (btok) : (atok); \ + (ret) = ( tok->nvalues CMP_OP 1 ) ? 0 : 1; \ + tok->nvalues = 1; \ +} + +#define CMP_VECTORS(atok,btok,CMP_OP,ret) \ +{ \ + int i, j, has_values = 0, pass_site = 0; \ + if ( !(atok)->nvalues || !(btok)->nvalues ) { (atok)->nvalues = 0; (atok)->nsamples = 0; (ret) = 0; } \ + else \ + { \ + if ( (atok)->idx<=-2 || (btok)->idx<=-2 ) \ + { \ + /* any field can match: [*] */ \ + for (i=0; i<(atok)->nvalues; i++) \ + { \ + for (j=0; j<(btok)->nvalues; j++) \ + if ( (atok)->values[i] CMP_OP (btok)->values[j] ) { pass_site = 1; i = (atok)->nvalues; break; } \ + } \ + } \ + else if ( (atok)->nsamples && (btok)->nsamples ) \ + { \ + for (i=0; i<(atok)->nsamples; i++) \ + { \ + has_values = 1; \ + if ( (atok)->values[i] CMP_OP (btok)->values[i] ) { (atok)->pass_samples[i] = 1; pass_site = 1; } \ + else (atok)->pass_samples[i] = 0; \ + } \ + if ( !has_values ) (atok)->nvalues = 0; \ + } \ + else if ( (atok)->nsamples ) \ + { \ + for (i=0; i<(atok)->nsamples; i++) \ + { \ + /*if ( bcf_double_is_missing((atok)->values[i]) ) { (atok)->pass_samples[i] = 0; continue; }*/ \ + has_values = 1; \ + if ( (atok)->values[i] CMP_OP (btok)->values[0] ) { (atok)->pass_samples[i] = 1; pass_site = 1; } \ + else (atok)->pass_samples[i] = 0; \ + } \ + if ( !has_values ) (atok)->nvalues = 0; \ + } \ + else if ( (btok)->nsamples ) \ + { \ + for (i=0; i<(btok)->nsamples; i++) \ + { \ + if ( bcf_double_is_missing((btok)->values[i]) ) { (atok)->pass_samples[i] = 0; continue; } \ + has_values = 1; \ + if ( (atok)->values[0] CMP_OP (btok)->values[i] ) { (atok)->pass_samples[i] = 1; pass_site = 1; } \ + else (atok)->pass_samples[i] = 0; \ + } \ + (atok)->nvalues = (btok)->nvalues; \ + (atok)->nsamples = (btok)->nsamples; \ + if ( !has_values ) (atok)->nvalues = 0; \ + } \ + else \ + { \ + if ( (atok)->values[0] CMP_OP (btok)->values[0] ) { pass_site = 1; } \ + } \ + /*fprintf(bcftools_stderr,"pass=%d\n", pass_site);*/ \ + (ret) = pass_site; \ + } \ +} +static int cmp_vector_strings(token_t *atok, token_t *btok, int logic) // logic: TOK_EQ or TOK_NE +{ + if ( !atok->str_value.l ) { return 0; } + if ( !btok->str_value.l ) { atok->str_value.l = 0; return 0; } + int i, pass_site = 0; + if ( atok->nsamples && atok->nsamples==btok->nsamples ) + { + for (i=0; insamples; i++) + { + char *astr = atok->str_value.s + i*atok->nstr1; + char *bstr = btok->str_value.s + i*btok->nstr1; + char *aend = astr + atok->str_value.l, *a = astr; + while ( astr_value.l, *b = bstr; + while ( bpass_samples[i] = 0; + else atok->pass_samples[i] = strncmp(astr,bstr,a-astr)==0 ? 1 : 0; + if ( logic!=TOK_EQ ) + atok->pass_samples[i] = atok->pass_samples[i] ? 0 : 1; + pass_site |= atok->pass_samples[i]; + } + if ( !atok->nsamples ) atok->nsamples = btok->nsamples; + } + else if ( !atok->nsamples && !btok->nsamples ) + { + if ( atok->idx==-2 || btok->idx==-2 ) + { + // any field can match: [*] + if ( atok->idx==-2 && btok->idx==-2 ) + error("fixme: Expected at least one scalar value [%s %s %s]\n", atok->tag ? atok->tag : btok->tag, atok->str_value,btok->str_value); + token_t *xtok, *ytok; // xtok is scalar, ytok array + if ( btok->idx==-2 ) { xtok = atok; ytok = btok; } + else { xtok = btok; ytok = atok; } + char *xstr = xtok->str_value.s, *xend = xstr + xtok->str_value.l; + char *ystr = ytok->str_value.s, *yend = ystr + ytok->str_value.l, *y = ystr; + while ( y<=yend ) + { + if ( y==yend || *y==',' ) + { + if ( y-ystr==xend-xstr && !strncmp(xstr,ystr,xend-xstr) ) + { + pass_site = 1; + break; + } + ystr = y+1; + } + y++; + } + } + else + pass_site = strcmp(atok->str_value.s,btok->str_value.s) ? 0 : 1; + if ( logic!=TOK_EQ ) pass_site = pass_site ? 0 : 1; + } + else + { + token_t *xtok, *ytok; + if ( !atok->nsamples ) { xtok = atok; ytok = btok; } + else { xtok = btok; ytok = atok; } + char *xstr = xtok->str_value.s; + char *xend = xstr + xtok->str_value.l, *x = xstr; + while ( xnsamples; i++) + { + char *ystr = ytok->str_value.s + i*ytok->nstr1; + char *ybeg = ystr, *yend = ystr + ytok->nstr1; + int pass = 0; + while ( ybeg < yend ) + { + char *y = ybeg; + while ( ypass_samples[i] = pass; + pass_site |= pass; + } + if ( !atok->nsamples ) + atok->nvalues = atok->nsamples = btok->nsamples; // is it a bug? not sure if atok->nvalues should be set + } + return pass_site; +} +static int regex_vector_strings(token_t *atok, token_t *btok, int negate) +{ + int i, pass_site = 0; + if ( atok->nsamples ) + { + for (i=0; insamples; i++) + { + char *ptr = atok->str_value.s + i*atok->nstr1; + atok->pass_samples[i] = regexec(btok->regex, ptr, 0,NULL,0) ? 0 : 1; + if ( negate ) atok->pass_samples[i] = atok->pass_samples[i] ? 0 : 1; + pass_site |= atok->pass_samples[i]; + } + return pass_site; + } + pass_site = regexec(btok->regex, atok->str_value.s, 0,NULL,0) ? 0 : 1; + if ( negate ) pass_site = pass_site ? 0 : 1; + return pass_site; +} + +static void parse_tag_idx(char *tag, char *tag_idx, token_t *tok) // tag_idx points just after "TAG[" +{ + // TAG[*] .. any field + if ( !strncmp("*]", tag_idx, 3) ) + { + tok->idxs = (int*) malloc(sizeof(int)); + tok->idxs[0] = -1; + tok->nidxs = 1; + tok->idx = -2; + return; + } + + // TAG[integer] .. one field + char *end, *beg = tag_idx; + tok->idx = strtol(tag_idx, &end, 10); + if ( tok->idx >= 0 && *end==']' ) return; + + + // TAG[0,1] or TAG[0-2] or [1-] etc + int i, ibeg = -1; + while ( *beg && *beg!=']' ) + { + int idx = strtol(beg, &end, 10); + if ( end[0]==',' ) beg = end + 1; + else if ( end[0]==']' ) beg = end; + else if ( end[0]=='-' ) { beg = end + 1; ibeg = idx; continue; } + else error("Could not parse the index: %s[%s\n", tag, tag_idx+1); + if ( idx >= tok->nidxs ) + { + tok->idxs = (int*) realloc(tok->idxs, sizeof(int)*(idx+1)); + memset(tok->idxs + tok->nidxs, 0, sizeof(int)*(idx - tok->nidxs + 1)); + tok->nidxs = idx + 1; + } + if ( ibeg>=0 ) + { + for (i=ibeg; i<=idx; i++) tok->idxs[i] = 1; + ibeg = -1; + } + tok->idxs[idx] = 1; + } + if ( ibeg >=0 ) + { + if ( ibeg >= tok->nidxs ) + { + tok->idxs = (int*) realloc(tok->idxs, sizeof(int)*(ibeg+1)); + memset(tok->idxs + tok->nidxs, 0, sizeof(int)*(ibeg - tok->nidxs + 1)); + tok->nidxs = ibeg + 1; + } + tok->idxs[ibeg] = -1; + } + tok->idx = -2; +} +static int filters_init1(filter_t *filter, char *str, int len, token_t *tok) +{ + tok->tok_type = TOK_VAL; + tok->hdr_id = -1; + tok->pass_site = -1; + tok->idx = -1; + + // is this a string constant? + if ( str[0]=='"' || str[0]=='\'' ) + { + int quote = str[0]; + if ( str[len-1] != quote ) error("TODO: [%s]\n", filter->str); + tok->key = (char*) calloc(len-1,sizeof(char)); + hts_expand(double,1,tok->mvalues,tok->values); + tok->values[0] = len-2; + memcpy(tok->key,str+1,len-2); + tok->key[len-2] = 0; + tok->is_str = 1; + tok->nvalues = len-2; + if ( !strcmp(".",tok->key) ) tok->is_missing = 1; + return 0; + } + + // is it a file? + if ( str[0]=='@' ) + { + tok->tag = (char*) calloc(len+1,sizeof(char)); + memcpy(tok->tag,str,len); + tok->tag[len] = 0; + wordexp_t wexp; + wordexp(tok->tag+1, &wexp, 0); + if ( !wexp.we_wordc ) error("No such file: %s\n", tok->tag+1); + int i, n; + char **list = hts_readlist(wexp.we_wordv[0], 1, &n); + if ( !list ) error("Could not read: %s\n", wexp.we_wordv[0]); + wordfree(&wexp); + tok->hash = khash_str2int_init(); + for (i=0; ihash,list[i]) ) + khash_str2int_inc(tok->hash,list[i]); + else + free(list[i]); + } + free(list); + return 0; + } + + int is_fmt = -1; + if ( !strncasecmp(str,"FMT/",4) ) { str += 4; len -= 4; is_fmt = 1; } + else if ( !strncasecmp(str,"FORMAT/",7) ) { str += 7; len -= 7; is_fmt = 1; } + else + { + if ( !strncasecmp(str,"INFO/",5) ) { is_fmt = 0; str += 5; len -= 5; } + else if ( !strncasecmp(str,"QUAL",len) || !strncmp(str,"%QUAL",len) /* for backward compatibility */ ) + { + tok->setter = filters_set_qual; + tok->tag = strdup("QUAL"); + return 0; + } + else if ( !strncasecmp(str,"TYPE",len) || !strncmp(str,"%TYPE",len) /* for backward compatibility */ ) + { + tok->setter = filters_set_type; + tok->tag = strdup("TYPE"); + return 0; + } + else if ( !strncasecmp(str,"FILTER",len) || !strncmp(str,"%FILTER",len) /* for backward compatibility */ ) + { + tok->comparator = filters_cmp_filter; + tok->tag = strdup("FILTER"); + filter->max_unpack |= BCF_UN_FLT; + return 0; + } + else if ( !strncasecmp(str,"ID",len) || !strncasecmp(str,"%ID",len) /* for backward compatibility */ ) + { + tok->comparator = filters_cmp_id; + tok->tag = strdup("ID"); + return 0; + } + else if ( !strncasecmp(str,"POS",len) ) + { + tok->setter = &filters_set_pos; + tok->tag = strdup("POS"); + return 0; + } + else if ( !strncasecmp(str,"REF",len) ) + { + tok->setter = &filters_set_ref_string; + tok->is_str = 1; + tok->tag = strdup("REF"); + return 0; + } + else if ( !strncasecmp(str,"ALT",len) ) + { + tok->setter = &filters_set_alt_string; + tok->is_str = 1; + tok->tag = strdup("ALT"); + return 0; + } + else if ( !strncasecmp(str,"N_ALT",len) ) + { + tok->setter = &filters_set_nalt; + tok->tag = strdup("N_ALT"); + return 0; + } + else if ( !strncasecmp(str,"N_SAMPLES",len) ) + { + tok->tok_type = TOK_VAL; + tok->threshold = bcf_hdr_nsamples(filter->hdr); + return 0; + } + else if ( !strncasecmp(str,"N_MISSING",len) ) + { + tok->setter = &filters_set_nmissing; + tok->tag = strdup("N_MISSING"); + return 0; + } + else if ( !strncasecmp(str,"F_MISSING",len) ) + { + tok->setter = &filters_set_nmissing; + tok->tag = strdup("F_MISSING"); + return 0; + } + } + + // does it have array subscript? + int is_array = 0; + kstring_t tmp = {0,0,0}; + kputsn(str, len, &tmp); + if ( tmp.s[tmp.l-1] == ']' ) + { + int i; + for (i=0; ihdr_id = bcf_hdr_id2int(filter->hdr,BCF_DT_ID,tmp.s); + if ( is_fmt==-1 ) + { + if ( tok->hdr_id >=0 ) + { + if ( bcf_hdr_idinfo_exists(filter->hdr,BCF_HL_INFO,tok->hdr_id) ) is_fmt = 0; + else if ( bcf_hdr_idinfo_exists(filter->hdr,BCF_HL_FMT,tok->hdr_id) ) is_fmt = 1; + } + if ( is_fmt==-1 ) is_fmt = 0; + } + tok->type = is_fmt ? BCF_HL_FMT : BCF_HL_INFO; + if ( is_fmt ) filter->max_unpack |= BCF_UN_FMT; + if ( tok->hdr_id>=0 ) + { + if ( is_fmt && !strcmp("GT",tmp.s) ) + { + tok->setter = &filters_set_genotype_string; tok->is_str = 1; + } + else if ( is_fmt ) + { + if ( !bcf_hdr_idinfo_exists(filter->hdr,BCF_HL_FMT,tok->hdr_id) ) + error("No such FORMAT field: %s\n", tmp.s); + if ( bcf_hdr_id2number(filter->hdr,BCF_HL_FMT,tok->hdr_id)!=1 && !is_array ) + error("Error: FORMAT vectors must be subscripted, e.g. %s[0] or %s[*]\n", tmp.s, tmp.s); + switch ( bcf_hdr_id2type(filter->hdr,BCF_HL_FMT,tok->hdr_id) ) + { + case BCF_HT_INT: tok->setter = &filters_set_format_int; break; + case BCF_HT_REAL: tok->setter = &filters_set_format_float; break; + case BCF_HT_STR: tok->setter = &filters_set_format_string; tok->is_str = 1; break; + default: error("[%s:%d %s] FIXME\n", __FILE__,__LINE__,__FUNCTION__); + } + } + else if ( !bcf_hdr_idinfo_exists(filter->hdr,BCF_HL_INFO,tok->hdr_id) ) + error("No such INFO field: %s\n", tmp.s); + else + { + if ( bcf_hdr_id2type(filter->hdr,BCF_HL_INFO,tok->hdr_id) == BCF_HT_FLAG ) + tok->setter = filters_set_info_flag; + else + { + if ( bcf_hdr_id2type(filter->hdr,BCF_HL_INFO,tok->hdr_id) == BCF_HT_STR ) tok->is_str = 1; + if ( bcf_hdr_id2number(filter->hdr,BCF_HL_INFO,tok->hdr_id)==1 ) + tok->setter = filters_set_info; + else + { + switch ( bcf_hdr_id2type(filter->hdr,BCF_HL_INFO,tok->hdr_id) ) + { + case BCF_HT_INT: tok->setter = &filters_set_info_int; break; + case BCF_HT_REAL: tok->setter = &filters_set_info_float; break; + case BCF_HT_STR: tok->setter = &filters_set_info_string; tok->is_str = 1; break; + default: error("[%s:%d %s] FIXME\n", __FILE__,__LINE__,__FUNCTION__); + } + if (!is_array) + { + tok->idx = -2; + tok->idxs = (int*) malloc(sizeof(int)); + tok->idxs[0] = -1; + tok->nidxs = 1; + } + } + } + filter->max_unpack |= BCF_UN_INFO; + } + tok->tag = strdup(tmp.s); + if ( tmp.s ) free(tmp.s); + return 0; + } + else if ( !strcasecmp(tmp.s,"ALT") ) + { + tok->setter = &filters_set_alt_string; + tok->is_str = 1; + tok->tag = strdup(tmp.s); + free(tmp.s); + return 0; + } + else if ( !strcasecmp(tmp.s,"AN") ) + { + tok->setter = &filters_set_an; + tok->tag = strdup("AN"); + free(tmp.s); + return 0; + } + else if ( !strcasecmp(tmp.s,"AC") ) + { + tok->setter = &filters_set_ac; + tok->tag = strdup("AC"); + free(tmp.s); + return 0; + } + else if ( !strcasecmp(tmp.s,"MAC") ) + { + tok->setter = &filters_set_mac; + tok->tag = strdup("MAC"); + free(tmp.s); + return 0; + } + else if ( !strcasecmp(tmp.s,"AF") ) + { + tok->setter = &filters_set_af; + tok->tag = strdup("AF"); + free(tmp.s); + return 0; + } + else if ( !strcasecmp(tmp.s,"MAF") ) + { + tok->setter = &filters_set_maf; + tok->tag = strdup("MAF"); + free(tmp.s); + return 0; + } + + // is it a value? Here we parse as integer/float separately and use strtof + // rather than strtod, because the more accurate double representation + // would invalidate floating point comparisons like QUAL=59.2, obtained via + // htslib/vcf parser + char *end; + tok->threshold = strtol(tmp.s, &end, 10); // integer? + if ( end - tmp.s != strlen(tmp.s) ) + { + errno = 0; + tok->threshold = strtof(tmp.s, &end); // float? + if ( errno!=0 || end!=tmp.s+len ) error("[%s:%d %s] Error: the tag \"INFO/%s\" is not defined in the VCF header\n", __FILE__,__LINE__,__FUNCTION__,tmp.s); + } + + if ( tmp.s ) free(tmp.s); + return 0; +} + + +static void filter_debug_print(token_t *toks, token_t **tok_ptrs, int ntoks) +{ + int i; + for (i=0; itok_type==TOK_VAL ) + { + if ( tok->key ) + fprintf(bcftools_stderr,"%s", tok->key); + else if ( tok->tag ) + fprintf(bcftools_stderr,"%s", tok->tag); + else + fprintf(bcftools_stderr,"%e", tok->threshold); + } + else + fprintf(bcftools_stderr,"%c", TOKEN_STRING[tok->tok_type]); + if ( tok->setter ) fprintf(bcftools_stderr,"\t[setter %p]", tok->setter); + fprintf(bcftools_stderr,"\n"); + } +} + +static void str_to_lower(char *str) +{ + while ( *str ) { *str = tolower(*str); str++; } +} + + +// Parse filter expression and convert to reverse polish notation. Dijkstra's shunting-yard algorithm +filter_t *filter_init(bcf_hdr_t *hdr, const char *str) +{ + filter_t *filter = (filter_t *) calloc(1,sizeof(filter_t)); + filter->str = strdup(str); + filter->hdr = hdr; + filter->max_unpack |= BCF_UN_STR; + + int nops = 0, mops = 0, *ops = NULL; // operators stack + int nout = 0, mout = 0; // filter tokens, RPN + token_t *out = NULL; + char *tmp = filter->str; + int last_op = -1; + while ( *tmp ) + { + int len, ret; + ret = filters_next_token(&tmp, &len); + if ( ret==-1 ) error("Missing quotes in: %s\n", str); + + // fprintf(bcftools_stderr,"token=[%c] .. [%s] %d\n", TOKEN_STRING[ret], tmp, len); + // int i; for (i=0; i0 && ops[nops-1]!=TOK_LFT ) + { + nout++; + hts_expand0(token_t, nout, mout, out); + out[nout-1].tok_type = ops[nops-1]; + nops--; + } + if ( nops<=0 ) error("Could not parse: %s\n", str); + nops--; + } + else if ( ret!=TOK_VAL ) // one of the operators + { + // detect unary minus: replace -value with -1*(value) + if ( ret==TOK_SUB && last_op!=TOK_VAL && last_op!=TOK_RGT ) + { + nout++; + hts_expand0(token_t, nout, mout, out); + token_t *tok = &out[nout-1]; + tok->tok_type = TOK_VAL; + tok->hdr_id = -1; + tok->pass_site = -1; + tok->threshold = -1.0; + ret = TOK_MULT; + } + else + { + while ( nops>0 && op_prec[ret] < op_prec[ops[nops-1]] ) + { + nout++; + hts_expand0(token_t, nout, mout, out); + out[nout-1].tok_type = ops[nops-1]; + nops--; + } + } + nops++; + hts_expand(int, nops, mops, ops); + ops[nops-1] = ret; + } + else if ( !len ) + { + if ( *tmp && !isspace(*tmp) ) error("Could not parse the expression: [%s]\n", str); + break; // all tokens read + } + else // annotation name or filtering value + { + nout++; + hts_expand0(token_t, nout, mout, out); + filters_init1(filter, tmp, len, &out[nout-1]); + tmp += len; + } + last_op = ret; + } + while ( nops>0 ) + { + if ( ops[nops-1]==TOK_LFT || ops[nops-1]==TOK_RGT ) error("Could not parse the expression: [%s]\n", filter->str); + nout++; + hts_expand0(token_t, nout, mout, out); + out[nout-1].tok_type = ops[nops-1]; + nops--; + } + + // In the special cases of TYPE and FILTER the BCF header IDs are yet unknown. Walk through the + // list of operators and convert the strings (e.g. "PASS") to BCF ids. The string value token must be + // just before or after the FILTER token and they must be followed with a comparison operator. + // At this point we also initialize regex expressions which, in RPN, must preceed the LIKE/NLIKE operator. + // Additionally, treat "." as missing value rather than a string in numeric equalities. + // This code is fragile: improve me. + int i; + for (i=0; i0 && out[j].is_str && out[j].key && !strcmp(".",out[j].key) ) + { + int type = bcf_hdr_id2type(filter->hdr,out[k].type,out[k].hdr_id); + if ( type==BCF_HT_INT ) { out[j].is_str = 0; out[j].is_missing = 1; bcf_double_set_missing(out[j].values[0]); } + if ( type==BCF_HT_REAL ) { out[j].is_str = 0; out[j].is_missing = 1; bcf_double_set_missing(out[j].values[0]); } + } + } + if ( out[i].tok_type==TOK_LIKE || out[i].tok_type==TOK_NLIKE ) + { + int j = i-1; + if ( !out[j].key ) + error("Could not parse the expression, wrong value for regex operator: %s\n", filter->str); + out[j].regex = (regex_t *) malloc(sizeof(regex_t)); + int cflags = REG_NOSUB; + int len = strlen(out[j].key); + if ( len>2 && out[j].key[len-1]=='i' && out[j].key[len-2]=='/' && out[j].key[len-3]!='\\' ) + { + out[j].key[len-2] = 0; + cflags |= REG_ICASE; + } + if ( regcomp(out[j].regex, out[j].key, cflags) ) + error("Could not compile the regex expression \"%s\": %s\n", out[j].key,filter->str); + } + if ( out[i].tok_type!=TOK_VAL ) continue; + if ( !out[i].tag ) continue; + if ( !strcmp(out[i].tag,"TYPE") ) + { + if ( i+1==nout ) error("Could not parse the expression: %s\n", filter->str); + int itok, ival; + if ( out[i+1].tok_type==TOK_EQ || out[i+1].tok_type==TOK_NE ) ival = i - 1, itok = i + 1; + else if ( out[i+1].tok_type==TOK_LIKE || out[i+1].tok_type==TOK_NLIKE ) ival = i - 1, itok = i + 1; + else if ( out[i+2].tok_type==TOK_EQ || out[i+2].tok_type==TOK_NE ) itok = i + 2, ival = i + 1; + else if ( out[i+2].tok_type==TOK_LIKE || out[i+2].tok_type==TOK_NLIKE ) itok = i + 2, ival = i + 1; + else error("[%s:%d %s] Could not parse the expression: %s\n", __FILE__,__LINE__,__FUNCTION__, filter->str); + if ( !strcasecmp(out[ival].key,"snp") || !strcasecmp(out[ival].key,"snps") ) { out[ival].threshold = VCF_SNP<<1; out[ival].is_str = 0; } + else if ( !strcasecmp(out[ival].key,"indel") || !strcasecmp(out[ival].key,"indels") ) { out[ival].threshold = VCF_INDEL<<1; out[ival].is_str = 0; } + else if ( !strcasecmp(out[ival].key,"mnp") || !strcasecmp(out[ival].key,"mnps") ) { out[ival].threshold = VCF_MNP<<1; out[ival].is_str = 0; } + else if ( !strcasecmp(out[ival].key,"other") ) { out[ival].threshold = VCF_OTHER<<1; out[ival].is_str = 0; } + else if ( !strcasecmp(out[ival].key,"bnd") ) { out[ival].threshold = VCF_BND<<1; out[ival].is_str = 0; } + else if ( !strcasecmp(out[ival].key,"ref") ) { out[ival].threshold = 1; out[ival].is_str = 0; } + else error("The type \"%s\" not recognised: %s\n", out[ival].key, filter->str); + if ( out[itok].tok_type==TOK_LIKE || out[itok].tok_type==TOK_NLIKE ) out[itok].comparator = filters_cmp_bit_and; + out[ival].tag = out[ival].key; out[ival].key = NULL; + i = itok; + continue; + } + if ( !strcmp(out[i].tag,"GT") ) + { + if ( i+1==nout ) error("Could not parse the expression: %s\n", filter->str); + int ival; + if ( out[i+1].tok_type==TOK_EQ || out[i+1].tok_type==TOK_NE ) ival = i - 1; + else if ( out[i+1].tok_type==TOK_LIKE || out[i+1].tok_type==TOK_NLIKE ) ival = i - 1; + else if ( out[i+2].tok_type==TOK_EQ || out[i+2].tok_type==TOK_NE ) ival = i + 1; + else if ( out[i+2].tok_type==TOK_LIKE || out[i+2].tok_type==TOK_NLIKE ) ival = i + 1; + else error("[%s:%d %s] Could not parse the expression: %s\n", __FILE__,__LINE__,__FUNCTION__, filter->str); + + // assign correct setters and unify expressions, eg ar->ra, HOM->hom, etc + if ( !strcasecmp(out[ival].key,"hom") ) { out[i].setter = filters_set_genotype3; str_to_lower(out[ival].key); } + else if ( !strcasecmp(out[ival].key,"het") ) { out[i].setter = filters_set_genotype3; str_to_lower(out[ival].key); } + else if ( !strcasecmp(out[ival].key,"hap") ) { out[i].setter = filters_set_genotype3; str_to_lower(out[ival].key); } + else if ( !strcasecmp(out[ival].key,"rr") ) { out[i].setter = filters_set_genotype2; str_to_lower(out[ival].key); } + else if ( !strcasecmp(out[ival].key,"ra") || !strcasecmp(out[ival].key,"ar") ) { out[i].setter = filters_set_genotype2; out[ival].key[0]='r'; out[ival].key[1]='a'; } // ra + else if ( !strcmp(out[ival].key,"aA") || !strcmp(out[ival].key,"Aa") ) { out[i].setter = filters_set_genotype2; out[ival].key[0]='a'; out[ival].key[1]='A'; } // aA + else if ( !strcasecmp(out[ival].key,"aa") ) { out[i].setter = filters_set_genotype2; out[ival].key[0]='a'; out[ival].key[1]='a'; } // aa + else if ( !strcasecmp(out[ival].key,"a") ) { out[i].setter = filters_set_genotype2; out[ival].key[0]='a'; out[ival].key[1]=0; } // a + else if ( !strcasecmp(out[ival].key,"r") ) { out[i].setter = filters_set_genotype2; out[ival].key[0]='r'; out[ival].key[1]=0; } // r + continue; + } + if ( !strcmp(out[i].tag,"FILTER") ) + { + if ( i+1==nout ) error("Could not parse the expression: %s\n", filter->str); + int itok = i, ival; + if ( out[i+1].tok_type==TOK_EQ || out[i+1].tok_type==TOK_NE ) ival = i - 1; + else if ( out[i+1].tok_type==TOK_LIKE ) out[i+1].tok_type = TOK_EQ, ival = i - 1; + else if ( out[i+1].tok_type==TOK_NLIKE ) out[i+1].tok_type = TOK_NE, ival = i - 1; + else if ( out[i+2].tok_type==TOK_EQ || out[i+2].tok_type==TOK_NE ) ival = ++i; + else if ( out[i+2].tok_type==TOK_LIKE ) out[i+2].tok_type = TOK_EQ, ival = ++i; + else if ( out[i+2].tok_type==TOK_NLIKE ) out[i+2].tok_type = TOK_NE, ival = ++i; + else error("[%s:%d %s] Could not parse the expression: %s\n", __FILE__,__LINE__,__FUNCTION__, filter->str); + if ( out[ival].tok_type!=TOK_VAL || !out[ival].key ) + error("[%s:%d %s] Could not parse the expression, an unquoted string value perhaps? %s\n", __FILE__,__LINE__,__FUNCTION__, filter->str); + if ( strcmp(".",out[ival].key) ) + { + out[ival].hdr_id = bcf_hdr_id2int(filter->hdr, BCF_DT_ID, out[ival].key); + if ( !bcf_hdr_idinfo_exists(filter->hdr,BCF_HL_FLT,out[ival].hdr_id) ) + error("The filter \"%s\" not present in the VCF header\n", out[ival].key); + } + else + out[ival].hdr_id = -1; + out[ival].tag = out[ival].key; out[ival].key = NULL; + out[itok].hdr_id = out[ival].hdr_id; + continue; + } + } + filter->nsamples = filter->max_unpack&BCF_UN_FMT ? bcf_hdr_nsamples(filter->hdr) : 0; + for (i=0; insamples ) + { + out[i].pass_samples = (uint8_t*)malloc(filter->nsamples); + int j; + for (j=0; jnsamples; j++) out[i].pass_samples[j] = 1; + } + } + + if (0) filter_debug_print(out, NULL, nout); + + if ( mops ) free(ops); + filter->filters = out; + filter->nfilters = nout; + filter->flt_stack = (token_t **)malloc(sizeof(token_t*)*nout); + return filter; +} + +void filter_destroy(filter_t *filter) +{ + int i; + for (i=0; infilters; i++) + { + if ( filter->filters[i].key ) free(filter->filters[i].key); + free(filter->filters[i].str_value.s); + free(filter->filters[i].tag); + free(filter->filters[i].idxs); + free(filter->filters[i].values); + free(filter->filters[i].pass_samples); + if (filter->filters[i].hash) khash_str2int_destroy_free(filter->filters[i].hash); + if (filter->filters[i].regex) + { + regfree(filter->filters[i].regex); + free(filter->filters[i].regex); + } + } + free(filter->filters); + free(filter->flt_stack); + free(filter->str); + free(filter->tmpi); + free(filter->tmpf); + free(filter->tmps.s); + free(filter); +} + +int filter_test(filter_t *filter, bcf1_t *line, const uint8_t **samples) +{ + bcf_unpack(line, filter->max_unpack); + + int i, nstack = 0; + for (i=0; infilters; i++) + { + filter->filters[i].nsamples = 0; + filter->filters[i].nvalues = 0; + filter->filters[i].pass_site = -1; + + if ( filter->filters[i].tok_type == TOK_VAL ) + { + if ( filter->filters[i].setter ) // variable, query the VCF line + filter->filters[i].setter(filter, line, &filter->filters[i]); + else if ( filter->filters[i].key ) // string constant + { + filter->filters[i].str_value.l = 0; + kputs(filter->filters[i].key, &filter->filters[i].str_value); + filter->filters[i].nvalues = filter->filters[i].str_value.l; + } + else // numeric constant + { + filter->filters[i].values[0] = filter->filters[i].threshold; + filter->filters[i].nvalues = 1; + } + filter->flt_stack[nstack++] = &filter->filters[i]; + continue; + } + else if ( filter->filters[i].tok_type == TOK_FUNC ) // all functions take only one argument + { + filter->filters[i].setter(filter, line, filter->flt_stack[nstack-1]); + continue; + } + if ( nstack<2 ) + error("Error occurred while processing the filter \"%s\" (1:%d)\n", filter->str,nstack); // too few values left on the stack + + int is_str = filter->flt_stack[nstack-1]->is_str + filter->flt_stack[nstack-2]->is_str; + + if ( filter->filters[i].tok_type == TOK_OR || filter->filters[i].tok_type == TOK_OR_VEC ) + { + if ( filter->flt_stack[nstack-1]->pass_site<0 || filter->flt_stack[nstack-2]->pass_site<0 ) + error("Error occurred while processing the filter \"%s\" (%d %d OR)\n", filter->str,filter->flt_stack[nstack-2]->pass_site,filter->flt_stack[nstack-1]->pass_site); + filter->flt_stack[nstack-2]->pass_site = vector_logic_or(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1], filter->filters[i].tok_type); + nstack--; + continue; + } + if ( filter->filters[i].tok_type == TOK_AND || filter->filters[i].tok_type == TOK_AND_VEC ) + { + if ( filter->flt_stack[nstack-1]->pass_site<0 || filter->flt_stack[nstack-2]->pass_site<0 ) + error("Error occurred while processing the filter \"%s\" (%d %d AND)\n", filter->str,filter->flt_stack[nstack-2]->pass_site,filter->flt_stack[nstack-1]->pass_site); + filter->flt_stack[nstack-2]->pass_site = vector_logic_and(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1], filter->filters[i].tok_type); + nstack--; + continue; + } + + if ( filter->filters[i].tok_type == TOK_ADD ) + { + VECTOR_ARITHMETICS(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],+); + nstack--; + continue; + } + else if ( filter->filters[i].tok_type == TOK_SUB ) + { + VECTOR_ARITHMETICS(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],-); + nstack--; + continue; + } + else if ( filter->filters[i].tok_type == TOK_MULT ) + { + VECTOR_ARITHMETICS(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],*); + nstack--; + continue; + } + else if ( filter->filters[i].tok_type == TOK_DIV ) + { + VECTOR_ARITHMETICS(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],/); + nstack--; + continue; + } + + int is_true = 0; + if ( filter->filters[i].comparator ) + is_true = filter->filters[i].comparator(filter->flt_stack[nstack-1],filter->flt_stack[nstack-2],filter->filters[i].tok_type,line); + else if ( !filter->flt_stack[nstack-1]->nvalues || !filter->flt_stack[nstack-2]->nvalues ) + { + int skip = 0; + if ( !filter->flt_stack[nstack-2]->is_missing && !filter->flt_stack[nstack-1]->is_missing ) skip = 1; + if ( filter->filters[i].tok_type != TOK_EQ && filter->filters[i].tok_type != TOK_NE ) skip = 1; + + if ( skip ) + filter->flt_stack[nstack-2]->nvalues = filter->flt_stack[nstack-2]->nsamples = 0; + else if ( filter->filters[i].tok_type == TOK_EQ ) + CMP_MISSING(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],==,is_true) + else if ( filter->filters[i].tok_type == TOK_NE ) + CMP_MISSING(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],!=,is_true) + } + else if ( filter->filters[i].tok_type == TOK_EQ ) + { + if ( filter->flt_stack[nstack-1]->comparator ) + is_true = filter->flt_stack[nstack-1]->comparator(filter->flt_stack[nstack-1],filter->flt_stack[nstack-2],TOK_EQ,line); + else if ( filter->flt_stack[nstack-2]->comparator ) + is_true = filter->flt_stack[nstack-2]->comparator(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],TOK_EQ,line); + else if ( is_str==2 ) // both are strings + is_true = cmp_vector_strings(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],TOK_EQ); + else if ( is_str==1 ) + error("Comparing string to numeric value: %s\n", filter->str); + else + CMP_VECTORS(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],==,is_true); + } + else if ( filter->filters[i].tok_type == TOK_NE ) + { + if ( filter->flt_stack[nstack-1]->comparator ) + is_true = filter->flt_stack[nstack-1]->comparator(filter->flt_stack[nstack-1],filter->flt_stack[nstack-2],TOK_NE,line); + else if ( filter->flt_stack[nstack-2]->comparator ) + is_true = filter->flt_stack[nstack-2]->comparator(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],TOK_NE,line); + else if ( is_str==2 ) + is_true = cmp_vector_strings(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],TOK_NE); + else if ( is_str==1 ) + error("Comparing string to numeric value: %s\n", filter->str); + else + CMP_VECTORS(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],!=,is_true); + } + else if ( filter->filters[i].tok_type == TOK_LIKE || filter->filters[i].tok_type == TOK_NLIKE ) + { + if ( is_str==2 ) + is_true = regex_vector_strings(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1], filter->filters[i].tok_type == TOK_LIKE ? 0 : 1); + else + error("The regex operator can be used on strings only: %s\n", filter->str); + } + else if ( is_str>0 ) + error("Wrong operator in string comparison: %s [%s,%s]\n", filter->str, filter->flt_stack[nstack-1]->str_value, filter->flt_stack[nstack-2]->str_value); + else if ( filter->filters[i].tok_type == TOK_LE ) + CMP_VECTORS(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],<=,is_true) + else if ( filter->filters[i].tok_type == TOK_LT ) + CMP_VECTORS(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],<,is_true) + else if ( filter->filters[i].tok_type == TOK_BT ) + CMP_VECTORS(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],>,is_true) + else if ( filter->filters[i].tok_type == TOK_BE ) + CMP_VECTORS(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],>=,is_true) + else + error("FIXME: did not expect this .. tok_type %d = %d\n", i, filter->filters[i].tok_type); + + filter->flt_stack[nstack-2]->pass_site = is_true; + nstack--; + } + if ( nstack>1 ) error("Error occurred while processing the filter \"%s\" (2:%d)\n", filter->str,nstack); // too few values left on the stack + if ( samples ) + { + *samples = filter->max_unpack&BCF_UN_FMT ? filter->flt_stack[0]->pass_samples : NULL; + if ( *samples && !filter->flt_stack[0]->nsamples ) + { + for (i=0; insamples; i++) + filter->flt_stack[0]->pass_samples[i] = filter->flt_stack[0]->pass_site; + } + } + return filter->flt_stack[0]->pass_site; +} + +int filter_max_unpack(filter_t *flt) +{ + return flt->max_unpack; +} diff --git a/bcftools/filter.h b/bcftools/filter.h new file mode 100644 index 0000000..ccd3fe3 --- /dev/null +++ b/bcftools/filter.h @@ -0,0 +1,52 @@ +/* filter.h -- filter expressions. + + Copyright (C) 2013-2014 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#ifndef __FILTER_H__ +#define __FILTER_H__ + +#include + +typedef struct _filter_t filter_t; + +/** + * @hdr: BCF header file + * @str: see the bcftools filter command help for description + */ +filter_t *filter_init(bcf_hdr_t *hdr, const char *str); + +void filter_destroy(filter_t *filter); + +/** + * filter_test() - test whether the BCF record passes the test + * @samples: if not NULL, a pointer to an array with samples statuses is + * stored in the location referenced by @samples. The pointer + * will be set to NULL if the FORMAT fields were not queried. + * Returns 1 if the expression is true and 0 if false. + */ +int filter_test(filter_t *filter, bcf1_t *rec, const uint8_t **samples); + +void filter_expression_info(FILE *fp); +int filter_max_unpack(filter_t *filter); + +#endif diff --git a/bcftools/gvcf.c b/bcftools/gvcf.c new file mode 100644 index 0000000..b82d658 --- /dev/null +++ b/bcftools/gvcf.c @@ -0,0 +1,227 @@ +/* gvcf.c -- support for gVCF files. + + Copyright (C) 2014-2015 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include "gvcf.h" +#include "bcftools.h" + +struct _gvcf_t +{ + int *dp_range, ndp_range; // per-sample DP ranges + int prev_range; // 0 if not in a block + int32_t *dp, mdp, *pl, mpl, npl; + int32_t *tmp, mtmp, *gts, ngts,mgts, nqsum,mqsum; + float *qsum; + int32_t rid, start, end, min_dp; + kstring_t als; + bcf1_t *line; +}; + +void gvcf_update_header(gvcf_t *gvcf, bcf_hdr_t *hdr) +{ + bcf_hdr_append(hdr,"##INFO="); + bcf_hdr_append(hdr,"##INFO="); +} + +gvcf_t *gvcf_init(const char *dp_ranges) +{ + gvcf_t *gvcf = (gvcf_t*) calloc(1,sizeof(gvcf_t)); + gvcf->line = bcf_init(); + + int n = 1; + const char *ss = dp_ranges; + while ( *ss ) + { + if ( *ss==',' ) n++; + ss++; + } + gvcf->ndp_range = n; + gvcf->dp_range = (int*) malloc(sizeof(int)*gvcf->ndp_range); + + n = 0; + ss = dp_ranges; + while ( *ss ) + { + char *se = (char*) ss; + gvcf->dp_range[n++] = strtol(ss,&se,10); + if ( se==ss ) return NULL; + if ( *se==',' && se[1] ) { ss = se+1; continue; } + else if ( !*se ) break; + return NULL; + } + return gvcf; +} + +void gvcf_destroy(gvcf_t *gvcf) +{ + free(gvcf->dp_range); + free(gvcf->dp); + free(gvcf->pl); + free(gvcf->tmp); + free(gvcf->qsum); + free(gvcf->gts); + free(gvcf->als.s); + if ( gvcf->line ) bcf_destroy(gvcf->line); + free(gvcf); +} + +bcf1_t *gvcf_write(gvcf_t *gvcf, htsFile *fh, bcf_hdr_t *hdr, bcf1_t *rec, int is_ref) +{ + int i, ret, nsmpl = bcf_hdr_nsamples(hdr); + int can_collapse = is_ref ? 1 : 0; + int32_t dp_range = 0, min_dp = 0; + + // No record and nothing to flush? + if ( !rec && !gvcf->prev_range ) return NULL; + + // Flush gVCF block if there are no more records, chr changed, a gap + // encountered, or other conditions not met (block broken by a non-ref or DP too low). + int needs_flush = can_collapse ? 0 : 1; + + + // Can the record be included in a gVCF block? That is, is this a ref-only site? + if ( rec && can_collapse ) + { + bcf_unpack(rec, BCF_UN_ALL); + + // per-sample depth + ret = bcf_get_format_int32(hdr, rec, "DP", &gvcf->tmp, &gvcf->mtmp); + if ( ret==nsmpl ) + { + min_dp = gvcf->tmp[0]; + for (i=1; i gvcf->tmp[i] ) min_dp = gvcf->tmp[i]; + + for (i=0; indp_range; i++) + if ( min_dp < gvcf->dp_range[i] ) break; + + dp_range = i; + if ( !dp_range ) + { + // leave the record unchanged, DP is too small. Alternatively, return NULL here + // to skip these sites + needs_flush = 1; + can_collapse = 0; + } + } + else + needs_flush = 1; // DP field not present + } + + if ( gvcf->prev_range && gvcf->prev_range!=dp_range ) needs_flush = 1; + if ( !rec || gvcf->rid!=rec->rid || rec->pos > gvcf->end+1 ) needs_flush = 1; + + // If prev_range is set, something can be flushed + if ( gvcf->prev_range && needs_flush ) + { + // mpileup can output two records with the same position, SNP and + // indel. Make sure the end position does not include the non-variant + // SNP position just before the indel. + if ( rec && rec->rid==gvcf->rid && rec->pos==gvcf->end ) gvcf->end--; + + gvcf->end++; // from 0-based to 1-based coordinate + + bcf_clear1(gvcf->line); + gvcf->line->rid = gvcf->rid; + gvcf->line->pos = gvcf->start; + gvcf->line->rlen = gvcf->end - gvcf->start; + bcf_update_alleles_str(hdr, gvcf->line, gvcf->als.s); + if ( gvcf->start+1 < gvcf->end ) // create gVCF record only if it spans at least two sites + bcf_update_info_int32(hdr, gvcf->line, "END", &gvcf->end, 1); + bcf_update_info_int32(hdr, gvcf->line, "MinDP", &gvcf->min_dp, 1); + if ( gvcf->nqsum>0 ) + bcf_update_info_float(hdr, gvcf->line, "QS", gvcf->qsum, gvcf->nqsum); + if ( gvcf->ngts ) + bcf_update_genotypes(hdr,gvcf->line,gvcf->gts,gvcf->ngts); + if ( gvcf->npl>0 ) + bcf_update_format_int32(hdr, gvcf->line, "PL", gvcf->pl, gvcf->npl); + bcf_update_format_int32(hdr, gvcf->line, "DP", gvcf->dp, nsmpl); + bcf_write1(fh, hdr, gvcf->line); + gvcf->prev_range = 0; + gvcf->rid = -1; + gvcf->npl = 0; + gvcf->nqsum = 0; + gvcf->ngts = 0; + + if ( !rec ) return NULL; // just flushing the buffer, this was last record + } + + if ( can_collapse ) + { + if ( !gvcf->prev_range ) + { + hts_expand(int32_t,nsmpl,gvcf->mdp,gvcf->dp); + memcpy(gvcf->dp,gvcf->tmp,nsmpl*sizeof(int32_t)); // tmp still contains DP from rec + gvcf->npl = bcf_get_format_int32(hdr, rec, "PL", &gvcf->pl, &gvcf->mpl); + + gvcf->nqsum = bcf_get_info_float(hdr,rec,"QS",&gvcf->qsum,&gvcf->mqsum); + gvcf->ngts = bcf_get_genotypes(hdr,rec,&gvcf->gts,&gvcf->mgts); + + gvcf->rid = rec->rid; + gvcf->start = rec->pos; + gvcf->als.l = 0; + kputs(rec->d.allele[0],&gvcf->als); + for (i=1; in_allele; i++) + { + kputc(',',&gvcf->als); + kputs(rec->d.allele[i],&gvcf->als); + } + gvcf->min_dp = min_dp; + } + else + { + if ( gvcf->min_dp > min_dp ) gvcf->min_dp = min_dp; + for (i=0; idp[i] > gvcf->tmp[i] ) gvcf->dp[i] = gvcf->tmp[i]; + ret = bcf_get_format_int32(hdr, rec, "PL", &gvcf->tmp, &gvcf->mtmp); + if ( ret>=0 ) + { + if ( ret!=nsmpl*3 ) error("Unexpected number of PL fields\n"); + for (i=0; ipl[3*i+1] > gvcf->tmp[3*i+1] ) + { + gvcf->pl[3*i+1] = gvcf->tmp[3*i+1]; + gvcf->pl[3*i+2] = gvcf->tmp[3*i+2]; + } + else if ( gvcf->pl[3*i+1]==gvcf->tmp[3*i+1] && gvcf->pl[3*i+2] > gvcf->tmp[3*i+2] ) + gvcf->pl[3*i+2] = gvcf->tmp[3*i+2]; + } + } + else + gvcf->npl = 0; + } + gvcf->prev_range = dp_range; + if ( bcf_get_info_int32(hdr,rec,"END",&gvcf->tmp,&gvcf->mtmp)==1 ) + gvcf->end = gvcf->tmp[0] - 1; // from 1-based to 0-based + else + gvcf->end = rec->pos; + return NULL; + } + + if ( is_ref && min_dp ) + bcf_update_info_int32(hdr, rec, "MinDP", &min_dp, 1); + + return rec; +} + diff --git a/bcftools/gvcf.c.pysam.c b/bcftools/gvcf.c.pysam.c new file mode 100644 index 0000000..8fbfe3c --- /dev/null +++ b/bcftools/gvcf.c.pysam.c @@ -0,0 +1,229 @@ +#include "bcftools.pysam.h" + +/* gvcf.c -- support for gVCF files. + + Copyright (C) 2014-2015 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include "gvcf.h" +#include "bcftools.h" + +struct _gvcf_t +{ + int *dp_range, ndp_range; // per-sample DP ranges + int prev_range; // 0 if not in a block + int32_t *dp, mdp, *pl, mpl, npl; + int32_t *tmp, mtmp, *gts, ngts,mgts, nqsum,mqsum; + float *qsum; + int32_t rid, start, end, min_dp; + kstring_t als; + bcf1_t *line; +}; + +void gvcf_update_header(gvcf_t *gvcf, bcf_hdr_t *hdr) +{ + bcf_hdr_append(hdr,"##INFO="); + bcf_hdr_append(hdr,"##INFO="); +} + +gvcf_t *gvcf_init(const char *dp_ranges) +{ + gvcf_t *gvcf = (gvcf_t*) calloc(1,sizeof(gvcf_t)); + gvcf->line = bcf_init(); + + int n = 1; + const char *ss = dp_ranges; + while ( *ss ) + { + if ( *ss==',' ) n++; + ss++; + } + gvcf->ndp_range = n; + gvcf->dp_range = (int*) malloc(sizeof(int)*gvcf->ndp_range); + + n = 0; + ss = dp_ranges; + while ( *ss ) + { + char *se = (char*) ss; + gvcf->dp_range[n++] = strtol(ss,&se,10); + if ( se==ss ) return NULL; + if ( *se==',' && se[1] ) { ss = se+1; continue; } + else if ( !*se ) break; + return NULL; + } + return gvcf; +} + +void gvcf_destroy(gvcf_t *gvcf) +{ + free(gvcf->dp_range); + free(gvcf->dp); + free(gvcf->pl); + free(gvcf->tmp); + free(gvcf->qsum); + free(gvcf->gts); + free(gvcf->als.s); + if ( gvcf->line ) bcf_destroy(gvcf->line); + free(gvcf); +} + +bcf1_t *gvcf_write(gvcf_t *gvcf, htsFile *fh, bcf_hdr_t *hdr, bcf1_t *rec, int is_ref) +{ + int i, ret, nsmpl = bcf_hdr_nsamples(hdr); + int can_collapse = is_ref ? 1 : 0; + int32_t dp_range = 0, min_dp = 0; + + // No record and nothing to flush? + if ( !rec && !gvcf->prev_range ) return NULL; + + // Flush gVCF block if there are no more records, chr changed, a gap + // encountered, or other conditions not met (block broken by a non-ref or DP too low). + int needs_flush = can_collapse ? 0 : 1; + + + // Can the record be included in a gVCF block? That is, is this a ref-only site? + if ( rec && can_collapse ) + { + bcf_unpack(rec, BCF_UN_ALL); + + // per-sample depth + ret = bcf_get_format_int32(hdr, rec, "DP", &gvcf->tmp, &gvcf->mtmp); + if ( ret==nsmpl ) + { + min_dp = gvcf->tmp[0]; + for (i=1; i gvcf->tmp[i] ) min_dp = gvcf->tmp[i]; + + for (i=0; indp_range; i++) + if ( min_dp < gvcf->dp_range[i] ) break; + + dp_range = i; + if ( !dp_range ) + { + // leave the record unchanged, DP is too small. Alternatively, return NULL here + // to skip these sites + needs_flush = 1; + can_collapse = 0; + } + } + else + needs_flush = 1; // DP field not present + } + + if ( gvcf->prev_range && gvcf->prev_range!=dp_range ) needs_flush = 1; + if ( !rec || gvcf->rid!=rec->rid || rec->pos > gvcf->end+1 ) needs_flush = 1; + + // If prev_range is set, something can be flushed + if ( gvcf->prev_range && needs_flush ) + { + // mpileup can output two records with the same position, SNP and + // indel. Make sure the end position does not include the non-variant + // SNP position just before the indel. + if ( rec && rec->rid==gvcf->rid && rec->pos==gvcf->end ) gvcf->end--; + + gvcf->end++; // from 0-based to 1-based coordinate + + bcf_clear1(gvcf->line); + gvcf->line->rid = gvcf->rid; + gvcf->line->pos = gvcf->start; + gvcf->line->rlen = gvcf->end - gvcf->start; + bcf_update_alleles_str(hdr, gvcf->line, gvcf->als.s); + if ( gvcf->start+1 < gvcf->end ) // create gVCF record only if it spans at least two sites + bcf_update_info_int32(hdr, gvcf->line, "END", &gvcf->end, 1); + bcf_update_info_int32(hdr, gvcf->line, "MinDP", &gvcf->min_dp, 1); + if ( gvcf->nqsum>0 ) + bcf_update_info_float(hdr, gvcf->line, "QS", gvcf->qsum, gvcf->nqsum); + if ( gvcf->ngts ) + bcf_update_genotypes(hdr,gvcf->line,gvcf->gts,gvcf->ngts); + if ( gvcf->npl>0 ) + bcf_update_format_int32(hdr, gvcf->line, "PL", gvcf->pl, gvcf->npl); + bcf_update_format_int32(hdr, gvcf->line, "DP", gvcf->dp, nsmpl); + bcf_write1(fh, hdr, gvcf->line); + gvcf->prev_range = 0; + gvcf->rid = -1; + gvcf->npl = 0; + gvcf->nqsum = 0; + gvcf->ngts = 0; + + if ( !rec ) return NULL; // just flushing the buffer, this was last record + } + + if ( can_collapse ) + { + if ( !gvcf->prev_range ) + { + hts_expand(int32_t,nsmpl,gvcf->mdp,gvcf->dp); + memcpy(gvcf->dp,gvcf->tmp,nsmpl*sizeof(int32_t)); // tmp still contains DP from rec + gvcf->npl = bcf_get_format_int32(hdr, rec, "PL", &gvcf->pl, &gvcf->mpl); + + gvcf->nqsum = bcf_get_info_float(hdr,rec,"QS",&gvcf->qsum,&gvcf->mqsum); + gvcf->ngts = bcf_get_genotypes(hdr,rec,&gvcf->gts,&gvcf->mgts); + + gvcf->rid = rec->rid; + gvcf->start = rec->pos; + gvcf->als.l = 0; + kputs(rec->d.allele[0],&gvcf->als); + for (i=1; in_allele; i++) + { + kputc(',',&gvcf->als); + kputs(rec->d.allele[i],&gvcf->als); + } + gvcf->min_dp = min_dp; + } + else + { + if ( gvcf->min_dp > min_dp ) gvcf->min_dp = min_dp; + for (i=0; idp[i] > gvcf->tmp[i] ) gvcf->dp[i] = gvcf->tmp[i]; + ret = bcf_get_format_int32(hdr, rec, "PL", &gvcf->tmp, &gvcf->mtmp); + if ( ret>=0 ) + { + if ( ret!=nsmpl*3 ) error("Unexpected number of PL fields\n"); + for (i=0; ipl[3*i+1] > gvcf->tmp[3*i+1] ) + { + gvcf->pl[3*i+1] = gvcf->tmp[3*i+1]; + gvcf->pl[3*i+2] = gvcf->tmp[3*i+2]; + } + else if ( gvcf->pl[3*i+1]==gvcf->tmp[3*i+1] && gvcf->pl[3*i+2] > gvcf->tmp[3*i+2] ) + gvcf->pl[3*i+2] = gvcf->tmp[3*i+2]; + } + } + else + gvcf->npl = 0; + } + gvcf->prev_range = dp_range; + if ( bcf_get_info_int32(hdr,rec,"END",&gvcf->tmp,&gvcf->mtmp)==1 ) + gvcf->end = gvcf->tmp[0] - 1; // from 1-based to 0-based + else + gvcf->end = rec->pos; + return NULL; + } + + if ( is_ref && min_dp ) + bcf_update_info_int32(hdr, rec, "MinDP", &min_dp, 1); + + return rec; +} + diff --git a/bcftools/gvcf.h b/bcftools/gvcf.h new file mode 100644 index 0000000..784e1f6 --- /dev/null +++ b/bcftools/gvcf.h @@ -0,0 +1,41 @@ +/* gvcf.[ch] - Helper functions for gVCF support + + The MIT License + + Copyright (c) 2015 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ + +#ifndef __GVCF_H__ +#define __GVCF_H__ + +#include "bcftools.h" + +typedef struct _gvcf_t gvcf_t; + +gvcf_t *gvcf_init(const char *dp_ranges); +void gvcf_update_header(gvcf_t *gvcf, bcf_hdr_t *hdr); +bcf1_t *gvcf_write(gvcf_t *gvcf, htsFile *fh, bcf_hdr_t *hdr, bcf1_t *rec, int is_ref); +void gvcf_destroy(gvcf_t *gvcf); + +#endif diff --git a/bcftools/hclust.c b/bcftools/hclust.c new file mode 100644 index 0000000..692fa54 --- /dev/null +++ b/bcftools/hclust.c @@ -0,0 +1,400 @@ +/* The MIT License + + Copyright (c) 2016 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ + +#include +#include +#include +#include "bcftools.h" +#include "hclust.h" + +typedef struct _node_t +{ + struct _node_t *akid, *bkid, *next, *prev, *parent; + int id, idx; // id: unique node id; idx: current index to pdist + float value; // max pairwise dist of elements within the node +} +node_t; + +struct _hclust_t +{ + int ndat, nclust; // ndat: number of elements (pdist matrix size); nclust: current number of clusters + float *pdist; // pairwise cluster distances, diagonal matrix accessed via the PDIST macro + node_t *first, *last; // clusters are maintained in a double-linked list + node_t **rmme; // convenience array to remove all allocated nodes at the end + int nrmme; + kstring_t str; // (for debugging) pointer to str.s is returned by create_dot() + char **dbg; // (for debugging) created by create_list() via set_threshold() and returned by explain() + int ndbg, mdbg; +}; + +node_t *append_node(hclust_t *clust, int idx) +{ + node_t *node = (node_t*) calloc(1,sizeof(node_t)); + + clust->nclust++; + node->id = clust->nrmme; + node->idx = idx; + if ( !clust->first ) + { + clust->first = node; + clust->last = node; + } + else + { + node->prev = clust->last; + clust->last->next = node; + clust->last = node; + } + + if ( clust->nrmme >= clust->ndat*2 ) error("hclust fixme: %d vs %d\n",clust->nrmme,clust->ndat); + clust->rmme[clust->nrmme++] = node; + + return node; +} +void remove_node(hclust_t *clust, node_t *node) +{ + if ( node==clust->first ) clust->first = node->next; + if ( node==clust->last ) clust->last = node->prev; + if ( node->next ) node->next->prev = node->prev; + if ( node->prev ) node->prev->next = node->next; + clust->nclust--; +} + +#if DEBUG +void hclust_debug(hclust_t *clust) +{ + int i; + fprintf(stderr,"nrmme=%d nclust=%d\n", clust->nrmme,clust->nclust); + for (i=0; inrmme; i++) + { + node_t *node = clust->rmme[i]; + int akid = node->akid ? node->akid->id : -1; + int bkid = node->bkid ? node->bkid->id : -1; + int akidx = node->akid ? node->akid->idx : -1; + int bkidx = node->bkid ? node->bkid->idx : -1; + fprintf(stderr,"\t%d\t%d\t%f\t%d %d\t%d %d\n",node->id,node->idx,node->value,akid,bkid,akidx,bkidx); + } + + int j; + for (i=1; indat; i++) + { + int active = 0; + node_t *node = clust->first; + while (node) + { + if ( node->idx==i ) { active=1; break; } + node = node->next; + } + fprintf(stderr,"%2d%c ",i,active?'*':' '); + for (j=0; jpdist,i,j)==9 ) + fprintf(stderr," ----- "); + else + fprintf(stderr," %f", PDIST(clust->pdist,i,j)); + } + fprintf(stderr,"\n"); + } + for (j=0; jndat-1; j++) fprintf(stderr," %6d ",j); fprintf(stderr,"\n"); +} +#endif + +hclust_t *hclust_init(int n, float *pdist) +{ + hclust_t *clust = (hclust_t*) calloc(1,sizeof(hclust_t)); + clust->ndat = n; + clust->pdist = pdist; + clust->rmme = (node_t**) calloc(n*2,sizeof(node_t*)); + + // init clusters + int i; + for (i=0; indat; i++) append_node(clust,i); + + // build the tree + while ( clust->nclust>1 ) + { + // find two clusters with minimum distance + float min_value = HUGE_VAL; + node_t *iclust = clust->first->next; + node_t *min_iclust = NULL, *min_jclust = NULL; + while ( iclust ) + { + node_t *jclust = clust->first; + while ( jclust!=iclust ) + { + float value = PDIST(clust->pdist,iclust->idx,jclust->idx); + if ( value < min_value ) + { + min_value = value; + min_iclust = iclust; + min_jclust = jclust; + } + jclust = jclust->next; + } + iclust = iclust->next; + } + assert( min_iclust && min_jclust ); // pdist contains inf or nan, fix the caller + remove_node(clust,min_iclust); + remove_node(clust,min_jclust); + + // update the pairwise distances. We keep the matrix and as we are moving up the + // tree, we use fewer columns/rows as the number of clusters decreases: we reuse + // i-th and leave j-th unused. Inter-cluster distance is defined as maximum distance + // between pairwise distances of elements within the cluster. + iclust = clust->first; + while ( iclust ) + { + if ( PDIST(clust->pdist,iclust->idx,min_iclust->idx) < PDIST(clust->pdist,iclust->idx,min_jclust->idx) ) + PDIST(clust->pdist,iclust->idx,min_iclust->idx) = PDIST(clust->pdist,iclust->idx,min_jclust->idx); + iclust = iclust->next; + } + + node_t *node = append_node(clust,min_iclust->idx); + node->akid = min_iclust; + node->bkid = min_jclust; + node->value = min_value; + node->akid->parent = node; + node->bkid->parent = node; + } + + return clust; +} +void hclust_destroy(hclust_t *clust) +{ + int i; + for (i=0; inrmme; i++) free(clust->rmme[i]); + free(clust->rmme); + free(clust->dbg); + free(clust->str.s); + free(clust); +} + +char *hclust_create_dot(hclust_t *clust, char **labels, float th) +{ + clust->str.l = 0; + ksprintf(&clust->str,"digraph myGraph {"); + + int i; + for (i=0; inrmme; i++) + { + node_t *node = clust->rmme[i]; + if ( node->value ) + ksprintf(&clust->str,"\"%d\" [label=\"%f\"];", node->id,node->value); + else + ksprintf(&clust->str,"\"%d\" [label=\"%s\"];", node->id,labels[node->idx]); + } + for (i=0; inrmme; i++) + { + node_t *node = clust->rmme[i]; + if ( node->akid ) + { + if ( node->value >= th && node->akid && node->akid->value < th ) + ksprintf(&clust->str,"\"%d\" -> \"%d\" [color=\"#D43F3A\" penwidth=3];", node->id,node->akid->id); + else + ksprintf(&clust->str,"\"%d\" -> \"%d\";", node->id,node->akid->id); + } + + if ( node->bkid ) + { + if ( node->value >= th && node->bkid && node->bkid->value < th ) + ksprintf(&clust->str,"\"%d\" -> \"%d\" [color=\"#D43F3A\" penwidth=3];", node->id,node->bkid->id); + else + ksprintf(&clust->str,"\"%d\" -> \"%d\";", node->id,node->bkid->id); + } + } + ksprintf(&clust->str,"};"); + return clust->str.s; +} +char **hclust_explain(hclust_t *clust, int *nlines) +{ + clust->ndbg = 0; + char *beg = clust->str.s; + while ( *beg ) + { + char *end = beg; + while ( *end && *end!='\n' ) end++; + clust->ndbg++; + hts_expand(char*,clust->ndbg,clust->mdbg,clust->dbg); + clust->dbg[clust->ndbg-1] = beg; + if ( !*end ) break; + *end = 0; + beg = end + 1; + } + + *nlines = clust->ndbg; + return clust->dbg; +} + +cluster_t *append_cluster(node_t *node, cluster_t *cluster, int *nclust, node_t **stack) +{ + (*nclust)++; + cluster = (cluster_t*) realloc(cluster,sizeof(cluster_t)*(*nclust)); + cluster_t *clust = &cluster[*nclust-1]; + clust->nmemb = 0; + clust->memb = NULL; + clust->dist = node->value; + + int nstack = 1; + stack[0] = node; + + while ( nstack ) + { + node_t *node = stack[--nstack]; + node_t *akid = node->akid; + node_t *bkid = node->bkid; + if ( node->akid ) + { + stack[nstack++] = akid; + stack[nstack++] = bkid; + } + else + { + clust->nmemb++; + clust->memb = (int*) realloc(clust->memb,sizeof(int)*clust->nmemb); + clust->memb[clust->nmemb-1] = node->id; + } + } + return cluster; +} + +int cmp_nodes(const void *a, const void *b) +{ + const node_t *an = *((const node_t**) a); + const node_t *bn = *((const node_t**) b); + if ( an->value < bn->value ) return -1; + if ( an->value > bn->value ) return 1; + return 0; +} + +float calc_dev(node_t **dat, int n) +{ + float avg = 0, dev = 0; + int i; + for (i=0; ivalue; + avg /= n; + for (i=0; ivalue - avg)*(dat[i]->value - avg); + return sqrt(dev/n); +} + +/* + Heuristics to determine clustering cutoff: sort nodes by distance and + split into two groups by minimizing the standard deviation. + This works best when two elements from a single different sample are + included in the mix. + - min_inter_dist .. smaller values are always considered identical + - max_intra_dist .. larger values are always considered different + */ +float hclust_set_threshold(hclust_t *clust, float min_inter_dist, float max_intra_dist) +{ + node_t **dat = clust->rmme + clust->ndat; + int i, ndat = clust->nrmme - clust->ndat; + + qsort(dat, ndat, sizeof(dat), cmp_nodes); + + clust->str.l = 0; + float th, min_dev = HUGE_VAL; + int imin = -1; + for (i=0; i0 ) dev += calc_dev(dat,i); + if ( i+1value; + ksprintf(&clust->str,"DEV\t%f\t%f\n",th,dev); + if ( min_dev > dev && th >= min_inter_dist ) { min_dev = dev; imin = i; } + } + if ( max_intra_dist > 0 ) + th = max_intra_dist; // use fixed cutoff, the above was only for debugging output + else + { + // dynamic cutoff + max_intra_dist = fabs(max_intra_dist); + th = imin==-1 ? max_intra_dist : dat[imin]->value; + if ( th > max_intra_dist ) th = max_intra_dist; + } + ksprintf(&clust->str,"TH\t%f\n", th); + ksprintf(&clust->str,"MAX_DIST\t%f\n", dat[ndat-1]->value); + ksprintf(&clust->str,"MIN_INTER\t%f\n", min_inter_dist); + ksprintf(&clust->str,"MAX_INTRA\t%f\n", max_intra_dist); + return th; +} + +cluster_t *hclust_create_list(hclust_t *clust, float min_inter_dist, float *max_intra_dist, int *nclust) +{ + float cutoff = *max_intra_dist = hclust_set_threshold(clust, min_inter_dist, *max_intra_dist); + + node_t **stack = (node_t**) malloc(sizeof(node_t*)*clust->ndat); + node_t **tmp = (node_t**) malloc(sizeof(node_t*)*clust->ndat); + stack[0] = clust->first; + int nstack = 1; + + cluster_t *cluster = NULL; + int ncluster = 0; + + if ( stack[0]->value < cutoff ) + { + // all values are within the limits - create a single cluster + cluster = append_cluster(stack[0], cluster, &ncluster, tmp); + nstack = 0; + } + + while ( nstack ) + { + node_t *node = stack[--nstack]; + node_t *akid = node->akid; + node_t *bkid = node->bkid; + if ( !akid ) + { + cluster = append_cluster(node, cluster, &ncluster, tmp); + continue; + } + + if ( node->value >= cutoff && akid->value < cutoff ) + cluster = append_cluster(akid, cluster, &ncluster, tmp); + else + stack[nstack++] = akid; + + if ( node->value >= cutoff && bkid->value < cutoff ) + cluster = append_cluster(bkid, cluster, &ncluster, tmp); + else + stack[nstack++] = bkid; + } + + free(tmp); + free(stack); + + *nclust = ncluster; + return cluster; +} + +void hclust_destroy_list(cluster_t *clust, int nclust) +{ + int i; + for (i=0; i + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ + +#include +#include +#include +#include "bcftools.h" +#include "hclust.h" + +typedef struct _node_t +{ + struct _node_t *akid, *bkid, *next, *prev, *parent; + int id, idx; // id: unique node id; idx: current index to pdist + float value; // max pairwise dist of elements within the node +} +node_t; + +struct _hclust_t +{ + int ndat, nclust; // ndat: number of elements (pdist matrix size); nclust: current number of clusters + float *pdist; // pairwise cluster distances, diagonal matrix accessed via the PDIST macro + node_t *first, *last; // clusters are maintained in a double-linked list + node_t **rmme; // convenience array to remove all allocated nodes at the end + int nrmme; + kstring_t str; // (for debugging) pointer to str.s is returned by create_dot() + char **dbg; // (for debugging) created by create_list() via set_threshold() and returned by explain() + int ndbg, mdbg; +}; + +node_t *append_node(hclust_t *clust, int idx) +{ + node_t *node = (node_t*) calloc(1,sizeof(node_t)); + + clust->nclust++; + node->id = clust->nrmme; + node->idx = idx; + if ( !clust->first ) + { + clust->first = node; + clust->last = node; + } + else + { + node->prev = clust->last; + clust->last->next = node; + clust->last = node; + } + + if ( clust->nrmme >= clust->ndat*2 ) error("hclust fixme: %d vs %d\n",clust->nrmme,clust->ndat); + clust->rmme[clust->nrmme++] = node; + + return node; +} +void remove_node(hclust_t *clust, node_t *node) +{ + if ( node==clust->first ) clust->first = node->next; + if ( node==clust->last ) clust->last = node->prev; + if ( node->next ) node->next->prev = node->prev; + if ( node->prev ) node->prev->next = node->next; + clust->nclust--; +} + +#if DEBUG +void hclust_debug(hclust_t *clust) +{ + int i; + fprintf(bcftools_stderr,"nrmme=%d nclust=%d\n", clust->nrmme,clust->nclust); + for (i=0; inrmme; i++) + { + node_t *node = clust->rmme[i]; + int akid = node->akid ? node->akid->id : -1; + int bkid = node->bkid ? node->bkid->id : -1; + int akidx = node->akid ? node->akid->idx : -1; + int bkidx = node->bkid ? node->bkid->idx : -1; + fprintf(bcftools_stderr,"\t%d\t%d\t%f\t%d %d\t%d %d\n",node->id,node->idx,node->value,akid,bkid,akidx,bkidx); + } + + int j; + for (i=1; indat; i++) + { + int active = 0; + node_t *node = clust->first; + while (node) + { + if ( node->idx==i ) { active=1; break; } + node = node->next; + } + fprintf(bcftools_stderr,"%2d%c ",i,active?'*':' '); + for (j=0; jpdist,i,j)==9 ) + fprintf(bcftools_stderr," ----- "); + else + fprintf(bcftools_stderr," %f", PDIST(clust->pdist,i,j)); + } + fprintf(bcftools_stderr,"\n"); + } + for (j=0; jndat-1; j++) fprintf(bcftools_stderr," %6d ",j); fprintf(bcftools_stderr,"\n"); +} +#endif + +hclust_t *hclust_init(int n, float *pdist) +{ + hclust_t *clust = (hclust_t*) calloc(1,sizeof(hclust_t)); + clust->ndat = n; + clust->pdist = pdist; + clust->rmme = (node_t**) calloc(n*2,sizeof(node_t*)); + + // init clusters + int i; + for (i=0; indat; i++) append_node(clust,i); + + // build the tree + while ( clust->nclust>1 ) + { + // find two clusters with minimum distance + float min_value = HUGE_VAL; + node_t *iclust = clust->first->next; + node_t *min_iclust = NULL, *min_jclust = NULL; + while ( iclust ) + { + node_t *jclust = clust->first; + while ( jclust!=iclust ) + { + float value = PDIST(clust->pdist,iclust->idx,jclust->idx); + if ( value < min_value ) + { + min_value = value; + min_iclust = iclust; + min_jclust = jclust; + } + jclust = jclust->next; + } + iclust = iclust->next; + } + assert( min_iclust && min_jclust ); // pdist contains inf or nan, fix the caller + remove_node(clust,min_iclust); + remove_node(clust,min_jclust); + + // update the pairwise distances. We keep the matrix and as we are moving up the + // tree, we use fewer columns/rows as the number of clusters decreases: we reuse + // i-th and leave j-th unused. Inter-cluster distance is defined as maximum distance + // between pairwise distances of elements within the cluster. + iclust = clust->first; + while ( iclust ) + { + if ( PDIST(clust->pdist,iclust->idx,min_iclust->idx) < PDIST(clust->pdist,iclust->idx,min_jclust->idx) ) + PDIST(clust->pdist,iclust->idx,min_iclust->idx) = PDIST(clust->pdist,iclust->idx,min_jclust->idx); + iclust = iclust->next; + } + + node_t *node = append_node(clust,min_iclust->idx); + node->akid = min_iclust; + node->bkid = min_jclust; + node->value = min_value; + node->akid->parent = node; + node->bkid->parent = node; + } + + return clust; +} +void hclust_destroy(hclust_t *clust) +{ + int i; + for (i=0; inrmme; i++) free(clust->rmme[i]); + free(clust->rmme); + free(clust->dbg); + free(clust->str.s); + free(clust); +} + +char *hclust_create_dot(hclust_t *clust, char **labels, float th) +{ + clust->str.l = 0; + ksprintf(&clust->str,"digraph myGraph {"); + + int i; + for (i=0; inrmme; i++) + { + node_t *node = clust->rmme[i]; + if ( node->value ) + ksprintf(&clust->str,"\"%d\" [label=\"%f\"];", node->id,node->value); + else + ksprintf(&clust->str,"\"%d\" [label=\"%s\"];", node->id,labels[node->idx]); + } + for (i=0; inrmme; i++) + { + node_t *node = clust->rmme[i]; + if ( node->akid ) + { + if ( node->value >= th && node->akid && node->akid->value < th ) + ksprintf(&clust->str,"\"%d\" -> \"%d\" [color=\"#D43F3A\" penwidth=3];", node->id,node->akid->id); + else + ksprintf(&clust->str,"\"%d\" -> \"%d\";", node->id,node->akid->id); + } + + if ( node->bkid ) + { + if ( node->value >= th && node->bkid && node->bkid->value < th ) + ksprintf(&clust->str,"\"%d\" -> \"%d\" [color=\"#D43F3A\" penwidth=3];", node->id,node->bkid->id); + else + ksprintf(&clust->str,"\"%d\" -> \"%d\";", node->id,node->bkid->id); + } + } + ksprintf(&clust->str,"};"); + return clust->str.s; +} +char **hclust_explain(hclust_t *clust, int *nlines) +{ + clust->ndbg = 0; + char *beg = clust->str.s; + while ( *beg ) + { + char *end = beg; + while ( *end && *end!='\n' ) end++; + clust->ndbg++; + hts_expand(char*,clust->ndbg,clust->mdbg,clust->dbg); + clust->dbg[clust->ndbg-1] = beg; + if ( !*end ) break; + *end = 0; + beg = end + 1; + } + + *nlines = clust->ndbg; + return clust->dbg; +} + +cluster_t *append_cluster(node_t *node, cluster_t *cluster, int *nclust, node_t **stack) +{ + (*nclust)++; + cluster = (cluster_t*) realloc(cluster,sizeof(cluster_t)*(*nclust)); + cluster_t *clust = &cluster[*nclust-1]; + clust->nmemb = 0; + clust->memb = NULL; + clust->dist = node->value; + + int nstack = 1; + stack[0] = node; + + while ( nstack ) + { + node_t *node = stack[--nstack]; + node_t *akid = node->akid; + node_t *bkid = node->bkid; + if ( node->akid ) + { + stack[nstack++] = akid; + stack[nstack++] = bkid; + } + else + { + clust->nmemb++; + clust->memb = (int*) realloc(clust->memb,sizeof(int)*clust->nmemb); + clust->memb[clust->nmemb-1] = node->id; + } + } + return cluster; +} + +int cmp_nodes(const void *a, const void *b) +{ + const node_t *an = *((const node_t**) a); + const node_t *bn = *((const node_t**) b); + if ( an->value < bn->value ) return -1; + if ( an->value > bn->value ) return 1; + return 0; +} + +float calc_dev(node_t **dat, int n) +{ + float avg = 0, dev = 0; + int i; + for (i=0; ivalue; + avg /= n; + for (i=0; ivalue - avg)*(dat[i]->value - avg); + return sqrt(dev/n); +} + +/* + Heuristics to determine clustering cutoff: sort nodes by distance and + split into two groups by minimizing the standard deviation. + This works best when two elements from a single different sample are + included in the mix. + - min_inter_dist .. smaller values are always considered identical + - max_intra_dist .. larger values are always considered different + */ +float hclust_set_threshold(hclust_t *clust, float min_inter_dist, float max_intra_dist) +{ + node_t **dat = clust->rmme + clust->ndat; + int i, ndat = clust->nrmme - clust->ndat; + + qsort(dat, ndat, sizeof(dat), cmp_nodes); + + clust->str.l = 0; + float th, min_dev = HUGE_VAL; + int imin = -1; + for (i=0; i0 ) dev += calc_dev(dat,i); + if ( i+1value; + ksprintf(&clust->str,"DEV\t%f\t%f\n",th,dev); + if ( min_dev > dev && th >= min_inter_dist ) { min_dev = dev; imin = i; } + } + if ( max_intra_dist > 0 ) + th = max_intra_dist; // use fixed cutoff, the above was only for debugging output + else + { + // dynamic cutoff + max_intra_dist = fabs(max_intra_dist); + th = imin==-1 ? max_intra_dist : dat[imin]->value; + if ( th > max_intra_dist ) th = max_intra_dist; + } + ksprintf(&clust->str,"TH\t%f\n", th); + ksprintf(&clust->str,"MAX_DIST\t%f\n", dat[ndat-1]->value); + ksprintf(&clust->str,"MIN_INTER\t%f\n", min_inter_dist); + ksprintf(&clust->str,"MAX_INTRA\t%f\n", max_intra_dist); + return th; +} + +cluster_t *hclust_create_list(hclust_t *clust, float min_inter_dist, float *max_intra_dist, int *nclust) +{ + float cutoff = *max_intra_dist = hclust_set_threshold(clust, min_inter_dist, *max_intra_dist); + + node_t **stack = (node_t**) malloc(sizeof(node_t*)*clust->ndat); + node_t **tmp = (node_t**) malloc(sizeof(node_t*)*clust->ndat); + stack[0] = clust->first; + int nstack = 1; + + cluster_t *cluster = NULL; + int ncluster = 0; + + if ( stack[0]->value < cutoff ) + { + // all values are within the limits - create a single cluster + cluster = append_cluster(stack[0], cluster, &ncluster, tmp); + nstack = 0; + } + + while ( nstack ) + { + node_t *node = stack[--nstack]; + node_t *akid = node->akid; + node_t *bkid = node->bkid; + if ( !akid ) + { + cluster = append_cluster(node, cluster, &ncluster, tmp); + continue; + } + + if ( node->value >= cutoff && akid->value < cutoff ) + cluster = append_cluster(akid, cluster, &ncluster, tmp); + else + stack[nstack++] = akid; + + if ( node->value >= cutoff && bkid->value < cutoff ) + cluster = append_cluster(bkid, cluster, &ncluster, tmp); + else + stack[nstack++] = bkid; + } + + free(tmp); + free(stack); + + *nclust = ncluster; + return cluster; +} + +void hclust_destroy_list(cluster_t *clust, int nclust) +{ + int i; + for (i=0; i + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ + +/* + Simple hierarchical clustering +*/ + +#ifndef __HCLUST_H__ +#define __HCLUST_H__ + +#include + +typedef struct _hclust_t hclust_t; + +typedef struct +{ + float dist; + int nmemb, *memb; +} +cluster_t; + +#define PDIST(mat,a,b) (mat)[((a)>(b)?((a)*((a)-1)/2+(b)):((b)*((b)-1)/2+(a)))] + +/* + * hclust_init() - init and run clustering + * @n: number of elements + * @pdist: pairwise distances. The array will be modified by hclust and + * must exist until hclust_destroy() is called + */ +hclust_t *hclust_init(int n, float *pdist); +void hclust_destroy(hclust_t *clust); + +/* + * hclust_create_list() - returns a list of clusters + * @min_inter_dist: minimum inter-cluster distance. If smaller, elements are considered + * homogenous, belonging to the same cluster. + * @max_intra_dist: maximum intra-cluster distance allowed. If smaller than 0, + * the threshold can be heuristically lowered, otherwise considered + * a fixed cutoff. The pointer will be filled to the cutoff actually used. + */ +cluster_t *hclust_create_list(hclust_t *clust, float min_inter_dist, float *max_intra_dist, int *nclust); +void hclust_destroy_list(cluster_t *clust, int nclust); + +/* + * Access debugging data used in the decision making process. Note that this + * must be called immediately after hclust_create_list because other calls, + * such as hclust_create_dot(), invalidate the temporary data structures. + */ +char **hclust_explain(hclust_t *clust, int *nlines); + +char *hclust_create_dot(hclust_t *clust, char **labels, float th); + +#endif + diff --git a/bcftools/khash_str2str.h b/bcftools/khash_str2str.h new file mode 100644 index 0000000..4a5bd12 --- /dev/null +++ b/bcftools/khash_str2str.h @@ -0,0 +1,106 @@ +/* khash_str2str.h -- C-string to C-string hash table. + + Copyright (C) 2014,2016 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#ifndef KHASH_STR2STR_H +#define KHASH_STR2STR_H + +#include + +KHASH_MAP_INIT_STR(str2str, const char*) + +/* + * Wrappers for khash dictionaries used by mpileup. + */ + +static inline void *khash_str2str_init(void) +{ + return kh_init(str2str); +} + +/* + * Destroy the hash structure, but not the keys + */ +static inline void khash_str2str_destroy(void *_hash) +{ + khash_t(str2str) *hash = (khash_t(str2str)*)_hash; + if (hash) kh_destroy(str2str, hash); // Note that strings are not freed. +} + +/* + * Destroys both the hash structure and the keys + */ +static inline void khash_str2str_destroy_free(void *_hash) +{ + khash_t(str2str) *hash = (khash_t(str2str)*)_hash; + khint_t k; + if (hash == 0) return; + for (k = 0; k < kh_end(hash); ++k) + if (kh_exist(hash, k)) free((char*)kh_key(hash, k)); + kh_destroy(str2str, hash); +} + +/* + * Destroys the hash structure, the keys and the values + */ +static inline void khash_str2str_destroy_free_all(void *_hash) +{ + khash_t(str2str) *hash = (khash_t(str2str)*)_hash; + khint_t k; + if (hash == 0) return; + for (k = 0; k < kh_end(hash); ++k) + if (kh_exist(hash, k)) + { + free((char*)kh_key(hash, k)); + free((char*)kh_val(hash, k)); + } + kh_destroy(str2str, hash); +} + +/* + * Returns value if key exists or NULL if not + */ +static inline char *khash_str2str_get(void *_hash, const char *str) +{ + khash_t(str2str) *hash = (khash_t(str2str)*)_hash; + khint_t k = kh_get(str2str, hash, str); + if ( k == kh_end(hash) ) return NULL; + return (char*)kh_val(hash, k); +} + +/* + * Set a new key,value pair. On success returns the bin index, on + * error -1 is returned. + */ +static inline int khash_str2str_set(void *_hash, const char *str, const char *value) +{ + khint_t k; + int ret; + khash_t(str2str) *hash = (khash_t(str2str)*)_hash; + if ( !hash ) return -1; + k = kh_put(str2str, hash, str, &ret); + kh_val(hash,k) = value; + return k; +} + +#endif diff --git a/bcftools/kheap.h b/bcftools/kheap.h new file mode 100644 index 0000000..cb5dda4 --- /dev/null +++ b/bcftools/kheap.h @@ -0,0 +1,174 @@ +/* The MIT License + + Copyright (C) 2016 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ +/* + Usage example: + + #include "kheap.h" + + // First we prepare the user data to store, in this example it is a + // struct with a single element "key", and a comparator function + // "is_smaller". In this example the comparator defines a min heap (as + // opposed to a max heap). + typedef struct + { + uint32_t key; + } + data_t; + static inline int is_smaller(data_t *a, data_t *b) + { + return a->key < b->key ? 1 : 0; + } + data_t data[3] = { {3}, {2}, {1} }; + + + // Heap declaration, "mh" is an arbitrary string. The typedef is not + // required, it is just a convenience shortcut so that we can use + // "heap_t" instead of the generic "khp_mh_t" automatically created by + // the KHEAP_INIT macro. + KHEAP_INIT(mh, data_t, is_smaller) + typedef khp_mh_t heap_t; + + // Initialize the heap, insert the test data, then retrieve them back, + // sorted. Multiple heaps with the same name "mh" can be created and + // used simultaneously, as long as they all use the same data type + // "data_t". + heap_t *heap = khp_init(mh); + + // When inserting a new element, the heap stores a copy of the memory + // area pointed to by the third argument. + for (int i=0; i<3; i++) + khp_insert(mh, heap, &data[i]); + + while (heap->ndat) + { + printf("%d\n", heap->dat[0].pos); + khp_delete(mh, heap); + } + + // Clean up + khp_destroy(mh, heap); + +*/ + +#ifndef __KHEAP_H__ +#define __KHEAP_H__ + +#include + +#ifndef kroundup32 +#define kroundup32(x) (--(x), (x)|=(x)>>1, (x)|=(x)>>2, (x)|=(x)>>4, (x)|=(x)>>8, (x)|=(x)>>16, ++(x)) +#endif + +#ifndef kh_inline +#ifdef _MSC_VER +#define kh_inline __inline +#else +#define kh_inline inline +#endif +#endif /* kh_inline */ + +#ifndef klib_unused +#if (defined __clang__ && __clang_major__ >= 3) || (defined __GNUC__ && __GNUC__ >= 3) +#define klib_unused __attribute__ ((__unused__)) +#else +#define klib_unused +#endif +#endif /* klib_unused */ + + +#define __KHEAP_TYPE(name, kheap_t) \ + typedef struct { \ + int ndat, mdat; \ + kheap_t *dat; \ + kheap_t tmp; \ + } khp_##name##_t; + +#define khp_parent(i) (((i)-1)/2) +#define khp_lchild(i) (2*(i)+1) +#define khp_rchild(i) (2*(i)+2) +#define khp_swap(hp,i,j) { \ + ((hp)->tmp) = ((hp)->dat[i]); \ + ((hp)->dat[i]) = ((hp)->dat[j]); \ + ((hp)->dat[j]) = ((hp)->tmp); \ + } + +#define __KHEAP_IMPL(name, SCOPE, kheap_t, __cmp) \ + SCOPE khp_##name##_t *khp_init_##name(void) \ + { \ + return (khp_##name##_t*)calloc(1, sizeof(khp_##name##_t)); \ + } \ + SCOPE void khp_destroy_##name(khp_##name##_t *heap) \ + { \ + if (heap) free(heap->dat); \ + free(heap); \ + } \ + SCOPE int khp_insert_##name(khp_##name##_t *heap, kheap_t *dat) \ + { \ + heap->ndat++; \ + if ( heap->ndat > heap->mdat ) \ + { \ + heap->mdat = heap->ndat; \ + kroundup32(heap->mdat); \ + heap->dat = (kheap_t*)realloc(heap->dat, heap->mdat*sizeof(kheap_t)); \ + memset(heap->dat + heap->ndat, 0, (heap->mdat - heap->ndat)*sizeof(kheap_t)); \ + } \ + int i = heap->ndat - 1; \ + while ( i && __cmp(dat,&heap->dat[khp_parent(i)]) ) \ + { \ + heap->dat[i] = heap->dat[khp_parent(i)]; \ + i = khp_parent(i); \ + } \ + heap->dat[i] = *dat; \ + return i; \ + } \ + SCOPE void khp_heapify_##name(khp_##name##_t *heap, int i) \ + { \ +/*todo: loop instead of a recursive function? */ \ + int extreme = khp_lchild(i) < heap->ndat && __cmp(&heap->dat[khp_lchild(i)],&heap->dat[i]) ? khp_lchild(i) : i; \ + if ( khp_rchild(i) < heap->ndat && __cmp(&heap->dat[khp_rchild(i)],&heap->dat[extreme]) ) extreme = khp_rchild(i); \ + if ( extreme != i ) \ + { \ + khp_swap(heap,i,extreme); \ + khp_heapify_##name(heap,extreme); \ + } \ + } \ + SCOPE void khp_delete_##name(khp_##name##_t *heap) \ + { \ + if ( !heap || !heap->ndat ) return; \ + heap->dat[0] = heap->dat[--heap->ndat]; \ + khp_heapify_##name(heap, 0); \ + } \ + +#define KHEAP_INIT(name, kheap_t, __cmp) \ + __KHEAP_TYPE(name, kheap_t) \ + __KHEAP_IMPL(name, static kh_inline klib_unused, kheap_t, __cmp) + +#define khp_init(name) khp_init_##name() +#define khp_destroy(name, heap) khp_destroy_##name(heap) +#define khp_insert(name, heap, dat) khp_insert_##name(heap, dat) +#define khp_delete(name, heap) khp_delete_##name(heap) + +#endif diff --git a/bcftools/kmin.c b/bcftools/kmin.c new file mode 100644 index 0000000..5b8193b --- /dev/null +++ b/bcftools/kmin.c @@ -0,0 +1,209 @@ +/* The MIT License + + Copyright (c) 2008, 2010 by Attractive Chaos + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ + +/* Hooke-Jeeves algorithm for nonlinear minimization + + Based on the pseudocodes by Bell and Pike (CACM 9(9):684-685), and + the revision by Tomlin and Smith (CACM 12(11):637-638). Both of the + papers are comments on Kaupe's Algorithm 178 "Direct Search" (ACM + 6(6):313-314). The original algorithm was designed by Hooke and + Jeeves (ACM 8:212-229). This program is further revised according to + Johnson's implementation at Netlib (opt/hooke.c). + + Hooke-Jeeves algorithm is very simple and it works quite well on a + few examples. However, it might fail to converge due to its heuristic + nature. A possible improvement, as is suggested by Johnson, may be to + choose a small r at the beginning to quickly approach to the minimum + and a large r at later step to hit the minimum. + */ + +#include +#include +#include +#include "kmin.h" + +static double __kmin_hj_aux(kmin_f func, int n, double *x1, void *data, double fx1, double *dx, int *n_calls) +{ + int k, j = *n_calls; + double ftmp; + for (k = 0; k != n; ++k) { + x1[k] += dx[k]; + ftmp = func(n, x1, data); ++j; + if (ftmp < fx1) fx1 = ftmp; + else { /* search the opposite direction */ + dx[k] = 0.0 - dx[k]; + x1[k] += dx[k] + dx[k]; + ftmp = func(n, x1, data); ++j; + if (ftmp < fx1) fx1 = ftmp; + else x1[k] -= dx[k]; /* back to the original x[k] */ + } + } + *n_calls = j; + return fx1; /* here: fx1=f(n,x1) */ +} + +double kmin_hj(kmin_f func, int n, double *x, void *data, double r, double eps, int max_calls) +{ + double fx, fx1, *x1, *dx, radius; + int k, n_calls = 0; + x1 = (double*)calloc(n, sizeof(double)); + dx = (double*)calloc(n, sizeof(double)); + for (k = 0; k != n; ++k) { /* initial directions, based on MGJ */ + dx[k] = fabs(x[k]) * r; + if (dx[k] == 0) dx[k] = r; + } + radius = r; + fx1 = fx = func(n, x, data); ++n_calls; + for (;;) { + memcpy(x1, x, n * sizeof(double)); /* x1 = x */ + fx1 = __kmin_hj_aux(func, n, x1, data, fx, dx, &n_calls); + while (fx1 < fx) { + for (k = 0; k != n; ++k) { + double t = x[k]; + dx[k] = x1[k] > x[k]? fabs(dx[k]) : 0.0 - fabs(dx[k]); + x[k] = x1[k]; + x1[k] = x1[k] + x1[k] - t; + } + fx = fx1; + if (n_calls >= max_calls) break; + fx1 = func(n, x1, data); ++n_calls; + fx1 = __kmin_hj_aux(func, n, x1, data, fx1, dx, &n_calls); + if (fx1 >= fx) break; + for (k = 0; k != n; ++k) + if (fabs(x1[k] - x[k]) > .5 * fabs(dx[k])) break; + if (k == n) break; + } + if (radius >= eps) { + if (n_calls >= max_calls) break; + radius *= r; + for (k = 0; k != n; ++k) dx[k] *= r; + } else break; /* converge */ + } + free(x1); free(dx); + return fx1; +} + +// I copied this function somewhere several years ago with some of my modifications, but I forgot the source. +double kmin_brent(kmin1_f func, double a, double b, void *data, double tol, double *xmin) +{ + double bound, u, r, q, fu, tmp, fa, fb, fc, c; + const double gold1 = 1.6180339887; + const double gold2 = 0.3819660113; + const double tiny = 1e-20; + const int max_iter = 100; + + double e, d, w, v, mid, tol1, tol2, p, eold, fv, fw; + int iter; + + fa = func(a, data); fb = func(b, data); + if (fb > fa) { // swap, such that f(a) > f(b) + tmp = a; a = b; b = tmp; + tmp = fa; fa = fb; fb = tmp; + } + c = b + gold1 * (b - a), fc = func(c, data); // golden section extrapolation + while (fb > fc) { + bound = b + 100.0 * (c - b); // the farthest point where we want to go + r = (b - a) * (fb - fc); + q = (b - c) * (fb - fa); + if (fabs(q - r) < tiny) { // avoid 0 denominator + tmp = q > r? tiny : 0.0 - tiny; + } else tmp = q - r; + u = b - ((b - c) * q - (b - a) * r) / (2.0 * tmp); // u is the parabolic extrapolation point + if ((b > u && u > c) || (b < u && u < c)) { // u lies between b and c + fu = func(u, data); + if (fu < fc) { // (b,u,c) bracket the minimum + a = b; b = u; fa = fb; fb = fu; + break; + } else if (fu > fb) { // (a,b,u) bracket the minimum + c = u; fc = fu; + break; + } + u = c + gold1 * (c - b); fu = func(u, data); // golden section extrapolation + } else if ((c > u && u > bound) || (c < u && u < bound)) { // u lies between c and bound + fu = func(u, data); + if (fu < fc) { // fb > fc > fu + b = c; c = u; u = c + gold1 * (c - b); + fb = fc; fc = fu; fu = func(u, data); + } else { // (b,c,u) bracket the minimum + a = b; b = c; c = u; + fa = fb; fb = fc; fc = fu; + break; + } + } else if ((u > bound && bound > c) || (u < bound && bound < c)) { // u goes beyond the bound + u = bound; fu = func(u, data); + } else { // u goes the other way around, use golden section extrapolation + u = c + gold1 * (c - b); fu = func(u, data); + } + a = b; b = c; c = u; + fa = fb; fb = fc; fc = fu; + } + if (a > c) u = a, a = c, c = u; // swap + + // now, afb and fb tol1) { + // related to parabolic interpolation + r = (b - w) * (fb - fv); + q = (b - v) * (fb - fw); + p = (b - v) * q - (b - w) * r; + q = 2.0 * (q - r); + if (q > 0.0) p = 0.0 - p; + else q = 0.0 - q; + eold = e; e = d; + if (fabs(p) >= fabs(0.5 * q * eold) || p <= q * (a - b) || p >= q * (c - b)) { + d = gold2 * (e = (b >= mid ? a - b : c - b)); + } else { + d = p / q; u = b + d; // actual parabolic interpolation happens here + if (u - a < tol2 || c - u < tol2) + d = (mid > b)? tol1 : 0.0 - tol1; + } + } else d = gold2 * (e = (b >= mid ? a - b : c - b)); // golden section interpolation + u = fabs(d) >= tol1 ? b + d : b + (d > 0.0? tol1 : -tol1); + fu = func(u, data); + if (fu <= fb) { // u is the minimum point so far + if (u >= b) a = b; + else c = b; + v = w; w = b; b = u; fv = fw; fw = fb; fb = fu; + } else { // adjust (a,c) and (u,v,w) + if (u < b) a = u; + else c = u; + if (fu <= fw || w == b) { + v = w; w = u; + fv = fw; fw = fu; + } else if (fu <= fv || v == b || v == w) { + v = u; fv = fu; + } + } + } + *xmin = b; + return fb; +} diff --git a/bcftools/kmin.c.pysam.c b/bcftools/kmin.c.pysam.c new file mode 100644 index 0000000..f0ccb98 --- /dev/null +++ b/bcftools/kmin.c.pysam.c @@ -0,0 +1,211 @@ +#include "bcftools.pysam.h" + +/* The MIT License + + Copyright (c) 2008, 2010 by Attractive Chaos + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ + +/* Hooke-Jeeves algorithm for nonlinear minimization + + Based on the pseudocodes by Bell and Pike (CACM 9(9):684-685), and + the revision by Tomlin and Smith (CACM 12(11):637-638). Both of the + papers are comments on Kaupe's Algorithm 178 "Direct Search" (ACM + 6(6):313-314). The original algorithm was designed by Hooke and + Jeeves (ACM 8:212-229). This program is further revised according to + Johnson's implementation at Netlib (opt/hooke.c). + + Hooke-Jeeves algorithm is very simple and it works quite well on a + few examples. However, it might fail to converge due to its heuristic + nature. A possible improvement, as is suggested by Johnson, may be to + choose a small r at the beginning to quickly approach to the minimum + and a large r at later step to hit the minimum. + */ + +#include +#include +#include +#include "kmin.h" + +static double __kmin_hj_aux(kmin_f func, int n, double *x1, void *data, double fx1, double *dx, int *n_calls) +{ + int k, j = *n_calls; + double ftmp; + for (k = 0; k != n; ++k) { + x1[k] += dx[k]; + ftmp = func(n, x1, data); ++j; + if (ftmp < fx1) fx1 = ftmp; + else { /* search the opposite direction */ + dx[k] = 0.0 - dx[k]; + x1[k] += dx[k] + dx[k]; + ftmp = func(n, x1, data); ++j; + if (ftmp < fx1) fx1 = ftmp; + else x1[k] -= dx[k]; /* back to the original x[k] */ + } + } + *n_calls = j; + return fx1; /* here: fx1=f(n,x1) */ +} + +double kmin_hj(kmin_f func, int n, double *x, void *data, double r, double eps, int max_calls) +{ + double fx, fx1, *x1, *dx, radius; + int k, n_calls = 0; + x1 = (double*)calloc(n, sizeof(double)); + dx = (double*)calloc(n, sizeof(double)); + for (k = 0; k != n; ++k) { /* initial directions, based on MGJ */ + dx[k] = fabs(x[k]) * r; + if (dx[k] == 0) dx[k] = r; + } + radius = r; + fx1 = fx = func(n, x, data); ++n_calls; + for (;;) { + memcpy(x1, x, n * sizeof(double)); /* x1 = x */ + fx1 = __kmin_hj_aux(func, n, x1, data, fx, dx, &n_calls); + while (fx1 < fx) { + for (k = 0; k != n; ++k) { + double t = x[k]; + dx[k] = x1[k] > x[k]? fabs(dx[k]) : 0.0 - fabs(dx[k]); + x[k] = x1[k]; + x1[k] = x1[k] + x1[k] - t; + } + fx = fx1; + if (n_calls >= max_calls) break; + fx1 = func(n, x1, data); ++n_calls; + fx1 = __kmin_hj_aux(func, n, x1, data, fx1, dx, &n_calls); + if (fx1 >= fx) break; + for (k = 0; k != n; ++k) + if (fabs(x1[k] - x[k]) > .5 * fabs(dx[k])) break; + if (k == n) break; + } + if (radius >= eps) { + if (n_calls >= max_calls) break; + radius *= r; + for (k = 0; k != n; ++k) dx[k] *= r; + } else break; /* converge */ + } + free(x1); free(dx); + return fx1; +} + +// I copied this function somewhere several years ago with some of my modifications, but I forgot the source. +double kmin_brent(kmin1_f func, double a, double b, void *data, double tol, double *xmin) +{ + double bound, u, r, q, fu, tmp, fa, fb, fc, c; + const double gold1 = 1.6180339887; + const double gold2 = 0.3819660113; + const double tiny = 1e-20; + const int max_iter = 100; + + double e, d, w, v, mid, tol1, tol2, p, eold, fv, fw; + int iter; + + fa = func(a, data); fb = func(b, data); + if (fb > fa) { // swap, such that f(a) > f(b) + tmp = a; a = b; b = tmp; + tmp = fa; fa = fb; fb = tmp; + } + c = b + gold1 * (b - a), fc = func(c, data); // golden section extrapolation + while (fb > fc) { + bound = b + 100.0 * (c - b); // the farthest point where we want to go + r = (b - a) * (fb - fc); + q = (b - c) * (fb - fa); + if (fabs(q - r) < tiny) { // avoid 0 denominator + tmp = q > r? tiny : 0.0 - tiny; + } else tmp = q - r; + u = b - ((b - c) * q - (b - a) * r) / (2.0 * tmp); // u is the parabolic extrapolation point + if ((b > u && u > c) || (b < u && u < c)) { // u lies between b and c + fu = func(u, data); + if (fu < fc) { // (b,u,c) bracket the minimum + a = b; b = u; fa = fb; fb = fu; + break; + } else if (fu > fb) { // (a,b,u) bracket the minimum + c = u; fc = fu; + break; + } + u = c + gold1 * (c - b); fu = func(u, data); // golden section extrapolation + } else if ((c > u && u > bound) || (c < u && u < bound)) { // u lies between c and bound + fu = func(u, data); + if (fu < fc) { // fb > fc > fu + b = c; c = u; u = c + gold1 * (c - b); + fb = fc; fc = fu; fu = func(u, data); + } else { // (b,c,u) bracket the minimum + a = b; b = c; c = u; + fa = fb; fb = fc; fc = fu; + break; + } + } else if ((u > bound && bound > c) || (u < bound && bound < c)) { // u goes beyond the bound + u = bound; fu = func(u, data); + } else { // u goes the other way around, use golden section extrapolation + u = c + gold1 * (c - b); fu = func(u, data); + } + a = b; b = c; c = u; + fa = fb; fb = fc; fc = fu; + } + if (a > c) u = a, a = c, c = u; // swap + + // now, afb and fb tol1) { + // related to parabolic interpolation + r = (b - w) * (fb - fv); + q = (b - v) * (fb - fw); + p = (b - v) * q - (b - w) * r; + q = 2.0 * (q - r); + if (q > 0.0) p = 0.0 - p; + else q = 0.0 - q; + eold = e; e = d; + if (fabs(p) >= fabs(0.5 * q * eold) || p <= q * (a - b) || p >= q * (c - b)) { + d = gold2 * (e = (b >= mid ? a - b : c - b)); + } else { + d = p / q; u = b + d; // actual parabolic interpolation happens here + if (u - a < tol2 || c - u < tol2) + d = (mid > b)? tol1 : 0.0 - tol1; + } + } else d = gold2 * (e = (b >= mid ? a - b : c - b)); // golden section interpolation + u = fabs(d) >= tol1 ? b + d : b + (d > 0.0? tol1 : -tol1); + fu = func(u, data); + if (fu <= fb) { // u is the minimum point so far + if (u >= b) a = b; + else c = b; + v = w; w = b; b = u; fv = fw; fw = fb; fb = fu; + } else { // adjust (a,c) and (u,v,w) + if (u < b) a = u; + else c = u; + if (fu <= fw || w == b) { + v = w; w = u; + fv = fw; fw = fu; + } else if (fu <= fv || v == b || v == w) { + v = u; fv = fu; + } + } + } + *xmin = b; + return fb; +} diff --git a/bcftools/kmin.h b/bcftools/kmin.h new file mode 100644 index 0000000..6feba45 --- /dev/null +++ b/bcftools/kmin.h @@ -0,0 +1,46 @@ +/* + Copyright (c) 2008, 2010 by Attractive Chaos + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ + +#ifndef KMIN_H +#define KMIN_H + +#define KMIN_RADIUS 0.5 +#define KMIN_EPS 1e-7 +#define KMIN_MAXCALL 50000 + +typedef double (*kmin_f)(int, double*, void*); +typedef double (*kmin1_f)(double, void*); + +#ifdef __cplusplus +extern "C" { +#endif + + double kmin_hj(kmin_f func, int n, double *x, void *data, double r, double eps, int max_calls); + double kmin_brent(kmin1_f func, double a, double b, void *data, double tol, double *xmin); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/bcftools/main.c b/bcftools/main.c new file mode 100644 index 0000000..03fa6a7 --- /dev/null +++ b/bcftools/main.c @@ -0,0 +1,285 @@ +/* main.c -- main bcftools command front-end. + + Copyright (C) 2012-2016 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include "config.h" +#include +#include +#include +#include +#include +#include +#include "version.h" +#include "bcftools.h" + +int main_tabix(int argc, char *argv[]); +int main_vcfindex(int argc, char *argv[]); +int main_vcfstats(int argc, char *argv[]); +int main_vcfisec(int argc, char *argv[]); +int main_vcfmerge(int argc, char *argv[]); +int main_vcfquery(int argc, char *argv[]); +int main_vcffilter(int argc, char *argv[]); +int main_vcfsom(int argc, char *argv[]); +int main_vcfnorm(int argc, char *argv[]); +int main_vcfgtcheck(int argc, char *argv[]); +int main_vcfview(int argc, char *argv[]); +int main_vcfcall(int argc, char *argv[]); +int main_vcfannotate(int argc, char *argv[]); +int main_vcfroh(int argc, char *argv[]); +int main_vcfconcat(int argc, char *argv[]); +int main_reheader(int argc, char *argv[]); +int main_vcfconvert(int argc, char *argv[]); +int main_vcfcnv(int argc, char *argv[]); +#if USE_GPL +int main_polysomy(int argc, char *argv[]); +#endif +int main_plugin(int argc, char *argv[]); +int main_consensus(int argc, char *argv[]); +int main_csq(int argc, char *argv[]); +int bam_mpileup(int argc, char *argv[]); +int main_sort(int argc, char *argv[]); + +typedef struct +{ + int (*func)(int, char*[]); + const char *alias, *help; +} +cmd_t; + +static cmd_t cmds[] = +{ + { .func = NULL, + .alias = "Indexing", + .help = NULL + }, + { .func = main_vcfindex, + .alias = "index", + .help = "index VCF/BCF files" + }, + { .func = main_tabix, + .alias = "tabix", + .help = "-tabix for BGZF'd BED, GFF, SAM, VCF and more" // do not advertise; only keep here for testing + }, + + { .func = NULL, + .alias = "VCF/BCF manipulation", + .help = NULL + }, + + { .func = main_vcfannotate, + .alias = "annotate", + .help = "annotate and edit VCF/BCF files", + }, + { .func = main_vcfconcat, + .alias = "concat", + .help = "concatenate VCF/BCF files from the same set of samples" + }, + { .func = main_vcfconvert, + .alias = "convert", + .help = "convert VCF/BCF files to different formats and back" + }, + { .func = main_vcfisec, + .alias = "isec", + .help = "intersections of VCF/BCF files" + }, + { .func = main_vcfmerge, + .alias = "merge", + .help = "merge VCF/BCF files files from non-overlapping sample sets" + }, + { .func = main_vcfnorm, + .alias = "norm", + .help = "left-align and normalize indels" + }, + { .func = main_plugin, + .alias = "plugin", +#ifdef ENABLE_BCF_PLUGINS + .help = "user-defined plugins" +#else + /* Do not advertise when plugins disabled. */ + .help = "-user-defined plugins" +#endif + }, + { .func = main_vcfquery, + .alias = "query", + .help = "transform VCF/BCF into user-defined formats" + }, + { .func = main_reheader, + .alias = "reheader", + .help = "modify VCF/BCF header, change sample names" + }, + { .func = main_sort, + .alias = "sort", + .help = "sort VCF/BCF file" + }, + { .func = main_vcfview, + .alias = "view", + .help = "VCF/BCF conversion, view, subset and filter VCF/BCF files" + }, + + { .func = NULL, + .alias = "VCF/BCF analysis", + .help = NULL + }, + + { .func = main_vcfcall, + .alias = "call", + .help = "SNP/indel calling" + }, + { .func = main_consensus, + .alias = "consensus", + .help = "create consensus sequence by applying VCF variants" + }, + { .func = main_vcfcnv, + .alias = "cnv", + .help = "HMM CNV calling" + }, + { .func = main_csq, + .alias = "csq", + .help = "call variation consequences" + }, + { .func = main_vcffilter, + .alias = "filter", + .help = "filter VCF/BCF files using fixed thresholds" + }, + { .func = main_vcfgtcheck, + .alias = "gtcheck", + .help = "check sample concordance, detect sample swaps and contamination" + }, + { .func = bam_mpileup, + .alias = "mpileup", + .help = "multi-way pileup producing genotype likelihoods" + }, +#if USE_GPL + { .func = main_polysomy, + .alias = "polysomy", + .help = "detect number of chromosomal copies", + }, +#endif + { .func = main_vcfroh, + .alias = "roh", + .help = "identify runs of autozygosity (HMM)", + }, + { .func = main_vcfstats, + .alias = "stats", + .help = "produce VCF/BCF stats" + }, + + { .func = main_vcfsom, + .alias = "som", + .help = "-filter using Self-Organized Maps (experimental)" // do not advertise + + }, + { .func = NULL, + .alias = NULL, + .help = NULL + } +}; + +char *bcftools_version(void) +{ + return BCFTOOLS_VERSION; +} + +static void usage(FILE *fp) +{ + fprintf(fp, "\n"); + fprintf(fp, "Program: bcftools (Tools for variant calling and manipulating VCFs and BCFs)\n"); +#if USE_GPL + fprintf(fp, "License: GNU GPLv3+, due to use of the GNU Scientific Library\n"); +#endif + fprintf(fp, "Version: %s (using htslib %s)\n", bcftools_version(), hts_version()); + fprintf(fp, "\n"); + fprintf(fp, "Usage: bcftools [--version|--version-only] [--help] \n"); + fprintf(fp, "\n"); + fprintf(fp, "Commands:\n"); + + int i = 0; + const char *sep = NULL; + while (cmds[i].alias) + { + if ( !cmds[i].func ) sep = cmds[i].alias; + if ( sep ) + { + fprintf(fp, "\n -- %s\n", sep); + sep = NULL; + } + if ( cmds[i].func && cmds[i].help[0]!='-' ) fprintf(fp, " %-12s %s\n", cmds[i].alias, cmds[i].help); + i++; + } + fprintf(fp,"\n"); + fprintf(fp, + " Most commands accept VCF, bgzipped VCF, and BCF with the file type detected\n" + " automatically even when streaming from a pipe. Indexed VCF and BCF will work\n" + " in all situations. Un-indexed VCF and BCF and streams will work in most but\n" + " not all situations.\n"); + fprintf(fp,"\n"); +} + +int main(int argc, char *argv[]) +{ + if (argc < 2) { usage(stderr); return 1; } + + if (strcmp(argv[1], "version") == 0 || strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-v") == 0) { + printf("bcftools %s\nUsing htslib %s\nCopyright (C) 2016 Genome Research Ltd.\n", bcftools_version(), hts_version()); +#if USE_GPL + printf("License GPLv3+: GNU GPL version 3 or later \n"); +#else + printf("License Expat: The MIT/Expat license\n"); +#endif + printf("This is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law.\n"); + return 0; + } + else if (strcmp(argv[1], "--version-only") == 0) { + printf("%s+htslib-%s\n", bcftools_version(), hts_version()); + return 0; + } + else if (strcmp(argv[1], "help") == 0 || strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0) { + if (argc == 2) { usage(stdout); return 0; } + // Otherwise change "bcftools help COMMAND [...]" to "bcftools COMMAND"; + // main_xyz() functions by convention display the subcommand's usage + // when invoked without any arguments. + argv++; + argc = 2; + } + else if ( argv[1][0]=='+' ) + { + // "bcftools plugin name" can be run as "bcftools +name" + argv[1]++; + argv[0] = "plugin"; + argv--; + argc++; + } + + int i = 0; + while (cmds[i].alias) + { + if (cmds[i].func && strcmp(argv[1],cmds[i].alias)==0) + { + return cmds[i].func(argc-1,argv+1); + } + i++; + } + fprintf(stderr, "[E::%s] unrecognized command '%s'\n", __func__, argv[1]); + return 1; +} + diff --git a/bcftools/main.c.pysam.c b/bcftools/main.c.pysam.c new file mode 100644 index 0000000..019adc0 --- /dev/null +++ b/bcftools/main.c.pysam.c @@ -0,0 +1,287 @@ +#include "bcftools.pysam.h" + +/* main.c -- main bcftools command front-end. + + Copyright (C) 2012-2016 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include "config.h" +#include +#include +#include +#include +#include +#include +#include "version.h" +#include "bcftools.h" + +int main_tabix(int argc, char *argv[]); +int main_vcfindex(int argc, char *argv[]); +int main_vcfstats(int argc, char *argv[]); +int main_vcfisec(int argc, char *argv[]); +int main_vcfmerge(int argc, char *argv[]); +int main_vcfquery(int argc, char *argv[]); +int main_vcffilter(int argc, char *argv[]); +int main_vcfsom(int argc, char *argv[]); +int main_vcfnorm(int argc, char *argv[]); +int main_vcfgtcheck(int argc, char *argv[]); +int main_vcfview(int argc, char *argv[]); +int main_vcfcall(int argc, char *argv[]); +int main_vcfannotate(int argc, char *argv[]); +int main_vcfroh(int argc, char *argv[]); +int main_vcfconcat(int argc, char *argv[]); +int main_bcftools_reheader(int argc, char *argv[]); +int main_vcfconvert(int argc, char *argv[]); +int main_vcfcnv(int argc, char *argv[]); +#if USE_GPL +int main_polysomy(int argc, char *argv[]); +#endif +int main_plugin(int argc, char *argv[]); +int main_consensus(int argc, char *argv[]); +int main_csq(int argc, char *argv[]); +int bam_mpileup(int argc, char *argv[]); +int main_sort(int argc, char *argv[]); + +typedef struct +{ + int (*func)(int, char*[]); + const char *alias, *help; +} +cmd_t; + +static cmd_t cmds[] = +{ + { .func = NULL, + .alias = "Indexing", + .help = NULL + }, + { .func = main_vcfindex, + .alias = "index", + .help = "index VCF/BCF files" + }, + { .func = main_tabix, + .alias = "tabix", + .help = "-tabix for BGZF'd BED, GFF, SAM, VCF and more" // do not advertise; only keep here for testing + }, + + { .func = NULL, + .alias = "VCF/BCF manipulation", + .help = NULL + }, + + { .func = main_vcfannotate, + .alias = "annotate", + .help = "annotate and edit VCF/BCF files", + }, + { .func = main_vcfconcat, + .alias = "concat", + .help = "concatenate VCF/BCF files from the same set of samples" + }, + { .func = main_vcfconvert, + .alias = "convert", + .help = "convert VCF/BCF files to different formats and back" + }, + { .func = main_vcfisec, + .alias = "isec", + .help = "intersections of VCF/BCF files" + }, + { .func = main_vcfmerge, + .alias = "merge", + .help = "merge VCF/BCF files files from non-overlapping sample sets" + }, + { .func = main_vcfnorm, + .alias = "norm", + .help = "left-align and normalize indels" + }, + { .func = main_plugin, + .alias = "plugin", +#ifdef ENABLE_BCF_PLUGINS + .help = "user-defined plugins" +#else + /* Do not advertise when plugins disabled. */ + .help = "-user-defined plugins" +#endif + }, + { .func = main_vcfquery, + .alias = "query", + .help = "transform VCF/BCF into user-defined formats" + }, + { .func = main_bcftools_reheader, + .alias = "reheader", + .help = "modify VCF/BCF header, change sample names" + }, + { .func = main_sort, + .alias = "sort", + .help = "sort VCF/BCF file" + }, + { .func = main_vcfview, + .alias = "view", + .help = "VCF/BCF conversion, view, subset and filter VCF/BCF files" + }, + + { .func = NULL, + .alias = "VCF/BCF analysis", + .help = NULL + }, + + { .func = main_vcfcall, + .alias = "call", + .help = "SNP/indel calling" + }, + { .func = main_consensus, + .alias = "consensus", + .help = "create consensus sequence by applying VCF variants" + }, + { .func = main_vcfcnv, + .alias = "cnv", + .help = "HMM CNV calling" + }, + { .func = main_csq, + .alias = "csq", + .help = "call variation consequences" + }, + { .func = main_vcffilter, + .alias = "filter", + .help = "filter VCF/BCF files using fixed thresholds" + }, + { .func = main_vcfgtcheck, + .alias = "gtcheck", + .help = "check sample concordance, detect sample swaps and contamination" + }, + { .func = bam_mpileup, + .alias = "mpileup", + .help = "multi-way pileup producing genotype likelihoods" + }, +#if USE_GPL + { .func = main_polysomy, + .alias = "polysomy", + .help = "detect number of chromosomal copies", + }, +#endif + { .func = main_vcfroh, + .alias = "roh", + .help = "identify runs of autozygosity (HMM)", + }, + { .func = main_vcfstats, + .alias = "stats", + .help = "produce VCF/BCF stats" + }, + + { .func = main_vcfsom, + .alias = "som", + .help = "-filter using Self-Organized Maps (experimental)" // do not advertise + + }, + { .func = NULL, + .alias = NULL, + .help = NULL + } +}; + +char *bcftools_version(void) +{ + return BCFTOOLS_VERSION; +} + +static void usage(FILE *fp) +{ + fprintf(fp, "\n"); + fprintf(fp, "Program: bcftools (Tools for variant calling and manipulating VCFs and BCFs)\n"); +#if USE_GPL + fprintf(fp, "License: GNU GPLv3+, due to use of the GNU Scientific Library\n"); +#endif + fprintf(fp, "Version: %s (using htslib %s)\n", bcftools_version(), hts_version()); + fprintf(fp, "\n"); + fprintf(fp, "Usage: bcftools [--version|--version-only] [--help] \n"); + fprintf(fp, "\n"); + fprintf(fp, "Commands:\n"); + + int i = 0; + const char *sep = NULL; + while (cmds[i].alias) + { + if ( !cmds[i].func ) sep = cmds[i].alias; + if ( sep ) + { + fprintf(fp, "\n -- %s\n", sep); + sep = NULL; + } + if ( cmds[i].func && cmds[i].help[0]!='-' ) fprintf(fp, " %-12s %s\n", cmds[i].alias, cmds[i].help); + i++; + } + fprintf(fp,"\n"); + fprintf(fp, + " Most commands accept VCF, bgzipped VCF, and BCF with the file type detected\n" + " automatically even when streaming from a pipe. Indexed VCF and BCF will work\n" + " in all situations. Un-indexed VCF and BCF and streams will work in most but\n" + " not all situations.\n"); + fprintf(fp,"\n"); +} + +int bcftools_main(int argc, char *argv[]) +{ + if (argc < 2) { usage(bcftools_stderr); return 1; } + + if (strcmp(argv[1], "version") == 0 || strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-v") == 0) { + fprintf(bcftools_stdout, "bcftools %s\nUsing htslib %s\nCopyright (C) 2016 Genome Research Ltd.\n", bcftools_version(), hts_version()); +#if USE_GPL + fprintf(bcftools_stdout, "License GPLv3+: GNU GPL version 3 or later \n"); +#else + fprintf(bcftools_stdout, "License Expat: The MIT/Expat license\n"); +#endif + fprintf(bcftools_stdout, "This is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law.\n"); + return 0; + } + else if (strcmp(argv[1], "--version-only") == 0) { + fprintf(bcftools_stdout, "%s+htslib-%s\n", bcftools_version(), hts_version()); + return 0; + } + else if (strcmp(argv[1], "help") == 0 || strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0) { + if (argc == 2) { usage(bcftools_stdout); return 0; } + // Otherwise change "bcftools help COMMAND [...]" to "bcftools COMMAND"; + // main_xyz() functions by convention display the subcommand's usage + // when invoked without any arguments. + argv++; + argc = 2; + } + else if ( argv[1][0]=='+' ) + { + // "bcftools plugin name" can be run as "bcftools +name" + argv[1]++; + argv[0] = "plugin"; + argv--; + argc++; + } + + int i = 0; + while (cmds[i].alias) + { + if (cmds[i].func && strcmp(argv[1],cmds[i].alias)==0) + { + return cmds[i].func(argc-1,argv+1); + } + i++; + } + fprintf(bcftools_stderr, "[E::%s] unrecognized command '%s'\n", __func__, argv[1]); + return 1; +} + diff --git a/bcftools/mcall.c b/bcftools/mcall.c new file mode 100644 index 0000000..7f7515f --- /dev/null +++ b/bcftools/mcall.c @@ -0,0 +1,1579 @@ +/* mcall.c -- multiallelic and rare variant calling. + + Copyright (C) 2012-2016 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include "call.h" + +// Using priors for GTs does not seem to be mathematically justified. Although +// it seems effective in removing false calls, it also flips a significant +// proportion of HET genotypes. Better is to filter by FORMAT/GQ using +// `bcftools filter`. +#define USE_PRIOR_FOR_GTS 0 + +// Go with uniform PLs for samples with no coverage. If unset, missing +// genotypes is reported instead. +#define FLAT_PDG_FOR_MISSING 0 + +// Estimate QS (combined quality and allele frequencies) from PLs +#define QS_FROM_PDG 0 + + +void qcall_init(call_t *call) { return; } +void qcall_destroy(call_t *call) { return; } +int qcall(call_t *call, bcf1_t *rec) +{ + // QCall format: + // chromosome, position, reference allele, depth, mapping quality, 0, .. + error("TODO: qcall output\n"); + return 0; +} + +void call_init_pl2p(call_t *call) +{ + int i; + for (i=0; i<256; i++) + call->pl2p[i] = pow(10., -i/10.); +} + +// Macros for accessing call->trio and call->ntrio +#define FTYPE_222 0 // family type: all diploid +#define FTYPE_121 1 // chrX, the child is a boy +#define FTYPE_122 2 // chrX, a girl +#define FTYPE_101 3 // chrY, boy +#define FTYPE_100 4 // chrY, girl + +#define GT_SKIP 0xf // empty genotype (chrY in females) + +#define IS_POW2(x) (!((x) & ((x) - 1))) // zero is permitted +#define IS_HOM(x) IS_POW2(x) + +// Pkij = P(k|i,j) tells how likely it is to be a het if the parents +// are homs etc. The consistency of i,j,k has been already checked. +// Parameters are alleles and ploidy of father, mother, kid +// Returns 2/Pkij. +int calc_Pkij(int fals, int mals, int kals, int fpl, int mpl, int kpl) +{ + int als = fals|mals|kals; + if ( IS_HOM(als) ) return 2; // all are the same: child must be a HOM, P=1 + + if ( fpl==1 ) + { + if ( kpl==1 ) // chr X, the child is a boy, the copy is inherited from the mother + { + if ( IS_HOM(mals) ) return 2; // 0 11 -> P(1) = 1 + return 4; // 0 01 -> P(0) = P(1) = 1/2 + } + // chr X, the child is a girl + if ( IS_HOM(mals) ) return 2; // 0 11 -> P(01) = 1 + return 4; // 0 01 -> P(00) = P(01) = 1/2 + } + + if ( IS_HOM(fals) && IS_HOM(mals) ) return 2; // 00 11 01, the child must be a HET, P=1 + if ( !IS_HOM(fals) && !IS_HOM(mals) ) + { + if ( IS_HOM(kals) ) return 8; // 01 01 00 or 01 01 11, P(k=HOM) = 1/4 + return 4; // 01 01 01, P(k=HET) = 1/2 + } + return 4; // 00 01, P(k=HET) = P(k=HOM) = 1/2 +} + +// Initialize ntrio and trio: ntrio lists the number of possible +// genotypes given combination of haploid/diploid genomes and the +// number of alleles. trio lists allowed genotype combinations: +// 4bit: 2/Pkij, 4: father, 4: mother, 4: child +// See also mcall_call_trio_genotypes() +// +static void mcall_init_trios(call_t *call) +{ + if ( call->prior_AN ) + { + int id = bcf_hdr_id2int(call->hdr,BCF_DT_ID,call->prior_AN); + if ( id==-1 ) error("No such tag \"%s\"\n", call->prior_AN); + if ( !bcf_hdr_idinfo_exists(call->hdr,BCF_HL_FMT,id) ) error("No such FORMAT tag \"%s\"\n", call->prior_AN); + id = bcf_hdr_id2int(call->hdr,BCF_DT_ID,call->prior_AC); + if ( id==-1 ) error("No such tag \"%s\"\n", call->prior_AC); + if ( !bcf_hdr_idinfo_exists(call->hdr,BCF_HL_FMT,id) ) error("No such FORMAT tag \"%s\"\n", call->prior_AC); + } + + // 23, 138, 478 possible diploid trio genotypes with 2, 3, 4 alleles + call->ntrio[FTYPE_222][2] = 15; call->ntrio[FTYPE_222][3] = 78; call->ntrio[FTYPE_222][4] = 250; + call->ntrio[FTYPE_121][2] = 8; call->ntrio[FTYPE_121][3] = 27; call->ntrio[FTYPE_121][4] = 64; + call->ntrio[FTYPE_122][2] = 8; call->ntrio[FTYPE_122][3] = 27; call->ntrio[FTYPE_122][4] = 64; + call->ntrio[FTYPE_101][2] = 2; call->ntrio[FTYPE_101][3] = 3; call->ntrio[FTYPE_101][4] = 4; + call->ntrio[FTYPE_100][2] = 2; call->ntrio[FTYPE_100][3] = 3; call->ntrio[FTYPE_100][4] = 4; + + int nals, itype; + for (itype=0; itype<=4; itype++) + { + for (nals=2; nals<=4; nals++) + call->trio[itype][nals] = (uint16_t*) malloc(sizeof(uint16_t)*call->ntrio[itype][nals]); + } + + // max 10 possible diploid genotypes + int gts[10]; + for (nals=2; nals<=4; nals++) + { + int i,j,k, n = 0, ngts = 0; + for (i=0; itrio[FTYPE_222][nals][n++] = Pkij<<12 | i<<8 | j<<4 | k; // father, mother, child + } + assert( n==call->ntrio[FTYPE_222][nals] ); + + // 121: chrX, boy + n = 0; + for (i=0; itrio[FTYPE_121][nals][n++] = Pkij<<12 | i<<8 | j<<4 | k; + } + assert( n==call->ntrio[FTYPE_121][nals] ); + + // 122: chrX, girl + n = 0; + for (i=0; itrio[FTYPE_122][nals][n++] = Pkij<<12 | i<<8 | j<<4 | k; + } + assert( n==call->ntrio[FTYPE_122][nals] ); + + // 101: chrY, boy + n = 0; + for (i=0; itrio[FTYPE_101][nals][n++] = 1<<12 | i<<8 | GT_SKIP<<4 | k; + } + assert( n==call->ntrio[FTYPE_101][nals] ); + + // 100: chrY, girl + n = 0; + for (i=0; itrio[FTYPE_100][nals][n++] = 1<<12 | i<<8 | GT_SKIP<<4 | GT_SKIP; + } + assert( n==call->ntrio[FTYPE_100][nals] ); + + } + call->GLs = (double*) calloc(bcf_hdr_nsamples(call->hdr)*10,sizeof(double)); + + int i, j; + for (i=0; infams; i++) + { + family_t *fam = &call->fams[i]; + int ploidy[3]; + for (j=0; j<3; j++) + ploidy[j] = call->ploidy[fam->sample[j]]; + + if ( ploidy[FATHER]==2 ) // not X, not Y + { + if ( ploidy[MOTHER]!=2 || ploidy[CHILD]!=2 ) + error("Incorrect ploidy: %d %d %d\n", ploidy[FATHER],ploidy[MOTHER],ploidy[CHILD]); + fam->type = FTYPE_222; + continue; + } + if ( ploidy[FATHER]!=1 || ploidy[MOTHER]==1 ) + error("Incorrect ploidy: %d %d %d\n", ploidy[FATHER],ploidy[MOTHER],ploidy[CHILD]); + if ( ploidy[MOTHER]==2 ) // X + { + if ( ploidy[CHILD]==0 ) + error("Incorrect ploidy: %d %d %d\n", ploidy[FATHER],ploidy[MOTHER],ploidy[CHILD]); + fam->type = ploidy[CHILD]==2 ? FTYPE_122 : FTYPE_121; // a girl or a boy + } + else // Y + { + if ( ploidy[CHILD]==2 ) + error("Incorrect ploidy: %d %d %d\n", ploidy[FATHER],ploidy[MOTHER],ploidy[CHILD]); + fam->type = ploidy[CHILD]==0 ? FTYPE_100 : FTYPE_101; // a girl or a boy + } + } +} +static void mcall_destroy_trios(call_t *call) +{ + int i, j; + for (i=2; i<=4; i++) + for (j=0; j<=4; j++) + free(call->trio[j][i]); +} + +void mcall_init(call_t *call) +{ + call_init_pl2p(call); + + call->nqsum = 5; + call->qsum = (float*) malloc(sizeof(float)*call->nqsum); // will be expanded later if ncessary + call->nals_map = 5; + call->als_map = (int*) malloc(sizeof(int)*call->nals_map); + call->npl_map = 5*(5+1)/2; // will be expanded later if necessary + call->pl_map = (int*) malloc(sizeof(int)*call->npl_map); + call->gts = (int32_t*) calloc(bcf_hdr_nsamples(call->hdr)*2,sizeof(int32_t)); // assuming at most diploid everywhere + + if ( call->flag & CALL_CONSTR_TRIO ) + { + call->cgts = (int32_t*) calloc(bcf_hdr_nsamples(call->hdr),sizeof(int32_t)); + call->ugts = (int32_t*) calloc(bcf_hdr_nsamples(call->hdr),sizeof(int32_t)); + mcall_init_trios(call); + bcf_hdr_append(call->hdr,"##FORMAT="); + bcf_hdr_append(call->hdr,"##FORMAT="); + } + if ( call->flag & CALL_CONSTR_ALLELES ) call->vcmp = vcmp_init(); + + bcf_hdr_append(call->hdr,"##FORMAT="); + if ( call->output_tags & CALL_FMT_GQ ) + bcf_hdr_append(call->hdr,"##FORMAT="); + if ( call->output_tags & CALL_FMT_GP ) + bcf_hdr_append(call->hdr,"##FORMAT="); + if ( call->output_tags & (CALL_FMT_GQ|CALL_FMT_GP) ) + call->GQs = (int32_t*) malloc(sizeof(int32_t)*bcf_hdr_nsamples(call->hdr)); + bcf_hdr_append(call->hdr,"##INFO="); + bcf_hdr_append(call->hdr,"##INFO="); + bcf_hdr_append(call->hdr,"##INFO="); + bcf_hdr_append(call->hdr,"##INFO="); + bcf_hdr_append(call->hdr,"##INFO="); + bcf_hdr_append(call->hdr,"##INFO="); + + // init the prior + if ( call->theta>0 ) + { + int i, n = 0; + if ( !call->ploidy ) n = 2*bcf_hdr_nsamples(call->hdr); // all are diploid + else + { + for (i=0; ihdr); i++) + n += call->ploidy[i]; + } + // Watterson factor, here aM_1 = aM_2 = 1 + double aM = 1; + for (i=2; itheta *= aM; + if ( call->theta >= 1 ) + { + fprintf(stderr,"The prior is too big (theta*aM=%.2f), going with 0.99\n", call->theta); + call->theta = 0.99; + } + call->theta = log(call->theta); + } + + return; +} + +void mcall_destroy(call_t *call) +{ + if (call->vcmp) vcmp_destroy(call->vcmp); + free(call->itmp); + mcall_destroy_trios(call); + free(call->GPs); + free(call->GLs); + free(call->GQs); + free(call->anno16); + free(call->PLs); + free(call->qsum); + free(call->als_map); + free(call->pl_map); + free(call->gts); free(call->cgts); free(call->ugts); + free(call->pdg); + free(call->als); + free(call->ac); + return; +} + + +// Inits P(D|G): convert PLs from log space and normalize. In case of zero +// depth, missing PLs are all zero. In this case, pdg's are set to 0 +// so that the corresponding genotypes can be set as missing and the +// qual calculation is not affected. +// Missing values are replaced by generic likelihoods when X (unseen allele) is +// present. +// NB: While the -m callig model uses the pdgs in canonical order, +// the original samtools -c calling code uses pdgs in reverse order (AA comes +// first, RR last). +// NB: Ploidy is not taken into account here, which is incorrect. +void set_pdg(double *pl2p, int *PLs, double *pdg, int n_smpl, int n_gt, int unseen) +{ + int i, j, nals; + + // find out the number of alleles, expecting diploid genotype likelihoods + bcf_gt2alleles(n_gt-1, &i, &nals); + assert( i==nals ); + nals++; + + for (i=0; ipdg; + int ngts = rec->n_allele*(rec->n_allele+1)/2; + int i,nsmpl = bcf_hdr_nsamples(call->hdr); + + hts_expand(float,rec->n_allele,call->nqsum,call->qsum); + for (i=0; in_allele; i++) call->qsum[i] = 0; + + for (i=0; in_allele; a++) + { + for (b=0; b<=a; b++) + { + call->qsum[a] += pdg[k]; + call->qsum[b] += pdg[k]; + k++; + } + } + pdg += ngts; + } + float sum = 0; + for (i=0; in_allele; i++) sum += call->qsum[i]; + if ( sum ) for (i=0; in_allele; i++) call->qsum[i] /= sum; +} + +// Create mapping between old and new (trimmed) alleles +void init_allele_trimming_maps(call_t *call, int als, int nals) +{ + int i, j; + + // als_map: old(i) -> new(j) + for (i=0, j=0; ials_map[i] = j++; + else call->als_map[i] = -1; + } + + if ( !call->pl_map ) return; + + // pl_map: new(k) -> old(l) + int k = 0, l = 0; + for (i=0; ipl_map[k++] = l; + l++; + } + } +} + +double binom_dist(int N, double p, int k) +{ + int mean = (int) (N*p); + if ( mean==k ) return 1.0; + + double log_p = (k-mean)*log(p) + (mean-k)*log(1.0-p); + if ( k > N - k ) k = N - k; + if ( mean > N - mean ) mean = N - mean; + + if ( k < mean ) { int tmp = k; k = mean; mean = tmp; } + double diff = k - mean; + + double val = 1.0; + int i; + for (i=0; i10 && (1-q)*ndiploid>10 ) || ndiploid>200 ) + { + //fprintf(stderr,"out: mean=%e p=%e\n", mean,exp(-0.5*(nhets-mean)*(nhets-mean)/(mean*(1-q)))); + return exp(-0.5*(nhets-mean)*(nhets-mean)/(mean*(1-q))); + } + + return binom_dist(ndiploid, q, nhets); +} + +float calc_HOB(int nref, int nalt, int nhets, int ndiploid) +{ + if ( !nref || !nalt || !ndiploid ) return HUGE_VAL; + + double fref = (double)nref/(nref+nalt); // fraction of reference allelels + double falt = (double)nalt/(nref+nalt); // non-ref als + return fabs((double)nhets/ndiploid - 2*fref*falt); +} + +/** + * log(sum_i exp(a_i)) + */ +// static inline double logsumexp(double *vals, int nvals) +// { +// int i; +// double max_exp = vals[0]; +// for (i=1; ib ) + return log(1 + exp(b-a)) + a; + else + return log(1 + exp(a-b)) + b; +} + +// Macro to set the most likely alleles +#define UPDATE_MAX_LKs(als,sum) { \ + if ( max_lkhdr); + int ngts = nals*(nals+1)/2; + + // Single allele + for (ia=0; iapdg + iaa; + for (isample=0; isampletheta; // the prior + UPDATE_MAX_LKs(1<0 && lk_tot_set); + } + + // Two alleles + if ( nals>1 ) + { + for (ia=0; iaqsum[ia]==0 ) continue; + int iaa = (ia+1)*(ia+2)/2-1; + for (ib=0; ibqsum[ib]==0 ) continue; + double lk_tot = 0; + int lk_tot_set = 0; + double fa = call->qsum[ia]/(call->qsum[ia]+call->qsum[ib]); + double fb = call->qsum[ib]/(call->qsum[ia]+call->qsum[ib]); + double fa2 = fa*fa; + double fb2 = fb*fb; + double fab = 2*fa*fb; + int isample, ibb = (ib+1)*(ib+2)/2-1, iab = iaa - ia + ib; + double *pdg = call->pdg; + for (isample=0; isampleploidy || call->ploidy[isample]==2 ) + val = fa2*pdg[iaa] + fb2*pdg[ibb] + fab*pdg[iab]; + else if ( call->ploidy && call->ploidy[isample]==1 ) + val = fa*pdg[iaa] + fb*pdg[ibb]; + if ( val ) { lk_tot += log(val); lk_tot_set = 1; } + pdg += ngts; + } + if ( ia!=0 ) lk_tot += call->theta; // the prior + if ( ib!=0 ) lk_tot += call->theta; + UPDATE_MAX_LKs(1<2 ) + { + for (ia=0; iaqsum[ia]==0 ) continue; + int iaa = (ia+1)*(ia+2)/2-1; + for (ib=0; ibqsum[ib]==0 ) continue; + int ibb = (ib+1)*(ib+2)/2-1; + int iab = iaa - ia + ib; + for (ic=0; icqsum[ic]==0 ) continue; + double lk_tot = 0; + int lk_tot_set = 1; + double fa = call->qsum[ia]/(call->qsum[ia]+call->qsum[ib]+call->qsum[ic]); + double fb = call->qsum[ib]/(call->qsum[ia]+call->qsum[ib]+call->qsum[ic]); + double fc = call->qsum[ic]/(call->qsum[ia]+call->qsum[ib]+call->qsum[ic]); + double fa2 = fa*fa; + double fb2 = fb*fb; + double fc2 = fc*fc; + double fab = 2*fa*fb, fac = 2*fa*fc, fbc = 2*fb*fc; + int isample, icc = (ic+1)*(ic+2)/2-1; + int iac = iaa - ia + ic, ibc = ibb - ib + ic; + double *pdg = call->pdg; + for (isample=0; isampleploidy || call->ploidy[isample]==2 ) + val = fa2*pdg[iaa] + fb2*pdg[ibb] + fc2*pdg[icc] + fab*pdg[iab] + fac*pdg[iac] + fbc*pdg[ibc]; + else if ( call->ploidy && call->ploidy[isample]==1 ) + val = fa*pdg[iaa] + fb*pdg[ibb] + fc*pdg[icc]; + if ( val ) { lk_tot += log(val); lk_tot_set = 1; } + pdg += ngts; + } + if ( ia!=0 ) lk_tot += call->theta; // the prior + if ( ib!=0 ) lk_tot += call->theta; // the prior + if ( ic!=0 ) lk_tot += call->theta; // the prior + UPDATE_MAX_LKs(1<ref_lk = ref_lk; + call->lk_sum = lk_sum; + *out_als = max_als; + + int i, n = 0; + for (i=0; ihdr); + + for (i=0; iac[i] = 0; + call->nhets = 0; + call->ndiploid = 0; + + // Set all genotypes to 0/0 or 0 + int *gts = call->gts; + double *pdg = call->pdg; + int isample; + for (isample = 0; isample < nsmpl; isample++) + { + int ploidy = call->ploidy ? call->ploidy[isample] : 2; + for (i=0; iac[0] += ploidy; + } + gts += 2; + pdg += ngts; + } +} + +static void mcall_call_genotypes(call_t *call, bcf1_t *rec, int nals, int nout_als, int out_als) +{ + int ia, ib, i; + int ngts = nals*(nals+1)/2; + int nsmpl = bcf_hdr_nsamples(call->hdr); + int nout_gts = nout_als*(nout_als+1)/2; + hts_expand(float,nout_gts*nsmpl,call->nGPs,call->GPs); + + for (i=0; iac[i] = 0; + call->nhets = 0; + call->ndiploid = 0; + + #if USE_PRIOR_FOR_GTS + float prior = exp(call->theta); + #endif + float *gps = call->GPs - nout_gts; + double *pdg = call->pdg - ngts; + int *gts = call->gts - 2; + + int isample; + for (isample = 0; isample < nsmpl; isample++) + { + int ploidy = call->ploidy ? call->ploidy[isample] : 2; + assert( ploidy>=0 && ploidy<=2 ); + + pdg += ngts; + gts += 2; + gps += nout_gts; + + if ( !ploidy ) + { + gts[0] = bcf_gt_missing; + gts[1] = bcf_int32_vector_end; + gps[0] = -1; + continue; + } + + #if !FLAT_PDG_FOR_MISSING + // Skip samples with zero depth, they have all pdg's equal to 0 + for (i=0; indiploid++; + + // Default fallback for the case all LKs are the same + gts[0] = bcf_gt_unphased(0); + gts[1] = ploidy==2 ? bcf_gt_unphased(0) : bcf_int32_vector_end; + + // Non-zero depth, determine the most likely genotype + double best_lk = 0; + for (ia=0; iaqsum[ia]*call->qsum[ia] : pdg[iaa]*call->qsum[ia]; + #if USE_PRIOR_FOR_GTS + if ( ia!=0 ) lk *= prior; + #endif + int igt = ploidy==2 ? bcf_alleles2gt(call->als_map[ia],call->als_map[ia]) : call->als_map[ia]; + gps[igt] = lk; + if ( best_lk < lk ) + { + best_lk = lk; + gts[0] = bcf_gt_unphased(call->als_map[ia]); + } + } + if ( ploidy==2 ) + { + gts[1] = gts[0]; + for (ia=0; iaqsum[ia]*call->qsum[ib]; + #if USE_PRIOR_FOR_GTS + if ( ia!=0 ) lk *= prior; + if ( ib!=0 ) lk *= prior; + #endif + int igt = bcf_alleles2gt(call->als_map[ia],call->als_map[ib]); + gps[igt] = lk; + if ( best_lk < lk ) + { + best_lk = lk; + gts[0] = bcf_gt_unphased(call->als_map[ib]); + gts[1] = bcf_gt_unphased(call->als_map[ia]); + } + } + } + if ( gts[0] != gts[1] ) call->nhets++; + } + else + gts[1] = bcf_int32_vector_end; + + call->ac[ bcf_gt_allele(gts[0]) ]++; + if ( gts[1]!=bcf_int32_vector_end ) call->ac[ bcf_gt_allele(gts[1]) ]++; + } + if ( call->output_tags & (CALL_FMT_GQ|CALL_FMT_GP) ) + { + double max, sum; + for (isample=0; isampleGPs + isample*nout_gts; + + int nmax; + if ( call->ploidy ) + { + if ( call->ploidy[isample]==2 ) nmax = nout_gts; + else if ( call->ploidy[isample]==1 ) nmax = nout_als; + else nmax = 0; + } + else nmax = nout_gts; + + max = gps[0]; + if ( max<0 || nmax==0 ) + { + // no call + if ( call->output_tags & CALL_FMT_GP ) + { + for (i=0; iGQs[isample] = 0; + continue; + } + sum = gps[0]; + for (i=1; iGQs[isample] = max<=INT8_MAX ? max : INT8_MAX; + if ( call->output_tags & CALL_FMT_GP ) + { + assert( max ); + for (i=0; ioutput_tags & CALL_FMT_GP ) + bcf_update_format_float(call->hdr, rec, "GP", call->GPs, nsmpl*nout_gts); + if ( call->output_tags & CALL_FMT_GQ ) + bcf_update_format_int32(call->hdr, rec, "GQ", call->GQs, nsmpl); +} + + +/** + Pm = P(mendelian) .. parameter to vary, 1-Pm is the probability of novel mutation. + When trio_Pm_ins is negative, Pm is calculated dynamically + according to indel length. For simplicity, only the + first ALT is considered. + Pkij = P(k|i,j) .. probability that the genotype combination i,j,k is consistent + with mendelian inheritance (the likelihood that offspring + of two HETs is a HOM is smaller than it being a HET) + + P_uc(F=i,M=j,K=k) = P(F=i) . P(M=j) . P(K=k) .. unconstrained P + P_c(F=i,M=j,K=k) = P_uc . Pkij .. constrained P + P(F=i,M=j,K=k) = P_uc . (1 - Pm) + P_c . Pm + = P_uc . [1 - Pm + Pkij . Pm] + + We choose genotype combination i,j,k which maximizes P(F=i,M=j,K=k). This + probability gives the quality GQ(Trio). + Individual qualities are calculated as + GQ(F=i,M=j,K=k) = P(F=i,M=j,K=k) / \sum_{x,y} P(F=i,M=x,K=y) + */ +static void mcall_call_trio_genotypes(call_t *call, bcf1_t *rec, int nals, int nout_als, int out_als) +{ + int ia, ib, i; + int nsmpl = bcf_hdr_nsamples(call->hdr); + int ngts = nals*(nals+1)/2; + int nout_gts = nout_als*(nout_als+1)/2; + double *gls = call->GLs - nout_gts; + double *pdg = call->pdg - ngts; + + // Calculate individuals' genotype likelihoods P(X=i) + int isample; + for (isample = 0; isample < nsmpl; isample++) + { + int ploidy = call->ploidy ? call->ploidy[isample] : 2; + int32_t *gts = call->ugts + isample; + + gls += nout_gts; + pdg += ngts; + + // Skip samples with all pdg's equal to 1. These have zero depth. + for (i=0; ials_map[ia],call->als_map[ia]); + double lk = ploidy==2 ? pdg[iaa]*call->qsum[ia]*call->qsum[ia] : pdg[iaa]*call->qsum[ia]; + sum_lk += lk; + gls[idx] = lk; + if ( best_lk < lk ) + { + best_lk = lk; + gts[0] = bcf_alleles2gt(call->als_map[ia],call->als_map[ia]); + } + } + if ( ploidy==2 ) + { + for (ia=0; iaals_map[ia],call->als_map[ib]); + double lk = 2*pdg[iab]*call->qsum[ia]*call->qsum[ib]; + sum_lk += lk; + gls[idx] = lk; + if ( best_lk < lk ) + { + best_lk = lk; + gts[0] = bcf_alleles2gt(call->als_map[ib],call->als_map[ia]); + } + } + } + } + for (i=0; itrio_Pm_ins<0 && call->trio_Pm_del<0 ) trio_Pm = call->trio_Pm_SNPs; // the same Pm for indels and SNPs requested + else + { + int ret = bcf_get_variant_types(rec); + if ( !(ret & VCF_INDEL) ) trio_Pm = call->trio_Pm_SNPs; + else + { + if ( call->trio_Pm_ins<0 ) // dynamic calculation, trio_Pm_del holds the scaling factor + { + trio_Pm = rec->d.var[1].n<0 ? -21.9313 - 0.2856*rec->d.var[1].n : -22.8689 + 0.2994*rec->d.var[1].n; + trio_Pm = 1 - call->trio_Pm_del * exp(trio_Pm); + } + else // snps and indels set explicitly + { + trio_Pm = rec->d.var[1].n<0 ? call->trio_Pm_del : call->trio_Pm_ins; + } + } + } + + // Calculate constrained likelihoods and determine genotypes + int ifm; + for (ifm=0; ifmnfams; ifm++) + { + family_t *fam = &call->fams[ifm]; + int ntrio = call->ntrio[fam->type][nout_als]; + uint16_t *trio = call->trio[fam->type][nout_als]; + + // Unconstrained likelihood + int uc_itr = 0; + double uc_lk = 0; + for (i=0; i<3; i++) // for father, mother, child + { + int ismpl = fam->sample[i]; + double *gl = call->GLs + nout_gts*ismpl; + if ( gl[0]==1 ) continue; + int j, jmax = 0; + double max = gl[0]; + for (j=1; jsample[i]; + double *gl = call->GLs + nout_gts*ismpl; + if ( gl[0]==1 ) continue; + int igt = trio[itr]>>((2-i)*4) & 0xf; + assert( !call->ploidy || call->ploidy[ismpl]>0 ); + if ( igt==GT_SKIP ) continue; + lk += gl[igt]; + npresent++; + // fprintf(stderr," %e", gl[igt]); + } + // fprintf(stderr,"\t\t"); + double Pkij = npresent==3 ? (double)2/(trio[itr]>>12) : 1; // with missing genotypes Pkij's are different + lk += log(1 - trio_Pm * (1 - Pkij)); + // fprintf(stderr,"%d%d%d\t%e\t%.2f\n", trio[itr]>>8&0xf,trio[itr]>>4&0xf,trio[itr]&0xf, lk, Pkij); + if ( c_lk < lk ) { c_lk = lk; c_itr = trio[itr]; } + if ( uc_itr==trio[itr] ) uc_is_mendelian = 1; + } + + if ( !uc_is_mendelian ) + { + uc_lk += log(1 - trio_Pm); + // fprintf(stderr,"c_lk=%e uc_lk=%e c_itr=%d%d%d uc_itr=%d%d%d\n", c_lk,uc_lk,c_itr>>8&0xf,c_itr>>4&0xf,c_itr&0xf,uc_itr>>8&0xf,uc_itr>>4&0xf,uc_itr&0xf); + if ( c_lk < uc_lk ) { c_lk = uc_lk; c_itr = uc_itr; } + } + // fprintf(stderr,"best_lk=%e best_itr=%d%d%d uc_itr=%d%d%d\n", c_lk,c_itr>>8&0xf,c_itr>>4&0xf,c_itr&0xf,uc_itr>>8&0xf,uc_itr>>4&0xf,uc_itr&0xf); + + // Set genotypes for father, mother, child and calculate genotype qualities + for (i=0; i<3; i++) + { + // GT + int ismpl = fam->sample[i]; + int igt = c_itr>>((2-i)*4) & 0xf; + double *gl = call->GLs + nout_gts*ismpl; + int32_t *gts = call->cgts + ismpl; + if ( gl[0]==1 || igt==GT_SKIP ) // zero depth, set missing genotypes + { + gts[0] = -1; + // bcf_float_set_missing(call->GQs[ismpl]); + continue; + } + gts[0] = igt; + + #if 0 + // todo: Genotype Qualities + // + // GQ: for each family member i sum over all genotypes j,k keeping igt fixed + double lk_sum = 0; + for (itr=0; itr>((2-i)*4) & 0xf) ) continue; + double lk = 0; + int j; + for (j=0; j<3; j++) + { + int jsmpl = fam->sample[j]; + double *gl = call->GLs + ngts*jsmpl; + if ( gl[0]==1 ) continue; + int jgt = trio[itr]>>((2-j)*4) & 0xf; + if ( jgt==GT_SKIP ) continue; + lk += gl[jgt]; + } + double Pkij = (double)2/(trio[itr]>>12); + lk += log(1 - trio_Pm * (1 - Pkij)); + lk_sum = logsumexp2(lk_sum, lk); + } + if ( !uc_is_mendelian && (best_itr>>((2-i)*4)&0xf)==(uc_itr>>((2-i)*4)&0xf) ) lk_sum = logsumexp2(lk_sum,uc_lk); + call->GQs[ismpl] = -4.3429*(best_lk - lk_sum); + #endif + } + } + + for (i=0; i<4; i++) call->ac[i] = 0; + call->nhets = 0; + call->ndiploid = 0; + + // Test if CGT,UGT are needed + int ucgts_needed = 0; + int32_t *cgts = call->cgts - 1; + int32_t *ugts = call->ugts - 1; + int32_t *gts = call->gts - 2; + for (isample = 0; isample < nsmpl; isample++) + { + int ploidy = call->ploidy ? call->ploidy[isample] : 2; + cgts++; + ugts++; + gts += 2; + if ( ugts[0]==-1 ) + { + gts[0] = bcf_gt_missing; + gts[1] = ploidy==2 ? bcf_gt_missing : bcf_int32_vector_end; + continue; + } + int a,b; + if ( cgts[0]!=ugts[0] ) + { + bcf_gt2alleles(cgts[0], &a, &b); + gts[0] = bcf_gt_unphased(a); + gts[1] = ploidy==1 ? bcf_int32_vector_end : bcf_gt_unphased(b); + } + else + { + bcf_gt2alleles(ugts[0], &a, &b); + gts[0] = bcf_gt_unphased(a); + gts[1] = ploidy==1 ? bcf_int32_vector_end : bcf_gt_unphased(b); + } + if ( cgts[0]!=ugts[0] ) ucgts_needed = 1; + call->ac[a]++; + if ( ploidy==2 ) + { + call->ac[b]++; + call->ndiploid++; + if ( a!=b ) call->nhets++; + } + } + if ( ucgts_needed ) + { + // Some GTs are different + bcf_update_format_int32(call->hdr,rec,"UGT",call->ugts,nsmpl); + bcf_update_format_int32(call->hdr,rec,"CGT",call->cgts,nsmpl); + } +} + +static void mcall_trim_PLs(call_t *call, bcf1_t *rec, int nals, int nout_als, int out_als) +{ + int ngts = nals*(nals+1)/2; + int npls_src = ngts, npls_dst = nout_als*(nout_als+1)/2; // number of PL values in diploid samples, ori and new + if ( call->all_diploid && npls_src == npls_dst ) return; + + int *pls_src = call->PLs, *pls_dst = call->PLs; + + int nsmpl = bcf_hdr_nsamples(call->hdr); + int isample, ia; + for (isample = 0; isample < nsmpl; isample++) + { + int ploidy = call->ploidy ? call->ploidy[isample] : 2; + if ( ploidy==2 ) + { + for (ia=0; iapl_map[ia] ]; + } + else if ( ploidy==1 ) + { + for (ia=0; iapl_map[isrc] ]; + } + if ( ia1 in mcall() + } + pls_src += npls_src; + pls_dst += npls_dst; + } + bcf_update_format_int32(call->hdr, rec, "PL", call->PLs, npls_dst*nsmpl); +} + +void mcall_trim_numberR(call_t *call, bcf1_t *rec, int nals, int nout_als, int out_als) +{ + if ( nals==nout_als ) return; + + int i,j, nret, size = sizeof(float); + + void *tmp_ori = call->itmp, *tmp_new = call->PLs; // reusing PLs storage which is not used at this point + int ntmp_ori = call->n_itmp, ntmp_new = call->mPLs; + + // INFO fields + for (i=0; in_info; i++) + { + bcf_info_t *info = &rec->d.info[i]; + int vlen = bcf_hdr_id2length(call->hdr,BCF_HL_INFO,info->key); + if ( vlen!=BCF_VL_R ) continue; // not a Number=R tag + + int type = bcf_hdr_id2type(call->hdr,BCF_HL_INFO,info->key); + const char *key = bcf_hdr_int2id(call->hdr,BCF_DT_ID,info->key); + nret = bcf_get_info_values(call->hdr, rec, key, &tmp_ori, &ntmp_ori, type); + if ( nret<=0 ) continue; + + if ( nout_als==1 ) + bcf_update_info_int32(call->hdr, rec, key, tmp_ori, 1); // has to be the REF, the order could not change + else + { + for (j=0; jals_map[j]; + if ( k==-1 ) continue; // to be dropped + memcpy((char *)tmp_new+size*k, (char *)tmp_ori+size*j, size); + } + bcf_update_info_int32(call->hdr, rec, key, tmp_new, nout_als); + } + } + + // FORMAT fields + for (i=0; in_fmt; i++) + { + bcf_fmt_t *fmt = &rec->d.fmt[i]; + int vlen = bcf_hdr_id2length(call->hdr,BCF_HL_FMT,fmt->id); + if ( vlen!=BCF_VL_R ) continue; // not a Number=R tag + + int type = bcf_hdr_id2type(call->hdr,BCF_HL_FMT,fmt->id); + const char *key = bcf_hdr_int2id(call->hdr,BCF_DT_ID,fmt->id); + nret = bcf_get_format_values(call->hdr, rec, key, &tmp_ori, &ntmp_ori, type); + if (nret<=0) continue; + int nsmpl = bcf_hdr_nsamples(call->hdr); + + assert( nret==nals*nsmpl ); + + for (j=0; jals_map[k]; + if ( l==-1 ) continue; // to be dropped + memcpy(ptr_dst+size*l, ptr_src+size*k, size); + } + } + bcf_update_format_int32(call->hdr, rec, key, tmp_new, nout_als*nsmpl); + } + + call->PLs = (int32_t*) tmp_new; + call->mPLs = ntmp_new; + call->itmp = (int32_t*) tmp_ori; + call->n_itmp = ntmp_ori; +} + + +// NB: in this function we temporarily use calls->als_map for a different +// purpose to store mapping from new (target) alleles to original alleles. +// +static int mcall_constrain_alleles(call_t *call, bcf1_t *rec, int *unseen) +{ + bcf_sr_regions_t *tgt = call->srs->targets; + if ( tgt->nals>5 ) error("Maximum accepted number of alleles is 5, got %d\n", tgt->nals); + hts_expand(char*,tgt->nals+1,call->nals,call->als); + + int has_new = 0; + + int i, j, nals = 1; + for (i=1; inals_map; i++) call->als_map[i] = -1; + + if ( vcmp_set_ref(call->vcmp, rec->d.allele[0], tgt->als[0]) < 0 ) + error("The reference alleles are not compatible at %s:%d .. %s vs %s\n", call->hdr->id[BCF_DT_CTG][rec->rid].key,rec->pos+1,tgt->als[0],rec->d.allele[0]); + + // create mapping from new to old alleles + call->als[0] = tgt->als[0]; + call->als_map[0] = 0; + + for (i=1; inals; i++) + { + call->als[nals] = tgt->als[i]; + j = vcmp_find_allele(call->vcmp, rec->d.allele+1, rec->n_allele - 1, tgt->als[i]); + + if ( j+1==*unseen ) { fprintf(stderr,"fixme? Cannot constrain to %s\n",tgt->als[i]); return -1; } + + if ( j>=0 ) + { + // existing allele + call->als_map[nals] = j+1; + } + else + { + // There is a new allele in targets which is not present in VCF. + // We use the X allele to estimate PLs. Note that X may not be + // present at multiallelic indels sites. In that case we use the + // last allele anyway, because the least likely allele comes last + // in mpileup's ALT output. + call->als_map[nals] = (*unseen)>=0 ? *unseen : rec->n_allele - 1; + has_new = 1; + } + nals++; + } + if ( *unseen ) + { + call->als_map[nals] = *unseen; + call->als[nals] = rec->d.allele[*unseen]; + nals++; + } + + if ( !has_new && nals==rec->n_allele ) return 0; + bcf_update_alleles(call->hdr, rec, (const char**)call->als, nals); + + // create mapping from new PL to old PL + int k = 0; + for (i=0; ials_map[i], b = call->als_map[j]; + call->pl_map[k++] = a>b ? a*(a+1)/2 + b : b*(b+1)/2 + a; + } + } + + // update PL + call->nPLs = bcf_get_format_int32(call->hdr, rec, "PL", &call->PLs, &call->mPLs); + int nsmpl = bcf_hdr_nsamples(call->hdr); + int npls_ori = call->nPLs / nsmpl; + int npls_new = k; + hts_expand(int32_t,npls_new*nsmpl,call->n_itmp,call->itmp); + int *ori_pl = call->PLs, *new_pl = call->itmp; + for (i=0; ipl_map[k]]; + if ( new_pl[k]==bcf_int32_missing && *unseen>=0 ) + { + // missing value, and there is an unseen allele: identify the + // alleles and use the lk of either AX or XX + int k_ori = call->pl_map[k], ia, ib; + bcf_gt2alleles(k_ori, &ia, &ib); + k_ori = bcf_alleles2gt(ia,*unseen); + if ( ori_pl[k_ori]==bcf_int32_missing ) k_ori = bcf_alleles2gt(ib,*unseen); + if ( ori_pl[k_ori]==bcf_int32_missing ) k_ori = bcf_alleles2gt(*unseen,*unseen); + new_pl[k] = ori_pl[k_ori]; + } + if ( !k && new_pl[k]==bcf_int32_vector_end ) new_pl[k]=bcf_int32_missing; + } + ori_pl += npls_ori; + new_pl += npls_new; + } + bcf_update_format_int32(call->hdr, rec, "PL", call->itmp, npls_new*nsmpl); + + // update QS + float qsum[5]; + int nqs = bcf_get_info_float(call->hdr, rec, "QS", &call->qsum, &call->nqsum); + for (i=0; ials_map[i]qsum[call->als_map[i]] : 0; + bcf_update_info_float(call->hdr, rec, "QS", qsum, nals); + + if ( *unseen ) *unseen = nals-1; + return 0; +} + + +/** + * This function implements the multiallelic calling model. It has two major parts: + * 1) determine the most likely set of alleles and calculate the quality of ref/non-ref site + * 2) determine and set the genotypes + * In various places in between, the BCF record gets updated. + */ +int mcall(call_t *call, bcf1_t *rec) +{ + int i, unseen = call->unseen; + + // Force alleles when calling genotypes given alleles was requested + if ( call->flag & CALL_CONSTR_ALLELES && mcall_constrain_alleles(call, rec, &unseen)!=0 ) return -2; + + int nsmpl = bcf_hdr_nsamples(call->hdr); + int nals = rec->n_allele; + hts_expand(int,nals,call->nac,call->ac); + hts_expand(int,nals,call->nals_map,call->als_map); + hts_expand(int,nals*(nals+1)/2,call->npl_map,call->pl_map); + + // Get the genotype likelihoods + call->nPLs = bcf_get_format_int32(call->hdr, rec, "PL", &call->PLs, &call->mPLs); + if ( call->nPLs!=nsmpl*nals*(nals+1)/2 && call->nPLs!=nsmpl*nals ) // a mixture of diploid and haploid or haploid only + error("Wrong number of PL fields? nals=%d npl=%d\n", nals,call->nPLs); + + // Convert PLs to probabilities + int ngts = nals*(nals+1)/2; + hts_expand(double, call->nPLs, call->npdg, call->pdg); + set_pdg(call->pl2p, call->PLs, call->pdg, nsmpl, ngts, unseen); + + #if QS_FROM_PDG + estimate_qsum(call, rec); + #else + // Get sum of qualities, serves as an AF estimate, f_x = QS/N in Eq. 1 in call-m math notes. + int nqs = bcf_get_info_float(call->hdr, rec, "QS", &call->qsum, &call->nqsum); + if ( nqs<=0 ) error("The QS annotation not present at %s:%d\n", bcf_seqname(call->hdr,rec),rec->pos+1); + if ( nqs < nals ) + { + // Some of the listed alleles do not have the corresponding QS field. This is + // typically ref-only site with X in ALT. + + hts_expand(float,nals,call->nqsum,call->qsum); + for (i=nqs; iqsum[i] = 0; + } + + // If available, take into account reference panel AFs + if ( call->prior_AN && bcf_get_info_int32(call->hdr, rec, call->prior_AN ,&call->ac, &call->nac)==1 ) + { + int an = call->ac[0]; + if ( bcf_get_info_int32(call->hdr, rec, call->prior_AC ,&call->ac, &call->nac)==nals-1 ) + { + int ac0 = an; // number of alleles in the reference population + for (i=0; iac[i]==bcf_int32_vector_end ) break; + if ( call->ac[i]==bcf_int32_missing ) continue; + ac0 -= call->ac[i]; + call->qsum[i+1] += call->ac[i]*0.5; + } + if ( ac0<0 ) error("Incorrect %s,%s values at %s:%d\n", call->prior_AN,call->prior_AC,bcf_seqname(call->hdr,rec),rec->pos+1); + call->qsum[0] += ac0*0.5; + for (i=0; iqsum[i] /= nsmpl + 0.5*an; + } + } + + float qsum_tot = 0; + for (i=0; iqsum[i]; + + // Is this still necessary?? + // + // if (0&& !call->qsum[0] ) + // { + // // As P(RR)!=0 even for QS(ref)=0, we set QS(ref) to a small value, + // // an equivalent of a single reference read. + // if ( bcf_get_info_int32(call->hdr, rec, "DP", &call->itmp, &call->n_itmp)!=1 ) + // error("Could not read DP at %s:%d\n", call->hdr->id[BCF_DT_CTG][rec->rid].key,rec->pos+1); + // if ( call->itmp[0] ) + // { + // call->qsum[0] = 1.0 / call->itmp[0] / nsmpl; + // qsum_tot += call->qsum[0]; + // } + // } + + if ( qsum_tot ) for (i=0; iqsum[i] /= qsum_tot; + #endif + + bcf_update_info_int32(call->hdr, rec, "QS", NULL, 0); // remove QS tag + + // Find the best combination of alleles + int out_als, nout; + if ( nals > 8*sizeof(out_als) ) + { + fprintf(stderr,"Too many alleles at %s:%d, skipping.\n", bcf_seqname(call->hdr,rec),rec->pos+1); + return 0; + } + nout = mcall_find_best_alleles(call, nals, &out_als); + + // Make sure the REF allele is always present + if ( !(out_als&1) ) + { + out_als |= 1; + nout++; + } + int is_variant = out_als==1 ? 0 : 1; + if ( call->flag & CALL_VARONLY && !is_variant ) return 0; + + // With -A, keep all ALTs except X + if ( call->flag & CALL_KEEPALT ) + { + nout = 0; + for (i=0; i0 && i==unseen ) continue; + out_als |= 1<hdr, rec, "PL", NULL, 0); // remove PL, useless now + } + else + { + // The most likely set of alleles includes non-reference allele (or was enforced), call genotypes. + // Note that it is a valid outcome if the called genotypes exclude some of the ALTs. + init_allele_trimming_maps(call, out_als, nals); + if ( !is_variant ) + mcall_set_ref_genotypes(call,nals); // running with -A, prevent mcall_call_genotypes from putting some ALT back + else if ( call->flag & CALL_CONSTR_TRIO ) + { + if ( nout>4 ) + { + fprintf(stderr,"Too many alleles at %s:%d, skipping.\n", bcf_seqname(call->hdr,rec),rec->pos+1); + return 0; + } + mcall_call_trio_genotypes(call, rec, nals,nout,out_als); + } + else + mcall_call_genotypes(call,rec,nals,nout,out_als); + + // Skip the site if all samples are 0/0. This can happen occasionally. + nAC = 0; + for (i=1; iac[i]; + if ( !nAC && call->flag & CALL_VARONLY ) return 0; + mcall_trim_PLs(call, rec, nals, nout, out_als); + } + if ( nals!=nout ) mcall_trim_numberR(call, rec, nals, nout, out_als); + + // Set QUAL and calculate HWE-related annotations + if ( nAC ) + { + float icb = calc_ICB(call->ac[0],nAC, call->nhets, call->ndiploid); + if ( icb != HUGE_VAL ) bcf_update_info_float(call->hdr, rec, "ICB", &icb, 1); + + float hob = calc_HOB(call->ac[0],nAC, call->nhets, call->ndiploid); + if ( hob != HUGE_VAL ) bcf_update_info_float(call->hdr, rec, "HOB", &hob, 1); + + // Quality of a variant site. fabs() to avoid negative zeros in VCF output when CALL_KEEPALT is set + rec->qual = -4.343*(call->ref_lk - logsumexp2(call->lk_sum,call->ref_lk)); + } + else + { + // Set the quality of a REF site + if ( call->lk_sum==-HUGE_VAL ) // no support from (high quality) reads, so QUAL=1-prior + rec->qual = call->theta ? -4.343*call->theta : 0; + else + rec->qual = -4.343*(call->lk_sum - logsumexp2(call->lk_sum,call->ref_lk)); + } + + if ( rec->qual>999 ) rec->qual = 999; + if ( rec->qual>50 ) rec->qual = rint(rec->qual); + + // AC, AN + if ( nout>1 ) bcf_update_info_int32(call->hdr, rec, "AC", call->ac+1, nout-1); + nAC += call->ac[0]; + bcf_update_info_int32(call->hdr, rec, "AN", &nAC, 1); + + // Remove unused alleles + hts_expand(char*,nout,call->nals,call->als); + for (i=0; ials_map[i]>=0 ) call->als[call->als_map[i]] = rec->d.allele[i]; + bcf_update_alleles(call->hdr, rec, (const char**)call->als, nout); + bcf_update_genotypes(call->hdr, rec, call->gts, nsmpl*2); + + // DP4 tag + if ( bcf_get_info_float(call->hdr, rec, "I16", &call->anno16, &call->n16)==16 ) + { + int32_t dp[4]; dp[0] = call->anno16[0]; dp[1] = call->anno16[1]; dp[2] = call->anno16[2]; dp[3] = call->anno16[3]; + bcf_update_info_int32(call->hdr, rec, "DP4", dp, 4); + + int32_t mq = (call->anno16[8]+call->anno16[10])/(call->anno16[0]+call->anno16[1]+call->anno16[2]+call->anno16[3]); + bcf_update_info_int32(call->hdr, rec, "MQ", &mq, 1); + } + + bcf_update_info_int32(call->hdr, rec, "I16", NULL, 0); // remove I16 tag + + return nout; +} + diff --git a/bcftools/mcall.c.pysam.c b/bcftools/mcall.c.pysam.c new file mode 100644 index 0000000..f05bed2 --- /dev/null +++ b/bcftools/mcall.c.pysam.c @@ -0,0 +1,1581 @@ +#include "bcftools.pysam.h" + +/* mcall.c -- multiallelic and rare variant calling. + + Copyright (C) 2012-2016 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include "call.h" + +// Using priors for GTs does not seem to be mathematically justified. Although +// it seems effective in removing false calls, it also flips a significant +// proportion of HET genotypes. Better is to filter by FORMAT/GQ using +// `bcftools filter`. +#define USE_PRIOR_FOR_GTS 0 + +// Go with uniform PLs for samples with no coverage. If unset, missing +// genotypes is reported instead. +#define FLAT_PDG_FOR_MISSING 0 + +// Estimate QS (combined quality and allele frequencies) from PLs +#define QS_FROM_PDG 0 + + +void qcall_init(call_t *call) { return; } +void qcall_destroy(call_t *call) { return; } +int qcall(call_t *call, bcf1_t *rec) +{ + // QCall format: + // chromosome, position, reference allele, depth, mapping quality, 0, .. + error("TODO: qcall output\n"); + return 0; +} + +void call_init_pl2p(call_t *call) +{ + int i; + for (i=0; i<256; i++) + call->pl2p[i] = pow(10., -i/10.); +} + +// Macros for accessing call->trio and call->ntrio +#define FTYPE_222 0 // family type: all diploid +#define FTYPE_121 1 // chrX, the child is a boy +#define FTYPE_122 2 // chrX, a girl +#define FTYPE_101 3 // chrY, boy +#define FTYPE_100 4 // chrY, girl + +#define GT_SKIP 0xf // empty genotype (chrY in females) + +#define IS_POW2(x) (!((x) & ((x) - 1))) // zero is permitted +#define IS_HOM(x) IS_POW2(x) + +// Pkij = P(k|i,j) tells how likely it is to be a het if the parents +// are homs etc. The consistency of i,j,k has been already checked. +// Parameters are alleles and ploidy of father, mother, kid +// Returns 2/Pkij. +int calc_Pkij(int fals, int mals, int kals, int fpl, int mpl, int kpl) +{ + int als = fals|mals|kals; + if ( IS_HOM(als) ) return 2; // all are the same: child must be a HOM, P=1 + + if ( fpl==1 ) + { + if ( kpl==1 ) // chr X, the child is a boy, the copy is inherited from the mother + { + if ( IS_HOM(mals) ) return 2; // 0 11 -> P(1) = 1 + return 4; // 0 01 -> P(0) = P(1) = 1/2 + } + // chr X, the child is a girl + if ( IS_HOM(mals) ) return 2; // 0 11 -> P(01) = 1 + return 4; // 0 01 -> P(00) = P(01) = 1/2 + } + + if ( IS_HOM(fals) && IS_HOM(mals) ) return 2; // 00 11 01, the child must be a HET, P=1 + if ( !IS_HOM(fals) && !IS_HOM(mals) ) + { + if ( IS_HOM(kals) ) return 8; // 01 01 00 or 01 01 11, P(k=HOM) = 1/4 + return 4; // 01 01 01, P(k=HET) = 1/2 + } + return 4; // 00 01, P(k=HET) = P(k=HOM) = 1/2 +} + +// Initialize ntrio and trio: ntrio lists the number of possible +// genotypes given combination of haploid/diploid genomes and the +// number of alleles. trio lists allowed genotype combinations: +// 4bit: 2/Pkij, 4: father, 4: mother, 4: child +// See also mcall_call_trio_genotypes() +// +static void mcall_init_trios(call_t *call) +{ + if ( call->prior_AN ) + { + int id = bcf_hdr_id2int(call->hdr,BCF_DT_ID,call->prior_AN); + if ( id==-1 ) error("No such tag \"%s\"\n", call->prior_AN); + if ( !bcf_hdr_idinfo_exists(call->hdr,BCF_HL_FMT,id) ) error("No such FORMAT tag \"%s\"\n", call->prior_AN); + id = bcf_hdr_id2int(call->hdr,BCF_DT_ID,call->prior_AC); + if ( id==-1 ) error("No such tag \"%s\"\n", call->prior_AC); + if ( !bcf_hdr_idinfo_exists(call->hdr,BCF_HL_FMT,id) ) error("No such FORMAT tag \"%s\"\n", call->prior_AC); + } + + // 23, 138, 478 possible diploid trio genotypes with 2, 3, 4 alleles + call->ntrio[FTYPE_222][2] = 15; call->ntrio[FTYPE_222][3] = 78; call->ntrio[FTYPE_222][4] = 250; + call->ntrio[FTYPE_121][2] = 8; call->ntrio[FTYPE_121][3] = 27; call->ntrio[FTYPE_121][4] = 64; + call->ntrio[FTYPE_122][2] = 8; call->ntrio[FTYPE_122][3] = 27; call->ntrio[FTYPE_122][4] = 64; + call->ntrio[FTYPE_101][2] = 2; call->ntrio[FTYPE_101][3] = 3; call->ntrio[FTYPE_101][4] = 4; + call->ntrio[FTYPE_100][2] = 2; call->ntrio[FTYPE_100][3] = 3; call->ntrio[FTYPE_100][4] = 4; + + int nals, itype; + for (itype=0; itype<=4; itype++) + { + for (nals=2; nals<=4; nals++) + call->trio[itype][nals] = (uint16_t*) malloc(sizeof(uint16_t)*call->ntrio[itype][nals]); + } + + // max 10 possible diploid genotypes + int gts[10]; + for (nals=2; nals<=4; nals++) + { + int i,j,k, n = 0, ngts = 0; + for (i=0; itrio[FTYPE_222][nals][n++] = Pkij<<12 | i<<8 | j<<4 | k; // father, mother, child + } + assert( n==call->ntrio[FTYPE_222][nals] ); + + // 121: chrX, boy + n = 0; + for (i=0; itrio[FTYPE_121][nals][n++] = Pkij<<12 | i<<8 | j<<4 | k; + } + assert( n==call->ntrio[FTYPE_121][nals] ); + + // 122: chrX, girl + n = 0; + for (i=0; itrio[FTYPE_122][nals][n++] = Pkij<<12 | i<<8 | j<<4 | k; + } + assert( n==call->ntrio[FTYPE_122][nals] ); + + // 101: chrY, boy + n = 0; + for (i=0; itrio[FTYPE_101][nals][n++] = 1<<12 | i<<8 | GT_SKIP<<4 | k; + } + assert( n==call->ntrio[FTYPE_101][nals] ); + + // 100: chrY, girl + n = 0; + for (i=0; itrio[FTYPE_100][nals][n++] = 1<<12 | i<<8 | GT_SKIP<<4 | GT_SKIP; + } + assert( n==call->ntrio[FTYPE_100][nals] ); + + } + call->GLs = (double*) calloc(bcf_hdr_nsamples(call->hdr)*10,sizeof(double)); + + int i, j; + for (i=0; infams; i++) + { + family_t *fam = &call->fams[i]; + int ploidy[3]; + for (j=0; j<3; j++) + ploidy[j] = call->ploidy[fam->sample[j]]; + + if ( ploidy[FATHER]==2 ) // not X, not Y + { + if ( ploidy[MOTHER]!=2 || ploidy[CHILD]!=2 ) + error("Incorrect ploidy: %d %d %d\n", ploidy[FATHER],ploidy[MOTHER],ploidy[CHILD]); + fam->type = FTYPE_222; + continue; + } + if ( ploidy[FATHER]!=1 || ploidy[MOTHER]==1 ) + error("Incorrect ploidy: %d %d %d\n", ploidy[FATHER],ploidy[MOTHER],ploidy[CHILD]); + if ( ploidy[MOTHER]==2 ) // X + { + if ( ploidy[CHILD]==0 ) + error("Incorrect ploidy: %d %d %d\n", ploidy[FATHER],ploidy[MOTHER],ploidy[CHILD]); + fam->type = ploidy[CHILD]==2 ? FTYPE_122 : FTYPE_121; // a girl or a boy + } + else // Y + { + if ( ploidy[CHILD]==2 ) + error("Incorrect ploidy: %d %d %d\n", ploidy[FATHER],ploidy[MOTHER],ploidy[CHILD]); + fam->type = ploidy[CHILD]==0 ? FTYPE_100 : FTYPE_101; // a girl or a boy + } + } +} +static void mcall_destroy_trios(call_t *call) +{ + int i, j; + for (i=2; i<=4; i++) + for (j=0; j<=4; j++) + free(call->trio[j][i]); +} + +void mcall_init(call_t *call) +{ + call_init_pl2p(call); + + call->nqsum = 5; + call->qsum = (float*) malloc(sizeof(float)*call->nqsum); // will be expanded later if ncessary + call->nals_map = 5; + call->als_map = (int*) malloc(sizeof(int)*call->nals_map); + call->npl_map = 5*(5+1)/2; // will be expanded later if necessary + call->pl_map = (int*) malloc(sizeof(int)*call->npl_map); + call->gts = (int32_t*) calloc(bcf_hdr_nsamples(call->hdr)*2,sizeof(int32_t)); // assuming at most diploid everywhere + + if ( call->flag & CALL_CONSTR_TRIO ) + { + call->cgts = (int32_t*) calloc(bcf_hdr_nsamples(call->hdr),sizeof(int32_t)); + call->ugts = (int32_t*) calloc(bcf_hdr_nsamples(call->hdr),sizeof(int32_t)); + mcall_init_trios(call); + bcf_hdr_append(call->hdr,"##FORMAT="); + bcf_hdr_append(call->hdr,"##FORMAT="); + } + if ( call->flag & CALL_CONSTR_ALLELES ) call->vcmp = vcmp_init(); + + bcf_hdr_append(call->hdr,"##FORMAT="); + if ( call->output_tags & CALL_FMT_GQ ) + bcf_hdr_append(call->hdr,"##FORMAT="); + if ( call->output_tags & CALL_FMT_GP ) + bcf_hdr_append(call->hdr,"##FORMAT="); + if ( call->output_tags & (CALL_FMT_GQ|CALL_FMT_GP) ) + call->GQs = (int32_t*) malloc(sizeof(int32_t)*bcf_hdr_nsamples(call->hdr)); + bcf_hdr_append(call->hdr,"##INFO="); + bcf_hdr_append(call->hdr,"##INFO="); + bcf_hdr_append(call->hdr,"##INFO="); + bcf_hdr_append(call->hdr,"##INFO="); + bcf_hdr_append(call->hdr,"##INFO="); + bcf_hdr_append(call->hdr,"##INFO="); + + // init the prior + if ( call->theta>0 ) + { + int i, n = 0; + if ( !call->ploidy ) n = 2*bcf_hdr_nsamples(call->hdr); // all are diploid + else + { + for (i=0; ihdr); i++) + n += call->ploidy[i]; + } + // Watterson factor, here aM_1 = aM_2 = 1 + double aM = 1; + for (i=2; itheta *= aM; + if ( call->theta >= 1 ) + { + fprintf(bcftools_stderr,"The prior is too big (theta*aM=%.2f), going with 0.99\n", call->theta); + call->theta = 0.99; + } + call->theta = log(call->theta); + } + + return; +} + +void mcall_destroy(call_t *call) +{ + if (call->vcmp) vcmp_destroy(call->vcmp); + free(call->itmp); + mcall_destroy_trios(call); + free(call->GPs); + free(call->GLs); + free(call->GQs); + free(call->anno16); + free(call->PLs); + free(call->qsum); + free(call->als_map); + free(call->pl_map); + free(call->gts); free(call->cgts); free(call->ugts); + free(call->pdg); + free(call->als); + free(call->ac); + return; +} + + +// Inits P(D|G): convert PLs from log space and normalize. In case of zero +// depth, missing PLs are all zero. In this case, pdg's are set to 0 +// so that the corresponding genotypes can be set as missing and the +// qual calculation is not affected. +// Missing values are replaced by generic likelihoods when X (unseen allele) is +// present. +// NB: While the -m callig model uses the pdgs in canonical order, +// the original samtools -c calling code uses pdgs in reverse order (AA comes +// first, RR last). +// NB: Ploidy is not taken into account here, which is incorrect. +void set_pdg(double *pl2p, int *PLs, double *pdg, int n_smpl, int n_gt, int unseen) +{ + int i, j, nals; + + // find out the number of alleles, expecting diploid genotype likelihoods + bcf_gt2alleles(n_gt-1, &i, &nals); + assert( i==nals ); + nals++; + + for (i=0; ipdg; + int ngts = rec->n_allele*(rec->n_allele+1)/2; + int i,nsmpl = bcf_hdr_nsamples(call->hdr); + + hts_expand(float,rec->n_allele,call->nqsum,call->qsum); + for (i=0; in_allele; i++) call->qsum[i] = 0; + + for (i=0; in_allele; a++) + { + for (b=0; b<=a; b++) + { + call->qsum[a] += pdg[k]; + call->qsum[b] += pdg[k]; + k++; + } + } + pdg += ngts; + } + float sum = 0; + for (i=0; in_allele; i++) sum += call->qsum[i]; + if ( sum ) for (i=0; in_allele; i++) call->qsum[i] /= sum; +} + +// Create mapping between old and new (trimmed) alleles +void init_allele_trimming_maps(call_t *call, int als, int nals) +{ + int i, j; + + // als_map: old(i) -> new(j) + for (i=0, j=0; ials_map[i] = j++; + else call->als_map[i] = -1; + } + + if ( !call->pl_map ) return; + + // pl_map: new(k) -> old(l) + int k = 0, l = 0; + for (i=0; ipl_map[k++] = l; + l++; + } + } +} + +double binom_dist(int N, double p, int k) +{ + int mean = (int) (N*p); + if ( mean==k ) return 1.0; + + double log_p = (k-mean)*log(p) + (mean-k)*log(1.0-p); + if ( k > N - k ) k = N - k; + if ( mean > N - mean ) mean = N - mean; + + if ( k < mean ) { int tmp = k; k = mean; mean = tmp; } + double diff = k - mean; + + double val = 1.0; + int i; + for (i=0; i10 && (1-q)*ndiploid>10 ) || ndiploid>200 ) + { + //fprintf(bcftools_stderr,"out: mean=%e p=%e\n", mean,exp(-0.5*(nhets-mean)*(nhets-mean)/(mean*(1-q)))); + return exp(-0.5*(nhets-mean)*(nhets-mean)/(mean*(1-q))); + } + + return binom_dist(ndiploid, q, nhets); +} + +float calc_HOB(int nref, int nalt, int nhets, int ndiploid) +{ + if ( !nref || !nalt || !ndiploid ) return HUGE_VAL; + + double fref = (double)nref/(nref+nalt); // fraction of reference allelels + double falt = (double)nalt/(nref+nalt); // non-ref als + return fabs((double)nhets/ndiploid - 2*fref*falt); +} + +/** + * log(sum_i exp(a_i)) + */ +// static inline double logsumexp(double *vals, int nvals) +// { +// int i; +// double max_exp = vals[0]; +// for (i=1; ib ) + return log(1 + exp(b-a)) + a; + else + return log(1 + exp(a-b)) + b; +} + +// Macro to set the most likely alleles +#define UPDATE_MAX_LKs(als,sum) { \ + if ( max_lkhdr); + int ngts = nals*(nals+1)/2; + + // Single allele + for (ia=0; iapdg + iaa; + for (isample=0; isampletheta; // the prior + UPDATE_MAX_LKs(1<0 && lk_tot_set); + } + + // Two alleles + if ( nals>1 ) + { + for (ia=0; iaqsum[ia]==0 ) continue; + int iaa = (ia+1)*(ia+2)/2-1; + for (ib=0; ibqsum[ib]==0 ) continue; + double lk_tot = 0; + int lk_tot_set = 0; + double fa = call->qsum[ia]/(call->qsum[ia]+call->qsum[ib]); + double fb = call->qsum[ib]/(call->qsum[ia]+call->qsum[ib]); + double fa2 = fa*fa; + double fb2 = fb*fb; + double fab = 2*fa*fb; + int isample, ibb = (ib+1)*(ib+2)/2-1, iab = iaa - ia + ib; + double *pdg = call->pdg; + for (isample=0; isampleploidy || call->ploidy[isample]==2 ) + val = fa2*pdg[iaa] + fb2*pdg[ibb] + fab*pdg[iab]; + else if ( call->ploidy && call->ploidy[isample]==1 ) + val = fa*pdg[iaa] + fb*pdg[ibb]; + if ( val ) { lk_tot += log(val); lk_tot_set = 1; } + pdg += ngts; + } + if ( ia!=0 ) lk_tot += call->theta; // the prior + if ( ib!=0 ) lk_tot += call->theta; + UPDATE_MAX_LKs(1<2 ) + { + for (ia=0; iaqsum[ia]==0 ) continue; + int iaa = (ia+1)*(ia+2)/2-1; + for (ib=0; ibqsum[ib]==0 ) continue; + int ibb = (ib+1)*(ib+2)/2-1; + int iab = iaa - ia + ib; + for (ic=0; icqsum[ic]==0 ) continue; + double lk_tot = 0; + int lk_tot_set = 1; + double fa = call->qsum[ia]/(call->qsum[ia]+call->qsum[ib]+call->qsum[ic]); + double fb = call->qsum[ib]/(call->qsum[ia]+call->qsum[ib]+call->qsum[ic]); + double fc = call->qsum[ic]/(call->qsum[ia]+call->qsum[ib]+call->qsum[ic]); + double fa2 = fa*fa; + double fb2 = fb*fb; + double fc2 = fc*fc; + double fab = 2*fa*fb, fac = 2*fa*fc, fbc = 2*fb*fc; + int isample, icc = (ic+1)*(ic+2)/2-1; + int iac = iaa - ia + ic, ibc = ibb - ib + ic; + double *pdg = call->pdg; + for (isample=0; isampleploidy || call->ploidy[isample]==2 ) + val = fa2*pdg[iaa] + fb2*pdg[ibb] + fc2*pdg[icc] + fab*pdg[iab] + fac*pdg[iac] + fbc*pdg[ibc]; + else if ( call->ploidy && call->ploidy[isample]==1 ) + val = fa*pdg[iaa] + fb*pdg[ibb] + fc*pdg[icc]; + if ( val ) { lk_tot += log(val); lk_tot_set = 1; } + pdg += ngts; + } + if ( ia!=0 ) lk_tot += call->theta; // the prior + if ( ib!=0 ) lk_tot += call->theta; // the prior + if ( ic!=0 ) lk_tot += call->theta; // the prior + UPDATE_MAX_LKs(1<ref_lk = ref_lk; + call->lk_sum = lk_sum; + *out_als = max_als; + + int i, n = 0; + for (i=0; ihdr); + + for (i=0; iac[i] = 0; + call->nhets = 0; + call->ndiploid = 0; + + // Set all genotypes to 0/0 or 0 + int *gts = call->gts; + double *pdg = call->pdg; + int isample; + for (isample = 0; isample < nsmpl; isample++) + { + int ploidy = call->ploidy ? call->ploidy[isample] : 2; + for (i=0; iac[0] += ploidy; + } + gts += 2; + pdg += ngts; + } +} + +static void mcall_call_genotypes(call_t *call, bcf1_t *rec, int nals, int nout_als, int out_als) +{ + int ia, ib, i; + int ngts = nals*(nals+1)/2; + int nsmpl = bcf_hdr_nsamples(call->hdr); + int nout_gts = nout_als*(nout_als+1)/2; + hts_expand(float,nout_gts*nsmpl,call->nGPs,call->GPs); + + for (i=0; iac[i] = 0; + call->nhets = 0; + call->ndiploid = 0; + + #if USE_PRIOR_FOR_GTS + float prior = exp(call->theta); + #endif + float *gps = call->GPs - nout_gts; + double *pdg = call->pdg - ngts; + int *gts = call->gts - 2; + + int isample; + for (isample = 0; isample < nsmpl; isample++) + { + int ploidy = call->ploidy ? call->ploidy[isample] : 2; + assert( ploidy>=0 && ploidy<=2 ); + + pdg += ngts; + gts += 2; + gps += nout_gts; + + if ( !ploidy ) + { + gts[0] = bcf_gt_missing; + gts[1] = bcf_int32_vector_end; + gps[0] = -1; + continue; + } + + #if !FLAT_PDG_FOR_MISSING + // Skip samples with zero depth, they have all pdg's equal to 0 + for (i=0; indiploid++; + + // Default fallback for the case all LKs are the same + gts[0] = bcf_gt_unphased(0); + gts[1] = ploidy==2 ? bcf_gt_unphased(0) : bcf_int32_vector_end; + + // Non-zero depth, determine the most likely genotype + double best_lk = 0; + for (ia=0; iaqsum[ia]*call->qsum[ia] : pdg[iaa]*call->qsum[ia]; + #if USE_PRIOR_FOR_GTS + if ( ia!=0 ) lk *= prior; + #endif + int igt = ploidy==2 ? bcf_alleles2gt(call->als_map[ia],call->als_map[ia]) : call->als_map[ia]; + gps[igt] = lk; + if ( best_lk < lk ) + { + best_lk = lk; + gts[0] = bcf_gt_unphased(call->als_map[ia]); + } + } + if ( ploidy==2 ) + { + gts[1] = gts[0]; + for (ia=0; iaqsum[ia]*call->qsum[ib]; + #if USE_PRIOR_FOR_GTS + if ( ia!=0 ) lk *= prior; + if ( ib!=0 ) lk *= prior; + #endif + int igt = bcf_alleles2gt(call->als_map[ia],call->als_map[ib]); + gps[igt] = lk; + if ( best_lk < lk ) + { + best_lk = lk; + gts[0] = bcf_gt_unphased(call->als_map[ib]); + gts[1] = bcf_gt_unphased(call->als_map[ia]); + } + } + } + if ( gts[0] != gts[1] ) call->nhets++; + } + else + gts[1] = bcf_int32_vector_end; + + call->ac[ bcf_gt_allele(gts[0]) ]++; + if ( gts[1]!=bcf_int32_vector_end ) call->ac[ bcf_gt_allele(gts[1]) ]++; + } + if ( call->output_tags & (CALL_FMT_GQ|CALL_FMT_GP) ) + { + double max, sum; + for (isample=0; isampleGPs + isample*nout_gts; + + int nmax; + if ( call->ploidy ) + { + if ( call->ploidy[isample]==2 ) nmax = nout_gts; + else if ( call->ploidy[isample]==1 ) nmax = nout_als; + else nmax = 0; + } + else nmax = nout_gts; + + max = gps[0]; + if ( max<0 || nmax==0 ) + { + // no call + if ( call->output_tags & CALL_FMT_GP ) + { + for (i=0; iGQs[isample] = 0; + continue; + } + sum = gps[0]; + for (i=1; iGQs[isample] = max<=INT8_MAX ? max : INT8_MAX; + if ( call->output_tags & CALL_FMT_GP ) + { + assert( max ); + for (i=0; ioutput_tags & CALL_FMT_GP ) + bcf_update_format_float(call->hdr, rec, "GP", call->GPs, nsmpl*nout_gts); + if ( call->output_tags & CALL_FMT_GQ ) + bcf_update_format_int32(call->hdr, rec, "GQ", call->GQs, nsmpl); +} + + +/** + Pm = P(mendelian) .. parameter to vary, 1-Pm is the probability of novel mutation. + When trio_Pm_ins is negative, Pm is calculated dynamically + according to indel length. For simplicity, only the + first ALT is considered. + Pkij = P(k|i,j) .. probability that the genotype combination i,j,k is consistent + with mendelian inheritance (the likelihood that offspring + of two HETs is a HOM is smaller than it being a HET) + + P_uc(F=i,M=j,K=k) = P(F=i) . P(M=j) . P(K=k) .. unconstrained P + P_c(F=i,M=j,K=k) = P_uc . Pkij .. constrained P + P(F=i,M=j,K=k) = P_uc . (1 - Pm) + P_c . Pm + = P_uc . [1 - Pm + Pkij . Pm] + + We choose genotype combination i,j,k which maximizes P(F=i,M=j,K=k). This + probability gives the quality GQ(Trio). + Individual qualities are calculated as + GQ(F=i,M=j,K=k) = P(F=i,M=j,K=k) / \sum_{x,y} P(F=i,M=x,K=y) + */ +static void mcall_call_trio_genotypes(call_t *call, bcf1_t *rec, int nals, int nout_als, int out_als) +{ + int ia, ib, i; + int nsmpl = bcf_hdr_nsamples(call->hdr); + int ngts = nals*(nals+1)/2; + int nout_gts = nout_als*(nout_als+1)/2; + double *gls = call->GLs - nout_gts; + double *pdg = call->pdg - ngts; + + // Calculate individuals' genotype likelihoods P(X=i) + int isample; + for (isample = 0; isample < nsmpl; isample++) + { + int ploidy = call->ploidy ? call->ploidy[isample] : 2; + int32_t *gts = call->ugts + isample; + + gls += nout_gts; + pdg += ngts; + + // Skip samples with all pdg's equal to 1. These have zero depth. + for (i=0; ials_map[ia],call->als_map[ia]); + double lk = ploidy==2 ? pdg[iaa]*call->qsum[ia]*call->qsum[ia] : pdg[iaa]*call->qsum[ia]; + sum_lk += lk; + gls[idx] = lk; + if ( best_lk < lk ) + { + best_lk = lk; + gts[0] = bcf_alleles2gt(call->als_map[ia],call->als_map[ia]); + } + } + if ( ploidy==2 ) + { + for (ia=0; iaals_map[ia],call->als_map[ib]); + double lk = 2*pdg[iab]*call->qsum[ia]*call->qsum[ib]; + sum_lk += lk; + gls[idx] = lk; + if ( best_lk < lk ) + { + best_lk = lk; + gts[0] = bcf_alleles2gt(call->als_map[ib],call->als_map[ia]); + } + } + } + } + for (i=0; itrio_Pm_ins<0 && call->trio_Pm_del<0 ) trio_Pm = call->trio_Pm_SNPs; // the same Pm for indels and SNPs requested + else + { + int ret = bcf_get_variant_types(rec); + if ( !(ret & VCF_INDEL) ) trio_Pm = call->trio_Pm_SNPs; + else + { + if ( call->trio_Pm_ins<0 ) // dynamic calculation, trio_Pm_del holds the scaling factor + { + trio_Pm = rec->d.var[1].n<0 ? -21.9313 - 0.2856*rec->d.var[1].n : -22.8689 + 0.2994*rec->d.var[1].n; + trio_Pm = 1 - call->trio_Pm_del * exp(trio_Pm); + } + else // snps and indels set explicitly + { + trio_Pm = rec->d.var[1].n<0 ? call->trio_Pm_del : call->trio_Pm_ins; + } + } + } + + // Calculate constrained likelihoods and determine genotypes + int ifm; + for (ifm=0; ifmnfams; ifm++) + { + family_t *fam = &call->fams[ifm]; + int ntrio = call->ntrio[fam->type][nout_als]; + uint16_t *trio = call->trio[fam->type][nout_als]; + + // Unconstrained likelihood + int uc_itr = 0; + double uc_lk = 0; + for (i=0; i<3; i++) // for father, mother, child + { + int ismpl = fam->sample[i]; + double *gl = call->GLs + nout_gts*ismpl; + if ( gl[0]==1 ) continue; + int j, jmax = 0; + double max = gl[0]; + for (j=1; jsample[i]; + double *gl = call->GLs + nout_gts*ismpl; + if ( gl[0]==1 ) continue; + int igt = trio[itr]>>((2-i)*4) & 0xf; + assert( !call->ploidy || call->ploidy[ismpl]>0 ); + if ( igt==GT_SKIP ) continue; + lk += gl[igt]; + npresent++; + // fprintf(bcftools_stderr," %e", gl[igt]); + } + // fprintf(bcftools_stderr,"\t\t"); + double Pkij = npresent==3 ? (double)2/(trio[itr]>>12) : 1; // with missing genotypes Pkij's are different + lk += log(1 - trio_Pm * (1 - Pkij)); + // fprintf(bcftools_stderr,"%d%d%d\t%e\t%.2f\n", trio[itr]>>8&0xf,trio[itr]>>4&0xf,trio[itr]&0xf, lk, Pkij); + if ( c_lk < lk ) { c_lk = lk; c_itr = trio[itr]; } + if ( uc_itr==trio[itr] ) uc_is_mendelian = 1; + } + + if ( !uc_is_mendelian ) + { + uc_lk += log(1 - trio_Pm); + // fprintf(bcftools_stderr,"c_lk=%e uc_lk=%e c_itr=%d%d%d uc_itr=%d%d%d\n", c_lk,uc_lk,c_itr>>8&0xf,c_itr>>4&0xf,c_itr&0xf,uc_itr>>8&0xf,uc_itr>>4&0xf,uc_itr&0xf); + if ( c_lk < uc_lk ) { c_lk = uc_lk; c_itr = uc_itr; } + } + // fprintf(bcftools_stderr,"best_lk=%e best_itr=%d%d%d uc_itr=%d%d%d\n", c_lk,c_itr>>8&0xf,c_itr>>4&0xf,c_itr&0xf,uc_itr>>8&0xf,uc_itr>>4&0xf,uc_itr&0xf); + + // Set genotypes for father, mother, child and calculate genotype qualities + for (i=0; i<3; i++) + { + // GT + int ismpl = fam->sample[i]; + int igt = c_itr>>((2-i)*4) & 0xf; + double *gl = call->GLs + nout_gts*ismpl; + int32_t *gts = call->cgts + ismpl; + if ( gl[0]==1 || igt==GT_SKIP ) // zero depth, set missing genotypes + { + gts[0] = -1; + // bcf_float_set_missing(call->GQs[ismpl]); + continue; + } + gts[0] = igt; + + #if 0 + // todo: Genotype Qualities + // + // GQ: for each family member i sum over all genotypes j,k keeping igt fixed + double lk_sum = 0; + for (itr=0; itr>((2-i)*4) & 0xf) ) continue; + double lk = 0; + int j; + for (j=0; j<3; j++) + { + int jsmpl = fam->sample[j]; + double *gl = call->GLs + ngts*jsmpl; + if ( gl[0]==1 ) continue; + int jgt = trio[itr]>>((2-j)*4) & 0xf; + if ( jgt==GT_SKIP ) continue; + lk += gl[jgt]; + } + double Pkij = (double)2/(trio[itr]>>12); + lk += log(1 - trio_Pm * (1 - Pkij)); + lk_sum = logsumexp2(lk_sum, lk); + } + if ( !uc_is_mendelian && (best_itr>>((2-i)*4)&0xf)==(uc_itr>>((2-i)*4)&0xf) ) lk_sum = logsumexp2(lk_sum,uc_lk); + call->GQs[ismpl] = -4.3429*(best_lk - lk_sum); + #endif + } + } + + for (i=0; i<4; i++) call->ac[i] = 0; + call->nhets = 0; + call->ndiploid = 0; + + // Test if CGT,UGT are needed + int ucgts_needed = 0; + int32_t *cgts = call->cgts - 1; + int32_t *ugts = call->ugts - 1; + int32_t *gts = call->gts - 2; + for (isample = 0; isample < nsmpl; isample++) + { + int ploidy = call->ploidy ? call->ploidy[isample] : 2; + cgts++; + ugts++; + gts += 2; + if ( ugts[0]==-1 ) + { + gts[0] = bcf_gt_missing; + gts[1] = ploidy==2 ? bcf_gt_missing : bcf_int32_vector_end; + continue; + } + int a,b; + if ( cgts[0]!=ugts[0] ) + { + bcf_gt2alleles(cgts[0], &a, &b); + gts[0] = bcf_gt_unphased(a); + gts[1] = ploidy==1 ? bcf_int32_vector_end : bcf_gt_unphased(b); + } + else + { + bcf_gt2alleles(ugts[0], &a, &b); + gts[0] = bcf_gt_unphased(a); + gts[1] = ploidy==1 ? bcf_int32_vector_end : bcf_gt_unphased(b); + } + if ( cgts[0]!=ugts[0] ) ucgts_needed = 1; + call->ac[a]++; + if ( ploidy==2 ) + { + call->ac[b]++; + call->ndiploid++; + if ( a!=b ) call->nhets++; + } + } + if ( ucgts_needed ) + { + // Some GTs are different + bcf_update_format_int32(call->hdr,rec,"UGT",call->ugts,nsmpl); + bcf_update_format_int32(call->hdr,rec,"CGT",call->cgts,nsmpl); + } +} + +static void mcall_trim_PLs(call_t *call, bcf1_t *rec, int nals, int nout_als, int out_als) +{ + int ngts = nals*(nals+1)/2; + int npls_src = ngts, npls_dst = nout_als*(nout_als+1)/2; // number of PL values in diploid samples, ori and new + if ( call->all_diploid && npls_src == npls_dst ) return; + + int *pls_src = call->PLs, *pls_dst = call->PLs; + + int nsmpl = bcf_hdr_nsamples(call->hdr); + int isample, ia; + for (isample = 0; isample < nsmpl; isample++) + { + int ploidy = call->ploidy ? call->ploidy[isample] : 2; + if ( ploidy==2 ) + { + for (ia=0; iapl_map[ia] ]; + } + else if ( ploidy==1 ) + { + for (ia=0; iapl_map[isrc] ]; + } + if ( ia1 in mcall() + } + pls_src += npls_src; + pls_dst += npls_dst; + } + bcf_update_format_int32(call->hdr, rec, "PL", call->PLs, npls_dst*nsmpl); +} + +void mcall_trim_numberR(call_t *call, bcf1_t *rec, int nals, int nout_als, int out_als) +{ + if ( nals==nout_als ) return; + + int i,j, nret, size = sizeof(float); + + void *tmp_ori = call->itmp, *tmp_new = call->PLs; // reusing PLs storage which is not used at this point + int ntmp_ori = call->n_itmp, ntmp_new = call->mPLs; + + // INFO fields + for (i=0; in_info; i++) + { + bcf_info_t *info = &rec->d.info[i]; + int vlen = bcf_hdr_id2length(call->hdr,BCF_HL_INFO,info->key); + if ( vlen!=BCF_VL_R ) continue; // not a Number=R tag + + int type = bcf_hdr_id2type(call->hdr,BCF_HL_INFO,info->key); + const char *key = bcf_hdr_int2id(call->hdr,BCF_DT_ID,info->key); + nret = bcf_get_info_values(call->hdr, rec, key, &tmp_ori, &ntmp_ori, type); + if ( nret<=0 ) continue; + + if ( nout_als==1 ) + bcf_update_info_int32(call->hdr, rec, key, tmp_ori, 1); // has to be the REF, the order could not change + else + { + for (j=0; jals_map[j]; + if ( k==-1 ) continue; // to be dropped + memcpy((char *)tmp_new+size*k, (char *)tmp_ori+size*j, size); + } + bcf_update_info_int32(call->hdr, rec, key, tmp_new, nout_als); + } + } + + // FORMAT fields + for (i=0; in_fmt; i++) + { + bcf_fmt_t *fmt = &rec->d.fmt[i]; + int vlen = bcf_hdr_id2length(call->hdr,BCF_HL_FMT,fmt->id); + if ( vlen!=BCF_VL_R ) continue; // not a Number=R tag + + int type = bcf_hdr_id2type(call->hdr,BCF_HL_FMT,fmt->id); + const char *key = bcf_hdr_int2id(call->hdr,BCF_DT_ID,fmt->id); + nret = bcf_get_format_values(call->hdr, rec, key, &tmp_ori, &ntmp_ori, type); + if (nret<=0) continue; + int nsmpl = bcf_hdr_nsamples(call->hdr); + + assert( nret==nals*nsmpl ); + + for (j=0; jals_map[k]; + if ( l==-1 ) continue; // to be dropped + memcpy(ptr_dst+size*l, ptr_src+size*k, size); + } + } + bcf_update_format_int32(call->hdr, rec, key, tmp_new, nout_als*nsmpl); + } + + call->PLs = (int32_t*) tmp_new; + call->mPLs = ntmp_new; + call->itmp = (int32_t*) tmp_ori; + call->n_itmp = ntmp_ori; +} + + +// NB: in this function we temporarily use calls->als_map for a different +// purpose to store mapping from new (target) alleles to original alleles. +// +static int mcall_constrain_alleles(call_t *call, bcf1_t *rec, int *unseen) +{ + bcf_sr_regions_t *tgt = call->srs->targets; + if ( tgt->nals>5 ) error("Maximum accepted number of alleles is 5, got %d\n", tgt->nals); + hts_expand(char*,tgt->nals+1,call->nals,call->als); + + int has_new = 0; + + int i, j, nals = 1; + for (i=1; inals_map; i++) call->als_map[i] = -1; + + if ( vcmp_set_ref(call->vcmp, rec->d.allele[0], tgt->als[0]) < 0 ) + error("The reference alleles are not compatible at %s:%d .. %s vs %s\n", call->hdr->id[BCF_DT_CTG][rec->rid].key,rec->pos+1,tgt->als[0],rec->d.allele[0]); + + // create mapping from new to old alleles + call->als[0] = tgt->als[0]; + call->als_map[0] = 0; + + for (i=1; inals; i++) + { + call->als[nals] = tgt->als[i]; + j = vcmp_find_allele(call->vcmp, rec->d.allele+1, rec->n_allele - 1, tgt->als[i]); + + if ( j+1==*unseen ) { fprintf(bcftools_stderr,"fixme? Cannot constrain to %s\n",tgt->als[i]); return -1; } + + if ( j>=0 ) + { + // existing allele + call->als_map[nals] = j+1; + } + else + { + // There is a new allele in targets which is not present in VCF. + // We use the X allele to estimate PLs. Note that X may not be + // present at multiallelic indels sites. In that case we use the + // last allele anyway, because the least likely allele comes last + // in mpileup's ALT output. + call->als_map[nals] = (*unseen)>=0 ? *unseen : rec->n_allele - 1; + has_new = 1; + } + nals++; + } + if ( *unseen ) + { + call->als_map[nals] = *unseen; + call->als[nals] = rec->d.allele[*unseen]; + nals++; + } + + if ( !has_new && nals==rec->n_allele ) return 0; + bcf_update_alleles(call->hdr, rec, (const char**)call->als, nals); + + // create mapping from new PL to old PL + int k = 0; + for (i=0; ials_map[i], b = call->als_map[j]; + call->pl_map[k++] = a>b ? a*(a+1)/2 + b : b*(b+1)/2 + a; + } + } + + // update PL + call->nPLs = bcf_get_format_int32(call->hdr, rec, "PL", &call->PLs, &call->mPLs); + int nsmpl = bcf_hdr_nsamples(call->hdr); + int npls_ori = call->nPLs / nsmpl; + int npls_new = k; + hts_expand(int32_t,npls_new*nsmpl,call->n_itmp,call->itmp); + int *ori_pl = call->PLs, *new_pl = call->itmp; + for (i=0; ipl_map[k]]; + if ( new_pl[k]==bcf_int32_missing && *unseen>=0 ) + { + // missing value, and there is an unseen allele: identify the + // alleles and use the lk of either AX or XX + int k_ori = call->pl_map[k], ia, ib; + bcf_gt2alleles(k_ori, &ia, &ib); + k_ori = bcf_alleles2gt(ia,*unseen); + if ( ori_pl[k_ori]==bcf_int32_missing ) k_ori = bcf_alleles2gt(ib,*unseen); + if ( ori_pl[k_ori]==bcf_int32_missing ) k_ori = bcf_alleles2gt(*unseen,*unseen); + new_pl[k] = ori_pl[k_ori]; + } + if ( !k && new_pl[k]==bcf_int32_vector_end ) new_pl[k]=bcf_int32_missing; + } + ori_pl += npls_ori; + new_pl += npls_new; + } + bcf_update_format_int32(call->hdr, rec, "PL", call->itmp, npls_new*nsmpl); + + // update QS + float qsum[5]; + int nqs = bcf_get_info_float(call->hdr, rec, "QS", &call->qsum, &call->nqsum); + for (i=0; ials_map[i]qsum[call->als_map[i]] : 0; + bcf_update_info_float(call->hdr, rec, "QS", qsum, nals); + + if ( *unseen ) *unseen = nals-1; + return 0; +} + + +/** + * This function implements the multiallelic calling model. It has two major parts: + * 1) determine the most likely set of alleles and calculate the quality of ref/non-ref site + * 2) determine and set the genotypes + * In various places in between, the BCF record gets updated. + */ +int mcall(call_t *call, bcf1_t *rec) +{ + int i, unseen = call->unseen; + + // Force alleles when calling genotypes given alleles was requested + if ( call->flag & CALL_CONSTR_ALLELES && mcall_constrain_alleles(call, rec, &unseen)!=0 ) return -2; + + int nsmpl = bcf_hdr_nsamples(call->hdr); + int nals = rec->n_allele; + hts_expand(int,nals,call->nac,call->ac); + hts_expand(int,nals,call->nals_map,call->als_map); + hts_expand(int,nals*(nals+1)/2,call->npl_map,call->pl_map); + + // Get the genotype likelihoods + call->nPLs = bcf_get_format_int32(call->hdr, rec, "PL", &call->PLs, &call->mPLs); + if ( call->nPLs!=nsmpl*nals*(nals+1)/2 && call->nPLs!=nsmpl*nals ) // a mixture of diploid and haploid or haploid only + error("Wrong number of PL fields? nals=%d npl=%d\n", nals,call->nPLs); + + // Convert PLs to probabilities + int ngts = nals*(nals+1)/2; + hts_expand(double, call->nPLs, call->npdg, call->pdg); + set_pdg(call->pl2p, call->PLs, call->pdg, nsmpl, ngts, unseen); + + #if QS_FROM_PDG + estimate_qsum(call, rec); + #else + // Get sum of qualities, serves as an AF estimate, f_x = QS/N in Eq. 1 in call-m math notes. + int nqs = bcf_get_info_float(call->hdr, rec, "QS", &call->qsum, &call->nqsum); + if ( nqs<=0 ) error("The QS annotation not present at %s:%d\n", bcf_seqname(call->hdr,rec),rec->pos+1); + if ( nqs < nals ) + { + // Some of the listed alleles do not have the corresponding QS field. This is + // typically ref-only site with X in ALT. + + hts_expand(float,nals,call->nqsum,call->qsum); + for (i=nqs; iqsum[i] = 0; + } + + // If available, take into account reference panel AFs + if ( call->prior_AN && bcf_get_info_int32(call->hdr, rec, call->prior_AN ,&call->ac, &call->nac)==1 ) + { + int an = call->ac[0]; + if ( bcf_get_info_int32(call->hdr, rec, call->prior_AC ,&call->ac, &call->nac)==nals-1 ) + { + int ac0 = an; // number of alleles in the reference population + for (i=0; iac[i]==bcf_int32_vector_end ) break; + if ( call->ac[i]==bcf_int32_missing ) continue; + ac0 -= call->ac[i]; + call->qsum[i+1] += call->ac[i]*0.5; + } + if ( ac0<0 ) error("Incorrect %s,%s values at %s:%d\n", call->prior_AN,call->prior_AC,bcf_seqname(call->hdr,rec),rec->pos+1); + call->qsum[0] += ac0*0.5; + for (i=0; iqsum[i] /= nsmpl + 0.5*an; + } + } + + float qsum_tot = 0; + for (i=0; iqsum[i]; + + // Is this still necessary?? + // + // if (0&& !call->qsum[0] ) + // { + // // As P(RR)!=0 even for QS(ref)=0, we set QS(ref) to a small value, + // // an equivalent of a single reference read. + // if ( bcf_get_info_int32(call->hdr, rec, "DP", &call->itmp, &call->n_itmp)!=1 ) + // error("Could not read DP at %s:%d\n", call->hdr->id[BCF_DT_CTG][rec->rid].key,rec->pos+1); + // if ( call->itmp[0] ) + // { + // call->qsum[0] = 1.0 / call->itmp[0] / nsmpl; + // qsum_tot += call->qsum[0]; + // } + // } + + if ( qsum_tot ) for (i=0; iqsum[i] /= qsum_tot; + #endif + + bcf_update_info_int32(call->hdr, rec, "QS", NULL, 0); // remove QS tag + + // Find the best combination of alleles + int out_als, nout; + if ( nals > 8*sizeof(out_als) ) + { + fprintf(bcftools_stderr,"Too many alleles at %s:%d, skipping.\n", bcf_seqname(call->hdr,rec),rec->pos+1); + return 0; + } + nout = mcall_find_best_alleles(call, nals, &out_als); + + // Make sure the REF allele is always present + if ( !(out_als&1) ) + { + out_als |= 1; + nout++; + } + int is_variant = out_als==1 ? 0 : 1; + if ( call->flag & CALL_VARONLY && !is_variant ) return 0; + + // With -A, keep all ALTs except X + if ( call->flag & CALL_KEEPALT ) + { + nout = 0; + for (i=0; i0 && i==unseen ) continue; + out_als |= 1<hdr, rec, "PL", NULL, 0); // remove PL, useless now + } + else + { + // The most likely set of alleles includes non-reference allele (or was enforced), call genotypes. + // Note that it is a valid outcome if the called genotypes exclude some of the ALTs. + init_allele_trimming_maps(call, out_als, nals); + if ( !is_variant ) + mcall_set_ref_genotypes(call,nals); // running with -A, prevent mcall_call_genotypes from putting some ALT back + else if ( call->flag & CALL_CONSTR_TRIO ) + { + if ( nout>4 ) + { + fprintf(bcftools_stderr,"Too many alleles at %s:%d, skipping.\n", bcf_seqname(call->hdr,rec),rec->pos+1); + return 0; + } + mcall_call_trio_genotypes(call, rec, nals,nout,out_als); + } + else + mcall_call_genotypes(call,rec,nals,nout,out_als); + + // Skip the site if all samples are 0/0. This can happen occasionally. + nAC = 0; + for (i=1; iac[i]; + if ( !nAC && call->flag & CALL_VARONLY ) return 0; + mcall_trim_PLs(call, rec, nals, nout, out_als); + } + if ( nals!=nout ) mcall_trim_numberR(call, rec, nals, nout, out_als); + + // Set QUAL and calculate HWE-related annotations + if ( nAC ) + { + float icb = calc_ICB(call->ac[0],nAC, call->nhets, call->ndiploid); + if ( icb != HUGE_VAL ) bcf_update_info_float(call->hdr, rec, "ICB", &icb, 1); + + float hob = calc_HOB(call->ac[0],nAC, call->nhets, call->ndiploid); + if ( hob != HUGE_VAL ) bcf_update_info_float(call->hdr, rec, "HOB", &hob, 1); + + // Quality of a variant site. fabs() to avoid negative zeros in VCF output when CALL_KEEPALT is set + rec->qual = -4.343*(call->ref_lk - logsumexp2(call->lk_sum,call->ref_lk)); + } + else + { + // Set the quality of a REF site + if ( call->lk_sum==-HUGE_VAL ) // no support from (high quality) reads, so QUAL=1-prior + rec->qual = call->theta ? -4.343*call->theta : 0; + else + rec->qual = -4.343*(call->lk_sum - logsumexp2(call->lk_sum,call->ref_lk)); + } + + if ( rec->qual>999 ) rec->qual = 999; + if ( rec->qual>50 ) rec->qual = rint(rec->qual); + + // AC, AN + if ( nout>1 ) bcf_update_info_int32(call->hdr, rec, "AC", call->ac+1, nout-1); + nAC += call->ac[0]; + bcf_update_info_int32(call->hdr, rec, "AN", &nAC, 1); + + // Remove unused alleles + hts_expand(char*,nout,call->nals,call->als); + for (i=0; ials_map[i]>=0 ) call->als[call->als_map[i]] = rec->d.allele[i]; + bcf_update_alleles(call->hdr, rec, (const char**)call->als, nout); + bcf_update_genotypes(call->hdr, rec, call->gts, nsmpl*2); + + // DP4 tag + if ( bcf_get_info_float(call->hdr, rec, "I16", &call->anno16, &call->n16)==16 ) + { + int32_t dp[4]; dp[0] = call->anno16[0]; dp[1] = call->anno16[1]; dp[2] = call->anno16[2]; dp[3] = call->anno16[3]; + bcf_update_info_int32(call->hdr, rec, "DP4", dp, 4); + + int32_t mq = (call->anno16[8]+call->anno16[10])/(call->anno16[0]+call->anno16[1]+call->anno16[2]+call->anno16[3]); + bcf_update_info_int32(call->hdr, rec, "MQ", &mq, 1); + } + + bcf_update_info_int32(call->hdr, rec, "I16", NULL, 0); // remove I16 tag + + return nout; +} + diff --git a/bcftools/mpileup.c b/bcftools/mpileup.c new file mode 100644 index 0000000..9b6c6eb --- /dev/null +++ b/bcftools/mpileup.c @@ -0,0 +1,1107 @@ +/* mpileup.c -- mpileup subcommand. Previously bam_plcmd.c from samtools + + Copyright (C) 2008-2017 Genome Research Ltd. + Portions copyright (C) 2009-2012 Broad Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "regidx.h" +#include "bcftools.h" +#include "bam2bcf.h" +#include "bam_sample.h" +#include "gvcf.h" + +#define MPLP_BCF 1 +#define MPLP_VCF (1<<1) +#define MPLP_NO_COMP (1<<2) +#define MPLP_NO_ORPHAN (1<<3) +#define MPLP_REALN (1<<4) +#define MPLP_NO_INDEL (1<<5) +#define MPLP_REDO_BAQ (1<<6) +#define MPLP_ILLUMINA13 (1<<7) +#define MPLP_IGNORE_RG (1<<8) +#define MPLP_PRINT_POS (1<<9) +#define MPLP_PRINT_MAPQ (1<<10) +#define MPLP_PER_SAMPLE (1<<11) +#define MPLP_SMART_OVERLAPS (1<<12) + +typedef struct _mplp_aux_t mplp_aux_t; +typedef struct _mplp_pileup_t mplp_pileup_t; + +// Data shared by all bam files +typedef struct { + int min_mq, flag, min_baseQ, capQ_thres, max_depth, max_indel_depth, fmt_flag; + int rflag_require, rflag_filter, output_type; + int openQ, extQ, tandemQ, min_support; // for indels + double min_frac; // for indels + char *reg_fname, *pl_list, *fai_fname, *output_fname; + int reg_is_file, record_cmd_line, n_threads; + faidx_t *fai; + regidx_t *bed, *reg; // bed: skipping regions, reg: index-jump to regions + regitr_t *bed_itr, *reg_itr; + int bed_logic; // 1: include region, 0: exclude region + gvcf_t *gvcf; + + // auxiliary structures for calling + bcf_callaux_t *bca; + bcf_callret1_t *bcr; + bcf_call_t bc; + bam_mplp_t iter; + mplp_aux_t **mplp_data; + int nfiles; + char **files; + mplp_pileup_t *gplp; + int *n_plp; + const bam_pileup1_t **plp; + bam_smpl_t *bsmpl; + kstring_t buf; + bcf1_t *bcf_rec; + htsFile *bcf_fp; + bcf_hdr_t *bcf_hdr; + int argc; + char **argv; +} mplp_conf_t; + +typedef struct { + char *ref[2]; + int ref_id[2]; + int ref_len[2]; +} mplp_ref_t; + +#define MPLP_REF_INIT {{NULL,NULL},{-1,-1},{0,0}} + +// Data specific to each bam file +struct _mplp_aux_t { + samFile *fp; + hts_itr_t *iter; + bam_hdr_t *h; + mplp_ref_t *ref; + const mplp_conf_t *conf; + int bam_id; + hts_idx_t *idx; // maintained only with more than one -r regions +}; + +// Data passed to htslib/mpileup +struct _mplp_pileup_t { + int n; + int *n_plp, *m_plp; + bam_pileup1_t **plp; +}; + +static int mplp_get_ref(mplp_aux_t *ma, int tid, char **ref, int *ref_len) { + mplp_ref_t *r = ma->ref; + + //printf("get ref %d {%d/%p, %d/%p}\n", tid, r->ref_id[0], r->ref[0], r->ref_id[1], r->ref[1]); + + if (!r || !ma->conf->fai) { + *ref = NULL; + return 0; + } + + // Do we need to reference count this so multiple mplp_aux_t can + // track which references are in use? + // For now we just cache the last two. Sufficient? + if (tid == r->ref_id[0]) { + *ref = r->ref[0]; + *ref_len = r->ref_len[0]; + return 1; + } + if (tid == r->ref_id[1]) { + // Last, swap over + int tmp; + tmp = r->ref_id[0]; r->ref_id[0] = r->ref_id[1]; r->ref_id[1] = tmp; + tmp = r->ref_len[0]; r->ref_len[0] = r->ref_len[1]; r->ref_len[1] = tmp; + + char *tc; + tc = r->ref[0]; r->ref[0] = r->ref[1]; r->ref[1] = tc; + *ref = r->ref[0]; + *ref_len = r->ref_len[0]; + return 1; + } + + // New, so migrate to old and load new + free(r->ref[1]); + r->ref[1] = r->ref[0]; + r->ref_id[1] = r->ref_id[0]; + r->ref_len[1] = r->ref_len[0]; + + r->ref_id[0] = tid; + r->ref[0] = faidx_fetch_seq(ma->conf->fai, + ma->h->target_name[r->ref_id[0]], + 0, + INT_MAX, + &r->ref_len[0]); + + if (!r->ref[0]) { + r->ref[0] = NULL; + r->ref_id[0] = -1; + r->ref_len[0] = 0; + *ref = NULL; + return 0; + } + + *ref = r->ref[0]; + *ref_len = r->ref_len[0]; + return 1; +} + +static int mplp_func(void *data, bam1_t *b) +{ + char *ref; + mplp_aux_t *ma = (mplp_aux_t*)data; + int ret, ref_len; + while (1) + { + int has_ref; + ret = ma->iter? sam_itr_next(ma->fp, ma->iter, b) : sam_read1(ma->fp, ma->h, b); + if (ret < 0) break; + // The 'B' cigar operation is not part of the specification, considering as obsolete. + // bam_remove_B(b); + if (b->core.tid < 0 || (b->core.flag&BAM_FUNMAP)) continue; // exclude unmapped reads + if (ma->conf->rflag_require && !(ma->conf->rflag_require&b->core.flag)) continue; + if (ma->conf->rflag_filter && ma->conf->rflag_filter&b->core.flag) continue; + if (ma->conf->bed) + { + // test overlap + regitr_t *itr = ma->conf->bed_itr; + int beg = b->core.pos, end = bam_endpos(b)-1; + int overlap = regidx_overlap(ma->conf->bed, ma->h->target_name[b->core.tid],beg,end, itr); + if ( !ma->conf->bed_logic && !overlap ) + { + // exclude only reads which are fully contained in the region + while ( regitr_overlap(itr) ) + { + if ( beg < itr->beg ) { overlap = 1; break; } + if ( end > itr->end ) { overlap = 1; break; } + } + } + if ( !overlap ) continue; + } + if ( bam_smpl_get_sample_id(ma->conf->bsmpl,ma->bam_id,b)<0 ) continue; + if (ma->conf->flag & MPLP_ILLUMINA13) { + int i; + uint8_t *qual = bam_get_qual(b); + for (i = 0; i < b->core.l_qseq; ++i) + qual[i] = qual[i] > 31? qual[i] - 31 : 0; + } + + if (ma->conf->fai && b->core.tid >= 0) { + has_ref = mplp_get_ref(ma, b->core.tid, &ref, &ref_len); + if (has_ref && ref_len <= b->core.pos) { // exclude reads outside of the reference sequence + fprintf(stderr,"[%s] Skipping because %d is outside of %d [ref:%d]\n", + __func__, b->core.pos, ref_len, b->core.tid); + continue; + } + } else { + has_ref = 0; + } + + if (has_ref && (ma->conf->flag&MPLP_REALN)) sam_prob_realn(b, ref, ref_len, (ma->conf->flag & MPLP_REDO_BAQ)? 7 : 3); + if (has_ref && ma->conf->capQ_thres > 10) { + int q = sam_cap_mapq(b, ref, ref_len, ma->conf->capQ_thres); + if (q < 0) continue; // skip + else if (b->core.qual > q) b->core.qual = q; + } + if (b->core.qual < ma->conf->min_mq) continue; + else if ((ma->conf->flag&MPLP_NO_ORPHAN) && (b->core.flag&BAM_FPAIRED) && !(b->core.flag&BAM_FPROPER_PAIR)) continue; + + return ret; + }; + return ret; +} + +// Called once per new bam added to the pileup. +// We cache sample information here so we don't have to keep recomputing this +// on each and every pileup column. +// +// Cd is an arbitrary block of data we can write into, which ends up in +// the pileup structures. We stash the sample ID there. +static int pileup_constructor(void *data, const bam1_t *b, bam_pileup_cd *cd) { + mplp_aux_t *ma = (mplp_aux_t *)data; + cd->i = bam_smpl_get_sample_id(ma->conf->bsmpl, ma->bam_id, (bam1_t *)b); + return 0; +} + +static void group_smpl(mplp_pileup_t *m, bam_smpl_t *bsmpl, int n, int *n_plp, const bam_pileup1_t **plp) +{ + int i, j; + memset(m->n_plp, 0, m->n * sizeof(int)); + for (i = 0; i < n; ++i) // iterate over all bams + { + for (j = 0; j < n_plp[i]; ++j) // iterate over all reads available at this position + { + const bam_pileup1_t *p = plp[i] + j; + int id = p->cd.i; + if (m->n_plp[id] == m->m_plp[id]) + { + m->m_plp[id] = m->m_plp[id]? m->m_plp[id]<<1 : 8; + m->plp[id] = (bam_pileup1_t*) realloc(m->plp[id], sizeof(bam_pileup1_t) * m->m_plp[id]); + } + m->plp[id][m->n_plp[id]++] = *p; + } + } +} + +static void flush_bcf_records(mplp_conf_t *conf, htsFile *fp, bcf_hdr_t *hdr, bcf1_t *rec) +{ + if ( !conf->gvcf ) + { + if ( rec ) bcf_write1(fp, hdr, rec); + return; + } + + if ( !rec ) + { + gvcf_write(conf->gvcf, fp, hdr, NULL, 0); + return; + } + + int is_ref = 0; + if ( rec->n_allele==1 ) is_ref = 1; + else if ( rec->n_allele==2 ) + { + // second allele is mpileup's X, not a variant + if ( rec->d.allele[1][0]=='<' && rec->d.allele[1][1]=='*' && rec->d.allele[1][2]=='>' ) is_ref = 1; + } + rec = gvcf_write(conf->gvcf, fp, hdr, rec, is_ref); + if ( rec ) bcf_write1(fp,hdr,rec); +} + +static int mpileup_reg(mplp_conf_t *conf, uint32_t beg, uint32_t end) +{ + bam_hdr_t *hdr = conf->mplp_data[0]->h; // header of first file in input list + + int ret, i, tid, pos, ref_len; + char *ref; + + while ( (ret=bam_mplp_auto(conf->iter, &tid, &pos, conf->n_plp, conf->plp)) > 0) + { + if ( end && (posend) ) continue; + if ( conf->bed && tid >= 0 ) + { + int overlap = regidx_overlap(conf->bed, hdr->target_name[tid], pos, pos, NULL); + if ( !conf->bed_logic ) overlap = overlap ? 0 : 1; + if ( !overlap ) continue; + } + mplp_get_ref(conf->mplp_data[0], tid, &ref, &ref_len); + + int total_depth, _ref0, ref16; + for (i = total_depth = 0; i < conf->nfiles; ++i) total_depth += conf->n_plp[i]; + group_smpl(conf->gplp, conf->bsmpl, conf->nfiles, conf->n_plp, conf->plp); + _ref0 = (ref && pos < ref_len)? ref[pos] : 'N'; + ref16 = seq_nt16_table[_ref0]; + bcf_callaux_clean(conf->bca, &conf->bc); + for (i = 0; i < conf->gplp->n; ++i) + bcf_call_glfgen(conf->gplp->n_plp[i], conf->gplp->plp[i], ref16, conf->bca, conf->bcr + i); + conf->bc.tid = tid; conf->bc.pos = pos; + bcf_call_combine(conf->gplp->n, conf->bcr, conf->bca, ref16, &conf->bc); + bcf_clear1(conf->bcf_rec); + bcf_call2bcf(&conf->bc, conf->bcf_rec, conf->bcr, conf->fmt_flag, 0, 0); + flush_bcf_records(conf, conf->bcf_fp, conf->bcf_hdr, conf->bcf_rec); + + // call indels; todo: subsampling with total_depth>max_indel_depth instead of ignoring? + // check me: rghash in bcf_call_gap_prep() should have no effect, reads mplp_func already excludes them + if (!(conf->flag&MPLP_NO_INDEL) && total_depth < conf->max_indel_depth + && bcf_call_gap_prep(conf->gplp->n, conf->gplp->n_plp, conf->gplp->plp, pos, conf->bca, ref) >= 0) + { + bcf_callaux_clean(conf->bca, &conf->bc); + for (i = 0; i < conf->gplp->n; ++i) + bcf_call_glfgen(conf->gplp->n_plp[i], conf->gplp->plp[i], -1, conf->bca, conf->bcr + i); + if (bcf_call_combine(conf->gplp->n, conf->bcr, conf->bca, -1, &conf->bc) >= 0) + { + bcf_clear1(conf->bcf_rec); + bcf_call2bcf(&conf->bc, conf->bcf_rec, conf->bcr, conf->fmt_flag, conf->bca, ref); + flush_bcf_records(conf, conf->bcf_fp, conf->bcf_hdr, conf->bcf_rec); + } + } + } + return 0; +} + +static int mpileup(mplp_conf_t *conf) +{ + if (conf->nfiles == 0) { + fprintf(stderr,"[%s] no input file/data given\n", __func__); + exit(EXIT_FAILURE); + } + + mplp_ref_t mp_ref = MPLP_REF_INIT; + conf->gplp = (mplp_pileup_t *) calloc(1,sizeof(mplp_pileup_t)); + conf->mplp_data = (mplp_aux_t**) calloc(conf->nfiles, sizeof(mplp_aux_t*)); + conf->plp = (const bam_pileup1_t**) calloc(conf->nfiles, sizeof(bam_pileup1_t*)); + conf->n_plp = (int*) calloc(conf->nfiles, sizeof(int)); + + // Allow to run mpileup on multiple regions in one go. This comes at cost: the bai index + // must be kept in the memory for the whole time which can be a problem with many bams. + // Therefore if none or only one region is requested, we initialize the bam iterator as + // before and free the index. Only when multiple regions are queried, we keep the index. + int nregs = 0; + if ( conf->reg_fname ) + { + if ( conf->reg_is_file ) + { + conf->reg = regidx_init(conf->reg_fname,NULL,NULL,0,NULL); + if ( !conf->reg ) { + fprintf(stderr,"Could not parse the regions: %s\n", conf->reg_fname); + exit(EXIT_FAILURE); + } + } + else + { + conf->reg = regidx_init(NULL,regidx_parse_reg,NULL,sizeof(char*),NULL); + if ( regidx_insert_list(conf->reg,conf->reg_fname,',') !=0 ) { + fprintf(stderr,"Could not parse the regions: %s\n", conf->reg_fname); + exit(EXIT_FAILURE); + } + } + nregs = regidx_nregs(conf->reg); + conf->reg_itr = regitr_init(conf->reg); + regitr_loop(conf->reg_itr); // region iterator now positioned at the first region + } + + // read the header of each file in the list and initialize data + // beware: mpileup has always assumed that tid's are consistent in the headers, add sanity check at least! + bam_hdr_t *hdr = NULL; // header of first file in input list + int i; + for (i = 0; i < conf->nfiles; ++i) { + bam_hdr_t *h_tmp; + conf->mplp_data[i] = (mplp_aux_t*) calloc(1, sizeof(mplp_aux_t)); + conf->mplp_data[i]->fp = sam_open(conf->files[i], "rb"); + if ( !conf->mplp_data[i]->fp ) + { + fprintf(stderr, "[%s] failed to open %s: %s\n", __func__, conf->files[i], strerror(errno)); + exit(EXIT_FAILURE); + } + if (hts_set_opt(conf->mplp_data[i]->fp, CRAM_OPT_DECODE_MD, 0)) { + fprintf(stderr, "Failed to set CRAM_OPT_DECODE_MD value\n"); + exit(EXIT_FAILURE); + } + if (conf->fai_fname && hts_set_fai_filename(conf->mplp_data[i]->fp, conf->fai_fname) != 0) { + fprintf(stderr, "[%s] failed to process %s: %s\n", + __func__, conf->fai_fname, strerror(errno)); + exit(EXIT_FAILURE); + } + conf->mplp_data[i]->conf = conf; + conf->mplp_data[i]->ref = &mp_ref; + h_tmp = sam_hdr_read(conf->mplp_data[i]->fp); + if ( !h_tmp ) { + fprintf(stderr,"[%s] fail to read the header of %s\n", __func__, conf->files[i]); + exit(EXIT_FAILURE); + } + conf->mplp_data[i]->h = i ? hdr : h_tmp; // for j==0, "h" has not been set yet + conf->mplp_data[i]->bam_id = bam_smpl_add_bam(conf->bsmpl,h_tmp->text,conf->files[i]); + if ( conf->mplp_data[i]->bam_id<0 ) + { + // no usable readgroups in this bam, it can be skipped + sam_close(conf->mplp_data[i]->fp); + free(conf->mplp_data[i]); + bam_hdr_destroy(h_tmp); + free(conf->files[i]); + if ( i+1nfiles ) memmove(&conf->files[i],&conf->files[i+1],sizeof(*conf->files)*(conf->nfiles-i-1)); + conf->nfiles--; + i--; + continue; + } + if (conf->reg) { + hts_idx_t *idx = sam_index_load(conf->mplp_data[i]->fp, conf->files[i]); + if (idx == NULL) { + fprintf(stderr, "[%s] fail to load index for %s\n", __func__, conf->files[i]); + exit(EXIT_FAILURE); + } + conf->buf.l = 0; + ksprintf(&conf->buf,"%s:%u-%u",conf->reg_itr->seq,conf->reg_itr->beg+1,conf->reg_itr->end+1); + conf->mplp_data[i]->iter = sam_itr_querys(idx, conf->mplp_data[i]->h, conf->buf.s); + if ( !conf->mplp_data[i]->iter ) + { + conf->mplp_data[i]->iter = sam_itr_querys(idx, conf->mplp_data[i]->h, conf->reg_itr->seq); + if ( conf->mplp_data[i]->iter ) { + fprintf(stderr,"[E::%s] fail to parse region '%s'\n", __func__, conf->buf.s); + exit(EXIT_FAILURE); + } + fprintf(stderr,"[E::%s] the sequence \"%s\" not found: %s\n",__func__,conf->reg_itr->seq,conf->files[i]); + exit(EXIT_FAILURE); + } + if ( nregs==1 ) // no need to keep the index in memory + hts_idx_destroy(idx); + else + conf->mplp_data[i]->idx = idx; + } + + if ( !hdr ) hdr = h_tmp; /* save the header of first file in list */ + else { + // FIXME: check consistency between h and h_tmp + bam_hdr_destroy(h_tmp); + + // we store only the first file's header; it's (alleged to be) + // compatible with the i-th file's target_name lookup needs + conf->mplp_data[i]->h = hdr; + } + } + // allocate data storage proportionate to number of samples being studied sm->n + bam_smpl_get_samples(conf->bsmpl, &conf->gplp->n); + conf->gplp->n_plp = (int*) calloc(conf->gplp->n, sizeof(int)); + conf->gplp->m_plp = (int*) calloc(conf->gplp->n, sizeof(int)); + conf->gplp->plp = (bam_pileup1_t**) calloc(conf->gplp->n, sizeof(bam_pileup1_t*)); + + fprintf(stderr, "[%s] %d samples in %d input files\n", __func__, conf->gplp->n, conf->nfiles); + // write the VCF header + conf->bcf_fp = hts_open(conf->output_fname?conf->output_fname:"-", hts_bcf_wmode(conf->output_type)); + if (conf->bcf_fp == NULL) { + fprintf(stderr, "[%s] failed to write to %s: %s\n", __func__, conf->output_fname? conf->output_fname : "standard output", strerror(errno)); + exit(EXIT_FAILURE); + } + if ( conf->n_threads ) hts_set_threads(conf->bcf_fp, conf->n_threads); + + // BCF header creation + conf->bcf_hdr = bcf_hdr_init("w"); + conf->buf.l = 0; + + if (conf->record_cmd_line) + { + ksprintf(&conf->buf, "##bcftoolsVersion=%s+htslib-%s\n",bcftools_version(),hts_version()); + bcf_hdr_append(conf->bcf_hdr, conf->buf.s); + + conf->buf.l = 0; + ksprintf(&conf->buf, "##bcftoolsCommand=mpileup"); + for (i=1; iargc; i++) ksprintf(&conf->buf, " %s", conf->argv[i]); + kputc('\n', &conf->buf); + bcf_hdr_append(conf->bcf_hdr, conf->buf.s); + } + + if (conf->fai_fname) + { + conf->buf.l = 0; + ksprintf(&conf->buf, "##reference=file://%s\n", conf->fai_fname); + bcf_hdr_append(conf->bcf_hdr, conf->buf.s); + } + + // Translate BAM @SQ tags to BCF ##contig tags + // todo: use/write new BAM header manipulation routines, fill also UR, M5 + for (i=0; in_targets; i++) + { + conf->buf.l = 0; + ksprintf(&conf->buf, "##contig=", hdr->target_name[i], hdr->target_len[i]); + bcf_hdr_append(conf->bcf_hdr, conf->buf.s); + } + conf->buf.l = 0; + + bcf_hdr_append(conf->bcf_hdr,"##ALT="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); +#if CDF_MWU_TESTS + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); +#endif + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_DP ) + bcf_hdr_append(conf->bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_DV ) + bcf_hdr_append(conf->bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_DPR ) + bcf_hdr_append(conf->bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_INFO_DPR ) + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + if ( conf->fmt_flag&B2B_FMT_DP4 ) + bcf_hdr_append(conf->bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_SP ) + bcf_hdr_append(conf->bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_AD ) + bcf_hdr_append(conf->bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_ADF ) + bcf_hdr_append(conf->bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_ADR ) + bcf_hdr_append(conf->bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_INFO_AD ) + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + if ( conf->fmt_flag&B2B_INFO_ADF ) + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + if ( conf->fmt_flag&B2B_INFO_ADR ) + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + if ( conf->gvcf ) + gvcf_update_header(conf->gvcf, conf->bcf_hdr); + + int nsmpl; + const char **smpl = bam_smpl_get_samples(conf->bsmpl, &nsmpl); + for (i=0; ibcf_hdr, smpl[i]); + bcf_hdr_write(conf->bcf_fp, conf->bcf_hdr); + + conf->bca = bcf_call_init(-1., conf->min_baseQ); + conf->bcr = (bcf_callret1_t*) calloc(nsmpl, sizeof(bcf_callret1_t)); + conf->bca->openQ = conf->openQ, conf->bca->extQ = conf->extQ, conf->bca->tandemQ = conf->tandemQ; + conf->bca->min_frac = conf->min_frac; + conf->bca->min_support = conf->min_support; + conf->bca->per_sample_flt = conf->flag & MPLP_PER_SAMPLE; + + conf->bc.bcf_hdr = conf->bcf_hdr; + conf->bc.n = nsmpl; + conf->bc.PL = (int32_t*) malloc(15 * nsmpl * sizeof(*conf->bc.PL)); + if (conf->fmt_flag) + { + assert( sizeof(float)==sizeof(int32_t) ); + conf->bc.DP4 = (int32_t*) malloc(nsmpl * sizeof(int32_t) * 4); + conf->bc.fmt_arr = (uint8_t*) malloc(nsmpl * sizeof(float)); // all fmt_flag fields, float and int32 + if ( conf->fmt_flag&(B2B_INFO_DPR|B2B_FMT_DPR|B2B_INFO_AD|B2B_INFO_ADF|B2B_INFO_ADR|B2B_FMT_AD|B2B_FMT_ADF|B2B_FMT_ADR) ) + { + // first B2B_MAX_ALLELES fields for total numbers, the rest per-sample + conf->bc.ADR = (int32_t*) malloc((nsmpl+1)*B2B_MAX_ALLELES*sizeof(int32_t)); + conf->bc.ADF = (int32_t*) malloc((nsmpl+1)*B2B_MAX_ALLELES*sizeof(int32_t)); + for (i=0; ibcr[i].ADR = conf->bc.ADR + (i+1)*B2B_MAX_ALLELES; + conf->bcr[i].ADF = conf->bc.ADF + (i+1)*B2B_MAX_ALLELES; + } + } + } + + // init mpileup + conf->iter = bam_mplp_init(conf->nfiles, mplp_func, (void**)conf->mplp_data); + if ( conf->flag & MPLP_SMART_OVERLAPS ) bam_mplp_init_overlaps(conf->iter); + if ( (double)conf->max_depth * conf->nfiles > 1<<20) + fprintf(stderr, "Warning: Potential memory hog, up to %.0fM reads in the pileup!\n", (double)conf->max_depth*conf->nfiles); + if ( (double)conf->max_depth * conf->nfiles / nsmpl < 250 ) + fprintf(stderr, "Note: The maximum per-sample depth with -d %d is %.1fx\n", conf->max_depth,(double)conf->max_depth * conf->nfiles / nsmpl); + bam_mplp_set_maxcnt(conf->iter, conf->max_depth); + conf->max_indel_depth = conf->max_indel_depth * nsmpl; + conf->bcf_rec = bcf_init1(); + bam_mplp_constructor(conf->iter, pileup_constructor); + + // Run mpileup for multiple regions + if ( nregs ) + { + int ireg = 0; + do + { + // first region is already positioned + if ( ireg++ > 0 ) + { + conf->buf.l = 0; + ksprintf(&conf->buf,"%s:%u-%u",conf->reg_itr->seq,conf->reg_itr->beg,conf->reg_itr->end); + + for (i=0; infiles; i++) + { + hts_itr_destroy(conf->mplp_data[i]->iter); + conf->mplp_data[i]->iter = sam_itr_querys(conf->mplp_data[i]->idx, conf->mplp_data[i]->h, conf->buf.s); + if ( !conf->mplp_data[i]->iter ) + { + conf->mplp_data[i]->iter = sam_itr_querys(conf->mplp_data[i]->idx, conf->mplp_data[i]->h, conf->reg_itr->seq); + if ( conf->mplp_data[i]->iter ) { + fprintf(stderr,"[E::%s] fail to parse region '%s'\n", __func__, conf->buf.s); + exit(EXIT_FAILURE); + } + fprintf(stderr,"[E::%s] the sequence \"%s\" not found: %s\n",__func__,conf->reg_itr->seq,conf->files[i]); + exit(EXIT_FAILURE); + } + bam_mplp_reset(conf->iter); + } + } + mpileup_reg(conf,conf->reg_itr->beg,conf->reg_itr->end); + } + while ( regitr_loop(conf->reg_itr) ); + } + else + mpileup_reg(conf,0,0); + + flush_bcf_records(conf, conf->bcf_fp, conf->bcf_hdr, NULL); + + // clean up + free(conf->bc.tmp.s); + bcf_destroy1(conf->bcf_rec); + if (conf->bcf_fp) + { + hts_close(conf->bcf_fp); + bcf_hdr_destroy(conf->bcf_hdr); + bcf_call_destroy(conf->bca); + free(conf->bc.PL); + free(conf->bc.DP4); + free(conf->bc.ADR); + free(conf->bc.ADF); + free(conf->bc.fmt_arr); + free(conf->bcr); + } + if ( conf->gvcf ) gvcf_destroy(conf->gvcf); + free(conf->buf.s); + for (i = 0; i < conf->gplp->n; ++i) free(conf->gplp->plp[i]); + free(conf->gplp->plp); free(conf->gplp->n_plp); free(conf->gplp->m_plp); free(conf->gplp); + bam_mplp_destroy(conf->iter); + bam_hdr_destroy(hdr); + for (i = 0; i < conf->nfiles; ++i) { + if ( nregs>1 ) hts_idx_destroy(conf->mplp_data[i]->idx); + sam_close(conf->mplp_data[i]->fp); + if ( conf->mplp_data[i]->iter) hts_itr_destroy(conf->mplp_data[i]->iter); + free(conf->mplp_data[i]); + } + if ( conf->reg_itr ) regitr_destroy(conf->reg_itr); + free(conf->mplp_data); free(conf->plp); free(conf->n_plp); + free(mp_ref.ref[0]); + free(mp_ref.ref[1]); + return 0; +} + +static int is_url(const char *s) +{ + static const char uri_scheme_chars[] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+.-"; + return s[strspn(s, uri_scheme_chars)] == ':'; +} + +#define MAX_PATH_LEN 1024 +int read_file_list(const char *file_list,int *n,char **argv[]) +{ + char buf[MAX_PATH_LEN]; + int len, nfiles = 0; + char **files = NULL; + struct stat sb; + + *n = 0; + *argv = NULL; + + FILE *fh = fopen(file_list,"r"); + if ( !fh ) + { + fprintf(stderr,"%s: %s\n", file_list,strerror(errno)); + return 1; + } + + files = (char**) calloc(nfiles,sizeof(char*)); + nfiles = 0; + while ( fgets(buf,MAX_PATH_LEN,fh) ) + { + // allow empty lines and trailing spaces + len = strlen(buf); + while ( len>0 && isspace(buf[len-1]) ) len--; + if ( !len ) continue; + + // check sanity of the file list + buf[len] = 0; + if (! (is_url(buf) || stat(buf, &sb) == 0)) + { + // no such file, check if it is safe to print its name + int i, safe_to_print = 1; + for (i=0; irflag_require); + char *tmp_filter = bam_flag2str(mplp->rflag_filter); + + // Display usage information, formatted for the standard 80 columns. + // (The unusual string formatting here aids the readability of this + // source code in 80 columns, to the extent that's possible.) + + fprintf(fp, +"\n" +"Usage: bcftools mpileup [options] in1.bam [in2.bam [...]]\n" +"\n" +"Input options:\n" +" -6, --illumina1.3+ quality is in the Illumina-1.3+ encoding\n" +" -A, --count-orphans do not discard anomalous read pairs\n" +" -b, --bam-list FILE list of input BAM filenames, one per line\n" +" -B, --no-BAQ disable BAQ (per-Base Alignment Quality)\n" +" -C, --adjust-MQ INT adjust mapping quality; recommended:50, disable:0 [0]\n" +" -d, --max-depth INT max per-file depth; avoids excessive memory usage [%d]\n", mplp->max_depth); + fprintf(fp, +" -E, --redo-BAQ recalculate BAQ on the fly, ignore existing BQs\n" +" -f, --fasta-ref FILE faidx indexed reference sequence file\n" +" --no-reference do not require fasta reference file\n" +" -G, --read-groups FILE select or exclude read groups listed in the file\n" +" -q, --min-MQ INT skip alignments with mapQ smaller than INT [%d]\n", mplp->min_mq); + fprintf(fp, +" -Q, --min-BQ INT skip bases with baseQ/BAQ smaller than INT [%d]\n", mplp->min_baseQ); + fprintf(fp, +" -r, --regions REG[,...] comma separated list of regions in which pileup is generated\n" +" -R, --regions-file FILE restrict to regions listed in a file\n" +" --ignore-RG ignore RG tags (one BAM = one sample)\n" +" --rf, --incl-flags STR|INT required flags: skip reads with mask bits unset [%s]\n", tmp_require); + fprintf(fp, +" --ff, --excl-flags STR|INT filter flags: skip reads with mask bits set\n" +" [%s]\n", tmp_filter); + fprintf(fp, +" -s, --samples LIST comma separated list of samples to include\n" +" -S, --samples-file FILE file of samples to include\n" +" -t, --targets REG[,...] similar to -r but streams rather than index-jumps\n" +" -T, --targets-file FILE similar to -R but streams rather than index-jumps\n" +" -x, --ignore-overlaps disable read-pair overlap detection\n" +"\n" +"Output options:\n" +" -a, --annotate LIST optional tags to output; '?' to list []\n" +" -g, --gvcf INT[,...] group non-variant sites into gVCF blocks according\n" +" to minimum per-sample DP\n" +" --no-version do not append version and command line to the header\n" +" -o, --output FILE write output to FILE [standard output]\n" +" -O, --output-type TYPE 'b' compressed BCF; 'u' uncompressed BCF;\n" +" 'z' compressed VCF; 'v' uncompressed VCF [v]\n" +" --threads INT number of extra output compression threads [0]\n" +"\n" +"SNP/INDEL genotype likelihoods options:\n" +" -e, --ext-prob INT Phred-scaled gap extension seq error probability [%d]\n", mplp->extQ); + fprintf(fp, +" -F, --gap-frac FLOAT minimum fraction of gapped reads [%g]\n", mplp->min_frac); + fprintf(fp, +" -h, --tandem-qual INT coefficient for homopolymer errors [%d]\n", mplp->tandemQ); + fprintf(fp, +" -I, --skip-indels do not perform indel calling\n" +" -L, --max-idepth INT maximum per-file depth for INDEL calling [%d]\n", mplp->max_indel_depth); + fprintf(fp, +" -m, --min-ireads INT minimum number gapped reads for indel candidates [%d]\n", mplp->min_support); + fprintf(fp, +" -o, --open-prob INT Phred-scaled gap open seq error probability [%d]\n", mplp->openQ); + fprintf(fp, +" -p, --per-sample-mF apply -m and -F per-sample for increased sensitivity\n" +" -P, --platforms STR comma separated list of platforms for indels [all]\n" +"\n" +"Notes: Assuming diploid individuals.\n" +"\n"); + + free(tmp_require); + free(tmp_filter); +} + +int bam_mpileup(int argc, char *argv[]) +{ + int c; + const char *file_list = NULL; + char **fn = NULL; + int nfiles = 0, use_orphan = 0, noref = 0; + mplp_conf_t mplp; + memset(&mplp, 0, sizeof(mplp_conf_t)); + mplp.min_baseQ = 13; + mplp.capQ_thres = 0; + mplp.max_depth = 250; mplp.max_indel_depth = 250; + mplp.openQ = 40; mplp.extQ = 20; mplp.tandemQ = 100; + mplp.min_frac = 0.002; mplp.min_support = 1; + mplp.flag = MPLP_NO_ORPHAN | MPLP_REALN | MPLP_SMART_OVERLAPS; + mplp.argc = argc; mplp.argv = argv; + mplp.rflag_filter = BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP; + mplp.output_fname = NULL; + mplp.output_type = FT_VCF; + mplp.record_cmd_line = 1; + mplp.n_threads = 0; + mplp.bsmpl = bam_smpl_init(); + + static const struct option lopts[] = + { + {"rf", required_argument, NULL, 1}, // require flag + {"ff", required_argument, NULL, 2}, // filter flag + {"incl-flags", required_argument, NULL, 1}, + {"excl-flags", required_argument, NULL, 2}, + {"output", required_argument, NULL, 3}, + {"open-prob", required_argument, NULL, 4}, + {"ignore-RG", no_argument, NULL, 5}, + {"ignore-rg", no_argument, NULL, 5}, + {"gvcf", required_argument, NULL, 'g'}, + {"no-reference", no_argument, NULL, 7}, + {"no-version", no_argument, NULL, 8}, + {"threads",required_argument,NULL,9}, + {"illumina1.3+", no_argument, NULL, '6'}, + {"count-orphans", no_argument, NULL, 'A'}, + {"bam-list", required_argument, NULL, 'b'}, + {"no-BAQ", no_argument, NULL, 'B'}, + {"no-baq", no_argument, NULL, 'B'}, + {"adjust-MQ", required_argument, NULL, 'C'}, + {"adjust-mq", required_argument, NULL, 'C'}, + {"max-depth", required_argument, NULL, 'd'}, + {"redo-BAQ", no_argument, NULL, 'E'}, + {"redo-baq", no_argument, NULL, 'E'}, + {"fasta-ref", required_argument, NULL, 'f'}, + {"read-groups", required_argument, NULL, 'G'}, + {"region", required_argument, NULL, 'r'}, + {"regions", required_argument, NULL, 'r'}, + {"regions-file", required_argument, NULL, 'R'}, + {"targets", required_argument, NULL, 't'}, + {"targets-file", required_argument, NULL, 'T'}, + {"min-MQ", required_argument, NULL, 'q'}, + {"min-mq", required_argument, NULL, 'q'}, + {"min-BQ", required_argument, NULL, 'Q'}, + {"min-bq", required_argument, NULL, 'Q'}, + {"ignore-overlaps", no_argument, NULL, 'x'}, + {"output-type", required_argument, NULL, 'O'}, + {"samples", required_argument, NULL, 's'}, + {"samples-file", required_argument, NULL, 'S'}, + {"annotate", required_argument, NULL, 'a'}, + {"ext-prob", required_argument, NULL, 'e'}, + {"gap-frac", required_argument, NULL, 'F'}, + {"tandem-qual", required_argument, NULL, 'h'}, + {"skip-indels", no_argument, NULL, 'I'}, + {"max-idepth", required_argument, NULL, 'L'}, + {"min-ireads ", required_argument, NULL, 'm'}, + {"per-sample-mF", no_argument, NULL, 'p'}, + {"per-sample-mf", no_argument, NULL, 'p'}, + {"platforms", required_argument, NULL, 'P'}, + {NULL, 0, NULL, 0} + }; + while ((c = getopt_long(argc, argv, "Ag:f:r:R:q:Q:C:Bd:L:b:P:po:e:h:Im:F:EG:6O:xa:s:S:t:T:",lopts,NULL)) >= 0) { + switch (c) { + case 'x': mplp.flag &= ~MPLP_SMART_OVERLAPS; break; + case 1 : + mplp.rflag_require = bam_str2flag(optarg); + if ( mplp.rflag_require<0 ) { fprintf(stderr,"Could not parse --rf %s\n", optarg); return 1; } + break; + case 2 : + mplp.rflag_filter = bam_str2flag(optarg); + if ( mplp.rflag_filter<0 ) { fprintf(stderr,"Could not parse --ff %s\n", optarg); return 1; } + break; + case 3 : mplp.output_fname = optarg; break; + case 4 : mplp.openQ = atoi(optarg); break; + case 5 : bam_smpl_ignore_readgroups(mplp.bsmpl); break; + case 'g': + mplp.gvcf = gvcf_init(optarg); + if ( !mplp.gvcf ) error("Could not parse: --gvcf %s\n", optarg); + break; + case 'f': + mplp.fai = fai_load(optarg); + if (mplp.fai == NULL) return 1; + mplp.fai_fname = optarg; + break; + case 7 : noref = 1; break; + case 8 : mplp.record_cmd_line = 0; break; + case 9 : mplp.n_threads = strtol(optarg, 0, 0); break; + case 'd': mplp.max_depth = atoi(optarg); break; + case 'r': mplp.reg_fname = strdup(optarg); break; + case 'R': mplp.reg_fname = strdup(optarg); mplp.reg_is_file = 1; break; + case 't': + // In the original version the whole BAM was streamed which is inefficient + // with few BED intervals and big BAMs. Todo: devise a heuristic to determine + // best strategy, that is streaming or jumping. + if ( optarg[0]=='^' ) optarg++; + else mplp.bed_logic = 1; + mplp.bed = regidx_init(NULL,regidx_parse_reg,NULL,0,NULL); + mplp.bed_itr = regitr_init(mplp.bed); + if ( regidx_insert_list(mplp.bed,optarg,',') !=0 ) + { + fprintf(stderr,"Could not parse the targets: %s\n", optarg); + exit(EXIT_FAILURE); + } + break; + case 'T': + if ( optarg[0]=='^' ) optarg++; + else mplp.bed_logic = 1; + mplp.bed = regidx_init(optarg,NULL,NULL,0,NULL); + if (!mplp.bed) { fprintf(stderr, "bcftools mpileup: Could not read file \"%s\"", optarg); return 1; } + break; + case 'P': mplp.pl_list = strdup(optarg); break; + case 'p': mplp.flag |= MPLP_PER_SAMPLE; break; + case 'B': mplp.flag &= ~MPLP_REALN; break; + case 'I': mplp.flag |= MPLP_NO_INDEL; break; + case 'E': mplp.flag |= MPLP_REDO_BAQ; break; + case '6': mplp.flag |= MPLP_ILLUMINA13; break; + case 's': if ( bam_smpl_add_samples(mplp.bsmpl,optarg,0)<0 ) error("Could not read samples: %s\n",optarg); break; + case 'S': if ( bam_smpl_add_samples(mplp.bsmpl,optarg,1)<0 ) error("Could not read samples: %s\n",optarg); break; + case 'O': + switch (optarg[0]) { + case 'b': mplp.output_type = FT_BCF_GZ; break; + case 'u': mplp.output_type = FT_BCF; break; + case 'z': mplp.output_type = FT_VCF_GZ; break; + case 'v': mplp.output_type = FT_VCF; break; + default: error("[error] The option \"-O\" changed meaning when mpileup moved to bcftools. Did you mean: \"bcftools mpileup --output-type\" or \"samtools mpileup --output-BP\"?\n", optarg); + } + break; + case 'C': mplp.capQ_thres = atoi(optarg); break; + case 'q': mplp.min_mq = atoi(optarg); break; + case 'Q': mplp.min_baseQ = atoi(optarg); break; + case 'b': file_list = optarg; break; + case 'o': { + char *end; + long value = strtol(optarg, &end, 10); + // Distinguish between -o INT and -o FILE (a bit of a hack!) + if (*end == '\0') mplp.openQ = value; + else mplp.output_fname = optarg; + } + break; + case 'e': mplp.extQ = atoi(optarg); break; + case 'h': mplp.tandemQ = atoi(optarg); break; + case 'A': use_orphan = 1; break; + case 'F': mplp.min_frac = atof(optarg); break; + case 'm': mplp.min_support = atoi(optarg); break; + case 'L': mplp.max_indel_depth = atoi(optarg); break; + case 'G': bam_smpl_add_readgroups(mplp.bsmpl, optarg, 1); break; + case 'a': + if (optarg[0]=='?') { + list_annotations(stderr); + return 1; + } + mplp.fmt_flag |= parse_format_flag(optarg); + break; + default: + fprintf(stderr,"Invalid option: '%c'\n", c); + return 1; + } + } + + if ( mplp.gvcf && !(mplp.fmt_flag&B2B_FMT_DP) ) + { + fprintf(stderr,"[warning] The -t DP option is required with --gvcf, switching on.\n"); + mplp.fmt_flag |= B2B_FMT_DP; + } + if ( mplp.flag&(MPLP_BCF|MPLP_VCF|MPLP_NO_COMP) ) + { + if ( mplp.flag&MPLP_VCF ) + { + if ( mplp.flag&MPLP_NO_COMP ) mplp.output_type = FT_VCF; + else mplp.output_type = FT_VCF_GZ; + } + else if ( mplp.flag&MPLP_BCF ) + { + if ( mplp.flag&MPLP_NO_COMP ) mplp.output_type = FT_BCF; + else mplp.output_type = FT_BCF_GZ; + } + } + if ( !(mplp.flag&MPLP_REALN) && mplp.flag&MPLP_REDO_BAQ ) + { + fprintf(stderr,"Error: The -B option cannot be combined with -E\n"); + return 1; + } + if (use_orphan) mplp.flag &= ~MPLP_NO_ORPHAN; + if (argc == 1) + { + print_usage(stderr, &mplp); + return 1; + } + if (!mplp.fai && !noref) { + fprintf(stderr,"Error: mpileup requires the --fasta-ref option by default; use --no-reference to run without a fasta reference\n"); + return 1; + } + int ret,i; + if (file_list) + { + if ( read_file_list(file_list,&nfiles,&fn) ) return 1; + mplp.files = fn; + mplp.nfiles = nfiles; + } + else + { + mplp.nfiles = argc - optind; + mplp.files = (char**) malloc(mplp.nfiles*sizeof(char*)); + for (i=0; i + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "regidx.h" +#include "bcftools.h" +#include "bam2bcf.h" +#include "bam_sample.h" +#include "gvcf.h" + +#define MPLP_BCF 1 +#define MPLP_VCF (1<<1) +#define MPLP_NO_COMP (1<<2) +#define MPLP_NO_ORPHAN (1<<3) +#define MPLP_REALN (1<<4) +#define MPLP_NO_INDEL (1<<5) +#define MPLP_REDO_BAQ (1<<6) +#define MPLP_ILLUMINA13 (1<<7) +#define MPLP_IGNORE_RG (1<<8) +#define MPLP_PRINT_POS (1<<9) +#define MPLP_PRINT_MAPQ (1<<10) +#define MPLP_PER_SAMPLE (1<<11) +#define MPLP_SMART_OVERLAPS (1<<12) + +typedef struct _mplp_aux_t mplp_aux_t; +typedef struct _mplp_pileup_t mplp_pileup_t; + +// Data shared by all bam files +typedef struct { + int min_mq, flag, min_baseQ, capQ_thres, max_depth, max_indel_depth, fmt_flag; + int rflag_require, rflag_filter, output_type; + int openQ, extQ, tandemQ, min_support; // for indels + double min_frac; // for indels + char *reg_fname, *pl_list, *fai_fname, *output_fname; + int reg_is_file, record_cmd_line, n_threads; + faidx_t *fai; + regidx_t *bed, *reg; // bed: skipping regions, reg: index-jump to regions + regitr_t *bed_itr, *reg_itr; + int bed_logic; // 1: include region, 0: exclude region + gvcf_t *gvcf; + + // auxiliary structures for calling + bcf_callaux_t *bca; + bcf_callret1_t *bcr; + bcf_call_t bc; + bam_mplp_t iter; + mplp_aux_t **mplp_data; + int nfiles; + char **files; + mplp_pileup_t *gplp; + int *n_plp; + const bam_pileup1_t **plp; + bam_smpl_t *bsmpl; + kstring_t buf; + bcf1_t *bcf_rec; + htsFile *bcf_fp; + bcf_hdr_t *bcf_hdr; + int argc; + char **argv; +} mplp_conf_t; + +typedef struct { + char *ref[2]; + int ref_id[2]; + int ref_len[2]; +} mplp_ref_t; + +#define MPLP_REF_INIT {{NULL,NULL},{-1,-1},{0,0}} + +// Data specific to each bam file +struct _mplp_aux_t { + samFile *fp; + hts_itr_t *iter; + bam_hdr_t *h; + mplp_ref_t *ref; + const mplp_conf_t *conf; + int bam_id; + hts_idx_t *idx; // maintained only with more than one -r regions +}; + +// Data passed to htslib/mpileup +struct _mplp_pileup_t { + int n; + int *n_plp, *m_plp; + bam_pileup1_t **plp; +}; + +static int mplp_get_ref(mplp_aux_t *ma, int tid, char **ref, int *ref_len) { + mplp_ref_t *r = ma->ref; + + //printf("get ref %d {%d/%p, %d/%p}\n", tid, r->ref_id[0], r->ref[0], r->ref_id[1], r->ref[1]); + + if (!r || !ma->conf->fai) { + *ref = NULL; + return 0; + } + + // Do we need to reference count this so multiple mplp_aux_t can + // track which references are in use? + // For now we just cache the last two. Sufficient? + if (tid == r->ref_id[0]) { + *ref = r->ref[0]; + *ref_len = r->ref_len[0]; + return 1; + } + if (tid == r->ref_id[1]) { + // Last, swap over + int tmp; + tmp = r->ref_id[0]; r->ref_id[0] = r->ref_id[1]; r->ref_id[1] = tmp; + tmp = r->ref_len[0]; r->ref_len[0] = r->ref_len[1]; r->ref_len[1] = tmp; + + char *tc; + tc = r->ref[0]; r->ref[0] = r->ref[1]; r->ref[1] = tc; + *ref = r->ref[0]; + *ref_len = r->ref_len[0]; + return 1; + } + + // New, so migrate to old and load new + free(r->ref[1]); + r->ref[1] = r->ref[0]; + r->ref_id[1] = r->ref_id[0]; + r->ref_len[1] = r->ref_len[0]; + + r->ref_id[0] = tid; + r->ref[0] = faidx_fetch_seq(ma->conf->fai, + ma->h->target_name[r->ref_id[0]], + 0, + INT_MAX, + &r->ref_len[0]); + + if (!r->ref[0]) { + r->ref[0] = NULL; + r->ref_id[0] = -1; + r->ref_len[0] = 0; + *ref = NULL; + return 0; + } + + *ref = r->ref[0]; + *ref_len = r->ref_len[0]; + return 1; +} + +static int mplp_func(void *data, bam1_t *b) +{ + char *ref; + mplp_aux_t *ma = (mplp_aux_t*)data; + int ret, ref_len; + while (1) + { + int has_ref; + ret = ma->iter? sam_itr_next(ma->fp, ma->iter, b) : sam_read1(ma->fp, ma->h, b); + if (ret < 0) break; + // The 'B' cigar operation is not part of the specification, considering as obsolete. + // bam_remove_B(b); + if (b->core.tid < 0 || (b->core.flag&BAM_FUNMAP)) continue; // exclude unmapped reads + if (ma->conf->rflag_require && !(ma->conf->rflag_require&b->core.flag)) continue; + if (ma->conf->rflag_filter && ma->conf->rflag_filter&b->core.flag) continue; + if (ma->conf->bed) + { + // test overlap + regitr_t *itr = ma->conf->bed_itr; + int beg = b->core.pos, end = bam_endpos(b)-1; + int overlap = regidx_overlap(ma->conf->bed, ma->h->target_name[b->core.tid],beg,end, itr); + if ( !ma->conf->bed_logic && !overlap ) + { + // exclude only reads which are fully contained in the region + while ( regitr_overlap(itr) ) + { + if ( beg < itr->beg ) { overlap = 1; break; } + if ( end > itr->end ) { overlap = 1; break; } + } + } + if ( !overlap ) continue; + } + if ( bam_smpl_get_sample_id(ma->conf->bsmpl,ma->bam_id,b)<0 ) continue; + if (ma->conf->flag & MPLP_ILLUMINA13) { + int i; + uint8_t *qual = bam_get_qual(b); + for (i = 0; i < b->core.l_qseq; ++i) + qual[i] = qual[i] > 31? qual[i] - 31 : 0; + } + + if (ma->conf->fai && b->core.tid >= 0) { + has_ref = mplp_get_ref(ma, b->core.tid, &ref, &ref_len); + if (has_ref && ref_len <= b->core.pos) { // exclude reads outside of the reference sequence + fprintf(bcftools_stderr,"[%s] Skipping because %d is outside of %d [ref:%d]\n", + __func__, b->core.pos, ref_len, b->core.tid); + continue; + } + } else { + has_ref = 0; + } + + if (has_ref && (ma->conf->flag&MPLP_REALN)) sam_prob_realn(b, ref, ref_len, (ma->conf->flag & MPLP_REDO_BAQ)? 7 : 3); + if (has_ref && ma->conf->capQ_thres > 10) { + int q = sam_cap_mapq(b, ref, ref_len, ma->conf->capQ_thres); + if (q < 0) continue; // skip + else if (b->core.qual > q) b->core.qual = q; + } + if (b->core.qual < ma->conf->min_mq) continue; + else if ((ma->conf->flag&MPLP_NO_ORPHAN) && (b->core.flag&BAM_FPAIRED) && !(b->core.flag&BAM_FPROPER_PAIR)) continue; + + return ret; + }; + return ret; +} + +// Called once per new bam added to the pileup. +// We cache sample information here so we don't have to keep recomputing this +// on each and every pileup column. +// +// Cd is an arbitrary block of data we can write into, which ends up in +// the pileup structures. We stash the sample ID there. +static int pileup_constructor(void *data, const bam1_t *b, bam_pileup_cd *cd) { + mplp_aux_t *ma = (mplp_aux_t *)data; + cd->i = bam_smpl_get_sample_id(ma->conf->bsmpl, ma->bam_id, (bam1_t *)b); + return 0; +} + +static void group_smpl(mplp_pileup_t *m, bam_smpl_t *bsmpl, int n, int *n_plp, const bam_pileup1_t **plp) +{ + int i, j; + memset(m->n_plp, 0, m->n * sizeof(int)); + for (i = 0; i < n; ++i) // iterate over all bams + { + for (j = 0; j < n_plp[i]; ++j) // iterate over all reads available at this position + { + const bam_pileup1_t *p = plp[i] + j; + int id = p->cd.i; + if (m->n_plp[id] == m->m_plp[id]) + { + m->m_plp[id] = m->m_plp[id]? m->m_plp[id]<<1 : 8; + m->plp[id] = (bam_pileup1_t*) realloc(m->plp[id], sizeof(bam_pileup1_t) * m->m_plp[id]); + } + m->plp[id][m->n_plp[id]++] = *p; + } + } +} + +static void flush_bcf_records(mplp_conf_t *conf, htsFile *fp, bcf_hdr_t *hdr, bcf1_t *rec) +{ + if ( !conf->gvcf ) + { + if ( rec ) bcf_write1(fp, hdr, rec); + return; + } + + if ( !rec ) + { + gvcf_write(conf->gvcf, fp, hdr, NULL, 0); + return; + } + + int is_ref = 0; + if ( rec->n_allele==1 ) is_ref = 1; + else if ( rec->n_allele==2 ) + { + // second allele is mpileup's X, not a variant + if ( rec->d.allele[1][0]=='<' && rec->d.allele[1][1]=='*' && rec->d.allele[1][2]=='>' ) is_ref = 1; + } + rec = gvcf_write(conf->gvcf, fp, hdr, rec, is_ref); + if ( rec ) bcf_write1(fp,hdr,rec); +} + +static int mpileup_reg(mplp_conf_t *conf, uint32_t beg, uint32_t end) +{ + bam_hdr_t *hdr = conf->mplp_data[0]->h; // header of first file in input list + + int ret, i, tid, pos, ref_len; + char *ref; + + while ( (ret=bam_mplp_auto(conf->iter, &tid, &pos, conf->n_plp, conf->plp)) > 0) + { + if ( end && (posend) ) continue; + if ( conf->bed && tid >= 0 ) + { + int overlap = regidx_overlap(conf->bed, hdr->target_name[tid], pos, pos, NULL); + if ( !conf->bed_logic ) overlap = overlap ? 0 : 1; + if ( !overlap ) continue; + } + mplp_get_ref(conf->mplp_data[0], tid, &ref, &ref_len); + + int total_depth, _ref0, ref16; + for (i = total_depth = 0; i < conf->nfiles; ++i) total_depth += conf->n_plp[i]; + group_smpl(conf->gplp, conf->bsmpl, conf->nfiles, conf->n_plp, conf->plp); + _ref0 = (ref && pos < ref_len)? ref[pos] : 'N'; + ref16 = seq_nt16_table[_ref0]; + bcf_callaux_clean(conf->bca, &conf->bc); + for (i = 0; i < conf->gplp->n; ++i) + bcf_call_glfgen(conf->gplp->n_plp[i], conf->gplp->plp[i], ref16, conf->bca, conf->bcr + i); + conf->bc.tid = tid; conf->bc.pos = pos; + bcf_call_combine(conf->gplp->n, conf->bcr, conf->bca, ref16, &conf->bc); + bcf_clear1(conf->bcf_rec); + bcf_call2bcf(&conf->bc, conf->bcf_rec, conf->bcr, conf->fmt_flag, 0, 0); + flush_bcf_records(conf, conf->bcf_fp, conf->bcf_hdr, conf->bcf_rec); + + // call indels; todo: subsampling with total_depth>max_indel_depth instead of ignoring? + // check me: rghash in bcf_call_gap_prep() should have no effect, reads mplp_func already excludes them + if (!(conf->flag&MPLP_NO_INDEL) && total_depth < conf->max_indel_depth + && bcf_call_gap_prep(conf->gplp->n, conf->gplp->n_plp, conf->gplp->plp, pos, conf->bca, ref) >= 0) + { + bcf_callaux_clean(conf->bca, &conf->bc); + for (i = 0; i < conf->gplp->n; ++i) + bcf_call_glfgen(conf->gplp->n_plp[i], conf->gplp->plp[i], -1, conf->bca, conf->bcr + i); + if (bcf_call_combine(conf->gplp->n, conf->bcr, conf->bca, -1, &conf->bc) >= 0) + { + bcf_clear1(conf->bcf_rec); + bcf_call2bcf(&conf->bc, conf->bcf_rec, conf->bcr, conf->fmt_flag, conf->bca, ref); + flush_bcf_records(conf, conf->bcf_fp, conf->bcf_hdr, conf->bcf_rec); + } + } + } + return 0; +} + +static int mpileup(mplp_conf_t *conf) +{ + if (conf->nfiles == 0) { + fprintf(bcftools_stderr,"[%s] no input file/data given\n", __func__); + exit(EXIT_FAILURE); + } + + mplp_ref_t mp_ref = MPLP_REF_INIT; + conf->gplp = (mplp_pileup_t *) calloc(1,sizeof(mplp_pileup_t)); + conf->mplp_data = (mplp_aux_t**) calloc(conf->nfiles, sizeof(mplp_aux_t*)); + conf->plp = (const bam_pileup1_t**) calloc(conf->nfiles, sizeof(bam_pileup1_t*)); + conf->n_plp = (int*) calloc(conf->nfiles, sizeof(int)); + + // Allow to run mpileup on multiple regions in one go. This comes at cost: the bai index + // must be kept in the memory for the whole time which can be a problem with many bams. + // Therefore if none or only one region is requested, we initialize the bam iterator as + // before and free the index. Only when multiple regions are queried, we keep the index. + int nregs = 0; + if ( conf->reg_fname ) + { + if ( conf->reg_is_file ) + { + conf->reg = regidx_init(conf->reg_fname,NULL,NULL,0,NULL); + if ( !conf->reg ) { + fprintf(bcftools_stderr,"Could not parse the regions: %s\n", conf->reg_fname); + exit(EXIT_FAILURE); + } + } + else + { + conf->reg = regidx_init(NULL,regidx_parse_reg,NULL,sizeof(char*),NULL); + if ( regidx_insert_list(conf->reg,conf->reg_fname,',') !=0 ) { + fprintf(bcftools_stderr,"Could not parse the regions: %s\n", conf->reg_fname); + exit(EXIT_FAILURE); + } + } + nregs = regidx_nregs(conf->reg); + conf->reg_itr = regitr_init(conf->reg); + regitr_loop(conf->reg_itr); // region iterator now positioned at the first region + } + + // read the header of each file in the list and initialize data + // beware: mpileup has always assumed that tid's are consistent in the headers, add sanity check at least! + bam_hdr_t *hdr = NULL; // header of first file in input list + int i; + for (i = 0; i < conf->nfiles; ++i) { + bam_hdr_t *h_tmp; + conf->mplp_data[i] = (mplp_aux_t*) calloc(1, sizeof(mplp_aux_t)); + conf->mplp_data[i]->fp = sam_open(conf->files[i], "rb"); + if ( !conf->mplp_data[i]->fp ) + { + fprintf(bcftools_stderr, "[%s] failed to open %s: %s\n", __func__, conf->files[i], strerror(errno)); + exit(EXIT_FAILURE); + } + if (hts_set_opt(conf->mplp_data[i]->fp, CRAM_OPT_DECODE_MD, 0)) { + fprintf(bcftools_stderr, "Failed to set CRAM_OPT_DECODE_MD value\n"); + exit(EXIT_FAILURE); + } + if (conf->fai_fname && hts_set_fai_filename(conf->mplp_data[i]->fp, conf->fai_fname) != 0) { + fprintf(bcftools_stderr, "[%s] failed to process %s: %s\n", + __func__, conf->fai_fname, strerror(errno)); + exit(EXIT_FAILURE); + } + conf->mplp_data[i]->conf = conf; + conf->mplp_data[i]->ref = &mp_ref; + h_tmp = sam_hdr_read(conf->mplp_data[i]->fp); + if ( !h_tmp ) { + fprintf(bcftools_stderr,"[%s] fail to read the header of %s\n", __func__, conf->files[i]); + exit(EXIT_FAILURE); + } + conf->mplp_data[i]->h = i ? hdr : h_tmp; // for j==0, "h" has not been set yet + conf->mplp_data[i]->bam_id = bam_smpl_add_bam(conf->bsmpl,h_tmp->text,conf->files[i]); + if ( conf->mplp_data[i]->bam_id<0 ) + { + // no usable readgroups in this bam, it can be skipped + sam_close(conf->mplp_data[i]->fp); + free(conf->mplp_data[i]); + bam_hdr_destroy(h_tmp); + free(conf->files[i]); + if ( i+1nfiles ) memmove(&conf->files[i],&conf->files[i+1],sizeof(*conf->files)*(conf->nfiles-i-1)); + conf->nfiles--; + i--; + continue; + } + if (conf->reg) { + hts_idx_t *idx = sam_index_load(conf->mplp_data[i]->fp, conf->files[i]); + if (idx == NULL) { + fprintf(bcftools_stderr, "[%s] fail to load index for %s\n", __func__, conf->files[i]); + exit(EXIT_FAILURE); + } + conf->buf.l = 0; + ksprintf(&conf->buf,"%s:%u-%u",conf->reg_itr->seq,conf->reg_itr->beg+1,conf->reg_itr->end+1); + conf->mplp_data[i]->iter = sam_itr_querys(idx, conf->mplp_data[i]->h, conf->buf.s); + if ( !conf->mplp_data[i]->iter ) + { + conf->mplp_data[i]->iter = sam_itr_querys(idx, conf->mplp_data[i]->h, conf->reg_itr->seq); + if ( conf->mplp_data[i]->iter ) { + fprintf(bcftools_stderr,"[E::%s] fail to parse region '%s'\n", __func__, conf->buf.s); + exit(EXIT_FAILURE); + } + fprintf(bcftools_stderr,"[E::%s] the sequence \"%s\" not found: %s\n",__func__,conf->reg_itr->seq,conf->files[i]); + exit(EXIT_FAILURE); + } + if ( nregs==1 ) // no need to keep the index in memory + hts_idx_destroy(idx); + else + conf->mplp_data[i]->idx = idx; + } + + if ( !hdr ) hdr = h_tmp; /* save the header of first file in list */ + else { + // FIXME: check consistency between h and h_tmp + bam_hdr_destroy(h_tmp); + + // we store only the first file's header; it's (alleged to be) + // compatible with the i-th file's target_name lookup needs + conf->mplp_data[i]->h = hdr; + } + } + // allocate data storage proportionate to number of samples being studied sm->n + bam_smpl_get_samples(conf->bsmpl, &conf->gplp->n); + conf->gplp->n_plp = (int*) calloc(conf->gplp->n, sizeof(int)); + conf->gplp->m_plp = (int*) calloc(conf->gplp->n, sizeof(int)); + conf->gplp->plp = (bam_pileup1_t**) calloc(conf->gplp->n, sizeof(bam_pileup1_t*)); + + fprintf(bcftools_stderr, "[%s] %d samples in %d input files\n", __func__, conf->gplp->n, conf->nfiles); + // write the VCF header + conf->bcf_fp = hts_open(conf->output_fname?conf->output_fname:"-", hts_bcf_wmode(conf->output_type)); + if (conf->bcf_fp == NULL) { + fprintf(bcftools_stderr, "[%s] failed to write to %s: %s\n", __func__, conf->output_fname? conf->output_fname : "standard output", strerror(errno)); + exit(EXIT_FAILURE); + } + if ( conf->n_threads ) hts_set_threads(conf->bcf_fp, conf->n_threads); + + // BCF header creation + conf->bcf_hdr = bcf_hdr_init("w"); + conf->buf.l = 0; + + if (conf->record_cmd_line) + { + ksprintf(&conf->buf, "##bcftoolsVersion=%s+htslib-%s\n",bcftools_version(),hts_version()); + bcf_hdr_append(conf->bcf_hdr, conf->buf.s); + + conf->buf.l = 0; + ksprintf(&conf->buf, "##bcftoolsCommand=mpileup"); + for (i=1; iargc; i++) ksprintf(&conf->buf, " %s", conf->argv[i]); + kputc('\n', &conf->buf); + bcf_hdr_append(conf->bcf_hdr, conf->buf.s); + } + + if (conf->fai_fname) + { + conf->buf.l = 0; + ksprintf(&conf->buf, "##reference=file://%s\n", conf->fai_fname); + bcf_hdr_append(conf->bcf_hdr, conf->buf.s); + } + + // Translate BAM @SQ tags to BCF ##contig tags + // todo: use/write new BAM header manipulation routines, fill also UR, M5 + for (i=0; in_targets; i++) + { + conf->buf.l = 0; + ksprintf(&conf->buf, "##contig=", hdr->target_name[i], hdr->target_len[i]); + bcf_hdr_append(conf->bcf_hdr, conf->buf.s); + } + conf->buf.l = 0; + + bcf_hdr_append(conf->bcf_hdr,"##ALT="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); +#if CDF_MWU_TESTS + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); +#endif + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + bcf_hdr_append(conf->bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_DP ) + bcf_hdr_append(conf->bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_DV ) + bcf_hdr_append(conf->bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_DPR ) + bcf_hdr_append(conf->bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_INFO_DPR ) + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + if ( conf->fmt_flag&B2B_FMT_DP4 ) + bcf_hdr_append(conf->bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_SP ) + bcf_hdr_append(conf->bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_AD ) + bcf_hdr_append(conf->bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_ADF ) + bcf_hdr_append(conf->bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_ADR ) + bcf_hdr_append(conf->bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_INFO_AD ) + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + if ( conf->fmt_flag&B2B_INFO_ADF ) + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + if ( conf->fmt_flag&B2B_INFO_ADR ) + bcf_hdr_append(conf->bcf_hdr,"##INFO="); + if ( conf->gvcf ) + gvcf_update_header(conf->gvcf, conf->bcf_hdr); + + int nsmpl; + const char **smpl = bam_smpl_get_samples(conf->bsmpl, &nsmpl); + for (i=0; ibcf_hdr, smpl[i]); + bcf_hdr_write(conf->bcf_fp, conf->bcf_hdr); + + conf->bca = bcf_call_init(-1., conf->min_baseQ); + conf->bcr = (bcf_callret1_t*) calloc(nsmpl, sizeof(bcf_callret1_t)); + conf->bca->openQ = conf->openQ, conf->bca->extQ = conf->extQ, conf->bca->tandemQ = conf->tandemQ; + conf->bca->min_frac = conf->min_frac; + conf->bca->min_support = conf->min_support; + conf->bca->per_sample_flt = conf->flag & MPLP_PER_SAMPLE; + + conf->bc.bcf_hdr = conf->bcf_hdr; + conf->bc.n = nsmpl; + conf->bc.PL = (int32_t*) malloc(15 * nsmpl * sizeof(*conf->bc.PL)); + if (conf->fmt_flag) + { + assert( sizeof(float)==sizeof(int32_t) ); + conf->bc.DP4 = (int32_t*) malloc(nsmpl * sizeof(int32_t) * 4); + conf->bc.fmt_arr = (uint8_t*) malloc(nsmpl * sizeof(float)); // all fmt_flag fields, float and int32 + if ( conf->fmt_flag&(B2B_INFO_DPR|B2B_FMT_DPR|B2B_INFO_AD|B2B_INFO_ADF|B2B_INFO_ADR|B2B_FMT_AD|B2B_FMT_ADF|B2B_FMT_ADR) ) + { + // first B2B_MAX_ALLELES fields for total numbers, the rest per-sample + conf->bc.ADR = (int32_t*) malloc((nsmpl+1)*B2B_MAX_ALLELES*sizeof(int32_t)); + conf->bc.ADF = (int32_t*) malloc((nsmpl+1)*B2B_MAX_ALLELES*sizeof(int32_t)); + for (i=0; ibcr[i].ADR = conf->bc.ADR + (i+1)*B2B_MAX_ALLELES; + conf->bcr[i].ADF = conf->bc.ADF + (i+1)*B2B_MAX_ALLELES; + } + } + } + + // init mpileup + conf->iter = bam_mplp_init(conf->nfiles, mplp_func, (void**)conf->mplp_data); + if ( conf->flag & MPLP_SMART_OVERLAPS ) bam_mplp_init_overlaps(conf->iter); + if ( (double)conf->max_depth * conf->nfiles > 1<<20) + fprintf(bcftools_stderr, "Warning: Potential memory hog, up to %.0fM reads in the pileup!\n", (double)conf->max_depth*conf->nfiles); + if ( (double)conf->max_depth * conf->nfiles / nsmpl < 250 ) + fprintf(bcftools_stderr, "Note: The maximum per-sample depth with -d %d is %.1fx\n", conf->max_depth,(double)conf->max_depth * conf->nfiles / nsmpl); + bam_mplp_set_maxcnt(conf->iter, conf->max_depth); + conf->max_indel_depth = conf->max_indel_depth * nsmpl; + conf->bcf_rec = bcf_init1(); + bam_mplp_constructor(conf->iter, pileup_constructor); + + // Run mpileup for multiple regions + if ( nregs ) + { + int ireg = 0; + do + { + // first region is already positioned + if ( ireg++ > 0 ) + { + conf->buf.l = 0; + ksprintf(&conf->buf,"%s:%u-%u",conf->reg_itr->seq,conf->reg_itr->beg,conf->reg_itr->end); + + for (i=0; infiles; i++) + { + hts_itr_destroy(conf->mplp_data[i]->iter); + conf->mplp_data[i]->iter = sam_itr_querys(conf->mplp_data[i]->idx, conf->mplp_data[i]->h, conf->buf.s); + if ( !conf->mplp_data[i]->iter ) + { + conf->mplp_data[i]->iter = sam_itr_querys(conf->mplp_data[i]->idx, conf->mplp_data[i]->h, conf->reg_itr->seq); + if ( conf->mplp_data[i]->iter ) { + fprintf(bcftools_stderr,"[E::%s] fail to parse region '%s'\n", __func__, conf->buf.s); + exit(EXIT_FAILURE); + } + fprintf(bcftools_stderr,"[E::%s] the sequence \"%s\" not found: %s\n",__func__,conf->reg_itr->seq,conf->files[i]); + exit(EXIT_FAILURE); + } + bam_mplp_reset(conf->iter); + } + } + mpileup_reg(conf,conf->reg_itr->beg,conf->reg_itr->end); + } + while ( regitr_loop(conf->reg_itr) ); + } + else + mpileup_reg(conf,0,0); + + flush_bcf_records(conf, conf->bcf_fp, conf->bcf_hdr, NULL); + + // clean up + free(conf->bc.tmp.s); + bcf_destroy1(conf->bcf_rec); + if (conf->bcf_fp) + { + hts_close(conf->bcf_fp); + bcf_hdr_destroy(conf->bcf_hdr); + bcf_call_destroy(conf->bca); + free(conf->bc.PL); + free(conf->bc.DP4); + free(conf->bc.ADR); + free(conf->bc.ADF); + free(conf->bc.fmt_arr); + free(conf->bcr); + } + if ( conf->gvcf ) gvcf_destroy(conf->gvcf); + free(conf->buf.s); + for (i = 0; i < conf->gplp->n; ++i) free(conf->gplp->plp[i]); + free(conf->gplp->plp); free(conf->gplp->n_plp); free(conf->gplp->m_plp); free(conf->gplp); + bam_mplp_destroy(conf->iter); + bam_hdr_destroy(hdr); + for (i = 0; i < conf->nfiles; ++i) { + if ( nregs>1 ) hts_idx_destroy(conf->mplp_data[i]->idx); + sam_close(conf->mplp_data[i]->fp); + if ( conf->mplp_data[i]->iter) hts_itr_destroy(conf->mplp_data[i]->iter); + free(conf->mplp_data[i]); + } + if ( conf->reg_itr ) regitr_destroy(conf->reg_itr); + free(conf->mplp_data); free(conf->plp); free(conf->n_plp); + free(mp_ref.ref[0]); + free(mp_ref.ref[1]); + return 0; +} + +static int is_url(const char *s) +{ + static const char uri_scheme_chars[] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+.-"; + return s[strspn(s, uri_scheme_chars)] == ':'; +} + +#define MAX_PATH_LEN 1024 +int read_file_list(const char *file_list,int *n,char **argv[]) +{ + char buf[MAX_PATH_LEN]; + int len, nfiles = 0; + char **files = NULL; + struct stat sb; + + *n = 0; + *argv = NULL; + + FILE *fh = fopen(file_list,"r"); + if ( !fh ) + { + fprintf(bcftools_stderr,"%s: %s\n", file_list,strerror(errno)); + return 1; + } + + files = (char**) calloc(nfiles,sizeof(char*)); + nfiles = 0; + while ( fgets(buf,MAX_PATH_LEN,fh) ) + { + // allow empty lines and trailing spaces + len = strlen(buf); + while ( len>0 && isspace(buf[len-1]) ) len--; + if ( !len ) continue; + + // check sanity of the file list + buf[len] = 0; + if (! (is_url(buf) || stat(buf, &sb) == 0)) + { + // no such file, check if it is safe to print its name + int i, safe_to_print = 1; + for (i=0; irflag_require); + char *tmp_filter = bam_flag2str(mplp->rflag_filter); + + // Display usage information, formatted for the standard 80 columns. + // (The unusual string formatting here aids the readability of this + // source code in 80 columns, to the extent that's possible.) + + fprintf(fp, +"\n" +"Usage: bcftools mpileup [options] in1.bam [in2.bam [...]]\n" +"\n" +"Input options:\n" +" -6, --illumina1.3+ quality is in the Illumina-1.3+ encoding\n" +" -A, --count-orphans do not discard anomalous read pairs\n" +" -b, --bam-list FILE list of input BAM filenames, one per line\n" +" -B, --no-BAQ disable BAQ (per-Base Alignment Quality)\n" +" -C, --adjust-MQ INT adjust mapping quality; recommended:50, disable:0 [0]\n" +" -d, --max-depth INT max per-file depth; avoids excessive memory usage [%d]\n", mplp->max_depth); + fprintf(fp, +" -E, --redo-BAQ recalculate BAQ on the fly, ignore existing BQs\n" +" -f, --fasta-ref FILE faidx indexed reference sequence file\n" +" --no-reference do not require fasta reference file\n" +" -G, --read-groups FILE select or exclude read groups listed in the file\n" +" -q, --min-MQ INT skip alignments with mapQ smaller than INT [%d]\n", mplp->min_mq); + fprintf(fp, +" -Q, --min-BQ INT skip bases with baseQ/BAQ smaller than INT [%d]\n", mplp->min_baseQ); + fprintf(fp, +" -r, --regions REG[,...] comma separated list of regions in which pileup is generated\n" +" -R, --regions-file FILE restrict to regions listed in a file\n" +" --ignore-RG ignore RG tags (one BAM = one sample)\n" +" --rf, --incl-flags STR|INT required flags: skip reads with mask bits unset [%s]\n", tmp_require); + fprintf(fp, +" --ff, --excl-flags STR|INT filter flags: skip reads with mask bits set\n" +" [%s]\n", tmp_filter); + fprintf(fp, +" -s, --samples LIST comma separated list of samples to include\n" +" -S, --samples-file FILE file of samples to include\n" +" -t, --targets REG[,...] similar to -r but streams rather than index-jumps\n" +" -T, --targets-file FILE similar to -R but streams rather than index-jumps\n" +" -x, --ignore-overlaps disable read-pair overlap detection\n" +"\n" +"Output options:\n" +" -a, --annotate LIST optional tags to output; '?' to list []\n" +" -g, --gvcf INT[,...] group non-variant sites into gVCF blocks according\n" +" to minimum per-sample DP\n" +" --no-version do not append version and command line to the header\n" +" -o, --output FILE write output to FILE [standard output]\n" +" -O, --output-type TYPE 'b' compressed BCF; 'u' uncompressed BCF;\n" +" 'z' compressed VCF; 'v' uncompressed VCF [v]\n" +" --threads INT number of extra output compression threads [0]\n" +"\n" +"SNP/INDEL genotype likelihoods options:\n" +" -e, --ext-prob INT Phred-scaled gap extension seq error probability [%d]\n", mplp->extQ); + fprintf(fp, +" -F, --gap-frac FLOAT minimum fraction of gapped reads [%g]\n", mplp->min_frac); + fprintf(fp, +" -h, --tandem-qual INT coefficient for homopolymer errors [%d]\n", mplp->tandemQ); + fprintf(fp, +" -I, --skip-indels do not perform indel calling\n" +" -L, --max-idepth INT maximum per-file depth for INDEL calling [%d]\n", mplp->max_indel_depth); + fprintf(fp, +" -m, --min-ireads INT minimum number gapped reads for indel candidates [%d]\n", mplp->min_support); + fprintf(fp, +" -o, --open-prob INT Phred-scaled gap open seq error probability [%d]\n", mplp->openQ); + fprintf(fp, +" -p, --per-sample-mF apply -m and -F per-sample for increased sensitivity\n" +" -P, --platforms STR comma separated list of platforms for indels [all]\n" +"\n" +"Notes: Assuming diploid individuals.\n" +"\n"); + + free(tmp_require); + free(tmp_filter); +} + +int bam_mpileup(int argc, char *argv[]) +{ + int c; + const char *file_list = NULL; + char **fn = NULL; + int nfiles = 0, use_orphan = 0, noref = 0; + mplp_conf_t mplp; + memset(&mplp, 0, sizeof(mplp_conf_t)); + mplp.min_baseQ = 13; + mplp.capQ_thres = 0; + mplp.max_depth = 250; mplp.max_indel_depth = 250; + mplp.openQ = 40; mplp.extQ = 20; mplp.tandemQ = 100; + mplp.min_frac = 0.002; mplp.min_support = 1; + mplp.flag = MPLP_NO_ORPHAN | MPLP_REALN | MPLP_SMART_OVERLAPS; + mplp.argc = argc; mplp.argv = argv; + mplp.rflag_filter = BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP; + mplp.output_fname = NULL; + mplp.output_type = FT_VCF; + mplp.record_cmd_line = 1; + mplp.n_threads = 0; + mplp.bsmpl = bam_smpl_init(); + + static const struct option lopts[] = + { + {"rf", required_argument, NULL, 1}, // require flag + {"ff", required_argument, NULL, 2}, // filter flag + {"incl-flags", required_argument, NULL, 1}, + {"excl-flags", required_argument, NULL, 2}, + {"output", required_argument, NULL, 3}, + {"open-prob", required_argument, NULL, 4}, + {"ignore-RG", no_argument, NULL, 5}, + {"ignore-rg", no_argument, NULL, 5}, + {"gvcf", required_argument, NULL, 'g'}, + {"no-reference", no_argument, NULL, 7}, + {"no-version", no_argument, NULL, 8}, + {"threads",required_argument,NULL,9}, + {"illumina1.3+", no_argument, NULL, '6'}, + {"count-orphans", no_argument, NULL, 'A'}, + {"bam-list", required_argument, NULL, 'b'}, + {"no-BAQ", no_argument, NULL, 'B'}, + {"no-baq", no_argument, NULL, 'B'}, + {"adjust-MQ", required_argument, NULL, 'C'}, + {"adjust-mq", required_argument, NULL, 'C'}, + {"max-depth", required_argument, NULL, 'd'}, + {"redo-BAQ", no_argument, NULL, 'E'}, + {"redo-baq", no_argument, NULL, 'E'}, + {"fasta-ref", required_argument, NULL, 'f'}, + {"read-groups", required_argument, NULL, 'G'}, + {"region", required_argument, NULL, 'r'}, + {"regions", required_argument, NULL, 'r'}, + {"regions-file", required_argument, NULL, 'R'}, + {"targets", required_argument, NULL, 't'}, + {"targets-file", required_argument, NULL, 'T'}, + {"min-MQ", required_argument, NULL, 'q'}, + {"min-mq", required_argument, NULL, 'q'}, + {"min-BQ", required_argument, NULL, 'Q'}, + {"min-bq", required_argument, NULL, 'Q'}, + {"ignore-overlaps", no_argument, NULL, 'x'}, + {"output-type", required_argument, NULL, 'O'}, + {"samples", required_argument, NULL, 's'}, + {"samples-file", required_argument, NULL, 'S'}, + {"annotate", required_argument, NULL, 'a'}, + {"ext-prob", required_argument, NULL, 'e'}, + {"gap-frac", required_argument, NULL, 'F'}, + {"tandem-qual", required_argument, NULL, 'h'}, + {"skip-indels", no_argument, NULL, 'I'}, + {"max-idepth", required_argument, NULL, 'L'}, + {"min-ireads ", required_argument, NULL, 'm'}, + {"per-sample-mF", no_argument, NULL, 'p'}, + {"per-sample-mf", no_argument, NULL, 'p'}, + {"platforms", required_argument, NULL, 'P'}, + {NULL, 0, NULL, 0} + }; + while ((c = getopt_long(argc, argv, "Ag:f:r:R:q:Q:C:Bd:L:b:P:po:e:h:Im:F:EG:6O:xa:s:S:t:T:",lopts,NULL)) >= 0) { + switch (c) { + case 'x': mplp.flag &= ~MPLP_SMART_OVERLAPS; break; + case 1 : + mplp.rflag_require = bam_str2flag(optarg); + if ( mplp.rflag_require<0 ) { fprintf(bcftools_stderr,"Could not parse --rf %s\n", optarg); return 1; } + break; + case 2 : + mplp.rflag_filter = bam_str2flag(optarg); + if ( mplp.rflag_filter<0 ) { fprintf(bcftools_stderr,"Could not parse --ff %s\n", optarg); return 1; } + break; + case 3 : mplp.output_fname = optarg; break; + case 4 : mplp.openQ = atoi(optarg); break; + case 5 : bam_smpl_ignore_readgroups(mplp.bsmpl); break; + case 'g': + mplp.gvcf = gvcf_init(optarg); + if ( !mplp.gvcf ) error("Could not parse: --gvcf %s\n", optarg); + break; + case 'f': + mplp.fai = fai_load(optarg); + if (mplp.fai == NULL) return 1; + mplp.fai_fname = optarg; + break; + case 7 : noref = 1; break; + case 8 : mplp.record_cmd_line = 0; break; + case 9 : mplp.n_threads = strtol(optarg, 0, 0); break; + case 'd': mplp.max_depth = atoi(optarg); break; + case 'r': mplp.reg_fname = strdup(optarg); break; + case 'R': mplp.reg_fname = strdup(optarg); mplp.reg_is_file = 1; break; + case 't': + // In the original version the whole BAM was streamed which is inefficient + // with few BED intervals and big BAMs. Todo: devise a heuristic to determine + // best strategy, that is streaming or jumping. + if ( optarg[0]=='^' ) optarg++; + else mplp.bed_logic = 1; + mplp.bed = regidx_init(NULL,regidx_parse_reg,NULL,0,NULL); + mplp.bed_itr = regitr_init(mplp.bed); + if ( regidx_insert_list(mplp.bed,optarg,',') !=0 ) + { + fprintf(bcftools_stderr,"Could not parse the targets: %s\n", optarg); + exit(EXIT_FAILURE); + } + break; + case 'T': + if ( optarg[0]=='^' ) optarg++; + else mplp.bed_logic = 1; + mplp.bed = regidx_init(optarg,NULL,NULL,0,NULL); + if (!mplp.bed) { fprintf(bcftools_stderr, "bcftools mpileup: Could not read file \"%s\"", optarg); return 1; } + break; + case 'P': mplp.pl_list = strdup(optarg); break; + case 'p': mplp.flag |= MPLP_PER_SAMPLE; break; + case 'B': mplp.flag &= ~MPLP_REALN; break; + case 'I': mplp.flag |= MPLP_NO_INDEL; break; + case 'E': mplp.flag |= MPLP_REDO_BAQ; break; + case '6': mplp.flag |= MPLP_ILLUMINA13; break; + case 's': if ( bam_smpl_add_samples(mplp.bsmpl,optarg,0)<0 ) error("Could not read samples: %s\n",optarg); break; + case 'S': if ( bam_smpl_add_samples(mplp.bsmpl,optarg,1)<0 ) error("Could not read samples: %s\n",optarg); break; + case 'O': + switch (optarg[0]) { + case 'b': mplp.output_type = FT_BCF_GZ; break; + case 'u': mplp.output_type = FT_BCF; break; + case 'z': mplp.output_type = FT_VCF_GZ; break; + case 'v': mplp.output_type = FT_VCF; break; + default: error("[error] The option \"-O\" changed meaning when mpileup moved to bcftools. Did you mean: \"bcftools mpileup --output-type\" or \"samtools mpileup --output-BP\"?\n", optarg); + } + break; + case 'C': mplp.capQ_thres = atoi(optarg); break; + case 'q': mplp.min_mq = atoi(optarg); break; + case 'Q': mplp.min_baseQ = atoi(optarg); break; + case 'b': file_list = optarg; break; + case 'o': { + char *end; + long value = strtol(optarg, &end, 10); + // Distinguish between -o INT and -o FILE (a bit of a hack!) + if (*end == '\0') mplp.openQ = value; + else mplp.output_fname = optarg; + } + break; + case 'e': mplp.extQ = atoi(optarg); break; + case 'h': mplp.tandemQ = atoi(optarg); break; + case 'A': use_orphan = 1; break; + case 'F': mplp.min_frac = atof(optarg); break; + case 'm': mplp.min_support = atoi(optarg); break; + case 'L': mplp.max_indel_depth = atoi(optarg); break; + case 'G': bam_smpl_add_readgroups(mplp.bsmpl, optarg, 1); break; + case 'a': + if (optarg[0]=='?') { + list_annotations(bcftools_stderr); + return 1; + } + mplp.fmt_flag |= parse_format_flag(optarg); + break; + default: + fprintf(bcftools_stderr,"Invalid option: '%c'\n", c); + return 1; + } + } + + if ( mplp.gvcf && !(mplp.fmt_flag&B2B_FMT_DP) ) + { + fprintf(bcftools_stderr,"[warning] The -t DP option is required with --gvcf, switching on.\n"); + mplp.fmt_flag |= B2B_FMT_DP; + } + if ( mplp.flag&(MPLP_BCF|MPLP_VCF|MPLP_NO_COMP) ) + { + if ( mplp.flag&MPLP_VCF ) + { + if ( mplp.flag&MPLP_NO_COMP ) mplp.output_type = FT_VCF; + else mplp.output_type = FT_VCF_GZ; + } + else if ( mplp.flag&MPLP_BCF ) + { + if ( mplp.flag&MPLP_NO_COMP ) mplp.output_type = FT_BCF; + else mplp.output_type = FT_BCF_GZ; + } + } + if ( !(mplp.flag&MPLP_REALN) && mplp.flag&MPLP_REDO_BAQ ) + { + fprintf(bcftools_stderr,"Error: The -B option cannot be combined with -E\n"); + return 1; + } + if (use_orphan) mplp.flag &= ~MPLP_NO_ORPHAN; + if (argc == 1) + { + print_usage(bcftools_stderr, &mplp); + return 1; + } + if (!mplp.fai && !noref) { + fprintf(bcftools_stderr,"Error: mpileup requires the --fasta-ref option by default; use --no-reference to run without a fasta reference\n"); + return 1; + } + int ret,i; + if (file_list) + { + if ( read_file_list(file_list,&nfiles,&fn) ) return 1; + mplp.files = fn; + mplp.nfiles = nfiles; + } + else + { + mplp.nfiles = argc - optind; + mplp.files = (char**) malloc(mplp.nfiles*sizeof(char*)); + for (i=0; i + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +// Code to build this table is below +#ifdef BUILD_MW +#include + +double mann_whitney_1947(int n, int m, int U) +{ + if (U<0) return 0; + if (n==0||m==0) return U==0 ? 1 : 0; + return (double)n/(n+m)*mann_whitney_1947(n-1,m,U-m) + (double)m/(n+m)*mann_whitney_1947(n,m-1,U); +} + +int main(void) { + int i, j, k; + printf("static double mw[6][6][50] = // [2-7][2-7][0-49]\n{\n"); + for (i = 2; i < 8; i++) { + printf(" {\n"); + for (j = 2; j < 8; j++) { + printf(" {\n"); + for (k = 0; k < 50; k++) { + printf(" %.17f,\n", mann_whitney_1947(i,j,k)); + } + printf(" },\n"); + } + printf(" },\n"); + } + printf("};\n"); + return 0; +} +#endif + +static double mw[6][6][50] = // [2-7][2-7][0-49] +{ + { + { + 0.16666666666666666, + 0.16666666666666666, + 0.33333333333333331, + 0.16666666666666666, + 0.16666666666666666, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.09999999999999999, + 0.09999999999999999, + 0.19999999999999998, + 0.20000000000000001, + 0.20000000000000001, + 0.10000000000000001, + 0.10000000000000001, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.06666666666666665, + 0.06666666666666665, + 0.13333333333333330, + 0.13333333333333333, + 0.20000000000000001, + 0.13333333333333333, + 0.13333333333333333, + 0.06666666666666667, + 0.06666666666666667, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.04761904761904761, + 0.04761904761904761, + 0.09523809523809522, + 0.09523809523809523, + 0.14285714285714288, + 0.14285714285714285, + 0.14285714285714285, + 0.09523809523809523, + 0.09523809523809523, + 0.04761904761904762, + 0.04761904761904762, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.03571428571428571, + 0.03571428571428571, + 0.07142857142857141, + 0.07142857142857142, + 0.10714285714285715, + 0.10714285714285714, + 0.14285714285714285, + 0.10714285714285715, + 0.10714285714285715, + 0.07142857142857144, + 0.07142857142857142, + 0.03571428571428571, + 0.03571428571428571, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.02777777777777777, + 0.02777777777777777, + 0.05555555555555555, + 0.05555555555555555, + 0.08333333333333334, + 0.08333333333333333, + 0.11111111111111110, + 0.11111111111111113, + 0.11111111111111113, + 0.08333333333333334, + 0.08333333333333334, + 0.05555555555555556, + 0.05555555555555555, + 0.02777777777777778, + 0.02777777777777778, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + }, + { + { + 0.10000000000000001, + 0.10000000000000001, + 0.20000000000000001, + 0.20000000000000001, + 0.19999999999999998, + 0.09999999999999999, + 0.09999999999999999, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.05000000000000000, + 0.05000000000000000, + 0.10000000000000001, + 0.14999999999999999, + 0.14999999999999999, + 0.14999999999999999, + 0.14999999999999999, + 0.10000000000000001, + 0.05000000000000000, + 0.05000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.02857142857142857, + 0.02857142857142857, + 0.05714285714285714, + 0.08571428571428570, + 0.11428571428571427, + 0.11428571428571427, + 0.14285714285714282, + 0.11428571428571428, + 0.11428571428571428, + 0.08571428571428572, + 0.05714285714285714, + 0.02857142857142857, + 0.02857142857142857, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.01785714285714286, + 0.01785714285714286, + 0.03571428571428571, + 0.05357142857142856, + 0.07142857142857142, + 0.08928571428571427, + 0.10714285714285711, + 0.10714285714285712, + 0.10714285714285714, + 0.10714285714285715, + 0.08928571428571427, + 0.07142857142857142, + 0.05357142857142857, + 0.03571428571428571, + 0.01785714285714286, + 0.01785714285714286, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.01190476190476190, + 0.01190476190476190, + 0.02380952380952381, + 0.03571428571428571, + 0.04761904761904762, + 0.05952380952380951, + 0.08333333333333330, + 0.08333333333333331, + 0.09523809523809523, + 0.09523809523809523, + 0.09523809523809523, + 0.08333333333333333, + 0.08333333333333333, + 0.05952380952380952, + 0.04761904761904762, + 0.03571428571428571, + 0.02380952380952381, + 0.01190476190476190, + 0.01190476190476190, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.00833333333333333, + 0.00833333333333333, + 0.01666666666666666, + 0.02499999999999999, + 0.03333333333333333, + 0.04166666666666666, + 0.05833333333333331, + 0.06666666666666665, + 0.07499999999999998, + 0.08333333333333331, + 0.08333333333333331, + 0.08333333333333333, + 0.08333333333333333, + 0.07500000000000000, + 0.06666666666666667, + 0.05833333333333333, + 0.04166666666666666, + 0.03333333333333333, + 0.02500000000000000, + 0.01666666666666667, + 0.00833333333333333, + 0.00833333333333333, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + }, + { + { + 0.06666666666666667, + 0.06666666666666667, + 0.13333333333333333, + 0.13333333333333333, + 0.20000000000000001, + 0.13333333333333333, + 0.13333333333333330, + 0.06666666666666665, + 0.06666666666666665, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.02857142857142857, + 0.02857142857142857, + 0.05714285714285714, + 0.08571428571428572, + 0.11428571428571428, + 0.11428571428571428, + 0.14285714285714282, + 0.11428571428571427, + 0.11428571428571427, + 0.08571428571428570, + 0.05714285714285714, + 0.02857142857142857, + 0.02857142857142857, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.01428571428571429, + 0.01428571428571429, + 0.02857142857142857, + 0.04285714285714286, + 0.07142857142857142, + 0.07142857142857142, + 0.09999999999999998, + 0.09999999999999998, + 0.11428571428571427, + 0.09999999999999998, + 0.09999999999999998, + 0.07142857142857142, + 0.07142857142857142, + 0.04285714285714286, + 0.02857142857142857, + 0.01428571428571429, + 0.01428571428571429, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.00793650793650794, + 0.00793650793650794, + 0.01587301587301587, + 0.02380952380952381, + 0.03968253968253968, + 0.04761904761904762, + 0.06349206349206349, + 0.07142857142857142, + 0.08730158730158730, + 0.08730158730158730, + 0.09523809523809522, + 0.08730158730158728, + 0.08730158730158730, + 0.07142857142857142, + 0.06349206349206349, + 0.04761904761904761, + 0.03968253968253968, + 0.02380952380952381, + 0.01587301587301587, + 0.00793650793650794, + 0.00793650793650794, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.00476190476190476, + 0.00476190476190476, + 0.00952380952380952, + 0.01428571428571429, + 0.02380952380952381, + 0.02857142857142857, + 0.04285714285714286, + 0.04761904761904762, + 0.06190476190476190, + 0.06666666666666665, + 0.07619047619047617, + 0.07619047619047617, + 0.08571428571428569, + 0.07619047619047617, + 0.07619047619047620, + 0.06666666666666667, + 0.06190476190476191, + 0.04761904761904762, + 0.04285714285714286, + 0.02857142857142857, + 0.02380952380952381, + 0.01428571428571429, + 0.00952380952380952, + 0.00476190476190476, + 0.00476190476190476, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.00303030303030303, + 0.00303030303030303, + 0.00606060606060606, + 0.00909090909090909, + 0.01515151515151515, + 0.01818181818181818, + 0.02727272727272727, + 0.03333333333333333, + 0.04242424242424242, + 0.04848484848484847, + 0.05757575757575756, + 0.06060606060606059, + 0.06969696969696967, + 0.06969696969696967, + 0.07272727272727272, + 0.06969696969696969, + 0.06969696969696970, + 0.06060606060606059, + 0.05757575757575757, + 0.04848484848484848, + 0.04242424242424242, + 0.03333333333333333, + 0.02727272727272727, + 0.01818181818181818, + 0.01515151515151515, + 0.00909090909090909, + 0.00606060606060606, + 0.00303030303030303, + 0.00303030303030303, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + }, + { + { + 0.04761904761904762, + 0.04761904761904762, + 0.09523809523809523, + 0.09523809523809523, + 0.14285714285714285, + 0.14285714285714285, + 0.14285714285714288, + 0.09523809523809523, + 0.09523809523809522, + 0.04761904761904761, + 0.04761904761904761, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.01785714285714286, + 0.01785714285714286, + 0.03571428571428571, + 0.05357142857142857, + 0.07142857142857142, + 0.08928571428571427, + 0.10714285714285715, + 0.10714285714285714, + 0.10714285714285712, + 0.10714285714285711, + 0.08928571428571427, + 0.07142857142857142, + 0.05357142857142856, + 0.03571428571428571, + 0.01785714285714286, + 0.01785714285714286, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.00793650793650794, + 0.00793650793650794, + 0.01587301587301587, + 0.02380952380952381, + 0.03968253968253968, + 0.04761904761904761, + 0.06349206349206349, + 0.07142857142857142, + 0.08730158730158730, + 0.08730158730158728, + 0.09523809523809522, + 0.08730158730158730, + 0.08730158730158730, + 0.07142857142857142, + 0.06349206349206349, + 0.04761904761904762, + 0.03968253968253968, + 0.02380952380952381, + 0.01587301587301587, + 0.00793650793650794, + 0.00793650793650794, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.00396825396825397, + 0.00396825396825397, + 0.00793650793650794, + 0.01190476190476190, + 0.01984126984126984, + 0.02777777777777777, + 0.03571428571428571, + 0.04365079365079365, + 0.05555555555555555, + 0.06349206349206349, + 0.07142857142857142, + 0.07539682539682539, + 0.07936507936507936, + 0.07936507936507936, + 0.07539682539682539, + 0.07142857142857142, + 0.06349206349206349, + 0.05555555555555555, + 0.04365079365079365, + 0.03571428571428571, + 0.02777777777777777, + 0.01984126984126984, + 0.01190476190476190, + 0.00793650793650794, + 0.00396825396825397, + 0.00396825396825397, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.00216450216450216, + 0.00216450216450216, + 0.00432900432900433, + 0.00649350649350649, + 0.01082251082251082, + 0.01515151515151515, + 0.02164502164502164, + 0.02597402597402597, + 0.03463203463203463, + 0.04112554112554112, + 0.04978354978354978, + 0.05411255411255411, + 0.06277056277056275, + 0.06493506493506493, + 0.06926406926406925, + 0.06926406926406925, + 0.06926406926406925, + 0.06493506493506492, + 0.06277056277056275, + 0.05411255411255410, + 0.04978354978354978, + 0.04112554112554112, + 0.03463203463203463, + 0.02597402597402597, + 0.02164502164502164, + 0.01515151515151515, + 0.01082251082251082, + 0.00649350649350649, + 0.00432900432900433, + 0.00216450216450216, + 0.00216450216450216, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.00126262626262626, + 0.00126262626262626, + 0.00252525252525253, + 0.00378787878787879, + 0.00631313131313131, + 0.00883838383838384, + 0.01262626262626262, + 0.01641414141414141, + 0.02146464646464646, + 0.02651515151515151, + 0.03282828282828283, + 0.03787878787878787, + 0.04419191919191919, + 0.04924242424242424, + 0.05429292929292929, + 0.05808080808080808, + 0.06060606060606059, + 0.06186868686868686, + 0.06186868686868686, + 0.06060606060606059, + 0.05808080808080807, + 0.05429292929292930, + 0.04924242424242424, + 0.04419191919191920, + 0.03787878787878787, + 0.03282828282828282, + 0.02651515151515152, + 0.02146464646464646, + 0.01641414141414142, + 0.01262626262626263, + 0.00883838383838384, + 0.00631313131313131, + 0.00378787878787879, + 0.00252525252525253, + 0.00126262626262626, + 0.00126262626262626, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + }, + { + { + 0.03571428571428571, + 0.03571428571428571, + 0.07142857142857142, + 0.07142857142857144, + 0.10714285714285715, + 0.10714285714285715, + 0.14285714285714285, + 0.10714285714285714, + 0.10714285714285715, + 0.07142857142857142, + 0.07142857142857141, + 0.03571428571428571, + 0.03571428571428571, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.01190476190476190, + 0.01190476190476190, + 0.02380952380952381, + 0.03571428571428571, + 0.04761904761904762, + 0.05952380952380952, + 0.08333333333333333, + 0.08333333333333333, + 0.09523809523809523, + 0.09523809523809523, + 0.09523809523809523, + 0.08333333333333331, + 0.08333333333333330, + 0.05952380952380951, + 0.04761904761904762, + 0.03571428571428571, + 0.02380952380952381, + 0.01190476190476190, + 0.01190476190476190, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.00476190476190476, + 0.00476190476190476, + 0.00952380952380952, + 0.01428571428571429, + 0.02380952380952381, + 0.02857142857142857, + 0.04285714285714286, + 0.04761904761904762, + 0.06190476190476191, + 0.06666666666666667, + 0.07619047619047620, + 0.07619047619047617, + 0.08571428571428569, + 0.07619047619047617, + 0.07619047619047617, + 0.06666666666666665, + 0.06190476190476190, + 0.04761904761904762, + 0.04285714285714286, + 0.02857142857142857, + 0.02380952380952381, + 0.01428571428571429, + 0.00952380952380952, + 0.00476190476190476, + 0.00476190476190476, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.00216450216450216, + 0.00216450216450216, + 0.00432900432900433, + 0.00649350649350649, + 0.01082251082251082, + 0.01515151515151515, + 0.02164502164502164, + 0.02597402597402597, + 0.03463203463203463, + 0.04112554112554112, + 0.04978354978354978, + 0.05411255411255410, + 0.06277056277056275, + 0.06493506493506492, + 0.06926406926406925, + 0.06926406926406925, + 0.06926406926406925, + 0.06493506493506493, + 0.06277056277056275, + 0.05411255411255411, + 0.04978354978354978, + 0.04112554112554112, + 0.03463203463203463, + 0.02597402597402597, + 0.02164502164502164, + 0.01515151515151515, + 0.01082251082251082, + 0.00649350649350649, + 0.00432900432900433, + 0.00216450216450216, + 0.00216450216450216, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.00108225108225108, + 0.00108225108225108, + 0.00216450216450216, + 0.00324675324675325, + 0.00541125541125541, + 0.00757575757575758, + 0.01190476190476190, + 0.01406926406926407, + 0.01948051948051948, + 0.02380952380952381, + 0.03030303030303030, + 0.03463203463203463, + 0.04220779220779219, + 0.04545454545454544, + 0.05194805194805194, + 0.05519480519480519, + 0.05952380952380951, + 0.05952380952380952, + 0.06277056277056275, + 0.05952380952380952, + 0.05952380952380951, + 0.05519480519480519, + 0.05194805194805194, + 0.04545454545454544, + 0.04220779220779219, + 0.03463203463203463, + 0.03030303030303030, + 0.02380952380952381, + 0.01948051948051948, + 0.01406926406926407, + 0.01190476190476190, + 0.00757575757575758, + 0.00541125541125541, + 0.00324675324675325, + 0.00216450216450216, + 0.00108225108225108, + 0.00108225108225108, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.00058275058275058, + 0.00058275058275058, + 0.00116550116550117, + 0.00174825174825175, + 0.00291375291375291, + 0.00407925407925408, + 0.00641025641025641, + 0.00815850815850816, + 0.01107226107226107, + 0.01398601398601398, + 0.01806526806526806, + 0.02156177156177156, + 0.02680652680652679, + 0.03030303030303030, + 0.03554778554778554, + 0.03962703962703962, + 0.04428904428904428, + 0.04720279720279720, + 0.05128205128205127, + 0.05244755244755244, + 0.05477855477855477, + 0.05477855477855477, + 0.05477855477855477, + 0.05244755244755243, + 0.05128205128205127, + 0.04720279720279720, + 0.04428904428904428, + 0.03962703962703962, + 0.03554778554778555, + 0.03030303030303030, + 0.02680652680652681, + 0.02156177156177156, + 0.01806526806526806, + 0.01398601398601399, + 0.01107226107226107, + 0.00815850815850816, + 0.00641025641025641, + 0.00407925407925408, + 0.00291375291375291, + 0.00174825174825175, + 0.00116550116550117, + 0.00058275058275058, + 0.00058275058275058, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + }, + { + { + 0.02777777777777778, + 0.02777777777777778, + 0.05555555555555555, + 0.05555555555555556, + 0.08333333333333334, + 0.08333333333333334, + 0.11111111111111113, + 0.11111111111111113, + 0.11111111111111110, + 0.08333333333333333, + 0.08333333333333334, + 0.05555555555555555, + 0.05555555555555555, + 0.02777777777777777, + 0.02777777777777777, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.00833333333333333, + 0.00833333333333333, + 0.01666666666666667, + 0.02500000000000000, + 0.03333333333333333, + 0.04166666666666666, + 0.05833333333333333, + 0.06666666666666667, + 0.07500000000000000, + 0.08333333333333333, + 0.08333333333333333, + 0.08333333333333331, + 0.08333333333333331, + 0.07499999999999998, + 0.06666666666666665, + 0.05833333333333331, + 0.04166666666666666, + 0.03333333333333333, + 0.02499999999999999, + 0.01666666666666666, + 0.00833333333333333, + 0.00833333333333333, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.00303030303030303, + 0.00303030303030303, + 0.00606060606060606, + 0.00909090909090909, + 0.01515151515151515, + 0.01818181818181818, + 0.02727272727272727, + 0.03333333333333333, + 0.04242424242424242, + 0.04848484848484848, + 0.05757575757575757, + 0.06060606060606059, + 0.06969696969696970, + 0.06969696969696969, + 0.07272727272727272, + 0.06969696969696967, + 0.06969696969696967, + 0.06060606060606059, + 0.05757575757575756, + 0.04848484848484847, + 0.04242424242424242, + 0.03333333333333333, + 0.02727272727272727, + 0.01818181818181818, + 0.01515151515151515, + 0.00909090909090909, + 0.00606060606060606, + 0.00303030303030303, + 0.00303030303030303, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.00126262626262626, + 0.00126262626262626, + 0.00252525252525253, + 0.00378787878787879, + 0.00631313131313131, + 0.00883838383838384, + 0.01262626262626263, + 0.01641414141414142, + 0.02146464646464646, + 0.02651515151515152, + 0.03282828282828282, + 0.03787878787878787, + 0.04419191919191920, + 0.04924242424242424, + 0.05429292929292930, + 0.05808080808080807, + 0.06060606060606059, + 0.06186868686868686, + 0.06186868686868686, + 0.06060606060606059, + 0.05808080808080808, + 0.05429292929292929, + 0.04924242424242424, + 0.04419191919191919, + 0.03787878787878787, + 0.03282828282828283, + 0.02651515151515151, + 0.02146464646464646, + 0.01641414141414141, + 0.01262626262626262, + 0.00883838383838384, + 0.00631313131313131, + 0.00378787878787879, + 0.00252525252525253, + 0.00126262626262626, + 0.00126262626262626, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.00058275058275058, + 0.00058275058275058, + 0.00116550116550117, + 0.00174825174825175, + 0.00291375291375291, + 0.00407925407925408, + 0.00641025641025641, + 0.00815850815850816, + 0.01107226107226107, + 0.01398601398601399, + 0.01806526806526806, + 0.02156177156177156, + 0.02680652680652681, + 0.03030303030303030, + 0.03554778554778555, + 0.03962703962703962, + 0.04428904428904428, + 0.04720279720279720, + 0.05128205128205127, + 0.05244755244755243, + 0.05477855477855477, + 0.05477855477855477, + 0.05477855477855477, + 0.05244755244755244, + 0.05128205128205127, + 0.04720279720279720, + 0.04428904428904428, + 0.03962703962703962, + 0.03554778554778554, + 0.03030303030303030, + 0.02680652680652679, + 0.02156177156177156, + 0.01806526806526806, + 0.01398601398601398, + 0.01107226107226107, + 0.00815850815850816, + 0.00641025641025641, + 0.00407925407925408, + 0.00291375291375291, + 0.00174825174825175, + 0.00116550116550117, + 0.00058275058275058, + 0.00058275058275058, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + 0.00000000000000000, + }, + { + 0.00029137529137529, + 0.00029137529137529, + 0.00058275058275058, + 0.00087412587412587, + 0.00145687645687646, + 0.00203962703962704, + 0.00320512820512821, + 0.00437062937062937, + 0.00582750582750583, + 0.00757575757575758, + 0.00990675990675991, + 0.01223776223776224, + 0.01544289044289044, + 0.01835664335664336, + 0.02185314685314686, + 0.02534965034965035, + 0.02913752913752913, + 0.03263403263403263, + 0.03642191142191141, + 0.03962703962703962, + 0.04254079254079253, + 0.04516317016317015, + 0.04720279720279719, + 0.04836829836829836, + 0.04924242424242423, + 0.04924242424242423, + 0.04836829836829836, + 0.04720279720279719, + 0.04516317016317015, + 0.04254079254079253, + 0.03962703962703962, + 0.03642191142191141, + 0.03263403263403263, + 0.02913752913752913, + 0.02534965034965035, + 0.02185314685314686, + 0.01835664335664336, + 0.01544289044289044, + 0.01223776223776224, + 0.00990675990675991, + 0.00757575757575758, + 0.00582750582750583, + 0.00437062937062937, + 0.00320512820512821, + 0.00203962703962704, + 0.00145687645687646, + 0.00087412587412587, + 0.00058275058275058, + 0.00029137529137529, + 0.00029137529137529, + }, + }, +}; diff --git a/bcftools/ploidy.c b/bcftools/ploidy.c new file mode 100644 index 0000000..550ba87 --- /dev/null +++ b/bcftools/ploidy.c @@ -0,0 +1,268 @@ +/* + Copyright (C) 2014-2016 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include +#include +#include +#include "bcftools.h" +#include "ploidy.h" + +struct _ploidy_t +{ + int nsex, msex; // number of genders, m:number of allocated elements in id2sex array + int dflt, min, max; // ploidy: default, min and max (only explicitly listed) + int *sex2dflt; + regidx_t *idx; + regitr_t *itr; + void *sex2id; + char **id2sex; + kstring_t tmp_str; +}; + +typedef struct +{ + int sex, ploidy; +} +sex_ploidy_t; + + +regidx_t *ploidy_regions(ploidy_t *ploidy) +{ + return ploidy->idx; +} + +int ploidy_parse(const char *line, char **chr_beg, char **chr_end, uint32_t *beg, uint32_t *end, void *payload, void *usr) +{ + int i, ret; + ploidy_t *ploidy = (ploidy_t*) usr; + void *sex2id = ploidy->sex2id; + + // Check for special case of default ploidy "* * * " + int default_ploidy_def = 0; + + char *ss = (char*) line; + while ( *ss && isspace(*ss) ) ss++; + if ( ss[0]=='*' && (!ss[1] || isspace(ss[1])) ) + default_ploidy_def = 1; // definition of default ploidy, chr="*" + else + { + // Fill CHR,FROM,TO + ret = regidx_parse_tab(line,chr_beg,chr_end,beg,end,NULL,NULL); + if ( ret!=0 ) return ret; + } + + // Skip the fields already parsed by regidx_parse_tab + ss = (char*) line; + while ( *ss && isspace(*ss) ) ss++; + for (i=0; i<3; i++) + { + while ( *ss && !isspace(*ss) ) ss++; + if ( !*ss ) return -2; // wrong number of fields + while ( *ss && isspace(*ss) ) ss++; + } + if ( !*ss ) return -2; + + // Parse the payload + char *se = ss; + while ( *se && !isspace(*se) ) se++; + if ( !*se || se==ss ) error("Could not parse: %s\n", line); + ploidy->tmp_str.l = 0; + kputsn(ss,se-ss,&ploidy->tmp_str); + + sex_ploidy_t *sp = (sex_ploidy_t*) payload; + if ( khash_str2int_get(sex2id, ploidy->tmp_str.s, &sp->sex) != 0 ) + { + ploidy->nsex++; + hts_expand0(char*,ploidy->nsex,ploidy->msex,ploidy->id2sex); + ploidy->id2sex[ploidy->nsex-1] = strdup(ploidy->tmp_str.s); + sp->sex = khash_str2int_inc(ploidy->sex2id, ploidy->id2sex[ploidy->nsex-1]); + ploidy->sex2dflt = (int*) realloc(ploidy->sex2dflt,sizeof(int)*ploidy->nsex); + ploidy->sex2dflt[ploidy->nsex-1] = -1; + } + + ss = se; + while ( *se && isspace(*se) ) se++; + if ( !*se ) error("Could not parse: %s\n", line); + sp->ploidy = strtol(ss,&se,10); + if ( ss==se ) error("Could not parse: %s\n", line); + if ( ploidy->min<0 || sp->ploidy < ploidy->min ) ploidy->min = sp->ploidy; + if ( ploidy->max<0 || sp->ploidy > ploidy->max ) ploidy->max = sp->ploidy; + + // Special case, chr="*" stands for a default value + if ( default_ploidy_def ) + { + ploidy->sex2dflt[ploidy->nsex-1] = sp->ploidy; + return -1; + } + + return 0; +} + +static void _set_defaults(ploidy_t *ploidy, int dflt) +{ + int i; + if ( khash_str2int_get(ploidy->sex2id, "*", &i) == 0 ) dflt = ploidy->sex2dflt[i]; + for (i=0; insex; i++) + if ( ploidy->sex2dflt[i]==-1 ) ploidy->sex2dflt[i] = dflt; + + ploidy->dflt = dflt; + if ( ploidy->min<0 || dflt < ploidy->min ) ploidy->min = dflt; + if ( ploidy->max<0 || dflt > ploidy->max ) ploidy->max = dflt; +} + +ploidy_t *ploidy_init(const char *fname, int dflt) +{ + ploidy_t *pld = (ploidy_t*) calloc(1,sizeof(ploidy_t)); + if ( !pld ) return NULL; + + pld->min = pld->max = -1; + pld->sex2id = khash_str2int_init(); + pld->idx = regidx_init(fname,ploidy_parse,NULL,sizeof(sex_ploidy_t),pld); + if ( !pld->idx ) + { + ploidy_destroy(pld); + return NULL; + } + pld->itr = regitr_init(pld->idx); + _set_defaults(pld,dflt); + return pld; +} + +ploidy_t *ploidy_init_string(const char *str, int dflt) +{ + ploidy_t *pld = (ploidy_t*) calloc(1,sizeof(ploidy_t)); + if ( !pld ) return NULL; + + pld->min = pld->max = -1; + pld->sex2id = khash_str2int_init(); + pld->idx = regidx_init(NULL,ploidy_parse,NULL,sizeof(sex_ploidy_t),pld); + pld->itr = regitr_init(pld->idx); + + kstring_t tmp = {0,0,0}; + const char *ss = str; + while ( *ss ) + { + while ( *ss && isspace(*ss) ) ss++; + const char *se = ss; + while ( *se && *se!='\r' && *se!='\n' ) se++; + tmp.l = 0; + kputsn(ss, se-ss, &tmp); + regidx_insert(pld->idx,tmp.s); + while ( *se && isspace(*se) ) se++; + ss = se; + } + free(tmp.s); + + _set_defaults(pld,dflt); + return pld; +} + +void ploidy_destroy(ploidy_t *ploidy) +{ + if ( ploidy->sex2id ) khash_str2int_destroy_free(ploidy->sex2id); + if ( ploidy->itr ) regitr_destroy(ploidy->itr); + if ( ploidy->idx ) regidx_destroy(ploidy->idx); + free(ploidy->id2sex); + free(ploidy->tmp_str.s); + free(ploidy->sex2dflt); + free(ploidy); +} + +int ploidy_query(ploidy_t *ploidy, char *seq, int pos, int *sex2ploidy, int *min, int *max) +{ + int i, ret = regidx_overlap(ploidy->idx, seq,pos,pos, ploidy->itr); + + if ( !sex2ploidy && !min && !max ) return ret; + + if ( !ret ) + { + // no overlap + if ( min ) *min = ploidy->dflt; + if ( max ) *max = ploidy->dflt; + if ( sex2ploidy ) + for (i=0; insex; i++) sex2ploidy[i] = ploidy->sex2dflt[i]; + return 0; + } + + int _min = INT_MAX, _max = -1; + if ( sex2ploidy ) for (i=0; insex; i++) sex2ploidy[i] = ploidy->dflt; + + while ( regitr_overlap(ploidy->itr) ) + { + int sex = regitr_payload(ploidy->itr,sex_ploidy_t).sex; + int pld = regitr_payload(ploidy->itr,sex_ploidy_t).ploidy; + if ( pld!=ploidy->dflt ) + { + if ( sex2ploidy ) sex2ploidy[ sex ] = pld; + if ( _min > pld ) _min = pld; + if ( _max < pld ) _max = pld; + } + } + if ( _max==-1 ) _max = _min = ploidy->dflt; + if ( max ) *max = _max; + if ( min ) *min = _min; + + return 1; +} + +int ploidy_nsex(ploidy_t *ploidy) +{ + return ploidy->nsex; +} + +char *ploidy_id2sex(ploidy_t *ploidy, int id) +{ + if ( id<0 || id>=ploidy->nsex ) return NULL; + return ploidy->id2sex[id]; +} + +int ploidy_sex2id(ploidy_t *ploidy, char *sex) +{ + int id; + if ( khash_str2int_get(ploidy->sex2id,sex,&id)!=0 ) return -1; + return id; +} + +int ploidy_add_sex(ploidy_t *ploidy, const char *sex) +{ + int id; + if ( khash_str2int_get(ploidy->sex2id, sex, &id)==0 ) return id; + ploidy->nsex++; + hts_expand0(char*,ploidy->nsex,ploidy->msex,ploidy->id2sex); + ploidy->id2sex[ploidy->nsex-1] = strdup(sex); + ploidy->sex2dflt = (int*) realloc(ploidy->sex2dflt,sizeof(int)*ploidy->nsex); + ploidy->sex2dflt[ploidy->nsex-1] = ploidy->dflt; + return khash_str2int_inc(ploidy->sex2id, ploidy->id2sex[ploidy->nsex-1]); +} + +int ploidy_max(ploidy_t *ploidy) +{ + return ploidy->dflt > ploidy->max ? ploidy->dflt : ploidy->max; +} + +int ploidy_min(ploidy_t *ploidy) +{ + return ploidy->dflt < ploidy->min ? ploidy->dflt : ploidy->min; +} + diff --git a/bcftools/ploidy.c.pysam.c b/bcftools/ploidy.c.pysam.c new file mode 100644 index 0000000..aee0c56 --- /dev/null +++ b/bcftools/ploidy.c.pysam.c @@ -0,0 +1,270 @@ +#include "bcftools.pysam.h" + +/* + Copyright (C) 2014-2016 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include +#include +#include +#include "bcftools.h" +#include "ploidy.h" + +struct _ploidy_t +{ + int nsex, msex; // number of genders, m:number of allocated elements in id2sex array + int dflt, min, max; // ploidy: default, min and max (only explicitly listed) + int *sex2dflt; + regidx_t *idx; + regitr_t *itr; + void *sex2id; + char **id2sex; + kstring_t tmp_str; +}; + +typedef struct +{ + int sex, ploidy; +} +sex_ploidy_t; + + +regidx_t *ploidy_regions(ploidy_t *ploidy) +{ + return ploidy->idx; +} + +int ploidy_parse(const char *line, char **chr_beg, char **chr_end, uint32_t *beg, uint32_t *end, void *payload, void *usr) +{ + int i, ret; + ploidy_t *ploidy = (ploidy_t*) usr; + void *sex2id = ploidy->sex2id; + + // Check for special case of default ploidy "* * * " + int default_ploidy_def = 0; + + char *ss = (char*) line; + while ( *ss && isspace(*ss) ) ss++; + if ( ss[0]=='*' && (!ss[1] || isspace(ss[1])) ) + default_ploidy_def = 1; // definition of default ploidy, chr="*" + else + { + // Fill CHR,FROM,TO + ret = regidx_parse_tab(line,chr_beg,chr_end,beg,end,NULL,NULL); + if ( ret!=0 ) return ret; + } + + // Skip the fields already parsed by regidx_parse_tab + ss = (char*) line; + while ( *ss && isspace(*ss) ) ss++; + for (i=0; i<3; i++) + { + while ( *ss && !isspace(*ss) ) ss++; + if ( !*ss ) return -2; // wrong number of fields + while ( *ss && isspace(*ss) ) ss++; + } + if ( !*ss ) return -2; + + // Parse the payload + char *se = ss; + while ( *se && !isspace(*se) ) se++; + if ( !*se || se==ss ) error("Could not parse: %s\n", line); + ploidy->tmp_str.l = 0; + kputsn(ss,se-ss,&ploidy->tmp_str); + + sex_ploidy_t *sp = (sex_ploidy_t*) payload; + if ( khash_str2int_get(sex2id, ploidy->tmp_str.s, &sp->sex) != 0 ) + { + ploidy->nsex++; + hts_expand0(char*,ploidy->nsex,ploidy->msex,ploidy->id2sex); + ploidy->id2sex[ploidy->nsex-1] = strdup(ploidy->tmp_str.s); + sp->sex = khash_str2int_inc(ploidy->sex2id, ploidy->id2sex[ploidy->nsex-1]); + ploidy->sex2dflt = (int*) realloc(ploidy->sex2dflt,sizeof(int)*ploidy->nsex); + ploidy->sex2dflt[ploidy->nsex-1] = -1; + } + + ss = se; + while ( *se && isspace(*se) ) se++; + if ( !*se ) error("Could not parse: %s\n", line); + sp->ploidy = strtol(ss,&se,10); + if ( ss==se ) error("Could not parse: %s\n", line); + if ( ploidy->min<0 || sp->ploidy < ploidy->min ) ploidy->min = sp->ploidy; + if ( ploidy->max<0 || sp->ploidy > ploidy->max ) ploidy->max = sp->ploidy; + + // Special case, chr="*" stands for a default value + if ( default_ploidy_def ) + { + ploidy->sex2dflt[ploidy->nsex-1] = sp->ploidy; + return -1; + } + + return 0; +} + +static void _set_defaults(ploidy_t *ploidy, int dflt) +{ + int i; + if ( khash_str2int_get(ploidy->sex2id, "*", &i) == 0 ) dflt = ploidy->sex2dflt[i]; + for (i=0; insex; i++) + if ( ploidy->sex2dflt[i]==-1 ) ploidy->sex2dflt[i] = dflt; + + ploidy->dflt = dflt; + if ( ploidy->min<0 || dflt < ploidy->min ) ploidy->min = dflt; + if ( ploidy->max<0 || dflt > ploidy->max ) ploidy->max = dflt; +} + +ploidy_t *ploidy_init(const char *fname, int dflt) +{ + ploidy_t *pld = (ploidy_t*) calloc(1,sizeof(ploidy_t)); + if ( !pld ) return NULL; + + pld->min = pld->max = -1; + pld->sex2id = khash_str2int_init(); + pld->idx = regidx_init(fname,ploidy_parse,NULL,sizeof(sex_ploidy_t),pld); + if ( !pld->idx ) + { + ploidy_destroy(pld); + return NULL; + } + pld->itr = regitr_init(pld->idx); + _set_defaults(pld,dflt); + return pld; +} + +ploidy_t *ploidy_init_string(const char *str, int dflt) +{ + ploidy_t *pld = (ploidy_t*) calloc(1,sizeof(ploidy_t)); + if ( !pld ) return NULL; + + pld->min = pld->max = -1; + pld->sex2id = khash_str2int_init(); + pld->idx = regidx_init(NULL,ploidy_parse,NULL,sizeof(sex_ploidy_t),pld); + pld->itr = regitr_init(pld->idx); + + kstring_t tmp = {0,0,0}; + const char *ss = str; + while ( *ss ) + { + while ( *ss && isspace(*ss) ) ss++; + const char *se = ss; + while ( *se && *se!='\r' && *se!='\n' ) se++; + tmp.l = 0; + kputsn(ss, se-ss, &tmp); + regidx_insert(pld->idx,tmp.s); + while ( *se && isspace(*se) ) se++; + ss = se; + } + free(tmp.s); + + _set_defaults(pld,dflt); + return pld; +} + +void ploidy_destroy(ploidy_t *ploidy) +{ + if ( ploidy->sex2id ) khash_str2int_destroy_free(ploidy->sex2id); + if ( ploidy->itr ) regitr_destroy(ploidy->itr); + if ( ploidy->idx ) regidx_destroy(ploidy->idx); + free(ploidy->id2sex); + free(ploidy->tmp_str.s); + free(ploidy->sex2dflt); + free(ploidy); +} + +int ploidy_query(ploidy_t *ploidy, char *seq, int pos, int *sex2ploidy, int *min, int *max) +{ + int i, ret = regidx_overlap(ploidy->idx, seq,pos,pos, ploidy->itr); + + if ( !sex2ploidy && !min && !max ) return ret; + + if ( !ret ) + { + // no overlap + if ( min ) *min = ploidy->dflt; + if ( max ) *max = ploidy->dflt; + if ( sex2ploidy ) + for (i=0; insex; i++) sex2ploidy[i] = ploidy->sex2dflt[i]; + return 0; + } + + int _min = INT_MAX, _max = -1; + if ( sex2ploidy ) for (i=0; insex; i++) sex2ploidy[i] = ploidy->dflt; + + while ( regitr_overlap(ploidy->itr) ) + { + int sex = regitr_payload(ploidy->itr,sex_ploidy_t).sex; + int pld = regitr_payload(ploidy->itr,sex_ploidy_t).ploidy; + if ( pld!=ploidy->dflt ) + { + if ( sex2ploidy ) sex2ploidy[ sex ] = pld; + if ( _min > pld ) _min = pld; + if ( _max < pld ) _max = pld; + } + } + if ( _max==-1 ) _max = _min = ploidy->dflt; + if ( max ) *max = _max; + if ( min ) *min = _min; + + return 1; +} + +int ploidy_nsex(ploidy_t *ploidy) +{ + return ploidy->nsex; +} + +char *ploidy_id2sex(ploidy_t *ploidy, int id) +{ + if ( id<0 || id>=ploidy->nsex ) return NULL; + return ploidy->id2sex[id]; +} + +int ploidy_sex2id(ploidy_t *ploidy, char *sex) +{ + int id; + if ( khash_str2int_get(ploidy->sex2id,sex,&id)!=0 ) return -1; + return id; +} + +int ploidy_add_sex(ploidy_t *ploidy, const char *sex) +{ + int id; + if ( khash_str2int_get(ploidy->sex2id, sex, &id)==0 ) return id; + ploidy->nsex++; + hts_expand0(char*,ploidy->nsex,ploidy->msex,ploidy->id2sex); + ploidy->id2sex[ploidy->nsex-1] = strdup(sex); + ploidy->sex2dflt = (int*) realloc(ploidy->sex2dflt,sizeof(int)*ploidy->nsex); + ploidy->sex2dflt[ploidy->nsex-1] = ploidy->dflt; + return khash_str2int_inc(ploidy->sex2id, ploidy->id2sex[ploidy->nsex-1]); +} + +int ploidy_max(ploidy_t *ploidy) +{ + return ploidy->dflt > ploidy->max ? ploidy->dflt : ploidy->max; +} + +int ploidy_min(ploidy_t *ploidy) +{ + return ploidy->dflt < ploidy->min ? ploidy->dflt : ploidy->min; +} + diff --git a/bcftools/ploidy.h b/bcftools/ploidy.h new file mode 100644 index 0000000..1e7d2f7 --- /dev/null +++ b/bcftools/ploidy.h @@ -0,0 +1,129 @@ +/* + Copyright (C) 2014 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +/* + Lookup from region and sex to ploidy. + + Example of usage: + + int default_ploidy = 2; + ploidy_t *pld = ploidy_init(fname, default_ploidy); + + int nsex = ploidy_nsex(pld); + int *sex2ploidy = malloc(sizeof(int)*nsex); + + ploidy_query(pld, "X",60000, sex2ploidy, NULL, NULL); + for (i=0; i + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "prob1.h" + +// #include "kstring.h" +// #include "kseq.h" +// KSTREAM_INIT(gzFile, gzread, 16384) + +#define MC_MAX_EM_ITER 16 +#define MC_EM_EPS 1e-5 +#define MC_DEF_INDEL 0.15 + +gzFile bcf_p1_fp_lk; + +void bcf_p1_indel_prior(bcf_p1aux_t *ma, double x) +{ + int i; + for (i = 0; i < ma->M; ++i) + ma->phi_indel[i] = ma->phi[i] * x; + ma->phi_indel[ma->M] = 1. - ma->phi[ma->M] * x; +} + +static void init_prior(int type, double theta, int M, double *phi) +{ + int i; + if (type == MC_PTYPE_COND2) { + for (i = 0; i <= M; ++i) + phi[i] = 2. * (i + 1) / (M + 1) / (M + 2); + } else if (type == MC_PTYPE_FLAT) { + for (i = 0; i <= M; ++i) + phi[i] = 1. / (M + 1); + } else { + double sum; + for (i = 0, sum = 0.; i < M; ++i) + sum += (phi[i] = theta / (M - i)); + phi[M] = 1. - sum; + } +} + +void bcf_p1_init_prior(bcf_p1aux_t *ma, int type, double theta) +{ + init_prior(type, theta, ma->M, ma->phi); + bcf_p1_indel_prior(ma, MC_DEF_INDEL); +} + +void bcf_p1_init_subprior(bcf_p1aux_t *ma, int type, double theta) +{ + if (ma->n1 <= 0 || ma->n1 >= ma->M) return; + init_prior(type, theta, 2*ma->n1, ma->phi1); + init_prior(type, theta, 2*(ma->n - ma->n1), ma->phi2); +} + + +/* Initialise a bcf_p1aux_t */ +bcf_p1aux_t *bcf_p1_init(int n_smpl, uint8_t *ploidy) +{ + bcf_p1aux_t *ma; + int i; + ma = (bcf_p1aux_t*) calloc(1, sizeof(bcf_p1aux_t)); + ma->n1 = -1; + ma->n = n_smpl; + ma->M = 2 * n_smpl; + if (ploidy) { + ma->ploidy = (uint8_t*) malloc(n_smpl); + memcpy(ma->ploidy, ploidy, n_smpl); + for (i = 0, ma->M = 0; i < n_smpl; ++i) ma->M += ploidy[i]; + if (ma->M == 2 * n_smpl) { + free(ma->ploidy); + ma->ploidy = 0; + } + } + ma->q2p = (double*) calloc(256, sizeof(double)); + ma->pdg = (double*) calloc(3 * ma->n, sizeof(double)); + ma->phi = (double*) calloc(ma->M + 1, sizeof(double)); + ma->phi_indel = (double*) calloc(ma->M + 1, sizeof(double)); + ma->phi1 = (double*) calloc(ma->M + 1, sizeof(double)); + ma->phi2 = (double*) calloc(ma->M + 1, sizeof(double)); + ma->z = (double*) calloc(ma->M + 1, sizeof(double)); + ma->zswap = (double*) calloc(ma->M + 1, sizeof(double)); + ma->z1 = (double*) calloc(ma->M + 1, sizeof(double)); // actually we do not need this large + ma->z2 = (double*) calloc(ma->M + 1, sizeof(double)); + ma->afs = (double*) calloc(ma->M + 1, sizeof(double)); + ma->afs1 = (double*) calloc(ma->M + 1, sizeof(double)); + ma->lf = (double*) calloc(ma->M + 1, sizeof(double)); + for (i = 0; i < 256; ++i) + ma->q2p[i] = pow(10., -i / 10.); + for (i = 0; i <= ma->M; ++i) ma->lf[i] = lgamma(i + 1); + bcf_p1_init_prior(ma, MC_PTYPE_FULL, 1e-3); // the simplest prior + return ma; +} + +int bcf_p1_get_M(bcf_p1aux_t *b) { return b->M; } + +int bcf_p1_set_n1(bcf_p1aux_t *b, int n1) +{ + if (n1 == 0 || n1 >= b->n) return -1; + if (b->M != b->n * 2) { + fprintf(stderr, "[%s] unable to set `n1' when there are haploid samples.\n", __func__); + return -1; + } + b->n1 = n1; + return 0; +} + +void bcf_p1_destroy(bcf_p1aux_t *ma) +{ + if (ma) { + int k; + free(ma->lf); + if (ma->hg && ma->n1 > 0) { + for (k = 0; k <= 2*ma->n1; ++k) free(ma->hg[k]); + free(ma->hg); + } + free(ma->ploidy); free(ma->q2p); free(ma->pdg); + free(ma->phi); free(ma->phi_indel); free(ma->phi1); free(ma->phi2); + free(ma->z); free(ma->zswap); free(ma->z1); free(ma->z2); + free(ma->afs); free(ma->afs1); + free(ma); + } +} + +extern double kf_gammap(double s, double z); +int test16(bcf1_t *b, anno16_t *a); + +/* Calculate P(D|g) */ +static int cal_pdg(const bcf1_t *b, bcf_p1aux_t *ma) +{ + int i, j; + long p_a[16], *p=p_a, tmp; + if (b->n_allele > 16) + p = (long*) malloc(b->n_allele * sizeof(long)); + memset(p, 0, sizeof(long) * b->n_allele); + + // Set P(D|g) for each sample and sum phread likelihoods across all samples to create lk + for (j = 0; j < ma->n; ++j) { + // Fetch the PL array for the sample + const int *pi = ma->PL + j * ma->PL_len; + // Fetch the P(D|g) array for the sample + double *pdg = ma->pdg + j * 3; + pdg[0] = ma->q2p[pi[2]]; pdg[1] = ma->q2p[pi[1]]; pdg[2] = ma->q2p[pi[0]]; + for (i = 0; i < b->n_allele; ++i) + p[i] += (int)pi[(i+1)*(i+2)/2-1]; + } + for (i = 0; i < b->n_allele; ++i) p[i] = p[i]<<4 | i; + for (i = 1; i < b->n_allele; ++i) // insertion sort + for (j = i; j > 0 && p[j] < p[j-1]; --j) + tmp = p[j], p[j] = p[j-1], p[j-1] = tmp; + for (i = b->n_allele - 1; i >= 0; --i) + if ((p[i]&0xf) == 0) break; + if (p != p_a) + free(p); + return i; +} + + +/* f0 is freq of the ref allele */ +int bcf_p1_call_gt(const bcf_p1aux_t *ma, double f0, int k, int is_var) +{ + double sum, g[3]; + double max, f3[3], *pdg = ma->pdg + k * 3; + int q, i, max_i, ploidy; + /* determine ploidy */ + ploidy = ma->ploidy? ma->ploidy[k] : 2; + if (ploidy == 2) { + /* given allele frequency we can determine how many of each + * genotype we have by HWE p=1-q PP=p^2 PQ&QP=2*p*q QQ=q^2 */ + f3[0] = (1.-f0)*(1.-f0); f3[1] = 2.*f0*(1.-f0); f3[2] = f0*f0; + } else { + f3[0] = 1. - f0; f3[1] = 0; f3[2] = f0; + } + for (i = 0, sum = 0.; i < 3; ++i) + sum += (g[i] = pdg[i] * f3[i]); + /* normalise g and then determine max */ + for (i = 0, max = -1., max_i = 0; i < 3; ++i) { + g[i] /= sum; + if (g[i] > max) max = g[i], max_i = i; + } + if ( !is_var ) { max_i = 2; max = g[2]; } // force 0/0 genotype if the site is non-variant + max = 1. - max; + if (max < 1e-308) max = 1e-308; + q = (int)(-4.343 * log(max) + .499); + if (q > 99) q = 99; + return q<<2|max_i; +} + +// If likelihoods fall below this they get squashed to 0 +#define TINY 1e-20 +static void mc_cal_y_core(bcf_p1aux_t *ma, int beg) +{ + double *z[2], *tmp, *pdg; + int _j, last_min, last_max; + assert(beg == 0 || ma->M == ma->n*2); + z[0] = ma->z; + z[1] = ma->zswap; + pdg = ma->pdg; + memset(z[0], 0, sizeof(double) * (ma->M + 1)); + memset(z[1], 0, sizeof(double) * (ma->M + 1)); + z[0][0] = 1.; + last_min = last_max = 0; + ma->t = 0.; + if (ma->M == ma->n * 2) { + int M = 0; + for (_j = beg; _j < ma->n; ++_j) { + int k, j = _j - beg, _min = last_min, _max = last_max, M0; + double p[3], sum; + M0 = M; M += 2; + // Fetch P(D|g) for this sample + pdg = ma->pdg + _j * 3; + p[0] = pdg[0]; p[1] = 2. * pdg[1]; p[2] = pdg[2]; + for (; _min < _max && z[0][_min] < TINY; ++_min) z[0][_min] = z[1][_min] = 0.; + for (; _max > _min && z[0][_max] < TINY; --_max) z[0][_max] = z[1][_max] = 0.; + _max += 2; + if (_min == 0) k = 0, z[1][k] = (M0-k+1) * (M0-k+2) * p[0] * z[0][k]; + if (_min <= 1) k = 1, z[1][k] = (M0-k+1) * (M0-k+2) * p[0] * z[0][k] + k*(M0-k+2) * p[1] * z[0][k-1]; + for (k = _min < 2? 2 : _min; k <= _max; ++k) + z[1][k] = (M0-k+1)*(M0-k+2) * p[0] * z[0][k] + k*(M0-k+2) * p[1] * z[0][k-1] + k*(k-1)* p[2] * z[0][k-2]; + for (k = _min, sum = 0.; k <= _max; ++k) sum += z[1][k]; + ma->t += log(sum / (M * (M - 1.))); + for (k = _min; k <= _max; ++k) z[1][k] /= sum; + if (_min >= 1) z[1][_min-1] = 0.; + if (_min >= 2) z[1][_min-2] = 0.; + // If we are not on the last sample + if (j < ma->n - 1) z[1][_max+1] = z[1][_max+2] = 0.; + if (_j == ma->n1 - 1) { // set pop1; ma->n1==-1 when unset + ma->t1 = ma->t; + memcpy(ma->z1, z[1], sizeof(double) * (ma->n1 * 2 + 1)); + } + tmp = z[0]; z[0] = z[1]; z[1] = tmp; + last_min = _min; last_max = _max; + } + //for (_j = 0; _j < last_min; ++_j) z[0][_j] = 0.; // TODO: are these necessary? + //for (_j = last_max + 1; _j < ma->M; ++_j) z[0][_j] = 0.; + } else { // this block is very similar to the block above; these two might be merged in future + int j, M = 0; + for (j = 0; j < ma->n; ++j) { + int k, M0, _min = last_min, _max = last_max; + double p[3], sum; + // Fetch P(D|g) for this sample + pdg = ma->pdg + j * 3; + for (; _min < _max && z[0][_min] < TINY; ++_min) z[0][_min] = z[1][_min] = 0.; + for (; _max > _min && z[0][_max] < TINY; --_max) z[0][_max] = z[1][_max] = 0.; + M0 = M; + M += ma->ploidy[j]; + if (ma->ploidy[j] == 1) { + p[0] = pdg[0]; p[1] = pdg[2]; + _max++; + if (_min == 0) k = 0, z[1][k] = (M0+1-k) * p[0] * z[0][k]; + for (k = _min < 1? 1 : _min; k <= _max; ++k) + z[1][k] = (M0+1-k) * p[0] * z[0][k] + k * p[1] * z[0][k-1]; + for (k = _min, sum = 0.; k <= _max; ++k) sum += z[1][k]; + ma->t += log(sum / M); + for (k = _min; k <= _max; ++k) z[1][k] /= sum; + if (_min >= 1) z[1][_min-1] = 0.; + // If we are not on the last sample + if (j < ma->n - 1) z[1][_max+1] = 0.; + } else if (ma->ploidy[j] == 2) { + p[0] = pdg[0]; p[1] = 2 * pdg[1]; p[2] = pdg[2]; + _max += 2; + if (_min == 0) k = 0, z[1][k] = (M0-k+1) * (M0-k+2) * p[0] * z[0][k]; + if (_min <= 1) k = 1, z[1][k] = (M0-k+1) * (M0-k+2) * p[0] * z[0][k] + k*(M0-k+2) * p[1] * z[0][k-1]; + for (k = _min < 2? 2 : _min; k <= _max; ++k) + z[1][k] = (M0-k+1)*(M0-k+2) * p[0] * z[0][k] + k*(M0-k+2) * p[1] * z[0][k-1] + k*(k-1)* p[2] * z[0][k-2]; + for (k = _min, sum = 0.; k <= _max; ++k) sum += z[1][k]; + ma->t += log(sum / (M * (M - 1.))); + for (k = _min; k <= _max; ++k) z[1][k] /= sum; + if (_min >= 1) z[1][_min-1] = 0.; + if (_min >= 2) z[1][_min-2] = 0.; + // If we are not on the last sample + if (j < ma->n - 1) z[1][_max+1] = z[1][_max+2] = 0.; + } + tmp = z[0]; z[0] = z[1]; z[1] = tmp; + last_min = _min; last_max = _max; + } + } + if (z[0] != ma->z) memcpy(ma->z, z[0], sizeof(double) * (ma->M + 1)); + if (bcf_p1_fp_lk) + gzwrite(bcf_p1_fp_lk, ma->z, sizeof(double) * (ma->M + 1)); +} + +static void mc_cal_y(bcf_p1aux_t *ma) +{ + if (ma->n1 > 0 && ma->n1 < ma->n && ma->M == ma->n * 2) { // NB: ma->n1 is ineffective when there are haploid samples + int k; + long double x; + memset(ma->z1, 0, sizeof(double) * (2 * ma->n1 + 1)); + memset(ma->z2, 0, sizeof(double) * (2 * (ma->n - ma->n1) + 1)); + ma->t1 = ma->t2 = 0.; + mc_cal_y_core(ma, ma->n1); + ma->t2 = ma->t; + memcpy(ma->z2, ma->z, sizeof(double) * (2 * (ma->n - ma->n1) + 1)); + mc_cal_y_core(ma, 0); + // rescale z + x = expl(ma->t - (ma->t1 + ma->t2)); + for (k = 0; k <= ma->M; ++k) ma->z[k] *= x; + } else mc_cal_y_core(ma, 0); +} + +#define CONTRAST_TINY 1e-30 + +extern double kf_gammaq(double s, double z); // incomplete gamma function for chi^2 test + +static inline double chi2_test(int a, int b, int c, int d) +{ + double x, z; + x = (double)(a+b) * (c+d) * (b+d) * (a+c); + if (x == 0.) return 1; + z = a * d - b * c; + return kf_gammaq(.5, .5 * z * z * (a+b+c+d) / x); +} + +// chi2=(a+b+c+d)(ad-bc)^2/[(a+b)(c+d)(a+c)(b+d)] +static inline double contrast2_aux(const bcf_p1aux_t *p1, double sum, int k1, int k2, double x[3]) +{ + double p = p1->phi[k1+k2] * p1->z1[k1] * p1->z2[k2] / sum * p1->hg[k1][k2]; + int n1 = p1->n1, n2 = p1->n - p1->n1; + if (p < CONTRAST_TINY) return -1; + if (.5*k1/n1 < .5*k2/n2) x[1] += p; + else if (.5*k1/n1 > .5*k2/n2) x[2] += p; + else x[0] += p; + return p * chi2_test(k1, k2, (n1<<1) - k1, (n2<<1) - k2); +} + +static double contrast2(bcf_p1aux_t *p1, double ret[3]) +{ + int k, k1, k2, k10, k20, n1, n2; + double sum; + // get n1 and n2 + n1 = p1->n1; n2 = p1->n - p1->n1; + if (n1 <= 0 || n2 <= 0) return 0.; + if (p1->hg == 0) { // initialize the hypergeometric distribution + /* NB: the hg matrix may take a lot of memory when there are many samples. There is a way + to avoid precomputing this matrix, but it is slower and quite intricate. The following + computation in this block can be accelerated with a similar strategy, but perhaps this + is not a serious concern for now. */ + double tmp = lgamma(2*(n1+n2)+1) - (lgamma(2*n1+1) + lgamma(2*n2+1)); + p1->hg = (double**) calloc(2*n1+1, sizeof(double*)); + for (k1 = 0; k1 <= 2*n1; ++k1) { + p1->hg[k1] = (double*)calloc(2*n2+1, sizeof(double)); + for (k2 = 0; k2 <= 2*n2; ++k2) + p1->hg[k1][k2] = exp(lgamma(k1+k2+1) + lgamma(p1->M-k1-k2+1) - (lgamma(k1+1) + lgamma(k2+1) + lgamma(2*n1-k1+1) + lgamma(2*n2-k2+1) + tmp)); + } + } + { // compute + long double suml = 0; + for (k = 0; k <= p1->M; ++k) suml += p1->phi[k] * p1->z[k]; + sum = suml; + } + { // get the max k1 and k2 + double max; + int max_k; + for (k = 0, max = 0, max_k = -1; k <= 2*n1; ++k) { + double x = p1->phi1[k] * p1->z1[k]; + if (x > max) max = x, max_k = k; + } + k10 = max_k; + for (k = 0, max = 0, max_k = -1; k <= 2*n2; ++k) { + double x = p1->phi2[k] * p1->z2[k]; + if (x > max) max = x, max_k = k; + } + k20 = max_k; + } + { // We can do the following with one nested loop, but that is an O(N^2) thing. The following code block is much faster for large N. + double x[3], y; + long double z = 0., L[2]; + x[0] = x[1] = x[2] = 0; L[0] = L[1] = 0; + for (k1 = k10; k1 >= 0; --k1) { + for (k2 = k20; k2 >= 0; --k2) { + if ((y = contrast2_aux(p1, sum, k1, k2, x)) < 0) break; + else z += y; + } + for (k2 = k20 + 1; k2 <= 2*n2; ++k2) { + if ((y = contrast2_aux(p1, sum, k1, k2, x)) < 0) break; + else z += y; + } + } + ret[0] = x[0]; ret[1] = x[1]; ret[2] = x[2]; + x[0] = x[1] = x[2] = 0; + for (k1 = k10 + 1; k1 <= 2*n1; ++k1) { + for (k2 = k20; k2 >= 0; --k2) { + if ((y = contrast2_aux(p1, sum, k1, k2, x)) < 0) break; + else z += y; + } + for (k2 = k20 + 1; k2 <= 2*n2; ++k2) { + if ((y = contrast2_aux(p1, sum, k1, k2, x)) < 0) break; + else z += y; + } + } + ret[0] += x[0]; ret[1] += x[1]; ret[2] += x[2]; + if (ret[0] + ret[1] + ret[2] < 0.95) { // in case of bad things happened + ret[0] = ret[1] = ret[2] = 0; L[0] = L[1] = 0; + for (k1 = 0, z = 0.; k1 <= 2*n1; ++k1) + for (k2 = 0; k2 <= 2*n2; ++k2) + if ((y = contrast2_aux(p1, sum, k1, k2, ret)) >= 0) z += y; + if (ret[0] + ret[1] + ret[2] < 0.95) // It seems that this may be caused by floating point errors. I do not really understand why... + z = 1.0, ret[0] = ret[1] = ret[2] = 1./3; + } + return (double)z; + } +} + +static double mc_cal_afs(bcf_p1aux_t *ma, double *p_ref_folded, double *p_var_folded) +{ + int k; + long double sum = 0., sum2; + double *phi = ma->is_indel? ma->phi_indel : ma->phi; + memset(ma->afs1, 0, sizeof(double) * (ma->M + 1)); + mc_cal_y(ma); + // compute AFS + // MP15: is this using equation 20 from doi:10.1093/bioinformatics/btr509? + for (k = 0, sum = 0.; k <= ma->M; ++k) + sum += (long double)phi[k] * ma->z[k]; + for (k = 0; k <= ma->M; ++k) { + ma->afs1[k] = phi[k] * ma->z[k] / sum; + if (isnan(ma->afs1[k]) || isinf(ma->afs1[k])) return -1.; + } + // compute folded variant probability + for (k = 0, sum = 0.; k <= ma->M; ++k) + sum += (long double)(phi[k] + phi[ma->M - k]) / 2. * ma->z[k]; + for (k = 1, sum2 = 0.; k < ma->M; ++k) + sum2 += (long double)(phi[k] + phi[ma->M - k]) / 2. * ma->z[k]; + *p_var_folded = sum2 / sum; + *p_ref_folded = (phi[k] + phi[ma->M - k]) / 2. * (ma->z[ma->M] + ma->z[0]) / sum; + // the expected frequency + for (k = 0, sum = 0.; k <= ma->M; ++k) { + ma->afs[k] += ma->afs1[k]; + sum += k * ma->afs1[k]; + } + return sum / ma->M; +} + +int bcf_p1_cal(call_t *call, bcf1_t *b, int do_contrast, bcf_p1aux_t *ma, bcf_p1rst_t *rst) +{ + int i, k; + long double sum = 0.; + ma->is_indel = bcf_is_snp(b) ? 0 : 1; + rst->perm_rank = -1; + + ma->PL = call->PLs; + ma->PL_len = call->nPLs / b->n_sample; + if (b->n_allele < 2) return -1; // FIXME: find a better solution + + rst->rank0 = cal_pdg(b, ma); + rst->f_exp = mc_cal_afs(ma, &rst->p_ref_folded, &rst->p_var_folded); + rst->p_ref = ma->afs1[ma->M]; + for (k = 0, sum = 0.; k < ma->M; ++k) + sum += ma->afs1[k]; + rst->p_var = (double)sum; + { // compute the allele count + double max = -1; + rst->ac = -1; + for (k = 0; k <= ma->M; ++k) + if (max < ma->z[k]) max = ma->z[k], rst->ac = k; + rst->ac = ma->M - rst->ac; + } + // calculate f_flat and f_em + for (k = 0, sum = 0.; k <= ma->M; ++k) + sum += (long double)ma->z[k]; + rst->f_flat = 0.; + for (k = 0; k <= ma->M; ++k) { + double p = ma->z[k] / sum; + rst->f_flat += k * p; + } + rst->f_flat /= ma->M; + { // estimate equal-tail credible interval (95% level) + int l, h; + double p; + for (i = 0, p = 0.; i <= ma->M; ++i) + if (p + ma->afs1[i] > 0.025) break; + else p += ma->afs1[i]; + l = i; + for (i = ma->M, p = 0.; i >= 0; --i) + if (p + ma->afs1[i] > 0.025) break; + else p += ma->afs1[i]; + h = i; + rst->cil = (double)(ma->M - h) / ma->M; rst->cih = (double)(ma->M - l) / ma->M; + } + if (ma->n1 > 0) { // compute LRT + double max0, max1, max2; + for (k = 0, max0 = -1; k <= ma->M; ++k) + if (max0 < ma->z[k]) max0 = ma->z[k]; + for (k = 0, max1 = -1; k <= ma->n1 * 2; ++k) + if (max1 < ma->z1[k]) max1 = ma->z1[k]; + for (k = 0, max2 = -1; k <= ma->M - ma->n1 * 2; ++k) + if (max2 < ma->z2[k]) max2 = ma->z2[k]; + rst->lrt = log(max1 * max2 / max0); + rst->lrt = rst->lrt < 0? 1 : kf_gammaq(.5, rst->lrt); + } else rst->lrt = -1.0; + rst->cmp[0] = rst->cmp[1] = rst->cmp[2] = rst->p_chi2 = -1.0; + if (do_contrast && rst->p_var > 0.5) // skip contrast2() if the locus is a strong non-variant + rst->p_chi2 = contrast2(ma, rst->cmp); + return 0; +} + +void bcf_p1_dump_afs(bcf_p1aux_t *ma) +{ + int k; + fprintf(stderr, "[afs]"); + for (k = 0; k <= ma->M; ++k) + fprintf(stderr, " %d:%.3lf", k, ma->afs[ma->M - k]); + fprintf(stderr, "\n"); + memset(ma->afs, 0, sizeof(double) * (ma->M + 1)); +} diff --git a/bcftools/prob1.c.pysam.c b/bcftools/prob1.c.pysam.c new file mode 100644 index 0000000..bd73e1d --- /dev/null +++ b/bcftools/prob1.c.pysam.c @@ -0,0 +1,535 @@ +#include "bcftools.pysam.h" + +/* prob1.c -- mathematical utility functions. + + Copyright (C) 2010, 2011 Broad Institute. + Copyright (C) 2012, 2013 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "prob1.h" + +// #include "kstring.h" +// #include "kseq.h" +// KSTREAM_INIT(gzFile, gzread, 16384) + +#define MC_MAX_EM_ITER 16 +#define MC_EM_EPS 1e-5 +#define MC_DEF_INDEL 0.15 + +gzFile bcf_p1_fp_lk; + +void bcf_p1_indel_prior(bcf_p1aux_t *ma, double x) +{ + int i; + for (i = 0; i < ma->M; ++i) + ma->phi_indel[i] = ma->phi[i] * x; + ma->phi_indel[ma->M] = 1. - ma->phi[ma->M] * x; +} + +static void init_prior(int type, double theta, int M, double *phi) +{ + int i; + if (type == MC_PTYPE_COND2) { + for (i = 0; i <= M; ++i) + phi[i] = 2. * (i + 1) / (M + 1) / (M + 2); + } else if (type == MC_PTYPE_FLAT) { + for (i = 0; i <= M; ++i) + phi[i] = 1. / (M + 1); + } else { + double sum; + for (i = 0, sum = 0.; i < M; ++i) + sum += (phi[i] = theta / (M - i)); + phi[M] = 1. - sum; + } +} + +void bcf_p1_init_prior(bcf_p1aux_t *ma, int type, double theta) +{ + init_prior(type, theta, ma->M, ma->phi); + bcf_p1_indel_prior(ma, MC_DEF_INDEL); +} + +void bcf_p1_init_subprior(bcf_p1aux_t *ma, int type, double theta) +{ + if (ma->n1 <= 0 || ma->n1 >= ma->M) return; + init_prior(type, theta, 2*ma->n1, ma->phi1); + init_prior(type, theta, 2*(ma->n - ma->n1), ma->phi2); +} + + +/* Initialise a bcf_p1aux_t */ +bcf_p1aux_t *bcf_p1_init(int n_smpl, uint8_t *ploidy) +{ + bcf_p1aux_t *ma; + int i; + ma = (bcf_p1aux_t*) calloc(1, sizeof(bcf_p1aux_t)); + ma->n1 = -1; + ma->n = n_smpl; + ma->M = 2 * n_smpl; + if (ploidy) { + ma->ploidy = (uint8_t*) malloc(n_smpl); + memcpy(ma->ploidy, ploidy, n_smpl); + for (i = 0, ma->M = 0; i < n_smpl; ++i) ma->M += ploidy[i]; + if (ma->M == 2 * n_smpl) { + free(ma->ploidy); + ma->ploidy = 0; + } + } + ma->q2p = (double*) calloc(256, sizeof(double)); + ma->pdg = (double*) calloc(3 * ma->n, sizeof(double)); + ma->phi = (double*) calloc(ma->M + 1, sizeof(double)); + ma->phi_indel = (double*) calloc(ma->M + 1, sizeof(double)); + ma->phi1 = (double*) calloc(ma->M + 1, sizeof(double)); + ma->phi2 = (double*) calloc(ma->M + 1, sizeof(double)); + ma->z = (double*) calloc(ma->M + 1, sizeof(double)); + ma->zswap = (double*) calloc(ma->M + 1, sizeof(double)); + ma->z1 = (double*) calloc(ma->M + 1, sizeof(double)); // actually we do not need this large + ma->z2 = (double*) calloc(ma->M + 1, sizeof(double)); + ma->afs = (double*) calloc(ma->M + 1, sizeof(double)); + ma->afs1 = (double*) calloc(ma->M + 1, sizeof(double)); + ma->lf = (double*) calloc(ma->M + 1, sizeof(double)); + for (i = 0; i < 256; ++i) + ma->q2p[i] = pow(10., -i / 10.); + for (i = 0; i <= ma->M; ++i) ma->lf[i] = lgamma(i + 1); + bcf_p1_init_prior(ma, MC_PTYPE_FULL, 1e-3); // the simplest prior + return ma; +} + +int bcf_p1_get_M(bcf_p1aux_t *b) { return b->M; } + +int bcf_p1_set_n1(bcf_p1aux_t *b, int n1) +{ + if (n1 == 0 || n1 >= b->n) return -1; + if (b->M != b->n * 2) { + fprintf(bcftools_stderr, "[%s] unable to set `n1' when there are haploid samples.\n", __func__); + return -1; + } + b->n1 = n1; + return 0; +} + +void bcf_p1_destroy(bcf_p1aux_t *ma) +{ + if (ma) { + int k; + free(ma->lf); + if (ma->hg && ma->n1 > 0) { + for (k = 0; k <= 2*ma->n1; ++k) free(ma->hg[k]); + free(ma->hg); + } + free(ma->ploidy); free(ma->q2p); free(ma->pdg); + free(ma->phi); free(ma->phi_indel); free(ma->phi1); free(ma->phi2); + free(ma->z); free(ma->zswap); free(ma->z1); free(ma->z2); + free(ma->afs); free(ma->afs1); + free(ma); + } +} + +extern double kf_gammap(double s, double z); +int test16(bcf1_t *b, anno16_t *a); + +/* Calculate P(D|g) */ +static int cal_pdg(const bcf1_t *b, bcf_p1aux_t *ma) +{ + int i, j; + long p_a[16], *p=p_a, tmp; + if (b->n_allele > 16) + p = (long*) malloc(b->n_allele * sizeof(long)); + memset(p, 0, sizeof(long) * b->n_allele); + + // Set P(D|g) for each sample and sum phread likelihoods across all samples to create lk + for (j = 0; j < ma->n; ++j) { + // Fetch the PL array for the sample + const int *pi = ma->PL + j * ma->PL_len; + // Fetch the P(D|g) array for the sample + double *pdg = ma->pdg + j * 3; + pdg[0] = ma->q2p[pi[2]]; pdg[1] = ma->q2p[pi[1]]; pdg[2] = ma->q2p[pi[0]]; + for (i = 0; i < b->n_allele; ++i) + p[i] += (int)pi[(i+1)*(i+2)/2-1]; + } + for (i = 0; i < b->n_allele; ++i) p[i] = p[i]<<4 | i; + for (i = 1; i < b->n_allele; ++i) // insertion sort + for (j = i; j > 0 && p[j] < p[j-1]; --j) + tmp = p[j], p[j] = p[j-1], p[j-1] = tmp; + for (i = b->n_allele - 1; i >= 0; --i) + if ((p[i]&0xf) == 0) break; + if (p != p_a) + free(p); + return i; +} + + +/* f0 is freq of the ref allele */ +int bcf_p1_call_gt(const bcf_p1aux_t *ma, double f0, int k, int is_var) +{ + double sum, g[3]; + double max, f3[3], *pdg = ma->pdg + k * 3; + int q, i, max_i, ploidy; + /* determine ploidy */ + ploidy = ma->ploidy? ma->ploidy[k] : 2; + if (ploidy == 2) { + /* given allele frequency we can determine how many of each + * genotype we have by HWE p=1-q PP=p^2 PQ&QP=2*p*q QQ=q^2 */ + f3[0] = (1.-f0)*(1.-f0); f3[1] = 2.*f0*(1.-f0); f3[2] = f0*f0; + } else { + f3[0] = 1. - f0; f3[1] = 0; f3[2] = f0; + } + for (i = 0, sum = 0.; i < 3; ++i) + sum += (g[i] = pdg[i] * f3[i]); + /* normalise g and then determine max */ + for (i = 0, max = -1., max_i = 0; i < 3; ++i) { + g[i] /= sum; + if (g[i] > max) max = g[i], max_i = i; + } + if ( !is_var ) { max_i = 2; max = g[2]; } // force 0/0 genotype if the site is non-variant + max = 1. - max; + if (max < 1e-308) max = 1e-308; + q = (int)(-4.343 * log(max) + .499); + if (q > 99) q = 99; + return q<<2|max_i; +} + +// If likelihoods fall below this they get squashed to 0 +#define TINY 1e-20 +static void mc_cal_y_core(bcf_p1aux_t *ma, int beg) +{ + double *z[2], *tmp, *pdg; + int _j, last_min, last_max; + assert(beg == 0 || ma->M == ma->n*2); + z[0] = ma->z; + z[1] = ma->zswap; + pdg = ma->pdg; + memset(z[0], 0, sizeof(double) * (ma->M + 1)); + memset(z[1], 0, sizeof(double) * (ma->M + 1)); + z[0][0] = 1.; + last_min = last_max = 0; + ma->t = 0.; + if (ma->M == ma->n * 2) { + int M = 0; + for (_j = beg; _j < ma->n; ++_j) { + int k, j = _j - beg, _min = last_min, _max = last_max, M0; + double p[3], sum; + M0 = M; M += 2; + // Fetch P(D|g) for this sample + pdg = ma->pdg + _j * 3; + p[0] = pdg[0]; p[1] = 2. * pdg[1]; p[2] = pdg[2]; + for (; _min < _max && z[0][_min] < TINY; ++_min) z[0][_min] = z[1][_min] = 0.; + for (; _max > _min && z[0][_max] < TINY; --_max) z[0][_max] = z[1][_max] = 0.; + _max += 2; + if (_min == 0) k = 0, z[1][k] = (M0-k+1) * (M0-k+2) * p[0] * z[0][k]; + if (_min <= 1) k = 1, z[1][k] = (M0-k+1) * (M0-k+2) * p[0] * z[0][k] + k*(M0-k+2) * p[1] * z[0][k-1]; + for (k = _min < 2? 2 : _min; k <= _max; ++k) + z[1][k] = (M0-k+1)*(M0-k+2) * p[0] * z[0][k] + k*(M0-k+2) * p[1] * z[0][k-1] + k*(k-1)* p[2] * z[0][k-2]; + for (k = _min, sum = 0.; k <= _max; ++k) sum += z[1][k]; + ma->t += log(sum / (M * (M - 1.))); + for (k = _min; k <= _max; ++k) z[1][k] /= sum; + if (_min >= 1) z[1][_min-1] = 0.; + if (_min >= 2) z[1][_min-2] = 0.; + // If we are not on the last sample + if (j < ma->n - 1) z[1][_max+1] = z[1][_max+2] = 0.; + if (_j == ma->n1 - 1) { // set pop1; ma->n1==-1 when unset + ma->t1 = ma->t; + memcpy(ma->z1, z[1], sizeof(double) * (ma->n1 * 2 + 1)); + } + tmp = z[0]; z[0] = z[1]; z[1] = tmp; + last_min = _min; last_max = _max; + } + //for (_j = 0; _j < last_min; ++_j) z[0][_j] = 0.; // TODO: are these necessary? + //for (_j = last_max + 1; _j < ma->M; ++_j) z[0][_j] = 0.; + } else { // this block is very similar to the block above; these two might be merged in future + int j, M = 0; + for (j = 0; j < ma->n; ++j) { + int k, M0, _min = last_min, _max = last_max; + double p[3], sum; + // Fetch P(D|g) for this sample + pdg = ma->pdg + j * 3; + for (; _min < _max && z[0][_min] < TINY; ++_min) z[0][_min] = z[1][_min] = 0.; + for (; _max > _min && z[0][_max] < TINY; --_max) z[0][_max] = z[1][_max] = 0.; + M0 = M; + M += ma->ploidy[j]; + if (ma->ploidy[j] == 1) { + p[0] = pdg[0]; p[1] = pdg[2]; + _max++; + if (_min == 0) k = 0, z[1][k] = (M0+1-k) * p[0] * z[0][k]; + for (k = _min < 1? 1 : _min; k <= _max; ++k) + z[1][k] = (M0+1-k) * p[0] * z[0][k] + k * p[1] * z[0][k-1]; + for (k = _min, sum = 0.; k <= _max; ++k) sum += z[1][k]; + ma->t += log(sum / M); + for (k = _min; k <= _max; ++k) z[1][k] /= sum; + if (_min >= 1) z[1][_min-1] = 0.; + // If we are not on the last sample + if (j < ma->n - 1) z[1][_max+1] = 0.; + } else if (ma->ploidy[j] == 2) { + p[0] = pdg[0]; p[1] = 2 * pdg[1]; p[2] = pdg[2]; + _max += 2; + if (_min == 0) k = 0, z[1][k] = (M0-k+1) * (M0-k+2) * p[0] * z[0][k]; + if (_min <= 1) k = 1, z[1][k] = (M0-k+1) * (M0-k+2) * p[0] * z[0][k] + k*(M0-k+2) * p[1] * z[0][k-1]; + for (k = _min < 2? 2 : _min; k <= _max; ++k) + z[1][k] = (M0-k+1)*(M0-k+2) * p[0] * z[0][k] + k*(M0-k+2) * p[1] * z[0][k-1] + k*(k-1)* p[2] * z[0][k-2]; + for (k = _min, sum = 0.; k <= _max; ++k) sum += z[1][k]; + ma->t += log(sum / (M * (M - 1.))); + for (k = _min; k <= _max; ++k) z[1][k] /= sum; + if (_min >= 1) z[1][_min-1] = 0.; + if (_min >= 2) z[1][_min-2] = 0.; + // If we are not on the last sample + if (j < ma->n - 1) z[1][_max+1] = z[1][_max+2] = 0.; + } + tmp = z[0]; z[0] = z[1]; z[1] = tmp; + last_min = _min; last_max = _max; + } + } + if (z[0] != ma->z) memcpy(ma->z, z[0], sizeof(double) * (ma->M + 1)); + if (bcf_p1_fp_lk) + gzwrite(bcf_p1_fp_lk, ma->z, sizeof(double) * (ma->M + 1)); +} + +static void mc_cal_y(bcf_p1aux_t *ma) +{ + if (ma->n1 > 0 && ma->n1 < ma->n && ma->M == ma->n * 2) { // NB: ma->n1 is ineffective when there are haploid samples + int k; + long double x; + memset(ma->z1, 0, sizeof(double) * (2 * ma->n1 + 1)); + memset(ma->z2, 0, sizeof(double) * (2 * (ma->n - ma->n1) + 1)); + ma->t1 = ma->t2 = 0.; + mc_cal_y_core(ma, ma->n1); + ma->t2 = ma->t; + memcpy(ma->z2, ma->z, sizeof(double) * (2 * (ma->n - ma->n1) + 1)); + mc_cal_y_core(ma, 0); + // rescale z + x = expl(ma->t - (ma->t1 + ma->t2)); + for (k = 0; k <= ma->M; ++k) ma->z[k] *= x; + } else mc_cal_y_core(ma, 0); +} + +#define CONTRAST_TINY 1e-30 + +extern double kf_gammaq(double s, double z); // incomplete gamma function for chi^2 test + +static inline double chi2_test(int a, int b, int c, int d) +{ + double x, z; + x = (double)(a+b) * (c+d) * (b+d) * (a+c); + if (x == 0.) return 1; + z = a * d - b * c; + return kf_gammaq(.5, .5 * z * z * (a+b+c+d) / x); +} + +// chi2=(a+b+c+d)(ad-bc)^2/[(a+b)(c+d)(a+c)(b+d)] +static inline double contrast2_aux(const bcf_p1aux_t *p1, double sum, int k1, int k2, double x[3]) +{ + double p = p1->phi[k1+k2] * p1->z1[k1] * p1->z2[k2] / sum * p1->hg[k1][k2]; + int n1 = p1->n1, n2 = p1->n - p1->n1; + if (p < CONTRAST_TINY) return -1; + if (.5*k1/n1 < .5*k2/n2) x[1] += p; + else if (.5*k1/n1 > .5*k2/n2) x[2] += p; + else x[0] += p; + return p * chi2_test(k1, k2, (n1<<1) - k1, (n2<<1) - k2); +} + +static double contrast2(bcf_p1aux_t *p1, double ret[3]) +{ + int k, k1, k2, k10, k20, n1, n2; + double sum; + // get n1 and n2 + n1 = p1->n1; n2 = p1->n - p1->n1; + if (n1 <= 0 || n2 <= 0) return 0.; + if (p1->hg == 0) { // initialize the hypergeometric distribution + /* NB: the hg matrix may take a lot of memory when there are many samples. There is a way + to avoid precomputing this matrix, but it is slower and quite intricate. The following + computation in this block can be accelerated with a similar strategy, but perhaps this + is not a serious concern for now. */ + double tmp = lgamma(2*(n1+n2)+1) - (lgamma(2*n1+1) + lgamma(2*n2+1)); + p1->hg = (double**) calloc(2*n1+1, sizeof(double*)); + for (k1 = 0; k1 <= 2*n1; ++k1) { + p1->hg[k1] = (double*)calloc(2*n2+1, sizeof(double)); + for (k2 = 0; k2 <= 2*n2; ++k2) + p1->hg[k1][k2] = exp(lgamma(k1+k2+1) + lgamma(p1->M-k1-k2+1) - (lgamma(k1+1) + lgamma(k2+1) + lgamma(2*n1-k1+1) + lgamma(2*n2-k2+1) + tmp)); + } + } + { // compute + long double suml = 0; + for (k = 0; k <= p1->M; ++k) suml += p1->phi[k] * p1->z[k]; + sum = suml; + } + { // get the max k1 and k2 + double max; + int max_k; + for (k = 0, max = 0, max_k = -1; k <= 2*n1; ++k) { + double x = p1->phi1[k] * p1->z1[k]; + if (x > max) max = x, max_k = k; + } + k10 = max_k; + for (k = 0, max = 0, max_k = -1; k <= 2*n2; ++k) { + double x = p1->phi2[k] * p1->z2[k]; + if (x > max) max = x, max_k = k; + } + k20 = max_k; + } + { // We can do the following with one nested loop, but that is an O(N^2) thing. The following code block is much faster for large N. + double x[3], y; + long double z = 0., L[2]; + x[0] = x[1] = x[2] = 0; L[0] = L[1] = 0; + for (k1 = k10; k1 >= 0; --k1) { + for (k2 = k20; k2 >= 0; --k2) { + if ((y = contrast2_aux(p1, sum, k1, k2, x)) < 0) break; + else z += y; + } + for (k2 = k20 + 1; k2 <= 2*n2; ++k2) { + if ((y = contrast2_aux(p1, sum, k1, k2, x)) < 0) break; + else z += y; + } + } + ret[0] = x[0]; ret[1] = x[1]; ret[2] = x[2]; + x[0] = x[1] = x[2] = 0; + for (k1 = k10 + 1; k1 <= 2*n1; ++k1) { + for (k2 = k20; k2 >= 0; --k2) { + if ((y = contrast2_aux(p1, sum, k1, k2, x)) < 0) break; + else z += y; + } + for (k2 = k20 + 1; k2 <= 2*n2; ++k2) { + if ((y = contrast2_aux(p1, sum, k1, k2, x)) < 0) break; + else z += y; + } + } + ret[0] += x[0]; ret[1] += x[1]; ret[2] += x[2]; + if (ret[0] + ret[1] + ret[2] < 0.95) { // in case of bad things happened + ret[0] = ret[1] = ret[2] = 0; L[0] = L[1] = 0; + for (k1 = 0, z = 0.; k1 <= 2*n1; ++k1) + for (k2 = 0; k2 <= 2*n2; ++k2) + if ((y = contrast2_aux(p1, sum, k1, k2, ret)) >= 0) z += y; + if (ret[0] + ret[1] + ret[2] < 0.95) // It seems that this may be caused by floating point errors. I do not really understand why... + z = 1.0, ret[0] = ret[1] = ret[2] = 1./3; + } + return (double)z; + } +} + +static double mc_cal_afs(bcf_p1aux_t *ma, double *p_ref_folded, double *p_var_folded) +{ + int k; + long double sum = 0., sum2; + double *phi = ma->is_indel? ma->phi_indel : ma->phi; + memset(ma->afs1, 0, sizeof(double) * (ma->M + 1)); + mc_cal_y(ma); + // compute AFS + // MP15: is this using equation 20 from doi:10.1093/bioinformatics/btr509? + for (k = 0, sum = 0.; k <= ma->M; ++k) + sum += (long double)phi[k] * ma->z[k]; + for (k = 0; k <= ma->M; ++k) { + ma->afs1[k] = phi[k] * ma->z[k] / sum; + if (isnan(ma->afs1[k]) || isinf(ma->afs1[k])) return -1.; + } + // compute folded variant probability + for (k = 0, sum = 0.; k <= ma->M; ++k) + sum += (long double)(phi[k] + phi[ma->M - k]) / 2. * ma->z[k]; + for (k = 1, sum2 = 0.; k < ma->M; ++k) + sum2 += (long double)(phi[k] + phi[ma->M - k]) / 2. * ma->z[k]; + *p_var_folded = sum2 / sum; + *p_ref_folded = (phi[k] + phi[ma->M - k]) / 2. * (ma->z[ma->M] + ma->z[0]) / sum; + // the expected frequency + for (k = 0, sum = 0.; k <= ma->M; ++k) { + ma->afs[k] += ma->afs1[k]; + sum += k * ma->afs1[k]; + } + return sum / ma->M; +} + +int bcf_p1_cal(call_t *call, bcf1_t *b, int do_contrast, bcf_p1aux_t *ma, bcf_p1rst_t *rst) +{ + int i, k; + long double sum = 0.; + ma->is_indel = bcf_is_snp(b) ? 0 : 1; + rst->perm_rank = -1; + + ma->PL = call->PLs; + ma->PL_len = call->nPLs / b->n_sample; + if (b->n_allele < 2) return -1; // FIXME: find a better solution + + rst->rank0 = cal_pdg(b, ma); + rst->f_exp = mc_cal_afs(ma, &rst->p_ref_folded, &rst->p_var_folded); + rst->p_ref = ma->afs1[ma->M]; + for (k = 0, sum = 0.; k < ma->M; ++k) + sum += ma->afs1[k]; + rst->p_var = (double)sum; + { // compute the allele count + double max = -1; + rst->ac = -1; + for (k = 0; k <= ma->M; ++k) + if (max < ma->z[k]) max = ma->z[k], rst->ac = k; + rst->ac = ma->M - rst->ac; + } + // calculate f_flat and f_em + for (k = 0, sum = 0.; k <= ma->M; ++k) + sum += (long double)ma->z[k]; + rst->f_flat = 0.; + for (k = 0; k <= ma->M; ++k) { + double p = ma->z[k] / sum; + rst->f_flat += k * p; + } + rst->f_flat /= ma->M; + { // estimate equal-tail credible interval (95% level) + int l, h; + double p; + for (i = 0, p = 0.; i <= ma->M; ++i) + if (p + ma->afs1[i] > 0.025) break; + else p += ma->afs1[i]; + l = i; + for (i = ma->M, p = 0.; i >= 0; --i) + if (p + ma->afs1[i] > 0.025) break; + else p += ma->afs1[i]; + h = i; + rst->cil = (double)(ma->M - h) / ma->M; rst->cih = (double)(ma->M - l) / ma->M; + } + if (ma->n1 > 0) { // compute LRT + double max0, max1, max2; + for (k = 0, max0 = -1; k <= ma->M; ++k) + if (max0 < ma->z[k]) max0 = ma->z[k]; + for (k = 0, max1 = -1; k <= ma->n1 * 2; ++k) + if (max1 < ma->z1[k]) max1 = ma->z1[k]; + for (k = 0, max2 = -1; k <= ma->M - ma->n1 * 2; ++k) + if (max2 < ma->z2[k]) max2 = ma->z2[k]; + rst->lrt = log(max1 * max2 / max0); + rst->lrt = rst->lrt < 0? 1 : kf_gammaq(.5, rst->lrt); + } else rst->lrt = -1.0; + rst->cmp[0] = rst->cmp[1] = rst->cmp[2] = rst->p_chi2 = -1.0; + if (do_contrast && rst->p_var > 0.5) // skip contrast2() if the locus is a strong non-variant + rst->p_chi2 = contrast2(ma, rst->cmp); + return 0; +} + +void bcf_p1_dump_afs(bcf_p1aux_t *ma) +{ + int k; + fprintf(bcftools_stderr, "[afs]"); + for (k = 0; k <= ma->M; ++k) + fprintf(bcftools_stderr, " %d:%.3lf", k, ma->afs[ma->M - k]); + fprintf(bcftools_stderr, "\n"); + memset(ma->afs, 0, sizeof(double) * (ma->M + 1)); +} diff --git a/bcftools/prob1.h b/bcftools/prob1.h new file mode 100644 index 0000000..a3d4b0d --- /dev/null +++ b/bcftools/prob1.h @@ -0,0 +1,93 @@ +/* prob1.h -- mathematical utility functions. + + Copyright (C) 2010, 2011 Broad Institute. + Copyright (C) 2012, 2013 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#ifndef BCF_PROB1_H +#define BCF_PROB1_H + +#include +#include "call.h" + +typedef struct { + int n; // Number of samples + int M; // Total number of chromosomes across all samples (n*2 if all samples are diploid) + int n1; + int is_indel; + uint8_t *ploidy; // haploid or diploid ONLY + double *q2p, *pdg; // q2p maps from phread scaled to real likelihood, pdg -> P(D|g) + double *phi; // Probability of seeing k reference alleles + double *phi_indel; + double *z, *zswap; // aux for afs + double *z1, *z2, *phi1, *phi2; // only calculated when n1 is set + double **hg; // hypergeometric distribution + double *lf; // log factorial + double t, t1, t2; + double *afs, *afs1; // afs: accumulative allele frequency spectrum (AFS); afs1: site posterior distribution + const int *PL; // point to PL + int PL_len; + int cons_llr; // pair and trio calling + int64_t cons_gt; +} bcf_p1aux_t; + +typedef struct { + int rank0, perm_rank; // NB: perm_rank is always set to -1 by bcf_p1_cal() + int ac; // ML alternative allele count + double f_exp, f_flat, p_ref_folded, p_ref, p_var_folded, p_var; + double cil, cih; + double cmp[3], p_chi2, lrt; // used by contrast2() +} bcf_p1rst_t; + +typedef struct { + double p[4]; + double edb, mqb, bqb; // end distance bias, mapQ bias, baseQ bias + int mq, depth, is_tested, d[4]; +} anno16_t; + +#define MC_PTYPE_FULL 1 +#define MC_PTYPE_COND2 2 +#define MC_PTYPE_FLAT 3 + +#ifdef __cplusplus +extern "C" { +#endif + + bcf_p1aux_t *bcf_p1_init(int n_smpl, uint8_t *ploidy); + void bcf_p1_init_prior(bcf_p1aux_t *ma, int type, double theta); + void bcf_p1_init_subprior(bcf_p1aux_t *ma, int type, double theta); + void bcf_p1_destroy(bcf_p1aux_t *ma); + void bcf_p1_set_ploidy(bcf1_t *b, bcf_p1aux_t *ma); + int bcf_p1_cal(call_t *call, bcf1_t *b, int do_contrast, bcf_p1aux_t *ma, bcf_p1rst_t *rst); + int bcf_p1_call_gt(const bcf_p1aux_t *ma, double f0, int k, int is_var); + void bcf_p1_dump_afs(bcf_p1aux_t *ma); + int bcf_p1_read_prior(bcf_p1aux_t *ma, const char *fn); + int bcf_p1_set_n1(bcf_p1aux_t *b, int n1); + void bcf_p1_set_folded(bcf_p1aux_t *p1a); // only effective when set_n1() is not called + + int bcf_em1(call_t *call, const bcf1_t *b, int n1, int flag, double x[10]); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/bcftools/rbuf.h b/bcftools/rbuf.h new file mode 100644 index 0000000..2c0e5b1 --- /dev/null +++ b/bcftools/rbuf.h @@ -0,0 +1,261 @@ +/* rbuf.h -- round buffers. + + Copyright (C) 2013-2014 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#ifndef __RBUF_H__ +#define __RBUF_H__ + +#include + +typedef struct +{ + int m,n,f; // m: allocated size, n: number of elements in the buffer, f: first element +} +rbuf_t; + +/** + * rbuf_init() - initialize round buffer + * @rbuf: the rbuf_t holder + * @size: the maximum number of elements + * + */ +static inline void rbuf_init(rbuf_t *rbuf, int size) +{ + rbuf->m = size; rbuf->n = rbuf->f = 0; +} +/** + * rbuf_kth() - get index of the k-th element of the round buffer + * @rbuf: the rbuf_t holder + * @k: 0-based index. If negative, return k-th element from the end, 1-based + */ +static inline int rbuf_kth(rbuf_t *rbuf, int k) +{ + if ( k >= rbuf->n ) return -1; + if ( k < 0 ) + { + k = rbuf->n + k; + if ( k < 0 ) return -1; + } + int i = k + rbuf->f; + if ( i >= rbuf->m ) i -= rbuf->m; + return i; +} +/** + * rbuf_last() - get index of the last element of the round buffer + * @rbuf: the rbuf_t holder + */ +#define rbuf_last(rbuf) rbuf_kth(rbuf, -1) + +/** + * rbuf_l2ridx() - get 0-based rbuf index which corresponds to i-th linear index + * @rbuf: the rbuf_t holder + * @idx: 0-based linear index + * + * Returns 0-based circular index or -1 if out of bounds + */ +static inline int rbuf_l2ridx(rbuf_t *rbuf, int idx) +{ + if ( idx < 0 || idx >= rbuf->n ) return -1; + if ( idx >= rbuf->f ) + { + int i = idx - rbuf->f; + if ( i >= rbuf->n ) return -1; + return i; + } + int i = rbuf->m - rbuf->f + idx; + if ( i >= rbuf->n ) return -1; + return i; +} + +/** + * rbuf_next() - get index of the next element in the round buffer + * @rbuf: the rbuf_t holder + * @i: pointer to the last rbuf index. Set to -1 before the first call. + * + * Sets i to the next position in the buffer. The return value indicates if + * the position points to a valid element (1) or if there are no more elements + * after *i (0). When the end is reached, *i is set to the first element in the + * buffer. + */ +static inline int rbuf_next(rbuf_t *rbuf, int *i) +{ + if ( !rbuf->n ) return 0; + if ( *i==-1 ) { *i = rbuf->f; return 1; } + int n = (rbuf->f <= *i) ? *i - rbuf->f + 1 : *i + rbuf->m - rbuf->f + 1; + if ( ++(*i) >= rbuf->m ) *i = 0; + if ( n < rbuf->n ) return 1; + *i = rbuf->f; + return 0; +} +/** + * rbuf_prev() - get index of the previous element in the round buffer + * @rbuf: the rbuf_t holder + * @i: pointer to the last rbuf index. Set to -1 before the first call. + * + * Sets i to the previous position in the buffer. The return value indicates if + * the position points to a valid element (1) or if there are no more elements + * before *i (0). + */ +static inline int rbuf_prev(rbuf_t *rbuf, int *i) +{ + if ( !rbuf->n || *i==rbuf->f ) return 0; + if ( *i==-1 ) + { + *i = rbuf_last(rbuf); + return 1; + } + if ( --(*i) < 0 ) *i = rbuf->m - 1; + return 1; +} +/** + * rbuf_prepend() - register new element at the start of the round buffer + * @rbuf: the rbuf_t holder + * + * Returns index of the newly inserted element. + */ +static inline int rbuf_prepend(rbuf_t *rbuf) +{ + if ( rbuf->n < rbuf->m ) rbuf->n++; + + rbuf->f = rbuf->f > 0 ? rbuf->f - 1 : rbuf->m - 1; + return rbuf->f; +} +/** + * rbuf_append() - register new element at the end of the round buffer + * @rbuf: the rbuf_t holder + * + * Returns index of the newly inserted element. + */ +static inline int rbuf_append(rbuf_t *rbuf) +{ + if ( rbuf->n < rbuf->m ) + { + rbuf->n++; + int i = rbuf->f + rbuf->n; + return i <= rbuf->m ? i - 1 : i - rbuf->m - 1; + } + + rbuf->f++; + if ( rbuf->f >= rbuf->m ) + { + rbuf->f = 0; + return rbuf->m - 1; + } + return rbuf->f - 1; +} +/** + * rbuf_shift() - removes first element from the buffer + * @rbuf: the rbuf_t holder + * + * Returns index of the removed element. + */ +static inline int rbuf_shift(rbuf_t *rbuf) +{ + if ( !rbuf->n ) return -1; + int ret = rbuf->f; + rbuf->f++; + if ( rbuf->f >= rbuf->m ) rbuf->f = 0; + rbuf->n--; + return ret; +} +/** + * rbuf_shift_n() - removes first n elements from the buffer + * @rbuf: the rbuf_t holder + * @n: number of elements to remove + */ +static inline void rbuf_shift_n(rbuf_t *rbuf, int n) +{ + if ( n >= rbuf->n ) + { + rbuf->n = rbuf->f = 0; + return; + } + rbuf->n -= n; + rbuf->f += n; + if ( rbuf->f >= rbuf->m ) rbuf->f -= rbuf->m; +} + +/** + * rbuf_expand0() - expand round buffer and set the newly allocated elements to 0 + * @rbuf: the rbuf holder + * @type_t: data type + * @n: requested number of elements + * @data: data array to be realloced + * + * Note: The new array is linearized and leaves the rbuf.f offset untouched, + * thus the size of the new buffer is determined by the current position. + */ +#define rbuf_expand0(rbuf,type_t,n,data) \ +{ \ + if ( n > (rbuf)->m ) \ + { \ + int m = n + (rbuf)->f; \ + m--, m|=m>>1, m|=m>>2, m|=m>>4, m|=m>>8, m|=m>>16, m++; /* kroundup32 */ \ + data = (type_t*) realloc(data, sizeof(type_t)*m); \ + type_t *ptr = data; \ + memset(ptr+(rbuf)->m,0,sizeof(type_t)*(m-(rbuf)->m)); \ + if ( (rbuf)->f ) \ + { \ + memcpy(ptr+(rbuf)->m,ptr,sizeof(type_t)*(rbuf)->f); \ + memset(ptr,0,sizeof(type_t)*(rbuf)->f); \ + } \ + (rbuf)->m = m; \ + } \ +} + +/** + * rbuf_remove_kth() - remove k-th rbuf element (0-based) and memmove the data block + * @rbuf: the rbuf holder + * @type_t: data type + * @k: k-th element to remove + * @data: data array to be modified + */ +#define rbuf_remove_kth(rbuf, type_t, kth, data) \ +{ \ + int k = rbuf_kth(rbuf, kth); \ + if ( k < (rbuf)->f ) /* shrink from back */ \ + { \ + int l = rbuf_kth(rbuf, -1); \ + if ( k < l ) \ + { \ + type_t tmp = (data)[k]; \ + memmove(data+k, data+k+1, (l - k)*sizeof(type_t)); \ + (data)[l] = tmp; \ + } \ + (rbuf)->n--; \ + } \ + else /* shrink from front */ \ + { \ + if ( k > (rbuf)->f ) \ + { \ + type_t tmp = (data)[k]; \ + memmove(&data[(rbuf)->f+1], &data[(rbuf)->f], (k - (rbuf)->f)*sizeof(type_t)); \ + (data)[(rbuf)->f] = tmp; \ + } \ + (rbuf)->f++; \ + (rbuf)->n--; \ + if ( (rbuf)->f == (rbuf)->m ) (rbuf)->f = 0; \ + } \ +} + +#endif diff --git a/bcftools/regidx.c b/bcftools/regidx.c new file mode 100644 index 0000000..84646a8 --- /dev/null +++ b/bcftools/regidx.c @@ -0,0 +1,598 @@ +/* + Copyright (C) 2014-2016 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include +#include +#include +#include +#include +#include "regidx.h" + +#define MAX_COOR_0 REGIDX_MAX // CSI and hts_itr_query limit, 0-based + +#define iBIN(x) ((x)>>13) + +typedef struct +{ + uint32_t beg, end; +} +reg_t; + +typedef struct +{ + uint32_t pos, ireg; // y-coordinate and a pointer to reglist.reg and reglist.dat +} +pos_t; + +typedef struct _reglist_t reglist_t; + +typedef struct +{ + uint32_t beg, end, ireg; // query coordinates and the active region + regidx_t *ridx; + reglist_t *list; + int active; +} +_itr_t; + +// List of regions for one chromosome. +struct _reglist_t +{ + uint32_t *idx, nidx; // index to list.reg+1 + uint32_t nreg, mreg; // n:used, m:allocated + reg_t *reg; // regions + void *dat; // payload data + char *seq; // sequence name + int unsorted; + +}; + +// Container of all sequences +struct _regidx_t +{ + int nseq, mseq; // n:used, m:alloced + reglist_t *seq; // regions for each sequence + void *seq2regs; // hash for fast lookup from chr name to regions + char **seq_names; + regidx_free_f free; // function to free any data allocated by regidx_parse_f + regidx_parse_f parse; // parse one input line + void *usr; // user data to pass to regidx_parse_f + int payload_size; + void *payload; // temporary payload data set by regidx_parse_f (sequence is not known beforehand) + kstring_t str; +}; + +int regidx_seq_nregs(regidx_t *idx, const char *seq) +{ + int iseq; + if ( khash_str2int_get(idx->seq2regs, seq, &iseq)!=0 ) return 0; // no such sequence + return idx->seq[iseq].nreg; +} + +int regidx_nregs(regidx_t *idx) +{ + int i, nreg = 0; + for (i=0; inseq; i++) nreg += idx->seq[i].nreg; + return nreg; +} + +char **regidx_seq_names(regidx_t *idx, int *n) +{ + *n = idx->nseq; + return idx->seq_names; +} + +int regidx_insert_list(regidx_t *idx, char *line, char delim) +{ + kstring_t tmp = {0,0,0}; + char *ss = line; + while ( *ss ) + { + char *se = ss; + while ( *se && *se!=delim ) se++; + tmp.l = 0; + kputsn(ss, se-ss, &tmp); + if ( regidx_insert(idx,tmp.s) < 0 ) + { + free(tmp.s); + return -1; + } + if ( !*se ) break; + ss = se+1; + } + free(tmp.s); + return 0; +} + +static inline int cmp_regs(reg_t *a, reg_t *b) +{ + if ( a->beg < b->beg ) return -1; + if ( a->beg > b->beg ) return 1; + if ( a->end < b->end ) return 1; // longer intervals come first + if ( a->end > b->end ) return -1; + return 0; +} +static int cmp_reg_ptrs(const void *a, const void *b) +{ + return cmp_regs((reg_t*)a,(reg_t*)b); +} +static int cmp_reg_ptrs2(const void *a, const void *b) +{ + return cmp_regs(*((reg_t**)a),*((reg_t**)b)); +} + +inline int regidx_push(regidx_t *idx, char *chr_beg, char *chr_end, uint32_t beg, uint32_t end, void *payload) +{ + if ( beg > MAX_COOR_0 ) beg = MAX_COOR_0; + if ( end > MAX_COOR_0 ) end = MAX_COOR_0; + + int rid; + idx->str.l = 0; + kputsn(chr_beg, chr_end-chr_beg+1, &idx->str); + if ( khash_str2int_get(idx->seq2regs, idx->str.s, &rid)!=0 ) + { + // new chromosome + idx->nseq++; + int m_prev = idx->mseq; + hts_expand0(reglist_t,idx->nseq,idx->mseq,idx->seq); + hts_expand0(char*,idx->nseq,m_prev,idx->seq_names); + idx->seq_names[idx->nseq-1] = strdup(idx->str.s); + rid = khash_str2int_inc(idx->seq2regs, idx->seq_names[idx->nseq-1]); + } + + reglist_t *list = &idx->seq[rid]; + list->seq = idx->seq_names[rid]; + list->nreg++; + int mreg = list->mreg; + hts_expand(reg_t,list->nreg,list->mreg,list->reg); + list->reg[list->nreg-1].beg = beg; + list->reg[list->nreg-1].end = end; + if ( idx->payload_size ) + { + if ( mreg != list->mreg ) list->dat = realloc(list->dat,idx->payload_size*list->mreg); + memcpy((char *)list->dat + idx->payload_size*(list->nreg-1), payload, idx->payload_size); + } + if ( !list->unsorted && list->nreg>1 && cmp_regs(&list->reg[list->nreg-2],&list->reg[list->nreg-1])>0 ) list->unsorted = 1; + return 0; +} + +int regidx_insert(regidx_t *idx, char *line) +{ + if ( !line ) return 0; + char *chr_from, *chr_to; + uint32_t beg,end; + int ret = idx->parse(line,&chr_from,&chr_to,&beg,&end,idx->payload,idx->usr); + if ( ret==-2 ) return -1; // error + if ( ret==-1 ) return 0; // skip the line + regidx_push(idx, chr_from,chr_to,beg,end,idx->payload); + return 0; +} + +regidx_t *regidx_init(const char *fname, regidx_parse_f parser, regidx_free_f free_f, size_t payload_size, void *usr_dat) +{ + if ( !parser ) + { + if ( !fname ) parser = regidx_parse_tab; + else + { + int len = strlen(fname); + if ( len>=7 && !strcasecmp(".bed.gz",fname+len-7) ) + parser = regidx_parse_bed; + else if ( len>=8 && !strcasecmp(".bed.bgz",fname+len-8) ) + parser = regidx_parse_bed; + else if ( len>=4 && !strcasecmp(".bed",fname+len-4) ) + parser = regidx_parse_bed; + else + parser = regidx_parse_tab; + } + } + + regidx_t *idx = (regidx_t*) calloc(1,sizeof(regidx_t)); + idx->free = free_f; + idx->parse = parser; + idx->usr = usr_dat; + idx->seq2regs = khash_str2int_init(); + idx->payload_size = payload_size; + if ( payload_size ) idx->payload = malloc(payload_size); + + if ( !fname ) return idx; + + kstring_t str = {0,0,0}; + + htsFile *fp = hts_open(fname,"r"); + if ( !fp ) goto error; + + while ( hts_getline(fp, KS_SEP_LINE, &str) > 0 ) + { + if ( regidx_insert(idx, str.s) ) goto error; + } + + free(str.s); + hts_close(fp); + return idx; + +error: + free(str.s); + if ( fp ) hts_close(fp); + regidx_destroy(idx); + return NULL; +} + +void regidx_destroy(regidx_t *idx) +{ + int i, j; + for (i=0; inseq; i++) + { + reglist_t *list = &idx->seq[i]; + if ( idx->free ) + { + for (j=0; jnreg; j++) + idx->free((char *)list->dat + idx->payload_size*j); + } + free(list->dat); + free(list->reg); + free(list->idx); + } + free(idx->seq_names); + free(idx->seq); + free(idx->str.s); + free(idx->payload); + khash_str2int_destroy_free(idx->seq2regs); + free(idx); +} + +int _reglist_build_index(regidx_t *regidx, reglist_t *list) +{ + int i; + if ( list->unsorted ) + { + if ( !regidx->payload_size ) + qsort(list->reg,list->nreg,sizeof(reg_t),cmp_reg_ptrs); + else + { + reg_t **ptr = (reg_t**) malloc(sizeof(reg_t*)*list->nreg); + for (i=0; inreg; i++) ptr[i] = list->reg + i; + qsort(ptr,list->nreg,sizeof(*ptr),cmp_reg_ptrs2); + + void *tmp_dat = malloc(regidx->payload_size*list->nreg); + for (i=0; inreg; i++) + { + size_t iori = ptr[i] - list->reg; + memcpy((char *)tmp_dat+i*regidx->payload_size, + (char *)list->dat+iori*regidx->payload_size, + regidx->payload_size); + } + free(list->dat); + list->dat = tmp_dat; + + reg_t *tmp_reg = (reg_t*) malloc(sizeof(reg_t)*list->nreg); + for (i=0; inreg; i++) + { + size_t iori = ptr[i] - list->reg; + tmp_reg[i] = list->reg[iori]; + } + free(ptr); + free(list->reg); + list->reg = tmp_reg; + list->mreg = list->nreg; + } + list->unsorted = 0; + } + + list->nidx = 0; + int j,k, midx = 0; + for (j=0; jnreg; j++) + { + int ibeg = iBIN(list->reg[j].beg); + int iend = iBIN(list->reg[j].end); + if ( midx <= iend ) + { + int old_midx = midx; + midx = iend + 1; + kroundup32(midx); + list->idx = (uint32_t*) realloc(list->idx, midx*sizeof(uint32_t)); + memset(list->idx+old_midx, 0, sizeof(uint32_t)*(midx-old_midx)); + } + if ( ibeg==iend ) + { + if ( !list->idx[ibeg] ) list->idx[ibeg] = j + 1; + } + else + { + for (k=ibeg; k<=iend; k++) + if ( !list->idx[k] ) list->idx[k] = j + 1; + } + if ( list->nidx < iend+1 ) list->nidx = iend+1; + } + + return 0; +} + +int regidx_overlap(regidx_t *regidx, const char *chr, uint32_t beg, uint32_t end, regitr_t *regitr) +{ + if ( regitr ) regitr->seq = NULL; + + int iseq, ireg; + if ( khash_str2int_get(regidx->seq2regs, chr, &iseq)!=0 ) return 0; // no such sequence + + reglist_t *list = ®idx->seq[iseq]; + if ( !list->nreg ) return 0; + + if ( list->nreg==1 ) + { + if ( beg > list->reg[0].end ) return 0; + if ( end < list->reg[0].beg ) return 0; + ireg = 0; + } + else + { + if ( !list->idx ) + _reglist_build_index(regidx,list); + + int ibeg = iBIN(beg); + if ( ibeg >= list->nidx ) return 0; // beg is too big + + // find a matching region + uint32_t i = list->idx[ibeg]; + if ( !i ) + { + int iend = iBIN(end); + if ( iend > list->nidx ) iend = list->nidx; + for (i=ibeg; iidx[i] ) break; + if ( i==iend ) return 0; + i = list->idx[i]; + } + + for (ireg=i-1; iregnreg; ireg++) + { + if ( list->reg[ireg].beg > end ) return 0; // no match, past the query region + if ( list->reg[ireg].end >= beg && list->reg[ireg].beg <= end ) break; // found + } + + if ( ireg >= list->nreg ) return 0; // no match + } + + if ( !regitr ) return 1; // match, but no more info to save + + // may need to iterate over the matching regions later + _itr_t *itr = (_itr_t*)regitr->itr; + itr->ridx = regidx; + itr->list = list; + itr->beg = beg; + itr->end = end; + itr->ireg = ireg; + itr->active = 0; + + regitr->seq = list->seq; + regitr->beg = list->reg[ireg].beg; + regitr->end = list->reg[ireg].end; + if ( regidx->payload_size ) + regitr->payload = (char *)list->dat + regidx->payload_size*ireg; + + return 1; +} + +int regidx_parse_bed(const char *line, char **chr_beg, char **chr_end, uint32_t *beg, uint32_t *end, void *payload, void *usr) +{ + char *ss = (char*) line; + while ( *ss && isspace(*ss) ) ss++; + if ( !*ss ) return -1; // skip blank lines + if ( *ss=='#' ) return -1; // skip comments + + char *se = ss; + while ( *se && !isspace(*se) ) se++; + + *chr_beg = ss; + *chr_end = se-1; + + if ( !*se ) + { + // just the chromosome name + *beg = 0; + *end = MAX_COOR_0; + return 0; + } + + ss = se+1; + *beg = strtod(ss, &se); + if ( ss==se ) { fprintf(stderr,"Could not parse bed line: %s\n", line); return -2; } + + ss = se+1; + *end = strtod(ss, &se) - 1; + if ( ss==se ) { fprintf(stderr,"Could not parse bed line: %s\n", line); return -2; } + + return 0; +} + +int regidx_parse_tab(const char *line, char **chr_beg, char **chr_end, uint32_t *beg, uint32_t *end, void *payload, void *usr) +{ + char *ss = (char*) line; + while ( *ss && isspace(*ss) ) ss++; + if ( !*ss ) return -1; // skip blank lines + if ( *ss=='#' ) return -1; // skip comments + + char *se = ss; + while ( *se && !isspace(*se) ) se++; + + *chr_beg = ss; + *chr_end = se-1; + + if ( !*se ) + { + // just the chromosome name + *beg = 0; + *end = MAX_COOR_0; + return 0; + } + + ss = se+1; + *beg = strtod(ss, &se); + if ( ss==se ) { fprintf(stderr,"Could not parse tab line: %s\n", line); return -2; } + if ( *beg==0 ) { fprintf(stderr,"Could not parse tab line, expected 1-based coordinate: %s\n", line); return -2; } + (*beg)--; + + if ( !se[0] || !se[1] ) + *end = *beg; + else + { + ss = se+1; + *end = strtod(ss, &se); + if ( ss==se ) *end = *beg; + else if ( *end==0 ) { fprintf(stderr,"Could not parse tab line, expected 1-based coordinate: %s\n", line); return -2; } + else (*end)--; + } + return 0; +} + +int regidx_parse_reg(const char *line, char **chr_beg, char **chr_end, uint32_t *beg, uint32_t *end, void *payload, void *usr) +{ + char *ss = (char*) line; + while ( *ss && isspace(*ss) ) ss++; + if ( !*ss ) return -1; // skip blank lines + if ( *ss=='#' ) return -1; // skip comments + + char *se = ss; + while ( *se && *se!=':' ) se++; + + *chr_beg = ss; + *chr_end = se-1; + + if ( !*se ) + { + *beg = 0; + *end = MAX_COOR_0; + return 0; + } + + ss = se+1; + *beg = strtod(ss, &se); + if ( ss==se ) { fprintf(stderr,"Could not parse reg line: %s\n", line); return -2; } + if ( *beg==0 ) { fprintf(stderr,"Could not parse reg line, expected 1-based coordinate: %s\n", line); return -2; } + (*beg)--; + + if ( !se[0] || !se[1] ) + *end = se[0]=='-' ? MAX_COOR_0 : *beg; + else + { + ss = se+1; + *end = strtod(ss, &se); + if ( ss==se ) *end = *beg; + else if ( *end==0 ) { fprintf(stderr,"Could not parse reg line, expected 1-based coordinate: %s\n", line); return -2; } + else (*end)--; + } + return 0; +} + +regitr_t *regitr_init(regidx_t *regidx) +{ + regitr_t *regitr = (regitr_t*) calloc(1,sizeof(regitr_t)); + regitr->itr = (_itr_t*) calloc(1,sizeof(_itr_t)); + _itr_t *itr = (_itr_t*) regitr->itr; + itr->ridx = regidx; + itr->list = NULL; + return regitr; +} + +void regitr_reset(regidx_t *regidx, regitr_t *regitr) +{ + _itr_t *itr = (_itr_t*) regitr->itr; + memset(itr,0,sizeof(_itr_t)); + itr->ridx = regidx; +} + +void regitr_destroy(regitr_t *regitr) +{ + free(regitr->itr); + free(regitr); +} + +int regitr_overlap(regitr_t *regitr) +{ + if ( !regitr->seq ) return 0; + + _itr_t *itr = (_itr_t*) regitr->itr; + if ( !itr->active ) + { + // is this the first call after regidx_overlap? + itr->active = 1; + itr->ireg++; + return 1; + } + + reglist_t *list = itr->list; + + int i; + for (i=itr->ireg; inreg; i++) + { + if ( list->reg[i].beg > itr->end ) return 0; // no match, past the query region + if ( list->reg[i].end >= itr->beg && list->reg[i].beg <= itr->end ) break; // found + } + + if ( i >= list->nreg ) return 0; // no match + + itr->ireg = i + 1; + regitr->seq = list->seq; + regitr->beg = list->reg[i].beg; + regitr->end = list->reg[i].end; + if ( itr->ridx->payload_size ) + regitr->payload = (char *)list->dat + itr->ridx->payload_size*i; + + return 1; +} + +int regitr_loop(regitr_t *regitr) +{ + _itr_t *itr = (_itr_t*) regitr->itr; + regidx_t *regidx = itr->ridx; + + if ( !itr->list ) // first time here + { + itr->list = regidx->seq; + itr->ireg = 0; + } + + size_t iseq = itr->list - regidx->seq; + if ( iseq >= regidx->nseq ) return 0; + + if ( itr->ireg >= itr->list->nreg ) + { + iseq++; + if ( iseq >= regidx->nseq ) return 0; // no more sequences, done + itr->ireg = 0; + itr->list = ®idx->seq[iseq]; + } + + regitr->seq = itr->list->seq; + regitr->beg = itr->list->reg[itr->ireg].beg; + regitr->end = itr->list->reg[itr->ireg].end; + if ( regidx->payload_size ) + regitr->payload = (char *)itr->list->dat + regidx->payload_size*itr->ireg; + itr->ireg++; + + return 1; +} + + + diff --git a/bcftools/regidx.c.pysam.c b/bcftools/regidx.c.pysam.c new file mode 100644 index 0000000..62ef61f --- /dev/null +++ b/bcftools/regidx.c.pysam.c @@ -0,0 +1,600 @@ +#include "bcftools.pysam.h" + +/* + Copyright (C) 2014-2016 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include +#include +#include +#include +#include +#include "regidx.h" + +#define MAX_COOR_0 REGIDX_MAX // CSI and hts_itr_query limit, 0-based + +#define iBIN(x) ((x)>>13) + +typedef struct +{ + uint32_t beg, end; +} +reg_t; + +typedef struct +{ + uint32_t pos, ireg; // y-coordinate and a pointer to reglist.reg and reglist.dat +} +pos_t; + +typedef struct _reglist_t reglist_t; + +typedef struct +{ + uint32_t beg, end, ireg; // query coordinates and the active region + regidx_t *ridx; + reglist_t *list; + int active; +} +_itr_t; + +// List of regions for one chromosome. +struct _reglist_t +{ + uint32_t *idx, nidx; // index to list.reg+1 + uint32_t nreg, mreg; // n:used, m:allocated + reg_t *reg; // regions + void *dat; // payload data + char *seq; // sequence name + int unsorted; + +}; + +// Container of all sequences +struct _regidx_t +{ + int nseq, mseq; // n:used, m:alloced + reglist_t *seq; // regions for each sequence + void *seq2regs; // hash for fast lookup from chr name to regions + char **seq_names; + regidx_free_f free; // function to free any data allocated by regidx_parse_f + regidx_parse_f parse; // parse one input line + void *usr; // user data to pass to regidx_parse_f + int payload_size; + void *payload; // temporary payload data set by regidx_parse_f (sequence is not known beforehand) + kstring_t str; +}; + +int regidx_seq_nregs(regidx_t *idx, const char *seq) +{ + int iseq; + if ( khash_str2int_get(idx->seq2regs, seq, &iseq)!=0 ) return 0; // no such sequence + return idx->seq[iseq].nreg; +} + +int regidx_nregs(regidx_t *idx) +{ + int i, nreg = 0; + for (i=0; inseq; i++) nreg += idx->seq[i].nreg; + return nreg; +} + +char **regidx_seq_names(regidx_t *idx, int *n) +{ + *n = idx->nseq; + return idx->seq_names; +} + +int regidx_insert_list(regidx_t *idx, char *line, char delim) +{ + kstring_t tmp = {0,0,0}; + char *ss = line; + while ( *ss ) + { + char *se = ss; + while ( *se && *se!=delim ) se++; + tmp.l = 0; + kputsn(ss, se-ss, &tmp); + if ( regidx_insert(idx,tmp.s) < 0 ) + { + free(tmp.s); + return -1; + } + if ( !*se ) break; + ss = se+1; + } + free(tmp.s); + return 0; +} + +static inline int cmp_regs(reg_t *a, reg_t *b) +{ + if ( a->beg < b->beg ) return -1; + if ( a->beg > b->beg ) return 1; + if ( a->end < b->end ) return 1; // longer intervals come first + if ( a->end > b->end ) return -1; + return 0; +} +static int cmp_reg_ptrs(const void *a, const void *b) +{ + return cmp_regs((reg_t*)a,(reg_t*)b); +} +static int cmp_reg_ptrs2(const void *a, const void *b) +{ + return cmp_regs(*((reg_t**)a),*((reg_t**)b)); +} + +inline int regidx_push(regidx_t *idx, char *chr_beg, char *chr_end, uint32_t beg, uint32_t end, void *payload) +{ + if ( beg > MAX_COOR_0 ) beg = MAX_COOR_0; + if ( end > MAX_COOR_0 ) end = MAX_COOR_0; + + int rid; + idx->str.l = 0; + kputsn(chr_beg, chr_end-chr_beg+1, &idx->str); + if ( khash_str2int_get(idx->seq2regs, idx->str.s, &rid)!=0 ) + { + // new chromosome + idx->nseq++; + int m_prev = idx->mseq; + hts_expand0(reglist_t,idx->nseq,idx->mseq,idx->seq); + hts_expand0(char*,idx->nseq,m_prev,idx->seq_names); + idx->seq_names[idx->nseq-1] = strdup(idx->str.s); + rid = khash_str2int_inc(idx->seq2regs, idx->seq_names[idx->nseq-1]); + } + + reglist_t *list = &idx->seq[rid]; + list->seq = idx->seq_names[rid]; + list->nreg++; + int mreg = list->mreg; + hts_expand(reg_t,list->nreg,list->mreg,list->reg); + list->reg[list->nreg-1].beg = beg; + list->reg[list->nreg-1].end = end; + if ( idx->payload_size ) + { + if ( mreg != list->mreg ) list->dat = realloc(list->dat,idx->payload_size*list->mreg); + memcpy((char *)list->dat + idx->payload_size*(list->nreg-1), payload, idx->payload_size); + } + if ( !list->unsorted && list->nreg>1 && cmp_regs(&list->reg[list->nreg-2],&list->reg[list->nreg-1])>0 ) list->unsorted = 1; + return 0; +} + +int regidx_insert(regidx_t *idx, char *line) +{ + if ( !line ) return 0; + char *chr_from, *chr_to; + uint32_t beg,end; + int ret = idx->parse(line,&chr_from,&chr_to,&beg,&end,idx->payload,idx->usr); + if ( ret==-2 ) return -1; // error + if ( ret==-1 ) return 0; // skip the line + regidx_push(idx, chr_from,chr_to,beg,end,idx->payload); + return 0; +} + +regidx_t *regidx_init(const char *fname, regidx_parse_f parser, regidx_free_f free_f, size_t payload_size, void *usr_dat) +{ + if ( !parser ) + { + if ( !fname ) parser = regidx_parse_tab; + else + { + int len = strlen(fname); + if ( len>=7 && !strcasecmp(".bed.gz",fname+len-7) ) + parser = regidx_parse_bed; + else if ( len>=8 && !strcasecmp(".bed.bgz",fname+len-8) ) + parser = regidx_parse_bed; + else if ( len>=4 && !strcasecmp(".bed",fname+len-4) ) + parser = regidx_parse_bed; + else + parser = regidx_parse_tab; + } + } + + regidx_t *idx = (regidx_t*) calloc(1,sizeof(regidx_t)); + idx->free = free_f; + idx->parse = parser; + idx->usr = usr_dat; + idx->seq2regs = khash_str2int_init(); + idx->payload_size = payload_size; + if ( payload_size ) idx->payload = malloc(payload_size); + + if ( !fname ) return idx; + + kstring_t str = {0,0,0}; + + htsFile *fp = hts_open(fname,"r"); + if ( !fp ) goto error; + + while ( hts_getline(fp, KS_SEP_LINE, &str) > 0 ) + { + if ( regidx_insert(idx, str.s) ) goto error; + } + + free(str.s); + hts_close(fp); + return idx; + +error: + free(str.s); + if ( fp ) hts_close(fp); + regidx_destroy(idx); + return NULL; +} + +void regidx_destroy(regidx_t *idx) +{ + int i, j; + for (i=0; inseq; i++) + { + reglist_t *list = &idx->seq[i]; + if ( idx->free ) + { + for (j=0; jnreg; j++) + idx->free((char *)list->dat + idx->payload_size*j); + } + free(list->dat); + free(list->reg); + free(list->idx); + } + free(idx->seq_names); + free(idx->seq); + free(idx->str.s); + free(idx->payload); + khash_str2int_destroy_free(idx->seq2regs); + free(idx); +} + +int _reglist_build_index(regidx_t *regidx, reglist_t *list) +{ + int i; + if ( list->unsorted ) + { + if ( !regidx->payload_size ) + qsort(list->reg,list->nreg,sizeof(reg_t),cmp_reg_ptrs); + else + { + reg_t **ptr = (reg_t**) malloc(sizeof(reg_t*)*list->nreg); + for (i=0; inreg; i++) ptr[i] = list->reg + i; + qsort(ptr,list->nreg,sizeof(*ptr),cmp_reg_ptrs2); + + void *tmp_dat = malloc(regidx->payload_size*list->nreg); + for (i=0; inreg; i++) + { + size_t iori = ptr[i] - list->reg; + memcpy((char *)tmp_dat+i*regidx->payload_size, + (char *)list->dat+iori*regidx->payload_size, + regidx->payload_size); + } + free(list->dat); + list->dat = tmp_dat; + + reg_t *tmp_reg = (reg_t*) malloc(sizeof(reg_t)*list->nreg); + for (i=0; inreg; i++) + { + size_t iori = ptr[i] - list->reg; + tmp_reg[i] = list->reg[iori]; + } + free(ptr); + free(list->reg); + list->reg = tmp_reg; + list->mreg = list->nreg; + } + list->unsorted = 0; + } + + list->nidx = 0; + int j,k, midx = 0; + for (j=0; jnreg; j++) + { + int ibeg = iBIN(list->reg[j].beg); + int iend = iBIN(list->reg[j].end); + if ( midx <= iend ) + { + int old_midx = midx; + midx = iend + 1; + kroundup32(midx); + list->idx = (uint32_t*) realloc(list->idx, midx*sizeof(uint32_t)); + memset(list->idx+old_midx, 0, sizeof(uint32_t)*(midx-old_midx)); + } + if ( ibeg==iend ) + { + if ( !list->idx[ibeg] ) list->idx[ibeg] = j + 1; + } + else + { + for (k=ibeg; k<=iend; k++) + if ( !list->idx[k] ) list->idx[k] = j + 1; + } + if ( list->nidx < iend+1 ) list->nidx = iend+1; + } + + return 0; +} + +int regidx_overlap(regidx_t *regidx, const char *chr, uint32_t beg, uint32_t end, regitr_t *regitr) +{ + if ( regitr ) regitr->seq = NULL; + + int iseq, ireg; + if ( khash_str2int_get(regidx->seq2regs, chr, &iseq)!=0 ) return 0; // no such sequence + + reglist_t *list = ®idx->seq[iseq]; + if ( !list->nreg ) return 0; + + if ( list->nreg==1 ) + { + if ( beg > list->reg[0].end ) return 0; + if ( end < list->reg[0].beg ) return 0; + ireg = 0; + } + else + { + if ( !list->idx ) + _reglist_build_index(regidx,list); + + int ibeg = iBIN(beg); + if ( ibeg >= list->nidx ) return 0; // beg is too big + + // find a matching region + uint32_t i = list->idx[ibeg]; + if ( !i ) + { + int iend = iBIN(end); + if ( iend > list->nidx ) iend = list->nidx; + for (i=ibeg; iidx[i] ) break; + if ( i==iend ) return 0; + i = list->idx[i]; + } + + for (ireg=i-1; iregnreg; ireg++) + { + if ( list->reg[ireg].beg > end ) return 0; // no match, past the query region + if ( list->reg[ireg].end >= beg && list->reg[ireg].beg <= end ) break; // found + } + + if ( ireg >= list->nreg ) return 0; // no match + } + + if ( !regitr ) return 1; // match, but no more info to save + + // may need to iterate over the matching regions later + _itr_t *itr = (_itr_t*)regitr->itr; + itr->ridx = regidx; + itr->list = list; + itr->beg = beg; + itr->end = end; + itr->ireg = ireg; + itr->active = 0; + + regitr->seq = list->seq; + regitr->beg = list->reg[ireg].beg; + regitr->end = list->reg[ireg].end; + if ( regidx->payload_size ) + regitr->payload = (char *)list->dat + regidx->payload_size*ireg; + + return 1; +} + +int regidx_parse_bed(const char *line, char **chr_beg, char **chr_end, uint32_t *beg, uint32_t *end, void *payload, void *usr) +{ + char *ss = (char*) line; + while ( *ss && isspace(*ss) ) ss++; + if ( !*ss ) return -1; // skip blank lines + if ( *ss=='#' ) return -1; // skip comments + + char *se = ss; + while ( *se && !isspace(*se) ) se++; + + *chr_beg = ss; + *chr_end = se-1; + + if ( !*se ) + { + // just the chromosome name + *beg = 0; + *end = MAX_COOR_0; + return 0; + } + + ss = se+1; + *beg = strtod(ss, &se); + if ( ss==se ) { fprintf(bcftools_stderr,"Could not parse bed line: %s\n", line); return -2; } + + ss = se+1; + *end = strtod(ss, &se) - 1; + if ( ss==se ) { fprintf(bcftools_stderr,"Could not parse bed line: %s\n", line); return -2; } + + return 0; +} + +int regidx_parse_tab(const char *line, char **chr_beg, char **chr_end, uint32_t *beg, uint32_t *end, void *payload, void *usr) +{ + char *ss = (char*) line; + while ( *ss && isspace(*ss) ) ss++; + if ( !*ss ) return -1; // skip blank lines + if ( *ss=='#' ) return -1; // skip comments + + char *se = ss; + while ( *se && !isspace(*se) ) se++; + + *chr_beg = ss; + *chr_end = se-1; + + if ( !*se ) + { + // just the chromosome name + *beg = 0; + *end = MAX_COOR_0; + return 0; + } + + ss = se+1; + *beg = strtod(ss, &se); + if ( ss==se ) { fprintf(bcftools_stderr,"Could not parse tab line: %s\n", line); return -2; } + if ( *beg==0 ) { fprintf(bcftools_stderr,"Could not parse tab line, expected 1-based coordinate: %s\n", line); return -2; } + (*beg)--; + + if ( !se[0] || !se[1] ) + *end = *beg; + else + { + ss = se+1; + *end = strtod(ss, &se); + if ( ss==se ) *end = *beg; + else if ( *end==0 ) { fprintf(bcftools_stderr,"Could not parse tab line, expected 1-based coordinate: %s\n", line); return -2; } + else (*end)--; + } + return 0; +} + +int regidx_parse_reg(const char *line, char **chr_beg, char **chr_end, uint32_t *beg, uint32_t *end, void *payload, void *usr) +{ + char *ss = (char*) line; + while ( *ss && isspace(*ss) ) ss++; + if ( !*ss ) return -1; // skip blank lines + if ( *ss=='#' ) return -1; // skip comments + + char *se = ss; + while ( *se && *se!=':' ) se++; + + *chr_beg = ss; + *chr_end = se-1; + + if ( !*se ) + { + *beg = 0; + *end = MAX_COOR_0; + return 0; + } + + ss = se+1; + *beg = strtod(ss, &se); + if ( ss==se ) { fprintf(bcftools_stderr,"Could not parse reg line: %s\n", line); return -2; } + if ( *beg==0 ) { fprintf(bcftools_stderr,"Could not parse reg line, expected 1-based coordinate: %s\n", line); return -2; } + (*beg)--; + + if ( !se[0] || !se[1] ) + *end = se[0]=='-' ? MAX_COOR_0 : *beg; + else + { + ss = se+1; + *end = strtod(ss, &se); + if ( ss==se ) *end = *beg; + else if ( *end==0 ) { fprintf(bcftools_stderr,"Could not parse reg line, expected 1-based coordinate: %s\n", line); return -2; } + else (*end)--; + } + return 0; +} + +regitr_t *regitr_init(regidx_t *regidx) +{ + regitr_t *regitr = (regitr_t*) calloc(1,sizeof(regitr_t)); + regitr->itr = (_itr_t*) calloc(1,sizeof(_itr_t)); + _itr_t *itr = (_itr_t*) regitr->itr; + itr->ridx = regidx; + itr->list = NULL; + return regitr; +} + +void regitr_reset(regidx_t *regidx, regitr_t *regitr) +{ + _itr_t *itr = (_itr_t*) regitr->itr; + memset(itr,0,sizeof(_itr_t)); + itr->ridx = regidx; +} + +void regitr_destroy(regitr_t *regitr) +{ + free(regitr->itr); + free(regitr); +} + +int regitr_overlap(regitr_t *regitr) +{ + if ( !regitr->seq ) return 0; + + _itr_t *itr = (_itr_t*) regitr->itr; + if ( !itr->active ) + { + // is this the first call after regidx_overlap? + itr->active = 1; + itr->ireg++; + return 1; + } + + reglist_t *list = itr->list; + + int i; + for (i=itr->ireg; inreg; i++) + { + if ( list->reg[i].beg > itr->end ) return 0; // no match, past the query region + if ( list->reg[i].end >= itr->beg && list->reg[i].beg <= itr->end ) break; // found + } + + if ( i >= list->nreg ) return 0; // no match + + itr->ireg = i + 1; + regitr->seq = list->seq; + regitr->beg = list->reg[i].beg; + regitr->end = list->reg[i].end; + if ( itr->ridx->payload_size ) + regitr->payload = (char *)list->dat + itr->ridx->payload_size*i; + + return 1; +} + +int regitr_loop(regitr_t *regitr) +{ + _itr_t *itr = (_itr_t*) regitr->itr; + regidx_t *regidx = itr->ridx; + + if ( !itr->list ) // first time here + { + itr->list = regidx->seq; + itr->ireg = 0; + } + + size_t iseq = itr->list - regidx->seq; + if ( iseq >= regidx->nseq ) return 0; + + if ( itr->ireg >= itr->list->nreg ) + { + iseq++; + if ( iseq >= regidx->nseq ) return 0; // no more sequences, done + itr->ireg = 0; + itr->list = ®idx->seq[iseq]; + } + + regitr->seq = itr->list->seq; + regitr->beg = itr->list->reg[itr->ireg].beg; + regitr->end = itr->list->reg[itr->ireg].end; + if ( regidx->payload_size ) + regitr->payload = (char *)itr->list->dat + regidx->payload_size*itr->ireg; + itr->ireg++; + + return 1; +} + + + diff --git a/bcftools/regidx.h b/bcftools/regidx.h new file mode 100644 index 0000000..8e25fe1 --- /dev/null +++ b/bcftools/regidx.h @@ -0,0 +1,191 @@ +/* + Copyright (C) 2014-2016 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +/* + Region indexing with an optional payload. + + Example of usage: + + // Init the parser and print regions. In this example the payload is a + // pointer to a string. For the description of parse_custom and + // free_custom functions, see regidx_parse_f and regidx_free_f below, + // and for working example see test/test-regidx.c. + regidx_t *idx = regidx_init(in_fname,parse_custom,free_custom,sizeof(char*),NULL); + + // Query overlap with chr:from-to + regitr_t *itr = regitr_init(idx); + if ( regidx_overlap(idx, chr,from,to, itr) ) printf("There is an overlap!\n"); + + while ( regitr_overlap(itr) ) + { + printf("[%d,%d] overlaps with [%d,%d], payload=%s\n", from,to, + itr->beg, itr->end, regitr_payload(itr,char*)); + } + + regidx_destroy(idx); + regitr_destroy(itr); + + + Another example, loop over all regions: + + regidx_t *idx = regidx_init(in_fname,NULL,NULL,0,NULL); + regitr_t *itr = regitr_init(idx); + + while ( regitr_loop(itr) ) + printf("chr=%s beg=%d end=%d\n", itr->seq, itr->beg, itr->end); + + regidx_destroy(idx); + regitr_destroy(itr); +*/ + +#ifndef __REGIDX_H__ +#define __REGIDX_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define REGIDX_MAX 2147483646 // maximum regidx coordinate (0-based) + +typedef struct _regidx_t regidx_t; +typedef struct +{ + uint32_t beg,end; + void *payload; + char *seq; + void *itr; +} +regitr_t; + +#define regitr_payload(itr,type_t) (*((type_t*)(itr)->payload)) + +/* + * regidx_parse_f - Function to parse one input line, such as regidx_parse_bed + * or regidx_parse_tab below. The function is expected to set `chr_from` and + * `chr_to` to point to first and last character of chromosome name and set + * coordinates `beg` and `end` (0-based, inclusive). If regidx_init() was + * called with non-zero payload_size, the `payload` points to a memory + * location of the payload_size and `usr` is the data passed to regidx_init(). + * Any memory allocated by the function will be freed by regidx_free_f called + * by regidx_destroy(). + * + * Return value: 0 on success, -1 to skip a record, -2 on fatal error. + */ +typedef int (*regidx_parse_f)(const char *line, char **chr_beg, char **chr_end, uint32_t *beg, uint32_t *end, void *payload, void *usr); +typedef void (*regidx_free_f)(void *payload); + +/* + * A note about the parsers: + * - leading spaces are ignored + * - lines starting with "#" are ignored + */ +int regidx_parse_bed(const char*,char**,char**,uint32_t*,uint32_t*,void*,void*); // CHROM or whitespace-sepatated CHROM,FROM,TO (0-based,right-open) +int regidx_parse_tab(const char*,char**,char**,uint32_t*,uint32_t*,void*,void*); // CHROM or whitespace-separated CHROM,POS (1-based, inclusive) +int regidx_parse_reg(const char*,char**,char**,uint32_t*,uint32_t*,void*,void*); // CHROM, CHROM:POS, CHROM:FROM-TO, CHROM:FROM- (1-based, inclusive) + +/* + * regidx_init() - creates new index + * @param fname: input file name or NULL if regions will be added one-by-one via regidx_insert() + * @param parsef: regidx_parse_bed, regidx_parse_tab or see description of regidx_parse_f. If NULL, + * the format will be autodected, currently either regidx_parse_tab (the default) or + * regidx_parse_bed (file must be named 'bed' or 'bed.gz') will be used. Note that + * the exact autodetection algorithm will change. + * @param freef: NULL or see description of regidx_parse_f + * @param payload_size: 0 with regidx_parse_bed, regidx_parse_tab or see regidx_parse_f + * @param usr: optional user data passed to regidx_parse_f + * + * Returns index on success or NULL on error. + */ +regidx_t *regidx_init(const char *fname, regidx_parse_f parsef, regidx_free_f freef, size_t payload_size, void *usr); + +/* + * regidx_destroy() - free memory allocated by regidx_init + */ +void regidx_destroy(regidx_t *idx); + +/* + * regidx_overlap() - check overlap of the location chr:from-to with regions + * @param beg,end: 0-based start, end coordinate (inclusive) + * @param itr: pointer to iterator, can be NULL if regidx_loop not needed + * + * Returns 0 if there is no overlap or 1 if overlap is found. The overlapping + * regions can be iterated as shown in the example above. + */ +int regidx_overlap(regidx_t *idx, const char *chr, uint32_t beg, uint32_t end, regitr_t *itr); + +/* + * regidx_insert() - add a new region. + * regidx_insert_list() - add new regions from a list + * regidx_push() - low level insertion of a new region + * + * Returns 0 on success or -1 on error. + */ +int regidx_insert(regidx_t *idx, char *line); +int regidx_insert_list(regidx_t *idx, char *line, char delim); +int regidx_push(regidx_t *idx, char *chr_beg, char *chr_end, uint32_t beg, uint32_t end, void *payload); + +/* + * regidx_seq_names() - return list of all sequence names + */ +char **regidx_seq_names(regidx_t *idx, int *n); + +/* + * regidx_seq_nregs() - number of regions + * regidx_nregs() - total number of regions + */ +int regidx_seq_nregs(regidx_t *idx, const char *seq); +int regidx_nregs(regidx_t *idx); + +/* + * regitr_init() - initialize an iterator. The idx parameter is required only + * with regitr_loop. If only regitr_overlap is called, NULL + * can be given. + * + * regitr_reset() - initialize an iterator for a repeated regitr_loop cycle. + * Not required with regitr_overlap. + */ +regitr_t *regitr_init(regidx_t *idx); +void regitr_destroy(regitr_t *itr); +void regitr_reset(regidx_t *idx, regitr_t *itr); + +/* + * regitr_overlap() - next overlapping region + * Returns 0 when done or 1 when itr is set to next region + */ +int regitr_overlap(regitr_t *itr); + +/* + * regitr_loop() - loop over all regions + * Returns 0 when done or 1 when itr is set to next region + */ +int regitr_loop(regitr_t *itr); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/bcftools/reheader.c b/bcftools/reheader.c new file mode 100644 index 0000000..30a441c --- /dev/null +++ b/bcftools/reheader.c @@ -0,0 +1,521 @@ +/* reheader.c -- reheader subcommand. + + Copyright (C) 2014,2016 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // for hts_get_bgzfp() +#include +#include "bcftools.h" +#include "khash_str2str.h" + +typedef struct _args_t +{ + char **argv, *fname, *samples_fname, *header_fname, *output_fname; + htsFile *fp; + htsFormat type; + int argc; +} +args_t; + +static void read_header_file(char *fname, kstring_t *hdr) +{ + kstring_t tmp = {0,0,0}; + hdr->l = 0; + + htsFile *fp = hts_open(fname, "r"); + if ( !fp ) error("Could not read: %s\n", fname); + while ( hts_getline(fp, KS_SEP_LINE, &tmp) > 0 ) + { + kputsn(tmp.s,tmp.l,hdr); + kputc('\n',hdr); + } + if ( hts_close(fp) ) error("Close failed: %s\n", fname); + free(tmp.s); + + while ( hdr->l>0 && isspace(hdr->s[hdr->l-1]) ) hdr->l--; // remove trailing newlines + kputc('\n',hdr); +} + +static int set_sample_pairs(char **samples, int nsamples, kstring_t *hdr, int idx) +{ + int i, j, n; + kstring_t key = {0,0,0}; + kstring_t val = {0,0,0}; + + // Are these samples "old-name new-name" pairs? + void *hash = khash_str2str_init(); + for (i=0; il>0 && isspace(hdr->s[hdr->l-1]) ) hdr->l--; // remove trailing newlines + hdr->s[hdr->l] = 0; + + kstring_t tmp = {0,0,0}; + i = j = n = 0; + while ( hdr->s[idx+i] && hdr->s[idx+i]) + { + if ( hdr->s[idx+i]=='\t' ) + { + hdr->s[idx+i] = 0; + + if ( ++n>9 ) + { + char *ori = khash_str2str_get(hash,hdr->s+idx+j); + kputs(ori ? ori : hdr->s+idx+j, &tmp); + } + else + kputs(hdr->s+idx+j, &tmp); + + kputc('\t',&tmp); + + j = ++i; + continue; + } + i++; + } + char *ori = khash_str2str_get(hash,hdr->s+idx+j); + kputs(ori ? ori : hdr->s+idx+j, &tmp); + + khash_str2str_destroy_free_all(hash); + + hdr->l = idx; + kputs(tmp.s, hdr); + kputc('\n', hdr); + free(tmp.s); + + return 1; +} + +static void set_samples(char **samples, int nsamples, kstring_t *hdr) +{ + // Find the beginning of the #CHROM line + int i = hdr->l - 2, ncols = 0; + while ( i>=0 && hdr->s[i]!='\n' ) + { + if ( hdr->s[i]=='\t' ) ncols++; + i--; + } + if ( i<0 || strncmp(hdr->s+i+1,"#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\tFORMAT",45) ) error("Could not parse the header: %s\n", hdr->s); + + // Are the samples "old-sample new-sample" pairs? + if ( set_sample_pairs(samples,nsamples,hdr, i+1) ) return; + + // Replace all samples + if ( ncols!=nsamples+8 ) + fprintf(stderr, "Warning: different number of samples: %d vs %d\n", nsamples,ncols-8); + + ncols = 0; + while ( ncols!=9 ) + { + i++; + if ( hdr->s[i]=='\t' ) ncols++; + } + hdr->l = i; + + for (i=0; ifp); + if ( !fp || bgzf_read_block(fp) != 0 || !fp->block_length ) + error("Failed to read %s: %s\n", args->fname, strerror(errno)); + + kstring_t hdr = {0,0,0}; + char *buffer = (char*) fp->uncompressed_block; + + // Read the header and find the position of the data block + if ( buffer[0]!='#' ) error("Could not parse the header, expected '#', found '%c'\n", buffer[0]); + + int skip_until = 1; // end of the header in the current uncompressed block + while (1) + { + if ( buffer[skip_until]=='\n' ) + { + skip_until++; + if ( skip_until>=fp->block_length ) + { + kputsn(buffer,skip_until,&hdr); + if ( bgzf_read_block(fp) != 0 ) error("Error reading %s\n", args->fname); + if ( !fp->block_length ) break; + skip_until = 0; + } + // The header has finished + if ( buffer[skip_until]!='#' ) + { + kputsn(buffer,skip_until,&hdr); + break; + } + } + skip_until++; + if ( skip_until>=fp->block_length ) + { + kputsn(buffer,fp->block_length,&hdr); + if ( bgzf_read_block(fp) != 0 ) error("Error reading %s\n", args->fname); + if ( !fp->block_length ) break; + skip_until = 0; + } + } + + int nsamples = 0; + char **samples = NULL; + if ( args->samples_fname ) + samples = hts_readlines(args->samples_fname, &nsamples); + if ( args->header_fname ) + { + free(hdr.s); hdr.s = NULL; hdr.l = hdr.m = 0; + read_header_file(args->header_fname, &hdr); + } + if ( samples ) + { + set_samples(samples, nsamples, &hdr); + int i; + for (i=0; ioutput_fname ? args->output_fname : "-","w");; + if ( bgzf_write(bgzf_out, hdr.s, hdr.l) < 0 ) error("Can't write BGZF header (code %d)\n", bgzf_out->errcode); + free(hdr.s); + + // Output all remainig data read with the header block + if ( fp->block_length - skip_until > 0 ) + { + if ( bgzf_write(bgzf_out, buffer+skip_until, fp->block_length-skip_until)<0 ) error("Error: %d\n",fp->errcode); + } + if ( bgzf_flush(bgzf_out)<0 ) error("Error: %d\n",bgzf_out->errcode); + + // Stream the rest of the file without as it is, without decompressing + ssize_t nread; + const size_t page_size = 32768; + char *buf = (char*) malloc(page_size); + while (1) + { + nread = bgzf_raw_read(fp, buf, page_size); + if ( nread<=0 ) break; + + int count = bgzf_raw_write(bgzf_out, buf, nread); + if (count != nread) error("Write failed, wrote %d instead of %d bytes.\n", count,(int)nread); + } + if (bgzf_close(bgzf_out) < 0) error("Error closing %s: %d\n",args->output_fname ? args->output_fname : "-",bgzf_out->errcode); + if (hts_close(args->fp)) error("Error closing %s: %d\n",args->fname,fp->errcode); + free(buf); +} +static void reheader_vcf(args_t *args) +{ + kstring_t hdr = {0,0,0}; + htsFile *fp = args->fp; + while ( hts_getline(fp, KS_SEP_LINE, &fp->line) >=0 ) + { + kputc('\n',&fp->line); // hts_getline eats the newline character + if ( fp->line.s[0]!='#' ) break; + kputsn(fp->line.s,fp->line.l,&hdr); + } + + int nsamples = 0; + char **samples = NULL; + if ( args->samples_fname ) + samples = hts_readlines(args->samples_fname, &nsamples); + if ( args->header_fname ) + { + free(hdr.s); hdr.s = NULL; hdr.l = hdr.m = 0; + read_header_file(args->header_fname, &hdr); + } + if ( samples ) + { + set_samples(samples, nsamples, &hdr); + int i; + for (i=0; ioutput_fname ? open(args->output_fname, O_WRONLY|O_CREAT|O_TRUNC, 0666) : STDOUT_FILENO; + if ( out==-1 ) error("%s: %s\n", args->output_fname,strerror(errno)); + if ( write(out, hdr.s, hdr.l)!=hdr.l ) error("Failed to write %d bytes\n", hdr.l); + free(hdr.s); + if ( fp->line.l ) + { + if ( write(out, fp->line.s, fp->line.l)!=fp->line.l ) error("Failed to write %d bytes\n", fp->line.l); + } + while ( hts_getline(fp, KS_SEP_LINE, &fp->line) >=0 ) // uncompressed file implies small size, we don't worry about speed + { + kputc('\n',&fp->line); + if ( write(out, fp->line.s, fp->line.l)!=fp->line.l ) error("Failed to write %d bytes\n", fp->line.l); + } + hts_close(fp); + close(out); +} + +static bcf_hdr_t *strip_header(bcf_hdr_t *src, bcf_hdr_t *dst) +{ + bcf_hrec_t *src_hrec, *dst_hrec, *tmp; + bcf_hdr_t *out = bcf_hdr_init("r"); + int i; + for (i=0; inhrec; i++) + { + // first insert lines which do not code BCF ids, their order does not matter + dst_hrec = dst->hrec[i]; + if ( dst_hrec->type==BCF_HL_FLT || dst_hrec->type==BCF_HL_INFO || dst_hrec->type==BCF_HL_FMT || dst_hrec->type== BCF_HL_CTG ) continue; + bcf_hdr_add_hrec(out, bcf_hrec_dup(dst_hrec)); + } + for (i=0; inhrec; i++) + { + // now transfer header lines which define BCF ids + src_hrec = src->hrec[i]; + + if ( src_hrec->type==BCF_HL_FLT || src_hrec->type==BCF_HL_INFO || src_hrec->type==BCF_HL_FMT || src_hrec->type== BCF_HL_CTG ) + { + int j = bcf_hrec_find_key(src_hrec, "ID"); + dst_hrec = bcf_hdr_get_hrec(dst, src_hrec->type, "ID", src_hrec->vals[j], NULL); + if ( !dst_hrec ) continue; + + tmp = bcf_hrec_dup(dst_hrec); + + j = bcf_hrec_find_key(src_hrec, "IDX"); + if ( j>=0 ) + { + j = atoi(src_hrec->vals[j]); + hrec_add_idx(tmp, j); + } + bcf_hdr_add_hrec(out, tmp); + } + } + bcf_hdr_sync(out); + for (i=0; inhrec; i++) + { + // finally add new structured fields + dst_hrec = dst->hrec[i]; + if ( dst_hrec->type==BCF_HL_FLT || dst_hrec->type==BCF_HL_INFO || dst_hrec->type==BCF_HL_FMT || dst_hrec->type== BCF_HL_CTG ) + { + int j = bcf_hrec_find_key(dst_hrec, "ID"); + tmp = bcf_hdr_get_hrec(out, dst_hrec->type, "ID", dst_hrec->vals[j], NULL); + if ( !tmp ) + bcf_hdr_add_hrec(out, bcf_hrec_dup(dst_hrec)); + } + } + for (i=0; in[BCF_DT_SAMPLE]; i++) bcf_hdr_add_sample(out, dst->samples[i]); + bcf_hdr_destroy(dst); + return out; +} + +static void reheader_bcf(args_t *args, int is_compressed) +{ + htsFile *fp = args->fp; + bcf_hdr_t *hdr = bcf_hdr_read(fp); if ( !hdr ) error("Failed to read the header: %s\n", args->fname); + kstring_t htxt = {0,0,0}; + bcf_hdr_format(hdr, 1, &htxt); + + int i, nsamples = 0; + char **samples = NULL; + if ( args->samples_fname ) + samples = hts_readlines(args->samples_fname, &nsamples); + if ( args->header_fname ) + { + free(htxt.s); htxt.s = NULL; htxt.l = htxt.m = 0; + read_header_file(args->header_fname, &htxt); + } + if ( samples ) + { + set_samples(samples, nsamples, &htxt); + for (i=0; iheader_fname ) hdr_out = strip_header(hdr, hdr_out); + + // write the header and the body + htsFile *fp_out = hts_open(args->output_fname ? args->output_fname : "-",is_compressed ? "wb" : "wbu"); + if ( !fp_out ) error("%s: %s\n", args->output_fname ? args->output_fname : "-", strerror(errno)); + bcf_hdr_write(fp_out, hdr_out); + + bcf1_t *rec = bcf_init(); + while ( bcf_read(fp, hdr, rec)==0 ) + { + // sanity checking, this slows things down. Make it optional? + bcf_unpack(rec, BCF_UN_ALL); + if ( rec->rid >= hdr_out->n[BCF_DT_CTG] || strcmp(bcf_hdr_int2id(hdr,BCF_DT_CTG,rec->rid),bcf_hdr_int2id(hdr_out,BCF_DT_CTG,rec->rid)) ) + error("The CHROM is not defined: \"%s\"\n", bcf_hdr_int2id(hdr,BCF_DT_CTG,rec->rid)); + + for (i=0; id.n_flt; i++) + { + int id = rec->d.flt[i]; + if ( id >= hdr_out->n[BCF_DT_ID] ) break; + if ( !bcf_hdr_idinfo_exists(hdr_out,BCF_HL_FLT,id) ) break; + if ( strcmp(hdr->id[BCF_DT_ID][id].key,hdr_out->id[BCF_DT_ID][id].key) ) + error("FIXME: Broken FILTER ids: %s vs %s\n", hdr->id[BCF_DT_ID][id].key,hdr_out->id[BCF_DT_ID][id].key); + } + if ( i!=rec->d.n_flt ) + error("The FILTER is not defined: \"%s\"\n", bcf_hdr_int2id(hdr,BCF_DT_ID,rec->d.flt[i])); + + for (i=0; in_info; i++) + { + int id = rec->d.info[i].key; + if ( id >= hdr_out->n[BCF_DT_ID] ) break; + if ( !hdr_out->id[BCF_DT_ID][id].key ) break; + if ( !bcf_hdr_idinfo_exists(hdr_out,BCF_HL_INFO,id) ) break; + if ( strcmp(hdr->id[BCF_DT_ID][id].key,hdr_out->id[BCF_DT_ID][id].key) ) + error("FIXME: Broken INFO ids: %s vs %s\n", hdr->id[BCF_DT_ID][id].key,hdr_out->id[BCF_DT_ID][id].key); + } + if ( i!=rec->n_info ) + error("The INFO tag is not defined: \"%s\"\n", bcf_hdr_int2id(hdr,BCF_DT_ID,rec->d.info[i].key)); + + for (i=0; in_fmt; i++) + { + int id = rec->d.fmt[i].id; + if ( id >= hdr_out->n[BCF_DT_ID] ) break; + if ( !hdr_out->id[BCF_DT_ID][id].key ) break; + if ( !bcf_hdr_idinfo_exists(hdr_out,BCF_HL_FMT,id) ) break; + if ( strcmp(hdr->id[BCF_DT_ID][id].key,hdr_out->id[BCF_DT_ID][id].key) ) + error("FIXME: Broken FORMAT ids: %s vs %s\n", hdr->id[BCF_DT_ID][id].key,hdr_out->id[BCF_DT_ID][id].key); + } + if ( i!=rec->n_fmt ) + error("The FORMAT tag is not defined: \"%s\"\n", bcf_hdr_int2id(hdr,BCF_DT_ID,rec->d.fmt[i].id)); + + bcf_write(fp_out,hdr_out,rec); + } + bcf_destroy(rec); + + free(htxt.s); + hts_close(fp_out); + hts_close(fp); + bcf_hdr_destroy(hdr_out); + bcf_hdr_destroy(hdr); +} + + +static void usage(args_t *args) +{ + fprintf(stderr, "\n"); + fprintf(stderr, "About: Modify header of VCF/BCF files, change sample names.\n"); + fprintf(stderr, "Usage: bcftools reheader [OPTIONS] \n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " -h, --header new header\n"); + fprintf(stderr, " -o, --output write output to a file [standard output]\n"); + fprintf(stderr, " -s, --samples new sample names\n"); + fprintf(stderr, "\n"); + exit(1); +} + +int main_bcftools_reheader(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + + static struct option loptions[] = + { + {"output",1,0,'o'}, + {"header",1,0,'h'}, + {"samples",1,0,'s'}, + {0,0,0,0} + }; + while ((c = getopt_long(argc, argv, "s:h:o:",loptions,NULL)) >= 0) + { + switch (c) + { + case 'o': args->output_fname = optarg; break; + case 's': args->samples_fname = optarg; break; + case 'h': args->header_fname = optarg; break; + case '?': usage(args); + default: error("Unknown argument: %s\n", optarg); + } + } + + if ( optind>=argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) args->fname = "-"; // reading from stdin + else usage(args); + } + else args->fname = argv[optind]; + + if ( !args->samples_fname && !args->header_fname ) usage(args); + if ( !args->fname ) usage(args); + + args->fp = hts_open(args->fname,"r"); + if ( !args->fp ) error("Failed to open: %s\n", args->fname); + args->type = *hts_get_format(args->fp); + + if ( args->type.format==vcf ) + { + if ( args->type.compression==bgzf || args->type.compression==gzip ) + reheader_vcf_gz(args); + else + reheader_vcf(args); + } + else + reheader_bcf(args, args->type.compression==bgzf || args->type.compression==gzip); + + free(args); + return 0; +} diff --git a/bcftools/reheader.c.pysam.c b/bcftools/reheader.c.pysam.c new file mode 100644 index 0000000..803b483 --- /dev/null +++ b/bcftools/reheader.c.pysam.c @@ -0,0 +1,523 @@ +#include "bcftools.pysam.h" + +/* reheader.c -- reheader subcommand. + + Copyright (C) 2014,2016 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // for hts_get_bgzfp() +#include +#include "bcftools.h" +#include "khash_str2str.h" + +typedef struct _args_t +{ + char **argv, *fname, *samples_fname, *header_fname, *output_fname; + htsFile *fp; + htsFormat type; + int argc; +} +args_t; + +static void read_header_file(char *fname, kstring_t *hdr) +{ + kstring_t tmp = {0,0,0}; + hdr->l = 0; + + htsFile *fp = hts_open(fname, "r"); + if ( !fp ) error("Could not read: %s\n", fname); + while ( hts_getline(fp, KS_SEP_LINE, &tmp) > 0 ) + { + kputsn(tmp.s,tmp.l,hdr); + kputc('\n',hdr); + } + if ( hts_close(fp) ) error("Close failed: %s\n", fname); + free(tmp.s); + + while ( hdr->l>0 && isspace(hdr->s[hdr->l-1]) ) hdr->l--; // remove trailing newlines + kputc('\n',hdr); +} + +static int set_sample_pairs(char **samples, int nsamples, kstring_t *hdr, int idx) +{ + int i, j, n; + kstring_t key = {0,0,0}; + kstring_t val = {0,0,0}; + + // Are these samples "old-name new-name" pairs? + void *hash = khash_str2str_init(); + for (i=0; il>0 && isspace(hdr->s[hdr->l-1]) ) hdr->l--; // remove trailing newlines + hdr->s[hdr->l] = 0; + + kstring_t tmp = {0,0,0}; + i = j = n = 0; + while ( hdr->s[idx+i] && hdr->s[idx+i]) + { + if ( hdr->s[idx+i]=='\t' ) + { + hdr->s[idx+i] = 0; + + if ( ++n>9 ) + { + char *ori = khash_str2str_get(hash,hdr->s+idx+j); + kputs(ori ? ori : hdr->s+idx+j, &tmp); + } + else + kputs(hdr->s+idx+j, &tmp); + + kputc('\t',&tmp); + + j = ++i; + continue; + } + i++; + } + char *ori = khash_str2str_get(hash,hdr->s+idx+j); + kputs(ori ? ori : hdr->s+idx+j, &tmp); + + khash_str2str_destroy_free_all(hash); + + hdr->l = idx; + kputs(tmp.s, hdr); + kputc('\n', hdr); + free(tmp.s); + + return 1; +} + +static void set_samples(char **samples, int nsamples, kstring_t *hdr) +{ + // Find the beginning of the #CHROM line + int i = hdr->l - 2, ncols = 0; + while ( i>=0 && hdr->s[i]!='\n' ) + { + if ( hdr->s[i]=='\t' ) ncols++; + i--; + } + if ( i<0 || strncmp(hdr->s+i+1,"#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\tFORMAT",45) ) error("Could not parse the header: %s\n", hdr->s); + + // Are the samples "old-sample new-sample" pairs? + if ( set_sample_pairs(samples,nsamples,hdr, i+1) ) return; + + // Replace all samples + if ( ncols!=nsamples+8 ) + fprintf(bcftools_stderr, "Warning: different number of samples: %d vs %d\n", nsamples,ncols-8); + + ncols = 0; + while ( ncols!=9 ) + { + i++; + if ( hdr->s[i]=='\t' ) ncols++; + } + hdr->l = i; + + for (i=0; ifp); + if ( !fp || bgzf_read_block(fp) != 0 || !fp->block_length ) + error("Failed to read %s: %s\n", args->fname, strerror(errno)); + + kstring_t hdr = {0,0,0}; + char *buffer = (char*) fp->uncompressed_block; + + // Read the header and find the position of the data block + if ( buffer[0]!='#' ) error("Could not parse the header, expected '#', found '%c'\n", buffer[0]); + + int skip_until = 1; // end of the header in the current uncompressed block + while (1) + { + if ( buffer[skip_until]=='\n' ) + { + skip_until++; + if ( skip_until>=fp->block_length ) + { + kputsn(buffer,skip_until,&hdr); + if ( bgzf_read_block(fp) != 0 ) error("Error reading %s\n", args->fname); + if ( !fp->block_length ) break; + skip_until = 0; + } + // The header has finished + if ( buffer[skip_until]!='#' ) + { + kputsn(buffer,skip_until,&hdr); + break; + } + } + skip_until++; + if ( skip_until>=fp->block_length ) + { + kputsn(buffer,fp->block_length,&hdr); + if ( bgzf_read_block(fp) != 0 ) error("Error reading %s\n", args->fname); + if ( !fp->block_length ) break; + skip_until = 0; + } + } + + int nsamples = 0; + char **samples = NULL; + if ( args->samples_fname ) + samples = hts_readlines(args->samples_fname, &nsamples); + if ( args->header_fname ) + { + free(hdr.s); hdr.s = NULL; hdr.l = hdr.m = 0; + read_header_file(args->header_fname, &hdr); + } + if ( samples ) + { + set_samples(samples, nsamples, &hdr); + int i; + for (i=0; ioutput_fname ? args->output_fname : "-","w");; + if ( bgzf_write(bgzf_out, hdr.s, hdr.l) < 0 ) error("Can't write BGZF header (code %d)\n", bgzf_out->errcode); + free(hdr.s); + + // Output all remainig data read with the header block + if ( fp->block_length - skip_until > 0 ) + { + if ( bgzf_write(bgzf_out, buffer+skip_until, fp->block_length-skip_until)<0 ) error("Error: %d\n",fp->errcode); + } + if ( bgzf_flush(bgzf_out)<0 ) error("Error: %d\n",bgzf_out->errcode); + + // Stream the rest of the file without as it is, without decompressing + ssize_t nread; + const size_t page_size = 32768; + char *buf = (char*) malloc(page_size); + while (1) + { + nread = bgzf_raw_read(fp, buf, page_size); + if ( nread<=0 ) break; + + int count = bgzf_raw_write(bgzf_out, buf, nread); + if (count != nread) error("Write failed, wrote %d instead of %d bytes.\n", count,(int)nread); + } + if (bgzf_close(bgzf_out) < 0) error("Error closing %s: %d\n",args->output_fname ? args->output_fname : "-",bgzf_out->errcode); + if (hts_close(args->fp)) error("Error closing %s: %d\n",args->fname,fp->errcode); + free(buf); +} +static void reheader_vcf(args_t *args) +{ + kstring_t hdr = {0,0,0}; + htsFile *fp = args->fp; + while ( hts_getline(fp, KS_SEP_LINE, &fp->line) >=0 ) + { + kputc('\n',&fp->line); // hts_getline eats the newline character + if ( fp->line.s[0]!='#' ) break; + kputsn(fp->line.s,fp->line.l,&hdr); + } + + int nsamples = 0; + char **samples = NULL; + if ( args->samples_fname ) + samples = hts_readlines(args->samples_fname, &nsamples); + if ( args->header_fname ) + { + free(hdr.s); hdr.s = NULL; hdr.l = hdr.m = 0; + read_header_file(args->header_fname, &hdr); + } + if ( samples ) + { + set_samples(samples, nsamples, &hdr); + int i; + for (i=0; ioutput_fname ? open(args->output_fname, O_WRONLY|O_CREAT|O_TRUNC, 0666) : STDOUT_FILENO; + if ( out==-1 ) error("%s: %s\n", args->output_fname,strerror(errno)); + if ( write(out, hdr.s, hdr.l)!=hdr.l ) error("Failed to write %d bytes\n", hdr.l); + free(hdr.s); + if ( fp->line.l ) + { + if ( write(out, fp->line.s, fp->line.l)!=fp->line.l ) error("Failed to write %d bytes\n", fp->line.l); + } + while ( hts_getline(fp, KS_SEP_LINE, &fp->line) >=0 ) // uncompressed file implies small size, we don't worry about speed + { + kputc('\n',&fp->line); + if ( write(out, fp->line.s, fp->line.l)!=fp->line.l ) error("Failed to write %d bytes\n", fp->line.l); + } + hts_close(fp); + close(out); +} + +static bcf_hdr_t *strip_header(bcf_hdr_t *src, bcf_hdr_t *dst) +{ + bcf_hrec_t *src_hrec, *dst_hrec, *tmp; + bcf_hdr_t *out = bcf_hdr_init("r"); + int i; + for (i=0; inhrec; i++) + { + // first insert lines which do not code BCF ids, their order does not matter + dst_hrec = dst->hrec[i]; + if ( dst_hrec->type==BCF_HL_FLT || dst_hrec->type==BCF_HL_INFO || dst_hrec->type==BCF_HL_FMT || dst_hrec->type== BCF_HL_CTG ) continue; + bcf_hdr_add_hrec(out, bcf_hrec_dup(dst_hrec)); + } + for (i=0; inhrec; i++) + { + // now transfer header lines which define BCF ids + src_hrec = src->hrec[i]; + + if ( src_hrec->type==BCF_HL_FLT || src_hrec->type==BCF_HL_INFO || src_hrec->type==BCF_HL_FMT || src_hrec->type== BCF_HL_CTG ) + { + int j = bcf_hrec_find_key(src_hrec, "ID"); + dst_hrec = bcf_hdr_get_hrec(dst, src_hrec->type, "ID", src_hrec->vals[j], NULL); + if ( !dst_hrec ) continue; + + tmp = bcf_hrec_dup(dst_hrec); + + j = bcf_hrec_find_key(src_hrec, "IDX"); + if ( j>=0 ) + { + j = atoi(src_hrec->vals[j]); + hrec_add_idx(tmp, j); + } + bcf_hdr_add_hrec(out, tmp); + } + } + bcf_hdr_sync(out); + for (i=0; inhrec; i++) + { + // finally add new structured fields + dst_hrec = dst->hrec[i]; + if ( dst_hrec->type==BCF_HL_FLT || dst_hrec->type==BCF_HL_INFO || dst_hrec->type==BCF_HL_FMT || dst_hrec->type== BCF_HL_CTG ) + { + int j = bcf_hrec_find_key(dst_hrec, "ID"); + tmp = bcf_hdr_get_hrec(out, dst_hrec->type, "ID", dst_hrec->vals[j], NULL); + if ( !tmp ) + bcf_hdr_add_hrec(out, bcf_hrec_dup(dst_hrec)); + } + } + for (i=0; in[BCF_DT_SAMPLE]; i++) bcf_hdr_add_sample(out, dst->samples[i]); + bcf_hdr_destroy(dst); + return out; +} + +static void reheader_bcf(args_t *args, int is_compressed) +{ + htsFile *fp = args->fp; + bcf_hdr_t *hdr = bcf_hdr_read(fp); if ( !hdr ) error("Failed to read the header: %s\n", args->fname); + kstring_t htxt = {0,0,0}; + bcf_hdr_format(hdr, 1, &htxt); + + int i, nsamples = 0; + char **samples = NULL; + if ( args->samples_fname ) + samples = hts_readlines(args->samples_fname, &nsamples); + if ( args->header_fname ) + { + free(htxt.s); htxt.s = NULL; htxt.l = htxt.m = 0; + read_header_file(args->header_fname, &htxt); + } + if ( samples ) + { + set_samples(samples, nsamples, &htxt); + for (i=0; iheader_fname ) hdr_out = strip_header(hdr, hdr_out); + + // write the header and the body + htsFile *fp_out = hts_open(args->output_fname ? args->output_fname : "-",is_compressed ? "wb" : "wbu"); + if ( !fp_out ) error("%s: %s\n", args->output_fname ? args->output_fname : "-", strerror(errno)); + bcf_hdr_write(fp_out, hdr_out); + + bcf1_t *rec = bcf_init(); + while ( bcf_read(fp, hdr, rec)==0 ) + { + // sanity checking, this slows things down. Make it optional? + bcf_unpack(rec, BCF_UN_ALL); + if ( rec->rid >= hdr_out->n[BCF_DT_CTG] || strcmp(bcf_hdr_int2id(hdr,BCF_DT_CTG,rec->rid),bcf_hdr_int2id(hdr_out,BCF_DT_CTG,rec->rid)) ) + error("The CHROM is not defined: \"%s\"\n", bcf_hdr_int2id(hdr,BCF_DT_CTG,rec->rid)); + + for (i=0; id.n_flt; i++) + { + int id = rec->d.flt[i]; + if ( id >= hdr_out->n[BCF_DT_ID] ) break; + if ( !bcf_hdr_idinfo_exists(hdr_out,BCF_HL_FLT,id) ) break; + if ( strcmp(hdr->id[BCF_DT_ID][id].key,hdr_out->id[BCF_DT_ID][id].key) ) + error("FIXME: Broken FILTER ids: %s vs %s\n", hdr->id[BCF_DT_ID][id].key,hdr_out->id[BCF_DT_ID][id].key); + } + if ( i!=rec->d.n_flt ) + error("The FILTER is not defined: \"%s\"\n", bcf_hdr_int2id(hdr,BCF_DT_ID,rec->d.flt[i])); + + for (i=0; in_info; i++) + { + int id = rec->d.info[i].key; + if ( id >= hdr_out->n[BCF_DT_ID] ) break; + if ( !hdr_out->id[BCF_DT_ID][id].key ) break; + if ( !bcf_hdr_idinfo_exists(hdr_out,BCF_HL_INFO,id) ) break; + if ( strcmp(hdr->id[BCF_DT_ID][id].key,hdr_out->id[BCF_DT_ID][id].key) ) + error("FIXME: Broken INFO ids: %s vs %s\n", hdr->id[BCF_DT_ID][id].key,hdr_out->id[BCF_DT_ID][id].key); + } + if ( i!=rec->n_info ) + error("The INFO tag is not defined: \"%s\"\n", bcf_hdr_int2id(hdr,BCF_DT_ID,rec->d.info[i].key)); + + for (i=0; in_fmt; i++) + { + int id = rec->d.fmt[i].id; + if ( id >= hdr_out->n[BCF_DT_ID] ) break; + if ( !hdr_out->id[BCF_DT_ID][id].key ) break; + if ( !bcf_hdr_idinfo_exists(hdr_out,BCF_HL_FMT,id) ) break; + if ( strcmp(hdr->id[BCF_DT_ID][id].key,hdr_out->id[BCF_DT_ID][id].key) ) + error("FIXME: Broken FORMAT ids: %s vs %s\n", hdr->id[BCF_DT_ID][id].key,hdr_out->id[BCF_DT_ID][id].key); + } + if ( i!=rec->n_fmt ) + error("The FORMAT tag is not defined: \"%s\"\n", bcf_hdr_int2id(hdr,BCF_DT_ID,rec->d.fmt[i].id)); + + bcf_write(fp_out,hdr_out,rec); + } + bcf_destroy(rec); + + free(htxt.s); + hts_close(fp_out); + hts_close(fp); + bcf_hdr_destroy(hdr_out); + bcf_hdr_destroy(hdr); +} + + +static void usage(args_t *args) +{ + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "About: Modify header of VCF/BCF files, change sample names.\n"); + fprintf(bcftools_stderr, "Usage: bcftools reheader [OPTIONS] \n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Options:\n"); + fprintf(bcftools_stderr, " -h, --header new header\n"); + fprintf(bcftools_stderr, " -o, --output write output to a file [standard output]\n"); + fprintf(bcftools_stderr, " -s, --samples new sample names\n"); + fprintf(bcftools_stderr, "\n"); + exit(1); +} + +int main_bcftools_reheader(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + + static struct option loptions[] = + { + {"output",1,0,'o'}, + {"header",1,0,'h'}, + {"samples",1,0,'s'}, + {0,0,0,0} + }; + while ((c = getopt_long(argc, argv, "s:h:o:",loptions,NULL)) >= 0) + { + switch (c) + { + case 'o': args->output_fname = optarg; break; + case 's': args->samples_fname = optarg; break; + case 'h': args->header_fname = optarg; break; + case '?': usage(args); + default: error("Unknown argument: %s\n", optarg); + } + } + + if ( optind>=argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) args->fname = "-"; // reading from stdin + else usage(args); + } + else args->fname = argv[optind]; + + if ( !args->samples_fname && !args->header_fname ) usage(args); + if ( !args->fname ) usage(args); + + args->fp = hts_open(args->fname,"r"); + if ( !args->fp ) error("Failed to open: %s\n", args->fname); + args->type = *hts_get_format(args->fp); + + if ( args->type.format==vcf ) + { + if ( args->type.compression==bgzf || args->type.compression==gzip ) + reheader_vcf_gz(args); + else + reheader_vcf(args); + } + else + reheader_bcf(args, args->type.compression==bgzf || args->type.compression==gzip); + + free(args); + return 0; +} diff --git a/bcftools/smpl_ilist.c b/bcftools/smpl_ilist.c new file mode 100644 index 0000000..c7fa913 --- /dev/null +++ b/bcftools/smpl_ilist.c @@ -0,0 +1,106 @@ +/* + Copyright (C) 2016 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include "bcftools.h" +#include "smpl_ilist.h" + +void smpl_ilist_destroy(smpl_ilist_t *smpl) +{ + free(smpl->idx); + free(smpl); +} + +smpl_ilist_t *smpl_ilist_init(bcf_hdr_t *hdr, char *sample_list, int is_file, int flags) +{ + smpl_ilist_t *smpl = (smpl_ilist_t*) calloc(1,sizeof(smpl_ilist_t)); + + int i; + if ( !sample_list ) + { + smpl->n = bcf_hdr_nsamples(hdr); + smpl->idx = (int*) malloc(sizeof(int)*smpl->n); + for (i=0; in; i++) smpl->idx[i] = i; + return smpl; + } + + int nlist; + char **list = hts_readlist(sample_list[0]=='^'?sample_list+1:sample_list, is_file, &nlist); + if ( !list ) error("Could not parse %s\n", sample_list); + + // preserve the VCF order + int *tmp = (int*)calloc(bcf_hdr_nsamples(hdr),sizeof(int)); + for (i=0; i=0 ) + { + tmp[idx] = 1; + smpl->n++; + } + else if ( flags&SMPL_STRICT ) + error("No such sample: %s\n", list[i]); + } + + if ( sample_list[0]=='^' ) smpl->n = bcf_hdr_nsamples(hdr) - smpl->n; + smpl->idx = (int*) malloc(sizeof(int)*smpl->n); + + int j = 0; + if ( sample_list[0]!='^' ) + { + for (i=0; iidx[j++] = i; + } + else + { + for (i=0; iidx[j++] = i; + } + + free(tmp); + for (i=0; in = bcf_hdr_nsamples(hdr_a); + smpl->idx = (int*) malloc(sizeof(int)*smpl->n); + for (i=0; in; i++) + { + const char *name = bcf_hdr_int2id(hdr_a, BCF_DT_SAMPLE, i); + smpl->idx[i] = bcf_hdr_id2int(hdr_b, BCF_DT_SAMPLE, name); + if ( flags&SMPL_STRICT && smpl->idx[i]<0 ) + error("The sample %s is not present in the second file\n", name); + } + return smpl; +} + diff --git a/bcftools/smpl_ilist.c.pysam.c b/bcftools/smpl_ilist.c.pysam.c new file mode 100644 index 0000000..36f22a6 --- /dev/null +++ b/bcftools/smpl_ilist.c.pysam.c @@ -0,0 +1,108 @@ +#include "bcftools.pysam.h" + +/* + Copyright (C) 2016 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include "bcftools.h" +#include "smpl_ilist.h" + +void smpl_ilist_destroy(smpl_ilist_t *smpl) +{ + free(smpl->idx); + free(smpl); +} + +smpl_ilist_t *smpl_ilist_init(bcf_hdr_t *hdr, char *sample_list, int is_file, int flags) +{ + smpl_ilist_t *smpl = (smpl_ilist_t*) calloc(1,sizeof(smpl_ilist_t)); + + int i; + if ( !sample_list ) + { + smpl->n = bcf_hdr_nsamples(hdr); + smpl->idx = (int*) malloc(sizeof(int)*smpl->n); + for (i=0; in; i++) smpl->idx[i] = i; + return smpl; + } + + int nlist; + char **list = hts_readlist(sample_list[0]=='^'?sample_list+1:sample_list, is_file, &nlist); + if ( !list ) error("Could not parse %s\n", sample_list); + + // preserve the VCF order + int *tmp = (int*)calloc(bcf_hdr_nsamples(hdr),sizeof(int)); + for (i=0; i=0 ) + { + tmp[idx] = 1; + smpl->n++; + } + else if ( flags&SMPL_STRICT ) + error("No such sample: %s\n", list[i]); + } + + if ( sample_list[0]=='^' ) smpl->n = bcf_hdr_nsamples(hdr) - smpl->n; + smpl->idx = (int*) malloc(sizeof(int)*smpl->n); + + int j = 0; + if ( sample_list[0]!='^' ) + { + for (i=0; iidx[j++] = i; + } + else + { + for (i=0; iidx[j++] = i; + } + + free(tmp); + for (i=0; in = bcf_hdr_nsamples(hdr_a); + smpl->idx = (int*) malloc(sizeof(int)*smpl->n); + for (i=0; in; i++) + { + const char *name = bcf_hdr_int2id(hdr_a, BCF_DT_SAMPLE, i); + smpl->idx[i] = bcf_hdr_id2int(hdr_b, BCF_DT_SAMPLE, name); + if ( flags&SMPL_STRICT && smpl->idx[i]<0 ) + error("The sample %s is not present in the second file\n", name); + } + return smpl; +} + diff --git a/bcftools/smpl_ilist.h b/bcftools/smpl_ilist.h new file mode 100644 index 0000000..7083cf2 --- /dev/null +++ b/bcftools/smpl_ilist.h @@ -0,0 +1,47 @@ +/* + Copyright (C) 2016 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ +/* + Parse --samples and --samples-file +*/ + +#ifndef __SMPL_ILIST_H__ +#define __SMPL_ILIST_H__ + +#include + +#define SMPL_NONE 0 // flexible error recovery +#define SMPL_STRICT 1 // samples must exist + +typedef struct +{ + int *idx; // index to bcf_hdr_t.samples + int n; +} +smpl_ilist_t; + +smpl_ilist_t *smpl_ilist_init(bcf_hdr_t *hdr, char *sample_list, int is_file, int flags); +smpl_ilist_t *smpl_ilist_map(bcf_hdr_t *hdr_a, bcf_hdr_t *hdr_b, int flags); +void smpl_ilist_destroy(smpl_ilist_t *smpl); + +#endif diff --git a/bcftools/tabix.c b/bcftools/tabix.c new file mode 100644 index 0000000..c1874c2 --- /dev/null +++ b/bcftools/tabix.c @@ -0,0 +1,131 @@ +/* tabix.c -- tabix subcommand. + + Copyright (C) 2012 Broad Institute. + Copyright (C) 2013, 2016 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include + +int main_tabix(int argc, char *argv[]) +{ + int c, min_shift = -1, is_force = 0, is_all = 0, detect = 1; + tbx_conf_t conf = tbx_conf_gff; + while ((c = getopt(argc, argv, "0fap:s:b:e:S:c:m:")) >= 0) + if (c == '0') conf.preset |= TBX_UCSC; + else if (c == 'f') is_force = 1; + else if (c == 'a') is_all = 1; + else if (c == 'm') min_shift = atoi(optarg); + else if (c == 's') conf.sc = atoi(optarg); + else if (c == 'b') conf.bc = atoi(optarg); + else if (c == 'e') conf.ec = atoi(optarg); + else if (c == 'c') conf.meta_char = *optarg; + else if (c == 'S') conf.line_skip = atoi(optarg); + else if (c == 'p') { + if (strcmp(optarg, "gff") == 0) conf = tbx_conf_gff; + else if (strcmp(optarg, "bed") == 0) conf = tbx_conf_bed; + else if (strcmp(optarg, "sam") == 0) conf = tbx_conf_sam; + else if (strcmp(optarg, "vcf") == 0) conf = tbx_conf_vcf; + else { + fprintf(stderr, "The type '%s' not recognised\n", optarg); + return 1; + detect = 0; + } + + } + if (optind == argc) { + fprintf(stderr, "\nUsage: bcftools tabix [options] [reg1 [...]]\n\n"); + fprintf(stderr, "Options: -p STR preset: gff, bed, sam or vcf [gff]\n"); + fprintf(stderr, " -s INT column number for sequence names (suppressed by -p) [1]\n"); + fprintf(stderr, " -b INT column number for region start [4]\n"); + fprintf(stderr, " -e INT column number for region end (if no end, set INT to -b) [5]\n"); + fprintf(stderr, " -0 specify coordinates are zero-based\n"); + fprintf(stderr, " -S INT skip first INT lines [0]\n"); + fprintf(stderr, " -c CHAR skip lines starting with CHAR [null]\n"); + fprintf(stderr, " -a print all records\n"); + fprintf(stderr, " -f force to overwrite existing index\n"); + fprintf(stderr, " -m INT set the minimal interval size to 1<= 0) puts(s.s); + bgzf_close(fp); + free(s.s); + } else if (optind + 2 > argc) { // create index + if ( detect ) + { + // auto-detect file type by file name + int l = strlen(argv[optind]); + int strcasecmp(const char *s1, const char *s2); + if (l>=7 && strcasecmp(argv[optind]+l-7, ".gff.gz") == 0) conf = tbx_conf_gff; + else if (l>=7 && strcasecmp(argv[optind]+l-7, ".bed.gz") == 0) conf = tbx_conf_bed; + else if (l>=7 && strcasecmp(argv[optind]+l-7, ".sam.gz") == 0) conf = tbx_conf_sam; + else if (l>=7 && strcasecmp(argv[optind]+l-7, ".vcf.gz") == 0) conf = tbx_conf_vcf; + } + + if (!is_force) { + char *fn; + FILE *fp; + fn = (char*)malloc(strlen(argv[optind]) + 5); + strcat(strcpy(fn, argv[optind]), min_shift <= 0? ".tbi" : ".csi"); + if ((fp = fopen(fn, "rb")) != 0) { + fclose(fp); + free(fn); + fprintf(stderr, "[E::%s] the index file exists; use option '-f' to overwrite\n", __func__); + return 1; + } + free(fn); + } + if ( tbx_index_build(argv[optind], min_shift, &conf) ) + { + fprintf(stderr,"tbx_index_build failed: Is the file bgzip-compressed? Was wrong -p [type] option used?\n"); + return 1; + } + } else { // read with random access + tbx_t *tbx; + BGZF *fp; + kstring_t s; + int i; + if ((tbx = tbx_index_load(argv[optind])) == 0) return 1; + if ((fp = bgzf_open(argv[optind], "r")) == 0) return 1; + s.s = 0; s.l = s.m = 0; + for (i = optind + 1; i < argc; ++i) { + hts_itr_t *itr; + if ((itr = tbx_itr_querys(tbx, argv[i])) == 0) continue; + while (tbx_bgzf_itr_next(fp, tbx, itr, &s) >= 0) puts(s.s); + tbx_itr_destroy(itr); + } + free(s.s); + bgzf_close(fp); + tbx_destroy(tbx); + } + return 0; +} diff --git a/bcftools/tabix.c.pysam.c b/bcftools/tabix.c.pysam.c new file mode 100644 index 0000000..ba9e1b3 --- /dev/null +++ b/bcftools/tabix.c.pysam.c @@ -0,0 +1,133 @@ +#include "bcftools.pysam.h" + +/* tabix.c -- tabix subcommand. + + Copyright (C) 2012 Broad Institute. + Copyright (C) 2013, 2016 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include + +int main_tabix(int argc, char *argv[]) +{ + int c, min_shift = -1, is_force = 0, is_all = 0, detect = 1; + tbx_conf_t conf = tbx_conf_gff; + while ((c = getopt(argc, argv, "0fap:s:b:e:S:c:m:")) >= 0) + if (c == '0') conf.preset |= TBX_UCSC; + else if (c == 'f') is_force = 1; + else if (c == 'a') is_all = 1; + else if (c == 'm') min_shift = atoi(optarg); + else if (c == 's') conf.sc = atoi(optarg); + else if (c == 'b') conf.bc = atoi(optarg); + else if (c == 'e') conf.ec = atoi(optarg); + else if (c == 'c') conf.meta_char = *optarg; + else if (c == 'S') conf.line_skip = atoi(optarg); + else if (c == 'p') { + if (strcmp(optarg, "gff") == 0) conf = tbx_conf_gff; + else if (strcmp(optarg, "bed") == 0) conf = tbx_conf_bed; + else if (strcmp(optarg, "sam") == 0) conf = tbx_conf_sam; + else if (strcmp(optarg, "vcf") == 0) conf = tbx_conf_vcf; + else { + fprintf(bcftools_stderr, "The type '%s' not recognised\n", optarg); + return 1; + detect = 0; + } + + } + if (optind == argc) { + fprintf(bcftools_stderr, "\nUsage: bcftools tabix [options] [reg1 [...]]\n\n"); + fprintf(bcftools_stderr, "Options: -p STR preset: gff, bed, sam or vcf [gff]\n"); + fprintf(bcftools_stderr, " -s INT column number for sequence names (suppressed by -p) [1]\n"); + fprintf(bcftools_stderr, " -b INT column number for region start [4]\n"); + fprintf(bcftools_stderr, " -e INT column number for region end (if no end, set INT to -b) [5]\n"); + fprintf(bcftools_stderr, " -0 specify coordinates are zero-based\n"); + fprintf(bcftools_stderr, " -S INT skip first INT lines [0]\n"); + fprintf(bcftools_stderr, " -c CHAR skip lines starting with CHAR [null]\n"); + fprintf(bcftools_stderr, " -a print all records\n"); + fprintf(bcftools_stderr, " -f force to overwrite existing index\n"); + fprintf(bcftools_stderr, " -m INT set the minimal interval size to 1<= 0) fputs(s.s, bcftools_stdout) & fputc('\n', bcftools_stdout); + bgzf_close(fp); + free(s.s); + } else if (optind + 2 > argc) { // create index + if ( detect ) + { + // auto-detect file type by file name + int l = strlen(argv[optind]); + int strcasecmp(const char *s1, const char *s2); + if (l>=7 && strcasecmp(argv[optind]+l-7, ".gff.gz") == 0) conf = tbx_conf_gff; + else if (l>=7 && strcasecmp(argv[optind]+l-7, ".bed.gz") == 0) conf = tbx_conf_bed; + else if (l>=7 && strcasecmp(argv[optind]+l-7, ".sam.gz") == 0) conf = tbx_conf_sam; + else if (l>=7 && strcasecmp(argv[optind]+l-7, ".vcf.gz") == 0) conf = tbx_conf_vcf; + } + + if (!is_force) { + char *fn; + FILE *fp; + fn = (char*)malloc(strlen(argv[optind]) + 5); + strcat(strcpy(fn, argv[optind]), min_shift <= 0? ".tbi" : ".csi"); + if ((fp = fopen(fn, "rb")) != 0) { + fclose(fp); + free(fn); + fprintf(bcftools_stderr, "[E::%s] the index file exists; use option '-f' to overwrite\n", __func__); + return 1; + } + free(fn); + } + if ( tbx_index_build(argv[optind], min_shift, &conf) ) + { + fprintf(bcftools_stderr,"tbx_index_build failed: Is the file bgzip-compressed? Was wrong -p [type] option used?\n"); + return 1; + } + } else { // read with random access + tbx_t *tbx; + BGZF *fp; + kstring_t s; + int i; + if ((tbx = tbx_index_load(argv[optind])) == 0) return 1; + if ((fp = bgzf_open(argv[optind], "r")) == 0) return 1; + s.s = 0; s.l = s.m = 0; + for (i = optind + 1; i < argc; ++i) { + hts_itr_t *itr; + if ((itr = tbx_itr_querys(tbx, argv[i])) == 0) continue; + while (tbx_bgzf_itr_next(fp, tbx, itr, &s) >= 0) fputs(s.s, bcftools_stdout) & fputc('\n', bcftools_stdout); + tbx_itr_destroy(itr); + } + free(s.s); + bgzf_close(fp); + tbx_destroy(tbx); + } + return 0; +} diff --git a/bcftools/tsv2vcf.c b/bcftools/tsv2vcf.c new file mode 100644 index 0000000..2e1aa52 --- /dev/null +++ b/bcftools/tsv2vcf.c @@ -0,0 +1,122 @@ +/* tsv2vcf.c -- convert from whitespace-separated fields to VCF + + Copyright (C) 2014 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include +#include +#include "tsv2vcf.h" + +tsv_t *tsv_init(const char *str) +{ + tsv_t *tsv = (tsv_t *) calloc(1,sizeof(tsv_t)); + kstring_t tmp = {0,0,0}; + const char *ss = str, *se = ss; + tsv->ncols = 0; + while ( *ss ) + { + if ( *se && *se!=',' ) { se++; continue; } + tsv->ncols++; + tsv->cols = (tsv_col_t*) realloc(tsv->cols,sizeof(tsv_col_t)*tsv->ncols); + tsv->cols[tsv->ncols-1].name = NULL; + tsv->cols[tsv->ncols-1].setter = NULL; + tmp.l = 0; + kputsn(ss, se-ss, &tmp); + if ( strcasecmp("-",tmp.s) ) + tsv->cols[tsv->ncols-1].name = strdup(tmp.s); + if ( !*se ) break; + ss = ++se; + } + free(tmp.s); + return tsv; +} + +void tsv_destroy(tsv_t *tsv) +{ + int i; + for (i=0; incols; i++) free(tsv->cols[i].name); + free(tsv->cols); + free(tsv); +} + +int tsv_register(tsv_t *tsv, const char *id, tsv_setter_t setter, void *usr) +{ + int i; + for (i=0; incols; i++) + { + if ( !tsv->cols[i].name || strcasecmp(tsv->cols[i].name,id) ) continue; + tsv->cols[i].setter = setter; + tsv->cols[i].usr = usr; + return 0; + } + return -1; +} + +int tsv_parse(tsv_t *tsv, bcf1_t *rec, char *str) +{ + int status = 0; + tsv->icol = 0; + tsv->ss = tsv->se = str; + while ( *tsv->ss && tsv->icol < tsv->ncols ) + { + while ( *tsv->se && !isspace(*tsv->se) ) tsv->se++; + if ( tsv->cols[tsv->icol].setter ) + { + int ret = tsv->cols[tsv->icol].setter(tsv,rec,tsv->cols[tsv->icol].usr); + if ( ret<0 ) return -1; + status++; + } + while ( *tsv->se && isspace(*tsv->se) ) tsv->se++; + tsv->ss = tsv->se; + tsv->icol++; + } + return status ? 0 : -1; +} + +int tsv_setter_chrom(tsv_t *tsv, bcf1_t *rec, void *usr) +{ + char tmp = *tsv->se; + *tsv->se = 0; + rec->rid = bcf_hdr_name2id((bcf_hdr_t*)usr, tsv->ss); + *tsv->se = tmp; + return rec->rid==-1 ? -1 : 0; +} + +int tsv_setter_pos(tsv_t *tsv, bcf1_t *rec, void *usr) +{ + char *endptr; + rec->pos = strtol(tsv->ss, &endptr, 10) - 1; + if ( tsv->ss==endptr ) return -1; + return 0; +} + +int tsv_setter_id(tsv_t *tsv, bcf1_t *rec, void *usr) +{ + char tmp = *tsv->se; + *tsv->se = 0; + bcf_update_id((bcf_hdr_t*)usr, rec, tsv->ss); + *tsv->se = tmp; + return 0; +} + + diff --git a/bcftools/tsv2vcf.c.pysam.c b/bcftools/tsv2vcf.c.pysam.c new file mode 100644 index 0000000..f6aabf5 --- /dev/null +++ b/bcftools/tsv2vcf.c.pysam.c @@ -0,0 +1,124 @@ +#include "bcftools.pysam.h" + +/* tsv2vcf.c -- convert from whitespace-separated fields to VCF + + Copyright (C) 2014 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include +#include +#include "tsv2vcf.h" + +tsv_t *tsv_init(const char *str) +{ + tsv_t *tsv = (tsv_t *) calloc(1,sizeof(tsv_t)); + kstring_t tmp = {0,0,0}; + const char *ss = str, *se = ss; + tsv->ncols = 0; + while ( *ss ) + { + if ( *se && *se!=',' ) { se++; continue; } + tsv->ncols++; + tsv->cols = (tsv_col_t*) realloc(tsv->cols,sizeof(tsv_col_t)*tsv->ncols); + tsv->cols[tsv->ncols-1].name = NULL; + tsv->cols[tsv->ncols-1].setter = NULL; + tmp.l = 0; + kputsn(ss, se-ss, &tmp); + if ( strcasecmp("-",tmp.s) ) + tsv->cols[tsv->ncols-1].name = strdup(tmp.s); + if ( !*se ) break; + ss = ++se; + } + free(tmp.s); + return tsv; +} + +void tsv_destroy(tsv_t *tsv) +{ + int i; + for (i=0; incols; i++) free(tsv->cols[i].name); + free(tsv->cols); + free(tsv); +} + +int tsv_register(tsv_t *tsv, const char *id, tsv_setter_t setter, void *usr) +{ + int i; + for (i=0; incols; i++) + { + if ( !tsv->cols[i].name || strcasecmp(tsv->cols[i].name,id) ) continue; + tsv->cols[i].setter = setter; + tsv->cols[i].usr = usr; + return 0; + } + return -1; +} + +int tsv_parse(tsv_t *tsv, bcf1_t *rec, char *str) +{ + int status = 0; + tsv->icol = 0; + tsv->ss = tsv->se = str; + while ( *tsv->ss && tsv->icol < tsv->ncols ) + { + while ( *tsv->se && !isspace(*tsv->se) ) tsv->se++; + if ( tsv->cols[tsv->icol].setter ) + { + int ret = tsv->cols[tsv->icol].setter(tsv,rec,tsv->cols[tsv->icol].usr); + if ( ret<0 ) return -1; + status++; + } + while ( *tsv->se && isspace(*tsv->se) ) tsv->se++; + tsv->ss = tsv->se; + tsv->icol++; + } + return status ? 0 : -1; +} + +int tsv_setter_chrom(tsv_t *tsv, bcf1_t *rec, void *usr) +{ + char tmp = *tsv->se; + *tsv->se = 0; + rec->rid = bcf_hdr_name2id((bcf_hdr_t*)usr, tsv->ss); + *tsv->se = tmp; + return rec->rid==-1 ? -1 : 0; +} + +int tsv_setter_pos(tsv_t *tsv, bcf1_t *rec, void *usr) +{ + char *endptr; + rec->pos = strtol(tsv->ss, &endptr, 10) - 1; + if ( tsv->ss==endptr ) return -1; + return 0; +} + +int tsv_setter_id(tsv_t *tsv, bcf1_t *rec, void *usr) +{ + char tmp = *tsv->se; + *tsv->se = 0; + bcf_update_id((bcf_hdr_t*)usr, rec, tsv->ss); + *tsv->se = tmp; + return 0; +} + + diff --git a/bcftools/tsv2vcf.h b/bcftools/tsv2vcf.h new file mode 100644 index 0000000..6fe5b45 --- /dev/null +++ b/bcftools/tsv2vcf.h @@ -0,0 +1,85 @@ +/* tsv2vcf.h -- convert from whitespace-separated fields to VCF + + Copyright (C) 2014 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#ifndef __TSV2VCF_H__ +#define __TSV2VCF_H__ + +#include + +typedef struct _tsv_t tsv_t; +typedef int (*tsv_setter_t)(tsv_t *, bcf1_t *, void *); + +typedef struct +{ + char *name; + tsv_setter_t setter; + void *usr; +} +tsv_col_t; + +struct _tsv_t +{ + int ncols, icol; + tsv_col_t *cols; + char *se, *ss; +}; + +tsv_t *tsv_init(const char *str); +void tsv_destroy(tsv_t *tsv); +int tsv_register(tsv_t *tsv, const char *id, tsv_setter_t setter, void *usr); + +/** + * tsv_parse() - parse tsv line and fill VCF record + * Returns 0 on success or -1 on parse error + */ +int tsv_parse(tsv_t *tsv, bcf1_t *rec, char *str); + +/** + * tstv_next() - position ss,se to next field; first pass with ss=se=str + * Returns 0 on success, or -1 if no more fields + */ +static inline int tsv_next(tsv_t *tsv) +{ + if ( !*tsv->se ) return -1; + if ( tsv->ss==tsv->se ) + { + while ( *tsv->se && !isspace(*tsv->se) ) tsv->se++; + return 0; + } + while ( *tsv->se && isspace(*tsv->se) ) tsv->se++; + tsv->ss = tsv->se; + while ( *tsv->se && !isspace(*tsv->se) ) tsv->se++; + return 0; +} + +/** + * The setters return 0 on success or negative value if the line is to be skipped. + */ +int tsv_setter_chrom(tsv_t *tsv, bcf1_t *rec, void *usr); +int tsv_setter_pos(tsv_t *tsv, bcf1_t *rec, void *usr); +int tsv_setter_id(tsv_t *tsv, bcf1_t *rec, void *usr); + +#endif + diff --git a/bcftools/vcfannotate.c b/bcftools/vcfannotate.c new file mode 100644 index 0000000..e6efda9 --- /dev/null +++ b/bcftools/vcfannotate.c @@ -0,0 +1,2020 @@ +/* vcfannotate.c -- Annotate and edit VCF/BCF files. + + Copyright (C) 2013-2016 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "vcmp.h" +#include "filter.h" +#include "convert.h" +#include "smpl_ilist.h" + +struct _args_t; + +typedef struct _rm_tag_t +{ + char *key; + int hdr_id; + void (*handler)(struct _args_t *, bcf1_t *, struct _rm_tag_t *); +} +rm_tag_t; + +typedef struct +{ + char **cols; + int ncols, mcols; + char **als; + int nals, mals; + kstring_t line; + int rid, start, end; +} +annot_line_t; + +#define REPLACE_MISSING 0 // replace only missing values +#define REPLACE_ALL 1 // replace both missing and existing values +#define REPLACE_NON_MISSING 2 // replace only if tgt is not missing +#define SET_OR_APPEND 3 // set new value if missing or non-existent, append otherwise +typedef struct _annot_col_t +{ + int icol, replace, number; // number: one of BCF_VL_* types + char *hdr_key_src, *hdr_key_dst; + int (*setter)(struct _args_t *, bcf1_t *, struct _annot_col_t *, void*); +} +annot_col_t; + +// Logic of the filters: include or exclude sites which match the filters? +#define FLT_INCLUDE 1 +#define FLT_EXCLUDE 2 + +#define MARK_LISTED 1 +#define MARK_UNLISTED 2 + +typedef struct _args_t +{ + bcf_srs_t *files; + bcf_hdr_t *hdr, *hdr_out; + htsFile *out_fh; + int output_type, n_threads; + bcf_sr_regions_t *tgts; + + filter_t *filter; + char *filter_str; + int filter_logic; // include or exclude sites which match the filters? One of FLT_INCLUDE/FLT_EXCLUDE + + rm_tag_t *rm; // tags scheduled for removal + int nrm; + int flt_keep_pass; // when all filters removed, reset to PASS + + vcmp_t *vcmp; // for matching annotation and VCF lines by allele + annot_line_t *alines; // buffered annotation lines + int nalines, malines; + int ref_idx, alt_idx, chr_idx, from_idx, to_idx; // -1 if not present + annot_col_t *cols; // column indexes and setters + int ncols; + + char *set_ids_fmt; + convert_t *set_ids; + int set_ids_replace; + + int nsmpl_annot; + int *sample_map, nsample_map, sample_is_file; // map[idst] -> isrc + int mtmpi, mtmpf, mtmps; + int mtmpi2, mtmpf2, mtmps2; + int mtmpi3, mtmpf3, mtmps3; + int32_t *tmpi, *tmpi2, *tmpi3; + float *tmpf, *tmpf2, *tmpf3; + char *tmps, *tmps2, **tmpp, **tmpp2; + kstring_t tmpks; + + char **argv, *output_fname, *targets_fname, *regions_list, *header_fname; + char *remove_annots, *columns, *rename_chrs, *sample_names, *mark_sites; + int argc, drop_header, record_cmd_line, tgts_is_vcf, mark_sites_logic; +} +args_t; + +char *msprintf(const char *fmt, ...); + +void remove_id(args_t *args, bcf1_t *line, rm_tag_t *tag) +{ + bcf_update_id(args->hdr,line,NULL); +} +void remove_filter(args_t *args, bcf1_t *line, rm_tag_t *tag) +{ + if ( !tag->key ) bcf_update_filter(args->hdr, line, NULL, args->flt_keep_pass); + else bcf_remove_filter(args->hdr, line, tag->hdr_id, args->flt_keep_pass); +} +void remove_qual(args_t *args, bcf1_t *line, rm_tag_t *tag) +{ + bcf_float_set_missing(line->qual); +} +void remove_info(args_t *args, bcf1_t *line, rm_tag_t *tag) +{ + // remove all INFO fields + if ( !(line->unpacked & BCF_UN_INFO) ) bcf_unpack(line, BCF_UN_INFO); + + int i; + for (i=0; in_info; i++) + { + bcf_info_t *inf = &line->d.info[i]; + if ( inf->vptr_free ) + { + free(inf->vptr - inf->vptr_off); + inf->vptr_free = 0; + } + line->d.shared_dirty |= BCF1_DIRTY_INF; + inf->vptr = NULL; + inf->vptr_off = inf->vptr_len = 0; + } +} +void remove_info_tag(args_t *args, bcf1_t *line, rm_tag_t *tag) +{ + bcf_update_info(args->hdr, line, tag->key, NULL, 0, BCF_HT_INT); // the type does not matter with n=0 +} +void remove_format_tag(args_t *args, bcf1_t *line, rm_tag_t *tag) +{ + bcf_update_format(args->hdr, line, tag->key, NULL, 0, BCF_HT_INT); // the type does not matter with n=0 +} +void remove_format(args_t *args, bcf1_t *line, rm_tag_t *tag) +{ + // remove all FORMAT fields except GT + if ( !(line->unpacked & BCF_UN_FMT) ) bcf_unpack(line, BCF_UN_FMT); + + int i; + for (i=0; in_fmt; i++) + { + bcf_fmt_t *fmt = &line->d.fmt[i]; + const char *key = bcf_hdr_int2id(args->hdr,BCF_DT_ID,fmt->id); + if ( key[0]=='G' && key[1]=='T' && !key[2] ) continue; + + if ( fmt->p_free ) + { + free(fmt->p - fmt->p_off); + fmt->p_free = 0; + } + line->d.indiv_dirty = 1; + fmt->p = NULL; + } +} + +#include "htslib/khash.h" +KHASH_MAP_INIT_STR(vdict, bcf_idinfo_t) +typedef khash_t(vdict) vdict_t; + +static void remove_hdr_lines(bcf_hdr_t *hdr, int type) +{ + int i = 0, nrm = 0; + while ( inhrec ) + { + if ( hdr->hrec[i]->type!=type ) { i++; continue; } + bcf_hrec_t *hrec = hdr->hrec[i]; + if ( type==BCF_HL_FMT || type==BCF_HL_INFO || type==BCF_HL_FMT || type== BCF_HL_CTG ) + { + // everything except FORMAT/GT + int id = bcf_hrec_find_key(hrec, "ID"); + if ( id>=0 ) + { + if ( type==BCF_HL_FMT && !strcmp(hrec->vals[id],"GT") ) { i++; continue; } + vdict_t *d = type==BCF_HL_CTG ? (vdict_t*)hdr->dict[BCF_DT_CTG] : (vdict_t*)hdr->dict[BCF_DT_ID]; + khint_t k = kh_get(vdict, d, hdr->hrec[i]->vals[id]); + kh_val(d, k).hrec[type==BCF_HL_CTG?0:type] = NULL; + kh_val(d, k).info[type] |= 0xf; + } + } + nrm++; + hdr->nhrec--; + if ( i < hdr->nhrec ) + memmove(&hdr->hrec[i],&hdr->hrec[i+1],(hdr->nhrec-i)*sizeof(bcf_hrec_t*)); + bcf_hrec_destroy(hrec); + } + if ( nrm ) bcf_hdr_sync(hdr); +} + +static void init_remove_annots(args_t *args) +{ + int keep_info = 0, keep_fmt = 0, keep_flt = 0; + void *keep = khash_str2int_init(); + kstring_t str = {0,0,0}; + char *ss = args->remove_annots; + while ( *ss ) + { + args->nrm++; + args->rm = (rm_tag_t*) realloc(args->rm,sizeof(rm_tag_t)*args->nrm); + rm_tag_t *tag = &args->rm[args->nrm-1]; + tag->key = NULL; + + int type = BCF_HL_GEN; + if ( !strncasecmp("INFO/",ss,5) ) { type = BCF_HL_INFO; ss += 5; } + else if ( !strncasecmp("INF/",ss,4) ) { type = BCF_HL_INFO; ss += 4; } + else if ( !strncasecmp("FORMAT/",ss,7) ) { type = BCF_HL_FMT; ss += 7; } + else if ( !strncasecmp("FMT/",ss,4) ) { type = BCF_HL_FMT; ss += 4; } + else if ( !strncasecmp("FILTER/",ss,7) ) { type = BCF_HL_FLT; ss += 7; } + else if ( !strncasecmp("^INFO/",ss,6) ) { type = BCF_HL_INFO; ss += 6; keep_info = 1; } + else if ( !strncasecmp("^INF/",ss,5) ) { type = BCF_HL_INFO; ss += 5; keep_info = 1; } + else if ( !strncasecmp("^FORMAT/",ss,8) ) { type = BCF_HL_FMT; ss += 8; keep_fmt = 1; } + else if ( !strncasecmp("^FMT/",ss,5) ) { type = BCF_HL_FMT; ss += 5; keep_fmt = 1; } + else if ( !strncasecmp("^FILTER/",ss,8) ) { type = BCF_HL_FLT; ss += 8; keep_flt = 1; } + + char *se = ss; + while ( *se && *se!=',' ) se++; + str.l = 0; + kputsn(ss, se-ss, &str); + + if ( type==BCF_HL_FLT ) + { + if ( !keep_flt ) + { + args->flt_keep_pass = 1; + tag->handler = remove_filter; + tag->key = strdup(str.s); + tag->hdr_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, tag->key); + if ( !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FLT,tag->hdr_id) ) error("Cannot remove %s, not defined in the header.\n", str.s); + bcf_hdr_remove(args->hdr_out,BCF_HL_FLT,tag->key); + } + else + { + int value, ret = khash_str2int_get(keep, str.s, &value); + if ( ret==-1 ) khash_str2int_set(keep, strdup(str.s),1<nrm--; + } + } + else if ( type!=BCF_HL_GEN ) + { + int id = bcf_hdr_id2int(args->hdr,BCF_DT_ID,str.s); + if ( !bcf_hdr_idinfo_exists(args->hdr,type,id) ) + { + fprintf(stderr,"Warning: The tag \"%s\" not defined in the header\n", str.s); + args->nrm--; + } + else if ( (type==BCF_HL_FMT && keep_fmt) || (type==BCF_HL_INFO && keep_info) ) + { + int value, ret = khash_str2int_get(keep, str.s, &value); + if ( ret==-1 ) khash_str2int_set(keep, strdup(str.s),1<nrm--; + } + else + { + tag->key = strdup(str.s); + if ( type==BCF_HL_INFO ) tag->handler = remove_info_tag; + else if ( type==BCF_HL_FMT ) tag->handler = remove_format_tag; + bcf_hdr_remove(args->hdr_out,type,tag->key); + } + } + else if ( !strcasecmp("ID",str.s) ) tag->handler = remove_id; + else if ( !strcasecmp("FILTER",str.s) ) + { + tag->handler = remove_filter; + remove_hdr_lines(args->hdr_out,BCF_HL_FLT); + } + else if ( !strcasecmp("QUAL",str.s) ) tag->handler = remove_qual; + else if ( !strcasecmp("INFO",str.s) ) + { + tag->handler = remove_info; + remove_hdr_lines(args->hdr_out,BCF_HL_INFO); + } + else if ( !strcasecmp("FMT",str.s) || !strcasecmp("FORMAT",str.s) ) + { + tag->handler = remove_format; + remove_hdr_lines(args->hdr_out,BCF_HL_FMT); + } + else if ( str.l ) + { + if ( str.s[0]=='#' && str.s[1]=='#' ) + bcf_hdr_remove(args->hdr_out,BCF_HL_GEN,str.s+2); + else + bcf_hdr_remove(args->hdr_out,BCF_HL_STR,str.s); + args->nrm--; + } + + ss = *se ? se+1 : se; + } + free(str.s); + if ( keep_flt || keep_info || keep_fmt ) + { + int j; + for (j=0; jhdr->nhrec; j++) + { + bcf_hrec_t *hrec = args->hdr->hrec[j]; + if ( hrec->type!=BCF_HL_FLT && hrec->type!=BCF_HL_INFO && hrec->type!=BCF_HL_FMT ) continue; + if ( !keep_flt && hrec->type==BCF_HL_FLT ) continue; + if ( !keep_info && hrec->type==BCF_HL_INFO ) continue; + if ( !keep_fmt && hrec->type==BCF_HL_FMT ) continue; + int k = bcf_hrec_find_key(hrec,"ID"); + assert( k>=0 ); // this should always be true for valid VCFs + int value, ret = khash_str2int_get(keep,hrec->vals[k],&value); + if ( ret==0 && value>>hrec->type ) // keep + { + if ( hrec->type==BCF_HL_FLT && !strcmp("PASS",hrec->vals[k]) ) args->flt_keep_pass = 1; + continue; + } + args->nrm++; + args->rm = (rm_tag_t*) realloc(args->rm,sizeof(rm_tag_t)*args->nrm); + rm_tag_t *tag = &args->rm[args->nrm-1]; + if ( hrec->type==BCF_HL_INFO ) tag->handler = remove_info_tag; + else if ( hrec->type==BCF_HL_FMT ) tag->handler = remove_format_tag; + else + { + tag->handler = remove_filter; + tag->hdr_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, hrec->vals[k]); + } + tag->key = strdup(hrec->vals[k]); + bcf_hdr_remove(args->hdr_out,hrec->type,tag->key); + } + } + khash_str2int_destroy_free(keep); + if ( !args->nrm ) error("No matching tag in -x %s\n", args->remove_annots); + bcf_hdr_sync(args->hdr_out); +} +static void init_header_lines(args_t *args) +{ + htsFile *file = hts_open(args->header_fname, "rb"); + if ( !file ) error("Error reading %s\n", args->header_fname); + kstring_t str = {0,0,0}; + while ( hts_getline(file, KS_SEP_LINE, &str) > 0 ) + { + if ( bcf_hdr_append(args->hdr_out,str.s) ) error("Could not parse %s: %s\n", args->header_fname, str.s); + bcf_hdr_append(args->hdr,str.s); // the input file may not have the header line if run with -h (and nothing else) + } + hts_close(file); + free(str.s); + bcf_hdr_sync(args->hdr_out); + bcf_hdr_sync(args->hdr); +} +static int setter_filter(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + // note: so far this works only with one filter, not a list of filters + annot_line_t *tab = (annot_line_t*) data; + if ( tab->cols[col->icol] && tab->cols[col->icol][0]=='.' && !tab->cols[col->icol][1] ) return 0; // don't replace with "." + hts_expand(int,1,args->mtmpi,args->tmpi); + args->tmpi[0] = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, tab->cols[col->icol]); + if ( args->tmpi[0]<0 ) error("The FILTER is not defined in the header: %s\n", tab->cols[col->icol]); + if ( col->replace==SET_OR_APPEND ) { bcf_add_filter(args->hdr_out,line,args->tmpi[0]); return 0; } + if ( col->replace!=REPLACE_MISSING ) + { + bcf_update_filter(args->hdr_out,line,NULL,0); + bcf_update_filter(args->hdr_out,line,args->tmpi,1); + return 0; + } + + // only update missing FILTER + if ( !(line->unpacked & BCF_UN_FLT) ) bcf_unpack(line, BCF_UN_FLT); + if ( !line->d.n_flt ) + bcf_update_filter(args->hdr_out,line,args->tmpi,1); + return 0; +} +static int vcf_setter_filter(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + int i; + bcf1_t *rec = (bcf1_t*) data; + if ( !(rec->unpacked & BCF_UN_FLT) ) bcf_unpack(rec, BCF_UN_FLT); + if ( !(line->unpacked & BCF_UN_FLT) ) bcf_unpack(line, BCF_UN_FLT); + if ( !rec->d.n_flt ) return 0; // don't overwrite with a missing value + if ( col->replace==SET_OR_APPEND || col->replace==REPLACE_MISSING ) + { + if ( col->replace==REPLACE_MISSING && line->d.n_flt ) return 0; // only update missing FILTER + for (i=0; id.n_flt; i++) + { + const char *flt = bcf_hdr_int2id(args->files->readers[1].header, BCF_DT_ID, rec->d.flt[i]); + bcf_add_filter(args->hdr_out,line,bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, flt)); + } + return 0; + } + hts_expand(int,rec->d.n_flt,args->mtmpi,args->tmpi); + for (i=0; id.n_flt; i++) + { + const char *flt = bcf_hdr_int2id(args->files->readers[1].header, BCF_DT_ID, rec->d.flt[i]); + args->tmpi[i] = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, flt); + } + bcf_update_filter(args->hdr_out,line,NULL,0); + bcf_update_filter(args->hdr_out,line,args->tmpi,rec->d.n_flt); + return 0; +} +static int setter_id(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + // possible cases: + // IN ANNOT OUT ACHIEVED_BY + // x y x -c +ID + // x y y -c ID + // x y x,y -c =ID + // x . x -c +ID, ID + // x . . -x ID + // . y y -c +ID, -c ID + // + annot_line_t *tab = (annot_line_t*) data; + if ( tab->cols[col->icol] && tab->cols[col->icol][0]=='.' && !tab->cols[col->icol][1] ) return 0; // don't replace with "." + if ( col->replace==SET_OR_APPEND ) return bcf_add_id(args->hdr_out,line,tab->cols[col->icol]); + if ( col->replace!=REPLACE_MISSING ) return bcf_update_id(args->hdr_out,line,tab->cols[col->icol]); + + // running with +ID, only update missing ids + if ( !line->d.id || (line->d.id[0]=='.' && !line->d.id[1]) ) + return bcf_update_id(args->hdr_out,line,tab->cols[col->icol]); + return 0; +} +static int vcf_setter_id(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + bcf1_t *rec = (bcf1_t*) data; + if ( rec->d.id && rec->d.id[0]=='.' && !rec->d.id[1] ) return 0; // don't replace with "." + if ( col->replace==SET_OR_APPEND ) return bcf_add_id(args->hdr_out,line,rec->d.id); + if ( col->replace!=REPLACE_MISSING ) return bcf_update_id(args->hdr_out,line,rec->d.id); + + // running with +ID, only update missing ids + if ( !line->d.id || (line->d.id[0]=='.' && !line->d.id[1]) ) + return bcf_update_id(args->hdr_out,line,rec->d.id); + return 0; +} +static int setter_qual(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + annot_line_t *tab = (annot_line_t*) data; + char *str = tab->cols[col->icol]; + if ( str[0]=='.' && str[1]==0 ) return 0; // empty + + if ( col->replace==REPLACE_MISSING && !bcf_float_is_missing(line->qual) ) return 0; + + line->qual = strtod(str, &str); + if ( str == tab->cols[col->icol] ) + error("Could not parse %s at %s:%d .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]); + return 0; +} +static int vcf_setter_qual(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + bcf1_t *rec = (bcf1_t*) data; + if ( bcf_float_is_missing(rec->qual) ) return 0; + if ( col->replace==REPLACE_MISSING && !bcf_float_is_missing(line->qual) ) return 0; + line->qual = rec->qual; + return 0; +} +static int setter_info_flag(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + annot_line_t *tab = (annot_line_t*) data; + char *str = tab->cols[col->icol]; + if ( str[0]=='.' && str[1]==0 ) return 0; + + if ( str[0]=='1' && str[1]==0 ) return bcf_update_info_flag(args->hdr_out,line,col->hdr_key_dst,NULL,1); + if ( str[0]=='0' && str[1]==0 ) return bcf_update_info_flag(args->hdr_out,line,col->hdr_key_dst,NULL,0); + error("Could not parse %s at %s:%d .. [%s]\n", bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]); + return -1; +} +static int vcf_setter_info_flag(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + bcf1_t *rec = (bcf1_t*) data; + int flag = bcf_get_info_flag(args->files->readers[1].header,rec,col->hdr_key_src,NULL,NULL); + bcf_update_info_flag(args->hdr_out,line,col->hdr_key_dst,NULL,flag); + return 0; +} +static int setter_ARinfo_int32(args_t *args, bcf1_t *line, annot_col_t *col, int nals, char **als, int ntmpi) +{ + if ( col->number==BCF_VL_A && ntmpi!=nals-1 && (ntmpi!=1 || args->tmpi[0]!=bcf_int32_missing || args->tmpi[1]!=bcf_int32_vector_end) ) + error("Incorrect number of values (%d) for the %s tag at %s:%d\n", ntmpi,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1); + else if ( col->number==BCF_VL_R && ntmpi!=nals && (ntmpi!=1 || args->tmpi[0]!=bcf_int32_missing || args->tmpi[1]!=bcf_int32_vector_end) ) + error("Incorrect number of values (%d) for the %s tag at %s:%d\n", ntmpi,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1); + + int ndst = col->number==BCF_VL_A ? line->n_allele - 1 : line->n_allele; + int *map = vcmp_map_ARvalues(args->vcmp,ndst,nals,als,line->n_allele,line->d.allele); + if ( !map ) error("REF alleles not compatible at %s:%d\n"); + + // fill in any missing values in the target VCF (or all, if not present) + int ntmpi2 = bcf_get_info_float(args->hdr, line, col->hdr_key_dst, &args->tmpi2, &args->mtmpi2); + if ( ntmpi2 < ndst ) hts_expand(int32_t,ndst,args->mtmpi2,args->tmpi2); + + int i; + for (i=0; itmpi2[i] = bcf_int32_missing; + continue; + } + if ( ntmpi2==ndst && col->replace==REPLACE_MISSING + && args->tmpi2[i]!=bcf_int32_missing + && args->tmpi2[i]!=bcf_int32_vector_end ) continue; + + args->tmpi2[i] = args->tmpi[ map[i] ]; + } + bcf_update_info_int32(args->hdr_out,line,col->hdr_key_dst,args->tmpi2,ndst); + return 0; +} +static int setter_info_int(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + annot_line_t *tab = (annot_line_t*) data; + char *str = tab->cols[col->icol], *end = str; + if ( str[0]=='.' && str[1]==0 ) return 0; + + int ntmpi = 0; + while ( *end ) + { + int val = strtol(str, &end, 10); + if ( end==str ) + error("Could not parse %s at %s:%d .. [%s]\n", bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]); + ntmpi++; + hts_expand(int32_t,ntmpi,args->mtmpi,args->tmpi); + args->tmpi[ntmpi-1] = val; + str = end+1; + } + + if ( col->number==BCF_VL_A || col->number==BCF_VL_R ) + return setter_ARinfo_int32(args,line,col,tab->nals,tab->als,ntmpi); + + if ( col->replace==REPLACE_MISSING ) + { + int ret = bcf_get_info_int32(args->hdr, line, col->hdr_key_dst, &args->tmpi2, &args->mtmpi2); + if ( ret>0 && args->tmpi2[0]!=bcf_int32_missing ) return 0; + } + + bcf_update_info_int32(args->hdr_out,line,col->hdr_key_dst,args->tmpi,ntmpi); + return 0; +} +static int vcf_setter_info_int(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + bcf1_t *rec = (bcf1_t*) data; + int ntmpi = bcf_get_info_int32(args->files->readers[1].header,rec,col->hdr_key_src,&args->tmpi,&args->mtmpi); + if ( ntmpi < 0 ) return 0; // nothing to add + + if ( col->number==BCF_VL_A || col->number==BCF_VL_R ) + return setter_ARinfo_int32(args,line,col,rec->n_allele,rec->d.allele,ntmpi); + + if ( col->replace==REPLACE_MISSING ) + { + int ret = bcf_get_info_int32(args->hdr, line, col->hdr_key_dst, &args->tmpi2, &args->mtmpi2); + if ( ret>0 && args->tmpi2[0]!=bcf_int32_missing ) return 0; + } + + bcf_update_info_int32(args->hdr_out,line,col->hdr_key_dst,args->tmpi,ntmpi); + return 0; +} +static int setter_ARinfo_real(args_t *args, bcf1_t *line, annot_col_t *col, int nals, char **als, int ntmpf) +{ + if ( col->number==BCF_VL_A && ntmpf!=nals-1 && (ntmpf!=1 || !bcf_float_is_missing(args->tmpf[0]) || !bcf_float_is_vector_end(args->tmpf[0])) ) + error("Incorrect number of values (%d) for the %s tag at %s:%d\n", ntmpf,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1); + else if ( col->number==BCF_VL_R && ntmpf!=nals && (ntmpf!=1 || !bcf_float_is_missing(args->tmpf[0]) || !bcf_float_is_vector_end(args->tmpf[0])) ) + error("Incorrect number of values (%d) for the %s tag at %s:%d\n", ntmpf,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1); + + int ndst = col->number==BCF_VL_A ? line->n_allele - 1 : line->n_allele; + int *map = vcmp_map_ARvalues(args->vcmp,ndst,nals,als,line->n_allele,line->d.allele); + if ( !map ) error("REF alleles not compatible at %s:%d\n"); + + // fill in any missing values in the target VCF (or all, if not present) + int ntmpf2 = bcf_get_info_float(args->hdr, line, col->hdr_key_dst, &args->tmpf2, &args->mtmpf2); + if ( ntmpf2 < ndst ) hts_expand(float,ndst,args->mtmpf2,args->tmpf2); + + int i; + for (i=0; itmpf2[i]); + continue; + } + if ( ntmpf2==ndst && col->replace==REPLACE_MISSING + && !bcf_float_is_missing(args->tmpf2[i]) + && !bcf_float_is_vector_end(args->tmpf2[i]) ) continue; + + args->tmpf2[i] = args->tmpf[ map[i] ]; + } + bcf_update_info_float(args->hdr_out,line,col->hdr_key_dst,args->tmpf2,ndst); + return 0; +} +static int setter_info_real(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + annot_line_t *tab = (annot_line_t*) data; + char *str = tab->cols[col->icol], *end = str; + if ( str[0]=='.' && str[1]==0 ) return 0; + + int ntmpf = 0; + while ( *end ) + { + double val = strtod(str, &end); + if ( end==str ) + error("Could not parse %s at %s:%d .. [%s]\n", bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]); + ntmpf++; + hts_expand(float,ntmpf,args->mtmpf,args->tmpf); + args->tmpf[ntmpf-1] = val; + str = end+1; + } + + if ( col->number==BCF_VL_A || col->number==BCF_VL_R ) + return setter_ARinfo_real(args,line,col,tab->nals,tab->als,ntmpf); + + if ( col->replace==REPLACE_MISSING ) + { + int ret = bcf_get_info_float(args->hdr, line, col->hdr_key_dst, &args->tmpf2, &args->mtmpf2); + if ( ret>0 && !bcf_float_is_missing(args->tmpf2[0]) ) return 0; + } + + bcf_update_info_float(args->hdr_out,line,col->hdr_key_dst,args->tmpf,ntmpf); + return 0; +} +static int vcf_setter_info_real(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + bcf1_t *rec = (bcf1_t*) data; + int ntmpf = bcf_get_info_float(args->files->readers[1].header,rec,col->hdr_key_src,&args->tmpf,&args->mtmpf); + if ( ntmpf < 0 ) return 0; // nothing to add + + if ( col->number==BCF_VL_A || col->number==BCF_VL_R ) + return setter_ARinfo_real(args,line,col,rec->n_allele,rec->d.allele,ntmpf); + + if ( col->replace==REPLACE_MISSING ) + { + int ret = bcf_get_info_float(args->hdr, line, col->hdr_key_dst, &args->tmpf2, &args->mtmpf2); + if ( ret>0 && !bcf_float_is_missing(args->tmpf2[0]) ) return 0; + } + + bcf_update_info_float(args->hdr_out,line,col->hdr_key_dst,args->tmpf,ntmpf); + return 0; +} +int copy_string_field(char *src, int isrc, int src_len, kstring_t *dst, int idst); // see vcfmerge.c +static int setter_ARinfo_string(args_t *args, bcf1_t *line, annot_col_t *col, int nals, char **als) +{ + int nsrc = 1, lsrc = 0; + while ( args->tmps[lsrc] ) + { + if ( args->tmps[lsrc]==',' ) nsrc++; + lsrc++; + } + if ( col->number==BCF_VL_A && nsrc!=nals-1 && (nsrc!=1 || args->tmps[0]!='.' || args->tmps[1]!=0 ) ) + error("Incorrect number of values (%d) for the %s tag at %s:%d\n", nsrc,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1); + else if ( col->number==BCF_VL_R && nsrc!=nals && (nsrc!=1 || args->tmps[0]!='.' || args->tmps[1]!=0 ) ) + error("Incorrect number of values (%d) for the %s tag at %s:%d\n", nsrc,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1); + + int ndst = col->number==BCF_VL_A ? line->n_allele - 1 : line->n_allele; + int *map = vcmp_map_ARvalues(args->vcmp,ndst,nals,als,line->n_allele,line->d.allele); + if ( !map ) error("REF alleles not compatible at %s:%d\n"); + + // fill in any missing values in the target VCF (or all, if not present) + int i, empty = 0, nstr, mstr = args->tmpks.m; + nstr = bcf_get_info_string(args->hdr, line, col->hdr_key_dst, &args->tmpks.s, &mstr); + args->tmpks.m = mstr; + if ( nstr<0 || (nstr==1 && args->tmpks.s[0]=='.' && args->tmpks.s[1]==0) ) + { + empty = 0; + args->tmpks.l = 0; + kputc('.',&args->tmpks); + for (i=1; itmpks); + } + else args->tmpks.l = nstr; + for (i=0; itmpks,i); + continue; + } + if ( col->replace==REPLACE_MISSING ) + { + // Do not replace filled values. The field must be looked up again because + // of realloc in copy_string_field + int n = 0; + char *str = args->tmpks.s; + while ( *str && ntmps,map[i],lsrc,&args->tmpks,i); + assert( ret==0 ); + } + bcf_update_info_string(args->hdr_out,line,col->hdr_key_dst,args->tmpks.s); + return 0; +} +static int setter_info_str(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + annot_line_t *tab = (annot_line_t*) data; + int len = strlen(tab->cols[col->icol]); + if ( !len ) return 0; + hts_expand(char,len+1,args->mtmps,args->tmps); + memcpy(args->tmps,tab->cols[col->icol],len+1); + if ( args->tmps[0]=='.' && args->tmps[1]==0 ) return 0; + + if ( col->number==BCF_VL_A || col->number==BCF_VL_R ) + return setter_ARinfo_string(args,line,col,tab->nals,tab->als); + + if ( col->replace==REPLACE_MISSING ) + { + int ret = bcf_get_info_string(args->hdr, line, col->hdr_key_dst, &args->tmps2, &args->mtmps2); + if ( ret>0 && (args->tmps2[0]!='.' || args->tmps2[1]!=0) ) return 0; + } + + bcf_update_info_string(args->hdr_out,line,col->hdr_key_dst,args->tmps); + return 0; +} +static int vcf_setter_info_str(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + bcf1_t *rec = (bcf1_t*) data; + int ntmps = bcf_get_info_string(args->files->readers[1].header,rec,col->hdr_key_src,&args->tmps,&args->mtmps); + if ( ntmps < 0 ) return 0; // nothing to add + + if ( col->number==BCF_VL_A || col->number==BCF_VL_R ) + return setter_ARinfo_string(args,line,col,rec->n_allele,rec->d.allele); + + if ( col->replace==REPLACE_MISSING ) + { + int ret = bcf_get_info_string(args->hdr, line, col->hdr_key_dst, &args->tmps2, &args->mtmps2); + if ( ret>0 && (args->tmps2[0]!='.' || args->tmps2[1]!=0) ) return 0; + } + + bcf_update_info_string(args->hdr_out,line,col->hdr_key_dst,args->tmps); + return 0; +} +static int vcf_setter_format_gt(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + bcf1_t *rec = (bcf1_t*) data; + int nsrc = bcf_get_genotypes(args->files->readers[1].header,rec,&args->tmpi,&args->mtmpi); + if ( nsrc==-3 ) return 0; // the tag is not present + if ( nsrc<=0 ) return 1; // error + + if ( !args->sample_map ) + return bcf_update_genotypes(args->hdr_out,line,args->tmpi,nsrc); + + int i, j, ndst = bcf_get_genotypes(args->hdr,line,&args->tmpi2,&args->mtmpi2); + if ( ndst > 0 ) ndst /= bcf_hdr_nsamples(args->hdr_out); + nsrc /= bcf_hdr_nsamples(args->files->readers[1].header); + if ( ndst<=0 ) // field not present in dst file + { + if ( col->replace==REPLACE_NON_MISSING ) return 0; + hts_expand(int32_t, nsrc*bcf_hdr_nsamples(args->hdr_out), args->mtmpi2, args->tmpi2); + for (i=0; ihdr_out); i++) + { + int32_t *dst = args->tmpi2 + nsrc*i; + if ( args->sample_map[i]==-1 ) + { + dst[0] = bcf_gt_missing; + for (j=1; jtmpi + nsrc*args->sample_map[i]; + for (j=0; jhdr_out,line,args->tmpi2,nsrc*bcf_hdr_nsamples(args->hdr_out)); + } + else if ( ndst >= nsrc ) + { + for (i=0; ihdr_out); i++) + { + if ( args->sample_map[i]==-1 ) continue; + int32_t *src = args->tmpi + nsrc*args->sample_map[i]; + int32_t *dst = args->tmpi2 + ndst*i; + if ( col->replace==REPLACE_NON_MISSING && bcf_gt_is_missing(dst[0]) ) continue; + if ( col->replace==REPLACE_MISSING && !bcf_gt_is_missing(dst[0]) ) continue; + for (j=0; jhdr_out,line,args->tmpi2,ndst*bcf_hdr_nsamples(args->hdr_out)); + } + else // ndst < nsrc + { + hts_expand(int32_t, nsrc*bcf_hdr_nsamples(args->hdr_out), args->mtmpi3, args->tmpi3); + for (i=0; ihdr_out); i++) + { + int32_t *ori = args->tmpi2 + ndst*i; + int32_t *dst = args->tmpi3 + nsrc*i; + int keep_ori = 0; + if ( args->sample_map[i]==-1 ) keep_ori = 1; + else if ( col->replace==REPLACE_NON_MISSING && bcf_gt_is_missing(ori[0]) ) keep_ori = 1; + else if ( col->replace==REPLACE_MISSING && !bcf_gt_is_missing(ori[0]) ) keep_ori = 1; + if ( keep_ori ) + { + for (j=0; jtmpi + nsrc*args->sample_map[i]; + for (j=0; jhdr_out,line,args->tmpi3,nsrc*bcf_hdr_nsamples(args->hdr_out)); + } +} +static int count_vals(annot_line_t *tab, int icol_beg, int icol_end) +{ + int i, nmax = 1; + for (i=icol_beg; icols[i], *end = str; + if ( str[0]=='.' && !str[1] ) + { + // missing value + if ( !nmax ) nmax = 1; + continue; + } + int n = 1; + while ( *end ) + { + if ( *end==',' ) n++; + end++; + } + if ( nmaxsample_map ) + return bcf_update_format_int32(args->hdr_out,line,col->hdr_key_dst,vals,nvals*args->nsmpl_annot); + + int i, j, ndst = bcf_get_format_int32(args->hdr,line,col->hdr_key_dst,&args->tmpi2,&args->mtmpi2); + if ( ndst > 0 ) ndst /= bcf_hdr_nsamples(args->hdr_out); + if ( ndst<=0 ) + { + if ( col->replace==REPLACE_NON_MISSING ) return 0; // overwrite only if present + hts_expand(int32_t, nvals*bcf_hdr_nsamples(args->hdr_out), args->mtmpi2, args->tmpi2); + for (i=0; ihdr_out); i++) + { + int32_t *dst = args->tmpi2 + nvals*i; + if ( args->sample_map[i]==-1 ) + { + dst[0] = bcf_int32_missing; + for (j=1; jsample_map[i]; + for (j=0; jhdr_out,line,col->hdr_key_dst,args->tmpi2,nvals*bcf_hdr_nsamples(args->hdr_out)); + } + else if ( ndst >= nvals ) + { + for (i=0; ihdr_out); i++) + { + if ( args->sample_map[i]==-1 ) continue; + int32_t *src = vals + nvals*args->sample_map[i]; + int32_t *dst = args->tmpi2 + ndst*i; + // possible cases: + // in annot out + // x y x TAG,-TAG,=TAG .. REPLACE_ALL, REPLACE_NON_MISSING, SET_OR_APPEND + // x y y +TAG .. REPLACE_MISSING + // . y . =TAG .. SET_OR_APPEND + // . y y TAG,+TAG,-TAG .. REPLACE_ALL, REPLACE_MISSING, REPLACE_NON_MISSING + // x . x TAG,+TAG .. REPLACE_ALL, REPLACE_MISSING + // x . . -TAG .. REPLACE_NON_MISSING + if ( col->replace==REPLACE_NON_MISSING ) { if ( dst[0]==bcf_int32_missing ) continue; } + else if ( col->replace==REPLACE_MISSING ) { if ( dst[0]!=bcf_int32_missing ) continue; } + else if ( col->replace==REPLACE_ALL ) { if ( src[0]==bcf_int32_missing ) continue; } + for (j=0; jhdr_out,line,col->hdr_key_dst,args->tmpi2,ndst*bcf_hdr_nsamples(args->hdr_out)); + } + else // ndst < nvals + { + hts_expand(int32_t, nvals*bcf_hdr_nsamples(args->hdr_out), args->mtmpi3, args->tmpi3); + for (i=0; ihdr_out); i++) + { + int32_t *ann = vals + nvals*args->sample_map[i]; + int32_t *ori = args->tmpi2 + ndst*i; // ori vcf line + int32_t *dst = args->tmpi3 + nvals*i; // expanded buffer + int use_new_ann = 1; + if ( args->sample_map[i]==-1 ) use_new_ann = 0; + else if ( col->replace==REPLACE_NON_MISSING ) { if ( ori[0]==bcf_int32_missing ) use_new_ann = 0; } + else if ( col->replace==REPLACE_MISSING ) { if ( ori[0]!=bcf_int32_missing ) use_new_ann = 0; } + else if ( col->replace==REPLACE_ALL ) { if ( ann[0]==bcf_int32_missing ) use_new_ann = 0; } + if ( !use_new_ann ) + { + for (j=0; jhdr_out,line,col->hdr_key_dst,args->tmpi3,nvals*bcf_hdr_nsamples(args->hdr_out)); + } +} +static int core_setter_format_real(args_t *args, bcf1_t *line, annot_col_t *col, float *vals, int nvals) +{ + if ( !args->sample_map ) + return bcf_update_format_float(args->hdr_out,line,col->hdr_key_dst,vals,nvals*args->nsmpl_annot); + + int i, j, ndst = bcf_get_format_float(args->hdr,line,col->hdr_key_dst,&args->tmpf2,&args->mtmpf2); + if ( ndst > 0 ) ndst /= bcf_hdr_nsamples(args->hdr_out); + if ( ndst<=0 ) + { + if ( col->replace==REPLACE_NON_MISSING ) return 0; // overwrite only if present + hts_expand(float, nvals*bcf_hdr_nsamples(args->hdr_out), args->mtmpf2, args->tmpf2); + for (i=0; ihdr_out); i++) + { + float *dst = args->tmpf2 + nvals*i; + if ( args->sample_map[i]==-1 ) + { + bcf_float_set_missing(dst[0]); + for (j=1; jsample_map[i]; + for (j=0; jhdr_out,line,col->hdr_key_dst,args->tmpf2,nvals*bcf_hdr_nsamples(args->hdr_out)); + } + else if ( ndst >= nvals ) + { + for (i=0; ihdr_out); i++) + { + if ( args->sample_map[i]==-1 ) continue; + float *src = vals + nvals*args->sample_map[i]; + float *dst = args->tmpf2 + ndst*i; + if ( col->replace==REPLACE_NON_MISSING ) { if ( bcf_float_is_missing(dst[0]) ) continue; } + else if ( col->replace==REPLACE_MISSING ) { if ( !bcf_float_is_missing(dst[0]) ) continue; } + else if ( col->replace==REPLACE_ALL ) { if ( bcf_float_is_missing(src[0]) ) continue; } + for (j=0; jhdr_out,line,col->hdr_key_dst,args->tmpf2,ndst*bcf_hdr_nsamples(args->hdr_out)); + } + else // ndst < nvals + { + hts_expand(float, nvals*bcf_hdr_nsamples(args->hdr_out), args->mtmpf3, args->tmpf3); + for (i=0; ihdr_out); i++) + { + float *ann = vals + nvals*args->sample_map[i]; + float *ori = args->tmpf2 + ndst*i; // ori vcf line + float *dst = args->tmpf3 + nvals*i; // expanded buffer + int use_new_ann = 1; + if ( args->sample_map[i]==-1 ) use_new_ann = 0; + else if ( col->replace==REPLACE_NON_MISSING ) { if ( bcf_float_is_missing(ori[0]) ) use_new_ann = 0; } + else if ( col->replace==REPLACE_MISSING ) { if ( !bcf_float_is_missing(ori[0]) ) use_new_ann = 0; } + else if ( col->replace==REPLACE_ALL ) { if ( bcf_float_is_missing(ann[0]) ) use_new_ann = 0; } + if ( !use_new_ann ) + { + for (j=0; jhdr_out,line,col->hdr_key_dst,args->tmpf3,nvals*bcf_hdr_nsamples(args->hdr_out)); + } +} +static int core_setter_format_str(args_t *args, bcf1_t *line, annot_col_t *col, char **vals) +{ + if ( !args->sample_map ) + return bcf_update_format_string(args->hdr_out,line,col->hdr_key_dst,(const char**)vals,args->nsmpl_annot); + + int i; + args->tmpp2[0] = args->tmps2; + int ret = bcf_get_format_string(args->hdr,line,col->hdr_key_dst,&args->tmpp2,&args->mtmps2); + args->tmps2 = args->tmpp2[0]; // tmps2 might be realloced + + int nsmpl = bcf_hdr_nsamples(args->hdr_out); + if ( ret<=0 ) // not present in dst + { + hts_expand(char,bcf_hdr_nsamples(args->hdr_out)*2,args->mtmps2,args->tmps2); + char *tmp = args->tmps2; + for (i=0; itmpp2[i] = tmp; + tmp += 2; + } + } + for (i=0; isample_map[i]==-1 ) continue; + char **src = vals + args->sample_map[i]; + char **dst = args->tmpp2 + i; + + if ( col->replace==REPLACE_NON_MISSING ) { if ( (*dst)[0]=='.' && (*dst)[1]==0 ) continue; } + else if ( col->replace==REPLACE_MISSING ) { if ( (*dst)[0]!='.' || (*dst)[1]!=0 ) continue; } + else if ( col->replace==REPLACE_ALL ) { if ( (*src)[0]=='.' && (*src)[1]==0 ) continue; } + *dst = *src; + } + return bcf_update_format_string(args->hdr_out,line,col->hdr_key_dst,(const char**)args->tmpp2,nsmpl); +} +static int setter_format_int(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + annot_line_t *tab = (annot_line_t*) data; + if ( col->icol+args->nsmpl_annot > tab->ncols ) + error("Incorrect number of values for %s at %s:%d\n",col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1); + int nvals = count_vals(tab,col->icol,col->icol+args->nsmpl_annot); + hts_expand(int32_t,nvals*args->nsmpl_annot,args->mtmpi,args->tmpi); + + int icol = col->icol, ismpl; + for (ismpl=0; ismplnsmpl_annot; ismpl++) + { + int32_t *ptr = args->tmpi + ismpl*nvals; + int ival = 0; + + char *str = tab->cols[icol]; + while ( *str ) + { + if ( str[0]=='.' && (!str[1] || str[1]==',') ) // missing value + { + ptr[ival++] = bcf_int32_missing; + str += str[1] ? 2 : 1; + continue; + } + + char *end = str; + ptr[ival] = strtol(str, &end, 10); + if ( end==str ) + error("Could not parse %s at %s:%d .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]); + + ival++; + str = *end ? end+1 : end; + } + while ( ivaltmpi,nvals); +} +static int setter_format_real(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + annot_line_t *tab = (annot_line_t*) data; + if ( col->icol+args->nsmpl_annot > tab->ncols ) + error("Incorrect number of values for %s at %s:%d\n",col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1); + int nvals = count_vals(tab,col->icol,col->icol+args->nsmpl_annot); + hts_expand(float,nvals*args->nsmpl_annot,args->mtmpf,args->tmpf); + + int icol = col->icol, ismpl; + for (ismpl=0; ismplnsmpl_annot; ismpl++) + { + float *ptr = args->tmpf + ismpl*nvals; + int ival = 0; + + char *str = tab->cols[icol]; + while ( *str ) + { + if ( str[0]=='.' && (!str[1] || str[1]==',') ) // missing value + { + bcf_float_set_missing(ptr[ival]); + ival++; + str += str[1] ? 2 : 1; + continue; + } + + char *end = str; + ptr[ival] = strtod(str, &end); + if ( end==str ) + error("Could not parse %s at %s:%d .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]); + + ival++; + str = *end ? end+1 : end; + } + while ( ivaltmpf,nvals); +} +static int setter_format_str(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + annot_line_t *tab = (annot_line_t*) data; + if ( col->icol+args->nsmpl_annot > tab->ncols ) + error("Incorrect number of values for %s at %s:%d\n",col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1); + + int ismpl; + for (ismpl=0; ismplnsmpl_annot; ismpl++) + args->tmpp[ismpl] = tab->cols[col->icol + ismpl]; + + return core_setter_format_str(args,line,col,args->tmpp); +} +static int vcf_setter_format_int(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + bcf1_t *rec = (bcf1_t*) data; + int nsrc = bcf_get_format_int32(args->files->readers[1].header,rec,col->hdr_key_src,&args->tmpi,&args->mtmpi); + if ( nsrc==-3 ) return 0; // the tag is not present + if ( nsrc<=0 ) return 1; // error + return core_setter_format_int(args,line,col,args->tmpi,nsrc/bcf_hdr_nsamples(args->files->readers[1].header)); +} +static int vcf_setter_format_real(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + bcf1_t *rec = (bcf1_t*) data; + int nsrc = bcf_get_format_float(args->files->readers[1].header,rec,col->hdr_key_src,&args->tmpf,&args->mtmpf); + if ( nsrc==-3 ) return 0; // the tag is not present + if ( nsrc<=0 ) return 1; // error + return core_setter_format_real(args,line,col,args->tmpf,nsrc/bcf_hdr_nsamples(args->files->readers[1].header)); +} + +static int vcf_setter_format_str(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + bcf1_t *rec = (bcf1_t*) data; + args->tmpp[0] = args->tmps; + int ret = bcf_get_format_string(args->files->readers[1].header,rec,col->hdr_key_src,&args->tmpp,&args->mtmps); + args->tmps = args->tmpp[0]; // tmps might be realloced + if ( ret==-3 ) return 0; // the tag is not present + if ( ret<=0 ) return 1; // error + return core_setter_format_str(args,line,col,args->tmpp); +} +static int init_sample_map(args_t *args, bcf_hdr_t *src, bcf_hdr_t *dst) +{ + int i; + if ( !args->sample_names ) + { + args->nsmpl_annot = bcf_hdr_nsamples(dst); + + // tab annotation file, expecting that all samples are present: sample map not needed + if ( !src ) return 0; + + int nmatch = 0, order_ok = 1; + for (i=0; isamples[i]); + if ( id!=-1 ) + { + nmatch++; + if ( i!=id ) order_ok = 0; + } + } + if ( bcf_hdr_nsamples(src)==bcf_hdr_nsamples(dst) && nmatch==bcf_hdr_nsamples(src) && order_ok ) return 0; // not needed + if ( !nmatch ) return -1; // No matching samples found in the source and the destination file + + args->nsample_map = bcf_hdr_nsamples(dst); + args->sample_map = (int*) malloc(sizeof(int)*args->nsample_map); + for (i=0; insample_map; i++) + { + int id = bcf_hdr_id2int(src, BCF_DT_SAMPLE, dst->samples[i]); + args->sample_map[i] = id; // idst -> isrc, -1 if not present + } + return 1; + } + + args->nsample_map = bcf_hdr_nsamples(dst); + args->sample_map = (int*) malloc(sizeof(int)*args->nsample_map); + for (i=0; insample_map; i++) args->sample_map[i] = -1; + + // possible todo: could do with smpl_ilist only + smpl_ilist_t *ilist = smpl_ilist_init(dst, args->sample_names, args->sample_is_file, SMPL_STRICT); + if ( !ilist || !ilist->n ) error("Could not parse: %s\n", args->sample_names); + char **samples = (char**) malloc(sizeof(char*)*ilist->n); + for (i=0; in; i++) samples[i] = strdup(dst->samples[i]); + args->nsmpl_annot = ilist->n; + smpl_ilist_destroy(ilist); + int need_sample_map = args->nsmpl_annot==bcf_hdr_nsamples(dst) ? 0 : 1; + if ( !src ) + { + // tab annotation file + for (i=0; insmpl_annot; i++) + { + int idst = bcf_hdr_id2int(dst, BCF_DT_SAMPLE, samples[i]); + if ( idst==-1 ) error("Sample \"%s\" not found in the destination file\n", samples[i]); + args->sample_map[idst] = i; + if ( idst!=i ) need_sample_map = 1; + } + } + else + { + // vcf annotation file + for (i=0; insmpl_annot; i++) + { + int isrc, idst; + char *ss = samples[i], *se = samples[i]; + while ( *se && !isspace(*se) ) se++; + if ( !*se ) + { + // only one sample name + isrc = bcf_hdr_id2int(src, BCF_DT_SAMPLE,ss); + if ( isrc==-1 ) error("Sample \"%s\" not found in the source file\n", ss); + idst = bcf_hdr_id2int(dst, BCF_DT_SAMPLE,ss); + if ( idst==-1 ) error("Sample \"%s\" not found in the destination file\n", ss); + args->sample_map[idst] = isrc; + if ( idst!=isrc ) need_sample_map = 1; + continue; + } + *se = 0; + isrc = bcf_hdr_id2int(src, BCF_DT_SAMPLE,ss); + if ( isrc==-1 ) error("Sample \"%s\" not found in the source file\n", ss); + + ss = se+1; + while ( isspace(*ss) ) ss++; + se = ss; + while ( *se && !isspace(*se) ) se++; + + idst = bcf_hdr_id2int(dst, BCF_DT_SAMPLE,ss); + if ( idst==-1 ) error("Sample \"%s\" not found in the destination file\n", ss); + + args->sample_map[idst] = isrc; + if ( idst!=isrc ) need_sample_map = 1; + } + } + for (i=0; insmpl_annot; i++) free(samples[i]); + free(samples); + return need_sample_map; +} +static char *columns_complement(char *columns, void **skip_info, void **skip_fmt) +{ + kstring_t str = {0,0,0}; + char *ss = columns, *se = ss; + while ( *ss ) + { + if ( *se && *se!=',' ) { se++; continue; } + if ( *ss!='^' ) + { + if ( str.l ) kputc(',',&str); + kputsn(ss, se-ss, &str); + if ( !*se ) break; + ss = ++se; + continue; + } + + if ( !strncasecmp("^INFO/",ss,6) ) + { + if ( !*skip_info ) + { + *skip_info = khash_str2int_init(); + if ( str.l ) kputc(',',&str); + kputs("INFO",&str); + } + char tmp = *se; *se = 0; + khash_str2int_inc(*skip_info, strdup(ss+6)); + *se = tmp; + } + else if ( !strncasecmp("^FORMAT/",ss,8) || !strncasecmp("^FMT/",ss,5) ) + { + int n = !strncasecmp("^FMT/",ss,5) ? 5 : 8; + if ( !*skip_fmt ) + { + *skip_fmt = khash_str2int_init(); + if ( str.l ) kputc(',',&str); + kputs("FORMAT",&str); + } + char tmp = *se; *se = 0; + khash_str2int_inc(*skip_fmt, strdup(ss+n)); + *se = tmp; + } + else + { + if ( !*skip_info ) + { + *skip_info = khash_str2int_init(); + if ( str.l ) kputc(',',&str); + kputs("INFO",&str); + } + char tmp = *se; *se = 0; + khash_str2int_inc(*skip_info, strdup(ss+1)); + *se = tmp; + } + + if ( !*se ) break; + ss = ++se; + } + free(columns); + return str.s; +} +static void bcf_hrec_format_rename(bcf_hrec_t *hrec, char *tag, kstring_t *str) +{ + int j, nout = 0; + ksprintf(str, "##%s=<", hrec->key); + for (j=0; jnkeys; j++) + { + if ( !strcmp("IDX",hrec->keys[j]) ) continue; + if ( nout ) kputc(',',str); + if ( !strcmp("ID", hrec->keys[j]) ) + ksprintf(str,"%s=%s", hrec->keys[j], tag); + else + ksprintf(str,"%s=%s", hrec->keys[j], hrec->vals[j]); + nout++; + } + ksprintf(str,">\n"); +} +static void init_columns(args_t *args) +{ + int need_sample_map = 0; + int sample_map_ok = init_sample_map(args, args->tgts_is_vcf?args->files->readers[1].header:NULL, args->hdr); + + void *skip_fmt = NULL, *skip_info = NULL; + if ( args->tgts_is_vcf ) + args->columns = columns_complement(args->columns, &skip_info, &skip_fmt); + + kstring_t str = {0,0,0}, tmp = {0,0,0}; + char *ss = args->columns, *se = ss; + args->ncols = 0; + int icol = -1, has_fmt_str = 0; + while ( *ss ) + { + if ( *se && *se!=',' ) { se++; continue; } + int replace = REPLACE_ALL; + if ( *ss=='+' ) { replace = REPLACE_MISSING; ss++; } + else if ( *ss=='-' ) { replace = REPLACE_NON_MISSING; ss++; } + else if ( *ss=='=' ) { replace = SET_OR_APPEND; ss++; } + icol++; + str.l = 0; + kputsn(ss, se-ss, &str); + if ( !str.s[0] || !strcasecmp("-",str.s) ) ; + else if ( !strcasecmp("CHROM",str.s) ) args->chr_idx = icol; + else if ( !strcasecmp("POS",str.s) ) args->from_idx = icol; + else if ( !strcasecmp("FROM",str.s) ) args->from_idx = icol; + else if ( !strcasecmp("TO",str.s) ) args->to_idx = icol; + else if ( !strcasecmp("REF",str.s) ) args->ref_idx = icol; + else if ( !strcasecmp("ALT",str.s) ) args->alt_idx = icol; + else if ( !strcasecmp("ID",str.s) ) + { + if ( replace==REPLACE_NON_MISSING ) error("Apologies, the -ID feature has not been implemented yet.\n"); + args->ncols++; args->cols = (annot_col_t*) realloc(args->cols,sizeof(annot_col_t)*args->ncols); + annot_col_t *col = &args->cols[args->ncols-1]; + col->icol = icol; + col->replace = replace; + col->setter = args->tgts_is_vcf ? vcf_setter_id : setter_id; + col->hdr_key_src = strdup(str.s); + col->hdr_key_dst = strdup(str.s); + } + else if ( !strcasecmp("FILTER",str.s) ) + { + if ( replace==REPLACE_NON_MISSING ) error("Apologies, the -FILTER feature has not been implemented yet.\n"); + args->ncols++; args->cols = (annot_col_t*) realloc(args->cols,sizeof(annot_col_t)*args->ncols); + annot_col_t *col = &args->cols[args->ncols-1]; + col->icol = icol; + col->replace = replace; + col->setter = args->tgts_is_vcf ? vcf_setter_filter : setter_filter; + col->hdr_key_src = strdup(str.s); + col->hdr_key_dst = strdup(str.s); + if ( args->tgts_is_vcf ) + { + bcf_hdr_t *tgts_hdr = args->files->readers[1].header; + int j; + for (j=0; jnhrec; j++) + { + bcf_hrec_t *hrec = tgts_hdr->hrec[j]; + if ( hrec->type!=BCF_HL_FLT ) continue; + int k = bcf_hrec_find_key(hrec,"ID"); + assert( k>=0 ); // this should always be true for valid VCFs + tmp.l = 0; + bcf_hrec_format(hrec, &tmp); + bcf_hdr_append(args->hdr_out, tmp.s); + } + bcf_hdr_sync(args->hdr_out); + } + } + else if ( !strcasecmp("QUAL",str.s) ) + { + if ( replace==REPLACE_NON_MISSING ) error("Apologies, the -QUAL feature has not been implemented yet.\n"); + if ( replace==SET_OR_APPEND ) error("Apologies, the =QUAL feature has not been implemented yet.\n"); + args->ncols++; args->cols = (annot_col_t*) realloc(args->cols,sizeof(annot_col_t)*args->ncols); + annot_col_t *col = &args->cols[args->ncols-1]; + col->icol = icol; + col->replace = replace; + col->setter = args->tgts_is_vcf ? vcf_setter_qual : setter_qual; + col->hdr_key_src = strdup(str.s); + col->hdr_key_dst = strdup(str.s); + } + else if ( args->tgts_is_vcf && !strcasecmp("INFO",str.s) ) // All INFO fields + { + if ( replace==REPLACE_NON_MISSING ) error("Apologies, the -INFO/TAG feature has not been implemented yet.\n"); + if ( replace==SET_OR_APPEND ) error("Apologies, the =INFO/TAG feature has not been implemented yet.\n"); + bcf_hdr_t *tgts_hdr = args->files->readers[1].header; + int j; + for (j=0; jnhrec; j++) + { + bcf_hrec_t *hrec = tgts_hdr->hrec[j]; + if ( hrec->type!=BCF_HL_INFO ) continue; + int k = bcf_hrec_find_key(hrec,"ID"); + assert( k>=0 ); // this should always be true for valid VCFs + if ( skip_info && khash_str2int_has_key(skip_info,hrec->vals[k]) ) continue; + tmp.l = 0; + bcf_hrec_format(hrec, &tmp); + bcf_hdr_append(args->hdr_out, tmp.s); + bcf_hdr_sync(args->hdr_out); + int hdr_id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, hrec->vals[k]); + args->ncols++; args->cols = (annot_col_t*) realloc(args->cols,sizeof(annot_col_t)*args->ncols); + annot_col_t *col = &args->cols[args->ncols-1]; + col->icol = -1; + col->replace = replace; + col->hdr_key_src = strdup(hrec->vals[k]); + col->hdr_key_dst = strdup(hrec->vals[k]); + col->number = bcf_hdr_id2length(args->hdr_out,BCF_HL_INFO,hdr_id); + switch ( bcf_hdr_id2type(args->hdr_out,BCF_HL_INFO,hdr_id) ) + { + case BCF_HT_FLAG: col->setter = vcf_setter_info_flag; break; + case BCF_HT_INT: col->setter = vcf_setter_info_int; break; + case BCF_HT_REAL: col->setter = vcf_setter_info_real; break; + case BCF_HT_STR: col->setter = vcf_setter_info_str; break; + default: error("The type of %s not recognised (%d)\n", str.s,bcf_hdr_id2type(args->hdr_out,BCF_HL_INFO,hdr_id)); + } + } + } + else if ( args->tgts_is_vcf && (!strcasecmp("FORMAT",str.s) || !strcasecmp("FMT",str.s)) ) // All FORMAT fields + { + bcf_hdr_t *tgts_hdr = args->files->readers[1].header; + need_sample_map = 1; + int j; + for (j=0; jnhrec; j++) + { + bcf_hrec_t *hrec = tgts_hdr->hrec[j]; + if ( hrec->type!=BCF_HL_FMT) continue; + int k = bcf_hrec_find_key(hrec,"ID"); + assert( k>=0 ); // this should always be true for valid VCFs + if ( skip_fmt && khash_str2int_has_key(skip_fmt,hrec->vals[k]) ) continue; + tmp.l = 0; + bcf_hrec_format(hrec, &tmp); + bcf_hdr_append(args->hdr_out, tmp.s); + bcf_hdr_sync(args->hdr_out); + int hdr_id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, hrec->vals[k]); + args->ncols++; args->cols = (annot_col_t*) realloc(args->cols,sizeof(annot_col_t)*args->ncols); + annot_col_t *col = &args->cols[args->ncols-1]; + col->icol = -1; + col->replace = replace; + col->hdr_key_src = strdup(hrec->vals[k]); + col->hdr_key_dst = strdup(hrec->vals[k]); + if ( !strcasecmp("GT",col->hdr_key_src) ) col->setter = vcf_setter_format_gt; + else + switch ( bcf_hdr_id2type(args->hdr_out,BCF_HL_FMT,hdr_id) ) + { + case BCF_HT_INT: col->setter = vcf_setter_format_int; break; + case BCF_HT_REAL: col->setter = vcf_setter_format_real; break; + case BCF_HT_STR: col->setter = vcf_setter_format_str; has_fmt_str = 1; break; + default: error("The type of %s not recognised (%d)\n", str.s,bcf_hdr_id2type(args->hdr_out,BCF_HL_FMT,hdr_id)); + } + } + } + else if ( !strncasecmp("FORMAT/",str.s, 7) || !strncasecmp("FMT/",str.s,4) ) + { + char *key_dst = str.s + (!strncasecmp("FMT/",str.s,4) ? 4 : 7); + char *key_src = strstr(key_dst,":="); + if ( key_src ) + { + *key_src = 0; + key_src += 2; + if ( !strncasecmp("FORMAT/",key_src,7) ) key_src += 7; + else if ( !strncasecmp("FMT/",key_src,4) ) key_src += 4; + } + else + key_src = key_dst; + need_sample_map = 1; + if ( args->tgts_is_vcf ) + { + bcf_hrec_t *hrec = bcf_hdr_get_hrec(args->files->readers[1].header, BCF_HL_FMT, "ID", key_src, NULL); + tmp.l = 0; + bcf_hrec_format_rename(hrec, key_dst, &tmp); + bcf_hdr_append(args->hdr_out, tmp.s); + bcf_hdr_sync(args->hdr_out); + } + int hdr_id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, key_dst); + if ( !bcf_hdr_idinfo_exists(args->hdr_out,BCF_HL_FMT,hdr_id) ) + error("The tag \"%s\" is not defined in %s\n", str.s, args->targets_fname); + args->ncols++; args->cols = (annot_col_t*) realloc(args->cols,sizeof(annot_col_t)*args->ncols); + annot_col_t *col = &args->cols[args->ncols-1]; + if ( !args->tgts_is_vcf ) + { + col->icol = icol; + icol += args->nsmpl_annot - 1; + } + else + col->icol = -1; + col->replace = replace; + col->hdr_key_src = strdup(key_src); + col->hdr_key_dst = strdup(key_dst); + if ( !strcasecmp("GT",key_src) ) col->setter = vcf_setter_format_gt; + else + switch ( bcf_hdr_id2type(args->hdr_out,BCF_HL_FMT,hdr_id) ) + { + case BCF_HT_INT: col->setter = args->tgts_is_vcf ? vcf_setter_format_int : setter_format_int; break; + case BCF_HT_REAL: col->setter = args->tgts_is_vcf ? vcf_setter_format_real : setter_format_real; break; + case BCF_HT_STR: col->setter = args->tgts_is_vcf ? vcf_setter_format_str : setter_format_str; has_fmt_str = 1; break; + default: error("The type of %s not recognised (%d)\n", str.s,bcf_hdr_id2type(args->hdr_out,BCF_HL_FMT,hdr_id)); + } + } + else + { + if ( replace==REPLACE_NON_MISSING ) error("Apologies, the -INFO/TAG feature has not been implemented yet.\n"); + if ( replace==SET_OR_APPEND ) error("Apologies, the =INFO/TAG feature has not been implemented yet.\n"); + char *key_dst = !strncasecmp("INFO/",str.s,5) ? str.s + 5 : str.s; + char *key_src = strstr(key_dst,":="); + if ( key_src ) + { + *key_src = 0; + key_src += 2; + if ( !strncasecmp("INFO/",key_src,5) ) key_src += 5; + } + else + key_src = key_dst; + int hdr_id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, key_dst); + if ( !bcf_hdr_idinfo_exists(args->hdr_out,BCF_HL_INFO,hdr_id) ) + { + if ( args->tgts_is_vcf ) // reading annotations from a VCF, add a new header line + { + bcf_hrec_t *hrec = bcf_hdr_get_hrec(args->files->readers[1].header, BCF_HL_INFO, "ID", key_src, NULL); + if ( !hrec ) error("The tag \"%s\" is not defined in %s\n", str.s,args->files->readers[1].fname); + tmp.l = 0; + bcf_hrec_format_rename(hrec, key_dst, &tmp); + bcf_hdr_append(args->hdr_out, tmp.s); + bcf_hdr_sync(args->hdr_out); + hdr_id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, key_dst); + } + else + error("The tag \"%s\" is not defined in %s\n", key_src, args->targets_fname); + assert( bcf_hdr_idinfo_exists(args->hdr_out,BCF_HL_INFO,hdr_id) ); + } + + args->ncols++; args->cols = (annot_col_t*) realloc(args->cols,sizeof(annot_col_t)*args->ncols); + annot_col_t *col = &args->cols[args->ncols-1]; + col->icol = icol; + col->replace = replace; + col->hdr_key_src = strdup(key_src); + col->hdr_key_dst = strdup(key_dst); + col->number = bcf_hdr_id2length(args->hdr_out,BCF_HL_INFO,hdr_id); + switch ( bcf_hdr_id2type(args->hdr_out,BCF_HL_INFO,hdr_id) ) + { + case BCF_HT_FLAG: col->setter = args->tgts_is_vcf ? vcf_setter_info_flag : setter_info_flag; break; + case BCF_HT_INT: col->setter = args->tgts_is_vcf ? vcf_setter_info_int : setter_info_int; break; + case BCF_HT_REAL: col->setter = args->tgts_is_vcf ? vcf_setter_info_real : setter_info_real; break; + case BCF_HT_STR: col->setter = args->tgts_is_vcf ? vcf_setter_info_str : setter_info_str; break; + default: error("The type of %s not recognised (%d)\n", str.s,bcf_hdr_id2type(args->hdr_out,BCF_HL_INFO,hdr_id)); + } + } + if ( !*se ) break; + ss = ++se; + } + free(str.s); + free(tmp.s); + if ( args->to_idx==-1 ) args->to_idx = args->from_idx; + free(args->columns); + if ( skip_info ) khash_str2int_destroy_free(skip_info); + if ( skip_fmt ) khash_str2int_destroy_free(skip_fmt); + if ( has_fmt_str ) + { + int n = bcf_hdr_nsamples(args->hdr_out); + if ( args->tgts_is_vcf && nfiles->readers[1].header) ) n = bcf_hdr_nsamples(args->files->readers[1].header); + args->tmpp = (char**)malloc(sizeof(char*)*n); + args->tmpp2 = (char**)malloc(sizeof(char*)*n); + } + if ( !need_sample_map ) + { + free(args->sample_map); + args->sample_map = NULL; + } + else if ( sample_map_ok<0 ) + error("No matching samples in source and destination file?\n"); +} + +static void rename_chrs(args_t *args, char *fname) +{ + int n, i; + char **map = hts_readlist(fname, 1, &n); + if ( !map ) error("Could not read: %s\n", fname); + for (i=0; ihdr_out, map[i]); + bcf_hrec_t *hrec = bcf_hdr_get_hrec(args->hdr_out, BCF_HL_CTG, "ID", map[i], NULL); + if ( !hrec ) continue; // the sequence not present + int j = bcf_hrec_find_key(hrec, "ID"); + assert( j>=0 ); + free(hrec->vals[j]); + ss++; + while ( *ss && isspace(*ss) ) ss++; + char *se = ss; + while ( *se && !isspace(*se) ) se++; + *se = 0; + hrec->vals[j] = strdup(ss); + args->hdr_out->id[BCF_DT_CTG][rid].key = hrec->vals[j]; + } + for (i=0; ihdr = args->files->readers[0].header; + args->hdr_out = bcf_hdr_dup(args->hdr); + + if ( args->remove_annots ) init_remove_annots(args); + if ( args->header_fname ) init_header_lines(args); + if ( args->targets_fname && args->tgts_is_vcf ) + { + // reading annots from a VCF + if ( !bcf_sr_add_reader(args->files, args->targets_fname) ) + error("Failed to open %s: %s\n", args->targets_fname,bcf_sr_strerror(args->files->errnum)); + } + if ( args->columns ) init_columns(args); + if ( args->targets_fname && !args->tgts_is_vcf ) + { + if ( !args->columns ) error("The -c option not given\n"); + if ( args->chr_idx==-1 ) error("The -c CHROM option not given\n"); + if ( args->from_idx==-1 ) error("The -c POS option not given\n"); + if ( args->to_idx==-1 ) args->to_idx = -args->from_idx - 1; + + args->tgts = bcf_sr_regions_init(args->targets_fname,1,args->chr_idx,args->from_idx,args->to_idx); + if ( !args->tgts ) error("Could not initialize the annotation file: %s\n", args->targets_fname); + if ( !args->tgts->tbx ) error("Expected tabix-indexed annotation file: %s\n", args->targets_fname); + } + args->vcmp = vcmp_init(); + + if ( args->filter_str ) + args->filter = filter_init(args->hdr, args->filter_str); + + if ( args->set_ids_fmt ) + { + if ( args->set_ids_fmt[0]=='+' ) { args->set_ids_replace = 0; args->set_ids_fmt++; } + args->set_ids = convert_init(args->hdr_out, NULL, 0, args->set_ids_fmt); + } + + if ( args->mark_sites ) + { + if ( !args->targets_fname ) error("The -a option not given\n"); + bcf_hdr_printf(args->hdr_out,"##INFO=", + args->mark_sites,args->mark_sites_logic==MARK_LISTED?"":"not ",args->mark_sites); + } + + if (args->record_cmd_line) bcf_hdr_append_version(args->hdr_out, args->argc, args->argv, "bcftools_annotate"); + if ( !args->drop_header ) + { + if ( args->rename_chrs ) rename_chrs(args, args->rename_chrs); + + args->out_fh = hts_open(args->output_fname,hts_bcf_wmode(args->output_type)); + if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno)); + if ( args->n_threads ) + hts_set_opt(args->out_fh, HTS_OPT_THREAD_POOL, args->files->p); + bcf_hdr_write(args->out_fh, args->hdr_out); + } +} + +static void destroy_data(args_t *args) +{ + int i; + for (i=0; inrm; i++) free(args->rm[i].key); + free(args->rm); + if ( args->hdr_out ) bcf_hdr_destroy(args->hdr_out); + if (args->vcmp) vcmp_destroy(args->vcmp); + for (i=0; incols; i++) + { + free(args->cols[i].hdr_key_src); + free(args->cols[i].hdr_key_dst); + } + free(args->cols); + for (i=0; imalines; i++) + { + free(args->alines[i].cols); + free(args->alines[i].als); + free(args->alines[i].line.s); + } + free(args->alines); + if ( args->tgts ) bcf_sr_regions_destroy(args->tgts); + free(args->tmpks.s); + free(args->tmpi); + free(args->tmpf); + free(args->tmps); + free(args->tmpp); + free(args->tmpi2); + free(args->tmpf2); + free(args->tmps2); + free(args->tmpp2); + free(args->tmpi3); + free(args->tmpf3); + if ( args->set_ids ) + convert_destroy(args->set_ids); + if ( args->filter ) + filter_destroy(args->filter); + if (args->out_fh) hts_close(args->out_fh); + free(args->sample_map); +} + +static void buffer_annot_lines(args_t *args, bcf1_t *line, int start_pos, int end_pos) +{ + if ( args->nalines && args->alines[0].rid != line->rid ) args->nalines = 0; + + int i = 0; + while ( inalines ) + { + if ( line->pos > args->alines[i].end ) + { + args->nalines--; + if ( args->nalines && inalines ) + { + annot_line_t tmp = args->alines[i]; + memmove(&args->alines[i],&args->alines[i+1],(args->nalines-i)*sizeof(annot_line_t)); + args->alines[args->nalines] = tmp; + } + } + else i++; + } + + if ( args->ref_idx==-1 && args->nalines ) return; + + while ( !bcf_sr_regions_overlap(args->tgts, bcf_seqname(args->hdr,line), start_pos,end_pos) ) + { + args->nalines++; + hts_expand0(annot_line_t,args->nalines,args->malines,args->alines); + annot_line_t *tmp = &args->alines[args->nalines-1]; + tmp->rid = line->rid; + tmp->start = args->tgts->start; + tmp->end = args->tgts->end; + tmp->line.l = 0; + kputs(args->tgts->line.s, &tmp->line); + char *s = tmp->line.s; + tmp->ncols = 1; + hts_expand(char*,tmp->ncols,tmp->mcols,tmp->cols); + tmp->cols[0] = s; + while ( *s ) + { + if ( *s=='\t' ) + { + tmp->ncols++; + hts_expand(char*,tmp->ncols,tmp->mcols,tmp->cols); + tmp->cols[tmp->ncols-1] = s+1; + *s = 0; + } + s++; + } + if ( args->ref_idx != -1 ) + { + if ( args->ref_idx >= tmp->ncols ) + error("Could not parse the line, expected %d+ columns, found %d:\n\t%s\n",args->ref_idx+1,tmp->ncols,args->tgts->line.s); + if ( args->alt_idx >= tmp->ncols ) + error("Could not parse the line, expected %d+ columns, found %d:\n\t%s\n",args->alt_idx+1,tmp->ncols,args->tgts->line.s); + tmp->nals = 2; + hts_expand(char*,tmp->nals,tmp->mals,tmp->als); + tmp->als[0] = tmp->cols[args->ref_idx]; + tmp->als[1] = s = tmp->cols[args->alt_idx]; + while ( *s ) + { + if ( *s==',' ) + { + tmp->nals++; + hts_expand(char*,tmp->nals,tmp->mals,tmp->als); + tmp->als[tmp->nals-1] = s+1; + *s = 0; + } + s++; + } + int iseq = args->tgts->iseq; + if ( bcf_sr_regions_next(args->tgts)<0 || args->tgts->iseq!=iseq ) break; + } + else break; + } +} + +static void annotate(args_t *args, bcf1_t *line) +{ + int i, j; + for (i=0; inrm; i++) + args->rm[i].handler(args, line, &args->rm[i]); + + if ( args->tgts ) + { + // Buffer annotation lines. When multiple ALT alleles are present in the + // annotation file, at least one must match one of the VCF alleles. + int len = 0; + bcf_get_variant_types(line); + for (i=1; in_allele; i++) + if ( len > line->d.var[i].n ) len = line->d.var[i].n; + int end_pos = len<0 ? line->pos - len : line->pos; + buffer_annot_lines(args, line, line->pos, end_pos); + for (i=0; inalines; i++) + { + if ( line->pos > args->alines[i].end || end_pos < args->alines[i].start ) continue; + if ( args->ref_idx != -1 ) + { + if ( vcmp_set_ref(args->vcmp, line->d.allele[0], args->alines[i].als[0]) < 0 ) continue; // refs not compatible + for (j=1; jalines[i].nals; j++) + { + if ( line->n_allele==1 && args->alines[i].als[j][0]=='.' && args->alines[i].als[j][1]==0 ) break; // no ALT allele in VCF and annot file has "." + if ( vcmp_find_allele(args->vcmp, line->d.allele+1, line->n_allele - 1, args->alines[i].als[j]) >= 0 ) break; + } + if ( j==args->alines[i].nals ) continue; // none of the annot alleles present in VCF's ALT + } + break; + } + + if ( inalines ) + { + // there is a matching line + for (j=0; jncols; j++) + if ( args->cols[j].setter(args,line,&args->cols[j],&args->alines[i]) ) + error("fixme: Could not set %s at %s:%d\n", args->cols[j].hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1); + + } + + if ( args->mark_sites ) + { + // ideally, we'd like to be far more general than this in future, see https://github.com/samtools/bcftools/issues/87 + if ( args->mark_sites_logic==MARK_LISTED ) + bcf_update_info_flag(args->hdr_out,line,args->mark_sites,NULL,inalines?1:0); + else + bcf_update_info_flag(args->hdr_out,line,args->mark_sites,NULL,inalines?0:1); + } + } + else if ( args->files->nreaders == 2 ) + { + if ( bcf_sr_has_line(args->files,1) ) + { + bcf1_t *aline = bcf_sr_get_line(args->files,1); + for (j=0; jncols; j++) + if ( args->cols[j].setter(args,line,&args->cols[j],aline) ) + error("fixme: Could not set %s at %s:%d\n", args->cols[j].hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1); + + if ( args->mark_sites ) + bcf_update_info_flag(args->hdr_out,line,args->mark_sites,NULL,args->mark_sites_logic==MARK_LISTED ? 1 : 0); + } + else if ( args->mark_sites ) + bcf_update_info_flag(args->hdr_out,line,args->mark_sites,NULL, args->mark_sites_logic==MARK_UNLISTED ? 1 : 0); + } + if ( args->set_ids ) + { + args->tmpks.l = 0; + convert_line(args->set_ids, line, &args->tmpks); + if ( args->tmpks.l ) + { + int replace = 0; + if ( args->set_ids_replace ) replace = 1; + else if ( !line->d.id || (line->d.id[0]=='.' && !line->d.id[1]) ) replace = 1; + if ( replace ) + bcf_update_id(args->hdr_out,line,args->tmpks.s); + } + } +} + +static void usage(args_t *args) +{ + fprintf(stderr, "\n"); + fprintf(stderr, "About: Annotate and edit VCF/BCF files.\n"); + fprintf(stderr, "Usage: bcftools annotate [options] \n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " -a, --annotations VCF file or tabix-indexed file with annotations: CHR\\tPOS[\\tVALUE]+\n"); + fprintf(stderr, " --collapse matching records by , see man page for details [some]\n"); + fprintf(stderr, " -c, --columns list of columns in the annotation file, e.g. CHROM,POS,REF,ALT,-,INFO/TAG. See man page for details\n"); + fprintf(stderr, " -e, --exclude exclude sites for which the expression is true (see man page for details)\n"); + fprintf(stderr, " -h, --header-lines lines which should be appended to the VCF header\n"); + fprintf(stderr, " -I, --set-id [+] set ID column, see man page for details\n"); + fprintf(stderr, " -i, --include select sites for which the expression is true (see man page for details)\n"); + fprintf(stderr, " -m, --mark-sites [+-] add INFO/tag flag to sites which are (\"+\") or are not (\"-\") listed in the -a file\n"); + fprintf(stderr, " --no-version do not append version and command line to the header\n"); + fprintf(stderr, " -o, --output write output to a file [standard output]\n"); + fprintf(stderr, " -O, --output-type b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"); + fprintf(stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(stderr, " --rename-chrs rename sequences according to map file: from\\tto\n"); + fprintf(stderr, " -s, --samples [^] comma separated list of samples to annotate (or exclude with \"^\" prefix)\n"); + fprintf(stderr, " -S, --samples-file [^] file of samples to annotate (or exclude with \"^\" prefix)\n"); + fprintf(stderr, " -x, --remove list of annotations to remove (e.g. ID,INFO/DP,FORMAT/DP,FILTER). See man page for details\n"); + fprintf(stderr, " --threads number of extra output compression threads [0]\n"); + fprintf(stderr, "\n"); + exit(1); +} + +int main_vcfannotate(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->files = bcf_sr_init(); + args->output_fname = "-"; + args->output_type = FT_VCF; + args->n_threads = 0; + args->record_cmd_line = 1; + args->ref_idx = args->alt_idx = args->chr_idx = args->from_idx = args->to_idx = -1; + args->set_ids_replace = 1; + int regions_is_file = 0, collapse = 0; + + static struct option loptions[] = + { + {"mark-sites",required_argument,NULL,'m'}, + {"set-id",required_argument,NULL,'I'}, + {"output",required_argument,NULL,'o'}, + {"output-type",required_argument,NULL,'O'}, + {"threads",required_argument,NULL,9}, + {"annotations",required_argument,NULL,'a'}, + {"collapse",required_argument,NULL,2}, + {"include",required_argument,NULL,'i'}, + {"exclude",required_argument,NULL,'e'}, + {"regions",required_argument,NULL,'r'}, + {"regions-file",required_argument,NULL,'R'}, + {"remove",required_argument,NULL,'x'}, + {"columns",required_argument,NULL,'c'}, + {"rename-chrs",required_argument,NULL,1}, + {"header-lines",required_argument,NULL,'h'}, + {"samples",required_argument,NULL,'s'}, + {"samples-file",required_argument,NULL,'S'}, + {"no-version",no_argument,NULL,8}, + {NULL,0,NULL,0} + }; + while ((c = getopt_long(argc, argv, "h:?o:O:r:R:a:x:c:i:e:S:s:I:m:",loptions,NULL)) >= 0) + { + switch (c) { + case 'm': + args->mark_sites_logic = MARK_LISTED; + if ( optarg[0]=='+' ) args->mark_sites = optarg+1; + else if ( optarg[0]=='-' ) { args->mark_sites = optarg+1; args->mark_sites_logic = MARK_UNLISTED; } + else args->mark_sites = optarg; + break; + case 'I': args->set_ids_fmt = optarg; break; + case 's': args->sample_names = optarg; break; + case 'S': args->sample_names = optarg; args->sample_is_file = 1; break; + case 'c': args->columns = strdup(optarg); break; + case 'o': args->output_fname = optarg; break; + case 'O': + switch (optarg[0]) { + case 'b': args->output_type = FT_BCF_GZ; break; + case 'u': args->output_type = FT_BCF; break; + case 'z': args->output_type = FT_VCF_GZ; break; + case 'v': args->output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + }; + break; + case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break; + case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break; + case 'x': args->remove_annots = optarg; break; + case 'a': args->targets_fname = optarg; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; regions_is_file = 1; break; + case 'h': args->header_fname = optarg; break; + case 1 : args->rename_chrs = optarg; break; + case 2 : + if ( !strcmp(optarg,"snps") ) collapse |= COLLAPSE_SNPS; + else if ( !strcmp(optarg,"indels") ) collapse |= COLLAPSE_INDELS; + else if ( !strcmp(optarg,"both") ) collapse |= COLLAPSE_SNPS | COLLAPSE_INDELS; + else if ( !strcmp(optarg,"any") ) collapse |= COLLAPSE_ANY; + else if ( !strcmp(optarg,"all") ) collapse |= COLLAPSE_ANY; + else if ( !strcmp(optarg,"some") ) collapse |= COLLAPSE_SOME; + else if ( !strcmp(optarg,"none") ) collapse = COLLAPSE_NONE; + else error("The --collapse string \"%s\" not recognised.\n", optarg); + break; + case 9 : args->n_threads = strtol(optarg, 0, 0); break; + case 8 : args->record_cmd_line = 0; break; + case '?': usage(args); break; + default: error("Unknown argument: %s\n", optarg); + } + } + + char *fname = NULL; + if ( optind>=argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin + else usage(args); + } + else fname = argv[optind]; + + if ( args->regions_list ) + { + if ( bcf_sr_set_regions(args->files, args->regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + } + if ( args->targets_fname ) + { + htsFile *fp = hts_open(args->targets_fname,"r"); + htsFormat type = *hts_get_format(fp); + hts_close(fp); + + if ( type.format==vcf || type.format==bcf ) + { + args->tgts_is_vcf = 1; + args->files->require_index = 1; + args->files->collapse = collapse ? collapse : COLLAPSE_SOME; + } + } + if ( bcf_sr_set_threads(args->files, args->n_threads)<0 ) error("Failed to create threads\n"); + if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); + + init_data(args); + while ( bcf_sr_next_line(args->files) ) + { + if ( !bcf_sr_has_line(args->files,0) ) continue; + bcf1_t *line = bcf_sr_get_line(args->files,0); + if ( line->errcode ) error("Encountered error, cannot proceed. Please check the error output above.\n"); + if ( args->filter ) + { + int pass = filter_test(args->filter, line, NULL); + if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1; + if ( !pass ) continue; + } + annotate(args, line); + bcf_write1(args->out_fh, args->hdr_out, line); + } + destroy_data(args); + bcf_sr_destroy(args->files); + free(args); + return 0; +} diff --git a/bcftools/vcfannotate.c.pysam.c b/bcftools/vcfannotate.c.pysam.c new file mode 100644 index 0000000..72824f7 --- /dev/null +++ b/bcftools/vcfannotate.c.pysam.c @@ -0,0 +1,2022 @@ +#include "bcftools.pysam.h" + +/* vcfannotate.c -- Annotate and edit VCF/BCF files. + + Copyright (C) 2013-2016 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "vcmp.h" +#include "filter.h" +#include "convert.h" +#include "smpl_ilist.h" + +struct _args_t; + +typedef struct _rm_tag_t +{ + char *key; + int hdr_id; + void (*handler)(struct _args_t *, bcf1_t *, struct _rm_tag_t *); +} +rm_tag_t; + +typedef struct +{ + char **cols; + int ncols, mcols; + char **als; + int nals, mals; + kstring_t line; + int rid, start, end; +} +annot_line_t; + +#define REPLACE_MISSING 0 // replace only missing values +#define REPLACE_ALL 1 // replace both missing and existing values +#define REPLACE_NON_MISSING 2 // replace only if tgt is not missing +#define SET_OR_APPEND 3 // set new value if missing or non-existent, append otherwise +typedef struct _annot_col_t +{ + int icol, replace, number; // number: one of BCF_VL_* types + char *hdr_key_src, *hdr_key_dst; + int (*setter)(struct _args_t *, bcf1_t *, struct _annot_col_t *, void*); +} +annot_col_t; + +// Logic of the filters: include or exclude sites which match the filters? +#define FLT_INCLUDE 1 +#define FLT_EXCLUDE 2 + +#define MARK_LISTED 1 +#define MARK_UNLISTED 2 + +typedef struct _args_t +{ + bcf_srs_t *files; + bcf_hdr_t *hdr, *hdr_out; + htsFile *out_fh; + int output_type, n_threads; + bcf_sr_regions_t *tgts; + + filter_t *filter; + char *filter_str; + int filter_logic; // include or exclude sites which match the filters? One of FLT_INCLUDE/FLT_EXCLUDE + + rm_tag_t *rm; // tags scheduled for removal + int nrm; + int flt_keep_pass; // when all filters removed, reset to PASS + + vcmp_t *vcmp; // for matching annotation and VCF lines by allele + annot_line_t *alines; // buffered annotation lines + int nalines, malines; + int ref_idx, alt_idx, chr_idx, from_idx, to_idx; // -1 if not present + annot_col_t *cols; // column indexes and setters + int ncols; + + char *set_ids_fmt; + convert_t *set_ids; + int set_ids_replace; + + int nsmpl_annot; + int *sample_map, nsample_map, sample_is_file; // map[idst] -> isrc + int mtmpi, mtmpf, mtmps; + int mtmpi2, mtmpf2, mtmps2; + int mtmpi3, mtmpf3, mtmps3; + int32_t *tmpi, *tmpi2, *tmpi3; + float *tmpf, *tmpf2, *tmpf3; + char *tmps, *tmps2, **tmpp, **tmpp2; + kstring_t tmpks; + + char **argv, *output_fname, *targets_fname, *regions_list, *header_fname; + char *remove_annots, *columns, *rename_chrs, *sample_names, *mark_sites; + int argc, drop_header, record_cmd_line, tgts_is_vcf, mark_sites_logic; +} +args_t; + +char *msprintf(const char *fmt, ...); + +void remove_id(args_t *args, bcf1_t *line, rm_tag_t *tag) +{ + bcf_update_id(args->hdr,line,NULL); +} +void remove_filter(args_t *args, bcf1_t *line, rm_tag_t *tag) +{ + if ( !tag->key ) bcf_update_filter(args->hdr, line, NULL, args->flt_keep_pass); + else bcf_remove_filter(args->hdr, line, tag->hdr_id, args->flt_keep_pass); +} +void remove_qual(args_t *args, bcf1_t *line, rm_tag_t *tag) +{ + bcf_float_set_missing(line->qual); +} +void remove_info(args_t *args, bcf1_t *line, rm_tag_t *tag) +{ + // remove all INFO fields + if ( !(line->unpacked & BCF_UN_INFO) ) bcf_unpack(line, BCF_UN_INFO); + + int i; + for (i=0; in_info; i++) + { + bcf_info_t *inf = &line->d.info[i]; + if ( inf->vptr_free ) + { + free(inf->vptr - inf->vptr_off); + inf->vptr_free = 0; + } + line->d.shared_dirty |= BCF1_DIRTY_INF; + inf->vptr = NULL; + inf->vptr_off = inf->vptr_len = 0; + } +} +void remove_info_tag(args_t *args, bcf1_t *line, rm_tag_t *tag) +{ + bcf_update_info(args->hdr, line, tag->key, NULL, 0, BCF_HT_INT); // the type does not matter with n=0 +} +void remove_format_tag(args_t *args, bcf1_t *line, rm_tag_t *tag) +{ + bcf_update_format(args->hdr, line, tag->key, NULL, 0, BCF_HT_INT); // the type does not matter with n=0 +} +void remove_format(args_t *args, bcf1_t *line, rm_tag_t *tag) +{ + // remove all FORMAT fields except GT + if ( !(line->unpacked & BCF_UN_FMT) ) bcf_unpack(line, BCF_UN_FMT); + + int i; + for (i=0; in_fmt; i++) + { + bcf_fmt_t *fmt = &line->d.fmt[i]; + const char *key = bcf_hdr_int2id(args->hdr,BCF_DT_ID,fmt->id); + if ( key[0]=='G' && key[1]=='T' && !key[2] ) continue; + + if ( fmt->p_free ) + { + free(fmt->p - fmt->p_off); + fmt->p_free = 0; + } + line->d.indiv_dirty = 1; + fmt->p = NULL; + } +} + +#include "htslib/khash.h" +KHASH_MAP_INIT_STR(vdict, bcf_idinfo_t) +typedef khash_t(vdict) vdict_t; + +static void remove_hdr_lines(bcf_hdr_t *hdr, int type) +{ + int i = 0, nrm = 0; + while ( inhrec ) + { + if ( hdr->hrec[i]->type!=type ) { i++; continue; } + bcf_hrec_t *hrec = hdr->hrec[i]; + if ( type==BCF_HL_FMT || type==BCF_HL_INFO || type==BCF_HL_FMT || type== BCF_HL_CTG ) + { + // everything except FORMAT/GT + int id = bcf_hrec_find_key(hrec, "ID"); + if ( id>=0 ) + { + if ( type==BCF_HL_FMT && !strcmp(hrec->vals[id],"GT") ) { i++; continue; } + vdict_t *d = type==BCF_HL_CTG ? (vdict_t*)hdr->dict[BCF_DT_CTG] : (vdict_t*)hdr->dict[BCF_DT_ID]; + khint_t k = kh_get(vdict, d, hdr->hrec[i]->vals[id]); + kh_val(d, k).hrec[type==BCF_HL_CTG?0:type] = NULL; + kh_val(d, k).info[type] |= 0xf; + } + } + nrm++; + hdr->nhrec--; + if ( i < hdr->nhrec ) + memmove(&hdr->hrec[i],&hdr->hrec[i+1],(hdr->nhrec-i)*sizeof(bcf_hrec_t*)); + bcf_hrec_destroy(hrec); + } + if ( nrm ) bcf_hdr_sync(hdr); +} + +static void init_remove_annots(args_t *args) +{ + int keep_info = 0, keep_fmt = 0, keep_flt = 0; + void *keep = khash_str2int_init(); + kstring_t str = {0,0,0}; + char *ss = args->remove_annots; + while ( *ss ) + { + args->nrm++; + args->rm = (rm_tag_t*) realloc(args->rm,sizeof(rm_tag_t)*args->nrm); + rm_tag_t *tag = &args->rm[args->nrm-1]; + tag->key = NULL; + + int type = BCF_HL_GEN; + if ( !strncasecmp("INFO/",ss,5) ) { type = BCF_HL_INFO; ss += 5; } + else if ( !strncasecmp("INF/",ss,4) ) { type = BCF_HL_INFO; ss += 4; } + else if ( !strncasecmp("FORMAT/",ss,7) ) { type = BCF_HL_FMT; ss += 7; } + else if ( !strncasecmp("FMT/",ss,4) ) { type = BCF_HL_FMT; ss += 4; } + else if ( !strncasecmp("FILTER/",ss,7) ) { type = BCF_HL_FLT; ss += 7; } + else if ( !strncasecmp("^INFO/",ss,6) ) { type = BCF_HL_INFO; ss += 6; keep_info = 1; } + else if ( !strncasecmp("^INF/",ss,5) ) { type = BCF_HL_INFO; ss += 5; keep_info = 1; } + else if ( !strncasecmp("^FORMAT/",ss,8) ) { type = BCF_HL_FMT; ss += 8; keep_fmt = 1; } + else if ( !strncasecmp("^FMT/",ss,5) ) { type = BCF_HL_FMT; ss += 5; keep_fmt = 1; } + else if ( !strncasecmp("^FILTER/",ss,8) ) { type = BCF_HL_FLT; ss += 8; keep_flt = 1; } + + char *se = ss; + while ( *se && *se!=',' ) se++; + str.l = 0; + kputsn(ss, se-ss, &str); + + if ( type==BCF_HL_FLT ) + { + if ( !keep_flt ) + { + args->flt_keep_pass = 1; + tag->handler = remove_filter; + tag->key = strdup(str.s); + tag->hdr_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, tag->key); + if ( !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FLT,tag->hdr_id) ) error("Cannot remove %s, not defined in the header.\n", str.s); + bcf_hdr_remove(args->hdr_out,BCF_HL_FLT,tag->key); + } + else + { + int value, ret = khash_str2int_get(keep, str.s, &value); + if ( ret==-1 ) khash_str2int_set(keep, strdup(str.s),1<nrm--; + } + } + else if ( type!=BCF_HL_GEN ) + { + int id = bcf_hdr_id2int(args->hdr,BCF_DT_ID,str.s); + if ( !bcf_hdr_idinfo_exists(args->hdr,type,id) ) + { + fprintf(bcftools_stderr,"Warning: The tag \"%s\" not defined in the header\n", str.s); + args->nrm--; + } + else if ( (type==BCF_HL_FMT && keep_fmt) || (type==BCF_HL_INFO && keep_info) ) + { + int value, ret = khash_str2int_get(keep, str.s, &value); + if ( ret==-1 ) khash_str2int_set(keep, strdup(str.s),1<nrm--; + } + else + { + tag->key = strdup(str.s); + if ( type==BCF_HL_INFO ) tag->handler = remove_info_tag; + else if ( type==BCF_HL_FMT ) tag->handler = remove_format_tag; + bcf_hdr_remove(args->hdr_out,type,tag->key); + } + } + else if ( !strcasecmp("ID",str.s) ) tag->handler = remove_id; + else if ( !strcasecmp("FILTER",str.s) ) + { + tag->handler = remove_filter; + remove_hdr_lines(args->hdr_out,BCF_HL_FLT); + } + else if ( !strcasecmp("QUAL",str.s) ) tag->handler = remove_qual; + else if ( !strcasecmp("INFO",str.s) ) + { + tag->handler = remove_info; + remove_hdr_lines(args->hdr_out,BCF_HL_INFO); + } + else if ( !strcasecmp("FMT",str.s) || !strcasecmp("FORMAT",str.s) ) + { + tag->handler = remove_format; + remove_hdr_lines(args->hdr_out,BCF_HL_FMT); + } + else if ( str.l ) + { + if ( str.s[0]=='#' && str.s[1]=='#' ) + bcf_hdr_remove(args->hdr_out,BCF_HL_GEN,str.s+2); + else + bcf_hdr_remove(args->hdr_out,BCF_HL_STR,str.s); + args->nrm--; + } + + ss = *se ? se+1 : se; + } + free(str.s); + if ( keep_flt || keep_info || keep_fmt ) + { + int j; + for (j=0; jhdr->nhrec; j++) + { + bcf_hrec_t *hrec = args->hdr->hrec[j]; + if ( hrec->type!=BCF_HL_FLT && hrec->type!=BCF_HL_INFO && hrec->type!=BCF_HL_FMT ) continue; + if ( !keep_flt && hrec->type==BCF_HL_FLT ) continue; + if ( !keep_info && hrec->type==BCF_HL_INFO ) continue; + if ( !keep_fmt && hrec->type==BCF_HL_FMT ) continue; + int k = bcf_hrec_find_key(hrec,"ID"); + assert( k>=0 ); // this should always be true for valid VCFs + int value, ret = khash_str2int_get(keep,hrec->vals[k],&value); + if ( ret==0 && value>>hrec->type ) // keep + { + if ( hrec->type==BCF_HL_FLT && !strcmp("PASS",hrec->vals[k]) ) args->flt_keep_pass = 1; + continue; + } + args->nrm++; + args->rm = (rm_tag_t*) realloc(args->rm,sizeof(rm_tag_t)*args->nrm); + rm_tag_t *tag = &args->rm[args->nrm-1]; + if ( hrec->type==BCF_HL_INFO ) tag->handler = remove_info_tag; + else if ( hrec->type==BCF_HL_FMT ) tag->handler = remove_format_tag; + else + { + tag->handler = remove_filter; + tag->hdr_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, hrec->vals[k]); + } + tag->key = strdup(hrec->vals[k]); + bcf_hdr_remove(args->hdr_out,hrec->type,tag->key); + } + } + khash_str2int_destroy_free(keep); + if ( !args->nrm ) error("No matching tag in -x %s\n", args->remove_annots); + bcf_hdr_sync(args->hdr_out); +} +static void init_header_lines(args_t *args) +{ + htsFile *file = hts_open(args->header_fname, "rb"); + if ( !file ) error("Error reading %s\n", args->header_fname); + kstring_t str = {0,0,0}; + while ( hts_getline(file, KS_SEP_LINE, &str) > 0 ) + { + if ( bcf_hdr_append(args->hdr_out,str.s) ) error("Could not parse %s: %s\n", args->header_fname, str.s); + bcf_hdr_append(args->hdr,str.s); // the input file may not have the header line if run with -h (and nothing else) + } + hts_close(file); + free(str.s); + bcf_hdr_sync(args->hdr_out); + bcf_hdr_sync(args->hdr); +} +static int setter_filter(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + // note: so far this works only with one filter, not a list of filters + annot_line_t *tab = (annot_line_t*) data; + if ( tab->cols[col->icol] && tab->cols[col->icol][0]=='.' && !tab->cols[col->icol][1] ) return 0; // don't replace with "." + hts_expand(int,1,args->mtmpi,args->tmpi); + args->tmpi[0] = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, tab->cols[col->icol]); + if ( args->tmpi[0]<0 ) error("The FILTER is not defined in the header: %s\n", tab->cols[col->icol]); + if ( col->replace==SET_OR_APPEND ) { bcf_add_filter(args->hdr_out,line,args->tmpi[0]); return 0; } + if ( col->replace!=REPLACE_MISSING ) + { + bcf_update_filter(args->hdr_out,line,NULL,0); + bcf_update_filter(args->hdr_out,line,args->tmpi,1); + return 0; + } + + // only update missing FILTER + if ( !(line->unpacked & BCF_UN_FLT) ) bcf_unpack(line, BCF_UN_FLT); + if ( !line->d.n_flt ) + bcf_update_filter(args->hdr_out,line,args->tmpi,1); + return 0; +} +static int vcf_setter_filter(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + int i; + bcf1_t *rec = (bcf1_t*) data; + if ( !(rec->unpacked & BCF_UN_FLT) ) bcf_unpack(rec, BCF_UN_FLT); + if ( !(line->unpacked & BCF_UN_FLT) ) bcf_unpack(line, BCF_UN_FLT); + if ( !rec->d.n_flt ) return 0; // don't overwrite with a missing value + if ( col->replace==SET_OR_APPEND || col->replace==REPLACE_MISSING ) + { + if ( col->replace==REPLACE_MISSING && line->d.n_flt ) return 0; // only update missing FILTER + for (i=0; id.n_flt; i++) + { + const char *flt = bcf_hdr_int2id(args->files->readers[1].header, BCF_DT_ID, rec->d.flt[i]); + bcf_add_filter(args->hdr_out,line,bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, flt)); + } + return 0; + } + hts_expand(int,rec->d.n_flt,args->mtmpi,args->tmpi); + for (i=0; id.n_flt; i++) + { + const char *flt = bcf_hdr_int2id(args->files->readers[1].header, BCF_DT_ID, rec->d.flt[i]); + args->tmpi[i] = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, flt); + } + bcf_update_filter(args->hdr_out,line,NULL,0); + bcf_update_filter(args->hdr_out,line,args->tmpi,rec->d.n_flt); + return 0; +} +static int setter_id(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + // possible cases: + // IN ANNOT OUT ACHIEVED_BY + // x y x -c +ID + // x y y -c ID + // x y x,y -c =ID + // x . x -c +ID, ID + // x . . -x ID + // . y y -c +ID, -c ID + // + annot_line_t *tab = (annot_line_t*) data; + if ( tab->cols[col->icol] && tab->cols[col->icol][0]=='.' && !tab->cols[col->icol][1] ) return 0; // don't replace with "." + if ( col->replace==SET_OR_APPEND ) return bcf_add_id(args->hdr_out,line,tab->cols[col->icol]); + if ( col->replace!=REPLACE_MISSING ) return bcf_update_id(args->hdr_out,line,tab->cols[col->icol]); + + // running with +ID, only update missing ids + if ( !line->d.id || (line->d.id[0]=='.' && !line->d.id[1]) ) + return bcf_update_id(args->hdr_out,line,tab->cols[col->icol]); + return 0; +} +static int vcf_setter_id(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + bcf1_t *rec = (bcf1_t*) data; + if ( rec->d.id && rec->d.id[0]=='.' && !rec->d.id[1] ) return 0; // don't replace with "." + if ( col->replace==SET_OR_APPEND ) return bcf_add_id(args->hdr_out,line,rec->d.id); + if ( col->replace!=REPLACE_MISSING ) return bcf_update_id(args->hdr_out,line,rec->d.id); + + // running with +ID, only update missing ids + if ( !line->d.id || (line->d.id[0]=='.' && !line->d.id[1]) ) + return bcf_update_id(args->hdr_out,line,rec->d.id); + return 0; +} +static int setter_qual(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + annot_line_t *tab = (annot_line_t*) data; + char *str = tab->cols[col->icol]; + if ( str[0]=='.' && str[1]==0 ) return 0; // empty + + if ( col->replace==REPLACE_MISSING && !bcf_float_is_missing(line->qual) ) return 0; + + line->qual = strtod(str, &str); + if ( str == tab->cols[col->icol] ) + error("Could not parse %s at %s:%d .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]); + return 0; +} +static int vcf_setter_qual(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + bcf1_t *rec = (bcf1_t*) data; + if ( bcf_float_is_missing(rec->qual) ) return 0; + if ( col->replace==REPLACE_MISSING && !bcf_float_is_missing(line->qual) ) return 0; + line->qual = rec->qual; + return 0; +} +static int setter_info_flag(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + annot_line_t *tab = (annot_line_t*) data; + char *str = tab->cols[col->icol]; + if ( str[0]=='.' && str[1]==0 ) return 0; + + if ( str[0]=='1' && str[1]==0 ) return bcf_update_info_flag(args->hdr_out,line,col->hdr_key_dst,NULL,1); + if ( str[0]=='0' && str[1]==0 ) return bcf_update_info_flag(args->hdr_out,line,col->hdr_key_dst,NULL,0); + error("Could not parse %s at %s:%d .. [%s]\n", bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]); + return -1; +} +static int vcf_setter_info_flag(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + bcf1_t *rec = (bcf1_t*) data; + int flag = bcf_get_info_flag(args->files->readers[1].header,rec,col->hdr_key_src,NULL,NULL); + bcf_update_info_flag(args->hdr_out,line,col->hdr_key_dst,NULL,flag); + return 0; +} +static int setter_ARinfo_int32(args_t *args, bcf1_t *line, annot_col_t *col, int nals, char **als, int ntmpi) +{ + if ( col->number==BCF_VL_A && ntmpi!=nals-1 && (ntmpi!=1 || args->tmpi[0]!=bcf_int32_missing || args->tmpi[1]!=bcf_int32_vector_end) ) + error("Incorrect number of values (%d) for the %s tag at %s:%d\n", ntmpi,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1); + else if ( col->number==BCF_VL_R && ntmpi!=nals && (ntmpi!=1 || args->tmpi[0]!=bcf_int32_missing || args->tmpi[1]!=bcf_int32_vector_end) ) + error("Incorrect number of values (%d) for the %s tag at %s:%d\n", ntmpi,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1); + + int ndst = col->number==BCF_VL_A ? line->n_allele - 1 : line->n_allele; + int *map = vcmp_map_ARvalues(args->vcmp,ndst,nals,als,line->n_allele,line->d.allele); + if ( !map ) error("REF alleles not compatible at %s:%d\n"); + + // fill in any missing values in the target VCF (or all, if not present) + int ntmpi2 = bcf_get_info_float(args->hdr, line, col->hdr_key_dst, &args->tmpi2, &args->mtmpi2); + if ( ntmpi2 < ndst ) hts_expand(int32_t,ndst,args->mtmpi2,args->tmpi2); + + int i; + for (i=0; itmpi2[i] = bcf_int32_missing; + continue; + } + if ( ntmpi2==ndst && col->replace==REPLACE_MISSING + && args->tmpi2[i]!=bcf_int32_missing + && args->tmpi2[i]!=bcf_int32_vector_end ) continue; + + args->tmpi2[i] = args->tmpi[ map[i] ]; + } + bcf_update_info_int32(args->hdr_out,line,col->hdr_key_dst,args->tmpi2,ndst); + return 0; +} +static int setter_info_int(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + annot_line_t *tab = (annot_line_t*) data; + char *str = tab->cols[col->icol], *end = str; + if ( str[0]=='.' && str[1]==0 ) return 0; + + int ntmpi = 0; + while ( *end ) + { + int val = strtol(str, &end, 10); + if ( end==str ) + error("Could not parse %s at %s:%d .. [%s]\n", bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]); + ntmpi++; + hts_expand(int32_t,ntmpi,args->mtmpi,args->tmpi); + args->tmpi[ntmpi-1] = val; + str = end+1; + } + + if ( col->number==BCF_VL_A || col->number==BCF_VL_R ) + return setter_ARinfo_int32(args,line,col,tab->nals,tab->als,ntmpi); + + if ( col->replace==REPLACE_MISSING ) + { + int ret = bcf_get_info_int32(args->hdr, line, col->hdr_key_dst, &args->tmpi2, &args->mtmpi2); + if ( ret>0 && args->tmpi2[0]!=bcf_int32_missing ) return 0; + } + + bcf_update_info_int32(args->hdr_out,line,col->hdr_key_dst,args->tmpi,ntmpi); + return 0; +} +static int vcf_setter_info_int(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + bcf1_t *rec = (bcf1_t*) data; + int ntmpi = bcf_get_info_int32(args->files->readers[1].header,rec,col->hdr_key_src,&args->tmpi,&args->mtmpi); + if ( ntmpi < 0 ) return 0; // nothing to add + + if ( col->number==BCF_VL_A || col->number==BCF_VL_R ) + return setter_ARinfo_int32(args,line,col,rec->n_allele,rec->d.allele,ntmpi); + + if ( col->replace==REPLACE_MISSING ) + { + int ret = bcf_get_info_int32(args->hdr, line, col->hdr_key_dst, &args->tmpi2, &args->mtmpi2); + if ( ret>0 && args->tmpi2[0]!=bcf_int32_missing ) return 0; + } + + bcf_update_info_int32(args->hdr_out,line,col->hdr_key_dst,args->tmpi,ntmpi); + return 0; +} +static int setter_ARinfo_real(args_t *args, bcf1_t *line, annot_col_t *col, int nals, char **als, int ntmpf) +{ + if ( col->number==BCF_VL_A && ntmpf!=nals-1 && (ntmpf!=1 || !bcf_float_is_missing(args->tmpf[0]) || !bcf_float_is_vector_end(args->tmpf[0])) ) + error("Incorrect number of values (%d) for the %s tag at %s:%d\n", ntmpf,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1); + else if ( col->number==BCF_VL_R && ntmpf!=nals && (ntmpf!=1 || !bcf_float_is_missing(args->tmpf[0]) || !bcf_float_is_vector_end(args->tmpf[0])) ) + error("Incorrect number of values (%d) for the %s tag at %s:%d\n", ntmpf,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1); + + int ndst = col->number==BCF_VL_A ? line->n_allele - 1 : line->n_allele; + int *map = vcmp_map_ARvalues(args->vcmp,ndst,nals,als,line->n_allele,line->d.allele); + if ( !map ) error("REF alleles not compatible at %s:%d\n"); + + // fill in any missing values in the target VCF (or all, if not present) + int ntmpf2 = bcf_get_info_float(args->hdr, line, col->hdr_key_dst, &args->tmpf2, &args->mtmpf2); + if ( ntmpf2 < ndst ) hts_expand(float,ndst,args->mtmpf2,args->tmpf2); + + int i; + for (i=0; itmpf2[i]); + continue; + } + if ( ntmpf2==ndst && col->replace==REPLACE_MISSING + && !bcf_float_is_missing(args->tmpf2[i]) + && !bcf_float_is_vector_end(args->tmpf2[i]) ) continue; + + args->tmpf2[i] = args->tmpf[ map[i] ]; + } + bcf_update_info_float(args->hdr_out,line,col->hdr_key_dst,args->tmpf2,ndst); + return 0; +} +static int setter_info_real(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + annot_line_t *tab = (annot_line_t*) data; + char *str = tab->cols[col->icol], *end = str; + if ( str[0]=='.' && str[1]==0 ) return 0; + + int ntmpf = 0; + while ( *end ) + { + double val = strtod(str, &end); + if ( end==str ) + error("Could not parse %s at %s:%d .. [%s]\n", bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]); + ntmpf++; + hts_expand(float,ntmpf,args->mtmpf,args->tmpf); + args->tmpf[ntmpf-1] = val; + str = end+1; + } + + if ( col->number==BCF_VL_A || col->number==BCF_VL_R ) + return setter_ARinfo_real(args,line,col,tab->nals,tab->als,ntmpf); + + if ( col->replace==REPLACE_MISSING ) + { + int ret = bcf_get_info_float(args->hdr, line, col->hdr_key_dst, &args->tmpf2, &args->mtmpf2); + if ( ret>0 && !bcf_float_is_missing(args->tmpf2[0]) ) return 0; + } + + bcf_update_info_float(args->hdr_out,line,col->hdr_key_dst,args->tmpf,ntmpf); + return 0; +} +static int vcf_setter_info_real(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + bcf1_t *rec = (bcf1_t*) data; + int ntmpf = bcf_get_info_float(args->files->readers[1].header,rec,col->hdr_key_src,&args->tmpf,&args->mtmpf); + if ( ntmpf < 0 ) return 0; // nothing to add + + if ( col->number==BCF_VL_A || col->number==BCF_VL_R ) + return setter_ARinfo_real(args,line,col,rec->n_allele,rec->d.allele,ntmpf); + + if ( col->replace==REPLACE_MISSING ) + { + int ret = bcf_get_info_float(args->hdr, line, col->hdr_key_dst, &args->tmpf2, &args->mtmpf2); + if ( ret>0 && !bcf_float_is_missing(args->tmpf2[0]) ) return 0; + } + + bcf_update_info_float(args->hdr_out,line,col->hdr_key_dst,args->tmpf,ntmpf); + return 0; +} +int copy_string_field(char *src, int isrc, int src_len, kstring_t *dst, int idst); // see vcfmerge.c +static int setter_ARinfo_string(args_t *args, bcf1_t *line, annot_col_t *col, int nals, char **als) +{ + int nsrc = 1, lsrc = 0; + while ( args->tmps[lsrc] ) + { + if ( args->tmps[lsrc]==',' ) nsrc++; + lsrc++; + } + if ( col->number==BCF_VL_A && nsrc!=nals-1 && (nsrc!=1 || args->tmps[0]!='.' || args->tmps[1]!=0 ) ) + error("Incorrect number of values (%d) for the %s tag at %s:%d\n", nsrc,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1); + else if ( col->number==BCF_VL_R && nsrc!=nals && (nsrc!=1 || args->tmps[0]!='.' || args->tmps[1]!=0 ) ) + error("Incorrect number of values (%d) for the %s tag at %s:%d\n", nsrc,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1); + + int ndst = col->number==BCF_VL_A ? line->n_allele - 1 : line->n_allele; + int *map = vcmp_map_ARvalues(args->vcmp,ndst,nals,als,line->n_allele,line->d.allele); + if ( !map ) error("REF alleles not compatible at %s:%d\n"); + + // fill in any missing values in the target VCF (or all, if not present) + int i, empty = 0, nstr, mstr = args->tmpks.m; + nstr = bcf_get_info_string(args->hdr, line, col->hdr_key_dst, &args->tmpks.s, &mstr); + args->tmpks.m = mstr; + if ( nstr<0 || (nstr==1 && args->tmpks.s[0]=='.' && args->tmpks.s[1]==0) ) + { + empty = 0; + args->tmpks.l = 0; + kputc('.',&args->tmpks); + for (i=1; itmpks); + } + else args->tmpks.l = nstr; + for (i=0; itmpks,i); + continue; + } + if ( col->replace==REPLACE_MISSING ) + { + // Do not replace filled values. The field must be looked up again because + // of realloc in copy_string_field + int n = 0; + char *str = args->tmpks.s; + while ( *str && ntmps,map[i],lsrc,&args->tmpks,i); + assert( ret==0 ); + } + bcf_update_info_string(args->hdr_out,line,col->hdr_key_dst,args->tmpks.s); + return 0; +} +static int setter_info_str(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + annot_line_t *tab = (annot_line_t*) data; + int len = strlen(tab->cols[col->icol]); + if ( !len ) return 0; + hts_expand(char,len+1,args->mtmps,args->tmps); + memcpy(args->tmps,tab->cols[col->icol],len+1); + if ( args->tmps[0]=='.' && args->tmps[1]==0 ) return 0; + + if ( col->number==BCF_VL_A || col->number==BCF_VL_R ) + return setter_ARinfo_string(args,line,col,tab->nals,tab->als); + + if ( col->replace==REPLACE_MISSING ) + { + int ret = bcf_get_info_string(args->hdr, line, col->hdr_key_dst, &args->tmps2, &args->mtmps2); + if ( ret>0 && (args->tmps2[0]!='.' || args->tmps2[1]!=0) ) return 0; + } + + bcf_update_info_string(args->hdr_out,line,col->hdr_key_dst,args->tmps); + return 0; +} +static int vcf_setter_info_str(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + bcf1_t *rec = (bcf1_t*) data; + int ntmps = bcf_get_info_string(args->files->readers[1].header,rec,col->hdr_key_src,&args->tmps,&args->mtmps); + if ( ntmps < 0 ) return 0; // nothing to add + + if ( col->number==BCF_VL_A || col->number==BCF_VL_R ) + return setter_ARinfo_string(args,line,col,rec->n_allele,rec->d.allele); + + if ( col->replace==REPLACE_MISSING ) + { + int ret = bcf_get_info_string(args->hdr, line, col->hdr_key_dst, &args->tmps2, &args->mtmps2); + if ( ret>0 && (args->tmps2[0]!='.' || args->tmps2[1]!=0) ) return 0; + } + + bcf_update_info_string(args->hdr_out,line,col->hdr_key_dst,args->tmps); + return 0; +} +static int vcf_setter_format_gt(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + bcf1_t *rec = (bcf1_t*) data; + int nsrc = bcf_get_genotypes(args->files->readers[1].header,rec,&args->tmpi,&args->mtmpi); + if ( nsrc==-3 ) return 0; // the tag is not present + if ( nsrc<=0 ) return 1; // error + + if ( !args->sample_map ) + return bcf_update_genotypes(args->hdr_out,line,args->tmpi,nsrc); + + int i, j, ndst = bcf_get_genotypes(args->hdr,line,&args->tmpi2,&args->mtmpi2); + if ( ndst > 0 ) ndst /= bcf_hdr_nsamples(args->hdr_out); + nsrc /= bcf_hdr_nsamples(args->files->readers[1].header); + if ( ndst<=0 ) // field not present in dst file + { + if ( col->replace==REPLACE_NON_MISSING ) return 0; + hts_expand(int32_t, nsrc*bcf_hdr_nsamples(args->hdr_out), args->mtmpi2, args->tmpi2); + for (i=0; ihdr_out); i++) + { + int32_t *dst = args->tmpi2 + nsrc*i; + if ( args->sample_map[i]==-1 ) + { + dst[0] = bcf_gt_missing; + for (j=1; jtmpi + nsrc*args->sample_map[i]; + for (j=0; jhdr_out,line,args->tmpi2,nsrc*bcf_hdr_nsamples(args->hdr_out)); + } + else if ( ndst >= nsrc ) + { + for (i=0; ihdr_out); i++) + { + if ( args->sample_map[i]==-1 ) continue; + int32_t *src = args->tmpi + nsrc*args->sample_map[i]; + int32_t *dst = args->tmpi2 + ndst*i; + if ( col->replace==REPLACE_NON_MISSING && bcf_gt_is_missing(dst[0]) ) continue; + if ( col->replace==REPLACE_MISSING && !bcf_gt_is_missing(dst[0]) ) continue; + for (j=0; jhdr_out,line,args->tmpi2,ndst*bcf_hdr_nsamples(args->hdr_out)); + } + else // ndst < nsrc + { + hts_expand(int32_t, nsrc*bcf_hdr_nsamples(args->hdr_out), args->mtmpi3, args->tmpi3); + for (i=0; ihdr_out); i++) + { + int32_t *ori = args->tmpi2 + ndst*i; + int32_t *dst = args->tmpi3 + nsrc*i; + int keep_ori = 0; + if ( args->sample_map[i]==-1 ) keep_ori = 1; + else if ( col->replace==REPLACE_NON_MISSING && bcf_gt_is_missing(ori[0]) ) keep_ori = 1; + else if ( col->replace==REPLACE_MISSING && !bcf_gt_is_missing(ori[0]) ) keep_ori = 1; + if ( keep_ori ) + { + for (j=0; jtmpi + nsrc*args->sample_map[i]; + for (j=0; jhdr_out,line,args->tmpi3,nsrc*bcf_hdr_nsamples(args->hdr_out)); + } +} +static int count_vals(annot_line_t *tab, int icol_beg, int icol_end) +{ + int i, nmax = 1; + for (i=icol_beg; icols[i], *end = str; + if ( str[0]=='.' && !str[1] ) + { + // missing value + if ( !nmax ) nmax = 1; + continue; + } + int n = 1; + while ( *end ) + { + if ( *end==',' ) n++; + end++; + } + if ( nmaxsample_map ) + return bcf_update_format_int32(args->hdr_out,line,col->hdr_key_dst,vals,nvals*args->nsmpl_annot); + + int i, j, ndst = bcf_get_format_int32(args->hdr,line,col->hdr_key_dst,&args->tmpi2,&args->mtmpi2); + if ( ndst > 0 ) ndst /= bcf_hdr_nsamples(args->hdr_out); + if ( ndst<=0 ) + { + if ( col->replace==REPLACE_NON_MISSING ) return 0; // overwrite only if present + hts_expand(int32_t, nvals*bcf_hdr_nsamples(args->hdr_out), args->mtmpi2, args->tmpi2); + for (i=0; ihdr_out); i++) + { + int32_t *dst = args->tmpi2 + nvals*i; + if ( args->sample_map[i]==-1 ) + { + dst[0] = bcf_int32_missing; + for (j=1; jsample_map[i]; + for (j=0; jhdr_out,line,col->hdr_key_dst,args->tmpi2,nvals*bcf_hdr_nsamples(args->hdr_out)); + } + else if ( ndst >= nvals ) + { + for (i=0; ihdr_out); i++) + { + if ( args->sample_map[i]==-1 ) continue; + int32_t *src = vals + nvals*args->sample_map[i]; + int32_t *dst = args->tmpi2 + ndst*i; + // possible cases: + // in annot out + // x y x TAG,-TAG,=TAG .. REPLACE_ALL, REPLACE_NON_MISSING, SET_OR_APPEND + // x y y +TAG .. REPLACE_MISSING + // . y . =TAG .. SET_OR_APPEND + // . y y TAG,+TAG,-TAG .. REPLACE_ALL, REPLACE_MISSING, REPLACE_NON_MISSING + // x . x TAG,+TAG .. REPLACE_ALL, REPLACE_MISSING + // x . . -TAG .. REPLACE_NON_MISSING + if ( col->replace==REPLACE_NON_MISSING ) { if ( dst[0]==bcf_int32_missing ) continue; } + else if ( col->replace==REPLACE_MISSING ) { if ( dst[0]!=bcf_int32_missing ) continue; } + else if ( col->replace==REPLACE_ALL ) { if ( src[0]==bcf_int32_missing ) continue; } + for (j=0; jhdr_out,line,col->hdr_key_dst,args->tmpi2,ndst*bcf_hdr_nsamples(args->hdr_out)); + } + else // ndst < nvals + { + hts_expand(int32_t, nvals*bcf_hdr_nsamples(args->hdr_out), args->mtmpi3, args->tmpi3); + for (i=0; ihdr_out); i++) + { + int32_t *ann = vals + nvals*args->sample_map[i]; + int32_t *ori = args->tmpi2 + ndst*i; // ori vcf line + int32_t *dst = args->tmpi3 + nvals*i; // expanded buffer + int use_new_ann = 1; + if ( args->sample_map[i]==-1 ) use_new_ann = 0; + else if ( col->replace==REPLACE_NON_MISSING ) { if ( ori[0]==bcf_int32_missing ) use_new_ann = 0; } + else if ( col->replace==REPLACE_MISSING ) { if ( ori[0]!=bcf_int32_missing ) use_new_ann = 0; } + else if ( col->replace==REPLACE_ALL ) { if ( ann[0]==bcf_int32_missing ) use_new_ann = 0; } + if ( !use_new_ann ) + { + for (j=0; jhdr_out,line,col->hdr_key_dst,args->tmpi3,nvals*bcf_hdr_nsamples(args->hdr_out)); + } +} +static int core_setter_format_real(args_t *args, bcf1_t *line, annot_col_t *col, float *vals, int nvals) +{ + if ( !args->sample_map ) + return bcf_update_format_float(args->hdr_out,line,col->hdr_key_dst,vals,nvals*args->nsmpl_annot); + + int i, j, ndst = bcf_get_format_float(args->hdr,line,col->hdr_key_dst,&args->tmpf2,&args->mtmpf2); + if ( ndst > 0 ) ndst /= bcf_hdr_nsamples(args->hdr_out); + if ( ndst<=0 ) + { + if ( col->replace==REPLACE_NON_MISSING ) return 0; // overwrite only if present + hts_expand(float, nvals*bcf_hdr_nsamples(args->hdr_out), args->mtmpf2, args->tmpf2); + for (i=0; ihdr_out); i++) + { + float *dst = args->tmpf2 + nvals*i; + if ( args->sample_map[i]==-1 ) + { + bcf_float_set_missing(dst[0]); + for (j=1; jsample_map[i]; + for (j=0; jhdr_out,line,col->hdr_key_dst,args->tmpf2,nvals*bcf_hdr_nsamples(args->hdr_out)); + } + else if ( ndst >= nvals ) + { + for (i=0; ihdr_out); i++) + { + if ( args->sample_map[i]==-1 ) continue; + float *src = vals + nvals*args->sample_map[i]; + float *dst = args->tmpf2 + ndst*i; + if ( col->replace==REPLACE_NON_MISSING ) { if ( bcf_float_is_missing(dst[0]) ) continue; } + else if ( col->replace==REPLACE_MISSING ) { if ( !bcf_float_is_missing(dst[0]) ) continue; } + else if ( col->replace==REPLACE_ALL ) { if ( bcf_float_is_missing(src[0]) ) continue; } + for (j=0; jhdr_out,line,col->hdr_key_dst,args->tmpf2,ndst*bcf_hdr_nsamples(args->hdr_out)); + } + else // ndst < nvals + { + hts_expand(float, nvals*bcf_hdr_nsamples(args->hdr_out), args->mtmpf3, args->tmpf3); + for (i=0; ihdr_out); i++) + { + float *ann = vals + nvals*args->sample_map[i]; + float *ori = args->tmpf2 + ndst*i; // ori vcf line + float *dst = args->tmpf3 + nvals*i; // expanded buffer + int use_new_ann = 1; + if ( args->sample_map[i]==-1 ) use_new_ann = 0; + else if ( col->replace==REPLACE_NON_MISSING ) { if ( bcf_float_is_missing(ori[0]) ) use_new_ann = 0; } + else if ( col->replace==REPLACE_MISSING ) { if ( !bcf_float_is_missing(ori[0]) ) use_new_ann = 0; } + else if ( col->replace==REPLACE_ALL ) { if ( bcf_float_is_missing(ann[0]) ) use_new_ann = 0; } + if ( !use_new_ann ) + { + for (j=0; jhdr_out,line,col->hdr_key_dst,args->tmpf3,nvals*bcf_hdr_nsamples(args->hdr_out)); + } +} +static int core_setter_format_str(args_t *args, bcf1_t *line, annot_col_t *col, char **vals) +{ + if ( !args->sample_map ) + return bcf_update_format_string(args->hdr_out,line,col->hdr_key_dst,(const char**)vals,args->nsmpl_annot); + + int i; + args->tmpp2[0] = args->tmps2; + int ret = bcf_get_format_string(args->hdr,line,col->hdr_key_dst,&args->tmpp2,&args->mtmps2); + args->tmps2 = args->tmpp2[0]; // tmps2 might be realloced + + int nsmpl = bcf_hdr_nsamples(args->hdr_out); + if ( ret<=0 ) // not present in dst + { + hts_expand(char,bcf_hdr_nsamples(args->hdr_out)*2,args->mtmps2,args->tmps2); + char *tmp = args->tmps2; + for (i=0; itmpp2[i] = tmp; + tmp += 2; + } + } + for (i=0; isample_map[i]==-1 ) continue; + char **src = vals + args->sample_map[i]; + char **dst = args->tmpp2 + i; + + if ( col->replace==REPLACE_NON_MISSING ) { if ( (*dst)[0]=='.' && (*dst)[1]==0 ) continue; } + else if ( col->replace==REPLACE_MISSING ) { if ( (*dst)[0]!='.' || (*dst)[1]!=0 ) continue; } + else if ( col->replace==REPLACE_ALL ) { if ( (*src)[0]=='.' && (*src)[1]==0 ) continue; } + *dst = *src; + } + return bcf_update_format_string(args->hdr_out,line,col->hdr_key_dst,(const char**)args->tmpp2,nsmpl); +} +static int setter_format_int(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + annot_line_t *tab = (annot_line_t*) data; + if ( col->icol+args->nsmpl_annot > tab->ncols ) + error("Incorrect number of values for %s at %s:%d\n",col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1); + int nvals = count_vals(tab,col->icol,col->icol+args->nsmpl_annot); + hts_expand(int32_t,nvals*args->nsmpl_annot,args->mtmpi,args->tmpi); + + int icol = col->icol, ismpl; + for (ismpl=0; ismplnsmpl_annot; ismpl++) + { + int32_t *ptr = args->tmpi + ismpl*nvals; + int ival = 0; + + char *str = tab->cols[icol]; + while ( *str ) + { + if ( str[0]=='.' && (!str[1] || str[1]==',') ) // missing value + { + ptr[ival++] = bcf_int32_missing; + str += str[1] ? 2 : 1; + continue; + } + + char *end = str; + ptr[ival] = strtol(str, &end, 10); + if ( end==str ) + error("Could not parse %s at %s:%d .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]); + + ival++; + str = *end ? end+1 : end; + } + while ( ivaltmpi,nvals); +} +static int setter_format_real(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + annot_line_t *tab = (annot_line_t*) data; + if ( col->icol+args->nsmpl_annot > tab->ncols ) + error("Incorrect number of values for %s at %s:%d\n",col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1); + int nvals = count_vals(tab,col->icol,col->icol+args->nsmpl_annot); + hts_expand(float,nvals*args->nsmpl_annot,args->mtmpf,args->tmpf); + + int icol = col->icol, ismpl; + for (ismpl=0; ismplnsmpl_annot; ismpl++) + { + float *ptr = args->tmpf + ismpl*nvals; + int ival = 0; + + char *str = tab->cols[icol]; + while ( *str ) + { + if ( str[0]=='.' && (!str[1] || str[1]==',') ) // missing value + { + bcf_float_set_missing(ptr[ival]); + ival++; + str += str[1] ? 2 : 1; + continue; + } + + char *end = str; + ptr[ival] = strtod(str, &end); + if ( end==str ) + error("Could not parse %s at %s:%d .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]); + + ival++; + str = *end ? end+1 : end; + } + while ( ivaltmpf,nvals); +} +static int setter_format_str(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + annot_line_t *tab = (annot_line_t*) data; + if ( col->icol+args->nsmpl_annot > tab->ncols ) + error("Incorrect number of values for %s at %s:%d\n",col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1); + + int ismpl; + for (ismpl=0; ismplnsmpl_annot; ismpl++) + args->tmpp[ismpl] = tab->cols[col->icol + ismpl]; + + return core_setter_format_str(args,line,col,args->tmpp); +} +static int vcf_setter_format_int(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + bcf1_t *rec = (bcf1_t*) data; + int nsrc = bcf_get_format_int32(args->files->readers[1].header,rec,col->hdr_key_src,&args->tmpi,&args->mtmpi); + if ( nsrc==-3 ) return 0; // the tag is not present + if ( nsrc<=0 ) return 1; // error + return core_setter_format_int(args,line,col,args->tmpi,nsrc/bcf_hdr_nsamples(args->files->readers[1].header)); +} +static int vcf_setter_format_real(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + bcf1_t *rec = (bcf1_t*) data; + int nsrc = bcf_get_format_float(args->files->readers[1].header,rec,col->hdr_key_src,&args->tmpf,&args->mtmpf); + if ( nsrc==-3 ) return 0; // the tag is not present + if ( nsrc<=0 ) return 1; // error + return core_setter_format_real(args,line,col,args->tmpf,nsrc/bcf_hdr_nsamples(args->files->readers[1].header)); +} + +static int vcf_setter_format_str(args_t *args, bcf1_t *line, annot_col_t *col, void *data) +{ + bcf1_t *rec = (bcf1_t*) data; + args->tmpp[0] = args->tmps; + int ret = bcf_get_format_string(args->files->readers[1].header,rec,col->hdr_key_src,&args->tmpp,&args->mtmps); + args->tmps = args->tmpp[0]; // tmps might be realloced + if ( ret==-3 ) return 0; // the tag is not present + if ( ret<=0 ) return 1; // error + return core_setter_format_str(args,line,col,args->tmpp); +} +static int init_sample_map(args_t *args, bcf_hdr_t *src, bcf_hdr_t *dst) +{ + int i; + if ( !args->sample_names ) + { + args->nsmpl_annot = bcf_hdr_nsamples(dst); + + // tab annotation file, expecting that all samples are present: sample map not needed + if ( !src ) return 0; + + int nmatch = 0, order_ok = 1; + for (i=0; isamples[i]); + if ( id!=-1 ) + { + nmatch++; + if ( i!=id ) order_ok = 0; + } + } + if ( bcf_hdr_nsamples(src)==bcf_hdr_nsamples(dst) && nmatch==bcf_hdr_nsamples(src) && order_ok ) return 0; // not needed + if ( !nmatch ) return -1; // No matching samples found in the source and the destination file + + args->nsample_map = bcf_hdr_nsamples(dst); + args->sample_map = (int*) malloc(sizeof(int)*args->nsample_map); + for (i=0; insample_map; i++) + { + int id = bcf_hdr_id2int(src, BCF_DT_SAMPLE, dst->samples[i]); + args->sample_map[i] = id; // idst -> isrc, -1 if not present + } + return 1; + } + + args->nsample_map = bcf_hdr_nsamples(dst); + args->sample_map = (int*) malloc(sizeof(int)*args->nsample_map); + for (i=0; insample_map; i++) args->sample_map[i] = -1; + + // possible todo: could do with smpl_ilist only + smpl_ilist_t *ilist = smpl_ilist_init(dst, args->sample_names, args->sample_is_file, SMPL_STRICT); + if ( !ilist || !ilist->n ) error("Could not parse: %s\n", args->sample_names); + char **samples = (char**) malloc(sizeof(char*)*ilist->n); + for (i=0; in; i++) samples[i] = strdup(dst->samples[i]); + args->nsmpl_annot = ilist->n; + smpl_ilist_destroy(ilist); + int need_sample_map = args->nsmpl_annot==bcf_hdr_nsamples(dst) ? 0 : 1; + if ( !src ) + { + // tab annotation file + for (i=0; insmpl_annot; i++) + { + int idst = bcf_hdr_id2int(dst, BCF_DT_SAMPLE, samples[i]); + if ( idst==-1 ) error("Sample \"%s\" not found in the destination file\n", samples[i]); + args->sample_map[idst] = i; + if ( idst!=i ) need_sample_map = 1; + } + } + else + { + // vcf annotation file + for (i=0; insmpl_annot; i++) + { + int isrc, idst; + char *ss = samples[i], *se = samples[i]; + while ( *se && !isspace(*se) ) se++; + if ( !*se ) + { + // only one sample name + isrc = bcf_hdr_id2int(src, BCF_DT_SAMPLE,ss); + if ( isrc==-1 ) error("Sample \"%s\" not found in the source file\n", ss); + idst = bcf_hdr_id2int(dst, BCF_DT_SAMPLE,ss); + if ( idst==-1 ) error("Sample \"%s\" not found in the destination file\n", ss); + args->sample_map[idst] = isrc; + if ( idst!=isrc ) need_sample_map = 1; + continue; + } + *se = 0; + isrc = bcf_hdr_id2int(src, BCF_DT_SAMPLE,ss); + if ( isrc==-1 ) error("Sample \"%s\" not found in the source file\n", ss); + + ss = se+1; + while ( isspace(*ss) ) ss++; + se = ss; + while ( *se && !isspace(*se) ) se++; + + idst = bcf_hdr_id2int(dst, BCF_DT_SAMPLE,ss); + if ( idst==-1 ) error("Sample \"%s\" not found in the destination file\n", ss); + + args->sample_map[idst] = isrc; + if ( idst!=isrc ) need_sample_map = 1; + } + } + for (i=0; insmpl_annot; i++) free(samples[i]); + free(samples); + return need_sample_map; +} +static char *columns_complement(char *columns, void **skip_info, void **skip_fmt) +{ + kstring_t str = {0,0,0}; + char *ss = columns, *se = ss; + while ( *ss ) + { + if ( *se && *se!=',' ) { se++; continue; } + if ( *ss!='^' ) + { + if ( str.l ) kputc(',',&str); + kputsn(ss, se-ss, &str); + if ( !*se ) break; + ss = ++se; + continue; + } + + if ( !strncasecmp("^INFO/",ss,6) ) + { + if ( !*skip_info ) + { + *skip_info = khash_str2int_init(); + if ( str.l ) kputc(',',&str); + kputs("INFO",&str); + } + char tmp = *se; *se = 0; + khash_str2int_inc(*skip_info, strdup(ss+6)); + *se = tmp; + } + else if ( !strncasecmp("^FORMAT/",ss,8) || !strncasecmp("^FMT/",ss,5) ) + { + int n = !strncasecmp("^FMT/",ss,5) ? 5 : 8; + if ( !*skip_fmt ) + { + *skip_fmt = khash_str2int_init(); + if ( str.l ) kputc(',',&str); + kputs("FORMAT",&str); + } + char tmp = *se; *se = 0; + khash_str2int_inc(*skip_fmt, strdup(ss+n)); + *se = tmp; + } + else + { + if ( !*skip_info ) + { + *skip_info = khash_str2int_init(); + if ( str.l ) kputc(',',&str); + kputs("INFO",&str); + } + char tmp = *se; *se = 0; + khash_str2int_inc(*skip_info, strdup(ss+1)); + *se = tmp; + } + + if ( !*se ) break; + ss = ++se; + } + free(columns); + return str.s; +} +static void bcf_hrec_format_rename(bcf_hrec_t *hrec, char *tag, kstring_t *str) +{ + int j, nout = 0; + ksprintf(str, "##%s=<", hrec->key); + for (j=0; jnkeys; j++) + { + if ( !strcmp("IDX",hrec->keys[j]) ) continue; + if ( nout ) kputc(',',str); + if ( !strcmp("ID", hrec->keys[j]) ) + ksprintf(str,"%s=%s", hrec->keys[j], tag); + else + ksprintf(str,"%s=%s", hrec->keys[j], hrec->vals[j]); + nout++; + } + ksprintf(str,">\n"); +} +static void init_columns(args_t *args) +{ + int need_sample_map = 0; + int sample_map_ok = init_sample_map(args, args->tgts_is_vcf?args->files->readers[1].header:NULL, args->hdr); + + void *skip_fmt = NULL, *skip_info = NULL; + if ( args->tgts_is_vcf ) + args->columns = columns_complement(args->columns, &skip_info, &skip_fmt); + + kstring_t str = {0,0,0}, tmp = {0,0,0}; + char *ss = args->columns, *se = ss; + args->ncols = 0; + int icol = -1, has_fmt_str = 0; + while ( *ss ) + { + if ( *se && *se!=',' ) { se++; continue; } + int replace = REPLACE_ALL; + if ( *ss=='+' ) { replace = REPLACE_MISSING; ss++; } + else if ( *ss=='-' ) { replace = REPLACE_NON_MISSING; ss++; } + else if ( *ss=='=' ) { replace = SET_OR_APPEND; ss++; } + icol++; + str.l = 0; + kputsn(ss, se-ss, &str); + if ( !str.s[0] || !strcasecmp("-",str.s) ) ; + else if ( !strcasecmp("CHROM",str.s) ) args->chr_idx = icol; + else if ( !strcasecmp("POS",str.s) ) args->from_idx = icol; + else if ( !strcasecmp("FROM",str.s) ) args->from_idx = icol; + else if ( !strcasecmp("TO",str.s) ) args->to_idx = icol; + else if ( !strcasecmp("REF",str.s) ) args->ref_idx = icol; + else if ( !strcasecmp("ALT",str.s) ) args->alt_idx = icol; + else if ( !strcasecmp("ID",str.s) ) + { + if ( replace==REPLACE_NON_MISSING ) error("Apologies, the -ID feature has not been implemented yet.\n"); + args->ncols++; args->cols = (annot_col_t*) realloc(args->cols,sizeof(annot_col_t)*args->ncols); + annot_col_t *col = &args->cols[args->ncols-1]; + col->icol = icol; + col->replace = replace; + col->setter = args->tgts_is_vcf ? vcf_setter_id : setter_id; + col->hdr_key_src = strdup(str.s); + col->hdr_key_dst = strdup(str.s); + } + else if ( !strcasecmp("FILTER",str.s) ) + { + if ( replace==REPLACE_NON_MISSING ) error("Apologies, the -FILTER feature has not been implemented yet.\n"); + args->ncols++; args->cols = (annot_col_t*) realloc(args->cols,sizeof(annot_col_t)*args->ncols); + annot_col_t *col = &args->cols[args->ncols-1]; + col->icol = icol; + col->replace = replace; + col->setter = args->tgts_is_vcf ? vcf_setter_filter : setter_filter; + col->hdr_key_src = strdup(str.s); + col->hdr_key_dst = strdup(str.s); + if ( args->tgts_is_vcf ) + { + bcf_hdr_t *tgts_hdr = args->files->readers[1].header; + int j; + for (j=0; jnhrec; j++) + { + bcf_hrec_t *hrec = tgts_hdr->hrec[j]; + if ( hrec->type!=BCF_HL_FLT ) continue; + int k = bcf_hrec_find_key(hrec,"ID"); + assert( k>=0 ); // this should always be true for valid VCFs + tmp.l = 0; + bcf_hrec_format(hrec, &tmp); + bcf_hdr_append(args->hdr_out, tmp.s); + } + bcf_hdr_sync(args->hdr_out); + } + } + else if ( !strcasecmp("QUAL",str.s) ) + { + if ( replace==REPLACE_NON_MISSING ) error("Apologies, the -QUAL feature has not been implemented yet.\n"); + if ( replace==SET_OR_APPEND ) error("Apologies, the =QUAL feature has not been implemented yet.\n"); + args->ncols++; args->cols = (annot_col_t*) realloc(args->cols,sizeof(annot_col_t)*args->ncols); + annot_col_t *col = &args->cols[args->ncols-1]; + col->icol = icol; + col->replace = replace; + col->setter = args->tgts_is_vcf ? vcf_setter_qual : setter_qual; + col->hdr_key_src = strdup(str.s); + col->hdr_key_dst = strdup(str.s); + } + else if ( args->tgts_is_vcf && !strcasecmp("INFO",str.s) ) // All INFO fields + { + if ( replace==REPLACE_NON_MISSING ) error("Apologies, the -INFO/TAG feature has not been implemented yet.\n"); + if ( replace==SET_OR_APPEND ) error("Apologies, the =INFO/TAG feature has not been implemented yet.\n"); + bcf_hdr_t *tgts_hdr = args->files->readers[1].header; + int j; + for (j=0; jnhrec; j++) + { + bcf_hrec_t *hrec = tgts_hdr->hrec[j]; + if ( hrec->type!=BCF_HL_INFO ) continue; + int k = bcf_hrec_find_key(hrec,"ID"); + assert( k>=0 ); // this should always be true for valid VCFs + if ( skip_info && khash_str2int_has_key(skip_info,hrec->vals[k]) ) continue; + tmp.l = 0; + bcf_hrec_format(hrec, &tmp); + bcf_hdr_append(args->hdr_out, tmp.s); + bcf_hdr_sync(args->hdr_out); + int hdr_id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, hrec->vals[k]); + args->ncols++; args->cols = (annot_col_t*) realloc(args->cols,sizeof(annot_col_t)*args->ncols); + annot_col_t *col = &args->cols[args->ncols-1]; + col->icol = -1; + col->replace = replace; + col->hdr_key_src = strdup(hrec->vals[k]); + col->hdr_key_dst = strdup(hrec->vals[k]); + col->number = bcf_hdr_id2length(args->hdr_out,BCF_HL_INFO,hdr_id); + switch ( bcf_hdr_id2type(args->hdr_out,BCF_HL_INFO,hdr_id) ) + { + case BCF_HT_FLAG: col->setter = vcf_setter_info_flag; break; + case BCF_HT_INT: col->setter = vcf_setter_info_int; break; + case BCF_HT_REAL: col->setter = vcf_setter_info_real; break; + case BCF_HT_STR: col->setter = vcf_setter_info_str; break; + default: error("The type of %s not recognised (%d)\n", str.s,bcf_hdr_id2type(args->hdr_out,BCF_HL_INFO,hdr_id)); + } + } + } + else if ( args->tgts_is_vcf && (!strcasecmp("FORMAT",str.s) || !strcasecmp("FMT",str.s)) ) // All FORMAT fields + { + bcf_hdr_t *tgts_hdr = args->files->readers[1].header; + need_sample_map = 1; + int j; + for (j=0; jnhrec; j++) + { + bcf_hrec_t *hrec = tgts_hdr->hrec[j]; + if ( hrec->type!=BCF_HL_FMT) continue; + int k = bcf_hrec_find_key(hrec,"ID"); + assert( k>=0 ); // this should always be true for valid VCFs + if ( skip_fmt && khash_str2int_has_key(skip_fmt,hrec->vals[k]) ) continue; + tmp.l = 0; + bcf_hrec_format(hrec, &tmp); + bcf_hdr_append(args->hdr_out, tmp.s); + bcf_hdr_sync(args->hdr_out); + int hdr_id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, hrec->vals[k]); + args->ncols++; args->cols = (annot_col_t*) realloc(args->cols,sizeof(annot_col_t)*args->ncols); + annot_col_t *col = &args->cols[args->ncols-1]; + col->icol = -1; + col->replace = replace; + col->hdr_key_src = strdup(hrec->vals[k]); + col->hdr_key_dst = strdup(hrec->vals[k]); + if ( !strcasecmp("GT",col->hdr_key_src) ) col->setter = vcf_setter_format_gt; + else + switch ( bcf_hdr_id2type(args->hdr_out,BCF_HL_FMT,hdr_id) ) + { + case BCF_HT_INT: col->setter = vcf_setter_format_int; break; + case BCF_HT_REAL: col->setter = vcf_setter_format_real; break; + case BCF_HT_STR: col->setter = vcf_setter_format_str; has_fmt_str = 1; break; + default: error("The type of %s not recognised (%d)\n", str.s,bcf_hdr_id2type(args->hdr_out,BCF_HL_FMT,hdr_id)); + } + } + } + else if ( !strncasecmp("FORMAT/",str.s, 7) || !strncasecmp("FMT/",str.s,4) ) + { + char *key_dst = str.s + (!strncasecmp("FMT/",str.s,4) ? 4 : 7); + char *key_src = strstr(key_dst,":="); + if ( key_src ) + { + *key_src = 0; + key_src += 2; + if ( !strncasecmp("FORMAT/",key_src,7) ) key_src += 7; + else if ( !strncasecmp("FMT/",key_src,4) ) key_src += 4; + } + else + key_src = key_dst; + need_sample_map = 1; + if ( args->tgts_is_vcf ) + { + bcf_hrec_t *hrec = bcf_hdr_get_hrec(args->files->readers[1].header, BCF_HL_FMT, "ID", key_src, NULL); + tmp.l = 0; + bcf_hrec_format_rename(hrec, key_dst, &tmp); + bcf_hdr_append(args->hdr_out, tmp.s); + bcf_hdr_sync(args->hdr_out); + } + int hdr_id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, key_dst); + if ( !bcf_hdr_idinfo_exists(args->hdr_out,BCF_HL_FMT,hdr_id) ) + error("The tag \"%s\" is not defined in %s\n", str.s, args->targets_fname); + args->ncols++; args->cols = (annot_col_t*) realloc(args->cols,sizeof(annot_col_t)*args->ncols); + annot_col_t *col = &args->cols[args->ncols-1]; + if ( !args->tgts_is_vcf ) + { + col->icol = icol; + icol += args->nsmpl_annot - 1; + } + else + col->icol = -1; + col->replace = replace; + col->hdr_key_src = strdup(key_src); + col->hdr_key_dst = strdup(key_dst); + if ( !strcasecmp("GT",key_src) ) col->setter = vcf_setter_format_gt; + else + switch ( bcf_hdr_id2type(args->hdr_out,BCF_HL_FMT,hdr_id) ) + { + case BCF_HT_INT: col->setter = args->tgts_is_vcf ? vcf_setter_format_int : setter_format_int; break; + case BCF_HT_REAL: col->setter = args->tgts_is_vcf ? vcf_setter_format_real : setter_format_real; break; + case BCF_HT_STR: col->setter = args->tgts_is_vcf ? vcf_setter_format_str : setter_format_str; has_fmt_str = 1; break; + default: error("The type of %s not recognised (%d)\n", str.s,bcf_hdr_id2type(args->hdr_out,BCF_HL_FMT,hdr_id)); + } + } + else + { + if ( replace==REPLACE_NON_MISSING ) error("Apologies, the -INFO/TAG feature has not been implemented yet.\n"); + if ( replace==SET_OR_APPEND ) error("Apologies, the =INFO/TAG feature has not been implemented yet.\n"); + char *key_dst = !strncasecmp("INFO/",str.s,5) ? str.s + 5 : str.s; + char *key_src = strstr(key_dst,":="); + if ( key_src ) + { + *key_src = 0; + key_src += 2; + if ( !strncasecmp("INFO/",key_src,5) ) key_src += 5; + } + else + key_src = key_dst; + int hdr_id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, key_dst); + if ( !bcf_hdr_idinfo_exists(args->hdr_out,BCF_HL_INFO,hdr_id) ) + { + if ( args->tgts_is_vcf ) // reading annotations from a VCF, add a new header line + { + bcf_hrec_t *hrec = bcf_hdr_get_hrec(args->files->readers[1].header, BCF_HL_INFO, "ID", key_src, NULL); + if ( !hrec ) error("The tag \"%s\" is not defined in %s\n", str.s,args->files->readers[1].fname); + tmp.l = 0; + bcf_hrec_format_rename(hrec, key_dst, &tmp); + bcf_hdr_append(args->hdr_out, tmp.s); + bcf_hdr_sync(args->hdr_out); + hdr_id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, key_dst); + } + else + error("The tag \"%s\" is not defined in %s\n", key_src, args->targets_fname); + assert( bcf_hdr_idinfo_exists(args->hdr_out,BCF_HL_INFO,hdr_id) ); + } + + args->ncols++; args->cols = (annot_col_t*) realloc(args->cols,sizeof(annot_col_t)*args->ncols); + annot_col_t *col = &args->cols[args->ncols-1]; + col->icol = icol; + col->replace = replace; + col->hdr_key_src = strdup(key_src); + col->hdr_key_dst = strdup(key_dst); + col->number = bcf_hdr_id2length(args->hdr_out,BCF_HL_INFO,hdr_id); + switch ( bcf_hdr_id2type(args->hdr_out,BCF_HL_INFO,hdr_id) ) + { + case BCF_HT_FLAG: col->setter = args->tgts_is_vcf ? vcf_setter_info_flag : setter_info_flag; break; + case BCF_HT_INT: col->setter = args->tgts_is_vcf ? vcf_setter_info_int : setter_info_int; break; + case BCF_HT_REAL: col->setter = args->tgts_is_vcf ? vcf_setter_info_real : setter_info_real; break; + case BCF_HT_STR: col->setter = args->tgts_is_vcf ? vcf_setter_info_str : setter_info_str; break; + default: error("The type of %s not recognised (%d)\n", str.s,bcf_hdr_id2type(args->hdr_out,BCF_HL_INFO,hdr_id)); + } + } + if ( !*se ) break; + ss = ++se; + } + free(str.s); + free(tmp.s); + if ( args->to_idx==-1 ) args->to_idx = args->from_idx; + free(args->columns); + if ( skip_info ) khash_str2int_destroy_free(skip_info); + if ( skip_fmt ) khash_str2int_destroy_free(skip_fmt); + if ( has_fmt_str ) + { + int n = bcf_hdr_nsamples(args->hdr_out); + if ( args->tgts_is_vcf && nfiles->readers[1].header) ) n = bcf_hdr_nsamples(args->files->readers[1].header); + args->tmpp = (char**)malloc(sizeof(char*)*n); + args->tmpp2 = (char**)malloc(sizeof(char*)*n); + } + if ( !need_sample_map ) + { + free(args->sample_map); + args->sample_map = NULL; + } + else if ( sample_map_ok<0 ) + error("No matching samples in source and destination file?\n"); +} + +static void rename_chrs(args_t *args, char *fname) +{ + int n, i; + char **map = hts_readlist(fname, 1, &n); + if ( !map ) error("Could not read: %s\n", fname); + for (i=0; ihdr_out, map[i]); + bcf_hrec_t *hrec = bcf_hdr_get_hrec(args->hdr_out, BCF_HL_CTG, "ID", map[i], NULL); + if ( !hrec ) continue; // the sequence not present + int j = bcf_hrec_find_key(hrec, "ID"); + assert( j>=0 ); + free(hrec->vals[j]); + ss++; + while ( *ss && isspace(*ss) ) ss++; + char *se = ss; + while ( *se && !isspace(*se) ) se++; + *se = 0; + hrec->vals[j] = strdup(ss); + args->hdr_out->id[BCF_DT_CTG][rid].key = hrec->vals[j]; + } + for (i=0; ihdr = args->files->readers[0].header; + args->hdr_out = bcf_hdr_dup(args->hdr); + + if ( args->remove_annots ) init_remove_annots(args); + if ( args->header_fname ) init_header_lines(args); + if ( args->targets_fname && args->tgts_is_vcf ) + { + // reading annots from a VCF + if ( !bcf_sr_add_reader(args->files, args->targets_fname) ) + error("Failed to open %s: %s\n", args->targets_fname,bcf_sr_strerror(args->files->errnum)); + } + if ( args->columns ) init_columns(args); + if ( args->targets_fname && !args->tgts_is_vcf ) + { + if ( !args->columns ) error("The -c option not given\n"); + if ( args->chr_idx==-1 ) error("The -c CHROM option not given\n"); + if ( args->from_idx==-1 ) error("The -c POS option not given\n"); + if ( args->to_idx==-1 ) args->to_idx = -args->from_idx - 1; + + args->tgts = bcf_sr_regions_init(args->targets_fname,1,args->chr_idx,args->from_idx,args->to_idx); + if ( !args->tgts ) error("Could not initialize the annotation file: %s\n", args->targets_fname); + if ( !args->tgts->tbx ) error("Expected tabix-indexed annotation file: %s\n", args->targets_fname); + } + args->vcmp = vcmp_init(); + + if ( args->filter_str ) + args->filter = filter_init(args->hdr, args->filter_str); + + if ( args->set_ids_fmt ) + { + if ( args->set_ids_fmt[0]=='+' ) { args->set_ids_replace = 0; args->set_ids_fmt++; } + args->set_ids = convert_init(args->hdr_out, NULL, 0, args->set_ids_fmt); + } + + if ( args->mark_sites ) + { + if ( !args->targets_fname ) error("The -a option not given\n"); + bcf_hdr_printf(args->hdr_out,"##INFO=", + args->mark_sites,args->mark_sites_logic==MARK_LISTED?"":"not ",args->mark_sites); + } + + if (args->record_cmd_line) bcf_hdr_append_version(args->hdr_out, args->argc, args->argv, "bcftools_annotate"); + if ( !args->drop_header ) + { + if ( args->rename_chrs ) rename_chrs(args, args->rename_chrs); + + args->out_fh = hts_open(args->output_fname,hts_bcf_wmode(args->output_type)); + if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno)); + if ( args->n_threads ) + hts_set_opt(args->out_fh, HTS_OPT_THREAD_POOL, args->files->p); + bcf_hdr_write(args->out_fh, args->hdr_out); + } +} + +static void destroy_data(args_t *args) +{ + int i; + for (i=0; inrm; i++) free(args->rm[i].key); + free(args->rm); + if ( args->hdr_out ) bcf_hdr_destroy(args->hdr_out); + if (args->vcmp) vcmp_destroy(args->vcmp); + for (i=0; incols; i++) + { + free(args->cols[i].hdr_key_src); + free(args->cols[i].hdr_key_dst); + } + free(args->cols); + for (i=0; imalines; i++) + { + free(args->alines[i].cols); + free(args->alines[i].als); + free(args->alines[i].line.s); + } + free(args->alines); + if ( args->tgts ) bcf_sr_regions_destroy(args->tgts); + free(args->tmpks.s); + free(args->tmpi); + free(args->tmpf); + free(args->tmps); + free(args->tmpp); + free(args->tmpi2); + free(args->tmpf2); + free(args->tmps2); + free(args->tmpp2); + free(args->tmpi3); + free(args->tmpf3); + if ( args->set_ids ) + convert_destroy(args->set_ids); + if ( args->filter ) + filter_destroy(args->filter); + if (args->out_fh) hts_close(args->out_fh); + free(args->sample_map); +} + +static void buffer_annot_lines(args_t *args, bcf1_t *line, int start_pos, int end_pos) +{ + if ( args->nalines && args->alines[0].rid != line->rid ) args->nalines = 0; + + int i = 0; + while ( inalines ) + { + if ( line->pos > args->alines[i].end ) + { + args->nalines--; + if ( args->nalines && inalines ) + { + annot_line_t tmp = args->alines[i]; + memmove(&args->alines[i],&args->alines[i+1],(args->nalines-i)*sizeof(annot_line_t)); + args->alines[args->nalines] = tmp; + } + } + else i++; + } + + if ( args->ref_idx==-1 && args->nalines ) return; + + while ( !bcf_sr_regions_overlap(args->tgts, bcf_seqname(args->hdr,line), start_pos,end_pos) ) + { + args->nalines++; + hts_expand0(annot_line_t,args->nalines,args->malines,args->alines); + annot_line_t *tmp = &args->alines[args->nalines-1]; + tmp->rid = line->rid; + tmp->start = args->tgts->start; + tmp->end = args->tgts->end; + tmp->line.l = 0; + kputs(args->tgts->line.s, &tmp->line); + char *s = tmp->line.s; + tmp->ncols = 1; + hts_expand(char*,tmp->ncols,tmp->mcols,tmp->cols); + tmp->cols[0] = s; + while ( *s ) + { + if ( *s=='\t' ) + { + tmp->ncols++; + hts_expand(char*,tmp->ncols,tmp->mcols,tmp->cols); + tmp->cols[tmp->ncols-1] = s+1; + *s = 0; + } + s++; + } + if ( args->ref_idx != -1 ) + { + if ( args->ref_idx >= tmp->ncols ) + error("Could not parse the line, expected %d+ columns, found %d:\n\t%s\n",args->ref_idx+1,tmp->ncols,args->tgts->line.s); + if ( args->alt_idx >= tmp->ncols ) + error("Could not parse the line, expected %d+ columns, found %d:\n\t%s\n",args->alt_idx+1,tmp->ncols,args->tgts->line.s); + tmp->nals = 2; + hts_expand(char*,tmp->nals,tmp->mals,tmp->als); + tmp->als[0] = tmp->cols[args->ref_idx]; + tmp->als[1] = s = tmp->cols[args->alt_idx]; + while ( *s ) + { + if ( *s==',' ) + { + tmp->nals++; + hts_expand(char*,tmp->nals,tmp->mals,tmp->als); + tmp->als[tmp->nals-1] = s+1; + *s = 0; + } + s++; + } + int iseq = args->tgts->iseq; + if ( bcf_sr_regions_next(args->tgts)<0 || args->tgts->iseq!=iseq ) break; + } + else break; + } +} + +static void annotate(args_t *args, bcf1_t *line) +{ + int i, j; + for (i=0; inrm; i++) + args->rm[i].handler(args, line, &args->rm[i]); + + if ( args->tgts ) + { + // Buffer annotation lines. When multiple ALT alleles are present in the + // annotation file, at least one must match one of the VCF alleles. + int len = 0; + bcf_get_variant_types(line); + for (i=1; in_allele; i++) + if ( len > line->d.var[i].n ) len = line->d.var[i].n; + int end_pos = len<0 ? line->pos - len : line->pos; + buffer_annot_lines(args, line, line->pos, end_pos); + for (i=0; inalines; i++) + { + if ( line->pos > args->alines[i].end || end_pos < args->alines[i].start ) continue; + if ( args->ref_idx != -1 ) + { + if ( vcmp_set_ref(args->vcmp, line->d.allele[0], args->alines[i].als[0]) < 0 ) continue; // refs not compatible + for (j=1; jalines[i].nals; j++) + { + if ( line->n_allele==1 && args->alines[i].als[j][0]=='.' && args->alines[i].als[j][1]==0 ) break; // no ALT allele in VCF and annot file has "." + if ( vcmp_find_allele(args->vcmp, line->d.allele+1, line->n_allele - 1, args->alines[i].als[j]) >= 0 ) break; + } + if ( j==args->alines[i].nals ) continue; // none of the annot alleles present in VCF's ALT + } + break; + } + + if ( inalines ) + { + // there is a matching line + for (j=0; jncols; j++) + if ( args->cols[j].setter(args,line,&args->cols[j],&args->alines[i]) ) + error("fixme: Could not set %s at %s:%d\n", args->cols[j].hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1); + + } + + if ( args->mark_sites ) + { + // ideally, we'd like to be far more general than this in future, see https://github.com/samtools/bcftools/issues/87 + if ( args->mark_sites_logic==MARK_LISTED ) + bcf_update_info_flag(args->hdr_out,line,args->mark_sites,NULL,inalines?1:0); + else + bcf_update_info_flag(args->hdr_out,line,args->mark_sites,NULL,inalines?0:1); + } + } + else if ( args->files->nreaders == 2 ) + { + if ( bcf_sr_has_line(args->files,1) ) + { + bcf1_t *aline = bcf_sr_get_line(args->files,1); + for (j=0; jncols; j++) + if ( args->cols[j].setter(args,line,&args->cols[j],aline) ) + error("fixme: Could not set %s at %s:%d\n", args->cols[j].hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1); + + if ( args->mark_sites ) + bcf_update_info_flag(args->hdr_out,line,args->mark_sites,NULL,args->mark_sites_logic==MARK_LISTED ? 1 : 0); + } + else if ( args->mark_sites ) + bcf_update_info_flag(args->hdr_out,line,args->mark_sites,NULL, args->mark_sites_logic==MARK_UNLISTED ? 1 : 0); + } + if ( args->set_ids ) + { + args->tmpks.l = 0; + convert_line(args->set_ids, line, &args->tmpks); + if ( args->tmpks.l ) + { + int replace = 0; + if ( args->set_ids_replace ) replace = 1; + else if ( !line->d.id || (line->d.id[0]=='.' && !line->d.id[1]) ) replace = 1; + if ( replace ) + bcf_update_id(args->hdr_out,line,args->tmpks.s); + } + } +} + +static void usage(args_t *args) +{ + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "About: Annotate and edit VCF/BCF files.\n"); + fprintf(bcftools_stderr, "Usage: bcftools annotate [options] \n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Options:\n"); + fprintf(bcftools_stderr, " -a, --annotations VCF file or tabix-indexed file with annotations: CHR\\tPOS[\\tVALUE]+\n"); + fprintf(bcftools_stderr, " --collapse matching records by , see man page for details [some]\n"); + fprintf(bcftools_stderr, " -c, --columns list of columns in the annotation file, e.g. CHROM,POS,REF,ALT,-,INFO/TAG. See man page for details\n"); + fprintf(bcftools_stderr, " -e, --exclude exclude sites for which the expression is true (see man page for details)\n"); + fprintf(bcftools_stderr, " -h, --header-lines lines which should be appended to the VCF header\n"); + fprintf(bcftools_stderr, " -I, --set-id [+] set ID column, see man page for details\n"); + fprintf(bcftools_stderr, " -i, --include select sites for which the expression is true (see man page for details)\n"); + fprintf(bcftools_stderr, " -m, --mark-sites [+-] add INFO/tag flag to sites which are (\"+\") or are not (\"-\") listed in the -a file\n"); + fprintf(bcftools_stderr, " --no-version do not append version and command line to the header\n"); + fprintf(bcftools_stderr, " -o, --output write output to a file [standard output]\n"); + fprintf(bcftools_stderr, " -O, --output-type b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"); + fprintf(bcftools_stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(bcftools_stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(bcftools_stderr, " --rename-chrs rename sequences according to map file: from\\tto\n"); + fprintf(bcftools_stderr, " -s, --samples [^] comma separated list of samples to annotate (or exclude with \"^\" prefix)\n"); + fprintf(bcftools_stderr, " -S, --samples-file [^] file of samples to annotate (or exclude with \"^\" prefix)\n"); + fprintf(bcftools_stderr, " -x, --remove list of annotations to remove (e.g. ID,INFO/DP,FORMAT/DP,FILTER). See man page for details\n"); + fprintf(bcftools_stderr, " --threads number of extra output compression threads [0]\n"); + fprintf(bcftools_stderr, "\n"); + exit(1); +} + +int main_vcfannotate(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->files = bcf_sr_init(); + args->output_fname = "-"; + args->output_type = FT_VCF; + args->n_threads = 0; + args->record_cmd_line = 1; + args->ref_idx = args->alt_idx = args->chr_idx = args->from_idx = args->to_idx = -1; + args->set_ids_replace = 1; + int regions_is_file = 0, collapse = 0; + + static struct option loptions[] = + { + {"mark-sites",required_argument,NULL,'m'}, + {"set-id",required_argument,NULL,'I'}, + {"output",required_argument,NULL,'o'}, + {"output-type",required_argument,NULL,'O'}, + {"threads",required_argument,NULL,9}, + {"annotations",required_argument,NULL,'a'}, + {"collapse",required_argument,NULL,2}, + {"include",required_argument,NULL,'i'}, + {"exclude",required_argument,NULL,'e'}, + {"regions",required_argument,NULL,'r'}, + {"regions-file",required_argument,NULL,'R'}, + {"remove",required_argument,NULL,'x'}, + {"columns",required_argument,NULL,'c'}, + {"rename-chrs",required_argument,NULL,1}, + {"header-lines",required_argument,NULL,'h'}, + {"samples",required_argument,NULL,'s'}, + {"samples-file",required_argument,NULL,'S'}, + {"no-version",no_argument,NULL,8}, + {NULL,0,NULL,0} + }; + while ((c = getopt_long(argc, argv, "h:?o:O:r:R:a:x:c:i:e:S:s:I:m:",loptions,NULL)) >= 0) + { + switch (c) { + case 'm': + args->mark_sites_logic = MARK_LISTED; + if ( optarg[0]=='+' ) args->mark_sites = optarg+1; + else if ( optarg[0]=='-' ) { args->mark_sites = optarg+1; args->mark_sites_logic = MARK_UNLISTED; } + else args->mark_sites = optarg; + break; + case 'I': args->set_ids_fmt = optarg; break; + case 's': args->sample_names = optarg; break; + case 'S': args->sample_names = optarg; args->sample_is_file = 1; break; + case 'c': args->columns = strdup(optarg); break; + case 'o': args->output_fname = optarg; break; + case 'O': + switch (optarg[0]) { + case 'b': args->output_type = FT_BCF_GZ; break; + case 'u': args->output_type = FT_BCF; break; + case 'z': args->output_type = FT_VCF_GZ; break; + case 'v': args->output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + }; + break; + case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break; + case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break; + case 'x': args->remove_annots = optarg; break; + case 'a': args->targets_fname = optarg; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; regions_is_file = 1; break; + case 'h': args->header_fname = optarg; break; + case 1 : args->rename_chrs = optarg; break; + case 2 : + if ( !strcmp(optarg,"snps") ) collapse |= COLLAPSE_SNPS; + else if ( !strcmp(optarg,"indels") ) collapse |= COLLAPSE_INDELS; + else if ( !strcmp(optarg,"both") ) collapse |= COLLAPSE_SNPS | COLLAPSE_INDELS; + else if ( !strcmp(optarg,"any") ) collapse |= COLLAPSE_ANY; + else if ( !strcmp(optarg,"all") ) collapse |= COLLAPSE_ANY; + else if ( !strcmp(optarg,"some") ) collapse |= COLLAPSE_SOME; + else if ( !strcmp(optarg,"none") ) collapse = COLLAPSE_NONE; + else error("The --collapse string \"%s\" not recognised.\n", optarg); + break; + case 9 : args->n_threads = strtol(optarg, 0, 0); break; + case 8 : args->record_cmd_line = 0; break; + case '?': usage(args); break; + default: error("Unknown argument: %s\n", optarg); + } + } + + char *fname = NULL; + if ( optind>=argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin + else usage(args); + } + else fname = argv[optind]; + + if ( args->regions_list ) + { + if ( bcf_sr_set_regions(args->files, args->regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + } + if ( args->targets_fname ) + { + htsFile *fp = hts_open(args->targets_fname,"r"); + htsFormat type = *hts_get_format(fp); + hts_close(fp); + + if ( type.format==vcf || type.format==bcf ) + { + args->tgts_is_vcf = 1; + args->files->require_index = 1; + args->files->collapse = collapse ? collapse : COLLAPSE_SOME; + } + } + if ( bcf_sr_set_threads(args->files, args->n_threads)<0 ) error("Failed to create threads\n"); + if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); + + init_data(args); + while ( bcf_sr_next_line(args->files) ) + { + if ( !bcf_sr_has_line(args->files,0) ) continue; + bcf1_t *line = bcf_sr_get_line(args->files,0); + if ( line->errcode ) error("Encountered error, cannot proceed. Please check the error output above.\n"); + if ( args->filter ) + { + int pass = filter_test(args->filter, line, NULL); + if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1; + if ( !pass ) continue; + } + annotate(args, line); + bcf_write1(args->out_fh, args->hdr_out, line); + } + destroy_data(args); + bcf_sr_destroy(args->files); + free(args); + return 0; +} diff --git a/bcftools/vcfbuf.c b/bcftools/vcfbuf.c new file mode 100644 index 0000000..d896d3a --- /dev/null +++ b/bcftools/vcfbuf.c @@ -0,0 +1,442 @@ +/* The MIT License + + Copyright (c) 2016 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ + +#include +#include +#include "bcftools.h" +#include "vcfbuf.h" +#include "rbuf.h" + +typedef struct +{ + double max; + int rand_missing, skip_filter; +} +ld_t; + +typedef struct +{ + bcf1_t *rec; + double af; + int af_set:1, idx:31; +} +vcfrec_t; + +typedef struct +{ + int max_sites, mvrec, mac, mfarr; + int *ac, *idx; + float *farr; + char *af_tag; + vcfrec_t **vrec; +} +prune_t; + +typedef struct +{ + int active, rid, end; +} +overlap_t; + +struct _vcfbuf_t +{ + int win; + bcf_hdr_t *hdr; + vcfrec_t *vcf; + rbuf_t rbuf; + ld_t ld; + prune_t prune; + overlap_t overlap; +}; + +vcfbuf_t *vcfbuf_init(bcf_hdr_t *hdr, int win) +{ + vcfbuf_t *buf = (vcfbuf_t*) calloc(1,sizeof(vcfbuf_t)); + buf->hdr = hdr; + buf->win = win; + buf->overlap.rid = -1; + rbuf_init(&buf->rbuf, 0); + return buf; +} + +void vcfbuf_destroy(vcfbuf_t *buf) +{ + int i; + for (i=0; irbuf.m; i++) + if ( buf->vcf[i].rec ) bcf_destroy(buf->vcf[i].rec); + free(buf->vcf); + free(buf->prune.farr); + free(buf->prune.vrec); + free(buf->prune.ac); + free(buf->prune.idx); + free(buf); +} + +void vcfbuf_set(vcfbuf_t *buf, vcfbuf_opt_t key, void *value) +{ + if ( key==VCFBUF_LD_MAX ) { buf->ld.max = *((double*)value); return; } + if ( key==VCFBUF_RAND_MISSING ) { buf->ld.rand_missing = *((int*)value); return; } + if ( key==VCFBUF_SKIP_FILTER ) { buf->ld.skip_filter = *((int*)value); return; } + if ( key==VCFBUF_NSITES ) { buf->prune.max_sites = *((int*)value); return; } + if ( key==VCFBUF_AF_TAG ) { buf->prune.af_tag = *((char**)value); return; } + if ( key==VCFBUF_OVERLAP_WIN ) { buf->overlap.active = *((int*)value); return; } +} + +int vcfbuf_nsites(vcfbuf_t *buf) +{ + return buf->rbuf.n; +} + +bcf1_t *vcfbuf_push(vcfbuf_t *buf, bcf1_t *rec, int swap) +{ + if ( !swap ) error("todo: swap=%d\n", swap); + + rbuf_expand0(&buf->rbuf, vcfrec_t, buf->rbuf.n+1, buf->vcf); + + int i = rbuf_append(&buf->rbuf); + if ( !buf->vcf[i].rec ) buf->vcf[i].rec = bcf_init1(); + + bcf1_t *ret = buf->vcf[i].rec; + buf->vcf[i].rec = rec; + buf->vcf[i].af_set = 0; + + return ret; +} + +static int cmpvrec(const void *_a, const void *_b) +{ + vcfrec_t *a = *((vcfrec_t**) _a); + vcfrec_t *b = *((vcfrec_t**) _b); + if ( a->af < b->af ) return -1; + if ( a->af == b->af ) return 0; + return 1; +} +static int cmpint_desc(const void *_a, const void *_b) +{ + int a = *((int*)_a); + int b = *((int*)_b); + if ( a < b ) return 1; + if ( a == b ) return 0; + return -1; +} + +static void _prune_sites(vcfbuf_t *buf, int flush_all) +{ + int nbuf = flush_all ? buf->rbuf.n : buf->rbuf.n - 1; + + if ( nbuf > buf->prune.mvrec ) + { + buf->prune.idx = (int*) realloc(buf->prune.idx, nbuf*sizeof(int)); + buf->prune.vrec = (vcfrec_t**) realloc(buf->prune.vrec, nbuf*sizeof(vcfrec_t*)); + buf->prune.mvrec = nbuf; + } + + // set allele frequency and prepare buffer for sorting + int i,k,irec = 0; + for (i=-1; rbuf_next(&buf->rbuf,&i) && irecvcf[i].rec; + if ( line->n_allele > buf->prune.mac ) + { + buf->prune.ac = (int*) realloc(buf->prune.ac, line->n_allele*sizeof(*buf->prune.ac)); + buf->prune.mac = line->n_allele; + } + if ( !buf->vcf[i].af_set ) + { + buf->vcf[i].af = 0; + if ( buf->prune.af_tag ) + { + if ( bcf_get_info_float(buf->hdr,line,buf->prune.af_tag,&buf->prune.farr, &buf->prune.mfarr) > 0 ) buf->vcf[i].af = buf->prune.farr[0]; + } + else if ( bcf_calc_ac(buf->hdr, line, buf->prune.ac, BCF_UN_INFO|BCF_UN_FMT) ) + { + int ntot = buf->prune.ac[0], nalt = 0; + for (k=1; kn_allele; k++) nalt += buf->prune.ac[k]; + buf->vcf[i].af = ntot ? (float)nalt/ntot : 0; + } + buf->vcf[i].af_set = 1; + } + buf->vcf[i].idx = irec; + buf->prune.vrec[irec++] = &buf->vcf[i]; + } + + // sort by allele frequency, low AF will be removed preferentially + qsort(buf->prune.vrec, nbuf, sizeof(*buf->prune.vrec), cmpvrec); + + // sort the rbuf indexes to be pruned descendently so that j-th rbuf index + // is removed before i-th index if iprune.max_sites; + for (i=0; iprune.idx[i] = buf->prune.vrec[i]->idx; + + qsort(buf->prune.idx, nprune, sizeof(int), cmpint_desc); + + for (i=0; irbuf, vcfrec_t, buf->prune.idx[i], buf->vcf); +} + +static int _overlap_can_flush(vcfbuf_t *buf, int flush_all) +{ + if ( flush_all ) { buf->overlap.rid = -1; return 1; } + + int i = rbuf_last(&buf->rbuf); + vcfrec_t *last = &buf->vcf[i]; + if ( buf->overlap.rid != last->rec->rid ) buf->overlap.end = 0; + + int beg_pos = last->rec->pos; + int end_pos = last->rec->pos + last->rec->rlen - 1; + + // Assuming left-aligned indels. In case it is a deletion, the real variant + // starts one base after. If an insertion, the overlap with previous zero length. + int imin = last->rec->rlen; + for (i=0; irec->n_allele; i++) + { + char *ref = last->rec->d.allele[0]; + char *alt = last->rec->d.allele[i]; + if ( *alt == '<' ) continue; // ignore symbolic alleles + while ( *ref && *alt && nt_to_upper(*ref)==nt_to_upper(*alt) ) { ref++; alt++; } + if ( imin > ref - last->rec->d.allele[0] ) imin = ref - last->rec->d.allele[0]; + } + + if ( beg_pos <= buf->overlap.end ) + { + beg_pos += imin; + if ( beg_pos > end_pos ) end_pos = beg_pos; + } + + if ( buf->rbuf.n==1 ) + { + buf->overlap.rid = last->rec->rid; + buf->overlap.end = end_pos; + return 0; + } + if ( beg_pos <= buf->overlap.end ) + { + if ( buf->overlap.end < end_pos ) buf->overlap.end = end_pos; + return 0; + } + return 1; +} + +bcf1_t *vcfbuf_flush(vcfbuf_t *buf, int flush_all) +{ + int i,j; + + if ( buf->rbuf.n==0 ) return NULL; + if ( flush_all ) goto ret; + + i = rbuf_kth(&buf->rbuf, 0); // first + j = rbuf_last(&buf->rbuf); // last + + if ( buf->vcf[i].rec->rid != buf->vcf[j].rec->rid ) goto ret; + if ( buf->overlap.active ) + { + int ret = _overlap_can_flush(buf, flush_all); + //printf("can_flush: %d %d - %d\n", ret, buf->vcf[i].rec->pos+1, buf->vcf[j].rec->pos+1); + if ( ret ) goto ret; + } + //if ( buf->overlap.active && _overlap_can_flush(buf, flush_all) ) goto ret; + + if ( buf->win > 0 ) + { + if ( buf->rbuf.n <= buf->win ) return NULL; + goto ret; + } + else if ( buf->win < 0 ) + { + if ( buf->vcf[i].rec->pos - buf->vcf[j].rec->pos > buf->win ) return NULL; + } + else return NULL; + +ret: + if ( buf->prune.max_sites && buf->prune.max_sites < buf->rbuf.n ) _prune_sites(buf, flush_all); + + i = rbuf_shift(&buf->rbuf); + return buf->vcf[i].rec; +} + +static double _estimate_af(int8_t *ptr, int size, int nvals, int nsamples) +{ + int i,j, nref = 0, nalt = 0; + for (i=0; in_sample!=brec->n_sample ) error("Different number of samples: %d vs %d\n",arec->n_sample,brec->n_sample); + assert( arec->n_sample ); + + int i,j,igt = bcf_hdr_id2int(buf->hdr, BCF_DT_ID, "GT"); + bcf_unpack(arec, BCF_UN_FMT); + bcf_unpack(brec, BCF_UN_FMT); + bcf_fmt_t *afmt = NULL, *bfmt = NULL; + for (i=0; in_fmt; i++) + if ( arec->d.fmt[i].id==igt ) { afmt = &arec->d.fmt[i]; break; } + if ( !afmt ) return -1; // no GT tag + for (i=0; in_fmt; i++) + if ( brec->d.fmt[i].id==igt ) { bfmt = &brec->d.fmt[i]; break; } + if ( !bfmt ) return -1; // no GT tag + + if ( afmt->n==0 ) return -1; // empty?! + if ( bfmt->n==0 ) return -1; // empty?! + if ( afmt->type!=BCF_BT_INT8 ) error("TODO: the GT fmt_type is not int8!\n"); + if ( bfmt->type!=BCF_BT_INT8 ) error("TODO: the GT fmt_type is not int8!\n"); + + // Determine allele frequencies, this is to sample randomly missing genotypes + double aaf = 0, baf = 0; + if ( buf->ld.rand_missing ) + { + aaf = _estimate_af((int8_t*)afmt->p, afmt->size, afmt->n, arec->n_sample); + baf = _estimate_af((int8_t*)bfmt->p, bfmt->size, bfmt->n, brec->n_sample); + } + + // Calculate correlation + double ab = 0, aa = 0, bb = 0, a = 0, b = 0; + int nab = 0, na = 0, nb = 0, ndiff = 0; + for (i=0; in_sample; i++) + { + int8_t *aptr = (int8_t*) (afmt->p + i*afmt->size); + int8_t *bptr = (int8_t*) (bfmt->p + i*bfmt->size); + int adsg = 0, bdsg = 0, an = 0, bn = 0; + for (j=0; jn; j++) + { + if ( aptr[j]==bcf_int8_vector_end ) break; + if ( aptr[j]==bcf_gt_missing ) + { + if ( !buf->ld.rand_missing ) break; + if ( rand()/RAND_MAX >= aaf ) adsg += 1; + } + else if ( bcf_gt_allele(aptr[j]) ) adsg += 1; + an++; + } + for (j=0; jn; j++) + { + if ( bptr[j]==bcf_int8_vector_end ) break; + if ( bptr[j]==bcf_gt_missing ) + { + if ( !buf->ld.rand_missing ) break; + if ( rand()/RAND_MAX >= baf ) bdsg += 1; + } + else if ( bcf_gt_allele(bptr[j]) ) bdsg += 1; + bn++; + } + if ( an ) + { + aa += adsg*adsg; + a += adsg; + na++; + } + if ( bn ) + { + bb += bdsg*bdsg; + b += bdsg; + nb++; + } + if ( an && bn ) + { + if ( adsg!=bdsg ) ndiff++; + ab += adsg*bdsg; + nab++; + } + } + if ( !nab ) return -1; + + double cor; + if ( !ndiff ) cor = 1; + else + { + // Don't know how to deal with zero variance. Since this the purpose is filtering, + // it is not enough to say the value is undefined. Therefore an artificial noise is + // added to make the denominator non-zero. + if ( aa == a*a/na || bb == b*b/nb ) + { + aa += 3*3; + bb += 3*3; + ab += 3*3; + a += 3; + b += 3; + na++; + nb++; + nab++; + } + cor = (ab/nab - a/na*b/nb) / sqrt(aa/na - a/na*a/na) / sqrt(bb/nb - b/nb*b/nb); + } + return cor*cor; +} + +bcf1_t *vcfbuf_max_ld(vcfbuf_t *buf, bcf1_t *rec, double *ld) +{ + *ld = -1; + if ( !buf->rbuf.n ) return NULL; + + int i = buf->rbuf.f; + + // Relying on vcfbuf being properly flushed - all sites in the buffer + // must come from the same chromosome + if ( buf->vcf[i].rec->rid != rec->rid ) return NULL; + + int imax = 0; + double max = 0; + for (i=-1; rbuf_next(&buf->rbuf,&i); ) + { + if ( buf->ld.skip_filter ) + { + if ( buf->vcf[i].rec->d.n_flt > 1 ) continue; // multiple filters are set + if ( buf->vcf[i].rec->d.n_flt==1 && buf->vcf[i].rec->d.flt[0]!=0 ) continue; // not PASS + } + double val = _calc_ld(buf, buf->vcf[i].rec, rec); + if ( buf->ld.max && buf->ld.max < val ) + { + *ld = val; + return buf->vcf[i].rec; + } + if ( val > max ) + { + max = val; + imax = i; + } + } + *ld = max; + return buf->vcf[imax].rec; +} + + diff --git a/bcftools/vcfbuf.c.pysam.c b/bcftools/vcfbuf.c.pysam.c new file mode 100644 index 0000000..85a2074 --- /dev/null +++ b/bcftools/vcfbuf.c.pysam.c @@ -0,0 +1,444 @@ +#include "bcftools.pysam.h" + +/* The MIT License + + Copyright (c) 2016 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ + +#include +#include +#include "bcftools.h" +#include "vcfbuf.h" +#include "rbuf.h" + +typedef struct +{ + double max; + int rand_missing, skip_filter; +} +ld_t; + +typedef struct +{ + bcf1_t *rec; + double af; + int af_set:1, idx:31; +} +vcfrec_t; + +typedef struct +{ + int max_sites, mvrec, mac, mfarr; + int *ac, *idx; + float *farr; + char *af_tag; + vcfrec_t **vrec; +} +prune_t; + +typedef struct +{ + int active, rid, end; +} +overlap_t; + +struct _vcfbuf_t +{ + int win; + bcf_hdr_t *hdr; + vcfrec_t *vcf; + rbuf_t rbuf; + ld_t ld; + prune_t prune; + overlap_t overlap; +}; + +vcfbuf_t *vcfbuf_init(bcf_hdr_t *hdr, int win) +{ + vcfbuf_t *buf = (vcfbuf_t*) calloc(1,sizeof(vcfbuf_t)); + buf->hdr = hdr; + buf->win = win; + buf->overlap.rid = -1; + rbuf_init(&buf->rbuf, 0); + return buf; +} + +void vcfbuf_destroy(vcfbuf_t *buf) +{ + int i; + for (i=0; irbuf.m; i++) + if ( buf->vcf[i].rec ) bcf_destroy(buf->vcf[i].rec); + free(buf->vcf); + free(buf->prune.farr); + free(buf->prune.vrec); + free(buf->prune.ac); + free(buf->prune.idx); + free(buf); +} + +void vcfbuf_set(vcfbuf_t *buf, vcfbuf_opt_t key, void *value) +{ + if ( key==VCFBUF_LD_MAX ) { buf->ld.max = *((double*)value); return; } + if ( key==VCFBUF_RAND_MISSING ) { buf->ld.rand_missing = *((int*)value); return; } + if ( key==VCFBUF_SKIP_FILTER ) { buf->ld.skip_filter = *((int*)value); return; } + if ( key==VCFBUF_NSITES ) { buf->prune.max_sites = *((int*)value); return; } + if ( key==VCFBUF_AF_TAG ) { buf->prune.af_tag = *((char**)value); return; } + if ( key==VCFBUF_OVERLAP_WIN ) { buf->overlap.active = *((int*)value); return; } +} + +int vcfbuf_nsites(vcfbuf_t *buf) +{ + return buf->rbuf.n; +} + +bcf1_t *vcfbuf_push(vcfbuf_t *buf, bcf1_t *rec, int swap) +{ + if ( !swap ) error("todo: swap=%d\n", swap); + + rbuf_expand0(&buf->rbuf, vcfrec_t, buf->rbuf.n+1, buf->vcf); + + int i = rbuf_append(&buf->rbuf); + if ( !buf->vcf[i].rec ) buf->vcf[i].rec = bcf_init1(); + + bcf1_t *ret = buf->vcf[i].rec; + buf->vcf[i].rec = rec; + buf->vcf[i].af_set = 0; + + return ret; +} + +static int cmpvrec(const void *_a, const void *_b) +{ + vcfrec_t *a = *((vcfrec_t**) _a); + vcfrec_t *b = *((vcfrec_t**) _b); + if ( a->af < b->af ) return -1; + if ( a->af == b->af ) return 0; + return 1; +} +static int cmpint_desc(const void *_a, const void *_b) +{ + int a = *((int*)_a); + int b = *((int*)_b); + if ( a < b ) return 1; + if ( a == b ) return 0; + return -1; +} + +static void _prune_sites(vcfbuf_t *buf, int flush_all) +{ + int nbuf = flush_all ? buf->rbuf.n : buf->rbuf.n - 1; + + if ( nbuf > buf->prune.mvrec ) + { + buf->prune.idx = (int*) realloc(buf->prune.idx, nbuf*sizeof(int)); + buf->prune.vrec = (vcfrec_t**) realloc(buf->prune.vrec, nbuf*sizeof(vcfrec_t*)); + buf->prune.mvrec = nbuf; + } + + // set allele frequency and prepare buffer for sorting + int i,k,irec = 0; + for (i=-1; rbuf_next(&buf->rbuf,&i) && irecvcf[i].rec; + if ( line->n_allele > buf->prune.mac ) + { + buf->prune.ac = (int*) realloc(buf->prune.ac, line->n_allele*sizeof(*buf->prune.ac)); + buf->prune.mac = line->n_allele; + } + if ( !buf->vcf[i].af_set ) + { + buf->vcf[i].af = 0; + if ( buf->prune.af_tag ) + { + if ( bcf_get_info_float(buf->hdr,line,buf->prune.af_tag,&buf->prune.farr, &buf->prune.mfarr) > 0 ) buf->vcf[i].af = buf->prune.farr[0]; + } + else if ( bcf_calc_ac(buf->hdr, line, buf->prune.ac, BCF_UN_INFO|BCF_UN_FMT) ) + { + int ntot = buf->prune.ac[0], nalt = 0; + for (k=1; kn_allele; k++) nalt += buf->prune.ac[k]; + buf->vcf[i].af = ntot ? (float)nalt/ntot : 0; + } + buf->vcf[i].af_set = 1; + } + buf->vcf[i].idx = irec; + buf->prune.vrec[irec++] = &buf->vcf[i]; + } + + // sort by allele frequency, low AF will be removed preferentially + qsort(buf->prune.vrec, nbuf, sizeof(*buf->prune.vrec), cmpvrec); + + // sort the rbuf indexes to be pruned descendently so that j-th rbuf index + // is removed before i-th index if iprune.max_sites; + for (i=0; iprune.idx[i] = buf->prune.vrec[i]->idx; + + qsort(buf->prune.idx, nprune, sizeof(int), cmpint_desc); + + for (i=0; irbuf, vcfrec_t, buf->prune.idx[i], buf->vcf); +} + +static int _overlap_can_flush(vcfbuf_t *buf, int flush_all) +{ + if ( flush_all ) { buf->overlap.rid = -1; return 1; } + + int i = rbuf_last(&buf->rbuf); + vcfrec_t *last = &buf->vcf[i]; + if ( buf->overlap.rid != last->rec->rid ) buf->overlap.end = 0; + + int beg_pos = last->rec->pos; + int end_pos = last->rec->pos + last->rec->rlen - 1; + + // Assuming left-aligned indels. In case it is a deletion, the real variant + // starts one base after. If an insertion, the overlap with previous zero length. + int imin = last->rec->rlen; + for (i=0; irec->n_allele; i++) + { + char *ref = last->rec->d.allele[0]; + char *alt = last->rec->d.allele[i]; + if ( *alt == '<' ) continue; // ignore symbolic alleles + while ( *ref && *alt && nt_to_upper(*ref)==nt_to_upper(*alt) ) { ref++; alt++; } + if ( imin > ref - last->rec->d.allele[0] ) imin = ref - last->rec->d.allele[0]; + } + + if ( beg_pos <= buf->overlap.end ) + { + beg_pos += imin; + if ( beg_pos > end_pos ) end_pos = beg_pos; + } + + if ( buf->rbuf.n==1 ) + { + buf->overlap.rid = last->rec->rid; + buf->overlap.end = end_pos; + return 0; + } + if ( beg_pos <= buf->overlap.end ) + { + if ( buf->overlap.end < end_pos ) buf->overlap.end = end_pos; + return 0; + } + return 1; +} + +bcf1_t *vcfbuf_flush(vcfbuf_t *buf, int flush_all) +{ + int i,j; + + if ( buf->rbuf.n==0 ) return NULL; + if ( flush_all ) goto ret; + + i = rbuf_kth(&buf->rbuf, 0); // first + j = rbuf_last(&buf->rbuf); // last + + if ( buf->vcf[i].rec->rid != buf->vcf[j].rec->rid ) goto ret; + if ( buf->overlap.active ) + { + int ret = _overlap_can_flush(buf, flush_all); + //printf("can_flush: %d %d - %d\n", ret, buf->vcf[i].rec->pos+1, buf->vcf[j].rec->pos+1); + if ( ret ) goto ret; + } + //if ( buf->overlap.active && _overlap_can_flush(buf, flush_all) ) goto ret; + + if ( buf->win > 0 ) + { + if ( buf->rbuf.n <= buf->win ) return NULL; + goto ret; + } + else if ( buf->win < 0 ) + { + if ( buf->vcf[i].rec->pos - buf->vcf[j].rec->pos > buf->win ) return NULL; + } + else return NULL; + +ret: + if ( buf->prune.max_sites && buf->prune.max_sites < buf->rbuf.n ) _prune_sites(buf, flush_all); + + i = rbuf_shift(&buf->rbuf); + return buf->vcf[i].rec; +} + +static double _estimate_af(int8_t *ptr, int size, int nvals, int nsamples) +{ + int i,j, nref = 0, nalt = 0; + for (i=0; in_sample!=brec->n_sample ) error("Different number of samples: %d vs %d\n",arec->n_sample,brec->n_sample); + assert( arec->n_sample ); + + int i,j,igt = bcf_hdr_id2int(buf->hdr, BCF_DT_ID, "GT"); + bcf_unpack(arec, BCF_UN_FMT); + bcf_unpack(brec, BCF_UN_FMT); + bcf_fmt_t *afmt = NULL, *bfmt = NULL; + for (i=0; in_fmt; i++) + if ( arec->d.fmt[i].id==igt ) { afmt = &arec->d.fmt[i]; break; } + if ( !afmt ) return -1; // no GT tag + for (i=0; in_fmt; i++) + if ( brec->d.fmt[i].id==igt ) { bfmt = &brec->d.fmt[i]; break; } + if ( !bfmt ) return -1; // no GT tag + + if ( afmt->n==0 ) return -1; // empty?! + if ( bfmt->n==0 ) return -1; // empty?! + if ( afmt->type!=BCF_BT_INT8 ) error("TODO: the GT fmt_type is not int8!\n"); + if ( bfmt->type!=BCF_BT_INT8 ) error("TODO: the GT fmt_type is not int8!\n"); + + // Determine allele frequencies, this is to sample randomly missing genotypes + double aaf = 0, baf = 0; + if ( buf->ld.rand_missing ) + { + aaf = _estimate_af((int8_t*)afmt->p, afmt->size, afmt->n, arec->n_sample); + baf = _estimate_af((int8_t*)bfmt->p, bfmt->size, bfmt->n, brec->n_sample); + } + + // Calculate correlation + double ab = 0, aa = 0, bb = 0, a = 0, b = 0; + int nab = 0, na = 0, nb = 0, ndiff = 0; + for (i=0; in_sample; i++) + { + int8_t *aptr = (int8_t*) (afmt->p + i*afmt->size); + int8_t *bptr = (int8_t*) (bfmt->p + i*bfmt->size); + int adsg = 0, bdsg = 0, an = 0, bn = 0; + for (j=0; jn; j++) + { + if ( aptr[j]==bcf_int8_vector_end ) break; + if ( aptr[j]==bcf_gt_missing ) + { + if ( !buf->ld.rand_missing ) break; + if ( rand()/RAND_MAX >= aaf ) adsg += 1; + } + else if ( bcf_gt_allele(aptr[j]) ) adsg += 1; + an++; + } + for (j=0; jn; j++) + { + if ( bptr[j]==bcf_int8_vector_end ) break; + if ( bptr[j]==bcf_gt_missing ) + { + if ( !buf->ld.rand_missing ) break; + if ( rand()/RAND_MAX >= baf ) bdsg += 1; + } + else if ( bcf_gt_allele(bptr[j]) ) bdsg += 1; + bn++; + } + if ( an ) + { + aa += adsg*adsg; + a += adsg; + na++; + } + if ( bn ) + { + bb += bdsg*bdsg; + b += bdsg; + nb++; + } + if ( an && bn ) + { + if ( adsg!=bdsg ) ndiff++; + ab += adsg*bdsg; + nab++; + } + } + if ( !nab ) return -1; + + double cor; + if ( !ndiff ) cor = 1; + else + { + // Don't know how to deal with zero variance. Since this the purpose is filtering, + // it is not enough to say the value is undefined. Therefore an artificial noise is + // added to make the denominator non-zero. + if ( aa == a*a/na || bb == b*b/nb ) + { + aa += 3*3; + bb += 3*3; + ab += 3*3; + a += 3; + b += 3; + na++; + nb++; + nab++; + } + cor = (ab/nab - a/na*b/nb) / sqrt(aa/na - a/na*a/na) / sqrt(bb/nb - b/nb*b/nb); + } + return cor*cor; +} + +bcf1_t *vcfbuf_max_ld(vcfbuf_t *buf, bcf1_t *rec, double *ld) +{ + *ld = -1; + if ( !buf->rbuf.n ) return NULL; + + int i = buf->rbuf.f; + + // Relying on vcfbuf being properly flushed - all sites in the buffer + // must come from the same chromosome + if ( buf->vcf[i].rec->rid != rec->rid ) return NULL; + + int imax = 0; + double max = 0; + for (i=-1; rbuf_next(&buf->rbuf,&i); ) + { + if ( buf->ld.skip_filter ) + { + if ( buf->vcf[i].rec->d.n_flt > 1 ) continue; // multiple filters are set + if ( buf->vcf[i].rec->d.n_flt==1 && buf->vcf[i].rec->d.flt[0]!=0 ) continue; // not PASS + } + double val = _calc_ld(buf, buf->vcf[i].rec, rec); + if ( buf->ld.max && buf->ld.max < val ) + { + *ld = val; + return buf->vcf[i].rec; + } + if ( val > max ) + { + max = val; + imax = i; + } + } + *ld = max; + return buf->vcf[imax].rec; +} + + diff --git a/bcftools/vcfbuf.h b/bcftools/vcfbuf.h new file mode 100644 index 0000000..5494323 --- /dev/null +++ b/bcftools/vcfbuf.h @@ -0,0 +1,81 @@ +/* The MIT License + + Copyright (c) 2017 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ + +/* + Buffer VCF records and perform operations on the buffer +*/ + +#ifndef __VCFBUF_H__ +#define __VCFBUF_H__ + +#include + +typedef struct _vcfbuf_t vcfbuf_t; + +// Modes of operation +typedef enum +{ + VCFBUF_LD_MAX, // vcfbuf_max_ld() stops at the first record that exceeds the threshold + VCFBUF_RAND_MISSING, // randomize rather than ignore missing genotypes + VCFBUF_SKIP_FILTER, // skip sites with FILTER diferent from "PASS" or "." + VCFBUF_NSITES, // leave at max this many sites in the window + VCFBUF_AF_TAG, // use this INFO tag with LD_NSITES + VCFBUF_OVERLAP_WIN, // keep only overlapping variants in the window +} +vcfbuf_opt_t; + +#define vcfbuf_set_opt(buf,type,key,value) { type tmp = value; vcfbuf_set(buf, key, (void*)&tmp); } +void vcfbuf_set(vcfbuf_t *buf, vcfbuf_opt_t key, void *value); + + +/* + * vcfbuf_init() - init buffer + * @win: number of sites (>0) or bp (<0) + */ +vcfbuf_t *vcfbuf_init(bcf_hdr_t *hdr, int win); +void vcfbuf_destroy(vcfbuf_t *buf); + +/* + * vcfbuf_push() - push a new site for analysis + * @swap: if set, do not create a copy, but return a substitute + */ +bcf1_t *vcfbuf_push(vcfbuf_t *buf, bcf1_t *rec, int swap); + +bcf1_t *vcfbuf_flush(vcfbuf_t *buf, int flush_all); + +/* + * vcfbuf_nsites() - return the number of sites in the buffer + */ +int vcfbuf_nsites(vcfbuf_t *buf); + +/* + * vcfbuf_max_ld() - return a record that has maximum D or first record exceeding the threshold + * @ld: will be filled with the maximum D found + */ +bcf1_t *vcfbuf_max_ld(vcfbuf_t *buf, bcf1_t *rec, double *ld); + +#endif + diff --git a/bcftools/vcfcall.c b/bcftools/vcfcall.c new file mode 100644 index 0000000..00771f7 --- /dev/null +++ b/bcftools/vcfcall.c @@ -0,0 +1,869 @@ +/* vcfcall.c -- SNP/indel variant calling from VCF/BCF. + + Copyright (C) 2013-2016 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "call.h" +#include "prob1.h" +#include "ploidy.h" +#include "gvcf.h" + +void error(const char *format, ...); + +#ifdef _WIN32 +#define srand48(x) srand(x) +#define lrand48() rand() +#endif + +#define CF_NO_GENO 1 +#define CF_INS_MISSED (1<<1) +#define CF_CCALL (1<<2) +// (1<<3) +// (1<<4) +// (1<<5) +#define CF_ACGT_ONLY (1<<6) +#define CF_QCALL (1<<7) +#define CF_ADJLD (1<<8) +#define CF_NO_INDEL (1<<9) +#define CF_ANNO_MAX (1<<10) +#define CF_MCALL (1<<11) +#define CF_PAIRCALL (1<<12) +#define CF_QCNT (1<<13) +#define CF_INDEL_ONLY (1<<14) + +typedef struct +{ + int flag; // combination of CF_* flags above + int output_type, n_threads, record_cmd_line; + htsFile *bcf_in, *out_fh; + char *bcf_fname, *output_fname; + char **samples; // for subsampling and ploidy + int nsamples, *samples_map; // mapping from output sample names to original VCF + char *regions, *targets; // regions to process + int regions_is_file, targets_is_file; + + char *samples_fname; + int samples_is_file; + int *sample2sex; // mapping for ploidy. If negative, interpreted as -1*ploidy + int *sex2ploidy, *sex2ploidy_prev, nsex; + ploidy_t *ploidy; + gvcf_t *gvcf; + + bcf1_t *missed_line; + call_t aux; // parameters and temporary data + + int argc; + char **argv; + + // int flag, prior_type, n1, n_sub, *sublist, n_perm; + // uint32_t *trio_aux; + // char *prior_file, **subsam; + // uint8_t *ploidy; + // double theta, pref, indel_frac, min_smpl_frac, min_lrt; + // Permutation tests + // int n_perm, *seeds; + // double min_perm_p; + // void *bed; +} +args_t; + +static char **add_sample(void *name2idx, char **lines, int *nlines, int *mlines, char *name, char sex, int *ith) +{ + int ret = khash_str2int_get(name2idx, name, ith); + if ( ret==0 ) return lines; + + hts_expand(char*,(*nlines+1),*mlines,lines); + int len = strlen(name); + lines[*nlines] = (char*) malloc(len+3); + memcpy(lines[*nlines],name,len); + lines[*nlines][len] = ' '; + lines[*nlines][len+1] = sex; + lines[*nlines][len+2] = 0; + *ith = *nlines; + (*nlines)++; + khash_str2int_set(name2idx, strdup(name), *ith); + return lines; +} + +typedef struct +{ + const char *alias, *about, *ploidy; +} +ploidy_predef_t; + +static ploidy_predef_t ploidy_predefs[] = +{ + { .alias = "GRCh37", + .about = "Human Genome reference assembly GRCh37 / hg19", + .ploidy = + "X 1 60000 M 1\n" + "X 2699521 154931043 M 1\n" + "Y 1 59373566 M 1\n" + "Y 1 59373566 F 0\n" + "MT 1 16569 M 1\n" + "MT 1 16569 F 1\n" + "chrX 1 60000 M 1\n" + "chrX 2699521 154931043 M 1\n" + "chrY 1 59373566 M 1\n" + "chrY 1 59373566 F 0\n" + "chrM 1 16569 M 1\n" + "chrM 1 16569 F 1\n" + "* * * M 2\n" + "* * * F 2\n" + }, + { .alias = "GRCh38", + .about = "Human Genome reference assembly GRCh38 / hg38", + .ploidy = + "X 1 9999 M 1\n" + "X 2781480 155701381 M 1\n" + "Y 1 57227415 M 1\n" + "Y 1 57227415 F 0\n" + "MT 1 16569 M 1\n" + "MT 1 16569 F 1\n" + "chrX 1 9999 M 1\n" + "chrX 2781480 155701381 M 1\n" + "chrY 1 57227415 M 1\n" + "chrY 1 57227415 F 0\n" + "chrM 1 16569 M 1\n" + "chrM 1 16569 F 1\n" + "* * * M 2\n" + "* * * F 2\n" + }, + { .alias = "X", + .about = "Treat male samples as haploid and female as diploid regardless of the chromosome name", + .ploidy = + "* * * M 1\n" + "* * * F 2\n" + }, + { .alias = "Y", + .about = "Treat male samples as haploid and female as no-copy, regardless of the chromosome name", + .ploidy = + "* * * M 1\n" + "* * * F 0\n" + }, + { .alias = "1", + .about = "Treat all samples as haploid", + .ploidy = + "* * * * 1\n" + }, + { + .alias = NULL, + .about = NULL, + .ploidy = NULL, + } +}; + +// only 5 columns are required and the first is ignored: +// ignored,sample,father(or 0),mother(or 0),sex(1=M,2=F) +static char **parse_ped_samples(call_t *call, char **vals, int nvals, int *nsmpl) +{ + int i, j, mlines = 0, nlines = 0; + kstring_t str = {0,0,0}, fam_str = {0,0,0}; + void *name2idx = khash_str2int_init(); + char **lines = NULL; + for (i=0; infams++; + hts_expand(family_t, call->nfams, call->mfams, call->fams); + family_t *fam = &call->fams[call->nfams-1]; + fam_str.l = 0; + ksprintf(&fam_str,"father=%s, mother=%s, child=%s", col_ends[1]+1,col_ends[2]+1,col_ends[0]+1); + fam->name = strdup(fam_str.s); + + if ( !khash_str2int_has_key(name2idx, col_ends[1]+1) ) + lines = add_sample(name2idx, lines, &nlines, &mlines, col_ends[1]+1, 'M', &fam->sample[FATHER]); + if ( !khash_str2int_has_key(name2idx, col_ends[2]+1) ) + lines = add_sample(name2idx, lines, &nlines, &mlines, col_ends[2]+1, 'F', &fam->sample[MOTHER]); + + khash_str2int_get(name2idx, col_ends[0]+1, &fam->sample[CHILD]); + khash_str2int_get(name2idx, col_ends[1]+1, &fam->sample[FATHER]); + khash_str2int_get(name2idx, col_ends[2]+1, &fam->sample[MOTHER]); + } + } + free(str.s); + free(fam_str.s); + khash_str2int_destroy_free(name2idx); + + if ( i!=nvals ) // not a ped file + { + if ( i>0 ) error("Could not parse samples, not a PED format.\n"); + return NULL; + } + *nsmpl = nlines; + return lines; +} + + +/* + * Reads sample names and their ploidy (optional) from a file. + * Alternatively, if no such file exists, the file name is interpreted + * as a comma-separated list of samples. When ploidy is not present, + * the default ploidy 2 is assumed. + */ +static void set_samples(args_t *args, const char *fn, int is_file) +{ + int i, nlines; + char **lines = hts_readlist(fn, is_file, &nlines); + if ( !lines ) error("Could not read the file: %s\n", fn); + + int nsmpls; + char **smpls = parse_ped_samples(&args->aux, lines, nlines, &nsmpls); + if ( smpls ) + { + for (i=0; isamples_map = (int*) malloc(sizeof(int)*bcf_hdr_nsamples(args->aux.hdr)); // for subsetting + args->sample2sex = (int*) malloc(sizeof(int)*bcf_hdr_nsamples(args->aux.hdr)); + int dflt_sex_id = ploidy_nsex(args->ploidy) - 1; + for (i=0; iaux.hdr); i++) args->sample2sex[i] = dflt_sex_id; + + int *old2new = (int*) malloc(sizeof(int)*bcf_hdr_nsamples(args->aux.hdr)); + for (i=0; iaux.hdr); i++) old2new[i] = -1; + + int nsmpl = 0, map_needed = 0; + for (i=0; iaux.hdr, BCF_DT_SAMPLE, ss); + if ( ismpl < 0 ) { fprintf(stderr,"Warning: No such sample in the VCF: %s\n",ss); continue; } + if ( old2new[ismpl] != -1 ) { fprintf(stderr,"Warning: The sample is listed multiple times: %s\n",ss); continue; } + + ss = se+1; + while ( *ss && isspace(*ss) ) ss++; + if ( !*ss ) ss = "2"; // default ploidy + se = ss; + while ( *se && !isspace(*se) ) se++; + if ( se==ss ) { *xptr = x; error("Could not parse: \"%s\"\n", lines[i]); } + + if ( ss[1]==0 && (ss[0]=='0' || ss[0]=='1' || ss[0]=='2') ) + args->sample2sex[nsmpl] = -1*(ss[0]-'0'); + else + args->sample2sex[nsmpl] = ploidy_add_sex(args->ploidy, ss); + + if ( ismpl!=nsmpl ) map_needed = 1; + args->samples_map[nsmpl] = ismpl; + old2new[ismpl] = nsmpl; + nsmpl++; + } + + for (i=0; iaux.nfams; i++) + { + int j, nmiss = 0; + family_t *fam = &args->aux.fams[i]; + for (j=0; j<3; j++) + { + fam->sample[i] = old2new[fam->sample[i]]; + if ( fam->sample[i]<0 ) nmiss++; + } + assert( nmiss==0 || nmiss==3 ); + } + free(old2new); + + if ( !map_needed ) { free(args->samples_map); args->samples_map = NULL; } + + args->nsamples = nsmpl; + args->samples = lines; +} + +static void init_missed_line(args_t *args) +{ + int i; + for (i=0; iaux.hdr); i++) + { + args->aux.gts[i*2] = bcf_gt_missing; + args->aux.gts[i*2+1] = bcf_int32_vector_end; + } + args->missed_line = bcf_init1(); + bcf_update_genotypes(args->aux.hdr, args->missed_line, args->aux.gts, 2*bcf_hdr_nsamples(args->aux.hdr)); + bcf_float_set_missing(args->missed_line->qual); +} + +static void print_missed_line(bcf_sr_regions_t *regs, void *data) +{ + args_t *args = (args_t*) data; + call_t *call = &args->aux; + bcf1_t *missed = args->missed_line; + + char *ss = regs->line.s; + int i = 0; + while ( iaux.srs->targets_als-1 && *ss ) + { + if ( *ss=='\t' ) i++; + ss++; + } + if ( !*ss ) error("Could not parse: [%s] (%d)\n", regs->line.s,args->aux.srs->targets_als); + + missed->rid = bcf_hdr_name2id(call->hdr,regs->seq_names[regs->prev_seq]); + missed->pos = regs->start; + bcf_update_alleles_str(call->hdr, missed,ss); + + bcf_write1(args->out_fh, call->hdr, missed); +} + +static void init_data(args_t *args) +{ + args->aux.srs = bcf_sr_init(); + + // Open files for input and output, initialize structures + if ( args->targets ) + { + if ( bcf_sr_set_targets(args->aux.srs, args->targets, args->targets_is_file, args->aux.flag&CALL_CONSTR_ALLELES ? 3 : 0)<0 ) + error("Failed to read the targets: %s\n", args->targets); + + if ( args->aux.flag&CALL_CONSTR_ALLELES && args->flag&CF_INS_MISSED ) + { + args->aux.srs->targets->missed_reg_handler = print_missed_line; + args->aux.srs->targets->missed_reg_data = args; + } + } + if ( args->regions ) + { + if ( bcf_sr_set_regions(args->aux.srs, args->regions, args->regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions); + } + + if ( !bcf_sr_add_reader(args->aux.srs, args->bcf_fname) ) error("Failed to open %s: %s\n", args->bcf_fname,bcf_sr_strerror(args->aux.srs->errnum)); + args->aux.hdr = bcf_sr_get_header(args->aux.srs,0); + + int i; + if ( args->samples_fname ) + { + set_samples(args, args->samples_fname, args->samples_is_file); + if ( args->aux.flag&CALL_CONSTR_TRIO ) + { + if ( 3*args->aux.nfams!=args->nsamples ) error("Expected only trios in %s, sorry!\n", args->samples_fname); + fprintf(stderr,"Detected %d samples in %d trio families\n", args->nsamples,args->aux.nfams); + } + } + if ( args->ploidy ) + { + args->nsex = ploidy_nsex(args->ploidy); + args->sex2ploidy = (int*) calloc(args->nsex,sizeof(int)); + args->sex2ploidy_prev = (int*) calloc(args->nsex,sizeof(int)); + if ( !args->nsamples ) + { + args->nsamples = bcf_hdr_nsamples(args->aux.hdr); + args->sample2sex = (int*) malloc(sizeof(int)*args->nsamples); + for (i=0; insamples; i++) args->sample2sex[i] = args->nsex - 1; + } + } + if ( args->nsamples ) + { + args->aux.ploidy = (uint8_t*) malloc(args->nsamples); + for (i=0; insamples; i++) args->aux.ploidy[i] = ploidy_max(args->ploidy); + for (i=0; insex; i++) args->sex2ploidy_prev[i] = ploidy_max(args->ploidy); + for (i=0; insamples; i++) + if ( args->sample2sex[i] >= args->nsex ) args->sample2sex[i] = args->nsex - 1; + } + + if ( args->gvcf ) + { + int id = bcf_hdr_id2int(args->aux.hdr,BCF_DT_ID,"DP"); + if ( id<0 || !bcf_hdr_idinfo_exists(args->aux.hdr,BCF_HL_FMT,id) ) error("--gvcf output mode requires FORMAT/DP tag, which is not present in the input header\n"); + gvcf_update_header(args->gvcf, args->aux.hdr); + } + + if ( args->samples_map ) + { + args->aux.hdr = bcf_hdr_subset(bcf_sr_get_header(args->aux.srs,0), args->nsamples, args->samples, args->samples_map); + if ( !args->aux.hdr ) error("Error occurred while subsetting samples\n"); + for (i=0; insamples; i++) + if ( args->samples_map[i]<0 ) error("No such sample: %s\n", args->samples[i]); + if ( !bcf_hdr_nsamples(args->aux.hdr) ) error("No matching sample found\n"); + } + else + { + args->aux.hdr = bcf_hdr_dup(bcf_sr_get_header(args->aux.srs,0)); + if ( args->samples ) + { + for (i=0; insamples; i++) + if ( bcf_hdr_id2int(args->aux.hdr,BCF_DT_SAMPLE,args->samples[i])<0 ) + error("No such sample: %s\n", args->samples[i]); + } + } + + args->out_fh = hts_open(args->output_fname, hts_bcf_wmode(args->output_type)); + if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno)); + if ( args->n_threads ) hts_set_threads(args->out_fh, args->n_threads); + + if ( args->flag & CF_QCALL ) + return; + + if ( args->flag & CF_MCALL ) + mcall_init(&args->aux); + + if ( args->flag & CF_CCALL ) + ccall_init(&args->aux); + + bcf_hdr_remove(args->aux.hdr, BCF_HL_INFO, "QS"); + bcf_hdr_remove(args->aux.hdr, BCF_HL_INFO, "I16"); + + if (args->record_cmd_line) bcf_hdr_append_version(args->aux.hdr, args->argc, args->argv, "bcftools_call"); + bcf_hdr_write(args->out_fh, args->aux.hdr); + + if ( args->flag&CF_INS_MISSED ) init_missed_line(args); +} + +static void destroy_data(args_t *args) +{ + if ( args->flag & CF_CCALL ) ccall_destroy(&args->aux); + else if ( args->flag & CF_MCALL ) mcall_destroy(&args->aux); + else if ( args->flag & CF_QCALL ) qcall_destroy(&args->aux); + int i; + if ( args->samples ) + { + for (i=0; insamples; i++) free(args->samples[i]); + } + if ( args->aux.fams ) + { + for (i=0; iaux.nfams; i++) free(args->aux.fams[i].name); + free(args->aux.fams); + } + if ( args->missed_line ) bcf_destroy(args->missed_line); + ploidy_destroy(args->ploidy); + free(args->sex2ploidy); + free(args->sex2ploidy_prev); + free(args->samples); + free(args->samples_map); + free(args->sample2sex); + free(args->aux.ploidy); + if ( args->gvcf ) gvcf_destroy(args->gvcf); + bcf_hdr_destroy(args->aux.hdr); + hts_close(args->out_fh); + bcf_sr_destroy(args->aux.srs); +} + +void parse_novel_rate(args_t *args, const char *str) +{ + if ( sscanf(str,"%le,%le,%le",&args->aux.trio_Pm_SNPs,&args->aux.trio_Pm_del,&args->aux.trio_Pm_ins)==3 ) // explicit for all + { + args->aux.trio_Pm_SNPs = 1 - args->aux.trio_Pm_SNPs; + args->aux.trio_Pm_del = 1 - args->aux.trio_Pm_del; + args->aux.trio_Pm_ins = 1 - args->aux.trio_Pm_ins; + } + else if ( sscanf(str,"%le,%le",&args->aux.trio_Pm_SNPs,&args->aux.trio_Pm_del)==2 ) // dynamic for indels + { + args->aux.trio_Pm_SNPs = 1 - args->aux.trio_Pm_SNPs; + args->aux.trio_Pm_ins = -1; // negative value for dynamic calculation + } + else if ( sscanf(str,"%le",&args->aux.trio_Pm_SNPs)==1 ) // same for all + { + args->aux.trio_Pm_SNPs = 1 - args->aux.trio_Pm_SNPs; + args->aux.trio_Pm_del = -1; + args->aux.trio_Pm_ins = -1; + } + else error("Could not parse --novel-rate %s\n", str); +} + +static int parse_format_flag(const char *str) +{ + int flag = 0; + const char *ss = str; + while ( *ss ) + { + const char *se = ss; + while ( *se && *se!=',' ) se++; + if ( !strncasecmp(ss,"GQ",se-ss) ) flag |= CALL_FMT_GQ; + else if ( !strncasecmp(ss,"GP",se-ss) ) flag |= CALL_FMT_GP; + else + { + fprintf(stderr,"Could not parse \"%s\"\n", str); + exit(1); + } + if ( !*se ) break; + ss = se + 1; + } + return flag; +} + +static void set_ploidy(args_t *args, bcf1_t *rec) +{ + ploidy_query(args->ploidy,(char*)bcf_seqname(args->aux.hdr,rec),rec->pos,args->sex2ploidy,NULL,NULL); + + int i; + for (i=0; insex; i++) + if ( args->sex2ploidy[i]!=args->sex2ploidy_prev[i] ) break; + + if ( i==args->nsex ) return; // ploidy same as previously + + for (i=0; insamples; i++) + { + if ( args->sample2sex[i]<0 ) + args->aux.ploidy[i] = -1*args->sample2sex[i]; + else + args->aux.ploidy[i] = args->sex2ploidy[args->sample2sex[i]]; + } + int *tmp = args->sex2ploidy; args->sex2ploidy = args->sex2ploidy_prev; args->sex2ploidy_prev = tmp; +} + +ploidy_t *init_ploidy(char *alias) +{ + const ploidy_predef_t *pld = ploidy_predefs; + + int detailed = 0, len = strlen(alias); + if ( alias[len-1]=='?' ) { detailed = 1; alias[len-1] = 0; } + + while ( pld->alias && strcasecmp(alias,pld->alias) ) pld++; + + if ( !pld->alias ) + { + fprintf(stderr,"\nPRE-DEFINED PLOIDY FILES\n\n"); + fprintf(stderr," * Columns are: CHROM,FROM,TO,SEX,PLOIDY\n"); + fprintf(stderr," * Coordinates are 1-based inclusive.\n"); + fprintf(stderr," * A '*' means any value not otherwise defined.\n\n"); + pld = ploidy_predefs; + while ( pld->alias ) + { + fprintf(stderr,"%s\n .. %s\n\n", pld->alias,pld->about); + if ( detailed ) + fprintf(stderr,"%s\n", pld->ploidy); + pld++; + } + fprintf(stderr,"Run as --ploidy (e.g. --ploidy GRCh37).\n"); + fprintf(stderr,"To see the detailed ploidy definition, append a question mark (e.g. --ploidy GRCh37?).\n"); + fprintf(stderr,"\n"); + exit(-1); + } + else if ( detailed ) + { + fprintf(stderr,"%s", pld->ploidy); + exit(-1); + } + return ploidy_init_string(pld->ploidy,2); +} + +static void usage(args_t *args) +{ + fprintf(stderr, "\n"); + fprintf(stderr, "About: SNP/indel variant calling from VCF/BCF. To be used in conjunction with samtools mpileup.\n"); + fprintf(stderr, " This command replaces the former \"bcftools view\" caller. Some of the original\n"); + fprintf(stderr, " functionality has been temporarily lost in the process of transition to htslib,\n"); + fprintf(stderr, " but will be added back on popular demand. The original calling model can be\n"); + fprintf(stderr, " invoked with the -c option.\n"); + fprintf(stderr, "Usage: bcftools call [options] \n"); + fprintf(stderr, "\n"); + fprintf(stderr, "File format options:\n"); + fprintf(stderr, " --no-version do not append version and command line to the header\n"); + fprintf(stderr, " -o, --output write output to a file [standard output]\n"); + fprintf(stderr, " -O, --output-type output type: 'b' compressed BCF; 'u' uncompressed BCF; 'z' compressed VCF; 'v' uncompressed VCF [v]\n"); + fprintf(stderr, " --ploidy [?] predefined ploidy, 'list' to print available settings, append '?' for details\n"); + fprintf(stderr, " --ploidy-file space/tab-delimited list of CHROM,FROM,TO,SEX,PLOIDY\n"); + fprintf(stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(stderr, " -s, --samples list of samples to include [all samples]\n"); + fprintf(stderr, " -S, --samples-file PED file or a file with an optional column with sex (see man page for details) [all samples]\n"); + fprintf(stderr, " -t, --targets similar to -r but streams rather than index-jumps\n"); + fprintf(stderr, " -T, --targets-file similar to -R but streams rather than index-jumps\n"); + fprintf(stderr, " --threads number of extra output compression threads [0]\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Input/output options:\n"); + fprintf(stderr, " -A, --keep-alts keep all possible alternate alleles at variant sites\n"); + fprintf(stderr, " -f, --format-fields output format fields: GQ,GP (lowercase allowed) []\n"); + fprintf(stderr, " -F, --prior-freqs use prior allele frequencies\n"); + fprintf(stderr, " -g, --gvcf ,[...] group non-variant sites into gVCF blocks by minimum per-sample DP\n"); + fprintf(stderr, " -i, --insert-missed output also sites missed by mpileup but present in -T\n"); + fprintf(stderr, " -M, --keep-masked-ref keep sites with masked reference allele (REF=N)\n"); + fprintf(stderr, " -V, --skip-variants skip indels/snps\n"); + fprintf(stderr, " -v, --variants-only output variant sites only\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Consensus/variant calling options:\n"); + fprintf(stderr, " -c, --consensus-caller the original calling method (conflicts with -m)\n"); + fprintf(stderr, " -C, --constrain one of: alleles, trio (see manual)\n"); + fprintf(stderr, " -m, --multiallelic-caller alternative model for multiallelic and rare-variant calling (conflicts with -c)\n"); + fprintf(stderr, " -n, --novel-rate ,[...] likelihood of novel mutation for constrained trio calling, see man page for details [1e-8,1e-9,1e-9]\n"); + fprintf(stderr, " -p, --pval-threshold variant if P(ref|D) mutation rate (use bigger for greater sensitivity), use with -m [1.1e-3]\n"); + + // todo (and more) + // fprintf(stderr, "\nContrast calling and association test options:\n"); + // fprintf(stderr, " -1 INT number of group-1 samples [0]\n"); + // fprintf(stderr, " -C FLOAT posterior constrast for LRTaux.min_lrt); + // fprintf(stderr, " -U INT number of permutations for association testing (effective with -1) [0]\n"); + // fprintf(stderr, " -X FLOAT only perform permutations for P(chi^2)aux.min_perm_p); + fprintf(stderr, "\n"); + exit(-1); +} + +int main_vcfcall(int argc, char *argv[]) +{ + char *ploidy_fname = NULL, *ploidy = NULL; + args_t args; + memset(&args, 0, sizeof(args_t)); + args.argc = argc; args.argv = argv; + args.aux.prior_type = -1; + args.aux.indel_frac = -1; + args.aux.theta = 1.1e-3; + args.aux.pref = 0.5; + args.aux.min_perm_p = 0.01; + args.aux.min_lrt = 1; + args.flag = CF_ACGT_ONLY; + args.output_fname = "-"; + args.output_type = FT_VCF; + args.n_threads = 0; + args.record_cmd_line = 1; + args.aux.trio_Pm_SNPs = 1 - 1e-8; + args.aux.trio_Pm_ins = args.aux.trio_Pm_del = 1 - 1e-9; + + int c; + static struct option loptions[] = + { + {"help",no_argument,NULL,'h'}, + {"format-fields",required_argument,NULL,'f'}, + {"prior-freqs",required_argument,NULL,'F'}, + {"gvcf",required_argument,NULL,'g'}, + {"output",required_argument,NULL,'o'}, + {"output-type",required_argument,NULL,'O'}, + {"regions",required_argument,NULL,'r'}, + {"regions-file",required_argument,NULL,'R'}, + {"samples",required_argument,NULL,'s'}, + {"samples-file",required_argument,NULL,'S'}, + {"targets",required_argument,NULL,'t'}, + {"targets-file",required_argument,NULL,'T'}, + {"threads",required_argument,NULL,9}, + {"keep-alts",no_argument,NULL,'A'}, + {"insert-missed",no_argument,NULL,'i'}, + {"skip-Ns",no_argument,NULL,'N'}, // now the new default + {"keep-masked-refs",no_argument,NULL,'M'}, + {"skip-variants",required_argument,NULL,'V'}, + {"variants-only",no_argument,NULL,'v'}, + {"consensus-caller",no_argument,NULL,'c'}, + {"constrain",required_argument,NULL,'C'}, + {"multiallelic-caller",no_argument,NULL,'m'}, + {"pval-threshold",required_argument,NULL,'p'}, + {"prior",required_argument,NULL,'P'}, + {"novel-rate",required_argument,NULL,'n'}, + {"ploidy",required_argument,NULL,1}, + {"ploidy-file",required_argument,NULL,2}, + {"chromosome-X",no_argument,NULL,'X'}, + {"chromosome-Y",no_argument,NULL,'Y'}, + {"no-version",no_argument,NULL,8}, + {NULL,0,NULL,0} + }; + + char *tmp = NULL; + while ((c = getopt_long(argc, argv, "h?o:O:r:R:s:S:t:T:ANMV:vcmp:C:n:P:f:ig:XYF:", loptions, NULL)) >= 0) + { + switch (c) + { + case 2 : ploidy_fname = optarg; break; + case 1 : ploidy = optarg; break; + case 'X': ploidy = "X"; fprintf(stderr,"Warning: -X will be deprecated, please use --ploidy instead.\n"); break; + case 'Y': ploidy = "Y"; fprintf(stderr,"Warning: -Y will be deprecated, please use --ploidy instead.\n"); break; + case 'f': args.aux.output_tags |= parse_format_flag(optarg); break; + case 'M': args.flag &= ~CF_ACGT_ONLY; break; // keep sites where REF is N + case 'N': args.flag |= CF_ACGT_ONLY; break; // omit sites where first base in REF is N (the new default) + case 'A': args.aux.flag |= CALL_KEEPALT; break; + case 'c': args.flag |= CF_CCALL; break; // the original EM based calling method + case 'i': args.flag |= CF_INS_MISSED; break; + case 'v': args.aux.flag |= CALL_VARONLY; break; + case 'F': + args.aux.prior_AN = optarg; + args.aux.prior_AC = strchr(optarg,','); + if ( !args.aux.prior_AC ) error("Expected two tags with -F (e.g. AN,AC), got \"%s\"\n",optarg); + *args.aux.prior_AC = 0; + args.aux.prior_AC++; + break; + case 'g': + args.gvcf = gvcf_init(optarg); + if ( !args.gvcf ) error("Could not parse: --gvcf %s\n", optarg); + break; + case 'o': args.output_fname = optarg; break; + case 'O': + switch (optarg[0]) { + case 'b': args.output_type = FT_BCF_GZ; break; + case 'u': args.output_type = FT_BCF; break; + case 'z': args.output_type = FT_VCF_GZ; break; + case 'v': args.output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + } + break; + case 'C': + if ( !strcasecmp(optarg,"alleles") ) args.aux.flag |= CALL_CONSTR_ALLELES; + else if ( !strcasecmp(optarg,"trio") ) args.aux.flag |= CALL_CONSTR_TRIO; + else error("Unknown argument to -C: \"%s\"\n", optarg); + break; + case 'V': + if ( !strcasecmp(optarg,"snps") ) args.flag |= CF_INDEL_ONLY; + else if ( !strcasecmp(optarg,"indels") ) args.flag |= CF_NO_INDEL; + else error("Unknown skip category \"%s\" (-S argument must be \"snps\" or \"indels\")\n", optarg); + break; + case 'm': args.flag |= CF_MCALL; break; // multiallelic calling method + case 'p': + args.aux.pref = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: --pval-threshold %s\n", optarg); + break; + case 'P': args.aux.theta = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse, expected float argument: -P %s\n", optarg); + break; + case 'n': parse_novel_rate(&args,optarg); break; + case 'r': args.regions = optarg; break; + case 'R': args.regions = optarg; args.regions_is_file = 1; break; + case 't': args.targets = optarg; break; + case 'T': args.targets = optarg; args.targets_is_file = 1; break; + case 's': args.samples_fname = optarg; break; + case 'S': args.samples_fname = optarg; args.samples_is_file = 1; break; + case 9 : args.n_threads = strtol(optarg, 0, 0); break; + case 8 : args.record_cmd_line = 0; break; + default: usage(&args); + } + } + // Sanity check options and initialize + if ( ploidy_fname ) args.ploidy = ploidy_init(ploidy_fname, 2); + else if ( ploidy ) args.ploidy = init_ploidy(ploidy); + + if ( optind>=argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) args.bcf_fname = "-"; // reading from stdin + else usage(&args); + } + else args.bcf_fname = argv[optind++]; + + if ( !ploidy_fname && !ploidy ) + { + if ( !args.samples_is_file ) fprintf(stderr,"Note: none of --samples-file, --ploidy or --ploidy-file given, assuming all sites are diploid\n"); + args.ploidy = ploidy_init_string("* * * 0 0\n* * * 1 1\n* * * 2 2\n",2); + } + + if ( !args.ploidy ) error("Could not initialize ploidy\n"); + if ( (args.flag & CF_CCALL ? 1 : 0) + (args.flag & CF_MCALL ? 1 : 0) + (args.flag & CF_QCALL ? 1 : 0) > 1 ) error("Only one of -c or -m options can be given\n"); + if ( !(args.flag & CF_CCALL) && !(args.flag & CF_MCALL) && !(args.flag & CF_QCALL) ) error("Expected -c or -m option\n"); + if ( (args.flag & CF_CCALL ? 1: 0) && args.gvcf ) error("gvcf -g option not functional with -c calling mode yet\n"); + if ( args.aux.n_perm && args.aux.ngrp1_samples<=0 ) error("Expected -1 with -U\n"); // not sure about this, please fix + if ( args.aux.flag & CALL_CONSTR_ALLELES ) + { + if ( !args.targets ) error("Expected -t or -T with \"-C alleles\"\n"); + if ( !(args.flag & CF_MCALL) ) error("The \"-C alleles\" mode requires -m\n"); + } + if ( args.flag & CF_INS_MISSED && !(args.aux.flag&CALL_CONSTR_ALLELES) ) error("The -i option requires -C alleles\n"); + if ( args.aux.flag&CALL_VARONLY && args.gvcf ) error("The two options cannot be combined: --variants-only and --gvcf\n"); + init_data(&args); + + while ( bcf_sr_next_line(args.aux.srs) ) + { + bcf1_t *bcf_rec = args.aux.srs->readers[0].buffer[0]; + if ( args.samples_map ) bcf_subset(args.aux.hdr, bcf_rec, args.nsamples, args.samples_map); + bcf_unpack(bcf_rec, BCF_UN_STR); + + // Skip unwanted sites + int i, is_indel = bcf_is_snp(bcf_rec) ? 0 : 1; + if ( (args.flag & CF_INDEL_ONLY) && !is_indel ) continue; + if ( (args.flag & CF_NO_INDEL) && is_indel ) continue; + if ( (args.flag & CF_ACGT_ONLY) && (bcf_rec->d.allele[0][0]=='N' || bcf_rec->d.allele[0][0]=='n') ) continue; // REF[0] is 'N' + + // Which allele is symbolic? All SNPs should have it, but not indels + args.aux.unseen = 0; + for (i=1; in_allele; i++) + { + if ( bcf_rec->d.allele[i][0]=='X' ) { args.aux.unseen = i; break; } // old X + if ( bcf_rec->d.allele[i][0]=='<' ) + { + if ( bcf_rec->d.allele[i][1]=='X' && bcf_rec->d.allele[i][2]=='>' ) { args.aux.unseen = i; break; } // old + if ( bcf_rec->d.allele[i][1]=='*' && bcf_rec->d.allele[i][2]=='>' ) { args.aux.unseen = i; break; } // new <*> + } + } + int is_ref = (bcf_rec->n_allele==1 || (bcf_rec->n_allele==2 && args.aux.unseen>0)) ? 1 : 0; + + if ( is_ref && args.aux.flag&CALL_VARONLY ) + continue; + + bcf_unpack(bcf_rec, BCF_UN_ALL); + if ( args.nsex ) set_ploidy(&args, bcf_rec); + + // Various output modes: QCall output (todo) + if ( args.flag & CF_QCALL ) + { + qcall(&args.aux, bcf_rec); + continue; + } + + // Calling modes which output VCFs + int ret; + if ( args.flag & CF_MCALL ) + ret = mcall(&args.aux, bcf_rec); + else + ret = ccall(&args.aux, bcf_rec); + if ( ret==-1 ) error("Something is wrong\n"); + else if ( ret==-2 ) continue; // skip the site + + // Normal output + if ( (args.aux.flag & CALL_VARONLY) && ret==0 && !args.gvcf ) continue; // not a variant + if ( args.gvcf ) + bcf_rec = gvcf_write(args.gvcf, args.out_fh, args.aux.hdr, bcf_rec, ret==1?1:0); + if ( bcf_rec ) + bcf_write1(args.out_fh, args.aux.hdr, bcf_rec); + } + if ( args.gvcf ) gvcf_write(args.gvcf, args.out_fh, args.aux.hdr, NULL, 0); + if ( args.flag & CF_INS_MISSED ) bcf_sr_regions_flush(args.aux.srs->targets); + destroy_data(&args); + return 0; +} + diff --git a/bcftools/vcfcall.c.pysam.c b/bcftools/vcfcall.c.pysam.c new file mode 100644 index 0000000..f4a0ce9 --- /dev/null +++ b/bcftools/vcfcall.c.pysam.c @@ -0,0 +1,871 @@ +#include "bcftools.pysam.h" + +/* vcfcall.c -- SNP/indel variant calling from VCF/BCF. + + Copyright (C) 2013-2016 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "call.h" +#include "prob1.h" +#include "ploidy.h" +#include "gvcf.h" + +void error(const char *format, ...); + +#ifdef _WIN32 +#define srand48(x) srand(x) +#define lrand48() rand() +#endif + +#define CF_NO_GENO 1 +#define CF_INS_MISSED (1<<1) +#define CF_CCALL (1<<2) +// (1<<3) +// (1<<4) +// (1<<5) +#define CF_ACGT_ONLY (1<<6) +#define CF_QCALL (1<<7) +#define CF_ADJLD (1<<8) +#define CF_NO_INDEL (1<<9) +#define CF_ANNO_MAX (1<<10) +#define CF_MCALL (1<<11) +#define CF_PAIRCALL (1<<12) +#define CF_QCNT (1<<13) +#define CF_INDEL_ONLY (1<<14) + +typedef struct +{ + int flag; // combination of CF_* flags above + int output_type, n_threads, record_cmd_line; + htsFile *bcf_in, *out_fh; + char *bcf_fname, *output_fname; + char **samples; // for subsampling and ploidy + int nsamples, *samples_map; // mapping from output sample names to original VCF + char *regions, *targets; // regions to process + int regions_is_file, targets_is_file; + + char *samples_fname; + int samples_is_file; + int *sample2sex; // mapping for ploidy. If negative, interpreted as -1*ploidy + int *sex2ploidy, *sex2ploidy_prev, nsex; + ploidy_t *ploidy; + gvcf_t *gvcf; + + bcf1_t *missed_line; + call_t aux; // parameters and temporary data + + int argc; + char **argv; + + // int flag, prior_type, n1, n_sub, *sublist, n_perm; + // uint32_t *trio_aux; + // char *prior_file, **subsam; + // uint8_t *ploidy; + // double theta, pref, indel_frac, min_smpl_frac, min_lrt; + // Permutation tests + // int n_perm, *seeds; + // double min_perm_p; + // void *bed; +} +args_t; + +static char **add_sample(void *name2idx, char **lines, int *nlines, int *mlines, char *name, char sex, int *ith) +{ + int ret = khash_str2int_get(name2idx, name, ith); + if ( ret==0 ) return lines; + + hts_expand(char*,(*nlines+1),*mlines,lines); + int len = strlen(name); + lines[*nlines] = (char*) malloc(len+3); + memcpy(lines[*nlines],name,len); + lines[*nlines][len] = ' '; + lines[*nlines][len+1] = sex; + lines[*nlines][len+2] = 0; + *ith = *nlines; + (*nlines)++; + khash_str2int_set(name2idx, strdup(name), *ith); + return lines; +} + +typedef struct +{ + const char *alias, *about, *ploidy; +} +ploidy_predef_t; + +static ploidy_predef_t ploidy_predefs[] = +{ + { .alias = "GRCh37", + .about = "Human Genome reference assembly GRCh37 / hg19", + .ploidy = + "X 1 60000 M 1\n" + "X 2699521 154931043 M 1\n" + "Y 1 59373566 M 1\n" + "Y 1 59373566 F 0\n" + "MT 1 16569 M 1\n" + "MT 1 16569 F 1\n" + "chrX 1 60000 M 1\n" + "chrX 2699521 154931043 M 1\n" + "chrY 1 59373566 M 1\n" + "chrY 1 59373566 F 0\n" + "chrM 1 16569 M 1\n" + "chrM 1 16569 F 1\n" + "* * * M 2\n" + "* * * F 2\n" + }, + { .alias = "GRCh38", + .about = "Human Genome reference assembly GRCh38 / hg38", + .ploidy = + "X 1 9999 M 1\n" + "X 2781480 155701381 M 1\n" + "Y 1 57227415 M 1\n" + "Y 1 57227415 F 0\n" + "MT 1 16569 M 1\n" + "MT 1 16569 F 1\n" + "chrX 1 9999 M 1\n" + "chrX 2781480 155701381 M 1\n" + "chrY 1 57227415 M 1\n" + "chrY 1 57227415 F 0\n" + "chrM 1 16569 M 1\n" + "chrM 1 16569 F 1\n" + "* * * M 2\n" + "* * * F 2\n" + }, + { .alias = "X", + .about = "Treat male samples as haploid and female as diploid regardless of the chromosome name", + .ploidy = + "* * * M 1\n" + "* * * F 2\n" + }, + { .alias = "Y", + .about = "Treat male samples as haploid and female as no-copy, regardless of the chromosome name", + .ploidy = + "* * * M 1\n" + "* * * F 0\n" + }, + { .alias = "1", + .about = "Treat all samples as haploid", + .ploidy = + "* * * * 1\n" + }, + { + .alias = NULL, + .about = NULL, + .ploidy = NULL, + } +}; + +// only 5 columns are required and the first is ignored: +// ignored,sample,father(or 0),mother(or 0),sex(1=M,2=F) +static char **parse_ped_samples(call_t *call, char **vals, int nvals, int *nsmpl) +{ + int i, j, mlines = 0, nlines = 0; + kstring_t str = {0,0,0}, fam_str = {0,0,0}; + void *name2idx = khash_str2int_init(); + char **lines = NULL; + for (i=0; infams++; + hts_expand(family_t, call->nfams, call->mfams, call->fams); + family_t *fam = &call->fams[call->nfams-1]; + fam_str.l = 0; + ksprintf(&fam_str,"father=%s, mother=%s, child=%s", col_ends[1]+1,col_ends[2]+1,col_ends[0]+1); + fam->name = strdup(fam_str.s); + + if ( !khash_str2int_has_key(name2idx, col_ends[1]+1) ) + lines = add_sample(name2idx, lines, &nlines, &mlines, col_ends[1]+1, 'M', &fam->sample[FATHER]); + if ( !khash_str2int_has_key(name2idx, col_ends[2]+1) ) + lines = add_sample(name2idx, lines, &nlines, &mlines, col_ends[2]+1, 'F', &fam->sample[MOTHER]); + + khash_str2int_get(name2idx, col_ends[0]+1, &fam->sample[CHILD]); + khash_str2int_get(name2idx, col_ends[1]+1, &fam->sample[FATHER]); + khash_str2int_get(name2idx, col_ends[2]+1, &fam->sample[MOTHER]); + } + } + free(str.s); + free(fam_str.s); + khash_str2int_destroy_free(name2idx); + + if ( i!=nvals ) // not a ped file + { + if ( i>0 ) error("Could not parse samples, not a PED format.\n"); + return NULL; + } + *nsmpl = nlines; + return lines; +} + + +/* + * Reads sample names and their ploidy (optional) from a file. + * Alternatively, if no such file exists, the file name is interpreted + * as a comma-separated list of samples. When ploidy is not present, + * the default ploidy 2 is assumed. + */ +static void set_samples(args_t *args, const char *fn, int is_file) +{ + int i, nlines; + char **lines = hts_readlist(fn, is_file, &nlines); + if ( !lines ) error("Could not read the file: %s\n", fn); + + int nsmpls; + char **smpls = parse_ped_samples(&args->aux, lines, nlines, &nsmpls); + if ( smpls ) + { + for (i=0; isamples_map = (int*) malloc(sizeof(int)*bcf_hdr_nsamples(args->aux.hdr)); // for subsetting + args->sample2sex = (int*) malloc(sizeof(int)*bcf_hdr_nsamples(args->aux.hdr)); + int dflt_sex_id = ploidy_nsex(args->ploidy) - 1; + for (i=0; iaux.hdr); i++) args->sample2sex[i] = dflt_sex_id; + + int *old2new = (int*) malloc(sizeof(int)*bcf_hdr_nsamples(args->aux.hdr)); + for (i=0; iaux.hdr); i++) old2new[i] = -1; + + int nsmpl = 0, map_needed = 0; + for (i=0; iaux.hdr, BCF_DT_SAMPLE, ss); + if ( ismpl < 0 ) { fprintf(bcftools_stderr,"Warning: No such sample in the VCF: %s\n",ss); continue; } + if ( old2new[ismpl] != -1 ) { fprintf(bcftools_stderr,"Warning: The sample is listed multiple times: %s\n",ss); continue; } + + ss = se+1; + while ( *ss && isspace(*ss) ) ss++; + if ( !*ss ) ss = "2"; // default ploidy + se = ss; + while ( *se && !isspace(*se) ) se++; + if ( se==ss ) { *xptr = x; error("Could not parse: \"%s\"\n", lines[i]); } + + if ( ss[1]==0 && (ss[0]=='0' || ss[0]=='1' || ss[0]=='2') ) + args->sample2sex[nsmpl] = -1*(ss[0]-'0'); + else + args->sample2sex[nsmpl] = ploidy_add_sex(args->ploidy, ss); + + if ( ismpl!=nsmpl ) map_needed = 1; + args->samples_map[nsmpl] = ismpl; + old2new[ismpl] = nsmpl; + nsmpl++; + } + + for (i=0; iaux.nfams; i++) + { + int j, nmiss = 0; + family_t *fam = &args->aux.fams[i]; + for (j=0; j<3; j++) + { + fam->sample[i] = old2new[fam->sample[i]]; + if ( fam->sample[i]<0 ) nmiss++; + } + assert( nmiss==0 || nmiss==3 ); + } + free(old2new); + + if ( !map_needed ) { free(args->samples_map); args->samples_map = NULL; } + + args->nsamples = nsmpl; + args->samples = lines; +} + +static void init_missed_line(args_t *args) +{ + int i; + for (i=0; iaux.hdr); i++) + { + args->aux.gts[i*2] = bcf_gt_missing; + args->aux.gts[i*2+1] = bcf_int32_vector_end; + } + args->missed_line = bcf_init1(); + bcf_update_genotypes(args->aux.hdr, args->missed_line, args->aux.gts, 2*bcf_hdr_nsamples(args->aux.hdr)); + bcf_float_set_missing(args->missed_line->qual); +} + +static void print_missed_line(bcf_sr_regions_t *regs, void *data) +{ + args_t *args = (args_t*) data; + call_t *call = &args->aux; + bcf1_t *missed = args->missed_line; + + char *ss = regs->line.s; + int i = 0; + while ( iaux.srs->targets_als-1 && *ss ) + { + if ( *ss=='\t' ) i++; + ss++; + } + if ( !*ss ) error("Could not parse: [%s] (%d)\n", regs->line.s,args->aux.srs->targets_als); + + missed->rid = bcf_hdr_name2id(call->hdr,regs->seq_names[regs->prev_seq]); + missed->pos = regs->start; + bcf_update_alleles_str(call->hdr, missed,ss); + + bcf_write1(args->out_fh, call->hdr, missed); +} + +static void init_data(args_t *args) +{ + args->aux.srs = bcf_sr_init(); + + // Open files for input and output, initialize structures + if ( args->targets ) + { + if ( bcf_sr_set_targets(args->aux.srs, args->targets, args->targets_is_file, args->aux.flag&CALL_CONSTR_ALLELES ? 3 : 0)<0 ) + error("Failed to read the targets: %s\n", args->targets); + + if ( args->aux.flag&CALL_CONSTR_ALLELES && args->flag&CF_INS_MISSED ) + { + args->aux.srs->targets->missed_reg_handler = print_missed_line; + args->aux.srs->targets->missed_reg_data = args; + } + } + if ( args->regions ) + { + if ( bcf_sr_set_regions(args->aux.srs, args->regions, args->regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions); + } + + if ( !bcf_sr_add_reader(args->aux.srs, args->bcf_fname) ) error("Failed to open %s: %s\n", args->bcf_fname,bcf_sr_strerror(args->aux.srs->errnum)); + args->aux.hdr = bcf_sr_get_header(args->aux.srs,0); + + int i; + if ( args->samples_fname ) + { + set_samples(args, args->samples_fname, args->samples_is_file); + if ( args->aux.flag&CALL_CONSTR_TRIO ) + { + if ( 3*args->aux.nfams!=args->nsamples ) error("Expected only trios in %s, sorry!\n", args->samples_fname); + fprintf(bcftools_stderr,"Detected %d samples in %d trio families\n", args->nsamples,args->aux.nfams); + } + } + if ( args->ploidy ) + { + args->nsex = ploidy_nsex(args->ploidy); + args->sex2ploidy = (int*) calloc(args->nsex,sizeof(int)); + args->sex2ploidy_prev = (int*) calloc(args->nsex,sizeof(int)); + if ( !args->nsamples ) + { + args->nsamples = bcf_hdr_nsamples(args->aux.hdr); + args->sample2sex = (int*) malloc(sizeof(int)*args->nsamples); + for (i=0; insamples; i++) args->sample2sex[i] = args->nsex - 1; + } + } + if ( args->nsamples ) + { + args->aux.ploidy = (uint8_t*) malloc(args->nsamples); + for (i=0; insamples; i++) args->aux.ploidy[i] = ploidy_max(args->ploidy); + for (i=0; insex; i++) args->sex2ploidy_prev[i] = ploidy_max(args->ploidy); + for (i=0; insamples; i++) + if ( args->sample2sex[i] >= args->nsex ) args->sample2sex[i] = args->nsex - 1; + } + + if ( args->gvcf ) + { + int id = bcf_hdr_id2int(args->aux.hdr,BCF_DT_ID,"DP"); + if ( id<0 || !bcf_hdr_idinfo_exists(args->aux.hdr,BCF_HL_FMT,id) ) error("--gvcf output mode requires FORMAT/DP tag, which is not present in the input header\n"); + gvcf_update_header(args->gvcf, args->aux.hdr); + } + + if ( args->samples_map ) + { + args->aux.hdr = bcf_hdr_subset(bcf_sr_get_header(args->aux.srs,0), args->nsamples, args->samples, args->samples_map); + if ( !args->aux.hdr ) error("Error occurred while subsetting samples\n"); + for (i=0; insamples; i++) + if ( args->samples_map[i]<0 ) error("No such sample: %s\n", args->samples[i]); + if ( !bcf_hdr_nsamples(args->aux.hdr) ) error("No matching sample found\n"); + } + else + { + args->aux.hdr = bcf_hdr_dup(bcf_sr_get_header(args->aux.srs,0)); + if ( args->samples ) + { + for (i=0; insamples; i++) + if ( bcf_hdr_id2int(args->aux.hdr,BCF_DT_SAMPLE,args->samples[i])<0 ) + error("No such sample: %s\n", args->samples[i]); + } + } + + args->out_fh = hts_open(args->output_fname, hts_bcf_wmode(args->output_type)); + if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno)); + if ( args->n_threads ) hts_set_threads(args->out_fh, args->n_threads); + + if ( args->flag & CF_QCALL ) + return; + + if ( args->flag & CF_MCALL ) + mcall_init(&args->aux); + + if ( args->flag & CF_CCALL ) + ccall_init(&args->aux); + + bcf_hdr_remove(args->aux.hdr, BCF_HL_INFO, "QS"); + bcf_hdr_remove(args->aux.hdr, BCF_HL_INFO, "I16"); + + if (args->record_cmd_line) bcf_hdr_append_version(args->aux.hdr, args->argc, args->argv, "bcftools_call"); + bcf_hdr_write(args->out_fh, args->aux.hdr); + + if ( args->flag&CF_INS_MISSED ) init_missed_line(args); +} + +static void destroy_data(args_t *args) +{ + if ( args->flag & CF_CCALL ) ccall_destroy(&args->aux); + else if ( args->flag & CF_MCALL ) mcall_destroy(&args->aux); + else if ( args->flag & CF_QCALL ) qcall_destroy(&args->aux); + int i; + if ( args->samples ) + { + for (i=0; insamples; i++) free(args->samples[i]); + } + if ( args->aux.fams ) + { + for (i=0; iaux.nfams; i++) free(args->aux.fams[i].name); + free(args->aux.fams); + } + if ( args->missed_line ) bcf_destroy(args->missed_line); + ploidy_destroy(args->ploidy); + free(args->sex2ploidy); + free(args->sex2ploidy_prev); + free(args->samples); + free(args->samples_map); + free(args->sample2sex); + free(args->aux.ploidy); + if ( args->gvcf ) gvcf_destroy(args->gvcf); + bcf_hdr_destroy(args->aux.hdr); + hts_close(args->out_fh); + bcf_sr_destroy(args->aux.srs); +} + +void parse_novel_rate(args_t *args, const char *str) +{ + if ( sscanf(str,"%le,%le,%le",&args->aux.trio_Pm_SNPs,&args->aux.trio_Pm_del,&args->aux.trio_Pm_ins)==3 ) // explicit for all + { + args->aux.trio_Pm_SNPs = 1 - args->aux.trio_Pm_SNPs; + args->aux.trio_Pm_del = 1 - args->aux.trio_Pm_del; + args->aux.trio_Pm_ins = 1 - args->aux.trio_Pm_ins; + } + else if ( sscanf(str,"%le,%le",&args->aux.trio_Pm_SNPs,&args->aux.trio_Pm_del)==2 ) // dynamic for indels + { + args->aux.trio_Pm_SNPs = 1 - args->aux.trio_Pm_SNPs; + args->aux.trio_Pm_ins = -1; // negative value for dynamic calculation + } + else if ( sscanf(str,"%le",&args->aux.trio_Pm_SNPs)==1 ) // same for all + { + args->aux.trio_Pm_SNPs = 1 - args->aux.trio_Pm_SNPs; + args->aux.trio_Pm_del = -1; + args->aux.trio_Pm_ins = -1; + } + else error("Could not parse --novel-rate %s\n", str); +} + +static int parse_format_flag(const char *str) +{ + int flag = 0; + const char *ss = str; + while ( *ss ) + { + const char *se = ss; + while ( *se && *se!=',' ) se++; + if ( !strncasecmp(ss,"GQ",se-ss) ) flag |= CALL_FMT_GQ; + else if ( !strncasecmp(ss,"GP",se-ss) ) flag |= CALL_FMT_GP; + else + { + fprintf(bcftools_stderr,"Could not parse \"%s\"\n", str); + exit(1); + } + if ( !*se ) break; + ss = se + 1; + } + return flag; +} + +static void set_ploidy(args_t *args, bcf1_t *rec) +{ + ploidy_query(args->ploidy,(char*)bcf_seqname(args->aux.hdr,rec),rec->pos,args->sex2ploidy,NULL,NULL); + + int i; + for (i=0; insex; i++) + if ( args->sex2ploidy[i]!=args->sex2ploidy_prev[i] ) break; + + if ( i==args->nsex ) return; // ploidy same as previously + + for (i=0; insamples; i++) + { + if ( args->sample2sex[i]<0 ) + args->aux.ploidy[i] = -1*args->sample2sex[i]; + else + args->aux.ploidy[i] = args->sex2ploidy[args->sample2sex[i]]; + } + int *tmp = args->sex2ploidy; args->sex2ploidy = args->sex2ploidy_prev; args->sex2ploidy_prev = tmp; +} + +ploidy_t *init_ploidy(char *alias) +{ + const ploidy_predef_t *pld = ploidy_predefs; + + int detailed = 0, len = strlen(alias); + if ( alias[len-1]=='?' ) { detailed = 1; alias[len-1] = 0; } + + while ( pld->alias && strcasecmp(alias,pld->alias) ) pld++; + + if ( !pld->alias ) + { + fprintf(bcftools_stderr,"\nPRE-DEFINED PLOIDY FILES\n\n"); + fprintf(bcftools_stderr," * Columns are: CHROM,FROM,TO,SEX,PLOIDY\n"); + fprintf(bcftools_stderr," * Coordinates are 1-based inclusive.\n"); + fprintf(bcftools_stderr," * A '*' means any value not otherwise defined.\n\n"); + pld = ploidy_predefs; + while ( pld->alias ) + { + fprintf(bcftools_stderr,"%s\n .. %s\n\n", pld->alias,pld->about); + if ( detailed ) + fprintf(bcftools_stderr,"%s\n", pld->ploidy); + pld++; + } + fprintf(bcftools_stderr,"Run as --ploidy (e.g. --ploidy GRCh37).\n"); + fprintf(bcftools_stderr,"To see the detailed ploidy definition, append a question mark (e.g. --ploidy GRCh37?).\n"); + fprintf(bcftools_stderr,"\n"); + exit(-1); + } + else if ( detailed ) + { + fprintf(bcftools_stderr,"%s", pld->ploidy); + exit(-1); + } + return ploidy_init_string(pld->ploidy,2); +} + +static void usage(args_t *args) +{ + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "About: SNP/indel variant calling from VCF/BCF. To be used in conjunction with samtools mpileup.\n"); + fprintf(bcftools_stderr, " This command replaces the former \"bcftools view\" caller. Some of the original\n"); + fprintf(bcftools_stderr, " functionality has been temporarily lost in the process of transition to htslib,\n"); + fprintf(bcftools_stderr, " but will be added back on popular demand. The original calling model can be\n"); + fprintf(bcftools_stderr, " invoked with the -c option.\n"); + fprintf(bcftools_stderr, "Usage: bcftools call [options] \n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "File format options:\n"); + fprintf(bcftools_stderr, " --no-version do not append version and command line to the header\n"); + fprintf(bcftools_stderr, " -o, --output write output to a file [standard output]\n"); + fprintf(bcftools_stderr, " -O, --output-type output type: 'b' compressed BCF; 'u' uncompressed BCF; 'z' compressed VCF; 'v' uncompressed VCF [v]\n"); + fprintf(bcftools_stderr, " --ploidy [?] predefined ploidy, 'list' to print available settings, append '?' for details\n"); + fprintf(bcftools_stderr, " --ploidy-file space/tab-delimited list of CHROM,FROM,TO,SEX,PLOIDY\n"); + fprintf(bcftools_stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(bcftools_stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(bcftools_stderr, " -s, --samples list of samples to include [all samples]\n"); + fprintf(bcftools_stderr, " -S, --samples-file PED file or a file with an optional column with sex (see man page for details) [all samples]\n"); + fprintf(bcftools_stderr, " -t, --targets similar to -r but streams rather than index-jumps\n"); + fprintf(bcftools_stderr, " -T, --targets-file similar to -R but streams rather than index-jumps\n"); + fprintf(bcftools_stderr, " --threads number of extra output compression threads [0]\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Input/output options:\n"); + fprintf(bcftools_stderr, " -A, --keep-alts keep all possible alternate alleles at variant sites\n"); + fprintf(bcftools_stderr, " -f, --format-fields output format fields: GQ,GP (lowercase allowed) []\n"); + fprintf(bcftools_stderr, " -F, --prior-freqs use prior allele frequencies\n"); + fprintf(bcftools_stderr, " -g, --gvcf ,[...] group non-variant sites into gVCF blocks by minimum per-sample DP\n"); + fprintf(bcftools_stderr, " -i, --insert-missed output also sites missed by mpileup but present in -T\n"); + fprintf(bcftools_stderr, " -M, --keep-masked-ref keep sites with masked reference allele (REF=N)\n"); + fprintf(bcftools_stderr, " -V, --skip-variants skip indels/snps\n"); + fprintf(bcftools_stderr, " -v, --variants-only output variant sites only\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Consensus/variant calling options:\n"); + fprintf(bcftools_stderr, " -c, --consensus-caller the original calling method (conflicts with -m)\n"); + fprintf(bcftools_stderr, " -C, --constrain one of: alleles, trio (see manual)\n"); + fprintf(bcftools_stderr, " -m, --multiallelic-caller alternative model for multiallelic and rare-variant calling (conflicts with -c)\n"); + fprintf(bcftools_stderr, " -n, --novel-rate ,[...] likelihood of novel mutation for constrained trio calling, see man page for details [1e-8,1e-9,1e-9]\n"); + fprintf(bcftools_stderr, " -p, --pval-threshold variant if P(ref|D) mutation rate (use bigger for greater sensitivity), use with -m [1.1e-3]\n"); + + // todo (and more) + // fprintf(bcftools_stderr, "\nContrast calling and association test options:\n"); + // fprintf(bcftools_stderr, " -1 INT number of group-1 samples [0]\n"); + // fprintf(bcftools_stderr, " -C FLOAT posterior constrast for LRTaux.min_lrt); + // fprintf(bcftools_stderr, " -U INT number of permutations for association testing (effective with -1) [0]\n"); + // fprintf(bcftools_stderr, " -X FLOAT only perform permutations for P(chi^2)aux.min_perm_p); + fprintf(bcftools_stderr, "\n"); + exit(-1); +} + +int main_vcfcall(int argc, char *argv[]) +{ + char *ploidy_fname = NULL, *ploidy = NULL; + args_t args; + memset(&args, 0, sizeof(args_t)); + args.argc = argc; args.argv = argv; + args.aux.prior_type = -1; + args.aux.indel_frac = -1; + args.aux.theta = 1.1e-3; + args.aux.pref = 0.5; + args.aux.min_perm_p = 0.01; + args.aux.min_lrt = 1; + args.flag = CF_ACGT_ONLY; + args.output_fname = "-"; + args.output_type = FT_VCF; + args.n_threads = 0; + args.record_cmd_line = 1; + args.aux.trio_Pm_SNPs = 1 - 1e-8; + args.aux.trio_Pm_ins = args.aux.trio_Pm_del = 1 - 1e-9; + + int c; + static struct option loptions[] = + { + {"help",no_argument,NULL,'h'}, + {"format-fields",required_argument,NULL,'f'}, + {"prior-freqs",required_argument,NULL,'F'}, + {"gvcf",required_argument,NULL,'g'}, + {"output",required_argument,NULL,'o'}, + {"output-type",required_argument,NULL,'O'}, + {"regions",required_argument,NULL,'r'}, + {"regions-file",required_argument,NULL,'R'}, + {"samples",required_argument,NULL,'s'}, + {"samples-file",required_argument,NULL,'S'}, + {"targets",required_argument,NULL,'t'}, + {"targets-file",required_argument,NULL,'T'}, + {"threads",required_argument,NULL,9}, + {"keep-alts",no_argument,NULL,'A'}, + {"insert-missed",no_argument,NULL,'i'}, + {"skip-Ns",no_argument,NULL,'N'}, // now the new default + {"keep-masked-refs",no_argument,NULL,'M'}, + {"skip-variants",required_argument,NULL,'V'}, + {"variants-only",no_argument,NULL,'v'}, + {"consensus-caller",no_argument,NULL,'c'}, + {"constrain",required_argument,NULL,'C'}, + {"multiallelic-caller",no_argument,NULL,'m'}, + {"pval-threshold",required_argument,NULL,'p'}, + {"prior",required_argument,NULL,'P'}, + {"novel-rate",required_argument,NULL,'n'}, + {"ploidy",required_argument,NULL,1}, + {"ploidy-file",required_argument,NULL,2}, + {"chromosome-X",no_argument,NULL,'X'}, + {"chromosome-Y",no_argument,NULL,'Y'}, + {"no-version",no_argument,NULL,8}, + {NULL,0,NULL,0} + }; + + char *tmp = NULL; + while ((c = getopt_long(argc, argv, "h?o:O:r:R:s:S:t:T:ANMV:vcmp:C:n:P:f:ig:XYF:", loptions, NULL)) >= 0) + { + switch (c) + { + case 2 : ploidy_fname = optarg; break; + case 1 : ploidy = optarg; break; + case 'X': ploidy = "X"; fprintf(bcftools_stderr,"Warning: -X will be deprecated, please use --ploidy instead.\n"); break; + case 'Y': ploidy = "Y"; fprintf(bcftools_stderr,"Warning: -Y will be deprecated, please use --ploidy instead.\n"); break; + case 'f': args.aux.output_tags |= parse_format_flag(optarg); break; + case 'M': args.flag &= ~CF_ACGT_ONLY; break; // keep sites where REF is N + case 'N': args.flag |= CF_ACGT_ONLY; break; // omit sites where first base in REF is N (the new default) + case 'A': args.aux.flag |= CALL_KEEPALT; break; + case 'c': args.flag |= CF_CCALL; break; // the original EM based calling method + case 'i': args.flag |= CF_INS_MISSED; break; + case 'v': args.aux.flag |= CALL_VARONLY; break; + case 'F': + args.aux.prior_AN = optarg; + args.aux.prior_AC = strchr(optarg,','); + if ( !args.aux.prior_AC ) error("Expected two tags with -F (e.g. AN,AC), got \"%s\"\n",optarg); + *args.aux.prior_AC = 0; + args.aux.prior_AC++; + break; + case 'g': + args.gvcf = gvcf_init(optarg); + if ( !args.gvcf ) error("Could not parse: --gvcf %s\n", optarg); + break; + case 'o': args.output_fname = optarg; break; + case 'O': + switch (optarg[0]) { + case 'b': args.output_type = FT_BCF_GZ; break; + case 'u': args.output_type = FT_BCF; break; + case 'z': args.output_type = FT_VCF_GZ; break; + case 'v': args.output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + } + break; + case 'C': + if ( !strcasecmp(optarg,"alleles") ) args.aux.flag |= CALL_CONSTR_ALLELES; + else if ( !strcasecmp(optarg,"trio") ) args.aux.flag |= CALL_CONSTR_TRIO; + else error("Unknown argument to -C: \"%s\"\n", optarg); + break; + case 'V': + if ( !strcasecmp(optarg,"snps") ) args.flag |= CF_INDEL_ONLY; + else if ( !strcasecmp(optarg,"indels") ) args.flag |= CF_NO_INDEL; + else error("Unknown skip category \"%s\" (-S argument must be \"snps\" or \"indels\")\n", optarg); + break; + case 'm': args.flag |= CF_MCALL; break; // multiallelic calling method + case 'p': + args.aux.pref = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: --pval-threshold %s\n", optarg); + break; + case 'P': args.aux.theta = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse, expected float argument: -P %s\n", optarg); + break; + case 'n': parse_novel_rate(&args,optarg); break; + case 'r': args.regions = optarg; break; + case 'R': args.regions = optarg; args.regions_is_file = 1; break; + case 't': args.targets = optarg; break; + case 'T': args.targets = optarg; args.targets_is_file = 1; break; + case 's': args.samples_fname = optarg; break; + case 'S': args.samples_fname = optarg; args.samples_is_file = 1; break; + case 9 : args.n_threads = strtol(optarg, 0, 0); break; + case 8 : args.record_cmd_line = 0; break; + default: usage(&args); + } + } + // Sanity check options and initialize + if ( ploidy_fname ) args.ploidy = ploidy_init(ploidy_fname, 2); + else if ( ploidy ) args.ploidy = init_ploidy(ploidy); + + if ( optind>=argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) args.bcf_fname = "-"; // reading from stdin + else usage(&args); + } + else args.bcf_fname = argv[optind++]; + + if ( !ploidy_fname && !ploidy ) + { + if ( !args.samples_is_file ) fprintf(bcftools_stderr,"Note: none of --samples-file, --ploidy or --ploidy-file given, assuming all sites are diploid\n"); + args.ploidy = ploidy_init_string("* * * 0 0\n* * * 1 1\n* * * 2 2\n",2); + } + + if ( !args.ploidy ) error("Could not initialize ploidy\n"); + if ( (args.flag & CF_CCALL ? 1 : 0) + (args.flag & CF_MCALL ? 1 : 0) + (args.flag & CF_QCALL ? 1 : 0) > 1 ) error("Only one of -c or -m options can be given\n"); + if ( !(args.flag & CF_CCALL) && !(args.flag & CF_MCALL) && !(args.flag & CF_QCALL) ) error("Expected -c or -m option\n"); + if ( (args.flag & CF_CCALL ? 1: 0) && args.gvcf ) error("gvcf -g option not functional with -c calling mode yet\n"); + if ( args.aux.n_perm && args.aux.ngrp1_samples<=0 ) error("Expected -1 with -U\n"); // not sure about this, please fix + if ( args.aux.flag & CALL_CONSTR_ALLELES ) + { + if ( !args.targets ) error("Expected -t or -T with \"-C alleles\"\n"); + if ( !(args.flag & CF_MCALL) ) error("The \"-C alleles\" mode requires -m\n"); + } + if ( args.flag & CF_INS_MISSED && !(args.aux.flag&CALL_CONSTR_ALLELES) ) error("The -i option requires -C alleles\n"); + if ( args.aux.flag&CALL_VARONLY && args.gvcf ) error("The two options cannot be combined: --variants-only and --gvcf\n"); + init_data(&args); + + while ( bcf_sr_next_line(args.aux.srs) ) + { + bcf1_t *bcf_rec = args.aux.srs->readers[0].buffer[0]; + if ( args.samples_map ) bcf_subset(args.aux.hdr, bcf_rec, args.nsamples, args.samples_map); + bcf_unpack(bcf_rec, BCF_UN_STR); + + // Skip unwanted sites + int i, is_indel = bcf_is_snp(bcf_rec) ? 0 : 1; + if ( (args.flag & CF_INDEL_ONLY) && !is_indel ) continue; + if ( (args.flag & CF_NO_INDEL) && is_indel ) continue; + if ( (args.flag & CF_ACGT_ONLY) && (bcf_rec->d.allele[0][0]=='N' || bcf_rec->d.allele[0][0]=='n') ) continue; // REF[0] is 'N' + + // Which allele is symbolic? All SNPs should have it, but not indels + args.aux.unseen = 0; + for (i=1; in_allele; i++) + { + if ( bcf_rec->d.allele[i][0]=='X' ) { args.aux.unseen = i; break; } // old X + if ( bcf_rec->d.allele[i][0]=='<' ) + { + if ( bcf_rec->d.allele[i][1]=='X' && bcf_rec->d.allele[i][2]=='>' ) { args.aux.unseen = i; break; } // old + if ( bcf_rec->d.allele[i][1]=='*' && bcf_rec->d.allele[i][2]=='>' ) { args.aux.unseen = i; break; } // new <*> + } + } + int is_ref = (bcf_rec->n_allele==1 || (bcf_rec->n_allele==2 && args.aux.unseen>0)) ? 1 : 0; + + if ( is_ref && args.aux.flag&CALL_VARONLY ) + continue; + + bcf_unpack(bcf_rec, BCF_UN_ALL); + if ( args.nsex ) set_ploidy(&args, bcf_rec); + + // Various output modes: QCall output (todo) + if ( args.flag & CF_QCALL ) + { + qcall(&args.aux, bcf_rec); + continue; + } + + // Calling modes which output VCFs + int ret; + if ( args.flag & CF_MCALL ) + ret = mcall(&args.aux, bcf_rec); + else + ret = ccall(&args.aux, bcf_rec); + if ( ret==-1 ) error("Something is wrong\n"); + else if ( ret==-2 ) continue; // skip the site + + // Normal output + if ( (args.aux.flag & CALL_VARONLY) && ret==0 && !args.gvcf ) continue; // not a variant + if ( args.gvcf ) + bcf_rec = gvcf_write(args.gvcf, args.out_fh, args.aux.hdr, bcf_rec, ret==1?1:0); + if ( bcf_rec ) + bcf_write1(args.out_fh, args.aux.hdr, bcf_rec); + } + if ( args.gvcf ) gvcf_write(args.gvcf, args.out_fh, args.aux.hdr, NULL, 0); + if ( args.flag & CF_INS_MISSED ) bcf_sr_regions_flush(args.aux.srs->targets); + destroy_data(&args); + return 0; +} + diff --git a/bcftools/vcfcnv.c b/bcftools/vcfcnv.c new file mode 100644 index 0000000..11c55bd --- /dev/null +++ b/bcftools/vcfcnv.c @@ -0,0 +1,1418 @@ +/* The MIT License + + Copyright (c) 2014-2015 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ + +/* + Known issues: + - The --AF-file option behaves like --targets-file, sites not listed in the AFs + are skipped. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "HMM.h" +#include "rbuf.h" + +#define DBG0 0 + +#define N_STATES 4 +#define CN0 0 +#define CN1 1 +#define CN2 2 +#define CN3 3 + +typedef struct +{ + float mean, dev2, norm; +} +gauss_param_t; + +typedef struct +{ + char *name; + int idx; // VCF sample index + float *lrr,*baf, baf_dev2, baf_dev2_dflt, lrr_dev2; + float cell_frac, cell_frac_dflt; + gauss_param_t gauss_param[18]; + double pobs[N_STATES]; + FILE *dat_fh, *cn_fh, *summary_fh; + char *dat_fname, *cn_fname, *summary_fname; +} +sample_t; + +typedef struct _args_t +{ + bcf_srs_t *files; + bcf_hdr_t *hdr; + int prev_rid, ntot, nused; + sample_t query_sample, control_sample; + + int nstates; // number of states: N_STATES for one sample, N_STATES^2 for two samples + double lrr_bias, baf_bias; // LRR/BAF weights + double same_prob, ij_prob; // prior of both samples being the same and the transition probability P(i|j) + double err_prob; // constant probability of erroneous measurement + float *nonref_afs, nonref_af, nonref_af_dflt, fRR, fRA, fAA, *tmpf; + unsigned long int nRR, nRA, nAA; + int mtmpf; + + double *tprob, *tprob_arr; // array of transition matrices, precalculated up to ntprob_arr positions + double *iprobs; // states' initial probabilities + int ntprob_arr; + + hmm_t *hmm; + double *eprob; // emission probs [nstates*nsites,msites] + uint32_t *sites; // positions [nsites,msites] + int nsites, msites; + + double baum_welch_th, optimize_frac; + float plot_th; + FILE *summary_fh; + char **argv, *regions_list, *summary_fname, *output_dir; + char *targets_list, *af_fname; + int argc, verbose, lrr_smooth_win; +} +args_t; + +FILE *open_file(char **fname, const char *mode, const char *fmt, ...); + +static inline void hmm2cn_state(int nstates, int i, int *a, int *b) +{ + *a = i / N_STATES; + *b = i - (*a)*N_STATES; +} +static double *init_tprob_matrix(int ndim, double ij_prob, double same_prob) +{ + int i,j; + double *mat = (double*) malloc(sizeof(double)*ndim*ndim); + + assert( ndim==N_STATES || ndim==N_STATES*N_STATES); + + if ( ndim==N_STATES ) // one sample + { + double pii = 1 - ij_prob*(N_STATES-1); + if ( pii < ij_prob ) error("Error: -x set a bit too high, P(x|x) < P(x|y): %e vs %e\n", pii,ij_prob); + for (j=0; jdat_fh = open_file(&smpl->dat_fname,"w","%s/dat.%s.tab",dir,smpl->name); + if ( !smpl->dat_fh ) error("Error opening file: %s/dat.%s.tab\n",dir,smpl->name); + + smpl->cn_fh = open_file(&smpl->cn_fname,"w","%s/cn.%s.tab",dir,smpl->name); + if ( !smpl->cn_fh ) error("Error opening file: %s/cn.%s.tab\n",dir,smpl->name); + + smpl->summary_fh = open_file(&smpl->summary_fname,"w","%s/summary.%s.tab",dir,smpl->name); + if ( !smpl->summary_fh ) error("Error opening file: %s/summary.%s.tab\n",dir,smpl->name); + + fprintf(smpl->dat_fh,"# [1]Chromosome\t[2]Position\t[3]BAF\t[4]LRR\n"); + fprintf(smpl->cn_fh,"# [1]Chromosome\t[2]Position\t[3]CN\t[4]P(CN0)\t[5]P(CN1)\t[6]P(CN2)\t[7]P(CN3)\n"); + fprintf(smpl->summary_fh,"# RG, Regions [2]Chromosome\t[3]Start\t[4]End\t[5]Copy Number state\t[6]Quality\t[7]nSites\t[8]nHETs\n"); +} +static void close_sample_files(sample_t *smpl) +{ + fclose(smpl->dat_fh); + fclose(smpl->cn_fh); + fclose(smpl->summary_fh); +} + +static double norm_cdf(double mean, double dev); +static void init_data(args_t *args) +{ + args->prev_rid = -1; + args->hdr = args->files->readers[0].header; + + if ( !args->query_sample.name ) + { + if ( bcf_hdr_nsamples(args->hdr)>1 ) error("Multi-sample VCF, missing the -s option\n"); + args->query_sample.name = strdup(args->hdr->samples[0]); + } + else + if ( bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,args->query_sample.name)<0 ) error("The sample \"%s\" not found\n", args->query_sample.name); + if ( !args->files->readers[0].file->is_bin ) + { + int ret; + kstring_t tmp = {0,0,0}; + if ( args->control_sample.name ) + { + ksprintf(&tmp, "%s,%s", args->query_sample.name,args->control_sample.name); + ret = bcf_hdr_set_samples(args->hdr, tmp.s, 0); + } + else + { + ret = bcf_hdr_set_samples(args->hdr, args->query_sample.name, 0); + tmp.s = args->query_sample.name; + } + if ( ret<0 ) error("Error parsing the list of samples: %s\n", tmp.s); + else if ( ret>0 ) error("The sample not found in the VCF: %s\n", ret==1 ? args->query_sample.name : args->control_sample.name); + + if ( args->control_sample.name ) free(tmp.s); + } + args->query_sample.idx = bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,args->query_sample.name); + args->control_sample.idx = args->control_sample.name ? bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,args->control_sample.name) : -1; + args->nstates = args->control_sample.name ? N_STATES*N_STATES : N_STATES; + args->tprob = init_tprob_matrix(args->nstates, args->ij_prob, args->same_prob); + args->iprobs = init_iprobs(args->nstates, args->same_prob); + args->hmm = hmm_init(args->nstates, args->tprob, 10000); + hmm_init_states(args->hmm, args->iprobs); + + args->summary_fh = stdout; + init_sample_files(&args->query_sample, args->output_dir); + if ( args->control_sample.name ) + { + init_sample_files(&args->control_sample, args->output_dir); + args->summary_fh = open_file(&args->summary_fname,"w","%s/summary.tab",args->output_dir); + } + else + args->summary_fh = NULL; // one sample only, no two-file summary + + + int i; + FILE *fh = args->summary_fh ? args->summary_fh : args->query_sample.summary_fh; + + fprintf(fh, "# This file was produced by: bcftools cnv(%s+htslib-%s)\n", bcftools_version(),hts_version()); + fprintf(fh, "# The command line was:\tbcftools %s", args->argv[0]); + for (i=1; iargc; i++) fprintf(fh, " %s",args->argv[i]); + if ( args->control_sample.name ) + fprintf(fh, "\n#\n" + "# RG, Regions\t[2]Chromosome\t[3]Start\t[4]End\t[5]Copy number:%s\t[6]Copy number:%s\t[7]Quality" + "\t[8]nSites in (5)\t[9]nHETs in (5)\t[10]nSites in (6)\t[11]nHETs in(6)\n", + args->query_sample.name,args->control_sample.name + ); + else + fprintf(fh, "\n#\n" + "# RG, Regions\t[2]Chromosome\t[3]Start\t[4]End\t[5]Copy number:%s\t[6]Quality\t[7]nSites\t[8]nHETs\n", + args->query_sample.name + ); + if ( args->optimize_frac ) + { + fprintf(args->query_sample.summary_fh, "# CF, cell fraction estimate\t[2]Chromosome\t[3]Start\t[4]End\t[5]Cell fraction\t[6]BAF deviation\n"); + if ( args->control_sample.name ) + { + fprintf(args->control_sample.summary_fh, "# CF, cell fraction estimate\t[2]Chromosome\t[3]Start\t[4]End\t[5]Cell fraction\t[6]BAF deviation\n"); + fprintf(args->summary_fh, "# CF, cell fraction estimate\t[2]Chromosome\t[3]Start\t[4]End\t" + "[5]Cell fraction:%s\t[6]Cell fraction:%s\t[7]BAF deviation:%s\t[8]BAF deviation:%s\n", + args->query_sample.name,args->control_sample.name, + args->query_sample.name,args->control_sample.name + ); + } + } +} + +char *msprintf(const char *fmt, ...); +static void py_plot_cnv(char *script, float th) +{ + if ( th>100 ) return; // create no plots + + char *cmd = msprintf("python %s -p %f", script, th); + int ret = system(cmd); + if ( ret) fprintf(stderr, "The command returned non-zero status %d: %s\n", ret, cmd); + free(cmd); +} + +static void plot_sample(args_t *args, sample_t *smpl) +{ + char *fname; + FILE *fp = open_file(&fname,"w","%s/plot.%s.py",args->output_dir,smpl->name); + fprintf(fp, + "import matplotlib as mpl\n" + "mpl.use('Agg')\n" + "import matplotlib.pyplot as plt\n" + "import csv\n" + "import numpy as np\n" + "csv.register_dialect('tab', delimiter='\\t', quoting=csv.QUOTE_NONE)\n" + "\n" + "dat = {}\n" + "with open('%s', 'rb') as f:\n" + " reader = csv.reader(f, 'tab')\n" + " for row in reader:\n" + " chr = row[0]\n" + " if chr[0]=='#': continue\n" + " if chr not in dat: dat[chr] = []\n" + " dat[chr].append([row[1], float(row[2]), float(row[3])])\n" + "\n" + "cnv = {}\n" + "with open('%s', 'rb') as f:\n" + " reader = csv.reader(f, 'tab')\n" + " for row in reader:\n" + " chr = row[0]\n" + " if chr[0]=='#': continue\n" + " if chr not in cnv: cnv[chr] = []\n" + " row[2] = int(row[2]) + 0.5\n" + " cnv[chr].append(row[1:])\n" + "\n" + "for chr in dat:\n" + " fig,(ax1, ax2, ax3) = plt.subplots(3,1,figsize=(10,8),sharex=True)\n" + " ax1.plot([x[0] for x in dat[chr]],[x[2] for x in dat[chr]], '.', ms=3)\n" + " ax2.plot([x[0] for x in dat[chr]],[x[1] for x in dat[chr]], '.', ms=3)\n" + " cn_dat = cnv[chr]\n" + " xgrid = [float(x[0]) for x in cn_dat]\n" + " ygrid = np.linspace(0,5,6)\n" + " xgrid, ygrid = np.meshgrid(xgrid, ygrid)\n" + " heat = np.zeros_like(xgrid)\n" + " for x in range(len(heat[0])-1):\n" + " heat[0][x] = cn_dat[x][2]\n" + " heat[1][x] = cn_dat[x][3]\n" + " heat[2][x] = cn_dat[x][4]\n" + " heat[3][x] = cn_dat[x][5]\n" + " mesh = ax3.pcolormesh(xgrid, ygrid, heat, cmap='bwr_r')\n" + " mesh.set_clim(vmin=-1,vmax=1)\n" + " ax3.plot([x[0] for x in cn_dat],[x[1] for x in cn_dat],'.-',ms=3,color='black')\n" + " fig.suptitle('%s (chr '+chr+')')\n" + " ax1.set_title('Log-R intensities Ratio',fontsize=10)\n" + " ax2.set_title('B-Allele Frequency',fontsize=10)\n" + " ax3.set_title('Copy Number Variation',fontsize=10)\n" + " ax1.set_ylabel('LRR')\n" + " ax2.set_ylabel('BAF')\n" + " ax3.set_ylabel('CN')\n" + " ax3.set_xlabel('Coordinate (chrom '+chr+')',fontsize=10)\n" + " ax3.set_ylim(-0.1,4.1)\n" + " ax3.set_yticks([0.5,1.5,2.5,3.5])\n" + " ax3.set_yticklabels(['CN0','CN1','CN2','CN3'])\n" + " plt.subplots_adjust(left=0.08,right=0.95,bottom=0.08,top=0.92)\n" + " plt.savefig('%s/plot.%s.chr'+chr+'.png')\n" + " plt.close()\n" + "\n", + smpl->dat_fname,smpl->cn_fname,smpl->name,args->output_dir,smpl->name + ); + fclose(fp); + + py_plot_cnv(fname, args->plot_th); + free(fname); +} + +static void create_plots(args_t *args) +{ + close_sample_files(&args->query_sample); + if ( args->control_sample.name ) close_sample_files(&args->control_sample); + if ( args->summary_fh ) fclose(args->summary_fh); + + if ( !args->control_sample.name ) + { + plot_sample(args, &args->query_sample); + return; + } + + char *fname; + FILE *fp = open_file(&fname,"w","%s/plot.%s.%s.py",args->output_dir,args->control_sample.name,args->query_sample.name); + fprintf(fp, + "import matplotlib as mpl\n" + "mpl.use('Agg')\n" + "import matplotlib.pyplot as plt\n" + "import csv,argparse\n" + "import numpy as np\n" + "csv.register_dialect('tab', delimiter='\\t', quoting=csv.QUOTE_NONE)\n" + "\n" + "control_sample = '%s'\n" + "query_sample = '%s'\n" + "\n" + "parser = argparse.ArgumentParser()\n" + "parser.add_argument('-p', '--plot-threshold', type=float)\n" + "parser.add_argument('-c', '--chromosome')\n" + "args = parser.parse_args()\n" + "if args.plot_threshold==None: args.plot_threshold = 0\n" + "\n" + "def chroms_to_plot(th):\n" + " dat = {}\n" + " with open('%s/summary.tab', 'rb') as f:\n" + " reader = csv.reader(f, 'tab')\n" + " for row in reader:\n" + " if row[0]!='RG': continue\n" + " chr = row[1]\n" + " start = row[2]\n" + " end = row[3]\n" + " qual = float(row[6])\n" + " if row[4]==row[5] and args.plot_threshold!=0: continue\n" + " if chr not in dat: dat[chr] = 0.0\n" + " if qual > dat[chr]: dat[chr] = qual\n" + " out = {}\n" + " for chr in dat:\n" + " if (chr not in dat) or dat[chr]0: diff.append([b[i-1][0],b[i-1][1],a[i-1][1]])\n" + " diff.append([b[i][0],b[i][1],a[i][1]])\n" + " elif len(diff):\n" + " diff.append([b[i][0],b[i][1],a[i][1]])\n" + " out.append(diff)\n" + " diff = []\n" + " if len(diff): out.append(diff)\n" + " return out\n" + "\n" + "for chr in sorted(plot_chroms.keys()):\n" + " control_dat = []\n" + " control_cnv = []\n" + " query_dat = []\n" + " query_cnv = []\n" + " read_dat('%s',control_dat,chr)\n" + " read_dat('%s',query_dat,chr)\n" + " read_cnv('%s',control_cnv,chr)\n" + " read_cnv('%s',query_cnv,chr)\n" + "\n" + " fig,(ax1,ax2,ax3,ax4,ax5,ax6) = plt.subplots(6,1,figsize=(10,8),sharex=True)\n" + " ax1.plot([x[0] for x in control_dat],[x[2] for x in control_dat], '.', ms=3,color='red')\n" + " ax2.plot([x[0] for x in control_dat],[x[1] for x in control_dat], '.', ms=3,color='red')\n" + " cn_dat = control_cnv\n" + " xgrid = [float(x[0]) for x in cn_dat]\n" + " ygrid = np.linspace(0,5,6)\n" + " xgrid, ygrid = np.meshgrid(xgrid, ygrid)\n" + " heat = np.zeros_like(xgrid)\n" + " for x in range(len(heat[0])-1):\n" + " heat[0][x] = cn_dat[x][2]\n" + " heat[1][x] = cn_dat[x][3]\n" + " heat[2][x] = cn_dat[x][4]\n" + " heat[3][x] = cn_dat[x][5]\n" + " mesh = ax3.pcolormesh(xgrid, ygrid, heat, cmap='bwr')\n" + " mesh.set_clim(vmin=-1,vmax=1)\n" + " ax3.plot([x[0] for x in cn_dat],[x[1] for x in cn_dat],'-',ms=3,color='black',lw=1.7)\n" + "\n" + " ax6.plot([x[0] for x in query_dat],[x[2] for x in query_dat], '.', ms=3)\n" + " ax5.plot([x[0] for x in query_dat],[x[1] for x in query_dat], '.', ms=3)\n" + " cn_dat = query_cnv\n" + " xgrid = [float(x[0]) for x in cn_dat]\n" + " ygrid = np.linspace(0,5,6)\n" + " xgrid, ygrid = np.meshgrid(xgrid, ygrid)\n" + " heat = np.zeros_like(xgrid)\n" + " for x in range(len(heat[0])-1):\n" + " heat[0][x] = cn_dat[x][2]\n" + " heat[1][x] = cn_dat[x][3]\n" + " heat[2][x] = cn_dat[x][4]\n" + " heat[3][x] = cn_dat[x][5]\n" + " mesh = ax4.pcolormesh(xgrid, ygrid, heat, cmap='bwr_r')\n" + " mesh.set_clim(vmin=-1,vmax=1)\n" + " ax4.plot([x[0] for x in cn_dat],[x[1] for x in cn_dat],'-',ms=3,color='black',lw=1.7)\n" + " ax3.annotate(control_sample, xy=(0.02,0.1), xycoords='axes fraction', color='red',fontsize=12, va='bottom',ha='left')\n" + " ax4.annotate(query_sample, xy=(0.02,0.9), xycoords='axes fraction', color='blue',fontsize=12, va='top',ha='left')\n" + "\n" + " diffs = find_diffs(control_cnv,query_cnv)\n" + " for diff in diffs:\n" + " ax3.plot([x[0] for x in diff],[x[1] for x in diff],'-',ms=3,color='blue',lw=1.7)\n" + " ax4.plot([x[0] for x in diff],[x[2] for x in diff],'-',ms=3,color='red',lw=1.7)\n" + "\n" + " fig.suptitle('chr '+chr+', '+control_sample+' vs '+query_sample)\n" + " ax1.tick_params(axis='both', labelsize=8)\n" + " ax2.tick_params(axis='both', labelsize=8)\n" + " ax3.tick_params(axis='both', labelsize=8)\n" + " ax4.tick_params(axis='both', labelsize=8)\n" + " ax5.tick_params(axis='both', labelsize=8)\n" + " ax6.tick_params(axis='both', labelsize=8)\n" + " ax6.set_xlabel('Coordinate (chrom '+chr+')',fontsize=8)\n" + " ax1.set_ylabel('LRR')\n" + " ax2.set_ylabel('BAF')\n" + " ax3.set_ylabel('CN')\n" + " ax6.set_ylabel('LRR')\n" + " ax5.set_ylabel('BAF')\n" + " ax4.set_ylabel('CN')\n" + " ax3.set_ylim(-0.1,4.1)\n" + " ax3.set_yticks([0.5,1.5,2.5,3.5])\n" + " ax3.set_yticklabels(['CN0','CN1','CN2','CN3'])\n" + " ax4.set_ylim(-0.1,4.1)\n" + " ax4.set_yticks([0.5,1.5,2.5,3.5])\n" + " ax4.set_yticklabels(['CN0','CN1','CN2','CN3'])\n" + " plt.subplots_adjust(left=0.08,right=0.95,bottom=0.08,top=0.92,hspace=0)\n" + " plt.savefig('%s/plot.%s.%s.chr'+chr+'.png')\n" + " plt.close()\n" + "\n", + args->control_sample.name,args->query_sample.name, + args->output_dir, + args->control_sample.dat_fname,args->query_sample.dat_fname, + args->control_sample.cn_fname,args->query_sample.cn_fname, + args->output_dir,args->control_sample.name,args->query_sample.name + ); + fclose(fp); + + py_plot_cnv(fname,args->plot_th); + free(fname); +} + +static void destroy_data(args_t *args) +{ + bcf_sr_destroy(args->files); + hmm_destroy(args->hmm); + free(args->tmpf); + free(args->sites); + free(args->eprob); + free(args->tprob); + free(args->iprobs); + free(args->summary_fname); + free(args->nonref_afs); + free(args->query_sample.baf); + free(args->query_sample.lrr); + free(args->control_sample.baf); + free(args->control_sample.lrr); + free(args->query_sample.name); + free(args->query_sample.dat_fname); + free(args->query_sample.cn_fname); + free(args->query_sample.summary_fname); + free(args->control_sample.dat_fname); + free(args->control_sample.cn_fname); + free(args->control_sample.summary_fname); +} + +static inline char copy_number_state(args_t *args, int istate, int ismpl) +{ + char code[] = "01234"; + if ( !args->control_sample.name ) return code[istate]; + int idx = ismpl ? istate - (istate/N_STATES)*N_STATES : istate/N_STATES; + return code[idx]; +} + +static double avg_ii_prob(int n, double *mat) +{ + int i; + double avg = 0; + for (i=0; igauss_param[0])) +#define GAUSS_CN1_PK_A(smpl) (&((smpl)->gauss_param[1])) +#define GAUSS_CN2_PK_RR(smpl) (&((smpl)->gauss_param[2])) +#define GAUSS_CN2_PK_RA(smpl) (&((smpl)->gauss_param[3])) +#define GAUSS_CN2_PK_AA(smpl) (&((smpl)->gauss_param[4])) +#define GAUSS_CN3_PK_RRR(smpl) (&((smpl)->gauss_param[5])) +#define GAUSS_CN3_PK_RRA(smpl) (&((smpl)->gauss_param[6])) +#define GAUSS_CN3_PK_RAA(smpl) (&((smpl)->gauss_param[7])) +#define GAUSS_CN3_PK_AAA(smpl) (&((smpl)->gauss_param[8])) + +static inline double norm_prob(double baf, gauss_param_t *param) +{ + return exp(-(baf-param->mean)*(baf-param->mean)*0.5/param->dev2) / param->norm / sqrt(2*M_PI*param->dev2); +} + +static int set_observed_prob(args_t *args, sample_t *smpl, int isite) +{ + float baf = smpl->baf[isite]; + float lrr = args->lrr_bias>0 ? smpl->lrr[isite] : 0; + + float fRR = args->fRR; + float fRA = args->fRA; + float fAA = args->fAA; + + if ( baf<0 ) + { + // no call: either some technical issue or the call could not be made because it is CN0 + int i; + smpl->pobs[CN0] = 0.5; + for (i=1; ipobs[i] = (1.0-smpl->pobs[CN0])/(N_STATES-1); + return 0; + } + + double cn1_baf = + norm_prob(baf,GAUSS_CN1_PK_R(smpl)) * (fRR + fRA*0.5) + + norm_prob(baf,GAUSS_CN1_PK_A(smpl)) * (fAA + fRA*0.5) ; + double cn2_baf = + norm_prob(baf,GAUSS_CN2_PK_RR(smpl)) * fRR + + norm_prob(baf,GAUSS_CN2_PK_RA(smpl)) * fRA + + norm_prob(baf,GAUSS_CN2_PK_AA(smpl)) * fAA; + double cn3_baf = + norm_prob(baf,GAUSS_CN3_PK_RRR(smpl)) * fRR + + norm_prob(baf,GAUSS_CN3_PK_RRA(smpl)) * fRA*0.5 + + norm_prob(baf,GAUSS_CN3_PK_RAA(smpl)) * fRA*0.5 + + norm_prob(baf,GAUSS_CN3_PK_AAA(smpl)) * fAA; + + double norm = cn1_baf + cn2_baf + cn3_baf; + cn1_baf /= norm; + cn2_baf /= norm; + cn3_baf /= norm; + + #if DBG0 + if ( args->verbose ) fprintf(stderr,"%f\t%f %f %f\n", baf,cn1_baf,cn2_baf,cn3_baf); + #endif + + double cn1_lrr = exp(-(lrr + 0.45)*(lrr + 0.45)/smpl->lrr_dev2); + double cn2_lrr = exp(-(lrr - 0.00)*(lrr - 0.00)/smpl->lrr_dev2); + double cn3_lrr = exp(-(lrr - 0.30)*(lrr - 0.30)/smpl->lrr_dev2); + + smpl->pobs[CN0] = 0; + smpl->pobs[CN1] = args->err_prob + (1 - args->baf_bias + args->baf_bias*cn1_baf)*(1 - args->lrr_bias + args->lrr_bias*cn1_lrr); + smpl->pobs[CN2] = args->err_prob + (1 - args->baf_bias + args->baf_bias*cn2_baf)*(1 - args->lrr_bias + args->lrr_bias*cn2_lrr); + smpl->pobs[CN3] = args->err_prob + (1 - args->baf_bias + args->baf_bias*cn3_baf)*(1 - args->lrr_bias + args->lrr_bias*cn3_lrr); + + return 0; +} + +static void set_emission_prob(args_t *args, int isite) +{ + double *eprob = &args->eprob[args->nstates*isite]; + int i; + for (i=0; iquery_sample.pobs[i]; +} + +static void set_emission_prob2(args_t *args, int isite) +{ + double *eprob = &args->eprob[args->nstates*isite]; + int i, j; + for (i=0; iquery_sample.pobs[i]*args->control_sample.pobs[j]; + } + } +} + +static void set_gauss_params(args_t *args, sample_t *smpl); +static double norm_cdf(double mean, double dev) +{ + double bot = 0, top = 1; + top = 1 - 0.5*erfc((top-mean)/(dev*sqrt(2))); + bot = 1 - 0.5*erfc((bot-mean)/(dev*sqrt(2))); + return top-bot; +} + +static void set_emission_probs(args_t *args) +{ + if ( !args->af_fname ) + { + args->fRR = 0.76; + args->fRA = 0.14; + args->fAA = 0.098; + } + + set_gauss_params(args, &args->query_sample); + if ( args->control_sample.name ) set_gauss_params(args, &args->control_sample); + + #if DBG0 + args->verbose = 1; + args->query_sample.baf[0] = 0; set_observed_prob(args,&args->query_sample,0); + args->query_sample.baf[0] = 1/3.; set_observed_prob(args,&args->query_sample,0); + args->query_sample.baf[0] = 1/2.; set_observed_prob(args,&args->query_sample,0); + args->query_sample.baf[0] = 2/3.; set_observed_prob(args,&args->query_sample,0); + args->query_sample.baf[0] = 1; set_observed_prob(args,&args->query_sample,0); + args->verbose = 0; + #endif + + int i; + for (i=0; insites; i++) + { + if ( args->af_fname ) + { + args->fRR = (1-args->nonref_afs[i])*(1-args->nonref_afs[i]); + args->fRA = 2*args->nonref_afs[i]*(1-args->nonref_afs[i]); + args->fAA = args->nonref_afs[i]*args->nonref_afs[i]; + } + set_observed_prob(args,&args->query_sample,i); + if ( args->control_sample.name ) + { + set_observed_prob(args,&args->control_sample,i); + set_emission_prob2(args,i); + } + else + set_emission_prob(args,i); + } +} + +static void smooth_data(float *dat, int ndat, int win) +{ + if ( win<=1 ) return; + + int i,j, k1 = win/2, k2 = win-k1; + rbuf_t rbuf; + rbuf_init(&rbuf,win); + float sum = 0, *buf = (float*)malloc(sizeof(float)*win); + for (i=0; i=k1 ) + { + j = rbuf_shift(&rbuf); + sum -= buf[j]; + } + if ( i+k2gauss_param[i].dev2 = smpl->baf_dev2; + + double dev = sqrt(smpl->baf_dev2); + + GAUSS_CN1_PK_R(smpl)->mean = 0; + GAUSS_CN1_PK_A(smpl)->mean = 1; + GAUSS_CN1_PK_R(smpl)->norm = norm_cdf(GAUSS_CN1_PK_R(smpl)->mean,dev); + GAUSS_CN1_PK_A(smpl)->norm = norm_cdf(GAUSS_CN1_PK_A(smpl)->mean,dev); + + GAUSS_CN2_PK_RR(smpl)->mean = 0; + GAUSS_CN2_PK_RA(smpl)->mean = 0.5; + GAUSS_CN2_PK_AA(smpl)->mean = 1; + GAUSS_CN2_PK_RR(smpl)->norm = norm_cdf(GAUSS_CN2_PK_RR(smpl)->mean,dev); + GAUSS_CN2_PK_RA(smpl)->norm = norm_cdf(GAUSS_CN2_PK_RA(smpl)->mean,dev); + GAUSS_CN2_PK_AA(smpl)->norm = norm_cdf(GAUSS_CN2_PK_AA(smpl)->mean,dev); + + GAUSS_CN3_PK_RRR(smpl)->mean = 0; + GAUSS_CN3_PK_RRA(smpl)->mean = 1.0/(2+smpl->cell_frac); + GAUSS_CN3_PK_RAA(smpl)->mean = (1.0+smpl->cell_frac)/(2+smpl->cell_frac); + GAUSS_CN3_PK_AAA(smpl)->mean = 1; + GAUSS_CN3_PK_RRR(smpl)->norm = norm_cdf(GAUSS_CN3_PK_RRR(smpl)->mean,dev); + GAUSS_CN3_PK_RRA(smpl)->norm = norm_cdf(GAUSS_CN3_PK_RRA(smpl)->mean,dev); + GAUSS_CN3_PK_RAA(smpl)->norm = norm_cdf(GAUSS_CN3_PK_RAA(smpl)->mean,dev); + GAUSS_CN3_PK_AAA(smpl)->norm = norm_cdf(GAUSS_CN3_PK_AAA(smpl)->mean,dev); +} + +static int update_sample_args(args_t *args, sample_t *smpl, int ismpl) +{ + hmm_t *hmm = args->hmm; + double *fwd = hmm_get_fwd_bwd_prob(hmm); + int nstates = hmm_get_nstates(hmm); + + // estimate the BAF mean and deviation for CN3 + double mean_cn3 = 0, norm_cn3 = 0; + double baf_dev2 = 0, baf_AA_dev2 = 0, norm_baf_AA_dev2 = 0; + + // experimental: smooth CN3 probs to bias toward bigger events, this lowers + // the FP rate when the data is noisy + hts_expand(float,args->nsites,args->mtmpf,args->tmpf); + int i, j, k = 0; + for (i=0; insites; i++) + { + float baf = smpl->baf[i]; + if ( baf>4/5.) continue; // skip AA genotypes + if ( baf>0.5 ) baf = 1 - baf; // the bands should be symmetric + if ( baf<1/5.) continue; // skip RR genotypes + + double prob_cn3 = 0, *probs = fwd + i*nstates; + if ( !args->control_sample.name ) + { + prob_cn3 = probs[CN3]; + } + else if ( ismpl==0 ) + { + // query sample: CN3 probability must be recovered from all states of the control sample + for (j=0; jtmpf[k++] = prob_cn3; + } + smooth_data(args->tmpf, k, 50); + k = 0; + for (i=0; insites; i++) + { + float baf = smpl->baf[i]; + if ( baf>4/5.) { baf_AA_dev2 += (1.0-baf)*(1.0-baf); norm_baf_AA_dev2++; continue; } // skip AA genotypes + if ( baf>0.5 ) baf = 1 - baf; // the bands should be symmetric + if ( baf<1/5.) continue; // skip RR genotypes + + double prob_cn3 = args->tmpf[k++]; + mean_cn3 += prob_cn3 * baf; + norm_cn3 += prob_cn3; + } + if ( !norm_cn3 ) + { + smpl->cell_frac = 1.0; + return 1; + } + mean_cn3 /= norm_cn3; + k = 0; + for (i=0; insites; i++) + { + float baf = smpl->baf[i]; + if ( baf>0.5 ) baf = 1 - baf; // the bands should be symmetric + if ( baf<1/5.) continue; // skip RR,AA genotypes + + double prob_cn3 = args->tmpf[k++]; + baf_dev2 += prob_cn3 * (baf - mean_cn3)*(baf - mean_cn3); + } + + /* + A noisy CN2 band is hard to distinguish from two CN3 bands which are + close to each other. Set a treshold on the minimum separation based + on the BAF deviation at p=0.95 + */ + baf_dev2 /= norm_cn3; + baf_AA_dev2 /= norm_baf_AA_dev2; + if ( baf_dev2 < baf_AA_dev2 ) baf_dev2 = baf_AA_dev2; + double max_mean_cn3 = 0.5 - sqrt(baf_dev2)*1.644854; // R: qnorm(0.95)=1.644854 + //fprintf(stderr,"dev=%f AA_dev=%f max_mean_cn3=%f mean_cn3=%f\n", baf_dev2,baf_AA_dev2,max_mean_cn3,mean_cn3); + assert( max_mean_cn3>0 ); + + double new_frac = 1./mean_cn3 - 2; + if ( mean_cn3 > max_mean_cn3 || new_frac < args->optimize_frac ) + { + // out of bounds, beyond our detection limits. Give up and say it converged + smpl->cell_frac = 1.0; + return 1; + } + if ( new_frac>1 ) new_frac = 1; + int converged = fabs(new_frac - smpl->cell_frac) < 1e-1 ? 1 : 0; + + // Update dev2, but stay within safe limits + if ( baf_dev2 > 3*smpl->baf_dev2_dflt ) baf_dev2 = 3*smpl->baf_dev2_dflt; + else if ( baf_dev2 < 0.5*smpl->baf_dev2_dflt ) baf_dev2 = 0.5*smpl->baf_dev2_dflt; + + smpl->cell_frac = new_frac; + smpl->baf_dev2 = baf_dev2; + + return converged; +} + +// Update parameters which depend on the estimated fraction of aberrant cells +// in CN3. Returns 0 if the current estimate did not need to be updated or 1 +// if there was a change. +static int update_args(args_t *args) +{ + int converged = update_sample_args(args, &args->query_sample, 0); + if ( args->control_sample.name ) + { + converged += update_sample_args(args, &args->control_sample, 1); + return converged==2 ? 0 : 1; + } + return converged ? 0 : 1; +} + +// for an approximate estimate of the number of het genotypes in a region +#define BAF_LIKELY_HET(val) (val)>0.25 && (val)<0.75 + +static void cnv_flush_viterbi(args_t *args) +{ + if ( !args->nsites ) return; + + // Set HMM transition matrix for the new chromsome again. This is for case + // Baum-Welch was used, which is experimental, largerly unsupported and not + // done by default. + hmm_t *hmm = args->hmm; + hmm_set_tprob(args->hmm, args->tprob, 10000); + + // Smooth LRR values to reduce noise + if ( args->lrr_bias > 0 ) + { + smooth_data(args->query_sample.lrr,args->nsites, args->lrr_smooth_win); + if ( args->control_sample.name ) smooth_data(args->control_sample.lrr,args->nsites, args->lrr_smooth_win); + } + + // Set the BAF peak likelihoods, such as P(RRR|CN3), taking account the + // estimated fraction of aberrant cells in the mixture. With the new chromosome, + // reset the fraction to the default value. + args->query_sample.cell_frac = args->query_sample.cell_frac_dflt; + args->control_sample.cell_frac = args->control_sample.cell_frac_dflt; + args->query_sample.baf_dev2 = args->query_sample.baf_dev2_dflt; + args->control_sample.baf_dev2 = args->control_sample.baf_dev2_dflt; + set_gauss_params(args, &args->query_sample); + if ( args->control_sample.name ) set_gauss_params(args, &args->control_sample); + + if ( args->optimize_frac ) + { + int niter = 0; + fprintf(stderr,"Attempting to estimate the fraction of aberrant cells (chr %s):\n", bcf_hdr_id2name(args->hdr,args->prev_rid)); + do + { + fprintf(stderr,"\t.. %f %f", args->query_sample.cell_frac,args->query_sample.baf_dev2); + if ( args->control_sample.name ) + fprintf(stderr,"\t.. %f %f", args->control_sample.cell_frac,args->control_sample.baf_dev2); + fprintf(stderr,"\n"); + set_emission_probs(args); + hmm_run_fwd_bwd(hmm, args->nsites, args->eprob, args->sites); + } + while ( update_args(args) && ++niter<20 ); + if ( niter>=20 ) + { + // no convergence + args->query_sample.cell_frac = args->query_sample.cell_frac_dflt; + args->control_sample.cell_frac = args->control_sample.cell_frac_dflt; + args->query_sample.baf_dev2 = args->query_sample.baf_dev2_dflt; + args->control_sample.baf_dev2 = args->control_sample.baf_dev2_dflt; + set_gauss_params(args, &args->query_sample); + if ( args->control_sample.name ) set_gauss_params(args, &args->control_sample); + } + + fprintf(stderr,"\t.. %f %f", args->query_sample.cell_frac,args->query_sample.baf_dev2); + if ( args->control_sample.name ) + fprintf(stderr,"\t.. %f %f", args->control_sample.cell_frac,args->control_sample.baf_dev2); + fprintf(stderr,"\n"); + + fprintf(args->query_sample.summary_fh,"CF\t%s\t%d\t%d\t%.2f\t%f\n", + bcf_hdr_id2name(args->hdr,args->prev_rid),args->sites[0]+1,args->sites[args->nsites-1]+1, + args->query_sample.cell_frac,sqrt(args->query_sample.baf_dev2)); + if ( args->control_sample.name ) + { + fprintf(args->control_sample.summary_fh,"CF\t%s\t%d\t%d\t%.2f\t%f\n", + bcf_hdr_id2name(args->hdr,args->prev_rid),args->sites[0]+1,args->sites[args->nsites-1]+1, + args->control_sample.cell_frac,sqrt(args->control_sample.baf_dev2)); + fprintf(args->summary_fh,"CF\t%s\t%d\t%d\t%.2f\t%.2f\t%f\t%f\n", + bcf_hdr_id2name(args->hdr,args->prev_rid),args->sites[0]+1,args->sites[args->nsites-1]+1, + args->query_sample.cell_frac, args->control_sample.cell_frac, + sqrt(args->query_sample.baf_dev2), sqrt(args->control_sample.baf_dev2)); + } + } + set_emission_probs(args); + + while ( args->baum_welch_th!=0 ) + { + int nstates = hmm_get_nstates(hmm); + double ori_ii = avg_ii_prob(nstates,hmm_get_tprob(hmm)); + hmm_run_baum_welch(hmm, args->nsites, args->eprob, args->sites); + double new_ii = avg_ii_prob(nstates,hmm_get_tprob(hmm)); + fprintf(stderr,"%e\t%e\t%e\n", ori_ii,new_ii,new_ii-ori_ii); + double *tprob = init_tprob_matrix(nstates, 1-new_ii, args->same_prob); + hmm_set_tprob(args->hmm, tprob, 10000); + double *tprob_arr = hmm_get_tprob(hmm); + free(tprob); + if ( fabs(new_ii - ori_ii) < args->baum_welch_th ) + { + int i,j; + for (i=0; insites, args->eprob, args->sites); + hmm_run_fwd_bwd(hmm, args->nsites, args->eprob, args->sites); + + + // Output the results + uint8_t *vpath = hmm_get_viterbi_path(hmm); + double qual = 0, *fwd = hmm_get_fwd_bwd_prob(hmm); + int i,j, isite, start_cn = vpath[0], start_pos = args->sites[0], istart_pos = 0; + int ctrl_ntot = 0, smpl_ntot = 0, ctrl_nhet = 0, smpl_nhet = 0; + for (isite=0; isitensites; isite++) + { + int state = vpath[args->nstates*isite]; + double *pval = fwd + isite*args->nstates; + + qual += pval[start_cn]; + + // output CN and fwd-bwd likelihood for each site + if ( args->query_sample.cn_fh ) + { + fprintf(args->query_sample.cn_fh, "%s\t%d\t%c", bcf_hdr_id2name(args->hdr,args->prev_rid), args->sites[isite]+1, copy_number_state(args,state,0)); + if ( !args->control_sample.cn_fh ) + for (i=0; instates; i++) fprintf(args->query_sample.cn_fh, "\t%f", pval[i]); + else + for (i=0; iquery_sample.cn_fh, "\t%f", sum); + } + fprintf(args->query_sample.cn_fh, "\n"); + if ( args->query_sample.baf[isite]>=0 ) // if non-missing + { + if ( BAF_LIKELY_HET(args->query_sample.baf[isite]) ) smpl_nhet++; + smpl_ntot++; + } + } + if ( args->control_sample.cn_fh ) + { + fprintf(args->control_sample.cn_fh, "%s\t%d\t%c", bcf_hdr_id2name(args->hdr,args->prev_rid), args->sites[isite]+1, copy_number_state(args,state,1)); + for (i=0; icontrol_sample.cn_fh, "\t%f", sum); + } + fprintf(args->control_sample.cn_fh, "\n"); + if ( args->control_sample.baf[isite]>=0 ) // if non-missing + { + if ( BAF_LIKELY_HET(args->control_sample.baf[isite]) ) ctrl_nhet++; + ctrl_ntot++; + } + } + + if ( start_cn != state ) + { + char start_cn_query = copy_number_state(args,start_cn,0); + qual = phred_score(1 - qual/(isite - istart_pos)); + fprintf(args->query_sample.summary_fh,"RG\t%s\t%d\t%d\t%c\t%.1f\t%d\t%d\n", + bcf_hdr_id2name(args->hdr,args->prev_rid), start_pos+1, args->sites[isite],start_cn_query,qual,smpl_ntot,smpl_nhet); + + if ( args->control_sample.name ) + { + // regions 0-based, half-open + char start_cn_ctrl = copy_number_state(args,start_cn,1); + fprintf(args->control_sample.summary_fh,"RG\t%s\t%d\t%d\t%c\t%.1f\t%d\t%d\n", + bcf_hdr_id2name(args->hdr,args->prev_rid), start_pos+1, args->sites[isite],start_cn_ctrl,qual,ctrl_ntot,ctrl_nhet); + fprintf(args->summary_fh,"RG\t%s\t%d\t%d\t%c\t%c\t%.1f\t%d\t%d\t%d\t%d\n", + bcf_hdr_id2name(args->hdr,args->prev_rid), start_pos+1, args->sites[isite],start_cn_query,start_cn_ctrl,qual,smpl_ntot,smpl_nhet,ctrl_ntot,ctrl_nhet); + } + + istart_pos = isite; + start_pos = args->sites[isite]; + start_cn = state; + qual = 0; + smpl_ntot = smpl_nhet = ctrl_ntot = ctrl_nhet = 0; + } + } + qual = phred_score(1 - qual/(isite - istart_pos)); + char start_cn_query = copy_number_state(args,start_cn,0); + fprintf(args->query_sample.summary_fh,"RG\t%s\t%d\t%d\t%c\t%.1f\t%d\t%d\n", + bcf_hdr_id2name(args->hdr,args->prev_rid), start_pos+1, args->sites[isite-1]+1,start_cn_query,qual,smpl_ntot,smpl_nhet); + if ( args->control_sample.name ) + { + char start_cn_ctrl = copy_number_state(args,start_cn,1); + fprintf(args->control_sample.summary_fh,"RG\t%s\t%d\t%d\t%c\t%.1f\t%d\t%d\n", + bcf_hdr_id2name(args->hdr,args->prev_rid), start_pos+1, args->sites[isite-1]+1,start_cn_ctrl,qual,ctrl_ntot,ctrl_nhet); + fprintf(args->summary_fh,"RG\t%s\t%d\t%d\t%c\t%c\t%.1f\t%d\t%d\t%d\t%d\n", + bcf_hdr_id2name(args->hdr,args->prev_rid), start_pos+1, args->sites[isite-1]+1,start_cn_query,start_cn_ctrl,qual,smpl_ntot,smpl_nhet,ctrl_ntot,ctrl_nhet); + } +} + +static int parse_lrr_baf(sample_t *smpl, bcf_fmt_t *baf_fmt, bcf_fmt_t *lrr_fmt, float *baf, float *lrr) +{ + *baf = ((float*)(baf_fmt->p + baf_fmt->size*smpl->idx))[0]; + if ( bcf_float_is_missing(*baf) || isnan(*baf) ) *baf = -0.1; // arbitrary negative value == missing value + + if ( lrr_fmt ) + { + *lrr = ((float*)(lrr_fmt->p + lrr_fmt->size*smpl->idx))[0]; + if ( bcf_float_is_missing(*lrr) || isnan(*lrr) ) { *lrr = 0; *baf = -0.1; } + } + else + *lrr = 0; + + return *baf<0 ? 0 : 1; +} + +int read_AF(bcf_sr_regions_t *tgt, bcf1_t *line, double *alt_freq); + +static void cnv_next_line(args_t *args, bcf1_t *line) +{ + if ( !line ) + { + // Done, flush viterbi + cnv_flush_viterbi(args); + return; + } + + if ( line->rid!=args->prev_rid ) + { + // New chromosome + cnv_flush_viterbi(args); + args->prev_rid = line->rid; + args->nsites = 0; + args->nRR = args->nAA = args->nRA = 0; + } + + // Process line + args->ntot++; + + bcf_fmt_t *baf_fmt, *lrr_fmt = NULL; + if ( !(baf_fmt = bcf_get_fmt(args->hdr, line, "BAF")) ) return; + if ( args->lrr_bias>0 && !(lrr_fmt = bcf_get_fmt(args->hdr, line, "LRR")) ) return; + + float baf1,lrr1,baf2,lrr2; + int ret = 0; + ret += parse_lrr_baf(&args->query_sample, baf_fmt,lrr_fmt,&baf1,&lrr1); + ret += parse_lrr_baf(&args->control_sample,baf_fmt,lrr_fmt,&baf2,&lrr2); + if ( !ret ) return; + + // Realloc buffers needed to store observed data and used by viterbi and fwd-bwd + args->nsites++; + int m = args->msites; + hts_expand(uint32_t,args->nsites,args->msites,args->sites); + if ( args->msites!=m ) + { + args->eprob = (double*) realloc(args->eprob,sizeof(double)*args->msites*args->nstates); + if ( args->control_sample.name ) + { + args->control_sample.lrr = (float*) realloc(args->control_sample.lrr,sizeof(float)*args->msites); + args->control_sample.baf = (float*) realloc(args->control_sample.baf,sizeof(float)*args->msites); + } + args->query_sample.lrr = (float*) realloc(args->query_sample.lrr,sizeof(float)*args->msites); + args->query_sample.baf = (float*) realloc(args->query_sample.baf,sizeof(float)*args->msites); + if ( args->af_fname ) + args->nonref_afs = (float*) realloc(args->nonref_afs,sizeof(float)*args->msites); + } + args->sites[args->nsites-1] = line->pos; + args->query_sample.lrr[args->nsites-1] = lrr1; + args->query_sample.baf[args->nsites-1] = baf1; + if ( args->af_fname ) + { + double alt_freq; + args->nonref_afs[args->nsites-1] = read_AF(args->files->targets,line,&alt_freq)<0 ? args->nonref_af_dflt : alt_freq; + } + if ( args->control_sample.name ) + { + args->control_sample.lrr[args->nsites-1] = lrr2; + args->control_sample.baf[args->nsites-1] = baf2; + if ( baf2>=0 ) // skip missing values + fprintf(args->control_sample.dat_fh,"%s\t%d\t%.3f\t%.3f\n",bcf_hdr_id2name(args->hdr,args->prev_rid), line->pos+1,baf2,lrr2); + } + if ( baf1>=0 ) // skip missing values + fprintf(args->query_sample.dat_fh,"%s\t%d\t%.3f\t%.3f\n",bcf_hdr_id2name(args->hdr,args->prev_rid), line->pos+1,baf1,lrr1); + + if ( baf1>=0 ) + { + if ( baf1<1/5. ) args->nRR++; + else if ( baf1>4/5. ) args->nAA++; + else args->nRA++; + } + args->nused++; +} + +static void usage(args_t *args) +{ + fprintf(stderr, "\n"); + fprintf(stderr, "About: Copy number variation caller, requires Illumina's B-allele frequency (BAF) and Log R\n"); + fprintf(stderr, " Ratio intensity (LRR). The HMM considers the following copy number states: CN 2\n"); + fprintf(stderr, " (normal), 1 (single-copy loss), 0 (complete loss), 3 (single-copy gain)\n"); + fprintf(stderr, "Usage: bcftools cnv [OPTIONS] \n"); + fprintf(stderr, "General Options:\n"); + fprintf(stderr, " -c, --control-sample optional control sample name to highlight differences\n"); + fprintf(stderr, " -f, --AF-file read allele frequencies from file (CHR\\tPOS\\tREF,ALT\\tAF)\n"); + fprintf(stderr, " -o, --output-dir \n"); + fprintf(stderr, " -p, --plot-threshold plot aberrant chromosomes with quality at least 'float'\n"); + fprintf(stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(stderr, " -s, --query-sample query samply name\n"); + fprintf(stderr, " -t, --targets similar to -r but streams rather than index-jumps\n"); + fprintf(stderr, " -T, --targets-file similar to -R but streams rather than index-jumps\n"); + fprintf(stderr, "HMM Options:\n"); + fprintf(stderr, " -a, --aberrant fraction of aberrant cells in query and control [1.0,1.0]\n"); + fprintf(stderr, " -b, --BAF-weight relative contribution from BAF [1]\n"); + fprintf(stderr, " -d, --BAF-dev expected BAF deviation in query and control [0.04,0.04]\n"); // experimental + fprintf(stderr, " -e, --err-prob uniform error probability [1e-4]\n"); + fprintf(stderr, " -k, --LRR-dev expected LRR deviation [0.2,0.2]\n"); // experimental + fprintf(stderr, " -l, --LRR-weight relative contribution from LRR [0.2]\n"); + fprintf(stderr, " -L, --LRR-smooth-win window of LRR moving average smoothing [10]\n"); + fprintf(stderr, " -O, --optimize estimate fraction of aberrant cells down to [1.0]\n"); + fprintf(stderr, " -P, --same-prob prior probability of -s/-c being the same [0.5]\n"); + fprintf(stderr, " -x, --xy-prob P(x|y) transition probability [1e-9]\n"); + fprintf(stderr, "\n"); + exit(1); +} + +int main_vcfcnv(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->files = bcf_sr_init(); + args->plot_th = 1e9; // by default plot none + args->nonref_af_dflt = 0.1; + args->lrr_smooth_win = 10; + + args->query_sample.cell_frac_dflt = 1; + args->control_sample.cell_frac_dflt = 1; + + // How much FORMAT/LRR and FORMAT/BAF matter + args->lrr_bias = 0.2; + args->baf_bias = 1.0; + args->err_prob = 1e-4; + + // Transition probability to a different state and the prior of both samples being the same + args->ij_prob = 1e-9; + args->same_prob = 0.5; + + // Squared std dev of BAF and LRR values (gaussian noise), estimated from real data (hets, one sample, one chr) + args->query_sample.baf_dev2_dflt = args->control_sample.baf_dev2_dflt = 0.04*0.04; // illumina: 0.03 + args->query_sample.lrr_dev2 = args->control_sample.lrr_dev2 = 0.2*0.2; //0.20*0.20; // illumina: 0.18 + + int regions_is_file = 0, targets_is_file = 0; + static struct option loptions[] = + { + {"BAF-dev",1,0,'d'}, + {"LRR-dev",1,0,'k'}, + {"LRR-smooth-win",1,0,'L'}, + {"AF-file",1,0,'f'}, + {"baum-welch",1,0,'W'}, // hidden + {"optimize",1,0,'O'}, + {"aberrant",1,0,'a'}, + {"err-prob",1,0,'e'}, + {"BAF-weight",1,0,'b'}, + {"LRR-weight",1,0,'l'}, + {"same-prob",1,0,'P'}, + {"xy-prob",1,0,'x'}, + {"sample",1,0,'s'}, + {"control",1,0,'c'}, + {"targets",1,0,'t'}, + {"targets-file",1,0,'T'}, + {"regions",1,0,'r'}, + {"regions-file",1,0,'R'}, + {"plot",1,0,'p'}, + {"output-dir",1,0,'o'}, + {0,0,0,0} + }; + char *tmp = NULL; + while ((c = getopt_long(argc, argv, "h?r:R:t:T:s:o:p:l:T:c:b:P:x:e:O:W:f:a:L:d:k:",loptions,NULL)) >= 0) { + switch (c) { + case 'L': + args->lrr_smooth_win = strtol(optarg,&tmp,10); + if ( *tmp ) error("Could not parse: --LRR-smooth-win %s\n", optarg); + break; + case 'f': args->af_fname = optarg; break; + case 'O': + args->optimize_frac = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -O %s\n", optarg); + break; + case 'd': + args->query_sample.baf_dev2_dflt = strtod(optarg,&tmp); + if ( *tmp ) + { + if ( *tmp!=',') error("Could not parse: -d %s\n", optarg); + args->control_sample.baf_dev2_dflt = strtod(tmp+1,&tmp); + if ( *tmp ) error("Could not parse: -d %s\n", optarg); + } + else + args->control_sample.baf_dev2_dflt = args->query_sample.baf_dev2_dflt; + args->query_sample.baf_dev2_dflt *= args->query_sample.baf_dev2_dflt; + args->control_sample.baf_dev2_dflt *= args->control_sample.baf_dev2_dflt; + break; + case 'k': + args->query_sample.lrr_dev2 = strtod(optarg,&tmp); + if ( *tmp ) + { + if ( *tmp!=',') error("Could not parse: -k %s\n", optarg); + args->control_sample.lrr_dev2 = strtod(tmp+1,&tmp); + if ( *tmp ) error("Could not parse: -d %s\n", optarg); + } + else + args->control_sample.lrr_dev2 = args->query_sample.lrr_dev2; + args->query_sample.lrr_dev2 *= args->query_sample.lrr_dev2; + args->control_sample.lrr_dev2 *= args->control_sample.lrr_dev2; + break; + case 'a': + args->query_sample.cell_frac_dflt = strtod(optarg,&tmp); + if ( *tmp ) + { + if ( *tmp!=',') error("Could not parse: -a %s\n", optarg); + args->control_sample.cell_frac_dflt = strtod(tmp+1,&tmp); + if ( *tmp ) error("Could not parse: -a %s\n", optarg); + } + break; + case 'W': + args->baum_welch_th = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -W %s\n", optarg); + break; + case 'e': + args->err_prob = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -e %s\n", optarg); + break; + case 'b': + args->baf_bias = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -b %s\n", optarg); + break; + case 'x': + args->ij_prob = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -x %s\n", optarg); + break; + case 'P': + args->same_prob = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -P %s\n", optarg); + break; + case 'l': + args->lrr_bias = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -l %s\n", optarg); + break; + case 'p': + args->plot_th = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -p %s\n", optarg); + break; + case 'o': args->output_dir = optarg; break; + case 's': args->query_sample.name = strdup(optarg); break; + case 'c': args->control_sample.name = optarg; break; + case 't': args->targets_list = optarg; break; + case 'T': args->targets_list = optarg; targets_is_file = 1; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; regions_is_file = 1; break; + case 'h': + case '?': usage(args); break; + default: error("Unknown argument: %s\n", optarg); + } + } + + char *fname = NULL; + if ( optind>=argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; + } + else fname = argv[optind]; + if ( !fname ) usage(args); + + if ( !args->output_dir ) error("Expected -o option\n"); + if ( args->regions_list ) + { + if ( bcf_sr_set_regions(args->files, args->regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + } + if ( args->targets_list ) + { + if ( bcf_sr_set_targets(args->files, args->targets_list, targets_is_file, 0)<0 ) + error("Failed to read the targets: %s\n", args->targets_list); + } + if ( args->af_fname ) + { + if ( bcf_sr_set_targets(args->files, args->af_fname, 1, 3)<0 ) + error("Failed to read the targets: %s\n", args->af_fname); + } + if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); + + init_data(args); + while ( bcf_sr_next_line(args->files) ) + { + bcf1_t *line = bcf_sr_get_line(args->files,0); + cnv_next_line(args, line); + } + cnv_next_line(args, NULL); + create_plots(args); + fprintf(stderr,"Number of lines: total/processed: %d/%d\n", args->ntot,args->nused); + destroy_data(args); + free(args); + return 0; +} + + diff --git a/bcftools/vcfcnv.c.pysam.c b/bcftools/vcfcnv.c.pysam.c new file mode 100644 index 0000000..db4dffc --- /dev/null +++ b/bcftools/vcfcnv.c.pysam.c @@ -0,0 +1,1420 @@ +#include "bcftools.pysam.h" + +/* The MIT License + + Copyright (c) 2014-2015 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ + +/* + Known issues: + - The --AF-file option behaves like --targets-file, sites not listed in the AFs + are skipped. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "HMM.h" +#include "rbuf.h" + +#define DBG0 0 + +#define N_STATES 4 +#define CN0 0 +#define CN1 1 +#define CN2 2 +#define CN3 3 + +typedef struct +{ + float mean, dev2, norm; +} +gauss_param_t; + +typedef struct +{ + char *name; + int idx; // VCF sample index + float *lrr,*baf, baf_dev2, baf_dev2_dflt, lrr_dev2; + float cell_frac, cell_frac_dflt; + gauss_param_t gauss_param[18]; + double pobs[N_STATES]; + FILE *dat_fh, *cn_fh, *summary_fh; + char *dat_fname, *cn_fname, *summary_fname; +} +sample_t; + +typedef struct _args_t +{ + bcf_srs_t *files; + bcf_hdr_t *hdr; + int prev_rid, ntot, nused; + sample_t query_sample, control_sample; + + int nstates; // number of states: N_STATES for one sample, N_STATES^2 for two samples + double lrr_bias, baf_bias; // LRR/BAF weights + double same_prob, ij_prob; // prior of both samples being the same and the transition probability P(i|j) + double err_prob; // constant probability of erroneous measurement + float *nonref_afs, nonref_af, nonref_af_dflt, fRR, fRA, fAA, *tmpf; + unsigned long int nRR, nRA, nAA; + int mtmpf; + + double *tprob, *tprob_arr; // array of transition matrices, precalculated up to ntprob_arr positions + double *iprobs; // states' initial probabilities + int ntprob_arr; + + hmm_t *hmm; + double *eprob; // emission probs [nstates*nsites,msites] + uint32_t *sites; // positions [nsites,msites] + int nsites, msites; + + double baum_welch_th, optimize_frac; + float plot_th; + FILE *summary_fh; + char **argv, *regions_list, *summary_fname, *output_dir; + char *targets_list, *af_fname; + int argc, verbose, lrr_smooth_win; +} +args_t; + +FILE *open_file(char **fname, const char *mode, const char *fmt, ...); + +static inline void hmm2cn_state(int nstates, int i, int *a, int *b) +{ + *a = i / N_STATES; + *b = i - (*a)*N_STATES; +} +static double *init_tprob_matrix(int ndim, double ij_prob, double same_prob) +{ + int i,j; + double *mat = (double*) malloc(sizeof(double)*ndim*ndim); + + assert( ndim==N_STATES || ndim==N_STATES*N_STATES); + + if ( ndim==N_STATES ) // one sample + { + double pii = 1 - ij_prob*(N_STATES-1); + if ( pii < ij_prob ) error("Error: -x set a bit too high, P(x|x) < P(x|y): %e vs %e\n", pii,ij_prob); + for (j=0; jdat_fh = open_file(&smpl->dat_fname,"w","%s/dat.%s.tab",dir,smpl->name); + if ( !smpl->dat_fh ) error("Error opening file: %s/dat.%s.tab\n",dir,smpl->name); + + smpl->cn_fh = open_file(&smpl->cn_fname,"w","%s/cn.%s.tab",dir,smpl->name); + if ( !smpl->cn_fh ) error("Error opening file: %s/cn.%s.tab\n",dir,smpl->name); + + smpl->summary_fh = open_file(&smpl->summary_fname,"w","%s/summary.%s.tab",dir,smpl->name); + if ( !smpl->summary_fh ) error("Error opening file: %s/summary.%s.tab\n",dir,smpl->name); + + fprintf(smpl->dat_fh,"# [1]Chromosome\t[2]Position\t[3]BAF\t[4]LRR\n"); + fprintf(smpl->cn_fh,"# [1]Chromosome\t[2]Position\t[3]CN\t[4]P(CN0)\t[5]P(CN1)\t[6]P(CN2)\t[7]P(CN3)\n"); + fprintf(smpl->summary_fh,"# RG, Regions [2]Chromosome\t[3]Start\t[4]End\t[5]Copy Number state\t[6]Quality\t[7]nSites\t[8]nHETs\n"); +} +static void close_sample_files(sample_t *smpl) +{ + fclose(smpl->dat_fh); + fclose(smpl->cn_fh); + fclose(smpl->summary_fh); +} + +static double norm_cdf(double mean, double dev); +static void init_data(args_t *args) +{ + args->prev_rid = -1; + args->hdr = args->files->readers[0].header; + + if ( !args->query_sample.name ) + { + if ( bcf_hdr_nsamples(args->hdr)>1 ) error("Multi-sample VCF, missing the -s option\n"); + args->query_sample.name = strdup(args->hdr->samples[0]); + } + else + if ( bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,args->query_sample.name)<0 ) error("The sample \"%s\" not found\n", args->query_sample.name); + if ( !args->files->readers[0].file->is_bin ) + { + int ret; + kstring_t tmp = {0,0,0}; + if ( args->control_sample.name ) + { + ksprintf(&tmp, "%s,%s", args->query_sample.name,args->control_sample.name); + ret = bcf_hdr_set_samples(args->hdr, tmp.s, 0); + } + else + { + ret = bcf_hdr_set_samples(args->hdr, args->query_sample.name, 0); + tmp.s = args->query_sample.name; + } + if ( ret<0 ) error("Error parsing the list of samples: %s\n", tmp.s); + else if ( ret>0 ) error("The sample not found in the VCF: %s\n", ret==1 ? args->query_sample.name : args->control_sample.name); + + if ( args->control_sample.name ) free(tmp.s); + } + args->query_sample.idx = bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,args->query_sample.name); + args->control_sample.idx = args->control_sample.name ? bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,args->control_sample.name) : -1; + args->nstates = args->control_sample.name ? N_STATES*N_STATES : N_STATES; + args->tprob = init_tprob_matrix(args->nstates, args->ij_prob, args->same_prob); + args->iprobs = init_iprobs(args->nstates, args->same_prob); + args->hmm = hmm_init(args->nstates, args->tprob, 10000); + hmm_init_states(args->hmm, args->iprobs); + + args->summary_fh = bcftools_stdout; + init_sample_files(&args->query_sample, args->output_dir); + if ( args->control_sample.name ) + { + init_sample_files(&args->control_sample, args->output_dir); + args->summary_fh = open_file(&args->summary_fname,"w","%s/summary.tab",args->output_dir); + } + else + args->summary_fh = NULL; // one sample only, no two-file summary + + + int i; + FILE *fh = args->summary_fh ? args->summary_fh : args->query_sample.summary_fh; + + fprintf(fh, "# This file was produced by: bcftools cnv(%s+htslib-%s)\n", bcftools_version(),hts_version()); + fprintf(fh, "# The command line was:\tbcftools %s", args->argv[0]); + for (i=1; iargc; i++) fprintf(fh, " %s",args->argv[i]); + if ( args->control_sample.name ) + fprintf(fh, "\n#\n" + "# RG, Regions\t[2]Chromosome\t[3]Start\t[4]End\t[5]Copy number:%s\t[6]Copy number:%s\t[7]Quality" + "\t[8]nSites in (5)\t[9]nHETs in (5)\t[10]nSites in (6)\t[11]nHETs in(6)\n", + args->query_sample.name,args->control_sample.name + ); + else + fprintf(fh, "\n#\n" + "# RG, Regions\t[2]Chromosome\t[3]Start\t[4]End\t[5]Copy number:%s\t[6]Quality\t[7]nSites\t[8]nHETs\n", + args->query_sample.name + ); + if ( args->optimize_frac ) + { + fprintf(args->query_sample.summary_fh, "# CF, cell fraction estimate\t[2]Chromosome\t[3]Start\t[4]End\t[5]Cell fraction\t[6]BAF deviation\n"); + if ( args->control_sample.name ) + { + fprintf(args->control_sample.summary_fh, "# CF, cell fraction estimate\t[2]Chromosome\t[3]Start\t[4]End\t[5]Cell fraction\t[6]BAF deviation\n"); + fprintf(args->summary_fh, "# CF, cell fraction estimate\t[2]Chromosome\t[3]Start\t[4]End\t" + "[5]Cell fraction:%s\t[6]Cell fraction:%s\t[7]BAF deviation:%s\t[8]BAF deviation:%s\n", + args->query_sample.name,args->control_sample.name, + args->query_sample.name,args->control_sample.name + ); + } + } +} + +char *msprintf(const char *fmt, ...); +static void py_plot_cnv(char *script, float th) +{ + if ( th>100 ) return; // create no plots + + char *cmd = msprintf("python %s -p %f", script, th); + int ret = system(cmd); + if ( ret) fprintf(bcftools_stderr, "The command returned non-zero status %d: %s\n", ret, cmd); + free(cmd); +} + +static void plot_sample(args_t *args, sample_t *smpl) +{ + char *fname; + FILE *fp = open_file(&fname,"w","%s/plot.%s.py",args->output_dir,smpl->name); + fprintf(fp, + "import matplotlib as mpl\n" + "mpl.use('Agg')\n" + "import matplotlib.pyplot as plt\n" + "import csv\n" + "import numpy as np\n" + "csv.register_dialect('tab', delimiter='\\t', quoting=csv.QUOTE_NONE)\n" + "\n" + "dat = {}\n" + "with open('%s', 'rb') as f:\n" + " reader = csv.reader(f, 'tab')\n" + " for row in reader:\n" + " chr = row[0]\n" + " if chr[0]=='#': continue\n" + " if chr not in dat: dat[chr] = []\n" + " dat[chr].append([row[1], float(row[2]), float(row[3])])\n" + "\n" + "cnv = {}\n" + "with open('%s', 'rb') as f:\n" + " reader = csv.reader(f, 'tab')\n" + " for row in reader:\n" + " chr = row[0]\n" + " if chr[0]=='#': continue\n" + " if chr not in cnv: cnv[chr] = []\n" + " row[2] = int(row[2]) + 0.5\n" + " cnv[chr].append(row[1:])\n" + "\n" + "for chr in dat:\n" + " fig,(ax1, ax2, ax3) = plt.subplots(3,1,figsize=(10,8),sharex=True)\n" + " ax1.plot([x[0] for x in dat[chr]],[x[2] for x in dat[chr]], '.', ms=3)\n" + " ax2.plot([x[0] for x in dat[chr]],[x[1] for x in dat[chr]], '.', ms=3)\n" + " cn_dat = cnv[chr]\n" + " xgrid = [float(x[0]) for x in cn_dat]\n" + " ygrid = np.linspace(0,5,6)\n" + " xgrid, ygrid = np.meshgrid(xgrid, ygrid)\n" + " heat = np.zeros_like(xgrid)\n" + " for x in range(len(heat[0])-1):\n" + " heat[0][x] = cn_dat[x][2]\n" + " heat[1][x] = cn_dat[x][3]\n" + " heat[2][x] = cn_dat[x][4]\n" + " heat[3][x] = cn_dat[x][5]\n" + " mesh = ax3.pcolormesh(xgrid, ygrid, heat, cmap='bwr_r')\n" + " mesh.set_clim(vmin=-1,vmax=1)\n" + " ax3.plot([x[0] for x in cn_dat],[x[1] for x in cn_dat],'.-',ms=3,color='black')\n" + " fig.suptitle('%s (chr '+chr+')')\n" + " ax1.set_title('Log-R intensities Ratio',fontsize=10)\n" + " ax2.set_title('B-Allele Frequency',fontsize=10)\n" + " ax3.set_title('Copy Number Variation',fontsize=10)\n" + " ax1.set_ylabel('LRR')\n" + " ax2.set_ylabel('BAF')\n" + " ax3.set_ylabel('CN')\n" + " ax3.set_xlabel('Coordinate (chrom '+chr+')',fontsize=10)\n" + " ax3.set_ylim(-0.1,4.1)\n" + " ax3.set_yticks([0.5,1.5,2.5,3.5])\n" + " ax3.set_yticklabels(['CN0','CN1','CN2','CN3'])\n" + " plt.subplots_adjust(left=0.08,right=0.95,bottom=0.08,top=0.92)\n" + " plt.savefig('%s/plot.%s.chr'+chr+'.png')\n" + " plt.close()\n" + "\n", + smpl->dat_fname,smpl->cn_fname,smpl->name,args->output_dir,smpl->name + ); + fclose(fp); + + py_plot_cnv(fname, args->plot_th); + free(fname); +} + +static void create_plots(args_t *args) +{ + close_sample_files(&args->query_sample); + if ( args->control_sample.name ) close_sample_files(&args->control_sample); + if ( args->summary_fh ) fclose(args->summary_fh); + + if ( !args->control_sample.name ) + { + plot_sample(args, &args->query_sample); + return; + } + + char *fname; + FILE *fp = open_file(&fname,"w","%s/plot.%s.%s.py",args->output_dir,args->control_sample.name,args->query_sample.name); + fprintf(fp, + "import matplotlib as mpl\n" + "mpl.use('Agg')\n" + "import matplotlib.pyplot as plt\n" + "import csv,argparse\n" + "import numpy as np\n" + "csv.register_dialect('tab', delimiter='\\t', quoting=csv.QUOTE_NONE)\n" + "\n" + "control_sample = '%s'\n" + "query_sample = '%s'\n" + "\n" + "parser = argparse.ArgumentParser()\n" + "parser.add_argument('-p', '--plot-threshold', type=float)\n" + "parser.add_argument('-c', '--chromosome')\n" + "args = parser.parse_args()\n" + "if args.plot_threshold==None: args.plot_threshold = 0\n" + "\n" + "def chroms_to_plot(th):\n" + " dat = {}\n" + " with open('%s/summary.tab', 'rb') as f:\n" + " reader = csv.reader(f, 'tab')\n" + " for row in reader:\n" + " if row[0]!='RG': continue\n" + " chr = row[1]\n" + " start = row[2]\n" + " end = row[3]\n" + " qual = float(row[6])\n" + " if row[4]==row[5] and args.plot_threshold!=0: continue\n" + " if chr not in dat: dat[chr] = 0.0\n" + " if qual > dat[chr]: dat[chr] = qual\n" + " out = {}\n" + " for chr in dat:\n" + " if (chr not in dat) or dat[chr]0: diff.append([b[i-1][0],b[i-1][1],a[i-1][1]])\n" + " diff.append([b[i][0],b[i][1],a[i][1]])\n" + " elif len(diff):\n" + " diff.append([b[i][0],b[i][1],a[i][1]])\n" + " out.append(diff)\n" + " diff = []\n" + " if len(diff): out.append(diff)\n" + " return out\n" + "\n" + "for chr in sorted(plot_chroms.keys()):\n" + " control_dat = []\n" + " control_cnv = []\n" + " query_dat = []\n" + " query_cnv = []\n" + " read_dat('%s',control_dat,chr)\n" + " read_dat('%s',query_dat,chr)\n" + " read_cnv('%s',control_cnv,chr)\n" + " read_cnv('%s',query_cnv,chr)\n" + "\n" + " fig,(ax1,ax2,ax3,ax4,ax5,ax6) = plt.subplots(6,1,figsize=(10,8),sharex=True)\n" + " ax1.plot([x[0] for x in control_dat],[x[2] for x in control_dat], '.', ms=3,color='red')\n" + " ax2.plot([x[0] for x in control_dat],[x[1] for x in control_dat], '.', ms=3,color='red')\n" + " cn_dat = control_cnv\n" + " xgrid = [float(x[0]) for x in cn_dat]\n" + " ygrid = np.linspace(0,5,6)\n" + " xgrid, ygrid = np.meshgrid(xgrid, ygrid)\n" + " heat = np.zeros_like(xgrid)\n" + " for x in range(len(heat[0])-1):\n" + " heat[0][x] = cn_dat[x][2]\n" + " heat[1][x] = cn_dat[x][3]\n" + " heat[2][x] = cn_dat[x][4]\n" + " heat[3][x] = cn_dat[x][5]\n" + " mesh = ax3.pcolormesh(xgrid, ygrid, heat, cmap='bwr')\n" + " mesh.set_clim(vmin=-1,vmax=1)\n" + " ax3.plot([x[0] for x in cn_dat],[x[1] for x in cn_dat],'-',ms=3,color='black',lw=1.7)\n" + "\n" + " ax6.plot([x[0] for x in query_dat],[x[2] for x in query_dat], '.', ms=3)\n" + " ax5.plot([x[0] for x in query_dat],[x[1] for x in query_dat], '.', ms=3)\n" + " cn_dat = query_cnv\n" + " xgrid = [float(x[0]) for x in cn_dat]\n" + " ygrid = np.linspace(0,5,6)\n" + " xgrid, ygrid = np.meshgrid(xgrid, ygrid)\n" + " heat = np.zeros_like(xgrid)\n" + " for x in range(len(heat[0])-1):\n" + " heat[0][x] = cn_dat[x][2]\n" + " heat[1][x] = cn_dat[x][3]\n" + " heat[2][x] = cn_dat[x][4]\n" + " heat[3][x] = cn_dat[x][5]\n" + " mesh = ax4.pcolormesh(xgrid, ygrid, heat, cmap='bwr_r')\n" + " mesh.set_clim(vmin=-1,vmax=1)\n" + " ax4.plot([x[0] for x in cn_dat],[x[1] for x in cn_dat],'-',ms=3,color='black',lw=1.7)\n" + " ax3.annotate(control_sample, xy=(0.02,0.1), xycoords='axes fraction', color='red',fontsize=12, va='bottom',ha='left')\n" + " ax4.annotate(query_sample, xy=(0.02,0.9), xycoords='axes fraction', color='blue',fontsize=12, va='top',ha='left')\n" + "\n" + " diffs = find_diffs(control_cnv,query_cnv)\n" + " for diff in diffs:\n" + " ax3.plot([x[0] for x in diff],[x[1] for x in diff],'-',ms=3,color='blue',lw=1.7)\n" + " ax4.plot([x[0] for x in diff],[x[2] for x in diff],'-',ms=3,color='red',lw=1.7)\n" + "\n" + " fig.suptitle('chr '+chr+', '+control_sample+' vs '+query_sample)\n" + " ax1.tick_params(axis='both', labelsize=8)\n" + " ax2.tick_params(axis='both', labelsize=8)\n" + " ax3.tick_params(axis='both', labelsize=8)\n" + " ax4.tick_params(axis='both', labelsize=8)\n" + " ax5.tick_params(axis='both', labelsize=8)\n" + " ax6.tick_params(axis='both', labelsize=8)\n" + " ax6.set_xlabel('Coordinate (chrom '+chr+')',fontsize=8)\n" + " ax1.set_ylabel('LRR')\n" + " ax2.set_ylabel('BAF')\n" + " ax3.set_ylabel('CN')\n" + " ax6.set_ylabel('LRR')\n" + " ax5.set_ylabel('BAF')\n" + " ax4.set_ylabel('CN')\n" + " ax3.set_ylim(-0.1,4.1)\n" + " ax3.set_yticks([0.5,1.5,2.5,3.5])\n" + " ax3.set_yticklabels(['CN0','CN1','CN2','CN3'])\n" + " ax4.set_ylim(-0.1,4.1)\n" + " ax4.set_yticks([0.5,1.5,2.5,3.5])\n" + " ax4.set_yticklabels(['CN0','CN1','CN2','CN3'])\n" + " plt.subplots_adjust(left=0.08,right=0.95,bottom=0.08,top=0.92,hspace=0)\n" + " plt.savefig('%s/plot.%s.%s.chr'+chr+'.png')\n" + " plt.close()\n" + "\n", + args->control_sample.name,args->query_sample.name, + args->output_dir, + args->control_sample.dat_fname,args->query_sample.dat_fname, + args->control_sample.cn_fname,args->query_sample.cn_fname, + args->output_dir,args->control_sample.name,args->query_sample.name + ); + fclose(fp); + + py_plot_cnv(fname,args->plot_th); + free(fname); +} + +static void destroy_data(args_t *args) +{ + bcf_sr_destroy(args->files); + hmm_destroy(args->hmm); + free(args->tmpf); + free(args->sites); + free(args->eprob); + free(args->tprob); + free(args->iprobs); + free(args->summary_fname); + free(args->nonref_afs); + free(args->query_sample.baf); + free(args->query_sample.lrr); + free(args->control_sample.baf); + free(args->control_sample.lrr); + free(args->query_sample.name); + free(args->query_sample.dat_fname); + free(args->query_sample.cn_fname); + free(args->query_sample.summary_fname); + free(args->control_sample.dat_fname); + free(args->control_sample.cn_fname); + free(args->control_sample.summary_fname); +} + +static inline char copy_number_state(args_t *args, int istate, int ismpl) +{ + char code[] = "01234"; + if ( !args->control_sample.name ) return code[istate]; + int idx = ismpl ? istate - (istate/N_STATES)*N_STATES : istate/N_STATES; + return code[idx]; +} + +static double avg_ii_prob(int n, double *mat) +{ + int i; + double avg = 0; + for (i=0; igauss_param[0])) +#define GAUSS_CN1_PK_A(smpl) (&((smpl)->gauss_param[1])) +#define GAUSS_CN2_PK_RR(smpl) (&((smpl)->gauss_param[2])) +#define GAUSS_CN2_PK_RA(smpl) (&((smpl)->gauss_param[3])) +#define GAUSS_CN2_PK_AA(smpl) (&((smpl)->gauss_param[4])) +#define GAUSS_CN3_PK_RRR(smpl) (&((smpl)->gauss_param[5])) +#define GAUSS_CN3_PK_RRA(smpl) (&((smpl)->gauss_param[6])) +#define GAUSS_CN3_PK_RAA(smpl) (&((smpl)->gauss_param[7])) +#define GAUSS_CN3_PK_AAA(smpl) (&((smpl)->gauss_param[8])) + +static inline double norm_prob(double baf, gauss_param_t *param) +{ + return exp(-(baf-param->mean)*(baf-param->mean)*0.5/param->dev2) / param->norm / sqrt(2*M_PI*param->dev2); +} + +static int set_observed_prob(args_t *args, sample_t *smpl, int isite) +{ + float baf = smpl->baf[isite]; + float lrr = args->lrr_bias>0 ? smpl->lrr[isite] : 0; + + float fRR = args->fRR; + float fRA = args->fRA; + float fAA = args->fAA; + + if ( baf<0 ) + { + // no call: either some technical issue or the call could not be made because it is CN0 + int i; + smpl->pobs[CN0] = 0.5; + for (i=1; ipobs[i] = (1.0-smpl->pobs[CN0])/(N_STATES-1); + return 0; + } + + double cn1_baf = + norm_prob(baf,GAUSS_CN1_PK_R(smpl)) * (fRR + fRA*0.5) + + norm_prob(baf,GAUSS_CN1_PK_A(smpl)) * (fAA + fRA*0.5) ; + double cn2_baf = + norm_prob(baf,GAUSS_CN2_PK_RR(smpl)) * fRR + + norm_prob(baf,GAUSS_CN2_PK_RA(smpl)) * fRA + + norm_prob(baf,GAUSS_CN2_PK_AA(smpl)) * fAA; + double cn3_baf = + norm_prob(baf,GAUSS_CN3_PK_RRR(smpl)) * fRR + + norm_prob(baf,GAUSS_CN3_PK_RRA(smpl)) * fRA*0.5 + + norm_prob(baf,GAUSS_CN3_PK_RAA(smpl)) * fRA*0.5 + + norm_prob(baf,GAUSS_CN3_PK_AAA(smpl)) * fAA; + + double norm = cn1_baf + cn2_baf + cn3_baf; + cn1_baf /= norm; + cn2_baf /= norm; + cn3_baf /= norm; + + #if DBG0 + if ( args->verbose ) fprintf(bcftools_stderr,"%f\t%f %f %f\n", baf,cn1_baf,cn2_baf,cn3_baf); + #endif + + double cn1_lrr = exp(-(lrr + 0.45)*(lrr + 0.45)/smpl->lrr_dev2); + double cn2_lrr = exp(-(lrr - 0.00)*(lrr - 0.00)/smpl->lrr_dev2); + double cn3_lrr = exp(-(lrr - 0.30)*(lrr - 0.30)/smpl->lrr_dev2); + + smpl->pobs[CN0] = 0; + smpl->pobs[CN1] = args->err_prob + (1 - args->baf_bias + args->baf_bias*cn1_baf)*(1 - args->lrr_bias + args->lrr_bias*cn1_lrr); + smpl->pobs[CN2] = args->err_prob + (1 - args->baf_bias + args->baf_bias*cn2_baf)*(1 - args->lrr_bias + args->lrr_bias*cn2_lrr); + smpl->pobs[CN3] = args->err_prob + (1 - args->baf_bias + args->baf_bias*cn3_baf)*(1 - args->lrr_bias + args->lrr_bias*cn3_lrr); + + return 0; +} + +static void set_emission_prob(args_t *args, int isite) +{ + double *eprob = &args->eprob[args->nstates*isite]; + int i; + for (i=0; iquery_sample.pobs[i]; +} + +static void set_emission_prob2(args_t *args, int isite) +{ + double *eprob = &args->eprob[args->nstates*isite]; + int i, j; + for (i=0; iquery_sample.pobs[i]*args->control_sample.pobs[j]; + } + } +} + +static void set_gauss_params(args_t *args, sample_t *smpl); +static double norm_cdf(double mean, double dev) +{ + double bot = 0, top = 1; + top = 1 - 0.5*erfc((top-mean)/(dev*sqrt(2))); + bot = 1 - 0.5*erfc((bot-mean)/(dev*sqrt(2))); + return top-bot; +} + +static void set_emission_probs(args_t *args) +{ + if ( !args->af_fname ) + { + args->fRR = 0.76; + args->fRA = 0.14; + args->fAA = 0.098; + } + + set_gauss_params(args, &args->query_sample); + if ( args->control_sample.name ) set_gauss_params(args, &args->control_sample); + + #if DBG0 + args->verbose = 1; + args->query_sample.baf[0] = 0; set_observed_prob(args,&args->query_sample,0); + args->query_sample.baf[0] = 1/3.; set_observed_prob(args,&args->query_sample,0); + args->query_sample.baf[0] = 1/2.; set_observed_prob(args,&args->query_sample,0); + args->query_sample.baf[0] = 2/3.; set_observed_prob(args,&args->query_sample,0); + args->query_sample.baf[0] = 1; set_observed_prob(args,&args->query_sample,0); + args->verbose = 0; + #endif + + int i; + for (i=0; insites; i++) + { + if ( args->af_fname ) + { + args->fRR = (1-args->nonref_afs[i])*(1-args->nonref_afs[i]); + args->fRA = 2*args->nonref_afs[i]*(1-args->nonref_afs[i]); + args->fAA = args->nonref_afs[i]*args->nonref_afs[i]; + } + set_observed_prob(args,&args->query_sample,i); + if ( args->control_sample.name ) + { + set_observed_prob(args,&args->control_sample,i); + set_emission_prob2(args,i); + } + else + set_emission_prob(args,i); + } +} + +static void smooth_data(float *dat, int ndat, int win) +{ + if ( win<=1 ) return; + + int i,j, k1 = win/2, k2 = win-k1; + rbuf_t rbuf; + rbuf_init(&rbuf,win); + float sum = 0, *buf = (float*)malloc(sizeof(float)*win); + for (i=0; i=k1 ) + { + j = rbuf_shift(&rbuf); + sum -= buf[j]; + } + if ( i+k2gauss_param[i].dev2 = smpl->baf_dev2; + + double dev = sqrt(smpl->baf_dev2); + + GAUSS_CN1_PK_R(smpl)->mean = 0; + GAUSS_CN1_PK_A(smpl)->mean = 1; + GAUSS_CN1_PK_R(smpl)->norm = norm_cdf(GAUSS_CN1_PK_R(smpl)->mean,dev); + GAUSS_CN1_PK_A(smpl)->norm = norm_cdf(GAUSS_CN1_PK_A(smpl)->mean,dev); + + GAUSS_CN2_PK_RR(smpl)->mean = 0; + GAUSS_CN2_PK_RA(smpl)->mean = 0.5; + GAUSS_CN2_PK_AA(smpl)->mean = 1; + GAUSS_CN2_PK_RR(smpl)->norm = norm_cdf(GAUSS_CN2_PK_RR(smpl)->mean,dev); + GAUSS_CN2_PK_RA(smpl)->norm = norm_cdf(GAUSS_CN2_PK_RA(smpl)->mean,dev); + GAUSS_CN2_PK_AA(smpl)->norm = norm_cdf(GAUSS_CN2_PK_AA(smpl)->mean,dev); + + GAUSS_CN3_PK_RRR(smpl)->mean = 0; + GAUSS_CN3_PK_RRA(smpl)->mean = 1.0/(2+smpl->cell_frac); + GAUSS_CN3_PK_RAA(smpl)->mean = (1.0+smpl->cell_frac)/(2+smpl->cell_frac); + GAUSS_CN3_PK_AAA(smpl)->mean = 1; + GAUSS_CN3_PK_RRR(smpl)->norm = norm_cdf(GAUSS_CN3_PK_RRR(smpl)->mean,dev); + GAUSS_CN3_PK_RRA(smpl)->norm = norm_cdf(GAUSS_CN3_PK_RRA(smpl)->mean,dev); + GAUSS_CN3_PK_RAA(smpl)->norm = norm_cdf(GAUSS_CN3_PK_RAA(smpl)->mean,dev); + GAUSS_CN3_PK_AAA(smpl)->norm = norm_cdf(GAUSS_CN3_PK_AAA(smpl)->mean,dev); +} + +static int update_sample_args(args_t *args, sample_t *smpl, int ismpl) +{ + hmm_t *hmm = args->hmm; + double *fwd = hmm_get_fwd_bwd_prob(hmm); + int nstates = hmm_get_nstates(hmm); + + // estimate the BAF mean and deviation for CN3 + double mean_cn3 = 0, norm_cn3 = 0; + double baf_dev2 = 0, baf_AA_dev2 = 0, norm_baf_AA_dev2 = 0; + + // experimental: smooth CN3 probs to bias toward bigger events, this lowers + // the FP rate when the data is noisy + hts_expand(float,args->nsites,args->mtmpf,args->tmpf); + int i, j, k = 0; + for (i=0; insites; i++) + { + float baf = smpl->baf[i]; + if ( baf>4/5.) continue; // skip AA genotypes + if ( baf>0.5 ) baf = 1 - baf; // the bands should be symmetric + if ( baf<1/5.) continue; // skip RR genotypes + + double prob_cn3 = 0, *probs = fwd + i*nstates; + if ( !args->control_sample.name ) + { + prob_cn3 = probs[CN3]; + } + else if ( ismpl==0 ) + { + // query sample: CN3 probability must be recovered from all states of the control sample + for (j=0; jtmpf[k++] = prob_cn3; + } + smooth_data(args->tmpf, k, 50); + k = 0; + for (i=0; insites; i++) + { + float baf = smpl->baf[i]; + if ( baf>4/5.) { baf_AA_dev2 += (1.0-baf)*(1.0-baf); norm_baf_AA_dev2++; continue; } // skip AA genotypes + if ( baf>0.5 ) baf = 1 - baf; // the bands should be symmetric + if ( baf<1/5.) continue; // skip RR genotypes + + double prob_cn3 = args->tmpf[k++]; + mean_cn3 += prob_cn3 * baf; + norm_cn3 += prob_cn3; + } + if ( !norm_cn3 ) + { + smpl->cell_frac = 1.0; + return 1; + } + mean_cn3 /= norm_cn3; + k = 0; + for (i=0; insites; i++) + { + float baf = smpl->baf[i]; + if ( baf>0.5 ) baf = 1 - baf; // the bands should be symmetric + if ( baf<1/5.) continue; // skip RR,AA genotypes + + double prob_cn3 = args->tmpf[k++]; + baf_dev2 += prob_cn3 * (baf - mean_cn3)*(baf - mean_cn3); + } + + /* + A noisy CN2 band is hard to distinguish from two CN3 bands which are + close to each other. Set a treshold on the minimum separation based + on the BAF deviation at p=0.95 + */ + baf_dev2 /= norm_cn3; + baf_AA_dev2 /= norm_baf_AA_dev2; + if ( baf_dev2 < baf_AA_dev2 ) baf_dev2 = baf_AA_dev2; + double max_mean_cn3 = 0.5 - sqrt(baf_dev2)*1.644854; // R: qnorm(0.95)=1.644854 + //fprintf(bcftools_stderr,"dev=%f AA_dev=%f max_mean_cn3=%f mean_cn3=%f\n", baf_dev2,baf_AA_dev2,max_mean_cn3,mean_cn3); + assert( max_mean_cn3>0 ); + + double new_frac = 1./mean_cn3 - 2; + if ( mean_cn3 > max_mean_cn3 || new_frac < args->optimize_frac ) + { + // out of bounds, beyond our detection limits. Give up and say it converged + smpl->cell_frac = 1.0; + return 1; + } + if ( new_frac>1 ) new_frac = 1; + int converged = fabs(new_frac - smpl->cell_frac) < 1e-1 ? 1 : 0; + + // Update dev2, but stay within safe limits + if ( baf_dev2 > 3*smpl->baf_dev2_dflt ) baf_dev2 = 3*smpl->baf_dev2_dflt; + else if ( baf_dev2 < 0.5*smpl->baf_dev2_dflt ) baf_dev2 = 0.5*smpl->baf_dev2_dflt; + + smpl->cell_frac = new_frac; + smpl->baf_dev2 = baf_dev2; + + return converged; +} + +// Update parameters which depend on the estimated fraction of aberrant cells +// in CN3. Returns 0 if the current estimate did not need to be updated or 1 +// if there was a change. +static int update_args(args_t *args) +{ + int converged = update_sample_args(args, &args->query_sample, 0); + if ( args->control_sample.name ) + { + converged += update_sample_args(args, &args->control_sample, 1); + return converged==2 ? 0 : 1; + } + return converged ? 0 : 1; +} + +// for an approximate estimate of the number of het genotypes in a region +#define BAF_LIKELY_HET(val) (val)>0.25 && (val)<0.75 + +static void cnv_flush_viterbi(args_t *args) +{ + if ( !args->nsites ) return; + + // Set HMM transition matrix for the new chromsome again. This is for case + // Baum-Welch was used, which is experimental, largerly unsupported and not + // done by default. + hmm_t *hmm = args->hmm; + hmm_set_tprob(args->hmm, args->tprob, 10000); + + // Smooth LRR values to reduce noise + if ( args->lrr_bias > 0 ) + { + smooth_data(args->query_sample.lrr,args->nsites, args->lrr_smooth_win); + if ( args->control_sample.name ) smooth_data(args->control_sample.lrr,args->nsites, args->lrr_smooth_win); + } + + // Set the BAF peak likelihoods, such as P(RRR|CN3), taking account the + // estimated fraction of aberrant cells in the mixture. With the new chromosome, + // reset the fraction to the default value. + args->query_sample.cell_frac = args->query_sample.cell_frac_dflt; + args->control_sample.cell_frac = args->control_sample.cell_frac_dflt; + args->query_sample.baf_dev2 = args->query_sample.baf_dev2_dflt; + args->control_sample.baf_dev2 = args->control_sample.baf_dev2_dflt; + set_gauss_params(args, &args->query_sample); + if ( args->control_sample.name ) set_gauss_params(args, &args->control_sample); + + if ( args->optimize_frac ) + { + int niter = 0; + fprintf(bcftools_stderr,"Attempting to estimate the fraction of aberrant cells (chr %s):\n", bcf_hdr_id2name(args->hdr,args->prev_rid)); + do + { + fprintf(bcftools_stderr,"\t.. %f %f", args->query_sample.cell_frac,args->query_sample.baf_dev2); + if ( args->control_sample.name ) + fprintf(bcftools_stderr,"\t.. %f %f", args->control_sample.cell_frac,args->control_sample.baf_dev2); + fprintf(bcftools_stderr,"\n"); + set_emission_probs(args); + hmm_run_fwd_bwd(hmm, args->nsites, args->eprob, args->sites); + } + while ( update_args(args) && ++niter<20 ); + if ( niter>=20 ) + { + // no convergence + args->query_sample.cell_frac = args->query_sample.cell_frac_dflt; + args->control_sample.cell_frac = args->control_sample.cell_frac_dflt; + args->query_sample.baf_dev2 = args->query_sample.baf_dev2_dflt; + args->control_sample.baf_dev2 = args->control_sample.baf_dev2_dflt; + set_gauss_params(args, &args->query_sample); + if ( args->control_sample.name ) set_gauss_params(args, &args->control_sample); + } + + fprintf(bcftools_stderr,"\t.. %f %f", args->query_sample.cell_frac,args->query_sample.baf_dev2); + if ( args->control_sample.name ) + fprintf(bcftools_stderr,"\t.. %f %f", args->control_sample.cell_frac,args->control_sample.baf_dev2); + fprintf(bcftools_stderr,"\n"); + + fprintf(args->query_sample.summary_fh,"CF\t%s\t%d\t%d\t%.2f\t%f\n", + bcf_hdr_id2name(args->hdr,args->prev_rid),args->sites[0]+1,args->sites[args->nsites-1]+1, + args->query_sample.cell_frac,sqrt(args->query_sample.baf_dev2)); + if ( args->control_sample.name ) + { + fprintf(args->control_sample.summary_fh,"CF\t%s\t%d\t%d\t%.2f\t%f\n", + bcf_hdr_id2name(args->hdr,args->prev_rid),args->sites[0]+1,args->sites[args->nsites-1]+1, + args->control_sample.cell_frac,sqrt(args->control_sample.baf_dev2)); + fprintf(args->summary_fh,"CF\t%s\t%d\t%d\t%.2f\t%.2f\t%f\t%f\n", + bcf_hdr_id2name(args->hdr,args->prev_rid),args->sites[0]+1,args->sites[args->nsites-1]+1, + args->query_sample.cell_frac, args->control_sample.cell_frac, + sqrt(args->query_sample.baf_dev2), sqrt(args->control_sample.baf_dev2)); + } + } + set_emission_probs(args); + + while ( args->baum_welch_th!=0 ) + { + int nstates = hmm_get_nstates(hmm); + double ori_ii = avg_ii_prob(nstates,hmm_get_tprob(hmm)); + hmm_run_baum_welch(hmm, args->nsites, args->eprob, args->sites); + double new_ii = avg_ii_prob(nstates,hmm_get_tprob(hmm)); + fprintf(bcftools_stderr,"%e\t%e\t%e\n", ori_ii,new_ii,new_ii-ori_ii); + double *tprob = init_tprob_matrix(nstates, 1-new_ii, args->same_prob); + hmm_set_tprob(args->hmm, tprob, 10000); + double *tprob_arr = hmm_get_tprob(hmm); + free(tprob); + if ( fabs(new_ii - ori_ii) < args->baum_welch_th ) + { + int i,j; + for (i=0; insites, args->eprob, args->sites); + hmm_run_fwd_bwd(hmm, args->nsites, args->eprob, args->sites); + + + // Output the results + uint8_t *vpath = hmm_get_viterbi_path(hmm); + double qual = 0, *fwd = hmm_get_fwd_bwd_prob(hmm); + int i,j, isite, start_cn = vpath[0], start_pos = args->sites[0], istart_pos = 0; + int ctrl_ntot = 0, smpl_ntot = 0, ctrl_nhet = 0, smpl_nhet = 0; + for (isite=0; isitensites; isite++) + { + int state = vpath[args->nstates*isite]; + double *pval = fwd + isite*args->nstates; + + qual += pval[start_cn]; + + // output CN and fwd-bwd likelihood for each site + if ( args->query_sample.cn_fh ) + { + fprintf(args->query_sample.cn_fh, "%s\t%d\t%c", bcf_hdr_id2name(args->hdr,args->prev_rid), args->sites[isite]+1, copy_number_state(args,state,0)); + if ( !args->control_sample.cn_fh ) + for (i=0; instates; i++) fprintf(args->query_sample.cn_fh, "\t%f", pval[i]); + else + for (i=0; iquery_sample.cn_fh, "\t%f", sum); + } + fprintf(args->query_sample.cn_fh, "\n"); + if ( args->query_sample.baf[isite]>=0 ) // if non-missing + { + if ( BAF_LIKELY_HET(args->query_sample.baf[isite]) ) smpl_nhet++; + smpl_ntot++; + } + } + if ( args->control_sample.cn_fh ) + { + fprintf(args->control_sample.cn_fh, "%s\t%d\t%c", bcf_hdr_id2name(args->hdr,args->prev_rid), args->sites[isite]+1, copy_number_state(args,state,1)); + for (i=0; icontrol_sample.cn_fh, "\t%f", sum); + } + fprintf(args->control_sample.cn_fh, "\n"); + if ( args->control_sample.baf[isite]>=0 ) // if non-missing + { + if ( BAF_LIKELY_HET(args->control_sample.baf[isite]) ) ctrl_nhet++; + ctrl_ntot++; + } + } + + if ( start_cn != state ) + { + char start_cn_query = copy_number_state(args,start_cn,0); + qual = phred_score(1 - qual/(isite - istart_pos)); + fprintf(args->query_sample.summary_fh,"RG\t%s\t%d\t%d\t%c\t%.1f\t%d\t%d\n", + bcf_hdr_id2name(args->hdr,args->prev_rid), start_pos+1, args->sites[isite],start_cn_query,qual,smpl_ntot,smpl_nhet); + + if ( args->control_sample.name ) + { + // regions 0-based, half-open + char start_cn_ctrl = copy_number_state(args,start_cn,1); + fprintf(args->control_sample.summary_fh,"RG\t%s\t%d\t%d\t%c\t%.1f\t%d\t%d\n", + bcf_hdr_id2name(args->hdr,args->prev_rid), start_pos+1, args->sites[isite],start_cn_ctrl,qual,ctrl_ntot,ctrl_nhet); + fprintf(args->summary_fh,"RG\t%s\t%d\t%d\t%c\t%c\t%.1f\t%d\t%d\t%d\t%d\n", + bcf_hdr_id2name(args->hdr,args->prev_rid), start_pos+1, args->sites[isite],start_cn_query,start_cn_ctrl,qual,smpl_ntot,smpl_nhet,ctrl_ntot,ctrl_nhet); + } + + istart_pos = isite; + start_pos = args->sites[isite]; + start_cn = state; + qual = 0; + smpl_ntot = smpl_nhet = ctrl_ntot = ctrl_nhet = 0; + } + } + qual = phred_score(1 - qual/(isite - istart_pos)); + char start_cn_query = copy_number_state(args,start_cn,0); + fprintf(args->query_sample.summary_fh,"RG\t%s\t%d\t%d\t%c\t%.1f\t%d\t%d\n", + bcf_hdr_id2name(args->hdr,args->prev_rid), start_pos+1, args->sites[isite-1]+1,start_cn_query,qual,smpl_ntot,smpl_nhet); + if ( args->control_sample.name ) + { + char start_cn_ctrl = copy_number_state(args,start_cn,1); + fprintf(args->control_sample.summary_fh,"RG\t%s\t%d\t%d\t%c\t%.1f\t%d\t%d\n", + bcf_hdr_id2name(args->hdr,args->prev_rid), start_pos+1, args->sites[isite-1]+1,start_cn_ctrl,qual,ctrl_ntot,ctrl_nhet); + fprintf(args->summary_fh,"RG\t%s\t%d\t%d\t%c\t%c\t%.1f\t%d\t%d\t%d\t%d\n", + bcf_hdr_id2name(args->hdr,args->prev_rid), start_pos+1, args->sites[isite-1]+1,start_cn_query,start_cn_ctrl,qual,smpl_ntot,smpl_nhet,ctrl_ntot,ctrl_nhet); + } +} + +static int parse_lrr_baf(sample_t *smpl, bcf_fmt_t *baf_fmt, bcf_fmt_t *lrr_fmt, float *baf, float *lrr) +{ + *baf = ((float*)(baf_fmt->p + baf_fmt->size*smpl->idx))[0]; + if ( bcf_float_is_missing(*baf) || isnan(*baf) ) *baf = -0.1; // arbitrary negative value == missing value + + if ( lrr_fmt ) + { + *lrr = ((float*)(lrr_fmt->p + lrr_fmt->size*smpl->idx))[0]; + if ( bcf_float_is_missing(*lrr) || isnan(*lrr) ) { *lrr = 0; *baf = -0.1; } + } + else + *lrr = 0; + + return *baf<0 ? 0 : 1; +} + +int read_AF(bcf_sr_regions_t *tgt, bcf1_t *line, double *alt_freq); + +static void cnv_next_line(args_t *args, bcf1_t *line) +{ + if ( !line ) + { + // Done, flush viterbi + cnv_flush_viterbi(args); + return; + } + + if ( line->rid!=args->prev_rid ) + { + // New chromosome + cnv_flush_viterbi(args); + args->prev_rid = line->rid; + args->nsites = 0; + args->nRR = args->nAA = args->nRA = 0; + } + + // Process line + args->ntot++; + + bcf_fmt_t *baf_fmt, *lrr_fmt = NULL; + if ( !(baf_fmt = bcf_get_fmt(args->hdr, line, "BAF")) ) return; + if ( args->lrr_bias>0 && !(lrr_fmt = bcf_get_fmt(args->hdr, line, "LRR")) ) return; + + float baf1,lrr1,baf2,lrr2; + int ret = 0; + ret += parse_lrr_baf(&args->query_sample, baf_fmt,lrr_fmt,&baf1,&lrr1); + ret += parse_lrr_baf(&args->control_sample,baf_fmt,lrr_fmt,&baf2,&lrr2); + if ( !ret ) return; + + // Realloc buffers needed to store observed data and used by viterbi and fwd-bwd + args->nsites++; + int m = args->msites; + hts_expand(uint32_t,args->nsites,args->msites,args->sites); + if ( args->msites!=m ) + { + args->eprob = (double*) realloc(args->eprob,sizeof(double)*args->msites*args->nstates); + if ( args->control_sample.name ) + { + args->control_sample.lrr = (float*) realloc(args->control_sample.lrr,sizeof(float)*args->msites); + args->control_sample.baf = (float*) realloc(args->control_sample.baf,sizeof(float)*args->msites); + } + args->query_sample.lrr = (float*) realloc(args->query_sample.lrr,sizeof(float)*args->msites); + args->query_sample.baf = (float*) realloc(args->query_sample.baf,sizeof(float)*args->msites); + if ( args->af_fname ) + args->nonref_afs = (float*) realloc(args->nonref_afs,sizeof(float)*args->msites); + } + args->sites[args->nsites-1] = line->pos; + args->query_sample.lrr[args->nsites-1] = lrr1; + args->query_sample.baf[args->nsites-1] = baf1; + if ( args->af_fname ) + { + double alt_freq; + args->nonref_afs[args->nsites-1] = read_AF(args->files->targets,line,&alt_freq)<0 ? args->nonref_af_dflt : alt_freq; + } + if ( args->control_sample.name ) + { + args->control_sample.lrr[args->nsites-1] = lrr2; + args->control_sample.baf[args->nsites-1] = baf2; + if ( baf2>=0 ) // skip missing values + fprintf(args->control_sample.dat_fh,"%s\t%d\t%.3f\t%.3f\n",bcf_hdr_id2name(args->hdr,args->prev_rid), line->pos+1,baf2,lrr2); + } + if ( baf1>=0 ) // skip missing values + fprintf(args->query_sample.dat_fh,"%s\t%d\t%.3f\t%.3f\n",bcf_hdr_id2name(args->hdr,args->prev_rid), line->pos+1,baf1,lrr1); + + if ( baf1>=0 ) + { + if ( baf1<1/5. ) args->nRR++; + else if ( baf1>4/5. ) args->nAA++; + else args->nRA++; + } + args->nused++; +} + +static void usage(args_t *args) +{ + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "About: Copy number variation caller, requires Illumina's B-allele frequency (BAF) and Log R\n"); + fprintf(bcftools_stderr, " Ratio intensity (LRR). The HMM considers the following copy number states: CN 2\n"); + fprintf(bcftools_stderr, " (normal), 1 (single-copy loss), 0 (complete loss), 3 (single-copy gain)\n"); + fprintf(bcftools_stderr, "Usage: bcftools cnv [OPTIONS] \n"); + fprintf(bcftools_stderr, "General Options:\n"); + fprintf(bcftools_stderr, " -c, --control-sample optional control sample name to highlight differences\n"); + fprintf(bcftools_stderr, " -f, --AF-file read allele frequencies from file (CHR\\tPOS\\tREF,ALT\\tAF)\n"); + fprintf(bcftools_stderr, " -o, --output-dir \n"); + fprintf(bcftools_stderr, " -p, --plot-threshold plot aberrant chromosomes with quality at least 'float'\n"); + fprintf(bcftools_stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(bcftools_stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(bcftools_stderr, " -s, --query-sample query samply name\n"); + fprintf(bcftools_stderr, " -t, --targets similar to -r but streams rather than index-jumps\n"); + fprintf(bcftools_stderr, " -T, --targets-file similar to -R but streams rather than index-jumps\n"); + fprintf(bcftools_stderr, "HMM Options:\n"); + fprintf(bcftools_stderr, " -a, --aberrant fraction of aberrant cells in query and control [1.0,1.0]\n"); + fprintf(bcftools_stderr, " -b, --BAF-weight relative contribution from BAF [1]\n"); + fprintf(bcftools_stderr, " -d, --BAF-dev expected BAF deviation in query and control [0.04,0.04]\n"); // experimental + fprintf(bcftools_stderr, " -e, --err-prob uniform error probability [1e-4]\n"); + fprintf(bcftools_stderr, " -k, --LRR-dev expected LRR deviation [0.2,0.2]\n"); // experimental + fprintf(bcftools_stderr, " -l, --LRR-weight relative contribution from LRR [0.2]\n"); + fprintf(bcftools_stderr, " -L, --LRR-smooth-win window of LRR moving average smoothing [10]\n"); + fprintf(bcftools_stderr, " -O, --optimize estimate fraction of aberrant cells down to [1.0]\n"); + fprintf(bcftools_stderr, " -P, --same-prob prior probability of -s/-c being the same [0.5]\n"); + fprintf(bcftools_stderr, " -x, --xy-prob P(x|y) transition probability [1e-9]\n"); + fprintf(bcftools_stderr, "\n"); + exit(1); +} + +int main_vcfcnv(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->files = bcf_sr_init(); + args->plot_th = 1e9; // by default plot none + args->nonref_af_dflt = 0.1; + args->lrr_smooth_win = 10; + + args->query_sample.cell_frac_dflt = 1; + args->control_sample.cell_frac_dflt = 1; + + // How much FORMAT/LRR and FORMAT/BAF matter + args->lrr_bias = 0.2; + args->baf_bias = 1.0; + args->err_prob = 1e-4; + + // Transition probability to a different state and the prior of both samples being the same + args->ij_prob = 1e-9; + args->same_prob = 0.5; + + // Squared std dev of BAF and LRR values (gaussian noise), estimated from real data (hets, one sample, one chr) + args->query_sample.baf_dev2_dflt = args->control_sample.baf_dev2_dflt = 0.04*0.04; // illumina: 0.03 + args->query_sample.lrr_dev2 = args->control_sample.lrr_dev2 = 0.2*0.2; //0.20*0.20; // illumina: 0.18 + + int regions_is_file = 0, targets_is_file = 0; + static struct option loptions[] = + { + {"BAF-dev",1,0,'d'}, + {"LRR-dev",1,0,'k'}, + {"LRR-smooth-win",1,0,'L'}, + {"AF-file",1,0,'f'}, + {"baum-welch",1,0,'W'}, // hidden + {"optimize",1,0,'O'}, + {"aberrant",1,0,'a'}, + {"err-prob",1,0,'e'}, + {"BAF-weight",1,0,'b'}, + {"LRR-weight",1,0,'l'}, + {"same-prob",1,0,'P'}, + {"xy-prob",1,0,'x'}, + {"sample",1,0,'s'}, + {"control",1,0,'c'}, + {"targets",1,0,'t'}, + {"targets-file",1,0,'T'}, + {"regions",1,0,'r'}, + {"regions-file",1,0,'R'}, + {"plot",1,0,'p'}, + {"output-dir",1,0,'o'}, + {0,0,0,0} + }; + char *tmp = NULL; + while ((c = getopt_long(argc, argv, "h?r:R:t:T:s:o:p:l:T:c:b:P:x:e:O:W:f:a:L:d:k:",loptions,NULL)) >= 0) { + switch (c) { + case 'L': + args->lrr_smooth_win = strtol(optarg,&tmp,10); + if ( *tmp ) error("Could not parse: --LRR-smooth-win %s\n", optarg); + break; + case 'f': args->af_fname = optarg; break; + case 'O': + args->optimize_frac = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -O %s\n", optarg); + break; + case 'd': + args->query_sample.baf_dev2_dflt = strtod(optarg,&tmp); + if ( *tmp ) + { + if ( *tmp!=',') error("Could not parse: -d %s\n", optarg); + args->control_sample.baf_dev2_dflt = strtod(tmp+1,&tmp); + if ( *tmp ) error("Could not parse: -d %s\n", optarg); + } + else + args->control_sample.baf_dev2_dflt = args->query_sample.baf_dev2_dflt; + args->query_sample.baf_dev2_dflt *= args->query_sample.baf_dev2_dflt; + args->control_sample.baf_dev2_dflt *= args->control_sample.baf_dev2_dflt; + break; + case 'k': + args->query_sample.lrr_dev2 = strtod(optarg,&tmp); + if ( *tmp ) + { + if ( *tmp!=',') error("Could not parse: -k %s\n", optarg); + args->control_sample.lrr_dev2 = strtod(tmp+1,&tmp); + if ( *tmp ) error("Could not parse: -d %s\n", optarg); + } + else + args->control_sample.lrr_dev2 = args->query_sample.lrr_dev2; + args->query_sample.lrr_dev2 *= args->query_sample.lrr_dev2; + args->control_sample.lrr_dev2 *= args->control_sample.lrr_dev2; + break; + case 'a': + args->query_sample.cell_frac_dflt = strtod(optarg,&tmp); + if ( *tmp ) + { + if ( *tmp!=',') error("Could not parse: -a %s\n", optarg); + args->control_sample.cell_frac_dflt = strtod(tmp+1,&tmp); + if ( *tmp ) error("Could not parse: -a %s\n", optarg); + } + break; + case 'W': + args->baum_welch_th = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -W %s\n", optarg); + break; + case 'e': + args->err_prob = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -e %s\n", optarg); + break; + case 'b': + args->baf_bias = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -b %s\n", optarg); + break; + case 'x': + args->ij_prob = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -x %s\n", optarg); + break; + case 'P': + args->same_prob = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -P %s\n", optarg); + break; + case 'l': + args->lrr_bias = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -l %s\n", optarg); + break; + case 'p': + args->plot_th = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -p %s\n", optarg); + break; + case 'o': args->output_dir = optarg; break; + case 's': args->query_sample.name = strdup(optarg); break; + case 'c': args->control_sample.name = optarg; break; + case 't': args->targets_list = optarg; break; + case 'T': args->targets_list = optarg; targets_is_file = 1; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; regions_is_file = 1; break; + case 'h': + case '?': usage(args); break; + default: error("Unknown argument: %s\n", optarg); + } + } + + char *fname = NULL; + if ( optind>=argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; + } + else fname = argv[optind]; + if ( !fname ) usage(args); + + if ( !args->output_dir ) error("Expected -o option\n"); + if ( args->regions_list ) + { + if ( bcf_sr_set_regions(args->files, args->regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + } + if ( args->targets_list ) + { + if ( bcf_sr_set_targets(args->files, args->targets_list, targets_is_file, 0)<0 ) + error("Failed to read the targets: %s\n", args->targets_list); + } + if ( args->af_fname ) + { + if ( bcf_sr_set_targets(args->files, args->af_fname, 1, 3)<0 ) + error("Failed to read the targets: %s\n", args->af_fname); + } + if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); + + init_data(args); + while ( bcf_sr_next_line(args->files) ) + { + bcf1_t *line = bcf_sr_get_line(args->files,0); + cnv_next_line(args, line); + } + cnv_next_line(args, NULL); + create_plots(args); + fprintf(bcftools_stderr,"Number of lines: total/processed: %d/%d\n", args->ntot,args->nused); + destroy_data(args); + free(args); + return 0; +} + + diff --git a/bcftools/vcfconcat.c b/bcftools/vcfconcat.c new file mode 100644 index 0000000..3345c20 --- /dev/null +++ b/bcftools/vcfconcat.c @@ -0,0 +1,825 @@ +/* vcfconcat.c -- Concatenate or combine VCF/BCF files. + + Copyright (C) 2013-2015 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // for hts_get_bgzfp() +#include "bcftools.h" + +typedef struct _args_t +{ + bcf_srs_t *files; + htsFile *out_fh; + int output_type, n_threads, record_cmd_line; + bcf_hdr_t *out_hdr; + int *seen_seq; + + // phasing + int *start_pos, start_tid, ifname; + int *swap_phase, nswap, *nmatch, *nmism; + bcf1_t **buf; + int nbuf, mbuf, prev_chr, min_PQ, prev_pos_check; + int32_t *GTa, *GTb, mGTa, mGTb, *phase_qual, *phase_set; + + char **argv, *output_fname, *file_list, **fnames, *remove_dups, *regions_list; + int argc, nfnames, allow_overlaps, phased_concat, regions_is_file; + int compact_PS, phase_set_changed, naive_concat; +} +args_t; + +static void init_data(args_t *args) +{ + bcf1_t *line = NULL; + + // With phased concat, the chunks overlap and come in the right order. To + // avoid opening all files at once, store start positions to recognise need + // for the next one. This way we can keep only two open chunks at once. + if ( args->phased_concat ) + { + args->start_pos = (int*) malloc(sizeof(int)*args->nfnames); + line = bcf_init(); + } + + kstring_t str = {0,0,0}; + int i, prev_chrid = -1; + for (i=0; infnames; i++) + { + htsFile *fp = hts_open(args->fnames[i], "r"); if ( !fp ) error("Failed to open: %s\n", args->fnames[i]); + bcf_hdr_t *hdr = bcf_hdr_read(fp); if ( !hdr ) error("Failed to parse header: %s\n", args->fnames[i]); + args->out_hdr = bcf_hdr_merge(args->out_hdr,hdr); + if ( bcf_hdr_nsamples(hdr) != bcf_hdr_nsamples(args->out_hdr) ) + error("Different number of samples in %s. Perhaps \"bcftools merge\" is what you are looking for?\n", args->fnames[i]); + + int j; + for (j=0; jout_hdr->samples[j],hdr->samples[j]) ) + error("Different sample names in %s. Perhaps \"bcftools merge\" is what you are looking for?\n", args->fnames[i]); + + if ( args->phased_concat ) + { + int ret = bcf_read(fp, hdr, line); + if ( ret!=0 ) args->start_pos[i] = -2; // empty file + else + { + int chrid = bcf_hdr_id2int(args->out_hdr,BCF_DT_CTG,bcf_seqname(hdr,line)); + args->start_pos[i] = chrid==prev_chrid ? line->pos : -1; + prev_chrid = chrid; + } + } + bcf_hdr_destroy(hdr); + hts_close(fp); + } + free(str.s); + if ( line ) bcf_destroy(line); + + args->seen_seq = (int*) calloc(args->out_hdr->n[BCF_DT_CTG],sizeof(int)); + + if ( args->phased_concat ) + { + bcf_hdr_append(args->out_hdr,"##FORMAT="); + bcf_hdr_append(args->out_hdr,"##FORMAT="); + } + if (args->record_cmd_line) bcf_hdr_append_version(args->out_hdr, args->argc, args->argv, "bcftools_concat"); + args->out_fh = hts_open(args->output_fname,hts_bcf_wmode(args->output_type)); + if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno)); + if ( args->n_threads ) hts_set_threads(args->out_fh, args->n_threads); + + bcf_hdr_write(args->out_fh, args->out_hdr); + + if ( args->allow_overlaps ) + { + args->files = bcf_sr_init(); + args->files->require_index = 1; + if ( args->regions_list ) + { + if ( bcf_sr_set_regions(args->files, args->regions_list, args->regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + } + if ( args->remove_dups ) + { + if ( !strcmp(args->remove_dups,"snps") ) args->files->collapse |= COLLAPSE_SNPS; + else if ( !strcmp(args->remove_dups,"indels") ) args->files->collapse |= COLLAPSE_INDELS; + else if ( !strcmp(args->remove_dups,"both") ) args->files->collapse |= COLLAPSE_SNPS | COLLAPSE_INDELS; + else if ( !strcmp(args->remove_dups,"any") ) args->files->collapse |= COLLAPSE_ANY; + else if ( !strcmp(args->remove_dups,"all") ) args->files->collapse |= COLLAPSE_ANY; + else if ( !strcmp(args->remove_dups,"none") ) args->files->collapse = COLLAPSE_NONE; + else error("The -D string \"%s\" not recognised.\n", args->remove_dups); + } + for (i=0; infnames; i++) + if ( !bcf_sr_add_reader(args->files,args->fnames[i]) ) error("Failed to open %s: %s\n", args->fnames[i],bcf_sr_strerror(args->files->errnum)); + } + else if ( args->phased_concat ) + { + // Remove empty files from the list + int nok = 0; + while (1) + { + while ( noknfnames && args->start_pos[nok]!=-2 ) nok++; + if ( nok==args->nfnames ) break; + + i = nok; + while ( infnames && args->start_pos[i]==-2 ) i++; + if ( i==args->nfnames ) break; + + int tmp = args->start_pos[nok]; args->start_pos[nok] = args->start_pos[i]; args->start_pos[i] = tmp; + char *str = args->fnames[nok]; args->fnames[nok] = args->fnames[i]; args->fnames[i] = str; + } + for (i=nok; infnames; i++) free(args->fnames[i]); + args->nfnames = nok; + + for (i=1; infnames; i++) + if ( args->start_pos[i-1]!=-1 && args->start_pos[i]!=-1 && args->start_pos[i]start_pos[i-1] ) + error("The files not in ascending order: %d in %s, %d in %s\n", args->start_pos[i-1]+1,args->fnames[i-1],args->start_pos[i]+1,args->fnames[i]); + + args->prev_chr = -1; + args->swap_phase = (int*) calloc(bcf_hdr_nsamples(args->out_hdr),sizeof(int)); + args->nmatch = (int*) calloc(bcf_hdr_nsamples(args->out_hdr),sizeof(int)); + args->nmism = (int*) calloc(bcf_hdr_nsamples(args->out_hdr),sizeof(int)); + args->phase_qual = (int32_t*) malloc(bcf_hdr_nsamples(args->out_hdr)*sizeof(int32_t)); + args->phase_set = (int32_t*) malloc(bcf_hdr_nsamples(args->out_hdr)*sizeof(int32_t)); + args->files = bcf_sr_init(); + args->files->require_index = 1; + args->ifname = 0; + } +} + +static void destroy_data(args_t *args) +{ + int i; + for (i=0; infnames; i++) free(args->fnames[i]); + free(args->fnames); + if ( args->files ) bcf_sr_destroy(args->files); + if ( args->out_fh ) + { + if ( hts_close(args->out_fh)!=0 ) error("hts_close error\n"); + } + if ( args->out_hdr ) bcf_hdr_destroy(args->out_hdr); + free(args->seen_seq); + free(args->start_pos); + free(args->swap_phase); + for (i=0; imbuf; i++) bcf_destroy(args->buf[i]); + free(args->buf); + free(args->GTa); + free(args->GTb); + free(args->nmatch); + free(args->nmism); + free(args->phase_qual); + free(args->phase_set); +} + +int vcf_write_line(htsFile *fp, kstring_t *line); + +#define SWAP(type_t, a, b) { type_t t = a; a = b; b = t; } +static void phase_update(args_t *args, bcf_hdr_t *hdr, bcf1_t *rec) +{ + int i, nGTs = bcf_get_genotypes(hdr, rec, &args->GTa, &args->mGTa); + if ( nGTs <= 0 ) return; // GT field is not present + for (i=0; iswap_phase[i] ) continue; + int *gt = &args->GTa[i*2]; + if ( bcf_gt_is_missing(gt[0]) || gt[1]==bcf_int32_vector_end ) continue; + SWAP(int, gt[0], gt[1]); + gt[1] |= 1; + } + bcf_update_genotypes(hdr,rec,args->GTa,nGTs); +} + +static void phased_flush(args_t *args) +{ + if ( !args->nbuf ) return; + + bcf_hdr_t *ahdr = args->files->readers[0].header; + bcf_hdr_t *bhdr = args->files->readers[1].header; + + int i, j, nsmpl = bcf_hdr_nsamples(args->out_hdr); + static int gt_absent_warned = 0; + + for (i=0; inbuf; i+=2) + { + bcf1_t *arec = args->buf[i]; + bcf1_t *brec = args->buf[i+1]; + + int nGTs = bcf_get_genotypes(ahdr, arec, &args->GTa, &args->mGTa); + if ( nGTs < 0 ) + { + if ( !gt_absent_warned ) + { + fprintf(stderr,"GT is not present at %s:%d. (This warning is printed only once.)\n", bcf_seqname(ahdr,arec), arec->pos+1); + gt_absent_warned = 1; + } + continue; + } + if ( nGTs != 2*nsmpl ) continue; // not diploid + nGTs = bcf_get_genotypes(bhdr, brec, &args->GTb, &args->mGTb); + if ( nGTs < 0 ) + { + if ( !gt_absent_warned ) + { + fprintf(stderr,"GT is not present at %s:%d. (This warning is printed only once.)\n", bcf_seqname(bhdr,brec), brec->pos+1); + gt_absent_warned = 1; + } + continue; + } + if ( nGTs != 2*nsmpl ) continue; // not diploid + + for (j=0; jGTa[j*2]; + int *gtb = &args->GTb[j*2]; + if ( gta[1]==bcf_int32_vector_end || gtb[1]==bcf_int32_vector_end ) continue; + if ( bcf_gt_is_missing(gta[0]) || bcf_gt_is_missing(gta[1]) || bcf_gt_is_missing(gtb[0]) || bcf_gt_is_missing(gtb[1]) ) continue; + if ( !bcf_gt_is_phased(gta[1]) || !bcf_gt_is_phased(gtb[1]) ) continue; + if ( bcf_gt_allele(gta[0])==bcf_gt_allele(gta[1]) || bcf_gt_allele(gtb[0])==bcf_gt_allele(gtb[1]) ) continue; + if ( bcf_gt_allele(gta[0])==bcf_gt_allele(gtb[0]) && bcf_gt_allele(gta[1])==bcf_gt_allele(gtb[1]) ) + { + if ( args->swap_phase[j] ) args->nmism[j]++; else args->nmatch[j]++; + } + if ( bcf_gt_allele(gta[0])==bcf_gt_allele(gtb[1]) && bcf_gt_allele(gta[1])==bcf_gt_allele(gtb[0]) ) + { + if ( args->swap_phase[j] ) args->nmatch[j]++; else args->nmism[j]++; + } + } + } + for (i=0; inbuf/2; i+=2) + { + bcf1_t *arec = args->buf[i]; + bcf_translate(args->out_hdr, args->files->readers[0].header, arec); + if ( args->nswap ) + phase_update(args, args->out_hdr, arec); + if ( !args->compact_PS || args->phase_set_changed ) + { + bcf_update_format_int32(args->out_hdr,arec,"PS",args->phase_set,nsmpl); + args->phase_set_changed = 0; + } + bcf_write(args->out_fh, args->out_hdr, arec); + + if ( arec->pos < args->prev_pos_check ) error("FIXME, disorder: %s:%d vs %d [1]\n", bcf_seqname(args->files->readers[0].header,arec),arec->pos+1,args->prev_pos_check+1); + args->prev_pos_check = arec->pos; + } + args->nswap = 0; + for (j=0; jnmatch[j] >= args->nmism[j] ) + args->swap_phase[j] = 0; + else + { + args->swap_phase[j] = 1; + args->nswap++; + } + if ( args->nmatch[j] && args->nmism[j] ) + { + // Entropy-inspired quality. The factor 0.7 shifts and scales to (0,1) + double f = (double)args->nmatch[j]/(args->nmatch[j]+args->nmism[j]); + args->phase_qual[j] = 99*(0.7 + f*log(f) + (1-f)*log(1-f))/0.7; + } + else + args->phase_qual[j] = 99; + args->nmatch[j] = 0; + args->nmism[j] = 0; + } + int PQ_printed = 0; + for (; inbuf; i+=2) + { + bcf1_t *brec = args->buf[i+1]; + bcf_translate(args->out_hdr, args->files->readers[1].header, brec); + if ( !PQ_printed ) + { + bcf_update_format_int32(args->out_hdr,brec,"PQ",args->phase_qual,nsmpl); + PQ_printed = 1; + for (j=0; jphase_qual[j] < args->min_PQ ) + { + args->phase_set[j] = brec->pos+1; + args->phase_set_changed = 1; + } + else if ( args->compact_PS ) args->phase_set[j] = bcf_int32_missing; + } + if ( args->nswap ) + phase_update(args, args->out_hdr, brec); + if ( !args->compact_PS || args->phase_set_changed ) + { + bcf_update_format_int32(args->out_hdr,brec,"PS",args->phase_set,nsmpl); + args->phase_set_changed = 0; + } + bcf_write(args->out_fh, args->out_hdr, brec); + + if ( brec->pos < args->prev_pos_check ) error("FIXME, disorder: %s:%d vs %d [2]\n", bcf_seqname(args->files->readers[1].header,brec),brec->pos+1,args->prev_pos_check+1); + args->prev_pos_check = brec->pos; + } + args->nbuf = 0; +} + +static void phased_push(args_t *args, bcf1_t *arec, bcf1_t *brec) +{ + if ( arec && arec->errcode ) + error("Parse error at %s:%d, cannot proceed: %s\n", bcf_seqname(args->files->readers[0].header,arec),arec->pos+1, args->files->readers[0].fname); + if ( brec && brec->errcode ) + error("Parse error at %s:%d, cannot proceed: %s\n", bcf_seqname(args->files->readers[1].header,brec),brec->pos+1, args->files->readers[1].fname); + + int i, nsmpl = bcf_hdr_nsamples(args->out_hdr); + int chr_id = bcf_hdr_name2id(args->out_hdr, bcf_seqname(args->files->readers[0].header,arec)); + if ( args->prev_chr<0 || args->prev_chr!=chr_id ) + { + if ( args->prev_chr>=0 ) phased_flush(args); + + for (i=0; iphase_set[i] = arec->pos+1; + args->phase_set_changed = 1; + + if ( args->seen_seq[chr_id] ) error("The chromosome block %s is not contiguous\n", bcf_seqname(args->files->readers[0].header,arec)); + args->seen_seq[chr_id] = 1; + args->prev_chr = chr_id; + args->prev_pos_check = -1; + } + + if ( !brec ) + { + bcf_translate(args->out_hdr, args->files->readers[0].header, arec); + if ( args->nswap ) + phase_update(args, args->out_hdr, arec); + if ( !args->compact_PS || args->phase_set_changed ) + { + bcf_update_format_int32(args->out_hdr,arec,"PS",args->phase_set,nsmpl); + args->phase_set_changed = 0; + } + bcf_write(args->out_fh, args->out_hdr, arec); + + if ( arec->pos < args->prev_pos_check ) + error("FIXME, disorder: %s:%d in %s vs %d written [3]\n", bcf_seqname(args->files->readers[0].header,arec), arec->pos+1,args->files->readers[0].fname, args->prev_pos_check+1); + args->prev_pos_check = arec->pos; + return; + } + + int m = args->mbuf; + args->nbuf += 2; + hts_expand(bcf1_t*,args->nbuf,args->mbuf,args->buf); + for (i=m; imbuf; i++) + args->buf[i] = bcf_init1(); + + SWAP(bcf1_t*, args->files->readers[0].buffer[0], args->buf[args->nbuf-2]); + SWAP(bcf1_t*, args->files->readers[1].buffer[0], args->buf[args->nbuf-1]); +} + +static void concat(args_t *args) +{ + int i; + if ( args->phased_concat ) // phased concat + { + // keep only two open files at a time + while ( args->ifname < args->nfnames ) + { + int new_file = 0; + while ( args->files->nreaders < 2 && args->ifname < args->nfnames ) + { + if ( !bcf_sr_add_reader(args->files,args->fnames[args->ifname]) ) error("Failed to open %s: %s\n", args->fnames[args->ifname],bcf_sr_strerror(args->files->errnum)); + new_file = 1; + + args->ifname++; + if ( args->start_pos[args->ifname-1]==-1 ) break; // new chromosome, start with only one file open + if ( args->ifname < args->nfnames && args->start_pos[args->ifname]==-1 ) break; // next file starts on a different chromosome + } + + // is there a line from the previous run? Seek the newly opened reader to that position + int seek_pos = -1; + int seek_chr = -1; + if ( bcf_sr_has_line(args->files,0) ) + { + bcf1_t *line = bcf_sr_get_line(args->files,0); + bcf_sr_seek(args->files, bcf_seqname(args->files->readers[0].header,line), line->pos); + seek_pos = line->pos; + seek_chr = bcf_hdr_name2id(args->out_hdr, bcf_seqname(args->files->readers[0].header,line)); + } + else if ( new_file ) + bcf_sr_seek(args->files,NULL,0); // set to start + + int nret; + while ( (nret = bcf_sr_next_line(args->files)) ) + { + if ( !bcf_sr_has_line(args->files,0) ) // no input from the first reader + { + // We are assuming that there is a perfect overlap, sites which are not present in both files are dropped + if ( ! bcf_sr_region_done(args->files,0) ) continue; + + phased_flush(args); + bcf_sr_remove_reader(args->files, 0); + } + + // Get a line to learn about current position + for (i=0; ifiles->nreaders; i++) + if ( bcf_sr_has_line(args->files,i) ) break; + bcf1_t *line = bcf_sr_get_line(args->files,i); + + // This can happen after bcf_sr_seek: indel may start before the coordinate which we seek to. + if ( seek_chr>=0 && seek_pos>line->pos && seek_chr==bcf_hdr_name2id(args->out_hdr, bcf_seqname(args->files->readers[i].header,line)) ) continue; + seek_pos = seek_chr = -1; + + // Check if the position overlaps with the next, yet unopened, reader + int must_seek = 0; + while ( args->ifname < args->nfnames && args->start_pos[args->ifname]!=-1 && line->pos >= args->start_pos[args->ifname] ) + { + must_seek = 1; + if ( !bcf_sr_add_reader(args->files,args->fnames[args->ifname]) ) error("Failed to open %s: %s\n", args->fnames[args->ifname],bcf_sr_strerror(args->files->errnum)); + args->ifname++; + } + if ( must_seek ) + { + bcf_sr_seek(args->files, bcf_seqname(args->files->readers[i].header,line), line->pos); + seek_pos = line->pos; + seek_chr = bcf_hdr_name2id(args->out_hdr, bcf_seqname(args->files->readers[i].header,line)); + continue; + } + + // We are assuming that there is a perfect overlap, sites which are not present in both files are dropped + if ( args->files->nreaders>1 && !bcf_sr_has_line(args->files,1) && !bcf_sr_region_done(args->files,1) ) continue; + + phased_push(args, bcf_sr_get_line(args->files,0), args->files->nreaders>1 ? bcf_sr_get_line(args->files,1) : NULL); + } + + if ( args->files->nreaders ) + { + phased_flush(args); + while ( args->files->nreaders ) + bcf_sr_remove_reader(args->files, 0); + } + } + } + else if ( args->files ) // combining overlapping files, using synced reader + { + while ( bcf_sr_next_line(args->files) ) + { + for (i=0; ifiles->nreaders; i++) + { + bcf1_t *line = bcf_sr_get_line(args->files,i); + if ( !line ) continue; + bcf_translate(args->out_hdr, args->files->readers[i].header, line); + bcf_write1(args->out_fh, args->out_hdr, line); + if ( args->remove_dups ) break; + } + } + } + else // concatenating + { + kstring_t tmp = {0,0,0}; + int prev_chr_id = -1, prev_pos; + bcf1_t *line = bcf_init(); + for (i=0; infnames; i++) + { + htsFile *fp = hts_open(args->fnames[i], "r"); if ( !fp ) error("Failed to open: %s\n", args->fnames[i]); + bcf_hdr_t *hdr = bcf_hdr_read(fp); if ( !hdr ) error("Failed to parse header: %s\n", args->fnames[i]); + if ( !fp->is_bin && args->output_type&FT_VCF ) + { + line->max_unpack = BCF_UN_STR; + // if VCF is on both input and output, avoid VCF to BCF conversion + while ( hts_getline(fp, KS_SEP_LINE, &fp->line) >=0 ) + { + char *str = fp->line.s; + while ( *str && *str!='\t' ) str++; + tmp.l = 0; + kputsn(fp->line.s,str-fp->line.s,&tmp); + int chr_id = bcf_hdr_name2id(args->out_hdr, tmp.s); + if ( chr_id<0 ) error("The sequence \"%s\" not defined in the header: %s\n(Quick workaround: index the file.)\n", tmp.s, args->fnames[i]); + if ( prev_chr_id!=chr_id ) + { + prev_pos = -1; + if ( args->seen_seq[chr_id] ) + error("\nThe chromosome block %s is not contiguous, consider running with -a.\n", tmp.s); + } + char *end; + int pos = strtol(str+1,&end,10) - 1; + if ( end==str+1 ) error("Could not parse line: %s\n", fp->line.s); + if ( prev_pos > pos ) + error("The chromosome block %s is not sorted, consider running with -a.\n", tmp.s); + args->seen_seq[chr_id] = 1; + prev_chr_id = chr_id; + + if ( vcf_write_line(args->out_fh, &fp->line)!=0 ) error("Failed to write %d bytes\n", fp->line.l); + } + } + else + { + // BCF conversion is required + line->max_unpack = 0; + while ( bcf_read(fp, hdr, line)==0 ) + { + bcf_translate(args->out_hdr, hdr, line); + + if ( prev_chr_id!=line->rid ) + { + prev_pos = -1; + if ( args->seen_seq[line->rid] ) + error("\nThe chromosome block %s is not contiguous, consider running with -a.\n", bcf_seqname(args->out_hdr, line)); + } + if ( prev_pos > line->pos ) + error("The chromosome block %s is not sorted, consider running with -a.\n", bcf_seqname(args->out_hdr, line)); + args->seen_seq[line->rid] = 1; + prev_chr_id = line->rid; + + if ( bcf_write(args->out_fh, args->out_hdr, line)!=0 ) error("Failed to write\n"); + } + } + bcf_hdr_destroy(hdr); + hts_close(fp); + } + bcf_destroy(line); + free(tmp.s); + } +} + +int print_vcf_gz_header(BGZF *fp, BGZF *bgzf_out, int print_header, kstring_t *tmp) +{ + char *buffer = (char*) fp->uncompressed_block; + + // Read the header and find the position of the data block + if ( buffer[0]!='#' ) error("Could not parse the header, expected '#', found '%c'\n", buffer[0]); + + int nskip = 1; // end of the header in the current uncompressed block + while (1) + { + if ( buffer[nskip]=='\n' ) + { + nskip++; + if ( nskip>=fp->block_length ) + { + kputsn(buffer,nskip,tmp); + if ( bgzf_read_block(fp) != 0 ) return -1; + if ( !fp->block_length ) break; + nskip = 0; + } + // The header has finished + if ( buffer[nskip]!='#' ) + { + kputsn(buffer,nskip,tmp); + break; + } + } + nskip++; + if ( nskip>=fp->block_length ) + { + kputsn(buffer,fp->block_length,tmp); + if ( bgzf_read_block(fp) != 0 ) return -1; + if ( !fp->block_length ) break; + nskip = 0; + } + } + if ( print_header ) + { + if ( bgzf_write(bgzf_out,tmp->s,tmp->l) != tmp->l ) error("Failed to write %d bytes\n", tmp->l); + tmp->l = 0; + } + return nskip; +} + +static inline int unpackInt16(const uint8_t *buffer) +{ + return buffer[0] | buffer[1] << 8; +} +static int check_header(const uint8_t *header) +{ + if ( header[0] != 31 || header[1] != 139 || header[2] != 8 ) return -2; + return ((header[3] & 4) != 0 + && unpackInt16((uint8_t*)&header[10]) == 6 + && header[12] == 'B' && header[13] == 'C' + && unpackInt16((uint8_t*)&header[14]) == 2) ? 0 : -1; +} +static void naive_concat(args_t *args) +{ + // only compressed BCF atm + BGZF *bgzf_out = bgzf_open(args->output_fname,"w");; + + const size_t page_size = BGZF_MAX_BLOCK_SIZE; + uint8_t *buf = (uint8_t*) malloc(page_size); + kstring_t tmp = {0,0,0}; + int i, file_types = 0; + for (i=0; infnames; i++) + { + htsFile *hts_fp = hts_open(args->fnames[i],"r"); + if ( !hts_fp ) error("Failed to open: %s\n", args->fnames[i]); + htsFormat type = *hts_get_format(hts_fp); + + if ( type.compression!=bgzf ) + error("The --naive option works only for compressed BCFs or VCFs, sorry :-/\n"); + file_types |= type.format==vcf ? 1 : 2; + if ( file_types==3 ) + error("The --naive option works only for compressed files of the same type, all BCFs or all VCFs :-/\n"); + + BGZF *fp = hts_get_bgzfp(hts_fp); + if ( !fp || bgzf_read_block(fp) != 0 || !fp->block_length ) + error("Failed to read %s: %s\n", args->fnames[i], strerror(errno)); + + int nskip; + if ( type.format==bcf ) + { + uint8_t magic[5]; + if ( bgzf_read(fp, magic, 5) != 5 ) error("Failed to read the BCF header in %s\n", args->fnames[i]); + if (strncmp((char*)magic, "BCF\2\2", 5) != 0) error("Invalid BCF magic string in %s\n", args->fnames[i]); + + if ( bgzf_read(fp, &tmp.l, 4) != 4 ) error("Failed to read the BCF header in %s\n", args->fnames[i]); + hts_expand(char,tmp.l,tmp.m,tmp.s); + if ( bgzf_read(fp, tmp.s, tmp.l) != tmp.l ) error("Failed to read the BCF header in %s\n", args->fnames[i]); + + // write only the first header + if ( i==0 ) + { + if ( bgzf_write(bgzf_out, "BCF\2\2", 5) !=5 ) error("Failed to write %d bytes to %s\n", 5,args->output_fname); + if ( bgzf_write(bgzf_out, &tmp.l, 4) !=4 ) error("Failed to write %d bytes to %s\n", 4,args->output_fname); + if ( bgzf_write(bgzf_out, tmp.s, tmp.l) != tmp.l) error("Failed to write %d bytes to %s\n", tmp.l,args->output_fname); + } + nskip = fp->block_offset; + } + else + { + nskip = print_vcf_gz_header(fp, bgzf_out, i==0?1:0, &tmp); + if ( nskip==-1 ) error("Error reading %s\n", args->fnames[i]); + } + + // Output all non-header data that were read together with the header block + if ( fp->block_length - nskip > 0 ) + { + if ( bgzf_write(bgzf_out, (char *)fp->uncompressed_block+nskip, fp->block_length-nskip)<0 ) error("Error: %d\n",fp->errcode); + } + if ( bgzf_flush(bgzf_out)<0 ) error("Error: %d\n",bgzf_out->errcode); + + + // Stream the rest of the file as it is, without recompressing, but remove BGZF EOF blocks + // The final bgzf eof block will be added by bgzf_close. + ssize_t nread, nblock, nwr; + const int nheader = 18, neof = 28; + const uint8_t *eof = (uint8_t*) "\037\213\010\4\0\0\0\0\0\377\6\0\102\103\2\0\033\0\3\0\0\0\0\0\0\0\0\0"; + while (1) + { + nread = bgzf_raw_read(fp, buf, nheader); + if ( !nread ) break; + if ( nread != nheader || check_header(buf)!=0 ) error("Could not parse the header of a bgzf block: %s\n",args->fnames[i]); + nblock = unpackInt16(buf+16) + 1; + assert( nblock <= page_size && nblock >= nheader ); + nread += bgzf_raw_read(fp, buf+nheader, nblock - nheader); + if ( nread!=nblock ) error("Could not read %d bytes: %s\n",nblock,args->fnames[i]); + if ( nread==neof && !memcmp(buf,eof,neof) ) continue; + nwr = bgzf_raw_write(bgzf_out, buf, nread); + if ( nwr != nread ) error("Write failed, wrote %d instead of %d bytes.\n", nwr,(int)nread); + } + if (hts_close(hts_fp)) error("Close failed: %s\n",args->fnames[i]); + } + free(buf); + free(tmp.s); + if (bgzf_close(bgzf_out) < 0) error("Error: %d\n",bgzf_out->errcode); +} + +static void usage(args_t *args) +{ + fprintf(stderr, "\n"); + fprintf(stderr, "About: Concatenate or combine VCF/BCF files. All source files must have the same sample\n"); + fprintf(stderr, " columns appearing in the same order. The program can be used, for example, to\n"); + fprintf(stderr, " concatenate chromosome VCFs into one VCF, or combine a SNP VCF and an indel\n"); + fprintf(stderr, " VCF into one. The input files must be sorted by chr and position. The files\n"); + fprintf(stderr, " must be given in the correct order to produce sorted VCF on output unless\n"); + fprintf(stderr, " the -a, --allow-overlaps option is specified. With the --naive option, the files\n"); + fprintf(stderr, " are concatenated without being recompressed, which is very fast but dangerous\n"); + fprintf(stderr, " if the BCF headers differ.\n"); + fprintf(stderr, "Usage: bcftools concat [options] [ [...]]\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " -a, --allow-overlaps First coordinate of the next file can precede last record of the current file.\n"); + fprintf(stderr, " -c, --compact-PS Do not output PS tag at each site, only at the start of a new phase set block.\n"); + fprintf(stderr, " -d, --rm-dups Output duplicate records present in multiple files only once: \n"); + fprintf(stderr, " -D, --remove-duplicates Alias for -d none\n"); + fprintf(stderr, " -f, --file-list Read the list of files from a file.\n"); + fprintf(stderr, " -l, --ligate Ligate phased VCFs by matching phase at overlapping haplotypes\n"); + fprintf(stderr, " --no-version Do not append version and command line to the header\n"); + fprintf(stderr, " -n, --naive Concatenate files without recompression (dangerous, use with caution)\n"); + fprintf(stderr, " -o, --output Write output to a file [standard output]\n"); + fprintf(stderr, " -O, --output-type b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"); + fprintf(stderr, " -q, --min-PQ Break phase set if phasing quality is lower than [30]\n"); + fprintf(stderr, " -r, --regions Restrict to comma-separated list of regions\n"); + fprintf(stderr, " -R, --regions-file Restrict to regions listed in a file\n"); + fprintf(stderr, " --threads Number of extra output compression threads [0]\n"); + fprintf(stderr, "\n"); + exit(1); +} + +int main_vcfconcat(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->output_fname = "-"; + args->output_type = FT_VCF; + args->n_threads = 0; + args->record_cmd_line = 1; + args->min_PQ = 30; + + static struct option loptions[] = + { + {"naive",no_argument,NULL,'n'}, + {"compact-PS",no_argument,NULL,'c'}, + {"regions",required_argument,NULL,'r'}, + {"regions-file",required_argument,NULL,'R'}, + {"remove-duplicates",no_argument,NULL,'D'}, + {"rm-dups",required_argument,NULL,'d'}, + {"allow-overlaps",no_argument,NULL,'a'}, + {"ligate",no_argument,NULL,'l'}, + {"output",required_argument,NULL,'o'}, + {"output-type",required_argument,NULL,'O'}, + {"threads",required_argument,NULL,9}, + {"file-list",required_argument,NULL,'f'}, + {"min-PQ",required_argument,NULL,'q'}, + {"no-version",no_argument,NULL,8}, + {NULL,0,NULL,0} + }; + char *tmp; + while ((c = getopt_long(argc, argv, "h:?o:O:f:alq:Dd:r:R:cn",loptions,NULL)) >= 0) + { + switch (c) { + case 'c': args->compact_PS = 1; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; args->regions_is_file = 1; break; + case 'd': args->remove_dups = optarg; break; + case 'D': args->remove_dups = "none"; break; + case 'q': + args->min_PQ = strtol(optarg,&tmp,10); + if ( *tmp ) error("Could not parse argument: --min-PQ %s\n", optarg); + break; + case 'n': args->naive_concat = 1; break; + case 'a': args->allow_overlaps = 1; break; + case 'l': args->phased_concat = 1; break; + case 'f': args->file_list = optarg; break; + case 'o': args->output_fname = optarg; break; + case 'O': + switch (optarg[0]) { + case 'b': args->output_type = FT_BCF_GZ; break; + case 'u': args->output_type = FT_BCF; break; + case 'z': args->output_type = FT_VCF_GZ; break; + case 'v': args->output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + }; + break; + case 9 : args->n_threads = strtol(optarg, 0, 0); break; + case 8 : args->record_cmd_line = 0; break; + case 'h': + case '?': usage(args); break; + default: error("Unknown argument: %s\n", optarg); + } + } + while ( optindnfnames++; + args->fnames = (char **)realloc(args->fnames,sizeof(char*)*args->nfnames); + args->fnames[args->nfnames-1] = strdup(argv[optind]); + optind++; + } + if ( args->allow_overlaps && args->phased_concat ) args->allow_overlaps = 0; + if ( args->compact_PS && !args->phased_concat ) error("The -c option is intended only with -l\n"); + if ( args->file_list ) + { + if ( args->nfnames ) error("Cannot combine -l with file names on command line.\n"); + args->fnames = hts_readlines(args->file_list, &args->nfnames); + if ( !args->fnames ) error("Could not read the file: %s\n", args->file_list); + } + if ( !args->nfnames ) usage(args); + if ( args->remove_dups && !args->allow_overlaps ) error("The -D option is supported only with -a\n"); + if ( args->regions_list && !args->allow_overlaps ) error("The -r/-R option is supported only with -a\n"); + if ( args->naive_concat ) + { + if ( args->allow_overlaps ) error("The option --naive cannot be combined with --allow-overlaps\n"); + if ( args->phased_concat ) error("The option --naive cannot be combined with --ligate\n"); + naive_concat(args); + destroy_data(args); + free(args); + return 0; + } + init_data(args); + concat(args); + destroy_data(args); + free(args); + return 0; +} diff --git a/bcftools/vcfconcat.c.pysam.c b/bcftools/vcfconcat.c.pysam.c new file mode 100644 index 0000000..1a67b86 --- /dev/null +++ b/bcftools/vcfconcat.c.pysam.c @@ -0,0 +1,827 @@ +#include "bcftools.pysam.h" + +/* vcfconcat.c -- Concatenate or combine VCF/BCF files. + + Copyright (C) 2013-2015 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // for hts_get_bgzfp() +#include "bcftools.h" + +typedef struct _args_t +{ + bcf_srs_t *files; + htsFile *out_fh; + int output_type, n_threads, record_cmd_line; + bcf_hdr_t *out_hdr; + int *seen_seq; + + // phasing + int *start_pos, start_tid, ifname; + int *swap_phase, nswap, *nmatch, *nmism; + bcf1_t **buf; + int nbuf, mbuf, prev_chr, min_PQ, prev_pos_check; + int32_t *GTa, *GTb, mGTa, mGTb, *phase_qual, *phase_set; + + char **argv, *output_fname, *file_list, **fnames, *remove_dups, *regions_list; + int argc, nfnames, allow_overlaps, phased_concat, regions_is_file; + int compact_PS, phase_set_changed, naive_concat; +} +args_t; + +static void init_data(args_t *args) +{ + bcf1_t *line = NULL; + + // With phased concat, the chunks overlap and come in the right order. To + // avoid opening all files at once, store start positions to recognise need + // for the next one. This way we can keep only two open chunks at once. + if ( args->phased_concat ) + { + args->start_pos = (int*) malloc(sizeof(int)*args->nfnames); + line = bcf_init(); + } + + kstring_t str = {0,0,0}; + int i, prev_chrid = -1; + for (i=0; infnames; i++) + { + htsFile *fp = hts_open(args->fnames[i], "r"); if ( !fp ) error("Failed to open: %s\n", args->fnames[i]); + bcf_hdr_t *hdr = bcf_hdr_read(fp); if ( !hdr ) error("Failed to parse header: %s\n", args->fnames[i]); + args->out_hdr = bcf_hdr_merge(args->out_hdr,hdr); + if ( bcf_hdr_nsamples(hdr) != bcf_hdr_nsamples(args->out_hdr) ) + error("Different number of samples in %s. Perhaps \"bcftools merge\" is what you are looking for?\n", args->fnames[i]); + + int j; + for (j=0; jout_hdr->samples[j],hdr->samples[j]) ) + error("Different sample names in %s. Perhaps \"bcftools merge\" is what you are looking for?\n", args->fnames[i]); + + if ( args->phased_concat ) + { + int ret = bcf_read(fp, hdr, line); + if ( ret!=0 ) args->start_pos[i] = -2; // empty file + else + { + int chrid = bcf_hdr_id2int(args->out_hdr,BCF_DT_CTG,bcf_seqname(hdr,line)); + args->start_pos[i] = chrid==prev_chrid ? line->pos : -1; + prev_chrid = chrid; + } + } + bcf_hdr_destroy(hdr); + hts_close(fp); + } + free(str.s); + if ( line ) bcf_destroy(line); + + args->seen_seq = (int*) calloc(args->out_hdr->n[BCF_DT_CTG],sizeof(int)); + + if ( args->phased_concat ) + { + bcf_hdr_append(args->out_hdr,"##FORMAT="); + bcf_hdr_append(args->out_hdr,"##FORMAT="); + } + if (args->record_cmd_line) bcf_hdr_append_version(args->out_hdr, args->argc, args->argv, "bcftools_concat"); + args->out_fh = hts_open(args->output_fname,hts_bcf_wmode(args->output_type)); + if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno)); + if ( args->n_threads ) hts_set_threads(args->out_fh, args->n_threads); + + bcf_hdr_write(args->out_fh, args->out_hdr); + + if ( args->allow_overlaps ) + { + args->files = bcf_sr_init(); + args->files->require_index = 1; + if ( args->regions_list ) + { + if ( bcf_sr_set_regions(args->files, args->regions_list, args->regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + } + if ( args->remove_dups ) + { + if ( !strcmp(args->remove_dups,"snps") ) args->files->collapse |= COLLAPSE_SNPS; + else if ( !strcmp(args->remove_dups,"indels") ) args->files->collapse |= COLLAPSE_INDELS; + else if ( !strcmp(args->remove_dups,"both") ) args->files->collapse |= COLLAPSE_SNPS | COLLAPSE_INDELS; + else if ( !strcmp(args->remove_dups,"any") ) args->files->collapse |= COLLAPSE_ANY; + else if ( !strcmp(args->remove_dups,"all") ) args->files->collapse |= COLLAPSE_ANY; + else if ( !strcmp(args->remove_dups,"none") ) args->files->collapse = COLLAPSE_NONE; + else error("The -D string \"%s\" not recognised.\n", args->remove_dups); + } + for (i=0; infnames; i++) + if ( !bcf_sr_add_reader(args->files,args->fnames[i]) ) error("Failed to open %s: %s\n", args->fnames[i],bcf_sr_strerror(args->files->errnum)); + } + else if ( args->phased_concat ) + { + // Remove empty files from the list + int nok = 0; + while (1) + { + while ( noknfnames && args->start_pos[nok]!=-2 ) nok++; + if ( nok==args->nfnames ) break; + + i = nok; + while ( infnames && args->start_pos[i]==-2 ) i++; + if ( i==args->nfnames ) break; + + int tmp = args->start_pos[nok]; args->start_pos[nok] = args->start_pos[i]; args->start_pos[i] = tmp; + char *str = args->fnames[nok]; args->fnames[nok] = args->fnames[i]; args->fnames[i] = str; + } + for (i=nok; infnames; i++) free(args->fnames[i]); + args->nfnames = nok; + + for (i=1; infnames; i++) + if ( args->start_pos[i-1]!=-1 && args->start_pos[i]!=-1 && args->start_pos[i]start_pos[i-1] ) + error("The files not in ascending order: %d in %s, %d in %s\n", args->start_pos[i-1]+1,args->fnames[i-1],args->start_pos[i]+1,args->fnames[i]); + + args->prev_chr = -1; + args->swap_phase = (int*) calloc(bcf_hdr_nsamples(args->out_hdr),sizeof(int)); + args->nmatch = (int*) calloc(bcf_hdr_nsamples(args->out_hdr),sizeof(int)); + args->nmism = (int*) calloc(bcf_hdr_nsamples(args->out_hdr),sizeof(int)); + args->phase_qual = (int32_t*) malloc(bcf_hdr_nsamples(args->out_hdr)*sizeof(int32_t)); + args->phase_set = (int32_t*) malloc(bcf_hdr_nsamples(args->out_hdr)*sizeof(int32_t)); + args->files = bcf_sr_init(); + args->files->require_index = 1; + args->ifname = 0; + } +} + +static void destroy_data(args_t *args) +{ + int i; + for (i=0; infnames; i++) free(args->fnames[i]); + free(args->fnames); + if ( args->files ) bcf_sr_destroy(args->files); + if ( args->out_fh ) + { + if ( hts_close(args->out_fh)!=0 ) error("hts_close error\n"); + } + if ( args->out_hdr ) bcf_hdr_destroy(args->out_hdr); + free(args->seen_seq); + free(args->start_pos); + free(args->swap_phase); + for (i=0; imbuf; i++) bcf_destroy(args->buf[i]); + free(args->buf); + free(args->GTa); + free(args->GTb); + free(args->nmatch); + free(args->nmism); + free(args->phase_qual); + free(args->phase_set); +} + +int vcf_write_line(htsFile *fp, kstring_t *line); + +#define SWAP(type_t, a, b) { type_t t = a; a = b; b = t; } +static void phase_update(args_t *args, bcf_hdr_t *hdr, bcf1_t *rec) +{ + int i, nGTs = bcf_get_genotypes(hdr, rec, &args->GTa, &args->mGTa); + if ( nGTs <= 0 ) return; // GT field is not present + for (i=0; iswap_phase[i] ) continue; + int *gt = &args->GTa[i*2]; + if ( bcf_gt_is_missing(gt[0]) || gt[1]==bcf_int32_vector_end ) continue; + SWAP(int, gt[0], gt[1]); + gt[1] |= 1; + } + bcf_update_genotypes(hdr,rec,args->GTa,nGTs); +} + +static void phased_flush(args_t *args) +{ + if ( !args->nbuf ) return; + + bcf_hdr_t *ahdr = args->files->readers[0].header; + bcf_hdr_t *bhdr = args->files->readers[1].header; + + int i, j, nsmpl = bcf_hdr_nsamples(args->out_hdr); + static int gt_absent_warned = 0; + + for (i=0; inbuf; i+=2) + { + bcf1_t *arec = args->buf[i]; + bcf1_t *brec = args->buf[i+1]; + + int nGTs = bcf_get_genotypes(ahdr, arec, &args->GTa, &args->mGTa); + if ( nGTs < 0 ) + { + if ( !gt_absent_warned ) + { + fprintf(bcftools_stderr,"GT is not present at %s:%d. (This warning is printed only once.)\n", bcf_seqname(ahdr,arec), arec->pos+1); + gt_absent_warned = 1; + } + continue; + } + if ( nGTs != 2*nsmpl ) continue; // not diploid + nGTs = bcf_get_genotypes(bhdr, brec, &args->GTb, &args->mGTb); + if ( nGTs < 0 ) + { + if ( !gt_absent_warned ) + { + fprintf(bcftools_stderr,"GT is not present at %s:%d. (This warning is printed only once.)\n", bcf_seqname(bhdr,brec), brec->pos+1); + gt_absent_warned = 1; + } + continue; + } + if ( nGTs != 2*nsmpl ) continue; // not diploid + + for (j=0; jGTa[j*2]; + int *gtb = &args->GTb[j*2]; + if ( gta[1]==bcf_int32_vector_end || gtb[1]==bcf_int32_vector_end ) continue; + if ( bcf_gt_is_missing(gta[0]) || bcf_gt_is_missing(gta[1]) || bcf_gt_is_missing(gtb[0]) || bcf_gt_is_missing(gtb[1]) ) continue; + if ( !bcf_gt_is_phased(gta[1]) || !bcf_gt_is_phased(gtb[1]) ) continue; + if ( bcf_gt_allele(gta[0])==bcf_gt_allele(gta[1]) || bcf_gt_allele(gtb[0])==bcf_gt_allele(gtb[1]) ) continue; + if ( bcf_gt_allele(gta[0])==bcf_gt_allele(gtb[0]) && bcf_gt_allele(gta[1])==bcf_gt_allele(gtb[1]) ) + { + if ( args->swap_phase[j] ) args->nmism[j]++; else args->nmatch[j]++; + } + if ( bcf_gt_allele(gta[0])==bcf_gt_allele(gtb[1]) && bcf_gt_allele(gta[1])==bcf_gt_allele(gtb[0]) ) + { + if ( args->swap_phase[j] ) args->nmatch[j]++; else args->nmism[j]++; + } + } + } + for (i=0; inbuf/2; i+=2) + { + bcf1_t *arec = args->buf[i]; + bcf_translate(args->out_hdr, args->files->readers[0].header, arec); + if ( args->nswap ) + phase_update(args, args->out_hdr, arec); + if ( !args->compact_PS || args->phase_set_changed ) + { + bcf_update_format_int32(args->out_hdr,arec,"PS",args->phase_set,nsmpl); + args->phase_set_changed = 0; + } + bcf_write(args->out_fh, args->out_hdr, arec); + + if ( arec->pos < args->prev_pos_check ) error("FIXME, disorder: %s:%d vs %d [1]\n", bcf_seqname(args->files->readers[0].header,arec),arec->pos+1,args->prev_pos_check+1); + args->prev_pos_check = arec->pos; + } + args->nswap = 0; + for (j=0; jnmatch[j] >= args->nmism[j] ) + args->swap_phase[j] = 0; + else + { + args->swap_phase[j] = 1; + args->nswap++; + } + if ( args->nmatch[j] && args->nmism[j] ) + { + // Entropy-inspired quality. The factor 0.7 shifts and scales to (0,1) + double f = (double)args->nmatch[j]/(args->nmatch[j]+args->nmism[j]); + args->phase_qual[j] = 99*(0.7 + f*log(f) + (1-f)*log(1-f))/0.7; + } + else + args->phase_qual[j] = 99; + args->nmatch[j] = 0; + args->nmism[j] = 0; + } + int PQ_printed = 0; + for (; inbuf; i+=2) + { + bcf1_t *brec = args->buf[i+1]; + bcf_translate(args->out_hdr, args->files->readers[1].header, brec); + if ( !PQ_printed ) + { + bcf_update_format_int32(args->out_hdr,brec,"PQ",args->phase_qual,nsmpl); + PQ_printed = 1; + for (j=0; jphase_qual[j] < args->min_PQ ) + { + args->phase_set[j] = brec->pos+1; + args->phase_set_changed = 1; + } + else if ( args->compact_PS ) args->phase_set[j] = bcf_int32_missing; + } + if ( args->nswap ) + phase_update(args, args->out_hdr, brec); + if ( !args->compact_PS || args->phase_set_changed ) + { + bcf_update_format_int32(args->out_hdr,brec,"PS",args->phase_set,nsmpl); + args->phase_set_changed = 0; + } + bcf_write(args->out_fh, args->out_hdr, brec); + + if ( brec->pos < args->prev_pos_check ) error("FIXME, disorder: %s:%d vs %d [2]\n", bcf_seqname(args->files->readers[1].header,brec),brec->pos+1,args->prev_pos_check+1); + args->prev_pos_check = brec->pos; + } + args->nbuf = 0; +} + +static void phased_push(args_t *args, bcf1_t *arec, bcf1_t *brec) +{ + if ( arec && arec->errcode ) + error("Parse error at %s:%d, cannot proceed: %s\n", bcf_seqname(args->files->readers[0].header,arec),arec->pos+1, args->files->readers[0].fname); + if ( brec && brec->errcode ) + error("Parse error at %s:%d, cannot proceed: %s\n", bcf_seqname(args->files->readers[1].header,brec),brec->pos+1, args->files->readers[1].fname); + + int i, nsmpl = bcf_hdr_nsamples(args->out_hdr); + int chr_id = bcf_hdr_name2id(args->out_hdr, bcf_seqname(args->files->readers[0].header,arec)); + if ( args->prev_chr<0 || args->prev_chr!=chr_id ) + { + if ( args->prev_chr>=0 ) phased_flush(args); + + for (i=0; iphase_set[i] = arec->pos+1; + args->phase_set_changed = 1; + + if ( args->seen_seq[chr_id] ) error("The chromosome block %s is not contiguous\n", bcf_seqname(args->files->readers[0].header,arec)); + args->seen_seq[chr_id] = 1; + args->prev_chr = chr_id; + args->prev_pos_check = -1; + } + + if ( !brec ) + { + bcf_translate(args->out_hdr, args->files->readers[0].header, arec); + if ( args->nswap ) + phase_update(args, args->out_hdr, arec); + if ( !args->compact_PS || args->phase_set_changed ) + { + bcf_update_format_int32(args->out_hdr,arec,"PS",args->phase_set,nsmpl); + args->phase_set_changed = 0; + } + bcf_write(args->out_fh, args->out_hdr, arec); + + if ( arec->pos < args->prev_pos_check ) + error("FIXME, disorder: %s:%d in %s vs %d written [3]\n", bcf_seqname(args->files->readers[0].header,arec), arec->pos+1,args->files->readers[0].fname, args->prev_pos_check+1); + args->prev_pos_check = arec->pos; + return; + } + + int m = args->mbuf; + args->nbuf += 2; + hts_expand(bcf1_t*,args->nbuf,args->mbuf,args->buf); + for (i=m; imbuf; i++) + args->buf[i] = bcf_init1(); + + SWAP(bcf1_t*, args->files->readers[0].buffer[0], args->buf[args->nbuf-2]); + SWAP(bcf1_t*, args->files->readers[1].buffer[0], args->buf[args->nbuf-1]); +} + +static void concat(args_t *args) +{ + int i; + if ( args->phased_concat ) // phased concat + { + // keep only two open files at a time + while ( args->ifname < args->nfnames ) + { + int new_file = 0; + while ( args->files->nreaders < 2 && args->ifname < args->nfnames ) + { + if ( !bcf_sr_add_reader(args->files,args->fnames[args->ifname]) ) error("Failed to open %s: %s\n", args->fnames[args->ifname],bcf_sr_strerror(args->files->errnum)); + new_file = 1; + + args->ifname++; + if ( args->start_pos[args->ifname-1]==-1 ) break; // new chromosome, start with only one file open + if ( args->ifname < args->nfnames && args->start_pos[args->ifname]==-1 ) break; // next file starts on a different chromosome + } + + // is there a line from the previous run? Seek the newly opened reader to that position + int seek_pos = -1; + int seek_chr = -1; + if ( bcf_sr_has_line(args->files,0) ) + { + bcf1_t *line = bcf_sr_get_line(args->files,0); + bcf_sr_seek(args->files, bcf_seqname(args->files->readers[0].header,line), line->pos); + seek_pos = line->pos; + seek_chr = bcf_hdr_name2id(args->out_hdr, bcf_seqname(args->files->readers[0].header,line)); + } + else if ( new_file ) + bcf_sr_seek(args->files,NULL,0); // set to start + + int nret; + while ( (nret = bcf_sr_next_line(args->files)) ) + { + if ( !bcf_sr_has_line(args->files,0) ) // no input from the first reader + { + // We are assuming that there is a perfect overlap, sites which are not present in both files are dropped + if ( ! bcf_sr_region_done(args->files,0) ) continue; + + phased_flush(args); + bcf_sr_remove_reader(args->files, 0); + } + + // Get a line to learn about current position + for (i=0; ifiles->nreaders; i++) + if ( bcf_sr_has_line(args->files,i) ) break; + bcf1_t *line = bcf_sr_get_line(args->files,i); + + // This can happen after bcf_sr_seek: indel may start before the coordinate which we seek to. + if ( seek_chr>=0 && seek_pos>line->pos && seek_chr==bcf_hdr_name2id(args->out_hdr, bcf_seqname(args->files->readers[i].header,line)) ) continue; + seek_pos = seek_chr = -1; + + // Check if the position overlaps with the next, yet unopened, reader + int must_seek = 0; + while ( args->ifname < args->nfnames && args->start_pos[args->ifname]!=-1 && line->pos >= args->start_pos[args->ifname] ) + { + must_seek = 1; + if ( !bcf_sr_add_reader(args->files,args->fnames[args->ifname]) ) error("Failed to open %s: %s\n", args->fnames[args->ifname],bcf_sr_strerror(args->files->errnum)); + args->ifname++; + } + if ( must_seek ) + { + bcf_sr_seek(args->files, bcf_seqname(args->files->readers[i].header,line), line->pos); + seek_pos = line->pos; + seek_chr = bcf_hdr_name2id(args->out_hdr, bcf_seqname(args->files->readers[i].header,line)); + continue; + } + + // We are assuming that there is a perfect overlap, sites which are not present in both files are dropped + if ( args->files->nreaders>1 && !bcf_sr_has_line(args->files,1) && !bcf_sr_region_done(args->files,1) ) continue; + + phased_push(args, bcf_sr_get_line(args->files,0), args->files->nreaders>1 ? bcf_sr_get_line(args->files,1) : NULL); + } + + if ( args->files->nreaders ) + { + phased_flush(args); + while ( args->files->nreaders ) + bcf_sr_remove_reader(args->files, 0); + } + } + } + else if ( args->files ) // combining overlapping files, using synced reader + { + while ( bcf_sr_next_line(args->files) ) + { + for (i=0; ifiles->nreaders; i++) + { + bcf1_t *line = bcf_sr_get_line(args->files,i); + if ( !line ) continue; + bcf_translate(args->out_hdr, args->files->readers[i].header, line); + bcf_write1(args->out_fh, args->out_hdr, line); + if ( args->remove_dups ) break; + } + } + } + else // concatenating + { + kstring_t tmp = {0,0,0}; + int prev_chr_id = -1, prev_pos; + bcf1_t *line = bcf_init(); + for (i=0; infnames; i++) + { + htsFile *fp = hts_open(args->fnames[i], "r"); if ( !fp ) error("Failed to open: %s\n", args->fnames[i]); + bcf_hdr_t *hdr = bcf_hdr_read(fp); if ( !hdr ) error("Failed to parse header: %s\n", args->fnames[i]); + if ( !fp->is_bin && args->output_type&FT_VCF ) + { + line->max_unpack = BCF_UN_STR; + // if VCF is on both input and output, avoid VCF to BCF conversion + while ( hts_getline(fp, KS_SEP_LINE, &fp->line) >=0 ) + { + char *str = fp->line.s; + while ( *str && *str!='\t' ) str++; + tmp.l = 0; + kputsn(fp->line.s,str-fp->line.s,&tmp); + int chr_id = bcf_hdr_name2id(args->out_hdr, tmp.s); + if ( chr_id<0 ) error("The sequence \"%s\" not defined in the header: %s\n(Quick workaround: index the file.)\n", tmp.s, args->fnames[i]); + if ( prev_chr_id!=chr_id ) + { + prev_pos = -1; + if ( args->seen_seq[chr_id] ) + error("\nThe chromosome block %s is not contiguous, consider running with -a.\n", tmp.s); + } + char *end; + int pos = strtol(str+1,&end,10) - 1; + if ( end==str+1 ) error("Could not parse line: %s\n", fp->line.s); + if ( prev_pos > pos ) + error("The chromosome block %s is not sorted, consider running with -a.\n", tmp.s); + args->seen_seq[chr_id] = 1; + prev_chr_id = chr_id; + + if ( vcf_write_line(args->out_fh, &fp->line)!=0 ) error("Failed to write %d bytes\n", fp->line.l); + } + } + else + { + // BCF conversion is required + line->max_unpack = 0; + while ( bcf_read(fp, hdr, line)==0 ) + { + bcf_translate(args->out_hdr, hdr, line); + + if ( prev_chr_id!=line->rid ) + { + prev_pos = -1; + if ( args->seen_seq[line->rid] ) + error("\nThe chromosome block %s is not contiguous, consider running with -a.\n", bcf_seqname(args->out_hdr, line)); + } + if ( prev_pos > line->pos ) + error("The chromosome block %s is not sorted, consider running with -a.\n", bcf_seqname(args->out_hdr, line)); + args->seen_seq[line->rid] = 1; + prev_chr_id = line->rid; + + if ( bcf_write(args->out_fh, args->out_hdr, line)!=0 ) error("Failed to write\n"); + } + } + bcf_hdr_destroy(hdr); + hts_close(fp); + } + bcf_destroy(line); + free(tmp.s); + } +} + +int print_vcf_gz_header(BGZF *fp, BGZF *bgzf_out, int print_header, kstring_t *tmp) +{ + char *buffer = (char*) fp->uncompressed_block; + + // Read the header and find the position of the data block + if ( buffer[0]!='#' ) error("Could not parse the header, expected '#', found '%c'\n", buffer[0]); + + int nskip = 1; // end of the header in the current uncompressed block + while (1) + { + if ( buffer[nskip]=='\n' ) + { + nskip++; + if ( nskip>=fp->block_length ) + { + kputsn(buffer,nskip,tmp); + if ( bgzf_read_block(fp) != 0 ) return -1; + if ( !fp->block_length ) break; + nskip = 0; + } + // The header has finished + if ( buffer[nskip]!='#' ) + { + kputsn(buffer,nskip,tmp); + break; + } + } + nskip++; + if ( nskip>=fp->block_length ) + { + kputsn(buffer,fp->block_length,tmp); + if ( bgzf_read_block(fp) != 0 ) return -1; + if ( !fp->block_length ) break; + nskip = 0; + } + } + if ( print_header ) + { + if ( bgzf_write(bgzf_out,tmp->s,tmp->l) != tmp->l ) error("Failed to write %d bytes\n", tmp->l); + tmp->l = 0; + } + return nskip; +} + +static inline int unpackInt16(const uint8_t *buffer) +{ + return buffer[0] | buffer[1] << 8; +} +static int check_header(const uint8_t *header) +{ + if ( header[0] != 31 || header[1] != 139 || header[2] != 8 ) return -2; + return ((header[3] & 4) != 0 + && unpackInt16((uint8_t*)&header[10]) == 6 + && header[12] == 'B' && header[13] == 'C' + && unpackInt16((uint8_t*)&header[14]) == 2) ? 0 : -1; +} +static void naive_concat(args_t *args) +{ + // only compressed BCF atm + BGZF *bgzf_out = bgzf_open(args->output_fname,"w");; + + const size_t page_size = BGZF_MAX_BLOCK_SIZE; + uint8_t *buf = (uint8_t*) malloc(page_size); + kstring_t tmp = {0,0,0}; + int i, file_types = 0; + for (i=0; infnames; i++) + { + htsFile *hts_fp = hts_open(args->fnames[i],"r"); + if ( !hts_fp ) error("Failed to open: %s\n", args->fnames[i]); + htsFormat type = *hts_get_format(hts_fp); + + if ( type.compression!=bgzf ) + error("The --naive option works only for compressed BCFs or VCFs, sorry :-/\n"); + file_types |= type.format==vcf ? 1 : 2; + if ( file_types==3 ) + error("The --naive option works only for compressed files of the same type, all BCFs or all VCFs :-/\n"); + + BGZF *fp = hts_get_bgzfp(hts_fp); + if ( !fp || bgzf_read_block(fp) != 0 || !fp->block_length ) + error("Failed to read %s: %s\n", args->fnames[i], strerror(errno)); + + int nskip; + if ( type.format==bcf ) + { + uint8_t magic[5]; + if ( bgzf_read(fp, magic, 5) != 5 ) error("Failed to read the BCF header in %s\n", args->fnames[i]); + if (strncmp((char*)magic, "BCF\2\2", 5) != 0) error("Invalid BCF magic string in %s\n", args->fnames[i]); + + if ( bgzf_read(fp, &tmp.l, 4) != 4 ) error("Failed to read the BCF header in %s\n", args->fnames[i]); + hts_expand(char,tmp.l,tmp.m,tmp.s); + if ( bgzf_read(fp, tmp.s, tmp.l) != tmp.l ) error("Failed to read the BCF header in %s\n", args->fnames[i]); + + // write only the first header + if ( i==0 ) + { + if ( bgzf_write(bgzf_out, "BCF\2\2", 5) !=5 ) error("Failed to write %d bytes to %s\n", 5,args->output_fname); + if ( bgzf_write(bgzf_out, &tmp.l, 4) !=4 ) error("Failed to write %d bytes to %s\n", 4,args->output_fname); + if ( bgzf_write(bgzf_out, tmp.s, tmp.l) != tmp.l) error("Failed to write %d bytes to %s\n", tmp.l,args->output_fname); + } + nskip = fp->block_offset; + } + else + { + nskip = print_vcf_gz_header(fp, bgzf_out, i==0?1:0, &tmp); + if ( nskip==-1 ) error("Error reading %s\n", args->fnames[i]); + } + + // Output all non-header data that were read together with the header block + if ( fp->block_length - nskip > 0 ) + { + if ( bgzf_write(bgzf_out, (char *)fp->uncompressed_block+nskip, fp->block_length-nskip)<0 ) error("Error: %d\n",fp->errcode); + } + if ( bgzf_flush(bgzf_out)<0 ) error("Error: %d\n",bgzf_out->errcode); + + + // Stream the rest of the file as it is, without recompressing, but remove BGZF EOF blocks + // The final bgzf eof block will be added by bgzf_close. + ssize_t nread, nblock, nwr; + const int nheader = 18, neof = 28; + const uint8_t *eof = (uint8_t*) "\037\213\010\4\0\0\0\0\0\377\6\0\102\103\2\0\033\0\3\0\0\0\0\0\0\0\0\0"; + while (1) + { + nread = bgzf_raw_read(fp, buf, nheader); + if ( !nread ) break; + if ( nread != nheader || check_header(buf)!=0 ) error("Could not parse the header of a bgzf block: %s\n",args->fnames[i]); + nblock = unpackInt16(buf+16) + 1; + assert( nblock <= page_size && nblock >= nheader ); + nread += bgzf_raw_read(fp, buf+nheader, nblock - nheader); + if ( nread!=nblock ) error("Could not read %d bytes: %s\n",nblock,args->fnames[i]); + if ( nread==neof && !memcmp(buf,eof,neof) ) continue; + nwr = bgzf_raw_write(bgzf_out, buf, nread); + if ( nwr != nread ) error("Write failed, wrote %d instead of %d bytes.\n", nwr,(int)nread); + } + if (hts_close(hts_fp)) error("Close failed: %s\n",args->fnames[i]); + } + free(buf); + free(tmp.s); + if (bgzf_close(bgzf_out) < 0) error("Error: %d\n",bgzf_out->errcode); +} + +static void usage(args_t *args) +{ + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "About: Concatenate or combine VCF/BCF files. All source files must have the same sample\n"); + fprintf(bcftools_stderr, " columns appearing in the same order. The program can be used, for example, to\n"); + fprintf(bcftools_stderr, " concatenate chromosome VCFs into one VCF, or combine a SNP VCF and an indel\n"); + fprintf(bcftools_stderr, " VCF into one. The input files must be sorted by chr and position. The files\n"); + fprintf(bcftools_stderr, " must be given in the correct order to produce sorted VCF on output unless\n"); + fprintf(bcftools_stderr, " the -a, --allow-overlaps option is specified. With the --naive option, the files\n"); + fprintf(bcftools_stderr, " are concatenated without being recompressed, which is very fast but dangerous\n"); + fprintf(bcftools_stderr, " if the BCF headers differ.\n"); + fprintf(bcftools_stderr, "Usage: bcftools concat [options] [ [...]]\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Options:\n"); + fprintf(bcftools_stderr, " -a, --allow-overlaps First coordinate of the next file can precede last record of the current file.\n"); + fprintf(bcftools_stderr, " -c, --compact-PS Do not output PS tag at each site, only at the start of a new phase set block.\n"); + fprintf(bcftools_stderr, " -d, --rm-dups Output duplicate records present in multiple files only once: \n"); + fprintf(bcftools_stderr, " -D, --remove-duplicates Alias for -d none\n"); + fprintf(bcftools_stderr, " -f, --file-list Read the list of files from a file.\n"); + fprintf(bcftools_stderr, " -l, --ligate Ligate phased VCFs by matching phase at overlapping haplotypes\n"); + fprintf(bcftools_stderr, " --no-version Do not append version and command line to the header\n"); + fprintf(bcftools_stderr, " -n, --naive Concatenate files without recompression (dangerous, use with caution)\n"); + fprintf(bcftools_stderr, " -o, --output Write output to a file [standard output]\n"); + fprintf(bcftools_stderr, " -O, --output-type b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"); + fprintf(bcftools_stderr, " -q, --min-PQ Break phase set if phasing quality is lower than [30]\n"); + fprintf(bcftools_stderr, " -r, --regions Restrict to comma-separated list of regions\n"); + fprintf(bcftools_stderr, " -R, --regions-file Restrict to regions listed in a file\n"); + fprintf(bcftools_stderr, " --threads Number of extra output compression threads [0]\n"); + fprintf(bcftools_stderr, "\n"); + exit(1); +} + +int main_vcfconcat(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->output_fname = "-"; + args->output_type = FT_VCF; + args->n_threads = 0; + args->record_cmd_line = 1; + args->min_PQ = 30; + + static struct option loptions[] = + { + {"naive",no_argument,NULL,'n'}, + {"compact-PS",no_argument,NULL,'c'}, + {"regions",required_argument,NULL,'r'}, + {"regions-file",required_argument,NULL,'R'}, + {"remove-duplicates",no_argument,NULL,'D'}, + {"rm-dups",required_argument,NULL,'d'}, + {"allow-overlaps",no_argument,NULL,'a'}, + {"ligate",no_argument,NULL,'l'}, + {"output",required_argument,NULL,'o'}, + {"output-type",required_argument,NULL,'O'}, + {"threads",required_argument,NULL,9}, + {"file-list",required_argument,NULL,'f'}, + {"min-PQ",required_argument,NULL,'q'}, + {"no-version",no_argument,NULL,8}, + {NULL,0,NULL,0} + }; + char *tmp; + while ((c = getopt_long(argc, argv, "h:?o:O:f:alq:Dd:r:R:cn",loptions,NULL)) >= 0) + { + switch (c) { + case 'c': args->compact_PS = 1; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; args->regions_is_file = 1; break; + case 'd': args->remove_dups = optarg; break; + case 'D': args->remove_dups = "none"; break; + case 'q': + args->min_PQ = strtol(optarg,&tmp,10); + if ( *tmp ) error("Could not parse argument: --min-PQ %s\n", optarg); + break; + case 'n': args->naive_concat = 1; break; + case 'a': args->allow_overlaps = 1; break; + case 'l': args->phased_concat = 1; break; + case 'f': args->file_list = optarg; break; + case 'o': args->output_fname = optarg; break; + case 'O': + switch (optarg[0]) { + case 'b': args->output_type = FT_BCF_GZ; break; + case 'u': args->output_type = FT_BCF; break; + case 'z': args->output_type = FT_VCF_GZ; break; + case 'v': args->output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + }; + break; + case 9 : args->n_threads = strtol(optarg, 0, 0); break; + case 8 : args->record_cmd_line = 0; break; + case 'h': + case '?': usage(args); break; + default: error("Unknown argument: %s\n", optarg); + } + } + while ( optindnfnames++; + args->fnames = (char **)realloc(args->fnames,sizeof(char*)*args->nfnames); + args->fnames[args->nfnames-1] = strdup(argv[optind]); + optind++; + } + if ( args->allow_overlaps && args->phased_concat ) args->allow_overlaps = 0; + if ( args->compact_PS && !args->phased_concat ) error("The -c option is intended only with -l\n"); + if ( args->file_list ) + { + if ( args->nfnames ) error("Cannot combine -l with file names on command line.\n"); + args->fnames = hts_readlines(args->file_list, &args->nfnames); + if ( !args->fnames ) error("Could not read the file: %s\n", args->file_list); + } + if ( !args->nfnames ) usage(args); + if ( args->remove_dups && !args->allow_overlaps ) error("The -D option is supported only with -a\n"); + if ( args->regions_list && !args->allow_overlaps ) error("The -r/-R option is supported only with -a\n"); + if ( args->naive_concat ) + { + if ( args->allow_overlaps ) error("The option --naive cannot be combined with --allow-overlaps\n"); + if ( args->phased_concat ) error("The option --naive cannot be combined with --ligate\n"); + naive_concat(args); + destroy_data(args); + free(args); + return 0; + } + init_data(args); + concat(args); + destroy_data(args); + free(args); + return 0; +} diff --git a/bcftools/vcfconvert.c b/bcftools/vcfconvert.c new file mode 100644 index 0000000..1e28ad8 --- /dev/null +++ b/bcftools/vcfconvert.c @@ -0,0 +1,1531 @@ +/* vcfconvert.c -- convert between VCF/BCF and related formats. + + Copyright (C) 2013-2014 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "filter.h" +#include "convert.h" +#include "tsv2vcf.h" + +// Logic of the filters: include or exclude sites which match the filters? +#define FLT_INCLUDE 1 +#define FLT_EXCLUDE 2 + +typedef struct _args_t args_t; +struct _args_t +{ + faidx_t *ref; + filter_t *filter; + char *filter_str; + int filter_logic; // include or exclude sites which match the filters? One of FLT_INCLUDE/FLT_EXCLUDE + convert_t *convert; + bcf_srs_t *files; + bcf_hdr_t *header; + void (*convert_func)(struct _args_t *); + struct { + int total, skipped, hom_rr, het_ra, hom_aa, het_aa, missing; + } n; + kstring_t str; + int32_t *gts; + float *flt; + int rev_als, output_vcf_ids, hap2dip, output_chrom_first_col; + int nsamples, *samples, sample_is_file, targets_is_file, regions_is_file, output_type; + char **argv, *sample_list, *targets_list, *regions_list, *tag, *columns; + char *outfname, *infname, *ref_fname, *sex_fname; + int argc, n_threads, record_cmd_line; +}; + +static void destroy_data(args_t *args) +{ + if ( args->ref ) fai_destroy(args->ref); + if ( args->convert) convert_destroy(args->convert); + if ( args->filter ) filter_destroy(args->filter); + free(args->samples); + if ( args->files ) bcf_sr_destroy(args->files); +} + +static void open_vcf(args_t *args, const char *format_str) +{ + args->files = bcf_sr_init(); + if ( args->n_threads && bcf_sr_set_threads(args->files, args->n_threads)!=0 ) + error("Could not initialize --threads %d\n", args->n_threads); + + if ( args->regions_list ) + { + if ( bcf_sr_set_regions(args->files, args->regions_list, args->regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + } + if ( args->targets_list ) + { + if ( bcf_sr_set_targets(args->files, args->targets_list, args->targets_is_file, 0)<0 ) + error("Failed to read the targets: %s\n", args->targets_list); + } + if ( !bcf_sr_add_reader(args->files, args->infname) ) + error("Failed to open %s: %s\n", args->infname,bcf_sr_strerror(args->files->errnum)); + + args->header = args->files->readers[0].header; + + if ( args->filter_str ) + args->filter = filter_init(args->header, args->filter_str); + + int i, nsamples = 0, *samples = NULL; + if ( args->sample_list && strcmp("-",args->sample_list) ) + { + for (i=0; ifiles->nreaders; i++) + { + int ret = bcf_hdr_set_samples(args->files->readers[i].header,args->sample_list,args->sample_is_file); + if ( ret<0 ) error("Error parsing the sample list\n"); + else if ( ret>0 ) error("Sample name mismatch: sample #%d not found in the header\n", ret); + } + + if ( args->sample_list[0]!='^' ) + { + // the sample ordering may be different if not negated + int n; + char **smpls = hts_readlist(args->sample_list, args->sample_is_file, &n); + if ( !smpls ) error("Could not parse %s\n", args->sample_list); + if ( n!=bcf_hdr_nsamples(args->files->readers[0].header) ) + error("The number of samples does not match, perhaps some are present multiple times?\n"); + nsamples = bcf_hdr_nsamples(args->files->readers[0].header); + samples = (int*) malloc(sizeof(int)*nsamples); + for (i=0; ifiles->readers[0].header, BCF_DT_SAMPLE,smpls[i]); + free(smpls[i]); + } + free(smpls); + } + } + if ( format_str ) args->convert = convert_init(args->header, samples, nsamples, format_str); + free(samples); +} + +static int tsv_setter_chrom_pos_ref_alt(tsv_t *tsv, bcf1_t *rec, void *usr) +{ + args_t *args = (args_t*) usr; + + char tmp, *se = tsv->ss, *ss = tsv->ss; + while ( se < tsv->se && *se!=':' ) se++; + if ( *se!=':' ) error("Could not parse CHROM in CHROM:POS_REF_ALT id: %s\n", tsv->ss); + tmp = *se; *se = 0; + rec->rid = bcf_hdr_name2id(args->header,ss); + if ( rec->rid<0 ) error("Could not determine sequence name or multiple sequences present: %s\n", tsv->ss); + *se = tmp; + + // POS + rec->pos = strtol(se+1,&ss,10); + if ( ss==se+1 ) error("Could not parse POS in CHROM:POS_REF_ALT: %s\n", tsv->ss); + rec->pos--; + + // REF,ALT + args->str.l = 0; + se = ++ss; + while ( se < tsv->se && *se!='_' ) se++; + if ( *se!='_' ) error("Could not parse REF in CHROM:POS_REF_ALT id: %s\n", tsv->ss); + kputsn(ss,se-ss,&args->str); + ss = ++se; + while ( se < tsv->se && *se!='_' && isspace(*tsv->se) ) se++; + if ( se < tsv->se && *se!='_' && isspace(*tsv->se) ) error("Could not parse ALT in CHROM:POS_REF_ALT id: %s\n", tsv->ss); + kputc(',',&args->str); + kputsn(ss,se-ss,&args->str); + bcf_update_alleles_str(args->header, rec, args->str.s); + + // END - optional + if (*se && *se=='_') { + long end = strtol(se+1,&ss,10); + if ( ss==se+1 ) error("Could not parse END in CHROM:POS_REF_ALT_END: %s\n", tsv->ss); + bcf_update_info_int32(args->header, rec, "END", &end, 1); + } + + return 0; +} +static int tsv_setter_verify_pos(tsv_t *tsv, bcf1_t *rec, void *usr) +{ + char *se; + int pos = strtol(tsv->ss,&se,10); + if ( tsv->ss==se ) error("Could not parse POS: %s\n", tsv->ss); + if ( rec->pos != pos-1 ) error("POS mismatch: %s\n", tsv->ss); + return 0; +} +static int tsv_setter_verify_ref_alt(tsv_t *tsv, bcf1_t *rec, void *usr) +{ + args_t *args = (args_t*) usr; + args->rev_als = 0; + char tmp = *tsv->se; *tsv->se = 0; + if ( strcmp(tsv->ss,rec->d.allele[0]) ) + { + if ( strcmp(tsv->ss,rec->d.allele[1]) ) { *tsv->se = tmp; error("REF/ALT mismatch: [%s][%s]\n", tsv->ss,rec->d.allele[1]); } + args->rev_als = 1; + } + *tsv->se = tmp; + while ( *tsv->se && isspace(*tsv->se) ) tsv->se++; + tsv->ss = tsv->se; + while ( *tsv->se && !isspace(*tsv->se) ) tsv->se++; + tmp = *tsv->se; *tsv->se = 0; + if ( !args->rev_als && strcmp(tsv->ss,rec->d.allele[1]) ) { *tsv->se = tmp; error("REF/ALT mismatch: [%s][%s]\n", tsv->ss,rec->d.allele[1]); } + else if ( args->rev_als && strcmp(tsv->ss,rec->d.allele[0]) ) { *tsv->se = tmp; error("REF/ALT mismatch: [%s][%s]\n", tsv->ss,rec->d.allele[0]); } + *tsv->se = tmp; + return 0; +} +static int tsv_setter_gt_gp(tsv_t *tsv, bcf1_t *rec, void *usr) +{ + args_t *args = (args_t*) usr; + int i, nsamples = bcf_hdr_nsamples(args->header); + for (i=0; iss, &tsv->se); + if ( tsv->ss==tsv->se ) { fprintf(stderr,"Could not parse first value of %d-th sample\n", i+1); return -1; } + tsv->ss = tsv->se+1; + ab = strtod(tsv->ss, &tsv->se); + if ( tsv->ss==tsv->se ) { fprintf(stderr,"Could not parse second value of %d-th sample\n", i+1); return -1; } + tsv->ss = tsv->se+1; + bb = strtod(tsv->ss, &tsv->se); + if ( tsv->ss==tsv->se ) { fprintf(stderr,"Could not parse third value of %d-th sample\n", i+1); return -1; } + tsv->ss = tsv->se+1; + + if ( args->rev_als ) { float tmp = bb; bb = aa; aa = tmp; } + args->flt[3*i+0] = aa; + args->flt[3*i+1] = ab; + args->flt[3*i+2] = bb; + + if ( aa >= ab ) + { + if ( aa >= bb ) args->gts[2*i+0] = args->gts[2*i+1] = bcf_gt_unphased(0); + else args->gts[2*i+0] = args->gts[2*i+1] = bcf_gt_unphased(1); + } + else if ( ab >= bb ) + { + args->gts[2*i+0] = bcf_gt_unphased(0); + args->gts[2*i+1] = bcf_gt_unphased(1); + } + else args->gts[2*i+0] = args->gts[2*i+1] = bcf_gt_unphased(1); + } + if ( *tsv->se ) error("Could not parse: %s\n", tsv->ss); + if ( bcf_update_genotypes(args->header,rec,args->gts,nsamples*2) ) error("Could not update GT field\n"); + if ( bcf_update_format_float(args->header,rec,"GP",args->flt,nsamples*3) ) error("Could not update GP field\n"); + return 0; +} +static int tsv_setter_haps(tsv_t *tsv, bcf1_t *rec, void *usr) +{ + args_t *args = (args_t*) usr; + int i, nsamples = bcf_hdr_nsamples(args->header); + + int32_t a0, a1; + if ( args->rev_als ) { a0 = bcf_gt_phased(1); a1 = bcf_gt_phased(0); } + else { a0 = bcf_gt_phased(0); a1 = bcf_gt_phased(1); } + + // up is short for "unphased" + int nup = 0; + for (i=0; iss + 4*i + nup; + int up = 0, all; + + for (all=0; all < 2; all++){ + // checking for premature ending + if ( !ss[0] || !ss[1] || !ss[2] || + (up && (!ss[3] || !ss[4]) ) ) + { + fprintf(stderr,"Wrong number of fields at %d-th sample ([%c][%c][%c]). ",i+1,ss[0],ss[1],ss[2]); + return -1; + } + + switch(ss[all*2+up]){ + case '0': + args->gts[2*i+all] = a0; + break; + case '1' : + args->gts[2*i+all] = a1; + break; + case '?' : + // there is no macro to express phased missing allele + args->gts[2*i+all] = bcf_gt_phased(-1); + break; + case '-' : + args->gts[2*i+all] = bcf_int32_vector_end; + break; + default : + fprintf(stderr,"Could not parse: [%c][%s]\n", ss[all*2+up],tsv->ss); + return -1; + } + if( ss[all*2+up+1]=='*' ) up = up + 1; + } + + if(up && up != 2) + { + fprintf(stderr,"Missing unphased marker '*': [%c][%s]", ss[2+up], tsv->ss); + return -1; + } + + // change alleles to unphased if the alleles are unphased + if ( up ) + { + args->gts[2*i] = bcf_gt_unphased(bcf_gt_allele(args->gts[2*i])); + args->gts[2*i+1] = bcf_gt_unphased(bcf_gt_allele(args->gts[2*i+1])); + } + nup = nup + up; + } + if ( tsv->ss[(nsamples-1)*4+3+nup] ) + { + fprintf(stderr,"nup: %d", nup); + fprintf(stderr,"Wrong number of fields (%d-th column = [%c]). ", nsamples*2,tsv->ss[(nsamples-1)*4+nup]); + return -1; + } + + if ( bcf_update_genotypes(args->header,rec,args->gts,nsamples*2) ) error("Could not update GT field\n"); + return 0; +} +static void gensample_to_vcf(args_t *args) +{ + /* + * Inpute: IMPUTE2 output (indentation changed here for clarity): + * + * 20:62116619_C_T 20:62116619 62116619 C T 0.969 0.031 0 ... + * --- 20:62116698_C_A 62116698 C A 1 0 0 ... + * + * Second column is expected in the form of CHROM:POS_REF_ALT. We use second + * column because the first can be empty ("--") when filling sites from reference + * panel. + * + * Output: VCF with filled GT,GP + * + */ + kstring_t line = {0,0,0}; + + char *gen_fname = NULL, *sample_fname = NULL; + sample_fname = strchr(args->infname,','); + if ( !sample_fname ) + { + args->str.l = 0; + ksprintf(&args->str,"%s.gen.gz", args->infname); + gen_fname = strdup(args->str.s); + args->str.l = 0; + ksprintf(&args->str,"%s.samples", args->infname); + sample_fname = strdup(args->str.s); + } + else + { + *sample_fname = 0; + gen_fname = strdup(args->infname); + sample_fname = strdup(sample_fname+1); + } + htsFile *gen_fh = hts_open(gen_fname, "r"); + if ( !gen_fh ) error("Could not read: %s\n", gen_fname); + if ( hts_getline(gen_fh, KS_SEP_LINE, &line) <= 0 ) error("Empty file: %s\n", gen_fname); + + // Find out the chromosome name, sample names, init and print the VCF header + args->str.l = 0; + char *ss, *se = line.s; + while ( *se && !isspace(*se) ) se++; + if ( !*se ) error("Could not parse %s: %s\n", gen_fname,line.s); + ss = se+1; + se = strchr(ss,':'); + if ( !se ) error("Expected CHROM:POS_REF_ALT in second column of %s\n", gen_fname); + kputsn(ss, se-ss, &args->str); + + tsv_t *tsv = tsv_init("-,CHROM_POS_REF_ALT,POS,REF_ALT,GT_GP"); + tsv_register(tsv, "CHROM_POS_REF_ALT", tsv_setter_chrom_pos_ref_alt, args); + tsv_register(tsv, "POS", tsv_setter_verify_pos, NULL); + tsv_register(tsv, "REF_ALT", tsv_setter_verify_ref_alt, args); + tsv_register(tsv, "GT_GP", tsv_setter_gt_gp, args); + + args->header = bcf_hdr_init("w"); + bcf_hdr_append(args->header, "##INFO="); + bcf_hdr_append(args->header, "##FORMAT="); + bcf_hdr_append(args->header, "##FORMAT="); + bcf_hdr_printf(args->header, "##contig=", args->str.s,0x7fffffff); // MAX_CSI_COOR + if (args->record_cmd_line) bcf_hdr_append_version(args->header, args->argc, args->argv, "bcftools_convert"); + + int i, nsamples; + char **samples = hts_readlist(sample_fname, 1, &nsamples); + if ( !samples ) error("Could not read %s\n", sample_fname); + for (i=2; iheader,samples[i]); + } + for (i=0; ioutfname,hts_bcf_wmode(args->output_type)); + if ( out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->outfname, strerror(errno)); + if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads); + bcf_hdr_write(out_fh,args->header); + bcf1_t *rec = bcf_init(); + + nsamples -= 2; + args->gts = (int32_t *) malloc(sizeof(int32_t)*nsamples*2); + args->flt = (float *) malloc(sizeof(float)*nsamples*3); + + do + { + bcf_clear(rec); + args->n.total++; + if ( !tsv_parse(tsv, rec, line.s) ) + bcf_write(out_fh, args->header, rec); + else + error("Error occurred while parsing: %s\n", line.s); + } + while ( hts_getline(gen_fh, KS_SEP_LINE, &line)>0 ); + + if ( hts_close(out_fh) ) error("Close failed: %s\n", args->outfname); + if ( hts_close(gen_fh) ) error("Close failed: %s\n", gen_fname); + bcf_hdr_destroy(args->header); + bcf_destroy(rec); + free(sample_fname); + free(gen_fname); + free(args->str.s); + free(line.s); + free(args->gts); + free(args->flt); + tsv_destroy(tsv); + + fprintf(stderr,"Number of processed rows: \t%d\n", args->n.total); +} + +static void haplegendsample_to_vcf(args_t *args) +{ + /* + * Convert from IMPUTE2 hap/legend/sample output files to VCF + * + * hap: + * 0 1 0 1 + * legend: + * id position a0 a1 + * 1:186946386_G_T 186946386 G T + * sample: + * sample population group sex + * sample1 sample1 sample1 2 + * sample2 sample2 sample2 2 + * + * Output: VCF with filled GT + */ + kstring_t line = {0,0,0}; + + char *hap_fname = NULL, *leg_fname = NULL, *sample_fname = NULL; + sample_fname = strchr(args->infname,','); + if ( !sample_fname ) + { + args->str.l = 0; + ksprintf(&args->str,"%s.hap.gz", args->infname); + hap_fname = strdup(args->str.s); + args->str.l = 0; + ksprintf(&args->str,"%s.samples", args->infname); + sample_fname = strdup(args->str.s); + args->str.l = 0; + ksprintf(&args->str,"%s.legend.gz", args->infname); + leg_fname = strdup(args->str.s); + } + else + { + char *ss = sample_fname, *se = strchr(ss+1,','); + if ( !se ) error("Could not parse hap/legend/sample file names: %s\n", args->infname); + *ss = 0; + *se = 0; + hap_fname = strdup(args->infname); + leg_fname = strdup(ss+1); + sample_fname = strdup(se+1); + } + htsFile *hap_fh = hts_open(hap_fname, "r"); + if ( !hap_fh ) error("Could not read: %s\n", hap_fname); + + htsFile *leg_fh = hts_open(leg_fname,"r"); + if ( !leg_fh ) error("Could not read: %s\n", leg_fname); + + // Eat up first legend line, then determine chromosome name + if ( hts_getline(leg_fh, KS_SEP_LINE, &line) <= 0 ) error("Empty file: %s\n", leg_fname); + if ( hts_getline(leg_fh, KS_SEP_LINE, &line) <= 0 ) error("Empty file: %s\n", leg_fname); + + // Find out the chromosome name, sample names, init and print the VCF header + args->str.l = 0; + char *se = strchr(line.s,':'); + if ( !se ) error("Expected CHROM:POS_REF_ALT in first column of %s\n", leg_fname); + kputsn(line.s, se-line.s, &args->str); + + tsv_t *leg_tsv = tsv_init("CHROM_POS_REF_ALT,POS,REF_ALT"); + tsv_register(leg_tsv, "CHROM_POS_REF_ALT", tsv_setter_chrom_pos_ref_alt, args); + tsv_register(leg_tsv, "POS", tsv_setter_verify_pos, NULL); + tsv_register(leg_tsv, "REF_ALT", tsv_setter_verify_ref_alt, args); + + tsv_t *hap_tsv = tsv_init("HAPS"); + tsv_register(hap_tsv, "HAPS", tsv_setter_haps, args); + + args->header = bcf_hdr_init("w"); + bcf_hdr_append(args->header, "##INFO="); + bcf_hdr_append(args->header, "##FORMAT="); + bcf_hdr_printf(args->header, "##contig=", args->str.s,0x7fffffff); // MAX_CSI_COOR + if (args->record_cmd_line) bcf_hdr_append_version(args->header, args->argc, args->argv, "bcftools_convert"); + + int i, nrows, nsamples; + char **samples = hts_readlist(sample_fname, 1, &nrows); + if ( !samples ) error("Could not read %s\n", sample_fname); + nsamples = nrows - 1; + + // sample_fname should contain a header line, so need to ignore first row + // returned from hts_readlist (i=1, and not i=0) + for (i=1; iheader,samples[i]); + } + bcf_hdr_add_sample(args->header,NULL); + for (i=0; ioutfname,hts_bcf_wmode(args->output_type)); + if ( out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->outfname, strerror(errno)); + if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads); + bcf_hdr_write(out_fh,args->header); + bcf1_t *rec = bcf_init(); + + args->gts = (int32_t *) malloc(sizeof(int32_t)*nsamples*2); + + while (1) + { + bcf_clear(rec); + args->n.total++; + if ( tsv_parse(leg_tsv, rec, line.s) ) + error("Error occurred while parsing %s: %s\n", leg_fname,line.s); + + if ( hts_getline(hap_fh, KS_SEP_LINE, &line)<=0 ) + error("Different number of records in %s and %s?\n", leg_fname,hap_fname); + + if ( tsv_parse(hap_tsv, rec, line.s) ) + error("Error occurred while parsing %s: %s\n", hap_fname,line.s); + + bcf_write(out_fh, args->header, rec); + + if ( hts_getline(leg_fh, KS_SEP_LINE, &line)<=0 ) + { + if ( hts_getline(hap_fh, KS_SEP_LINE, &line)>0 ) + error("Different number of records in %s and %s?\n", leg_fname,hap_fname); + break; + } + } + + if ( hts_close(out_fh) ) error("Close failed: %s\n", args->outfname); + if ( hts_close(hap_fh) ) error("Close failed: %s\n", hap_fname); + if ( hts_close(leg_fh) ) error("Close failed: %s\n", leg_fname); + bcf_hdr_destroy(args->header); + bcf_destroy(rec); + free(sample_fname); + free(hap_fname); + free(leg_fname); + free(args->str.s); + free(line.s); + free(args->gts); + tsv_destroy(hap_tsv); + tsv_destroy(leg_tsv); + + fprintf(stderr,"Number of processed rows: \t%d\n", args->n.total); +} + +static void hapsample_to_vcf(args_t *args) +{ + /* + * Input: SHAPEIT output + * + * 20:19995888_A_G 20:19995888 19995888 A G 0 0 0 0 ... + * + * First column is expected in the form of CHROM:POS_REF_ALT + * + * Output: VCF with filled GT + * + */ + kstring_t line = {0,0,0}; + + char *hap_fname = NULL, *sample_fname = NULL; + sample_fname = strchr(args->infname,','); + if ( !sample_fname ) + { + args->str.l = 0; + ksprintf(&args->str,"%s.hap.gz", args->infname); + hap_fname = strdup(args->str.s); + args->str.l = 0; + ksprintf(&args->str,"%s.samples", args->infname); + sample_fname = strdup(args->str.s); + } + else + { + *sample_fname = 0; + hap_fname = strdup(args->infname); + sample_fname = strdup(sample_fname+1); + } + htsFile *hap_fh = hts_open(hap_fname, "r"); + if ( !hap_fh ) error("Could not read: %s\n", hap_fname); + if ( hts_getline(hap_fh, KS_SEP_LINE, &line) <= 0 ) error("Empty file: %s\n", hap_fname); + + // Find out the chromosome name, sample names, init and print the VCF header + args->str.l = 0; + char *se = strchr(line.s,':'); + if ( !se ) error("Expected CHROM:POS_REF_ALT in first column of %s\n", hap_fname); + kputsn(line.s, se-line.s, &args->str); + + tsv_t *tsv = tsv_init("CHROM_POS_REF_ALT,-,POS,REF_ALT,HAPS"); + tsv_register(tsv, "CHROM_POS_REF_ALT", tsv_setter_chrom_pos_ref_alt, args); + tsv_register(tsv, "POS", tsv_setter_verify_pos, NULL); + tsv_register(tsv, "REF_ALT", tsv_setter_verify_ref_alt, args); + tsv_register(tsv, "HAPS", tsv_setter_haps, args); + + args->header = bcf_hdr_init("w"); + bcf_hdr_append(args->header, "##INFO="); + bcf_hdr_append(args->header, "##FORMAT="); + bcf_hdr_printf(args->header, "##contig=", args->str.s,0x7fffffff); // MAX_CSI_COOR + if (args->record_cmd_line) bcf_hdr_append_version(args->header, args->argc, args->argv, "bcftools_convert"); + + int i, nsamples; + char **samples = hts_readlist(sample_fname, 1, &nsamples); + if ( !samples ) error("Could not read %s\n", sample_fname); + for (i=2; iheader,samples[i]); + } + bcf_hdr_add_sample(args->header,NULL); + for (i=0; ioutfname,hts_bcf_wmode(args->output_type)); + if ( out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->outfname, strerror(errno)); + if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads); + bcf_hdr_write(out_fh,args->header); + bcf1_t *rec = bcf_init(); + + nsamples -= 2; + args->gts = (int32_t *) malloc(sizeof(int32_t)*nsamples*2); + + do + { + bcf_clear(rec); + args->n.total++; + if ( !tsv_parse(tsv, rec, line.s) ) + bcf_write(out_fh, args->header, rec); + else + error("Error occurred while parsing: %s\n", line.s); + } + while ( hts_getline(hap_fh, KS_SEP_LINE, &line)>0 ); + + if ( hts_close(out_fh) ) error("Close failed: %s\n", args->outfname); + if ( hts_close(hap_fh) ) error("Close failed: %s\n", hap_fname); + bcf_hdr_destroy(args->header); + bcf_destroy(rec); + free(sample_fname); + free(hap_fname); + free(args->str.s); + free(line.s); + free(args->gts); + tsv_destroy(tsv); + + fprintf(stderr,"Number of processed rows: \t%d\n", args->n.total); +} + +char *init_sample2sex(bcf_hdr_t *hdr, char *sex_fname) +{ + int i, nlines; + char *sample2sex = (char*) calloc(bcf_hdr_nsamples(hdr),1); + char **lines = hts_readlist(sex_fname, 1, &nlines); + if ( !lines ) error("Could not read %s\n", sex_fname); + for (i=0; ioutput_chrom_first_col) + kputs("%CHROM ", &str); + else + kputs("%CHROM:%POS\\_%REF\\_%FIRST_ALT ", &str); + + // insert rsid as second column if needed + if(args->output_vcf_ids) + kputs("%ID ", &str); + else + kputs("%CHROM:%POS\\_%REF\\_%FIRST_ALT ", &str); + + kputs("%POS %REF %FIRST_ALT", &str); + if ( !args->tag || !strcmp(args->tag,"GT") ) kputs("%_GT_TO_PROB3",&str); + else if ( !strcmp(args->tag,"PL") ) kputs("%_PL_TO_PROB3",&str); + else if ( !strcmp(args->tag,"GP") ) kputs("%_GP_TO_PROB3",&str); + else error("todo: --tag %s\n", args->tag); + kputs("\n", &str); + open_vcf(args,str.s); + + int ret, gen_compressed = 1, sample_compressed = 0; + char *gen_fname = NULL, *sample_fname = NULL; + str.l = 0; + kputs(args->outfname,&str); + int n_files = 0, i; + char **files = hts_readlist(str.s, 0, &n_files); + if ( n_files==1 ) + { + int l = str.l; + kputs(".samples",&str); + sample_fname = strdup(str.s); + str.l = l; + kputs(".gen.gz",&str); + gen_fname = strdup(str.s); + } + else if ( n_files==2 ) + { + if (strlen(files[0]) && strcmp(files[0],".")!=0) gen_fname = strdup(files[0]); + if (strlen(files[1]) && strcmp(files[1],".")!=0) sample_fname = strdup(files[1]); + } + else + { + error("Error parsing --gensample filenames: %s\n", args->outfname); + } + for (i=0; i3 && strcasecmp(".gz",sample_fname+strlen(sample_fname)-3)==0 ) sample_compressed = 0; + + if (gen_fname) fprintf(stderr, "Gen file: %s\n", gen_fname); + if (sample_fname) fprintf(stderr, "Sample file: %s\n", sample_fname); + + // write samples file + if (sample_fname) + { + char *sample2sex = NULL; + if ( args->sex_fname ) sample2sex = init_sample2sex(args->header,args->sex_fname); + + int i; + BGZF *sout = bgzf_open(sample_fname, sample_compressed ? "wg" : "wu"); + str.l = 0; + kputs(sample2sex ? "ID_1 ID_2 missing sex\n0 0 0 0\n" : "ID_1 ID_2 missing\n0 0 0\n", &str); + ret = bgzf_write(sout, str.s, str.l); + if ( ret != str.l ) error("Error writing %s: %s\n", sample_fname, strerror(errno)); + for (i=0; iheader); i++) + { + str.l = 0; + if ( sample2sex ) + ksprintf(&str, "%s %s 0 %c\n", args->header->samples[i],args->header->samples[i],sample2sex[i]); + else + ksprintf(&str, "%s %s 0\n", args->header->samples[i],args->header->samples[i]); + ret = bgzf_write(sout, str.s, str.l); + if ( ret != str.l ) error("Error writing %s: %s\n", sample_fname, strerror(errno)); + } + if ( bgzf_close(sout)!=0 ) error("Error closing %s: %s\n", sample_fname, strerror(errno)); + free(sample_fname); + free(sample2sex); + } + if (!gen_fname) { + if ( str.m ) free(str.s); + return; + } + + int prev_rid = -1, prev_pos = -1; + int no_alt = 0, non_biallelic = 0, filtered = 0, ndup = 0, nok = 0; + BGZF *gout = bgzf_open(gen_fname, gen_compressed ? "wg" : "wu"); + while ( bcf_sr_next_line(args->files) ) + { + bcf1_t *line = bcf_sr_get_line(args->files,0); + if ( args->filter ) + { + int pass = filter_test(args->filter, line, NULL); + if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1; + if ( !pass ) { filtered++; continue; } + } + + // ALT allele is required + if ( line->n_allele<2 ) { no_alt++; continue; } + + // biallelic required + if ( line->n_allele>2 ) { + if (!non_biallelic) + fprintf(stderr, "Warning: non-biallelic records are skipped. Consider splitting multi-allelic records into biallelic records using 'bcftools norm -m-'.\n"); + non_biallelic++; + continue; + } + + // skip duplicate lines, or otherwise shapeit complains + if ( prev_rid==line->rid && prev_pos==line->pos ) { ndup++; continue; } + prev_rid = line->rid; + prev_pos = line->pos; + + str.l = 0; + convert_line(args->convert, line, &str); + if ( str.l ) + { + int ret = bgzf_write(gout, str.s, str.l); + if ( ret!= str.l ) error("Error writing %s: %s\n", gen_fname,strerror(errno)); + nok++; + } + } + fprintf(stderr, "%d records written, %d skipped: %d/%d/%d/%d no-ALT/non-biallelic/filtered/duplicated\n", + nok, no_alt+non_biallelic+filtered+ndup, no_alt, non_biallelic, filtered, ndup); + + if ( str.m ) free(str.s); + if ( bgzf_close(gout)!=0 ) error("Error closing %s: %s\n", gen_fname,strerror(errno)); + free(gen_fname); +} + +static void vcf_to_haplegendsample(args_t *args) +{ + kstring_t str = {0,0,0}; + if ( args->hap2dip ) + kputs("%_GT_TO_HAP2\n", &str); + else + kputs("%_GT_TO_HAP\n", &str); + open_vcf(args,str.s); + + int ret, hap_compressed = 1, legend_compressed = 1, sample_compressed = 0; + char *hap_fname = NULL, *legend_fname = NULL, *sample_fname = NULL; + str.l = 0; + kputs(args->outfname,&str); + int n_files = 0, i; + char **files = hts_readlist(str.s, 0, &n_files); + if ( n_files==1 ) + { + int l = str.l; + kputs(".samples",&str); + sample_fname = strdup(str.s); + str.l = l; + kputs(".legend.gz",&str); + legend_fname = strdup(str.s); + str.l = l; + kputs(".hap.gz",&str); + hap_fname = strdup(str.s); + } + else if ( n_files==3 ) + { + if (strlen(files[0]) && strcmp(files[0],".")!=0) hap_fname = strdup(files[0]); + if (strlen(files[1]) && strcmp(files[1],".")!=0) legend_fname = strdup(files[1]); + if (strlen(files[2]) && strcmp(files[2],".")!=0) sample_fname = strdup(files[2]); + } + else + { + error("Error parsing --hapslegendsample filenames: %s\n", args->outfname); + } + for (i=0; i3 && strcasecmp(".gz",sample_fname+strlen(sample_fname)-3)==0 ) sample_compressed = 0; + + if (hap_fname) fprintf(stderr, "Hap file: %s\n", hap_fname); + if (legend_fname) fprintf(stderr, "Legend file: %s\n", legend_fname); + if (sample_fname) fprintf(stderr, "Sample file: %s\n", sample_fname); + + // write samples file + if (sample_fname) + { + char *sample2sex = NULL; + if ( args->sex_fname ) sample2sex = init_sample2sex(args->header,args->sex_fname); + + int i; + BGZF *sout = bgzf_open(sample_fname, sample_compressed ? "wg" : "wu"); + str.l = 0; + kputs("sample population group sex\n", &str); + ret = bgzf_write(sout, str.s, str.l); + if ( ret != str.l ) error("Error writing %s: %s\n", sample_fname, strerror(errno)); + for (i=0; iheader); i++) + { + str.l = 0; + ksprintf(&str, "%s %s %s %c\n", args->header->samples[i], args->header->samples[i], args->header->samples[i], sample2sex ? sample2sex[i] : '2'); + ret = bgzf_write(sout, str.s, str.l); + if ( ret != str.l ) error("Error writing %s: %s\n", sample_fname, strerror(errno)); + } + if ( bgzf_close(sout)!=0 ) error("Error closing %s: %s\n", sample_fname, strerror(errno)); + free(sample_fname); + free(sample2sex); + } + if (!hap_fname && !legend_fname) { + if ( str.m ) free(str.s); + return; + } + + // open haps and legend outputs + BGZF *hout = hap_fname ? bgzf_open(hap_fname, hap_compressed ? "wg" : "wu") : NULL; + if ( hap_compressed && args->n_threads ) bgzf_thread_pool(hout, args->files->p->pool, args->files->p->qsize); + BGZF *lout = legend_fname ? bgzf_open(legend_fname, legend_compressed ? "wg" : "wu") : NULL; + if (legend_fname) { + str.l = 0; + kputs("id position a0 a1\n", &str); + ret = bgzf_write(lout, str.s, str.l); + if ( ret != str.l ) error("Error writing %s: %s\n", legend_fname, strerror(errno)); + } + + int no_alt = 0, non_biallelic = 0, filtered = 0, nok = 0; + while ( bcf_sr_next_line(args->files) ) + { + bcf1_t *line = bcf_sr_get_line(args->files,0); + if ( args->filter ) + { + int pass = filter_test(args->filter, line, NULL); + if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1; + if ( !pass ) { filtered++; continue; } + } + + // ALT allele is required + if ( line->n_allele<2 ) { no_alt++; continue; } + // biallelic required + if ( line->n_allele>2 ) { + if (!non_biallelic) + fprintf(stderr, "Warning: non-biallelic records are skipped. Consider splitting multi-allelic records into biallelic records using 'bcftools norm -m-'.\n"); + non_biallelic++; + continue; + } + + str.l = 0; + convert_line(args->convert, line, &str); + if ( !str.l ) continue; + + // write haps file + if (hap_fname) { + ret = bgzf_write(hout, str.s, str.l); // write hap file + if ( ret != str.l ) error("Error writing %s: %s\n", hap_fname, strerror(errno)); + } + if (legend_fname) { + str.l = 0; + if ( args->output_vcf_ids && (line->d.id[0]!='.' || line->d.id[1]!=0) ) + ksprintf(&str, "%s %d %s %s\n", line->d.id, line->pos+1, line->d.allele[0], line->d.allele[1]); + else + ksprintf(&str, "%s:%d_%s_%s %d %s %s\n", bcf_seqname(args->header, line), line->pos+1, line->d.allele[0], line->d.allele[1], line->pos+1, line->d.allele[0], line->d.allele[1]); + + // write legend file + ret = bgzf_write(lout, str.s, str.l); + if ( ret != str.l ) error("Error writing %s: %s\n", legend_fname, strerror(errno)); + } + nok++; + } + fprintf(stderr, "%d records written, %d skipped: %d/%d/%d no-ALT/non-biallelic/filtered\n", nok,no_alt+non_biallelic+filtered, no_alt, non_biallelic, filtered); + if ( str.m ) free(str.s); + if ( hout && bgzf_close(hout)!=0 ) error("Error closing %s: %s\n", hap_fname, strerror(errno)); + if ( lout && bgzf_close(lout)!=0 ) error("Error closing %s: %s\n", legend_fname, strerror(errno)); + if (hap_fname) free(hap_fname); + if (legend_fname) free(legend_fname); +} + +static void vcf_to_hapsample(args_t *args) +{ + /* + * WTCCC style haplotypes file + * see https://mathgen.stats.ox.ac.uk/genetics_software/shapeit/shapeit.html#hapsample + * + * These are essentially the haplotypes from the impute2 format with some + * legend info tacked on to the first 5 columns + * + */ + kstring_t str = {0,0,0}; + + // print ID instead of CHROM:POS_REF_ALT1 + if ( args->output_vcf_ids ) + kputs("%CHROM %ID %POS %REF %FIRST_ALT ", &str); + else + kputs("%CHROM %CHROM:%POS\\_%REF\\_%FIRST_ALT %POS %REF %FIRST_ALT ", &str); + + if ( args->hap2dip ) + kputs("%_GT_TO_HAP2\n", &str); + else + kputs("%_GT_TO_HAP\n", &str); + open_vcf(args,str.s); + + int ret, hap_compressed = 1, sample_compressed = 0; + char *hap_fname = NULL, *sample_fname = NULL; + str.l = 0; + kputs(args->outfname,&str); + int n_files = 0, i; + char **files = hts_readlist(str.s, 0, &n_files); + if ( n_files==1 ) + { + int l = str.l; + kputs(".sample",&str); + sample_fname = strdup(str.s); + str.l = l; + kputs(".hap.gz",&str); + hap_fname = strdup(str.s); + } + else if ( n_files==2 ) + { + if (strlen(files[0]) && strcmp(files[0],".")!=0) hap_fname = strdup(files[0]); + if (strlen(files[1]) && strcmp(files[1],".")!=0) sample_fname = strdup(files[1]); + } + else + { + error("Error parsing --hapsample filenames: %s\n", args->outfname); + } + for (i=0; i3 && strcasecmp(".gz",sample_fname+strlen(sample_fname)-3)==0 ) sample_compressed = 0; + + if (hap_fname) fprintf(stderr, "Hap file: %s\n", hap_fname); + if (sample_fname) fprintf(stderr, "Sample file: %s\n", sample_fname); + + // write samples file + if (sample_fname) + { + char *sample2sex = NULL; + if ( args->sex_fname ) sample2sex = init_sample2sex(args->header,args->sex_fname); + + int i; + BGZF *sout = bgzf_open(sample_fname, sample_compressed ? "wg" : "wu"); + str.l = 0; + kputs(sample2sex ? "ID_1 ID_2 missing sex\n0 0 0 0\n" : "ID_1 ID_2 missing\n0 0 0\n", &str); + ret = bgzf_write(sout, str.s, str.l); + if ( ret != str.l ) error("Error writing %s: %s\n", sample_fname, strerror(errno)); + for (i=0; iheader); i++) + { + str.l = 0; + if ( sample2sex ) + ksprintf(&str, "%s %s 0 %c\n", args->header->samples[i],args->header->samples[i],sample2sex[i]); + else + ksprintf(&str, "%s %s 0\n", args->header->samples[i],args->header->samples[i]); + ret = bgzf_write(sout, str.s, str.l); + if ( ret != str.l ) error("Error writing %s: %s\n", sample_fname, strerror(errno)); + } + if ( bgzf_close(sout)!=0 ) error("Error closing %s: %s\n", sample_fname, strerror(errno)); + free(sample_fname); + free(sample2sex); + } + if (!hap_fname) { + if ( str.m ) free(str.s); + return; + } + + // open haps output + BGZF *hout = hap_fname ? bgzf_open(hap_fname, hap_compressed ? "wg" : "wu") : NULL; + if ( hap_compressed && args->n_threads ) bgzf_thread_pool(hout, args->files->p->pool, args->files->p->qsize); + + int no_alt = 0, non_biallelic = 0, filtered = 0, nok = 0; + while ( bcf_sr_next_line(args->files) ) + { + bcf1_t *line = bcf_sr_get_line(args->files,0); + if ( args->filter ) + { + int pass = filter_test(args->filter, line, NULL); + if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1; + if ( !pass ) { filtered++; continue; } + } + + // ALT allele is required + if ( line->n_allele<2 ) { no_alt++; continue; } + // biallelic required + if ( line->n_allele>2 ) { + if (!non_biallelic) + fprintf(stderr, "Warning: non-biallelic records are skipped. Consider splitting multi-allelic records into biallelic records using 'bcftools norm -m-'.\n"); + non_biallelic++; + continue; + } + + str.l = 0; + convert_line(args->convert, line, &str); + if ( !str.l ) continue; + + // write haps file + if (hap_fname) { + ret = bgzf_write(hout, str.s, str.l); // write hap file + if ( ret != str.l ) error("Error writing %s: %s\n", hap_fname, strerror(errno)); + } + nok++; + } + fprintf(stderr, "%d records written, %d skipped: %d/%d/%d no-ALT/non-biallelic/filtered\n", nok, no_alt+non_biallelic+filtered, no_alt, non_biallelic, filtered); + if ( str.m ) free(str.s); + if ( hout && bgzf_close(hout)!=0 ) error("Error closing %s: %s\n", hap_fname, strerror(errno)); + if (hap_fname) free(hap_fname); +} + +static void bcf_hdr_set_chrs(bcf_hdr_t *hdr, faidx_t *fai) +{ + int i, n = faidx_nseq(fai); + for (i=0; i", seq,len); + } +} +static inline int acgt_to_5(char base) +{ + if ( base=='A' ) return 0; + if ( base=='C' ) return 1; + if ( base=='G' ) return 2; + if ( base=='T' ) return 3; + return 4; +} +static inline int tsv_setter_aa1(args_t *args, char *ss, char *se, int alleles[], int *nals, int ref, int32_t *gts) +{ + if ( se - ss > 2 ) return -1; // currently only SNPs + + if ( ss[0]=='-' ) + { + // missing GT + gts[0] = bcf_gt_missing; + gts[1] = bcf_int32_vector_end; + args->n.missing++; + return 0; + } + if ( ss[0]=='I' ) return -2; // skip insertions/deletions for now + if ( ss[0]=='D' ) return -2; + + int a0 = acgt_to_5(toupper(ss[0])); + int a1 = ss[1] ? acgt_to_5(toupper(ss[1])) : a0; + if ( alleles[a0]<0 ) alleles[a0] = (*nals)++; + if ( alleles[a1]<0 ) alleles[a1] = (*nals)++; + + gts[0] = bcf_gt_unphased(alleles[a0]); + gts[1] = ss[1] ? bcf_gt_unphased(alleles[a1]) : bcf_int32_vector_end; + + if ( ref==a0 && ref==a1 ) args->n.hom_rr++; // hom ref: RR + else if ( ref==a0 ) args->n.het_ra++; // het: RA + else if ( ref==a1 ) args->n.het_ra++; // het: AR + else if ( a0==a1 ) args->n.hom_aa++; // hom-alt: AA + else args->n.het_aa++; // non-ref het: AA + + return 0; +} +static int tsv_setter_aa(tsv_t *tsv, bcf1_t *rec, void *usr) +{ + args_t *args = (args_t*) usr; + + int len; + char *ref = faidx_fetch_seq(args->ref, (char*)bcf_hdr_id2name(args->header,rec->rid), rec->pos, rec->pos, &len); + if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", bcf_hdr_id2name(args->header,rec->rid), rec->pos+1); + + int nals = 1, alleles[5] = { -1, -1, -1, -1, -1 }; // a,c,g,t,n + ref[0] = toupper(ref[0]); + int iref = acgt_to_5(ref[0]); + alleles[iref] = 0; + + rec->n_sample = bcf_hdr_nsamples(args->header); + + int i, ret; + for (i=0; in_sample; i++) + { + if ( i>0 ) + { + ret = tsv_next(tsv); + if ( ret==-1 ) error("Too few columns for %d samples at %s:%d\n", rec->n_sample,bcf_hdr_id2name(args->header,rec->rid), rec->pos+1); + } + ret = tsv_setter_aa1(args, tsv->ss, tsv->se, alleles, &nals, iref, args->gts+i*2); + if ( ret==-1 ) error("Error parsing the site %s:%d, expected two characters\n", bcf_hdr_id2name(args->header,rec->rid), rec->pos+1); + if ( ret==-2 ) + { + // something else than a SNP + free(ref); + return -1; + } + } + + args->str.l = 0; + kputc(ref[0], &args->str); + for (i=0; i<5; i++) + { + if ( alleles[i]>0 ) + { + kputc(',', &args->str); + kputc("ACGTN"[i], &args->str); + } + } + bcf_update_alleles_str(args->header, rec, args->str.s); + if ( bcf_update_genotypes(args->header,rec,args->gts,rec->n_sample*2) ) error("Could not update the GT field\n"); + + free(ref); + return 0; +} + +static void tsv_to_vcf(args_t *args) +{ + if ( !args->ref_fname ) error("--tsv2vcf requires the --fasta-ref option\n"); + if ( !args->sample_list ) error("--tsv2vcf requires the --samples option\n"); + + args->ref = fai_load(args->ref_fname); + if ( !args->ref ) error("Could not load the reference %s\n", args->ref_fname); + + args->header = bcf_hdr_init("w"); + bcf_hdr_set_chrs(args->header, args->ref); + bcf_hdr_append(args->header, "##FORMAT="); + if (args->record_cmd_line) bcf_hdr_append_version(args->header, args->argc, args->argv, "bcftools_convert"); + + int i, n; + char **smpls = hts_readlist(args->sample_list, args->sample_is_file, &n); + if ( !smpls ) error("Could not parse %s\n", args->sample_list); + for (i=0; iheader, smpls[i]); + free(smpls[i]); + } + free(smpls); + bcf_hdr_add_sample(args->header, NULL); + args->gts = (int32_t *) malloc(sizeof(int32_t)*n*2); + + htsFile *out_fh = hts_open(args->outfname,hts_bcf_wmode(args->output_type)); + if ( out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->outfname, strerror(errno)); + if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads); + bcf_hdr_write(out_fh,args->header); + + tsv_t *tsv = tsv_init(args->columns ? args->columns : "ID,CHROM,POS,AA"); + if ( tsv_register(tsv, "CHROM", tsv_setter_chrom, args->header) < 0 ) error("Expected CHROM column\n"); + if ( tsv_register(tsv, "POS", tsv_setter_pos, NULL) < 0 ) error("Expected POS column\n"); + if ( tsv_register(tsv, "ID", tsv_setter_id, args->header) < 0 && !args->columns ) error("Expected ID column\n"); + if ( tsv_register(tsv, "AA", tsv_setter_aa, args) < 0 ) error("Expected AA column\n"); + + bcf1_t *rec = bcf_init(); + bcf_float_set_missing(rec->qual); + + kstring_t line = {0,0,0}; + htsFile *in_fh = hts_open(args->infname, "r"); + if ( !in_fh ) error("Could not read: %s\n", args->infname); + while ( hts_getline(in_fh, KS_SEP_LINE, &line) > 0 ) + { + if ( line.s[0]=='#' ) continue; // skip comments + bcf_clear(rec); + + args->n.total++; + if ( !tsv_parse(tsv, rec, line.s) ) + bcf_write(out_fh, args->header, rec); + else + args->n.skipped++; + } + if ( hts_close(in_fh) ) error("Close failed: %s\n", args->infname); + free(line.s); + + bcf_hdr_destroy(args->header); + hts_close(out_fh); + tsv_destroy(tsv); + bcf_destroy(rec); + free(args->str.s); + free(args->gts); + + fprintf(stderr,"Rows total: \t%d\n", args->n.total); + fprintf(stderr,"Rows skipped: \t%d\n", args->n.skipped); + fprintf(stderr,"Missing GTs: \t%d\n", args->n.missing); + fprintf(stderr,"Hom RR: \t%d\n", args->n.hom_rr); + fprintf(stderr,"Het RA: \t%d\n", args->n.het_ra); + fprintf(stderr,"Hom AA: \t%d\n", args->n.hom_aa); + fprintf(stderr,"Het AA: \t%d\n", args->n.het_aa); +} + +static void vcf_to_vcf(args_t *args) +{ + open_vcf(args,NULL); + htsFile *out_fh = hts_open(args->outfname,hts_bcf_wmode(args->output_type)); + if ( out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->outfname, strerror(errno)); + if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads); + + bcf_hdr_t *hdr = bcf_sr_get_header(args->files,0); + bcf_hdr_write(out_fh,hdr); + + while ( bcf_sr_next_line(args->files) ) + { + bcf1_t *line = bcf_sr_get_line(args->files,0); + if ( args->filter ) + { + int pass = filter_test(args->filter, line, NULL); + if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1; + if ( !pass ) continue; + } + bcf_write(out_fh,hdr,line); + } + hts_close(out_fh); +} + +static void gvcf_to_vcf(args_t *args) +{ + if ( !args->ref_fname ) error("--gvcf2vcf requires the --fasta-ref option\n"); + + args->ref = fai_load(args->ref_fname); + if ( !args->ref ) error("Could not load the fai index for reference %s\n", args->ref_fname); + + open_vcf(args,NULL); + htsFile *out_fh = hts_open(args->outfname,hts_bcf_wmode(args->output_type)); + if ( out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->outfname, strerror(errno)); + if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads); + + bcf_hdr_t *hdr = bcf_sr_get_header(args->files,0); + if (args->record_cmd_line) bcf_hdr_append_version(hdr, args->argc, args->argv, "bcftools_convert"); + bcf_hdr_write(out_fh,hdr); + + int32_t *itmp = NULL, nitmp = 0; + + while ( bcf_sr_next_line(args->files) ) + { + bcf1_t *line = bcf_sr_get_line(args->files,0); + if ( args->filter ) + { + int pass = filter_test(args->filter, line, NULL); + if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1; + if ( !pass ) continue; + } + + if (!bcf_has_filter(hdr,line,"PASS")) + { + bcf_write(out_fh,hdr,line); + continue; + } + + // check if alleles compatible with being a gVCF record + // ALT must be one of ., <*>, , + // check for INFO/END is below + int i, gallele = -1; + if (line->n_allele==1) + gallele = 0; // illumina/bcftools-call gvcf (if INFO/END present) + else if ( line->d.allele[1][0]=='<' ) + { + for (i=1; in_allele; i++) + { + if ( line->d.allele[i][1]=='*' && line->d.allele[i][2]=='>' && line->d.allele[i][3]=='\0' ) { gallele = i; break; } // mpileup/spec compliant gVCF + if ( line->d.allele[i][1]=='X' && line->d.allele[i][2]=='>' && line->d.allele[i][3]=='\0' ) { gallele = i; break; } // old mpileup gVCF + if ( strcmp(line->d.allele[i],"")==0 ) { gallele = i; break; } // GATK gVCF + } + } + + // no gVCF compatible alleles + if (gallele<0) + { + bcf_write(out_fh,hdr,line); + continue; + } + + int nend = bcf_get_info_int32(hdr,line,"END",&itmp,&nitmp); + if ( nend!=1 ) + { + // No INFO/END => not gVCF record + bcf_write(out_fh,hdr,line); + continue; + } + bcf_update_info_int32(hdr,line,"END",NULL,0); + int pos, len; + for (pos=line->pos; pospos = pos; + char *ref = faidx_fetch_seq(args->ref, (char*)bcf_hdr_id2name(hdr,line->rid), line->pos, line->pos, &len); + if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", bcf_hdr_id2name(hdr,line->rid), line->pos+1); + strncpy(line->d.allele[0],ref,len); + bcf_write(out_fh,hdr,line); + free(ref); + } + } + free(itmp); + hts_close(out_fh); +} + +static void usage(void) +{ + fprintf(stderr, "\n"); + fprintf(stderr, "About: Converts VCF/BCF to other formats and back. See man page for file\n"); + fprintf(stderr, " formats details. When specifying output files explicitly instead\n"); + fprintf(stderr, " of with , one can use '-' for stdout and '.' to suppress.\n"); + fprintf(stderr, "Usage: bcftools convert [OPTIONS] \n"); + fprintf(stderr, "\n"); + fprintf(stderr, "VCF input options:\n"); + fprintf(stderr, " -e, --exclude exclude sites for which the expression is true\n"); + fprintf(stderr, " -i, --include select sites for which the expression is true\n"); + fprintf(stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(stderr, " -s, --samples list of samples to include\n"); + fprintf(stderr, " -S, --samples-file file of samples to include\n"); + fprintf(stderr, " -t, --targets similar to -r but streams rather than index-jumps\n"); + fprintf(stderr, " -T, --targets-file similar to -R but streams rather than index-jumps\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "VCF output options:\n"); + fprintf(stderr, " --no-version do not append version and command line to the header\n"); + fprintf(stderr, " -o, --output output file name [stdout]\n"); + fprintf(stderr, " -O, --output-type b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"); + fprintf(stderr, " --threads number of extra output compression threads [0]\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "GEN/SAMPLE conversion (input/output from IMPUTE2):\n"); + fprintf(stderr, " -G, --gensample2vcf <...> |,\n"); + fprintf(stderr, " -g, --gensample <...> |,\n"); + fprintf(stderr, " --tag tag to take values for .gen file: GT,PL,GL,GP [GT]\n"); + fprintf(stderr, " --chrom output chromosome in first column instead of CHROM:POS_REF_ALT\n"); + fprintf(stderr, " --sex output sex column in the sample-file, input format is: Sample\\t[MF]\n"); + fprintf(stderr, " --vcf-ids output VCF IDs in second column instead of CHROM:POS_REF_ALT\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "gVCF conversion:\n"); + fprintf(stderr, " --gvcf2vcf expand gVCF reference blocks\n"); + fprintf(stderr, " -f, --fasta-ref reference sequence in fasta format\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "HAP/SAMPLE conversion (output from SHAPEIT):\n"); + fprintf(stderr, " --hapsample2vcf <...> |,\n"); + fprintf(stderr, " --hapsample <...> |,\n"); + fprintf(stderr, " --haploid2diploid convert haploid genotypes to diploid homozygotes\n"); + fprintf(stderr, " --sex output sex column in the sample-file, input format is: Sample\\t[MF]\n"); + fprintf(stderr, " --vcf-ids output VCF IDs instead of CHROM:POS_REF_ALT\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "HAP/LEGEND/SAMPLE conversion:\n"); + fprintf(stderr, " -H, --haplegendsample2vcf <...> |,,\n"); + fprintf(stderr, " -h, --haplegendsample <...> |,,\n"); + fprintf(stderr, " --haploid2diploid convert haploid genotypes to diploid homozygotes\n"); + fprintf(stderr, " --sex output sex column in the sample-file, input format is: Sample\\t[MF]\n"); + fprintf(stderr, " --vcf-ids output VCF IDs instead of CHROM:POS_REF_ALT\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "TSV conversion:\n"); + fprintf(stderr, " --tsv2vcf \n"); + fprintf(stderr, " -c, --columns columns of the input tsv file [ID,CHROM,POS,AA]\n"); + fprintf(stderr, " -f, --fasta-ref reference sequence in fasta format\n"); + fprintf(stderr, " -s, --samples list of sample names\n"); + fprintf(stderr, " -S, --samples-file file of sample names\n"); + fprintf(stderr, "\n"); + // fprintf(stderr, "PLINK options:\n"); + // fprintf(stderr, " -p, --plink |,,|,,|,\n"); + // fprintf(stderr, " --tped make tped file instead\n"); + // fprintf(stderr, " --bin make binary bed/fam/bim files\n"); + // fprintf(stderr, "\n"); + // fprintf(stderr, "PBWT options:\n"); + // fprintf(stderr, " -b, --pbwt or ,,,\n"); + // fprintf(stderr, "\n"); + exit(1); +} + +int main_vcfconvert(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->outfname = "-"; + args->output_type = FT_VCF; + args->n_threads = 0; + args->record_cmd_line = 1; + + static struct option loptions[] = + { + {"include",required_argument,NULL,'i'}, + {"exclude",required_argument,NULL,'e'}, + {"output",required_argument,NULL,'o'}, + {"output-type",required_argument,NULL,'O'}, + {"threads",required_argument,NULL,9}, + {"regions",required_argument,NULL,'r'}, + {"regions-file",required_argument,NULL,'R'}, + {"targets",required_argument,NULL,'t'}, + {"targets-file",required_argument,NULL,'T'}, + {"samples",required_argument,NULL,'s'}, + {"samples-file",required_argument,NULL,'S'}, + {"sex",required_argument,NULL,11}, + {"gensample",required_argument,NULL,'g'}, + {"gensample2vcf",required_argument,NULL,'G'}, + {"tag",required_argument,NULL,1}, + {"chrom",no_argument,NULL,8}, + {"tsv2vcf",required_argument,NULL,2}, + {"hapsample",required_argument,NULL,7}, + {"hapsample2vcf",required_argument,NULL,3}, + {"vcf-ids",no_argument,NULL,4}, + {"haploid2diploid",no_argument,NULL,5}, + {"gvcf2vcf",no_argument,NULL,6}, + {"haplegendsample",required_argument,NULL,'h'}, + {"haplegendsample2vcf",required_argument,NULL,'H'}, + {"columns",required_argument,NULL,'c'}, + {"fasta-ref",required_argument,NULL,'f'}, + {"no-version",no_argument,NULL,10}, + {NULL,0,NULL,0} + }; + while ((c = getopt_long(argc, argv, "?h:r:R:s:S:t:T:i:e:g:G:o:O:c:f:H:",loptions,NULL)) >= 0) { + switch (c) { + case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break; + case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; args->regions_is_file = 1; break; + case 't': args->targets_list = optarg; break; + case 'T': args->targets_list = optarg; args->targets_is_file = 1; break; + case 's': args->sample_list = optarg; break; + case 'S': args->sample_list = optarg; args->sample_is_file = 1; break; + case 'g': args->convert_func = vcf_to_gensample; args->outfname = optarg; break; + case 'G': args->convert_func = gensample_to_vcf; args->infname = optarg; break; + case 1 : args->tag = optarg; break; + case 2 : args->convert_func = tsv_to_vcf; args->infname = optarg; break; + case 3 : args->convert_func = hapsample_to_vcf; args->infname = optarg; break; + case 4 : args->output_vcf_ids = 1; break; + case 5 : args->hap2dip = 1; break; + case 6 : args->convert_func = gvcf_to_vcf; break; + case 7 : args->convert_func = vcf_to_hapsample; args->outfname = optarg; break; + case 8 : args->output_chrom_first_col = 1; break; + case 'H': args->convert_func = haplegendsample_to_vcf; args->infname = optarg; break; + case 'f': args->ref_fname = optarg; break; + case 'c': args->columns = optarg; break; + case 'o': args->outfname = optarg; break; + case 'O': + switch (optarg[0]) { + case 'b': args->output_type = FT_BCF_GZ; break; + case 'u': args->output_type = FT_BCF; break; + case 'z': args->output_type = FT_VCF_GZ; break; + case 'v': args->output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + } + break; + case 'h': args->convert_func = vcf_to_haplegendsample; args->outfname = optarg; break; + case 9 : args->n_threads = strtol(optarg, 0, 0); break; + case 10 : args->record_cmd_line = 0; break; + case 11 : args->sex_fname = optarg; break; + case '?': usage(); + default: error("Unknown argument: %s\n", optarg); + } + } + + if ( !args->infname ) + { + if ( optind>=argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) args->infname = "-"; + } + else args->infname = argv[optind]; + } + if ( !args->infname ) usage(); + + if ( args->convert_func ) args->convert_func(args); + else vcf_to_vcf(args); + + destroy_data(args); + free(args); + return 0; +} diff --git a/bcftools/vcfconvert.c.pysam.c b/bcftools/vcfconvert.c.pysam.c new file mode 100644 index 0000000..a054ca8 --- /dev/null +++ b/bcftools/vcfconvert.c.pysam.c @@ -0,0 +1,1533 @@ +#include "bcftools.pysam.h" + +/* vcfconvert.c -- convert between VCF/BCF and related formats. + + Copyright (C) 2013-2014 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "filter.h" +#include "convert.h" +#include "tsv2vcf.h" + +// Logic of the filters: include or exclude sites which match the filters? +#define FLT_INCLUDE 1 +#define FLT_EXCLUDE 2 + +typedef struct _args_t args_t; +struct _args_t +{ + faidx_t *ref; + filter_t *filter; + char *filter_str; + int filter_logic; // include or exclude sites which match the filters? One of FLT_INCLUDE/FLT_EXCLUDE + convert_t *convert; + bcf_srs_t *files; + bcf_hdr_t *header; + void (*convert_func)(struct _args_t *); + struct { + int total, skipped, hom_rr, het_ra, hom_aa, het_aa, missing; + } n; + kstring_t str; + int32_t *gts; + float *flt; + int rev_als, output_vcf_ids, hap2dip, output_chrom_first_col; + int nsamples, *samples, sample_is_file, targets_is_file, regions_is_file, output_type; + char **argv, *sample_list, *targets_list, *regions_list, *tag, *columns; + char *outfname, *infname, *ref_fname, *sex_fname; + int argc, n_threads, record_cmd_line; +}; + +static void destroy_data(args_t *args) +{ + if ( args->ref ) fai_destroy(args->ref); + if ( args->convert) convert_destroy(args->convert); + if ( args->filter ) filter_destroy(args->filter); + free(args->samples); + if ( args->files ) bcf_sr_destroy(args->files); +} + +static void open_vcf(args_t *args, const char *format_str) +{ + args->files = bcf_sr_init(); + if ( args->n_threads && bcf_sr_set_threads(args->files, args->n_threads)!=0 ) + error("Could not initialize --threads %d\n", args->n_threads); + + if ( args->regions_list ) + { + if ( bcf_sr_set_regions(args->files, args->regions_list, args->regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + } + if ( args->targets_list ) + { + if ( bcf_sr_set_targets(args->files, args->targets_list, args->targets_is_file, 0)<0 ) + error("Failed to read the targets: %s\n", args->targets_list); + } + if ( !bcf_sr_add_reader(args->files, args->infname) ) + error("Failed to open %s: %s\n", args->infname,bcf_sr_strerror(args->files->errnum)); + + args->header = args->files->readers[0].header; + + if ( args->filter_str ) + args->filter = filter_init(args->header, args->filter_str); + + int i, nsamples = 0, *samples = NULL; + if ( args->sample_list && strcmp("-",args->sample_list) ) + { + for (i=0; ifiles->nreaders; i++) + { + int ret = bcf_hdr_set_samples(args->files->readers[i].header,args->sample_list,args->sample_is_file); + if ( ret<0 ) error("Error parsing the sample list\n"); + else if ( ret>0 ) error("Sample name mismatch: sample #%d not found in the header\n", ret); + } + + if ( args->sample_list[0]!='^' ) + { + // the sample ordering may be different if not negated + int n; + char **smpls = hts_readlist(args->sample_list, args->sample_is_file, &n); + if ( !smpls ) error("Could not parse %s\n", args->sample_list); + if ( n!=bcf_hdr_nsamples(args->files->readers[0].header) ) + error("The number of samples does not match, perhaps some are present multiple times?\n"); + nsamples = bcf_hdr_nsamples(args->files->readers[0].header); + samples = (int*) malloc(sizeof(int)*nsamples); + for (i=0; ifiles->readers[0].header, BCF_DT_SAMPLE,smpls[i]); + free(smpls[i]); + } + free(smpls); + } + } + if ( format_str ) args->convert = convert_init(args->header, samples, nsamples, format_str); + free(samples); +} + +static int tsv_setter_chrom_pos_ref_alt(tsv_t *tsv, bcf1_t *rec, void *usr) +{ + args_t *args = (args_t*) usr; + + char tmp, *se = tsv->ss, *ss = tsv->ss; + while ( se < tsv->se && *se!=':' ) se++; + if ( *se!=':' ) error("Could not parse CHROM in CHROM:POS_REF_ALT id: %s\n", tsv->ss); + tmp = *se; *se = 0; + rec->rid = bcf_hdr_name2id(args->header,ss); + if ( rec->rid<0 ) error("Could not determine sequence name or multiple sequences present: %s\n", tsv->ss); + *se = tmp; + + // POS + rec->pos = strtol(se+1,&ss,10); + if ( ss==se+1 ) error("Could not parse POS in CHROM:POS_REF_ALT: %s\n", tsv->ss); + rec->pos--; + + // REF,ALT + args->str.l = 0; + se = ++ss; + while ( se < tsv->se && *se!='_' ) se++; + if ( *se!='_' ) error("Could not parse REF in CHROM:POS_REF_ALT id: %s\n", tsv->ss); + kputsn(ss,se-ss,&args->str); + ss = ++se; + while ( se < tsv->se && *se!='_' && isspace(*tsv->se) ) se++; + if ( se < tsv->se && *se!='_' && isspace(*tsv->se) ) error("Could not parse ALT in CHROM:POS_REF_ALT id: %s\n", tsv->ss); + kputc(',',&args->str); + kputsn(ss,se-ss,&args->str); + bcf_update_alleles_str(args->header, rec, args->str.s); + + // END - optional + if (*se && *se=='_') { + long end = strtol(se+1,&ss,10); + if ( ss==se+1 ) error("Could not parse END in CHROM:POS_REF_ALT_END: %s\n", tsv->ss); + bcf_update_info_int32(args->header, rec, "END", &end, 1); + } + + return 0; +} +static int tsv_setter_verify_pos(tsv_t *tsv, bcf1_t *rec, void *usr) +{ + char *se; + int pos = strtol(tsv->ss,&se,10); + if ( tsv->ss==se ) error("Could not parse POS: %s\n", tsv->ss); + if ( rec->pos != pos-1 ) error("POS mismatch: %s\n", tsv->ss); + return 0; +} +static int tsv_setter_verify_ref_alt(tsv_t *tsv, bcf1_t *rec, void *usr) +{ + args_t *args = (args_t*) usr; + args->rev_als = 0; + char tmp = *tsv->se; *tsv->se = 0; + if ( strcmp(tsv->ss,rec->d.allele[0]) ) + { + if ( strcmp(tsv->ss,rec->d.allele[1]) ) { *tsv->se = tmp; error("REF/ALT mismatch: [%s][%s]\n", tsv->ss,rec->d.allele[1]); } + args->rev_als = 1; + } + *tsv->se = tmp; + while ( *tsv->se && isspace(*tsv->se) ) tsv->se++; + tsv->ss = tsv->se; + while ( *tsv->se && !isspace(*tsv->se) ) tsv->se++; + tmp = *tsv->se; *tsv->se = 0; + if ( !args->rev_als && strcmp(tsv->ss,rec->d.allele[1]) ) { *tsv->se = tmp; error("REF/ALT mismatch: [%s][%s]\n", tsv->ss,rec->d.allele[1]); } + else if ( args->rev_als && strcmp(tsv->ss,rec->d.allele[0]) ) { *tsv->se = tmp; error("REF/ALT mismatch: [%s][%s]\n", tsv->ss,rec->d.allele[0]); } + *tsv->se = tmp; + return 0; +} +static int tsv_setter_gt_gp(tsv_t *tsv, bcf1_t *rec, void *usr) +{ + args_t *args = (args_t*) usr; + int i, nsamples = bcf_hdr_nsamples(args->header); + for (i=0; iss, &tsv->se); + if ( tsv->ss==tsv->se ) { fprintf(bcftools_stderr,"Could not parse first value of %d-th sample\n", i+1); return -1; } + tsv->ss = tsv->se+1; + ab = strtod(tsv->ss, &tsv->se); + if ( tsv->ss==tsv->se ) { fprintf(bcftools_stderr,"Could not parse second value of %d-th sample\n", i+1); return -1; } + tsv->ss = tsv->se+1; + bb = strtod(tsv->ss, &tsv->se); + if ( tsv->ss==tsv->se ) { fprintf(bcftools_stderr,"Could not parse third value of %d-th sample\n", i+1); return -1; } + tsv->ss = tsv->se+1; + + if ( args->rev_als ) { float tmp = bb; bb = aa; aa = tmp; } + args->flt[3*i+0] = aa; + args->flt[3*i+1] = ab; + args->flt[3*i+2] = bb; + + if ( aa >= ab ) + { + if ( aa >= bb ) args->gts[2*i+0] = args->gts[2*i+1] = bcf_gt_unphased(0); + else args->gts[2*i+0] = args->gts[2*i+1] = bcf_gt_unphased(1); + } + else if ( ab >= bb ) + { + args->gts[2*i+0] = bcf_gt_unphased(0); + args->gts[2*i+1] = bcf_gt_unphased(1); + } + else args->gts[2*i+0] = args->gts[2*i+1] = bcf_gt_unphased(1); + } + if ( *tsv->se ) error("Could not parse: %s\n", tsv->ss); + if ( bcf_update_genotypes(args->header,rec,args->gts,nsamples*2) ) error("Could not update GT field\n"); + if ( bcf_update_format_float(args->header,rec,"GP",args->flt,nsamples*3) ) error("Could not update GP field\n"); + return 0; +} +static int tsv_setter_haps(tsv_t *tsv, bcf1_t *rec, void *usr) +{ + args_t *args = (args_t*) usr; + int i, nsamples = bcf_hdr_nsamples(args->header); + + int32_t a0, a1; + if ( args->rev_als ) { a0 = bcf_gt_phased(1); a1 = bcf_gt_phased(0); } + else { a0 = bcf_gt_phased(0); a1 = bcf_gt_phased(1); } + + // up is short for "unphased" + int nup = 0; + for (i=0; iss + 4*i + nup; + int up = 0, all; + + for (all=0; all < 2; all++){ + // checking for premature ending + if ( !ss[0] || !ss[1] || !ss[2] || + (up && (!ss[3] || !ss[4]) ) ) + { + fprintf(bcftools_stderr,"Wrong number of fields at %d-th sample ([%c][%c][%c]). ",i+1,ss[0],ss[1],ss[2]); + return -1; + } + + switch(ss[all*2+up]){ + case '0': + args->gts[2*i+all] = a0; + break; + case '1' : + args->gts[2*i+all] = a1; + break; + case '?' : + // there is no macro to express phased missing allele + args->gts[2*i+all] = bcf_gt_phased(-1); + break; + case '-' : + args->gts[2*i+all] = bcf_int32_vector_end; + break; + default : + fprintf(bcftools_stderr,"Could not parse: [%c][%s]\n", ss[all*2+up],tsv->ss); + return -1; + } + if( ss[all*2+up+1]=='*' ) up = up + 1; + } + + if(up && up != 2) + { + fprintf(bcftools_stderr,"Missing unphased marker '*': [%c][%s]", ss[2+up], tsv->ss); + return -1; + } + + // change alleles to unphased if the alleles are unphased + if ( up ) + { + args->gts[2*i] = bcf_gt_unphased(bcf_gt_allele(args->gts[2*i])); + args->gts[2*i+1] = bcf_gt_unphased(bcf_gt_allele(args->gts[2*i+1])); + } + nup = nup + up; + } + if ( tsv->ss[(nsamples-1)*4+3+nup] ) + { + fprintf(bcftools_stderr,"nup: %d", nup); + fprintf(bcftools_stderr,"Wrong number of fields (%d-th column = [%c]). ", nsamples*2,tsv->ss[(nsamples-1)*4+nup]); + return -1; + } + + if ( bcf_update_genotypes(args->header,rec,args->gts,nsamples*2) ) error("Could not update GT field\n"); + return 0; +} +static void gensample_to_vcf(args_t *args) +{ + /* + * Inpute: IMPUTE2 output (indentation changed here for clarity): + * + * 20:62116619_C_T 20:62116619 62116619 C T 0.969 0.031 0 ... + * --- 20:62116698_C_A 62116698 C A 1 0 0 ... + * + * Second column is expected in the form of CHROM:POS_REF_ALT. We use second + * column because the first can be empty ("--") when filling sites from reference + * panel. + * + * Output: VCF with filled GT,GP + * + */ + kstring_t line = {0,0,0}; + + char *gen_fname = NULL, *sample_fname = NULL; + sample_fname = strchr(args->infname,','); + if ( !sample_fname ) + { + args->str.l = 0; + ksprintf(&args->str,"%s.gen.gz", args->infname); + gen_fname = strdup(args->str.s); + args->str.l = 0; + ksprintf(&args->str,"%s.samples", args->infname); + sample_fname = strdup(args->str.s); + } + else + { + *sample_fname = 0; + gen_fname = strdup(args->infname); + sample_fname = strdup(sample_fname+1); + } + htsFile *gen_fh = hts_open(gen_fname, "r"); + if ( !gen_fh ) error("Could not read: %s\n", gen_fname); + if ( hts_getline(gen_fh, KS_SEP_LINE, &line) <= 0 ) error("Empty file: %s\n", gen_fname); + + // Find out the chromosome name, sample names, init and print the VCF header + args->str.l = 0; + char *ss, *se = line.s; + while ( *se && !isspace(*se) ) se++; + if ( !*se ) error("Could not parse %s: %s\n", gen_fname,line.s); + ss = se+1; + se = strchr(ss,':'); + if ( !se ) error("Expected CHROM:POS_REF_ALT in second column of %s\n", gen_fname); + kputsn(ss, se-ss, &args->str); + + tsv_t *tsv = tsv_init("-,CHROM_POS_REF_ALT,POS,REF_ALT,GT_GP"); + tsv_register(tsv, "CHROM_POS_REF_ALT", tsv_setter_chrom_pos_ref_alt, args); + tsv_register(tsv, "POS", tsv_setter_verify_pos, NULL); + tsv_register(tsv, "REF_ALT", tsv_setter_verify_ref_alt, args); + tsv_register(tsv, "GT_GP", tsv_setter_gt_gp, args); + + args->header = bcf_hdr_init("w"); + bcf_hdr_append(args->header, "##INFO="); + bcf_hdr_append(args->header, "##FORMAT="); + bcf_hdr_append(args->header, "##FORMAT="); + bcf_hdr_printf(args->header, "##contig=", args->str.s,0x7fffffff); // MAX_CSI_COOR + if (args->record_cmd_line) bcf_hdr_append_version(args->header, args->argc, args->argv, "bcftools_convert"); + + int i, nsamples; + char **samples = hts_readlist(sample_fname, 1, &nsamples); + if ( !samples ) error("Could not read %s\n", sample_fname); + for (i=2; iheader,samples[i]); + } + for (i=0; ioutfname,hts_bcf_wmode(args->output_type)); + if ( out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->outfname, strerror(errno)); + if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads); + bcf_hdr_write(out_fh,args->header); + bcf1_t *rec = bcf_init(); + + nsamples -= 2; + args->gts = (int32_t *) malloc(sizeof(int32_t)*nsamples*2); + args->flt = (float *) malloc(sizeof(float)*nsamples*3); + + do + { + bcf_clear(rec); + args->n.total++; + if ( !tsv_parse(tsv, rec, line.s) ) + bcf_write(out_fh, args->header, rec); + else + error("Error occurred while parsing: %s\n", line.s); + } + while ( hts_getline(gen_fh, KS_SEP_LINE, &line)>0 ); + + if ( hts_close(out_fh) ) error("Close failed: %s\n", args->outfname); + if ( hts_close(gen_fh) ) error("Close failed: %s\n", gen_fname); + bcf_hdr_destroy(args->header); + bcf_destroy(rec); + free(sample_fname); + free(gen_fname); + free(args->str.s); + free(line.s); + free(args->gts); + free(args->flt); + tsv_destroy(tsv); + + fprintf(bcftools_stderr,"Number of processed rows: \t%d\n", args->n.total); +} + +static void haplegendsample_to_vcf(args_t *args) +{ + /* + * Convert from IMPUTE2 hap/legend/sample output files to VCF + * + * hap: + * 0 1 0 1 + * legend: + * id position a0 a1 + * 1:186946386_G_T 186946386 G T + * sample: + * sample population group sex + * sample1 sample1 sample1 2 + * sample2 sample2 sample2 2 + * + * Output: VCF with filled GT + */ + kstring_t line = {0,0,0}; + + char *hap_fname = NULL, *leg_fname = NULL, *sample_fname = NULL; + sample_fname = strchr(args->infname,','); + if ( !sample_fname ) + { + args->str.l = 0; + ksprintf(&args->str,"%s.hap.gz", args->infname); + hap_fname = strdup(args->str.s); + args->str.l = 0; + ksprintf(&args->str,"%s.samples", args->infname); + sample_fname = strdup(args->str.s); + args->str.l = 0; + ksprintf(&args->str,"%s.legend.gz", args->infname); + leg_fname = strdup(args->str.s); + } + else + { + char *ss = sample_fname, *se = strchr(ss+1,','); + if ( !se ) error("Could not parse hap/legend/sample file names: %s\n", args->infname); + *ss = 0; + *se = 0; + hap_fname = strdup(args->infname); + leg_fname = strdup(ss+1); + sample_fname = strdup(se+1); + } + htsFile *hap_fh = hts_open(hap_fname, "r"); + if ( !hap_fh ) error("Could not read: %s\n", hap_fname); + + htsFile *leg_fh = hts_open(leg_fname,"r"); + if ( !leg_fh ) error("Could not read: %s\n", leg_fname); + + // Eat up first legend line, then determine chromosome name + if ( hts_getline(leg_fh, KS_SEP_LINE, &line) <= 0 ) error("Empty file: %s\n", leg_fname); + if ( hts_getline(leg_fh, KS_SEP_LINE, &line) <= 0 ) error("Empty file: %s\n", leg_fname); + + // Find out the chromosome name, sample names, init and print the VCF header + args->str.l = 0; + char *se = strchr(line.s,':'); + if ( !se ) error("Expected CHROM:POS_REF_ALT in first column of %s\n", leg_fname); + kputsn(line.s, se-line.s, &args->str); + + tsv_t *leg_tsv = tsv_init("CHROM_POS_REF_ALT,POS,REF_ALT"); + tsv_register(leg_tsv, "CHROM_POS_REF_ALT", tsv_setter_chrom_pos_ref_alt, args); + tsv_register(leg_tsv, "POS", tsv_setter_verify_pos, NULL); + tsv_register(leg_tsv, "REF_ALT", tsv_setter_verify_ref_alt, args); + + tsv_t *hap_tsv = tsv_init("HAPS"); + tsv_register(hap_tsv, "HAPS", tsv_setter_haps, args); + + args->header = bcf_hdr_init("w"); + bcf_hdr_append(args->header, "##INFO="); + bcf_hdr_append(args->header, "##FORMAT="); + bcf_hdr_printf(args->header, "##contig=", args->str.s,0x7fffffff); // MAX_CSI_COOR + if (args->record_cmd_line) bcf_hdr_append_version(args->header, args->argc, args->argv, "bcftools_convert"); + + int i, nrows, nsamples; + char **samples = hts_readlist(sample_fname, 1, &nrows); + if ( !samples ) error("Could not read %s\n", sample_fname); + nsamples = nrows - 1; + + // sample_fname should contain a header line, so need to ignore first row + // returned from hts_readlist (i=1, and not i=0) + for (i=1; iheader,samples[i]); + } + bcf_hdr_add_sample(args->header,NULL); + for (i=0; ioutfname,hts_bcf_wmode(args->output_type)); + if ( out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->outfname, strerror(errno)); + if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads); + bcf_hdr_write(out_fh,args->header); + bcf1_t *rec = bcf_init(); + + args->gts = (int32_t *) malloc(sizeof(int32_t)*nsamples*2); + + while (1) + { + bcf_clear(rec); + args->n.total++; + if ( tsv_parse(leg_tsv, rec, line.s) ) + error("Error occurred while parsing %s: %s\n", leg_fname,line.s); + + if ( hts_getline(hap_fh, KS_SEP_LINE, &line)<=0 ) + error("Different number of records in %s and %s?\n", leg_fname,hap_fname); + + if ( tsv_parse(hap_tsv, rec, line.s) ) + error("Error occurred while parsing %s: %s\n", hap_fname,line.s); + + bcf_write(out_fh, args->header, rec); + + if ( hts_getline(leg_fh, KS_SEP_LINE, &line)<=0 ) + { + if ( hts_getline(hap_fh, KS_SEP_LINE, &line)>0 ) + error("Different number of records in %s and %s?\n", leg_fname,hap_fname); + break; + } + } + + if ( hts_close(out_fh) ) error("Close failed: %s\n", args->outfname); + if ( hts_close(hap_fh) ) error("Close failed: %s\n", hap_fname); + if ( hts_close(leg_fh) ) error("Close failed: %s\n", leg_fname); + bcf_hdr_destroy(args->header); + bcf_destroy(rec); + free(sample_fname); + free(hap_fname); + free(leg_fname); + free(args->str.s); + free(line.s); + free(args->gts); + tsv_destroy(hap_tsv); + tsv_destroy(leg_tsv); + + fprintf(bcftools_stderr,"Number of processed rows: \t%d\n", args->n.total); +} + +static void hapsample_to_vcf(args_t *args) +{ + /* + * Input: SHAPEIT output + * + * 20:19995888_A_G 20:19995888 19995888 A G 0 0 0 0 ... + * + * First column is expected in the form of CHROM:POS_REF_ALT + * + * Output: VCF with filled GT + * + */ + kstring_t line = {0,0,0}; + + char *hap_fname = NULL, *sample_fname = NULL; + sample_fname = strchr(args->infname,','); + if ( !sample_fname ) + { + args->str.l = 0; + ksprintf(&args->str,"%s.hap.gz", args->infname); + hap_fname = strdup(args->str.s); + args->str.l = 0; + ksprintf(&args->str,"%s.samples", args->infname); + sample_fname = strdup(args->str.s); + } + else + { + *sample_fname = 0; + hap_fname = strdup(args->infname); + sample_fname = strdup(sample_fname+1); + } + htsFile *hap_fh = hts_open(hap_fname, "r"); + if ( !hap_fh ) error("Could not read: %s\n", hap_fname); + if ( hts_getline(hap_fh, KS_SEP_LINE, &line) <= 0 ) error("Empty file: %s\n", hap_fname); + + // Find out the chromosome name, sample names, init and print the VCF header + args->str.l = 0; + char *se = strchr(line.s,':'); + if ( !se ) error("Expected CHROM:POS_REF_ALT in first column of %s\n", hap_fname); + kputsn(line.s, se-line.s, &args->str); + + tsv_t *tsv = tsv_init("CHROM_POS_REF_ALT,-,POS,REF_ALT,HAPS"); + tsv_register(tsv, "CHROM_POS_REF_ALT", tsv_setter_chrom_pos_ref_alt, args); + tsv_register(tsv, "POS", tsv_setter_verify_pos, NULL); + tsv_register(tsv, "REF_ALT", tsv_setter_verify_ref_alt, args); + tsv_register(tsv, "HAPS", tsv_setter_haps, args); + + args->header = bcf_hdr_init("w"); + bcf_hdr_append(args->header, "##INFO="); + bcf_hdr_append(args->header, "##FORMAT="); + bcf_hdr_printf(args->header, "##contig=", args->str.s,0x7fffffff); // MAX_CSI_COOR + if (args->record_cmd_line) bcf_hdr_append_version(args->header, args->argc, args->argv, "bcftools_convert"); + + int i, nsamples; + char **samples = hts_readlist(sample_fname, 1, &nsamples); + if ( !samples ) error("Could not read %s\n", sample_fname); + for (i=2; iheader,samples[i]); + } + bcf_hdr_add_sample(args->header,NULL); + for (i=0; ioutfname,hts_bcf_wmode(args->output_type)); + if ( out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->outfname, strerror(errno)); + if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads); + bcf_hdr_write(out_fh,args->header); + bcf1_t *rec = bcf_init(); + + nsamples -= 2; + args->gts = (int32_t *) malloc(sizeof(int32_t)*nsamples*2); + + do + { + bcf_clear(rec); + args->n.total++; + if ( !tsv_parse(tsv, rec, line.s) ) + bcf_write(out_fh, args->header, rec); + else + error("Error occurred while parsing: %s\n", line.s); + } + while ( hts_getline(hap_fh, KS_SEP_LINE, &line)>0 ); + + if ( hts_close(out_fh) ) error("Close failed: %s\n", args->outfname); + if ( hts_close(hap_fh) ) error("Close failed: %s\n", hap_fname); + bcf_hdr_destroy(args->header); + bcf_destroy(rec); + free(sample_fname); + free(hap_fname); + free(args->str.s); + free(line.s); + free(args->gts); + tsv_destroy(tsv); + + fprintf(bcftools_stderr,"Number of processed rows: \t%d\n", args->n.total); +} + +char *init_sample2sex(bcf_hdr_t *hdr, char *sex_fname) +{ + int i, nlines; + char *sample2sex = (char*) calloc(bcf_hdr_nsamples(hdr),1); + char **lines = hts_readlist(sex_fname, 1, &nlines); + if ( !lines ) error("Could not read %s\n", sex_fname); + for (i=0; ioutput_chrom_first_col) + kputs("%CHROM ", &str); + else + kputs("%CHROM:%POS\\_%REF\\_%FIRST_ALT ", &str); + + // insert rsid as second column if needed + if(args->output_vcf_ids) + kputs("%ID ", &str); + else + kputs("%CHROM:%POS\\_%REF\\_%FIRST_ALT ", &str); + + kputs("%POS %REF %FIRST_ALT", &str); + if ( !args->tag || !strcmp(args->tag,"GT") ) kputs("%_GT_TO_PROB3",&str); + else if ( !strcmp(args->tag,"PL") ) kputs("%_PL_TO_PROB3",&str); + else if ( !strcmp(args->tag,"GP") ) kputs("%_GP_TO_PROB3",&str); + else error("todo: --tag %s\n", args->tag); + kputs("\n", &str); + open_vcf(args,str.s); + + int ret, gen_compressed = 1, sample_compressed = 0; + char *gen_fname = NULL, *sample_fname = NULL; + str.l = 0; + kputs(args->outfname,&str); + int n_files = 0, i; + char **files = hts_readlist(str.s, 0, &n_files); + if ( n_files==1 ) + { + int l = str.l; + kputs(".samples",&str); + sample_fname = strdup(str.s); + str.l = l; + kputs(".gen.gz",&str); + gen_fname = strdup(str.s); + } + else if ( n_files==2 ) + { + if (strlen(files[0]) && strcmp(files[0],".")!=0) gen_fname = strdup(files[0]); + if (strlen(files[1]) && strcmp(files[1],".")!=0) sample_fname = strdup(files[1]); + } + else + { + error("Error parsing --gensample filenames: %s\n", args->outfname); + } + for (i=0; i3 && strcasecmp(".gz",sample_fname+strlen(sample_fname)-3)==0 ) sample_compressed = 0; + + if (gen_fname) fprintf(bcftools_stderr, "Gen file: %s\n", gen_fname); + if (sample_fname) fprintf(bcftools_stderr, "Sample file: %s\n", sample_fname); + + // write samples file + if (sample_fname) + { + char *sample2sex = NULL; + if ( args->sex_fname ) sample2sex = init_sample2sex(args->header,args->sex_fname); + + int i; + BGZF *sout = bgzf_open(sample_fname, sample_compressed ? "wg" : "wu"); + str.l = 0; + kputs(sample2sex ? "ID_1 ID_2 missing sex\n0 0 0 0\n" : "ID_1 ID_2 missing\n0 0 0\n", &str); + ret = bgzf_write(sout, str.s, str.l); + if ( ret != str.l ) error("Error writing %s: %s\n", sample_fname, strerror(errno)); + for (i=0; iheader); i++) + { + str.l = 0; + if ( sample2sex ) + ksprintf(&str, "%s %s 0 %c\n", args->header->samples[i],args->header->samples[i],sample2sex[i]); + else + ksprintf(&str, "%s %s 0\n", args->header->samples[i],args->header->samples[i]); + ret = bgzf_write(sout, str.s, str.l); + if ( ret != str.l ) error("Error writing %s: %s\n", sample_fname, strerror(errno)); + } + if ( bgzf_close(sout)!=0 ) error("Error closing %s: %s\n", sample_fname, strerror(errno)); + free(sample_fname); + free(sample2sex); + } + if (!gen_fname) { + if ( str.m ) free(str.s); + return; + } + + int prev_rid = -1, prev_pos = -1; + int no_alt = 0, non_biallelic = 0, filtered = 0, ndup = 0, nok = 0; + BGZF *gout = bgzf_open(gen_fname, gen_compressed ? "wg" : "wu"); + while ( bcf_sr_next_line(args->files) ) + { + bcf1_t *line = bcf_sr_get_line(args->files,0); + if ( args->filter ) + { + int pass = filter_test(args->filter, line, NULL); + if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1; + if ( !pass ) { filtered++; continue; } + } + + // ALT allele is required + if ( line->n_allele<2 ) { no_alt++; continue; } + + // biallelic required + if ( line->n_allele>2 ) { + if (!non_biallelic) + fprintf(bcftools_stderr, "Warning: non-biallelic records are skipped. Consider splitting multi-allelic records into biallelic records using 'bcftools norm -m-'.\n"); + non_biallelic++; + continue; + } + + // skip duplicate lines, or otherwise shapeit complains + if ( prev_rid==line->rid && prev_pos==line->pos ) { ndup++; continue; } + prev_rid = line->rid; + prev_pos = line->pos; + + str.l = 0; + convert_line(args->convert, line, &str); + if ( str.l ) + { + int ret = bgzf_write(gout, str.s, str.l); + if ( ret!= str.l ) error("Error writing %s: %s\n", gen_fname,strerror(errno)); + nok++; + } + } + fprintf(bcftools_stderr, "%d records written, %d skipped: %d/%d/%d/%d no-ALT/non-biallelic/filtered/duplicated\n", + nok, no_alt+non_biallelic+filtered+ndup, no_alt, non_biallelic, filtered, ndup); + + if ( str.m ) free(str.s); + if ( bgzf_close(gout)!=0 ) error("Error closing %s: %s\n", gen_fname,strerror(errno)); + free(gen_fname); +} + +static void vcf_to_haplegendsample(args_t *args) +{ + kstring_t str = {0,0,0}; + if ( args->hap2dip ) + kputs("%_GT_TO_HAP2\n", &str); + else + kputs("%_GT_TO_HAP\n", &str); + open_vcf(args,str.s); + + int ret, hap_compressed = 1, legend_compressed = 1, sample_compressed = 0; + char *hap_fname = NULL, *legend_fname = NULL, *sample_fname = NULL; + str.l = 0; + kputs(args->outfname,&str); + int n_files = 0, i; + char **files = hts_readlist(str.s, 0, &n_files); + if ( n_files==1 ) + { + int l = str.l; + kputs(".samples",&str); + sample_fname = strdup(str.s); + str.l = l; + kputs(".legend.gz",&str); + legend_fname = strdup(str.s); + str.l = l; + kputs(".hap.gz",&str); + hap_fname = strdup(str.s); + } + else if ( n_files==3 ) + { + if (strlen(files[0]) && strcmp(files[0],".")!=0) hap_fname = strdup(files[0]); + if (strlen(files[1]) && strcmp(files[1],".")!=0) legend_fname = strdup(files[1]); + if (strlen(files[2]) && strcmp(files[2],".")!=0) sample_fname = strdup(files[2]); + } + else + { + error("Error parsing --hapslegendsample filenames: %s\n", args->outfname); + } + for (i=0; i3 && strcasecmp(".gz",sample_fname+strlen(sample_fname)-3)==0 ) sample_compressed = 0; + + if (hap_fname) fprintf(bcftools_stderr, "Hap file: %s\n", hap_fname); + if (legend_fname) fprintf(bcftools_stderr, "Legend file: %s\n", legend_fname); + if (sample_fname) fprintf(bcftools_stderr, "Sample file: %s\n", sample_fname); + + // write samples file + if (sample_fname) + { + char *sample2sex = NULL; + if ( args->sex_fname ) sample2sex = init_sample2sex(args->header,args->sex_fname); + + int i; + BGZF *sout = bgzf_open(sample_fname, sample_compressed ? "wg" : "wu"); + str.l = 0; + kputs("sample population group sex\n", &str); + ret = bgzf_write(sout, str.s, str.l); + if ( ret != str.l ) error("Error writing %s: %s\n", sample_fname, strerror(errno)); + for (i=0; iheader); i++) + { + str.l = 0; + ksprintf(&str, "%s %s %s %c\n", args->header->samples[i], args->header->samples[i], args->header->samples[i], sample2sex ? sample2sex[i] : '2'); + ret = bgzf_write(sout, str.s, str.l); + if ( ret != str.l ) error("Error writing %s: %s\n", sample_fname, strerror(errno)); + } + if ( bgzf_close(sout)!=0 ) error("Error closing %s: %s\n", sample_fname, strerror(errno)); + free(sample_fname); + free(sample2sex); + } + if (!hap_fname && !legend_fname) { + if ( str.m ) free(str.s); + return; + } + + // open haps and legend outputs + BGZF *hout = hap_fname ? bgzf_open(hap_fname, hap_compressed ? "wg" : "wu") : NULL; + if ( hap_compressed && args->n_threads ) bgzf_thread_pool(hout, args->files->p->pool, args->files->p->qsize); + BGZF *lout = legend_fname ? bgzf_open(legend_fname, legend_compressed ? "wg" : "wu") : NULL; + if (legend_fname) { + str.l = 0; + kputs("id position a0 a1\n", &str); + ret = bgzf_write(lout, str.s, str.l); + if ( ret != str.l ) error("Error writing %s: %s\n", legend_fname, strerror(errno)); + } + + int no_alt = 0, non_biallelic = 0, filtered = 0, nok = 0; + while ( bcf_sr_next_line(args->files) ) + { + bcf1_t *line = bcf_sr_get_line(args->files,0); + if ( args->filter ) + { + int pass = filter_test(args->filter, line, NULL); + if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1; + if ( !pass ) { filtered++; continue; } + } + + // ALT allele is required + if ( line->n_allele<2 ) { no_alt++; continue; } + // biallelic required + if ( line->n_allele>2 ) { + if (!non_biallelic) + fprintf(bcftools_stderr, "Warning: non-biallelic records are skipped. Consider splitting multi-allelic records into biallelic records using 'bcftools norm -m-'.\n"); + non_biallelic++; + continue; + } + + str.l = 0; + convert_line(args->convert, line, &str); + if ( !str.l ) continue; + + // write haps file + if (hap_fname) { + ret = bgzf_write(hout, str.s, str.l); // write hap file + if ( ret != str.l ) error("Error writing %s: %s\n", hap_fname, strerror(errno)); + } + if (legend_fname) { + str.l = 0; + if ( args->output_vcf_ids && (line->d.id[0]!='.' || line->d.id[1]!=0) ) + ksprintf(&str, "%s %d %s %s\n", line->d.id, line->pos+1, line->d.allele[0], line->d.allele[1]); + else + ksprintf(&str, "%s:%d_%s_%s %d %s %s\n", bcf_seqname(args->header, line), line->pos+1, line->d.allele[0], line->d.allele[1], line->pos+1, line->d.allele[0], line->d.allele[1]); + + // write legend file + ret = bgzf_write(lout, str.s, str.l); + if ( ret != str.l ) error("Error writing %s: %s\n", legend_fname, strerror(errno)); + } + nok++; + } + fprintf(bcftools_stderr, "%d records written, %d skipped: %d/%d/%d no-ALT/non-biallelic/filtered\n", nok,no_alt+non_biallelic+filtered, no_alt, non_biallelic, filtered); + if ( str.m ) free(str.s); + if ( hout && bgzf_close(hout)!=0 ) error("Error closing %s: %s\n", hap_fname, strerror(errno)); + if ( lout && bgzf_close(lout)!=0 ) error("Error closing %s: %s\n", legend_fname, strerror(errno)); + if (hap_fname) free(hap_fname); + if (legend_fname) free(legend_fname); +} + +static void vcf_to_hapsample(args_t *args) +{ + /* + * WTCCC style haplotypes file + * see https://mathgen.stats.ox.ac.uk/genetics_software/shapeit/shapeit.html#hapsample + * + * These are essentially the haplotypes from the impute2 format with some + * legend info tacked on to the first 5 columns + * + */ + kstring_t str = {0,0,0}; + + // print ID instead of CHROM:POS_REF_ALT1 + if ( args->output_vcf_ids ) + kputs("%CHROM %ID %POS %REF %FIRST_ALT ", &str); + else + kputs("%CHROM %CHROM:%POS\\_%REF\\_%FIRST_ALT %POS %REF %FIRST_ALT ", &str); + + if ( args->hap2dip ) + kputs("%_GT_TO_HAP2\n", &str); + else + kputs("%_GT_TO_HAP\n", &str); + open_vcf(args,str.s); + + int ret, hap_compressed = 1, sample_compressed = 0; + char *hap_fname = NULL, *sample_fname = NULL; + str.l = 0; + kputs(args->outfname,&str); + int n_files = 0, i; + char **files = hts_readlist(str.s, 0, &n_files); + if ( n_files==1 ) + { + int l = str.l; + kputs(".sample",&str); + sample_fname = strdup(str.s); + str.l = l; + kputs(".hap.gz",&str); + hap_fname = strdup(str.s); + } + else if ( n_files==2 ) + { + if (strlen(files[0]) && strcmp(files[0],".")!=0) hap_fname = strdup(files[0]); + if (strlen(files[1]) && strcmp(files[1],".")!=0) sample_fname = strdup(files[1]); + } + else + { + error("Error parsing --hapsample filenames: %s\n", args->outfname); + } + for (i=0; i3 && strcasecmp(".gz",sample_fname+strlen(sample_fname)-3)==0 ) sample_compressed = 0; + + if (hap_fname) fprintf(bcftools_stderr, "Hap file: %s\n", hap_fname); + if (sample_fname) fprintf(bcftools_stderr, "Sample file: %s\n", sample_fname); + + // write samples file + if (sample_fname) + { + char *sample2sex = NULL; + if ( args->sex_fname ) sample2sex = init_sample2sex(args->header,args->sex_fname); + + int i; + BGZF *sout = bgzf_open(sample_fname, sample_compressed ? "wg" : "wu"); + str.l = 0; + kputs(sample2sex ? "ID_1 ID_2 missing sex\n0 0 0 0\n" : "ID_1 ID_2 missing\n0 0 0\n", &str); + ret = bgzf_write(sout, str.s, str.l); + if ( ret != str.l ) error("Error writing %s: %s\n", sample_fname, strerror(errno)); + for (i=0; iheader); i++) + { + str.l = 0; + if ( sample2sex ) + ksprintf(&str, "%s %s 0 %c\n", args->header->samples[i],args->header->samples[i],sample2sex[i]); + else + ksprintf(&str, "%s %s 0\n", args->header->samples[i],args->header->samples[i]); + ret = bgzf_write(sout, str.s, str.l); + if ( ret != str.l ) error("Error writing %s: %s\n", sample_fname, strerror(errno)); + } + if ( bgzf_close(sout)!=0 ) error("Error closing %s: %s\n", sample_fname, strerror(errno)); + free(sample_fname); + free(sample2sex); + } + if (!hap_fname) { + if ( str.m ) free(str.s); + return; + } + + // open haps output + BGZF *hout = hap_fname ? bgzf_open(hap_fname, hap_compressed ? "wg" : "wu") : NULL; + if ( hap_compressed && args->n_threads ) bgzf_thread_pool(hout, args->files->p->pool, args->files->p->qsize); + + int no_alt = 0, non_biallelic = 0, filtered = 0, nok = 0; + while ( bcf_sr_next_line(args->files) ) + { + bcf1_t *line = bcf_sr_get_line(args->files,0); + if ( args->filter ) + { + int pass = filter_test(args->filter, line, NULL); + if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1; + if ( !pass ) { filtered++; continue; } + } + + // ALT allele is required + if ( line->n_allele<2 ) { no_alt++; continue; } + // biallelic required + if ( line->n_allele>2 ) { + if (!non_biallelic) + fprintf(bcftools_stderr, "Warning: non-biallelic records are skipped. Consider splitting multi-allelic records into biallelic records using 'bcftools norm -m-'.\n"); + non_biallelic++; + continue; + } + + str.l = 0; + convert_line(args->convert, line, &str); + if ( !str.l ) continue; + + // write haps file + if (hap_fname) { + ret = bgzf_write(hout, str.s, str.l); // write hap file + if ( ret != str.l ) error("Error writing %s: %s\n", hap_fname, strerror(errno)); + } + nok++; + } + fprintf(bcftools_stderr, "%d records written, %d skipped: %d/%d/%d no-ALT/non-biallelic/filtered\n", nok, no_alt+non_biallelic+filtered, no_alt, non_biallelic, filtered); + if ( str.m ) free(str.s); + if ( hout && bgzf_close(hout)!=0 ) error("Error closing %s: %s\n", hap_fname, strerror(errno)); + if (hap_fname) free(hap_fname); +} + +static void bcf_hdr_set_chrs(bcf_hdr_t *hdr, faidx_t *fai) +{ + int i, n = faidx_nseq(fai); + for (i=0; i", seq,len); + } +} +static inline int acgt_to_5(char base) +{ + if ( base=='A' ) return 0; + if ( base=='C' ) return 1; + if ( base=='G' ) return 2; + if ( base=='T' ) return 3; + return 4; +} +static inline int tsv_setter_aa1(args_t *args, char *ss, char *se, int alleles[], int *nals, int ref, int32_t *gts) +{ + if ( se - ss > 2 ) return -1; // currently only SNPs + + if ( ss[0]=='-' ) + { + // missing GT + gts[0] = bcf_gt_missing; + gts[1] = bcf_int32_vector_end; + args->n.missing++; + return 0; + } + if ( ss[0]=='I' ) return -2; // skip insertions/deletions for now + if ( ss[0]=='D' ) return -2; + + int a0 = acgt_to_5(toupper(ss[0])); + int a1 = ss[1] ? acgt_to_5(toupper(ss[1])) : a0; + if ( alleles[a0]<0 ) alleles[a0] = (*nals)++; + if ( alleles[a1]<0 ) alleles[a1] = (*nals)++; + + gts[0] = bcf_gt_unphased(alleles[a0]); + gts[1] = ss[1] ? bcf_gt_unphased(alleles[a1]) : bcf_int32_vector_end; + + if ( ref==a0 && ref==a1 ) args->n.hom_rr++; // hom ref: RR + else if ( ref==a0 ) args->n.het_ra++; // het: RA + else if ( ref==a1 ) args->n.het_ra++; // het: AR + else if ( a0==a1 ) args->n.hom_aa++; // hom-alt: AA + else args->n.het_aa++; // non-ref het: AA + + return 0; +} +static int tsv_setter_aa(tsv_t *tsv, bcf1_t *rec, void *usr) +{ + args_t *args = (args_t*) usr; + + int len; + char *ref = faidx_fetch_seq(args->ref, (char*)bcf_hdr_id2name(args->header,rec->rid), rec->pos, rec->pos, &len); + if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", bcf_hdr_id2name(args->header,rec->rid), rec->pos+1); + + int nals = 1, alleles[5] = { -1, -1, -1, -1, -1 }; // a,c,g,t,n + ref[0] = toupper(ref[0]); + int iref = acgt_to_5(ref[0]); + alleles[iref] = 0; + + rec->n_sample = bcf_hdr_nsamples(args->header); + + int i, ret; + for (i=0; in_sample; i++) + { + if ( i>0 ) + { + ret = tsv_next(tsv); + if ( ret==-1 ) error("Too few columns for %d samples at %s:%d\n", rec->n_sample,bcf_hdr_id2name(args->header,rec->rid), rec->pos+1); + } + ret = tsv_setter_aa1(args, tsv->ss, tsv->se, alleles, &nals, iref, args->gts+i*2); + if ( ret==-1 ) error("Error parsing the site %s:%d, expected two characters\n", bcf_hdr_id2name(args->header,rec->rid), rec->pos+1); + if ( ret==-2 ) + { + // something else than a SNP + free(ref); + return -1; + } + } + + args->str.l = 0; + kputc(ref[0], &args->str); + for (i=0; i<5; i++) + { + if ( alleles[i]>0 ) + { + kputc(',', &args->str); + kputc("ACGTN"[i], &args->str); + } + } + bcf_update_alleles_str(args->header, rec, args->str.s); + if ( bcf_update_genotypes(args->header,rec,args->gts,rec->n_sample*2) ) error("Could not update the GT field\n"); + + free(ref); + return 0; +} + +static void tsv_to_vcf(args_t *args) +{ + if ( !args->ref_fname ) error("--tsv2vcf requires the --fasta-ref option\n"); + if ( !args->sample_list ) error("--tsv2vcf requires the --samples option\n"); + + args->ref = fai_load(args->ref_fname); + if ( !args->ref ) error("Could not load the reference %s\n", args->ref_fname); + + args->header = bcf_hdr_init("w"); + bcf_hdr_set_chrs(args->header, args->ref); + bcf_hdr_append(args->header, "##FORMAT="); + if (args->record_cmd_line) bcf_hdr_append_version(args->header, args->argc, args->argv, "bcftools_convert"); + + int i, n; + char **smpls = hts_readlist(args->sample_list, args->sample_is_file, &n); + if ( !smpls ) error("Could not parse %s\n", args->sample_list); + for (i=0; iheader, smpls[i]); + free(smpls[i]); + } + free(smpls); + bcf_hdr_add_sample(args->header, NULL); + args->gts = (int32_t *) malloc(sizeof(int32_t)*n*2); + + htsFile *out_fh = hts_open(args->outfname,hts_bcf_wmode(args->output_type)); + if ( out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->outfname, strerror(errno)); + if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads); + bcf_hdr_write(out_fh,args->header); + + tsv_t *tsv = tsv_init(args->columns ? args->columns : "ID,CHROM,POS,AA"); + if ( tsv_register(tsv, "CHROM", tsv_setter_chrom, args->header) < 0 ) error("Expected CHROM column\n"); + if ( tsv_register(tsv, "POS", tsv_setter_pos, NULL) < 0 ) error("Expected POS column\n"); + if ( tsv_register(tsv, "ID", tsv_setter_id, args->header) < 0 && !args->columns ) error("Expected ID column\n"); + if ( tsv_register(tsv, "AA", tsv_setter_aa, args) < 0 ) error("Expected AA column\n"); + + bcf1_t *rec = bcf_init(); + bcf_float_set_missing(rec->qual); + + kstring_t line = {0,0,0}; + htsFile *in_fh = hts_open(args->infname, "r"); + if ( !in_fh ) error("Could not read: %s\n", args->infname); + while ( hts_getline(in_fh, KS_SEP_LINE, &line) > 0 ) + { + if ( line.s[0]=='#' ) continue; // skip comments + bcf_clear(rec); + + args->n.total++; + if ( !tsv_parse(tsv, rec, line.s) ) + bcf_write(out_fh, args->header, rec); + else + args->n.skipped++; + } + if ( hts_close(in_fh) ) error("Close failed: %s\n", args->infname); + free(line.s); + + bcf_hdr_destroy(args->header); + hts_close(out_fh); + tsv_destroy(tsv); + bcf_destroy(rec); + free(args->str.s); + free(args->gts); + + fprintf(bcftools_stderr,"Rows total: \t%d\n", args->n.total); + fprintf(bcftools_stderr,"Rows skipped: \t%d\n", args->n.skipped); + fprintf(bcftools_stderr,"Missing GTs: \t%d\n", args->n.missing); + fprintf(bcftools_stderr,"Hom RR: \t%d\n", args->n.hom_rr); + fprintf(bcftools_stderr,"Het RA: \t%d\n", args->n.het_ra); + fprintf(bcftools_stderr,"Hom AA: \t%d\n", args->n.hom_aa); + fprintf(bcftools_stderr,"Het AA: \t%d\n", args->n.het_aa); +} + +static void vcf_to_vcf(args_t *args) +{ + open_vcf(args,NULL); + htsFile *out_fh = hts_open(args->outfname,hts_bcf_wmode(args->output_type)); + if ( out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->outfname, strerror(errno)); + if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads); + + bcf_hdr_t *hdr = bcf_sr_get_header(args->files,0); + bcf_hdr_write(out_fh,hdr); + + while ( bcf_sr_next_line(args->files) ) + { + bcf1_t *line = bcf_sr_get_line(args->files,0); + if ( args->filter ) + { + int pass = filter_test(args->filter, line, NULL); + if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1; + if ( !pass ) continue; + } + bcf_write(out_fh,hdr,line); + } + hts_close(out_fh); +} + +static void gvcf_to_vcf(args_t *args) +{ + if ( !args->ref_fname ) error("--gvcf2vcf requires the --fasta-ref option\n"); + + args->ref = fai_load(args->ref_fname); + if ( !args->ref ) error("Could not load the fai index for reference %s\n", args->ref_fname); + + open_vcf(args,NULL); + htsFile *out_fh = hts_open(args->outfname,hts_bcf_wmode(args->output_type)); + if ( out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->outfname, strerror(errno)); + if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads); + + bcf_hdr_t *hdr = bcf_sr_get_header(args->files,0); + if (args->record_cmd_line) bcf_hdr_append_version(hdr, args->argc, args->argv, "bcftools_convert"); + bcf_hdr_write(out_fh,hdr); + + int32_t *itmp = NULL, nitmp = 0; + + while ( bcf_sr_next_line(args->files) ) + { + bcf1_t *line = bcf_sr_get_line(args->files,0); + if ( args->filter ) + { + int pass = filter_test(args->filter, line, NULL); + if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1; + if ( !pass ) continue; + } + + if (!bcf_has_filter(hdr,line,"PASS")) + { + bcf_write(out_fh,hdr,line); + continue; + } + + // check if alleles compatible with being a gVCF record + // ALT must be one of ., <*>, , + // check for INFO/END is below + int i, gallele = -1; + if (line->n_allele==1) + gallele = 0; // illumina/bcftools-call gvcf (if INFO/END present) + else if ( line->d.allele[1][0]=='<' ) + { + for (i=1; in_allele; i++) + { + if ( line->d.allele[i][1]=='*' && line->d.allele[i][2]=='>' && line->d.allele[i][3]=='\0' ) { gallele = i; break; } // mpileup/spec compliant gVCF + if ( line->d.allele[i][1]=='X' && line->d.allele[i][2]=='>' && line->d.allele[i][3]=='\0' ) { gallele = i; break; } // old mpileup gVCF + if ( strcmp(line->d.allele[i],"")==0 ) { gallele = i; break; } // GATK gVCF + } + } + + // no gVCF compatible alleles + if (gallele<0) + { + bcf_write(out_fh,hdr,line); + continue; + } + + int nend = bcf_get_info_int32(hdr,line,"END",&itmp,&nitmp); + if ( nend!=1 ) + { + // No INFO/END => not gVCF record + bcf_write(out_fh,hdr,line); + continue; + } + bcf_update_info_int32(hdr,line,"END",NULL,0); + int pos, len; + for (pos=line->pos; pospos = pos; + char *ref = faidx_fetch_seq(args->ref, (char*)bcf_hdr_id2name(hdr,line->rid), line->pos, line->pos, &len); + if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", bcf_hdr_id2name(hdr,line->rid), line->pos+1); + strncpy(line->d.allele[0],ref,len); + bcf_write(out_fh,hdr,line); + free(ref); + } + } + free(itmp); + hts_close(out_fh); +} + +static void usage(void) +{ + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "About: Converts VCF/BCF to other formats and back. See man page for file\n"); + fprintf(bcftools_stderr, " formats details. When specifying output files explicitly instead\n"); + fprintf(bcftools_stderr, " of with , one can use '-' for bcftools_stdout and '.' to suppress.\n"); + fprintf(bcftools_stderr, "Usage: bcftools convert [OPTIONS] \n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "VCF input options:\n"); + fprintf(bcftools_stderr, " -e, --exclude exclude sites for which the expression is true\n"); + fprintf(bcftools_stderr, " -i, --include select sites for which the expression is true\n"); + fprintf(bcftools_stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(bcftools_stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(bcftools_stderr, " -s, --samples list of samples to include\n"); + fprintf(bcftools_stderr, " -S, --samples-file file of samples to include\n"); + fprintf(bcftools_stderr, " -t, --targets similar to -r but streams rather than index-jumps\n"); + fprintf(bcftools_stderr, " -T, --targets-file similar to -R but streams rather than index-jumps\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "VCF output options:\n"); + fprintf(bcftools_stderr, " --no-version do not append version and command line to the header\n"); + fprintf(bcftools_stderr, " -o, --output output file name [bcftools_stdout]\n"); + fprintf(bcftools_stderr, " -O, --output-type b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"); + fprintf(bcftools_stderr, " --threads number of extra output compression threads [0]\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "GEN/SAMPLE conversion (input/output from IMPUTE2):\n"); + fprintf(bcftools_stderr, " -G, --gensample2vcf <...> |,\n"); + fprintf(bcftools_stderr, " -g, --gensample <...> |,\n"); + fprintf(bcftools_stderr, " --tag tag to take values for .gen file: GT,PL,GL,GP [GT]\n"); + fprintf(bcftools_stderr, " --chrom output chromosome in first column instead of CHROM:POS_REF_ALT\n"); + fprintf(bcftools_stderr, " --sex output sex column in the sample-file, input format is: Sample\\t[MF]\n"); + fprintf(bcftools_stderr, " --vcf-ids output VCF IDs in second column instead of CHROM:POS_REF_ALT\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "gVCF conversion:\n"); + fprintf(bcftools_stderr, " --gvcf2vcf expand gVCF reference blocks\n"); + fprintf(bcftools_stderr, " -f, --fasta-ref reference sequence in fasta format\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "HAP/SAMPLE conversion (output from SHAPEIT):\n"); + fprintf(bcftools_stderr, " --hapsample2vcf <...> |,\n"); + fprintf(bcftools_stderr, " --hapsample <...> |,\n"); + fprintf(bcftools_stderr, " --haploid2diploid convert haploid genotypes to diploid homozygotes\n"); + fprintf(bcftools_stderr, " --sex output sex column in the sample-file, input format is: Sample\\t[MF]\n"); + fprintf(bcftools_stderr, " --vcf-ids output VCF IDs instead of CHROM:POS_REF_ALT\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "HAP/LEGEND/SAMPLE conversion:\n"); + fprintf(bcftools_stderr, " -H, --haplegendsample2vcf <...> |,,\n"); + fprintf(bcftools_stderr, " -h, --haplegendsample <...> |,,\n"); + fprintf(bcftools_stderr, " --haploid2diploid convert haploid genotypes to diploid homozygotes\n"); + fprintf(bcftools_stderr, " --sex output sex column in the sample-file, input format is: Sample\\t[MF]\n"); + fprintf(bcftools_stderr, " --vcf-ids output VCF IDs instead of CHROM:POS_REF_ALT\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "TSV conversion:\n"); + fprintf(bcftools_stderr, " --tsv2vcf \n"); + fprintf(bcftools_stderr, " -c, --columns columns of the input tsv file [ID,CHROM,POS,AA]\n"); + fprintf(bcftools_stderr, " -f, --fasta-ref reference sequence in fasta format\n"); + fprintf(bcftools_stderr, " -s, --samples list of sample names\n"); + fprintf(bcftools_stderr, " -S, --samples-file file of sample names\n"); + fprintf(bcftools_stderr, "\n"); + // fprintf(bcftools_stderr, "PLINK options:\n"); + // fprintf(bcftools_stderr, " -p, --plink |,,|,,|,\n"); + // fprintf(bcftools_stderr, " --tped make tped file instead\n"); + // fprintf(bcftools_stderr, " --bin make binary bed/fam/bim files\n"); + // fprintf(bcftools_stderr, "\n"); + // fprintf(bcftools_stderr, "PBWT options:\n"); + // fprintf(bcftools_stderr, " -b, --pbwt or ,,,\n"); + // fprintf(bcftools_stderr, "\n"); + exit(1); +} + +int main_vcfconvert(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->outfname = "-"; + args->output_type = FT_VCF; + args->n_threads = 0; + args->record_cmd_line = 1; + + static struct option loptions[] = + { + {"include",required_argument,NULL,'i'}, + {"exclude",required_argument,NULL,'e'}, + {"output",required_argument,NULL,'o'}, + {"output-type",required_argument,NULL,'O'}, + {"threads",required_argument,NULL,9}, + {"regions",required_argument,NULL,'r'}, + {"regions-file",required_argument,NULL,'R'}, + {"targets",required_argument,NULL,'t'}, + {"targets-file",required_argument,NULL,'T'}, + {"samples",required_argument,NULL,'s'}, + {"samples-file",required_argument,NULL,'S'}, + {"sex",required_argument,NULL,11}, + {"gensample",required_argument,NULL,'g'}, + {"gensample2vcf",required_argument,NULL,'G'}, + {"tag",required_argument,NULL,1}, + {"chrom",no_argument,NULL,8}, + {"tsv2vcf",required_argument,NULL,2}, + {"hapsample",required_argument,NULL,7}, + {"hapsample2vcf",required_argument,NULL,3}, + {"vcf-ids",no_argument,NULL,4}, + {"haploid2diploid",no_argument,NULL,5}, + {"gvcf2vcf",no_argument,NULL,6}, + {"haplegendsample",required_argument,NULL,'h'}, + {"haplegendsample2vcf",required_argument,NULL,'H'}, + {"columns",required_argument,NULL,'c'}, + {"fasta-ref",required_argument,NULL,'f'}, + {"no-version",no_argument,NULL,10}, + {NULL,0,NULL,0} + }; + while ((c = getopt_long(argc, argv, "?h:r:R:s:S:t:T:i:e:g:G:o:O:c:f:H:",loptions,NULL)) >= 0) { + switch (c) { + case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break; + case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; args->regions_is_file = 1; break; + case 't': args->targets_list = optarg; break; + case 'T': args->targets_list = optarg; args->targets_is_file = 1; break; + case 's': args->sample_list = optarg; break; + case 'S': args->sample_list = optarg; args->sample_is_file = 1; break; + case 'g': args->convert_func = vcf_to_gensample; args->outfname = optarg; break; + case 'G': args->convert_func = gensample_to_vcf; args->infname = optarg; break; + case 1 : args->tag = optarg; break; + case 2 : args->convert_func = tsv_to_vcf; args->infname = optarg; break; + case 3 : args->convert_func = hapsample_to_vcf; args->infname = optarg; break; + case 4 : args->output_vcf_ids = 1; break; + case 5 : args->hap2dip = 1; break; + case 6 : args->convert_func = gvcf_to_vcf; break; + case 7 : args->convert_func = vcf_to_hapsample; args->outfname = optarg; break; + case 8 : args->output_chrom_first_col = 1; break; + case 'H': args->convert_func = haplegendsample_to_vcf; args->infname = optarg; break; + case 'f': args->ref_fname = optarg; break; + case 'c': args->columns = optarg; break; + case 'o': args->outfname = optarg; break; + case 'O': + switch (optarg[0]) { + case 'b': args->output_type = FT_BCF_GZ; break; + case 'u': args->output_type = FT_BCF; break; + case 'z': args->output_type = FT_VCF_GZ; break; + case 'v': args->output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + } + break; + case 'h': args->convert_func = vcf_to_haplegendsample; args->outfname = optarg; break; + case 9 : args->n_threads = strtol(optarg, 0, 0); break; + case 10 : args->record_cmd_line = 0; break; + case 11 : args->sex_fname = optarg; break; + case '?': usage(); + default: error("Unknown argument: %s\n", optarg); + } + } + + if ( !args->infname ) + { + if ( optind>=argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) args->infname = "-"; + } + else args->infname = argv[optind]; + } + if ( !args->infname ) usage(); + + if ( args->convert_func ) args->convert_func(args); + else vcf_to_vcf(args); + + destroy_data(args); + free(args); + return 0; +} diff --git a/bcftools/vcffilter.c b/bcftools/vcffilter.c new file mode 100644 index 0000000..c1b41f2 --- /dev/null +++ b/bcftools/vcffilter.c @@ -0,0 +1,573 @@ +/* vcffilter.c -- Apply fixed-threshold filters. + + Copyright (C) 2013-2014 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "filter.h" +#include "rbuf.h" + +// Logic of the filters: include or exclude sites which match the filters? +#define FLT_INCLUDE 1 +#define FLT_EXCLUDE 2 + +// FILTER columns annotation: replace or add to existing FILTERs; set FILTER to PASS at good sites? +#define ANNOT_ADD 1 +#define ANNOT_RESET 2 + +// Set genotypes of filtered samples +#define SET_GTS_MISSING 1 +#define SET_GTS_REF 2 + +typedef struct _args_t +{ + filter_t *filter; + char *filter_str; + int filter_logic; // include or exclude sites which match the filters? One of FLT_INCLUDE/FLT_EXCLUDE + const uint8_t *smpl_pass; + int set_gts; + char *soft_filter; // drop failed sites or annotate FILTER column? + int annot_mode; // add to existing FILTER annotation or replace? Otherwise reset FILTER to PASS or leave as it is? + int flt_fail, flt_pass; // BCF ids of fail and pass filters + int snp_gap, indel_gap, IndelGap_id, SnpGap_id; + int32_t ntmpi, *tmpi, ntmp_ac, *tmp_ac; + rbuf_t rbuf; + bcf1_t **rbuf_lines; + + bcf_srs_t *files; + bcf_hdr_t *hdr; + htsFile *out_fh; + int output_type, n_threads; + + char **argv, *output_fname, *targets_list, *regions_list; + int argc, record_cmd_line; +} +args_t; + +static void init_data(args_t *args) +{ + args->out_fh = hts_open(args->output_fname,hts_bcf_wmode(args->output_type)); + if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno)); + if ( args->n_threads ) hts_set_threads(args->out_fh, args->n_threads); + + args->hdr = args->files->readers[0].header; + args->flt_pass = bcf_hdr_id2int(args->hdr,BCF_DT_ID,"PASS"); assert( !args->flt_pass ); // sanity check: required by BCF spec + + // -i or -e: append FILTER line + if ( args->soft_filter && args->filter_logic ) + { + kstring_t flt_name = {0,0,0}; + if ( strcmp(args->soft_filter,"+") ) + kputs(args->soft_filter, &flt_name); + else + { + // Make up a filter name + int i = 0, id = -1; + do + { + ksprintf(&flt_name,"Filter%d", ++i); + id = bcf_hdr_id2int(args->hdr,BCF_DT_ID,flt_name.s); + } + while ( bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FLT,id) ); + } + // escape quotes + kstring_t tmp = {0,0,0}; + char *t = args->filter_str; + while ( *t ) + { + if ( *t=='"' ) kputc('\\',&tmp); + kputc(*t,&tmp); + t++; + } + int ret = bcf_hdr_printf(args->hdr, "##FILTER=", flt_name.s,args->filter_logic & FLT_INCLUDE ? "not true" : "true", tmp.s); + if ( ret!=0 ) + error("Failed to append header line: ##FILTER=\n", flt_name.s,args->filter_logic & FLT_INCLUDE ? "not true" : "true", tmp.s); + args->flt_fail = bcf_hdr_id2int(args->hdr,BCF_DT_ID,flt_name.s); assert( args->flt_fail>=0 ); + free(flt_name.s); + free(tmp.s); + } + + if ( args->snp_gap || args->indel_gap ) + { + if ( !args->filter_logic && args->soft_filter && strcmp(args->soft_filter,"+") ) + { + kstring_t tmp = {0,0,0}; + if ( args->snp_gap ) kputs("\"SnpGap\"", &tmp); + if ( args->indel_gap ) + { + if ( tmp.s ) kputs(" and ", &tmp); + kputs("\"IndelGap\"", &tmp); + } + if ( strncmp(tmp.s+1,args->soft_filter,tmp.l-2) ) + fprintf(stderr,"Warning: using %s filter name instead of \"%s\"\n", tmp.s,args->soft_filter); + free(tmp.s); + } + + rbuf_init(&args->rbuf, 64); + args->rbuf_lines = (bcf1_t**) calloc(args->rbuf.m, sizeof(bcf1_t*)); + if ( args->snp_gap ) + { + bcf_hdr_printf(args->hdr, "##FILTER=", args->snp_gap); + args->SnpGap_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, "SnpGap"); + assert( args->SnpGap_id>=0 ); + } + if ( args->indel_gap ) + { + bcf_hdr_printf(args->hdr, "##FILTER=", args->indel_gap); + args->IndelGap_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, "IndelGap"); + assert( args->IndelGap_id>=0 ); + } + } + + if (args->record_cmd_line) bcf_hdr_append_version(args->hdr, args->argc, args->argv, "bcftools_filter"); + + if ( args->filter_str ) + args->filter = filter_init(args->hdr, args->filter_str); +} + +static void destroy_data(args_t *args) +{ + if ( args->rbuf_lines ) + { + int i; + for (i=0; irbuf.m; i++) + if ( args->rbuf_lines[i] ) bcf_destroy1(args->rbuf_lines[i]); + free(args->rbuf_lines); + } + if ( args->filter ) + filter_destroy(args->filter); + free(args->tmpi); + free(args->tmp_ac); +} + +static void flush_buffer(args_t *args, int n) +{ + int i, j; + for (i=0; irbuf); + bcf1_t *rec = args->rbuf_lines[k]; + + int pass = 1; + if ( !args->soft_filter ) + { + for (j=0; jd.n_flt; j++) + { + if ( args->indel_gap && rec->d.flt[j]==args->IndelGap_id ) { pass = 0; break; } + if ( args->snp_gap && rec->d.flt[j]==args->SnpGap_id ) { pass = 0; break; } + } + } + if ( pass ) bcf_write1(args->out_fh, args->hdr, rec); + } +} + +#define SWAP(type_t, a, b) { type_t t = a; a = b; b = t; } +static void buffered_filters(args_t *args, bcf1_t *line) +{ + /** + * The logic of SnpGap=3. The SNPs at positions 1 and 7 are filtered, + * positions 0 and 8 are not: + * 0123456789 + * ref .G.GT..G.. + * del .A.G-..A.. + * Here the positions 1 and 6 are filtered, 0 and 7 are not: + * 0123-456789 + * ref .G.G-..G.. + * ins .A.GT..A.. + * + * The logic of IndelGap=2. The second indel is filtered: + * 012345678901 + * ref .GT.GT..GT.. + * del .G-.G-..G-.. + * And similarly here, the second is filtered: + * 01 23 456 78 + * ref .A-.A-..A-.. + * ins .AT.AT..AT.. + */ + + // To avoid additional data structure, we abuse bcf1_t's var and var_type records. + const int SnpGap_set = VCF_OTHER<<1; + const int IndelGap_set = VCF_OTHER<<2; + const int IndelGap_flush = VCF_OTHER<<3; + + int var_type = 0, i; + if ( line ) + { + // Still on the same chromosome? + int ilast = rbuf_last(&args->rbuf); + if ( ilast>=0 && line->rid != args->rbuf_lines[ilast]->rid ) + flush_buffer(args, args->rbuf.n); // new chromosome, flush everything + + rbuf_expand0(&args->rbuf,bcf1_t*,args->rbuf.n,args->rbuf_lines); + + // Insert the new record in the buffer. The line would be overwritten in + // the next bcf_sr_next_line call, therefore we need to swap it with an + // unused one + ilast = rbuf_append(&args->rbuf); + if ( !args->rbuf_lines[ilast] ) args->rbuf_lines[ilast] = bcf_init1(); + SWAP(bcf1_t*, args->files->readers[0].buffer[0], args->rbuf_lines[ilast]); + + var_type = bcf_get_variant_types(line); + + // Find out the size of an indel. The indel boundaries are based on REF + // (POS+1,POS+rlen-1). This is not entirely correct: mpileup likes to + // output REF=CAGAGAGAGA, ALT=CAGAGAGAGAGA where REF=C,ALT=CGA could be + // used. This filter is therefore more strict and may remove some valid + // SNPs. + int len = 1; + if ( var_type & VCF_INDEL ) + { + for (i=1; in_allele; i++) + if ( len < 1-line->d.var[i].n ) len = 1-line->d.var[i].n; + } + + // Set the REF allele's length to max deletion length or to 1 if a SNP or an insertion. + line->d.var[0].n = len; + } + + int k_flush = 1; + if ( args->indel_gap ) + { + k_flush = 0; + // Find indels which are too close to each other + int last_to = -1; + for (i=-1; rbuf_next(&args->rbuf,&i); ) + { + bcf1_t *rec = args->rbuf_lines[i]; + int rec_from = rec->pos; + if ( last_to!=-1 && last_to < rec_from ) break; + + k_flush++; + if ( !(rec->d.var_type & VCF_INDEL) ) continue; + + rec->d.var_type |= IndelGap_set; + last_to = args->indel_gap + rec->pos + rec->d.var[0].n - 1; + } + if ( i==args->rbuf.f && line && last_to!=-1 ) k_flush = 0; + if ( k_flush || !line ) + { + // Select the best indel from the cluster of k_flush indels + int k = 0, max_ac = -1, imax_ac = -1; + for (i=-1; rbuf_next(&args->rbuf,&i) && krbuf_lines[i]; + if ( !(rec->d.var_type & IndelGap_set) ) continue; + hts_expand(int, rec->n_allele, args->ntmpi, args->tmpi); + int ret = bcf_calc_ac(args->hdr, rec, args->tmpi, BCF_UN_ALL); + if ( imax_ac==-1 || (ret && max_ac < args->tmpi[1]) ) { max_ac = args->tmpi[1]; imax_ac = i; } + } + + // Filter all but the best indel (with max AF or first if AF not available) + k = 0; + for (i=-1; rbuf_next(&args->rbuf,&i) && krbuf_lines[i]; + if ( !(rec->d.var_type & IndelGap_set) ) continue; + rec->d.var_type |= IndelGap_flush; + if ( i!=imax_ac ) bcf_add_filter(args->hdr, args->rbuf_lines[i], args->IndelGap_id); + } + } + } + + if ( !line ) + { + // Finished: flush everything + flush_buffer(args, args->rbuf.n); + return; + } + + int j_flush = 1; + if ( args->snp_gap ) + { + j_flush = 0; + int last_from = line->pos; + for (i=-1; rbuf_next(&args->rbuf,&i); ) + { + bcf1_t *rec = args->rbuf_lines[i]; + int rec_to = rec->pos + rec->d.var[0].n - 1; // last position affected by the variant + if ( rec_to + args->snp_gap < last_from ) + j_flush++; + else if ( (var_type & VCF_INDEL) && (rec->d.var_type & VCF_SNP) && !(rec->d.var_type & SnpGap_set) ) + { + // this SNP has not been SnpGap-filtered yet + rec->d.var_type |= SnpGap_set; + bcf_add_filter(args->hdr, rec, args->SnpGap_id); + } + else if ( (var_type & VCF_SNP) && (rec->d.var_type & VCF_INDEL) ) + { + // the line which we are adding is a SNP and needs to be filtered + line->d.var_type |= SnpGap_set; + bcf_add_filter(args->hdr, line, args->SnpGap_id); + break; + } + } + } + flush_buffer(args, j_flush < k_flush ? j_flush : k_flush); +} + +static void set_genotypes(args_t *args, bcf1_t *line, int pass_site) +{ + int i,j; + if ( !bcf_hdr_nsamples(args->hdr) ) return; + if ( args->smpl_pass ) + { + int npass = 0; + for (i=0; ihdr); i++) npass += args->smpl_pass[i]; + + // return if all samples pass + if ( npass==bcf_hdr_nsamples(args->hdr) && (args->filter_logic & FLT_INCLUDE) ) return; + if ( npass==0 && (args->filter_logic & FLT_EXCLUDE) ) return; + } + else if ( pass_site ) return; + + int an = 0, has_an = bcf_get_info_int32(args->hdr, line, "AN", &args->tmp_ac, &args->ntmp_ac); + if ( has_an==1 ) an = args->tmp_ac[0]; + else has_an = 0; + + int has_ac = bcf_get_info_int32(args->hdr, line, "AC", &args->tmp_ac, &args->ntmp_ac); + has_ac = has_ac==line->n_allele-1 ? 1 : 0; + + int new_gt = 0, ngts = bcf_get_format_int32(args->hdr, line, "GT", &args->tmpi, &args->ntmpi); + ngts /= bcf_hdr_nsamples(args->hdr); + if ( args->set_gts==SET_GTS_MISSING ) new_gt = bcf_gt_missing; + else if ( args->set_gts==SET_GTS_REF ) new_gt = bcf_gt_unphased(0); + else error("todo: set_gts=%d\n", args->set_gts); + for (i=0; ihdr); i++) + { + if ( args->smpl_pass ) + { + int pass = args->smpl_pass[i]; + if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1; + if ( pass ) continue; + } + int32_t *gts = args->tmpi + ngts*i; + for (j=0; jset_gts==SET_GTS_MISSING && !bcf_gt_is_missing(gts[j]) ) + { + int ial = bcf_gt_allele(gts[j]); + if ( has_ac && ial>0 && ial<=line->n_allele ) args->tmp_ac[ ial-1 ]--; + an--; + } + else if ( args->set_gts==SET_GTS_REF ) + { + int ial = bcf_gt_allele(gts[j]); + if ( bcf_gt_is_missing(gts[j]) ) an++; + else if ( has_ac && ial>0 && ial<=line->n_allele ) args->tmp_ac[ ial-1 ]--; + } + gts[j] = new_gt; + } + } + bcf_update_genotypes(args->hdr,line,args->tmpi,ngts*bcf_hdr_nsamples(args->hdr)); + if ( has_an ) bcf_update_info_int32(args->hdr,line,"AN",&an,1); + if ( has_ac ) bcf_update_info_int32(args->hdr,line,"AC",args->tmp_ac,line->n_allele-1); +} + +static void usage(args_t *args) +{ + fprintf(stderr, "\n"); + fprintf(stderr, "About: Apply fixed-threshold filters.\n"); + fprintf(stderr, "Usage: bcftools filter [options] \n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " -e, --exclude exclude sites for which the expression is true (see man page for details)\n"); + fprintf(stderr, " -g, --SnpGap filter SNPs within base pairs of an indel\n"); + fprintf(stderr, " -G, --IndelGap filter clusters of indels separated by or fewer base pairs allowing only one to pass\n"); + fprintf(stderr, " -i, --include include only sites for which the expression is true (see man page for details\n"); + fprintf(stderr, " -m, --mode [+x] \"+\": do not replace but add to existing FILTER; \"x\": reset filters at sites which pass\n"); + fprintf(stderr, " --no-version do not append version and command line to the header\n"); + fprintf(stderr, " -o, --output write output to a file [standard output]\n"); + fprintf(stderr, " -O, --output-type b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"); + fprintf(stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(stderr, " -s, --soft-filter annotate FILTER column with or unique filter name (\"Filter%%d\") made up by the program (\"+\")\n"); + fprintf(stderr, " -S, --set-GTs <.|0> set genotypes of failed samples to missing (.) or ref (0)\n"); + fprintf(stderr, " -t, --targets similar to -r but streams rather than index-jumps\n"); + fprintf(stderr, " -T, --targets-file similar to -R but streams rather than index-jumps\n"); + fprintf(stderr, " --threads number of extra output compression threads [0]\n"); + fprintf(stderr, "\n"); + exit(1); +} + +int main_vcffilter(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->files = bcf_sr_init(); + args->output_fname = "-"; + args->output_type = FT_VCF; + args->n_threads = 0; + args->record_cmd_line = 1; + int regions_is_file = 0, targets_is_file = 0; + + static struct option loptions[] = + { + {"set-GTs",required_argument,NULL,'S'}, + {"mode",required_argument,NULL,'m'}, + {"soft-filter",required_argument,NULL,'s'}, + {"exclude",required_argument,NULL,'e'}, + {"include",required_argument,NULL,'i'}, + {"targets",required_argument,NULL,'t'}, + {"targets-file",required_argument,NULL,'T'}, + {"regions",required_argument,NULL,'r'}, + {"regions-file",required_argument,NULL,'R'}, + {"output",required_argument,NULL,'o'}, + {"output-type",required_argument,NULL,'O'}, + {"threads",required_argument,NULL,9}, + {"SnpGap",required_argument,NULL,'g'}, + {"IndelGap",required_argument,NULL,'G'}, + {"no-version",no_argument,NULL,8}, + {NULL,0,NULL,0} + }; + char *tmp; + while ((c = getopt_long(argc, argv, "e:i:t:T:r:R:h?s:m:o:O:g:G:S:",loptions,NULL)) >= 0) { + switch (c) { + case 'g': + args->snp_gap = strtol(optarg,&tmp,10); + if ( *tmp ) error("Could not parse argument: --SnpGap %s\n", optarg); + break; + case 'G': + args->indel_gap = strtol(optarg,&tmp,10); + if ( *tmp ) error("Could not parse argument: --IndelGap %s\n", optarg); + break; + case 'o': args->output_fname = optarg; break; + case 'O': + switch (optarg[0]) { + case 'b': args->output_type = FT_BCF_GZ; break; + case 'u': args->output_type = FT_BCF; break; + case 'z': args->output_type = FT_VCF_GZ; break; + case 'v': args->output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + } + break; + case 's': args->soft_filter = optarg; break; + case 'm': + if ( strchr(optarg,'x') ) args->annot_mode |= ANNOT_RESET; + if ( strchr(optarg,'+') ) args->annot_mode |= ANNOT_ADD; + break; + case 't': args->targets_list = optarg; break; + case 'T': args->targets_list = optarg; targets_is_file = 1; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; regions_is_file = 1; break; + case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break; + case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break; + case 'S': + if ( !strcmp(".",optarg) ) args->set_gts = SET_GTS_MISSING; + else if ( !strcmp("0",optarg) ) args->set_gts = SET_GTS_REF; + else error("The argument to -S not recognised: %s\n", optarg); + break; + case 9 : args->n_threads = strtol(optarg, 0, 0); break; + case 8 : args->record_cmd_line = 0; break; + case 'h': + case '?': usage(args); + default: error("Unknown argument: %s\n", optarg); + } + } + + if ( args->filter_logic == (FLT_EXCLUDE|FLT_INCLUDE) ) error("Only one of -i or -e can be given.\n"); + char *fname = NULL; + if ( optind>=argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin + else usage(args); + } + else fname = argv[optind]; + + // read in the regions from the command line + if ( args->regions_list ) + { + args->files->require_index = 1; + if ( bcf_sr_set_regions(args->files, args->regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + } + else if ( optind+1 < argc ) + { + int i; + kstring_t tmp = {0,0,0}; + kputs(argv[optind+1],&tmp); + for (i=optind+2; ifiles->require_index = 1; + if ( bcf_sr_set_regions(args->files, tmp.s, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + free(tmp.s); + } + if ( args->targets_list ) + { + if ( bcf_sr_set_targets(args->files, args->targets_list,targets_is_file, 0)<0 ) + error("Failed to read the targets: %s\n", args->targets_list); + } + if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); + + init_data(args); + bcf_hdr_write(args->out_fh, args->hdr); + while ( bcf_sr_next_line(args->files) ) + { + bcf1_t *line = bcf_sr_get_line(args->files, 0); + int pass = 1; + if ( args->filter ) + { + pass = filter_test(args->filter, line, &args->smpl_pass); + if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1; + } + if ( args->soft_filter || args->set_gts || pass ) + { + if ( pass ) + { + bcf_unpack(line,BCF_UN_FLT); + if ( args->annot_mode & ANNOT_RESET || !line->d.n_flt ) bcf_add_filter(args->hdr, line, args->flt_pass); + } + else if ( args->soft_filter ) + { + if ( (args->annot_mode & ANNOT_ADD) ) bcf_add_filter(args->hdr, line, args->flt_fail); + else bcf_update_filter(args->hdr, line, &args->flt_fail, 1); + } + if ( args->set_gts ) set_genotypes(args, line, pass); + if ( !args->rbuf_lines ) + bcf_write1(args->out_fh, args->hdr, line); + else + buffered_filters(args, line); + } + } + buffered_filters(args, NULL); + + hts_close(args->out_fh); + destroy_data(args); + bcf_sr_destroy(args->files); + free(args); + return 0; +} diff --git a/bcftools/vcffilter.c.pysam.c b/bcftools/vcffilter.c.pysam.c new file mode 100644 index 0000000..f7d0a47 --- /dev/null +++ b/bcftools/vcffilter.c.pysam.c @@ -0,0 +1,575 @@ +#include "bcftools.pysam.h" + +/* vcffilter.c -- Apply fixed-threshold filters. + + Copyright (C) 2013-2014 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "filter.h" +#include "rbuf.h" + +// Logic of the filters: include or exclude sites which match the filters? +#define FLT_INCLUDE 1 +#define FLT_EXCLUDE 2 + +// FILTER columns annotation: replace or add to existing FILTERs; set FILTER to PASS at good sites? +#define ANNOT_ADD 1 +#define ANNOT_RESET 2 + +// Set genotypes of filtered samples +#define SET_GTS_MISSING 1 +#define SET_GTS_REF 2 + +typedef struct _args_t +{ + filter_t *filter; + char *filter_str; + int filter_logic; // include or exclude sites which match the filters? One of FLT_INCLUDE/FLT_EXCLUDE + const uint8_t *smpl_pass; + int set_gts; + char *soft_filter; // drop failed sites or annotate FILTER column? + int annot_mode; // add to existing FILTER annotation or replace? Otherwise reset FILTER to PASS or leave as it is? + int flt_fail, flt_pass; // BCF ids of fail and pass filters + int snp_gap, indel_gap, IndelGap_id, SnpGap_id; + int32_t ntmpi, *tmpi, ntmp_ac, *tmp_ac; + rbuf_t rbuf; + bcf1_t **rbuf_lines; + + bcf_srs_t *files; + bcf_hdr_t *hdr; + htsFile *out_fh; + int output_type, n_threads; + + char **argv, *output_fname, *targets_list, *regions_list; + int argc, record_cmd_line; +} +args_t; + +static void init_data(args_t *args) +{ + args->out_fh = hts_open(args->output_fname,hts_bcf_wmode(args->output_type)); + if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno)); + if ( args->n_threads ) hts_set_threads(args->out_fh, args->n_threads); + + args->hdr = args->files->readers[0].header; + args->flt_pass = bcf_hdr_id2int(args->hdr,BCF_DT_ID,"PASS"); assert( !args->flt_pass ); // sanity check: required by BCF spec + + // -i or -e: append FILTER line + if ( args->soft_filter && args->filter_logic ) + { + kstring_t flt_name = {0,0,0}; + if ( strcmp(args->soft_filter,"+") ) + kputs(args->soft_filter, &flt_name); + else + { + // Make up a filter name + int i = 0, id = -1; + do + { + ksprintf(&flt_name,"Filter%d", ++i); + id = bcf_hdr_id2int(args->hdr,BCF_DT_ID,flt_name.s); + } + while ( bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FLT,id) ); + } + // escape quotes + kstring_t tmp = {0,0,0}; + char *t = args->filter_str; + while ( *t ) + { + if ( *t=='"' ) kputc('\\',&tmp); + kputc(*t,&tmp); + t++; + } + int ret = bcf_hdr_printf(args->hdr, "##FILTER=", flt_name.s,args->filter_logic & FLT_INCLUDE ? "not true" : "true", tmp.s); + if ( ret!=0 ) + error("Failed to append header line: ##FILTER=\n", flt_name.s,args->filter_logic & FLT_INCLUDE ? "not true" : "true", tmp.s); + args->flt_fail = bcf_hdr_id2int(args->hdr,BCF_DT_ID,flt_name.s); assert( args->flt_fail>=0 ); + free(flt_name.s); + free(tmp.s); + } + + if ( args->snp_gap || args->indel_gap ) + { + if ( !args->filter_logic && args->soft_filter && strcmp(args->soft_filter,"+") ) + { + kstring_t tmp = {0,0,0}; + if ( args->snp_gap ) kputs("\"SnpGap\"", &tmp); + if ( args->indel_gap ) + { + if ( tmp.s ) kputs(" and ", &tmp); + kputs("\"IndelGap\"", &tmp); + } + if ( strncmp(tmp.s+1,args->soft_filter,tmp.l-2) ) + fprintf(bcftools_stderr,"Warning: using %s filter name instead of \"%s\"\n", tmp.s,args->soft_filter); + free(tmp.s); + } + + rbuf_init(&args->rbuf, 64); + args->rbuf_lines = (bcf1_t**) calloc(args->rbuf.m, sizeof(bcf1_t*)); + if ( args->snp_gap ) + { + bcf_hdr_printf(args->hdr, "##FILTER=", args->snp_gap); + args->SnpGap_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, "SnpGap"); + assert( args->SnpGap_id>=0 ); + } + if ( args->indel_gap ) + { + bcf_hdr_printf(args->hdr, "##FILTER=", args->indel_gap); + args->IndelGap_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, "IndelGap"); + assert( args->IndelGap_id>=0 ); + } + } + + if (args->record_cmd_line) bcf_hdr_append_version(args->hdr, args->argc, args->argv, "bcftools_filter"); + + if ( args->filter_str ) + args->filter = filter_init(args->hdr, args->filter_str); +} + +static void destroy_data(args_t *args) +{ + if ( args->rbuf_lines ) + { + int i; + for (i=0; irbuf.m; i++) + if ( args->rbuf_lines[i] ) bcf_destroy1(args->rbuf_lines[i]); + free(args->rbuf_lines); + } + if ( args->filter ) + filter_destroy(args->filter); + free(args->tmpi); + free(args->tmp_ac); +} + +static void flush_buffer(args_t *args, int n) +{ + int i, j; + for (i=0; irbuf); + bcf1_t *rec = args->rbuf_lines[k]; + + int pass = 1; + if ( !args->soft_filter ) + { + for (j=0; jd.n_flt; j++) + { + if ( args->indel_gap && rec->d.flt[j]==args->IndelGap_id ) { pass = 0; break; } + if ( args->snp_gap && rec->d.flt[j]==args->SnpGap_id ) { pass = 0; break; } + } + } + if ( pass ) bcf_write1(args->out_fh, args->hdr, rec); + } +} + +#define SWAP(type_t, a, b) { type_t t = a; a = b; b = t; } +static void buffered_filters(args_t *args, bcf1_t *line) +{ + /** + * The logic of SnpGap=3. The SNPs at positions 1 and 7 are filtered, + * positions 0 and 8 are not: + * 0123456789 + * ref .G.GT..G.. + * del .A.G-..A.. + * Here the positions 1 and 6 are filtered, 0 and 7 are not: + * 0123-456789 + * ref .G.G-..G.. + * ins .A.GT..A.. + * + * The logic of IndelGap=2. The second indel is filtered: + * 012345678901 + * ref .GT.GT..GT.. + * del .G-.G-..G-.. + * And similarly here, the second is filtered: + * 01 23 456 78 + * ref .A-.A-..A-.. + * ins .AT.AT..AT.. + */ + + // To avoid additional data structure, we abuse bcf1_t's var and var_type records. + const int SnpGap_set = VCF_OTHER<<1; + const int IndelGap_set = VCF_OTHER<<2; + const int IndelGap_flush = VCF_OTHER<<3; + + int var_type = 0, i; + if ( line ) + { + // Still on the same chromosome? + int ilast = rbuf_last(&args->rbuf); + if ( ilast>=0 && line->rid != args->rbuf_lines[ilast]->rid ) + flush_buffer(args, args->rbuf.n); // new chromosome, flush everything + + rbuf_expand0(&args->rbuf,bcf1_t*,args->rbuf.n,args->rbuf_lines); + + // Insert the new record in the buffer. The line would be overwritten in + // the next bcf_sr_next_line call, therefore we need to swap it with an + // unused one + ilast = rbuf_append(&args->rbuf); + if ( !args->rbuf_lines[ilast] ) args->rbuf_lines[ilast] = bcf_init1(); + SWAP(bcf1_t*, args->files->readers[0].buffer[0], args->rbuf_lines[ilast]); + + var_type = bcf_get_variant_types(line); + + // Find out the size of an indel. The indel boundaries are based on REF + // (POS+1,POS+rlen-1). This is not entirely correct: mpileup likes to + // output REF=CAGAGAGAGA, ALT=CAGAGAGAGAGA where REF=C,ALT=CGA could be + // used. This filter is therefore more strict and may remove some valid + // SNPs. + int len = 1; + if ( var_type & VCF_INDEL ) + { + for (i=1; in_allele; i++) + if ( len < 1-line->d.var[i].n ) len = 1-line->d.var[i].n; + } + + // Set the REF allele's length to max deletion length or to 1 if a SNP or an insertion. + line->d.var[0].n = len; + } + + int k_flush = 1; + if ( args->indel_gap ) + { + k_flush = 0; + // Find indels which are too close to each other + int last_to = -1; + for (i=-1; rbuf_next(&args->rbuf,&i); ) + { + bcf1_t *rec = args->rbuf_lines[i]; + int rec_from = rec->pos; + if ( last_to!=-1 && last_to < rec_from ) break; + + k_flush++; + if ( !(rec->d.var_type & VCF_INDEL) ) continue; + + rec->d.var_type |= IndelGap_set; + last_to = args->indel_gap + rec->pos + rec->d.var[0].n - 1; + } + if ( i==args->rbuf.f && line && last_to!=-1 ) k_flush = 0; + if ( k_flush || !line ) + { + // Select the best indel from the cluster of k_flush indels + int k = 0, max_ac = -1, imax_ac = -1; + for (i=-1; rbuf_next(&args->rbuf,&i) && krbuf_lines[i]; + if ( !(rec->d.var_type & IndelGap_set) ) continue; + hts_expand(int, rec->n_allele, args->ntmpi, args->tmpi); + int ret = bcf_calc_ac(args->hdr, rec, args->tmpi, BCF_UN_ALL); + if ( imax_ac==-1 || (ret && max_ac < args->tmpi[1]) ) { max_ac = args->tmpi[1]; imax_ac = i; } + } + + // Filter all but the best indel (with max AF or first if AF not available) + k = 0; + for (i=-1; rbuf_next(&args->rbuf,&i) && krbuf_lines[i]; + if ( !(rec->d.var_type & IndelGap_set) ) continue; + rec->d.var_type |= IndelGap_flush; + if ( i!=imax_ac ) bcf_add_filter(args->hdr, args->rbuf_lines[i], args->IndelGap_id); + } + } + } + + if ( !line ) + { + // Finished: flush everything + flush_buffer(args, args->rbuf.n); + return; + } + + int j_flush = 1; + if ( args->snp_gap ) + { + j_flush = 0; + int last_from = line->pos; + for (i=-1; rbuf_next(&args->rbuf,&i); ) + { + bcf1_t *rec = args->rbuf_lines[i]; + int rec_to = rec->pos + rec->d.var[0].n - 1; // last position affected by the variant + if ( rec_to + args->snp_gap < last_from ) + j_flush++; + else if ( (var_type & VCF_INDEL) && (rec->d.var_type & VCF_SNP) && !(rec->d.var_type & SnpGap_set) ) + { + // this SNP has not been SnpGap-filtered yet + rec->d.var_type |= SnpGap_set; + bcf_add_filter(args->hdr, rec, args->SnpGap_id); + } + else if ( (var_type & VCF_SNP) && (rec->d.var_type & VCF_INDEL) ) + { + // the line which we are adding is a SNP and needs to be filtered + line->d.var_type |= SnpGap_set; + bcf_add_filter(args->hdr, line, args->SnpGap_id); + break; + } + } + } + flush_buffer(args, j_flush < k_flush ? j_flush : k_flush); +} + +static void set_genotypes(args_t *args, bcf1_t *line, int pass_site) +{ + int i,j; + if ( !bcf_hdr_nsamples(args->hdr) ) return; + if ( args->smpl_pass ) + { + int npass = 0; + for (i=0; ihdr); i++) npass += args->smpl_pass[i]; + + // return if all samples pass + if ( npass==bcf_hdr_nsamples(args->hdr) && (args->filter_logic & FLT_INCLUDE) ) return; + if ( npass==0 && (args->filter_logic & FLT_EXCLUDE) ) return; + } + else if ( pass_site ) return; + + int an = 0, has_an = bcf_get_info_int32(args->hdr, line, "AN", &args->tmp_ac, &args->ntmp_ac); + if ( has_an==1 ) an = args->tmp_ac[0]; + else has_an = 0; + + int has_ac = bcf_get_info_int32(args->hdr, line, "AC", &args->tmp_ac, &args->ntmp_ac); + has_ac = has_ac==line->n_allele-1 ? 1 : 0; + + int new_gt = 0, ngts = bcf_get_format_int32(args->hdr, line, "GT", &args->tmpi, &args->ntmpi); + ngts /= bcf_hdr_nsamples(args->hdr); + if ( args->set_gts==SET_GTS_MISSING ) new_gt = bcf_gt_missing; + else if ( args->set_gts==SET_GTS_REF ) new_gt = bcf_gt_unphased(0); + else error("todo: set_gts=%d\n", args->set_gts); + for (i=0; ihdr); i++) + { + if ( args->smpl_pass ) + { + int pass = args->smpl_pass[i]; + if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1; + if ( pass ) continue; + } + int32_t *gts = args->tmpi + ngts*i; + for (j=0; jset_gts==SET_GTS_MISSING && !bcf_gt_is_missing(gts[j]) ) + { + int ial = bcf_gt_allele(gts[j]); + if ( has_ac && ial>0 && ial<=line->n_allele ) args->tmp_ac[ ial-1 ]--; + an--; + } + else if ( args->set_gts==SET_GTS_REF ) + { + int ial = bcf_gt_allele(gts[j]); + if ( bcf_gt_is_missing(gts[j]) ) an++; + else if ( has_ac && ial>0 && ial<=line->n_allele ) args->tmp_ac[ ial-1 ]--; + } + gts[j] = new_gt; + } + } + bcf_update_genotypes(args->hdr,line,args->tmpi,ngts*bcf_hdr_nsamples(args->hdr)); + if ( has_an ) bcf_update_info_int32(args->hdr,line,"AN",&an,1); + if ( has_ac ) bcf_update_info_int32(args->hdr,line,"AC",args->tmp_ac,line->n_allele-1); +} + +static void usage(args_t *args) +{ + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "About: Apply fixed-threshold filters.\n"); + fprintf(bcftools_stderr, "Usage: bcftools filter [options] \n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Options:\n"); + fprintf(bcftools_stderr, " -e, --exclude exclude sites for which the expression is true (see man page for details)\n"); + fprintf(bcftools_stderr, " -g, --SnpGap filter SNPs within base pairs of an indel\n"); + fprintf(bcftools_stderr, " -G, --IndelGap filter clusters of indels separated by or fewer base pairs allowing only one to pass\n"); + fprintf(bcftools_stderr, " -i, --include include only sites for which the expression is true (see man page for details\n"); + fprintf(bcftools_stderr, " -m, --mode [+x] \"+\": do not replace but add to existing FILTER; \"x\": reset filters at sites which pass\n"); + fprintf(bcftools_stderr, " --no-version do not append version and command line to the header\n"); + fprintf(bcftools_stderr, " -o, --output write output to a file [standard output]\n"); + fprintf(bcftools_stderr, " -O, --output-type b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"); + fprintf(bcftools_stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(bcftools_stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(bcftools_stderr, " -s, --soft-filter annotate FILTER column with or unique filter name (\"Filter%%d\") made up by the program (\"+\")\n"); + fprintf(bcftools_stderr, " -S, --set-GTs <.|0> set genotypes of failed samples to missing (.) or ref (0)\n"); + fprintf(bcftools_stderr, " -t, --targets similar to -r but streams rather than index-jumps\n"); + fprintf(bcftools_stderr, " -T, --targets-file similar to -R but streams rather than index-jumps\n"); + fprintf(bcftools_stderr, " --threads number of extra output compression threads [0]\n"); + fprintf(bcftools_stderr, "\n"); + exit(1); +} + +int main_vcffilter(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->files = bcf_sr_init(); + args->output_fname = "-"; + args->output_type = FT_VCF; + args->n_threads = 0; + args->record_cmd_line = 1; + int regions_is_file = 0, targets_is_file = 0; + + static struct option loptions[] = + { + {"set-GTs",required_argument,NULL,'S'}, + {"mode",required_argument,NULL,'m'}, + {"soft-filter",required_argument,NULL,'s'}, + {"exclude",required_argument,NULL,'e'}, + {"include",required_argument,NULL,'i'}, + {"targets",required_argument,NULL,'t'}, + {"targets-file",required_argument,NULL,'T'}, + {"regions",required_argument,NULL,'r'}, + {"regions-file",required_argument,NULL,'R'}, + {"output",required_argument,NULL,'o'}, + {"output-type",required_argument,NULL,'O'}, + {"threads",required_argument,NULL,9}, + {"SnpGap",required_argument,NULL,'g'}, + {"IndelGap",required_argument,NULL,'G'}, + {"no-version",no_argument,NULL,8}, + {NULL,0,NULL,0} + }; + char *tmp; + while ((c = getopt_long(argc, argv, "e:i:t:T:r:R:h?s:m:o:O:g:G:S:",loptions,NULL)) >= 0) { + switch (c) { + case 'g': + args->snp_gap = strtol(optarg,&tmp,10); + if ( *tmp ) error("Could not parse argument: --SnpGap %s\n", optarg); + break; + case 'G': + args->indel_gap = strtol(optarg,&tmp,10); + if ( *tmp ) error("Could not parse argument: --IndelGap %s\n", optarg); + break; + case 'o': args->output_fname = optarg; break; + case 'O': + switch (optarg[0]) { + case 'b': args->output_type = FT_BCF_GZ; break; + case 'u': args->output_type = FT_BCF; break; + case 'z': args->output_type = FT_VCF_GZ; break; + case 'v': args->output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + } + break; + case 's': args->soft_filter = optarg; break; + case 'm': + if ( strchr(optarg,'x') ) args->annot_mode |= ANNOT_RESET; + if ( strchr(optarg,'+') ) args->annot_mode |= ANNOT_ADD; + break; + case 't': args->targets_list = optarg; break; + case 'T': args->targets_list = optarg; targets_is_file = 1; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; regions_is_file = 1; break; + case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break; + case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break; + case 'S': + if ( !strcmp(".",optarg) ) args->set_gts = SET_GTS_MISSING; + else if ( !strcmp("0",optarg) ) args->set_gts = SET_GTS_REF; + else error("The argument to -S not recognised: %s\n", optarg); + break; + case 9 : args->n_threads = strtol(optarg, 0, 0); break; + case 8 : args->record_cmd_line = 0; break; + case 'h': + case '?': usage(args); + default: error("Unknown argument: %s\n", optarg); + } + } + + if ( args->filter_logic == (FLT_EXCLUDE|FLT_INCLUDE) ) error("Only one of -i or -e can be given.\n"); + char *fname = NULL; + if ( optind>=argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin + else usage(args); + } + else fname = argv[optind]; + + // read in the regions from the command line + if ( args->regions_list ) + { + args->files->require_index = 1; + if ( bcf_sr_set_regions(args->files, args->regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + } + else if ( optind+1 < argc ) + { + int i; + kstring_t tmp = {0,0,0}; + kputs(argv[optind+1],&tmp); + for (i=optind+2; ifiles->require_index = 1; + if ( bcf_sr_set_regions(args->files, tmp.s, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + free(tmp.s); + } + if ( args->targets_list ) + { + if ( bcf_sr_set_targets(args->files, args->targets_list,targets_is_file, 0)<0 ) + error("Failed to read the targets: %s\n", args->targets_list); + } + if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); + + init_data(args); + bcf_hdr_write(args->out_fh, args->hdr); + while ( bcf_sr_next_line(args->files) ) + { + bcf1_t *line = bcf_sr_get_line(args->files, 0); + int pass = 1; + if ( args->filter ) + { + pass = filter_test(args->filter, line, &args->smpl_pass); + if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1; + } + if ( args->soft_filter || args->set_gts || pass ) + { + if ( pass ) + { + bcf_unpack(line,BCF_UN_FLT); + if ( args->annot_mode & ANNOT_RESET || !line->d.n_flt ) bcf_add_filter(args->hdr, line, args->flt_pass); + } + else if ( args->soft_filter ) + { + if ( (args->annot_mode & ANNOT_ADD) ) bcf_add_filter(args->hdr, line, args->flt_fail); + else bcf_update_filter(args->hdr, line, &args->flt_fail, 1); + } + if ( args->set_gts ) set_genotypes(args, line, pass); + if ( !args->rbuf_lines ) + bcf_write1(args->out_fh, args->hdr, line); + else + buffered_filters(args, line); + } + } + buffered_filters(args, NULL); + + hts_close(args->out_fh); + destroy_data(args); + bcf_sr_destroy(args->files); + free(args); + return 0; +} diff --git a/bcftools/vcfgtcheck.c b/bcftools/vcfgtcheck.c new file mode 100644 index 0000000..8835db3 --- /dev/null +++ b/bcftools/vcfgtcheck.c @@ -0,0 +1,822 @@ +/* vcfgtcheck.c -- Check sample identity. + + Copyright (C) 2013-2014 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "hclust.h" + +typedef struct +{ + bcf_srs_t *files; // first reader is the query VCF - single sample normally or multi-sample for cross-check + bcf_hdr_t *gt_hdr, *sm_hdr; // VCF with genotypes to compare against and the query VCF + int ntmp_arr, npl_arr; + int32_t *tmp_arr, *pl_arr; + double *lks, *sites, min_inter_err, max_intra_err; + int *cnts, *dps, hom_only, cross_check, all_sites; + char *cwd, **argv, *gt_fname, *plot, *query_sample, *target_sample; + int argc, no_PLs, narr, nsmpl; +} +args_t; + +FILE *open_file(char **fname, const char *mode, const char *fmt, ...); +char *msprintf(const char *fmt, ...); +void mkdir_p(const char *fmt, ...); + +void py_plot(char *script) +{ + mkdir_p(script); + int len = strlen(script); + char *cmd = !strcmp(".py",script+len-3) ? msprintf("python %s", script) : msprintf("python %s.py", script); + int ret = system(cmd); + if ( ret ) fprintf(stderr, "The command returned non-zero status %d: %s\n", ret, cmd); + free(cmd); +} + +static void plot_check(args_t *args, char *target_sample, char *query_sample) +{ + char *fname; + FILE *fp = open_file(&fname, "w", "%s.py", args->plot); + fprintf(fp, + "import matplotlib as mpl\n" + "mpl.use('Agg')\n" + "import matplotlib.pyplot as plt\n" + "import matplotlib.gridspec as gridspec\n" + "import csv\n" + "csv.register_dialect('tab', delimiter='\\t', quoting=csv.QUOTE_NONE)\n" + "\n" + "sample_ids = False\n" + "\n" + "dat = []\n" + "with open('%s.tab', 'rb') as f:\n" + " reader = csv.reader(f, 'tab')\n" + " for row in reader:\n" + " if row[0][0]=='#': continue\n" + " if row[0]!='CN': continue\n" + " tgt = 0\n" + " if row[4]=='%s': tgt = 1\n" + " dat.append([float(row[1]), float(row[2]), float(row[3]), tgt, row[4]])\n" + "\n" + "dat = sorted(dat)\n" + "\n" + "iq = -1; dp = 0\n" + "for i in range(len(dat)):\n" + " if iq==-1 and dat[i][3]==1: iq = i\n" + " dp += dat[i][2]\n" + "dp /= len(dat)\n" + "\n" + "fig,ax1 = plt.subplots(figsize=(8,5))\n" + "ax2 = ax1.twinx()\n" + "plots = ax1.plot([x[0] for x in dat],'o-', ms=3, color='g', mec='g', label='Discordance (total)')\n" + "plots += ax1.plot([x[1] for x in dat], '^', ms=3, color='r', mec='r', label='Discordance (avg per site)')\n" + "plots += ax2.plot([x[2] for x in dat],'v', ms=3, color='k', label='Number of sites')\n" + "if iq!=-1:\n" + " ax1.plot([iq],[dat[iq][0]],'o',color='orange', ms=9)\n" + " ax1.annotate('%s',xy=(iq,dat[iq][0]), xytext=(5,5), textcoords='offset points',fontsize='xx-small',rotation=45,va='bottom',ha='left')\n" + " ax1.plot([iq],[dat[iq][1]],'^',color='red', ms=5)\n" + "for tl in ax1.get_yticklabels(): tl.set_color('g')\n" + "for tl in ax2.get_yticklabels(): tl.set_color('k'); tl.set_fontsize(9)\n" + "min_dp = min([x[2] for x in dat])\n" + "max_dp = max([x[2] for x in dat])\n" + "ax2.set_ylim(min_dp-1,max_dp+1)\n" + "ax1.set_title('Discordance with %s')\n" + "ax1.set_xlim(-0.05*len(dat),1.05*(len(dat)-1))\n" + "ax1.set_xlabel('Sample ID')\n" + "plt.subplots_adjust(left=0.1,right=0.9,bottom=0.1,top=0.9)\n" + "if sample_ids:\n" + " ax1.set_xticks(range(len(dat)))\n" + " ax1.set_xticklabels([x[4] for x in dat],**{'rotation':45, 'ha':'right', 'fontsize':8})\n" + " plt.subplots_adjust(bottom=0.2)\n" + "ax1.set_ylabel('Discordance',color='g')\n" + "ax2.set_ylabel('Number of sites',color='k')\n" + "ax2.ticklabel_format(style='sci', scilimits=(-3,2), axis='y')\n" + "ax1.ticklabel_format(style='sci', scilimits=(-3,2), axis='y')\n" + "labels = [l.get_label() for l in plots]\n" + "plt.legend(plots,labels,numpoints=1,markerscale=1,loc='best',prop={'size':10},frameon=False)\n" + "plt.savefig('%s.png')\n" + "plt.close()\n" + "\n", args->plot, target_sample, target_sample, query_sample, args->plot + ); + fclose(fp); + py_plot(fname); + free(fname); +} + +#if 0 +static void plot_cross_check(args_t *args) +{ + char *fname; + FILE *fp = open_file(&fname, "w", "%s.py", args->plot); + fprintf(fp, + "import matplotlib as mpl\n" + "mpl.use('Agg')\n" + "import matplotlib.pyplot as plt\n" + "import matplotlib.gridspec as gridspec\n" + "import csv\n" + "csv.register_dialect('tab', delimiter='\\t', quoting=csv.QUOTE_NONE)\n" + "avg = []\n" + "dp = []\n" + "sm2id = {}\n" + "dat = None\n" + "min = None\n" + "max = None\n" + "with open('%s.tab', 'rb') as f:\n" + " reader = csv.reader(f, 'tab')\n" + " i = 0\n" + " for row in reader:\n" + " if row[0]=='SM':\n" + " sm2id[row[4]] = i\n" + " avg.append([i,float(row[1])])\n" + " dp.append([i,float(row[2])])\n" + " i += 1\n" + " elif row[0]=='CN':\n" + " val = 0\n" + " if int(row[2])!=0: val = float(row[1])/int(row[2])\n" + " if not dat:\n" + " dat = [[0]*len(sm2id) for x in xrange(len(sm2id))]\n" + " min = val\n" + " max = val\n" + " id_i = sm2id[row[4]]\n" + " id_j = sm2id[row[5]]\n" + " dat[id_i][id_j] = val\n" + " dat[id_j][id_i] = val\n" + " if min > val: min = val\n" + " if max < val: max = val\n" + "\n" + "if len(sm2id)<=1: exit(1)\n" + "if min==max: exit(1)\n" + "\n" + "fig = plt.figure(figsize=(6,7))\n" + "gs = gridspec.GridSpec(2, 1, height_ratios=[1, 1.5])\n" + "ax1 = plt.subplot(gs[0])\n" + "ax2 = plt.subplot(gs[1])\n" + "\n" + "ax1.plot([x[0] for x in avg],[x[1] for x in avg],'^-', ms=3, color='k')\n" + "ax3 = ax1.twinx()\n" + "ax3.plot([x[0] for x in dp],[x[1] for x in dp],'^-', ms=3, color='r',mec='r')\n" + "for tl in ax3.get_yticklabels():\n" + " tl.set_color('r')\n" + " tl.set_fontsize(9)\n" + "\n" + "im = ax2.imshow(dat,clim=(min),interpolation='nearest',origin='lower')\n" + "cb1 = plt.colorbar(im,ax=ax2)\n" + "cb1.set_label('Pairwise discordance')\n" + "for t in cb1.ax.get_yticklabels(): t.set_fontsize(9)\n" + "\n" + "ax1.tick_params(axis='both', which='major', labelsize=9)\n" + "ax1.tick_params(axis='both', which='minor', labelsize=9)\n" + "ax2.tick_params(axis='both', which='major', labelsize=9)\n" + "ax2.tick_params(axis='both', which='minor', labelsize=9)\n" + "\n" + "ax1.set_title('Sample Discordance Score')\n" + "ax2.set_ylabel('Sample ID')\n" + "ax2.set_xlabel('Sample ID')\n" + "ax3.set_ylabel('Average Depth',color='r')\n" + "ax1.set_xlabel('Sample ID')\n" + "ax1.set_ylabel('Average discordance')\n" + "\n" + "plt.subplots_adjust(left=0.15,right=0.87,bottom=0.08,top=0.93,hspace=0.25)\n" + "plt.savefig('%s.png')\n" + "plt.close()\n" + "\n", args->plot,args->plot + ); + fclose(fp); + py_plot(fname); + free(fname); +} +#endif + +static void init_data(args_t *args) +{ + args->sm_hdr = args->files->readers[0].header; + if ( !bcf_hdr_nsamples(args->sm_hdr) ) error("No samples in %s?\n", args->files->readers[0].fname); + + if ( !args->cross_check ) + { + args->gt_hdr = args->files->readers[1].header; + int nsamples = bcf_hdr_nsamples(args->gt_hdr); + if ( !nsamples ) error("No samples in %s?\n", args->files->readers[1].fname); + args->lks = (double*) calloc(nsamples,sizeof(double)); + args->cnts = (int*) calloc(nsamples,sizeof(int)); + args->sites = (double*) calloc(nsamples,sizeof(double)); + args->dps = (int*) calloc(nsamples,sizeof(int)); + } +} + +static void destroy_data(args_t *args) +{ + free(args->lks); free(args->cnts); free(args->dps); free(args->cwd); free(args->sites); +} + +static int allele_to_int(bcf1_t *line, char *allele) +{ + int i; + for (i=0; in_allele; i++) + if ( !strcmp(allele,line->d.allele[i]) ) return i; + if ( strcmp(line->d.allele[i-1],"X") ) return -1; + return i-1; +} + +static int init_gt2ipl(args_t *args, bcf1_t *gt_line, bcf1_t *sm_line, int *gt2ipl, int n_gt2ipl) +{ + int i, j; + for (i=0; in_allele; i++) + { + // find which of the sm_alleles (k) corresponds to the gt_allele (i) + int k = allele_to_int(sm_line, gt_line->d.allele[i]); + if ( k<0 ) return 0; + for (j=0; j<=i; j++) + { + int l = allele_to_int(sm_line, gt_line->d.allele[j]); + if ( l<0 ) return 0; + gt2ipl[ bcf_ij2G(j,i) ] = k<=l ? bcf_ij2G(k,l) : bcf_ij2G(l,k); + } + } + //for (i=0; icwd = (char*) malloc(sizeof(char)*nbuf); + for (i=0; i<5; i++) + { + if ( (buf = getcwd(args->cwd, nbuf)) ) break; + nbuf *= 2; + args->cwd = (char*) realloc(args->cwd, sizeof(char)*nbuf); + } + assert(buf); +} + +static void print_header(args_t *args, FILE *fp) +{ + fprintf(fp, "# This file was produced by bcftools (%s+htslib-%s), the command line was:\n", bcftools_version(), hts_version()); + fprintf(fp, "# \t bcftools %s ", args->argv[0]); + int i; + for (i=1; iargc; i++) + fprintf(fp, " %s",args->argv[i]); + fprintf(fp, "\n# and the working directory was:\n"); + fprintf(fp, "# \t %s\n#\n", args->cwd); +} + +static int fake_PLs(args_t *args, bcf_hdr_t *hdr, bcf1_t *line) +{ + // PLs not present, use GTs instead. + int fake_PL = args->no_PLs ? args->no_PLs : 99; // with 1, discordance is the number of non-matching GTs + int nsm_gt, i; + if ( (nsm_gt=bcf_get_genotypes(hdr, line, &args->tmp_arr, &args->ntmp_arr)) <= 0 ) + error("GT not present at %s:%d?\n", hdr->id[BCF_DT_CTG][line->rid].key, line->pos+1); + nsm_gt /= bcf_hdr_nsamples(hdr); + int npl = line->n_allele*(line->n_allele+1)/2; + hts_expand(int,npl*bcf_hdr_nsamples(hdr),args->npl_arr,args->pl_arr); + for (i=0; itmp_arr + i*nsm_gt; + int j, *pl_ptr = args->pl_arr + i*npl; + if ( bcf_gt_is_missing(gt_ptr[0]) || bcf_gt_is_missing(gt_ptr[1]) ) // missing genotype + { + for (j=0; jno_PLs; + + // Initialize things: check which tags are defined in the header, sample names etc. + if ( bcf_hdr_id2int(args->gt_hdr, BCF_DT_ID, "GT")<0 ) error("[E::%s] GT not present in the header of %s?\n", __func__, args->files->readers[1].fname); + if ( bcf_hdr_id2int(args->sm_hdr, BCF_DT_ID, "PL")<0 ) + { + if ( bcf_hdr_id2int(args->sm_hdr, BCF_DT_ID, "GT")<0 ) + error("[E::%s] Neither PL nor GT present in the header of %s\n", __func__, args->files->readers[0].fname); + if ( !args->no_PLs ) + fprintf(stderr,"Warning: PL not present in the header of %s, using GT instead\n", args->files->readers[0].fname); + fake_pls = 1; + } + + FILE *fp = args->plot ? open_file(NULL, "w", "%s.tab", args->plot) : stdout; + print_header(args, fp); + + int tgt_isample = -1, query_isample = 0; + if ( args->target_sample ) + { + tgt_isample = bcf_hdr_id2int(args->gt_hdr, BCF_DT_SAMPLE, args->target_sample); + if ( tgt_isample<0 ) error("No such sample in %s: [%s]\n", args->files->readers[1].fname, args->target_sample); + } + if ( args->all_sites ) + { + if ( tgt_isample==-1 ) + { + fprintf(stderr,"No target sample selected for comparison, using the first sample in %s: %s\n", args->gt_fname,args->gt_hdr->samples[0]); + tgt_isample = 0; + } + } + if ( args->query_sample ) + { + query_isample = bcf_hdr_id2int(args->sm_hdr, BCF_DT_SAMPLE, args->query_sample); + if ( query_isample<0 ) error("No such sample in %s: [%s]\n", args->files->readers[0].fname, args->query_sample); + } + if ( args->all_sites ) + fprintf(fp, "# [1]SC, Site by Site Comparison\t[2]Chromosome\t[3]Position\t[4]-g alleles\t[5]-g GT (%s)\t[6]match log LK\t[7]Query alleles\t[8-]Query PLs (%s)\n", + args->gt_hdr->samples[tgt_isample],args->sm_hdr->samples[query_isample]); + + // Main loop + float prev_lk = 0; + while ( (ret=bcf_sr_next_line(args->files)) ) + { + if ( ret!=2 ) continue; + bcf1_t *sm_line = args->files->readers[0].buffer[0]; // the query file + bcf1_t *gt_line = args->files->readers[1].buffer[0]; // the -g target file + bcf_unpack(sm_line, BCF_UN_FMT); + bcf_unpack(gt_line, BCF_UN_FMT); + + // Init mapping from target genotype index to the sample's PL fields + int n_gt2ipl = gt_line->n_allele*(gt_line->n_allele + 1)/2; + if ( n_gt2ipl > m_gt2ipl ) + { + m_gt2ipl = n_gt2ipl; + gt2ipl = (int*) realloc(gt2ipl, sizeof(int)*m_gt2ipl); + } + if ( !init_gt2ipl(args, gt_line, sm_line, gt2ipl, n_gt2ipl) ) continue; + + // Target genotypes + int ngt, npl; + if ( (ngt=bcf_get_genotypes(args->gt_hdr, gt_line, >_arr, &ngt_arr)) <= 0 ) + error("GT not present at %s:%d?", args->gt_hdr->id[BCF_DT_CTG][gt_line->rid].key, gt_line->pos+1); + ngt /= bcf_hdr_nsamples(args->gt_hdr); + if ( ngt!=2 ) continue; // checking only diploid genotypes + + // Sample PLs + if ( !fake_pls ) + { + if ( (npl=bcf_get_format_int32(args->sm_hdr, sm_line, "PL", &args->pl_arr, &args->npl_arr)) <= 0 ) + { + if ( sm_line->n_allele==1 ) + { + // PL values may not be present when ALT=. (mpileup/bcftools output), in that case + // switch automatically to GT at these sites + npl = fake_PLs(args, args->sm_hdr, sm_line); + } + else + error("PL not present at %s:%d?\n", args->sm_hdr->id[BCF_DT_CTG][sm_line->rid].key, sm_line->pos+1); + } + else + npl /= bcf_hdr_nsamples(args->sm_hdr); + } + else + npl = fake_PLs(args, args->sm_hdr, sm_line); + + // Calculate likelihoods for all samples, assuming diploid genotypes + + // For faster access to genotype likelihoods (PLs) of the query sample + int max_ipl, *pl_ptr = args->pl_arr + query_isample*npl; + double sum_pl = 0; // for converting PLs to probs + for (max_ipl=0; max_iplno_PLs==1 ) sum_pl = -1; + + // The main stats: concordance of the query sample with the target -g samples + for (i=0; igt_hdr); i++) + { + int *gt_ptr = gt_arr + i*ngt; + if ( gt_ptr[1]==bcf_int32_vector_end ) continue; // skip haploid genotypes + if ( bcf_gt_is_missing(gt_ptr[0]) || bcf_gt_is_missing(gt_ptr[1]) ) continue; + int a = bcf_gt_allele(gt_ptr[0]); + int b = bcf_gt_allele(gt_ptr[1]); + if ( args->hom_only && a!=b ) continue; // heterozygous genotype + int igt_tgt = igt_tgt = bcf_alleles2gt(a,b); // genotype index in the target file + int igt_qry = gt2ipl[igt_tgt]; // corresponding genotype in query file + if ( igt_qry>=max_ipl || pl_ptr[igt_qry]<0 ) continue; // genotype not present in query sample: haploid or missing + args->lks[i] += sum_pl<0 ? -pl_ptr[igt_qry] : log(pow(10, -0.1*pl_ptr[igt_qry])/sum_pl); + args->sites[i]++; + } + if ( args->all_sites ) + { + // Print LKs at all sites for debugging + int *gt_ptr = gt_arr + tgt_isample*ngt; + if ( gt_ptr[1]==bcf_int32_vector_end ) continue; // skip haploid genotypes + int a = bcf_gt_allele(gt_ptr[0]); + int b = bcf_gt_allele(gt_ptr[1]); + if ( args->hom_only && a!=b ) continue; // heterozygous genotype + fprintf(fp, "SC\t%s\t%d", args->gt_hdr->id[BCF_DT_CTG][gt_line->rid].key, gt_line->pos+1); + for (i=0; in_allele; i++) fprintf(fp, "%c%s", i==0?'\t':',', gt_line->d.allele[i]); + fprintf(fp, "\t%s/%s", a>=0 ? gt_line->d.allele[a] : ".", b>=0 ? gt_line->d.allele[b] : "."); + fprintf(fp, "\t%f", args->lks[query_isample]-prev_lk); + prev_lk = args->lks[query_isample]; + + int igt, *pl_ptr = args->pl_arr + query_isample*npl; // PLs of the query sample + for (i=0; in_allele; i++) fprintf(fp, "%c%s", i==0?'\t':',', sm_line->d.allele[i]); + for (igt=0; igtpl_arr); + free(args->tmp_arr); + + // To be able to plot total discordance (=number of mismatching GTs with -G1) in the same + // plot as discordance per site, the latter must be scaled to the same range + int nsamples = bcf_hdr_nsamples(args->gt_hdr); + double extreme_lk = 0, extreme_lk_per_site = 0; + for (i=0; ilks[i] < extreme_lk ) extreme_lk = args->lks[i]; + if ( args->sites[i] && args->lks[i]/args->sites[i] < extreme_lk_per_site ) extreme_lk_per_site = args->lks[i]/args->sites[i]; + } + + // Sorted output + double **p = (double**) malloc(sizeof(double*)*nsamples); + for (i=0; ilks[i]; + qsort(p, nsamples, sizeof(int*), cmp_doubleptr); + + fprintf(fp, "# [1]CN\t[2]Discordance with %s (total)\t[3]Discordance (avg score per site)\t[4]Number of sites compared\t[5]Sample\t[6]Sample ID\n", args->sm_hdr->samples[query_isample]); + for (i=0; ilks; + double per_site = 0; + if ( args->sites[idx] ) + { + if ( args->sites[idx] && extreme_lk_per_site ) + { + per_site = args->lks[idx]/args->sites[idx]; + per_site *= extreme_lk / extreme_lk_per_site; + } + else + per_site = 0; + } + fprintf(fp, "CN\t%e\t%e\t%.0f\t%s\t%d\n", fabs(args->lks[idx]), fabs(per_site), args->sites[idx], args->gt_hdr->samples[idx], i); + } + + if ( args->plot ) + { + fclose(fp); + plot_check(args, args->target_sample ? args->target_sample : "", args->sm_hdr->samples[query_isample]); + } +} + +// static inline int is_hom_most_likely(int nals, int *pls) +// { +// int ia, ib, idx = 1, min_is_hom = 1, min_pl = pls[0]; +// for (ia=1; iasm_hdr, line, &args->tmp_arr, &args->ntmp_arr); + + if ( ngt<=0 ) return 1; // GT not present + if ( ngt!=args->nsmpl*2 ) return 2; // not diploid + ngt /= args->nsmpl; + + int i,j, idx = 0; + for (i=1; insmpl; i++) + { + int32_t *a = args->tmp_arr + i*ngt; + if ( bcf_gt_is_missing(a[0]) || bcf_gt_is_missing(a[1]) || a[1]==bcf_int32_vector_end ) { idx+=i; continue; } + int agt = 1<tmp_arr + j*ngt; + if ( bcf_gt_is_missing(b[0]) || bcf_gt_is_missing(b[1]) || b[1]==bcf_int32_vector_end ) { idx++; continue; } + int bgt = 1<sm_hdr, line, "PL", &args->tmp_arr, &args->ntmp_arr); + + if ( npl<=0 ) return 1; // PL not present + npl /= args->nsmpl; + + int i,j,k, idx = 0; + for (i=1; insmpl; i++) + { + int32_t *a = args->tmp_arr + i*npl; + int imin = -1; + for (k=0; k a[k] ) imin = k; + } + if ( imin<0 ) { idx+=i; continue; } + + for (j=0; jtmp_arr + j*npl; + int jmin = -1; + for (k=0; k b[k] ) jmin = k; + } + if ( jmin<0 ) { idx++; continue; } + + ntot[idx]++; + if ( imin!=jmin ) ndif[idx]++; + idx++; + } + } + return 0; +} + +static void cross_check_gts(args_t *args) +{ + // Initialize things: check which tags are defined in the header, sample names etc. + if ( bcf_hdr_id2int(args->sm_hdr, BCF_DT_ID, "PL")<0 ) + { + if ( bcf_hdr_id2int(args->sm_hdr, BCF_DT_ID, "GT")<0 ) + error("[E::%s] Neither PL nor GT present in the header of %s\n", __func__, args->files->readers[0].fname); + if ( !args->no_PLs ) { + fprintf(stderr,"Warning: PL not present in the header of %s, using GT instead\n", args->files->readers[0].fname); + args->no_PLs = 99; + } + } + + args->nsmpl = bcf_hdr_nsamples(args->sm_hdr); + args->narr = (args->nsmpl-1)*args->nsmpl/2; + + uint32_t *ndif = (uint32_t*) calloc(args->narr,4); + uint32_t *ntot = (uint32_t*) calloc(args->narr,4); + + while ( bcf_sr_next_line(args->files) ) + { + bcf1_t *line = bcf_sr_get_line(args->files,0); + + // use PLs unless no_PLs is set and GT exists + if ( args->no_PLs ) + { + if ( process_GT(args,line,ntot,ndif)==0 ) continue; + } + process_PL(args,line,ntot,ndif); + } + + FILE *fp = stdout; + print_header(args, fp); + + float *tmp = (float*)malloc(sizeof(float)*args->nsmpl*(args->nsmpl-1)/2); + + // Output pairwise distances + fprintf(fp, "# ERR, error rate\t[2]Pairwise error rate\t[3]Number of sites compared\t[4]Sample i\t[5]Sample j\n"); + int i,j, idx = 0; + for (i=0; insmpl; i++) + { + for (j=0; jsm_hdr->samples[i],args->sm_hdr->samples[j]); + PDIST(tmp,i,j) = err; + idx++; + } + } + + // Cluster samples + int nlist; + float clust_max_err = args->max_intra_err; + hclust_t *clust = hclust_init(args->nsmpl,tmp); + cluster_t *list = hclust_create_list(clust,args->min_inter_err,&clust_max_err,&nlist); + fprintf(fp, "# CLUSTER\t[2]Maximum inter-cluster ERR\t[3-]List of samples\n"); + for (i=0; ism_hdr->samples[list[i].memb[j]]); + fprintf(fp,"\n"); + } + hclust_destroy_list(list,nlist); + // Debugging output: the cluster graph and data used for deciding + char **dbg = hclust_explain(clust,&nlist); + for (i=0; ism_hdr->samples,clust_max_err)); + hclust_destroy(clust); + free(tmp); + + + // Deprecated output for temporary backward compatibility + fprintf(fp, "# Warning: The CN block is deprecated and will be removed in future releases. Use ERR instead.\n"); + fprintf(fp, "# [1]CN\t[2]Discordance\t[3]Number of sites\t[4]Average minimum depth\t[5]Sample i\t[6]Sample j\n"); + idx = 0; + for (i=0; insmpl; i++) + { + for (j=0; jsm_hdr->samples[i],args->sm_hdr->samples[j]); + idx++; + } + } + + free(ndif); + free(ntot); + free(args->tmp_arr); +} + +static char *init_prefix(char *prefix) +{ + int len = strlen(prefix); + if ( prefix[len-1] == '/' || prefix[len-1] == '\\' ) + return msprintf("%sgtcheck", prefix); + return strdup(prefix); +} + +static void usage(void) +{ + fprintf(stderr, "\n"); + fprintf(stderr, "About: Check sample identity. With no -g BCF given, multi-sample cross-check is performed.\n"); + fprintf(stderr, "Usage: bcftools gtcheck [options] [-g ] \n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " -a, --all-sites output comparison for all sites\n"); + fprintf(stderr, " -c, --cluster min inter- and max intra-sample error [0.23,-0.3]\n"); + fprintf(stderr, " -g, --genotypes genotypes to compare against\n"); + fprintf(stderr, " -G, --GTs-only use GTs, ignore PLs, using for unseen genotypes [99]\n"); + fprintf(stderr, " -H, --homs-only homozygous genotypes only (useful for low coverage data)\n"); + fprintf(stderr, " -p, --plot plot\n"); + fprintf(stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(stderr, " -s, --query-sample query sample (by default the first sample is checked)\n"); + fprintf(stderr, " -S, --target-sample target sample in the -g file (used only for plotting)\n"); + fprintf(stderr, " -t, --targets similar to -r but streams rather than index-jumps\n"); + fprintf(stderr, " -T, --targets-file similar to -R but streams rather than index-jumps\n"); + fprintf(stderr, "\n"); + exit(1); +} + +int main_vcfgtcheck(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->files = bcf_sr_init(); + args->argc = argc; args->argv = argv; set_cwd(args); + char *regions = NULL, *targets = NULL; + int regions_is_file = 0, targets_is_file = 0; + + // In simulated sample swaps the minimum error was 0.3 and maximum intra-sample error was 0.23 + // - min_inter: pairs with smaller err value will be considered identical + // - max_intra: pairs with err value bigger than abs(max_intra_err) will be considered + // different. If negative, the cutoff may be heuristically lowered + args->min_inter_err = 0.23; + args->max_intra_err = -0.3; + + static struct option loptions[] = + { + {"cluster",1,0,'c'}, + {"GTs-only",1,0,'G'}, + {"all-sites",0,0,'a'}, + {"homs-only",0,0,'H'}, + {"help",0,0,'h'}, + {"genotypes",1,0,'g'}, + {"plot",1,0,'p'}, + {"target-sample",1,0,'S'}, + {"query-sample",1,0,'s'}, + {"regions",1,0,'r'}, + {"regions-file",1,0,'R'}, + {"targets",1,0,'t'}, + {"targets-file",1,0,'T'}, + {0,0,0,0} + }; + char *tmp; + while ((c = getopt_long(argc, argv, "hg:p:s:S:Hr:R:at:T:G:c:",loptions,NULL)) >= 0) { + switch (c) { + case 'c': + args->min_inter_err = strtod(optarg,&tmp); + if ( *tmp ) + { + if ( *tmp!=',') error("Could not parse: -c %s\n", optarg); + args->max_intra_err = strtod(tmp+1,&tmp); + if ( *tmp ) error("Could not parse: -c %s\n", optarg); + } + break; + case 'G': + args->no_PLs = strtol(optarg,&tmp,10); + if ( *tmp ) error("Could not parse argument: --GTs-only %s\n", optarg); + break; + case 'a': args->all_sites = 1; break; + case 'H': args->hom_only = 1; break; + case 'g': args->gt_fname = optarg; break; + case 'p': args->plot = optarg; break; + case 'S': args->target_sample = optarg; break; + case 's': args->query_sample = optarg; break; + case 'r': regions = optarg; break; + case 'R': regions = optarg; regions_is_file = 1; break; + case 't': targets = optarg; break; + case 'T': targets = optarg; targets_is_file = 1; break; + case 'h': + case '?': usage(); + default: error("Unknown argument: %s\n", optarg); + } + } + char *fname = NULL; + if ( optind==argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin + else usage(); // no files given + } + else fname = argv[optind]; + if ( argc>optind+1 ) usage(); // too many files given + if ( !args->gt_fname ) args->cross_check = 1; // no genotype file, run in cross-check mode + else args->files->require_index = 1; + if ( regions && bcf_sr_set_regions(args->files, regions, regions_is_file)<0 ) error("Failed to read the regions: %s\n", regions); + if ( targets && bcf_sr_set_targets(args->files, targets, targets_is_file, 0)<0 ) error("Failed to read the targets: %s\n", targets); + if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); + if ( args->gt_fname && !bcf_sr_add_reader(args->files, args->gt_fname) ) error("Failed to open %s: %s\n", args->gt_fname,bcf_sr_strerror(args->files->errnum)); + args->files->collapse = COLLAPSE_SNPS|COLLAPSE_INDELS; + if ( args->plot ) args->plot = init_prefix(args->plot); + init_data(args); + if ( args->cross_check ) + cross_check_gts(args); + else + check_gt(args); + destroy_data(args); + bcf_sr_destroy(args->files); + if (args->plot) free(args->plot); + free(args); + return 0; +} + diff --git a/bcftools/vcfgtcheck.c.pysam.c b/bcftools/vcfgtcheck.c.pysam.c new file mode 100644 index 0000000..6a6fa58 --- /dev/null +++ b/bcftools/vcfgtcheck.c.pysam.c @@ -0,0 +1,824 @@ +#include "bcftools.pysam.h" + +/* vcfgtcheck.c -- Check sample identity. + + Copyright (C) 2013-2014 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "hclust.h" + +typedef struct +{ + bcf_srs_t *files; // first reader is the query VCF - single sample normally or multi-sample for cross-check + bcf_hdr_t *gt_hdr, *sm_hdr; // VCF with genotypes to compare against and the query VCF + int ntmp_arr, npl_arr; + int32_t *tmp_arr, *pl_arr; + double *lks, *sites, min_inter_err, max_intra_err; + int *cnts, *dps, hom_only, cross_check, all_sites; + char *cwd, **argv, *gt_fname, *plot, *query_sample, *target_sample; + int argc, no_PLs, narr, nsmpl; +} +args_t; + +FILE *open_file(char **fname, const char *mode, const char *fmt, ...); +char *msprintf(const char *fmt, ...); +void mkdir_p(const char *fmt, ...); + +void py_plot(char *script) +{ + mkdir_p(script); + int len = strlen(script); + char *cmd = !strcmp(".py",script+len-3) ? msprintf("python %s", script) : msprintf("python %s.py", script); + int ret = system(cmd); + if ( ret ) fprintf(bcftools_stderr, "The command returned non-zero status %d: %s\n", ret, cmd); + free(cmd); +} + +static void plot_check(args_t *args, char *target_sample, char *query_sample) +{ + char *fname; + FILE *fp = open_file(&fname, "w", "%s.py", args->plot); + fprintf(fp, + "import matplotlib as mpl\n" + "mpl.use('Agg')\n" + "import matplotlib.pyplot as plt\n" + "import matplotlib.gridspec as gridspec\n" + "import csv\n" + "csv.register_dialect('tab', delimiter='\\t', quoting=csv.QUOTE_NONE)\n" + "\n" + "sample_ids = False\n" + "\n" + "dat = []\n" + "with open('%s.tab', 'rb') as f:\n" + " reader = csv.reader(f, 'tab')\n" + " for row in reader:\n" + " if row[0][0]=='#': continue\n" + " if row[0]!='CN': continue\n" + " tgt = 0\n" + " if row[4]=='%s': tgt = 1\n" + " dat.append([float(row[1]), float(row[2]), float(row[3]), tgt, row[4]])\n" + "\n" + "dat = sorted(dat)\n" + "\n" + "iq = -1; dp = 0\n" + "for i in range(len(dat)):\n" + " if iq==-1 and dat[i][3]==1: iq = i\n" + " dp += dat[i][2]\n" + "dp /= len(dat)\n" + "\n" + "fig,ax1 = plt.subplots(figsize=(8,5))\n" + "ax2 = ax1.twinx()\n" + "plots = ax1.plot([x[0] for x in dat],'o-', ms=3, color='g', mec='g', label='Discordance (total)')\n" + "plots += ax1.plot([x[1] for x in dat], '^', ms=3, color='r', mec='r', label='Discordance (avg per site)')\n" + "plots += ax2.plot([x[2] for x in dat],'v', ms=3, color='k', label='Number of sites')\n" + "if iq!=-1:\n" + " ax1.plot([iq],[dat[iq][0]],'o',color='orange', ms=9)\n" + " ax1.annotate('%s',xy=(iq,dat[iq][0]), xytext=(5,5), textcoords='offset points',fontsize='xx-small',rotation=45,va='bottom',ha='left')\n" + " ax1.plot([iq],[dat[iq][1]],'^',color='red', ms=5)\n" + "for tl in ax1.get_yticklabels(): tl.set_color('g')\n" + "for tl in ax2.get_yticklabels(): tl.set_color('k'); tl.set_fontsize(9)\n" + "min_dp = min([x[2] for x in dat])\n" + "max_dp = max([x[2] for x in dat])\n" + "ax2.set_ylim(min_dp-1,max_dp+1)\n" + "ax1.set_title('Discordance with %s')\n" + "ax1.set_xlim(-0.05*len(dat),1.05*(len(dat)-1))\n" + "ax1.set_xlabel('Sample ID')\n" + "plt.subplots_adjust(left=0.1,right=0.9,bottom=0.1,top=0.9)\n" + "if sample_ids:\n" + " ax1.set_xticks(range(len(dat)))\n" + " ax1.set_xticklabels([x[4] for x in dat],**{'rotation':45, 'ha':'right', 'fontsize':8})\n" + " plt.subplots_adjust(bottom=0.2)\n" + "ax1.set_ylabel('Discordance',color='g')\n" + "ax2.set_ylabel('Number of sites',color='k')\n" + "ax2.ticklabel_format(style='sci', scilimits=(-3,2), axis='y')\n" + "ax1.ticklabel_format(style='sci', scilimits=(-3,2), axis='y')\n" + "labels = [l.get_label() for l in plots]\n" + "plt.legend(plots,labels,numpoints=1,markerscale=1,loc='best',prop={'size':10},frameon=False)\n" + "plt.savefig('%s.png')\n" + "plt.close()\n" + "\n", args->plot, target_sample, target_sample, query_sample, args->plot + ); + fclose(fp); + py_plot(fname); + free(fname); +} + +#if 0 +static void plot_cross_check(args_t *args) +{ + char *fname; + FILE *fp = open_file(&fname, "w", "%s.py", args->plot); + fprintf(fp, + "import matplotlib as mpl\n" + "mpl.use('Agg')\n" + "import matplotlib.pyplot as plt\n" + "import matplotlib.gridspec as gridspec\n" + "import csv\n" + "csv.register_dialect('tab', delimiter='\\t', quoting=csv.QUOTE_NONE)\n" + "avg = []\n" + "dp = []\n" + "sm2id = {}\n" + "dat = None\n" + "min = None\n" + "max = None\n" + "with open('%s.tab', 'rb') as f:\n" + " reader = csv.reader(f, 'tab')\n" + " i = 0\n" + " for row in reader:\n" + " if row[0]=='SM':\n" + " sm2id[row[4]] = i\n" + " avg.append([i,float(row[1])])\n" + " dp.append([i,float(row[2])])\n" + " i += 1\n" + " elif row[0]=='CN':\n" + " val = 0\n" + " if int(row[2])!=0: val = float(row[1])/int(row[2])\n" + " if not dat:\n" + " dat = [[0]*len(sm2id) for x in xrange(len(sm2id))]\n" + " min = val\n" + " max = val\n" + " id_i = sm2id[row[4]]\n" + " id_j = sm2id[row[5]]\n" + " dat[id_i][id_j] = val\n" + " dat[id_j][id_i] = val\n" + " if min > val: min = val\n" + " if max < val: max = val\n" + "\n" + "if len(sm2id)<=1: exit(1)\n" + "if min==max: exit(1)\n" + "\n" + "fig = plt.figure(figsize=(6,7))\n" + "gs = gridspec.GridSpec(2, 1, height_ratios=[1, 1.5])\n" + "ax1 = plt.subplot(gs[0])\n" + "ax2 = plt.subplot(gs[1])\n" + "\n" + "ax1.plot([x[0] for x in avg],[x[1] for x in avg],'^-', ms=3, color='k')\n" + "ax3 = ax1.twinx()\n" + "ax3.plot([x[0] for x in dp],[x[1] for x in dp],'^-', ms=3, color='r',mec='r')\n" + "for tl in ax3.get_yticklabels():\n" + " tl.set_color('r')\n" + " tl.set_fontsize(9)\n" + "\n" + "im = ax2.imshow(dat,clim=(min),interpolation='nearest',origin='lower')\n" + "cb1 = plt.colorbar(im,ax=ax2)\n" + "cb1.set_label('Pairwise discordance')\n" + "for t in cb1.ax.get_yticklabels(): t.set_fontsize(9)\n" + "\n" + "ax1.tick_params(axis='both', which='major', labelsize=9)\n" + "ax1.tick_params(axis='both', which='minor', labelsize=9)\n" + "ax2.tick_params(axis='both', which='major', labelsize=9)\n" + "ax2.tick_params(axis='both', which='minor', labelsize=9)\n" + "\n" + "ax1.set_title('Sample Discordance Score')\n" + "ax2.set_ylabel('Sample ID')\n" + "ax2.set_xlabel('Sample ID')\n" + "ax3.set_ylabel('Average Depth',color='r')\n" + "ax1.set_xlabel('Sample ID')\n" + "ax1.set_ylabel('Average discordance')\n" + "\n" + "plt.subplots_adjust(left=0.15,right=0.87,bottom=0.08,top=0.93,hspace=0.25)\n" + "plt.savefig('%s.png')\n" + "plt.close()\n" + "\n", args->plot,args->plot + ); + fclose(fp); + py_plot(fname); + free(fname); +} +#endif + +static void init_data(args_t *args) +{ + args->sm_hdr = args->files->readers[0].header; + if ( !bcf_hdr_nsamples(args->sm_hdr) ) error("No samples in %s?\n", args->files->readers[0].fname); + + if ( !args->cross_check ) + { + args->gt_hdr = args->files->readers[1].header; + int nsamples = bcf_hdr_nsamples(args->gt_hdr); + if ( !nsamples ) error("No samples in %s?\n", args->files->readers[1].fname); + args->lks = (double*) calloc(nsamples,sizeof(double)); + args->cnts = (int*) calloc(nsamples,sizeof(int)); + args->sites = (double*) calloc(nsamples,sizeof(double)); + args->dps = (int*) calloc(nsamples,sizeof(int)); + } +} + +static void destroy_data(args_t *args) +{ + free(args->lks); free(args->cnts); free(args->dps); free(args->cwd); free(args->sites); +} + +static int allele_to_int(bcf1_t *line, char *allele) +{ + int i; + for (i=0; in_allele; i++) + if ( !strcmp(allele,line->d.allele[i]) ) return i; + if ( strcmp(line->d.allele[i-1],"X") ) return -1; + return i-1; +} + +static int init_gt2ipl(args_t *args, bcf1_t *gt_line, bcf1_t *sm_line, int *gt2ipl, int n_gt2ipl) +{ + int i, j; + for (i=0; in_allele; i++) + { + // find which of the sm_alleles (k) corresponds to the gt_allele (i) + int k = allele_to_int(sm_line, gt_line->d.allele[i]); + if ( k<0 ) return 0; + for (j=0; j<=i; j++) + { + int l = allele_to_int(sm_line, gt_line->d.allele[j]); + if ( l<0 ) return 0; + gt2ipl[ bcf_ij2G(j,i) ] = k<=l ? bcf_ij2G(k,l) : bcf_ij2G(l,k); + } + } + //for (i=0; icwd = (char*) malloc(sizeof(char)*nbuf); + for (i=0; i<5; i++) + { + if ( (buf = getcwd(args->cwd, nbuf)) ) break; + nbuf *= 2; + args->cwd = (char*) realloc(args->cwd, sizeof(char)*nbuf); + } + assert(buf); +} + +static void print_header(args_t *args, FILE *fp) +{ + fprintf(fp, "# This file was produced by bcftools (%s+htslib-%s), the command line was:\n", bcftools_version(), hts_version()); + fprintf(fp, "# \t bcftools %s ", args->argv[0]); + int i; + for (i=1; iargc; i++) + fprintf(fp, " %s",args->argv[i]); + fprintf(fp, "\n# and the working directory was:\n"); + fprintf(fp, "# \t %s\n#\n", args->cwd); +} + +static int fake_PLs(args_t *args, bcf_hdr_t *hdr, bcf1_t *line) +{ + // PLs not present, use GTs instead. + int fake_PL = args->no_PLs ? args->no_PLs : 99; // with 1, discordance is the number of non-matching GTs + int nsm_gt, i; + if ( (nsm_gt=bcf_get_genotypes(hdr, line, &args->tmp_arr, &args->ntmp_arr)) <= 0 ) + error("GT not present at %s:%d?\n", hdr->id[BCF_DT_CTG][line->rid].key, line->pos+1); + nsm_gt /= bcf_hdr_nsamples(hdr); + int npl = line->n_allele*(line->n_allele+1)/2; + hts_expand(int,npl*bcf_hdr_nsamples(hdr),args->npl_arr,args->pl_arr); + for (i=0; itmp_arr + i*nsm_gt; + int j, *pl_ptr = args->pl_arr + i*npl; + if ( bcf_gt_is_missing(gt_ptr[0]) || bcf_gt_is_missing(gt_ptr[1]) ) // missing genotype + { + for (j=0; jno_PLs; + + // Initialize things: check which tags are defined in the header, sample names etc. + if ( bcf_hdr_id2int(args->gt_hdr, BCF_DT_ID, "GT")<0 ) error("[E::%s] GT not present in the header of %s?\n", __func__, args->files->readers[1].fname); + if ( bcf_hdr_id2int(args->sm_hdr, BCF_DT_ID, "PL")<0 ) + { + if ( bcf_hdr_id2int(args->sm_hdr, BCF_DT_ID, "GT")<0 ) + error("[E::%s] Neither PL nor GT present in the header of %s\n", __func__, args->files->readers[0].fname); + if ( !args->no_PLs ) + fprintf(bcftools_stderr,"Warning: PL not present in the header of %s, using GT instead\n", args->files->readers[0].fname); + fake_pls = 1; + } + + FILE *fp = args->plot ? open_file(NULL, "w", "%s.tab", args->plot) : bcftools_stdout; + print_header(args, fp); + + int tgt_isample = -1, query_isample = 0; + if ( args->target_sample ) + { + tgt_isample = bcf_hdr_id2int(args->gt_hdr, BCF_DT_SAMPLE, args->target_sample); + if ( tgt_isample<0 ) error("No such sample in %s: [%s]\n", args->files->readers[1].fname, args->target_sample); + } + if ( args->all_sites ) + { + if ( tgt_isample==-1 ) + { + fprintf(bcftools_stderr,"No target sample selected for comparison, using the first sample in %s: %s\n", args->gt_fname,args->gt_hdr->samples[0]); + tgt_isample = 0; + } + } + if ( args->query_sample ) + { + query_isample = bcf_hdr_id2int(args->sm_hdr, BCF_DT_SAMPLE, args->query_sample); + if ( query_isample<0 ) error("No such sample in %s: [%s]\n", args->files->readers[0].fname, args->query_sample); + } + if ( args->all_sites ) + fprintf(fp, "# [1]SC, Site by Site Comparison\t[2]Chromosome\t[3]Position\t[4]-g alleles\t[5]-g GT (%s)\t[6]match log LK\t[7]Query alleles\t[8-]Query PLs (%s)\n", + args->gt_hdr->samples[tgt_isample],args->sm_hdr->samples[query_isample]); + + // Main loop + float prev_lk = 0; + while ( (ret=bcf_sr_next_line(args->files)) ) + { + if ( ret!=2 ) continue; + bcf1_t *sm_line = args->files->readers[0].buffer[0]; // the query file + bcf1_t *gt_line = args->files->readers[1].buffer[0]; // the -g target file + bcf_unpack(sm_line, BCF_UN_FMT); + bcf_unpack(gt_line, BCF_UN_FMT); + + // Init mapping from target genotype index to the sample's PL fields + int n_gt2ipl = gt_line->n_allele*(gt_line->n_allele + 1)/2; + if ( n_gt2ipl > m_gt2ipl ) + { + m_gt2ipl = n_gt2ipl; + gt2ipl = (int*) realloc(gt2ipl, sizeof(int)*m_gt2ipl); + } + if ( !init_gt2ipl(args, gt_line, sm_line, gt2ipl, n_gt2ipl) ) continue; + + // Target genotypes + int ngt, npl; + if ( (ngt=bcf_get_genotypes(args->gt_hdr, gt_line, >_arr, &ngt_arr)) <= 0 ) + error("GT not present at %s:%d?", args->gt_hdr->id[BCF_DT_CTG][gt_line->rid].key, gt_line->pos+1); + ngt /= bcf_hdr_nsamples(args->gt_hdr); + if ( ngt!=2 ) continue; // checking only diploid genotypes + + // Sample PLs + if ( !fake_pls ) + { + if ( (npl=bcf_get_format_int32(args->sm_hdr, sm_line, "PL", &args->pl_arr, &args->npl_arr)) <= 0 ) + { + if ( sm_line->n_allele==1 ) + { + // PL values may not be present when ALT=. (mpileup/bcftools output), in that case + // switch automatically to GT at these sites + npl = fake_PLs(args, args->sm_hdr, sm_line); + } + else + error("PL not present at %s:%d?\n", args->sm_hdr->id[BCF_DT_CTG][sm_line->rid].key, sm_line->pos+1); + } + else + npl /= bcf_hdr_nsamples(args->sm_hdr); + } + else + npl = fake_PLs(args, args->sm_hdr, sm_line); + + // Calculate likelihoods for all samples, assuming diploid genotypes + + // For faster access to genotype likelihoods (PLs) of the query sample + int max_ipl, *pl_ptr = args->pl_arr + query_isample*npl; + double sum_pl = 0; // for converting PLs to probs + for (max_ipl=0; max_iplno_PLs==1 ) sum_pl = -1; + + // The main stats: concordance of the query sample with the target -g samples + for (i=0; igt_hdr); i++) + { + int *gt_ptr = gt_arr + i*ngt; + if ( gt_ptr[1]==bcf_int32_vector_end ) continue; // skip haploid genotypes + if ( bcf_gt_is_missing(gt_ptr[0]) || bcf_gt_is_missing(gt_ptr[1]) ) continue; + int a = bcf_gt_allele(gt_ptr[0]); + int b = bcf_gt_allele(gt_ptr[1]); + if ( args->hom_only && a!=b ) continue; // heterozygous genotype + int igt_tgt = igt_tgt = bcf_alleles2gt(a,b); // genotype index in the target file + int igt_qry = gt2ipl[igt_tgt]; // corresponding genotype in query file + if ( igt_qry>=max_ipl || pl_ptr[igt_qry]<0 ) continue; // genotype not present in query sample: haploid or missing + args->lks[i] += sum_pl<0 ? -pl_ptr[igt_qry] : log(pow(10, -0.1*pl_ptr[igt_qry])/sum_pl); + args->sites[i]++; + } + if ( args->all_sites ) + { + // Print LKs at all sites for debugging + int *gt_ptr = gt_arr + tgt_isample*ngt; + if ( gt_ptr[1]==bcf_int32_vector_end ) continue; // skip haploid genotypes + int a = bcf_gt_allele(gt_ptr[0]); + int b = bcf_gt_allele(gt_ptr[1]); + if ( args->hom_only && a!=b ) continue; // heterozygous genotype + fprintf(fp, "SC\t%s\t%d", args->gt_hdr->id[BCF_DT_CTG][gt_line->rid].key, gt_line->pos+1); + for (i=0; in_allele; i++) fprintf(fp, "%c%s", i==0?'\t':',', gt_line->d.allele[i]); + fprintf(fp, "\t%s/%s", a>=0 ? gt_line->d.allele[a] : ".", b>=0 ? gt_line->d.allele[b] : "."); + fprintf(fp, "\t%f", args->lks[query_isample]-prev_lk); + prev_lk = args->lks[query_isample]; + + int igt, *pl_ptr = args->pl_arr + query_isample*npl; // PLs of the query sample + for (i=0; in_allele; i++) fprintf(fp, "%c%s", i==0?'\t':',', sm_line->d.allele[i]); + for (igt=0; igtpl_arr); + free(args->tmp_arr); + + // To be able to plot total discordance (=number of mismatching GTs with -G1) in the same + // plot as discordance per site, the latter must be scaled to the same range + int nsamples = bcf_hdr_nsamples(args->gt_hdr); + double extreme_lk = 0, extreme_lk_per_site = 0; + for (i=0; ilks[i] < extreme_lk ) extreme_lk = args->lks[i]; + if ( args->sites[i] && args->lks[i]/args->sites[i] < extreme_lk_per_site ) extreme_lk_per_site = args->lks[i]/args->sites[i]; + } + + // Sorted output + double **p = (double**) malloc(sizeof(double*)*nsamples); + for (i=0; ilks[i]; + qsort(p, nsamples, sizeof(int*), cmp_doubleptr); + + fprintf(fp, "# [1]CN\t[2]Discordance with %s (total)\t[3]Discordance (avg score per site)\t[4]Number of sites compared\t[5]Sample\t[6]Sample ID\n", args->sm_hdr->samples[query_isample]); + for (i=0; ilks; + double per_site = 0; + if ( args->sites[idx] ) + { + if ( args->sites[idx] && extreme_lk_per_site ) + { + per_site = args->lks[idx]/args->sites[idx]; + per_site *= extreme_lk / extreme_lk_per_site; + } + else + per_site = 0; + } + fprintf(fp, "CN\t%e\t%e\t%.0f\t%s\t%d\n", fabs(args->lks[idx]), fabs(per_site), args->sites[idx], args->gt_hdr->samples[idx], i); + } + + if ( args->plot ) + { + fclose(fp); + plot_check(args, args->target_sample ? args->target_sample : "", args->sm_hdr->samples[query_isample]); + } +} + +// static inline int is_hom_most_likely(int nals, int *pls) +// { +// int ia, ib, idx = 1, min_is_hom = 1, min_pl = pls[0]; +// for (ia=1; iasm_hdr, line, &args->tmp_arr, &args->ntmp_arr); + + if ( ngt<=0 ) return 1; // GT not present + if ( ngt!=args->nsmpl*2 ) return 2; // not diploid + ngt /= args->nsmpl; + + int i,j, idx = 0; + for (i=1; insmpl; i++) + { + int32_t *a = args->tmp_arr + i*ngt; + if ( bcf_gt_is_missing(a[0]) || bcf_gt_is_missing(a[1]) || a[1]==bcf_int32_vector_end ) { idx+=i; continue; } + int agt = 1<tmp_arr + j*ngt; + if ( bcf_gt_is_missing(b[0]) || bcf_gt_is_missing(b[1]) || b[1]==bcf_int32_vector_end ) { idx++; continue; } + int bgt = 1<sm_hdr, line, "PL", &args->tmp_arr, &args->ntmp_arr); + + if ( npl<=0 ) return 1; // PL not present + npl /= args->nsmpl; + + int i,j,k, idx = 0; + for (i=1; insmpl; i++) + { + int32_t *a = args->tmp_arr + i*npl; + int imin = -1; + for (k=0; k a[k] ) imin = k; + } + if ( imin<0 ) { idx+=i; continue; } + + for (j=0; jtmp_arr + j*npl; + int jmin = -1; + for (k=0; k b[k] ) jmin = k; + } + if ( jmin<0 ) { idx++; continue; } + + ntot[idx]++; + if ( imin!=jmin ) ndif[idx]++; + idx++; + } + } + return 0; +} + +static void cross_check_gts(args_t *args) +{ + // Initialize things: check which tags are defined in the header, sample names etc. + if ( bcf_hdr_id2int(args->sm_hdr, BCF_DT_ID, "PL")<0 ) + { + if ( bcf_hdr_id2int(args->sm_hdr, BCF_DT_ID, "GT")<0 ) + error("[E::%s] Neither PL nor GT present in the header of %s\n", __func__, args->files->readers[0].fname); + if ( !args->no_PLs ) { + fprintf(bcftools_stderr,"Warning: PL not present in the header of %s, using GT instead\n", args->files->readers[0].fname); + args->no_PLs = 99; + } + } + + args->nsmpl = bcf_hdr_nsamples(args->sm_hdr); + args->narr = (args->nsmpl-1)*args->nsmpl/2; + + uint32_t *ndif = (uint32_t*) calloc(args->narr,4); + uint32_t *ntot = (uint32_t*) calloc(args->narr,4); + + while ( bcf_sr_next_line(args->files) ) + { + bcf1_t *line = bcf_sr_get_line(args->files,0); + + // use PLs unless no_PLs is set and GT exists + if ( args->no_PLs ) + { + if ( process_GT(args,line,ntot,ndif)==0 ) continue; + } + process_PL(args,line,ntot,ndif); + } + + FILE *fp = bcftools_stdout; + print_header(args, fp); + + float *tmp = (float*)malloc(sizeof(float)*args->nsmpl*(args->nsmpl-1)/2); + + // Output pairwise distances + fprintf(fp, "# ERR, error rate\t[2]Pairwise error rate\t[3]Number of sites compared\t[4]Sample i\t[5]Sample j\n"); + int i,j, idx = 0; + for (i=0; insmpl; i++) + { + for (j=0; jsm_hdr->samples[i],args->sm_hdr->samples[j]); + PDIST(tmp,i,j) = err; + idx++; + } + } + + // Cluster samples + int nlist; + float clust_max_err = args->max_intra_err; + hclust_t *clust = hclust_init(args->nsmpl,tmp); + cluster_t *list = hclust_create_list(clust,args->min_inter_err,&clust_max_err,&nlist); + fprintf(fp, "# CLUSTER\t[2]Maximum inter-cluster ERR\t[3-]List of samples\n"); + for (i=0; ism_hdr->samples[list[i].memb[j]]); + fprintf(fp,"\n"); + } + hclust_destroy_list(list,nlist); + // Debugging output: the cluster graph and data used for deciding + char **dbg = hclust_explain(clust,&nlist); + for (i=0; ism_hdr->samples,clust_max_err)); + hclust_destroy(clust); + free(tmp); + + + // Deprecated output for temporary backward compatibility + fprintf(fp, "# Warning: The CN block is deprecated and will be removed in future releases. Use ERR instead.\n"); + fprintf(fp, "# [1]CN\t[2]Discordance\t[3]Number of sites\t[4]Average minimum depth\t[5]Sample i\t[6]Sample j\n"); + idx = 0; + for (i=0; insmpl; i++) + { + for (j=0; jsm_hdr->samples[i],args->sm_hdr->samples[j]); + idx++; + } + } + + free(ndif); + free(ntot); + free(args->tmp_arr); +} + +static char *init_prefix(char *prefix) +{ + int len = strlen(prefix); + if ( prefix[len-1] == '/' || prefix[len-1] == '\\' ) + return msprintf("%sgtcheck", prefix); + return strdup(prefix); +} + +static void usage(void) +{ + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "About: Check sample identity. With no -g BCF given, multi-sample cross-check is performed.\n"); + fprintf(bcftools_stderr, "Usage: bcftools gtcheck [options] [-g ] \n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Options:\n"); + fprintf(bcftools_stderr, " -a, --all-sites output comparison for all sites\n"); + fprintf(bcftools_stderr, " -c, --cluster min inter- and max intra-sample error [0.23,-0.3]\n"); + fprintf(bcftools_stderr, " -g, --genotypes genotypes to compare against\n"); + fprintf(bcftools_stderr, " -G, --GTs-only use GTs, ignore PLs, using for unseen genotypes [99]\n"); + fprintf(bcftools_stderr, " -H, --homs-only homozygous genotypes only (useful for low coverage data)\n"); + fprintf(bcftools_stderr, " -p, --plot plot\n"); + fprintf(bcftools_stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(bcftools_stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(bcftools_stderr, " -s, --query-sample query sample (by default the first sample is checked)\n"); + fprintf(bcftools_stderr, " -S, --target-sample target sample in the -g file (used only for plotting)\n"); + fprintf(bcftools_stderr, " -t, --targets similar to -r but streams rather than index-jumps\n"); + fprintf(bcftools_stderr, " -T, --targets-file similar to -R but streams rather than index-jumps\n"); + fprintf(bcftools_stderr, "\n"); + exit(1); +} + +int main_vcfgtcheck(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->files = bcf_sr_init(); + args->argc = argc; args->argv = argv; set_cwd(args); + char *regions = NULL, *targets = NULL; + int regions_is_file = 0, targets_is_file = 0; + + // In simulated sample swaps the minimum error was 0.3 and maximum intra-sample error was 0.23 + // - min_inter: pairs with smaller err value will be considered identical + // - max_intra: pairs with err value bigger than abs(max_intra_err) will be considered + // different. If negative, the cutoff may be heuristically lowered + args->min_inter_err = 0.23; + args->max_intra_err = -0.3; + + static struct option loptions[] = + { + {"cluster",1,0,'c'}, + {"GTs-only",1,0,'G'}, + {"all-sites",0,0,'a'}, + {"homs-only",0,0,'H'}, + {"help",0,0,'h'}, + {"genotypes",1,0,'g'}, + {"plot",1,0,'p'}, + {"target-sample",1,0,'S'}, + {"query-sample",1,0,'s'}, + {"regions",1,0,'r'}, + {"regions-file",1,0,'R'}, + {"targets",1,0,'t'}, + {"targets-file",1,0,'T'}, + {0,0,0,0} + }; + char *tmp; + while ((c = getopt_long(argc, argv, "hg:p:s:S:Hr:R:at:T:G:c:",loptions,NULL)) >= 0) { + switch (c) { + case 'c': + args->min_inter_err = strtod(optarg,&tmp); + if ( *tmp ) + { + if ( *tmp!=',') error("Could not parse: -c %s\n", optarg); + args->max_intra_err = strtod(tmp+1,&tmp); + if ( *tmp ) error("Could not parse: -c %s\n", optarg); + } + break; + case 'G': + args->no_PLs = strtol(optarg,&tmp,10); + if ( *tmp ) error("Could not parse argument: --GTs-only %s\n", optarg); + break; + case 'a': args->all_sites = 1; break; + case 'H': args->hom_only = 1; break; + case 'g': args->gt_fname = optarg; break; + case 'p': args->plot = optarg; break; + case 'S': args->target_sample = optarg; break; + case 's': args->query_sample = optarg; break; + case 'r': regions = optarg; break; + case 'R': regions = optarg; regions_is_file = 1; break; + case 't': targets = optarg; break; + case 'T': targets = optarg; targets_is_file = 1; break; + case 'h': + case '?': usage(); + default: error("Unknown argument: %s\n", optarg); + } + } + char *fname = NULL; + if ( optind==argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin + else usage(); // no files given + } + else fname = argv[optind]; + if ( argc>optind+1 ) usage(); // too many files given + if ( !args->gt_fname ) args->cross_check = 1; // no genotype file, run in cross-check mode + else args->files->require_index = 1; + if ( regions && bcf_sr_set_regions(args->files, regions, regions_is_file)<0 ) error("Failed to read the regions: %s\n", regions); + if ( targets && bcf_sr_set_targets(args->files, targets, targets_is_file, 0)<0 ) error("Failed to read the targets: %s\n", targets); + if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); + if ( args->gt_fname && !bcf_sr_add_reader(args->files, args->gt_fname) ) error("Failed to open %s: %s\n", args->gt_fname,bcf_sr_strerror(args->files->errnum)); + args->files->collapse = COLLAPSE_SNPS|COLLAPSE_INDELS; + if ( args->plot ) args->plot = init_prefix(args->plot); + init_data(args); + if ( args->cross_check ) + cross_check_gts(args); + else + check_gt(args); + destroy_data(args); + bcf_sr_destroy(args->files); + if (args->plot) free(args->plot); + free(args); + return 0; +} + diff --git a/bcftools/vcfindex.c b/bcftools/vcfindex.c new file mode 100644 index 0000000..807fedd --- /dev/null +++ b/bcftools/vcfindex.c @@ -0,0 +1,231 @@ +/* vcfindex.c -- Index bgzip compressed VCF/BCF files for random access. + + Copyright (C) 2014-2016 Genome Research Ltd. + + Author: Shane McCarthy + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#define __STDC_FORMAT_MACROS +#include +#include +#include +#include "bcftools.h" + +#define BCF_LIDX_SHIFT 14 + +static void usage(void) +{ + fprintf(stderr, "\n"); + fprintf(stderr, "About: Index bgzip compressed VCF/BCF files for random access.\n"); + fprintf(stderr, "Usage: bcftools index [options] |\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Indexing options:\n"); + fprintf(stderr, " -c, --csi generate CSI-format index for VCF/BCF files [default]\n"); + fprintf(stderr, " -f, --force overwrite index if it already exists\n"); + fprintf(stderr, " -m, --min-shift INT set minimal interval size for CSI indices to 2^INT [14]\n"); + fprintf(stderr, " -o, --output-file FILE optional output index file name\n"); + fprintf(stderr, " -t, --tbi generate TBI-format index for VCF files\n"); + fprintf(stderr, " --threads sets the number of threads [0]\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Stats options:\n"); + fprintf(stderr, " -n, --nrecords print number of records based on existing index file\n"); + fprintf(stderr, " -s, --stats print per contig stats based on existing index file\n"); + fprintf(stderr, "\n"); + exit(1); +} + +int vcf_index_stats(char *fname, int stats) +{ + const char **seq; + int i, nseq; + tbx_t *tbx = NULL; + hts_idx_t *idx = NULL; + + htsFile *fp = hts_open(fname,"r"); + if ( !fp ) { fprintf(stderr,"Could not read %s\n", fname); return 1; } + bcf_hdr_t *hdr = bcf_hdr_read(fp); + if ( !hdr ) { fprintf(stderr,"Could not read the header: %s\n", fname); return 1; } + + if ( hts_get_format(fp)->format==vcf ) + { + tbx = tbx_index_load(fname); + if ( !tbx ) { fprintf(stderr,"Could not load index for VCF: %s\n", fname); return 1; } + } + else if ( hts_get_format(fp)->format==bcf ) + { + idx = bcf_index_load(fname); + if ( !idx ) { fprintf(stderr,"Could not load index for BCF file: %s\n", fname); return 1; } + } + else + { + fprintf(stderr,"Could not detect the file type as VCF or BCF: %s\n", fname); + return 1; + } + + seq = tbx ? tbx_seqnames(tbx, &nseq) : bcf_index_seqnames(idx, hdr, &nseq); + uint64_t sum = 0; + for (i=0; iidx : idx, i, &records, &v); + sum+=records; + if (stats&2 || !records) continue; + bcf_hrec_t *hrec = bcf_hdr_get_hrec(hdr, BCF_HL_CTG, "ID", seq[i], NULL); + int hkey = hrec ? bcf_hrec_find_key(hrec, "length") : -1; + printf("%s\t%s\t%" PRIu64 "\n", seq[i], hkey<0?".":hrec->vals[hkey], records); + } + if (!sum) + { + // No counts found. + // Is this because index version has no stored count data, or no records? + bcf1_t *rec = bcf_init1(); + if (bcf_read1(fp, hdr, rec) >= 0) + { + fprintf(stderr,"index of %s does not contain any count metadata. Please re-index with a newer version of bcftools or tabix.\n", fname); + return 1; + } + bcf_destroy1(rec); + } + if (stats&2) printf("%" PRIu64 "\n", sum); + free(seq); + hts_close(fp); + bcf_hdr_destroy(hdr); + if (tbx) + tbx_destroy(tbx); + if (idx) + hts_idx_destroy(idx); + return 0; +} + +int main_vcfindex(int argc, char *argv[]) +{ + int c, force = 0, tbi = 0, stats = 0, n_threads = 0; + int min_shift = BCF_LIDX_SHIFT; + char *outfn = NULL; + + static struct option loptions[] = + { + {"csi",no_argument,NULL,'c'}, + {"tbi",no_argument,NULL,'t'}, + {"force",no_argument,NULL,'f'}, + {"min-shift",required_argument,NULL,'m'}, + {"stats",no_argument,NULL,'s'}, + {"nrecords",no_argument,NULL,'n'}, + {"threads",required_argument,NULL,9}, + {"output-file",required_argument,NULL,'o'}, + {NULL, 0, NULL, 0} + }; + + char *tmp; + while ((c = getopt_long(argc, argv, "ctfm:sno:", loptions, NULL)) >= 0) + { + switch (c) + { + case 'c': tbi = 0; break; + case 't': tbi = 1; min_shift = 0; break; + case 'f': force = 1; break; + case 'm': + min_shift = strtol(optarg,&tmp,10); + if ( *tmp ) error("Could not parse argument: --min-shift %s\n", optarg); + break; + case 's': stats |= 1; break; + case 'n': stats |= 2; break; + case 9: + n_threads = strtol(optarg,&tmp,10); + if ( *tmp ) error("Could not parse argument: --threads %s\n", optarg); + break; + case 'o': outfn = optarg; break; + default: usage(); + } + } + if (stats>2) + { + fprintf(stderr, "[E::%s] expected only one of --stats or --nrecords options\n", __func__); + return 1; + } + if (tbi && min_shift>0) + { + fprintf(stderr, "[E::%s] min-shift option only expected for CSI indices \n", __func__); + return 1; + } + if (min_shift < 0 || min_shift > 30) + { + fprintf(stderr, "[E::%s] expected min_shift in range [0,30] (%d)\n", __func__, min_shift); + return 1; + } + + char *fname = NULL; + if ( optind>=argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin + else usage(); + } + else fname = argv[optind]; + if (stats) return vcf_index_stats(fname, stats); + + kstring_t idx_fname = {0,0,0}; + if (outfn) + kputs(outfn,&idx_fname); + else + { + if (!strcmp(fname, "-")) { fprintf(stderr, "[E::%s] must specify an output path for index file when reading VCF/BCF from stdin\n", __func__); return 1; } + ksprintf(&idx_fname, "%s.%s", fname, tbi ? "tbi" : "csi"); + } + if (!force) + { + // Before complaining about existing index, check if the VCF file isn't newer. + struct stat stat_tbi, stat_file; + if ( stat(idx_fname.s, &stat_tbi)==0 ) + { + stat(fname, &stat_file); + if ( stat_file.st_mtime <= stat_tbi.st_mtime ) + { + fprintf(stderr,"[E::%s] the index file exists. Please use '-f' to overwrite %s\n", __func__, idx_fname.s); + free(idx_fname.s); + return 1; + } + } + + // check for truncated files, allow only with -f + BGZF *fp = bgzf_open(fname, "r"); + if ( !fp ) error("index: failed to open %s\n", fname); + if ( bgzf_check_EOF(fp)!=1 ) error("index: the input is probably truncated, use -f to index anyway: %s\n", fname); + if ( bgzf_close(fp)!=0 ) error("index: close failed: %s\n", fname); + } + + int ret = bcf_index_build3(fname, idx_fname.s, min_shift, n_threads); + free(idx_fname.s); + if (ret != 0) { + if (ret == -2) + error("index: failed to open \"%s\"\n", fname); + else if (ret == -3) + error("index: \"%s\" is in a format that cannot be usefully indexed\n", fname); + else + error("index: failed to create index for \"%s\"\n", fname); + } + return 0; +} diff --git a/bcftools/vcfindex.c.pysam.c b/bcftools/vcfindex.c.pysam.c new file mode 100644 index 0000000..1e7578c --- /dev/null +++ b/bcftools/vcfindex.c.pysam.c @@ -0,0 +1,233 @@ +#include "bcftools.pysam.h" + +/* vcfindex.c -- Index bgzip compressed VCF/BCF files for random access. + + Copyright (C) 2014-2016 Genome Research Ltd. + + Author: Shane McCarthy + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#define __STDC_FORMAT_MACROS +#include +#include +#include +#include "bcftools.h" + +#define BCF_LIDX_SHIFT 14 + +static void usage(void) +{ + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "About: Index bgzip compressed VCF/BCF files for random access.\n"); + fprintf(bcftools_stderr, "Usage: bcftools index [options] |\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Indexing options:\n"); + fprintf(bcftools_stderr, " -c, --csi generate CSI-format index for VCF/BCF files [default]\n"); + fprintf(bcftools_stderr, " -f, --force overwrite index if it already exists\n"); + fprintf(bcftools_stderr, " -m, --min-shift INT set minimal interval size for CSI indices to 2^INT [14]\n"); + fprintf(bcftools_stderr, " -o, --output-file FILE optional output index file name\n"); + fprintf(bcftools_stderr, " -t, --tbi generate TBI-format index for VCF files\n"); + fprintf(bcftools_stderr, " --threads sets the number of threads [0]\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Stats options:\n"); + fprintf(bcftools_stderr, " -n, --nrecords print number of records based on existing index file\n"); + fprintf(bcftools_stderr, " -s, --stats print per contig stats based on existing index file\n"); + fprintf(bcftools_stderr, "\n"); + exit(1); +} + +int vcf_index_stats(char *fname, int stats) +{ + const char **seq; + int i, nseq; + tbx_t *tbx = NULL; + hts_idx_t *idx = NULL; + + htsFile *fp = hts_open(fname,"r"); + if ( !fp ) { fprintf(bcftools_stderr,"Could not read %s\n", fname); return 1; } + bcf_hdr_t *hdr = bcf_hdr_read(fp); + if ( !hdr ) { fprintf(bcftools_stderr,"Could not read the header: %s\n", fname); return 1; } + + if ( hts_get_format(fp)->format==vcf ) + { + tbx = tbx_index_load(fname); + if ( !tbx ) { fprintf(bcftools_stderr,"Could not load index for VCF: %s\n", fname); return 1; } + } + else if ( hts_get_format(fp)->format==bcf ) + { + idx = bcf_index_load(fname); + if ( !idx ) { fprintf(bcftools_stderr,"Could not load index for BCF file: %s\n", fname); return 1; } + } + else + { + fprintf(bcftools_stderr,"Could not detect the file type as VCF or BCF: %s\n", fname); + return 1; + } + + seq = tbx ? tbx_seqnames(tbx, &nseq) : bcf_index_seqnames(idx, hdr, &nseq); + uint64_t sum = 0; + for (i=0; iidx : idx, i, &records, &v); + sum+=records; + if (stats&2 || !records) continue; + bcf_hrec_t *hrec = bcf_hdr_get_hrec(hdr, BCF_HL_CTG, "ID", seq[i], NULL); + int hkey = hrec ? bcf_hrec_find_key(hrec, "length") : -1; + fprintf(bcftools_stdout, "%s\t%s\t%" PRIu64 "\n", seq[i], hkey<0?".":hrec->vals[hkey], records); + } + if (!sum) + { + // No counts found. + // Is this because index version has no stored count data, or no records? + bcf1_t *rec = bcf_init1(); + if (bcf_read1(fp, hdr, rec) >= 0) + { + fprintf(bcftools_stderr,"index of %s does not contain any count metadata. Please re-index with a newer version of bcftools or tabix.\n", fname); + return 1; + } + bcf_destroy1(rec); + } + if (stats&2) fprintf(bcftools_stdout, "%" PRIu64 "\n", sum); + free(seq); + hts_close(fp); + bcf_hdr_destroy(hdr); + if (tbx) + tbx_destroy(tbx); + if (idx) + hts_idx_destroy(idx); + return 0; +} + +int main_vcfindex(int argc, char *argv[]) +{ + int c, force = 0, tbi = 0, stats = 0, n_threads = 0; + int min_shift = BCF_LIDX_SHIFT; + char *outfn = NULL; + + static struct option loptions[] = + { + {"csi",no_argument,NULL,'c'}, + {"tbi",no_argument,NULL,'t'}, + {"force",no_argument,NULL,'f'}, + {"min-shift",required_argument,NULL,'m'}, + {"stats",no_argument,NULL,'s'}, + {"nrecords",no_argument,NULL,'n'}, + {"threads",required_argument,NULL,9}, + {"output-file",required_argument,NULL,'o'}, + {NULL, 0, NULL, 0} + }; + + char *tmp; + while ((c = getopt_long(argc, argv, "ctfm:sno:", loptions, NULL)) >= 0) + { + switch (c) + { + case 'c': tbi = 0; break; + case 't': tbi = 1; min_shift = 0; break; + case 'f': force = 1; break; + case 'm': + min_shift = strtol(optarg,&tmp,10); + if ( *tmp ) error("Could not parse argument: --min-shift %s\n", optarg); + break; + case 's': stats |= 1; break; + case 'n': stats |= 2; break; + case 9: + n_threads = strtol(optarg,&tmp,10); + if ( *tmp ) error("Could not parse argument: --threads %s\n", optarg); + break; + case 'o': outfn = optarg; break; + default: usage(); + } + } + if (stats>2) + { + fprintf(bcftools_stderr, "[E::%s] expected only one of --stats or --nrecords options\n", __func__); + return 1; + } + if (tbi && min_shift>0) + { + fprintf(bcftools_stderr, "[E::%s] min-shift option only expected for CSI indices \n", __func__); + return 1; + } + if (min_shift < 0 || min_shift > 30) + { + fprintf(bcftools_stderr, "[E::%s] expected min_shift in range [0,30] (%d)\n", __func__, min_shift); + return 1; + } + + char *fname = NULL; + if ( optind>=argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin + else usage(); + } + else fname = argv[optind]; + if (stats) return vcf_index_stats(fname, stats); + + kstring_t idx_fname = {0,0,0}; + if (outfn) + kputs(outfn,&idx_fname); + else + { + if (!strcmp(fname, "-")) { fprintf(bcftools_stderr, "[E::%s] must specify an output path for index file when reading VCF/BCF from stdin\n", __func__); return 1; } + ksprintf(&idx_fname, "%s.%s", fname, tbi ? "tbi" : "csi"); + } + if (!force) + { + // Before complaining about existing index, check if the VCF file isn't newer. + struct stat stat_tbi, stat_file; + if ( stat(idx_fname.s, &stat_tbi)==0 ) + { + stat(fname, &stat_file); + if ( stat_file.st_mtime <= stat_tbi.st_mtime ) + { + fprintf(bcftools_stderr,"[E::%s] the index file exists. Please use '-f' to overwrite %s\n", __func__, idx_fname.s); + free(idx_fname.s); + return 1; + } + } + + // check for truncated files, allow only with -f + BGZF *fp = bgzf_open(fname, "r"); + if ( !fp ) error("index: failed to open %s\n", fname); + if ( bgzf_check_EOF(fp)!=1 ) error("index: the input is probably truncated, use -f to index anyway: %s\n", fname); + if ( bgzf_close(fp)!=0 ) error("index: close failed: %s\n", fname); + } + + int ret = bcf_index_build3(fname, idx_fname.s, min_shift, n_threads); + free(idx_fname.s); + if (ret != 0) { + if (ret == -2) + error("index: failed to open \"%s\"\n", fname); + else if (ret == -3) + error("index: \"%s\" is in a format that cannot be usefully indexed\n", fname); + else + error("index: failed to create index for \"%s\"\n", fname); + } + return 0; +} diff --git a/bcftools/vcfisec.c b/bcftools/vcfisec.c new file mode 100644 index 0000000..3e0e1e5 --- /dev/null +++ b/bcftools/vcfisec.c @@ -0,0 +1,600 @@ +/* vcfisec.c -- Create intersections, unions and complements of VCF files. + + Copyright (C) 2012-2014 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "filter.h" + +#define OP_PLUS 1 +#define OP_MINUS 2 +#define OP_EQUAL 3 +#define OP_VENN 4 +#define OP_COMPLEMENT 5 +#define OP_EXACT 6 + +// Logic of the filters: include or exclude sites which match the filters? +#define FLT_INCLUDE 1 +#define FLT_EXCLUDE 2 + +typedef struct +{ + int isec_op, isec_n, *write, iwrite, nwrite, output_type, n_threads; + int nflt, *flt_logic; + filter_t **flt; + char **flt_expr; + bcf_srs_t *files; + FILE *fh_log, *fh_sites; + htsFile **fh_out; + char **argv, *prefix, *output_fname, **fnames, *write_files, *targets_list, *regions_list; + char *isec_exact; + int argc, record_cmd_line; +} +args_t; + +/** + * mkdir_p() - create new directory for a file $fname + * @fname: the file name to create the directory for, the part after last "/" is ignored + */ +void mkdir_p(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + int n = vsnprintf(NULL, 0, fmt, ap) + 2; + va_end(ap); + + char *path = (char*)malloc(n); + va_start(ap, fmt); + vsnprintf(path, n, fmt, ap); + va_end(ap); + + char *tmp = strdup(path), *p = tmp+1; + while (*p) + { + while (*p && *p!='/') p++; + if ( !*p ) break; + char ctmp = *p; + *p = 0; + int ret = mkdir(tmp,S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + if ( ret!=0 && errno!=EEXIST ) error("Error creating directory %s: %s\n", path,strerror(errno)); + *p = ctmp; + while ( *p && *p=='/' ) p++; + } + free(tmp); + free(path); +} + +/** + * open_file() - open new file creating the file name using vsnprintf + * @fname: if not NULL, on output will point to newly allocated fname string + * @mode: if NULL, only the file name string will be created + * @fmt: vsnprintf format and args + * + * Returns open file descriptor or NULL if mode is NULL. + */ +FILE *open_file(char **fname, const char *mode, const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + int n = vsnprintf(NULL, 0, fmt, ap) + 2; + va_end(ap); + + char *str = (char*)malloc(n); + va_start(ap, fmt); + vsnprintf(str, n, fmt, ap); + va_end(ap); + + mkdir_p(str); + if ( !mode ) + { + if ( !fname ) error("Uh: expected fname or mode\n"); + *fname = str; + return NULL; + } + + FILE *fp = fopen(str,mode); + if ( fname ) *fname = str; + else free(str); + return fp; +} + +void isec_vcf(args_t *args) +{ + bcf_srs_t *files = args->files; + kstring_t str = {0,0,0}; + htsFile *out_fh = NULL; + + // When only one VCF is output, print VCF to stdout or -o file + int out_std = 0; + if ( args->nwrite==1 && !args->prefix ) out_std = 1; + if ( args->targets_list && files->nreaders==1 ) out_std = 1; + if ( out_std ) + { + out_fh = hts_open(args->output_fname? args->output_fname : "-",hts_bcf_wmode(args->output_type)); + if ( out_fh == NULL ) error("Can't write to %s: %s\n", args->output_fname? args->output_fname : "standard output", strerror(errno)); + if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads); + if (args->record_cmd_line) bcf_hdr_append_version(files->readers[args->iwrite].header,args->argc,args->argv,"bcftools_isec"); + bcf_hdr_write(out_fh, files->readers[args->iwrite].header); + } + if ( !args->nwrite && !out_std && !args->prefix ) + fprintf(stderr,"Note: -w option not given, printing list of sites...\n"); + + int n; + while ( (n=bcf_sr_next_line(files)) ) + { + bcf_sr_t *reader = NULL; + bcf1_t *line = NULL; + int i, ret = 0; + for (i=0; inreaders; i++) + { + if ( !bcf_sr_has_line(files,i) ) continue; + + if ( args->nflt && args->flt[i] ) + { + bcf1_t *rec = bcf_sr_get_line(files, i); + int pass = filter_test(args->flt[i], rec, NULL); + if ( args->flt_logic[i] & FLT_EXCLUDE ) pass = pass ? 0 : 1; + if ( !pass ) + { + files->has_line[i] = 0; + n--; + continue; + } + } + + if ( !line ) + { + line = files->readers[i].buffer[0]; + reader = &files->readers[i]; + } + ret |= 1<isec_op) + { + case OP_COMPLEMENT: if ( n!=1 || !bcf_sr_has_line(files,0) ) continue; break; + case OP_EQUAL: if ( n != args->isec_n ) continue; break; + case OP_PLUS: if ( n < args->isec_n ) continue; break; + case OP_MINUS: if ( n > args->isec_n ) continue; break; + case OP_EXACT: + for (i=0; inreaders; i++) + if ( files->has_line[i] != args->isec_exact[i] ) break; + if ( inreaders ) continue; + break; + } + + if ( out_std ) + { + if ( bcf_sr_has_line(files,args->iwrite) ) + bcf_write1(out_fh, files->readers[args->iwrite].header, files->readers[args->iwrite].buffer[0]); + continue; + } + else if ( args->fh_sites ) + { + str.l = 0; + kputs(reader->header->id[BCF_DT_CTG][line->rid].key, &str); kputc('\t', &str); + kputw(line->pos+1, &str); kputc('\t', &str); + if (line->n_allele > 0) kputs(line->d.allele[0], &str); + else kputc('.', &str); + kputc('\t', &str); + if (line->n_allele > 1) kputs(line->d.allele[1], &str); + else kputc('.', &str); + for (i=2; in_allele; i++) + { + kputc(',', &str); + kputs(line->d.allele[i], &str); + } + kputc('\t', &str); + for (i=0; inreaders; i++) + kputc(bcf_sr_has_line(files,i)?'1':'0', &str); + kputc('\n', &str); + fwrite(str.s,sizeof(char),str.l,args->fh_sites); + } + + if ( args->prefix ) + { + if ( args->isec_op==OP_VENN && ret==3 ) + { + if ( !args->nwrite || args->write[0] ) + bcf_write1(args->fh_out[2], bcf_sr_get_header(files,0), bcf_sr_get_line(files,0)); + if ( !args->nwrite || args->write[1] ) + bcf_write1(args->fh_out[3], bcf_sr_get_header(files,1), bcf_sr_get_line(files,1)); + } + else + { + for (i=0; inreaders; i++) + { + if ( !bcf_sr_has_line(files,i) ) continue; + if ( args->write && !args->write[i] ) continue; + bcf_write1(args->fh_out[i], files->readers[i].header, files->readers[i].buffer[0]); + } + } + } + } + if ( str.s ) free(str.s); + if ( out_fh ) hts_close(out_fh); +} + +static void add_filter(args_t *args, char *expr, int logic) +{ + args->nflt++; + args->flt_expr = (char**) realloc(args->flt_expr,sizeof(char*)*args->nflt); + args->flt_logic = (int*) realloc(args->flt_logic,sizeof(int)*args->nflt); + args->flt = (filter_t**) realloc(args->flt,sizeof(filter_t*)*args->nflt); + if ( expr[0]=='-' && expr[1]==0 ) + { + args->flt_expr[args->nflt-1] = NULL; + args->flt[args->nflt-1] = NULL; + } + else + args->flt_expr[args->nflt-1] = expr; + args->flt_logic[args->nflt-1] = logic; +} + +static void destroy_data(args_t *args); +static void init_data(args_t *args) +{ + int i; + if ( args->nflt ) + { + if ( args->nflt > 1 && args->nflt!=args->files->nreaders ) + error("Error: expected either one -i/-e option or as many as there are input files\n"); + if ( args->nflt < args->files->nreaders ) + { + if ( !args->flt_expr[0] ) error("Error: useless use of -i/-e\n"); + args->nflt = args->files->nreaders; + args->flt_expr = (char**) realloc(args->flt_expr,sizeof(char*)*args->nflt); + args->flt_logic = (int*) realloc(args->flt_logic,sizeof(int)*args->nflt); + args->flt = (filter_t**) realloc(args->flt,sizeof(filter_t*)*args->nflt); + for (i=1; inflt; i++) + { + args->flt_expr[i] = args->flt_expr[0]; + args->flt_logic[i] = args->flt_logic[0]; + args->flt[i] = filter_init(args->files->readers[i].header,args->flt_expr[i]); + } + args->flt[0] = filter_init(args->files->readers[0].header,args->flt_expr[0]); + } + else + { + for (i=0; ifiles->nreaders; i++) + { + if ( !args->flt_expr[i] ) continue; + args->flt[i] = filter_init(args->files->readers[i].header,args->flt_expr[i]); + } + } + } + + if ( args->isec_op==OP_EXACT ) + { + if ( strlen(args->isec_exact)!=args->files->nreaders ) + error("The number of files does not match the bitmask: %d vs %s\n", args->files->nreaders,args->isec_exact); + for (i=0; ifiles->nreaders; i++) + if ( args->isec_exact[i]!='0' && args->isec_exact[i]!='1' ) error("Unexpected bitmask: %s\n",args->isec_exact); + for (i=0; ifiles->nreaders; i++) + args->isec_exact[i] -= '0'; + } + + // Which files to write: parse the string passed with -w + char *p = args->write_files; + while (p && *p) + { + if ( !args->write ) args->write = (int*) calloc(args->files->nreaders,sizeof(int)); + if ( sscanf(p,"%d",&i)!=1 ) error("Could not parse --write %s\n", args->write_files); + if ( i<0 || i>args->files->nreaders ) error("The index is out of range: %d (%s)\n", i, args->write_files); + args->write[i-1] = 1; + args->iwrite = i-1; + args->nwrite++; + while (*p && *p!=',') p++; + if ( *p==',' ) p++; + } + if ( args->nwrite>1 && !args->prefix ) error("Expected -p when multiple output files given: --write %s\n", args->write_files); + if ( args->isec_op==OP_COMPLEMENT && args->nwrite ) + { + if ( args->nwrite>1 ) error("Multiple files to -w make no sense with -C\n"); + if ( !args->write[0] ) error("Only -w1 makes sense with -C\n"); + } + + if ( args->prefix ) + { + // Init output directory and create the readme file + args->fh_log = open_file(NULL,"w","%s/README.txt", args->prefix); + if ( !args->fh_log ) error("%s/README.txt: %s\n", args->prefix, strerror(errno)); + + fprintf(args->fh_log,"This file was produced by vcfisec.\n"); + fprintf(args->fh_log,"The command line was:\tbcftools %s ", args->argv[0]); + int i; + for (i=1; iargc; i++) fprintf(args->fh_log," %s",args->argv[i]); + fprintf(args->fh_log,"\n\nUsing the following file names:\n"); + + const char *suffix = "vcf"; + if ( args->output_type & FT_BCF ) suffix = "bcf"; + else if ( args->output_type & FT_GZ ) suffix = "vcf.gz"; + + // Open output files and write the legend + if ( args->isec_op==OP_VENN ) + { + args->fh_out = (htsFile**) malloc(sizeof(htsFile*)*4); + args->fnames = (char**) calloc(4,sizeof(char*)); + + #define OPEN_FILE(i,j) { \ + open_file(&args->fnames[i], NULL, "%s/%04d.%s", args->prefix, i, suffix); \ + args->fh_out[i] = hts_open(args->fnames[i], hts_bcf_wmode(args->output_type)); \ + if ( !args->fh_out[i] ) error("Could not open %s\n", args->fnames[i]); \ + if ( args->n_threads ) hts_set_threads(args->fh_out[i], args->n_threads); \ + if (args->record_cmd_line) bcf_hdr_append_version(args->files->readers[j].header,args->argc,args->argv,"bcftools_isec"); \ + bcf_hdr_write(args->fh_out[i], args->files->readers[j].header); \ + } + if ( !args->nwrite || args->write[0] ) + { + OPEN_FILE(0,0); + fprintf(args->fh_log,"%s\tfor records private to\t%s\n", args->fnames[0], args->files->readers[0].fname); + } + if ( !args->nwrite || args->write[1] ) + { + OPEN_FILE(1,1); + fprintf(args->fh_log,"%s\tfor records private to\t%s\n", args->fnames[1], args->files->readers[1].fname); + } + if ( !args->nwrite || args->write[0] ) + { + OPEN_FILE(2,0); + fprintf(args->fh_log,"%s\tfor records from %s shared by both\t%s %s\n", args->fnames[2], args->files->readers[0].fname, args->files->readers[0].fname, args->files->readers[1].fname); + } + if ( !args->nwrite || args->write[1] ) + { + OPEN_FILE(3,1); + fprintf(args->fh_log,"%s\tfor records from %s shared by both\t%s %s\n", args->fnames[3], args->files->readers[1].fname, args->files->readers[0].fname, args->files->readers[1].fname); + } + } + else + { + // Init one output file for each reader + args->fh_out = (htsFile**) calloc(args->files->nreaders, sizeof(htsFile*)); + args->fnames = (char**) calloc(args->files->nreaders, sizeof(char*)); + + for (i=0; ifiles->nreaders; i++) + { + if ( args->write && !args->write[i] ) continue; + if ( args->isec_op==OP_COMPLEMENT && i>0 ) break; + OPEN_FILE(i,i); + fprintf(args->fh_log,"%s\tfor stripped\t%s\n", args->fnames[i], args->files->readers[i].fname); + } + #undef OPEN_FILE + + args->fh_sites = open_file(NULL, "w", "%s/sites.txt", args->prefix); + if ( !args->fh_sites ) error("%s/sites.txt: %s\n", args->prefix, strerror(errno)); + } + } + else { + if (args->output_fname) { + args->fh_sites = fopen(args->output_fname, "w"); + if ( args->fh_sites == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno)); + } + else + args->fh_sites = stdout; + } +} + +static void destroy_data(args_t *args) +{ + int i; + if ( args->nflt ) + { + for (i=0; inflt; i++) + { + if ( !args->flt[i] ) continue; + filter_destroy(args->flt[i]); + } + free(args->flt_expr); + free(args->flt); + free(args->flt_logic); + } + if ( args->prefix ) + { + fclose(args->fh_log); + int n = args->isec_op==OP_VENN ? 4 : args->files->nreaders; + for (i=0; ifnames[i] ) continue; + hts_close(args->fh_out[i]); + if ( args->output_type==FT_VCF_GZ ) + { + tbx_conf_t conf = tbx_conf_vcf; + tbx_index_build(args->fnames[i], -1, &conf); + } + else if ( args->output_type==FT_BCF_GZ ) + { + if ( bcf_index_build(args->fnames[i],14) ) error("Could not index %s\n", args->fnames[i]); + } + free(args->fnames[i]); + } + free(args->fh_out); + free(args->fnames); + if ( args->fh_sites ) fclose(args->fh_sites); + if ( args->write ) free(args->write); + } +} + +static void usage(void) +{ + fprintf(stderr, "\n"); + fprintf(stderr, "About: Create intersections, unions and complements of VCF files.\n"); + fprintf(stderr, "Usage: bcftools isec [options] [...]\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " -c, --collapse treat as identical records with , see man page for details [none]\n"); + fprintf(stderr, " -C, --complement output positions present only in the first file but missing in the others\n"); + fprintf(stderr, " -e, --exclude exclude sites for which the expression is true\n"); + fprintf(stderr, " -f, --apply-filters require at least one of the listed FILTER strings (e.g. \"PASS,.\")\n"); + fprintf(stderr, " -i, --include include only sites for which the expression is true\n"); + fprintf(stderr, " --no-version do not append version and command line to the header\n"); + fprintf(stderr, " -n, --nfiles [+-=~] output positions present in this many (=), this many or more (+), this many or fewer (-), the exact (~) files\n"); + fprintf(stderr, " -o, --output write output to a file [standard output]\n"); + fprintf(stderr, " -O, --output-type b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"); + fprintf(stderr, " -p, --prefix if given, subset each of the input files accordingly, see also -w\n"); + fprintf(stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(stderr, " -t, --targets similar to -r but streams rather than index-jumps\n"); + fprintf(stderr, " -T, --targets-file similar to -R but streams rather than index-jumps\n"); + fprintf(stderr, " --threads number of extra output compression threads [0]\n"); + fprintf(stderr, " -w, --write list of files to write with -p given as 1-based indexes. By default, all files are written\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Examples:\n"); + fprintf(stderr, " # Create intersection and complements of two sets saving the output in dir/*\n"); + fprintf(stderr, " bcftools isec A.vcf.gz B.vcf.gz -p dir\n"); + fprintf(stderr, "\n"); + fprintf(stderr, " # Filter sites in A and B (but not in C) and create intersection\n"); + fprintf(stderr, " bcftools isec -e'MAF<0.01' -i'dbSNP=1' -e - A.vcf.gz B.vcf.gz C.vcf.gz -p dir\n"); + fprintf(stderr, "\n"); + fprintf(stderr, " # Extract and write records from A shared by both A and B using exact allele match\n"); + fprintf(stderr, " bcftools isec A.vcf.gz B.vcf.gz -p dir -n =2 -w 1\n"); + fprintf(stderr, "\n"); + fprintf(stderr, " # Extract records private to A or B comparing by position only\n"); + fprintf(stderr, " bcftools isec A.vcf.gz B.vcf.gz -p dir -n -1 -c all\n"); + fprintf(stderr, "\n"); + exit(1); +} + +int main_vcfisec(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->files = bcf_sr_init(); + args->argc = argc; args->argv = argv; + args->output_fname = NULL; + args->output_type = FT_VCF; + args->n_threads = 0; + args->record_cmd_line = 1; + int targets_is_file = 0, regions_is_file = 0; + + static struct option loptions[] = + { + {"help",no_argument,NULL,'h'}, + {"exclude",required_argument,NULL,'e'}, + {"include",required_argument,NULL,'i'}, + {"collapse",required_argument,NULL,'c'}, + {"complement",no_argument,NULL,'C'}, + {"apply-filters",required_argument,NULL,'f'}, + {"nfiles",required_argument,NULL,'n'}, + {"prefix",required_argument,NULL,'p'}, + {"write",required_argument,NULL,'w'}, + {"targets",required_argument,NULL,'t'}, + {"targets-file",required_argument,NULL,'T'}, + {"regions",required_argument,NULL,'r'}, + {"regions-file",required_argument,NULL,'R'}, + {"output",required_argument,NULL,'o'}, + {"output-type",required_argument,NULL,'O'}, + {"threads",required_argument,NULL,9}, + {"no-version",no_argument,NULL,8}, + {NULL,0,NULL,0} + }; + while ((c = getopt_long(argc, argv, "hc:r:R:p:n:w:t:T:Cf:o:O:i:e:",loptions,NULL)) >= 0) { + switch (c) { + case 'o': args->output_fname = optarg; break; + case 'O': + switch (optarg[0]) { + case 'b': args->output_type = FT_BCF_GZ; break; + case 'u': args->output_type = FT_BCF; break; + case 'z': args->output_type = FT_VCF_GZ; break; + case 'v': args->output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + } + break; + case 'c': + if ( !strcmp(optarg,"snps") ) args->files->collapse |= COLLAPSE_SNPS; + else if ( !strcmp(optarg,"indels") ) args->files->collapse |= COLLAPSE_INDELS; + else if ( !strcmp(optarg,"both") ) args->files->collapse |= COLLAPSE_SNPS | COLLAPSE_INDELS; + else if ( !strcmp(optarg,"any") ) args->files->collapse |= COLLAPSE_ANY; + else if ( !strcmp(optarg,"all") ) args->files->collapse |= COLLAPSE_ANY; + else if ( !strcmp(optarg,"some") ) args->files->collapse |= COLLAPSE_SOME; + else if ( !strcmp(optarg,"none") ) args->files->collapse = COLLAPSE_NONE; + else error("The --collapse string \"%s\" not recognised.\n", optarg); + break; + case 'f': args->files->apply_filters = optarg; break; + case 'C': args->isec_op = OP_COMPLEMENT; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; regions_is_file = 1; break; + case 't': args->targets_list = optarg; break; + case 'T': args->targets_list = optarg; targets_is_file = 1; break; + case 'p': args->prefix = optarg; break; + case 'w': args->write_files = optarg; break; + case 'i': add_filter(args, optarg, FLT_INCLUDE); break; + case 'e': add_filter(args, optarg, FLT_EXCLUDE); break; + case 'n': + { + char *p = optarg; + if ( *p=='-' ) { args->isec_op = OP_MINUS; p++; } + else if ( *p=='+' ) { args->isec_op = OP_PLUS; p++; } + else if ( *p=='=' ) { args->isec_op = OP_EQUAL; p++; } + else if ( *p=='~' ) { args->isec_op = OP_EXACT; p++; } + else if ( isdigit(*p) ) args->isec_op = OP_EQUAL; + else error("Could not parse --nfiles %s\n", optarg); + if ( args->isec_op == OP_EXACT ) args->isec_exact = p; + else if ( sscanf(p,"%d",&args->isec_n)!=1 ) error("Could not parse --nfiles %s\n", optarg); + } + break; + case 9 : args->n_threads = strtol(optarg, 0, 0); break; + case 8 : args->record_cmd_line = 0; break; + case 'h': + case '?': usage(); + default: error("Unknown argument: %s\n", optarg); + } + } + if ( argc-optind<1 ) usage(); // no file given + if ( args->targets_list && bcf_sr_set_targets(args->files, args->targets_list, targets_is_file,0)<0 ) + error("Failed to read the targets: %s\n", args->targets_list); + if ( args->regions_list && bcf_sr_set_regions(args->files, args->regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + if ( argc-optind==2 && !args->isec_op ) + { + args->isec_op = OP_VENN; + if ( !args->prefix ) error("Expected the -p option\n"); + } + if ( !args->targets_list ) + { + if ( argc-optind<2 ) error("Expected multiple files or the --targets option\n"); + if ( !args->isec_op ) error("Expected two file names or one of the options --complement, --nfiles or --targets\n"); + } + args->files->require_index = 1; + while (optindfiles, argv[optind]) ) error("Failed to open %s: %s\n", argv[optind],bcf_sr_strerror(args->files->errnum)); + optind++; + } + init_data(args); + isec_vcf(args); + destroy_data(args); + bcf_sr_destroy(args->files); + free(args); + return 0; +} + diff --git a/bcftools/vcfisec.c.pysam.c b/bcftools/vcfisec.c.pysam.c new file mode 100644 index 0000000..d168457 --- /dev/null +++ b/bcftools/vcfisec.c.pysam.c @@ -0,0 +1,602 @@ +#include "bcftools.pysam.h" + +/* vcfisec.c -- Create intersections, unions and complements of VCF files. + + Copyright (C) 2012-2014 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "filter.h" + +#define OP_PLUS 1 +#define OP_MINUS 2 +#define OP_EQUAL 3 +#define OP_VENN 4 +#define OP_COMPLEMENT 5 +#define OP_EXACT 6 + +// Logic of the filters: include or exclude sites which match the filters? +#define FLT_INCLUDE 1 +#define FLT_EXCLUDE 2 + +typedef struct +{ + int isec_op, isec_n, *write, iwrite, nwrite, output_type, n_threads; + int nflt, *flt_logic; + filter_t **flt; + char **flt_expr; + bcf_srs_t *files; + FILE *fh_log, *fh_sites; + htsFile **fh_out; + char **argv, *prefix, *output_fname, **fnames, *write_files, *targets_list, *regions_list; + char *isec_exact; + int argc, record_cmd_line; +} +args_t; + +/** + * mkdir_p() - create new directory for a file $fname + * @fname: the file name to create the directory for, the part after last "/" is ignored + */ +void mkdir_p(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + int n = vsnprintf(NULL, 0, fmt, ap) + 2; + va_end(ap); + + char *path = (char*)malloc(n); + va_start(ap, fmt); + vsnprintf(path, n, fmt, ap); + va_end(ap); + + char *tmp = strdup(path), *p = tmp+1; + while (*p) + { + while (*p && *p!='/') p++; + if ( !*p ) break; + char ctmp = *p; + *p = 0; + int ret = mkdir(tmp,S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + if ( ret!=0 && errno!=EEXIST ) error("Error creating directory %s: %s\n", path,strerror(errno)); + *p = ctmp; + while ( *p && *p=='/' ) p++; + } + free(tmp); + free(path); +} + +/** + * open_file() - open new file creating the file name using vsnprintf + * @fname: if not NULL, on output will point to newly allocated fname string + * @mode: if NULL, only the file name string will be created + * @fmt: vsnprintf format and args + * + * Returns open file descriptor or NULL if mode is NULL. + */ +FILE *open_file(char **fname, const char *mode, const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + int n = vsnprintf(NULL, 0, fmt, ap) + 2; + va_end(ap); + + char *str = (char*)malloc(n); + va_start(ap, fmt); + vsnprintf(str, n, fmt, ap); + va_end(ap); + + mkdir_p(str); + if ( !mode ) + { + if ( !fname ) error("Uh: expected fname or mode\n"); + *fname = str; + return NULL; + } + + FILE *fp = fopen(str,mode); + if ( fname ) *fname = str; + else free(str); + return fp; +} + +void isec_vcf(args_t *args) +{ + bcf_srs_t *files = args->files; + kstring_t str = {0,0,0}; + htsFile *out_fh = NULL; + + // When only one VCF is output, print VCF to bcftools_stdout or -o file + int out_std = 0; + if ( args->nwrite==1 && !args->prefix ) out_std = 1; + if ( args->targets_list && files->nreaders==1 ) out_std = 1; + if ( out_std ) + { + out_fh = hts_open(args->output_fname? args->output_fname : "-",hts_bcf_wmode(args->output_type)); + if ( out_fh == NULL ) error("Can't write to %s: %s\n", args->output_fname? args->output_fname : "standard output", strerror(errno)); + if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads); + if (args->record_cmd_line) bcf_hdr_append_version(files->readers[args->iwrite].header,args->argc,args->argv,"bcftools_isec"); + bcf_hdr_write(out_fh, files->readers[args->iwrite].header); + } + if ( !args->nwrite && !out_std && !args->prefix ) + fprintf(bcftools_stderr,"Note: -w option not given, printing list of sites...\n"); + + int n; + while ( (n=bcf_sr_next_line(files)) ) + { + bcf_sr_t *reader = NULL; + bcf1_t *line = NULL; + int i, ret = 0; + for (i=0; inreaders; i++) + { + if ( !bcf_sr_has_line(files,i) ) continue; + + if ( args->nflt && args->flt[i] ) + { + bcf1_t *rec = bcf_sr_get_line(files, i); + int pass = filter_test(args->flt[i], rec, NULL); + if ( args->flt_logic[i] & FLT_EXCLUDE ) pass = pass ? 0 : 1; + if ( !pass ) + { + files->has_line[i] = 0; + n--; + continue; + } + } + + if ( !line ) + { + line = files->readers[i].buffer[0]; + reader = &files->readers[i]; + } + ret |= 1<isec_op) + { + case OP_COMPLEMENT: if ( n!=1 || !bcf_sr_has_line(files,0) ) continue; break; + case OP_EQUAL: if ( n != args->isec_n ) continue; break; + case OP_PLUS: if ( n < args->isec_n ) continue; break; + case OP_MINUS: if ( n > args->isec_n ) continue; break; + case OP_EXACT: + for (i=0; inreaders; i++) + if ( files->has_line[i] != args->isec_exact[i] ) break; + if ( inreaders ) continue; + break; + } + + if ( out_std ) + { + if ( bcf_sr_has_line(files,args->iwrite) ) + bcf_write1(out_fh, files->readers[args->iwrite].header, files->readers[args->iwrite].buffer[0]); + continue; + } + else if ( args->fh_sites ) + { + str.l = 0; + kputs(reader->header->id[BCF_DT_CTG][line->rid].key, &str); kputc('\t', &str); + kputw(line->pos+1, &str); kputc('\t', &str); + if (line->n_allele > 0) kputs(line->d.allele[0], &str); + else kputc('.', &str); + kputc('\t', &str); + if (line->n_allele > 1) kputs(line->d.allele[1], &str); + else kputc('.', &str); + for (i=2; in_allele; i++) + { + kputc(',', &str); + kputs(line->d.allele[i], &str); + } + kputc('\t', &str); + for (i=0; inreaders; i++) + kputc(bcf_sr_has_line(files,i)?'1':'0', &str); + kputc('\n', &str); + fwrite(str.s,sizeof(char),str.l,args->fh_sites); + } + + if ( args->prefix ) + { + if ( args->isec_op==OP_VENN && ret==3 ) + { + if ( !args->nwrite || args->write[0] ) + bcf_write1(args->fh_out[2], bcf_sr_get_header(files,0), bcf_sr_get_line(files,0)); + if ( !args->nwrite || args->write[1] ) + bcf_write1(args->fh_out[3], bcf_sr_get_header(files,1), bcf_sr_get_line(files,1)); + } + else + { + for (i=0; inreaders; i++) + { + if ( !bcf_sr_has_line(files,i) ) continue; + if ( args->write && !args->write[i] ) continue; + bcf_write1(args->fh_out[i], files->readers[i].header, files->readers[i].buffer[0]); + } + } + } + } + if ( str.s ) free(str.s); + if ( out_fh ) hts_close(out_fh); +} + +static void add_filter(args_t *args, char *expr, int logic) +{ + args->nflt++; + args->flt_expr = (char**) realloc(args->flt_expr,sizeof(char*)*args->nflt); + args->flt_logic = (int*) realloc(args->flt_logic,sizeof(int)*args->nflt); + args->flt = (filter_t**) realloc(args->flt,sizeof(filter_t*)*args->nflt); + if ( expr[0]=='-' && expr[1]==0 ) + { + args->flt_expr[args->nflt-1] = NULL; + args->flt[args->nflt-1] = NULL; + } + else + args->flt_expr[args->nflt-1] = expr; + args->flt_logic[args->nflt-1] = logic; +} + +static void destroy_data(args_t *args); +static void init_data(args_t *args) +{ + int i; + if ( args->nflt ) + { + if ( args->nflt > 1 && args->nflt!=args->files->nreaders ) + error("Error: expected either one -i/-e option or as many as there are input files\n"); + if ( args->nflt < args->files->nreaders ) + { + if ( !args->flt_expr[0] ) error("Error: useless use of -i/-e\n"); + args->nflt = args->files->nreaders; + args->flt_expr = (char**) realloc(args->flt_expr,sizeof(char*)*args->nflt); + args->flt_logic = (int*) realloc(args->flt_logic,sizeof(int)*args->nflt); + args->flt = (filter_t**) realloc(args->flt,sizeof(filter_t*)*args->nflt); + for (i=1; inflt; i++) + { + args->flt_expr[i] = args->flt_expr[0]; + args->flt_logic[i] = args->flt_logic[0]; + args->flt[i] = filter_init(args->files->readers[i].header,args->flt_expr[i]); + } + args->flt[0] = filter_init(args->files->readers[0].header,args->flt_expr[0]); + } + else + { + for (i=0; ifiles->nreaders; i++) + { + if ( !args->flt_expr[i] ) continue; + args->flt[i] = filter_init(args->files->readers[i].header,args->flt_expr[i]); + } + } + } + + if ( args->isec_op==OP_EXACT ) + { + if ( strlen(args->isec_exact)!=args->files->nreaders ) + error("The number of files does not match the bitmask: %d vs %s\n", args->files->nreaders,args->isec_exact); + for (i=0; ifiles->nreaders; i++) + if ( args->isec_exact[i]!='0' && args->isec_exact[i]!='1' ) error("Unexpected bitmask: %s\n",args->isec_exact); + for (i=0; ifiles->nreaders; i++) + args->isec_exact[i] -= '0'; + } + + // Which files to write: parse the string passed with -w + char *p = args->write_files; + while (p && *p) + { + if ( !args->write ) args->write = (int*) calloc(args->files->nreaders,sizeof(int)); + if ( sscanf(p,"%d",&i)!=1 ) error("Could not parse --write %s\n", args->write_files); + if ( i<0 || i>args->files->nreaders ) error("The index is out of range: %d (%s)\n", i, args->write_files); + args->write[i-1] = 1; + args->iwrite = i-1; + args->nwrite++; + while (*p && *p!=',') p++; + if ( *p==',' ) p++; + } + if ( args->nwrite>1 && !args->prefix ) error("Expected -p when multiple output files given: --write %s\n", args->write_files); + if ( args->isec_op==OP_COMPLEMENT && args->nwrite ) + { + if ( args->nwrite>1 ) error("Multiple files to -w make no sense with -C\n"); + if ( !args->write[0] ) error("Only -w1 makes sense with -C\n"); + } + + if ( args->prefix ) + { + // Init output directory and create the readme file + args->fh_log = open_file(NULL,"w","%s/README.txt", args->prefix); + if ( !args->fh_log ) error("%s/README.txt: %s\n", args->prefix, strerror(errno)); + + fprintf(args->fh_log,"This file was produced by vcfisec.\n"); + fprintf(args->fh_log,"The command line was:\tbcftools %s ", args->argv[0]); + int i; + for (i=1; iargc; i++) fprintf(args->fh_log," %s",args->argv[i]); + fprintf(args->fh_log,"\n\nUsing the following file names:\n"); + + const char *suffix = "vcf"; + if ( args->output_type & FT_BCF ) suffix = "bcf"; + else if ( args->output_type & FT_GZ ) suffix = "vcf.gz"; + + // Open output files and write the legend + if ( args->isec_op==OP_VENN ) + { + args->fh_out = (htsFile**) malloc(sizeof(htsFile*)*4); + args->fnames = (char**) calloc(4,sizeof(char*)); + + #define OPEN_FILE(i,j) { \ + open_file(&args->fnames[i], NULL, "%s/%04d.%s", args->prefix, i, suffix); \ + args->fh_out[i] = hts_open(args->fnames[i], hts_bcf_wmode(args->output_type)); \ + if ( !args->fh_out[i] ) error("Could not open %s\n", args->fnames[i]); \ + if ( args->n_threads ) hts_set_threads(args->fh_out[i], args->n_threads); \ + if (args->record_cmd_line) bcf_hdr_append_version(args->files->readers[j].header,args->argc,args->argv,"bcftools_isec"); \ + bcf_hdr_write(args->fh_out[i], args->files->readers[j].header); \ + } + if ( !args->nwrite || args->write[0] ) + { + OPEN_FILE(0,0); + fprintf(args->fh_log,"%s\tfor records private to\t%s\n", args->fnames[0], args->files->readers[0].fname); + } + if ( !args->nwrite || args->write[1] ) + { + OPEN_FILE(1,1); + fprintf(args->fh_log,"%s\tfor records private to\t%s\n", args->fnames[1], args->files->readers[1].fname); + } + if ( !args->nwrite || args->write[0] ) + { + OPEN_FILE(2,0); + fprintf(args->fh_log,"%s\tfor records from %s shared by both\t%s %s\n", args->fnames[2], args->files->readers[0].fname, args->files->readers[0].fname, args->files->readers[1].fname); + } + if ( !args->nwrite || args->write[1] ) + { + OPEN_FILE(3,1); + fprintf(args->fh_log,"%s\tfor records from %s shared by both\t%s %s\n", args->fnames[3], args->files->readers[1].fname, args->files->readers[0].fname, args->files->readers[1].fname); + } + } + else + { + // Init one output file for each reader + args->fh_out = (htsFile**) calloc(args->files->nreaders, sizeof(htsFile*)); + args->fnames = (char**) calloc(args->files->nreaders, sizeof(char*)); + + for (i=0; ifiles->nreaders; i++) + { + if ( args->write && !args->write[i] ) continue; + if ( args->isec_op==OP_COMPLEMENT && i>0 ) break; + OPEN_FILE(i,i); + fprintf(args->fh_log,"%s\tfor stripped\t%s\n", args->fnames[i], args->files->readers[i].fname); + } + #undef OPEN_FILE + + args->fh_sites = open_file(NULL, "w", "%s/sites.txt", args->prefix); + if ( !args->fh_sites ) error("%s/sites.txt: %s\n", args->prefix, strerror(errno)); + } + } + else { + if (args->output_fname) { + args->fh_sites = fopen(args->output_fname, "w"); + if ( args->fh_sites == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno)); + } + else + args->fh_sites = bcftools_stdout; + } +} + +static void destroy_data(args_t *args) +{ + int i; + if ( args->nflt ) + { + for (i=0; inflt; i++) + { + if ( !args->flt[i] ) continue; + filter_destroy(args->flt[i]); + } + free(args->flt_expr); + free(args->flt); + free(args->flt_logic); + } + if ( args->prefix ) + { + fclose(args->fh_log); + int n = args->isec_op==OP_VENN ? 4 : args->files->nreaders; + for (i=0; ifnames[i] ) continue; + hts_close(args->fh_out[i]); + if ( args->output_type==FT_VCF_GZ ) + { + tbx_conf_t conf = tbx_conf_vcf; + tbx_index_build(args->fnames[i], -1, &conf); + } + else if ( args->output_type==FT_BCF_GZ ) + { + if ( bcf_index_build(args->fnames[i],14) ) error("Could not index %s\n", args->fnames[i]); + } + free(args->fnames[i]); + } + free(args->fh_out); + free(args->fnames); + if ( args->fh_sites ) fclose(args->fh_sites); + if ( args->write ) free(args->write); + } +} + +static void usage(void) +{ + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "About: Create intersections, unions and complements of VCF files.\n"); + fprintf(bcftools_stderr, "Usage: bcftools isec [options] [...]\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Options:\n"); + fprintf(bcftools_stderr, " -c, --collapse treat as identical records with , see man page for details [none]\n"); + fprintf(bcftools_stderr, " -C, --complement output positions present only in the first file but missing in the others\n"); + fprintf(bcftools_stderr, " -e, --exclude exclude sites for which the expression is true\n"); + fprintf(bcftools_stderr, " -f, --apply-filters require at least one of the listed FILTER strings (e.g. \"PASS,.\")\n"); + fprintf(bcftools_stderr, " -i, --include include only sites for which the expression is true\n"); + fprintf(bcftools_stderr, " --no-version do not append version and command line to the header\n"); + fprintf(bcftools_stderr, " -n, --nfiles [+-=~] output positions present in this many (=), this many or more (+), this many or fewer (-), the exact (~) files\n"); + fprintf(bcftools_stderr, " -o, --output write output to a file [standard output]\n"); + fprintf(bcftools_stderr, " -O, --output-type b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"); + fprintf(bcftools_stderr, " -p, --prefix if given, subset each of the input files accordingly, see also -w\n"); + fprintf(bcftools_stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(bcftools_stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(bcftools_stderr, " -t, --targets similar to -r but streams rather than index-jumps\n"); + fprintf(bcftools_stderr, " -T, --targets-file similar to -R but streams rather than index-jumps\n"); + fprintf(bcftools_stderr, " --threads number of extra output compression threads [0]\n"); + fprintf(bcftools_stderr, " -w, --write list of files to write with -p given as 1-based indexes. By default, all files are written\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Examples:\n"); + fprintf(bcftools_stderr, " # Create intersection and complements of two sets saving the output in dir/*\n"); + fprintf(bcftools_stderr, " bcftools isec A.vcf.gz B.vcf.gz -p dir\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, " # Filter sites in A and B (but not in C) and create intersection\n"); + fprintf(bcftools_stderr, " bcftools isec -e'MAF<0.01' -i'dbSNP=1' -e - A.vcf.gz B.vcf.gz C.vcf.gz -p dir\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, " # Extract and write records from A shared by both A and B using exact allele match\n"); + fprintf(bcftools_stderr, " bcftools isec A.vcf.gz B.vcf.gz -p dir -n =2 -w 1\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, " # Extract records private to A or B comparing by position only\n"); + fprintf(bcftools_stderr, " bcftools isec A.vcf.gz B.vcf.gz -p dir -n -1 -c all\n"); + fprintf(bcftools_stderr, "\n"); + exit(1); +} + +int main_vcfisec(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->files = bcf_sr_init(); + args->argc = argc; args->argv = argv; + args->output_fname = NULL; + args->output_type = FT_VCF; + args->n_threads = 0; + args->record_cmd_line = 1; + int targets_is_file = 0, regions_is_file = 0; + + static struct option loptions[] = + { + {"help",no_argument,NULL,'h'}, + {"exclude",required_argument,NULL,'e'}, + {"include",required_argument,NULL,'i'}, + {"collapse",required_argument,NULL,'c'}, + {"complement",no_argument,NULL,'C'}, + {"apply-filters",required_argument,NULL,'f'}, + {"nfiles",required_argument,NULL,'n'}, + {"prefix",required_argument,NULL,'p'}, + {"write",required_argument,NULL,'w'}, + {"targets",required_argument,NULL,'t'}, + {"targets-file",required_argument,NULL,'T'}, + {"regions",required_argument,NULL,'r'}, + {"regions-file",required_argument,NULL,'R'}, + {"output",required_argument,NULL,'o'}, + {"output-type",required_argument,NULL,'O'}, + {"threads",required_argument,NULL,9}, + {"no-version",no_argument,NULL,8}, + {NULL,0,NULL,0} + }; + while ((c = getopt_long(argc, argv, "hc:r:R:p:n:w:t:T:Cf:o:O:i:e:",loptions,NULL)) >= 0) { + switch (c) { + case 'o': args->output_fname = optarg; break; + case 'O': + switch (optarg[0]) { + case 'b': args->output_type = FT_BCF_GZ; break; + case 'u': args->output_type = FT_BCF; break; + case 'z': args->output_type = FT_VCF_GZ; break; + case 'v': args->output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + } + break; + case 'c': + if ( !strcmp(optarg,"snps") ) args->files->collapse |= COLLAPSE_SNPS; + else if ( !strcmp(optarg,"indels") ) args->files->collapse |= COLLAPSE_INDELS; + else if ( !strcmp(optarg,"both") ) args->files->collapse |= COLLAPSE_SNPS | COLLAPSE_INDELS; + else if ( !strcmp(optarg,"any") ) args->files->collapse |= COLLAPSE_ANY; + else if ( !strcmp(optarg,"all") ) args->files->collapse |= COLLAPSE_ANY; + else if ( !strcmp(optarg,"some") ) args->files->collapse |= COLLAPSE_SOME; + else if ( !strcmp(optarg,"none") ) args->files->collapse = COLLAPSE_NONE; + else error("The --collapse string \"%s\" not recognised.\n", optarg); + break; + case 'f': args->files->apply_filters = optarg; break; + case 'C': args->isec_op = OP_COMPLEMENT; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; regions_is_file = 1; break; + case 't': args->targets_list = optarg; break; + case 'T': args->targets_list = optarg; targets_is_file = 1; break; + case 'p': args->prefix = optarg; break; + case 'w': args->write_files = optarg; break; + case 'i': add_filter(args, optarg, FLT_INCLUDE); break; + case 'e': add_filter(args, optarg, FLT_EXCLUDE); break; + case 'n': + { + char *p = optarg; + if ( *p=='-' ) { args->isec_op = OP_MINUS; p++; } + else if ( *p=='+' ) { args->isec_op = OP_PLUS; p++; } + else if ( *p=='=' ) { args->isec_op = OP_EQUAL; p++; } + else if ( *p=='~' ) { args->isec_op = OP_EXACT; p++; } + else if ( isdigit(*p) ) args->isec_op = OP_EQUAL; + else error("Could not parse --nfiles %s\n", optarg); + if ( args->isec_op == OP_EXACT ) args->isec_exact = p; + else if ( sscanf(p,"%d",&args->isec_n)!=1 ) error("Could not parse --nfiles %s\n", optarg); + } + break; + case 9 : args->n_threads = strtol(optarg, 0, 0); break; + case 8 : args->record_cmd_line = 0; break; + case 'h': + case '?': usage(); + default: error("Unknown argument: %s\n", optarg); + } + } + if ( argc-optind<1 ) usage(); // no file given + if ( args->targets_list && bcf_sr_set_targets(args->files, args->targets_list, targets_is_file,0)<0 ) + error("Failed to read the targets: %s\n", args->targets_list); + if ( args->regions_list && bcf_sr_set_regions(args->files, args->regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + if ( argc-optind==2 && !args->isec_op ) + { + args->isec_op = OP_VENN; + if ( !args->prefix ) error("Expected the -p option\n"); + } + if ( !args->targets_list ) + { + if ( argc-optind<2 ) error("Expected multiple files or the --targets option\n"); + if ( !args->isec_op ) error("Expected two file names or one of the options --complement, --nfiles or --targets\n"); + } + args->files->require_index = 1; + while (optindfiles, argv[optind]) ) error("Failed to open %s: %s\n", argv[optind],bcf_sr_strerror(args->files->errnum)); + optind++; + } + init_data(args); + isec_vcf(args); + destroy_data(args); + bcf_sr_destroy(args->files); + free(args); + return 0; +} + diff --git a/bcftools/vcfmerge.c b/bcftools/vcfmerge.c new file mode 100644 index 0000000..31f5dad --- /dev/null +++ b/bcftools/vcfmerge.c @@ -0,0 +1,2508 @@ +/* vcfmerge.c -- Merge multiple VCF/BCF files to create one multi-sample file. + + Copyright (C) 2012-2016 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "regidx.h" +#include "vcmp.h" + +#define DBG 0 + +#include +KHASH_MAP_INIT_STR(strdict, int) +typedef khash_t(strdict) strdict_t; + +#define FLT_LOGIC_ADD 0 +#define FLT_LOGIC_REMOVE 1 + +#define SKIP_DONE 1 // the record was processed +#define SKIP_DIFF 2 // not compatible, merge later + +#define IS_VL_G(hdr,id) (bcf_hdr_id2length(hdr,BCF_HL_FMT,id) == BCF_VL_G) +#define IS_VL_A(hdr,id) (bcf_hdr_id2length(hdr,BCF_HL_FMT,id) == BCF_VL_A) +#define IS_VL_R(hdr,id) (bcf_hdr_id2length(hdr,BCF_HL_FMT,id) == BCF_VL_R) + +#define SWAP(type_t,a,b) { type_t tmp = (a); (a) = (b); (b) = tmp; } + +// For merging INFO Number=A,G,R tags +typedef struct +{ + const char *hdr_tag; + int type, nvals; + int nbuf, mbuf; + uint8_t *buf; +} +AGR_info_t; + +// Rules for merging arbitrary INFO tags +typedef struct _info_rule_t +{ + char *hdr_tag; + void (*merger)(bcf_hdr_t *hdr, bcf1_t *line, struct _info_rule_t *rule); + int type; // one of BCF_HT_* + int block_size; // number of values in a block + int type_size; // size of the corresponding BCF_HT_* type + int nblocks; // number of blocks in nvals (the number of merged files) + int nvals, mvals; // used and total size of vals array + void *vals; // the info tag values +} +info_rule_t; + +typedef struct +{ + bcf1_t *line; + int end, active; +} +gvcf_aux_t; + +// Auxiliary merge data for selecting the right combination +// of buffered records across multiple readers. maux1_t +// corresponds to one buffered line. +typedef struct +{ + int skip; + int *map; // mapping from input alleles to the array of output alleles (set by merge_alleles) + int mmap; // size of map array (only buffer[i].n_allele is actually used) + int als_differ; +} +maux1_t; +typedef struct +{ + int rid; // current rid + int beg,end; // valid ranges in reader's buffer [beg,end). Maintained by maux_reset and gvcf_flush. + int cur; // current line or -1 if none + int mrec; // allocated size of buf + maux1_t *rec; // buffer to keep reader's lines + bcf1_t **lines; // source buffer: either gvcf or readers' buffer +} +buffer_t; +typedef struct +{ + int n, pos, var_types; // number of readers, current position, currently available variant types + char *chr; // current chromosome + char **als, **out_als; // merged alleles (temp, may contain empty records) and merged alleles ready for output + int nals, mals, nout_als, mout_als; // size of the output array + int *cnt, ncnt; // number of records that refer to the alleles + int *smpl_ploidy, *smpl_nGsize; // ploidy and derived number of values in Number=G tags, updated for each line (todo: cache for missing cases) + bcf_fmt_t **fmt_map; // i-th output FORMAT field corresponds in j-th reader to i*nreader+j, first row is reserved for GT + int nfmt_map; // number of rows in the fmt_map array + int *agr_map, nagr_map, magr_map; // mapping between Number=AGR element indexes + void *tmp_arr; + int ntmp_arr; + buffer_t *buf; + AGR_info_t *AGR_info; + int nAGR_info, mAGR_info; + bcf_srs_t *files; + int gvcf_min, gvcf_break; // min buffered gvcf END position (NB: gvcf_min is 1-based) or 0 if no active lines are present + gvcf_aux_t *gvcf; // buffer of gVCF lines +} +maux_t; + +typedef struct +{ + vcmp_t *vcmp; + maux_t *maux; + regidx_t *regs; // apply regions only after the blocks are expanded + regitr_t *regs_itr; + int header_only, collapse, output_type, force_samples, merge_by_id, do_gvcf, filter_logic, missing_to_ref; + char *header_fname, *output_fname, *regions_list, *info_rules, *file_list; + faidx_t *gvcf_fai; + info_rule_t *rules; + int nrules; + strdict_t *tmph; + kstring_t tmps; + bcf_srs_t *files; + bcf1_t *out_line; + htsFile *out_fh; + bcf_hdr_t *out_hdr; + char **argv; + int argc, n_threads, record_cmd_line; +} +args_t; + +static bcf1_t *maux_get_line(args_t *args, int i) +{ + maux_t *ma = args->maux; + int ibuf = ma->buf[i].cur; + if ( ibuf >= 0 ) return ma->buf[i].lines[ibuf]; + return NULL; +} + +static void info_rules_merge_sum(bcf_hdr_t *hdr, bcf1_t *line, info_rule_t *rule) +{ + if ( !rule->nvals ) return; + int i, j, ndim = rule->block_size; + #define BRANCH(type_t,is_missing) { \ + type_t *ptr = (type_t*) rule->vals; \ + for (i=0; invals; i++) if ( is_missing ) ptr[i] = 0; \ + for (i=1; inblocks; i++) \ + { \ + for (j=0; jtype) { + case BCF_HT_INT: BRANCH(int32_t, ptr[i]==bcf_int32_missing); break; + case BCF_HT_REAL: BRANCH(float, bcf_float_is_missing(ptr[i])); break; + default: error("TODO: %s:%d .. type=%d\n", __FILE__,__LINE__, rule->type); + } + #undef BRANCH + + bcf_update_info(hdr,line,rule->hdr_tag,rule->vals,ndim,rule->type); +} +static void info_rules_merge_avg(bcf_hdr_t *hdr, bcf1_t *line, info_rule_t *rule) +{ + if ( !rule->nvals ) return; + int i, j, ndim = rule->block_size; + #define BRANCH(type_t,is_missing) { \ + type_t *ptr = (type_t*) rule->vals; \ + for (i=0; invals; i++) if ( is_missing ) ptr[i] = 0; \ + for (j=0; jnblocks; i++) sum += ptr[j+i*ndim]; \ + ptr[j] = sum / rule->nblocks; \ + } \ + } + switch (rule->type) { + case BCF_HT_INT: BRANCH(int32_t, ptr[i]==bcf_int32_missing); break; + case BCF_HT_REAL: BRANCH(float, bcf_float_is_missing(ptr[i])); break; + default: error("TODO: %s:%d .. type=%d\n", __FILE__,__LINE__, rule->type); + } + #undef BRANCH + + bcf_update_info(hdr,line,rule->hdr_tag,rule->vals,ndim,rule->type); +} +static void info_rules_merge_min(bcf_hdr_t *hdr, bcf1_t *line, info_rule_t *rule) +{ + if ( !rule->nvals ) return; + int i, j, ndim = rule->block_size; + #define BRANCH(type_t,is_missing,set_missing,huge_val) { \ + type_t *ptr = (type_t*) rule->vals; \ + for (i=0; invals; i++) if ( is_missing ) ptr[i] = huge_val; \ + for (i=1; inblocks; i++) \ + { \ + for (j=0; j ptr[j+i*ndim] ) ptr[j] = ptr[j+i*ndim]; \ + } \ + for (i=0; invals; i++) if ( ptr[i]==huge_val ) set_missing; \ + } + switch (rule->type) { + case BCF_HT_INT: BRANCH(int32_t, ptr[i]==bcf_int32_missing, ptr[i]=bcf_int32_missing, INT32_MAX); break; + case BCF_HT_REAL: BRANCH(float, bcf_float_is_missing(ptr[i]), bcf_float_set_missing(ptr[i]), HUGE_VAL); break; + default: error("TODO: %s:%d .. type=%d\n", __FILE__,__LINE__, rule->type); + } + #undef BRANCH + + bcf_update_info(hdr,line,rule->hdr_tag,rule->vals,ndim,rule->type); +} +static void info_rules_merge_max(bcf_hdr_t *hdr, bcf1_t *line, info_rule_t *rule) +{ + if ( !rule->nvals ) return; + int i, j, ndim = rule->block_size; + #define BRANCH(type_t,is_missing,set_missing,huge_val) { \ + type_t *ptr = (type_t*) rule->vals; \ + for (i=0; invals; i++) if ( is_missing ) ptr[i] = huge_val; \ + for (i=1; inblocks; i++) \ + { \ + for (j=0; jnvals; i++) if ( ptr[i]==huge_val ) set_missing; \ + } + switch (rule->type) { + case BCF_HT_INT: BRANCH(int32_t, ptr[i]==bcf_int32_missing, ptr[i]=bcf_int32_missing, INT32_MIN); break; + case BCF_HT_REAL: BRANCH(float, bcf_float_is_missing(ptr[i]), bcf_float_set_missing(ptr[i]), -HUGE_VAL); break; + default: error("TODO: %s:%d .. type=%d\n", __FILE__,__LINE__, rule->type); + } + #undef BRANCH + + bcf_update_info(hdr,line,rule->hdr_tag,rule->vals,ndim,rule->type); +} +static void info_rules_merge_join(bcf_hdr_t *hdr, bcf1_t *line, info_rule_t *rule) +{ + if ( !rule->nvals ) return; + if ( rule->type==BCF_HT_STR ) + { + ((char*)rule->vals)[rule->nvals] = 0; + bcf_update_info_string(hdr,line,rule->hdr_tag,rule->vals); + } + else + bcf_update_info(hdr,line,rule->hdr_tag,rule->vals,rule->nvals,rule->type); +} + +static int info_rules_comp_key2(const void *a, const void *b) +{ + info_rule_t *rule1 = (info_rule_t*) a; + info_rule_t *rule2 = (info_rule_t*) b; + return strcmp(rule1->hdr_tag, rule2->hdr_tag); +} +static int info_rules_comp_key(const void *a, const void *b) +{ + char *key = (char*) a; + info_rule_t *rule = (info_rule_t*) b; + return strcmp(key, rule->hdr_tag); +} +static void info_rules_init(args_t *args) +{ + if ( args->info_rules && !strcmp("-",args->info_rules) ) return; + + kstring_t str = {0,0,0}; + if ( !args->info_rules ) + { + if ( bcf_hdr_idinfo_exists(args->out_hdr,BCF_HL_INFO,bcf_hdr_id2int(args->out_hdr, BCF_DT_ID, "DP")) ) kputs("DP:sum",&str); + if ( bcf_hdr_idinfo_exists(args->out_hdr,BCF_HL_INFO,bcf_hdr_id2int(args->out_hdr, BCF_DT_ID, "DP4")) ) + { + if ( str.l ) kputc(',',&str); + kputs("DP4:sum",&str); + } + if ( args->do_gvcf && bcf_hdr_idinfo_exists(args->out_hdr,BCF_HL_INFO,bcf_hdr_id2int(args->out_hdr, BCF_DT_ID, "QS")) ) + { + if ( str.l ) kputc(',',&str); + kputs("QS:sum",&str); + } + if ( args->do_gvcf && bcf_hdr_idinfo_exists(args->out_hdr,BCF_HL_INFO,bcf_hdr_id2int(args->out_hdr, BCF_DT_ID, "MinDP")) ) + { + if ( str.l ) kputc(',',&str); + kputs("MinDP:min",&str); + } + if ( args->do_gvcf && bcf_hdr_idinfo_exists(args->out_hdr,BCF_HL_INFO,bcf_hdr_id2int(args->out_hdr, BCF_DT_ID, "I16")) ) + { + if ( str.l ) kputc(',',&str); + kputs("I16:sum",&str); + } + if ( args->do_gvcf && bcf_hdr_idinfo_exists(args->out_hdr,BCF_HL_INFO,bcf_hdr_id2int(args->out_hdr, BCF_DT_ID, "IDV")) ) + { + if ( str.l ) kputc(',',&str); + kputs("IDV:max",&str); + } + if ( args->do_gvcf && bcf_hdr_idinfo_exists(args->out_hdr,BCF_HL_INFO,bcf_hdr_id2int(args->out_hdr, BCF_DT_ID, "IMF")) ) + { + if ( str.l ) kputc(',',&str); + kputs("IMF:max",&str); + } + + if ( !str.l ) return; + args->info_rules = str.s; + } + + args->nrules = 1; + char *ss = strdup(args->info_rules), *tmp = ss; + int n = 0; + while ( *ss ) + { + if ( *ss==':' ) { *ss = 0; n++; if ( n%2==0 ) error("Could not parse INFO rules: \"%s\"\n", args->info_rules); } + else if ( *ss==',' ) { *ss = 0; args->nrules++; n++; if ( n%2==1 ) error("Could not parse INFO rules: \"%s\"\n", args->info_rules); } + ss++; + } + if ( n%2==0 ) error("Could not parse INFO rules: \"%s\"\n", args->info_rules); + args->rules = (info_rule_t*) calloc(args->nrules,sizeof(info_rule_t)); + + n = 0; + ss = tmp; + while ( n < args->nrules ) + { + info_rule_t *rule = &args->rules[n]; + rule->hdr_tag = strdup(ss); + int id = bcf_hdr_id2int(args->out_hdr, BCF_DT_ID, rule->hdr_tag); + if ( !bcf_hdr_idinfo_exists(args->out_hdr,BCF_HL_INFO,id) ) error("The tag is not defined in the header: \"%s\"\n", rule->hdr_tag); + rule->type = bcf_hdr_id2type(args->out_hdr,BCF_HL_INFO,id); + if ( rule->type==BCF_HT_INT ) rule->type_size = sizeof(int32_t); + else if ( rule->type==BCF_HT_REAL ) rule->type_size = sizeof(float); + else if ( rule->type==BCF_HT_STR ) rule->type_size = sizeof(char); + else error("The type is not supported: \"%s\"\n", rule->hdr_tag); + + ss = strchr(ss, '\0'); ss++; + if ( !*ss ) error("Could not parse INFO rules, missing logic of \"%s\"\n", rule->hdr_tag); + + int is_join = 0; + if ( !strcasecmp(ss,"sum") ) rule->merger = info_rules_merge_sum; + else if ( !strcasecmp(ss,"avg") ) rule->merger = info_rules_merge_avg; + else if ( !strcasecmp(ss,"min") ) rule->merger = info_rules_merge_min; + else if ( !strcasecmp(ss,"max") ) rule->merger = info_rules_merge_max; + else if ( !strcasecmp(ss,"join") ) { rule->merger = info_rules_merge_join; is_join = 1; } + else error("The rule logic \"%s\" not recognised\n", ss); + + if ( !is_join && rule->type==BCF_HT_STR ) + error("Numeric operation \"%s\" requested on non-numeric field: %s\n", ss, rule->hdr_tag); + if ( bcf_hdr_id2number(args->out_hdr,BCF_HL_INFO,id)==0xfffff ) + { + int is_agr = ( + bcf_hdr_id2length(args->out_hdr,BCF_HL_INFO,id)==BCF_VL_A || + bcf_hdr_id2length(args->out_hdr,BCF_HL_INFO,id)==BCF_VL_G || + bcf_hdr_id2length(args->out_hdr,BCF_HL_INFO,id)==BCF_VL_R + ) ? 1 : 0; + if ( is_join && is_agr ) + error("Cannot -i %s:join on Number=[AGR] tags is not supported.\n", rule->hdr_tag); + if ( !is_join && !is_agr ) + error("Only fixed-length vectors are supported with -i %s:%s\n", ss, rule->hdr_tag); + } + + ss = strchr(ss, '\0'); ss++; + n++; + } + free(str.s); + free(tmp); + + qsort(args->rules, args->nrules, sizeof(*args->rules), info_rules_comp_key2); +} +static void info_rules_destroy(args_t *args) +{ + int i; + for (i=0; inrules; i++) + { + info_rule_t *rule = &args->rules[i]; + free(rule->hdr_tag); + free(rule->vals); + } + free(args->rules); +} +static void info_rules_reset(args_t *args) +{ + int i; + for (i=0; inrules; i++) + args->rules[i].nblocks = args->rules[i].nvals = args->rules[i].block_size = 0; +} +static int info_rules_add_values(args_t *args, bcf_hdr_t *hdr, bcf1_t *line, info_rule_t *rule, maux1_t *als, int var_len) +{ + int msize = args->maux->ntmp_arr / rule->type_size; + int ret = bcf_get_info_values(hdr, line, rule->hdr_tag, &args->maux->tmp_arr, &msize, rule->type); + if ( ret<=0 ) error("FIXME: error parsing %s at %s:%d .. %d\n", rule->hdr_tag,bcf_seqname(hdr,line),line->pos+1,ret); + args->maux->ntmp_arr = msize * rule->type_size; + + rule->nblocks++; + + if ( rule->type==BCF_HT_STR ) + { + int need_comma = rule->nblocks==1 ? 0 : 1; + hts_expand(char,rule->nvals+ret+need_comma+1,rule->mvals,rule->vals); // 1 for null-termination + char *tmp = (char*) rule->vals + rule->nvals; + if ( rule->nvals>0 ) { *tmp = ','; tmp++; } + strncpy(tmp,(char*)args->maux->tmp_arr,ret); + rule->nvals += ret + need_comma; + return 1; + } + + int i, j; + if ( var_len==BCF_VL_A ) + { + if ( ret!=line->n_allele-1 ) error("Wrong number of %s fields at %s:%d\n",rule->hdr_tag,bcf_seqname(hdr,line),line->pos+1); + args->maux->nagr_map = ret; + hts_expand(int,args->maux->nagr_map,args->maux->magr_map,args->maux->agr_map); + // create mapping from source file ALT indexes to dst file indexes + for (i=0; imaux->agr_map[i] = als->map[i+1] - 1; + rule->block_size = args->maux->nout_als - 1; + } + else if ( var_len==BCF_VL_R ) + { + if ( ret!=line->n_allele ) error("Wrong number of %s fields at %s:%d\n",rule->hdr_tag,bcf_seqname(hdr,line),line->pos+1); + args->maux->nagr_map = ret; + hts_expand(int,args->maux->nagr_map,args->maux->magr_map,args->maux->agr_map); + for (i=0; imaux->agr_map[i] = als->map[i]; + rule->block_size = args->maux->nout_als; + } + else if ( var_len==BCF_VL_G ) + { + args->maux->nagr_map = bcf_alleles2gt(line->n_allele-1,line->n_allele-1)+1; + assert( ret==line->n_allele || ret==args->maux->nagr_map ); + if ( ret==line->n_allele ) // haploid + { + args->maux->nagr_map = line->n_allele; + hts_expand(int,args->maux->nagr_map,args->maux->magr_map,args->maux->agr_map); + for (i=0; imaux->agr_map[i] = als->map[i]; + rule->block_size = args->maux->nout_als; + } + else + { + hts_expand(int,args->maux->nagr_map,args->maux->magr_map,args->maux->agr_map); + int k_src = 0; + for (i=0; in_allele; i++) + { + for (j=0; j<=i; j++) + { + args->maux->agr_map[k_src] = bcf_alleles2gt(als->map[i],als->map[j]); + k_src++; + } + } + rule->block_size = bcf_alleles2gt(args->maux->nout_als-1,args->maux->nout_als-1)+1; + } + } + else + { + if ( rule->nblocks>1 && ret!=rule->block_size ) + error("Mismatch in number of values for INFO/%s at %s:%d\n", rule->hdr_tag,bcf_seqname(hdr,line),line->pos+1); + rule->block_size = ret; + args->maux->nagr_map = 0; + } + + #define BRANCH(src_type_t,dst_type_t,set_missing) { \ + src_type_t *src = (src_type_t *) args->maux->tmp_arr; \ + hts_expand0(dst_type_t,(rule->nvals+rule->block_size),rule->mvals,rule->vals); \ + dst_type_t *dst = (dst_type_t *) rule->vals + rule->nvals; \ + rule->nvals += rule->block_size; \ + if ( !args->maux->nagr_map ) \ + { \ + for (i=0; iblock_size; i++) set_missing; \ + for (i=0; imaux->agr_map[i]] = src[i]; \ + } \ + } + switch (rule->type) { + case BCF_HT_INT: BRANCH(int, int32_t, dst[i] = bcf_int32_missing); break; + case BCF_HT_REAL: BRANCH(float, float, bcf_float_set_missing(dst[i])); break; + default: error("TODO: %s:%d .. type=%d\n", __FILE__,__LINE__, rule->type); + } + #undef BRANCH + + return 1; +} + +int bcf_hdr_sync(bcf_hdr_t *h); + +void merge_headers(bcf_hdr_t *hw, const bcf_hdr_t *hr, const char *clash_prefix, int force_samples) +{ + // header lines + hw = bcf_hdr_merge(hw, hr); + + // samples + int i; + for (i=0; isamples[i]; + if ( bcf_hdr_id2int(hw, BCF_DT_SAMPLE, name)!=-1 ) + { + // there is a sample with the same name + if ( !force_samples ) error("Error: Duplicate sample names (%s), use --force-samples to proceed anyway.\n", name); + + int len = strlen(hr->samples[i]) + strlen(clash_prefix) + 1; + name = (char*) malloc(sizeof(char)*(len+1)); + sprintf(name,"%s:%s",clash_prefix,hr->samples[i]); + bcf_hdr_add_sample(hw,name); + free(name); + } + else + bcf_hdr_add_sample(hw,name); + } +} + +void debug_als(char **als, int nals) +{ + int k; for (k=0; k=lens[j] ) done = 1; + if ( als[j][lens[j]-i] != als[0][lens[0]-i] ) { done = 1; break; } + } + if ( done ) break; + i++; + } + if ( i>1 ) + { + i--; + als[0][lens[0]-i] = 0; + for (j=1; j0, + * 1->2, and 2->3. + */ +char **merge_alleles(char **a, int na, int *map, char **b, int *nb, int *mb) +{ + // reference allele never changes + map[0] = 0; + + int i,j; + int rla = !a[0][1] ? 1 : strlen(a[0]); + int rlb = !b[0][1] ? 1 : strlen(b[0]); + + // the most common case: same SNPs + if ( na==2 && *nb==2 && rla==1 && rlb==1 && a[1][0]==b[1][0] && !a[1][1] && !b[1][1] ) + { + map[1] = 1; + return b; + } + + // Sanity check: reference prefixes must be identical + if ( strncmp(a[0],b[0],rlarlb ) + { + for (i=0; i<*nb; i++) + { + if ( b[i][0]=='<' ) continue; // symbolic allele, do not modify + if ( b[i][0]=='*' ) continue; // overlapping deletion (*), do not modify + int l = strlen(b[i]); + b[i] = (char*) realloc(b[i],l+rla-rlb+1); + memcpy(b[i]+l,a[0]+rlb,rla-rlb+1); + } + } + + // now check if the $a alleles are present and if not add them + for (i=1; irla && a[i][0]!='<' && a[i][0]!='*' ) // $a alleles need expanding and not a symbolic allele or * + { + int l = strlen(a[i]); + ai = (char*) malloc(l+rlb-rla+1); + memcpy(ai,a[i],l); + memcpy(ai+l,b[0]+rla,rlb-rla+1); + const_ai = 0; + } + else + ai = a[i]; + + for (j=1; j<*nb; j++) + if ( !strcasecmp(ai,b[j]) ) break; + + if ( j<*nb ) // $b already has the same allele + { + map[i] = j; + if ( !const_ai ) free(ai); + continue; + } + // new allele + map[i] = *nb; + b[*nb] = const_ai ? strdup(ai) : ai; + (*nb)++; + } + return b; +} + +maux_t *maux_init(args_t *args) +{ + bcf_srs_t *files = args->files; + maux_t *ma = (maux_t*) calloc(1,sizeof(maux_t)); + ma->n = files->nreaders; + ma->files = files; + int i, n_smpl = 0; + for (i=0; in; i++) + n_smpl += bcf_hdr_nsamples(files->readers[i].header); + if ( args->do_gvcf ) + { + ma->gvcf = (gvcf_aux_t*) calloc(ma->n,sizeof(gvcf_aux_t)); + for (i=0; in; i++) + ma->gvcf[i].line = bcf_init1(); + } + ma->smpl_ploidy = (int*) calloc(n_smpl,sizeof(int)); + ma->smpl_nGsize = (int*) malloc(n_smpl*sizeof(int)); + ma->buf = (buffer_t*) calloc(ma->n,sizeof(buffer_t)); + for (i=0; in; i++) + ma->buf[i].rid = -1; + return ma; +} +void maux_destroy(maux_t *ma) +{ + int i,j; + for (i=0; imals; i++) + { + free(ma->als[i]); + ma->als[i] = NULL; + } + for (i=0; in; i++) // for each reader + { + for (j=0; jbuf[i].mrec; j++) // for each buffered line + free(ma->buf[i].rec[j].map); + free(ma->buf[i].rec); + } + free(ma->buf); + if ( ma->gvcf ) + { + for (i=0; in; i++) bcf_destroy(ma->gvcf[i].line); + free(ma->gvcf); + } + for (i=0; imAGR_info; i++) + free(ma->AGR_info[i].buf); + free(ma->agr_map); + free(ma->AGR_info); + if (ma->ntmp_arr) free(ma->tmp_arr); + if (ma->nfmt_map) free(ma->fmt_map); + // ma->inf freed in bcf_destroy1 + for (i=0; imals; i++) free(ma->als[i]); + if (ma->mout_als) free(ma->out_als); + free(ma->als); + free(ma->cnt); + free(ma->smpl_ploidy); + free(ma->smpl_nGsize); + free(ma->chr); + free(ma); +} +void maux_expand1(buffer_t *buf, int size) +{ + if ( buf->mrec < size ) + { + hts_expand0(maux1_t,size,buf->mrec,buf->rec); + buf->mrec = size; + } +} +void maux_reset(maux_t *ma) +{ + int i,j; + for (i=0; in; i++) maux_expand1(&ma->buf[i],ma->files->readers[i].nbuffer+1); + for (i=0; incnt; i++) ma->cnt[i] = 0; + for (i=0; imals; i++) + { + free(ma->als[i]); + ma->als[i] = NULL; + } + const char *chr = NULL; + ma->nals = 0; + ma->pos = -1; + for (i=0; in; i++) + { + if ( !bcf_sr_has_line(ma->files,i) ) continue; + bcf1_t *line = bcf_sr_get_line(ma->files,i); + bcf_hdr_t *hdr = bcf_sr_get_header(ma->files,i); + chr = bcf_seqname(hdr,line); + ma->pos = line->pos; + break; + } + int new_chr = 0; + if ( chr && (!ma->chr || strcmp(ma->chr,chr)) ) + { + free(ma->chr); + ma->chr = strdup(chr); + new_chr = 1; + } + for (i=0; in; i++) + { + bcf_hdr_t *hdr = bcf_sr_get_header(ma->files,i); + ma->buf[i].rid = bcf_hdr_name2id(hdr,chr); + ma->buf[i].beg = bcf_sr_has_line(ma->files,i) ? 0 : 1; + for (j=ma->buf[i].beg; j<=ma->files->readers[i].nbuffer; j++) + { + ma->buf[i].rec[j].skip = 0; + bcf1_t *line = ma->files->readers[i].buffer[j]; + if ( line->rid!=ma->buf[i].rid || line->pos!=ma->pos ) break; + } + ma->buf[i].end = j; + ma->buf[i].cur = -1; + if ( ma->buf[i].beg < ma->buf[i].end ) + { + ma->buf[i].lines = ma->files->readers[i].buffer; + if ( ma->gvcf ) ma->gvcf[i].active = 0; // gvcf block cannot overlap with the next record + } + if ( new_chr && ma->gvcf ) ma->gvcf[i].active = 0; // make sure to close active gvcf block on new chr + } +} +void maux_debug(maux_t *ma, int ir, int ib) +{ + printf("[%d,%d]\t", ir,ib); + int i; + for (i=0; inals; i++) + { + printf(" %s [%d]", ma->als[i], ma->cnt[i]); + } + printf("\n"); +} + +void merge_chrom2qual(args_t *args, bcf1_t *out) +{ + bcf_srs_t *files = args->files; + bcf_hdr_t *out_hdr = args->out_hdr; + + int i, ret; + khiter_t kitr; + strdict_t *tmph = args->tmph; + kh_clear(strdict, tmph); + kstring_t *tmps = &args->tmps; + tmps->l = 0; + + maux_t *ma = args->maux; + int *al_idxs = (int*) calloc(ma->nals,sizeof(int)); + bcf_float_set_missing(out->qual); + + // CHROM, POS, ID, QUAL + out->pos = -1; + for (i=0; inreaders; i++) + { + bcf1_t *line = maux_get_line(args, i); + if ( !line ) continue; + bcf_unpack(line, BCF_UN_ALL); + + bcf_sr_t *reader = &files->readers[i]; + bcf_hdr_t *hdr = reader->header; + + // not all maux alleles are always used, mark the ones we'll need + int j; + for (j=1; jn_allele; j++) + { + int irec = ma->buf[i].cur; + al_idxs[ ma->buf[i].rec[irec].map[j] ] = 1; + } + + // position + if ( out->pos==-1 ) + { + const char *chr = hdr->id[BCF_DT_CTG][line->rid].key; + out->rid = bcf_hdr_name2id(out_hdr, chr); + if ( strcmp(chr,out_hdr->id[BCF_DT_CTG][out->rid].key) ) error("Uh\n"); + out->pos = line->pos; + } + + // ID + if ( line->d.id[0]!='.' || line->d.id[1] ) + { + kitr = kh_get(strdict, tmph, line->d.id); + if ( kitr == kh_end(tmph) ) + { + if ( tmps->l ) kputc(';', tmps); + kputs(line->d.id, tmps); + kh_put(strdict, tmph, line->d.id, &ret); + } + } + + // set QUAL to the max qual value. Not exactly correct, but good enough for now + if ( !bcf_float_is_missing(line->qual) ) + { + if ( bcf_float_is_missing(out->qual) || out->qual < line->qual ) out->qual = line->qual; + } + } + + // set ID + if ( !tmps->l ) kputs(".", tmps); + bcf_update_id(out_hdr, out, tmps->s); + + // set alleles + ma->nout_als = 0; + for (i=1; inals; i++) + { + if ( !al_idxs[i] ) continue; + ma->nout_als++; + + // Adjust the indexes, the allele map could be created for multiple collapsed records, + // some of which might be unused for this output line + int ir, j; + for (ir=0; irnreaders; ir++) + { + bcf1_t *line = maux_get_line(args,ir); + if ( !line ) continue; + for (j=1; jn_allele; j++) + { + int irec = ma->buf[ir].cur; + if ( ma->buf[ir].rec[irec].map[j]==i ) ma->buf[ir].rec[irec].map[j] = ma->nout_als; + } + } + } + // Expand the arrays and realloc the alleles string. Note that all alleles are in a single allocated block. + ma->nout_als++; + hts_expand0(char*, ma->nout_als, ma->mout_als, ma->out_als); + int k = 0; + for (i=0; inals; i++) + if ( i==0 || al_idxs[i] ) ma->out_als[k++] = strdup(ma->als[i]); + assert( k==ma->nout_als ); + normalize_alleles(ma->out_als, ma->nout_als); + bcf_update_alleles(out_hdr, out, (const char**) ma->out_als, ma->nout_als); + free(al_idxs); + for (i=0; inout_als; i++) free(ma->out_als[i]); +} + +void merge_filter(args_t *args, bcf1_t *out) +{ + bcf_srs_t *files = args->files; + bcf_hdr_t *out_hdr = args->out_hdr; + + int i, ret; + if ( args->filter_logic == FLT_LOGIC_REMOVE ) + { + for (i=0; inreaders; i++) + { + bcf1_t *line = maux_get_line(args, i); + if ( !line ) continue; + bcf_sr_t *reader = &files->readers[i]; + bcf_hdr_t *hdr = reader->header; + if ( bcf_has_filter(hdr, line, "PASS") ) break; + } + if ( inreaders ) + { + int flt_id = bcf_hdr_id2int(out_hdr, BCF_DT_ID, "PASS"); + bcf_add_filter(out_hdr, out, flt_id); + return; + } + } + + khiter_t kitr; + strdict_t *tmph = args->tmph; + kh_clear(strdict, tmph); + + out->d.n_flt = 0; + for (i=0; inreaders; i++) + { + bcf1_t *line = maux_get_line(args, i); + if ( !line ) continue; + + bcf_sr_t *reader = &files->readers[i]; + bcf_hdr_t *hdr = reader->header; + + int k; + for (k=0; kd.n_flt; k++) + { + const char *flt = hdr->id[BCF_DT_ID][line->d.flt[k]].key; + kitr = kh_get(strdict, tmph, flt); + if ( kitr == kh_end(tmph) ) + { + int id = bcf_hdr_id2int(out_hdr, BCF_DT_ID, flt); + if ( id==-1 ) error("Error: The filter is not defined in the header: %s\n", flt); + hts_expand(int,out->d.n_flt+1,out->d.m_flt,out->d.flt); + out->d.flt[out->d.n_flt] = id; + out->d.n_flt++; + kh_put(strdict, tmph, flt, &ret); + } + } + } + // Check if PASS is not mixed with other filters + if ( out->d.n_flt>1 ) + { + int id = bcf_hdr_id2int(out_hdr, BCF_DT_ID, "PASS"); + for (i=0; id.n_flt; i++) + if ( out->d.flt[i]==id ) break; + if ( id.n_flt ) + { + out->d.n_flt--; + for (; id.n_flt; i++) out->d.flt[i] = out->d.flt[i+1]; + } + } +} + +static void bcf_info_set_id(bcf1_t *line, bcf_info_t *info, int id, kstring_t *tmp_str) +{ + uint8_t *ptr = info->vptr - info->vptr_off; + bcf_dec_typed_int1(ptr, &ptr); + + tmp_str->l = 0; + bcf_enc_int1(tmp_str, id); + + if ( tmp_str->l == ptr - info->vptr + info->vptr_off ) + { + // the new id is represented with the same number of bytes + memcpy(info->vptr - info->vptr_off, tmp_str->s, tmp_str->l); + return; + } + + kputsn_(ptr, info->vptr - ptr, tmp_str); + info->vptr_off = tmp_str->l; + kputsn_(info->vptr, info->len << bcf_type_shift[info->type], tmp_str); + + info->vptr = (uint8_t*) tmp_str->s + info->vptr_off; + tmp_str->s = NULL; + tmp_str->m = 0; + tmp_str->l = 0; +} + +/* + * copy_string_field() - copy a comma-separated field + * @param src: source string + * @param isrc: index of the field to copy + * @param src_len: length of source string (excluding the terminating \0) + * @param dst: destination kstring (must be initialized) + * @param idst: index of the destination field + */ +int copy_string_field(char *src, int isrc, int src_len, kstring_t *dst, int idst) +{ + int ith_src = 0, start_src = 0; // i-th field in src string + while ( ith_srcl ) + { + if ( dst->s[start_dst]==',' ) { ith_dst++; } + start_dst++; + } + if ( ith_dst!=idst ) return -2; + int end_dst = start_dst; + while ( end_dstl && dst->s[end_dst]!=',' ) end_dst++; + + if ( end_dst - start_dst>1 || dst->s[start_dst]!='.' ) return 0; // do not overwrite non-empty values + + // Now start_dst and end_dst are indexes to the destination memory area + // which needs to be replaced with nsrc_cpy + // source bytes, end_dst points just after. + int ndst_shift = nsrc_cpy - (end_dst - start_dst); + int ndst_move = dst->l - end_dst + 1; // how many bytes must be moved (including \0) + if ( ndst_shift ) + { + ks_resize(dst, dst->l + ndst_shift + 1); // plus \0 + memmove(dst->s+end_dst+ndst_shift, dst->s+end_dst, ndst_move); + } + memcpy(dst->s+start_dst, src+start_src, nsrc_cpy); + dst->l += ndst_shift; + return 0; +} + +static void merge_AGR_info_tag(bcf_hdr_t *hdr, bcf1_t *line, bcf_info_t *info, int len, maux1_t *als, AGR_info_t *agr) +{ + int i; + if ( !agr->nbuf ) + { + if ( info->type==BCF_BT_INT8 || info->type==BCF_BT_INT16 || info->type==BCF_BT_INT32 || info->type==BCF_BT_FLOAT ) + { + agr->nbuf = 4 * agr->nvals; + hts_expand(uint8_t,agr->nbuf,agr->mbuf,agr->buf); + if ( info->type!=BCF_BT_FLOAT ) + { + int32_t *tmp = (int32_t*) agr->buf; + for (i=0; invals; i++) tmp[i] = bcf_int32_missing; + } + else + { + float *tmp = (float*) agr->buf; + for (i=0; invals; i++) bcf_float_set_missing(tmp[i]); + } + } + else if ( info->type==BCF_BT_CHAR ) + { + kstring_t tmp; tmp.l = 0; tmp.m = agr->mbuf; tmp.s = (char*)agr->buf; + kputc('.',&tmp); + for (i=1; invals; i++) kputs(",.",&tmp); + agr->mbuf = tmp.m; agr->nbuf = tmp.l; agr->buf = (uint8_t*)tmp.s; + } + else + error("Not ready for type [%d]: %s at %d\n", info->type,agr->hdr_tag,line->pos+1); + } + + if ( info->type==BCF_BT_INT8 || info->type==BCF_BT_INT16 || info->type==BCF_BT_INT32 || info->type==BCF_BT_FLOAT ) + { + if ( len==BCF_VL_A || len==BCF_VL_R ) + { + int ifrom = len==BCF_VL_A ? 1 : 0; + #define BRANCH(type_t, is_missing, is_vector_end, out_type_t) { \ + type_t *src = (type_t *) info->vptr; \ + out_type_t *tgt = (out_type_t *) agr->buf; \ + int iori, inew; \ + for (iori=ifrom; iorin_allele; iori++) \ + { \ + if ( is_vector_end ) break; \ + if ( is_missing ) continue; \ + inew = als->map[iori] - ifrom; \ + tgt[inew] = *src; \ + src++; \ + } \ + } + switch (info->type) { + case BCF_BT_INT8: BRANCH(int8_t, *src==bcf_int8_missing, *src==bcf_int8_vector_end, int); break; + case BCF_BT_INT16: BRANCH(int16_t, *src==bcf_int16_missing, *src==bcf_int16_vector_end, int); break; + case BCF_BT_INT32: BRANCH(int32_t, *src==bcf_int32_missing, *src==bcf_int32_vector_end, int); break; + case BCF_BT_FLOAT: BRANCH(float, bcf_float_is_missing(*src), bcf_float_is_vector_end(*src), float); break; + default: fprintf(stderr,"TODO: %s:%d .. info->type=%d\n", __FILE__,__LINE__, info->type); exit(1); + } + #undef BRANCH + } + else + { + #define BRANCH(type_t, is_missing, is_vector_end, out_type_t) { \ + type_t *src = (type_t *) info->vptr; \ + out_type_t *tgt = (out_type_t *) agr->buf; \ + int iori,jori, inew,jnew; \ + for (iori=0; iorin_allele; iori++) \ + { \ + inew = als->map[iori]; \ + for (jori=0; jori<=iori; jori++) \ + { \ + jnew = als->map[jori]; \ + int kori = iori*(iori+1)/2 + jori; \ + if ( is_vector_end ) break; \ + if ( is_missing ) continue; \ + int knew = inew>jnew ? inew*(inew+1)/2 + jnew : jnew*(jnew+1)/2 + inew; \ + tgt[knew] = src[kori]; \ + } \ + if ( jori<=iori ) break; \ + } \ + } + switch (info->type) { + case BCF_BT_INT8: BRANCH(int8_t, src[kori]==bcf_int8_missing, src[kori]==bcf_int8_vector_end, int); break; + case BCF_BT_INT16: BRANCH(int16_t, src[kori]==bcf_int16_missing, src[kori]==bcf_int16_vector_end, int); break; + case BCF_BT_INT32: BRANCH(int32_t, src[kori]==bcf_int32_missing, src[kori]==bcf_int32_vector_end, int); break; + case BCF_BT_FLOAT: BRANCH(float, bcf_float_is_missing(src[kori]), bcf_float_is_vector_end(src[kori]), float); break; + default: fprintf(stderr,"TODO: %s:%d .. info->type=%d\n", __FILE__,__LINE__, info->type); exit(1); + } + #undef BRANCH + } + } + else + { + kstring_t tmp; tmp.l = agr->nbuf; tmp.m = agr->mbuf; tmp.s = (char*)agr->buf; + if ( len==BCF_VL_A || len==BCF_VL_R ) + { + int iori, ifrom = len==BCF_VL_A ? 1 : 0; + for (iori=ifrom; iorin_allele; iori++) + { + int ret = copy_string_field((char*)info->vptr, iori-ifrom, info->len, &tmp, als->map[iori]-ifrom); + if ( ret ) + error("Error at %s:%d: wrong number of fields in %s?\n", bcf_seqname(hdr,line),line->pos+1,agr->hdr_tag); + } + } + else + { + int iori,jori, inew,jnew; + for (iori=0; iorin_allele; iori++) + { + inew = als->map[iori]; + for (jori=0; jori<=iori; jori++) + { + jnew = als->map[jori]; + int kori = iori*(iori+1)/2 + jori; + int knew = bcf_alleles2gt(inew,jnew); + int ret = copy_string_field((char*)info->vptr, kori, info->len, &tmp, knew); + if ( ret ) + error("Error at %s:%d: wrong number of fields in %s?\n", bcf_seqname(hdr,line),line->pos+1,agr->hdr_tag); + } + } + } + agr->mbuf = tmp.m; agr->nbuf = tmp.l; agr->buf = (uint8_t*)tmp.s; + } +} + +void merge_info(args_t *args, bcf1_t *out) +{ + bcf_srs_t *files = args->files; + bcf_hdr_t *out_hdr = args->out_hdr; + + int i, j, ret; + khiter_t kitr; + strdict_t *tmph = args->tmph; + kh_clear(strdict, tmph); + + maux_t *ma = args->maux; + ma->nAGR_info = 0; + out->n_info = 0; + info_rules_reset(args); + for (i=0; inreaders; i++) + { + bcf1_t *line = maux_get_line(args,i); + if ( !line ) continue; + int irec = ma->buf[i].cur; + bcf_sr_t *reader = &files->readers[i]; + bcf_hdr_t *hdr = reader->header; + for (j=0; jn_info; j++) + { + bcf_info_t *inf = &line->d.info[j]; + + const char *key = hdr->id[BCF_DT_ID][inf->key].key; + if ( !strcmp("AC",key) || !strcmp("AN",key) ) continue; // AC and AN are done in merge_format() after genotypes are done + + int id = bcf_hdr_id2int(out_hdr, BCF_DT_ID, key); + if ( id==-1 ) error("Error: The INFO field is not defined in the header: %s\n", key); + + kitr = kh_get(strdict, tmph, key); // have we seen the tag in one of the readers? + int len = bcf_hdr_id2length(hdr,BCF_HL_INFO,inf->key); + if ( args->nrules ) + { + info_rule_t *rule = (info_rule_t*) bsearch(key, args->rules, args->nrules, sizeof(*args->rules), info_rules_comp_key); + if ( rule ) + { + maux1_t *als = ( len==BCF_VL_A || len==BCF_VL_G || len==BCF_VL_R ) ? &ma->buf[i].rec[irec] : NULL; + if ( info_rules_add_values(args, hdr, line, rule, als, len) ) continue; + } + } + + // Todo: Number=AGR tags should use the newer info_rules_* functions (info_rules_merge_first to be added) + // and merge_AGR_info_tag to be made obsolete. + if ( len==BCF_VL_A || len==BCF_VL_G || len==BCF_VL_R ) // Number=R,G,A requires special treatment + { + if ( kitr == kh_end(tmph) ) + { + // seeing this key for the first time + ma->nAGR_info++; + hts_expand0(AGR_info_t,ma->nAGR_info,ma->mAGR_info,ma->AGR_info); + kitr = kh_put(strdict, tmph, key, &ret); + kh_val(tmph,kitr) = ma->nAGR_info - 1; + ma->AGR_info[ma->nAGR_info-1].hdr_tag = key; + ma->AGR_info[ma->nAGR_info-1].type = bcf_hdr_id2type(hdr,BCF_HL_INFO,inf->key); + ma->AGR_info[ma->nAGR_info-1].nbuf = 0; // size of the buffer + switch (len) + { + case BCF_VL_A: ma->AGR_info[ma->nAGR_info-1].nvals = ma->nout_als - 1; break; + case BCF_VL_G: ma->AGR_info[ma->nAGR_info-1].nvals = bcf_alleles2gt(ma->nout_als-1,ma->nout_als-1)+1; break; + case BCF_VL_R: ma->AGR_info[ma->nAGR_info-1].nvals = ma->nout_als; break; + } + } + kitr = kh_get(strdict, tmph, key); + int idx = kh_val(tmph, kitr); + if ( idx<0 ) error("Error occurred while processing INFO tag \"%s\" at %s:%d\n", key,bcf_seqname(hdr,line),line->pos+1); + merge_AGR_info_tag(hdr, line,inf,len,&ma->buf[i].rec[irec],&ma->AGR_info[idx]); + continue; + } + + if ( kitr == kh_end(tmph) ) + { + // Seeing this key for the first time. Although quite hacky, + // this is faster than anything else given the data structures.. + + hts_expand0(bcf_info_t,out->n_info+1,out->d.m_info,out->d.info); + out->d.info[out->n_info].key = id; + out->d.info[out->n_info].type = inf->type; + out->d.info[out->n_info].len = inf->len; + out->d.info[out->n_info].v1.i = inf->v1.i; + out->d.info[out->n_info].v1.f = inf->v1.f; + out->d.info[out->n_info].vptr_off = inf->vptr_off; + out->d.info[out->n_info].vptr_len = inf->vptr_len; + out->d.info[out->n_info].vptr_free = 1; + out->d.info[out->n_info].vptr = (uint8_t*) malloc(inf->vptr_len+inf->vptr_off); + memcpy(out->d.info[out->n_info].vptr,inf->vptr-inf->vptr_off, inf->vptr_len+inf->vptr_off); + out->d.info[out->n_info].vptr += inf->vptr_off; + if ( (args->output_type & FT_BCF) && id!=bcf_hdr_id2int(hdr, BCF_DT_ID, key) ) + bcf_info_set_id(out, &out->d.info[out->n_info], id, &args->tmps); + out->d.shared_dirty |= BCF1_DIRTY_INF; + out->n_info++; + kitr = kh_put(strdict, tmph, key, &ret); + kh_val(tmph,kitr) = -(out->n_info-1); // arbitrary negative value + } + } + } + for (i=0; inrules; i++) + args->rules[i].merger(args->out_hdr, out, &args->rules[i]); + for (i=0; inAGR_info; i++) + { + AGR_info_t *agr = &ma->AGR_info[i]; + bcf_update_info(out_hdr,out,agr->hdr_tag,agr->buf,agr->nvals,agr->type); + } +} + +void update_AN_AC(bcf_hdr_t *hdr, bcf1_t *line) +{ + int32_t an = 0, *tmp = (int32_t*) malloc(sizeof(int)*line->n_allele); + int ret = bcf_calc_ac(hdr, line, tmp, BCF_UN_FMT); + if ( ret>0 ) + { + int i; + for (i=0; in_allele; i++) an += tmp[i]; + bcf_update_info_int32(hdr, line, "AN", &an, 1); + bcf_update_info_int32(hdr, line, "AC", tmp+1, line->n_allele-1); + } + free(tmp); +} + +void merge_GT(args_t *args, bcf_fmt_t **fmt_map, bcf1_t *out) +{ + bcf_srs_t *files = args->files; + bcf_hdr_t *out_hdr = args->out_hdr; + maux_t *ma = args->maux; + int i, ismpl = 0, nsamples = bcf_hdr_nsamples(out_hdr); + + int nsize = 0, msize = sizeof(int32_t); + for (i=0; inreaders; i++) + { + if ( !fmt_map[i] ) continue; + if ( fmt_map[i]->n > nsize ) nsize = fmt_map[i]->n; + } + + if ( ma->ntmp_arr < nsamples*nsize*msize ) + { + ma->ntmp_arr = nsamples*nsize*msize; + ma->tmp_arr = realloc(ma->tmp_arr, ma->ntmp_arr); + } + memset(ma->smpl_ploidy,0,nsamples*sizeof(int)); + + int default_gt = args->missing_to_ref ? bcf_gt_unphased(0) : bcf_gt_missing; + for (i=0; inreaders; i++) + { + bcf_sr_t *reader = &files->readers[i]; + bcf_hdr_t *hdr = reader->header; + bcf_fmt_t *fmt_ori = fmt_map[i]; + int32_t *tmp = (int32_t *) ma->tmp_arr + ismpl*nsize; + int irec = ma->buf[i].cur; + + int j, k; + if ( !fmt_ori ) + { + // missing values: assume maximum ploidy + for (j=0; jsmpl_ploidy[ismpl+j]++; } + tmp += nsize; + } + ismpl += bcf_hdr_nsamples(hdr); + continue; + } + + #define BRANCH(type_t, vector_end) { \ + type_t *p_ori = (type_t*) fmt_ori->p; \ + if ( !ma->buf[i].rec[irec].als_differ ) \ + { \ + /* the allele numbering is unchanged */ \ + for (j=0; jn; k++) \ + { \ + if ( p_ori[k]==vector_end ) break; /* smaller ploidy */ \ + ma->smpl_ploidy[ismpl+j]++; \ + if ( bcf_gt_is_missing(p_ori[k]) ) tmp[k] = 0; /* missing allele */ \ + else tmp[k] = p_ori[k]; \ + } \ + for (; kn; \ + } \ + ismpl += bcf_hdr_nsamples(hdr); \ + continue; \ + } \ + /* allele numbering needs to be changed */ \ + for (j=0; jn; k++) \ + { \ + if ( p_ori[k]==vector_end ) break; /* smaller ploidy */ \ + ma->smpl_ploidy[ismpl+j]++; \ + if ( bcf_gt_is_missing(p_ori[k]) ) tmp[k] = 0; /* missing allele */ \ + else \ + { \ + int al = (p_ori[k]>>1) - 1; \ + al = al<=0 ? al + 1 : ma->buf[i].rec[irec].map[al] + 1; \ + tmp[k] = (al << 1) | ((p_ori[k])&1); \ + } \ + } \ + for (; kn; \ + } \ + ismpl += bcf_hdr_nsamples(hdr); \ + } + switch (fmt_ori->type) + { + case BCF_BT_INT8: BRANCH(int8_t, bcf_int8_vector_end); break; + case BCF_BT_INT16: BRANCH(int16_t, bcf_int16_vector_end); break; + case BCF_BT_INT32: BRANCH(int32_t, bcf_int32_vector_end); break; + default: error("Unexpected case: %d\n", fmt_ori->type); + } + #undef BRANCH + } + bcf_update_format_int32(out_hdr, out, "GT", (int32_t*)ma->tmp_arr, nsamples*nsize); +} + +void merge_format_field(args_t *args, bcf_fmt_t **fmt_map, bcf1_t *out) +{ + bcf_srs_t *files = args->files; + bcf_hdr_t *out_hdr = args->out_hdr; + maux_t *ma = args->maux; + int i, ismpl = 0, nsamples = bcf_hdr_nsamples(out_hdr); + + const char *key = NULL; + int nsize = 0, length = BCF_VL_FIXED, type = -1; + for (i=0; inreaders; i++) + { + if ( !maux_get_line(args,i) ) continue; + if ( !fmt_map[i] ) continue; + if ( !key ) key = files->readers[i].header->id[BCF_DT_ID][fmt_map[i]->id].key; + type = fmt_map[i]->type; + if ( IS_VL_G(files->readers[i].header, fmt_map[i]->id) ) + { + length = BCF_VL_G; + nsize = out->n_allele*(out->n_allele + 1)/2; + break; + } + if ( IS_VL_A(files->readers[i].header, fmt_map[i]->id) ) + { + length = BCF_VL_A; + nsize = out->n_allele - 1; + break; + } + if ( IS_VL_R(files->readers[i].header, fmt_map[i]->id) ) + { + length = BCF_VL_R; + nsize = out->n_allele; + break; + } + if ( fmt_map[i]->n > nsize ) nsize = fmt_map[i]->n; + } + + int msize = sizeof(float)>sizeof(int32_t) ? sizeof(float) : sizeof(int32_t); + if ( ma->ntmp_arr < nsamples*nsize*msize ) + { + ma->ntmp_arr = nsamples*nsize*msize; + ma->tmp_arr = realloc(ma->tmp_arr, ma->ntmp_arr); + } + + // Fill the temp array for all samples by collecting values from all files + for (i=0; inreaders; i++) + { + bcf_sr_t *reader = &files->readers[i]; + bcf_hdr_t *hdr = reader->header; + bcf_fmt_t *fmt_ori = fmt_map[i]; + bcf1_t *line = maux_get_line(args, i); + int irec = ma->buf[i].cur; + if ( fmt_ori ) + { + type = fmt_ori->type; + int nals_ori = line->n_allele; + if ( length==BCF_VL_G ) + { + // if all fields are missing then n==1 is valid + if ( fmt_ori->n!=1 && fmt_ori->n != nals_ori*(nals_ori+1)/2 && fmt_map[i]->n != nals_ori ) + error("Incorrect number of %s fields (%d) at %s:%d, cannot merge.\n", key,fmt_ori->n,bcf_seqname(args->out_hdr,out),out->pos+1); + } + else if ( length==BCF_VL_A ) + { + if ( fmt_ori->n!=1 && fmt_ori->n != nals_ori-1 ) + error("Incorrect number of %s fields (%d) at %s:%d, cannot merge.\n", key,fmt_ori->n,bcf_seqname(args->out_hdr,out),out->pos+1); + } + else if ( length==BCF_VL_R ) + { + if ( fmt_ori->n!=1 && fmt_ori->n != nals_ori ) + error("Incorrect number of %s fields (%d) at %s:%d, cannot merge.\n", key,fmt_ori->n,bcf_seqname(args->out_hdr,out),out->pos+1); + } + } + + // set the values + #define BRANCH(tgt_type_t, src_type_t, src_is_missing, src_is_vector_end, tgt_set_missing, tgt_set_vector_end) { \ + int j, l, k; \ + tgt_type_t *tgt = (tgt_type_t *) ma->tmp_arr + ismpl*nsize; \ + if ( !fmt_ori ) \ + { \ + /* the field is not present in this file, set missing values */ \ + for (j=0; jp; \ + if ( (length!=BCF_VL_G && length!=BCF_VL_A && length!=BCF_VL_R) || (line->n_allele==out->n_allele && !ma->buf[i].rec[irec].als_differ) ) \ + { \ + /* alleles unchanged, copy over */ \ + for (j=0; jn; l++) \ + { \ + if ( src_is_vector_end ) break; \ + else if ( src_is_missing ) tgt_set_missing; \ + else *tgt = *src; \ + tgt++; src++; \ + } \ + for (k=l; kn - l; \ + } \ + ismpl += bcf_hdr_nsamples(hdr); \ + continue; \ + } \ + /* allele numbering needs to be changed */ \ + if ( length==BCF_VL_G ) \ + { \ + /* Number=G tags */ \ + for (j=0; jtmp_arr + (ismpl+j)*nsize; \ + src = (src_type_t*) fmt_ori->p + j*fmt_ori->n; \ + if ( (src_is_missing && fmt_ori->n==1) || (++src && src_is_vector_end) ) \ + { \ + /* tag with missing value "." */ \ + tgt_set_missing; \ + for (l=1; lsmpl_ploidy[ismpl+j]==1 ? out->n_allele : out->n_allele*(out->n_allele + 1)/2; \ + for (l=0; lsmpl_ploidy[ismpl+j]==1 ) \ + { \ + /* Haploid */ \ + int iori, inew; \ + for (iori=0; iorin_allele; iori++) \ + { \ + inew = ma->buf[i].rec[irec].map[iori]; \ + src = (src_type_t*) fmt_ori->p + j*fmt_ori->n + iori; \ + tgt = (tgt_type_t *) ma->tmp_arr + (ismpl+j)*nsize + inew; \ + if ( src_is_vector_end ) break; \ + if ( src_is_missing ) tgt_set_missing; \ + else *tgt = *src; \ + } \ + } \ + else \ + { \ + /* Diploid */ \ + int iori,jori, inew,jnew; \ + for (iori=0; iorin_allele; iori++) \ + { \ + inew = ma->buf[i].rec[irec].map[iori]; \ + for (jori=0; jori<=iori; jori++) \ + { \ + jnew = ma->buf[i].rec[irec].map[jori]; \ + int kori = iori*(iori+1)/2 + jori; \ + int knew = inew>jnew ? inew*(inew+1)/2 + jnew : jnew*(jnew+1)/2 + inew; \ + src = (src_type_t*) fmt_ori->p + j*fmt_ori->n + kori; \ + tgt = (tgt_type_t *) ma->tmp_arr + (ismpl+j)*nsize + knew; \ + if ( src_is_vector_end ) \ + { \ + iori = line->n_allele; \ + break; \ + } \ + if ( src_is_missing ) tgt_set_missing; \ + else *tgt = *src; \ + } \ + } \ + } \ + } \ + } \ + else \ + { \ + /* Number=A or Number=R tags */ \ + int ifrom = length==BCF_VL_A ? 1 : 0; \ + for (j=0; jtmp_arr + (ismpl+j)*nsize; \ + src = (src_type_t*) (fmt_ori->p + j*fmt_ori->size); \ + if ( (src_is_missing && fmt_ori->n==1) || (++src && src_is_vector_end) ) \ + { \ + /* tag with missing value "." */ \ + tgt_set_missing; \ + for (l=1; lp + j*fmt_ori->size); \ + for (l=0; ln_allele; iori++) \ + { \ + inew = ma->buf[i].rec[irec].map[iori] - ifrom; \ + tgt = (tgt_type_t *) ma->tmp_arr + (ismpl+j)*nsize + inew; \ + if ( src_is_vector_end ) break; \ + if ( src_is_missing ) tgt_set_missing; \ + else *tgt = *src; \ + src++; \ + } \ + } \ + } \ + ismpl += bcf_hdr_nsamples(hdr); \ + } + switch (type) + { + case BCF_BT_INT8: BRANCH(int32_t, int8_t, *src==bcf_int8_missing, *src==bcf_int8_vector_end, *tgt=bcf_int32_missing, *tgt=bcf_int32_vector_end); break; + case BCF_BT_INT16: BRANCH(int32_t, int16_t, *src==bcf_int16_missing, *src==bcf_int16_vector_end, *tgt=bcf_int32_missing, *tgt=bcf_int32_vector_end); break; + case BCF_BT_INT32: BRANCH(int32_t, int32_t, *src==bcf_int32_missing, *src==bcf_int32_vector_end, *tgt=bcf_int32_missing, *tgt=bcf_int32_vector_end); break; + case BCF_BT_FLOAT: BRANCH(float, float, bcf_float_is_missing(*src), bcf_float_is_vector_end(*src), bcf_float_set_missing(*tgt), bcf_float_set_vector_end(*tgt)); break; + case BCF_BT_CHAR: BRANCH(uint8_t, uint8_t, *src==bcf_str_missing, *src==bcf_str_vector_end, *tgt=bcf_str_missing, *tgt=bcf_str_vector_end); break; + default: error("Unexpected case: %d, %s\n", type, key); + } + #undef BRANCH + } + if ( type==BCF_BT_FLOAT ) + bcf_update_format_float(out_hdr, out, key, (float*)ma->tmp_arr, nsamples*nsize); + else if ( type==BCF_BT_CHAR ) + bcf_update_format_char(out_hdr, out, key, (float*)ma->tmp_arr, nsamples*nsize); + else + bcf_update_format_int32(out_hdr, out, key, (int32_t*)ma->tmp_arr, nsamples*nsize); +} + +void merge_format(args_t *args, bcf1_t *out) +{ + bcf_srs_t *files = args->files; + bcf_hdr_t *out_hdr = args->out_hdr; + maux_t *ma = args->maux; + if ( !ma->nfmt_map ) + { + ma->nfmt_map = 2; + ma->fmt_map = (bcf_fmt_t**) calloc(ma->nfmt_map*files->nreaders, sizeof(bcf_fmt_t*)); + } + else + memset(ma->fmt_map, 0, ma->nfmt_map*files->nreaders*sizeof(bcf_fmt_t**)); + + khiter_t kitr; + strdict_t *tmph = args->tmph; + kh_clear(strdict, tmph); + int i, j, ret, has_GT = 0, max_ifmt = 0; // max fmt index + for (i=0; inreaders; i++) + { + bcf1_t *line = maux_get_line(args,i); + if ( !line ) continue; + bcf_sr_t *reader = &files->readers[i]; + bcf_hdr_t *hdr = reader->header; + for (j=0; jn_fmt; j++) + { + // Wat this tag already seen? + bcf_fmt_t *fmt = &line->d.fmt[j]; + const char *key = hdr->id[BCF_DT_ID][fmt->id].key; + kitr = kh_get(strdict, tmph, key); + + int ifmt; + if ( kitr != kh_end(tmph) ) + ifmt = kh_value(tmph, kitr); // seen + else + { + // new FORMAT tag + if ( key[0]=='G' && key[1]=='T' && key[2]==0 ) { has_GT = 1; ifmt = 0; } + else + { + ifmt = ++max_ifmt; + if ( max_ifmt >= ma->nfmt_map ) + { + ma->fmt_map = (bcf_fmt_t**) realloc(ma->fmt_map, sizeof(bcf_fmt_t*)*(max_ifmt+1)*files->nreaders); + memset(ma->fmt_map+ma->nfmt_map*files->nreaders, 0, (max_ifmt-ma->nfmt_map+1)*files->nreaders*sizeof(bcf_fmt_t*)); + ma->nfmt_map = max_ifmt+1; + } + } + kitr = kh_put(strdict, tmph, key, &ret); + kh_value(tmph, kitr) = ifmt; + } + ma->fmt_map[ifmt*files->nreaders+i] = fmt; + } + // Check if the allele numbering must be changed + int irec = ma->buf[i].cur; + for (j=1; jn_allele; j++) + if ( ma->buf[i].rec[irec].map[j]!=j ) break; + ma->buf[i].rec[irec].als_differ = j==line->n_allele ? 0 : 1; + } + + out->n_sample = bcf_hdr_nsamples(out_hdr); + if ( has_GT ) + merge_GT(args, ma->fmt_map, out); + update_AN_AC(out_hdr, out); + + for (i=1; i<=max_ifmt; i++) + merge_format_field(args, &ma->fmt_map[i*files->nreaders], out); + out->d.indiv_dirty = 1; +} + +void gvcf_set_alleles(args_t *args) +{ + int i,k; + bcf_srs_t *files = args->files; + maux_t *maux = args->maux; + gvcf_aux_t *gaux = maux->gvcf; + for (i=0; inals; i++) + { + free(maux->als[i]); + maux->als[i] = NULL; + } + maux->nals = 0; + + for (i=0; inreaders; i++) + { + if ( !gaux[i].active ) continue; + bcf1_t *line = maux_get_line(args, i); + int irec = maux->buf[i].cur; + + hts_expand(int, line->n_allele, maux->buf[i].rec[irec].mmap, maux->buf[i].rec[irec].map); + if ( !maux->nals ) // first record, copy the alleles to the output + { + maux->nals = line->n_allele; + hts_expand0(char*, maux->nals, maux->mals, maux->als); + hts_expand0(int, maux->nals, maux->ncnt, maux->cnt); + for (k=0; knals; k++) + { + if ( maux->als[k] ) free(maux->als[k]); + maux->als[k] = strdup(line->d.allele[k]); + maux->buf[i].rec[irec].map[k] = k; + } + } + else + { + maux->als = merge_alleles(line->d.allele, line->n_allele, maux->buf[i].rec[irec].map, maux->als, &maux->nals, &maux->mals); + if ( !maux->als ) + { + bcf_hdr_t *hdr = bcf_sr_get_header(args->files,i); + error("Failed to merge alleles at %s:%d\n",bcf_seqname(hdr,line),line->pos+1); + } + } + } +} + +/* + Output staged gVCF blocks, end is the last position of the block. Assuming + gaux[i].active flags are set and maux_get_line returns correct lines. +*/ +void gvcf_write_block(args_t *args, int start, int end) +{ + int i; + maux_t *maux = args->maux; + gvcf_aux_t *gaux = maux->gvcf; + assert(gaux); + + // Update POS + int min = INT_MAX; + char ref = 'N'; + for (i=0; ifiles->nreaders; i++) + { + if ( !gaux[i].active ) continue; + if ( ref=='N' && gaux[i].line->pos==start ) ref = gaux[i].line->d.allele[0][0]; + gaux[i].line->pos = start; + } + for (i=0; ifiles->nreaders; i++) + { + if ( !gaux[i].active ) continue; + if ( gaux[i].end < start ) + { + gaux[i].active = 0; + maux->buf[i].cur = -1; + continue; + } + gaux[i].line->d.allele[0][0] = ref; + if ( min > gaux[i].end ) min = gaux[i].end; + } + // Check for valid gVCF blocks in this region + if ( min==INT_MAX ) + { + assert(0); + maux->gvcf_min = 0; + return; + } + + bcf1_t *out = args->out_line; + + gvcf_set_alleles(args); + + // Merge the staged lines + merge_chrom2qual(args, out); + merge_filter(args, out); + merge_info(args, out); + merge_format(args, out); + + if ( args->gvcf_fai && out->d.allele[0][0]=='N' ) + { + int slen = 0; + char *seq = faidx_fetch_seq(args->gvcf_fai,maux->chr,out->pos,out->pos,&slen); + if (slen) + { + out->d.allele[0][0] = seq[0]; + free(seq); + } + } + + // Update END boundary + if ( end > start ) + { + end++; + bcf_update_info_int32(args->out_hdr, out, "END", &end, 1); + } + else + bcf_update_info_int32(args->out_hdr, out, "END", NULL, 0); + bcf_write1(args->out_fh, args->out_hdr, out); + bcf_clear1(out); + + + // Inactivate blocks which do not extend beyond END and find new gvcf_min + min = INT_MAX; + for (i=0; ifiles->nreaders; i++) + { + if ( !gaux[i].active ) continue; + if ( gaux[i].end < end ) + { + gaux[i].active = 0; + maux->buf[i].cur = -1; + continue; + } + // next min END position bigger than the current one + if ( maux->gvcf_min < gaux[i].end+1 && min > gaux[i].end+1 ) min = gaux[i].end + 1; + } + maux->gvcf_min = min==INT_MAX ? 0 : min; +} + +/* + Flush staged gVCF blocks. Flush everything if there are no more lines + (done=1) or if there is a new chromosome. If still on the same chromosome, + all hanging blocks must be ended by creating new records: + A + 1 END=10 + B + 3 END=7 + C + 3 END=5 + out + 1 END=2 A . . + 3 END=5 A B C + 6 END=7 A B . + 8 END=10 A . . + +*/ +void gvcf_flush(args_t *args, int done) +{ + int i; + maux_t *maux = args->maux; + + if ( !maux->chr ) return; // first time here, nothing to flush + + int flush_until = INT_MAX; + if ( !done ) + { + // Get current position and chromosome + for (i=0; in; i++) + if ( bcf_sr_has_line(maux->files,i) ) break; + bcf1_t *line = bcf_sr_get_line(maux->files,i); + bcf_hdr_t *hdr = bcf_sr_get_header(maux->files,i); + + if ( !strcmp(maux->chr,bcf_seqname(hdr,line)) ) flush_until = line->pos; // still on the same chr + } + + // When called on a region, trim the blocks accordingly + int start = maux->gvcf_break>=0 ? maux->gvcf_break + 1 : maux->pos; + if ( args->regs ) + { + int rstart = -1, rend = -1; + if ( regidx_overlap(args->regs,maux->chr,start,flush_until,args->regs_itr) ) + { + // In case there are multiple regions, we treat them as one + rstart = args->regs_itr->beg; + while ( regitr_overlap(args->regs_itr) ) rend = args->regs_itr->end; + } + if ( rstart > start ) start = rstart; + if ( rend < flush_until ) flush_until = rend+1; + } + + // output all finished blocks + while ( maux->gvcf_min && start < flush_until ) + { + // does the block end before the new line or is it interrupted? + int tmp = maux->gvcf_min < flush_until ? maux->gvcf_min : flush_until; + if ( start > tmp-1 ) break; + gvcf_write_block(args,start,tmp-1); // gvcf_min is 1-based + start = tmp; + } +} + +/* + Check incoming lines for new gVCF blocks, set pointer to the current source + buffer (gvcf or readers). In contrast to gvcf_flush, this function can be + called only after maux_reset as it relies on updated maux buffers. +*/ +void gvcf_stage(args_t *args, int pos) +{ + maux_t *maux = args->maux; + gvcf_aux_t *gaux = maux->gvcf; + bcf_srs_t *files = args->files; + int32_t *end = (int32_t*) maux->tmp_arr; + int i, nend = maux->ntmp_arr / sizeof(int32_t); + + maux->gvcf_break = -1; + maux->gvcf_min = INT_MAX; + for (i=0; inreaders; i++) + { + if ( gaux[i].active ) + { + // gvcf block should not overlap with another record + if ( maux->gvcf_min > gaux[i].end+1 ) maux->gvcf_min = gaux[i].end + 1; + maux->buf[i].beg = 0; + maux->buf[i].end = 1; + maux->buf[i].cur = 0; + continue; + } + + // Does any of the lines have END set? It is enough to check only the + // first line, there should be no duplicate records with END in gVCF + + if ( maux->buf[i].beg==maux->buf[i].end ) continue; // no new record + + int irec = maux->buf[i].beg; + bcf_hdr_t *hdr = bcf_sr_get_header(files, i); + bcf1_t *line = args->files->readers[i].buffer[irec]; + int ret = bcf_get_info_int32(hdr,line,"END",&end,&nend); + if ( ret==1 ) + { + // END is set, this is a new gVCF block. Cache this line in gaux[i] and swap with + // an empty record: the gaux line must be kept until we reach its END. + gaux[i].active = 1; + gaux[i].end = end[0] - 1; + SWAP(bcf1_t*,args->files->readers[i].buffer[irec],gaux[i].line); + gaux[i].line->pos = pos; + + maux->buf[i].lines = &gaux[i].line; + maux->buf[i].beg = 0; + maux->buf[i].end = 1; + maux->buf[i].cur = 0; + + // Set the rid,pos of the swapped line in the buffer or else the + // synced reader will have a problem with the next line + // + args->files->readers[i].buffer[irec]->rid = maux->buf[i].rid; + args->files->readers[i].buffer[irec]->pos = maux->pos; + + // Update block offsets + if ( maux->gvcf_min > gaux[i].end+1 ) maux->gvcf_min = gaux[i].end + 1; + } + else + maux->gvcf_break = line->pos; // must break the gvcf block + } + maux->ntmp_arr = nend * sizeof(int32_t); + maux->tmp_arr = end; + if ( maux->gvcf_min==INT_MAX ) maux->gvcf_min = 0; +} + + +void debug_buffers(FILE *fp, bcf_srs_t *files); +void debug_buffer(FILE *fp, bcf_srs_t *files, int reader); + +/* + Flush all buffered and processed records with the same coordinate. + Note that synced reader discards buffer[0], so that needs to stay + untouched. +*/ +void clean_buffer(args_t *args) +{ + maux_t *ma = args->maux; + + int ir; + for (ir=0; irn; ir++) + { + // Invalidate pointer to reader's buffer or else gvcf_flush will attempt + // to use the old lines via maux_get_line() + if ( ma->gvcf && !ma->gvcf[ir].active ) ma->buf[ir].cur = -1; + + bcf_sr_t *reader = bcf_sr_get_reader(args->files,ir); + if ( !reader->nbuffer ) continue; // nothing to clean + + bcf1_t **buf = reader->buffer; + if ( buf[1]->rid!=ma->buf[ir].rid || buf[1]->pos!=ma->pos ) continue; // nothing to flush + + int a = 1, b = 2; + while ( b<=reader->nbuffer && buf[b]->rid==ma->buf[ir].rid && buf[b]->pos==ma->pos ) b++; + // b now points to the first line we want to preserve + while ( b<=reader->nbuffer ) + { + SWAP(bcf1_t*, buf[a], buf[b]); + a++; b++; + } + reader->nbuffer -= b-a; + } +} + +void debug_maux(args_t *args) +{ + bcf_srs_t *files = args->files; + maux_t *maux = args->maux; + int j,k,l; + + fprintf(stderr,"Alleles to merge at %d, nals=%d\n", maux->pos+1,maux->nals); + for (j=0; jnreaders; j++) + { + bcf_sr_t *reader = &files->readers[j]; + buffer_t *buf = &maux->buf[j]; + fprintf(stderr," reader %d: ", j); + for (k=buf->beg; kend; k++) + { + if ( buf->rec[k].skip & SKIP_DONE ) continue; + bcf1_t *line = reader->buffer[k]; + fprintf(stderr,"\t"); + if ( buf->rec[k].skip ) fprintf(stderr,"["); // this record will not be merged in this round + for (l=0; ln_allele; l++) + fprintf(stderr,"%s%s", l==0?"":",", line->d.allele[l]); + if ( buf->rec[k].skip ) fprintf(stderr,"]"); + } + fprintf(stderr,"\n"); + } + fprintf(stderr," counts: "); + for (j=0; jnals; j++) fprintf(stderr,"%s %dx %s", j==0?"":",",maux->cnt[j], maux->als[j]); + fprintf(stderr,"\n\n"); +} + +void debug_state(args_t *args) +{ + maux_t *maux = args->maux; + int i,j; + for (i=0; ifiles->nreaders; i++) + { + fprintf(stderr,"reader %d:\tcur,beg,end=% d,%d,%d", i,maux->buf[i].cur,maux->buf[i].beg,maux->buf[i].end); + if ( maux->buf[i].cur >=0 ) + { + bcf_hdr_t *hdr = bcf_sr_get_header(args->files,i); + const char *chr = bcf_hdr_id2name(hdr, maux->buf[i].rid); + fprintf(stderr,"\t"); + for (j=maux->buf[i].beg; jbuf[i].end; j++) fprintf(stderr," %s:%d",chr,maux->buf[i].lines[j]->pos+1); + } + fprintf(stderr,"\n"); + } + for (i=0; ifiles->nreaders; i++) + { + fprintf(stderr,"reader %d:\tgvcf_active=%d", i,maux->gvcf[i].active); + if ( maux->gvcf[i].active ) fprintf(stderr,"\tpos,end=%d,%d", maux->gvcf[i].line->pos+1,maux->gvcf[i].end+1); + fprintf(stderr,"\n"); + } + fprintf(stderr,"\n"); +} + + +/* + Determine which line should be merged from which reader: go through all + readers and all buffered lines, expand REF,ALT and try to match lines with + the same ALTs. + */ +int can_merge(args_t *args) +{ + bcf_srs_t *files = args->files; + int snp_mask = (VCF_SNP<<1)|(VCF_MNP<<1), indel_mask = VCF_INDEL<<1, ref_mask = 1; + maux_t *maux = args->maux; + gvcf_aux_t *gaux = maux->gvcf; + char *id = NULL, ref = 'N'; + int i,j,k, ntodo = 0; + + for (i=0; inals; i++) + { + free(maux->als[i]); + maux->als[i] = NULL; + } + maux->var_types = maux->nals = 0; + + for (i=0; inreaders; i++) + { + buffer_t *buf = &maux->buf[i]; + + if ( gaux && gaux[i].active ) + { + // skip readers with active gvcf blocks + buf->rec[buf->beg].skip = SKIP_DIFF; + continue; + } + for (j=buf->beg; jend; j++) + { + if ( buf->rec[j].skip & SKIP_DONE ) continue; + + buf->rec[j].skip = SKIP_DIFF; + ntodo++; + + if ( args->merge_by_id ) + id = buf->lines[j]->d.id; + else + { + int var_type = bcf_get_variant_types(buf->lines[j]); + maux->var_types |= var_type ? var_type<<1 : 1; + } + } + + // for gvcf: find out REF at this position + if ( buf->beg < buf->end && ref=='N' ) + ref = buf->lines[buf->beg]->d.allele[0][0]; + } + if ( !ntodo ) return 0; + + // In this loop we select from each reader compatible candidate lines. + // (i.e. SNPs or indels). Go through all files and all lines at this + // position and normalize relevant alleles. + // REF-only sites may be associated with both SNPs and indels. + for (i=0; inreaders; i++) + { + bcf_sr_t *reader = &files->readers[i]; + buffer_t *buf = &maux->buf[i]; + + if ( gaux && gaux[i].active ) + { + gaux[i].line->d.allele[0][0] = ref; + gaux[i].line->pos = maux->pos; + } + + for (j=buf->beg; jend; j++) + { + if ( buf->rec[j].skip & SKIP_DONE ) continue; + + bcf1_t *line = buf->lines[j]; // ptr to reader's buffer or gvcf buffer + + int line_type = bcf_get_variant_types(line); + line_type = line_type ? line_type<<1 : 1; + + // select relevant lines + if ( args->merge_by_id ) + { + if ( strcmp(id,line->d.id) ) continue; + } + else + { + if ( args->collapse==COLLAPSE_NONE && maux->nals ) + { + // All alleles of the tested record must be present in the + // selected maux record plus variant types must be the same + if ( (maux->var_types & line_type) != line_type ) continue; + if ( vcmp_set_ref(args->vcmp,maux->als[0],line->d.allele[0]) < 0 ) continue; // refs not compatible + for (k=1; kn_allele; k++) + { + if ( vcmp_find_allele(args->vcmp,maux->als+1,maux->nals-1,line->d.allele[k])>=0 ) break; + } + if ( !(line_type&ref_mask) && k==line->n_allele ) continue; // not a REF-only site and there is no matching allele + } + if ( !(args->collapse&COLLAPSE_ANY) ) + { + // Merge: + // - SNPs+SNPs+MNPs+REF if -m both,snps + // - indels+indels+REF if -m both,indels, REF only if SNPs are not present + // - SNPs come first + if ( line_type & indel_mask ) + { + if ( !(line_type&snp_mask) && maux->var_types&snp_mask ) continue; // SNPs come first + if ( args->do_gvcf && maux->var_types&ref_mask ) continue; // never merge indels with gVCF blocks + } + } + } + buf->rec[j].skip = 0; + + hts_expand(int, line->n_allele, buf->rec[j].mmap, buf->rec[j].map); + if ( !maux->nals ) // first record, copy the alleles to the output + { + maux->nals = line->n_allele; + hts_expand0(char*, maux->nals, maux->mals, maux->als); + hts_expand0(int, maux->nals, maux->ncnt, maux->cnt); + for (k=0; knals; k++) + { + free(maux->als[k]); + maux->als[k] = strdup(line->d.allele[k]); + buf->rec[j].map[k] = k; + maux->cnt[k] = 1; + } + continue; + } + // normalize alleles + maux->als = merge_alleles(line->d.allele, line->n_allele, buf->rec[j].map, maux->als, &maux->nals, &maux->mals); + if ( !maux->als ) error("Failed to merge alleles at %s:%d in %s\n",bcf_seqname(args->out_hdr,line),line->pos+1,reader->fname); + hts_expand0(int, maux->nals, maux->ncnt, maux->cnt); + for (k=1; kn_allele; k++) + maux->cnt[ buf->rec[j].map[k] ]++; // how many times an allele appears in the files + maux->cnt[0]++; + } + } + return 1; +} + +/* + Select records that have the same alleles; the input ordering of indels + must not matter. Multiple VCF lines can be emitted from this loop. + We expect only very few alleles and not many records with the same + position in the buffers, therefore the nested loops should not slow us + much. +*/ +void stage_line(args_t *args) +{ + int snp_mask = (VCF_SNP<<1)|(VCF_MNP<<1), indel_mask = VCF_INDEL<<1, ref_mask = 1; + bcf_srs_t *files = args->files; + maux_t *maux = args->maux; + + // debug_maux(args); + + // take the most frequent allele present in multiple files, REF is skipped + int i,j,k,icnt = 1; + for (i=2; inals; i++) + if ( maux->cnt[i] > maux->cnt[icnt] ) icnt = i; + + int nout = 0; + for (i=0; inreaders; i++) + { + buffer_t *buf = &maux->buf[i]; + buf->cur = -1; + if ( buf->beg >= buf->end ) continue; // no lines in the buffer + + // find lines with the same allele + for (j=buf->beg; jend; j++) + { + if ( buf->rec[j].skip ) continue; // done or not compatible + if ( args->merge_by_id ) break; + if ( maux->nals==1 && buf->lines[j]->n_allele==1 ) break; // REF-only record + + for (k=0; klines[j]->n_allele; k++) + if ( icnt==buf->rec[j].map[k] ) break; + + if ( klines[j]->n_allele ) break; + } + if ( j>=buf->end ) + { + // no matching allele found in this file + if ( args->collapse==COLLAPSE_NONE ) continue; + + for (j=buf->beg; jend; j++) + { + if ( buf->rec[j].skip ) continue; // done or not compatible + if ( args->collapse&COLLAPSE_ANY ) break; // anything can be merged + int line_type = bcf_get_variant_types(buf->lines[j]); + if ( maux->var_types&snp_mask && line_type&VCF_SNP && (args->collapse&COLLAPSE_SNPS) ) break; + if ( maux->var_types&indel_mask && line_type&VCF_INDEL && (args->collapse&COLLAPSE_INDELS) ) break; + if ( line_type==VCF_REF ) + { + if ( maux->var_types&snp_mask && (args->collapse&COLLAPSE_SNPS) ) break; + if ( maux->var_types&indel_mask && (args->collapse&COLLAPSE_INDELS) ) break; + if ( maux->var_types&ref_mask ) break; + } + else if ( maux->var_types&ref_mask ) + { + if ( line_type&snp_mask && (args->collapse&COLLAPSE_SNPS) ) break; + if ( line_type&indel_mask && (args->collapse&COLLAPSE_INDELS) ) break; + } + } + } + if ( jend ) + { + // found a suitable line for merging + buf->cur = j; + + // mark as finished so that it's ignored next time + buf->rec[j].skip = SKIP_DONE; + nout++; + } + } + assert( nout ); +} + +void merge_line(args_t *args) +{ + if ( args->regs ) + { + if ( !regidx_overlap(args->regs,args->maux->chr,args->maux->pos,args->maux->pos,NULL) ) return; + } + + bcf1_t *out = args->out_line; + merge_chrom2qual(args, out); + merge_filter(args, out); + merge_info(args, out); + if ( args->do_gvcf ) + bcf_update_info_int32(args->out_hdr, out, "END", NULL, 0); + merge_format(args, out); + bcf_write1(args->out_fh, args->out_hdr, out); + bcf_clear1(out); +} + +void bcf_hdr_append_version(bcf_hdr_t *hdr, int argc, char **argv, const char *cmd) +{ + kstring_t str = {0,0,0}; + ksprintf(&str,"##%sVersion=%s+htslib-%s\n", cmd, bcftools_version(), hts_version()); + bcf_hdr_append(hdr,str.s); + + str.l = 0; + ksprintf(&str,"##%sCommand=%s", cmd, argv[0]); + int i; + for (i=1; ioutput_fname, strerror(errno)); + if ( args->n_threads ) hts_set_opt(args->out_fh, HTS_OPT_THREAD_POOL, args->files->p); //hts_set_threads(args->out_fh, args->n_threads); + args->out_hdr = bcf_hdr_init("w"); + + if ( args->header_fname ) + { + if ( bcf_hdr_set(args->out_hdr,args->header_fname) ) error("Could not read/parse the header: %s\n", args->header_fname); + } + else + { + int i; + for (i=0; ifiles->nreaders; i++) + { + char buf[10]; snprintf(buf,10,"%d",i+1); + merge_headers(args->out_hdr, args->files->readers[i].header,buf,args->force_samples); + } + if (args->record_cmd_line) bcf_hdr_append_version(args->out_hdr, args->argc, args->argv, "bcftools_merge"); + bcf_hdr_sync(args->out_hdr); + } + info_rules_init(args); + + bcf_hdr_set_version(args->out_hdr, bcf_hdr_get_version(args->files->readers[0].header)); + bcf_hdr_write(args->out_fh, args->out_hdr); + if ( args->header_only ) + { + bcf_hdr_destroy(args->out_hdr); + hts_close(args->out_fh); + return; + } + + if ( args->collapse==COLLAPSE_NONE ) args->vcmp = vcmp_init(); + args->maux = maux_init(args); + args->out_line = bcf_init1(); + args->tmph = kh_init(strdict); + + while ( bcf_sr_next_line(args->files) ) + { + // output cached gVCF blocks which end before the new record + if ( args->do_gvcf ) + gvcf_flush(args,0); + + maux_reset(args->maux); + + // determine which of the new records are gvcf blocks + if ( args->do_gvcf ) + gvcf_stage(args, args->maux->pos); + + while ( can_merge(args) ) + { + stage_line(args); + merge_line(args); + } + clean_buffer(args); + // debug_state(args); + } + if ( args->do_gvcf ) + gvcf_flush(args,1); + + info_rules_destroy(args); + maux_destroy(args->maux); + bcf_hdr_destroy(args->out_hdr); + hts_close(args->out_fh); + bcf_destroy1(args->out_line); + kh_destroy(strdict, args->tmph); + if ( args->tmps.m ) free(args->tmps.s); + if ( args->vcmp ) vcmp_destroy(args->vcmp); +} + +static void usage(void) +{ + fprintf(stderr, "\n"); + fprintf(stderr, "About: Merge multiple VCF/BCF files from non-overlapping sample sets to create one multi-sample file.\n"); + fprintf(stderr, " Note that only records from different files can be merged, never from the same file. For\n"); + fprintf(stderr, " \"vertical\" merge take a look at \"bcftools norm\" instead.\n"); + fprintf(stderr, "Usage: bcftools merge [options] [...]\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " --force-samples resolve duplicate sample names\n"); + fprintf(stderr, " --print-header print only the merged header and exit\n"); + fprintf(stderr, " --use-header use the provided header\n"); + fprintf(stderr, " -0 --missing-to-ref assume genotypes at missing sites are 0/0\n"); + fprintf(stderr, " -f, --apply-filters require at least one of the listed FILTER strings (e.g. \"PASS,.\")\n"); + fprintf(stderr, " -F, --filter-logic remove filters if some input is PASS (\"x\"), or apply all filters (\"+\") [+]\n"); + fprintf(stderr, " -g, --gvcf <-|ref.fa> merge gVCF blocks, INFO/END tag is expected. Implies -i QS:sum,MinDP:min,I16:sum,IDV:max,IMF:max\n"); + fprintf(stderr, " -i, --info-rules rules for merging INFO fields (method is one of sum,avg,min,max,join) or \"-\" to turn off the default [DP:sum,DP4:sum]\n"); + fprintf(stderr, " -l, --file-list read file names from the file\n"); + fprintf(stderr, " -m, --merge allow multiallelic records for , see man page for details [both]\n"); + fprintf(stderr, " --no-version do not append version and command line to the header\n"); + fprintf(stderr, " -o, --output write output to a file [standard output]\n"); + fprintf(stderr, " -O, --output-type 'b' compressed BCF; 'u' uncompressed BCF; 'z' compressed VCF; 'v' uncompressed VCF [v]\n"); + fprintf(stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(stderr, " --threads number of extra output compression threads [0]\n"); + fprintf(stderr, "\n"); + exit(1); +} + +int main_vcfmerge(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->files = bcf_sr_init(); + args->argc = argc; args->argv = argv; + args->output_fname = "-"; + args->output_type = FT_VCF; + args->n_threads = 0; + args->record_cmd_line = 1; + args->collapse = COLLAPSE_BOTH; + int regions_is_file = 0; + + static struct option loptions[] = + { + {"help",no_argument,NULL,'h'}, + {"merge",required_argument,NULL,'m'}, + {"gvcf",required_argument,NULL,'g'}, + {"file-list",required_argument,NULL,'l'}, + {"missing-to-ref",no_argument,NULL,'0'}, + {"apply-filters",required_argument,NULL,'f'}, + {"use-header",required_argument,NULL,1}, + {"print-header",no_argument,NULL,2}, + {"force-samples",no_argument,NULL,3}, + {"output",required_argument,NULL,'o'}, + {"output-type",required_argument,NULL,'O'}, + {"threads",required_argument,NULL,9}, + {"regions",required_argument,NULL,'r'}, + {"regions-file",required_argument,NULL,'R'}, + {"info-rules",required_argument,NULL,'i'}, + {"no-version",no_argument,NULL,8}, + {"filter-logic",required_argument,NULL,'F'}, + {NULL,0,NULL,0} + }; + while ((c = getopt_long(argc, argv, "hm:f:r:R:o:O:i:l:g:F:0",loptions,NULL)) >= 0) { + switch (c) { + case 'F': + if ( !strcmp(optarg,"+") ) args->filter_logic = FLT_LOGIC_ADD; + else if ( !strcmp(optarg,"x") ) args->filter_logic = FLT_LOGIC_REMOVE; + else error("Filter logic not recognised: %s\n", optarg); + break; + case '0': args->missing_to_ref = 1; break; + case 'g': + args->do_gvcf = 1; + if ( strcmp("-",optarg) ) + { + args->gvcf_fai = fai_load(optarg); + if ( !args->gvcf_fai ) error("Failed to load the fai index: %s\n", optarg); + } + break; + case 'l': args->file_list = optarg; break; + case 'i': args->info_rules = optarg; break; + case 'o': args->output_fname = optarg; break; + case 'O': + switch (optarg[0]) { + case 'b': args->output_type = FT_BCF_GZ; break; + case 'u': args->output_type = FT_BCF; break; + case 'z': args->output_type = FT_VCF_GZ; break; + case 'v': args->output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + } + break; + case 'm': + args->collapse = COLLAPSE_NONE; + if ( !strcmp(optarg,"snps") ) args->collapse |= COLLAPSE_SNPS; + else if ( !strcmp(optarg,"indels") ) args->collapse |= COLLAPSE_INDELS; + else if ( !strcmp(optarg,"both") ) args->collapse |= COLLAPSE_BOTH; + else if ( !strcmp(optarg,"any") ) args->collapse |= COLLAPSE_ANY; + else if ( !strcmp(optarg,"all") ) args->collapse |= COLLAPSE_ANY; + else if ( !strcmp(optarg,"none") ) args->collapse = COLLAPSE_NONE; + else if ( !strcmp(optarg,"id") ) { args->collapse = COLLAPSE_NONE; args->merge_by_id = 1; } + else error("The -m type \"%s\" is not recognised.\n", optarg); + break; + case 'f': args->files->apply_filters = optarg; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; regions_is_file = 1; break; + case 1 : args->header_fname = optarg; break; + case 2 : args->header_only = 1; break; + case 3 : args->force_samples = 1; break; + case 9 : args->n_threads = strtol(optarg, 0, 0); break; + case 8 : args->record_cmd_line = 0; break; + case 'h': + case '?': usage(); + default: error("Unknown argument: %s\n", optarg); + } + } + if ( argc==optind && !args->file_list ) usage(); + if ( argc-optind<2 && !args->file_list ) usage(); + + args->files->require_index = 1; + if ( args->regions_list ) + { + if ( bcf_sr_set_regions(args->files, args->regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + if ( regions_is_file ) + args->regs = regidx_init(args->regions_list,NULL,NULL,sizeof(char*),NULL); + else + { + args->regs = regidx_init(NULL,regidx_parse_reg,NULL,sizeof(char*),NULL); + if ( regidx_insert_list(args->regs,args->regions_list,',') !=0 ) error("Could not parse the regions: %s\n", args->regions_list); + regidx_insert(args->regs,NULL); + } + if ( !args->regs ) error("Could not parse the regions: %s\n", args->regions_list); + args->regs_itr = regitr_init(args->regs); + } + + if ( bcf_sr_set_threads(args->files, args->n_threads)<0 ) error("Failed to create threads\n"); + while (optindfiles, argv[optind]) ) error("Failed to open %s: %s\n", argv[optind],bcf_sr_strerror(args->files->errnum)); + optind++; + } + if ( args->file_list ) + { + int nfiles, i; + char **files = hts_readlines(args->file_list, &nfiles); + if ( !files ) error("Failed to read from %s\n", args->file_list); + for (i=0;ifiles, files[i]) ) error("Failed to open %s: %s\n", files[i],bcf_sr_strerror(args->files->errnum)); + for (i=0; ifiles); + if ( args->regs ) regidx_destroy(args->regs); + if ( args->regs_itr ) regitr_destroy(args->regs_itr); + if ( args->gvcf_fai ) fai_destroy(args->gvcf_fai); + free(args); + return 0; +} + diff --git a/bcftools/vcfmerge.c.pysam.c b/bcftools/vcfmerge.c.pysam.c new file mode 100644 index 0000000..e1047ae --- /dev/null +++ b/bcftools/vcfmerge.c.pysam.c @@ -0,0 +1,2510 @@ +#include "bcftools.pysam.h" + +/* vcfmerge.c -- Merge multiple VCF/BCF files to create one multi-sample file. + + Copyright (C) 2012-2016 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "regidx.h" +#include "vcmp.h" + +#define DBG 0 + +#include +KHASH_MAP_INIT_STR(strdict, int) +typedef khash_t(strdict) strdict_t; + +#define FLT_LOGIC_ADD 0 +#define FLT_LOGIC_REMOVE 1 + +#define SKIP_DONE 1 // the record was processed +#define SKIP_DIFF 2 // not compatible, merge later + +#define IS_VL_G(hdr,id) (bcf_hdr_id2length(hdr,BCF_HL_FMT,id) == BCF_VL_G) +#define IS_VL_A(hdr,id) (bcf_hdr_id2length(hdr,BCF_HL_FMT,id) == BCF_VL_A) +#define IS_VL_R(hdr,id) (bcf_hdr_id2length(hdr,BCF_HL_FMT,id) == BCF_VL_R) + +#define SWAP(type_t,a,b) { type_t tmp = (a); (a) = (b); (b) = tmp; } + +// For merging INFO Number=A,G,R tags +typedef struct +{ + const char *hdr_tag; + int type, nvals; + int nbuf, mbuf; + uint8_t *buf; +} +AGR_info_t; + +// Rules for merging arbitrary INFO tags +typedef struct _info_rule_t +{ + char *hdr_tag; + void (*merger)(bcf_hdr_t *hdr, bcf1_t *line, struct _info_rule_t *rule); + int type; // one of BCF_HT_* + int block_size; // number of values in a block + int type_size; // size of the corresponding BCF_HT_* type + int nblocks; // number of blocks in nvals (the number of merged files) + int nvals, mvals; // used and total size of vals array + void *vals; // the info tag values +} +info_rule_t; + +typedef struct +{ + bcf1_t *line; + int end, active; +} +gvcf_aux_t; + +// Auxiliary merge data for selecting the right combination +// of buffered records across multiple readers. maux1_t +// corresponds to one buffered line. +typedef struct +{ + int skip; + int *map; // mapping from input alleles to the array of output alleles (set by merge_alleles) + int mmap; // size of map array (only buffer[i].n_allele is actually used) + int als_differ; +} +maux1_t; +typedef struct +{ + int rid; // current rid + int beg,end; // valid ranges in reader's buffer [beg,end). Maintained by maux_reset and gvcf_flush. + int cur; // current line or -1 if none + int mrec; // allocated size of buf + maux1_t *rec; // buffer to keep reader's lines + bcf1_t **lines; // source buffer: either gvcf or readers' buffer +} +buffer_t; +typedef struct +{ + int n, pos, var_types; // number of readers, current position, currently available variant types + char *chr; // current chromosome + char **als, **out_als; // merged alleles (temp, may contain empty records) and merged alleles ready for output + int nals, mals, nout_als, mout_als; // size of the output array + int *cnt, ncnt; // number of records that refer to the alleles + int *smpl_ploidy, *smpl_nGsize; // ploidy and derived number of values in Number=G tags, updated for each line (todo: cache for missing cases) + bcf_fmt_t **fmt_map; // i-th output FORMAT field corresponds in j-th reader to i*nreader+j, first row is reserved for GT + int nfmt_map; // number of rows in the fmt_map array + int *agr_map, nagr_map, magr_map; // mapping between Number=AGR element indexes + void *tmp_arr; + int ntmp_arr; + buffer_t *buf; + AGR_info_t *AGR_info; + int nAGR_info, mAGR_info; + bcf_srs_t *files; + int gvcf_min, gvcf_break; // min buffered gvcf END position (NB: gvcf_min is 1-based) or 0 if no active lines are present + gvcf_aux_t *gvcf; // buffer of gVCF lines +} +maux_t; + +typedef struct +{ + vcmp_t *vcmp; + maux_t *maux; + regidx_t *regs; // apply regions only after the blocks are expanded + regitr_t *regs_itr; + int header_only, collapse, output_type, force_samples, merge_by_id, do_gvcf, filter_logic, missing_to_ref; + char *header_fname, *output_fname, *regions_list, *info_rules, *file_list; + faidx_t *gvcf_fai; + info_rule_t *rules; + int nrules; + strdict_t *tmph; + kstring_t tmps; + bcf_srs_t *files; + bcf1_t *out_line; + htsFile *out_fh; + bcf_hdr_t *out_hdr; + char **argv; + int argc, n_threads, record_cmd_line; +} +args_t; + +static bcf1_t *maux_get_line(args_t *args, int i) +{ + maux_t *ma = args->maux; + int ibuf = ma->buf[i].cur; + if ( ibuf >= 0 ) return ma->buf[i].lines[ibuf]; + return NULL; +} + +static void info_rules_merge_sum(bcf_hdr_t *hdr, bcf1_t *line, info_rule_t *rule) +{ + if ( !rule->nvals ) return; + int i, j, ndim = rule->block_size; + #define BRANCH(type_t,is_missing) { \ + type_t *ptr = (type_t*) rule->vals; \ + for (i=0; invals; i++) if ( is_missing ) ptr[i] = 0; \ + for (i=1; inblocks; i++) \ + { \ + for (j=0; jtype) { + case BCF_HT_INT: BRANCH(int32_t, ptr[i]==bcf_int32_missing); break; + case BCF_HT_REAL: BRANCH(float, bcf_float_is_missing(ptr[i])); break; + default: error("TODO: %s:%d .. type=%d\n", __FILE__,__LINE__, rule->type); + } + #undef BRANCH + + bcf_update_info(hdr,line,rule->hdr_tag,rule->vals,ndim,rule->type); +} +static void info_rules_merge_avg(bcf_hdr_t *hdr, bcf1_t *line, info_rule_t *rule) +{ + if ( !rule->nvals ) return; + int i, j, ndim = rule->block_size; + #define BRANCH(type_t,is_missing) { \ + type_t *ptr = (type_t*) rule->vals; \ + for (i=0; invals; i++) if ( is_missing ) ptr[i] = 0; \ + for (j=0; jnblocks; i++) sum += ptr[j+i*ndim]; \ + ptr[j] = sum / rule->nblocks; \ + } \ + } + switch (rule->type) { + case BCF_HT_INT: BRANCH(int32_t, ptr[i]==bcf_int32_missing); break; + case BCF_HT_REAL: BRANCH(float, bcf_float_is_missing(ptr[i])); break; + default: error("TODO: %s:%d .. type=%d\n", __FILE__,__LINE__, rule->type); + } + #undef BRANCH + + bcf_update_info(hdr,line,rule->hdr_tag,rule->vals,ndim,rule->type); +} +static void info_rules_merge_min(bcf_hdr_t *hdr, bcf1_t *line, info_rule_t *rule) +{ + if ( !rule->nvals ) return; + int i, j, ndim = rule->block_size; + #define BRANCH(type_t,is_missing,set_missing,huge_val) { \ + type_t *ptr = (type_t*) rule->vals; \ + for (i=0; invals; i++) if ( is_missing ) ptr[i] = huge_val; \ + for (i=1; inblocks; i++) \ + { \ + for (j=0; j ptr[j+i*ndim] ) ptr[j] = ptr[j+i*ndim]; \ + } \ + for (i=0; invals; i++) if ( ptr[i]==huge_val ) set_missing; \ + } + switch (rule->type) { + case BCF_HT_INT: BRANCH(int32_t, ptr[i]==bcf_int32_missing, ptr[i]=bcf_int32_missing, INT32_MAX); break; + case BCF_HT_REAL: BRANCH(float, bcf_float_is_missing(ptr[i]), bcf_float_set_missing(ptr[i]), HUGE_VAL); break; + default: error("TODO: %s:%d .. type=%d\n", __FILE__,__LINE__, rule->type); + } + #undef BRANCH + + bcf_update_info(hdr,line,rule->hdr_tag,rule->vals,ndim,rule->type); +} +static void info_rules_merge_max(bcf_hdr_t *hdr, bcf1_t *line, info_rule_t *rule) +{ + if ( !rule->nvals ) return; + int i, j, ndim = rule->block_size; + #define BRANCH(type_t,is_missing,set_missing,huge_val) { \ + type_t *ptr = (type_t*) rule->vals; \ + for (i=0; invals; i++) if ( is_missing ) ptr[i] = huge_val; \ + for (i=1; inblocks; i++) \ + { \ + for (j=0; jnvals; i++) if ( ptr[i]==huge_val ) set_missing; \ + } + switch (rule->type) { + case BCF_HT_INT: BRANCH(int32_t, ptr[i]==bcf_int32_missing, ptr[i]=bcf_int32_missing, INT32_MIN); break; + case BCF_HT_REAL: BRANCH(float, bcf_float_is_missing(ptr[i]), bcf_float_set_missing(ptr[i]), -HUGE_VAL); break; + default: error("TODO: %s:%d .. type=%d\n", __FILE__,__LINE__, rule->type); + } + #undef BRANCH + + bcf_update_info(hdr,line,rule->hdr_tag,rule->vals,ndim,rule->type); +} +static void info_rules_merge_join(bcf_hdr_t *hdr, bcf1_t *line, info_rule_t *rule) +{ + if ( !rule->nvals ) return; + if ( rule->type==BCF_HT_STR ) + { + ((char*)rule->vals)[rule->nvals] = 0; + bcf_update_info_string(hdr,line,rule->hdr_tag,rule->vals); + } + else + bcf_update_info(hdr,line,rule->hdr_tag,rule->vals,rule->nvals,rule->type); +} + +static int info_rules_comp_key2(const void *a, const void *b) +{ + info_rule_t *rule1 = (info_rule_t*) a; + info_rule_t *rule2 = (info_rule_t*) b; + return strcmp(rule1->hdr_tag, rule2->hdr_tag); +} +static int info_rules_comp_key(const void *a, const void *b) +{ + char *key = (char*) a; + info_rule_t *rule = (info_rule_t*) b; + return strcmp(key, rule->hdr_tag); +} +static void info_rules_init(args_t *args) +{ + if ( args->info_rules && !strcmp("-",args->info_rules) ) return; + + kstring_t str = {0,0,0}; + if ( !args->info_rules ) + { + if ( bcf_hdr_idinfo_exists(args->out_hdr,BCF_HL_INFO,bcf_hdr_id2int(args->out_hdr, BCF_DT_ID, "DP")) ) kputs("DP:sum",&str); + if ( bcf_hdr_idinfo_exists(args->out_hdr,BCF_HL_INFO,bcf_hdr_id2int(args->out_hdr, BCF_DT_ID, "DP4")) ) + { + if ( str.l ) kputc(',',&str); + kputs("DP4:sum",&str); + } + if ( args->do_gvcf && bcf_hdr_idinfo_exists(args->out_hdr,BCF_HL_INFO,bcf_hdr_id2int(args->out_hdr, BCF_DT_ID, "QS")) ) + { + if ( str.l ) kputc(',',&str); + kputs("QS:sum",&str); + } + if ( args->do_gvcf && bcf_hdr_idinfo_exists(args->out_hdr,BCF_HL_INFO,bcf_hdr_id2int(args->out_hdr, BCF_DT_ID, "MinDP")) ) + { + if ( str.l ) kputc(',',&str); + kputs("MinDP:min",&str); + } + if ( args->do_gvcf && bcf_hdr_idinfo_exists(args->out_hdr,BCF_HL_INFO,bcf_hdr_id2int(args->out_hdr, BCF_DT_ID, "I16")) ) + { + if ( str.l ) kputc(',',&str); + kputs("I16:sum",&str); + } + if ( args->do_gvcf && bcf_hdr_idinfo_exists(args->out_hdr,BCF_HL_INFO,bcf_hdr_id2int(args->out_hdr, BCF_DT_ID, "IDV")) ) + { + if ( str.l ) kputc(',',&str); + kputs("IDV:max",&str); + } + if ( args->do_gvcf && bcf_hdr_idinfo_exists(args->out_hdr,BCF_HL_INFO,bcf_hdr_id2int(args->out_hdr, BCF_DT_ID, "IMF")) ) + { + if ( str.l ) kputc(',',&str); + kputs("IMF:max",&str); + } + + if ( !str.l ) return; + args->info_rules = str.s; + } + + args->nrules = 1; + char *ss = strdup(args->info_rules), *tmp = ss; + int n = 0; + while ( *ss ) + { + if ( *ss==':' ) { *ss = 0; n++; if ( n%2==0 ) error("Could not parse INFO rules: \"%s\"\n", args->info_rules); } + else if ( *ss==',' ) { *ss = 0; args->nrules++; n++; if ( n%2==1 ) error("Could not parse INFO rules: \"%s\"\n", args->info_rules); } + ss++; + } + if ( n%2==0 ) error("Could not parse INFO rules: \"%s\"\n", args->info_rules); + args->rules = (info_rule_t*) calloc(args->nrules,sizeof(info_rule_t)); + + n = 0; + ss = tmp; + while ( n < args->nrules ) + { + info_rule_t *rule = &args->rules[n]; + rule->hdr_tag = strdup(ss); + int id = bcf_hdr_id2int(args->out_hdr, BCF_DT_ID, rule->hdr_tag); + if ( !bcf_hdr_idinfo_exists(args->out_hdr,BCF_HL_INFO,id) ) error("The tag is not defined in the header: \"%s\"\n", rule->hdr_tag); + rule->type = bcf_hdr_id2type(args->out_hdr,BCF_HL_INFO,id); + if ( rule->type==BCF_HT_INT ) rule->type_size = sizeof(int32_t); + else if ( rule->type==BCF_HT_REAL ) rule->type_size = sizeof(float); + else if ( rule->type==BCF_HT_STR ) rule->type_size = sizeof(char); + else error("The type is not supported: \"%s\"\n", rule->hdr_tag); + + ss = strchr(ss, '\0'); ss++; + if ( !*ss ) error("Could not parse INFO rules, missing logic of \"%s\"\n", rule->hdr_tag); + + int is_join = 0; + if ( !strcasecmp(ss,"sum") ) rule->merger = info_rules_merge_sum; + else if ( !strcasecmp(ss,"avg") ) rule->merger = info_rules_merge_avg; + else if ( !strcasecmp(ss,"min") ) rule->merger = info_rules_merge_min; + else if ( !strcasecmp(ss,"max") ) rule->merger = info_rules_merge_max; + else if ( !strcasecmp(ss,"join") ) { rule->merger = info_rules_merge_join; is_join = 1; } + else error("The rule logic \"%s\" not recognised\n", ss); + + if ( !is_join && rule->type==BCF_HT_STR ) + error("Numeric operation \"%s\" requested on non-numeric field: %s\n", ss, rule->hdr_tag); + if ( bcf_hdr_id2number(args->out_hdr,BCF_HL_INFO,id)==0xfffff ) + { + int is_agr = ( + bcf_hdr_id2length(args->out_hdr,BCF_HL_INFO,id)==BCF_VL_A || + bcf_hdr_id2length(args->out_hdr,BCF_HL_INFO,id)==BCF_VL_G || + bcf_hdr_id2length(args->out_hdr,BCF_HL_INFO,id)==BCF_VL_R + ) ? 1 : 0; + if ( is_join && is_agr ) + error("Cannot -i %s:join on Number=[AGR] tags is not supported.\n", rule->hdr_tag); + if ( !is_join && !is_agr ) + error("Only fixed-length vectors are supported with -i %s:%s\n", ss, rule->hdr_tag); + } + + ss = strchr(ss, '\0'); ss++; + n++; + } + free(str.s); + free(tmp); + + qsort(args->rules, args->nrules, sizeof(*args->rules), info_rules_comp_key2); +} +static void info_rules_destroy(args_t *args) +{ + int i; + for (i=0; inrules; i++) + { + info_rule_t *rule = &args->rules[i]; + free(rule->hdr_tag); + free(rule->vals); + } + free(args->rules); +} +static void info_rules_reset(args_t *args) +{ + int i; + for (i=0; inrules; i++) + args->rules[i].nblocks = args->rules[i].nvals = args->rules[i].block_size = 0; +} +static int info_rules_add_values(args_t *args, bcf_hdr_t *hdr, bcf1_t *line, info_rule_t *rule, maux1_t *als, int var_len) +{ + int msize = args->maux->ntmp_arr / rule->type_size; + int ret = bcf_get_info_values(hdr, line, rule->hdr_tag, &args->maux->tmp_arr, &msize, rule->type); + if ( ret<=0 ) error("FIXME: error parsing %s at %s:%d .. %d\n", rule->hdr_tag,bcf_seqname(hdr,line),line->pos+1,ret); + args->maux->ntmp_arr = msize * rule->type_size; + + rule->nblocks++; + + if ( rule->type==BCF_HT_STR ) + { + int need_comma = rule->nblocks==1 ? 0 : 1; + hts_expand(char,rule->nvals+ret+need_comma+1,rule->mvals,rule->vals); // 1 for null-termination + char *tmp = (char*) rule->vals + rule->nvals; + if ( rule->nvals>0 ) { *tmp = ','; tmp++; } + strncpy(tmp,(char*)args->maux->tmp_arr,ret); + rule->nvals += ret + need_comma; + return 1; + } + + int i, j; + if ( var_len==BCF_VL_A ) + { + if ( ret!=line->n_allele-1 ) error("Wrong number of %s fields at %s:%d\n",rule->hdr_tag,bcf_seqname(hdr,line),line->pos+1); + args->maux->nagr_map = ret; + hts_expand(int,args->maux->nagr_map,args->maux->magr_map,args->maux->agr_map); + // create mapping from source file ALT indexes to dst file indexes + for (i=0; imaux->agr_map[i] = als->map[i+1] - 1; + rule->block_size = args->maux->nout_als - 1; + } + else if ( var_len==BCF_VL_R ) + { + if ( ret!=line->n_allele ) error("Wrong number of %s fields at %s:%d\n",rule->hdr_tag,bcf_seqname(hdr,line),line->pos+1); + args->maux->nagr_map = ret; + hts_expand(int,args->maux->nagr_map,args->maux->magr_map,args->maux->agr_map); + for (i=0; imaux->agr_map[i] = als->map[i]; + rule->block_size = args->maux->nout_als; + } + else if ( var_len==BCF_VL_G ) + { + args->maux->nagr_map = bcf_alleles2gt(line->n_allele-1,line->n_allele-1)+1; + assert( ret==line->n_allele || ret==args->maux->nagr_map ); + if ( ret==line->n_allele ) // haploid + { + args->maux->nagr_map = line->n_allele; + hts_expand(int,args->maux->nagr_map,args->maux->magr_map,args->maux->agr_map); + for (i=0; imaux->agr_map[i] = als->map[i]; + rule->block_size = args->maux->nout_als; + } + else + { + hts_expand(int,args->maux->nagr_map,args->maux->magr_map,args->maux->agr_map); + int k_src = 0; + for (i=0; in_allele; i++) + { + for (j=0; j<=i; j++) + { + args->maux->agr_map[k_src] = bcf_alleles2gt(als->map[i],als->map[j]); + k_src++; + } + } + rule->block_size = bcf_alleles2gt(args->maux->nout_als-1,args->maux->nout_als-1)+1; + } + } + else + { + if ( rule->nblocks>1 && ret!=rule->block_size ) + error("Mismatch in number of values for INFO/%s at %s:%d\n", rule->hdr_tag,bcf_seqname(hdr,line),line->pos+1); + rule->block_size = ret; + args->maux->nagr_map = 0; + } + + #define BRANCH(src_type_t,dst_type_t,set_missing) { \ + src_type_t *src = (src_type_t *) args->maux->tmp_arr; \ + hts_expand0(dst_type_t,(rule->nvals+rule->block_size),rule->mvals,rule->vals); \ + dst_type_t *dst = (dst_type_t *) rule->vals + rule->nvals; \ + rule->nvals += rule->block_size; \ + if ( !args->maux->nagr_map ) \ + { \ + for (i=0; iblock_size; i++) set_missing; \ + for (i=0; imaux->agr_map[i]] = src[i]; \ + } \ + } + switch (rule->type) { + case BCF_HT_INT: BRANCH(int, int32_t, dst[i] = bcf_int32_missing); break; + case BCF_HT_REAL: BRANCH(float, float, bcf_float_set_missing(dst[i])); break; + default: error("TODO: %s:%d .. type=%d\n", __FILE__,__LINE__, rule->type); + } + #undef BRANCH + + return 1; +} + +int bcf_hdr_sync(bcf_hdr_t *h); + +void merge_headers(bcf_hdr_t *hw, const bcf_hdr_t *hr, const char *clash_prefix, int force_samples) +{ + // header lines + hw = bcf_hdr_merge(hw, hr); + + // samples + int i; + for (i=0; isamples[i]; + if ( bcf_hdr_id2int(hw, BCF_DT_SAMPLE, name)!=-1 ) + { + // there is a sample with the same name + if ( !force_samples ) error("Error: Duplicate sample names (%s), use --force-samples to proceed anyway.\n", name); + + int len = strlen(hr->samples[i]) + strlen(clash_prefix) + 1; + name = (char*) malloc(sizeof(char)*(len+1)); + sprintf(name,"%s:%s",clash_prefix,hr->samples[i]); + bcf_hdr_add_sample(hw,name); + free(name); + } + else + bcf_hdr_add_sample(hw,name); + } +} + +void debug_als(char **als, int nals) +{ + int k; for (k=0; k=lens[j] ) done = 1; + if ( als[j][lens[j]-i] != als[0][lens[0]-i] ) { done = 1; break; } + } + if ( done ) break; + i++; + } + if ( i>1 ) + { + i--; + als[0][lens[0]-i] = 0; + for (j=1; j0, + * 1->2, and 2->3. + */ +char **merge_alleles(char **a, int na, int *map, char **b, int *nb, int *mb) +{ + // reference allele never changes + map[0] = 0; + + int i,j; + int rla = !a[0][1] ? 1 : strlen(a[0]); + int rlb = !b[0][1] ? 1 : strlen(b[0]); + + // the most common case: same SNPs + if ( na==2 && *nb==2 && rla==1 && rlb==1 && a[1][0]==b[1][0] && !a[1][1] && !b[1][1] ) + { + map[1] = 1; + return b; + } + + // Sanity check: reference prefixes must be identical + if ( strncmp(a[0],b[0],rlarlb ) + { + for (i=0; i<*nb; i++) + { + if ( b[i][0]=='<' ) continue; // symbolic allele, do not modify + if ( b[i][0]=='*' ) continue; // overlapping deletion (*), do not modify + int l = strlen(b[i]); + b[i] = (char*) realloc(b[i],l+rla-rlb+1); + memcpy(b[i]+l,a[0]+rlb,rla-rlb+1); + } + } + + // now check if the $a alleles are present and if not add them + for (i=1; irla && a[i][0]!='<' && a[i][0]!='*' ) // $a alleles need expanding and not a symbolic allele or * + { + int l = strlen(a[i]); + ai = (char*) malloc(l+rlb-rla+1); + memcpy(ai,a[i],l); + memcpy(ai+l,b[0]+rla,rlb-rla+1); + const_ai = 0; + } + else + ai = a[i]; + + for (j=1; j<*nb; j++) + if ( !strcasecmp(ai,b[j]) ) break; + + if ( j<*nb ) // $b already has the same allele + { + map[i] = j; + if ( !const_ai ) free(ai); + continue; + } + // new allele + map[i] = *nb; + b[*nb] = const_ai ? strdup(ai) : ai; + (*nb)++; + } + return b; +} + +maux_t *maux_init(args_t *args) +{ + bcf_srs_t *files = args->files; + maux_t *ma = (maux_t*) calloc(1,sizeof(maux_t)); + ma->n = files->nreaders; + ma->files = files; + int i, n_smpl = 0; + for (i=0; in; i++) + n_smpl += bcf_hdr_nsamples(files->readers[i].header); + if ( args->do_gvcf ) + { + ma->gvcf = (gvcf_aux_t*) calloc(ma->n,sizeof(gvcf_aux_t)); + for (i=0; in; i++) + ma->gvcf[i].line = bcf_init1(); + } + ma->smpl_ploidy = (int*) calloc(n_smpl,sizeof(int)); + ma->smpl_nGsize = (int*) malloc(n_smpl*sizeof(int)); + ma->buf = (buffer_t*) calloc(ma->n,sizeof(buffer_t)); + for (i=0; in; i++) + ma->buf[i].rid = -1; + return ma; +} +void maux_destroy(maux_t *ma) +{ + int i,j; + for (i=0; imals; i++) + { + free(ma->als[i]); + ma->als[i] = NULL; + } + for (i=0; in; i++) // for each reader + { + for (j=0; jbuf[i].mrec; j++) // for each buffered line + free(ma->buf[i].rec[j].map); + free(ma->buf[i].rec); + } + free(ma->buf); + if ( ma->gvcf ) + { + for (i=0; in; i++) bcf_destroy(ma->gvcf[i].line); + free(ma->gvcf); + } + for (i=0; imAGR_info; i++) + free(ma->AGR_info[i].buf); + free(ma->agr_map); + free(ma->AGR_info); + if (ma->ntmp_arr) free(ma->tmp_arr); + if (ma->nfmt_map) free(ma->fmt_map); + // ma->inf freed in bcf_destroy1 + for (i=0; imals; i++) free(ma->als[i]); + if (ma->mout_als) free(ma->out_als); + free(ma->als); + free(ma->cnt); + free(ma->smpl_ploidy); + free(ma->smpl_nGsize); + free(ma->chr); + free(ma); +} +void maux_expand1(buffer_t *buf, int size) +{ + if ( buf->mrec < size ) + { + hts_expand0(maux1_t,size,buf->mrec,buf->rec); + buf->mrec = size; + } +} +void maux_reset(maux_t *ma) +{ + int i,j; + for (i=0; in; i++) maux_expand1(&ma->buf[i],ma->files->readers[i].nbuffer+1); + for (i=0; incnt; i++) ma->cnt[i] = 0; + for (i=0; imals; i++) + { + free(ma->als[i]); + ma->als[i] = NULL; + } + const char *chr = NULL; + ma->nals = 0; + ma->pos = -1; + for (i=0; in; i++) + { + if ( !bcf_sr_has_line(ma->files,i) ) continue; + bcf1_t *line = bcf_sr_get_line(ma->files,i); + bcf_hdr_t *hdr = bcf_sr_get_header(ma->files,i); + chr = bcf_seqname(hdr,line); + ma->pos = line->pos; + break; + } + int new_chr = 0; + if ( chr && (!ma->chr || strcmp(ma->chr,chr)) ) + { + free(ma->chr); + ma->chr = strdup(chr); + new_chr = 1; + } + for (i=0; in; i++) + { + bcf_hdr_t *hdr = bcf_sr_get_header(ma->files,i); + ma->buf[i].rid = bcf_hdr_name2id(hdr,chr); + ma->buf[i].beg = bcf_sr_has_line(ma->files,i) ? 0 : 1; + for (j=ma->buf[i].beg; j<=ma->files->readers[i].nbuffer; j++) + { + ma->buf[i].rec[j].skip = 0; + bcf1_t *line = ma->files->readers[i].buffer[j]; + if ( line->rid!=ma->buf[i].rid || line->pos!=ma->pos ) break; + } + ma->buf[i].end = j; + ma->buf[i].cur = -1; + if ( ma->buf[i].beg < ma->buf[i].end ) + { + ma->buf[i].lines = ma->files->readers[i].buffer; + if ( ma->gvcf ) ma->gvcf[i].active = 0; // gvcf block cannot overlap with the next record + } + if ( new_chr && ma->gvcf ) ma->gvcf[i].active = 0; // make sure to close active gvcf block on new chr + } +} +void maux_debug(maux_t *ma, int ir, int ib) +{ + fprintf(bcftools_stdout, "[%d,%d]\t", ir,ib); + int i; + for (i=0; inals; i++) + { + fprintf(bcftools_stdout, " %s [%d]", ma->als[i], ma->cnt[i]); + } + fprintf(bcftools_stdout, "\n"); +} + +void merge_chrom2qual(args_t *args, bcf1_t *out) +{ + bcf_srs_t *files = args->files; + bcf_hdr_t *out_hdr = args->out_hdr; + + int i, ret; + khiter_t kitr; + strdict_t *tmph = args->tmph; + kh_clear(strdict, tmph); + kstring_t *tmps = &args->tmps; + tmps->l = 0; + + maux_t *ma = args->maux; + int *al_idxs = (int*) calloc(ma->nals,sizeof(int)); + bcf_float_set_missing(out->qual); + + // CHROM, POS, ID, QUAL + out->pos = -1; + for (i=0; inreaders; i++) + { + bcf1_t *line = maux_get_line(args, i); + if ( !line ) continue; + bcf_unpack(line, BCF_UN_ALL); + + bcf_sr_t *reader = &files->readers[i]; + bcf_hdr_t *hdr = reader->header; + + // not all maux alleles are always used, mark the ones we'll need + int j; + for (j=1; jn_allele; j++) + { + int irec = ma->buf[i].cur; + al_idxs[ ma->buf[i].rec[irec].map[j] ] = 1; + } + + // position + if ( out->pos==-1 ) + { + const char *chr = hdr->id[BCF_DT_CTG][line->rid].key; + out->rid = bcf_hdr_name2id(out_hdr, chr); + if ( strcmp(chr,out_hdr->id[BCF_DT_CTG][out->rid].key) ) error("Uh\n"); + out->pos = line->pos; + } + + // ID + if ( line->d.id[0]!='.' || line->d.id[1] ) + { + kitr = kh_get(strdict, tmph, line->d.id); + if ( kitr == kh_end(tmph) ) + { + if ( tmps->l ) kputc(';', tmps); + kputs(line->d.id, tmps); + kh_put(strdict, tmph, line->d.id, &ret); + } + } + + // set QUAL to the max qual value. Not exactly correct, but good enough for now + if ( !bcf_float_is_missing(line->qual) ) + { + if ( bcf_float_is_missing(out->qual) || out->qual < line->qual ) out->qual = line->qual; + } + } + + // set ID + if ( !tmps->l ) kputs(".", tmps); + bcf_update_id(out_hdr, out, tmps->s); + + // set alleles + ma->nout_als = 0; + for (i=1; inals; i++) + { + if ( !al_idxs[i] ) continue; + ma->nout_als++; + + // Adjust the indexes, the allele map could be created for multiple collapsed records, + // some of which might be unused for this output line + int ir, j; + for (ir=0; irnreaders; ir++) + { + bcf1_t *line = maux_get_line(args,ir); + if ( !line ) continue; + for (j=1; jn_allele; j++) + { + int irec = ma->buf[ir].cur; + if ( ma->buf[ir].rec[irec].map[j]==i ) ma->buf[ir].rec[irec].map[j] = ma->nout_als; + } + } + } + // Expand the arrays and realloc the alleles string. Note that all alleles are in a single allocated block. + ma->nout_als++; + hts_expand0(char*, ma->nout_als, ma->mout_als, ma->out_als); + int k = 0; + for (i=0; inals; i++) + if ( i==0 || al_idxs[i] ) ma->out_als[k++] = strdup(ma->als[i]); + assert( k==ma->nout_als ); + normalize_alleles(ma->out_als, ma->nout_als); + bcf_update_alleles(out_hdr, out, (const char**) ma->out_als, ma->nout_als); + free(al_idxs); + for (i=0; inout_als; i++) free(ma->out_als[i]); +} + +void merge_filter(args_t *args, bcf1_t *out) +{ + bcf_srs_t *files = args->files; + bcf_hdr_t *out_hdr = args->out_hdr; + + int i, ret; + if ( args->filter_logic == FLT_LOGIC_REMOVE ) + { + for (i=0; inreaders; i++) + { + bcf1_t *line = maux_get_line(args, i); + if ( !line ) continue; + bcf_sr_t *reader = &files->readers[i]; + bcf_hdr_t *hdr = reader->header; + if ( bcf_has_filter(hdr, line, "PASS") ) break; + } + if ( inreaders ) + { + int flt_id = bcf_hdr_id2int(out_hdr, BCF_DT_ID, "PASS"); + bcf_add_filter(out_hdr, out, flt_id); + return; + } + } + + khiter_t kitr; + strdict_t *tmph = args->tmph; + kh_clear(strdict, tmph); + + out->d.n_flt = 0; + for (i=0; inreaders; i++) + { + bcf1_t *line = maux_get_line(args, i); + if ( !line ) continue; + + bcf_sr_t *reader = &files->readers[i]; + bcf_hdr_t *hdr = reader->header; + + int k; + for (k=0; kd.n_flt; k++) + { + const char *flt = hdr->id[BCF_DT_ID][line->d.flt[k]].key; + kitr = kh_get(strdict, tmph, flt); + if ( kitr == kh_end(tmph) ) + { + int id = bcf_hdr_id2int(out_hdr, BCF_DT_ID, flt); + if ( id==-1 ) error("Error: The filter is not defined in the header: %s\n", flt); + hts_expand(int,out->d.n_flt+1,out->d.m_flt,out->d.flt); + out->d.flt[out->d.n_flt] = id; + out->d.n_flt++; + kh_put(strdict, tmph, flt, &ret); + } + } + } + // Check if PASS is not mixed with other filters + if ( out->d.n_flt>1 ) + { + int id = bcf_hdr_id2int(out_hdr, BCF_DT_ID, "PASS"); + for (i=0; id.n_flt; i++) + if ( out->d.flt[i]==id ) break; + if ( id.n_flt ) + { + out->d.n_flt--; + for (; id.n_flt; i++) out->d.flt[i] = out->d.flt[i+1]; + } + } +} + +static void bcf_info_set_id(bcf1_t *line, bcf_info_t *info, int id, kstring_t *tmp_str) +{ + uint8_t *ptr = info->vptr - info->vptr_off; + bcf_dec_typed_int1(ptr, &ptr); + + tmp_str->l = 0; + bcf_enc_int1(tmp_str, id); + + if ( tmp_str->l == ptr - info->vptr + info->vptr_off ) + { + // the new id is represented with the same number of bytes + memcpy(info->vptr - info->vptr_off, tmp_str->s, tmp_str->l); + return; + } + + kputsn_(ptr, info->vptr - ptr, tmp_str); + info->vptr_off = tmp_str->l; + kputsn_(info->vptr, info->len << bcf_type_shift[info->type], tmp_str); + + info->vptr = (uint8_t*) tmp_str->s + info->vptr_off; + tmp_str->s = NULL; + tmp_str->m = 0; + tmp_str->l = 0; +} + +/* + * copy_string_field() - copy a comma-separated field + * @param src: source string + * @param isrc: index of the field to copy + * @param src_len: length of source string (excluding the terminating \0) + * @param dst: destination kstring (must be initialized) + * @param idst: index of the destination field + */ +int copy_string_field(char *src, int isrc, int src_len, kstring_t *dst, int idst) +{ + int ith_src = 0, start_src = 0; // i-th field in src string + while ( ith_srcl ) + { + if ( dst->s[start_dst]==',' ) { ith_dst++; } + start_dst++; + } + if ( ith_dst!=idst ) return -2; + int end_dst = start_dst; + while ( end_dstl && dst->s[end_dst]!=',' ) end_dst++; + + if ( end_dst - start_dst>1 || dst->s[start_dst]!='.' ) return 0; // do not overwrite non-empty values + + // Now start_dst and end_dst are indexes to the destination memory area + // which needs to be replaced with nsrc_cpy + // source bytes, end_dst points just after. + int ndst_shift = nsrc_cpy - (end_dst - start_dst); + int ndst_move = dst->l - end_dst + 1; // how many bytes must be moved (including \0) + if ( ndst_shift ) + { + ks_resize(dst, dst->l + ndst_shift + 1); // plus \0 + memmove(dst->s+end_dst+ndst_shift, dst->s+end_dst, ndst_move); + } + memcpy(dst->s+start_dst, src+start_src, nsrc_cpy); + dst->l += ndst_shift; + return 0; +} + +static void merge_AGR_info_tag(bcf_hdr_t *hdr, bcf1_t *line, bcf_info_t *info, int len, maux1_t *als, AGR_info_t *agr) +{ + int i; + if ( !agr->nbuf ) + { + if ( info->type==BCF_BT_INT8 || info->type==BCF_BT_INT16 || info->type==BCF_BT_INT32 || info->type==BCF_BT_FLOAT ) + { + agr->nbuf = 4 * agr->nvals; + hts_expand(uint8_t,agr->nbuf,agr->mbuf,agr->buf); + if ( info->type!=BCF_BT_FLOAT ) + { + int32_t *tmp = (int32_t*) agr->buf; + for (i=0; invals; i++) tmp[i] = bcf_int32_missing; + } + else + { + float *tmp = (float*) agr->buf; + for (i=0; invals; i++) bcf_float_set_missing(tmp[i]); + } + } + else if ( info->type==BCF_BT_CHAR ) + { + kstring_t tmp; tmp.l = 0; tmp.m = agr->mbuf; tmp.s = (char*)agr->buf; + kputc('.',&tmp); + for (i=1; invals; i++) kputs(",.",&tmp); + agr->mbuf = tmp.m; agr->nbuf = tmp.l; agr->buf = (uint8_t*)tmp.s; + } + else + error("Not ready for type [%d]: %s at %d\n", info->type,agr->hdr_tag,line->pos+1); + } + + if ( info->type==BCF_BT_INT8 || info->type==BCF_BT_INT16 || info->type==BCF_BT_INT32 || info->type==BCF_BT_FLOAT ) + { + if ( len==BCF_VL_A || len==BCF_VL_R ) + { + int ifrom = len==BCF_VL_A ? 1 : 0; + #define BRANCH(type_t, is_missing, is_vector_end, out_type_t) { \ + type_t *src = (type_t *) info->vptr; \ + out_type_t *tgt = (out_type_t *) agr->buf; \ + int iori, inew; \ + for (iori=ifrom; iorin_allele; iori++) \ + { \ + if ( is_vector_end ) break; \ + if ( is_missing ) continue; \ + inew = als->map[iori] - ifrom; \ + tgt[inew] = *src; \ + src++; \ + } \ + } + switch (info->type) { + case BCF_BT_INT8: BRANCH(int8_t, *src==bcf_int8_missing, *src==bcf_int8_vector_end, int); break; + case BCF_BT_INT16: BRANCH(int16_t, *src==bcf_int16_missing, *src==bcf_int16_vector_end, int); break; + case BCF_BT_INT32: BRANCH(int32_t, *src==bcf_int32_missing, *src==bcf_int32_vector_end, int); break; + case BCF_BT_FLOAT: BRANCH(float, bcf_float_is_missing(*src), bcf_float_is_vector_end(*src), float); break; + default: fprintf(bcftools_stderr,"TODO: %s:%d .. info->type=%d\n", __FILE__,__LINE__, info->type); exit(1); + } + #undef BRANCH + } + else + { + #define BRANCH(type_t, is_missing, is_vector_end, out_type_t) { \ + type_t *src = (type_t *) info->vptr; \ + out_type_t *tgt = (out_type_t *) agr->buf; \ + int iori,jori, inew,jnew; \ + for (iori=0; iorin_allele; iori++) \ + { \ + inew = als->map[iori]; \ + for (jori=0; jori<=iori; jori++) \ + { \ + jnew = als->map[jori]; \ + int kori = iori*(iori+1)/2 + jori; \ + if ( is_vector_end ) break; \ + if ( is_missing ) continue; \ + int knew = inew>jnew ? inew*(inew+1)/2 + jnew : jnew*(jnew+1)/2 + inew; \ + tgt[knew] = src[kori]; \ + } \ + if ( jori<=iori ) break; \ + } \ + } + switch (info->type) { + case BCF_BT_INT8: BRANCH(int8_t, src[kori]==bcf_int8_missing, src[kori]==bcf_int8_vector_end, int); break; + case BCF_BT_INT16: BRANCH(int16_t, src[kori]==bcf_int16_missing, src[kori]==bcf_int16_vector_end, int); break; + case BCF_BT_INT32: BRANCH(int32_t, src[kori]==bcf_int32_missing, src[kori]==bcf_int32_vector_end, int); break; + case BCF_BT_FLOAT: BRANCH(float, bcf_float_is_missing(src[kori]), bcf_float_is_vector_end(src[kori]), float); break; + default: fprintf(bcftools_stderr,"TODO: %s:%d .. info->type=%d\n", __FILE__,__LINE__, info->type); exit(1); + } + #undef BRANCH + } + } + else + { + kstring_t tmp; tmp.l = agr->nbuf; tmp.m = agr->mbuf; tmp.s = (char*)agr->buf; + if ( len==BCF_VL_A || len==BCF_VL_R ) + { + int iori, ifrom = len==BCF_VL_A ? 1 : 0; + for (iori=ifrom; iorin_allele; iori++) + { + int ret = copy_string_field((char*)info->vptr, iori-ifrom, info->len, &tmp, als->map[iori]-ifrom); + if ( ret ) + error("Error at %s:%d: wrong number of fields in %s?\n", bcf_seqname(hdr,line),line->pos+1,agr->hdr_tag); + } + } + else + { + int iori,jori, inew,jnew; + for (iori=0; iorin_allele; iori++) + { + inew = als->map[iori]; + for (jori=0; jori<=iori; jori++) + { + jnew = als->map[jori]; + int kori = iori*(iori+1)/2 + jori; + int knew = bcf_alleles2gt(inew,jnew); + int ret = copy_string_field((char*)info->vptr, kori, info->len, &tmp, knew); + if ( ret ) + error("Error at %s:%d: wrong number of fields in %s?\n", bcf_seqname(hdr,line),line->pos+1,agr->hdr_tag); + } + } + } + agr->mbuf = tmp.m; agr->nbuf = tmp.l; agr->buf = (uint8_t*)tmp.s; + } +} + +void merge_info(args_t *args, bcf1_t *out) +{ + bcf_srs_t *files = args->files; + bcf_hdr_t *out_hdr = args->out_hdr; + + int i, j, ret; + khiter_t kitr; + strdict_t *tmph = args->tmph; + kh_clear(strdict, tmph); + + maux_t *ma = args->maux; + ma->nAGR_info = 0; + out->n_info = 0; + info_rules_reset(args); + for (i=0; inreaders; i++) + { + bcf1_t *line = maux_get_line(args,i); + if ( !line ) continue; + int irec = ma->buf[i].cur; + bcf_sr_t *reader = &files->readers[i]; + bcf_hdr_t *hdr = reader->header; + for (j=0; jn_info; j++) + { + bcf_info_t *inf = &line->d.info[j]; + + const char *key = hdr->id[BCF_DT_ID][inf->key].key; + if ( !strcmp("AC",key) || !strcmp("AN",key) ) continue; // AC and AN are done in merge_format() after genotypes are done + + int id = bcf_hdr_id2int(out_hdr, BCF_DT_ID, key); + if ( id==-1 ) error("Error: The INFO field is not defined in the header: %s\n", key); + + kitr = kh_get(strdict, tmph, key); // have we seen the tag in one of the readers? + int len = bcf_hdr_id2length(hdr,BCF_HL_INFO,inf->key); + if ( args->nrules ) + { + info_rule_t *rule = (info_rule_t*) bsearch(key, args->rules, args->nrules, sizeof(*args->rules), info_rules_comp_key); + if ( rule ) + { + maux1_t *als = ( len==BCF_VL_A || len==BCF_VL_G || len==BCF_VL_R ) ? &ma->buf[i].rec[irec] : NULL; + if ( info_rules_add_values(args, hdr, line, rule, als, len) ) continue; + } + } + + // Todo: Number=AGR tags should use the newer info_rules_* functions (info_rules_merge_first to be added) + // and merge_AGR_info_tag to be made obsolete. + if ( len==BCF_VL_A || len==BCF_VL_G || len==BCF_VL_R ) // Number=R,G,A requires special treatment + { + if ( kitr == kh_end(tmph) ) + { + // seeing this key for the first time + ma->nAGR_info++; + hts_expand0(AGR_info_t,ma->nAGR_info,ma->mAGR_info,ma->AGR_info); + kitr = kh_put(strdict, tmph, key, &ret); + kh_val(tmph,kitr) = ma->nAGR_info - 1; + ma->AGR_info[ma->nAGR_info-1].hdr_tag = key; + ma->AGR_info[ma->nAGR_info-1].type = bcf_hdr_id2type(hdr,BCF_HL_INFO,inf->key); + ma->AGR_info[ma->nAGR_info-1].nbuf = 0; // size of the buffer + switch (len) + { + case BCF_VL_A: ma->AGR_info[ma->nAGR_info-1].nvals = ma->nout_als - 1; break; + case BCF_VL_G: ma->AGR_info[ma->nAGR_info-1].nvals = bcf_alleles2gt(ma->nout_als-1,ma->nout_als-1)+1; break; + case BCF_VL_R: ma->AGR_info[ma->nAGR_info-1].nvals = ma->nout_als; break; + } + } + kitr = kh_get(strdict, tmph, key); + int idx = kh_val(tmph, kitr); + if ( idx<0 ) error("Error occurred while processing INFO tag \"%s\" at %s:%d\n", key,bcf_seqname(hdr,line),line->pos+1); + merge_AGR_info_tag(hdr, line,inf,len,&ma->buf[i].rec[irec],&ma->AGR_info[idx]); + continue; + } + + if ( kitr == kh_end(tmph) ) + { + // Seeing this key for the first time. Although quite hacky, + // this is faster than anything else given the data structures.. + + hts_expand0(bcf_info_t,out->n_info+1,out->d.m_info,out->d.info); + out->d.info[out->n_info].key = id; + out->d.info[out->n_info].type = inf->type; + out->d.info[out->n_info].len = inf->len; + out->d.info[out->n_info].v1.i = inf->v1.i; + out->d.info[out->n_info].v1.f = inf->v1.f; + out->d.info[out->n_info].vptr_off = inf->vptr_off; + out->d.info[out->n_info].vptr_len = inf->vptr_len; + out->d.info[out->n_info].vptr_free = 1; + out->d.info[out->n_info].vptr = (uint8_t*) malloc(inf->vptr_len+inf->vptr_off); + memcpy(out->d.info[out->n_info].vptr,inf->vptr-inf->vptr_off, inf->vptr_len+inf->vptr_off); + out->d.info[out->n_info].vptr += inf->vptr_off; + if ( (args->output_type & FT_BCF) && id!=bcf_hdr_id2int(hdr, BCF_DT_ID, key) ) + bcf_info_set_id(out, &out->d.info[out->n_info], id, &args->tmps); + out->d.shared_dirty |= BCF1_DIRTY_INF; + out->n_info++; + kitr = kh_put(strdict, tmph, key, &ret); + kh_val(tmph,kitr) = -(out->n_info-1); // arbitrary negative value + } + } + } + for (i=0; inrules; i++) + args->rules[i].merger(args->out_hdr, out, &args->rules[i]); + for (i=0; inAGR_info; i++) + { + AGR_info_t *agr = &ma->AGR_info[i]; + bcf_update_info(out_hdr,out,agr->hdr_tag,agr->buf,agr->nvals,agr->type); + } +} + +void update_AN_AC(bcf_hdr_t *hdr, bcf1_t *line) +{ + int32_t an = 0, *tmp = (int32_t*) malloc(sizeof(int)*line->n_allele); + int ret = bcf_calc_ac(hdr, line, tmp, BCF_UN_FMT); + if ( ret>0 ) + { + int i; + for (i=0; in_allele; i++) an += tmp[i]; + bcf_update_info_int32(hdr, line, "AN", &an, 1); + bcf_update_info_int32(hdr, line, "AC", tmp+1, line->n_allele-1); + } + free(tmp); +} + +void merge_GT(args_t *args, bcf_fmt_t **fmt_map, bcf1_t *out) +{ + bcf_srs_t *files = args->files; + bcf_hdr_t *out_hdr = args->out_hdr; + maux_t *ma = args->maux; + int i, ismpl = 0, nsamples = bcf_hdr_nsamples(out_hdr); + + int nsize = 0, msize = sizeof(int32_t); + for (i=0; inreaders; i++) + { + if ( !fmt_map[i] ) continue; + if ( fmt_map[i]->n > nsize ) nsize = fmt_map[i]->n; + } + + if ( ma->ntmp_arr < nsamples*nsize*msize ) + { + ma->ntmp_arr = nsamples*nsize*msize; + ma->tmp_arr = realloc(ma->tmp_arr, ma->ntmp_arr); + } + memset(ma->smpl_ploidy,0,nsamples*sizeof(int)); + + int default_gt = args->missing_to_ref ? bcf_gt_unphased(0) : bcf_gt_missing; + for (i=0; inreaders; i++) + { + bcf_sr_t *reader = &files->readers[i]; + bcf_hdr_t *hdr = reader->header; + bcf_fmt_t *fmt_ori = fmt_map[i]; + int32_t *tmp = (int32_t *) ma->tmp_arr + ismpl*nsize; + int irec = ma->buf[i].cur; + + int j, k; + if ( !fmt_ori ) + { + // missing values: assume maximum ploidy + for (j=0; jsmpl_ploidy[ismpl+j]++; } + tmp += nsize; + } + ismpl += bcf_hdr_nsamples(hdr); + continue; + } + + #define BRANCH(type_t, vector_end) { \ + type_t *p_ori = (type_t*) fmt_ori->p; \ + if ( !ma->buf[i].rec[irec].als_differ ) \ + { \ + /* the allele numbering is unchanged */ \ + for (j=0; jn; k++) \ + { \ + if ( p_ori[k]==vector_end ) break; /* smaller ploidy */ \ + ma->smpl_ploidy[ismpl+j]++; \ + if ( bcf_gt_is_missing(p_ori[k]) ) tmp[k] = 0; /* missing allele */ \ + else tmp[k] = p_ori[k]; \ + } \ + for (; kn; \ + } \ + ismpl += bcf_hdr_nsamples(hdr); \ + continue; \ + } \ + /* allele numbering needs to be changed */ \ + for (j=0; jn; k++) \ + { \ + if ( p_ori[k]==vector_end ) break; /* smaller ploidy */ \ + ma->smpl_ploidy[ismpl+j]++; \ + if ( bcf_gt_is_missing(p_ori[k]) ) tmp[k] = 0; /* missing allele */ \ + else \ + { \ + int al = (p_ori[k]>>1) - 1; \ + al = al<=0 ? al + 1 : ma->buf[i].rec[irec].map[al] + 1; \ + tmp[k] = (al << 1) | ((p_ori[k])&1); \ + } \ + } \ + for (; kn; \ + } \ + ismpl += bcf_hdr_nsamples(hdr); \ + } + switch (fmt_ori->type) + { + case BCF_BT_INT8: BRANCH(int8_t, bcf_int8_vector_end); break; + case BCF_BT_INT16: BRANCH(int16_t, bcf_int16_vector_end); break; + case BCF_BT_INT32: BRANCH(int32_t, bcf_int32_vector_end); break; + default: error("Unexpected case: %d\n", fmt_ori->type); + } + #undef BRANCH + } + bcf_update_format_int32(out_hdr, out, "GT", (int32_t*)ma->tmp_arr, nsamples*nsize); +} + +void merge_format_field(args_t *args, bcf_fmt_t **fmt_map, bcf1_t *out) +{ + bcf_srs_t *files = args->files; + bcf_hdr_t *out_hdr = args->out_hdr; + maux_t *ma = args->maux; + int i, ismpl = 0, nsamples = bcf_hdr_nsamples(out_hdr); + + const char *key = NULL; + int nsize = 0, length = BCF_VL_FIXED, type = -1; + for (i=0; inreaders; i++) + { + if ( !maux_get_line(args,i) ) continue; + if ( !fmt_map[i] ) continue; + if ( !key ) key = files->readers[i].header->id[BCF_DT_ID][fmt_map[i]->id].key; + type = fmt_map[i]->type; + if ( IS_VL_G(files->readers[i].header, fmt_map[i]->id) ) + { + length = BCF_VL_G; + nsize = out->n_allele*(out->n_allele + 1)/2; + break; + } + if ( IS_VL_A(files->readers[i].header, fmt_map[i]->id) ) + { + length = BCF_VL_A; + nsize = out->n_allele - 1; + break; + } + if ( IS_VL_R(files->readers[i].header, fmt_map[i]->id) ) + { + length = BCF_VL_R; + nsize = out->n_allele; + break; + } + if ( fmt_map[i]->n > nsize ) nsize = fmt_map[i]->n; + } + + int msize = sizeof(float)>sizeof(int32_t) ? sizeof(float) : sizeof(int32_t); + if ( ma->ntmp_arr < nsamples*nsize*msize ) + { + ma->ntmp_arr = nsamples*nsize*msize; + ma->tmp_arr = realloc(ma->tmp_arr, ma->ntmp_arr); + } + + // Fill the temp array for all samples by collecting values from all files + for (i=0; inreaders; i++) + { + bcf_sr_t *reader = &files->readers[i]; + bcf_hdr_t *hdr = reader->header; + bcf_fmt_t *fmt_ori = fmt_map[i]; + bcf1_t *line = maux_get_line(args, i); + int irec = ma->buf[i].cur; + if ( fmt_ori ) + { + type = fmt_ori->type; + int nals_ori = line->n_allele; + if ( length==BCF_VL_G ) + { + // if all fields are missing then n==1 is valid + if ( fmt_ori->n!=1 && fmt_ori->n != nals_ori*(nals_ori+1)/2 && fmt_map[i]->n != nals_ori ) + error("Incorrect number of %s fields (%d) at %s:%d, cannot merge.\n", key,fmt_ori->n,bcf_seqname(args->out_hdr,out),out->pos+1); + } + else if ( length==BCF_VL_A ) + { + if ( fmt_ori->n!=1 && fmt_ori->n != nals_ori-1 ) + error("Incorrect number of %s fields (%d) at %s:%d, cannot merge.\n", key,fmt_ori->n,bcf_seqname(args->out_hdr,out),out->pos+1); + } + else if ( length==BCF_VL_R ) + { + if ( fmt_ori->n!=1 && fmt_ori->n != nals_ori ) + error("Incorrect number of %s fields (%d) at %s:%d, cannot merge.\n", key,fmt_ori->n,bcf_seqname(args->out_hdr,out),out->pos+1); + } + } + + // set the values + #define BRANCH(tgt_type_t, src_type_t, src_is_missing, src_is_vector_end, tgt_set_missing, tgt_set_vector_end) { \ + int j, l, k; \ + tgt_type_t *tgt = (tgt_type_t *) ma->tmp_arr + ismpl*nsize; \ + if ( !fmt_ori ) \ + { \ + /* the field is not present in this file, set missing values */ \ + for (j=0; jp; \ + if ( (length!=BCF_VL_G && length!=BCF_VL_A && length!=BCF_VL_R) || (line->n_allele==out->n_allele && !ma->buf[i].rec[irec].als_differ) ) \ + { \ + /* alleles unchanged, copy over */ \ + for (j=0; jn; l++) \ + { \ + if ( src_is_vector_end ) break; \ + else if ( src_is_missing ) tgt_set_missing; \ + else *tgt = *src; \ + tgt++; src++; \ + } \ + for (k=l; kn - l; \ + } \ + ismpl += bcf_hdr_nsamples(hdr); \ + continue; \ + } \ + /* allele numbering needs to be changed */ \ + if ( length==BCF_VL_G ) \ + { \ + /* Number=G tags */ \ + for (j=0; jtmp_arr + (ismpl+j)*nsize; \ + src = (src_type_t*) fmt_ori->p + j*fmt_ori->n; \ + if ( (src_is_missing && fmt_ori->n==1) || (++src && src_is_vector_end) ) \ + { \ + /* tag with missing value "." */ \ + tgt_set_missing; \ + for (l=1; lsmpl_ploidy[ismpl+j]==1 ? out->n_allele : out->n_allele*(out->n_allele + 1)/2; \ + for (l=0; lsmpl_ploidy[ismpl+j]==1 ) \ + { \ + /* Haploid */ \ + int iori, inew; \ + for (iori=0; iorin_allele; iori++) \ + { \ + inew = ma->buf[i].rec[irec].map[iori]; \ + src = (src_type_t*) fmt_ori->p + j*fmt_ori->n + iori; \ + tgt = (tgt_type_t *) ma->tmp_arr + (ismpl+j)*nsize + inew; \ + if ( src_is_vector_end ) break; \ + if ( src_is_missing ) tgt_set_missing; \ + else *tgt = *src; \ + } \ + } \ + else \ + { \ + /* Diploid */ \ + int iori,jori, inew,jnew; \ + for (iori=0; iorin_allele; iori++) \ + { \ + inew = ma->buf[i].rec[irec].map[iori]; \ + for (jori=0; jori<=iori; jori++) \ + { \ + jnew = ma->buf[i].rec[irec].map[jori]; \ + int kori = iori*(iori+1)/2 + jori; \ + int knew = inew>jnew ? inew*(inew+1)/2 + jnew : jnew*(jnew+1)/2 + inew; \ + src = (src_type_t*) fmt_ori->p + j*fmt_ori->n + kori; \ + tgt = (tgt_type_t *) ma->tmp_arr + (ismpl+j)*nsize + knew; \ + if ( src_is_vector_end ) \ + { \ + iori = line->n_allele; \ + break; \ + } \ + if ( src_is_missing ) tgt_set_missing; \ + else *tgt = *src; \ + } \ + } \ + } \ + } \ + } \ + else \ + { \ + /* Number=A or Number=R tags */ \ + int ifrom = length==BCF_VL_A ? 1 : 0; \ + for (j=0; jtmp_arr + (ismpl+j)*nsize; \ + src = (src_type_t*) (fmt_ori->p + j*fmt_ori->size); \ + if ( (src_is_missing && fmt_ori->n==1) || (++src && src_is_vector_end) ) \ + { \ + /* tag with missing value "." */ \ + tgt_set_missing; \ + for (l=1; lp + j*fmt_ori->size); \ + for (l=0; ln_allele; iori++) \ + { \ + inew = ma->buf[i].rec[irec].map[iori] - ifrom; \ + tgt = (tgt_type_t *) ma->tmp_arr + (ismpl+j)*nsize + inew; \ + if ( src_is_vector_end ) break; \ + if ( src_is_missing ) tgt_set_missing; \ + else *tgt = *src; \ + src++; \ + } \ + } \ + } \ + ismpl += bcf_hdr_nsamples(hdr); \ + } + switch (type) + { + case BCF_BT_INT8: BRANCH(int32_t, int8_t, *src==bcf_int8_missing, *src==bcf_int8_vector_end, *tgt=bcf_int32_missing, *tgt=bcf_int32_vector_end); break; + case BCF_BT_INT16: BRANCH(int32_t, int16_t, *src==bcf_int16_missing, *src==bcf_int16_vector_end, *tgt=bcf_int32_missing, *tgt=bcf_int32_vector_end); break; + case BCF_BT_INT32: BRANCH(int32_t, int32_t, *src==bcf_int32_missing, *src==bcf_int32_vector_end, *tgt=bcf_int32_missing, *tgt=bcf_int32_vector_end); break; + case BCF_BT_FLOAT: BRANCH(float, float, bcf_float_is_missing(*src), bcf_float_is_vector_end(*src), bcf_float_set_missing(*tgt), bcf_float_set_vector_end(*tgt)); break; + case BCF_BT_CHAR: BRANCH(uint8_t, uint8_t, *src==bcf_str_missing, *src==bcf_str_vector_end, *tgt=bcf_str_missing, *tgt=bcf_str_vector_end); break; + default: error("Unexpected case: %d, %s\n", type, key); + } + #undef BRANCH + } + if ( type==BCF_BT_FLOAT ) + bcf_update_format_float(out_hdr, out, key, (float*)ma->tmp_arr, nsamples*nsize); + else if ( type==BCF_BT_CHAR ) + bcf_update_format_char(out_hdr, out, key, (float*)ma->tmp_arr, nsamples*nsize); + else + bcf_update_format_int32(out_hdr, out, key, (int32_t*)ma->tmp_arr, nsamples*nsize); +} + +void merge_format(args_t *args, bcf1_t *out) +{ + bcf_srs_t *files = args->files; + bcf_hdr_t *out_hdr = args->out_hdr; + maux_t *ma = args->maux; + if ( !ma->nfmt_map ) + { + ma->nfmt_map = 2; + ma->fmt_map = (bcf_fmt_t**) calloc(ma->nfmt_map*files->nreaders, sizeof(bcf_fmt_t*)); + } + else + memset(ma->fmt_map, 0, ma->nfmt_map*files->nreaders*sizeof(bcf_fmt_t**)); + + khiter_t kitr; + strdict_t *tmph = args->tmph; + kh_clear(strdict, tmph); + int i, j, ret, has_GT = 0, max_ifmt = 0; // max fmt index + for (i=0; inreaders; i++) + { + bcf1_t *line = maux_get_line(args,i); + if ( !line ) continue; + bcf_sr_t *reader = &files->readers[i]; + bcf_hdr_t *hdr = reader->header; + for (j=0; jn_fmt; j++) + { + // Wat this tag already seen? + bcf_fmt_t *fmt = &line->d.fmt[j]; + const char *key = hdr->id[BCF_DT_ID][fmt->id].key; + kitr = kh_get(strdict, tmph, key); + + int ifmt; + if ( kitr != kh_end(tmph) ) + ifmt = kh_value(tmph, kitr); // seen + else + { + // new FORMAT tag + if ( key[0]=='G' && key[1]=='T' && key[2]==0 ) { has_GT = 1; ifmt = 0; } + else + { + ifmt = ++max_ifmt; + if ( max_ifmt >= ma->nfmt_map ) + { + ma->fmt_map = (bcf_fmt_t**) realloc(ma->fmt_map, sizeof(bcf_fmt_t*)*(max_ifmt+1)*files->nreaders); + memset(ma->fmt_map+ma->nfmt_map*files->nreaders, 0, (max_ifmt-ma->nfmt_map+1)*files->nreaders*sizeof(bcf_fmt_t*)); + ma->nfmt_map = max_ifmt+1; + } + } + kitr = kh_put(strdict, tmph, key, &ret); + kh_value(tmph, kitr) = ifmt; + } + ma->fmt_map[ifmt*files->nreaders+i] = fmt; + } + // Check if the allele numbering must be changed + int irec = ma->buf[i].cur; + for (j=1; jn_allele; j++) + if ( ma->buf[i].rec[irec].map[j]!=j ) break; + ma->buf[i].rec[irec].als_differ = j==line->n_allele ? 0 : 1; + } + + out->n_sample = bcf_hdr_nsamples(out_hdr); + if ( has_GT ) + merge_GT(args, ma->fmt_map, out); + update_AN_AC(out_hdr, out); + + for (i=1; i<=max_ifmt; i++) + merge_format_field(args, &ma->fmt_map[i*files->nreaders], out); + out->d.indiv_dirty = 1; +} + +void gvcf_set_alleles(args_t *args) +{ + int i,k; + bcf_srs_t *files = args->files; + maux_t *maux = args->maux; + gvcf_aux_t *gaux = maux->gvcf; + for (i=0; inals; i++) + { + free(maux->als[i]); + maux->als[i] = NULL; + } + maux->nals = 0; + + for (i=0; inreaders; i++) + { + if ( !gaux[i].active ) continue; + bcf1_t *line = maux_get_line(args, i); + int irec = maux->buf[i].cur; + + hts_expand(int, line->n_allele, maux->buf[i].rec[irec].mmap, maux->buf[i].rec[irec].map); + if ( !maux->nals ) // first record, copy the alleles to the output + { + maux->nals = line->n_allele; + hts_expand0(char*, maux->nals, maux->mals, maux->als); + hts_expand0(int, maux->nals, maux->ncnt, maux->cnt); + for (k=0; knals; k++) + { + if ( maux->als[k] ) free(maux->als[k]); + maux->als[k] = strdup(line->d.allele[k]); + maux->buf[i].rec[irec].map[k] = k; + } + } + else + { + maux->als = merge_alleles(line->d.allele, line->n_allele, maux->buf[i].rec[irec].map, maux->als, &maux->nals, &maux->mals); + if ( !maux->als ) + { + bcf_hdr_t *hdr = bcf_sr_get_header(args->files,i); + error("Failed to merge alleles at %s:%d\n",bcf_seqname(hdr,line),line->pos+1); + } + } + } +} + +/* + Output staged gVCF blocks, end is the last position of the block. Assuming + gaux[i].active flags are set and maux_get_line returns correct lines. +*/ +void gvcf_write_block(args_t *args, int start, int end) +{ + int i; + maux_t *maux = args->maux; + gvcf_aux_t *gaux = maux->gvcf; + assert(gaux); + + // Update POS + int min = INT_MAX; + char ref = 'N'; + for (i=0; ifiles->nreaders; i++) + { + if ( !gaux[i].active ) continue; + if ( ref=='N' && gaux[i].line->pos==start ) ref = gaux[i].line->d.allele[0][0]; + gaux[i].line->pos = start; + } + for (i=0; ifiles->nreaders; i++) + { + if ( !gaux[i].active ) continue; + if ( gaux[i].end < start ) + { + gaux[i].active = 0; + maux->buf[i].cur = -1; + continue; + } + gaux[i].line->d.allele[0][0] = ref; + if ( min > gaux[i].end ) min = gaux[i].end; + } + // Check for valid gVCF blocks in this region + if ( min==INT_MAX ) + { + assert(0); + maux->gvcf_min = 0; + return; + } + + bcf1_t *out = args->out_line; + + gvcf_set_alleles(args); + + // Merge the staged lines + merge_chrom2qual(args, out); + merge_filter(args, out); + merge_info(args, out); + merge_format(args, out); + + if ( args->gvcf_fai && out->d.allele[0][0]=='N' ) + { + int slen = 0; + char *seq = faidx_fetch_seq(args->gvcf_fai,maux->chr,out->pos,out->pos,&slen); + if (slen) + { + out->d.allele[0][0] = seq[0]; + free(seq); + } + } + + // Update END boundary + if ( end > start ) + { + end++; + bcf_update_info_int32(args->out_hdr, out, "END", &end, 1); + } + else + bcf_update_info_int32(args->out_hdr, out, "END", NULL, 0); + bcf_write1(args->out_fh, args->out_hdr, out); + bcf_clear1(out); + + + // Inactivate blocks which do not extend beyond END and find new gvcf_min + min = INT_MAX; + for (i=0; ifiles->nreaders; i++) + { + if ( !gaux[i].active ) continue; + if ( gaux[i].end < end ) + { + gaux[i].active = 0; + maux->buf[i].cur = -1; + continue; + } + // next min END position bigger than the current one + if ( maux->gvcf_min < gaux[i].end+1 && min > gaux[i].end+1 ) min = gaux[i].end + 1; + } + maux->gvcf_min = min==INT_MAX ? 0 : min; +} + +/* + Flush staged gVCF blocks. Flush everything if there are no more lines + (done=1) or if there is a new chromosome. If still on the same chromosome, + all hanging blocks must be ended by creating new records: + A + 1 END=10 + B + 3 END=7 + C + 3 END=5 + out + 1 END=2 A . . + 3 END=5 A B C + 6 END=7 A B . + 8 END=10 A . . + +*/ +void gvcf_flush(args_t *args, int done) +{ + int i; + maux_t *maux = args->maux; + + if ( !maux->chr ) return; // first time here, nothing to flush + + int flush_until = INT_MAX; + if ( !done ) + { + // Get current position and chromosome + for (i=0; in; i++) + if ( bcf_sr_has_line(maux->files,i) ) break; + bcf1_t *line = bcf_sr_get_line(maux->files,i); + bcf_hdr_t *hdr = bcf_sr_get_header(maux->files,i); + + if ( !strcmp(maux->chr,bcf_seqname(hdr,line)) ) flush_until = line->pos; // still on the same chr + } + + // When called on a region, trim the blocks accordingly + int start = maux->gvcf_break>=0 ? maux->gvcf_break + 1 : maux->pos; + if ( args->regs ) + { + int rstart = -1, rend = -1; + if ( regidx_overlap(args->regs,maux->chr,start,flush_until,args->regs_itr) ) + { + // In case there are multiple regions, we treat them as one + rstart = args->regs_itr->beg; + while ( regitr_overlap(args->regs_itr) ) rend = args->regs_itr->end; + } + if ( rstart > start ) start = rstart; + if ( rend < flush_until ) flush_until = rend+1; + } + + // output all finished blocks + while ( maux->gvcf_min && start < flush_until ) + { + // does the block end before the new line or is it interrupted? + int tmp = maux->gvcf_min < flush_until ? maux->gvcf_min : flush_until; + if ( start > tmp-1 ) break; + gvcf_write_block(args,start,tmp-1); // gvcf_min is 1-based + start = tmp; + } +} + +/* + Check incoming lines for new gVCF blocks, set pointer to the current source + buffer (gvcf or readers). In contrast to gvcf_flush, this function can be + called only after maux_reset as it relies on updated maux buffers. +*/ +void gvcf_stage(args_t *args, int pos) +{ + maux_t *maux = args->maux; + gvcf_aux_t *gaux = maux->gvcf; + bcf_srs_t *files = args->files; + int32_t *end = (int32_t*) maux->tmp_arr; + int i, nend = maux->ntmp_arr / sizeof(int32_t); + + maux->gvcf_break = -1; + maux->gvcf_min = INT_MAX; + for (i=0; inreaders; i++) + { + if ( gaux[i].active ) + { + // gvcf block should not overlap with another record + if ( maux->gvcf_min > gaux[i].end+1 ) maux->gvcf_min = gaux[i].end + 1; + maux->buf[i].beg = 0; + maux->buf[i].end = 1; + maux->buf[i].cur = 0; + continue; + } + + // Does any of the lines have END set? It is enough to check only the + // first line, there should be no duplicate records with END in gVCF + + if ( maux->buf[i].beg==maux->buf[i].end ) continue; // no new record + + int irec = maux->buf[i].beg; + bcf_hdr_t *hdr = bcf_sr_get_header(files, i); + bcf1_t *line = args->files->readers[i].buffer[irec]; + int ret = bcf_get_info_int32(hdr,line,"END",&end,&nend); + if ( ret==1 ) + { + // END is set, this is a new gVCF block. Cache this line in gaux[i] and swap with + // an empty record: the gaux line must be kept until we reach its END. + gaux[i].active = 1; + gaux[i].end = end[0] - 1; + SWAP(bcf1_t*,args->files->readers[i].buffer[irec],gaux[i].line); + gaux[i].line->pos = pos; + + maux->buf[i].lines = &gaux[i].line; + maux->buf[i].beg = 0; + maux->buf[i].end = 1; + maux->buf[i].cur = 0; + + // Set the rid,pos of the swapped line in the buffer or else the + // synced reader will have a problem with the next line + // + args->files->readers[i].buffer[irec]->rid = maux->buf[i].rid; + args->files->readers[i].buffer[irec]->pos = maux->pos; + + // Update block offsets + if ( maux->gvcf_min > gaux[i].end+1 ) maux->gvcf_min = gaux[i].end + 1; + } + else + maux->gvcf_break = line->pos; // must break the gvcf block + } + maux->ntmp_arr = nend * sizeof(int32_t); + maux->tmp_arr = end; + if ( maux->gvcf_min==INT_MAX ) maux->gvcf_min = 0; +} + + +void debug_buffers(FILE *fp, bcf_srs_t *files); +void debug_buffer(FILE *fp, bcf_srs_t *files, int reader); + +/* + Flush all buffered and processed records with the same coordinate. + Note that synced reader discards buffer[0], so that needs to stay + untouched. +*/ +void clean_buffer(args_t *args) +{ + maux_t *ma = args->maux; + + int ir; + for (ir=0; irn; ir++) + { + // Invalidate pointer to reader's buffer or else gvcf_flush will attempt + // to use the old lines via maux_get_line() + if ( ma->gvcf && !ma->gvcf[ir].active ) ma->buf[ir].cur = -1; + + bcf_sr_t *reader = bcf_sr_get_reader(args->files,ir); + if ( !reader->nbuffer ) continue; // nothing to clean + + bcf1_t **buf = reader->buffer; + if ( buf[1]->rid!=ma->buf[ir].rid || buf[1]->pos!=ma->pos ) continue; // nothing to flush + + int a = 1, b = 2; + while ( b<=reader->nbuffer && buf[b]->rid==ma->buf[ir].rid && buf[b]->pos==ma->pos ) b++; + // b now points to the first line we want to preserve + while ( b<=reader->nbuffer ) + { + SWAP(bcf1_t*, buf[a], buf[b]); + a++; b++; + } + reader->nbuffer -= b-a; + } +} + +void debug_maux(args_t *args) +{ + bcf_srs_t *files = args->files; + maux_t *maux = args->maux; + int j,k,l; + + fprintf(bcftools_stderr,"Alleles to merge at %d, nals=%d\n", maux->pos+1,maux->nals); + for (j=0; jnreaders; j++) + { + bcf_sr_t *reader = &files->readers[j]; + buffer_t *buf = &maux->buf[j]; + fprintf(bcftools_stderr," reader %d: ", j); + for (k=buf->beg; kend; k++) + { + if ( buf->rec[k].skip & SKIP_DONE ) continue; + bcf1_t *line = reader->buffer[k]; + fprintf(bcftools_stderr,"\t"); + if ( buf->rec[k].skip ) fprintf(bcftools_stderr,"["); // this record will not be merged in this round + for (l=0; ln_allele; l++) + fprintf(bcftools_stderr,"%s%s", l==0?"":",", line->d.allele[l]); + if ( buf->rec[k].skip ) fprintf(bcftools_stderr,"]"); + } + fprintf(bcftools_stderr,"\n"); + } + fprintf(bcftools_stderr," counts: "); + for (j=0; jnals; j++) fprintf(bcftools_stderr,"%s %dx %s", j==0?"":",",maux->cnt[j], maux->als[j]); + fprintf(bcftools_stderr,"\n\n"); +} + +void debug_state(args_t *args) +{ + maux_t *maux = args->maux; + int i,j; + for (i=0; ifiles->nreaders; i++) + { + fprintf(bcftools_stderr,"reader %d:\tcur,beg,end=% d,%d,%d", i,maux->buf[i].cur,maux->buf[i].beg,maux->buf[i].end); + if ( maux->buf[i].cur >=0 ) + { + bcf_hdr_t *hdr = bcf_sr_get_header(args->files,i); + const char *chr = bcf_hdr_id2name(hdr, maux->buf[i].rid); + fprintf(bcftools_stderr,"\t"); + for (j=maux->buf[i].beg; jbuf[i].end; j++) fprintf(bcftools_stderr," %s:%d",chr,maux->buf[i].lines[j]->pos+1); + } + fprintf(bcftools_stderr,"\n"); + } + for (i=0; ifiles->nreaders; i++) + { + fprintf(bcftools_stderr,"reader %d:\tgvcf_active=%d", i,maux->gvcf[i].active); + if ( maux->gvcf[i].active ) fprintf(bcftools_stderr,"\tpos,end=%d,%d", maux->gvcf[i].line->pos+1,maux->gvcf[i].end+1); + fprintf(bcftools_stderr,"\n"); + } + fprintf(bcftools_stderr,"\n"); +} + + +/* + Determine which line should be merged from which reader: go through all + readers and all buffered lines, expand REF,ALT and try to match lines with + the same ALTs. + */ +int can_merge(args_t *args) +{ + bcf_srs_t *files = args->files; + int snp_mask = (VCF_SNP<<1)|(VCF_MNP<<1), indel_mask = VCF_INDEL<<1, ref_mask = 1; + maux_t *maux = args->maux; + gvcf_aux_t *gaux = maux->gvcf; + char *id = NULL, ref = 'N'; + int i,j,k, ntodo = 0; + + for (i=0; inals; i++) + { + free(maux->als[i]); + maux->als[i] = NULL; + } + maux->var_types = maux->nals = 0; + + for (i=0; inreaders; i++) + { + buffer_t *buf = &maux->buf[i]; + + if ( gaux && gaux[i].active ) + { + // skip readers with active gvcf blocks + buf->rec[buf->beg].skip = SKIP_DIFF; + continue; + } + for (j=buf->beg; jend; j++) + { + if ( buf->rec[j].skip & SKIP_DONE ) continue; + + buf->rec[j].skip = SKIP_DIFF; + ntodo++; + + if ( args->merge_by_id ) + id = buf->lines[j]->d.id; + else + { + int var_type = bcf_get_variant_types(buf->lines[j]); + maux->var_types |= var_type ? var_type<<1 : 1; + } + } + + // for gvcf: find out REF at this position + if ( buf->beg < buf->end && ref=='N' ) + ref = buf->lines[buf->beg]->d.allele[0][0]; + } + if ( !ntodo ) return 0; + + // In this loop we select from each reader compatible candidate lines. + // (i.e. SNPs or indels). Go through all files and all lines at this + // position and normalize relevant alleles. + // REF-only sites may be associated with both SNPs and indels. + for (i=0; inreaders; i++) + { + bcf_sr_t *reader = &files->readers[i]; + buffer_t *buf = &maux->buf[i]; + + if ( gaux && gaux[i].active ) + { + gaux[i].line->d.allele[0][0] = ref; + gaux[i].line->pos = maux->pos; + } + + for (j=buf->beg; jend; j++) + { + if ( buf->rec[j].skip & SKIP_DONE ) continue; + + bcf1_t *line = buf->lines[j]; // ptr to reader's buffer or gvcf buffer + + int line_type = bcf_get_variant_types(line); + line_type = line_type ? line_type<<1 : 1; + + // select relevant lines + if ( args->merge_by_id ) + { + if ( strcmp(id,line->d.id) ) continue; + } + else + { + if ( args->collapse==COLLAPSE_NONE && maux->nals ) + { + // All alleles of the tested record must be present in the + // selected maux record plus variant types must be the same + if ( (maux->var_types & line_type) != line_type ) continue; + if ( vcmp_set_ref(args->vcmp,maux->als[0],line->d.allele[0]) < 0 ) continue; // refs not compatible + for (k=1; kn_allele; k++) + { + if ( vcmp_find_allele(args->vcmp,maux->als+1,maux->nals-1,line->d.allele[k])>=0 ) break; + } + if ( !(line_type&ref_mask) && k==line->n_allele ) continue; // not a REF-only site and there is no matching allele + } + if ( !(args->collapse&COLLAPSE_ANY) ) + { + // Merge: + // - SNPs+SNPs+MNPs+REF if -m both,snps + // - indels+indels+REF if -m both,indels, REF only if SNPs are not present + // - SNPs come first + if ( line_type & indel_mask ) + { + if ( !(line_type&snp_mask) && maux->var_types&snp_mask ) continue; // SNPs come first + if ( args->do_gvcf && maux->var_types&ref_mask ) continue; // never merge indels with gVCF blocks + } + } + } + buf->rec[j].skip = 0; + + hts_expand(int, line->n_allele, buf->rec[j].mmap, buf->rec[j].map); + if ( !maux->nals ) // first record, copy the alleles to the output + { + maux->nals = line->n_allele; + hts_expand0(char*, maux->nals, maux->mals, maux->als); + hts_expand0(int, maux->nals, maux->ncnt, maux->cnt); + for (k=0; knals; k++) + { + free(maux->als[k]); + maux->als[k] = strdup(line->d.allele[k]); + buf->rec[j].map[k] = k; + maux->cnt[k] = 1; + } + continue; + } + // normalize alleles + maux->als = merge_alleles(line->d.allele, line->n_allele, buf->rec[j].map, maux->als, &maux->nals, &maux->mals); + if ( !maux->als ) error("Failed to merge alleles at %s:%d in %s\n",bcf_seqname(args->out_hdr,line),line->pos+1,reader->fname); + hts_expand0(int, maux->nals, maux->ncnt, maux->cnt); + for (k=1; kn_allele; k++) + maux->cnt[ buf->rec[j].map[k] ]++; // how many times an allele appears in the files + maux->cnt[0]++; + } + } + return 1; +} + +/* + Select records that have the same alleles; the input ordering of indels + must not matter. Multiple VCF lines can be emitted from this loop. + We expect only very few alleles and not many records with the same + position in the buffers, therefore the nested loops should not slow us + much. +*/ +void stage_line(args_t *args) +{ + int snp_mask = (VCF_SNP<<1)|(VCF_MNP<<1), indel_mask = VCF_INDEL<<1, ref_mask = 1; + bcf_srs_t *files = args->files; + maux_t *maux = args->maux; + + // debug_maux(args); + + // take the most frequent allele present in multiple files, REF is skipped + int i,j,k,icnt = 1; + for (i=2; inals; i++) + if ( maux->cnt[i] > maux->cnt[icnt] ) icnt = i; + + int nout = 0; + for (i=0; inreaders; i++) + { + buffer_t *buf = &maux->buf[i]; + buf->cur = -1; + if ( buf->beg >= buf->end ) continue; // no lines in the buffer + + // find lines with the same allele + for (j=buf->beg; jend; j++) + { + if ( buf->rec[j].skip ) continue; // done or not compatible + if ( args->merge_by_id ) break; + if ( maux->nals==1 && buf->lines[j]->n_allele==1 ) break; // REF-only record + + for (k=0; klines[j]->n_allele; k++) + if ( icnt==buf->rec[j].map[k] ) break; + + if ( klines[j]->n_allele ) break; + } + if ( j>=buf->end ) + { + // no matching allele found in this file + if ( args->collapse==COLLAPSE_NONE ) continue; + + for (j=buf->beg; jend; j++) + { + if ( buf->rec[j].skip ) continue; // done or not compatible + if ( args->collapse&COLLAPSE_ANY ) break; // anything can be merged + int line_type = bcf_get_variant_types(buf->lines[j]); + if ( maux->var_types&snp_mask && line_type&VCF_SNP && (args->collapse&COLLAPSE_SNPS) ) break; + if ( maux->var_types&indel_mask && line_type&VCF_INDEL && (args->collapse&COLLAPSE_INDELS) ) break; + if ( line_type==VCF_REF ) + { + if ( maux->var_types&snp_mask && (args->collapse&COLLAPSE_SNPS) ) break; + if ( maux->var_types&indel_mask && (args->collapse&COLLAPSE_INDELS) ) break; + if ( maux->var_types&ref_mask ) break; + } + else if ( maux->var_types&ref_mask ) + { + if ( line_type&snp_mask && (args->collapse&COLLAPSE_SNPS) ) break; + if ( line_type&indel_mask && (args->collapse&COLLAPSE_INDELS) ) break; + } + } + } + if ( jend ) + { + // found a suitable line for merging + buf->cur = j; + + // mark as finished so that it's ignored next time + buf->rec[j].skip = SKIP_DONE; + nout++; + } + } + assert( nout ); +} + +void merge_line(args_t *args) +{ + if ( args->regs ) + { + if ( !regidx_overlap(args->regs,args->maux->chr,args->maux->pos,args->maux->pos,NULL) ) return; + } + + bcf1_t *out = args->out_line; + merge_chrom2qual(args, out); + merge_filter(args, out); + merge_info(args, out); + if ( args->do_gvcf ) + bcf_update_info_int32(args->out_hdr, out, "END", NULL, 0); + merge_format(args, out); + bcf_write1(args->out_fh, args->out_hdr, out); + bcf_clear1(out); +} + +void bcf_hdr_append_version(bcf_hdr_t *hdr, int argc, char **argv, const char *cmd) +{ + kstring_t str = {0,0,0}; + ksprintf(&str,"##%sVersion=%s+htslib-%s\n", cmd, bcftools_version(), hts_version()); + bcf_hdr_append(hdr,str.s); + + str.l = 0; + ksprintf(&str,"##%sCommand=%s", cmd, argv[0]); + int i; + for (i=1; ioutput_fname, strerror(errno)); + if ( args->n_threads ) hts_set_opt(args->out_fh, HTS_OPT_THREAD_POOL, args->files->p); //hts_set_threads(args->out_fh, args->n_threads); + args->out_hdr = bcf_hdr_init("w"); + + if ( args->header_fname ) + { + if ( bcf_hdr_set(args->out_hdr,args->header_fname) ) error("Could not read/parse the header: %s\n", args->header_fname); + } + else + { + int i; + for (i=0; ifiles->nreaders; i++) + { + char buf[10]; snprintf(buf,10,"%d",i+1); + merge_headers(args->out_hdr, args->files->readers[i].header,buf,args->force_samples); + } + if (args->record_cmd_line) bcf_hdr_append_version(args->out_hdr, args->argc, args->argv, "bcftools_merge"); + bcf_hdr_sync(args->out_hdr); + } + info_rules_init(args); + + bcf_hdr_set_version(args->out_hdr, bcf_hdr_get_version(args->files->readers[0].header)); + bcf_hdr_write(args->out_fh, args->out_hdr); + if ( args->header_only ) + { + bcf_hdr_destroy(args->out_hdr); + hts_close(args->out_fh); + return; + } + + if ( args->collapse==COLLAPSE_NONE ) args->vcmp = vcmp_init(); + args->maux = maux_init(args); + args->out_line = bcf_init1(); + args->tmph = kh_init(strdict); + + while ( bcf_sr_next_line(args->files) ) + { + // output cached gVCF blocks which end before the new record + if ( args->do_gvcf ) + gvcf_flush(args,0); + + maux_reset(args->maux); + + // determine which of the new records are gvcf blocks + if ( args->do_gvcf ) + gvcf_stage(args, args->maux->pos); + + while ( can_merge(args) ) + { + stage_line(args); + merge_line(args); + } + clean_buffer(args); + // debug_state(args); + } + if ( args->do_gvcf ) + gvcf_flush(args,1); + + info_rules_destroy(args); + maux_destroy(args->maux); + bcf_hdr_destroy(args->out_hdr); + hts_close(args->out_fh); + bcf_destroy1(args->out_line); + kh_destroy(strdict, args->tmph); + if ( args->tmps.m ) free(args->tmps.s); + if ( args->vcmp ) vcmp_destroy(args->vcmp); +} + +static void usage(void) +{ + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "About: Merge multiple VCF/BCF files from non-overlapping sample sets to create one multi-sample file.\n"); + fprintf(bcftools_stderr, " Note that only records from different files can be merged, never from the same file. For\n"); + fprintf(bcftools_stderr, " \"vertical\" merge take a look at \"bcftools norm\" instead.\n"); + fprintf(bcftools_stderr, "Usage: bcftools merge [options] [...]\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Options:\n"); + fprintf(bcftools_stderr, " --force-samples resolve duplicate sample names\n"); + fprintf(bcftools_stderr, " --print-header print only the merged header and exit\n"); + fprintf(bcftools_stderr, " --use-header use the provided header\n"); + fprintf(bcftools_stderr, " -0 --missing-to-ref assume genotypes at missing sites are 0/0\n"); + fprintf(bcftools_stderr, " -f, --apply-filters require at least one of the listed FILTER strings (e.g. \"PASS,.\")\n"); + fprintf(bcftools_stderr, " -F, --filter-logic remove filters if some input is PASS (\"x\"), or apply all filters (\"+\") [+]\n"); + fprintf(bcftools_stderr, " -g, --gvcf <-|ref.fa> merge gVCF blocks, INFO/END tag is expected. Implies -i QS:sum,MinDP:min,I16:sum,IDV:max,IMF:max\n"); + fprintf(bcftools_stderr, " -i, --info-rules rules for merging INFO fields (method is one of sum,avg,min,max,join) or \"-\" to turn off the default [DP:sum,DP4:sum]\n"); + fprintf(bcftools_stderr, " -l, --file-list read file names from the file\n"); + fprintf(bcftools_stderr, " -m, --merge allow multiallelic records for , see man page for details [both]\n"); + fprintf(bcftools_stderr, " --no-version do not append version and command line to the header\n"); + fprintf(bcftools_stderr, " -o, --output write output to a file [standard output]\n"); + fprintf(bcftools_stderr, " -O, --output-type 'b' compressed BCF; 'u' uncompressed BCF; 'z' compressed VCF; 'v' uncompressed VCF [v]\n"); + fprintf(bcftools_stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(bcftools_stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(bcftools_stderr, " --threads number of extra output compression threads [0]\n"); + fprintf(bcftools_stderr, "\n"); + exit(1); +} + +int main_vcfmerge(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->files = bcf_sr_init(); + args->argc = argc; args->argv = argv; + args->output_fname = "-"; + args->output_type = FT_VCF; + args->n_threads = 0; + args->record_cmd_line = 1; + args->collapse = COLLAPSE_BOTH; + int regions_is_file = 0; + + static struct option loptions[] = + { + {"help",no_argument,NULL,'h'}, + {"merge",required_argument,NULL,'m'}, + {"gvcf",required_argument,NULL,'g'}, + {"file-list",required_argument,NULL,'l'}, + {"missing-to-ref",no_argument,NULL,'0'}, + {"apply-filters",required_argument,NULL,'f'}, + {"use-header",required_argument,NULL,1}, + {"print-header",no_argument,NULL,2}, + {"force-samples",no_argument,NULL,3}, + {"output",required_argument,NULL,'o'}, + {"output-type",required_argument,NULL,'O'}, + {"threads",required_argument,NULL,9}, + {"regions",required_argument,NULL,'r'}, + {"regions-file",required_argument,NULL,'R'}, + {"info-rules",required_argument,NULL,'i'}, + {"no-version",no_argument,NULL,8}, + {"filter-logic",required_argument,NULL,'F'}, + {NULL,0,NULL,0} + }; + while ((c = getopt_long(argc, argv, "hm:f:r:R:o:O:i:l:g:F:0",loptions,NULL)) >= 0) { + switch (c) { + case 'F': + if ( !strcmp(optarg,"+") ) args->filter_logic = FLT_LOGIC_ADD; + else if ( !strcmp(optarg,"x") ) args->filter_logic = FLT_LOGIC_REMOVE; + else error("Filter logic not recognised: %s\n", optarg); + break; + case '0': args->missing_to_ref = 1; break; + case 'g': + args->do_gvcf = 1; + if ( strcmp("-",optarg) ) + { + args->gvcf_fai = fai_load(optarg); + if ( !args->gvcf_fai ) error("Failed to load the fai index: %s\n", optarg); + } + break; + case 'l': args->file_list = optarg; break; + case 'i': args->info_rules = optarg; break; + case 'o': args->output_fname = optarg; break; + case 'O': + switch (optarg[0]) { + case 'b': args->output_type = FT_BCF_GZ; break; + case 'u': args->output_type = FT_BCF; break; + case 'z': args->output_type = FT_VCF_GZ; break; + case 'v': args->output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + } + break; + case 'm': + args->collapse = COLLAPSE_NONE; + if ( !strcmp(optarg,"snps") ) args->collapse |= COLLAPSE_SNPS; + else if ( !strcmp(optarg,"indels") ) args->collapse |= COLLAPSE_INDELS; + else if ( !strcmp(optarg,"both") ) args->collapse |= COLLAPSE_BOTH; + else if ( !strcmp(optarg,"any") ) args->collapse |= COLLAPSE_ANY; + else if ( !strcmp(optarg,"all") ) args->collapse |= COLLAPSE_ANY; + else if ( !strcmp(optarg,"none") ) args->collapse = COLLAPSE_NONE; + else if ( !strcmp(optarg,"id") ) { args->collapse = COLLAPSE_NONE; args->merge_by_id = 1; } + else error("The -m type \"%s\" is not recognised.\n", optarg); + break; + case 'f': args->files->apply_filters = optarg; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; regions_is_file = 1; break; + case 1 : args->header_fname = optarg; break; + case 2 : args->header_only = 1; break; + case 3 : args->force_samples = 1; break; + case 9 : args->n_threads = strtol(optarg, 0, 0); break; + case 8 : args->record_cmd_line = 0; break; + case 'h': + case '?': usage(); + default: error("Unknown argument: %s\n", optarg); + } + } + if ( argc==optind && !args->file_list ) usage(); + if ( argc-optind<2 && !args->file_list ) usage(); + + args->files->require_index = 1; + if ( args->regions_list ) + { + if ( bcf_sr_set_regions(args->files, args->regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + if ( regions_is_file ) + args->regs = regidx_init(args->regions_list,NULL,NULL,sizeof(char*),NULL); + else + { + args->regs = regidx_init(NULL,regidx_parse_reg,NULL,sizeof(char*),NULL); + if ( regidx_insert_list(args->regs,args->regions_list,',') !=0 ) error("Could not parse the regions: %s\n", args->regions_list); + regidx_insert(args->regs,NULL); + } + if ( !args->regs ) error("Could not parse the regions: %s\n", args->regions_list); + args->regs_itr = regitr_init(args->regs); + } + + if ( bcf_sr_set_threads(args->files, args->n_threads)<0 ) error("Failed to create threads\n"); + while (optindfiles, argv[optind]) ) error("Failed to open %s: %s\n", argv[optind],bcf_sr_strerror(args->files->errnum)); + optind++; + } + if ( args->file_list ) + { + int nfiles, i; + char **files = hts_readlines(args->file_list, &nfiles); + if ( !files ) error("Failed to read from %s\n", args->file_list); + for (i=0;ifiles, files[i]) ) error("Failed to open %s: %s\n", files[i],bcf_sr_strerror(args->files->errnum)); + for (i=0; ifiles); + if ( args->regs ) regidx_destroy(args->regs); + if ( args->regs_itr ) regitr_destroy(args->regs_itr); + if ( args->gvcf_fai ) fai_destroy(args->gvcf_fai); + free(args); + return 0; +} + diff --git a/bcftools/vcfnorm.c b/bcftools/vcfnorm.c new file mode 100644 index 0000000..bc51018 --- /dev/null +++ b/bcftools/vcfnorm.c @@ -0,0 +1,1895 @@ +/* vcfnorm.c -- Left-align and normalize indels. + + Copyright (C) 2013-2016 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "rbuf.h" + +#define CHECK_REF_EXIT 0 +#define CHECK_REF_WARN 1 +#define CHECK_REF_SKIP 2 +#define CHECK_REF_FIX 4 + +#define MROWS_SPLIT 1 +#define MROWS_MERGE 2 + +// for -m+, mapping from allele indexes of a single input record +// to allele indexes of output record +typedef struct +{ + int nals, mals, *map; +} +map_t; + +typedef struct +{ + char *tseq, *seq; + int mseq; + bcf1_t **lines, **tmp_lines, **alines, **blines, *mrow_out; + int ntmp_lines, mtmp_lines, nalines, malines, nblines, mblines; + map_t *maps; // mrow map for each buffered record + char **als; + int mmaps, nals, mals; + uint8_t *tmp_arr1, *tmp_arr2, *diploid; + int ntmp_arr1, ntmp_arr2; + kstring_t *tmp_str; + kstring_t *tmp_als, tmp_als_str; + int ntmp_als; + rbuf_t rbuf; + int buf_win; // maximum distance between two records to consider + int aln_win; // the realignment window size (maximum repeat size) + bcf_srs_t *files; // using the synced reader only for -r option + bcf_hdr_t *hdr; + faidx_t *fai; + struct { int tot, set, swap; } nref; + char **argv, *output_fname, *ref_fname, *vcf_fname, *region, *targets; + int argc, rmdup, output_type, n_threads, check_ref, strict_filter, do_indels; + int nchanged, nskipped, nsplit, ntotal, mrows_op, mrows_collapse, parsimonious; + int record_cmd_line; +} +args_t; + +static inline int replace_iupac_codes(char *seq, int nseq) +{ + // Replace ambiguity codes with N for now, it awaits to be seen what the VCF spec codifies in the end + int i, n = 0; + for (i=0; id.allele[0]); + int i, maxlen = reflen, len; + for (i=1; in_allele; i++) + { + int len = strlen(line->d.allele[i]); + if ( maxlen < len ) maxlen = len; + } + + char *ref = faidx_fetch_seq(args->fai, (char*)bcf_seqname(args->hdr,line), line->pos, line->pos+maxlen-1, &len); + if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", bcf_seqname(args->hdr,line),line->pos+1); + replace_iupac_codes(ref,len); + + args->nref.tot++; + + // is the REF different? + if ( !strncasecmp(line->d.allele[0],ref,reflen) ) { free(ref); return; } + + // is the REF allele missing or N? + if ( reflen==1 && (line->d.allele[0][0]=='.' || line->d.allele[0][0]=='N' || line->d.allele[0][0]=='n') ) + { + line->d.allele[0][0] = ref[0]; + args->nref.set++; + free(ref); + bcf_update_alleles(args->hdr,line,(const char**)line->d.allele,line->n_allele); + return; + } + + // does REF contain non-standard bases? + if ( replace_iupac_codes(line->d.allele[0],strlen(line->d.allele[0])) ) + { + args->nref.set++; + bcf_update_alleles(args->hdr,line,(const char**)line->d.allele,line->n_allele); + if ( !strncasecmp(line->d.allele[0],ref,reflen) ) { free(ref); return; } + } + + // is it swapped? + for (i=1; in_allele; i++) + { + int len = strlen(line->d.allele[i]); + if ( !strncasecmp(line->d.allele[i],ref,len) ) break; + } + + kstring_t str = {0,0,0}; + if ( i==line->n_allele ) + { + // none of the alternate alleles matches the reference + if ( line->n_allele>1 ) + args->nref.set++; + else + args->nref.swap++; + + kputs(line->d.allele[0],&str); + kputc(',',&str); + for (i=1; in_allele; i++) + { + kputs(line->d.allele[i],&str); + kputc(',',&str); + } + kputc(ref[0],&str); + bcf_update_alleles_str(args->hdr,line,str.s); + str.l = 0; + } + else + args->nref.swap++; + free(ref); + + // swap the alleles + int j; + kputs(line->d.allele[i],&str); + for (j=1; jd.allele[j],&str); + } + kputc(',',&str); + kputs(line->d.allele[0],&str); + for (j=i+1; jn_allele; j++) + { + kputc(',',&str); + kputs(line->d.allele[j],&str); + } + bcf_update_alleles_str(args->hdr,line,str.s); + + // swap genotypes + int ntmp = args->ntmp_arr1 / sizeof(int32_t); // reuse tmp_arr declared as uint8_t + int ngts = bcf_get_genotypes(args->hdr, line, &args->tmp_arr1, &ntmp); + args->ntmp_arr1 = ntmp * sizeof(int32_t); + int32_t *gts = (int32_t*) args->tmp_arr1; + int ni = 0; + for (j=0; jhdr,line,gts,ngts); + + // update AC + int nac = bcf_get_info_int32(args->hdr, line, "AC", &args->tmp_arr1, &ntmp); + args->ntmp_arr1 = ntmp * sizeof(int32_t); + if ( i <= nac ) + { + int32_t *ac = (int32_t*)args->tmp_arr1; + ac[i-1] = ni; + bcf_update_info_int32(args->hdr, line, "AC", ac, nac); + } + + free(str.s); +} + +static void fix_dup_alt(args_t *args, bcf1_t *line) +{ + // update alleles, create a mapping between old and new indexes + hts_expand(uint8_t,line->n_allele,args->ntmp_arr1,args->tmp_arr1); + args->tmp_arr1[0] = 0; // ref always unchanged + + int i, j, nals = line->n_allele, nals_ori = line->n_allele; + for (i=1, j=1; in_allele; i++) + { + if ( strcmp(line->d.allele[0],line->d.allele[i]) ) + { + args->tmp_arr1[i] = j++; + continue; + } + args->tmp_arr1[i] = 0; + nals--; + } + for (i=1, j=1; in_allele; i++) + { + if ( !args->tmp_arr1[i] ) continue; + line->d.allele[j++] = line->d.allele[i]; + } + bcf_update_alleles(args->hdr, line, (const char**)line->d.allele, nals); + + + // update genotypes + int ntmp = args->ntmp_arr2 / sizeof(int32_t); // reuse tmp_arr declared as uint8_t + int ngts = bcf_get_genotypes(args->hdr, line, &args->tmp_arr2, &ntmp); + args->ntmp_arr2 = ntmp * sizeof(int32_t); + int32_t *gts = (int32_t*) args->tmp_arr2; + int changed = 0; + for (i=0; itmp_arr1[ial] ) continue; + int ial_new = ialtmp_arr1[ial] : 0; + gts[i] = bcf_gt_is_phased(gts[i]) ? bcf_gt_phased(ial_new) : bcf_gt_unphased(ial_new); + changed = 1; + } + if ( changed ) bcf_update_genotypes(args->hdr,line,gts,ngts); +} + +#define ERR_DUP_ALLELE -2 +#define ERR_REF_MISMATCH -1 +#define ERR_OK 0 +#define ERR_SYMBOLIC 1 +#define ERR_SPANNING_DELETION 2 + +static int realign(args_t *args, bcf1_t *line) +{ + bcf_unpack(line, BCF_UN_STR); + + // Sanity check REF + int i, nref, reflen = strlen(line->d.allele[0]); + char *ref = faidx_fetch_seq(args->fai, (char*)args->hdr->id[BCF_DT_CTG][line->rid].key, line->pos, line->pos+reflen-1, &nref); + if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", args->hdr->id[BCF_DT_CTG][line->rid].key, line->pos+1); + seq_to_upper(ref,0); + replace_iupac_codes(ref,nref); // any non-ACGT character in fasta ref is replaced with N + + // does VCF REF contain non-standard bases? + if ( has_non_acgtn(line->d.allele[0],reflen) ) + { + if ( args->check_ref==CHECK_REF_EXIT ) + error("Non-ACGTN reference allele at %s:%d .. REF_SEQ:'%s' vs VCF:'%s'\n", bcf_seqname(args->hdr,line),line->pos+1,ref,line->d.allele[0]); + if ( args->check_ref & CHECK_REF_WARN ) + fprintf(stderr,"NON_ACGTN_REF\t%s\t%d\t%s\n", bcf_seqname(args->hdr,line),line->pos+1,line->d.allele[0]); + free(ref); + return ERR_REF_MISMATCH; + } + if ( strcasecmp(ref,line->d.allele[0]) ) + { + if ( args->check_ref==CHECK_REF_EXIT ) + error("Reference allele mismatch at %s:%d .. REF_SEQ:'%s' vs VCF:'%s'\n", bcf_seqname(args->hdr,line),line->pos+1,ref,line->d.allele[0]); + if ( args->check_ref & CHECK_REF_WARN ) + fprintf(stderr,"REF_MISMATCH\t%s\t%d\t%s\n", bcf_seqname(args->hdr,line),line->pos+1,line->d.allele[0]); + free(ref); + return ERR_REF_MISMATCH; + } + free(ref); + ref = NULL; + + if ( line->n_allele == 1 ) // a REF + { + if ( line->rlen > 1 ) + { + line->d.allele[0][1] = 0; + bcf_update_alleles(args->hdr,line,(const char**)line->d.allele,line->n_allele); + } + return ERR_OK; + } + if ( bcf_get_variant_types(line)==VCF_BND ) return ERR_SYMBOLIC; // breakend, not an error + + // make a copy of each allele for trimming + hts_expand0(kstring_t,line->n_allele,args->ntmp_als,args->tmp_als); + kstring_t *als = args->tmp_als; + for (i=0; in_allele; i++) + { + if ( line->d.allele[i][0]=='<' ) return ERR_SYMBOLIC; // symbolic allele + if ( line->d.allele[i][0]=='*' ) return ERR_SPANNING_DELETION; // spanning deletion + if ( has_non_acgtn(line->d.allele[i],0) ) + { + if ( args->check_ref==CHECK_REF_EXIT ) + error("Non-ACGTN alternate allele at %s:%d .. REF_SEQ:'%s' vs VCF:'%s'\n", bcf_seqname(args->hdr,line),line->pos+1,ref,line->d.allele[i]); + if ( args->check_ref & CHECK_REF_WARN ) + fprintf(stderr,"NON_ACGTN_ALT\t%s\t%d\t%s\n", bcf_seqname(args->hdr,line),line->pos+1,line->d.allele[i]); + return ERR_REF_MISMATCH; + } + + als[i].l = 0; + kputs(line->d.allele[i], &als[i]); + seq_to_upper(als[i].s,0); + + if ( i>0 && als[i].l==als[0].l && !strcmp(als[0].s,als[i].s) ) return ERR_DUP_ALLELE; + } + + // trim from right + int ori_pos = line->pos; + while (1) + { + // is the rightmost base identical in all alleles? + int min_len = als[0].l; + for (i=1; in_allele; i++) + { + if ( als[0].s[ als[0].l-1 ]!=als[i].s[ als[i].l-1 ] ) break; + if ( als[i].l < min_len ) min_len = als[i].l; + } + if ( i!=line->n_allele ) break; // there are differences, cannot be trimmed + if ( min_len<=1 && line->pos==0 ) break; + + int pad_from_left = 0; + for (i=0; in_allele; i++) // trim all alleles + { + als[i].l--; + if ( !als[i].l ) pad_from_left = 1; + } + if ( pad_from_left ) + { + int npad = line->pos >= args->aln_win ? args->aln_win : line->pos; + free(ref); + ref = faidx_fetch_seq(args->fai, (char*)args->hdr->id[BCF_DT_CTG][line->rid].key, line->pos-npad, line->pos-1, &nref); + if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", args->hdr->id[BCF_DT_CTG][line->rid].key, line->pos-npad+1); + replace_iupac_codes(ref,nref); + for (i=0; in_allele; i++) + { + ks_resize(&als[i], als[i].l + npad); + if ( als[i].l ) memmove(als[i].s+npad,als[i].s,als[i].l); + memcpy(als[i].s,ref,npad); + als[i].l += npad; + } + line->pos -= npad; + } + } + free(ref); + + // trim from left + int ntrim_left = 0; + while (1) + { + // is the first base identical in all alleles? + int min_len = als[0].l - ntrim_left; + for (i=1; in_allele; i++) + { + if ( als[0].s[ntrim_left]!=als[i].s[ntrim_left] ) break; + if ( min_len > als[i].l - ntrim_left ) min_len = als[i].l - ntrim_left; + } + if ( i!=line->n_allele || min_len<=1 ) break; // there are differences, cannot be trimmed + ntrim_left++; + } + if ( ntrim_left ) + { + for (i=0; in_allele; i++) + { + memmove(als[i].s,als[i].s+ntrim_left,als[i].l-ntrim_left); + als[i].l -= ntrim_left; + } + line->pos += ntrim_left; + } + + // Have the alleles changed? + als[0].s[ als[0].l ] = 0; // in order for strcmp to work + if ( ori_pos==line->pos && !strcmp(line->d.allele[0],als[0].s) ) return ERR_OK; + + // Create new block of alleles and update + args->tmp_als_str.l = 0; + for (i=0; in_allele; i++) + { + if (i>0) kputc(',',&args->tmp_als_str); + kputsn(als[i].s,als[i].l,&args->tmp_als_str); + } + args->tmp_als_str.s[ args->tmp_als_str.l ] = 0; + bcf_update_alleles_str(args->hdr,line,args->tmp_als_str.s); + args->nchanged++; + + return ERR_OK; +} + +static void split_info_numeric(args_t *args, bcf1_t *src, bcf_info_t *info, int ialt, bcf1_t *dst) +{ + #define BRANCH_NUMERIC(type,type_t) \ + { \ + const char *tag = bcf_hdr_int2id(args->hdr,BCF_DT_ID,info->key); \ + int ntmp = args->ntmp_arr1 / sizeof(type_t); \ + int ret = bcf_get_info_##type(args->hdr,src,tag,&args->tmp_arr1,&ntmp); \ + args->ntmp_arr1 = ntmp * sizeof(type_t); \ + assert( ret>0 ); \ + type_t *vals = (type_t*) args->tmp_arr1; \ + int len = bcf_hdr_id2length(args->hdr,BCF_HL_INFO,info->key); \ + if ( len==BCF_VL_A ) \ + { \ + if ( ret!=src->n_allele-1 ) \ + error("Error: wrong number of fields in INFO/%s at %s:%d, expected %d, found %d\n", \ + tag,bcf_seqname(args->hdr,src),src->pos+1,src->n_allele-1,ret); \ + bcf_update_info_##type(args->hdr,dst,tag,vals+ialt,1); \ + } \ + else if ( len==BCF_VL_R ) \ + { \ + if ( ret!=src->n_allele ) \ + error("Error: wrong number of fields in INFO/%s at %s:%d, expected %d, found %d\n", \ + tag,bcf_seqname(args->hdr,src),src->pos+1,src->n_allele,ret); \ + if ( ialt!=0 ) vals[1] = vals[ialt+1]; \ + bcf_update_info_##type(args->hdr,dst,tag,vals,2); \ + } \ + else if ( len==BCF_VL_G ) \ + { \ + if ( ret!=src->n_allele*(src->n_allele+1)/2 ) \ + error("Error: wrong number of fields in INFO/%s at %s:%d, expected %d, found %d\n", \ + tag,bcf_seqname(args->hdr,src),src->pos+1,src->n_allele*(src->n_allele+1)/2,ret); \ + if ( ialt!=0 ) \ + { \ + vals[1] = vals[bcf_alleles2gt(0,ialt+1)]; \ + vals[2] = vals[bcf_alleles2gt(ialt+1,ialt+1)]; \ + } \ + bcf_update_info_##type(args->hdr,dst,tag,vals,3); \ + } \ + else \ + bcf_update_info_##type(args->hdr,dst,tag,vals,ret); \ + } + switch (bcf_hdr_id2type(args->hdr,BCF_HL_INFO,info->key)) + { + case BCF_HT_INT: BRANCH_NUMERIC(int32, int32_t); break; + case BCF_HT_REAL: BRANCH_NUMERIC(float, float); break; + } + #undef BRANCH_NUMERIC +} +// Find n-th field in a comma-separated list and move it to dst. +// The memory areas may overlap. +#define STR_MOVE_NTH(dst,src,end,nth,len) \ +{ \ + char *ss = src, *se = src; \ + int j = 0; \ + while ( *se && se<(end) ) \ + { \ + if ( *se==',' ) \ + { \ + if ( j==nth ) break; \ + j++; \ + ss = se+1; \ + } \ + se++; \ + } \ + if ( j==nth ) \ + { \ + int n = se - ss; \ + memmove((dst),ss,n); \ + src = se; \ + len += n; \ + } \ + else len = -1; \ +} +static void split_info_string(args_t *args, bcf1_t *src, bcf_info_t *info, int ialt, bcf1_t *dst) +{ + const char *tag = bcf_hdr_int2id(args->hdr,BCF_DT_ID,info->key); + int ret = bcf_get_info_string(args->hdr,src,tag,&args->tmp_arr1,&args->ntmp_arr1); + assert( ret>0 ); + + kstring_t str; + str.m = args->ntmp_arr1; + str.l = ret; + str.s = (char*) args->tmp_arr1; + + int len = bcf_hdr_id2length(args->hdr,BCF_HL_INFO,info->key); + if ( len==BCF_VL_A ) + { + char *tmp = str.s; + int len = 0; + STR_MOVE_NTH(str.s,tmp,str.s+str.l,ialt,len); + if ( len<0 ) return; // wrong number of fields: skip + str.s[len] = 0; + bcf_update_info_string(args->hdr,dst,tag,str.s); + } + else if ( len==BCF_VL_R ) + { + char *tmp = str.s; + int len = 0; + STR_MOVE_NTH(str.s,tmp,str.s+str.l,0,len); + str.s[len]=','; tmp++; len++; + STR_MOVE_NTH(&str.s[len],tmp,str.s+str.l,ialt,len); + if ( len<0 ) return; // wrong number of fields: skip + str.s[len] = 0; + bcf_update_info_string(args->hdr,dst,tag,str.s); + } + else if ( len==BCF_VL_G ) + { + int i0a = bcf_alleles2gt(0,ialt+1), iaa = bcf_alleles2gt(ialt+1,ialt+1); + char *tmp = str.s; + int len = 0; + STR_MOVE_NTH(str.s,tmp,str.s+str.l,0,len); + str.s[len]=','; tmp++; len++; + STR_MOVE_NTH(&str.s[len],tmp,str.s+str.l,i0a-1,len); + if ( len<0 ) return; // wrong number of fields: skip + str.s[len]=','; tmp++; len++; + STR_MOVE_NTH(&str.s[len],tmp,str.s+str.l,iaa-i0a-1,len); + if ( len<0 ) return; // wrong number of fields: skip + str.s[len] = 0; + bcf_update_info_string(args->hdr,dst,tag,str.s); + } + else + bcf_update_info_string(args->hdr,dst,tag,str.s); +} +static void split_info_flag(args_t *args, bcf1_t *src, bcf_info_t *info, int ialt, bcf1_t *dst) +{ + const char *tag = bcf_hdr_int2id(args->hdr,BCF_DT_ID,info->key); + int ret = bcf_get_info_flag(args->hdr,src,tag,&args->tmp_arr1,&args->ntmp_arr1); + bcf_update_info_flag(args->hdr,dst,tag,NULL,ret); +} + +static void split_format_genotype(args_t *args, bcf1_t *src, bcf_fmt_t *fmt, int ialt, bcf1_t *dst) +{ + int ntmp = args->ntmp_arr1 / 4; + int ngts = bcf_get_genotypes(args->hdr,src,&args->tmp_arr1,&ntmp); + args->ntmp_arr1 = ntmp * 4; + assert( ngts >0 ); + + int32_t *gt = (int32_t*) args->tmp_arr1; + int i, j, nsmpl = bcf_hdr_nsamples(args->hdr); + ngts /= nsmpl; + for (i=0; ihdr,dst,args->tmp_arr1,ngts*nsmpl); +} +static void split_format_numeric(args_t *args, bcf1_t *src, bcf_fmt_t *fmt, int ialt, bcf1_t *dst) +{ + #define BRANCH_NUMERIC(type,type_t,is_vector_end,set_vector_end) \ + { \ + const char *tag = bcf_hdr_int2id(args->hdr,BCF_DT_ID,fmt->id); \ + int ntmp = args->ntmp_arr1 / sizeof(type_t); \ + int nvals = bcf_get_format_##type(args->hdr,src,tag,&args->tmp_arr1,&ntmp); \ + args->ntmp_arr1 = ntmp * sizeof(type_t); \ + assert( nvals>0 ); \ + type_t *vals = (type_t *) args->tmp_arr1; \ + int len = bcf_hdr_id2length(args->hdr,BCF_HL_FMT,fmt->id); \ + int i, nsmpl = bcf_hdr_nsamples(args->hdr); \ + if ( nvals==nsmpl ) /* all values are missing */ \ + { \ + bcf_update_format_##type(args->hdr,dst,tag,vals,nsmpl); \ + return; \ + } \ + if ( len==BCF_VL_A ) \ + { \ + if ( nvals!=(src->n_allele-1)*nsmpl ) \ + error("Error: wrong number of fields in FMT/%s at %s:%d, expected %d, found %d\n", \ + tag,bcf_seqname(args->hdr,src),src->pos+1,(src->n_allele-1)*nsmpl,nvals); \ + nvals /= nsmpl; \ + type_t *src_vals = vals, *dst_vals = vals; \ + for (i=0; ihdr,dst,tag,vals,nsmpl); \ + } \ + else if ( len==BCF_VL_R ) \ + { \ + if ( nvals!=src->n_allele*nsmpl ) \ + error("Error: wrong number of fields in FMT/%s at %s:%d, expected %d, found %d\n", \ + tag,bcf_seqname(args->hdr,src),src->pos+1,src->n_allele*nsmpl,nvals); \ + nvals /= nsmpl; \ + type_t *src_vals = vals, *dst_vals = vals; \ + for (i=0; ihdr,dst,tag,vals,nsmpl*2); \ + } \ + else if ( len==BCF_VL_G ) \ + { \ + if ( nvals!=src->n_allele*(src->n_allele+1)/2*nsmpl && nvals!=src->n_allele*nsmpl ) \ + error("Error at %s:%d, the tag %s has wrong number of fields\n", bcf_seqname(args->hdr,src),src->pos+1,bcf_hdr_int2id(args->hdr,BCF_DT_ID,fmt->id)); \ + nvals /= nsmpl; \ + int all_haploid = nvals==src->n_allele ? 1 : 0; \ + type_t *src_vals = vals, *dst_vals = vals; \ + for (i=0; ihdr,dst,tag,vals,all_haploid ? nsmpl*2 : nsmpl*3); \ + } \ + else \ + bcf_update_format_##type(args->hdr,dst,tag,vals,nvals); \ + } + switch (bcf_hdr_id2type(args->hdr,BCF_HL_FMT,fmt->id)) + { + case BCF_HT_INT: BRANCH_NUMERIC(int32, int32_t, src_vals[j]==bcf_int32_vector_end, dst_vals[2]=bcf_int32_vector_end); break; + case BCF_HT_REAL: BRANCH_NUMERIC(float, float, bcf_float_is_vector_end(src_vals[j]), bcf_float_set_vector_end(dst_vals[2])); break; + } + #undef BRANCH_NUMERIC +} +static void squeeze_format_char(char *str, int src_blen, int dst_blen, int n) +{ + int i, isrc = 0, idst = 0; + for (i=0; ihdr,BCF_DT_ID,fmt->id); + int ret = bcf_get_format_char(args->hdr,src,tag,&args->tmp_arr1,&args->ntmp_arr1); + assert( ret>0 ); + + kstring_t str; + str.m = args->ntmp_arr1; + str.l = ret; + str.s = (char*) args->tmp_arr1; + + int nsmpl = bcf_hdr_nsamples(args->hdr); + int len = bcf_hdr_id2length(args->hdr,BCF_HL_FMT,fmt->id); + if ( len==BCF_VL_A ) + { + int i, blen = ret/nsmpl, maxlen = 0; + char *ptr = str.s; + for (i=0; ihdr,dst,tag,str.s,nsmpl*maxlen); + } + else if ( len==BCF_VL_R ) + { + int i, blen = ret/nsmpl, maxlen = 0; + char *ptr = str.s; + for (i=0; ihdr,dst,tag,str.s,nsmpl*maxlen); + } + else if ( len==BCF_VL_G ) + { + int i, blen = ret/nsmpl, maxlen = 0, i0a = bcf_alleles2gt(0,ialt+1), iaa = bcf_alleles2gt(ialt+1,ialt+1); + char *ptr = str.s; + for (i=0; in_allele*(src->n_allele+1)/2 && nfields!=src->n_allele ) + error("Error: wrong number of fields in FMT/%s at %s:%d, expected %d or %d, found %d\n", + tag,bcf_seqname(args->hdr,src),src->pos+1,src->n_allele*(src->n_allele+1)/2,src->n_allele,nfields); + + int len = 0; + if ( nfields==src->n_allele ) // haploid + { + char *tmp = ptr; + STR_MOVE_NTH(&ptr[len],tmp,ptr+blen,0,len); + ptr[len]=','; tmp++; len++; + STR_MOVE_NTH(&ptr[len],tmp,ptr+blen,ialt,len); + if ( len<0 ) return; // wrong number of fields: skip + } + else // diploid + { + char *tmp = ptr; + STR_MOVE_NTH(&ptr[len],tmp,ptr+blen,0,len); + ptr[len]=','; tmp++; len++; + STR_MOVE_NTH(&ptr[len],tmp,ptr+blen,i0a-1,len); + if ( len<0 ) return; // wrong number of fields: skip + ptr[len]=','; tmp++; len++; + STR_MOVE_NTH(&ptr[len],tmp,ptr+blen,iaa-i0a-1,len); + if ( len<0 ) return; // wrong number of fields: skip + } + if ( maxlen < len ) maxlen = len; + ptr += blen; + } + if ( maxlenhdr,dst,tag,str.s,nsmpl*maxlen); + } + else + bcf_update_format_char(args->hdr,dst,tag,str.s,str.l); +} + + +static void split_multiallelic_to_biallelics(args_t *args, bcf1_t *line) +{ + int i; + + bcf_unpack(line, BCF_UN_ALL); + + // Init the target biallelic lines + args->ntmp_lines = line->n_allele-1; + if ( args->mtmp_lines < args->ntmp_lines ) + { + args->tmp_lines = (bcf1_t **)realloc(args->tmp_lines,sizeof(bcf1_t*)*args->ntmp_lines); + for (i=args->mtmp_lines; intmp_lines; i++) + args->tmp_lines[i] = NULL; + args->mtmp_lines = args->ntmp_lines; + } + kstring_t tmp = {0,0,0}; + kputs(line->d.allele[0], &tmp); + kputc(',', &tmp); + int rlen = tmp.l; + int gt_id = bcf_hdr_id2int(args->hdr,BCF_DT_ID,"GT"); + for (i=0; intmp_lines; i++) // for each ALT allele + { + if ( !args->tmp_lines[i] ) args->tmp_lines[i] = bcf_init1(); + bcf1_t *dst = args->tmp_lines[i]; + bcf_clear(dst); + + dst->rid = line->rid; + dst->pos = line->pos; + dst->qual = line->qual; + + // Not quite sure how to handle IDs, they can be assigned to a specific + // ALT. For now we leave the ID unchanged for all. + bcf_update_id(args->hdr, dst, line->d.id ? line->d.id : "."); + + tmp.l = rlen; + kputs(line->d.allele[i+1],&tmp); + bcf_update_alleles_str(args->hdr,dst,tmp.s); + + if ( line->d.n_flt ) bcf_update_filter(args->hdr, dst, line->d.flt, line->d.n_flt); + + int j; + for (j=0; jn_info; j++) + { + bcf_info_t *info = &line->d.info[j]; + int type = bcf_hdr_id2type(args->hdr,BCF_HL_INFO,info->key); + if ( type==BCF_HT_INT || type==BCF_HT_REAL ) split_info_numeric(args, line, info, i, dst); + else if ( type==BCF_HT_FLAG ) split_info_flag(args, line, info, i, dst); + else split_info_string(args, line, info, i, dst); + } + + dst->n_sample = line->n_sample; + for (j=0; jn_fmt; j++) + { + bcf_fmt_t *fmt = &line->d.fmt[j]; + int type = bcf_hdr_id2type(args->hdr,BCF_HL_FMT,fmt->id); + if ( fmt->id==gt_id ) split_format_genotype(args, line, fmt, i, dst); + else if ( type==BCF_HT_INT || type==BCF_HT_REAL ) split_format_numeric(args, line, fmt, i, dst); + else split_format_string(args, line, fmt, i, dst); + } + } + free(tmp.s); +} + +// Enlarge FORMAT array containing nsmpl samples each with nals_ori values +// to accommodate nvals values for each sample, filling the gaps with missing +// values. Works also for INFO arrays, with nsmpl set to 1. +#define ENLARGE_ARRAY(type_t,set_missing,arr,narr_bytes,nsmpl,nvals_ori,nvals) \ +{ \ + int nbytes_new = (nsmpl)*(nvals)*sizeof(type_t); \ + hts_expand(uint8_t,nbytes_new,narr_bytes,arr); \ + int ismpl, k; \ + for (ismpl=nsmpl-1; ismpl>=0; ismpl--) \ + { \ + type_t *dst_ptr = ((type_t*)arr) + ismpl*(nvals); \ + type_t *src_ptr = ((type_t*)arr) + ismpl*nvals_ori; \ + memmove(dst_ptr,src_ptr,sizeof(type_t)*nvals_ori); \ + for (k=nvals_ori; khdr,BCF_DT_ID,info->key); \ + int ntmp = args->ntmp_arr1 / sizeof(type_t); \ + int nvals_ori = bcf_get_info_##type(args->hdr,lines[0],tag,&args->tmp_arr1,&ntmp); \ + args->ntmp_arr1 = ntmp * sizeof(type_t); \ + assert( nvals_ori>0 ); \ + type_t *vals = (type_t*) args->tmp_arr1, *vals2; \ + int i,k,len = bcf_hdr_id2length(args->hdr,BCF_HL_INFO,info->key); \ + if ( len==BCF_VL_A ) \ + { \ + if (nvals_ori!=lines[0]->n_allele - 1) \ + error("vcfnorm: number of fields in first record at position %s:%d for INFO tag %s not as expected [found: %d vs expected:%d]\n", bcf_seqname(args->hdr,lines[0]),lines[0]->pos+1, tag, nvals_ori, lines[0]->n_allele-1); \ + int nvals = dst->n_allele - 1; \ + ENLARGE_ARRAY(type_t,set_missing,args->tmp_arr1,args->ntmp_arr1,1,nvals_ori,nvals); \ + vals = (type_t*) args->tmp_arr1; \ + for (i=1; intmp_arr2 / sizeof(type_t); \ + int nvals2 = bcf_get_info_##type(args->hdr,lines[i],tag,&args->tmp_arr2,&ntmp2); \ + if (nvals2<0) continue; /* info tag does not exist in this record, skip */ \ + args->ntmp_arr2 = ntmp2 * sizeof(type_t); \ + if (nvals2!=lines[i]->n_allele-1) \ + error("vcfnorm: could not merge INFO tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \ + vals2 = (type_t*) args->tmp_arr2; \ + for (k=0; kmaps[i].map[k+1] - 1 ] = vals2[k]; \ + } \ + } \ + bcf_update_info_##type(args->hdr,dst,tag,args->tmp_arr1,nvals); \ + } \ + else if ( len==BCF_VL_R ) \ + { \ + if (nvals_ori!=lines[0]->n_allele) \ + error("vcfnorm: number of fields in first record at position %s:%d for INFO tag %s not as expected [found: %d vs expected:%d]\n", bcf_seqname(args->hdr,lines[0]),lines[0]->pos+1, tag, nvals_ori, lines[0]->n_allele); \ + int nvals = dst->n_allele; \ + ENLARGE_ARRAY(type_t,set_missing,args->tmp_arr1,args->ntmp_arr1,1,nvals_ori,nvals); \ + vals = (type_t*) args->tmp_arr1; \ + for (i=1; intmp_arr2 / sizeof(type_t); \ + int nvals2 = bcf_get_info_##type(args->hdr,lines[i],tag,&args->tmp_arr2,&ntmp2); \ + if (nvals2<0) continue; /* info tag does not exist in this record, skip */ \ + args->ntmp_arr2 = ntmp2 * sizeof(type_t); \ + if (nvals2!=lines[i]->n_allele) \ + error("vcfnorm: could not merge INFO tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \ + vals2 = (type_t*) args->tmp_arr2; \ + for (k=0; kmaps[i].map[k] ] = vals2[k]; \ + } \ + } \ + bcf_update_info_##type(args->hdr,dst,tag,args->tmp_arr1,nvals); \ + } \ + else if ( len==BCF_VL_G ) \ + { \ + /* expecting diploid gt in INFO */ \ + if (nvals_ori!=lines[0]->n_allele*(lines[0]->n_allele+1)/2) { \ + fprintf(stderr, "todo: merge Number=G INFO fields for haploid sites\n"); \ + error("vcfnorm: number of fields in first record at position %s:%d for INFO tag %s not as expected [found: %d vs expected:%d]\n", bcf_seqname(args->hdr,lines[0]),lines[0]->pos+1, tag, nvals_ori, lines[0]->n_allele*(lines[0]->n_allele+1)/2); \ + } \ + int nvals = dst->n_allele*(dst->n_allele+1)/2; \ + ENLARGE_ARRAY(type_t,set_missing,args->tmp_arr1,args->ntmp_arr1,1,nvals_ori,nvals); \ + vals = (type_t*) args->tmp_arr1; \ + for (i=1; intmp_arr2 / sizeof(type_t); \ + int nvals2 = bcf_get_info_##type(args->hdr,lines[i],tag,&args->tmp_arr2,&ntmp2); \ + if (nvals2<0) continue; /* info tag does not exist in this record, skip */ \ + args->ntmp_arr2 = ntmp2 * sizeof(type_t); \ + if (nvals2!=lines[i]->n_allele*(lines[i]->n_allele+1)/2) \ + error("vcfnorm: could not merge INFO tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \ + vals2 = (type_t*) args->tmp_arr2; \ + int ia,ib; \ + k = 0; \ + for (ia=0; ian_allele; ia++) \ + { \ + for (ib=0; ib<=ia; ib++) \ + { \ + if ( is_vector_end ) break; \ + int l = bcf_alleles2gt(args->maps[i].map[ia],args->maps[i].map[ib]); \ + vals[l] = vals2[k]; \ + k++; \ + } \ + } \ + } \ + bcf_update_info_##type(args->hdr,dst,tag,args->tmp_arr1,nvals); \ + } \ + else \ + bcf_update_info_##type(args->hdr,dst,tag,vals,nvals_ori); \ + } + switch (bcf_hdr_id2type(args->hdr,BCF_HL_INFO,info->key)) + { + case BCF_HT_INT: BRANCH_NUMERIC(int32, int32_t, dst_ptr[k]=bcf_int32_missing, vals2[k]==bcf_int32_vector_end); break; + case BCF_HT_REAL: BRANCH_NUMERIC(float, float, bcf_float_set_missing(dst_ptr[k]), bcf_float_is_vector_end(vals2[k])); break; + } + #undef BRANCH_NUMERIC +} +static void merge_info_flag(args_t *args, bcf1_t **lines, int nlines, bcf_info_t *info, bcf1_t *dst) +{ + const char *tag = bcf_hdr_int2id(args->hdr,BCF_DT_ID,info->key); + int ret = bcf_get_info_flag(args->hdr,lines[0],tag,&args->tmp_arr1,&args->ntmp_arr1); + bcf_update_info_flag(args->hdr,dst,tag,NULL,ret); +} +int copy_string_field(char *src, int isrc, int src_len, kstring_t *dst, int idst); // see vcfmerge.c +static void merge_info_string(args_t *args, bcf1_t **lines, int nlines, bcf_info_t *info, bcf1_t *dst) +{ + const char *tag = bcf_hdr_int2id(args->hdr,BCF_DT_ID,info->key); + + kstring_t str; + str.m = args->ntmp_arr1; + str.l = 0; + str.s = (char*) args->tmp_arr1; + + int i, j, len = bcf_hdr_id2length(args->hdr,BCF_HL_INFO,info->key); + if ( len==BCF_VL_A || len==BCF_VL_R ) + { + int jfrom = len==BCF_VL_A ? 1 : 0; + kputc('.',&str); + for (i=jfrom+1; in_allele; i++) kputs(",.",&str); + for (i=0; ihdr,lines[i],tag); + if (!src) continue; + for (j=jfrom; jn_allele; j++) + copy_string_field((char*)src->vptr, j-jfrom, src->len, &str, args->maps[i].map[j]-jfrom); + } + str.s[str.l] = 0; + args->tmp_arr1 = (uint8_t*) str.s; + args->ntmp_arr1 = str.m; + bcf_update_info_string(args->hdr,dst,tag,str.s); + } + else if ( len==BCF_VL_G ) + { + int ngts = dst->n_allele*(dst->n_allele+1)/2; + kputc('.',&str); + for (i=1; ihdr,lines[i],tag); + if (!src) continue; + int iori, jori, kori = 0; + for (iori=0; iorin_allele; iori++) + { + int inew = args->maps[i].map[iori]; + for (jori=0; jori<=iori; jori++) + { + int jnew = args->maps[i].map[jori]; + int knew = bcf_alleles2gt(inew,jnew); + copy_string_field((char*)src->vptr,kori,src->len,&str,knew); + kori++; + } + } + } + str.s[str.l] = 0; + args->tmp_arr1 = (uint8_t*) str.s; + args->ntmp_arr1 = str.m; + bcf_update_info_string(args->hdr,dst,tag,str.s); + } + else + { + bcf_get_info_string(args->hdr,lines[0],tag,&args->tmp_arr1,&args->ntmp_arr1); + bcf_update_info_string(args->hdr,dst,tag,args->tmp_arr1); + } +} +static void merge_format_genotype(args_t *args, bcf1_t **lines, int nlines, bcf_fmt_t *fmt, bcf1_t *dst) +{ + int ntmp = args->ntmp_arr1 / 4; + int ngts = bcf_get_genotypes(args->hdr,lines[0],&args->tmp_arr1,&ntmp); + args->ntmp_arr1 = ntmp * 4; + assert( ngts >0 ); + + int nsmpl = bcf_hdr_nsamples(args->hdr); + ngts /= nsmpl; + + int i, j, k; + for (i=1; intmp_arr2 / 4; + int ngts2 = bcf_get_genotypes(args->hdr,lines[i],&args->tmp_arr2,&ntmp2); + args->ntmp_arr2 = ntmp2 * 4; + ngts2 /= nsmpl; + if ( ngts!=ngts2 ) error("Error at %s:%d: cannot combine diploid with haploid genotype\n", bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); + + int32_t *gt = (int32_t*) args->tmp_arr1; + int32_t *gt2 = (int32_t*) args->tmp_arr2; + for (j=0; j=args->maps[i].nals ) error("Error at %s:%d: incorrect allele index %d\n",bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1,ial); + gt[k] = bcf_gt_unphased( args->maps[i].map[ial] ) | bcf_gt_is_phased(gt[k]); + } + } + gt += ngts; + gt2 += ngts; + } + } + bcf_update_genotypes(args->hdr,dst,args->tmp_arr1,ngts*nsmpl); +} +static int diploid_to_haploid(int size, int nsmpl, int nals, uint8_t *vals) +{ + int i, dsrc = size*nals*(nals+1)/2, ddst = size*nals; + uint8_t *src_ptr = vals + dsrc, *dst_ptr = vals + ddst; + for (i=1; ihdr,BCF_DT_ID,fmt->id); \ + int ntmp = args->ntmp_arr1 / sizeof(type_t); \ + int nvals_ori = bcf_get_format_##type(args->hdr,lines[0],tag,&args->tmp_arr1,&ntmp); \ + args->ntmp_arr1 = ntmp * sizeof(type_t); \ + assert( nvals_ori>0 ); \ + type_t *vals2, *vals = (type_t *) args->tmp_arr1; \ + int len = bcf_hdr_id2length(args->hdr,BCF_HL_FMT,fmt->id); \ + int i, j, k, nsmpl = bcf_hdr_nsamples(args->hdr); \ + nvals_ori /= nsmpl; \ + if ( len==BCF_VL_A ) \ + { \ + int nvals = dst->n_allele - 1; \ + ENLARGE_ARRAY(type_t,set_missing,args->tmp_arr1,args->ntmp_arr1,nsmpl,nvals_ori,nvals); \ + for (i=1; intmp_arr2 / sizeof(type_t); \ + int nvals2 = bcf_get_format_##type(args->hdr,lines[i],tag,&args->tmp_arr2,&ntmp2); \ + if (nvals2<0) continue; /* format tag does not exist in this record, skip */ \ + args->ntmp_arr2 = ntmp2 * sizeof(type_t); \ + nvals2 /= nsmpl; \ + if (nvals2!=lines[i]->n_allele-1) \ + error("vcfnorm: could not merge FORMAT tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \ + vals = (type_t*) args->tmp_arr1; \ + vals2 = (type_t*) args->tmp_arr2; \ + for (j=0; jmaps[i].map[k+1] - 1 ] = vals2[k]; \ + } \ + vals += nvals; \ + vals2 += nvals2; \ + } \ + } \ + bcf_update_format_##type(args->hdr,dst,tag,args->tmp_arr1,nvals*nsmpl); \ + } \ + else if ( len==BCF_VL_R ) \ + { \ + int nvals = dst->n_allele; \ + ENLARGE_ARRAY(type_t,set_missing,args->tmp_arr1,args->ntmp_arr1,nsmpl,nvals_ori,nvals); \ + for (i=1; intmp_arr2 / sizeof(type_t); \ + int nvals2 = bcf_get_format_##type(args->hdr,lines[i],tag,&args->tmp_arr2,&ntmp2); \ + if (nvals2<0) continue; /* format tag does not exist in this record, skip */ \ + args->ntmp_arr2 = ntmp2 * sizeof(type_t); \ + nvals2 /= nsmpl; \ + if (nvals2!=lines[i]->n_allele) \ + error("vcfnorm: could not merge FORMAT tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \ + vals = (type_t*) args->tmp_arr1; \ + vals2 = (type_t*) args->tmp_arr2; \ + for (j=0; jmaps[i].map[k] ] = vals2[k]; \ + } \ + vals += nvals; \ + vals2 += nvals2; \ + } \ + } \ + bcf_update_format_##type(args->hdr,dst,tag,args->tmp_arr1,nvals*nsmpl); \ + } \ + else if ( len==BCF_VL_G ) \ + { \ + /* which samples are diploid */ \ + memset(args->diploid,0,nsmpl); \ + int all_haploid = 1; \ + if ( nvals_ori > lines[0]->n_allele ) /* line possibly diploid */ \ + { \ + vals2 = (type_t*) args->tmp_arr1; \ + int ndiploid = lines[0]->n_allele*(lines[0]->n_allele+1)/2; \ + for (i=0; idiploid[i] ) \ + { \ + for (k=0; kdiploid[i] = 1; all_haploid = 0; }\ + } \ + vals2 += nvals_ori; \ + } \ + } \ + int nvals = dst->n_allele*(dst->n_allele+1)/2; \ + ENLARGE_ARRAY(type_t,set_missing,args->tmp_arr1,args->ntmp_arr1,nsmpl,nvals_ori,nvals); \ + for (i=1; intmp_arr2 / sizeof(type_t); \ + int nvals2 = bcf_get_format_##type(args->hdr,lines[i],tag,&args->tmp_arr2,&ntmp2); \ + if (nvals2<0) continue; /* format tag does not exist in this record, skip */ \ + args->ntmp_arr2 = ntmp2 * sizeof(type_t); \ + nvals2 /= nsmpl; \ + int ndiploid = lines[i]->n_allele*(lines[i]->n_allele+1)/2; \ + int line_diploid = nvals2==ndiploid ? 1 : 0; \ + if (!(nvals2==1 || nvals2==lines[i]->n_allele || nvals2==lines[i]->n_allele*(lines[i]->n_allele+1)/2)) \ + error("vcfnorm: could not merge FORMAT tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \ + vals = (type_t*) args->tmp_arr1; \ + vals2 = (type_t*) args->tmp_arr2; \ + for (j=0; jdiploid[j] ) { args->diploid[j] = 1; all_haploid = 0; } \ + if ( !smpl_diploid ) \ + { \ + for (k=0; kn_allele; k++) vals[args->maps[i].map[k]] = vals2[k]; \ + } \ + else \ + { \ + k = 0; \ + int ia,ib; \ + for (ia=0; ian_allele; ia++) \ + { \ + for (ib=0; ib<=ia; ib++) \ + { \ + int l = bcf_alleles2gt(args->maps[i].map[ia],args->maps[i].map[ib]); \ + vals[l] = vals2[k]; \ + k++; \ + } \ + } \ + } \ + vals += nvals; \ + vals2 += nvals2; \ + } \ + } \ + if ( all_haploid ) \ + nvals = diploid_to_haploid(sizeof(type_t),nsmpl,dst->n_allele,args->tmp_arr1); \ + else \ + {\ + k = dst->n_allele;\ + vals2 = (type_t*) args->tmp_arr1;\ + for (i=0; idiploid[i] ) set_vector_end;\ + vals2 += nvals;\ + }\ + }\ + bcf_update_format_##type(args->hdr,dst,tag,args->tmp_arr1,nvals*nsmpl); \ + } \ + else \ + bcf_update_format_##type(args->hdr,dst,tag,args->tmp_arr1,nvals_ori*nsmpl); \ + } + switch (bcf_hdr_id2type(args->hdr,BCF_HL_FMT,fmt->id)) + { + case BCF_HT_INT: BRANCH_NUMERIC(int32, int32_t, dst_ptr[k]=bcf_int32_missing, vals2[k]==bcf_int32_vector_end, vals2[k]=bcf_int32_vector_end); break; + case BCF_HT_REAL: BRANCH_NUMERIC(float, float, bcf_float_set_missing(dst_ptr[k]), bcf_float_is_vector_end(vals2[k]), bcf_float_set_vector_end(vals2[k])); break; + } + #undef BRANCH_NUMERIC +} +static void merge_format_string(args_t *args, bcf1_t **lines, int nlines, bcf_fmt_t *fmt, bcf1_t *dst) +{ + const char *tag = bcf_hdr_int2id(args->hdr,BCF_DT_ID,fmt->id); + + int i, j, k, len = bcf_hdr_id2length(args->hdr,BCF_HL_FMT,fmt->id); + if ( len!=BCF_VL_A && len!=BCF_VL_R && len!=BCF_VL_G ) + { + int nret = bcf_get_format_char(args->hdr,lines[0],tag,&args->tmp_arr1,&args->ntmp_arr1); + bcf_update_format_char(args->hdr,dst,tag,args->tmp_arr1,nret); + return; + } + + int nsmpl = bcf_hdr_nsamples(args->hdr); + for (i=0; itmp_str[i].l = 0; + + if ( len==BCF_VL_A || len==BCF_VL_R ) + { + int jfrom = len==BCF_VL_A ? 1 : 0; + for (i=0; itmp_str[i]; + kputc('.',tmp); + for (k=jfrom+1; kn_allele; k++) kputs(",.",tmp); + } + for (i=0; ihdr,lines[i],tag,&args->tmp_arr1,&args->ntmp_arr1); + if (nret<0) continue; /* format tag does not exist in this record, skip */ \ + nret /= nsmpl; + for (k=0; ktmp_str[k]; + char *src = (char*)args->tmp_arr1 + k*nret; + for (j=jfrom; jn_allele; j++) + copy_string_field(src, j-jfrom, nret, tmp, args->maps[i].map[j]-jfrom); + } + } + } + else if ( len==BCF_VL_G ) + { + hts_expand(uint8_t,nsmpl,args->ntmp_arr2,args->tmp_arr2); + uint8_t *haploid = args->tmp_arr2; + int nret = bcf_get_format_char(args->hdr,lines[0],tag,&args->tmp_arr1,&args->ntmp_arr1); + nret /= nsmpl; + for (i=0; itmp_arr1 + i*nret, *se = ss+nret; + int nfields = 1; + while ( *ss && ssn_allele ) + { + haploid[i] = 1; + nfields = dst->n_allele; + } + else if ( nfields==lines[0]->n_allele*(lines[0]->n_allele+1)/2 ) + { + haploid[i] = 0; + nfields = dst->n_allele*(dst->n_allele+1)/2; + } + else error("The field %s at %s:%d neither diploid nor haploid?\n", tag,bcf_seqname(args->hdr,dst),dst->pos+1); + + kstring_t *tmp = &args->tmp_str[i]; + kputc('.',tmp); + for (j=1; jhdr,lines[i],tag,&args->tmp_arr1,&args->ntmp_arr1); + if (nret<0) continue; /* format tag does not exist in this record, skip */ \ + nret /= nsmpl; + } + for (k=0; ktmp_str[k]; + char *src = (char*)args->tmp_arr1 + k*nret; + if ( haploid[k] ) + { + for (j=0; jn_allele; j++) + copy_string_field(src,j,nret, tmp, args->maps[i].map[j]); + } + else + { + int iori, jori, kori = 0; + for (iori=0; iorin_allele; iori++) + { + int inew = args->maps[i].map[iori]; + for (jori=0; jori<=iori; jori++) + { + int jnew = args->maps[i].map[jori]; + int knew = bcf_alleles2gt(inew,jnew); + copy_string_field(src,kori,nret,tmp,knew); + kori++; + } + } + } + } + } + } + kstring_t str; + str.m = args->ntmp_arr2; + str.l = 0; + str.s = (char*) args->tmp_arr2; + + int max_len = 0; + for (i=0; itmp_str[i].l ) max_len = args->tmp_str[i].l; + for (i=0; itmp_str[i]; + kputsn(tmp->s,tmp->l,&str); + for (j=tmp->l; jntmp_arr2 = str.m; + args->tmp_arr2 = (uint8_t*)str.s; + bcf_update_format_char(args->hdr,dst,tag,str.s,str.l); +} + +char **merge_alleles(char **a, int na, int *map, char **b, int *nb, int *mb); // see vcfmerge.c +static void merge_biallelics_to_multiallelic(args_t *args, bcf1_t *dst, bcf1_t **lines, int nlines) +{ + int i; + for (i=0; irid = lines[0]->rid; + dst->pos = lines[0]->pos; + + // take max for QUAL + bcf_float_set_missing(dst->qual); + for (i=0; iqual)) continue; + if (bcf_float_is_missing(dst->qual) || dst->qualqual) + dst->qual = lines[i]->qual; + } + + bcf_update_id(args->hdr, dst, lines[0]->d.id); + + // Merge and set the alleles, create a mapping from source allele indexes to dst idxs + hts_expand0(map_t,nlines,args->mmaps,args->maps); // a mapping for each line + args->nals = args->maps[0].nals = lines[0]->n_allele; + hts_expand(int,args->maps[0].nals,args->maps[0].mals,args->maps[0].map); + hts_expand(char*,args->nals,args->mals,args->als); + for (i=0; imaps[0].nals; i++) + { + args->maps[0].map[i] = i; + args->als[i] = strdup(lines[0]->d.allele[i]); + } + for (i=1; id.id[0]!='.' || lines[i]->d.id[1]) bcf_add_id(args->hdr, dst, lines[i]->d.id); + args->maps[i].nals = lines[i]->n_allele; + hts_expand(int,args->maps[i].nals,args->maps[i].mals,args->maps[i].map); + args->als = merge_alleles(lines[i]->d.allele, lines[i]->n_allele, args->maps[i].map, args->als, &args->nals, &args->mals); + if ( !args->als ) error("Failed to merge alleles at %s:%d\n", bcf_seqname(args->hdr,dst),dst->pos+1); + } + bcf_update_alleles(args->hdr, dst, (const char**)args->als, args->nals); + for (i=0; inals; i++) + { + free(args->als[i]); + args->als[i] = NULL; + } + + if ( lines[0]->d.n_flt ) bcf_update_filter(args->hdr, dst, lines[0]->d.flt, lines[0]->d.n_flt); + for (i=1; id.n_flt; j++) { + // if strict_filter, set FILTER to PASS if any site PASS + // otherwise accumulate FILTERs + if (lines[i]->d.flt[j] == bcf_hdr_id2int(args->hdr, BCF_DT_ID, "PASS")) { + if (args->strict_filter) { + bcf_update_filter(args->hdr, dst, lines[i]->d.flt, lines[i]->d.n_flt); + break; + } + else + continue; + } + bcf_add_filter(args->hdr, dst, lines[i]->d.flt[j]); + } + } + + // merge info + for (i=0; in_info; i++) + { + bcf_info_t *info = &lines[0]->d.info[i]; + int type = bcf_hdr_id2type(args->hdr,BCF_HL_INFO,info->key); + if ( type==BCF_HT_INT || type==BCF_HT_REAL ) merge_info_numeric(args, lines, nlines, info, dst); + else if ( type==BCF_HT_FLAG ) merge_info_flag(args, lines, nlines, info, dst); + else merge_info_string(args, lines, nlines, info, dst); + } + + // merge format + int gt_id = bcf_hdr_id2int(args->hdr,BCF_DT_ID,"GT"); + dst->n_sample = lines[0]->n_sample; + for (i=0; in_fmt; i++) + { + bcf_fmt_t *fmt = &lines[0]->d.fmt[i]; + int type = bcf_hdr_id2type(args->hdr,BCF_HL_FMT,fmt->id); + if ( fmt->id==gt_id ) merge_format_genotype(args, lines, nlines, fmt, dst); + else if ( type==BCF_HT_INT || type==BCF_HT_REAL ) merge_format_numeric(args, lines, nlines, fmt, dst); + else merge_format_string(args, lines, nlines, fmt, dst); + } +} + +#define SWAP(type_t, a, b) { type_t t = a; a = b; b = t; } +static void mrows_schedule(args_t *args, bcf1_t **line) +{ + int i,m; + if ( args->mrows_collapse==COLLAPSE_ANY // merge all record types together + || bcf_get_variant_types(*line)&VCF_SNP // SNP, put into alines + || bcf_get_variant_types(*line)==VCF_REF ) // ref + { + args->nalines++; + m = args->malines; + hts_expand(bcf1_t*,args->nalines,args->malines,args->alines); + for (i=m; imalines; i++) args->alines[i] = bcf_init1(); + SWAP(bcf1_t*, args->alines[args->nalines-1], *line); + } + else + { + args->nblines++; + m = args->mblines; + hts_expand(bcf1_t*,args->nblines,args->mblines,args->blines); + for (i=m; imblines; i++) args->blines[i] = bcf_init1(); + SWAP(bcf1_t*, args->blines[args->nblines-1], *line); + } +} +static int mrows_ready_to_flush(args_t *args, bcf1_t *line) +{ + if ( args->nalines && (args->alines[0]->rid!=line->rid || args->alines[0]->pos!=line->pos) ) return 1; + if ( args->nblines && (args->blines[0]->rid!=line->rid || args->blines[0]->pos!=line->pos) ) return 1; + return 0; +} +static bcf1_t *mrows_flush(args_t *args) +{ + if ( args->nblines && args->nalines==1 && bcf_get_variant_types(args->alines[0])==VCF_REF ) + { + // By default, REF lines are merged with SNPs if SNPs and indels are to be kept separately. + // However, if there are indels only and a single REF line, merge it with indels. + args->nblines++; + int i,m = args->mblines; + hts_expand(bcf1_t*,args->nblines,args->mblines,args->blines); + for (i=m; imblines; i++) args->blines[i] = bcf_init1(); + SWAP(bcf1_t*, args->blines[args->nblines-1], args->alines[0]); + args->nalines--; + } + if ( args->nalines ) + { + if ( args->nalines==1 ) + { + args->nalines = 0; + return args->alines[0]; + } + bcf_clear(args->mrow_out); + merge_biallelics_to_multiallelic(args, args->mrow_out, args->alines, args->nalines); + args->nalines = 0; + return args->mrow_out; + } + else if ( args->nblines ) + { + if ( args->nblines==1 ) + { + args->nblines = 0; + return args->blines[0]; + } + bcf_clear(args->mrow_out); + merge_biallelics_to_multiallelic(args, args->mrow_out, args->blines, args->nblines); + args->nblines = 0; + return args->mrow_out; + } + return NULL; +} +static void flush_buffer(args_t *args, htsFile *file, int n) +{ + bcf1_t *line; + int i, k; + int prev_rid = -1, prev_pos = -1, prev_type = 0; + for (i=0; irbuf); + if ( args->mrows_op==MROWS_MERGE ) + { + if ( mrows_ready_to_flush(args, args->lines[k]) ) + { + while ( (line=mrows_flush(args)) ) bcf_write1(file, args->hdr, line); + } + int merge = 1; + if ( args->mrows_collapse!=COLLAPSE_BOTH && args->mrows_collapse!=COLLAPSE_ANY ) + { + if ( !(bcf_get_variant_types(args->lines[k]) & args->mrows_collapse) ) merge = 0; + } + if ( merge ) + { + mrows_schedule(args, &args->lines[k]); + continue; + } + } + else if ( args->rmdup ) + { + int line_type = bcf_get_variant_types(args->lines[k]); + if ( prev_rid>=0 && prev_rid==args->lines[k]->rid && prev_pos==args->lines[k]->pos ) + { + if ( (args->rmdup>>1)&COLLAPSE_ANY ) continue; + if ( (args->rmdup>>1)&COLLAPSE_SNPS && line_type&(VCF_SNP|VCF_MNP) && prev_type&(VCF_SNP|VCF_MNP) ) continue; + if ( (args->rmdup>>1)&COLLAPSE_INDELS && line_type&(VCF_INDEL) && prev_type&(VCF_INDEL) ) continue; + } + else + { + prev_rid = args->lines[k]->rid; + prev_pos = args->lines[k]->pos; + prev_type = 0; + } + prev_type |= line_type; + } + bcf_write1(file, args->hdr, args->lines[k]); + } + if ( args->mrows_op==MROWS_MERGE && !args->rbuf.n ) + { + while ( (line=mrows_flush(args)) ) bcf_write1(file, args->hdr, line); + } +} + +static void init_data(args_t *args) +{ + args->hdr = args->files->readers[0].header; + rbuf_init(&args->rbuf, 100); + args->lines = (bcf1_t**) calloc(args->rbuf.m, sizeof(bcf1_t*)); + if ( args->ref_fname ) + { + args->fai = fai_load(args->ref_fname); + if ( !args->fai ) error("Failed to load the fai index: %s\n", args->ref_fname); + } + if ( args->mrows_op==MROWS_MERGE ) + { + args->mrow_out = bcf_init1(); + args->tmp_str = (kstring_t*) calloc(bcf_hdr_nsamples(args->hdr),sizeof(kstring_t)); + args->diploid = (uint8_t*) malloc(bcf_hdr_nsamples(args->hdr)); + } +} + +static void destroy_data(args_t *args) +{ + int i; + for (i=0; irbuf.m; i++) + if ( args->lines[i] ) bcf_destroy1(args->lines[i]); + free(args->lines); + for (i=0; imtmp_lines; i++) + if ( args->tmp_lines[i] ) bcf_destroy1(args->tmp_lines[i]); + free(args->tmp_lines); + for (i=0; imalines; i++) + bcf_destroy1(args->alines[i]); + free(args->alines); + for (i=0; imblines; i++) + bcf_destroy1(args->blines[i]); + free(args->blines); + for (i=0; immaps; i++) + free(args->maps[i].map); + for (i=0; intmp_als; i++) + free(args->tmp_als[i].s); + free(args->tmp_als); + free(args->tmp_als_str.s); + if ( args->tmp_str ) + { + for (i=0; ihdr); i++) free(args->tmp_str[i].s); + free(args->tmp_str); + } + free(args->maps); + free(args->als); + free(args->tmp_arr1); + free(args->tmp_arr2); + free(args->diploid); + if ( args->mrow_out ) bcf_destroy1(args->mrow_out); + if ( args->fai ) fai_destroy(args->fai); + if ( args->mseq ) free(args->seq); +} + + +static void normalize_line(args_t *args, bcf1_t **line_ptr) +{ + bcf1_t *line = *line_ptr; + if ( args->fai ) + { + if ( args->check_ref & CHECK_REF_FIX ) fix_ref(args, line); + if ( args->do_indels ) + { + int ret = realign(args, line); + + // exclude broken VCF lines + if ( ret==ERR_REF_MISMATCH && args->check_ref & CHECK_REF_SKIP ) + { + args->nskipped++; + return; + } + if ( ret==ERR_DUP_ALLELE ) + { + if ( args->check_ref & CHECK_REF_FIX ) + fix_dup_alt(args, line); + else if ( args->check_ref==CHECK_REF_EXIT ) + error("Duplicate alleles at %s:%d; run with -cw to turn the error into warning or with -cs to fix.\n", bcf_seqname(args->hdr,line),line->pos+1); + else if ( args->check_ref & CHECK_REF_WARN ) + fprintf(stderr,"ALT_DUP\t%s\t%d\n", bcf_seqname(args->hdr,line),line->pos+1); + } + } + } + + // insert into sorted buffer + rbuf_expand0(&args->rbuf,bcf1_t*,args->rbuf.n+1,args->lines); + int i,j; + i = j = rbuf_append(&args->rbuf); + if ( !args->lines[i] ) args->lines[i] = bcf_init1(); + SWAP(bcf1_t*, (*line_ptr), args->lines[i]); + while ( rbuf_prev(&args->rbuf,&i) ) + { + if ( args->lines[i]->pos > args->lines[j]->pos ) SWAP(bcf1_t*, args->lines[i], args->lines[j]); + j = i; + } +} + +static void normalize_vcf(args_t *args) +{ + htsFile *out = hts_open(args->output_fname, hts_bcf_wmode(args->output_type)); + if ( out == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno)); + if ( args->n_threads ) + hts_set_opt(out, HTS_OPT_THREAD_POOL, args->files->p); + if (args->record_cmd_line) bcf_hdr_append_version(args->hdr, args->argc, args->argv, "bcftools_norm"); + bcf_hdr_write(out, args->hdr); + + int prev_rid = -1, prev_pos = -1, prev_type = 0; + while ( bcf_sr_next_line(args->files) ) + { + args->ntotal++; + + bcf1_t *line = args->files->readers[0].buffer[0]; + if ( args->rmdup ) + { + int line_type = bcf_get_variant_types(line); + if ( prev_rid>=0 && prev_rid==line->rid && prev_pos==line->pos ) + { + if ( (args->rmdup>>1)&COLLAPSE_ANY ) continue; + if ( (args->rmdup>>1)&COLLAPSE_SNPS && line_type&(VCF_SNP|VCF_MNP) && prev_type&(VCF_SNP|VCF_MNP) ) continue; + if ( (args->rmdup>>1)&COLLAPSE_INDELS && line_type&(VCF_INDEL) && prev_type&(VCF_INDEL) ) continue; + } + else + { + prev_rid = line->rid; + prev_pos = line->pos; + prev_type = 0; + } + prev_type |= line_type; + } + + // still on the same chromosome? + int i,j,ilast = rbuf_last(&args->rbuf); + if ( ilast>=0 && line->rid != args->lines[ilast]->rid ) flush_buffer(args, out, args->rbuf.n); // new chromosome + + int split = 0; + if ( args->mrows_op==MROWS_SPLIT ) + { + split = 1; + if ( args->mrows_collapse!=COLLAPSE_BOTH && args->mrows_collapse!=COLLAPSE_ANY ) + { + if ( !(bcf_get_variant_types(line) & args->mrows_collapse) ) split = 0; + } + if ( split && line->n_allele>2 ) + { + args->nsplit++; + split_multiallelic_to_biallelics(args, line); + for (j=0; jntmp_lines; j++) + normalize_line(args, &args->tmp_lines[j]); + } + else + split = 0; + } + if ( !split ) + normalize_line(args, &args->files->readers[0].buffer[0]); + + // find out how many sites to flush + ilast = rbuf_last(&args->rbuf); + j = 0; + for (i=-1; rbuf_next(&args->rbuf,&i); ) + { + if ( args->lines[ilast]->pos - args->lines[i]->pos < args->buf_win ) break; + j++; + } + if ( j>0 ) flush_buffer(args, out, j); + } + flush_buffer(args, out, args->rbuf.n); + hts_close(out); + + fprintf(stderr,"Lines total/split/realigned/skipped:\t%d/%d/%d/%d\n", args->ntotal,args->nsplit,args->nchanged,args->nskipped); + if ( args->check_ref & CHECK_REF_FIX ) + fprintf(stderr,"REF/ALT total/modified/added: \t%d/%d/%d\n", args->nref.tot,args->nref.swap,args->nref.set); +} + +static void usage(void) +{ + fprintf(stderr, "\n"); + fprintf(stderr, "About: Left-align and normalize indels; check if REF alleles match the reference;\n"); + fprintf(stderr, " split multiallelic sites into multiple rows; recover multiallelics from\n"); + fprintf(stderr, " multiple rows.\n"); + fprintf(stderr, "Usage: bcftools norm [options] \n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " -c, --check-ref check REF alleles and exit (e), warn (w), exclude (x), or set (s) bad sites [e]\n"); + fprintf(stderr, " -D, --remove-duplicates remove duplicate lines of the same type.\n"); + fprintf(stderr, " -d, --rm-dup remove duplicate snps|indels|both|any\n"); + fprintf(stderr, " -f, --fasta-ref reference sequence (MANDATORY)\n"); + fprintf(stderr, " -m, --multiallelics <-|+>[type] split multiallelics (-) or join biallelics (+), type: snps|indels|both|any [both]\n"); + fprintf(stderr, " --no-version do not append version and command line to the header\n"); + fprintf(stderr, " -N, --do-not-normalize do not normalize indels (with -m or -c s)\n"); + fprintf(stderr, " -o, --output write output to a file [standard output]\n"); + fprintf(stderr, " -O, --output-type 'b' compressed BCF; 'u' uncompressed BCF; 'z' compressed VCF; 'v' uncompressed VCF [v]\n"); + fprintf(stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(stderr, " -s, --strict-filter when merging (-m+), merged site is PASS only if all sites being merged PASS\n"); + fprintf(stderr, " -t, --targets similar to -r but streams rather than index-jumps\n"); + fprintf(stderr, " -T, --targets-file similar to -R but streams rather than index-jumps\n"); + fprintf(stderr, " --threads number of extra (de)compression threads [0]\n"); + fprintf(stderr, " -w, --site-win buffer for sorting lines which changed position during realignment [1000]\n"); + fprintf(stderr, "\n"); + exit(1); +} + +int main_vcfnorm(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->files = bcf_sr_init(); + args->output_fname = "-"; + args->output_type = FT_VCF; + args->n_threads = 0; + args->record_cmd_line = 1; + args->aln_win = 100; + args->buf_win = 1000; + args->mrows_collapse = COLLAPSE_BOTH; + args->do_indels = 1; + int region_is_file = 0; + int targets_is_file = 0; + + static struct option loptions[] = + { + {"help",no_argument,NULL,'h'}, + {"fasta-ref",required_argument,NULL,'f'}, + {"do-not-normalize",no_argument,NULL,'N'}, + {"multiallelics",required_argument,NULL,'m'}, + {"regions",required_argument,NULL,'r'}, + {"regions-file",required_argument,NULL,'R'}, + {"targets",required_argument,NULL,'t'}, + {"targets-file",required_argument,NULL,'T'}, + {"site-win",required_argument,NULL,'w'}, + {"remove-duplicates",no_argument,NULL,'D'}, + {"rm-dup",required_argument,NULL,'d'}, + {"output",required_argument,NULL,'o'}, + {"output-type",required_argument,NULL,'O'}, + {"threads",required_argument,NULL,9}, + {"check-ref",required_argument,NULL,'c'}, + {"strict-filter",no_argument,NULL,'s'}, + {"no-version",no_argument,NULL,8}, + {NULL,0,NULL,0} + }; + char *tmp; + while ((c = getopt_long(argc, argv, "hr:R:f:w:Dd:o:O:c:m:t:T:sN",loptions,NULL)) >= 0) { + switch (c) { + case 'N': args->do_indels = 0; break; + case 'd': + if ( !strcmp("snps",optarg) ) args->rmdup = COLLAPSE_SNPS<<1; + else if ( !strcmp("indels",optarg) ) args->rmdup = COLLAPSE_INDELS<<1; + else if ( !strcmp("both",optarg) ) args->rmdup = COLLAPSE_BOTH<<1; + else if ( !strcmp("any",optarg) ) args->rmdup = COLLAPSE_ANY<<1; + else error("The argument to -d not recognised: %s\n", optarg); + break; + case 'm': + if ( optarg[0]=='-' ) args->mrows_op = MROWS_SPLIT; + else if ( optarg[0]=='+' ) args->mrows_op = MROWS_MERGE; + else error("Expected '+' or '-' with -m\n"); + if ( optarg[1]!=0 ) + { + if ( !strcmp("snps",optarg+1) ) args->mrows_collapse = COLLAPSE_SNPS; + else if ( !strcmp("indels",optarg+1) ) args->mrows_collapse = COLLAPSE_INDELS; + else if ( !strcmp("both",optarg+1) ) args->mrows_collapse = COLLAPSE_BOTH; + else if ( !strcmp("any",optarg+1) ) args->mrows_collapse = COLLAPSE_ANY; + else error("The argument to -m not recognised: %s\n", optarg); + } + break; + case 'c': + if ( strchr(optarg,'w') ) args->check_ref |= CHECK_REF_WARN; + if ( strchr(optarg,'x') ) args->check_ref |= CHECK_REF_SKIP; + if ( strchr(optarg,'s') ) args->check_ref |= CHECK_REF_FIX; + if ( strchr(optarg,'e') ) args->check_ref = CHECK_REF_EXIT; // overrides the above + break; + case 'O': + switch (optarg[0]) { + case 'b': args->output_type = FT_BCF_GZ; break; + case 'u': args->output_type = FT_BCF; break; + case 'z': args->output_type = FT_VCF_GZ; break; + case 'v': args->output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + } + break; + case 'o': args->output_fname = optarg; break; + case 'D': + fprintf(stderr,"Warning: `-D` is functional but deprecated, replaced by `-d both`.\n"); + args->rmdup = COLLAPSE_NONE<<1; + break; + case 's': args->strict_filter = 1; break; + case 'f': args->ref_fname = optarg; break; + case 'r': args->region = optarg; break; + case 'R': args->region = optarg; region_is_file = 1; break; + case 't': args->targets = optarg; break; + case 'T': args->targets = optarg; targets_is_file = 1; break; + case 'w': + args->buf_win = strtol(optarg,&tmp,10); + if ( *tmp ) error("Could not parse argument: --site-win %s\n", optarg); + break; + case 9 : args->n_threads = strtol(optarg, 0, 0); break; + case 8 : args->record_cmd_line = 0; break; + case 'h': + case '?': usage(); + default: error("Unknown argument: %s\n", optarg); + } + } + if ( argc>optind+1 ) usage(); + if ( !args->ref_fname && !args->mrows_op && !args->rmdup ) usage(); + if ( !args->ref_fname && args->check_ref&CHECK_REF_FIX ) error("Expected --fasta-ref with --check-ref s\n"); + char *fname = NULL; + if ( optind>=argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin + else usage(); + } + else fname = argv[optind]; + + if ( args->region ) + { + if ( bcf_sr_set_regions(args->files, args->region,region_is_file)<0 ) + error("Failed to read the regions: %s\n", args->region); + } + if ( args->targets ) + { + if ( bcf_sr_set_targets(args->files, args->targets,targets_is_file, 0)<0 ) + error("Failed to read the targets: %s\n", args->targets); + } + + if ( bcf_sr_set_threads(args->files, args->n_threads)<0 ) error("Failed to create threads\n"); + if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); + if ( args->mrows_op&MROWS_SPLIT && args->rmdup ) error("Cannot combine -D and -m-\n"); + init_data(args); + normalize_vcf(args); + destroy_data(args); + bcf_sr_destroy(args->files); + free(args); + return 0; +} + diff --git a/bcftools/vcfnorm.c.pysam.c b/bcftools/vcfnorm.c.pysam.c new file mode 100644 index 0000000..5e3a5fb --- /dev/null +++ b/bcftools/vcfnorm.c.pysam.c @@ -0,0 +1,1897 @@ +#include "bcftools.pysam.h" + +/* vcfnorm.c -- Left-align and normalize indels. + + Copyright (C) 2013-2016 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "rbuf.h" + +#define CHECK_REF_EXIT 0 +#define CHECK_REF_WARN 1 +#define CHECK_REF_SKIP 2 +#define CHECK_REF_FIX 4 + +#define MROWS_SPLIT 1 +#define MROWS_MERGE 2 + +// for -m+, mapping from allele indexes of a single input record +// to allele indexes of output record +typedef struct +{ + int nals, mals, *map; +} +map_t; + +typedef struct +{ + char *tseq, *seq; + int mseq; + bcf1_t **lines, **tmp_lines, **alines, **blines, *mrow_out; + int ntmp_lines, mtmp_lines, nalines, malines, nblines, mblines; + map_t *maps; // mrow map for each buffered record + char **als; + int mmaps, nals, mals; + uint8_t *tmp_arr1, *tmp_arr2, *diploid; + int ntmp_arr1, ntmp_arr2; + kstring_t *tmp_str; + kstring_t *tmp_als, tmp_als_str; + int ntmp_als; + rbuf_t rbuf; + int buf_win; // maximum distance between two records to consider + int aln_win; // the realignment window size (maximum repeat size) + bcf_srs_t *files; // using the synced reader only for -r option + bcf_hdr_t *hdr; + faidx_t *fai; + struct { int tot, set, swap; } nref; + char **argv, *output_fname, *ref_fname, *vcf_fname, *region, *targets; + int argc, rmdup, output_type, n_threads, check_ref, strict_filter, do_indels; + int nchanged, nskipped, nsplit, ntotal, mrows_op, mrows_collapse, parsimonious; + int record_cmd_line; +} +args_t; + +static inline int replace_iupac_codes(char *seq, int nseq) +{ + // Replace ambiguity codes with N for now, it awaits to be seen what the VCF spec codifies in the end + int i, n = 0; + for (i=0; id.allele[0]); + int i, maxlen = reflen, len; + for (i=1; in_allele; i++) + { + int len = strlen(line->d.allele[i]); + if ( maxlen < len ) maxlen = len; + } + + char *ref = faidx_fetch_seq(args->fai, (char*)bcf_seqname(args->hdr,line), line->pos, line->pos+maxlen-1, &len); + if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", bcf_seqname(args->hdr,line),line->pos+1); + replace_iupac_codes(ref,len); + + args->nref.tot++; + + // is the REF different? + if ( !strncasecmp(line->d.allele[0],ref,reflen) ) { free(ref); return; } + + // is the REF allele missing or N? + if ( reflen==1 && (line->d.allele[0][0]=='.' || line->d.allele[0][0]=='N' || line->d.allele[0][0]=='n') ) + { + line->d.allele[0][0] = ref[0]; + args->nref.set++; + free(ref); + bcf_update_alleles(args->hdr,line,(const char**)line->d.allele,line->n_allele); + return; + } + + // does REF contain non-standard bases? + if ( replace_iupac_codes(line->d.allele[0],strlen(line->d.allele[0])) ) + { + args->nref.set++; + bcf_update_alleles(args->hdr,line,(const char**)line->d.allele,line->n_allele); + if ( !strncasecmp(line->d.allele[0],ref,reflen) ) { free(ref); return; } + } + + // is it swapped? + for (i=1; in_allele; i++) + { + int len = strlen(line->d.allele[i]); + if ( !strncasecmp(line->d.allele[i],ref,len) ) break; + } + + kstring_t str = {0,0,0}; + if ( i==line->n_allele ) + { + // none of the alternate alleles matches the reference + if ( line->n_allele>1 ) + args->nref.set++; + else + args->nref.swap++; + + kputs(line->d.allele[0],&str); + kputc(',',&str); + for (i=1; in_allele; i++) + { + kputs(line->d.allele[i],&str); + kputc(',',&str); + } + kputc(ref[0],&str); + bcf_update_alleles_str(args->hdr,line,str.s); + str.l = 0; + } + else + args->nref.swap++; + free(ref); + + // swap the alleles + int j; + kputs(line->d.allele[i],&str); + for (j=1; jd.allele[j],&str); + } + kputc(',',&str); + kputs(line->d.allele[0],&str); + for (j=i+1; jn_allele; j++) + { + kputc(',',&str); + kputs(line->d.allele[j],&str); + } + bcf_update_alleles_str(args->hdr,line,str.s); + + // swap genotypes + int ntmp = args->ntmp_arr1 / sizeof(int32_t); // reuse tmp_arr declared as uint8_t + int ngts = bcf_get_genotypes(args->hdr, line, &args->tmp_arr1, &ntmp); + args->ntmp_arr1 = ntmp * sizeof(int32_t); + int32_t *gts = (int32_t*) args->tmp_arr1; + int ni = 0; + for (j=0; jhdr,line,gts,ngts); + + // update AC + int nac = bcf_get_info_int32(args->hdr, line, "AC", &args->tmp_arr1, &ntmp); + args->ntmp_arr1 = ntmp * sizeof(int32_t); + if ( i <= nac ) + { + int32_t *ac = (int32_t*)args->tmp_arr1; + ac[i-1] = ni; + bcf_update_info_int32(args->hdr, line, "AC", ac, nac); + } + + free(str.s); +} + +static void fix_dup_alt(args_t *args, bcf1_t *line) +{ + // update alleles, create a mapping between old and new indexes + hts_expand(uint8_t,line->n_allele,args->ntmp_arr1,args->tmp_arr1); + args->tmp_arr1[0] = 0; // ref always unchanged + + int i, j, nals = line->n_allele, nals_ori = line->n_allele; + for (i=1, j=1; in_allele; i++) + { + if ( strcmp(line->d.allele[0],line->d.allele[i]) ) + { + args->tmp_arr1[i] = j++; + continue; + } + args->tmp_arr1[i] = 0; + nals--; + } + for (i=1, j=1; in_allele; i++) + { + if ( !args->tmp_arr1[i] ) continue; + line->d.allele[j++] = line->d.allele[i]; + } + bcf_update_alleles(args->hdr, line, (const char**)line->d.allele, nals); + + + // update genotypes + int ntmp = args->ntmp_arr2 / sizeof(int32_t); // reuse tmp_arr declared as uint8_t + int ngts = bcf_get_genotypes(args->hdr, line, &args->tmp_arr2, &ntmp); + args->ntmp_arr2 = ntmp * sizeof(int32_t); + int32_t *gts = (int32_t*) args->tmp_arr2; + int changed = 0; + for (i=0; itmp_arr1[ial] ) continue; + int ial_new = ialtmp_arr1[ial] : 0; + gts[i] = bcf_gt_is_phased(gts[i]) ? bcf_gt_phased(ial_new) : bcf_gt_unphased(ial_new); + changed = 1; + } + if ( changed ) bcf_update_genotypes(args->hdr,line,gts,ngts); +} + +#define ERR_DUP_ALLELE -2 +#define ERR_REF_MISMATCH -1 +#define ERR_OK 0 +#define ERR_SYMBOLIC 1 +#define ERR_SPANNING_DELETION 2 + +static int realign(args_t *args, bcf1_t *line) +{ + bcf_unpack(line, BCF_UN_STR); + + // Sanity check REF + int i, nref, reflen = strlen(line->d.allele[0]); + char *ref = faidx_fetch_seq(args->fai, (char*)args->hdr->id[BCF_DT_CTG][line->rid].key, line->pos, line->pos+reflen-1, &nref); + if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", args->hdr->id[BCF_DT_CTG][line->rid].key, line->pos+1); + seq_to_upper(ref,0); + replace_iupac_codes(ref,nref); // any non-ACGT character in fasta ref is replaced with N + + // does VCF REF contain non-standard bases? + if ( has_non_acgtn(line->d.allele[0],reflen) ) + { + if ( args->check_ref==CHECK_REF_EXIT ) + error("Non-ACGTN reference allele at %s:%d .. REF_SEQ:'%s' vs VCF:'%s'\n", bcf_seqname(args->hdr,line),line->pos+1,ref,line->d.allele[0]); + if ( args->check_ref & CHECK_REF_WARN ) + fprintf(bcftools_stderr,"NON_ACGTN_REF\t%s\t%d\t%s\n", bcf_seqname(args->hdr,line),line->pos+1,line->d.allele[0]); + free(ref); + return ERR_REF_MISMATCH; + } + if ( strcasecmp(ref,line->d.allele[0]) ) + { + if ( args->check_ref==CHECK_REF_EXIT ) + error("Reference allele mismatch at %s:%d .. REF_SEQ:'%s' vs VCF:'%s'\n", bcf_seqname(args->hdr,line),line->pos+1,ref,line->d.allele[0]); + if ( args->check_ref & CHECK_REF_WARN ) + fprintf(bcftools_stderr,"REF_MISMATCH\t%s\t%d\t%s\n", bcf_seqname(args->hdr,line),line->pos+1,line->d.allele[0]); + free(ref); + return ERR_REF_MISMATCH; + } + free(ref); + ref = NULL; + + if ( line->n_allele == 1 ) // a REF + { + if ( line->rlen > 1 ) + { + line->d.allele[0][1] = 0; + bcf_update_alleles(args->hdr,line,(const char**)line->d.allele,line->n_allele); + } + return ERR_OK; + } + if ( bcf_get_variant_types(line)==VCF_BND ) return ERR_SYMBOLIC; // breakend, not an error + + // make a copy of each allele for trimming + hts_expand0(kstring_t,line->n_allele,args->ntmp_als,args->tmp_als); + kstring_t *als = args->tmp_als; + for (i=0; in_allele; i++) + { + if ( line->d.allele[i][0]=='<' ) return ERR_SYMBOLIC; // symbolic allele + if ( line->d.allele[i][0]=='*' ) return ERR_SPANNING_DELETION; // spanning deletion + if ( has_non_acgtn(line->d.allele[i],0) ) + { + if ( args->check_ref==CHECK_REF_EXIT ) + error("Non-ACGTN alternate allele at %s:%d .. REF_SEQ:'%s' vs VCF:'%s'\n", bcf_seqname(args->hdr,line),line->pos+1,ref,line->d.allele[i]); + if ( args->check_ref & CHECK_REF_WARN ) + fprintf(bcftools_stderr,"NON_ACGTN_ALT\t%s\t%d\t%s\n", bcf_seqname(args->hdr,line),line->pos+1,line->d.allele[i]); + return ERR_REF_MISMATCH; + } + + als[i].l = 0; + kputs(line->d.allele[i], &als[i]); + seq_to_upper(als[i].s,0); + + if ( i>0 && als[i].l==als[0].l && !strcmp(als[0].s,als[i].s) ) return ERR_DUP_ALLELE; + } + + // trim from right + int ori_pos = line->pos; + while (1) + { + // is the rightmost base identical in all alleles? + int min_len = als[0].l; + for (i=1; in_allele; i++) + { + if ( als[0].s[ als[0].l-1 ]!=als[i].s[ als[i].l-1 ] ) break; + if ( als[i].l < min_len ) min_len = als[i].l; + } + if ( i!=line->n_allele ) break; // there are differences, cannot be trimmed + if ( min_len<=1 && line->pos==0 ) break; + + int pad_from_left = 0; + for (i=0; in_allele; i++) // trim all alleles + { + als[i].l--; + if ( !als[i].l ) pad_from_left = 1; + } + if ( pad_from_left ) + { + int npad = line->pos >= args->aln_win ? args->aln_win : line->pos; + free(ref); + ref = faidx_fetch_seq(args->fai, (char*)args->hdr->id[BCF_DT_CTG][line->rid].key, line->pos-npad, line->pos-1, &nref); + if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", args->hdr->id[BCF_DT_CTG][line->rid].key, line->pos-npad+1); + replace_iupac_codes(ref,nref); + for (i=0; in_allele; i++) + { + ks_resize(&als[i], als[i].l + npad); + if ( als[i].l ) memmove(als[i].s+npad,als[i].s,als[i].l); + memcpy(als[i].s,ref,npad); + als[i].l += npad; + } + line->pos -= npad; + } + } + free(ref); + + // trim from left + int ntrim_left = 0; + while (1) + { + // is the first base identical in all alleles? + int min_len = als[0].l - ntrim_left; + for (i=1; in_allele; i++) + { + if ( als[0].s[ntrim_left]!=als[i].s[ntrim_left] ) break; + if ( min_len > als[i].l - ntrim_left ) min_len = als[i].l - ntrim_left; + } + if ( i!=line->n_allele || min_len<=1 ) break; // there are differences, cannot be trimmed + ntrim_left++; + } + if ( ntrim_left ) + { + for (i=0; in_allele; i++) + { + memmove(als[i].s,als[i].s+ntrim_left,als[i].l-ntrim_left); + als[i].l -= ntrim_left; + } + line->pos += ntrim_left; + } + + // Have the alleles changed? + als[0].s[ als[0].l ] = 0; // in order for strcmp to work + if ( ori_pos==line->pos && !strcmp(line->d.allele[0],als[0].s) ) return ERR_OK; + + // Create new block of alleles and update + args->tmp_als_str.l = 0; + for (i=0; in_allele; i++) + { + if (i>0) kputc(',',&args->tmp_als_str); + kputsn(als[i].s,als[i].l,&args->tmp_als_str); + } + args->tmp_als_str.s[ args->tmp_als_str.l ] = 0; + bcf_update_alleles_str(args->hdr,line,args->tmp_als_str.s); + args->nchanged++; + + return ERR_OK; +} + +static void split_info_numeric(args_t *args, bcf1_t *src, bcf_info_t *info, int ialt, bcf1_t *dst) +{ + #define BRANCH_NUMERIC(type,type_t) \ + { \ + const char *tag = bcf_hdr_int2id(args->hdr,BCF_DT_ID,info->key); \ + int ntmp = args->ntmp_arr1 / sizeof(type_t); \ + int ret = bcf_get_info_##type(args->hdr,src,tag,&args->tmp_arr1,&ntmp); \ + args->ntmp_arr1 = ntmp * sizeof(type_t); \ + assert( ret>0 ); \ + type_t *vals = (type_t*) args->tmp_arr1; \ + int len = bcf_hdr_id2length(args->hdr,BCF_HL_INFO,info->key); \ + if ( len==BCF_VL_A ) \ + { \ + if ( ret!=src->n_allele-1 ) \ + error("Error: wrong number of fields in INFO/%s at %s:%d, expected %d, found %d\n", \ + tag,bcf_seqname(args->hdr,src),src->pos+1,src->n_allele-1,ret); \ + bcf_update_info_##type(args->hdr,dst,tag,vals+ialt,1); \ + } \ + else if ( len==BCF_VL_R ) \ + { \ + if ( ret!=src->n_allele ) \ + error("Error: wrong number of fields in INFO/%s at %s:%d, expected %d, found %d\n", \ + tag,bcf_seqname(args->hdr,src),src->pos+1,src->n_allele,ret); \ + if ( ialt!=0 ) vals[1] = vals[ialt+1]; \ + bcf_update_info_##type(args->hdr,dst,tag,vals,2); \ + } \ + else if ( len==BCF_VL_G ) \ + { \ + if ( ret!=src->n_allele*(src->n_allele+1)/2 ) \ + error("Error: wrong number of fields in INFO/%s at %s:%d, expected %d, found %d\n", \ + tag,bcf_seqname(args->hdr,src),src->pos+1,src->n_allele*(src->n_allele+1)/2,ret); \ + if ( ialt!=0 ) \ + { \ + vals[1] = vals[bcf_alleles2gt(0,ialt+1)]; \ + vals[2] = vals[bcf_alleles2gt(ialt+1,ialt+1)]; \ + } \ + bcf_update_info_##type(args->hdr,dst,tag,vals,3); \ + } \ + else \ + bcf_update_info_##type(args->hdr,dst,tag,vals,ret); \ + } + switch (bcf_hdr_id2type(args->hdr,BCF_HL_INFO,info->key)) + { + case BCF_HT_INT: BRANCH_NUMERIC(int32, int32_t); break; + case BCF_HT_REAL: BRANCH_NUMERIC(float, float); break; + } + #undef BRANCH_NUMERIC +} +// Find n-th field in a comma-separated list and move it to dst. +// The memory areas may overlap. +#define STR_MOVE_NTH(dst,src,end,nth,len) \ +{ \ + char *ss = src, *se = src; \ + int j = 0; \ + while ( *se && se<(end) ) \ + { \ + if ( *se==',' ) \ + { \ + if ( j==nth ) break; \ + j++; \ + ss = se+1; \ + } \ + se++; \ + } \ + if ( j==nth ) \ + { \ + int n = se - ss; \ + memmove((dst),ss,n); \ + src = se; \ + len += n; \ + } \ + else len = -1; \ +} +static void split_info_string(args_t *args, bcf1_t *src, bcf_info_t *info, int ialt, bcf1_t *dst) +{ + const char *tag = bcf_hdr_int2id(args->hdr,BCF_DT_ID,info->key); + int ret = bcf_get_info_string(args->hdr,src,tag,&args->tmp_arr1,&args->ntmp_arr1); + assert( ret>0 ); + + kstring_t str; + str.m = args->ntmp_arr1; + str.l = ret; + str.s = (char*) args->tmp_arr1; + + int len = bcf_hdr_id2length(args->hdr,BCF_HL_INFO,info->key); + if ( len==BCF_VL_A ) + { + char *tmp = str.s; + int len = 0; + STR_MOVE_NTH(str.s,tmp,str.s+str.l,ialt,len); + if ( len<0 ) return; // wrong number of fields: skip + str.s[len] = 0; + bcf_update_info_string(args->hdr,dst,tag,str.s); + } + else if ( len==BCF_VL_R ) + { + char *tmp = str.s; + int len = 0; + STR_MOVE_NTH(str.s,tmp,str.s+str.l,0,len); + str.s[len]=','; tmp++; len++; + STR_MOVE_NTH(&str.s[len],tmp,str.s+str.l,ialt,len); + if ( len<0 ) return; // wrong number of fields: skip + str.s[len] = 0; + bcf_update_info_string(args->hdr,dst,tag,str.s); + } + else if ( len==BCF_VL_G ) + { + int i0a = bcf_alleles2gt(0,ialt+1), iaa = bcf_alleles2gt(ialt+1,ialt+1); + char *tmp = str.s; + int len = 0; + STR_MOVE_NTH(str.s,tmp,str.s+str.l,0,len); + str.s[len]=','; tmp++; len++; + STR_MOVE_NTH(&str.s[len],tmp,str.s+str.l,i0a-1,len); + if ( len<0 ) return; // wrong number of fields: skip + str.s[len]=','; tmp++; len++; + STR_MOVE_NTH(&str.s[len],tmp,str.s+str.l,iaa-i0a-1,len); + if ( len<0 ) return; // wrong number of fields: skip + str.s[len] = 0; + bcf_update_info_string(args->hdr,dst,tag,str.s); + } + else + bcf_update_info_string(args->hdr,dst,tag,str.s); +} +static void split_info_flag(args_t *args, bcf1_t *src, bcf_info_t *info, int ialt, bcf1_t *dst) +{ + const char *tag = bcf_hdr_int2id(args->hdr,BCF_DT_ID,info->key); + int ret = bcf_get_info_flag(args->hdr,src,tag,&args->tmp_arr1,&args->ntmp_arr1); + bcf_update_info_flag(args->hdr,dst,tag,NULL,ret); +} + +static void split_format_genotype(args_t *args, bcf1_t *src, bcf_fmt_t *fmt, int ialt, bcf1_t *dst) +{ + int ntmp = args->ntmp_arr1 / 4; + int ngts = bcf_get_genotypes(args->hdr,src,&args->tmp_arr1,&ntmp); + args->ntmp_arr1 = ntmp * 4; + assert( ngts >0 ); + + int32_t *gt = (int32_t*) args->tmp_arr1; + int i, j, nsmpl = bcf_hdr_nsamples(args->hdr); + ngts /= nsmpl; + for (i=0; ihdr,dst,args->tmp_arr1,ngts*nsmpl); +} +static void split_format_numeric(args_t *args, bcf1_t *src, bcf_fmt_t *fmt, int ialt, bcf1_t *dst) +{ + #define BRANCH_NUMERIC(type,type_t,is_vector_end,set_vector_end) \ + { \ + const char *tag = bcf_hdr_int2id(args->hdr,BCF_DT_ID,fmt->id); \ + int ntmp = args->ntmp_arr1 / sizeof(type_t); \ + int nvals = bcf_get_format_##type(args->hdr,src,tag,&args->tmp_arr1,&ntmp); \ + args->ntmp_arr1 = ntmp * sizeof(type_t); \ + assert( nvals>0 ); \ + type_t *vals = (type_t *) args->tmp_arr1; \ + int len = bcf_hdr_id2length(args->hdr,BCF_HL_FMT,fmt->id); \ + int i, nsmpl = bcf_hdr_nsamples(args->hdr); \ + if ( nvals==nsmpl ) /* all values are missing */ \ + { \ + bcf_update_format_##type(args->hdr,dst,tag,vals,nsmpl); \ + return; \ + } \ + if ( len==BCF_VL_A ) \ + { \ + if ( nvals!=(src->n_allele-1)*nsmpl ) \ + error("Error: wrong number of fields in FMT/%s at %s:%d, expected %d, found %d\n", \ + tag,bcf_seqname(args->hdr,src),src->pos+1,(src->n_allele-1)*nsmpl,nvals); \ + nvals /= nsmpl; \ + type_t *src_vals = vals, *dst_vals = vals; \ + for (i=0; ihdr,dst,tag,vals,nsmpl); \ + } \ + else if ( len==BCF_VL_R ) \ + { \ + if ( nvals!=src->n_allele*nsmpl ) \ + error("Error: wrong number of fields in FMT/%s at %s:%d, expected %d, found %d\n", \ + tag,bcf_seqname(args->hdr,src),src->pos+1,src->n_allele*nsmpl,nvals); \ + nvals /= nsmpl; \ + type_t *src_vals = vals, *dst_vals = vals; \ + for (i=0; ihdr,dst,tag,vals,nsmpl*2); \ + } \ + else if ( len==BCF_VL_G ) \ + { \ + if ( nvals!=src->n_allele*(src->n_allele+1)/2*nsmpl && nvals!=src->n_allele*nsmpl ) \ + error("Error at %s:%d, the tag %s has wrong number of fields\n", bcf_seqname(args->hdr,src),src->pos+1,bcf_hdr_int2id(args->hdr,BCF_DT_ID,fmt->id)); \ + nvals /= nsmpl; \ + int all_haploid = nvals==src->n_allele ? 1 : 0; \ + type_t *src_vals = vals, *dst_vals = vals; \ + for (i=0; ihdr,dst,tag,vals,all_haploid ? nsmpl*2 : nsmpl*3); \ + } \ + else \ + bcf_update_format_##type(args->hdr,dst,tag,vals,nvals); \ + } + switch (bcf_hdr_id2type(args->hdr,BCF_HL_FMT,fmt->id)) + { + case BCF_HT_INT: BRANCH_NUMERIC(int32, int32_t, src_vals[j]==bcf_int32_vector_end, dst_vals[2]=bcf_int32_vector_end); break; + case BCF_HT_REAL: BRANCH_NUMERIC(float, float, bcf_float_is_vector_end(src_vals[j]), bcf_float_set_vector_end(dst_vals[2])); break; + } + #undef BRANCH_NUMERIC +} +static void squeeze_format_char(char *str, int src_blen, int dst_blen, int n) +{ + int i, isrc = 0, idst = 0; + for (i=0; ihdr,BCF_DT_ID,fmt->id); + int ret = bcf_get_format_char(args->hdr,src,tag,&args->tmp_arr1,&args->ntmp_arr1); + assert( ret>0 ); + + kstring_t str; + str.m = args->ntmp_arr1; + str.l = ret; + str.s = (char*) args->tmp_arr1; + + int nsmpl = bcf_hdr_nsamples(args->hdr); + int len = bcf_hdr_id2length(args->hdr,BCF_HL_FMT,fmt->id); + if ( len==BCF_VL_A ) + { + int i, blen = ret/nsmpl, maxlen = 0; + char *ptr = str.s; + for (i=0; ihdr,dst,tag,str.s,nsmpl*maxlen); + } + else if ( len==BCF_VL_R ) + { + int i, blen = ret/nsmpl, maxlen = 0; + char *ptr = str.s; + for (i=0; ihdr,dst,tag,str.s,nsmpl*maxlen); + } + else if ( len==BCF_VL_G ) + { + int i, blen = ret/nsmpl, maxlen = 0, i0a = bcf_alleles2gt(0,ialt+1), iaa = bcf_alleles2gt(ialt+1,ialt+1); + char *ptr = str.s; + for (i=0; in_allele*(src->n_allele+1)/2 && nfields!=src->n_allele ) + error("Error: wrong number of fields in FMT/%s at %s:%d, expected %d or %d, found %d\n", + tag,bcf_seqname(args->hdr,src),src->pos+1,src->n_allele*(src->n_allele+1)/2,src->n_allele,nfields); + + int len = 0; + if ( nfields==src->n_allele ) // haploid + { + char *tmp = ptr; + STR_MOVE_NTH(&ptr[len],tmp,ptr+blen,0,len); + ptr[len]=','; tmp++; len++; + STR_MOVE_NTH(&ptr[len],tmp,ptr+blen,ialt,len); + if ( len<0 ) return; // wrong number of fields: skip + } + else // diploid + { + char *tmp = ptr; + STR_MOVE_NTH(&ptr[len],tmp,ptr+blen,0,len); + ptr[len]=','; tmp++; len++; + STR_MOVE_NTH(&ptr[len],tmp,ptr+blen,i0a-1,len); + if ( len<0 ) return; // wrong number of fields: skip + ptr[len]=','; tmp++; len++; + STR_MOVE_NTH(&ptr[len],tmp,ptr+blen,iaa-i0a-1,len); + if ( len<0 ) return; // wrong number of fields: skip + } + if ( maxlen < len ) maxlen = len; + ptr += blen; + } + if ( maxlenhdr,dst,tag,str.s,nsmpl*maxlen); + } + else + bcf_update_format_char(args->hdr,dst,tag,str.s,str.l); +} + + +static void split_multiallelic_to_biallelics(args_t *args, bcf1_t *line) +{ + int i; + + bcf_unpack(line, BCF_UN_ALL); + + // Init the target biallelic lines + args->ntmp_lines = line->n_allele-1; + if ( args->mtmp_lines < args->ntmp_lines ) + { + args->tmp_lines = (bcf1_t **)realloc(args->tmp_lines,sizeof(bcf1_t*)*args->ntmp_lines); + for (i=args->mtmp_lines; intmp_lines; i++) + args->tmp_lines[i] = NULL; + args->mtmp_lines = args->ntmp_lines; + } + kstring_t tmp = {0,0,0}; + kputs(line->d.allele[0], &tmp); + kputc(',', &tmp); + int rlen = tmp.l; + int gt_id = bcf_hdr_id2int(args->hdr,BCF_DT_ID,"GT"); + for (i=0; intmp_lines; i++) // for each ALT allele + { + if ( !args->tmp_lines[i] ) args->tmp_lines[i] = bcf_init1(); + bcf1_t *dst = args->tmp_lines[i]; + bcf_clear(dst); + + dst->rid = line->rid; + dst->pos = line->pos; + dst->qual = line->qual; + + // Not quite sure how to handle IDs, they can be assigned to a specific + // ALT. For now we leave the ID unchanged for all. + bcf_update_id(args->hdr, dst, line->d.id ? line->d.id : "."); + + tmp.l = rlen; + kputs(line->d.allele[i+1],&tmp); + bcf_update_alleles_str(args->hdr,dst,tmp.s); + + if ( line->d.n_flt ) bcf_update_filter(args->hdr, dst, line->d.flt, line->d.n_flt); + + int j; + for (j=0; jn_info; j++) + { + bcf_info_t *info = &line->d.info[j]; + int type = bcf_hdr_id2type(args->hdr,BCF_HL_INFO,info->key); + if ( type==BCF_HT_INT || type==BCF_HT_REAL ) split_info_numeric(args, line, info, i, dst); + else if ( type==BCF_HT_FLAG ) split_info_flag(args, line, info, i, dst); + else split_info_string(args, line, info, i, dst); + } + + dst->n_sample = line->n_sample; + for (j=0; jn_fmt; j++) + { + bcf_fmt_t *fmt = &line->d.fmt[j]; + int type = bcf_hdr_id2type(args->hdr,BCF_HL_FMT,fmt->id); + if ( fmt->id==gt_id ) split_format_genotype(args, line, fmt, i, dst); + else if ( type==BCF_HT_INT || type==BCF_HT_REAL ) split_format_numeric(args, line, fmt, i, dst); + else split_format_string(args, line, fmt, i, dst); + } + } + free(tmp.s); +} + +// Enlarge FORMAT array containing nsmpl samples each with nals_ori values +// to accommodate nvals values for each sample, filling the gaps with missing +// values. Works also for INFO arrays, with nsmpl set to 1. +#define ENLARGE_ARRAY(type_t,set_missing,arr,narr_bytes,nsmpl,nvals_ori,nvals) \ +{ \ + int nbytes_new = (nsmpl)*(nvals)*sizeof(type_t); \ + hts_expand(uint8_t,nbytes_new,narr_bytes,arr); \ + int ismpl, k; \ + for (ismpl=nsmpl-1; ismpl>=0; ismpl--) \ + { \ + type_t *dst_ptr = ((type_t*)arr) + ismpl*(nvals); \ + type_t *src_ptr = ((type_t*)arr) + ismpl*nvals_ori; \ + memmove(dst_ptr,src_ptr,sizeof(type_t)*nvals_ori); \ + for (k=nvals_ori; khdr,BCF_DT_ID,info->key); \ + int ntmp = args->ntmp_arr1 / sizeof(type_t); \ + int nvals_ori = bcf_get_info_##type(args->hdr,lines[0],tag,&args->tmp_arr1,&ntmp); \ + args->ntmp_arr1 = ntmp * sizeof(type_t); \ + assert( nvals_ori>0 ); \ + type_t *vals = (type_t*) args->tmp_arr1, *vals2; \ + int i,k,len = bcf_hdr_id2length(args->hdr,BCF_HL_INFO,info->key); \ + if ( len==BCF_VL_A ) \ + { \ + if (nvals_ori!=lines[0]->n_allele - 1) \ + error("vcfnorm: number of fields in first record at position %s:%d for INFO tag %s not as expected [found: %d vs expected:%d]\n", bcf_seqname(args->hdr,lines[0]),lines[0]->pos+1, tag, nvals_ori, lines[0]->n_allele-1); \ + int nvals = dst->n_allele - 1; \ + ENLARGE_ARRAY(type_t,set_missing,args->tmp_arr1,args->ntmp_arr1,1,nvals_ori,nvals); \ + vals = (type_t*) args->tmp_arr1; \ + for (i=1; intmp_arr2 / sizeof(type_t); \ + int nvals2 = bcf_get_info_##type(args->hdr,lines[i],tag,&args->tmp_arr2,&ntmp2); \ + if (nvals2<0) continue; /* info tag does not exist in this record, skip */ \ + args->ntmp_arr2 = ntmp2 * sizeof(type_t); \ + if (nvals2!=lines[i]->n_allele-1) \ + error("vcfnorm: could not merge INFO tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \ + vals2 = (type_t*) args->tmp_arr2; \ + for (k=0; kmaps[i].map[k+1] - 1 ] = vals2[k]; \ + } \ + } \ + bcf_update_info_##type(args->hdr,dst,tag,args->tmp_arr1,nvals); \ + } \ + else if ( len==BCF_VL_R ) \ + { \ + if (nvals_ori!=lines[0]->n_allele) \ + error("vcfnorm: number of fields in first record at position %s:%d for INFO tag %s not as expected [found: %d vs expected:%d]\n", bcf_seqname(args->hdr,lines[0]),lines[0]->pos+1, tag, nvals_ori, lines[0]->n_allele); \ + int nvals = dst->n_allele; \ + ENLARGE_ARRAY(type_t,set_missing,args->tmp_arr1,args->ntmp_arr1,1,nvals_ori,nvals); \ + vals = (type_t*) args->tmp_arr1; \ + for (i=1; intmp_arr2 / sizeof(type_t); \ + int nvals2 = bcf_get_info_##type(args->hdr,lines[i],tag,&args->tmp_arr2,&ntmp2); \ + if (nvals2<0) continue; /* info tag does not exist in this record, skip */ \ + args->ntmp_arr2 = ntmp2 * sizeof(type_t); \ + if (nvals2!=lines[i]->n_allele) \ + error("vcfnorm: could not merge INFO tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \ + vals2 = (type_t*) args->tmp_arr2; \ + for (k=0; kmaps[i].map[k] ] = vals2[k]; \ + } \ + } \ + bcf_update_info_##type(args->hdr,dst,tag,args->tmp_arr1,nvals); \ + } \ + else if ( len==BCF_VL_G ) \ + { \ + /* expecting diploid gt in INFO */ \ + if (nvals_ori!=lines[0]->n_allele*(lines[0]->n_allele+1)/2) { \ + fprintf(bcftools_stderr, "todo: merge Number=G INFO fields for haploid sites\n"); \ + error("vcfnorm: number of fields in first record at position %s:%d for INFO tag %s not as expected [found: %d vs expected:%d]\n", bcf_seqname(args->hdr,lines[0]),lines[0]->pos+1, tag, nvals_ori, lines[0]->n_allele*(lines[0]->n_allele+1)/2); \ + } \ + int nvals = dst->n_allele*(dst->n_allele+1)/2; \ + ENLARGE_ARRAY(type_t,set_missing,args->tmp_arr1,args->ntmp_arr1,1,nvals_ori,nvals); \ + vals = (type_t*) args->tmp_arr1; \ + for (i=1; intmp_arr2 / sizeof(type_t); \ + int nvals2 = bcf_get_info_##type(args->hdr,lines[i],tag,&args->tmp_arr2,&ntmp2); \ + if (nvals2<0) continue; /* info tag does not exist in this record, skip */ \ + args->ntmp_arr2 = ntmp2 * sizeof(type_t); \ + if (nvals2!=lines[i]->n_allele*(lines[i]->n_allele+1)/2) \ + error("vcfnorm: could not merge INFO tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \ + vals2 = (type_t*) args->tmp_arr2; \ + int ia,ib; \ + k = 0; \ + for (ia=0; ian_allele; ia++) \ + { \ + for (ib=0; ib<=ia; ib++) \ + { \ + if ( is_vector_end ) break; \ + int l = bcf_alleles2gt(args->maps[i].map[ia],args->maps[i].map[ib]); \ + vals[l] = vals2[k]; \ + k++; \ + } \ + } \ + } \ + bcf_update_info_##type(args->hdr,dst,tag,args->tmp_arr1,nvals); \ + } \ + else \ + bcf_update_info_##type(args->hdr,dst,tag,vals,nvals_ori); \ + } + switch (bcf_hdr_id2type(args->hdr,BCF_HL_INFO,info->key)) + { + case BCF_HT_INT: BRANCH_NUMERIC(int32, int32_t, dst_ptr[k]=bcf_int32_missing, vals2[k]==bcf_int32_vector_end); break; + case BCF_HT_REAL: BRANCH_NUMERIC(float, float, bcf_float_set_missing(dst_ptr[k]), bcf_float_is_vector_end(vals2[k])); break; + } + #undef BRANCH_NUMERIC +} +static void merge_info_flag(args_t *args, bcf1_t **lines, int nlines, bcf_info_t *info, bcf1_t *dst) +{ + const char *tag = bcf_hdr_int2id(args->hdr,BCF_DT_ID,info->key); + int ret = bcf_get_info_flag(args->hdr,lines[0],tag,&args->tmp_arr1,&args->ntmp_arr1); + bcf_update_info_flag(args->hdr,dst,tag,NULL,ret); +} +int copy_string_field(char *src, int isrc, int src_len, kstring_t *dst, int idst); // see vcfmerge.c +static void merge_info_string(args_t *args, bcf1_t **lines, int nlines, bcf_info_t *info, bcf1_t *dst) +{ + const char *tag = bcf_hdr_int2id(args->hdr,BCF_DT_ID,info->key); + + kstring_t str; + str.m = args->ntmp_arr1; + str.l = 0; + str.s = (char*) args->tmp_arr1; + + int i, j, len = bcf_hdr_id2length(args->hdr,BCF_HL_INFO,info->key); + if ( len==BCF_VL_A || len==BCF_VL_R ) + { + int jfrom = len==BCF_VL_A ? 1 : 0; + kputc('.',&str); + for (i=jfrom+1; in_allele; i++) kputs(",.",&str); + for (i=0; ihdr,lines[i],tag); + if (!src) continue; + for (j=jfrom; jn_allele; j++) + copy_string_field((char*)src->vptr, j-jfrom, src->len, &str, args->maps[i].map[j]-jfrom); + } + str.s[str.l] = 0; + args->tmp_arr1 = (uint8_t*) str.s; + args->ntmp_arr1 = str.m; + bcf_update_info_string(args->hdr,dst,tag,str.s); + } + else if ( len==BCF_VL_G ) + { + int ngts = dst->n_allele*(dst->n_allele+1)/2; + kputc('.',&str); + for (i=1; ihdr,lines[i],tag); + if (!src) continue; + int iori, jori, kori = 0; + for (iori=0; iorin_allele; iori++) + { + int inew = args->maps[i].map[iori]; + for (jori=0; jori<=iori; jori++) + { + int jnew = args->maps[i].map[jori]; + int knew = bcf_alleles2gt(inew,jnew); + copy_string_field((char*)src->vptr,kori,src->len,&str,knew); + kori++; + } + } + } + str.s[str.l] = 0; + args->tmp_arr1 = (uint8_t*) str.s; + args->ntmp_arr1 = str.m; + bcf_update_info_string(args->hdr,dst,tag,str.s); + } + else + { + bcf_get_info_string(args->hdr,lines[0],tag,&args->tmp_arr1,&args->ntmp_arr1); + bcf_update_info_string(args->hdr,dst,tag,args->tmp_arr1); + } +} +static void merge_format_genotype(args_t *args, bcf1_t **lines, int nlines, bcf_fmt_t *fmt, bcf1_t *dst) +{ + int ntmp = args->ntmp_arr1 / 4; + int ngts = bcf_get_genotypes(args->hdr,lines[0],&args->tmp_arr1,&ntmp); + args->ntmp_arr1 = ntmp * 4; + assert( ngts >0 ); + + int nsmpl = bcf_hdr_nsamples(args->hdr); + ngts /= nsmpl; + + int i, j, k; + for (i=1; intmp_arr2 / 4; + int ngts2 = bcf_get_genotypes(args->hdr,lines[i],&args->tmp_arr2,&ntmp2); + args->ntmp_arr2 = ntmp2 * 4; + ngts2 /= nsmpl; + if ( ngts!=ngts2 ) error("Error at %s:%d: cannot combine diploid with haploid genotype\n", bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); + + int32_t *gt = (int32_t*) args->tmp_arr1; + int32_t *gt2 = (int32_t*) args->tmp_arr2; + for (j=0; j=args->maps[i].nals ) error("Error at %s:%d: incorrect allele index %d\n",bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1,ial); + gt[k] = bcf_gt_unphased( args->maps[i].map[ial] ) | bcf_gt_is_phased(gt[k]); + } + } + gt += ngts; + gt2 += ngts; + } + } + bcf_update_genotypes(args->hdr,dst,args->tmp_arr1,ngts*nsmpl); +} +static int diploid_to_haploid(int size, int nsmpl, int nals, uint8_t *vals) +{ + int i, dsrc = size*nals*(nals+1)/2, ddst = size*nals; + uint8_t *src_ptr = vals + dsrc, *dst_ptr = vals + ddst; + for (i=1; ihdr,BCF_DT_ID,fmt->id); \ + int ntmp = args->ntmp_arr1 / sizeof(type_t); \ + int nvals_ori = bcf_get_format_##type(args->hdr,lines[0],tag,&args->tmp_arr1,&ntmp); \ + args->ntmp_arr1 = ntmp * sizeof(type_t); \ + assert( nvals_ori>0 ); \ + type_t *vals2, *vals = (type_t *) args->tmp_arr1; \ + int len = bcf_hdr_id2length(args->hdr,BCF_HL_FMT,fmt->id); \ + int i, j, k, nsmpl = bcf_hdr_nsamples(args->hdr); \ + nvals_ori /= nsmpl; \ + if ( len==BCF_VL_A ) \ + { \ + int nvals = dst->n_allele - 1; \ + ENLARGE_ARRAY(type_t,set_missing,args->tmp_arr1,args->ntmp_arr1,nsmpl,nvals_ori,nvals); \ + for (i=1; intmp_arr2 / sizeof(type_t); \ + int nvals2 = bcf_get_format_##type(args->hdr,lines[i],tag,&args->tmp_arr2,&ntmp2); \ + if (nvals2<0) continue; /* format tag does not exist in this record, skip */ \ + args->ntmp_arr2 = ntmp2 * sizeof(type_t); \ + nvals2 /= nsmpl; \ + if (nvals2!=lines[i]->n_allele-1) \ + error("vcfnorm: could not merge FORMAT tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \ + vals = (type_t*) args->tmp_arr1; \ + vals2 = (type_t*) args->tmp_arr2; \ + for (j=0; jmaps[i].map[k+1] - 1 ] = vals2[k]; \ + } \ + vals += nvals; \ + vals2 += nvals2; \ + } \ + } \ + bcf_update_format_##type(args->hdr,dst,tag,args->tmp_arr1,nvals*nsmpl); \ + } \ + else if ( len==BCF_VL_R ) \ + { \ + int nvals = dst->n_allele; \ + ENLARGE_ARRAY(type_t,set_missing,args->tmp_arr1,args->ntmp_arr1,nsmpl,nvals_ori,nvals); \ + for (i=1; intmp_arr2 / sizeof(type_t); \ + int nvals2 = bcf_get_format_##type(args->hdr,lines[i],tag,&args->tmp_arr2,&ntmp2); \ + if (nvals2<0) continue; /* format tag does not exist in this record, skip */ \ + args->ntmp_arr2 = ntmp2 * sizeof(type_t); \ + nvals2 /= nsmpl; \ + if (nvals2!=lines[i]->n_allele) \ + error("vcfnorm: could not merge FORMAT tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \ + vals = (type_t*) args->tmp_arr1; \ + vals2 = (type_t*) args->tmp_arr2; \ + for (j=0; jmaps[i].map[k] ] = vals2[k]; \ + } \ + vals += nvals; \ + vals2 += nvals2; \ + } \ + } \ + bcf_update_format_##type(args->hdr,dst,tag,args->tmp_arr1,nvals*nsmpl); \ + } \ + else if ( len==BCF_VL_G ) \ + { \ + /* which samples are diploid */ \ + memset(args->diploid,0,nsmpl); \ + int all_haploid = 1; \ + if ( nvals_ori > lines[0]->n_allele ) /* line possibly diploid */ \ + { \ + vals2 = (type_t*) args->tmp_arr1; \ + int ndiploid = lines[0]->n_allele*(lines[0]->n_allele+1)/2; \ + for (i=0; idiploid[i] ) \ + { \ + for (k=0; kdiploid[i] = 1; all_haploid = 0; }\ + } \ + vals2 += nvals_ori; \ + } \ + } \ + int nvals = dst->n_allele*(dst->n_allele+1)/2; \ + ENLARGE_ARRAY(type_t,set_missing,args->tmp_arr1,args->ntmp_arr1,nsmpl,nvals_ori,nvals); \ + for (i=1; intmp_arr2 / sizeof(type_t); \ + int nvals2 = bcf_get_format_##type(args->hdr,lines[i],tag,&args->tmp_arr2,&ntmp2); \ + if (nvals2<0) continue; /* format tag does not exist in this record, skip */ \ + args->ntmp_arr2 = ntmp2 * sizeof(type_t); \ + nvals2 /= nsmpl; \ + int ndiploid = lines[i]->n_allele*(lines[i]->n_allele+1)/2; \ + int line_diploid = nvals2==ndiploid ? 1 : 0; \ + if (!(nvals2==1 || nvals2==lines[i]->n_allele || nvals2==lines[i]->n_allele*(lines[i]->n_allele+1)/2)) \ + error("vcfnorm: could not merge FORMAT tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \ + vals = (type_t*) args->tmp_arr1; \ + vals2 = (type_t*) args->tmp_arr2; \ + for (j=0; jdiploid[j] ) { args->diploid[j] = 1; all_haploid = 0; } \ + if ( !smpl_diploid ) \ + { \ + for (k=0; kn_allele; k++) vals[args->maps[i].map[k]] = vals2[k]; \ + } \ + else \ + { \ + k = 0; \ + int ia,ib; \ + for (ia=0; ian_allele; ia++) \ + { \ + for (ib=0; ib<=ia; ib++) \ + { \ + int l = bcf_alleles2gt(args->maps[i].map[ia],args->maps[i].map[ib]); \ + vals[l] = vals2[k]; \ + k++; \ + } \ + } \ + } \ + vals += nvals; \ + vals2 += nvals2; \ + } \ + } \ + if ( all_haploid ) \ + nvals = diploid_to_haploid(sizeof(type_t),nsmpl,dst->n_allele,args->tmp_arr1); \ + else \ + {\ + k = dst->n_allele;\ + vals2 = (type_t*) args->tmp_arr1;\ + for (i=0; idiploid[i] ) set_vector_end;\ + vals2 += nvals;\ + }\ + }\ + bcf_update_format_##type(args->hdr,dst,tag,args->tmp_arr1,nvals*nsmpl); \ + } \ + else \ + bcf_update_format_##type(args->hdr,dst,tag,args->tmp_arr1,nvals_ori*nsmpl); \ + } + switch (bcf_hdr_id2type(args->hdr,BCF_HL_FMT,fmt->id)) + { + case BCF_HT_INT: BRANCH_NUMERIC(int32, int32_t, dst_ptr[k]=bcf_int32_missing, vals2[k]==bcf_int32_vector_end, vals2[k]=bcf_int32_vector_end); break; + case BCF_HT_REAL: BRANCH_NUMERIC(float, float, bcf_float_set_missing(dst_ptr[k]), bcf_float_is_vector_end(vals2[k]), bcf_float_set_vector_end(vals2[k])); break; + } + #undef BRANCH_NUMERIC +} +static void merge_format_string(args_t *args, bcf1_t **lines, int nlines, bcf_fmt_t *fmt, bcf1_t *dst) +{ + const char *tag = bcf_hdr_int2id(args->hdr,BCF_DT_ID,fmt->id); + + int i, j, k, len = bcf_hdr_id2length(args->hdr,BCF_HL_FMT,fmt->id); + if ( len!=BCF_VL_A && len!=BCF_VL_R && len!=BCF_VL_G ) + { + int nret = bcf_get_format_char(args->hdr,lines[0],tag,&args->tmp_arr1,&args->ntmp_arr1); + bcf_update_format_char(args->hdr,dst,tag,args->tmp_arr1,nret); + return; + } + + int nsmpl = bcf_hdr_nsamples(args->hdr); + for (i=0; itmp_str[i].l = 0; + + if ( len==BCF_VL_A || len==BCF_VL_R ) + { + int jfrom = len==BCF_VL_A ? 1 : 0; + for (i=0; itmp_str[i]; + kputc('.',tmp); + for (k=jfrom+1; kn_allele; k++) kputs(",.",tmp); + } + for (i=0; ihdr,lines[i],tag,&args->tmp_arr1,&args->ntmp_arr1); + if (nret<0) continue; /* format tag does not exist in this record, skip */ \ + nret /= nsmpl; + for (k=0; ktmp_str[k]; + char *src = (char*)args->tmp_arr1 + k*nret; + for (j=jfrom; jn_allele; j++) + copy_string_field(src, j-jfrom, nret, tmp, args->maps[i].map[j]-jfrom); + } + } + } + else if ( len==BCF_VL_G ) + { + hts_expand(uint8_t,nsmpl,args->ntmp_arr2,args->tmp_arr2); + uint8_t *haploid = args->tmp_arr2; + int nret = bcf_get_format_char(args->hdr,lines[0],tag,&args->tmp_arr1,&args->ntmp_arr1); + nret /= nsmpl; + for (i=0; itmp_arr1 + i*nret, *se = ss+nret; + int nfields = 1; + while ( *ss && ssn_allele ) + { + haploid[i] = 1; + nfields = dst->n_allele; + } + else if ( nfields==lines[0]->n_allele*(lines[0]->n_allele+1)/2 ) + { + haploid[i] = 0; + nfields = dst->n_allele*(dst->n_allele+1)/2; + } + else error("The field %s at %s:%d neither diploid nor haploid?\n", tag,bcf_seqname(args->hdr,dst),dst->pos+1); + + kstring_t *tmp = &args->tmp_str[i]; + kputc('.',tmp); + for (j=1; jhdr,lines[i],tag,&args->tmp_arr1,&args->ntmp_arr1); + if (nret<0) continue; /* format tag does not exist in this record, skip */ \ + nret /= nsmpl; + } + for (k=0; ktmp_str[k]; + char *src = (char*)args->tmp_arr1 + k*nret; + if ( haploid[k] ) + { + for (j=0; jn_allele; j++) + copy_string_field(src,j,nret, tmp, args->maps[i].map[j]); + } + else + { + int iori, jori, kori = 0; + for (iori=0; iorin_allele; iori++) + { + int inew = args->maps[i].map[iori]; + for (jori=0; jori<=iori; jori++) + { + int jnew = args->maps[i].map[jori]; + int knew = bcf_alleles2gt(inew,jnew); + copy_string_field(src,kori,nret,tmp,knew); + kori++; + } + } + } + } + } + } + kstring_t str; + str.m = args->ntmp_arr2; + str.l = 0; + str.s = (char*) args->tmp_arr2; + + int max_len = 0; + for (i=0; itmp_str[i].l ) max_len = args->tmp_str[i].l; + for (i=0; itmp_str[i]; + kputsn(tmp->s,tmp->l,&str); + for (j=tmp->l; jntmp_arr2 = str.m; + args->tmp_arr2 = (uint8_t*)str.s; + bcf_update_format_char(args->hdr,dst,tag,str.s,str.l); +} + +char **merge_alleles(char **a, int na, int *map, char **b, int *nb, int *mb); // see vcfmerge.c +static void merge_biallelics_to_multiallelic(args_t *args, bcf1_t *dst, bcf1_t **lines, int nlines) +{ + int i; + for (i=0; irid = lines[0]->rid; + dst->pos = lines[0]->pos; + + // take max for QUAL + bcf_float_set_missing(dst->qual); + for (i=0; iqual)) continue; + if (bcf_float_is_missing(dst->qual) || dst->qualqual) + dst->qual = lines[i]->qual; + } + + bcf_update_id(args->hdr, dst, lines[0]->d.id); + + // Merge and set the alleles, create a mapping from source allele indexes to dst idxs + hts_expand0(map_t,nlines,args->mmaps,args->maps); // a mapping for each line + args->nals = args->maps[0].nals = lines[0]->n_allele; + hts_expand(int,args->maps[0].nals,args->maps[0].mals,args->maps[0].map); + hts_expand(char*,args->nals,args->mals,args->als); + for (i=0; imaps[0].nals; i++) + { + args->maps[0].map[i] = i; + args->als[i] = strdup(lines[0]->d.allele[i]); + } + for (i=1; id.id[0]!='.' || lines[i]->d.id[1]) bcf_add_id(args->hdr, dst, lines[i]->d.id); + args->maps[i].nals = lines[i]->n_allele; + hts_expand(int,args->maps[i].nals,args->maps[i].mals,args->maps[i].map); + args->als = merge_alleles(lines[i]->d.allele, lines[i]->n_allele, args->maps[i].map, args->als, &args->nals, &args->mals); + if ( !args->als ) error("Failed to merge alleles at %s:%d\n", bcf_seqname(args->hdr,dst),dst->pos+1); + } + bcf_update_alleles(args->hdr, dst, (const char**)args->als, args->nals); + for (i=0; inals; i++) + { + free(args->als[i]); + args->als[i] = NULL; + } + + if ( lines[0]->d.n_flt ) bcf_update_filter(args->hdr, dst, lines[0]->d.flt, lines[0]->d.n_flt); + for (i=1; id.n_flt; j++) { + // if strict_filter, set FILTER to PASS if any site PASS + // otherwise accumulate FILTERs + if (lines[i]->d.flt[j] == bcf_hdr_id2int(args->hdr, BCF_DT_ID, "PASS")) { + if (args->strict_filter) { + bcf_update_filter(args->hdr, dst, lines[i]->d.flt, lines[i]->d.n_flt); + break; + } + else + continue; + } + bcf_add_filter(args->hdr, dst, lines[i]->d.flt[j]); + } + } + + // merge info + for (i=0; in_info; i++) + { + bcf_info_t *info = &lines[0]->d.info[i]; + int type = bcf_hdr_id2type(args->hdr,BCF_HL_INFO,info->key); + if ( type==BCF_HT_INT || type==BCF_HT_REAL ) merge_info_numeric(args, lines, nlines, info, dst); + else if ( type==BCF_HT_FLAG ) merge_info_flag(args, lines, nlines, info, dst); + else merge_info_string(args, lines, nlines, info, dst); + } + + // merge format + int gt_id = bcf_hdr_id2int(args->hdr,BCF_DT_ID,"GT"); + dst->n_sample = lines[0]->n_sample; + for (i=0; in_fmt; i++) + { + bcf_fmt_t *fmt = &lines[0]->d.fmt[i]; + int type = bcf_hdr_id2type(args->hdr,BCF_HL_FMT,fmt->id); + if ( fmt->id==gt_id ) merge_format_genotype(args, lines, nlines, fmt, dst); + else if ( type==BCF_HT_INT || type==BCF_HT_REAL ) merge_format_numeric(args, lines, nlines, fmt, dst); + else merge_format_string(args, lines, nlines, fmt, dst); + } +} + +#define SWAP(type_t, a, b) { type_t t = a; a = b; b = t; } +static void mrows_schedule(args_t *args, bcf1_t **line) +{ + int i,m; + if ( args->mrows_collapse==COLLAPSE_ANY // merge all record types together + || bcf_get_variant_types(*line)&VCF_SNP // SNP, put into alines + || bcf_get_variant_types(*line)==VCF_REF ) // ref + { + args->nalines++; + m = args->malines; + hts_expand(bcf1_t*,args->nalines,args->malines,args->alines); + for (i=m; imalines; i++) args->alines[i] = bcf_init1(); + SWAP(bcf1_t*, args->alines[args->nalines-1], *line); + } + else + { + args->nblines++; + m = args->mblines; + hts_expand(bcf1_t*,args->nblines,args->mblines,args->blines); + for (i=m; imblines; i++) args->blines[i] = bcf_init1(); + SWAP(bcf1_t*, args->blines[args->nblines-1], *line); + } +} +static int mrows_ready_to_flush(args_t *args, bcf1_t *line) +{ + if ( args->nalines && (args->alines[0]->rid!=line->rid || args->alines[0]->pos!=line->pos) ) return 1; + if ( args->nblines && (args->blines[0]->rid!=line->rid || args->blines[0]->pos!=line->pos) ) return 1; + return 0; +} +static bcf1_t *mrows_flush(args_t *args) +{ + if ( args->nblines && args->nalines==1 && bcf_get_variant_types(args->alines[0])==VCF_REF ) + { + // By default, REF lines are merged with SNPs if SNPs and indels are to be kept separately. + // However, if there are indels only and a single REF line, merge it with indels. + args->nblines++; + int i,m = args->mblines; + hts_expand(bcf1_t*,args->nblines,args->mblines,args->blines); + for (i=m; imblines; i++) args->blines[i] = bcf_init1(); + SWAP(bcf1_t*, args->blines[args->nblines-1], args->alines[0]); + args->nalines--; + } + if ( args->nalines ) + { + if ( args->nalines==1 ) + { + args->nalines = 0; + return args->alines[0]; + } + bcf_clear(args->mrow_out); + merge_biallelics_to_multiallelic(args, args->mrow_out, args->alines, args->nalines); + args->nalines = 0; + return args->mrow_out; + } + else if ( args->nblines ) + { + if ( args->nblines==1 ) + { + args->nblines = 0; + return args->blines[0]; + } + bcf_clear(args->mrow_out); + merge_biallelics_to_multiallelic(args, args->mrow_out, args->blines, args->nblines); + args->nblines = 0; + return args->mrow_out; + } + return NULL; +} +static void flush_buffer(args_t *args, htsFile *file, int n) +{ + bcf1_t *line; + int i, k; + int prev_rid = -1, prev_pos = -1, prev_type = 0; + for (i=0; irbuf); + if ( args->mrows_op==MROWS_MERGE ) + { + if ( mrows_ready_to_flush(args, args->lines[k]) ) + { + while ( (line=mrows_flush(args)) ) bcf_write1(file, args->hdr, line); + } + int merge = 1; + if ( args->mrows_collapse!=COLLAPSE_BOTH && args->mrows_collapse!=COLLAPSE_ANY ) + { + if ( !(bcf_get_variant_types(args->lines[k]) & args->mrows_collapse) ) merge = 0; + } + if ( merge ) + { + mrows_schedule(args, &args->lines[k]); + continue; + } + } + else if ( args->rmdup ) + { + int line_type = bcf_get_variant_types(args->lines[k]); + if ( prev_rid>=0 && prev_rid==args->lines[k]->rid && prev_pos==args->lines[k]->pos ) + { + if ( (args->rmdup>>1)&COLLAPSE_ANY ) continue; + if ( (args->rmdup>>1)&COLLAPSE_SNPS && line_type&(VCF_SNP|VCF_MNP) && prev_type&(VCF_SNP|VCF_MNP) ) continue; + if ( (args->rmdup>>1)&COLLAPSE_INDELS && line_type&(VCF_INDEL) && prev_type&(VCF_INDEL) ) continue; + } + else + { + prev_rid = args->lines[k]->rid; + prev_pos = args->lines[k]->pos; + prev_type = 0; + } + prev_type |= line_type; + } + bcf_write1(file, args->hdr, args->lines[k]); + } + if ( args->mrows_op==MROWS_MERGE && !args->rbuf.n ) + { + while ( (line=mrows_flush(args)) ) bcf_write1(file, args->hdr, line); + } +} + +static void init_data(args_t *args) +{ + args->hdr = args->files->readers[0].header; + rbuf_init(&args->rbuf, 100); + args->lines = (bcf1_t**) calloc(args->rbuf.m, sizeof(bcf1_t*)); + if ( args->ref_fname ) + { + args->fai = fai_load(args->ref_fname); + if ( !args->fai ) error("Failed to load the fai index: %s\n", args->ref_fname); + } + if ( args->mrows_op==MROWS_MERGE ) + { + args->mrow_out = bcf_init1(); + args->tmp_str = (kstring_t*) calloc(bcf_hdr_nsamples(args->hdr),sizeof(kstring_t)); + args->diploid = (uint8_t*) malloc(bcf_hdr_nsamples(args->hdr)); + } +} + +static void destroy_data(args_t *args) +{ + int i; + for (i=0; irbuf.m; i++) + if ( args->lines[i] ) bcf_destroy1(args->lines[i]); + free(args->lines); + for (i=0; imtmp_lines; i++) + if ( args->tmp_lines[i] ) bcf_destroy1(args->tmp_lines[i]); + free(args->tmp_lines); + for (i=0; imalines; i++) + bcf_destroy1(args->alines[i]); + free(args->alines); + for (i=0; imblines; i++) + bcf_destroy1(args->blines[i]); + free(args->blines); + for (i=0; immaps; i++) + free(args->maps[i].map); + for (i=0; intmp_als; i++) + free(args->tmp_als[i].s); + free(args->tmp_als); + free(args->tmp_als_str.s); + if ( args->tmp_str ) + { + for (i=0; ihdr); i++) free(args->tmp_str[i].s); + free(args->tmp_str); + } + free(args->maps); + free(args->als); + free(args->tmp_arr1); + free(args->tmp_arr2); + free(args->diploid); + if ( args->mrow_out ) bcf_destroy1(args->mrow_out); + if ( args->fai ) fai_destroy(args->fai); + if ( args->mseq ) free(args->seq); +} + + +static void normalize_line(args_t *args, bcf1_t **line_ptr) +{ + bcf1_t *line = *line_ptr; + if ( args->fai ) + { + if ( args->check_ref & CHECK_REF_FIX ) fix_ref(args, line); + if ( args->do_indels ) + { + int ret = realign(args, line); + + // exclude broken VCF lines + if ( ret==ERR_REF_MISMATCH && args->check_ref & CHECK_REF_SKIP ) + { + args->nskipped++; + return; + } + if ( ret==ERR_DUP_ALLELE ) + { + if ( args->check_ref & CHECK_REF_FIX ) + fix_dup_alt(args, line); + else if ( args->check_ref==CHECK_REF_EXIT ) + error("Duplicate alleles at %s:%d; run with -cw to turn the error into warning or with -cs to fix.\n", bcf_seqname(args->hdr,line),line->pos+1); + else if ( args->check_ref & CHECK_REF_WARN ) + fprintf(bcftools_stderr,"ALT_DUP\t%s\t%d\n", bcf_seqname(args->hdr,line),line->pos+1); + } + } + } + + // insert into sorted buffer + rbuf_expand0(&args->rbuf,bcf1_t*,args->rbuf.n+1,args->lines); + int i,j; + i = j = rbuf_append(&args->rbuf); + if ( !args->lines[i] ) args->lines[i] = bcf_init1(); + SWAP(bcf1_t*, (*line_ptr), args->lines[i]); + while ( rbuf_prev(&args->rbuf,&i) ) + { + if ( args->lines[i]->pos > args->lines[j]->pos ) SWAP(bcf1_t*, args->lines[i], args->lines[j]); + j = i; + } +} + +static void normalize_vcf(args_t *args) +{ + htsFile *out = hts_open(args->output_fname, hts_bcf_wmode(args->output_type)); + if ( out == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno)); + if ( args->n_threads ) + hts_set_opt(out, HTS_OPT_THREAD_POOL, args->files->p); + if (args->record_cmd_line) bcf_hdr_append_version(args->hdr, args->argc, args->argv, "bcftools_norm"); + bcf_hdr_write(out, args->hdr); + + int prev_rid = -1, prev_pos = -1, prev_type = 0; + while ( bcf_sr_next_line(args->files) ) + { + args->ntotal++; + + bcf1_t *line = args->files->readers[0].buffer[0]; + if ( args->rmdup ) + { + int line_type = bcf_get_variant_types(line); + if ( prev_rid>=0 && prev_rid==line->rid && prev_pos==line->pos ) + { + if ( (args->rmdup>>1)&COLLAPSE_ANY ) continue; + if ( (args->rmdup>>1)&COLLAPSE_SNPS && line_type&(VCF_SNP|VCF_MNP) && prev_type&(VCF_SNP|VCF_MNP) ) continue; + if ( (args->rmdup>>1)&COLLAPSE_INDELS && line_type&(VCF_INDEL) && prev_type&(VCF_INDEL) ) continue; + } + else + { + prev_rid = line->rid; + prev_pos = line->pos; + prev_type = 0; + } + prev_type |= line_type; + } + + // still on the same chromosome? + int i,j,ilast = rbuf_last(&args->rbuf); + if ( ilast>=0 && line->rid != args->lines[ilast]->rid ) flush_buffer(args, out, args->rbuf.n); // new chromosome + + int split = 0; + if ( args->mrows_op==MROWS_SPLIT ) + { + split = 1; + if ( args->mrows_collapse!=COLLAPSE_BOTH && args->mrows_collapse!=COLLAPSE_ANY ) + { + if ( !(bcf_get_variant_types(line) & args->mrows_collapse) ) split = 0; + } + if ( split && line->n_allele>2 ) + { + args->nsplit++; + split_multiallelic_to_biallelics(args, line); + for (j=0; jntmp_lines; j++) + normalize_line(args, &args->tmp_lines[j]); + } + else + split = 0; + } + if ( !split ) + normalize_line(args, &args->files->readers[0].buffer[0]); + + // find out how many sites to flush + ilast = rbuf_last(&args->rbuf); + j = 0; + for (i=-1; rbuf_next(&args->rbuf,&i); ) + { + if ( args->lines[ilast]->pos - args->lines[i]->pos < args->buf_win ) break; + j++; + } + if ( j>0 ) flush_buffer(args, out, j); + } + flush_buffer(args, out, args->rbuf.n); + hts_close(out); + + fprintf(bcftools_stderr,"Lines total/split/realigned/skipped:\t%d/%d/%d/%d\n", args->ntotal,args->nsplit,args->nchanged,args->nskipped); + if ( args->check_ref & CHECK_REF_FIX ) + fprintf(bcftools_stderr,"REF/ALT total/modified/added: \t%d/%d/%d\n", args->nref.tot,args->nref.swap,args->nref.set); +} + +static void usage(void) +{ + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "About: Left-align and normalize indels; check if REF alleles match the reference;\n"); + fprintf(bcftools_stderr, " split multiallelic sites into multiple rows; recover multiallelics from\n"); + fprintf(bcftools_stderr, " multiple rows.\n"); + fprintf(bcftools_stderr, "Usage: bcftools norm [options] \n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Options:\n"); + fprintf(bcftools_stderr, " -c, --check-ref check REF alleles and exit (e), warn (w), exclude (x), or set (s) bad sites [e]\n"); + fprintf(bcftools_stderr, " -D, --remove-duplicates remove duplicate lines of the same type.\n"); + fprintf(bcftools_stderr, " -d, --rm-dup remove duplicate snps|indels|both|any\n"); + fprintf(bcftools_stderr, " -f, --fasta-ref reference sequence (MANDATORY)\n"); + fprintf(bcftools_stderr, " -m, --multiallelics <-|+>[type] split multiallelics (-) or join biallelics (+), type: snps|indels|both|any [both]\n"); + fprintf(bcftools_stderr, " --no-version do not append version and command line to the header\n"); + fprintf(bcftools_stderr, " -N, --do-not-normalize do not normalize indels (with -m or -c s)\n"); + fprintf(bcftools_stderr, " -o, --output write output to a file [standard output]\n"); + fprintf(bcftools_stderr, " -O, --output-type 'b' compressed BCF; 'u' uncompressed BCF; 'z' compressed VCF; 'v' uncompressed VCF [v]\n"); + fprintf(bcftools_stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(bcftools_stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(bcftools_stderr, " -s, --strict-filter when merging (-m+), merged site is PASS only if all sites being merged PASS\n"); + fprintf(bcftools_stderr, " -t, --targets similar to -r but streams rather than index-jumps\n"); + fprintf(bcftools_stderr, " -T, --targets-file similar to -R but streams rather than index-jumps\n"); + fprintf(bcftools_stderr, " --threads number of extra (de)compression threads [0]\n"); + fprintf(bcftools_stderr, " -w, --site-win buffer for sorting lines which changed position during realignment [1000]\n"); + fprintf(bcftools_stderr, "\n"); + exit(1); +} + +int main_vcfnorm(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->files = bcf_sr_init(); + args->output_fname = "-"; + args->output_type = FT_VCF; + args->n_threads = 0; + args->record_cmd_line = 1; + args->aln_win = 100; + args->buf_win = 1000; + args->mrows_collapse = COLLAPSE_BOTH; + args->do_indels = 1; + int region_is_file = 0; + int targets_is_file = 0; + + static struct option loptions[] = + { + {"help",no_argument,NULL,'h'}, + {"fasta-ref",required_argument,NULL,'f'}, + {"do-not-normalize",no_argument,NULL,'N'}, + {"multiallelics",required_argument,NULL,'m'}, + {"regions",required_argument,NULL,'r'}, + {"regions-file",required_argument,NULL,'R'}, + {"targets",required_argument,NULL,'t'}, + {"targets-file",required_argument,NULL,'T'}, + {"site-win",required_argument,NULL,'w'}, + {"remove-duplicates",no_argument,NULL,'D'}, + {"rm-dup",required_argument,NULL,'d'}, + {"output",required_argument,NULL,'o'}, + {"output-type",required_argument,NULL,'O'}, + {"threads",required_argument,NULL,9}, + {"check-ref",required_argument,NULL,'c'}, + {"strict-filter",no_argument,NULL,'s'}, + {"no-version",no_argument,NULL,8}, + {NULL,0,NULL,0} + }; + char *tmp; + while ((c = getopt_long(argc, argv, "hr:R:f:w:Dd:o:O:c:m:t:T:sN",loptions,NULL)) >= 0) { + switch (c) { + case 'N': args->do_indels = 0; break; + case 'd': + if ( !strcmp("snps",optarg) ) args->rmdup = COLLAPSE_SNPS<<1; + else if ( !strcmp("indels",optarg) ) args->rmdup = COLLAPSE_INDELS<<1; + else if ( !strcmp("both",optarg) ) args->rmdup = COLLAPSE_BOTH<<1; + else if ( !strcmp("any",optarg) ) args->rmdup = COLLAPSE_ANY<<1; + else error("The argument to -d not recognised: %s\n", optarg); + break; + case 'm': + if ( optarg[0]=='-' ) args->mrows_op = MROWS_SPLIT; + else if ( optarg[0]=='+' ) args->mrows_op = MROWS_MERGE; + else error("Expected '+' or '-' with -m\n"); + if ( optarg[1]!=0 ) + { + if ( !strcmp("snps",optarg+1) ) args->mrows_collapse = COLLAPSE_SNPS; + else if ( !strcmp("indels",optarg+1) ) args->mrows_collapse = COLLAPSE_INDELS; + else if ( !strcmp("both",optarg+1) ) args->mrows_collapse = COLLAPSE_BOTH; + else if ( !strcmp("any",optarg+1) ) args->mrows_collapse = COLLAPSE_ANY; + else error("The argument to -m not recognised: %s\n", optarg); + } + break; + case 'c': + if ( strchr(optarg,'w') ) args->check_ref |= CHECK_REF_WARN; + if ( strchr(optarg,'x') ) args->check_ref |= CHECK_REF_SKIP; + if ( strchr(optarg,'s') ) args->check_ref |= CHECK_REF_FIX; + if ( strchr(optarg,'e') ) args->check_ref = CHECK_REF_EXIT; // overrides the above + break; + case 'O': + switch (optarg[0]) { + case 'b': args->output_type = FT_BCF_GZ; break; + case 'u': args->output_type = FT_BCF; break; + case 'z': args->output_type = FT_VCF_GZ; break; + case 'v': args->output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + } + break; + case 'o': args->output_fname = optarg; break; + case 'D': + fprintf(bcftools_stderr,"Warning: `-D` is functional but deprecated, replaced by `-d both`.\n"); + args->rmdup = COLLAPSE_NONE<<1; + break; + case 's': args->strict_filter = 1; break; + case 'f': args->ref_fname = optarg; break; + case 'r': args->region = optarg; break; + case 'R': args->region = optarg; region_is_file = 1; break; + case 't': args->targets = optarg; break; + case 'T': args->targets = optarg; targets_is_file = 1; break; + case 'w': + args->buf_win = strtol(optarg,&tmp,10); + if ( *tmp ) error("Could not parse argument: --site-win %s\n", optarg); + break; + case 9 : args->n_threads = strtol(optarg, 0, 0); break; + case 8 : args->record_cmd_line = 0; break; + case 'h': + case '?': usage(); + default: error("Unknown argument: %s\n", optarg); + } + } + if ( argc>optind+1 ) usage(); + if ( !args->ref_fname && !args->mrows_op && !args->rmdup ) usage(); + if ( !args->ref_fname && args->check_ref&CHECK_REF_FIX ) error("Expected --fasta-ref with --check-ref s\n"); + char *fname = NULL; + if ( optind>=argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin + else usage(); + } + else fname = argv[optind]; + + if ( args->region ) + { + if ( bcf_sr_set_regions(args->files, args->region,region_is_file)<0 ) + error("Failed to read the regions: %s\n", args->region); + } + if ( args->targets ) + { + if ( bcf_sr_set_targets(args->files, args->targets,targets_is_file, 0)<0 ) + error("Failed to read the targets: %s\n", args->targets); + } + + if ( bcf_sr_set_threads(args->files, args->n_threads)<0 ) error("Failed to create threads\n"); + if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); + if ( args->mrows_op&MROWS_SPLIT && args->rmdup ) error("Cannot combine -D and -m-\n"); + init_data(args); + normalize_vcf(args); + destroy_data(args); + bcf_sr_destroy(args->files); + free(args); + return 0; +} + diff --git a/bcftools/vcfplugin.c b/bcftools/vcfplugin.c new file mode 100644 index 0000000..a53ac3c --- /dev/null +++ b/bcftools/vcfplugin.c @@ -0,0 +1,657 @@ +/* vcfplugin.c -- plugin modules for operating on VCF/BCF files. + + Copyright (C) 2013-2016 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include "config.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "vcmp.h" +#include "filter.h" + +#ifdef ENABLE_BCF_PLUGINS + +typedef struct _plugin_t plugin_t; + +/** + * Plugin API: + * ---------- + * const char *about(void) + * - short description used by 'bcftools plugin -lv' + * + * const char *usage(void) + * - longer description used by 'bcftools +name -h' + * + * int run(int argc, char **argv) + * - if implemented, the control is immediately handed over to the plugin, + * none of the init/process/destroy functions is called. Return 0 on + * success or non-zero value on error. + * + * int init(int argc, char **argv, bcf_hdr_t *in_hdr, bcf_hdr_t *out_hdr) + * - called once at startup, allows to initialize local variables. + * Return 1 to suppress normal VCF/BCF header output, -1 on critical + * errors, 0 otherwise. + * + * bcf1_t *process(bcf1_t *rec) + * - called for each VCF record, return NULL for no output + * + * void destroy(void) + * - called after all lines have been processed to clean up + */ +typedef void (*dl_version_f) (const char **, const char **); +typedef int (*dl_run_f) (int, char **); +typedef int (*dl_init_f) (int, char **, bcf_hdr_t *, bcf_hdr_t *); +typedef char* (*dl_about_f) (void); +typedef char* (*dl_usage_f) (void); +typedef bcf1_t* (*dl_process_f) (bcf1_t *); +typedef void (*dl_destroy_f) (void); + +struct _plugin_t +{ + int argc; + char *name, **argv; + dl_version_f version; + dl_run_f run; + dl_init_f init; + dl_about_f about; + dl_usage_f usage; + dl_process_f process; + dl_destroy_f destroy; + void *handle; +}; + + +struct _args_t; + +typedef struct _rm_tag_t +{ + char *key; + int hdr_id; + void (*handler)(struct _args_t *, bcf1_t *, struct _rm_tag_t *); +} +rm_tag_t; + +typedef struct +{ + char **cols; + int ncols, mcols; + char **als; + int nals, mals; + kstring_t line; + int rid, start, end; +} +annot_line_t; + +typedef struct _annot_col_t +{ + int icol, replace; + char *hdr_key; + int (*setter)(struct _args_t *, bcf1_t *, struct _annot_col_t *, void*); +} +annot_col_t; + +// Logic of the filters: include or exclude sites which match the filters? +#define FLT_INCLUDE 1 +#define FLT_EXCLUDE 2 + +typedef struct _args_t +{ + bcf_srs_t *files; + bcf_hdr_t *hdr, *hdr_out; + htsFile *out_fh; + int output_type, n_threads; + + filter_t *filter; + char *filter_str; + int filter_logic; // include or exclude sites which match the filters? One of FLT_INCLUDE/FLT_EXCLUDE + + plugin_t plugin; + int nplugin_paths; + char **plugin_paths; + + char **argv, *output_fname, *regions_list, *targets_list; + int argc, drop_header, verbose, record_cmd_line; +} +args_t; + +char *msprintf(const char *fmt, ...); + +static void add_plugin_paths(args_t *args, const char *path) +{ + while (1) + { + size_t len = strcspn(path, ":"); + + if ( len == 0 ) + { +#ifdef PLUGINPATH + add_plugin_paths(args, PLUGINPATH); +#endif + } + else + { + char *dir = (char *) malloc(len + 1); + strncpy(dir, path, len); + dir[len] = '\0'; + + struct stat st; + if ( stat(dir, &st) == 0 ) + { + args->plugin_paths = (char**) realloc(args->plugin_paths,sizeof(char*)*(args->nplugin_paths+1)); + args->plugin_paths[args->nplugin_paths] = dir; + args->nplugin_paths++; + if ( args->verbose > 1 ) fprintf(stderr, "plugin directory %s .. ok\n", dir); + } + else + { + if ( args->verbose > 1 ) fprintf(stderr, "plugin directory %s .. %s\n", dir, strerror(errno)); + free(dir); + } + + } + + path += len; + if ( *path == ':' ) path++; + else break; + } +} + +static void init_plugin_paths(args_t *args) +{ + if ( args->nplugin_paths!=-1 ) return; + + args->nplugin_paths = 0; + args->plugin_paths = NULL; + + char *path = getenv("BCFTOOLS_PLUGINS"); + add_plugin_paths(args, path ? path : ""); +} + +static void *dlopen_plugin(args_t *args, const char *fname) +{ + init_plugin_paths(args); + + void *handle; + char *tmp; + if ( fname[0]!='/' ) // not an absolute path + { + int i; + for (i=0; inplugin_paths; i++) + { + tmp = msprintf("%s/%s%s", args->plugin_paths[i], fname, PLUGIN_EXT); + handle = dlopen(tmp, RTLD_NOW); // valgrind complains about unfreed memory, not our problem though + if ( args->verbose > 1 ) + { + if ( !handle ) fprintf(stderr,"%s:\n\tdlopen .. %s\n", tmp,dlerror()); + else fprintf(stderr,"%s:\n\tdlopen .. ok\n", tmp); + } + free(tmp); + if ( handle ) return handle; + } + } + + handle = dlopen(fname, RTLD_NOW); + if ( args->verbose > 1 ) + { + if ( !handle ) fprintf(stderr,"%s:\n\tdlopen .. %s\n", fname,dlerror()); + else fprintf(stderr,"%s:\n\tdlopen .. ok\n", fname); + } + + return handle; +} + +static void print_plugin_usage_hint(void) +{ + fprintf(stderr, "\nNo functional bcftools plugins were found"); + if ( !getenv("BCFTOOLS_PLUGINS") ) + fprintf(stderr,". The environment variable BCFTOOLS_PLUGINS is not set.\n\n"); + else + fprintf(stderr, + " in\n\tBCFTOOLS_PLUGINS=\"%s\".\n\n" + "- Is the plugin path correct?\n\n" + "- Run \"bcftools plugin -lv\" for more detailed error output.\n" + "\n", + getenv("BCFTOOLS_PLUGINS") + ); +} + +static int load_plugin(args_t *args, const char *fname, int exit_on_error, plugin_t *plugin) +{ + plugin->name = strdup(fname); + + plugin->handle = dlopen_plugin(args, fname); + if ( !plugin->handle ) + { + if ( exit_on_error ) + { + print_plugin_usage_hint(); + error("Could not load \"%s\".\n\n", fname); + } + return -1; + } + + dlerror(); + plugin->init = (dl_init_f) dlsym(plugin->handle, "init"); + char *ret = dlerror(); + if ( ret ) + plugin->init = NULL; + else + if ( args->verbose > 1 ) fprintf(stderr,"\tinit .. ok\n"); + + plugin->run = (dl_run_f) dlsym(plugin->handle, "run"); + ret = dlerror(); + if ( ret ) + plugin->run = NULL; + else + if ( args->verbose > 1 ) fprintf(stderr,"\trun .. ok\n"); + + if ( !plugin->init && !plugin->run ) + { + if ( exit_on_error ) error("Could not initialize %s, neither run or init found \n", plugin->name); + else if ( args->verbose > 1 ) fprintf(stderr,"\tinit/run .. not found\n"); + return -1; + } + + plugin->version = (dl_version_f) dlsym(plugin->handle, "version"); + ret = dlerror(); + if ( ret ) + { + if ( exit_on_error ) error("Could not initialize %s, version string not found\n", plugin->name); + else if ( args->verbose > 1 ) fprintf(stderr,"\tversion .. not found\n"); + return -1; + } + + plugin->about = (dl_about_f) dlsym(plugin->handle, "about"); + ret = dlerror(); + if ( ret ) + { + if ( exit_on_error ) error("Could not initialize %s: %s\n", plugin->name, ret); + return -1; + } + + plugin->usage = (dl_about_f) dlsym(plugin->handle, "usage"); + ret = dlerror(); + if ( ret ) + plugin->usage = plugin->about; + + if ( plugin->run ) return 0; + + plugin->process = (dl_process_f) dlsym(plugin->handle, "process"); + ret = dlerror(); + if ( ret ) + { + if ( exit_on_error ) error("Could not initialize %s: %s\n", plugin->name, ret); + return -1; + } + + plugin->destroy = (dl_destroy_f) dlsym(plugin->handle, "destroy"); + ret = dlerror(); + if ( ret ) + { + if ( exit_on_error ) error("Could not initialize %s: %s\n", plugin->name, ret); + return -1; + } + + return 0; +} + +static void init_plugin(args_t *args) +{ + static int warned_bcftools = 0, warned_htslib = 0; + + int ret = args->plugin.init(args->plugin.argc,args->plugin.argv,args->hdr,args->hdr_out); + if ( ret<0 ) error("The plugin exited with an error.\n"); + const char *bver, *hver; + args->plugin.version(&bver, &hver); + if ( strcmp(bver,bcftools_version()) && !warned_bcftools ) + { + fprintf(stderr,"WARNING: bcftools version mismatch .. bcftools at %s, the plugin \"%s\" at %s\n", bcftools_version(),args->plugin.name,bver); + warned_bcftools = 1; + } + if ( strcmp(hver,hts_version()) && !warned_htslib ) + { + fprintf(stderr,"WARNING: htslib version mismatch .. bcftools at %s, the plugin \"%s\" at %s\n", hts_version(),args->plugin.name,hver); + warned_htslib = 1; + } + args->drop_header += ret; +} + +static int cmp_plugin_name(const void *p1, const void *p2) +{ + plugin_t *a = (plugin_t*) p1; + plugin_t *b = (plugin_t*) p2; + return strcmp(a->name,b->name); +} + +static int list_plugins(args_t *args) +{ + plugin_t *plugins = NULL; + int nplugins = 0, mplugins = 0; + + init_plugin_paths(args); + + kstring_t str = {0,0,0}; + int plugin_ext_len = strlen(PLUGIN_EXT); + int i; + for (i=0; inplugin_paths; i++) + { + DIR *dp = opendir(args->plugin_paths[i]); + if ( dp==NULL ) continue; + + struct dirent *ep; + while ( (ep=readdir(dp)) ) + { + int len = strlen(ep->d_name); + if ( strcasecmp(PLUGIN_EXT,ep->d_name+len-plugin_ext_len) ) continue; + str.l = 0; + ksprintf(&str,"%s/%s", args->plugin_paths[i],ep->d_name); + hts_expand(plugin_t, nplugins+1, mplugins, plugins); + if ( load_plugin(args, str.s, 0, &plugins[nplugins]) < 0 ) continue; + nplugins++; + str.l = 0; + kputs(ep->d_name, &str); + int l = str.l - 1; + while ( l>=0 && str.s[l]!='.' ) l--; + if ( l>=0 ) str.s[l] = 0; + free(plugins[nplugins-1].name); + plugins[nplugins-1].name = strdup(str.s); // use a short name + } + closedir(dp); + } + if ( nplugins ) + { + qsort(plugins, nplugins, sizeof(plugins[0]), cmp_plugin_name); + + for (i=0; iverbose ) + printf("\n-- %s --\n%s", plugins[i].name, plugins[i].about()); + else + printf("%s\n", plugins[i].name); + } + if ( args->verbose ) printf("\n"); + } + else + print_plugin_usage_hint(); + free(str.s); + return nplugins ? 0 : 1; +} + +static void init_data(args_t *args) +{ + args->hdr = args->files->readers[0].header; + args->hdr_out = bcf_hdr_dup(args->hdr); + + init_plugin(args); + + if ( args->filter_str ) + args->filter = filter_init(args->hdr, args->filter_str); + + if (args->record_cmd_line) bcf_hdr_append_version(args->hdr_out, args->argc, args->argv, "bcftools_plugin"); + if ( !args->drop_header ) + { + args->out_fh = hts_open(args->output_fname,hts_bcf_wmode(args->output_type)); + if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno)); + if ( args->n_threads ) hts_set_threads(args->out_fh, args->n_threads); + bcf_hdr_write(args->out_fh, args->hdr_out); + } +} + +static void destroy_data(args_t *args) +{ + free(args->plugin.name); + if ( args->plugin.destroy ) args->plugin.destroy(); + dlclose(args->plugin.handle); + if ( args->hdr_out ) bcf_hdr_destroy(args->hdr_out); + if ( args->nplugin_paths>0 ) + { + int i; + for (i=0; inplugin_paths; i++) free(args->plugin_paths[i]); + free(args->plugin_paths); + } + if ( args->filter ) + filter_destroy(args->filter); + if (args->out_fh) hts_close(args->out_fh); +} + +static void usage(args_t *args) +{ + fprintf(stderr, "\n"); + fprintf(stderr, "About: Run user defined plugin\n"); + fprintf(stderr, "Usage: bcftools plugin [OPTIONS] [-- PLUGIN_OPTIONS]\n"); + fprintf(stderr, " bcftools +name [OPTIONS] [-- PLUGIN_OPTIONS]\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "VCF input options:\n"); + fprintf(stderr, " -e, --exclude exclude sites for which the expression is true\n"); + fprintf(stderr, " -i, --include select sites for which the expression is true\n"); + fprintf(stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(stderr, " -t, --targets similar to -r but streams rather than index-jumps\n"); + fprintf(stderr, " -T, --targets-file similar to -R but streams rather than index-jumps\n"); + fprintf(stderr, "VCF output options:\n"); + fprintf(stderr, " --no-version do not append version and command line to the header\n"); + fprintf(stderr, " -o, --output write output to a file [standard output]\n"); + fprintf(stderr, " -O, --output-type 'b' compressed BCF; 'u' uncompressed BCF; 'z' compressed VCF; 'v' uncompressed VCF [v]\n"); + fprintf(stderr, " --threads number of extra output compression threads [0]\n"); + fprintf(stderr, "Plugin options:\n"); + fprintf(stderr, " -h, --help list plugin's options\n"); + fprintf(stderr, " -l, --list-plugins list available plugins. See BCFTOOLS_PLUGINS environment variable and man page for details\n"); + fprintf(stderr, " -v, --verbose print verbose information, -vv increases verbosity\n"); + fprintf(stderr, " -V, --version print version string and exit\n"); + fprintf(stderr, "\n"); + exit(1); +} + +static int is_verbose(int argc, char *argv[]) +{ + int c, verbose = 0, opterr_ori = opterr; + static struct option loptions[] = + { + {"verbose",no_argument,NULL,'v'}, + {NULL,0,NULL,0} + }; + opterr = 0; + while ((c = getopt_long(argc, argv, "-v",loptions,NULL)) >= 0) + { + switch (c) { + case 'v': verbose++; break; + case 1: + default: break; + } + } + opterr = opterr_ori; + optind = 0; + return verbose; +} +int main_plugin(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->output_fname = "-"; + args->output_type = FT_VCF; + args->n_threads = 0; + args->record_cmd_line = 1; + args->nplugin_paths = -1; + int regions_is_file = 0, targets_is_file = 0, plist_only = 0, usage_only = 0, version_only = 0; + + if ( argc==1 ) usage(args); + + char *plugin_name = NULL; + if ( argv[1][0]!='-' ) + { + args->verbose = is_verbose(argc, argv); + plugin_name = argv[1]; + argc--; + argv++; + load_plugin(args, plugin_name, 1, &args->plugin); + if ( args->plugin.run ) + { + int ret = args->plugin.run(argc, argv); + destroy_data(args); + free(args); + return ret; + } + } + + static struct option loptions[] = + { + {"version",no_argument,NULL,'V'}, + {"verbose",no_argument,NULL,'v'}, + {"help",no_argument,NULL,'h'}, + {"list-plugins",no_argument,NULL,'l'}, + {"output",required_argument,NULL,'o'}, + {"output-type",required_argument,NULL,'O'}, + {"threads",required_argument,NULL,9}, + {"include",required_argument,NULL,'i'}, + {"exclude",required_argument,NULL,'e'}, + {"regions",required_argument,NULL,'r'}, + {"regions-file",required_argument,NULL,'R'}, + {"targets",required_argument,NULL,'t'}, + {"targets-file",required_argument,NULL,'T'}, + {"no-version",no_argument,NULL,8}, + {NULL,0,NULL,0} + }; + while ((c = getopt_long(argc, argv, "h?o:O:r:R:t:T:li:e:vV",loptions,NULL)) >= 0) + { + switch (c) { + case 'V': version_only = 1; break; + case 'v': args->verbose++; break; + case 'o': args->output_fname = optarg; break; + case 'O': + switch (optarg[0]) { + case 'b': args->output_type = FT_BCF_GZ; break; + case 'u': args->output_type = FT_BCF; break; + case 'z': args->output_type = FT_VCF_GZ; break; + case 'v': args->output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + }; + break; + case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break; + case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; regions_is_file = 1; break; + case 't': args->targets_list = optarg; break; + case 'T': args->targets_list = optarg; targets_is_file = 1; break; + case 'l': plist_only = 1; break; + case 9 : args->n_threads = strtol(optarg, 0, 0); break; + case 8 : args->record_cmd_line = 0; break; + case '?': + case 'h': usage_only = 1; break; + default: error("Unknown argument: %s\n", optarg); + } + } + if ( plist_only ) return list_plugins(args); + if ( usage_only && ! plugin_name ) usage(args); + + if ( version_only ) + { + const char *bver, *hver; + args->plugin.version(&bver, &hver); + printf("bcftools %s using htslib %s\n", bcftools_version(), hts_version()); + printf("plugin at %s using htslib %s\n\n", bver, hver); + return 0; + } + + if ( usage_only ) + { + if ( args->plugin.usage ) + fprintf(stderr,"%s",args->plugin.usage()); + else + fprintf(stderr,"Usage: bcftools +%s [General Options] -- [Plugin Options]\n",plugin_name); + return 0; + } + + char *fname = NULL; + if ( optind>=argc || argv[optind][0]=='-' ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin + else usage(args); + args->plugin.argc = argc - optind + 1; + args->plugin.argv = argv + optind - 1; + } + else + { + fname = argv[optind]; + args->plugin.argc = argc - optind; + args->plugin.argv = argv + optind; + } + optind = 0; + + args->files = bcf_sr_init(); + if ( args->regions_list ) + { + if ( bcf_sr_set_regions(args->files, args->regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + } + if ( args->targets_list ) + { + if ( bcf_sr_set_targets(args->files, args->targets_list, targets_is_file, 0)<0 ) + error("Failed to read the targets: %s\n", args->targets_list); + args->files->collapse |= COLLAPSE_SOME; + } + if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); + + init_data(args); + while ( bcf_sr_next_line(args->files) ) + { + bcf1_t *line = bcf_sr_get_line(args->files,0); + if ( args->filter ) + { + int pass = filter_test(args->filter, line, NULL); + if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1; + if ( !pass ) continue; + } + line = args->plugin.process(line); + if ( line ) bcf_write1(args->out_fh, args->hdr_out, line); + } + destroy_data(args); + bcf_sr_destroy(args->files); + free(args); + return 0; +} + +#else /* ENABLE_BCF_PLUGINS */ + +int main_plugin(int argc, char *argv[]) +{ + fprintf(stderr, "bcftools plugins are disabled. To use them, you will need to rebuild\n" + "bcftools from the source distribution with plugins enabled.\n"); + return 1; +} + +#endif /* ENABLE_BCF_PLUGINS */ diff --git a/bcftools/vcfplugin.c.pysam.c b/bcftools/vcfplugin.c.pysam.c new file mode 100644 index 0000000..f8e393b --- /dev/null +++ b/bcftools/vcfplugin.c.pysam.c @@ -0,0 +1,659 @@ +#include "bcftools.pysam.h" + +/* vcfplugin.c -- plugin modules for operating on VCF/BCF files. + + Copyright (C) 2013-2016 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include "config.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "vcmp.h" +#include "filter.h" + +#ifdef ENABLE_BCF_PLUGINS + +typedef struct _plugin_t plugin_t; + +/** + * Plugin API: + * ---------- + * const char *about(void) + * - short description used by 'bcftools plugin -lv' + * + * const char *usage(void) + * - longer description used by 'bcftools +name -h' + * + * int run(int argc, char **argv) + * - if implemented, the control is immediately handed over to the plugin, + * none of the init/process/destroy functions is called. Return 0 on + * success or non-zero value on error. + * + * int init(int argc, char **argv, bcf_hdr_t *in_hdr, bcf_hdr_t *out_hdr) + * - called once at startup, allows to initialize local variables. + * Return 1 to suppress normal VCF/BCF header output, -1 on critical + * errors, 0 otherwise. + * + * bcf1_t *process(bcf1_t *rec) + * - called for each VCF record, return NULL for no output + * + * void destroy(void) + * - called after all lines have been processed to clean up + */ +typedef void (*dl_version_f) (const char **, const char **); +typedef int (*dl_run_f) (int, char **); +typedef int (*dl_init_f) (int, char **, bcf_hdr_t *, bcf_hdr_t *); +typedef char* (*dl_about_f) (void); +typedef char* (*dl_usage_f) (void); +typedef bcf1_t* (*dl_process_f) (bcf1_t *); +typedef void (*dl_destroy_f) (void); + +struct _plugin_t +{ + int argc; + char *name, **argv; + dl_version_f version; + dl_run_f run; + dl_init_f init; + dl_about_f about; + dl_usage_f usage; + dl_process_f process; + dl_destroy_f destroy; + void *handle; +}; + + +struct _args_t; + +typedef struct _rm_tag_t +{ + char *key; + int hdr_id; + void (*handler)(struct _args_t *, bcf1_t *, struct _rm_tag_t *); +} +rm_tag_t; + +typedef struct +{ + char **cols; + int ncols, mcols; + char **als; + int nals, mals; + kstring_t line; + int rid, start, end; +} +annot_line_t; + +typedef struct _annot_col_t +{ + int icol, replace; + char *hdr_key; + int (*setter)(struct _args_t *, bcf1_t *, struct _annot_col_t *, void*); +} +annot_col_t; + +// Logic of the filters: include or exclude sites which match the filters? +#define FLT_INCLUDE 1 +#define FLT_EXCLUDE 2 + +typedef struct _args_t +{ + bcf_srs_t *files; + bcf_hdr_t *hdr, *hdr_out; + htsFile *out_fh; + int output_type, n_threads; + + filter_t *filter; + char *filter_str; + int filter_logic; // include or exclude sites which match the filters? One of FLT_INCLUDE/FLT_EXCLUDE + + plugin_t plugin; + int nplugin_paths; + char **plugin_paths; + + char **argv, *output_fname, *regions_list, *targets_list; + int argc, drop_header, verbose, record_cmd_line; +} +args_t; + +char *msprintf(const char *fmt, ...); + +static void add_plugin_paths(args_t *args, const char *path) +{ + while (1) + { + size_t len = strcspn(path, ":"); + + if ( len == 0 ) + { +#ifdef PLUGINPATH + add_plugin_paths(args, PLUGINPATH); +#endif + } + else + { + char *dir = (char *) malloc(len + 1); + strncpy(dir, path, len); + dir[len] = '\0'; + + struct stat st; + if ( stat(dir, &st) == 0 ) + { + args->plugin_paths = (char**) realloc(args->plugin_paths,sizeof(char*)*(args->nplugin_paths+1)); + args->plugin_paths[args->nplugin_paths] = dir; + args->nplugin_paths++; + if ( args->verbose > 1 ) fprintf(bcftools_stderr, "plugin directory %s .. ok\n", dir); + } + else + { + if ( args->verbose > 1 ) fprintf(bcftools_stderr, "plugin directory %s .. %s\n", dir, strerror(errno)); + free(dir); + } + + } + + path += len; + if ( *path == ':' ) path++; + else break; + } +} + +static void init_plugin_paths(args_t *args) +{ + if ( args->nplugin_paths!=-1 ) return; + + args->nplugin_paths = 0; + args->plugin_paths = NULL; + + char *path = getenv("BCFTOOLS_PLUGINS"); + add_plugin_paths(args, path ? path : ""); +} + +static void *dlopen_plugin(args_t *args, const char *fname) +{ + init_plugin_paths(args); + + void *handle; + char *tmp; + if ( fname[0]!='/' ) // not an absolute path + { + int i; + for (i=0; inplugin_paths; i++) + { + tmp = msprintf("%s/%s%s", args->plugin_paths[i], fname, PLUGIN_EXT); + handle = dlopen(tmp, RTLD_NOW); // valgrind complains about unfreed memory, not our problem though + if ( args->verbose > 1 ) + { + if ( !handle ) fprintf(bcftools_stderr,"%s:\n\tdlopen .. %s\n", tmp,dlerror()); + else fprintf(bcftools_stderr,"%s:\n\tdlopen .. ok\n", tmp); + } + free(tmp); + if ( handle ) return handle; + } + } + + handle = dlopen(fname, RTLD_NOW); + if ( args->verbose > 1 ) + { + if ( !handle ) fprintf(bcftools_stderr,"%s:\n\tdlopen .. %s\n", fname,dlerror()); + else fprintf(bcftools_stderr,"%s:\n\tdlopen .. ok\n", fname); + } + + return handle; +} + +static void print_plugin_usage_hint(void) +{ + fprintf(bcftools_stderr, "\nNo functional bcftools plugins were found"); + if ( !getenv("BCFTOOLS_PLUGINS") ) + fprintf(bcftools_stderr,". The environment variable BCFTOOLS_PLUGINS is not set.\n\n"); + else + fprintf(bcftools_stderr, + " in\n\tBCFTOOLS_PLUGINS=\"%s\".\n\n" + "- Is the plugin path correct?\n\n" + "- Run \"bcftools plugin -lv\" for more detailed error output.\n" + "\n", + getenv("BCFTOOLS_PLUGINS") + ); +} + +static int load_plugin(args_t *args, const char *fname, int exit_on_error, plugin_t *plugin) +{ + plugin->name = strdup(fname); + + plugin->handle = dlopen_plugin(args, fname); + if ( !plugin->handle ) + { + if ( exit_on_error ) + { + print_plugin_usage_hint(); + error("Could not load \"%s\".\n\n", fname); + } + return -1; + } + + dlerror(); + plugin->init = (dl_init_f) dlsym(plugin->handle, "init"); + char *ret = dlerror(); + if ( ret ) + plugin->init = NULL; + else + if ( args->verbose > 1 ) fprintf(bcftools_stderr,"\tinit .. ok\n"); + + plugin->run = (dl_run_f) dlsym(plugin->handle, "run"); + ret = dlerror(); + if ( ret ) + plugin->run = NULL; + else + if ( args->verbose > 1 ) fprintf(bcftools_stderr,"\trun .. ok\n"); + + if ( !plugin->init && !plugin->run ) + { + if ( exit_on_error ) error("Could not initialize %s, neither run or init found \n", plugin->name); + else if ( args->verbose > 1 ) fprintf(bcftools_stderr,"\tinit/run .. not found\n"); + return -1; + } + + plugin->version = (dl_version_f) dlsym(plugin->handle, "version"); + ret = dlerror(); + if ( ret ) + { + if ( exit_on_error ) error("Could not initialize %s, version string not found\n", plugin->name); + else if ( args->verbose > 1 ) fprintf(bcftools_stderr,"\tversion .. not found\n"); + return -1; + } + + plugin->about = (dl_about_f) dlsym(plugin->handle, "about"); + ret = dlerror(); + if ( ret ) + { + if ( exit_on_error ) error("Could not initialize %s: %s\n", plugin->name, ret); + return -1; + } + + plugin->usage = (dl_about_f) dlsym(plugin->handle, "usage"); + ret = dlerror(); + if ( ret ) + plugin->usage = plugin->about; + + if ( plugin->run ) return 0; + + plugin->process = (dl_process_f) dlsym(plugin->handle, "process"); + ret = dlerror(); + if ( ret ) + { + if ( exit_on_error ) error("Could not initialize %s: %s\n", plugin->name, ret); + return -1; + } + + plugin->destroy = (dl_destroy_f) dlsym(plugin->handle, "destroy"); + ret = dlerror(); + if ( ret ) + { + if ( exit_on_error ) error("Could not initialize %s: %s\n", plugin->name, ret); + return -1; + } + + return 0; +} + +static void init_plugin(args_t *args) +{ + static int warned_bcftools = 0, warned_htslib = 0; + + int ret = args->plugin.init(args->plugin.argc,args->plugin.argv,args->hdr,args->hdr_out); + if ( ret<0 ) error("The plugin exited with an error.\n"); + const char *bver, *hver; + args->plugin.version(&bver, &hver); + if ( strcmp(bver,bcftools_version()) && !warned_bcftools ) + { + fprintf(bcftools_stderr,"WARNING: bcftools version mismatch .. bcftools at %s, the plugin \"%s\" at %s\n", bcftools_version(),args->plugin.name,bver); + warned_bcftools = 1; + } + if ( strcmp(hver,hts_version()) && !warned_htslib ) + { + fprintf(bcftools_stderr,"WARNING: htslib version mismatch .. bcftools at %s, the plugin \"%s\" at %s\n", hts_version(),args->plugin.name,hver); + warned_htslib = 1; + } + args->drop_header += ret; +} + +static int cmp_plugin_name(const void *p1, const void *p2) +{ + plugin_t *a = (plugin_t*) p1; + plugin_t *b = (plugin_t*) p2; + return strcmp(a->name,b->name); +} + +static int list_plugins(args_t *args) +{ + plugin_t *plugins = NULL; + int nplugins = 0, mplugins = 0; + + init_plugin_paths(args); + + kstring_t str = {0,0,0}; + int plugin_ext_len = strlen(PLUGIN_EXT); + int i; + for (i=0; inplugin_paths; i++) + { + DIR *dp = opendir(args->plugin_paths[i]); + if ( dp==NULL ) continue; + + struct dirent *ep; + while ( (ep=readdir(dp)) ) + { + int len = strlen(ep->d_name); + if ( strcasecmp(PLUGIN_EXT,ep->d_name+len-plugin_ext_len) ) continue; + str.l = 0; + ksprintf(&str,"%s/%s", args->plugin_paths[i],ep->d_name); + hts_expand(plugin_t, nplugins+1, mplugins, plugins); + if ( load_plugin(args, str.s, 0, &plugins[nplugins]) < 0 ) continue; + nplugins++; + str.l = 0; + kputs(ep->d_name, &str); + int l = str.l - 1; + while ( l>=0 && str.s[l]!='.' ) l--; + if ( l>=0 ) str.s[l] = 0; + free(plugins[nplugins-1].name); + plugins[nplugins-1].name = strdup(str.s); // use a short name + } + closedir(dp); + } + if ( nplugins ) + { + qsort(plugins, nplugins, sizeof(plugins[0]), cmp_plugin_name); + + for (i=0; iverbose ) + fprintf(bcftools_stdout, "\n-- %s --\n%s", plugins[i].name, plugins[i].about()); + else + fprintf(bcftools_stdout, "%s\n", plugins[i].name); + } + if ( args->verbose ) fprintf(bcftools_stdout, "\n"); + } + else + print_plugin_usage_hint(); + free(str.s); + return nplugins ? 0 : 1; +} + +static void init_data(args_t *args) +{ + args->hdr = args->files->readers[0].header; + args->hdr_out = bcf_hdr_dup(args->hdr); + + init_plugin(args); + + if ( args->filter_str ) + args->filter = filter_init(args->hdr, args->filter_str); + + if (args->record_cmd_line) bcf_hdr_append_version(args->hdr_out, args->argc, args->argv, "bcftools_plugin"); + if ( !args->drop_header ) + { + args->out_fh = hts_open(args->output_fname,hts_bcf_wmode(args->output_type)); + if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno)); + if ( args->n_threads ) hts_set_threads(args->out_fh, args->n_threads); + bcf_hdr_write(args->out_fh, args->hdr_out); + } +} + +static void destroy_data(args_t *args) +{ + free(args->plugin.name); + if ( args->plugin.destroy ) args->plugin.destroy(); + dlclose(args->plugin.handle); + if ( args->hdr_out ) bcf_hdr_destroy(args->hdr_out); + if ( args->nplugin_paths>0 ) + { + int i; + for (i=0; inplugin_paths; i++) free(args->plugin_paths[i]); + free(args->plugin_paths); + } + if ( args->filter ) + filter_destroy(args->filter); + if (args->out_fh) hts_close(args->out_fh); +} + +static void usage(args_t *args) +{ + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "About: Run user defined plugin\n"); + fprintf(bcftools_stderr, "Usage: bcftools plugin [OPTIONS] [-- PLUGIN_OPTIONS]\n"); + fprintf(bcftools_stderr, " bcftools +name [OPTIONS] [-- PLUGIN_OPTIONS]\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "VCF input options:\n"); + fprintf(bcftools_stderr, " -e, --exclude exclude sites for which the expression is true\n"); + fprintf(bcftools_stderr, " -i, --include select sites for which the expression is true\n"); + fprintf(bcftools_stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(bcftools_stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(bcftools_stderr, " -t, --targets similar to -r but streams rather than index-jumps\n"); + fprintf(bcftools_stderr, " -T, --targets-file similar to -R but streams rather than index-jumps\n"); + fprintf(bcftools_stderr, "VCF output options:\n"); + fprintf(bcftools_stderr, " --no-version do not append version and command line to the header\n"); + fprintf(bcftools_stderr, " -o, --output write output to a file [standard output]\n"); + fprintf(bcftools_stderr, " -O, --output-type 'b' compressed BCF; 'u' uncompressed BCF; 'z' compressed VCF; 'v' uncompressed VCF [v]\n"); + fprintf(bcftools_stderr, " --threads number of extra output compression threads [0]\n"); + fprintf(bcftools_stderr, "Plugin options:\n"); + fprintf(bcftools_stderr, " -h, --help list plugin's options\n"); + fprintf(bcftools_stderr, " -l, --list-plugins list available plugins. See BCFTOOLS_PLUGINS environment variable and man page for details\n"); + fprintf(bcftools_stderr, " -v, --verbose print verbose information, -vv increases verbosity\n"); + fprintf(bcftools_stderr, " -V, --version print version string and exit\n"); + fprintf(bcftools_stderr, "\n"); + exit(1); +} + +static int is_verbose(int argc, char *argv[]) +{ + int c, verbose = 0, opterr_ori = opterr; + static struct option loptions[] = + { + {"verbose",no_argument,NULL,'v'}, + {NULL,0,NULL,0} + }; + opterr = 0; + while ((c = getopt_long(argc, argv, "-v",loptions,NULL)) >= 0) + { + switch (c) { + case 'v': verbose++; break; + case 1: + default: break; + } + } + opterr = opterr_ori; + optind = 0; + return verbose; +} +int main_plugin(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->output_fname = "-"; + args->output_type = FT_VCF; + args->n_threads = 0; + args->record_cmd_line = 1; + args->nplugin_paths = -1; + int regions_is_file = 0, targets_is_file = 0, plist_only = 0, usage_only = 0, version_only = 0; + + if ( argc==1 ) usage(args); + + char *plugin_name = NULL; + if ( argv[1][0]!='-' ) + { + args->verbose = is_verbose(argc, argv); + plugin_name = argv[1]; + argc--; + argv++; + load_plugin(args, plugin_name, 1, &args->plugin); + if ( args->plugin.run ) + { + int ret = args->plugin.run(argc, argv); + destroy_data(args); + free(args); + return ret; + } + } + + static struct option loptions[] = + { + {"version",no_argument,NULL,'V'}, + {"verbose",no_argument,NULL,'v'}, + {"help",no_argument,NULL,'h'}, + {"list-plugins",no_argument,NULL,'l'}, + {"output",required_argument,NULL,'o'}, + {"output-type",required_argument,NULL,'O'}, + {"threads",required_argument,NULL,9}, + {"include",required_argument,NULL,'i'}, + {"exclude",required_argument,NULL,'e'}, + {"regions",required_argument,NULL,'r'}, + {"regions-file",required_argument,NULL,'R'}, + {"targets",required_argument,NULL,'t'}, + {"targets-file",required_argument,NULL,'T'}, + {"no-version",no_argument,NULL,8}, + {NULL,0,NULL,0} + }; + while ((c = getopt_long(argc, argv, "h?o:O:r:R:t:T:li:e:vV",loptions,NULL)) >= 0) + { + switch (c) { + case 'V': version_only = 1; break; + case 'v': args->verbose++; break; + case 'o': args->output_fname = optarg; break; + case 'O': + switch (optarg[0]) { + case 'b': args->output_type = FT_BCF_GZ; break; + case 'u': args->output_type = FT_BCF; break; + case 'z': args->output_type = FT_VCF_GZ; break; + case 'v': args->output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + }; + break; + case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break; + case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; regions_is_file = 1; break; + case 't': args->targets_list = optarg; break; + case 'T': args->targets_list = optarg; targets_is_file = 1; break; + case 'l': plist_only = 1; break; + case 9 : args->n_threads = strtol(optarg, 0, 0); break; + case 8 : args->record_cmd_line = 0; break; + case '?': + case 'h': usage_only = 1; break; + default: error("Unknown argument: %s\n", optarg); + } + } + if ( plist_only ) return list_plugins(args); + if ( usage_only && ! plugin_name ) usage(args); + + if ( version_only ) + { + const char *bver, *hver; + args->plugin.version(&bver, &hver); + fprintf(bcftools_stdout, "bcftools %s using htslib %s\n", bcftools_version(), hts_version()); + fprintf(bcftools_stdout, "plugin at %s using htslib %s\n\n", bver, hver); + return 0; + } + + if ( usage_only ) + { + if ( args->plugin.usage ) + fprintf(bcftools_stderr,"%s",args->plugin.usage()); + else + fprintf(bcftools_stderr,"Usage: bcftools +%s [General Options] -- [Plugin Options]\n",plugin_name); + return 0; + } + + char *fname = NULL; + if ( optind>=argc || argv[optind][0]=='-' ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin + else usage(args); + args->plugin.argc = argc - optind + 1; + args->plugin.argv = argv + optind - 1; + } + else + { + fname = argv[optind]; + args->plugin.argc = argc - optind; + args->plugin.argv = argv + optind; + } + optind = 0; + + args->files = bcf_sr_init(); + if ( args->regions_list ) + { + if ( bcf_sr_set_regions(args->files, args->regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + } + if ( args->targets_list ) + { + if ( bcf_sr_set_targets(args->files, args->targets_list, targets_is_file, 0)<0 ) + error("Failed to read the targets: %s\n", args->targets_list); + args->files->collapse |= COLLAPSE_SOME; + } + if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); + + init_data(args); + while ( bcf_sr_next_line(args->files) ) + { + bcf1_t *line = bcf_sr_get_line(args->files,0); + if ( args->filter ) + { + int pass = filter_test(args->filter, line, NULL); + if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1; + if ( !pass ) continue; + } + line = args->plugin.process(line); + if ( line ) bcf_write1(args->out_fh, args->hdr_out, line); + } + destroy_data(args); + bcf_sr_destroy(args->files); + free(args); + return 0; +} + +#else /* ENABLE_BCF_PLUGINS */ + +int main_plugin(int argc, char *argv[]) +{ + fprintf(bcftools_stderr, "bcftools plugins are disabled. To use them, you will need to rebuild\n" + "bcftools from the source distribution with plugins enabled.\n"); + return 1; +} + +#endif /* ENABLE_BCF_PLUGINS */ diff --git a/bcftools/vcfquery.c b/bcftools/vcfquery.c new file mode 100644 index 0000000..04554f8 --- /dev/null +++ b/bcftools/vcfquery.c @@ -0,0 +1,390 @@ +/* vcfquery.c -- Extracts fields from VCF/BCF file. + + Copyright (C) 2013-2014 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "filter.h" +#include "convert.h" + + +// Logic of the filters: include or exclude sites which match the filters? +#define FLT_INCLUDE 1 +#define FLT_EXCLUDE 2 + +typedef struct +{ + filter_t *filter; + char *filter_str; + int filter_logic; // include or exclude sites which match the filters? One of FLT_INCLUDE/FLT_EXCLUDE + convert_t *convert; + bcf_srs_t *files; + bcf_hdr_t *header; + int nsamples, *samples, sample_is_file; + char **argv, *format_str, *sample_list, *targets_list, *regions_list, *vcf_list, *fn_out; + int argc, list_columns, print_header, allow_undef_tags; + FILE *out; +} +args_t; + +static void destroy_list(char **list, int n) +{ + int i; + for (i=0; iheader = args->files->readers[0].header; + + int i, nsamples = 0, *samples = NULL; + if ( args->sample_list && strcmp("-",args->sample_list) ) + { + for (i=0; ifiles->nreaders; i++) + { + int ret = bcf_hdr_set_samples(args->files->readers[i].header,args->sample_list,args->sample_is_file); + if ( ret<0 ) error("Error parsing the sample list\n"); + else if ( ret>0 ) error("Sample name mismatch: sample #%d not found in the header\n", ret); + } + + if ( args->sample_list[0]!='^' ) + { + // the sample ordering may be different if not negated + int n; + char **smpls = hts_readlist(args->sample_list, args->sample_is_file, &n); + if ( !smpls ) error("Could not parse %s\n", args->sample_list); + if ( n!=bcf_hdr_nsamples(args->files->readers[0].header) ) + error("The number of samples does not match, perhaps some are present multiple times?\n"); + nsamples = bcf_hdr_nsamples(args->files->readers[0].header); + samples = (int*) malloc(sizeof(int)*nsamples); + for (i=0; ifiles->readers[0].header, BCF_DT_SAMPLE,smpls[i]); + free(smpls[i]); + } + free(smpls); + } + } + args->convert = convert_init(args->header, samples, nsamples, args->format_str); + if ( args->allow_undef_tags ) convert_set_option(args->convert, allow_undef_tags, 1); + free(samples); + + int max_unpack = convert_max_unpack(args->convert); + if ( args->filter_str ) + { + args->filter = filter_init(args->header, args->filter_str); + max_unpack |= filter_max_unpack(args->filter); + } + args->files->max_unpack = max_unpack; +} + +static void destroy_data(args_t *args) +{ + convert_destroy(args->convert); + if ( args->filter ) + filter_destroy(args->filter); + free(args->samples); +} + +static void query_vcf(args_t *args) +{ + kstring_t str = {0,0,0}; + + if ( args->print_header ) + { + convert_header(args->convert,&str); + fwrite(str.s, str.l, 1, args->out); + } + + while ( bcf_sr_next_line(args->files) ) + { + if ( !bcf_sr_has_line(args->files,0) ) continue; + bcf1_t *line = args->files->readers[0].buffer[0]; + bcf_unpack(line, args->files->max_unpack); + + if ( args->filter ) + { + int pass = filter_test(args->filter, line, NULL); + if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1; + if ( !pass ) continue; + } + + str.l = 0; + convert_line(args->convert, line, &str); + if ( str.l ) + fwrite(str.s, str.l, 1, args->out); + } + if ( str.m ) free(str.s); +} + +static void list_columns(args_t *args) +{ + void *has_sample = NULL; + if ( args->sample_list ) + { + has_sample = khash_str2int_init(); + int i, nsmpl; + char **smpl = hts_readlist(args->sample_list, args->sample_is_file, &nsmpl); + for (i=0; ifiles->readers[0]; + for (i=0; iheader); i++) + { + if ( has_sample && !khash_str2int_has_key(has_sample, reader->header->samples[i]) ) continue; + printf("%s\n", reader->header->samples[i]); + } + + if ( has_sample ) + khash_str2int_destroy_free(has_sample); +} + +static char **copy_header(bcf_hdr_t *hdr, char **src, int nsrc) +{ + char **dst = (char**) malloc(sizeof(char*)*nsrc); + int i; + for (i=0; i [ [...]]\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " -c, --collapse collapse lines with duplicate positions for , see man page [none]\n"); + fprintf(stderr, " -e, --exclude exclude sites for which the expression is true (see man page for details)\n"); + fprintf(stderr, " -f, --format see man page for details\n"); + fprintf(stderr, " -H, --print-header print header\n"); + fprintf(stderr, " -i, --include select sites for which the expression is true (see man page for details)\n"); + fprintf(stderr, " -l, --list-samples print the list of samples and exit\n"); + fprintf(stderr, " -o, --output-file output file name [stdout]\n"); + fprintf(stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(stderr, " -s, --samples list of samples to include\n"); + fprintf(stderr, " -S, --samples-file file of samples to include\n"); + fprintf(stderr, " -t, --targets similar to -r but streams rather than index-jumps\n"); + fprintf(stderr, " -T, --targets-file similar to -R but streams rather than index-jumps\n"); + fprintf(stderr, " -u, --allow-undef-tags print \".\" for undefined tags\n"); + fprintf(stderr, " -v, --vcf-list process multiple VCFs listed in the file\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Examples:\n"); + fprintf(stderr, "\tbcftools query -f '%%CHROM\\t%%POS\\t%%REF\\t%%ALT[\\t%%SAMPLE=%%GT]\\n' file.vcf.gz\n"); + fprintf(stderr, "\n"); + exit(1); +} + +int main_vcfquery(int argc, char *argv[]) +{ + int c, collapse = 0; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + int regions_is_file = 0, targets_is_file = 0; + + static struct option loptions[] = + { + {"help",0,0,'h'}, + {"list-samples",0,0,'l'}, + {"include",1,0,'i'}, + {"exclude",1,0,'e'}, + {"format",1,0,'f'}, + {"output-file",1,0,'o'}, + {"regions",1,0,'r'}, + {"regions-file",1,0,'R'}, + {"targets",1,0,'t'}, + {"targets-file",1,0,'T'}, + {"annots",1,0,'a'}, + {"samples",1,0,'s'}, + {"samples-file",1,0,'S'}, + {"print-header",0,0,'H'}, + {"collapse",1,0,'c'}, + {"vcf-list",1,0,'v'}, + {"allow-undef-tags",0,0,'u'}, + {0,0,0,0} + }; + while ((c = getopt_long(argc, argv, "hlr:R:f:a:s:S:Ht:T:c:v:i:e:o:u",loptions,NULL)) >= 0) { + switch (c) { + case 'o': args->fn_out = optarg; break; + case 'f': args->format_str = strdup(optarg); break; + case 'H': args->print_header = 1; break; + case 'v': args->vcf_list = optarg; break; + case 'c': + if ( !strcmp(optarg,"snps") ) collapse |= COLLAPSE_SNPS; + else if ( !strcmp(optarg,"indels") ) collapse |= COLLAPSE_INDELS; + else if ( !strcmp(optarg,"both") ) collapse |= COLLAPSE_SNPS | COLLAPSE_INDELS; + else if ( !strcmp(optarg,"any") ) collapse |= COLLAPSE_ANY; + else if ( !strcmp(optarg,"all") ) collapse |= COLLAPSE_ANY; + else if ( !strcmp(optarg,"some") ) collapse |= COLLAPSE_SOME; + else error("The --collapse string \"%s\" not recognised.\n", optarg); + break; + case 'a': + { + kstring_t str = {0,0,0}; + kputs("%CHROM\t%POS\t%MASK\t%REF\t%ALT\t%", &str); + char *p = optarg; + while ( *p ) + { + if ( *p==',' ) + kputs("\t%", &str); + else + kputc(*p, &str); + p++; + } + kputc('\n', &str); + args->format_str = str.s; + break; + } + case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break; + case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; regions_is_file = 1; break; + case 't': args->targets_list = optarg; break; + case 'T': args->targets_list = optarg; targets_is_file = 1; break; + case 'l': args->list_columns = 1; break; + case 'u': args->allow_undef_tags = 1; break; + case 's': args->sample_list = optarg; break; + case 'S': args->sample_list = optarg; args->sample_is_file = 1; break; + case 'h': + case '?': usage(); + default: error("Unknown argument: %s\n", optarg); + } + } + + char *fname = NULL; + if ( optind>=argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; + } + else fname = argv[optind]; + + if ( args->list_columns ) + { + if ( !fname ) error("Missing the VCF file name\n"); + args->files = bcf_sr_init(); + if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); + list_columns(args); + bcf_sr_destroy(args->files); + free(args); + return 0; + } + + if ( !args->format_str ) usage(); + args->out = args->fn_out ? fopen(args->fn_out, "w") : stdout; + if ( !args->out ) error("%s: %s\n", args->fn_out,strerror(errno)); + + if ( !args->vcf_list ) + { + if ( !fname ) usage(); + args->files = bcf_sr_init(); + args->files->collapse = collapse; + if ( optind+1 < argc ) args->files->require_index = 1; + if ( args->regions_list && bcf_sr_set_regions(args->files, args->regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + if ( args->targets_list ) + { + if ( bcf_sr_set_targets(args->files, args->targets_list, targets_is_file, 0)<0 ) + error("Failed to read the targets: %s\n", args->targets_list); + } + while ( fname ) + { + if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); + fname = ++optind < argc ? argv[optind] : NULL; + } + init_data(args); + query_vcf(args); + free(args->format_str); + destroy_data(args); + bcf_sr_destroy(args->files); + fclose(args->out); + free(args); + return 0; + } + + // multiple VCFs + int i, k, nfiles, prev_nsamples = 0; + char **fnames, **prev_samples = NULL; + fnames = hts_readlist(args->vcf_list, 1, &nfiles); + if ( !nfiles ) error("No files in %s?\n", args->vcf_list); + for (i=0; ifiles = bcf_sr_init(); + args->files->collapse = collapse; + if ( args->regions_list && bcf_sr_set_regions(args->files, args->regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + if ( optind < argc ) args->files->require_index = 1; + if ( args->targets_list ) + { + if ( bcf_sr_set_targets(args->files, args->targets_list,targets_is_file, 0)<0 ) + error("Failed to read the targets: %s\n", args->targets_list); + } + if ( !bcf_sr_add_reader(args->files, fnames[i]) ) error("Failed to open %s: %s\n", fnames[i],bcf_sr_strerror(args->files->errnum)); + for (k=optind; kfiles, argv[k]) ) error("Failed to open %s: %s\n", argv[k],bcf_sr_strerror(args->files->errnum)); + init_data(args); + if ( i==0 ) + prev_samples = copy_header(args->header, args->files->readers[0].header->samples, bcf_hdr_nsamples(args->files->readers[0].header)); + else + { + args->print_header = 0; + if ( compare_header(args->header, args->files->readers[0].header->samples, bcf_hdr_nsamples(args->files->readers[0].header), prev_samples, prev_nsamples) ) + error("Different samples in %s and %s\n", fnames[i-1],fnames[i]); + } + query_vcf(args); + destroy_data(args); + bcf_sr_destroy(args->files); + } + fclose(args->out); + destroy_list(fnames, nfiles); + destroy_list(prev_samples, prev_nsamples); + free(args->format_str); + free(args); + return 0; +} + + diff --git a/bcftools/vcfquery.c.pysam.c b/bcftools/vcfquery.c.pysam.c new file mode 100644 index 0000000..e9100e6 --- /dev/null +++ b/bcftools/vcfquery.c.pysam.c @@ -0,0 +1,392 @@ +#include "bcftools.pysam.h" + +/* vcfquery.c -- Extracts fields from VCF/BCF file. + + Copyright (C) 2013-2014 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "filter.h" +#include "convert.h" + + +// Logic of the filters: include or exclude sites which match the filters? +#define FLT_INCLUDE 1 +#define FLT_EXCLUDE 2 + +typedef struct +{ + filter_t *filter; + char *filter_str; + int filter_logic; // include or exclude sites which match the filters? One of FLT_INCLUDE/FLT_EXCLUDE + convert_t *convert; + bcf_srs_t *files; + bcf_hdr_t *header; + int nsamples, *samples, sample_is_file; + char **argv, *format_str, *sample_list, *targets_list, *regions_list, *vcf_list, *fn_out; + int argc, list_columns, print_header, allow_undef_tags; + FILE *out; +} +args_t; + +static void destroy_list(char **list, int n) +{ + int i; + for (i=0; iheader = args->files->readers[0].header; + + int i, nsamples = 0, *samples = NULL; + if ( args->sample_list && strcmp("-",args->sample_list) ) + { + for (i=0; ifiles->nreaders; i++) + { + int ret = bcf_hdr_set_samples(args->files->readers[i].header,args->sample_list,args->sample_is_file); + if ( ret<0 ) error("Error parsing the sample list\n"); + else if ( ret>0 ) error("Sample name mismatch: sample #%d not found in the header\n", ret); + } + + if ( args->sample_list[0]!='^' ) + { + // the sample ordering may be different if not negated + int n; + char **smpls = hts_readlist(args->sample_list, args->sample_is_file, &n); + if ( !smpls ) error("Could not parse %s\n", args->sample_list); + if ( n!=bcf_hdr_nsamples(args->files->readers[0].header) ) + error("The number of samples does not match, perhaps some are present multiple times?\n"); + nsamples = bcf_hdr_nsamples(args->files->readers[0].header); + samples = (int*) malloc(sizeof(int)*nsamples); + for (i=0; ifiles->readers[0].header, BCF_DT_SAMPLE,smpls[i]); + free(smpls[i]); + } + free(smpls); + } + } + args->convert = convert_init(args->header, samples, nsamples, args->format_str); + if ( args->allow_undef_tags ) convert_set_option(args->convert, allow_undef_tags, 1); + free(samples); + + int max_unpack = convert_max_unpack(args->convert); + if ( args->filter_str ) + { + args->filter = filter_init(args->header, args->filter_str); + max_unpack |= filter_max_unpack(args->filter); + } + args->files->max_unpack = max_unpack; +} + +static void destroy_data(args_t *args) +{ + convert_destroy(args->convert); + if ( args->filter ) + filter_destroy(args->filter); + free(args->samples); +} + +static void query_vcf(args_t *args) +{ + kstring_t str = {0,0,0}; + + if ( args->print_header ) + { + convert_header(args->convert,&str); + fwrite(str.s, str.l, 1, args->out); + } + + while ( bcf_sr_next_line(args->files) ) + { + if ( !bcf_sr_has_line(args->files,0) ) continue; + bcf1_t *line = args->files->readers[0].buffer[0]; + bcf_unpack(line, args->files->max_unpack); + + if ( args->filter ) + { + int pass = filter_test(args->filter, line, NULL); + if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1; + if ( !pass ) continue; + } + + str.l = 0; + convert_line(args->convert, line, &str); + if ( str.l ) + fwrite(str.s, str.l, 1, args->out); + } + if ( str.m ) free(str.s); +} + +static void list_columns(args_t *args) +{ + void *has_sample = NULL; + if ( args->sample_list ) + { + has_sample = khash_str2int_init(); + int i, nsmpl; + char **smpl = hts_readlist(args->sample_list, args->sample_is_file, &nsmpl); + for (i=0; ifiles->readers[0]; + for (i=0; iheader); i++) + { + if ( has_sample && !khash_str2int_has_key(has_sample, reader->header->samples[i]) ) continue; + fprintf(bcftools_stdout, "%s\n", reader->header->samples[i]); + } + + if ( has_sample ) + khash_str2int_destroy_free(has_sample); +} + +static char **copy_header(bcf_hdr_t *hdr, char **src, int nsrc) +{ + char **dst = (char**) malloc(sizeof(char*)*nsrc); + int i; + for (i=0; i [ [...]]\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Options:\n"); + fprintf(bcftools_stderr, " -c, --collapse collapse lines with duplicate positions for , see man page [none]\n"); + fprintf(bcftools_stderr, " -e, --exclude exclude sites for which the expression is true (see man page for details)\n"); + fprintf(bcftools_stderr, " -f, --format see man page for details\n"); + fprintf(bcftools_stderr, " -H, --print-header print header\n"); + fprintf(bcftools_stderr, " -i, --include select sites for which the expression is true (see man page for details)\n"); + fprintf(bcftools_stderr, " -l, --list-samples print the list of samples and exit\n"); + fprintf(bcftools_stderr, " -o, --output-file output file name [bcftools_stdout]\n"); + fprintf(bcftools_stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(bcftools_stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(bcftools_stderr, " -s, --samples list of samples to include\n"); + fprintf(bcftools_stderr, " -S, --samples-file file of samples to include\n"); + fprintf(bcftools_stderr, " -t, --targets similar to -r but streams rather than index-jumps\n"); + fprintf(bcftools_stderr, " -T, --targets-file similar to -R but streams rather than index-jumps\n"); + fprintf(bcftools_stderr, " -u, --allow-undef-tags print \".\" for undefined tags\n"); + fprintf(bcftools_stderr, " -v, --vcf-list process multiple VCFs listed in the file\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Examples:\n"); + fprintf(bcftools_stderr, "\tbcftools query -f '%%CHROM\\t%%POS\\t%%REF\\t%%ALT[\\t%%SAMPLE=%%GT]\\n' file.vcf.gz\n"); + fprintf(bcftools_stderr, "\n"); + exit(1); +} + +int main_vcfquery(int argc, char *argv[]) +{ + int c, collapse = 0; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + int regions_is_file = 0, targets_is_file = 0; + + static struct option loptions[] = + { + {"help",0,0,'h'}, + {"list-samples",0,0,'l'}, + {"include",1,0,'i'}, + {"exclude",1,0,'e'}, + {"format",1,0,'f'}, + {"output-file",1,0,'o'}, + {"regions",1,0,'r'}, + {"regions-file",1,0,'R'}, + {"targets",1,0,'t'}, + {"targets-file",1,0,'T'}, + {"annots",1,0,'a'}, + {"samples",1,0,'s'}, + {"samples-file",1,0,'S'}, + {"print-header",0,0,'H'}, + {"collapse",1,0,'c'}, + {"vcf-list",1,0,'v'}, + {"allow-undef-tags",0,0,'u'}, + {0,0,0,0} + }; + while ((c = getopt_long(argc, argv, "hlr:R:f:a:s:S:Ht:T:c:v:i:e:o:u",loptions,NULL)) >= 0) { + switch (c) { + case 'o': args->fn_out = optarg; break; + case 'f': args->format_str = strdup(optarg); break; + case 'H': args->print_header = 1; break; + case 'v': args->vcf_list = optarg; break; + case 'c': + if ( !strcmp(optarg,"snps") ) collapse |= COLLAPSE_SNPS; + else if ( !strcmp(optarg,"indels") ) collapse |= COLLAPSE_INDELS; + else if ( !strcmp(optarg,"both") ) collapse |= COLLAPSE_SNPS | COLLAPSE_INDELS; + else if ( !strcmp(optarg,"any") ) collapse |= COLLAPSE_ANY; + else if ( !strcmp(optarg,"all") ) collapse |= COLLAPSE_ANY; + else if ( !strcmp(optarg,"some") ) collapse |= COLLAPSE_SOME; + else error("The --collapse string \"%s\" not recognised.\n", optarg); + break; + case 'a': + { + kstring_t str = {0,0,0}; + kputs("%CHROM\t%POS\t%MASK\t%REF\t%ALT\t%", &str); + char *p = optarg; + while ( *p ) + { + if ( *p==',' ) + kputs("\t%", &str); + else + kputc(*p, &str); + p++; + } + kputc('\n', &str); + args->format_str = str.s; + break; + } + case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break; + case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; regions_is_file = 1; break; + case 't': args->targets_list = optarg; break; + case 'T': args->targets_list = optarg; targets_is_file = 1; break; + case 'l': args->list_columns = 1; break; + case 'u': args->allow_undef_tags = 1; break; + case 's': args->sample_list = optarg; break; + case 'S': args->sample_list = optarg; args->sample_is_file = 1; break; + case 'h': + case '?': usage(); + default: error("Unknown argument: %s\n", optarg); + } + } + + char *fname = NULL; + if ( optind>=argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; + } + else fname = argv[optind]; + + if ( args->list_columns ) + { + if ( !fname ) error("Missing the VCF file name\n"); + args->files = bcf_sr_init(); + if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); + list_columns(args); + bcf_sr_destroy(args->files); + free(args); + return 0; + } + + if ( !args->format_str ) usage(); + args->out = args->fn_out ? fopen(args->fn_out, "w") : bcftools_stdout; + if ( !args->out ) error("%s: %s\n", args->fn_out,strerror(errno)); + + if ( !args->vcf_list ) + { + if ( !fname ) usage(); + args->files = bcf_sr_init(); + args->files->collapse = collapse; + if ( optind+1 < argc ) args->files->require_index = 1; + if ( args->regions_list && bcf_sr_set_regions(args->files, args->regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + if ( args->targets_list ) + { + if ( bcf_sr_set_targets(args->files, args->targets_list, targets_is_file, 0)<0 ) + error("Failed to read the targets: %s\n", args->targets_list); + } + while ( fname ) + { + if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); + fname = ++optind < argc ? argv[optind] : NULL; + } + init_data(args); + query_vcf(args); + free(args->format_str); + destroy_data(args); + bcf_sr_destroy(args->files); + fclose(args->out); + free(args); + return 0; + } + + // multiple VCFs + int i, k, nfiles, prev_nsamples = 0; + char **fnames, **prev_samples = NULL; + fnames = hts_readlist(args->vcf_list, 1, &nfiles); + if ( !nfiles ) error("No files in %s?\n", args->vcf_list); + for (i=0; ifiles = bcf_sr_init(); + args->files->collapse = collapse; + if ( args->regions_list && bcf_sr_set_regions(args->files, args->regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + if ( optind < argc ) args->files->require_index = 1; + if ( args->targets_list ) + { + if ( bcf_sr_set_targets(args->files, args->targets_list,targets_is_file, 0)<0 ) + error("Failed to read the targets: %s\n", args->targets_list); + } + if ( !bcf_sr_add_reader(args->files, fnames[i]) ) error("Failed to open %s: %s\n", fnames[i],bcf_sr_strerror(args->files->errnum)); + for (k=optind; kfiles, argv[k]) ) error("Failed to open %s: %s\n", argv[k],bcf_sr_strerror(args->files->errnum)); + init_data(args); + if ( i==0 ) + prev_samples = copy_header(args->header, args->files->readers[0].header->samples, bcf_hdr_nsamples(args->files->readers[0].header)); + else + { + args->print_header = 0; + if ( compare_header(args->header, args->files->readers[0].header->samples, bcf_hdr_nsamples(args->files->readers[0].header), prev_samples, prev_nsamples) ) + error("Different samples in %s and %s\n", fnames[i-1],fnames[i]); + } + query_vcf(args); + destroy_data(args); + bcf_sr_destroy(args->files); + } + fclose(args->out); + destroy_list(fnames, nfiles); + destroy_list(prev_samples, prev_nsamples); + free(args->format_str); + free(args); + return 0; +} + + diff --git a/bcftools/vcfroh.c b/bcftools/vcfroh.c new file mode 100644 index 0000000..8c1d055 --- /dev/null +++ b/bcftools/vcfroh.c @@ -0,0 +1,1224 @@ +/* vcfroh.c -- HMM model for detecting runs of autozygosity. + + Copyright (C) 2013-2015 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "HMM.h" +#include "smpl_ilist.h" + +#define STATE_HW 0 // normal state, follows Hardy-Weinberg allele frequencies +#define STATE_AZ 1 // autozygous state + +#define OUTPUT_ST (1<<1) +#define OUTPUT_RG (1<<2) +#define OUTPUT_GZ (1<<3) + +/** Genetic map */ +typedef struct +{ + int pos; + double rate; +} +genmap_t; + +/** HMM data for each sample */ +typedef struct +{ + double *eprob; // emission probs [2*nsites,msites] + uint32_t *sites; // positions [nsites,msites] + int nsites, msites; + int igenmap; // current position in genmap + int nused; // some stats to detect if things didn't go wrong + int nrid, *rid, *rid_off; // for viterbi training, keep all chromosomes + void *snapshot; // hmm snapshot + struct { + uint32_t beg,end,nqual; + double qual; + int rid, state; + } rg; +} +smpl_t; + +typedef struct _args_t +{ + bcf_srs_t *files; + bcf_hdr_t *hdr; + double t2AZ, t2HW; // P(AZ|HW) and P(HW|AZ) parameters + double unseen_PL, dflt_AF; + + char *genmap_fname; + genmap_t *genmap; + int ngenmap, mgenmap, igenmap; + double rec_rate; // constant recombination rate if > 0 + + hmm_t *hmm; + double baum_welch_th; + int nrids, *rids, *rid_offs; // multiple chroms with vi_training + int nbuf_max, nbuf_olap; + + float *AFs; + int32_t *itmp; + int mAFs, nitmp, mitmp, pl_hdr_id, gt_hdr_id; + + double pl2p[256], *pdg; + int32_t skip_rid, prev_rid, prev_pos; + + int ntot; // some stats to detect if things didn't go wrong + smpl_t *smpl; // HMM data for each sample + smpl_ilist_t *af_smpl; // list of samples to estimate AF from (--estimate-AF) + smpl_ilist_t *roh_smpl; // list of samples to analyze (--samples, --samples-file) + char *estimate_AF; // list of samples for AF estimate and query sample + int af_from_PL; // estimate AF from FMT/PL rather than FMT/GT + char **argv, *targets_list, *regions_list, *af_fname, *af_tag, *samples, *buffer_size, *output_fname; + int argc, fake_PLs, snps_only, vi_training, samples_is_file, output_type, skip_homref, n_threads; + BGZF *out; + kstring_t str; +} +args_t; + +void set_tprob_genmap(hmm_t *hmm, uint32_t prev_pos, uint32_t pos, void *data, double *tprob); +void set_tprob_rrate(hmm_t *hmm, uint32_t prev_pos, uint32_t pos, void *data, double *tprob); + +void *smalloc(size_t size) +{ + void *mem = malloc(size); + if ( !mem ) error("malloc: Could not allocate %d bytes\n", (int)size); + return mem; +} + +static void init_data(args_t *args) +{ + int i; + + args->prev_rid = args->skip_rid = -1; + args->hdr = args->files->readers[0].header; + + if ( !bcf_hdr_nsamples(args->hdr) ) error("No samples in the VCF?\n"); + + if ( !args->fake_PLs ) + { + args->pl_hdr_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, "PL"); + if ( !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FMT,args->pl_hdr_id) ) + error("Error: The FORMAT/PL tag not found in the header, consider running with -G\n"); + if ( bcf_hdr_id2type(args->hdr,BCF_HL_FMT,args->pl_hdr_id)!=BCF_HT_INT ) + error("Error: The FORMAT/PL tag not defined as Integer in the header\n"); + } + + if ( args->estimate_AF ) + { + if ( !strncmp("GT,",args->estimate_AF,3) ) args->estimate_AF += 3; + else if ( !strncmp("PL,",args->estimate_AF,3) ) { args->estimate_AF += 3; args->af_from_PL = 1; } + if ( strcmp("-",args->estimate_AF) ) + args->af_smpl = smpl_ilist_init(args->hdr, args->estimate_AF, 1, SMPL_NONE); + } + + if ( args->estimate_AF || args->fake_PLs ) + { + if ( args->af_from_PL ) + { + args->pl_hdr_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, "PL"); + if ( !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FMT,args->pl_hdr_id) ) + error("Error: The FORMAT/PL tag not found in the header\n"); + } + else + { + args->gt_hdr_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, "GT"); + if ( !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FMT,args->gt_hdr_id) ) + error("Error: The FORMAT/GT tag not found in the header\n"); + } + } + if ( args->fake_PLs ) + { + args->gt_hdr_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, "GT"); + if ( !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FMT,args->gt_hdr_id) ) + error("Error: The FORMAT/GT tag not found in the header\n"); + } + + args->roh_smpl = smpl_ilist_init(args->hdr, args->samples, args->samples_is_file, SMPL_NONE); + if ( args->samples ) + { + // we may be able to subset to a few samples, for a text VCF this can be a major speedup + if ( (bcf_sr_get_reader(args->files,0))->file->format.format==vcf ) + { + kstring_t str = {0,0,0}; + smpl_ilist_t *tmp = args->roh_smpl, *rmme = NULL; + if ( args->af_smpl ) + { + for (i=0; iroh_smpl->n; i++) + { + if ( str.l ) kputc(',', &str); + kputs(args->hdr->samples[args->roh_smpl->idx[i]], &str); + } + for (i=0; iaf_smpl->n; i++) + { + kputc(',', &str); + kputs(args->hdr->samples[args->af_smpl->idx[i]], &str); + } + rmme = tmp = smpl_ilist_init(args->hdr, str.s, 0, SMPL_NONE); + } + if ( tmp->n < bcf_hdr_nsamples(args->hdr) ) + { + str.l = 0; + for (i=0; in; i++) + { + if ( str.l ) kputc(',', &str); + kputs(args->hdr->samples[tmp->idx[i]], &str); + } + int ret = bcf_hdr_set_samples(args->hdr, str.s, 0); + if ( ret<0 ) error("Error parsing the list of samples: %s\n", str.s); + else if ( ret>0 ) error("The %d-th sample not found in the VCF: %s\n", ret,str.s); + + // update sample ids + smpl_ilist_destroy(args->roh_smpl); + args->roh_smpl = smpl_ilist_init(args->hdr, args->samples, args->samples_is_file, SMPL_NONE); + + if ( args->af_smpl ) + { + smpl_ilist_destroy(args->af_smpl); + args->af_smpl = smpl_ilist_init(args->hdr, args->estimate_AF, 1, SMPL_NONE); + } + } + free(str.s); + if ( rmme ) + smpl_ilist_destroy(rmme); + } + } + + // check whether all samples are in this list. If so, the lookup will not be needed + if ( args->af_smpl && args->af_smpl->n == bcf_hdr_nsamples(args->hdr) ) + { + // all samples are in this list + smpl_ilist_destroy(args->af_smpl); + args->af_smpl = NULL; + } + + if ( args->buffer_size ) + { + args->nbuf_olap = -1; + char *end; + double tmp = strtod(args->buffer_size,&end); + if ( *end ) + { + if ( *end!=',') error("Could not parse: --buffer-size %s\n", args->buffer_size); + args->nbuf_olap = strtol(end+1,&end,10); + if ( *end || args->nbuf_olap<0 ) error("Could not parse: --bufer-size %s\n", args->buffer_size); + } + if ( tmp<0 ) + args->nbuf_max = fabs(tmp)*1e6/(4+8*2)/args->roh_smpl->n; + else + args->nbuf_max = tmp; + + if ( args->nbuf_olap<0 ) + args->nbuf_olap = args->nbuf_max*0.01; + } + fprintf(stderr,"Number of target samples: %d\n", args->roh_smpl->n); + fprintf(stderr,"Number of --estimate-AF samples: %d\n", args->af_smpl ? args->af_smpl->n : (args->estimate_AF ? bcf_hdr_nsamples(args->hdr) : 0)); + fprintf(stderr,"Number of sites in the buffer/overlap: "); + if ( args->nbuf_max ) fprintf(stderr,"%d/%d\n", args->nbuf_max,args->nbuf_olap); + else fprintf(stderr,"unlimited\n"); + + args->smpl = (smpl_t*) calloc(args->roh_smpl->n,sizeof(smpl_t)); + + for (i=0; i<256; i++) args->pl2p[i] = pow(10., -i/10.); + + // Init transition matrix and HMM + double tprob[4]; + MAT(tprob,2,STATE_HW,STATE_HW) = 1 - args->t2AZ; + MAT(tprob,2,STATE_HW,STATE_AZ) = args->t2HW; + MAT(tprob,2,STATE_AZ,STATE_HW) = args->t2AZ; + MAT(tprob,2,STATE_AZ,STATE_AZ) = 1 - args->t2HW; + + args->hmm = hmm_init(2, tprob, 10000); + if ( args->genmap_fname ) + hmm_set_tprob_func(args->hmm, set_tprob_genmap, args); + else if ( args->rec_rate > 0 ) + hmm_set_tprob_func(args->hmm, set_tprob_rrate, args); + + args->out = bgzf_open(strcmp("stdout",args->output_fname)?args->output_fname:"-", args->output_type&OUTPUT_GZ ? "wg" : "wu"); + if ( !args->out ) error("Failed to open %s: %s\n", args->output_fname, strerror(errno)); + + // print header + args->str.l = 0; + ksprintf(&args->str, "# This file was produced by: bcftools roh(%s+htslib-%s)\n", bcftools_version(),hts_version()); + ksprintf(&args->str, "# The command line was:\tbcftools %s", args->argv[0]); + for (i=1; iargc; i++) + ksprintf(&args->str, " %s",args->argv[i]); + ksprintf(&args->str, "\n#\n"); + if ( args->output_type & OUTPUT_RG ) + { + i = 2; + ksprintf(&args->str, "# RG"); + ksprintf(&args->str, "\t[%d]Sample", i++); + ksprintf(&args->str, "\t[%d]Chromosome", i++); + ksprintf(&args->str, "\t[%d]Start", i++); + ksprintf(&args->str, "\t[%d]End", i++); + ksprintf(&args->str, "\t[%d]Length (bp)", i++); + ksprintf(&args->str, "\t[%d]Number of markers", i++); + ksprintf(&args->str, "\t[%d]Quality (average fwd-bwd phred score)", i++); + ksprintf(&args->str, "\n"); + } + if ( args->output_type & OUTPUT_ST ) + { + i = 2; + ksprintf(&args->str, "# ST"); + ksprintf(&args->str, "\t[%d]Sample", i++); + ksprintf(&args->str, "\t[%d]Chromosome", i++); + ksprintf(&args->str, "\t[%d]Position", i++); + ksprintf(&args->str, "\t[%d]State (0:HW, 1:AZ)", i++); + ksprintf(&args->str, "\t[%d]Quality (fwd-bwd phred score)", i++); + ksprintf(&args->str, "\n"); + } + if ( args->vi_training) + { + i = 2; + ksprintf(&args->str, "# VT, Viterbi Training"); + ksprintf(&args->str, "\t[%d]Sample", i++); + ksprintf(&args->str, "\t[%d]Iteration", i++); + ksprintf(&args->str, "\t[%d]dAZ", i++); + ksprintf(&args->str, "\t[%d]dHW", i++); + ksprintf(&args->str, "\t[%d]1 - P(HW|HW)", i++); + ksprintf(&args->str, "\t[%d]P(AZ|HW)", i++); + ksprintf(&args->str, "\t[%d]1 - P(AZ|AZ)", i++); + ksprintf(&args->str, "\t[%d]P(HW|AZ)", i++); + ksprintf(&args->str, "\n"); + } + if ( bgzf_write(args->out, args->str.s, args->str.l) != args->str.l ) + error("Error writing %s: %s\n", args->output_fname, strerror(errno)); +} + +static void destroy_data(args_t *args) +{ + if ( bgzf_close(args->out)!=0 ) error("Error: close failed .. %s\n", args->output_fname); + int i; + for (i=0; iroh_smpl->n; i++) + { + free(args->smpl[i].eprob); + free(args->smpl[i].sites); + free(args->smpl[i].rid); + free(args->smpl[i].rid_off); + free(args->smpl[i].snapshot); + } + free(args->str.s); + free(args->smpl); + if ( args->af_smpl ) smpl_ilist_destroy(args->af_smpl); + smpl_ilist_destroy(args->roh_smpl); + free(args->rids); + free(args->rid_offs); + hmm_destroy(args->hmm); + bcf_sr_destroy(args->files); + free(args->AFs); free(args->pdg); + free(args->genmap); + free(args->itmp); + free(args->samples); +} + +static int load_genmap(args_t *args, const char *chr) +{ + if ( !args->genmap_fname ) { args->ngenmap = 0; return 0; } + + kstring_t str = {0,0,0}; + char *fname = strstr(args->genmap_fname,"{CHROM}"); + if ( fname ) + { + kputsn(args->genmap_fname, fname - args->genmap_fname, &str); + kputs(chr, &str); + kputs(fname+7,&str); + fname = str.s; + } + else + fname = args->genmap_fname; + + htsFile *fp = hts_open(fname, "rb"); + if ( !fp ) + { + args->ngenmap = 0; + return -1; + } + + hts_getline(fp, KS_SEP_LINE, &str); + if ( strcmp(str.s,"position COMBINED_rate(cM/Mb) Genetic_Map(cM)") ) + error("Unexpected header, found:\n\t[%s], but expected:\n\t[position COMBINED_rate(cM/Mb) Genetic_Map(cM)]\n", fname, str.s); + + args->ngenmap = args->igenmap = 0; + while ( hts_getline(fp, KS_SEP_LINE, &str) > 0 ) + { + args->ngenmap++; + hts_expand(genmap_t,args->ngenmap,args->mgenmap,args->genmap); + genmap_t *gm = &args->genmap[args->ngenmap-1]; + + // position, convert to 0-based + char *tmp, *end; + gm->pos = strtol(str.s, &tmp, 10); + if ( str.s==tmp ) error("Could not parse %s: %s\n", fname, str.s); + gm->pos -= 1; + + // skip second column + tmp++; + while ( *tmp && !isspace(*tmp) ) tmp++; + + // read the genetic map in cM, scale from % to likelihood + gm->rate = strtod(tmp+1, &end); + if ( tmp+1==end ) error("Could not parse %s: %s\n", fname, str.s); + gm->rate *= 0.01; + } + if ( !args->ngenmap ) error("Genetic map empty?\n"); + if ( hts_close(fp) ) error("Close failed\n"); + free(str.s); + return 0; +} + +static double get_genmap_rate(args_t *args, int start, int end) +{ + // position i to be equal to or smaller than start + int i = args->igenmap; + if ( args->genmap[i].pos > start ) + { + while ( i>0 && args->genmap[i].pos > start ) i--; + } + else + { + while ( i+1ngenmap && args->genmap[i+1].pos < start ) i++; + } + // position j to be equal or larger than end + int j = i; + while ( j+1ngenmap && args->genmap[j].pos < end ) j++; + if ( i==j ) + { + args->igenmap = i; + return 0; + } + + if ( start < args->genmap[i].pos ) start = args->genmap[i].pos; + if ( end > args->genmap[j].pos ) end = args->genmap[j].pos; + double rate = (args->genmap[j].rate - args->genmap[i].rate)/(args->genmap[j].pos - args->genmap[i].pos) * (end-start); + args->igenmap = j; + return rate; +} + +void set_tprob_genmap(hmm_t *hmm, uint32_t prev_pos, uint32_t pos, void *data, double *tprob) +{ + args_t *args = (args_t*) data; + double ci = get_genmap_rate(args, prev_pos, pos); + if ( args->rec_rate ) ci *= args->rec_rate; + if ( ci > 1 ) ci = 1; + MAT(tprob,2,STATE_HW,STATE_AZ) *= ci; + MAT(tprob,2,STATE_AZ,STATE_HW) *= ci; + MAT(tprob,2,STATE_AZ,STATE_AZ) = 1 - MAT(tprob,2,STATE_HW,STATE_AZ); + MAT(tprob,2,STATE_HW,STATE_HW) = 1 - MAT(tprob,2,STATE_AZ,STATE_HW); +} + +void set_tprob_rrate(hmm_t *hmm, uint32_t prev_pos, uint32_t pos, void *data, double *tprob) +{ + args_t *args = (args_t*) data; + double ci = (pos - prev_pos) * args->rec_rate; + if ( ci > 1 ) ci = 1; + MAT(tprob,2,STATE_HW,STATE_AZ) *= ci; + MAT(tprob,2,STATE_AZ,STATE_HW) *= ci; + MAT(tprob,2,STATE_AZ,STATE_AZ) = 1 - MAT(tprob,2,STATE_HW,STATE_AZ); + MAT(tprob,2,STATE_HW,STATE_HW) = 1 - MAT(tprob,2,STATE_AZ,STATE_HW); +} + + +/** + * This function implements the HMM model: + * D = Data, AZ = autozygosity, HW = Hardy-Weinberg (non-autozygosity), + * f = non-ref allele frequency + * + * Emission probabilities: + * oAZ = P_i(D|AZ) = (1-f)*P(D|RR) + f*P(D|AA) + * oHW = P_i(D|HW) = (1-f)^2 * P(D|RR) + f^2 * P(D|AA) + 2*f*(1-f)*P(D|RA) + * + * Transition probabilities: + * tAZ = P(AZ|HW) .. parameter + * tHW = P(HW|AZ) .. parameter + * + * ci = P_i(C) .. probability of cross-over at site i, from genetic map + * + * AZi = P_i(AZ) .. probability of site i being AZ/non-AZ, scaled so that AZi+HWi = 1 + * HWi = P_i(HW) + * + * P_i(AZ|HW) = P(AZ|HW) * ci * HW{i-1} = tAZ * ci * (1 - AZ{i-1}) + * P_i(HW|AZ) = P(HW|AZ) * ci * AZ{i-1} = tHW * ci * AZ{i-1} + * P_i(AZ|AZ) = 1 - P_i(HW|AZ) + * P_i(HW|HW) = 1 - P_i(AZ|HW) + * + */ + +static void flush_viterbi(args_t *args, int ismpl) +{ + smpl_t *smpl = &args->smpl[ismpl]; + if ( !smpl->nsites ) return; + + const char *name = args->hdr->samples[ args->roh_smpl->idx[ismpl] ]; + + int i,j,k; + + if ( !args->vi_training ) // single viterbi pass + { + hmm_restore(args->hmm, smpl->snapshot); + int end = (args->nbuf_max && smpl->nsites >= args->nbuf_max && smpl->nsites > args->nbuf_olap) ? smpl->nsites - args->nbuf_olap : smpl->nsites; + if ( end < smpl->nsites ) + smpl->snapshot = hmm_snapshot(args->hmm, smpl->snapshot, smpl->sites[smpl->nsites - args->nbuf_olap - 1]); + + args->igenmap = smpl->igenmap; + hmm_run_viterbi(args->hmm, smpl->nsites, smpl->eprob, smpl->sites); + hmm_run_fwd_bwd(args->hmm, smpl->nsites, smpl->eprob, smpl->sites); + double *fwd = hmm_get_fwd_bwd_prob(args->hmm); + + const char *chr = bcf_hdr_id2name(args->hdr,args->prev_rid); + uint8_t *vpath = hmm_get_viterbi_path(args->hmm); + + for (i=0; ioutput_type & OUTPUT_ST ) + { + args->str.l = 0; + ksprintf(&args->str, "ST\t%s\t%s\t%d\t%d\t%.1f\n", name,chr,smpl->sites[i]+1, state, qual); + if ( bgzf_write(args->out, args->str.s, args->str.l) != args->str.l ) error("Error writing %s: %s\n", args->output_fname, strerror(errno)); + } + + if ( args->output_type & OUTPUT_RG ) + { + if ( state!=smpl->rg.state ) + { + if ( !state ) // the region ends, flush + { + args->str.l = 0; + ksprintf(&args->str, "RG\t%s\t%s\t%d\t%d\t%d\t%d\t%.1f\n",name,bcf_hdr_id2name(args->hdr,smpl->rg.rid), + smpl->rg.beg+1,smpl->rg.end+1,smpl->rg.end-smpl->rg.beg+1,smpl->rg.nqual,smpl->rg.qual/smpl->rg.nqual); + if ( bgzf_write(args->out, args->str.s, args->str.l) != args->str.l ) error("Error writing %s: %s\n", args->output_fname, strerror(errno)); + smpl->rg.state = 0; + } + else + { + smpl->rg.state = 1; + smpl->rg.beg = smpl->sites[i]; + smpl->rg.rid = args->prev_rid; + } + } + else if ( state ) + { + smpl->rg.nqual++; + smpl->rg.qual += qual; + smpl->rg.end = smpl->sites[i]; + } + } + } + + if ( end < smpl->nsites ) + { + end = smpl->nsites - args->nbuf_olap; + memmove(smpl->sites, smpl->sites + end, sizeof(*smpl->sites)*args->nbuf_olap); + memmove(smpl->eprob, smpl->eprob + end*2, sizeof(*smpl->eprob)*args->nbuf_olap*2); + smpl->nsites = args->nbuf_olap; + smpl->igenmap = args->igenmap; + } + else + { + smpl->nsites = 0; + smpl->igenmap = 0; + + if ( smpl->rg.state ) + { + args->str.l = 0; + ksprintf(&args->str, "RG\t%s\t%s\t%d\t%d\t%d\t%d\t%.1f\n",name,bcf_hdr_id2name(args->hdr,smpl->rg.rid), + smpl->rg.beg+1,smpl->rg.end+1,smpl->rg.end-smpl->rg.beg+1,smpl->rg.nqual,smpl->rg.qual/smpl->rg.nqual); + if ( bgzf_write(args->out, args->str.s, args->str.l) != args->str.l ) error("Error writing %s: %s\n", args->output_fname, strerror(errno)); + smpl->rg.state = 0; + } + } + + return; + } + + + // viterbi training, multiple chromosomes + double t2az_prev, t2hw_prev; + double deltaz, delthw; + + double *tprob_arr = hmm_get_tprob(args->hmm); + MAT(tprob_arr,2,STATE_HW,STATE_HW) = 1 - args->t2AZ; + MAT(tprob_arr,2,STATE_HW,STATE_AZ) = args->t2HW; + MAT(tprob_arr,2,STATE_AZ,STATE_HW) = args->t2AZ; + MAT(tprob_arr,2,STATE_AZ,STATE_AZ) = 1 - args->t2HW; + hmm_set_tprob(args->hmm, tprob_arr, 10000); + + int niter = 0; + do + { + tprob_arr = hmm_get_tprob(args->hmm); + t2az_prev = MAT(tprob_arr,2,STATE_AZ,STATE_HW); //args->t2AZ; + t2hw_prev = MAT(tprob_arr,2,STATE_HW,STATE_AZ); //args->t2HW; + double tprob_new[] = { 0,0,0,0 }; + for (i=0; inrid; i++) + { + int ioff = smpl->rid_off[i]; + int nsites = (i+1==smpl->nrid ? smpl->nsites : smpl->rid_off[i+1]) - ioff; + args->igenmap = 0; + tprob_arr = hmm_run_baum_welch(args->hmm, nsites, smpl->eprob+ioff*2, smpl->sites+ioff); + for (j=0; j<2; j++) + for (k=0; k<2; k++) MAT(tprob_new,2,j,k) += MAT(tprob_arr,2,j,k); + } + for (j=0; j<2; j++) + for (k=0; k<2; k++) MAT(tprob_new,2,j,k) /= smpl->nrid; + + hmm_set_tprob(args->hmm, tprob_new, 10000); + + deltaz = fabs(MAT(tprob_new,2,STATE_AZ,STATE_HW)-t2az_prev); + delthw = fabs(MAT(tprob_new,2,STATE_HW,STATE_AZ)-t2hw_prev); + niter++; + args->str.l = 0; + ksprintf(&args->str, "VT\t%s\t%d\t%e\t%e\t%e\t%e\t%e\t%e\n", + name,niter,deltaz,delthw, + 1-MAT(tprob_new,2,STATE_HW,STATE_HW),MAT(tprob_new,2,STATE_AZ,STATE_HW), + 1-MAT(tprob_new,2,STATE_AZ,STATE_AZ),MAT(tprob_new,2,STATE_HW,STATE_AZ)); + if ( bgzf_write(args->out, args->str.s, args->str.l) != args->str.l ) error("Error writing %s: %s\n", args->output_fname, strerror(errno)); + } + while ( deltaz > args->baum_welch_th || delthw > args->baum_welch_th ); + + // output the results + for (i=0; inrid; i++) + { + int ioff = smpl->rid_off[i]; + int nsites = (i+1==smpl->nrid ? smpl->nsites : smpl->rid_off[i+1]) - ioff; + args->igenmap = 0; + hmm_run_viterbi(args->hmm, nsites, smpl->eprob+ioff*2, smpl->sites+ioff); + hmm_run_fwd_bwd(args->hmm, nsites, smpl->eprob+ioff*2, smpl->sites+ioff); + uint8_t *vpath = hmm_get_viterbi_path(args->hmm); + double *fwd = hmm_get_fwd_bwd_prob(args->hmm); + + const char *chr = bcf_hdr_id2name(args->hdr,smpl->rid[i]); + for (j=0; jstr.l = 0; + ksprintf(&args->str, "ROH\t%s\t%s\t%d\t%d\t%.1f\n", name,chr,smpl->sites[ioff+j]+1, state, phred_score(1.0-pval[state])); + if ( bgzf_write(args->out, args->str.s, args->str.l) != args->str.l ) error("Error writing %s: %s\n", args->output_fname, strerror(errno)); + } + } +} + +int read_AF(bcf_sr_regions_t *tgt, bcf1_t *line, double *alt_freq) +{ + if ( tgt->nals != line->n_allele ) return -1; // number of alleles does not match + + int i; + for (i=0; inals; i++) + if ( strcmp(line->d.allele[i],tgt->als[i]) ) break; // we could be smarter, see vcmp + if ( inals ) return -1; + + char *tmp, *str = tgt->line.s; + i = 0; + while ( *str && i<3 ) + { + if ( *str=='\t' ) i++; + str++; + } + *alt_freq = strtod(str, &tmp); + if ( *tmp && !isspace(*tmp) ) + { + if ( str[0]=='.' && (!str[1] || isspace(str[1])) ) return -1; // missing value + error("Could not parse: [%s]\n", tgt->line.s); + } + if ( *alt_freq<0 || *alt_freq>1 ) error("Could not parse AF: [%s]\n", tgt->line.s); + return 0; +} + +int8_t *get_GT(args_t *args, bcf1_t *line) +{ + int i; + for (i=0; in_fmt; i++) + if ( line->d.fmt[i].id==args->gt_hdr_id ) break; + if ( i==line->n_fmt ) return NULL; // the tag is not present in this record + + bcf_fmt_t *fmt = &line->d.fmt[i]; + if ( fmt->n!=2 ) return NULL; // not diploid + + if ( fmt->type!=BCF_BT_INT8 ) error("This is unexpected, GT type is %d\n", fmt->type); + return (int8_t*) fmt->p; +} + +int estimate_AF_from_GT(args_t *args, int8_t *gt, double *alt_freq) +{ + int i, nalt = 0, nref = 0; + if ( args->af_smpl ) // subset samples for AF estimate + { + for (i=0; iaf_smpl->n; i++) + { + int ismpl = args->af_smpl->idx[i]; + if ( bcf_gt_is_missing(gt[2*ismpl]) || bcf_gt_is_missing(gt[2*ismpl+1]) ) continue; + + if ( bcf_gt_allele(gt[2*ismpl]) ) nalt++; + else nref++; + + if ( bcf_gt_allele(gt[2*ismpl+1]) ) nalt++; + else nref++; + } + } + else // all samples used in AF estimate + { + int8_t *end = gt + 2*bcf_hdr_nsamples(args->hdr); + while ( gt < end ) + { + if ( bcf_gt_is_missing(gt[0]) || bcf_gt_is_missing(gt[1]) ) continue; + + if ( bcf_gt_allele(gt[0]) ) nalt++; + else nref++; + + if ( bcf_gt_allele(gt[1]) ) nalt++; + else nref++; + + gt += 2; + } + } + if ( !nalt && !nref ) return -1; + + *alt_freq = (double)nalt / (nalt + nref); + return 0; +} + +int estimate_AF_from_PL(args_t *args, bcf_fmt_t *fmt_pl, int ial, double *alt_freq) +{ + double af = 0; + int i, j, naf = 0; + + int irr = bcf_alleles2gt(0,0), ira = bcf_alleles2gt(0,ial), iaa = bcf_alleles2gt(ial,ial); + if ( iaa >= fmt_pl->n ) return -1; // not diploid or wrong number of fields + + if ( args->af_smpl ) // subset samples for AF estimate + { + #define BRANCH(type_t) \ + { \ + for (i=0; iaf_smpl->n; i++) \ + { \ + int ismpl = args->af_smpl->idx[i]; \ + type_t *p = (type_t*)fmt_pl->p + fmt_pl->n*ismpl; \ + if ( p[irr]<0 || p[ira]<0 || p[iaa]<0 ) continue; /* missing value */ \ + if ( p[irr]==p[ira] && p[irr]==p[iaa] ) continue; /* all values are the same */ \ + double prob[3], norm = 0; \ + prob[0] = p[irr] < (type_t)256 ? args->pl2p[ p[irr] ] : args->pl2p[255]; \ + prob[1] = p[ira] < (type_t)256 ? args->pl2p[ p[ira] ] : args->pl2p[255]; \ + prob[2] = p[iaa] < (type_t)256 ? args->pl2p[ p[iaa] ] : args->pl2p[255]; \ + for (j=0; j<3; j++) norm += prob[j]; \ + for (j=0; j<3; j++) prob[j] /= norm; \ + af += 0.5*prob[1] + prob[2]; \ + naf++; \ + } \ + } + switch (fmt_pl->type) { + case BCF_BT_INT8: BRANCH(int8_t); break; + case BCF_BT_INT16: BRANCH(int16_t); break; + case BCF_BT_INT32: BRANCH(int32_t); break; + default: fprintf(stderr,"Unknown format type for PL: %s:%d .. fmt->type=%d\n", __FILE__,__LINE__, fmt_pl->type); exit(1); + } + #undef BRANCH + } + else // all samples used in AF estimate + { + int nsmpl = bcf_hdr_nsamples(args->hdr); + #define BRANCH(type_t) \ + { \ + type_t *p = (type_t*)fmt_pl->p; \ + p -= fmt_pl->n; \ + for (i=0; in; \ + if ( p[irr]<0 || p[ira]<0 || p[iaa]<0 ) continue; /* missing value */ \ + if ( p[irr]==p[ira] && p[irr]==p[iaa] ) continue; /* all values are the same */ \ + double prob[3], norm = 0; \ + prob[0] = p[irr] < (type_t)256 ? args->pl2p[ p[irr] ] : args->pl2p[255]; \ + prob[1] = p[ira] < (type_t)256 ? args->pl2p[ p[ira] ] : args->pl2p[255]; \ + prob[2] = p[iaa] < (type_t)256 ? args->pl2p[ p[iaa] ] : args->pl2p[255]; \ + for (j=0; j<3; j++) norm += prob[j]; \ + for (j=0; j<3; j++) prob[j] /= norm; \ + af += 0.5*prob[1] + prob[2]; \ + naf++; \ + } \ + } + switch (fmt_pl->type) { + case BCF_BT_INT8: BRANCH(int8_t); break; + case BCF_BT_INT16: BRANCH(int16_t); break; + case BCF_BT_INT32: BRANCH(int32_t); break; + default: fprintf(stderr,"Unknown format type for PL: %s:%d .. fmt->type=%d\n", __FILE__,__LINE__, fmt_pl->type); exit(1); + } + #undef BRANCH + } + if ( !naf ) return -1; + + *alt_freq = af / naf; + return 0; +} + +bcf_fmt_t *get_PL(args_t *args, bcf1_t *line) +{ + int i; + for (i=0; in_fmt; i++) + if ( line->d.fmt[i].id==args->pl_hdr_id ) return &line->d.fmt[i]; + return NULL; +} + +int process_line(args_t *args, bcf1_t *line, int ial) +{ + if ( !(line->unpacked & BCF_UN_FMT) ) bcf_unpack(line, BCF_UN_FMT); + + double alt_freq; + int8_t *GTs = NULL; + bcf_fmt_t *fmt_pl = NULL; + + // Set allele frequency + int ret = 0, i,j; + if ( args->af_tag ) + { + // Use an INFO tag provided by the user + ret = bcf_get_info_float(args->hdr, line, args->af_tag, &args->AFs, &args->mAFs); + if ( ret>0 ) + alt_freq = args->AFs[ial-1]; + if ( ret==-2 ) + error("Type mismatch for INFO/%s tag at %s:%d\n", args->af_tag, bcf_seqname(args->hdr,line), line->pos+1); + } + else if ( args->af_fname ) + { + // Read AF from a file + ret = read_AF(args->files->targets, line, &alt_freq); + } + else if ( args->dflt_AF > 0 ) + { + alt_freq = args->dflt_AF; + } + else if ( args->estimate_AF ) + { + // Estimate AF from GTs or PLs of all samples or samples listed in a file + if ( args->af_from_PL ) + { + fmt_pl = get_PL(args, line); + if ( !fmt_pl ) return -1; + ret = estimate_AF_from_PL(args, fmt_pl, ial, &alt_freq); + } + else + { + GTs = get_GT(args, line); + if ( !GTs ) return -1; + ret = estimate_AF_from_GT(args, GTs, &alt_freq); + } + } + else + { + // Use AC/AN + int AC = -1, AN = 0; + ret = bcf_get_info_int32(args->hdr, line, "AN", &args->itmp, &args->mitmp); + if ( ret==1 ) + { + AN = args->itmp[0]; + ret = bcf_get_info_int32(args->hdr, line, "AC", &args->itmp, &args->mitmp); + if ( ret>0 ) + AC = args->itmp[0]; + } + if ( AN<=0 || AC<0 ) + ret = -1; + else + alt_freq = (double) AC/AN; + } + + if ( ret<0 ) return ret; + if ( alt_freq==0.0 ) return -1; + + int irr = bcf_alleles2gt(0,0), ira = bcf_alleles2gt(0,ial), iaa = bcf_alleles2gt(ial,ial); + if ( args->fake_PLs ) + { + if ( !GTs ) GTs = get_GT(args, line); + } + else + { + fmt_pl = get_PL(args, line); + if ( !fmt_pl ) return -1; + if ( iaa >= fmt_pl->n ) return -1; // not diploid or wrong number of fields + } + + for (i=0; iroh_smpl->n; i++) + { + int ismpl = args->roh_smpl->idx[i]; + + // set P(D|G) + double pdg[3]; + if ( args->fake_PLs ) + { + int8_t *gt = GTs + 2*ismpl; + if ( bcf_gt_is_missing(gt[0]) || bcf_gt_is_missing(gt[1]) ) continue; + + int a = bcf_gt_allele(gt[0]); + int b = bcf_gt_allele(gt[1]); + if ( a!=b ) + { + pdg[0] = pdg[2] = args->unseen_PL; + pdg[1] = 1 - 2*args->unseen_PL; + } + else if ( a==0 ) + { + pdg[0] = 1 - args->unseen_PL - args->unseen_PL*args->unseen_PL; + pdg[1] = args->unseen_PL; + pdg[2] = args->unseen_PL*args->unseen_PL; + } + else + { + pdg[0] = args->unseen_PL*args->unseen_PL; + pdg[1] = args->unseen_PL; + pdg[2] = 1 - args->unseen_PL - args->unseen_PL*args->unseen_PL; + } + } + else + { + #define BRANCH(type_t) \ + { \ + type_t *p = (type_t*)fmt_pl->p + fmt_pl->n*ismpl; \ + if ( p[irr]<0 || p[ira]<0 || p[iaa]<0 ) continue; /* missing value */ \ + if ( p[irr]==p[ira] && p[irr]==p[iaa] ) continue; /* all values are the same */ \ + pdg[0] = p[irr] < (type_t)256 ? args->pl2p[ p[irr] ] : args->pl2p[255]; \ + pdg[1] = p[ira] < (type_t)256 ? args->pl2p[ p[ira] ] : args->pl2p[255]; \ + pdg[2] = p[iaa] < (type_t)256 ? args->pl2p[ p[iaa] ] : args->pl2p[255]; \ + } + switch (fmt_pl->type) { + case BCF_BT_INT8: BRANCH(int8_t); break; + case BCF_BT_INT16: BRANCH(int16_t); break; + case BCF_BT_INT32: BRANCH(int32_t); break; + default: fprintf(stderr,"Unknown format type for PL: %s:%d .. fmt->type=%d\n", __FILE__,__LINE__, fmt_pl->type); exit(1); + } + #undef BRANCH + } + + double sum = pdg[0] + pdg[1] + pdg[2]; + if ( !sum ) continue; + for (j=0; j<3; j++) pdg[j] /= sum; + if ( args->skip_homref && pdg[0]>0.99 ) continue; + + smpl_t *smpl = &args->smpl[i]; + smpl->nused++; + + if ( smpl->nsites >= smpl->msites ) + { + hts_expand(uint32_t,smpl->nsites+1,smpl->msites,smpl->sites); + smpl->eprob = (double*) realloc(smpl->eprob,sizeof(*smpl->eprob)*smpl->msites*2); + if ( !smpl->eprob ) error("Error: failed to alloc %d bytes\n", sizeof(*smpl->eprob)*smpl->msites*2); + } + + // Calculate emission probabilities P(D|AZ) and P(D|HW) + double *eprob = &smpl->eprob[2*smpl->nsites]; + eprob[STATE_AZ] = pdg[0]*(1-alt_freq) + pdg[2]*alt_freq; + eprob[STATE_HW] = pdg[0]*(1-alt_freq)*(1-alt_freq) + 2*pdg[1]*(1-alt_freq)*alt_freq + pdg[2]*alt_freq*alt_freq; + + smpl->sites[smpl->nsites] = line->pos; + smpl->nsites++; + + if ( args->vi_training ) + { + if ( !smpl->nrid || line->rid!=smpl->rid[smpl->nrid-1] ) + { + smpl->nrid++; + smpl->rid = (int*) realloc(smpl->rid,sizeof(*smpl->rid)*smpl->nrid); + smpl->rid[smpl->nrid-1] = line->rid; + smpl->rid_off = (int*) realloc(smpl->rid_off,sizeof(*smpl->rid_off)*smpl->nrid); + smpl->rid_off[smpl->nrid-1] = smpl->nsites - 1; + } + } + else if ( args->nbuf_max && smpl->nsites >= args->nbuf_max ) flush_viterbi(args, i); + } + + return 0; +} + +static void vcfroh(args_t *args, bcf1_t *line) +{ + int i; + + // Are we done? + if ( !line ) + { + for (i=0; iroh_smpl->n; i++) flush_viterbi(args, i); + return; + } + args->ntot++; + + // Skip unwanted lines, for simplicity we consider only biallelic sites + if ( line->rid == args->skip_rid ) return; + if ( line->n_allele==1 ) return; // no ALT allele + if ( line->n_allele > 3 ) return; // cannot be bi-allelic, even with <*> + + // This can be raw callable VCF with the symbolic unseen allele <*> + int ial = 0; + for (i=1; in_allele; i++) + if ( !strcmp("<*>",line->d.allele[i]) ) { ial = i; break; } + if ( ial==0 ) // normal VCF, the symbolic allele is not present + { + if ( line->n_allele!=2 ) return; // not biallelic + ial = 1; + } + else + { + if ( line->n_allele!=3 ) return; // not biallelic + ial = ial==1 ? 2 : 1; // <*> can come in any order + } + if ( args->snps_only && !bcf_is_snp(line) ) return; + + // Initialize genetic map + int skip_rid = 0; + if ( args->prev_rid<0 ) + { + args->prev_rid = line->rid; + args->prev_pos = line->pos; + skip_rid = load_genmap(args, bcf_seqname(args->hdr,line)); + } + + // New chromosome? + if ( args->prev_rid!=line->rid ) + { + if ( !args->vi_training ) + { + for (i=0; iroh_smpl->n; i++) + { + flush_viterbi(args, i); + hmm_reset(args->hmm, args->smpl[i].snapshot); + } + } + args->prev_rid = line->rid; + args->prev_pos = line->pos; + skip_rid = load_genmap(args, bcf_seqname(args->hdr,line)); + } + else if ( args->prev_pos == line->pos ) return; // skip duplicate positions + + if ( skip_rid ) + { + fprintf(stderr,"Skipping the sequence, no genmap for %s\n", bcf_seqname(args->hdr,line)); + args->skip_rid = line->rid; + return; + } + if ( args->prev_pos > line->pos ) error("The file is not sorted?!\n"); + + args->prev_rid = line->rid; + args->prev_pos = line->pos; + + + // parse the new line + process_line(args, line, ial); +} + +static void usage(args_t *args) +{ + fprintf(stderr, "\n"); + fprintf(stderr, "About: HMM model for detecting runs of autozygosity.\n"); + fprintf(stderr, "Usage: bcftools roh [options] \n"); + fprintf(stderr, "\n"); + fprintf(stderr, "General Options:\n"); + fprintf(stderr, " --AF-dflt if AF is not known, use this allele frequency [skip]\n"); + fprintf(stderr, " --AF-tag use TAG for allele frequency\n"); + fprintf(stderr, " --AF-file read allele frequencies from file (CHR\\tPOS\\tREF,ALT\\tAF)\n"); + fprintf(stderr, " -b --buffer-size buffer size and the number of overlapping sites, 0 for unlimited [0]\n"); + fprintf(stderr, " If the first number is negative, it is interpreted as the maximum memory to\n"); + fprintf(stderr, " use, in MB. The default overlap is set to roughly 1%% of the buffer size.\n"); + fprintf(stderr, " -e, --estimate-AF [TAG], estimate AF from FORMAT/TAG (GT or PL) of all samples (\"-\") or samples listed\n"); + fprintf(stderr, " in . If TAG is not given, the frequency is estimated from GT by default\n"); + fprintf(stderr, " -G, --GTs-only use GTs and ignore PLs, instead using for PL of the two least likely genotypes.\n"); + fprintf(stderr, " Safe value to use is 30 to account for GT errors.\n"); + fprintf(stderr, " -i, --ignore-homref skip hom-ref genotypes (0/0)\n"); + fprintf(stderr, " -I, --skip-indels skip indels as their genotypes are enriched for errors\n"); + fprintf(stderr, " -m, --genetic-map genetic map in IMPUTE2 format, single file or mask, where string \"{CHROM}\"\n"); + fprintf(stderr, " is replaced with chromosome name\n"); + fprintf(stderr, " -M, --rec-rate constant recombination rate per bp\n"); + fprintf(stderr, " -o, --output write output to a file [standard output]\n"); + fprintf(stderr, " -O, --output-type [srz] output s:per-site, r:regions, z:compressed [sr]\n"); + fprintf(stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(stderr, " -s, --samples list of samples to analyze [all samples]\n"); + fprintf(stderr, " -S, --samples-file file of samples to analyze [all samples]\n"); + fprintf(stderr, " -t, --targets similar to -r but streams rather than index-jumps\n"); + fprintf(stderr, " -T, --targets-file similar to -R but streams rather than index-jumps\n"); + fprintf(stderr, " --threads number of extra decompression threads [0]\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "HMM Options:\n"); + fprintf(stderr, " -a, --hw-to-az P(AZ|HW) transition probability from HW (Hardy-Weinberg) to AZ (autozygous) state [6.7e-8]\n"); + fprintf(stderr, " -H, --az-to-hw P(HW|AZ) transition probability from AZ to HW state [5e-9]\n"); + fprintf(stderr, " -V, --viterbi-training estimate HMM parameters, is the convergence threshold, e.g. 1e-10 (experimental)\n"); + fprintf(stderr, "\n"); + exit(1); +} + +int main_vcfroh(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->files = bcf_sr_init(); + args->t2AZ = 6.7e-8; + args->t2HW = 5e-9; + args->rec_rate = 0; + int regions_is_file = 0, targets_is_file = 0; + + static struct option loptions[] = + { + {"AF-tag",1,0,0}, + {"AF-file",1,0,1}, + {"AF-dflt",1,0,2}, + {"buffer-size",1,0,'b'}, + {"ignore-homref",0,0,'i'}, + {"estimate-AF",1,0,'e'}, + {"output",1,0,'o'}, + {"output-type",1,0,'O'}, + {"GTs-only",1,0,'G'}, + {"samples",1,0,'s'}, + {"samples-file",1,0,'S'}, + {"hw-to-az",1,0,'a'}, + {"az-to-hw",1,0,'H'}, + {"viterbi-training",1,0,'V'}, + {"targets",1,0,'t'}, + {"targets-file",1,0,'T'}, + {"regions",1,0,'r'}, + {"regions-file",1,0,'R'}, + {"genetic-map",1,0,'m'}, + {"rec-rate",1,0,'M'}, + {"skip-indels",0,0,'I'}, + {"threads",1,0,9}, + {0,0,0,0} + }; + + int naf_opts = 0; + char *tmp; + while ((c = getopt_long(argc, argv, "h?r:R:t:T:H:a:s:S:m:M:G:Ia:e:V:b:O:o:i",loptions,NULL)) >= 0) { + switch (c) { + case 0: args->af_tag = optarg; naf_opts++; break; + case 1: args->af_fname = optarg; naf_opts++; break; + case 2: + args->dflt_AF = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: --AF-dflt %s\n", optarg); + break; + case 'o': args->output_fname = optarg; break; + case 'O': + if ( strchr(optarg,'s') || strchr(optarg,'S') ) args->output_type |= OUTPUT_ST; + if ( strchr(optarg,'r') || strchr(optarg,'R') ) args->output_type |= OUTPUT_RG; + if ( strchr(optarg,'z') || strchr(optarg,'z') ) args->output_type |= OUTPUT_GZ; + break; + case 'e': args->estimate_AF = optarg; naf_opts++; break; + case 'b': args->buffer_size = optarg; break; + case 'i': args->skip_homref = 1; break; + case 'I': args->snps_only = 1; break; + case 'G': + args->fake_PLs = 1; + args->unseen_PL = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -G %s\n", optarg); + args->unseen_PL = pow(10,-args->unseen_PL/10.); + break; + case 'm': args->genmap_fname = optarg; break; + case 'M': + args->rec_rate = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -M %s\n", optarg); + break; + case 's': args->samples = strdup(optarg); break; + case 'S': args->samples = strdup(optarg); args->samples_is_file = 1; break; + case 'a': + args->t2AZ = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -a %s\n", optarg); + break; + case 'H': + args->t2HW = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -H %s\n", optarg); + break; + case 't': args->targets_list = optarg; break; + case 'T': args->targets_list = optarg; targets_is_file = 1; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; regions_is_file = 1; break; + case 9 : args->n_threads = strtol(optarg, 0, 0); break; + case 'V': + args->vi_training = 1; + args->baum_welch_th = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: --viterbi-training %s\n", optarg); + break; + case 'h': + case '?': usage(args); break; + default: error("Unknown argument: %s\n", optarg); + } + } + if ( !args->output_fname ) args->output_fname = "stdout"; + if ( !args->output_type ) args->output_type = OUTPUT_ST|OUTPUT_RG; + char *fname = NULL; + if ( optind==argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin + else usage(args); + } + else fname = argv[optind]; + + if ( args->vi_training && args->buffer_size ) error("Error: cannot use -b with -V\n"); + if ( args->t2AZ<0 || args->t2AZ>1 ) error("Error: The parameter --hw-to-az is not in [0,1]\n", args->t2AZ); + if ( args->t2HW<0 || args->t2HW>1 ) error("Error: The parameter --az-to-hw is not in [0,1]\n", args->t2HW); + if ( naf_opts>1 ) error("Error: The options --AF-tag, --AF-file and -e are mutually exclusive\n"); + if ( args->af_fname && args->targets_list ) error("Error: The options --AF-file and -t are mutually exclusive\n"); + if ( args->regions_list ) + { + if ( bcf_sr_set_regions(args->files, args->regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + } + if ( args->targets_list ) + { + if ( bcf_sr_set_targets(args->files, args->targets_list, targets_is_file, 0)<0 ) + error("Failed to read the targets: %s\n", args->targets_list); + } + if ( args->af_fname ) + { + if ( bcf_sr_set_targets(args->files, args->af_fname, 1, 3)<0 ) + error("Failed to read the targets: %s\n", args->af_fname); + } + if ( args->n_threads && bcf_sr_set_threads(args->files, args->n_threads)<0) + error("Failed to create threads\n"); + if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); + + init_data(args); + while ( bcf_sr_next_line(args->files) ) + { + vcfroh(args, args->files->readers[0].buffer[0]); + } + vcfroh(args, NULL); + int i, nmin = 0; + for (i=0; iroh_smpl->n; i++) + if ( !i || args->smpl[i].nused < nmin ) nmin = args->smpl[i].nused; + fprintf(stderr,"Number of lines total/processed: %d/%d\n", args->ntot,nmin); + if ( nmin==0 ) + { + fprintf(stderr,"No usable sites were found."); + if ( !naf_opts && !args->dflt_AF ) fprintf(stderr, " Consider using one of the AF options.\n"); + } + destroy_data(args); + free(args); + return 0; +} + + diff --git a/bcftools/vcfroh.c.pysam.c b/bcftools/vcfroh.c.pysam.c new file mode 100644 index 0000000..b303a40 --- /dev/null +++ b/bcftools/vcfroh.c.pysam.c @@ -0,0 +1,1226 @@ +#include "bcftools.pysam.h" + +/* vcfroh.c -- HMM model for detecting runs of autozygosity. + + Copyright (C) 2013-2015 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "HMM.h" +#include "smpl_ilist.h" + +#define STATE_HW 0 // normal state, follows Hardy-Weinberg allele frequencies +#define STATE_AZ 1 // autozygous state + +#define OUTPUT_ST (1<<1) +#define OUTPUT_RG (1<<2) +#define OUTPUT_GZ (1<<3) + +/** Genetic map */ +typedef struct +{ + int pos; + double rate; +} +genmap_t; + +/** HMM data for each sample */ +typedef struct +{ + double *eprob; // emission probs [2*nsites,msites] + uint32_t *sites; // positions [nsites,msites] + int nsites, msites; + int igenmap; // current position in genmap + int nused; // some stats to detect if things didn't go wrong + int nrid, *rid, *rid_off; // for viterbi training, keep all chromosomes + void *snapshot; // hmm snapshot + struct { + uint32_t beg,end,nqual; + double qual; + int rid, state; + } rg; +} +smpl_t; + +typedef struct _args_t +{ + bcf_srs_t *files; + bcf_hdr_t *hdr; + double t2AZ, t2HW; // P(AZ|HW) and P(HW|AZ) parameters + double unseen_PL, dflt_AF; + + char *genmap_fname; + genmap_t *genmap; + int ngenmap, mgenmap, igenmap; + double rec_rate; // constant recombination rate if > 0 + + hmm_t *hmm; + double baum_welch_th; + int nrids, *rids, *rid_offs; // multiple chroms with vi_training + int nbuf_max, nbuf_olap; + + float *AFs; + int32_t *itmp; + int mAFs, nitmp, mitmp, pl_hdr_id, gt_hdr_id; + + double pl2p[256], *pdg; + int32_t skip_rid, prev_rid, prev_pos; + + int ntot; // some stats to detect if things didn't go wrong + smpl_t *smpl; // HMM data for each sample + smpl_ilist_t *af_smpl; // list of samples to estimate AF from (--estimate-AF) + smpl_ilist_t *roh_smpl; // list of samples to analyze (--samples, --samples-file) + char *estimate_AF; // list of samples for AF estimate and query sample + int af_from_PL; // estimate AF from FMT/PL rather than FMT/GT + char **argv, *targets_list, *regions_list, *af_fname, *af_tag, *samples, *buffer_size, *output_fname; + int argc, fake_PLs, snps_only, vi_training, samples_is_file, output_type, skip_homref, n_threads; + BGZF *out; + kstring_t str; +} +args_t; + +void set_tprob_genmap(hmm_t *hmm, uint32_t prev_pos, uint32_t pos, void *data, double *tprob); +void set_tprob_rrate(hmm_t *hmm, uint32_t prev_pos, uint32_t pos, void *data, double *tprob); + +void *smalloc(size_t size) +{ + void *mem = malloc(size); + if ( !mem ) error("malloc: Could not allocate %d bytes\n", (int)size); + return mem; +} + +static void init_data(args_t *args) +{ + int i; + + args->prev_rid = args->skip_rid = -1; + args->hdr = args->files->readers[0].header; + + if ( !bcf_hdr_nsamples(args->hdr) ) error("No samples in the VCF?\n"); + + if ( !args->fake_PLs ) + { + args->pl_hdr_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, "PL"); + if ( !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FMT,args->pl_hdr_id) ) + error("Error: The FORMAT/PL tag not found in the header, consider running with -G\n"); + if ( bcf_hdr_id2type(args->hdr,BCF_HL_FMT,args->pl_hdr_id)!=BCF_HT_INT ) + error("Error: The FORMAT/PL tag not defined as Integer in the header\n"); + } + + if ( args->estimate_AF ) + { + if ( !strncmp("GT,",args->estimate_AF,3) ) args->estimate_AF += 3; + else if ( !strncmp("PL,",args->estimate_AF,3) ) { args->estimate_AF += 3; args->af_from_PL = 1; } + if ( strcmp("-",args->estimate_AF) ) + args->af_smpl = smpl_ilist_init(args->hdr, args->estimate_AF, 1, SMPL_NONE); + } + + if ( args->estimate_AF || args->fake_PLs ) + { + if ( args->af_from_PL ) + { + args->pl_hdr_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, "PL"); + if ( !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FMT,args->pl_hdr_id) ) + error("Error: The FORMAT/PL tag not found in the header\n"); + } + else + { + args->gt_hdr_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, "GT"); + if ( !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FMT,args->gt_hdr_id) ) + error("Error: The FORMAT/GT tag not found in the header\n"); + } + } + if ( args->fake_PLs ) + { + args->gt_hdr_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, "GT"); + if ( !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FMT,args->gt_hdr_id) ) + error("Error: The FORMAT/GT tag not found in the header\n"); + } + + args->roh_smpl = smpl_ilist_init(args->hdr, args->samples, args->samples_is_file, SMPL_NONE); + if ( args->samples ) + { + // we may be able to subset to a few samples, for a text VCF this can be a major speedup + if ( (bcf_sr_get_reader(args->files,0))->file->format.format==vcf ) + { + kstring_t str = {0,0,0}; + smpl_ilist_t *tmp = args->roh_smpl, *rmme = NULL; + if ( args->af_smpl ) + { + for (i=0; iroh_smpl->n; i++) + { + if ( str.l ) kputc(',', &str); + kputs(args->hdr->samples[args->roh_smpl->idx[i]], &str); + } + for (i=0; iaf_smpl->n; i++) + { + kputc(',', &str); + kputs(args->hdr->samples[args->af_smpl->idx[i]], &str); + } + rmme = tmp = smpl_ilist_init(args->hdr, str.s, 0, SMPL_NONE); + } + if ( tmp->n < bcf_hdr_nsamples(args->hdr) ) + { + str.l = 0; + for (i=0; in; i++) + { + if ( str.l ) kputc(',', &str); + kputs(args->hdr->samples[tmp->idx[i]], &str); + } + int ret = bcf_hdr_set_samples(args->hdr, str.s, 0); + if ( ret<0 ) error("Error parsing the list of samples: %s\n", str.s); + else if ( ret>0 ) error("The %d-th sample not found in the VCF: %s\n", ret,str.s); + + // update sample ids + smpl_ilist_destroy(args->roh_smpl); + args->roh_smpl = smpl_ilist_init(args->hdr, args->samples, args->samples_is_file, SMPL_NONE); + + if ( args->af_smpl ) + { + smpl_ilist_destroy(args->af_smpl); + args->af_smpl = smpl_ilist_init(args->hdr, args->estimate_AF, 1, SMPL_NONE); + } + } + free(str.s); + if ( rmme ) + smpl_ilist_destroy(rmme); + } + } + + // check whether all samples are in this list. If so, the lookup will not be needed + if ( args->af_smpl && args->af_smpl->n == bcf_hdr_nsamples(args->hdr) ) + { + // all samples are in this list + smpl_ilist_destroy(args->af_smpl); + args->af_smpl = NULL; + } + + if ( args->buffer_size ) + { + args->nbuf_olap = -1; + char *end; + double tmp = strtod(args->buffer_size,&end); + if ( *end ) + { + if ( *end!=',') error("Could not parse: --buffer-size %s\n", args->buffer_size); + args->nbuf_olap = strtol(end+1,&end,10); + if ( *end || args->nbuf_olap<0 ) error("Could not parse: --bufer-size %s\n", args->buffer_size); + } + if ( tmp<0 ) + args->nbuf_max = fabs(tmp)*1e6/(4+8*2)/args->roh_smpl->n; + else + args->nbuf_max = tmp; + + if ( args->nbuf_olap<0 ) + args->nbuf_olap = args->nbuf_max*0.01; + } + fprintf(bcftools_stderr,"Number of target samples: %d\n", args->roh_smpl->n); + fprintf(bcftools_stderr,"Number of --estimate-AF samples: %d\n", args->af_smpl ? args->af_smpl->n : (args->estimate_AF ? bcf_hdr_nsamples(args->hdr) : 0)); + fprintf(bcftools_stderr,"Number of sites in the buffer/overlap: "); + if ( args->nbuf_max ) fprintf(bcftools_stderr,"%d/%d\n", args->nbuf_max,args->nbuf_olap); + else fprintf(bcftools_stderr,"unlimited\n"); + + args->smpl = (smpl_t*) calloc(args->roh_smpl->n,sizeof(smpl_t)); + + for (i=0; i<256; i++) args->pl2p[i] = pow(10., -i/10.); + + // Init transition matrix and HMM + double tprob[4]; + MAT(tprob,2,STATE_HW,STATE_HW) = 1 - args->t2AZ; + MAT(tprob,2,STATE_HW,STATE_AZ) = args->t2HW; + MAT(tprob,2,STATE_AZ,STATE_HW) = args->t2AZ; + MAT(tprob,2,STATE_AZ,STATE_AZ) = 1 - args->t2HW; + + args->hmm = hmm_init(2, tprob, 10000); + if ( args->genmap_fname ) + hmm_set_tprob_func(args->hmm, set_tprob_genmap, args); + else if ( args->rec_rate > 0 ) + hmm_set_tprob_func(args->hmm, set_tprob_rrate, args); + + args->out = bgzf_open(strcmp("bcftools_stdout",args->output_fname)?args->output_fname:"-", args->output_type&OUTPUT_GZ ? "wg" : "wu"); + if ( !args->out ) error("Failed to open %s: %s\n", args->output_fname, strerror(errno)); + + // print header + args->str.l = 0; + ksprintf(&args->str, "# This file was produced by: bcftools roh(%s+htslib-%s)\n", bcftools_version(),hts_version()); + ksprintf(&args->str, "# The command line was:\tbcftools %s", args->argv[0]); + for (i=1; iargc; i++) + ksprintf(&args->str, " %s",args->argv[i]); + ksprintf(&args->str, "\n#\n"); + if ( args->output_type & OUTPUT_RG ) + { + i = 2; + ksprintf(&args->str, "# RG"); + ksprintf(&args->str, "\t[%d]Sample", i++); + ksprintf(&args->str, "\t[%d]Chromosome", i++); + ksprintf(&args->str, "\t[%d]Start", i++); + ksprintf(&args->str, "\t[%d]End", i++); + ksprintf(&args->str, "\t[%d]Length (bp)", i++); + ksprintf(&args->str, "\t[%d]Number of markers", i++); + ksprintf(&args->str, "\t[%d]Quality (average fwd-bwd phred score)", i++); + ksprintf(&args->str, "\n"); + } + if ( args->output_type & OUTPUT_ST ) + { + i = 2; + ksprintf(&args->str, "# ST"); + ksprintf(&args->str, "\t[%d]Sample", i++); + ksprintf(&args->str, "\t[%d]Chromosome", i++); + ksprintf(&args->str, "\t[%d]Position", i++); + ksprintf(&args->str, "\t[%d]State (0:HW, 1:AZ)", i++); + ksprintf(&args->str, "\t[%d]Quality (fwd-bwd phred score)", i++); + ksprintf(&args->str, "\n"); + } + if ( args->vi_training) + { + i = 2; + ksprintf(&args->str, "# VT, Viterbi Training"); + ksprintf(&args->str, "\t[%d]Sample", i++); + ksprintf(&args->str, "\t[%d]Iteration", i++); + ksprintf(&args->str, "\t[%d]dAZ", i++); + ksprintf(&args->str, "\t[%d]dHW", i++); + ksprintf(&args->str, "\t[%d]1 - P(HW|HW)", i++); + ksprintf(&args->str, "\t[%d]P(AZ|HW)", i++); + ksprintf(&args->str, "\t[%d]1 - P(AZ|AZ)", i++); + ksprintf(&args->str, "\t[%d]P(HW|AZ)", i++); + ksprintf(&args->str, "\n"); + } + if ( bgzf_write(args->out, args->str.s, args->str.l) != args->str.l ) + error("Error writing %s: %s\n", args->output_fname, strerror(errno)); +} + +static void destroy_data(args_t *args) +{ + if ( bgzf_close(args->out)!=0 ) error("Error: close failed .. %s\n", args->output_fname); + int i; + for (i=0; iroh_smpl->n; i++) + { + free(args->smpl[i].eprob); + free(args->smpl[i].sites); + free(args->smpl[i].rid); + free(args->smpl[i].rid_off); + free(args->smpl[i].snapshot); + } + free(args->str.s); + free(args->smpl); + if ( args->af_smpl ) smpl_ilist_destroy(args->af_smpl); + smpl_ilist_destroy(args->roh_smpl); + free(args->rids); + free(args->rid_offs); + hmm_destroy(args->hmm); + bcf_sr_destroy(args->files); + free(args->AFs); free(args->pdg); + free(args->genmap); + free(args->itmp); + free(args->samples); +} + +static int load_genmap(args_t *args, const char *chr) +{ + if ( !args->genmap_fname ) { args->ngenmap = 0; return 0; } + + kstring_t str = {0,0,0}; + char *fname = strstr(args->genmap_fname,"{CHROM}"); + if ( fname ) + { + kputsn(args->genmap_fname, fname - args->genmap_fname, &str); + kputs(chr, &str); + kputs(fname+7,&str); + fname = str.s; + } + else + fname = args->genmap_fname; + + htsFile *fp = hts_open(fname, "rb"); + if ( !fp ) + { + args->ngenmap = 0; + return -1; + } + + hts_getline(fp, KS_SEP_LINE, &str); + if ( strcmp(str.s,"position COMBINED_rate(cM/Mb) Genetic_Map(cM)") ) + error("Unexpected header, found:\n\t[%s], but expected:\n\t[position COMBINED_rate(cM/Mb) Genetic_Map(cM)]\n", fname, str.s); + + args->ngenmap = args->igenmap = 0; + while ( hts_getline(fp, KS_SEP_LINE, &str) > 0 ) + { + args->ngenmap++; + hts_expand(genmap_t,args->ngenmap,args->mgenmap,args->genmap); + genmap_t *gm = &args->genmap[args->ngenmap-1]; + + // position, convert to 0-based + char *tmp, *end; + gm->pos = strtol(str.s, &tmp, 10); + if ( str.s==tmp ) error("Could not parse %s: %s\n", fname, str.s); + gm->pos -= 1; + + // skip second column + tmp++; + while ( *tmp && !isspace(*tmp) ) tmp++; + + // read the genetic map in cM, scale from % to likelihood + gm->rate = strtod(tmp+1, &end); + if ( tmp+1==end ) error("Could not parse %s: %s\n", fname, str.s); + gm->rate *= 0.01; + } + if ( !args->ngenmap ) error("Genetic map empty?\n"); + if ( hts_close(fp) ) error("Close failed\n"); + free(str.s); + return 0; +} + +static double get_genmap_rate(args_t *args, int start, int end) +{ + // position i to be equal to or smaller than start + int i = args->igenmap; + if ( args->genmap[i].pos > start ) + { + while ( i>0 && args->genmap[i].pos > start ) i--; + } + else + { + while ( i+1ngenmap && args->genmap[i+1].pos < start ) i++; + } + // position j to be equal or larger than end + int j = i; + while ( j+1ngenmap && args->genmap[j].pos < end ) j++; + if ( i==j ) + { + args->igenmap = i; + return 0; + } + + if ( start < args->genmap[i].pos ) start = args->genmap[i].pos; + if ( end > args->genmap[j].pos ) end = args->genmap[j].pos; + double rate = (args->genmap[j].rate - args->genmap[i].rate)/(args->genmap[j].pos - args->genmap[i].pos) * (end-start); + args->igenmap = j; + return rate; +} + +void set_tprob_genmap(hmm_t *hmm, uint32_t prev_pos, uint32_t pos, void *data, double *tprob) +{ + args_t *args = (args_t*) data; + double ci = get_genmap_rate(args, prev_pos, pos); + if ( args->rec_rate ) ci *= args->rec_rate; + if ( ci > 1 ) ci = 1; + MAT(tprob,2,STATE_HW,STATE_AZ) *= ci; + MAT(tprob,2,STATE_AZ,STATE_HW) *= ci; + MAT(tprob,2,STATE_AZ,STATE_AZ) = 1 - MAT(tprob,2,STATE_HW,STATE_AZ); + MAT(tprob,2,STATE_HW,STATE_HW) = 1 - MAT(tprob,2,STATE_AZ,STATE_HW); +} + +void set_tprob_rrate(hmm_t *hmm, uint32_t prev_pos, uint32_t pos, void *data, double *tprob) +{ + args_t *args = (args_t*) data; + double ci = (pos - prev_pos) * args->rec_rate; + if ( ci > 1 ) ci = 1; + MAT(tprob,2,STATE_HW,STATE_AZ) *= ci; + MAT(tprob,2,STATE_AZ,STATE_HW) *= ci; + MAT(tprob,2,STATE_AZ,STATE_AZ) = 1 - MAT(tprob,2,STATE_HW,STATE_AZ); + MAT(tprob,2,STATE_HW,STATE_HW) = 1 - MAT(tprob,2,STATE_AZ,STATE_HW); +} + + +/** + * This function implements the HMM model: + * D = Data, AZ = autozygosity, HW = Hardy-Weinberg (non-autozygosity), + * f = non-ref allele frequency + * + * Emission probabilities: + * oAZ = P_i(D|AZ) = (1-f)*P(D|RR) + f*P(D|AA) + * oHW = P_i(D|HW) = (1-f)^2 * P(D|RR) + f^2 * P(D|AA) + 2*f*(1-f)*P(D|RA) + * + * Transition probabilities: + * tAZ = P(AZ|HW) .. parameter + * tHW = P(HW|AZ) .. parameter + * + * ci = P_i(C) .. probability of cross-over at site i, from genetic map + * + * AZi = P_i(AZ) .. probability of site i being AZ/non-AZ, scaled so that AZi+HWi = 1 + * HWi = P_i(HW) + * + * P_i(AZ|HW) = P(AZ|HW) * ci * HW{i-1} = tAZ * ci * (1 - AZ{i-1}) + * P_i(HW|AZ) = P(HW|AZ) * ci * AZ{i-1} = tHW * ci * AZ{i-1} + * P_i(AZ|AZ) = 1 - P_i(HW|AZ) + * P_i(HW|HW) = 1 - P_i(AZ|HW) + * + */ + +static void flush_viterbi(args_t *args, int ismpl) +{ + smpl_t *smpl = &args->smpl[ismpl]; + if ( !smpl->nsites ) return; + + const char *name = args->hdr->samples[ args->roh_smpl->idx[ismpl] ]; + + int i,j,k; + + if ( !args->vi_training ) // single viterbi pass + { + hmm_restore(args->hmm, smpl->snapshot); + int end = (args->nbuf_max && smpl->nsites >= args->nbuf_max && smpl->nsites > args->nbuf_olap) ? smpl->nsites - args->nbuf_olap : smpl->nsites; + if ( end < smpl->nsites ) + smpl->snapshot = hmm_snapshot(args->hmm, smpl->snapshot, smpl->sites[smpl->nsites - args->nbuf_olap - 1]); + + args->igenmap = smpl->igenmap; + hmm_run_viterbi(args->hmm, smpl->nsites, smpl->eprob, smpl->sites); + hmm_run_fwd_bwd(args->hmm, smpl->nsites, smpl->eprob, smpl->sites); + double *fwd = hmm_get_fwd_bwd_prob(args->hmm); + + const char *chr = bcf_hdr_id2name(args->hdr,args->prev_rid); + uint8_t *vpath = hmm_get_viterbi_path(args->hmm); + + for (i=0; ioutput_type & OUTPUT_ST ) + { + args->str.l = 0; + ksprintf(&args->str, "ST\t%s\t%s\t%d\t%d\t%.1f\n", name,chr,smpl->sites[i]+1, state, qual); + if ( bgzf_write(args->out, args->str.s, args->str.l) != args->str.l ) error("Error writing %s: %s\n", args->output_fname, strerror(errno)); + } + + if ( args->output_type & OUTPUT_RG ) + { + if ( state!=smpl->rg.state ) + { + if ( !state ) // the region ends, flush + { + args->str.l = 0; + ksprintf(&args->str, "RG\t%s\t%s\t%d\t%d\t%d\t%d\t%.1f\n",name,bcf_hdr_id2name(args->hdr,smpl->rg.rid), + smpl->rg.beg+1,smpl->rg.end+1,smpl->rg.end-smpl->rg.beg+1,smpl->rg.nqual,smpl->rg.qual/smpl->rg.nqual); + if ( bgzf_write(args->out, args->str.s, args->str.l) != args->str.l ) error("Error writing %s: %s\n", args->output_fname, strerror(errno)); + smpl->rg.state = 0; + } + else + { + smpl->rg.state = 1; + smpl->rg.beg = smpl->sites[i]; + smpl->rg.rid = args->prev_rid; + } + } + else if ( state ) + { + smpl->rg.nqual++; + smpl->rg.qual += qual; + smpl->rg.end = smpl->sites[i]; + } + } + } + + if ( end < smpl->nsites ) + { + end = smpl->nsites - args->nbuf_olap; + memmove(smpl->sites, smpl->sites + end, sizeof(*smpl->sites)*args->nbuf_olap); + memmove(smpl->eprob, smpl->eprob + end*2, sizeof(*smpl->eprob)*args->nbuf_olap*2); + smpl->nsites = args->nbuf_olap; + smpl->igenmap = args->igenmap; + } + else + { + smpl->nsites = 0; + smpl->igenmap = 0; + + if ( smpl->rg.state ) + { + args->str.l = 0; + ksprintf(&args->str, "RG\t%s\t%s\t%d\t%d\t%d\t%d\t%.1f\n",name,bcf_hdr_id2name(args->hdr,smpl->rg.rid), + smpl->rg.beg+1,smpl->rg.end+1,smpl->rg.end-smpl->rg.beg+1,smpl->rg.nqual,smpl->rg.qual/smpl->rg.nqual); + if ( bgzf_write(args->out, args->str.s, args->str.l) != args->str.l ) error("Error writing %s: %s\n", args->output_fname, strerror(errno)); + smpl->rg.state = 0; + } + } + + return; + } + + + // viterbi training, multiple chromosomes + double t2az_prev, t2hw_prev; + double deltaz, delthw; + + double *tprob_arr = hmm_get_tprob(args->hmm); + MAT(tprob_arr,2,STATE_HW,STATE_HW) = 1 - args->t2AZ; + MAT(tprob_arr,2,STATE_HW,STATE_AZ) = args->t2HW; + MAT(tprob_arr,2,STATE_AZ,STATE_HW) = args->t2AZ; + MAT(tprob_arr,2,STATE_AZ,STATE_AZ) = 1 - args->t2HW; + hmm_set_tprob(args->hmm, tprob_arr, 10000); + + int niter = 0; + do + { + tprob_arr = hmm_get_tprob(args->hmm); + t2az_prev = MAT(tprob_arr,2,STATE_AZ,STATE_HW); //args->t2AZ; + t2hw_prev = MAT(tprob_arr,2,STATE_HW,STATE_AZ); //args->t2HW; + double tprob_new[] = { 0,0,0,0 }; + for (i=0; inrid; i++) + { + int ioff = smpl->rid_off[i]; + int nsites = (i+1==smpl->nrid ? smpl->nsites : smpl->rid_off[i+1]) - ioff; + args->igenmap = 0; + tprob_arr = hmm_run_baum_welch(args->hmm, nsites, smpl->eprob+ioff*2, smpl->sites+ioff); + for (j=0; j<2; j++) + for (k=0; k<2; k++) MAT(tprob_new,2,j,k) += MAT(tprob_arr,2,j,k); + } + for (j=0; j<2; j++) + for (k=0; k<2; k++) MAT(tprob_new,2,j,k) /= smpl->nrid; + + hmm_set_tprob(args->hmm, tprob_new, 10000); + + deltaz = fabs(MAT(tprob_new,2,STATE_AZ,STATE_HW)-t2az_prev); + delthw = fabs(MAT(tprob_new,2,STATE_HW,STATE_AZ)-t2hw_prev); + niter++; + args->str.l = 0; + ksprintf(&args->str, "VT\t%s\t%d\t%e\t%e\t%e\t%e\t%e\t%e\n", + name,niter,deltaz,delthw, + 1-MAT(tprob_new,2,STATE_HW,STATE_HW),MAT(tprob_new,2,STATE_AZ,STATE_HW), + 1-MAT(tprob_new,2,STATE_AZ,STATE_AZ),MAT(tprob_new,2,STATE_HW,STATE_AZ)); + if ( bgzf_write(args->out, args->str.s, args->str.l) != args->str.l ) error("Error writing %s: %s\n", args->output_fname, strerror(errno)); + } + while ( deltaz > args->baum_welch_th || delthw > args->baum_welch_th ); + + // output the results + for (i=0; inrid; i++) + { + int ioff = smpl->rid_off[i]; + int nsites = (i+1==smpl->nrid ? smpl->nsites : smpl->rid_off[i+1]) - ioff; + args->igenmap = 0; + hmm_run_viterbi(args->hmm, nsites, smpl->eprob+ioff*2, smpl->sites+ioff); + hmm_run_fwd_bwd(args->hmm, nsites, smpl->eprob+ioff*2, smpl->sites+ioff); + uint8_t *vpath = hmm_get_viterbi_path(args->hmm); + double *fwd = hmm_get_fwd_bwd_prob(args->hmm); + + const char *chr = bcf_hdr_id2name(args->hdr,smpl->rid[i]); + for (j=0; jstr.l = 0; + ksprintf(&args->str, "ROH\t%s\t%s\t%d\t%d\t%.1f\n", name,chr,smpl->sites[ioff+j]+1, state, phred_score(1.0-pval[state])); + if ( bgzf_write(args->out, args->str.s, args->str.l) != args->str.l ) error("Error writing %s: %s\n", args->output_fname, strerror(errno)); + } + } +} + +int read_AF(bcf_sr_regions_t *tgt, bcf1_t *line, double *alt_freq) +{ + if ( tgt->nals != line->n_allele ) return -1; // number of alleles does not match + + int i; + for (i=0; inals; i++) + if ( strcmp(line->d.allele[i],tgt->als[i]) ) break; // we could be smarter, see vcmp + if ( inals ) return -1; + + char *tmp, *str = tgt->line.s; + i = 0; + while ( *str && i<3 ) + { + if ( *str=='\t' ) i++; + str++; + } + *alt_freq = strtod(str, &tmp); + if ( *tmp && !isspace(*tmp) ) + { + if ( str[0]=='.' && (!str[1] || isspace(str[1])) ) return -1; // missing value + error("Could not parse: [%s]\n", tgt->line.s); + } + if ( *alt_freq<0 || *alt_freq>1 ) error("Could not parse AF: [%s]\n", tgt->line.s); + return 0; +} + +int8_t *get_GT(args_t *args, bcf1_t *line) +{ + int i; + for (i=0; in_fmt; i++) + if ( line->d.fmt[i].id==args->gt_hdr_id ) break; + if ( i==line->n_fmt ) return NULL; // the tag is not present in this record + + bcf_fmt_t *fmt = &line->d.fmt[i]; + if ( fmt->n!=2 ) return NULL; // not diploid + + if ( fmt->type!=BCF_BT_INT8 ) error("This is unexpected, GT type is %d\n", fmt->type); + return (int8_t*) fmt->p; +} + +int estimate_AF_from_GT(args_t *args, int8_t *gt, double *alt_freq) +{ + int i, nalt = 0, nref = 0; + if ( args->af_smpl ) // subset samples for AF estimate + { + for (i=0; iaf_smpl->n; i++) + { + int ismpl = args->af_smpl->idx[i]; + if ( bcf_gt_is_missing(gt[2*ismpl]) || bcf_gt_is_missing(gt[2*ismpl+1]) ) continue; + + if ( bcf_gt_allele(gt[2*ismpl]) ) nalt++; + else nref++; + + if ( bcf_gt_allele(gt[2*ismpl+1]) ) nalt++; + else nref++; + } + } + else // all samples used in AF estimate + { + int8_t *end = gt + 2*bcf_hdr_nsamples(args->hdr); + while ( gt < end ) + { + if ( bcf_gt_is_missing(gt[0]) || bcf_gt_is_missing(gt[1]) ) continue; + + if ( bcf_gt_allele(gt[0]) ) nalt++; + else nref++; + + if ( bcf_gt_allele(gt[1]) ) nalt++; + else nref++; + + gt += 2; + } + } + if ( !nalt && !nref ) return -1; + + *alt_freq = (double)nalt / (nalt + nref); + return 0; +} + +int estimate_AF_from_PL(args_t *args, bcf_fmt_t *fmt_pl, int ial, double *alt_freq) +{ + double af = 0; + int i, j, naf = 0; + + int irr = bcf_alleles2gt(0,0), ira = bcf_alleles2gt(0,ial), iaa = bcf_alleles2gt(ial,ial); + if ( iaa >= fmt_pl->n ) return -1; // not diploid or wrong number of fields + + if ( args->af_smpl ) // subset samples for AF estimate + { + #define BRANCH(type_t) \ + { \ + for (i=0; iaf_smpl->n; i++) \ + { \ + int ismpl = args->af_smpl->idx[i]; \ + type_t *p = (type_t*)fmt_pl->p + fmt_pl->n*ismpl; \ + if ( p[irr]<0 || p[ira]<0 || p[iaa]<0 ) continue; /* missing value */ \ + if ( p[irr]==p[ira] && p[irr]==p[iaa] ) continue; /* all values are the same */ \ + double prob[3], norm = 0; \ + prob[0] = p[irr] < (type_t)256 ? args->pl2p[ p[irr] ] : args->pl2p[255]; \ + prob[1] = p[ira] < (type_t)256 ? args->pl2p[ p[ira] ] : args->pl2p[255]; \ + prob[2] = p[iaa] < (type_t)256 ? args->pl2p[ p[iaa] ] : args->pl2p[255]; \ + for (j=0; j<3; j++) norm += prob[j]; \ + for (j=0; j<3; j++) prob[j] /= norm; \ + af += 0.5*prob[1] + prob[2]; \ + naf++; \ + } \ + } + switch (fmt_pl->type) { + case BCF_BT_INT8: BRANCH(int8_t); break; + case BCF_BT_INT16: BRANCH(int16_t); break; + case BCF_BT_INT32: BRANCH(int32_t); break; + default: fprintf(bcftools_stderr,"Unknown format type for PL: %s:%d .. fmt->type=%d\n", __FILE__,__LINE__, fmt_pl->type); exit(1); + } + #undef BRANCH + } + else // all samples used in AF estimate + { + int nsmpl = bcf_hdr_nsamples(args->hdr); + #define BRANCH(type_t) \ + { \ + type_t *p = (type_t*)fmt_pl->p; \ + p -= fmt_pl->n; \ + for (i=0; in; \ + if ( p[irr]<0 || p[ira]<0 || p[iaa]<0 ) continue; /* missing value */ \ + if ( p[irr]==p[ira] && p[irr]==p[iaa] ) continue; /* all values are the same */ \ + double prob[3], norm = 0; \ + prob[0] = p[irr] < (type_t)256 ? args->pl2p[ p[irr] ] : args->pl2p[255]; \ + prob[1] = p[ira] < (type_t)256 ? args->pl2p[ p[ira] ] : args->pl2p[255]; \ + prob[2] = p[iaa] < (type_t)256 ? args->pl2p[ p[iaa] ] : args->pl2p[255]; \ + for (j=0; j<3; j++) norm += prob[j]; \ + for (j=0; j<3; j++) prob[j] /= norm; \ + af += 0.5*prob[1] + prob[2]; \ + naf++; \ + } \ + } + switch (fmt_pl->type) { + case BCF_BT_INT8: BRANCH(int8_t); break; + case BCF_BT_INT16: BRANCH(int16_t); break; + case BCF_BT_INT32: BRANCH(int32_t); break; + default: fprintf(bcftools_stderr,"Unknown format type for PL: %s:%d .. fmt->type=%d\n", __FILE__,__LINE__, fmt_pl->type); exit(1); + } + #undef BRANCH + } + if ( !naf ) return -1; + + *alt_freq = af / naf; + return 0; +} + +bcf_fmt_t *get_PL(args_t *args, bcf1_t *line) +{ + int i; + for (i=0; in_fmt; i++) + if ( line->d.fmt[i].id==args->pl_hdr_id ) return &line->d.fmt[i]; + return NULL; +} + +int process_line(args_t *args, bcf1_t *line, int ial) +{ + if ( !(line->unpacked & BCF_UN_FMT) ) bcf_unpack(line, BCF_UN_FMT); + + double alt_freq; + int8_t *GTs = NULL; + bcf_fmt_t *fmt_pl = NULL; + + // Set allele frequency + int ret = 0, i,j; + if ( args->af_tag ) + { + // Use an INFO tag provided by the user + ret = bcf_get_info_float(args->hdr, line, args->af_tag, &args->AFs, &args->mAFs); + if ( ret>0 ) + alt_freq = args->AFs[ial-1]; + if ( ret==-2 ) + error("Type mismatch for INFO/%s tag at %s:%d\n", args->af_tag, bcf_seqname(args->hdr,line), line->pos+1); + } + else if ( args->af_fname ) + { + // Read AF from a file + ret = read_AF(args->files->targets, line, &alt_freq); + } + else if ( args->dflt_AF > 0 ) + { + alt_freq = args->dflt_AF; + } + else if ( args->estimate_AF ) + { + // Estimate AF from GTs or PLs of all samples or samples listed in a file + if ( args->af_from_PL ) + { + fmt_pl = get_PL(args, line); + if ( !fmt_pl ) return -1; + ret = estimate_AF_from_PL(args, fmt_pl, ial, &alt_freq); + } + else + { + GTs = get_GT(args, line); + if ( !GTs ) return -1; + ret = estimate_AF_from_GT(args, GTs, &alt_freq); + } + } + else + { + // Use AC/AN + int AC = -1, AN = 0; + ret = bcf_get_info_int32(args->hdr, line, "AN", &args->itmp, &args->mitmp); + if ( ret==1 ) + { + AN = args->itmp[0]; + ret = bcf_get_info_int32(args->hdr, line, "AC", &args->itmp, &args->mitmp); + if ( ret>0 ) + AC = args->itmp[0]; + } + if ( AN<=0 || AC<0 ) + ret = -1; + else + alt_freq = (double) AC/AN; + } + + if ( ret<0 ) return ret; + if ( alt_freq==0.0 ) return -1; + + int irr = bcf_alleles2gt(0,0), ira = bcf_alleles2gt(0,ial), iaa = bcf_alleles2gt(ial,ial); + if ( args->fake_PLs ) + { + if ( !GTs ) GTs = get_GT(args, line); + } + else + { + fmt_pl = get_PL(args, line); + if ( !fmt_pl ) return -1; + if ( iaa >= fmt_pl->n ) return -1; // not diploid or wrong number of fields + } + + for (i=0; iroh_smpl->n; i++) + { + int ismpl = args->roh_smpl->idx[i]; + + // set P(D|G) + double pdg[3]; + if ( args->fake_PLs ) + { + int8_t *gt = GTs + 2*ismpl; + if ( bcf_gt_is_missing(gt[0]) || bcf_gt_is_missing(gt[1]) ) continue; + + int a = bcf_gt_allele(gt[0]); + int b = bcf_gt_allele(gt[1]); + if ( a!=b ) + { + pdg[0] = pdg[2] = args->unseen_PL; + pdg[1] = 1 - 2*args->unseen_PL; + } + else if ( a==0 ) + { + pdg[0] = 1 - args->unseen_PL - args->unseen_PL*args->unseen_PL; + pdg[1] = args->unseen_PL; + pdg[2] = args->unseen_PL*args->unseen_PL; + } + else + { + pdg[0] = args->unseen_PL*args->unseen_PL; + pdg[1] = args->unseen_PL; + pdg[2] = 1 - args->unseen_PL - args->unseen_PL*args->unseen_PL; + } + } + else + { + #define BRANCH(type_t) \ + { \ + type_t *p = (type_t*)fmt_pl->p + fmt_pl->n*ismpl; \ + if ( p[irr]<0 || p[ira]<0 || p[iaa]<0 ) continue; /* missing value */ \ + if ( p[irr]==p[ira] && p[irr]==p[iaa] ) continue; /* all values are the same */ \ + pdg[0] = p[irr] < (type_t)256 ? args->pl2p[ p[irr] ] : args->pl2p[255]; \ + pdg[1] = p[ira] < (type_t)256 ? args->pl2p[ p[ira] ] : args->pl2p[255]; \ + pdg[2] = p[iaa] < (type_t)256 ? args->pl2p[ p[iaa] ] : args->pl2p[255]; \ + } + switch (fmt_pl->type) { + case BCF_BT_INT8: BRANCH(int8_t); break; + case BCF_BT_INT16: BRANCH(int16_t); break; + case BCF_BT_INT32: BRANCH(int32_t); break; + default: fprintf(bcftools_stderr,"Unknown format type for PL: %s:%d .. fmt->type=%d\n", __FILE__,__LINE__, fmt_pl->type); exit(1); + } + #undef BRANCH + } + + double sum = pdg[0] + pdg[1] + pdg[2]; + if ( !sum ) continue; + for (j=0; j<3; j++) pdg[j] /= sum; + if ( args->skip_homref && pdg[0]>0.99 ) continue; + + smpl_t *smpl = &args->smpl[i]; + smpl->nused++; + + if ( smpl->nsites >= smpl->msites ) + { + hts_expand(uint32_t,smpl->nsites+1,smpl->msites,smpl->sites); + smpl->eprob = (double*) realloc(smpl->eprob,sizeof(*smpl->eprob)*smpl->msites*2); + if ( !smpl->eprob ) error("Error: failed to alloc %d bytes\n", sizeof(*smpl->eprob)*smpl->msites*2); + } + + // Calculate emission probabilities P(D|AZ) and P(D|HW) + double *eprob = &smpl->eprob[2*smpl->nsites]; + eprob[STATE_AZ] = pdg[0]*(1-alt_freq) + pdg[2]*alt_freq; + eprob[STATE_HW] = pdg[0]*(1-alt_freq)*(1-alt_freq) + 2*pdg[1]*(1-alt_freq)*alt_freq + pdg[2]*alt_freq*alt_freq; + + smpl->sites[smpl->nsites] = line->pos; + smpl->nsites++; + + if ( args->vi_training ) + { + if ( !smpl->nrid || line->rid!=smpl->rid[smpl->nrid-1] ) + { + smpl->nrid++; + smpl->rid = (int*) realloc(smpl->rid,sizeof(*smpl->rid)*smpl->nrid); + smpl->rid[smpl->nrid-1] = line->rid; + smpl->rid_off = (int*) realloc(smpl->rid_off,sizeof(*smpl->rid_off)*smpl->nrid); + smpl->rid_off[smpl->nrid-1] = smpl->nsites - 1; + } + } + else if ( args->nbuf_max && smpl->nsites >= args->nbuf_max ) flush_viterbi(args, i); + } + + return 0; +} + +static void vcfroh(args_t *args, bcf1_t *line) +{ + int i; + + // Are we done? + if ( !line ) + { + for (i=0; iroh_smpl->n; i++) flush_viterbi(args, i); + return; + } + args->ntot++; + + // Skip unwanted lines, for simplicity we consider only biallelic sites + if ( line->rid == args->skip_rid ) return; + if ( line->n_allele==1 ) return; // no ALT allele + if ( line->n_allele > 3 ) return; // cannot be bi-allelic, even with <*> + + // This can be raw callable VCF with the symbolic unseen allele <*> + int ial = 0; + for (i=1; in_allele; i++) + if ( !strcmp("<*>",line->d.allele[i]) ) { ial = i; break; } + if ( ial==0 ) // normal VCF, the symbolic allele is not present + { + if ( line->n_allele!=2 ) return; // not biallelic + ial = 1; + } + else + { + if ( line->n_allele!=3 ) return; // not biallelic + ial = ial==1 ? 2 : 1; // <*> can come in any order + } + if ( args->snps_only && !bcf_is_snp(line) ) return; + + // Initialize genetic map + int skip_rid = 0; + if ( args->prev_rid<0 ) + { + args->prev_rid = line->rid; + args->prev_pos = line->pos; + skip_rid = load_genmap(args, bcf_seqname(args->hdr,line)); + } + + // New chromosome? + if ( args->prev_rid!=line->rid ) + { + if ( !args->vi_training ) + { + for (i=0; iroh_smpl->n; i++) + { + flush_viterbi(args, i); + hmm_reset(args->hmm, args->smpl[i].snapshot); + } + } + args->prev_rid = line->rid; + args->prev_pos = line->pos; + skip_rid = load_genmap(args, bcf_seqname(args->hdr,line)); + } + else if ( args->prev_pos == line->pos ) return; // skip duplicate positions + + if ( skip_rid ) + { + fprintf(bcftools_stderr,"Skipping the sequence, no genmap for %s\n", bcf_seqname(args->hdr,line)); + args->skip_rid = line->rid; + return; + } + if ( args->prev_pos > line->pos ) error("The file is not sorted?!\n"); + + args->prev_rid = line->rid; + args->prev_pos = line->pos; + + + // parse the new line + process_line(args, line, ial); +} + +static void usage(args_t *args) +{ + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "About: HMM model for detecting runs of autozygosity.\n"); + fprintf(bcftools_stderr, "Usage: bcftools roh [options] \n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "General Options:\n"); + fprintf(bcftools_stderr, " --AF-dflt if AF is not known, use this allele frequency [skip]\n"); + fprintf(bcftools_stderr, " --AF-tag use TAG for allele frequency\n"); + fprintf(bcftools_stderr, " --AF-file read allele frequencies from file (CHR\\tPOS\\tREF,ALT\\tAF)\n"); + fprintf(bcftools_stderr, " -b --buffer-size buffer size and the number of overlapping sites, 0 for unlimited [0]\n"); + fprintf(bcftools_stderr, " If the first number is negative, it is interpreted as the maximum memory to\n"); + fprintf(bcftools_stderr, " use, in MB. The default overlap is set to roughly 1%% of the buffer size.\n"); + fprintf(bcftools_stderr, " -e, --estimate-AF [TAG], estimate AF from FORMAT/TAG (GT or PL) of all samples (\"-\") or samples listed\n"); + fprintf(bcftools_stderr, " in . If TAG is not given, the frequency is estimated from GT by default\n"); + fprintf(bcftools_stderr, " -G, --GTs-only use GTs and ignore PLs, instead using for PL of the two least likely genotypes.\n"); + fprintf(bcftools_stderr, " Safe value to use is 30 to account for GT errors.\n"); + fprintf(bcftools_stderr, " -i, --ignore-homref skip hom-ref genotypes (0/0)\n"); + fprintf(bcftools_stderr, " -I, --skip-indels skip indels as their genotypes are enriched for errors\n"); + fprintf(bcftools_stderr, " -m, --genetic-map genetic map in IMPUTE2 format, single file or mask, where string \"{CHROM}\"\n"); + fprintf(bcftools_stderr, " is replaced with chromosome name\n"); + fprintf(bcftools_stderr, " -M, --rec-rate constant recombination rate per bp\n"); + fprintf(bcftools_stderr, " -o, --output write output to a file [standard output]\n"); + fprintf(bcftools_stderr, " -O, --output-type [srz] output s:per-site, r:regions, z:compressed [sr]\n"); + fprintf(bcftools_stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(bcftools_stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(bcftools_stderr, " -s, --samples list of samples to analyze [all samples]\n"); + fprintf(bcftools_stderr, " -S, --samples-file file of samples to analyze [all samples]\n"); + fprintf(bcftools_stderr, " -t, --targets similar to -r but streams rather than index-jumps\n"); + fprintf(bcftools_stderr, " -T, --targets-file similar to -R but streams rather than index-jumps\n"); + fprintf(bcftools_stderr, " --threads number of extra decompression threads [0]\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "HMM Options:\n"); + fprintf(bcftools_stderr, " -a, --hw-to-az P(AZ|HW) transition probability from HW (Hardy-Weinberg) to AZ (autozygous) state [6.7e-8]\n"); + fprintf(bcftools_stderr, " -H, --az-to-hw P(HW|AZ) transition probability from AZ to HW state [5e-9]\n"); + fprintf(bcftools_stderr, " -V, --viterbi-training estimate HMM parameters, is the convergence threshold, e.g. 1e-10 (experimental)\n"); + fprintf(bcftools_stderr, "\n"); + exit(1); +} + +int main_vcfroh(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->files = bcf_sr_init(); + args->t2AZ = 6.7e-8; + args->t2HW = 5e-9; + args->rec_rate = 0; + int regions_is_file = 0, targets_is_file = 0; + + static struct option loptions[] = + { + {"AF-tag",1,0,0}, + {"AF-file",1,0,1}, + {"AF-dflt",1,0,2}, + {"buffer-size",1,0,'b'}, + {"ignore-homref",0,0,'i'}, + {"estimate-AF",1,0,'e'}, + {"output",1,0,'o'}, + {"output-type",1,0,'O'}, + {"GTs-only",1,0,'G'}, + {"samples",1,0,'s'}, + {"samples-file",1,0,'S'}, + {"hw-to-az",1,0,'a'}, + {"az-to-hw",1,0,'H'}, + {"viterbi-training",1,0,'V'}, + {"targets",1,0,'t'}, + {"targets-file",1,0,'T'}, + {"regions",1,0,'r'}, + {"regions-file",1,0,'R'}, + {"genetic-map",1,0,'m'}, + {"rec-rate",1,0,'M'}, + {"skip-indels",0,0,'I'}, + {"threads",1,0,9}, + {0,0,0,0} + }; + + int naf_opts = 0; + char *tmp; + while ((c = getopt_long(argc, argv, "h?r:R:t:T:H:a:s:S:m:M:G:Ia:e:V:b:O:o:i",loptions,NULL)) >= 0) { + switch (c) { + case 0: args->af_tag = optarg; naf_opts++; break; + case 1: args->af_fname = optarg; naf_opts++; break; + case 2: + args->dflt_AF = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: --AF-dflt %s\n", optarg); + break; + case 'o': args->output_fname = optarg; break; + case 'O': + if ( strchr(optarg,'s') || strchr(optarg,'S') ) args->output_type |= OUTPUT_ST; + if ( strchr(optarg,'r') || strchr(optarg,'R') ) args->output_type |= OUTPUT_RG; + if ( strchr(optarg,'z') || strchr(optarg,'z') ) args->output_type |= OUTPUT_GZ; + break; + case 'e': args->estimate_AF = optarg; naf_opts++; break; + case 'b': args->buffer_size = optarg; break; + case 'i': args->skip_homref = 1; break; + case 'I': args->snps_only = 1; break; + case 'G': + args->fake_PLs = 1; + args->unseen_PL = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -G %s\n", optarg); + args->unseen_PL = pow(10,-args->unseen_PL/10.); + break; + case 'm': args->genmap_fname = optarg; break; + case 'M': + args->rec_rate = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -M %s\n", optarg); + break; + case 's': args->samples = strdup(optarg); break; + case 'S': args->samples = strdup(optarg); args->samples_is_file = 1; break; + case 'a': + args->t2AZ = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -a %s\n", optarg); + break; + case 'H': + args->t2HW = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: -H %s\n", optarg); + break; + case 't': args->targets_list = optarg; break; + case 'T': args->targets_list = optarg; targets_is_file = 1; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; regions_is_file = 1; break; + case 9 : args->n_threads = strtol(optarg, 0, 0); break; + case 'V': + args->vi_training = 1; + args->baum_welch_th = strtod(optarg,&tmp); + if ( *tmp ) error("Could not parse: --viterbi-training %s\n", optarg); + break; + case 'h': + case '?': usage(args); break; + default: error("Unknown argument: %s\n", optarg); + } + } + if ( !args->output_fname ) args->output_fname = "bcftools_stdout"; + if ( !args->output_type ) args->output_type = OUTPUT_ST|OUTPUT_RG; + char *fname = NULL; + if ( optind==argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin + else usage(args); + } + else fname = argv[optind]; + + if ( args->vi_training && args->buffer_size ) error("Error: cannot use -b with -V\n"); + if ( args->t2AZ<0 || args->t2AZ>1 ) error("Error: The parameter --hw-to-az is not in [0,1]\n", args->t2AZ); + if ( args->t2HW<0 || args->t2HW>1 ) error("Error: The parameter --az-to-hw is not in [0,1]\n", args->t2HW); + if ( naf_opts>1 ) error("Error: The options --AF-tag, --AF-file and -e are mutually exclusive\n"); + if ( args->af_fname && args->targets_list ) error("Error: The options --AF-file and -t are mutually exclusive\n"); + if ( args->regions_list ) + { + if ( bcf_sr_set_regions(args->files, args->regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + } + if ( args->targets_list ) + { + if ( bcf_sr_set_targets(args->files, args->targets_list, targets_is_file, 0)<0 ) + error("Failed to read the targets: %s\n", args->targets_list); + } + if ( args->af_fname ) + { + if ( bcf_sr_set_targets(args->files, args->af_fname, 1, 3)<0 ) + error("Failed to read the targets: %s\n", args->af_fname); + } + if ( args->n_threads && bcf_sr_set_threads(args->files, args->n_threads)<0) + error("Failed to create threads\n"); + if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); + + init_data(args); + while ( bcf_sr_next_line(args->files) ) + { + vcfroh(args, args->files->readers[0].buffer[0]); + } + vcfroh(args, NULL); + int i, nmin = 0; + for (i=0; iroh_smpl->n; i++) + if ( !i || args->smpl[i].nused < nmin ) nmin = args->smpl[i].nused; + fprintf(bcftools_stderr,"Number of lines total/processed: %d/%d\n", args->ntot,nmin); + if ( nmin==0 ) + { + fprintf(bcftools_stderr,"No usable sites were found."); + if ( !naf_opts && !args->dflt_AF ) fprintf(bcftools_stderr, " Consider using one of the AF options.\n"); + } + destroy_data(args); + free(args); + return 0; +} + + diff --git a/bcftools/vcfsom.c b/bcftools/vcfsom.c new file mode 100644 index 0000000..03181e9 --- /dev/null +++ b/bcftools/vcfsom.c @@ -0,0 +1,715 @@ +/* vcfsom.c -- SOM (Self-Organizing Map) filtering. + + Copyright (C) 2013-2014 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" + +#define SOM_TRAIN 1 +#define SOM_CLASSIFY 2 + +typedef struct +{ + int ndim; // dimension of the map (2D, 3D, ...) + int nbin; // number of bins in th map + int size; // pow(nbin,ndim) + int kdim; // dimension of the input vectors + int nt, t; // total number of learning cycles and the current cycle + double *w, *c; // weights and counts (sum of learning influence) + double learn; // learning rate + double bmu_th; // best-matching unit threshold + int *a_idx, *b_idx; // temp arrays for traversing variable number of nested loops + double *div; // dtto +} +som_t; + +typedef struct +{ + // SOM parameters + double bmu_th, learn; + int ndim, nbin, ntrain, t; + int nfold; // n-fold cross validation = the number of SOMs + som_t **som; + + // annots reader's data + htsFile *file; // reader + kstring_t str; // temporary string for the reader + int dclass, mvals; + double *vals; + + // training data + double *train_dat; + int *train_class, mtrain_class, mtrain_dat; + + int rand_seed, good_class, bad_class; + char **argv, *fname, *prefix; + int argc, action, train_bad, merge; +} +args_t; + +static void usage(void); +FILE *open_file(char **fname, const char *mode, const char *fmt, ...); +void mkdir_p(const char *fmt, ...); + +char *msprintf(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + int n = vsnprintf(NULL, 0, fmt, ap) + 2; + va_end(ap); + + char *str = (char*)malloc(n); + va_start(ap, fmt); + vsnprintf(str, n, fmt, ap); + va_end(ap); + + return str; +} + +/* + * char *t, *p = str; + * t = column_next(p, '\t'); + * if ( strlen("")==t-p && !strncmp(p,"",t-p) ) printf("found!\n"); + * + * char *t; + * t = column_next(str, '\t'); if ( !*t ) error("expected field\n", str); + * t = column_next(t+1, '\t'); if ( !*t ) error("expected field\n", str); + */ +static inline char *column_next(char *start, char delim) +{ + char *end = start; + while (*end && *end!=delim) end++; + return end; +} +/** + * annots_reader_next() - reads next line from annots.tab.gz and sets: class, vals + * Returns 1 on successful read or 0 if no further record could be read. + */ +int annots_reader_next(args_t *args) +{ + args->str.l = 0; + if ( hts_getline(args->file,'\n',&args->str)<=0 ) return 0; + + char *t, *line = args->str.s; + + if ( !args->mvals ) + { + t = line; + while ( *t ) + { + if ( *t=='\t' ) args->mvals++; + t++; + } + args->vals = (double*) malloc(args->mvals*sizeof(double)); + } + + // class + args->dclass = atoi(line); + t = column_next(line, '\t'); + + // values + int i; + for (i=0; imvals; i++) + { + if ( !*t ) error("Could not parse %d-th data field: is the line truncated?\nThe line was: [%s]\n",i+2,line); + args->vals[i] = atof(++t); + t = column_next(t,'\t'); + } + return 1; +} +void annots_reader_reset(args_t *args) +{ + if ( args->file ) hts_close(args->file); + if ( !args->fname ) error("annots_reader_reset: no fname\n"); + args->file = hts_open(args->fname, "r"); +} +void annots_reader_close(args_t *args) +{ + hts_close(args->file); +} + +static void som_write_map(char *prefix, som_t **som, int nsom) +{ + FILE *fp = open_file(NULL,"w","%s.som",prefix); + fwrite("SOMv1",5,1,fp); + fwrite(&nsom,sizeof(int),1,fp); + int i; + for (i=0; isize,sizeof(int),1,fp); + fwrite(&som[i]->kdim,sizeof(int),1,fp); + fwrite(som[i]->w,sizeof(double),som[i]->size*som[i]->kdim,fp); + fwrite(som[i]->c,sizeof(double),som[i]->size,fp); + } + if ( fclose(fp) ) error("%s.som: fclose failed\n",prefix); +} +static som_t** som_load_map(char *prefix, int *nsom) +{ + FILE *fp = open_file(NULL,"r","%s.som",prefix); + char buf[5]; + if ( fread(buf,5,1,fp)!=1 || strncmp(buf,"SOMv1",5) ) error("Could not parse %s.som\n", prefix); + + if ( fread(nsom,sizeof(int),1,fp)!=1 ) error("Could not read %s.som\n", prefix); + som_t **som = (som_t**)malloc(*nsom*sizeof(som_t*)); + + int i; + for (i=0; i<*nsom; i++) + { + som[i] = (som_t*) calloc(1,sizeof(som_t)); + if ( fread(&som[i]->size,sizeof(int),1,fp) != 1 ) error("Could not read %s.som\n", prefix); + if ( fread(&som[i]->kdim,sizeof(int),1,fp) != 1 ) error("Could not read %s.som\n", prefix); + som[i]->w = (double*) malloc(sizeof(double)*som[i]->size*som[i]->kdim); + som[i]->c = (double*) malloc(sizeof(double)*som[i]->size); + if ( fread(som[i]->w,sizeof(double),som[i]->size*som[i]->kdim,fp) != som[i]->size*som[i]->kdim ) error("Could not read from %s.som\n", prefix); + if ( fread(som[i]->c,sizeof(double),som[i]->size,fp) != som[i]->size ) error("Could not read from %s.som\n", prefix); + } + if ( fclose(fp) ) error("%s.som: fclose failed\n",prefix); + return som; +} +static void som_create_plot(som_t *som, char *prefix) +{ + if ( som->ndim!=2 ) return; + + char *fname; + FILE *fp = open_file(&fname,"w","%s.py",prefix); + fprintf(fp, + "import matplotlib as mpl\n" + "mpl.use('Agg')\n" + "import matplotlib.pyplot as plt\n" + "\n" + "dat = [\n" + ); + int i,j; + double *val = som->c; + for (i=0; inbin; i++) + { + fprintf(fp,"["); + for (j=0; jnbin; j++) + { + if ( j>0 ) fprintf(fp,","); + fprintf(fp,"%e", *val); + val++; + } + fprintf(fp,"],\n"); + } + fprintf(fp, + "]\n" + "fig = plt.figure()\n" + "ax1 = plt.subplot(111)\n" + "im1 = ax1.imshow(dat)\n" + "fig.colorbar(im1)\n" + "plt.savefig('%s.png')\n" + "plt.close()\n" + "\n", prefix + ); + fclose(fp); + free(fname); +} +// Find the best matching unit: the node with minimum distance from the input vector +static inline int som_find_bmu(som_t *som, double *vec, double *dist) +{ + double *ptr = som->w; + double min_dist = HUGE_VAL; + int min_idx = 0; + + int i, k; + for (i=0; isize; i++) + { + double dist = 0; + for (k=0; kkdim; k++) + dist += (vec[k] - ptr[k]) * (vec[k] - ptr[k]); + if ( dist < min_dist ) + { + min_dist = dist; + min_idx = i; + } + ptr += som->kdim; + } + + if ( dist ) *dist = min_dist; + return min_idx; +} +static inline double som_get_score(som_t *som, double *vec, double bmu_th) +{ + double *ptr = som->w; + double min_dist = HUGE_VAL; + + int i, k; + for (i=0; isize; i++) + { + if ( som->c[i] >= bmu_th ) + { + double dist = 0; + for (k=0; kkdim; k++) + dist += (vec[k] - ptr[k]) * (vec[k] - ptr[k]); + if ( dist < min_dist ) min_dist = dist; + } + ptr += som->kdim; + } + return sqrt(min_dist); +} +// Convert flat index to that of a k-dimensional cube +static inline void som_idx_to_ndim(som_t *som, int idx, int *ndim) +{ + int i; + double sub = 0; + + ndim[0] = idx/som->div[0]; + for (i=1; indim; i++) + { + sub += ndim[i-1] * som->div[i-1]; + ndim[i] = (idx - sub)/som->div[i]; + } +} +static void som_train_site(som_t *som, double *vec, int update_counts) +{ + // update learning rate and learning radius + som->t++; + double dt = exp(-som->t/som->nt); + double learning_rate = som->learn * dt; + double radius = som->nbin * dt; radius *= radius; + + // find the best matching unit and its indexes + int min_idx = som_find_bmu(som, vec, NULL); + som_idx_to_ndim(som, min_idx, som->a_idx); + + // update the weights: traverse the map and make all nodes within the + // radius more similar to the input vector + double *ptr = som->w; + double *cnt = som->c; + int i, j, k; + for (i=0; isize; i++) + { + som_idx_to_ndim(som, i, som->b_idx); + double dist = 0; + for (j=0; jndim; j++) + dist += (som->a_idx[j] - som->b_idx[j]) * (som->a_idx[j] - som->b_idx[j]); + if ( dist <= radius ) + { + double influence = exp(-dist*dist*0.5/radius) * learning_rate; + for (k=0; kkdim; k++) + ptr[k] += influence * (vec[k] - ptr[k]); + + // Bad sites may help to shape the map, but only nodes with big enough + // influence will be used for classification. + if ( update_counts ) *cnt += influence; + } + ptr += som->kdim; + cnt++; + } +} +static void som_norm_counts(som_t *som) +{ + int i; + double max = 0; + for (i=0; isize; i++) + if ( max < som->c[i] ) max = som->c[i]; + for (i=0; isize; i++) + som->c[i] /= max; +} +static som_t *som_init(args_t *args) +{ + som_t *som = (som_t*) calloc(1,sizeof(som_t)); + som->ndim = args->ndim; + som->nbin = args->nbin; + som->kdim = args->mvals; + som->nt = args->ntrain; + som->learn = args->learn; + som->bmu_th = args->bmu_th; + som->size = pow(som->nbin,som->ndim); + som->w = (double*) malloc(sizeof(double)*som->size*som->kdim); + if ( !som->w ) error("Could not alloc %d bytes [nbin=%d ndim=%d kdim=%d]\n", sizeof(double)*som->size*som->kdim,som->nbin,som->ndim,som->kdim); + som->c = (double*) calloc(som->size,sizeof(double)); + if ( !som->w ) error("Could not alloc %d bytes [nbin=%d ndim=%d]\n", sizeof(double)*som->size,som->nbin,som->ndim); + int i; + for (i=0; isize*som->kdim; i++) + som->w[i] = (double)random()/RAND_MAX; + som->a_idx = (int*) malloc(sizeof(int)*som->ndim); + som->b_idx = (int*) malloc(sizeof(int)*som->ndim); + som->div = (double*) malloc(sizeof(double)*som->ndim); + for (i=0; indim; i++) + som->div[i] = pow(som->nbin,som->ndim-i-1); + return som; +} +static void som_destroy(som_t *som) +{ + free(som->a_idx); free(som->b_idx); free(som->div); + free(som->w); free(som->c); + free(som); +} + +static void init_data(args_t *args) +{ + // Get first line to learn the vector size + annots_reader_reset(args); + annots_reader_next(args); + + if ( args->action==SOM_CLASSIFY ) + args->som = som_load_map(args->prefix,&args->nfold); +} +static void destroy_data(args_t *args) +{ + int i; + if ( args->som ) + { + for (i=0; infold; i++) som_destroy(args->som[i]); + } + free(args->train_dat); + free(args->train_class); + free(args->som); + free(args->vals); + free(args->str.s); +} + +#define MERGE_MIN 0 +#define MERGE_MAX 1 +#define MERGE_AVG 2 +static double get_min_score(args_t *args, int iskip) +{ + int i; + double score, min_score = HUGE_VAL; + for (i=0; infold; i++) + { + if ( i==iskip ) continue; + score = som_get_score(args->som[i], args->vals, args->bmu_th); + if ( i==0 || score < min_score ) min_score = score; + } + return min_score; +} +static double get_max_score(args_t *args, int iskip) +{ + int i; + double score, max_score = -HUGE_VAL; + for (i=0; infold; i++) + { + if ( i==iskip ) continue; + score = som_get_score(args->som[i], args->vals, args->bmu_th); + if ( i==0 || max_score < score ) max_score = score; + } + return max_score; +} +static double get_avg_score(args_t *args, int iskip) +{ + int i, n = 0; + double score = 0; + for (i=0; infold; i++) + { + if ( i==iskip ) continue; + score += som_get_score(args->som[i], args->vals, args->bmu_th); + n++; + } + return score/n; +} +static int cmpfloat_desc(const void *a, const void *b) +{ + float fa = *((float*)a); + float fb = *((float*)b); + if ( fafb ) return -1; + return 0; +} + +static void create_eval_plot(args_t *args) +{ + FILE *fp = open_file(NULL,"w","%s.eval.py", args->prefix); + fprintf(fp, + "import matplotlib as mpl\n" + "mpl.use('Agg')\n" + "import matplotlib.pyplot as plt\n" + "\n" + "import csv\n" + "csv.register_dialect('tab', delimiter='\\t', quoting=csv.QUOTE_NONE)\n" + "dat = []\n" + "with open('%s.eval', 'rb') as f:\n" + "\treader = csv.reader(f, 'tab')\n" + "\tfor row in reader:\n" + "\t\tif row[0][0]!='#': dat.append(row)\n" + "\n" + "fig = plt.figure()\n" + "ax1 = plt.subplot(111)\n" + "ax1.plot([x[0] for x in dat],[x[1] for x in dat],'g',label='Good')\n" + "ax1.plot([x[0] for x in dat],[x[2] for x in dat],'r',label='Bad')\n" + "ax1.set_xlabel('SOM score')\n" + "ax1.set_ylabel('Number of training sites')\n" + "ax1.legend(loc='best',prop={'size':8},frameon=False)\n" + "plt.savefig('%s.eval.png')\n" + "plt.close()\n" + "\n", args->prefix,args->prefix + ); + fclose(fp); +} + +static void do_train(args_t *args) +{ + // read training sites + int i, igood = 0, ibad = 0, ngood = 0, nbad = 0, ntrain = 0; + annots_reader_reset(args); + while ( annots_reader_next(args) ) + { + // determine which of the nfold's SOMs to train + int isom = 0; + if ( args->dclass == args->good_class ) + { + if ( ++igood >= args->nfold ) igood = 0; + isom = igood; + ngood++; + } + else if ( args->dclass == args->bad_class ) + { + if ( ++ibad >= args->nfold ) ibad = 0; + isom = ibad; + nbad++; + } + else + error("Could not determine the class: %d (vs %d and %d)\n", args->dclass,args->good_class,args->bad_class); + + // save the values for evaluation + ntrain++; + hts_expand(double, ntrain*args->mvals, args->mtrain_dat, args->train_dat); + hts_expand(int, ntrain, args->mtrain_class, args->train_class); + memcpy(args->train_dat+(ntrain-1)*args->mvals, args->vals, args->mvals*sizeof(double)); + args->train_class[ntrain-1] = (args->dclass==args->good_class ? 1 : 0) | isom<<1; // store class + chunk used for training + } + annots_reader_close(args); + + // init maps + if ( !args->ntrain ) args->ntrain = ngood/args->nfold; + srandom(args->rand_seed); + args->som = (som_t**) malloc(sizeof(som_t*)*args->nfold); + for (i=0; infold; i++) args->som[i] = som_init(args); + + // train + for (i=0; itrain_class[i] & 1; + int isom = args->train_class[i] >> 1; + if ( is_good || args->train_bad ) + som_train_site(args->som[isom], args->train_dat+i*args->mvals, is_good); + } + + // norm and create plots + for (i=0; infold; i++) + { + som_norm_counts(args->som[i]); + if ( args->prefix ) + { + char *bname = msprintf("%s.som.%d", args->prefix,i); + som_create_plot(args->som[i], bname); + free(bname); + } + } + + // evaluate + float *good = (float*) malloc(sizeof(float)*ngood); assert(good); + float *bad = (float*) malloc(sizeof(float)*nbad); assert(bad); + igood = ibad = 0; + double max_score = sqrt(args->som[0]->kdim); + for (i=0; itrain_class[i] & 1; + int isom = args->train_class[i] >> 1; // this vector was used for training isom-th SOM, skip + if ( args->nfold==1 ) isom = -1; + memcpy(args->vals, args->train_dat+i*args->mvals, args->mvals*sizeof(double)); + switch (args->merge) + { + case MERGE_MIN: score = get_min_score(args, isom); break; + case MERGE_MAX: score = get_max_score(args, isom); break; + case MERGE_AVG: score = get_avg_score(args, isom); break; + } + score = 1.0 - score/max_score; + if ( is_good ) + good[igood++] = score; + else + bad[ibad++] = score; + } + qsort(good, ngood, sizeof(float), cmpfloat_desc); + qsort(bad, nbad, sizeof(float), cmpfloat_desc); + FILE *fp = NULL; + if ( args->prefix ) fp = open_file(NULL,"w","%s.eval", args->prefix); + igood = 0; + ibad = 0; + float prev_score = good[0]>bad[0] ? good[0] : bad[0]; + int printed = 0; + while ( igood 0.9 ) + { + printf("%.2f\t%.2f\t%e\t# %% of bad [1] and good [2] sites at a cutoff [3]\n", 100.*ibad/nbad,100.*igood/ngood,prev_score); + printed = 1; + } + + if ( igoodbad[ibad] ? good[igood] : bad[ibad]; + else if ( igoodprefix,strerror(errno)); + create_eval_plot(args); + som_write_map(args->prefix, args->som, args->nfold); + } + + free(good); + free(bad); +} + +static void do_classify(args_t *args) +{ + annots_reader_reset(args); + double max_score = sqrt(args->som[0]->kdim); + while ( annots_reader_next(args) ) + { + double score = 0; + switch (args->merge) + { + case MERGE_MIN: score = get_min_score(args, -1); break; + case MERGE_MAX: score = get_max_score(args, -1); break; + case MERGE_AVG: score = get_avg_score(args, -1); break; + } + printf("%e\n", 1.0 - score/max_score); + } + annots_reader_close(args); +} + +static void usage(void) +{ + fprintf(stderr, "\n"); + fprintf(stderr, "About: SOM (Self-Organizing Map) filtering.\n"); + fprintf(stderr, "Usage: bcftools som --train [options] \n"); + fprintf(stderr, " bcftools som --classify [options]\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Model training options:\n"); + fprintf(stderr, " -f, --nfold n-fold cross-validation (number of maps) [5]\n"); + fprintf(stderr, " -p, --prefix prefix of output files\n"); + fprintf(stderr, " -s, --size map size [20]\n"); + fprintf(stderr, " -t, --train \n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Classifying options:\n"); + fprintf(stderr, " -c, --classify \n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Experimental training options (no reason to change):\n"); + fprintf(stderr, " -b, --bmu-threshold threshold for selection of best-matching unit [0.9]\n"); + fprintf(stderr, " -d, --som-dimension SOM dimension [2]\n"); + fprintf(stderr, " -e, --exclude-bad exclude bad sites from training, use for evaluation only\n"); + fprintf(stderr, " -l, --learning-rate learning rate [1.0]\n"); + fprintf(stderr, " -m, --merge -f merge algorithm [avg]\n"); + fprintf(stderr, " -n, --ntrain-sites effective number of training sites [number of good sites]\n"); + fprintf(stderr, " -r, --random-seed random seed, 0 for time() [1]\n"); + fprintf(stderr, "\n"); + exit(1); +} + +int main_vcfsom(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->nbin = 20; + args->learn = 1.0; + args->bmu_th = 0.9; + args->nfold = 5; + args->rand_seed = 1; + args->ndim = 2; + args->bad_class = 1; + args->good_class = 2; + args->merge = MERGE_AVG; + args->train_bad = 1; + + static struct option loptions[] = + { + {"help",0,0,'h'}, + {"prefix",1,0,'p'}, + {"ntrain-sites",1,0,'n'}, + {"random-seed",1,0,'r'}, + {"bmu-threshold",1,0,'b'}, + {"exclude-bad",0,0,'e'}, + {"learning-rate",1,0,'l'}, + {"size",1,0,'s'}, + {"som-dimension",1,0,'d'}, + {"nfold",1,0,'f'}, + {"merge",1,0,'m'}, + {"train",0,0,'t'}, + {"classify",0,0,'c'}, + {0,0,0,0} + }; + while ((c = getopt_long(argc, argv, "htcp:n:r:b:l:s:f:d:m:e",loptions,NULL)) >= 0) { + switch (c) { + case 'e': args->train_bad = 0; break; + case 'm': + if ( !strcmp(optarg,"min") ) args->merge = MERGE_MIN; + else if ( !strcmp(optarg,"max") ) args->merge = MERGE_MAX; + else if ( !strcmp(optarg,"avg") ) args->merge = MERGE_AVG; + else error("The -m method not recognised: %s\n", optarg); + break; + case 'p': args->prefix = optarg; break; + case 'n': args->ntrain = atoi(optarg); break; + case 'r': args->rand_seed = atoi(optarg); break; + case 'b': args->bmu_th = atof(optarg); break; + case 'l': args->learn = atof(optarg); break; + case 's': args->nbin = atoi(optarg); break; + case 'f': args->nfold = atoi(optarg); break; + case 'd': + args->ndim = atoi(optarg); + if ( args->ndim<2 ) error("Expected -d >=2, got %d\n", args->ndim); + if ( args->ndim>3 ) fprintf(stderr,"Warning: This will take a long time and is not going to make the results better: -d %d\n", args->ndim); + break; + case 't': args->action = SOM_TRAIN; break; + case 'c': args->action = SOM_CLASSIFY; break; + case 'h': + case '?': usage(); + default: error("Unknown argument: %s\n", optarg); + } + } + + if ( !args->rand_seed ) args->rand_seed = time(NULL); + if ( argc!=optind+1 ) usage(); + args->fname = argv[optind]; + init_data(args); + + if ( args->action == SOM_TRAIN ) do_train(args); + else if ( args->action == SOM_CLASSIFY ) do_classify(args); + + destroy_data(args); + free(args); + return 0; +} + diff --git a/bcftools/vcfsom.c.pysam.c b/bcftools/vcfsom.c.pysam.c new file mode 100644 index 0000000..d806c01 --- /dev/null +++ b/bcftools/vcfsom.c.pysam.c @@ -0,0 +1,717 @@ +#include "bcftools.pysam.h" + +/* vcfsom.c -- SOM (Self-Organizing Map) filtering. + + Copyright (C) 2013-2014 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" + +#define SOM_TRAIN 1 +#define SOM_CLASSIFY 2 + +typedef struct +{ + int ndim; // dimension of the map (2D, 3D, ...) + int nbin; // number of bins in th map + int size; // pow(nbin,ndim) + int kdim; // dimension of the input vectors + int nt, t; // total number of learning cycles and the current cycle + double *w, *c; // weights and counts (sum of learning influence) + double learn; // learning rate + double bmu_th; // best-matching unit threshold + int *a_idx, *b_idx; // temp arrays for traversing variable number of nested loops + double *div; // dtto +} +som_t; + +typedef struct +{ + // SOM parameters + double bmu_th, learn; + int ndim, nbin, ntrain, t; + int nfold; // n-fold cross validation = the number of SOMs + som_t **som; + + // annots reader's data + htsFile *file; // reader + kstring_t str; // temporary string for the reader + int dclass, mvals; + double *vals; + + // training data + double *train_dat; + int *train_class, mtrain_class, mtrain_dat; + + int rand_seed, good_class, bad_class; + char **argv, *fname, *prefix; + int argc, action, train_bad, merge; +} +args_t; + +static void usage(void); +FILE *open_file(char **fname, const char *mode, const char *fmt, ...); +void mkdir_p(const char *fmt, ...); + +char *msprintf(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + int n = vsnprintf(NULL, 0, fmt, ap) + 2; + va_end(ap); + + char *str = (char*)malloc(n); + va_start(ap, fmt); + vsnprintf(str, n, fmt, ap); + va_end(ap); + + return str; +} + +/* + * char *t, *p = str; + * t = column_next(p, '\t'); + * if ( strlen("")==t-p && !strncmp(p,"",t-p) ) fprintf(bcftools_stdout, "found!\n"); + * + * char *t; + * t = column_next(str, '\t'); if ( !*t ) error("expected field\n", str); + * t = column_next(t+1, '\t'); if ( !*t ) error("expected field\n", str); + */ +static inline char *column_next(char *start, char delim) +{ + char *end = start; + while (*end && *end!=delim) end++; + return end; +} +/** + * annots_reader_next() - reads next line from annots.tab.gz and sets: class, vals + * Returns 1 on successful read or 0 if no further record could be read. + */ +int annots_reader_next(args_t *args) +{ + args->str.l = 0; + if ( hts_getline(args->file,'\n',&args->str)<=0 ) return 0; + + char *t, *line = args->str.s; + + if ( !args->mvals ) + { + t = line; + while ( *t ) + { + if ( *t=='\t' ) args->mvals++; + t++; + } + args->vals = (double*) malloc(args->mvals*sizeof(double)); + } + + // class + args->dclass = atoi(line); + t = column_next(line, '\t'); + + // values + int i; + for (i=0; imvals; i++) + { + if ( !*t ) error("Could not parse %d-th data field: is the line truncated?\nThe line was: [%s]\n",i+2,line); + args->vals[i] = atof(++t); + t = column_next(t,'\t'); + } + return 1; +} +void annots_reader_reset(args_t *args) +{ + if ( args->file ) hts_close(args->file); + if ( !args->fname ) error("annots_reader_reset: no fname\n"); + args->file = hts_open(args->fname, "r"); +} +void annots_reader_close(args_t *args) +{ + hts_close(args->file); +} + +static void som_write_map(char *prefix, som_t **som, int nsom) +{ + FILE *fp = open_file(NULL,"w","%s.som",prefix); + fwrite("SOMv1",5,1,fp); + fwrite(&nsom,sizeof(int),1,fp); + int i; + for (i=0; isize,sizeof(int),1,fp); + fwrite(&som[i]->kdim,sizeof(int),1,fp); + fwrite(som[i]->w,sizeof(double),som[i]->size*som[i]->kdim,fp); + fwrite(som[i]->c,sizeof(double),som[i]->size,fp); + } + if ( fclose(fp) ) error("%s.som: fclose failed\n",prefix); +} +static som_t** som_load_map(char *prefix, int *nsom) +{ + FILE *fp = open_file(NULL,"r","%s.som",prefix); + char buf[5]; + if ( fread(buf,5,1,fp)!=1 || strncmp(buf,"SOMv1",5) ) error("Could not parse %s.som\n", prefix); + + if ( fread(nsom,sizeof(int),1,fp)!=1 ) error("Could not read %s.som\n", prefix); + som_t **som = (som_t**)malloc(*nsom*sizeof(som_t*)); + + int i; + for (i=0; i<*nsom; i++) + { + som[i] = (som_t*) calloc(1,sizeof(som_t)); + if ( fread(&som[i]->size,sizeof(int),1,fp) != 1 ) error("Could not read %s.som\n", prefix); + if ( fread(&som[i]->kdim,sizeof(int),1,fp) != 1 ) error("Could not read %s.som\n", prefix); + som[i]->w = (double*) malloc(sizeof(double)*som[i]->size*som[i]->kdim); + som[i]->c = (double*) malloc(sizeof(double)*som[i]->size); + if ( fread(som[i]->w,sizeof(double),som[i]->size*som[i]->kdim,fp) != som[i]->size*som[i]->kdim ) error("Could not read from %s.som\n", prefix); + if ( fread(som[i]->c,sizeof(double),som[i]->size,fp) != som[i]->size ) error("Could not read from %s.som\n", prefix); + } + if ( fclose(fp) ) error("%s.som: fclose failed\n",prefix); + return som; +} +static void som_create_plot(som_t *som, char *prefix) +{ + if ( som->ndim!=2 ) return; + + char *fname; + FILE *fp = open_file(&fname,"w","%s.py",prefix); + fprintf(fp, + "import matplotlib as mpl\n" + "mpl.use('Agg')\n" + "import matplotlib.pyplot as plt\n" + "\n" + "dat = [\n" + ); + int i,j; + double *val = som->c; + for (i=0; inbin; i++) + { + fprintf(fp,"["); + for (j=0; jnbin; j++) + { + if ( j>0 ) fprintf(fp,","); + fprintf(fp,"%e", *val); + val++; + } + fprintf(fp,"],\n"); + } + fprintf(fp, + "]\n" + "fig = plt.figure()\n" + "ax1 = plt.subplot(111)\n" + "im1 = ax1.imshow(dat)\n" + "fig.colorbar(im1)\n" + "plt.savefig('%s.png')\n" + "plt.close()\n" + "\n", prefix + ); + fclose(fp); + free(fname); +} +// Find the best matching unit: the node with minimum distance from the input vector +static inline int som_find_bmu(som_t *som, double *vec, double *dist) +{ + double *ptr = som->w; + double min_dist = HUGE_VAL; + int min_idx = 0; + + int i, k; + for (i=0; isize; i++) + { + double dist = 0; + for (k=0; kkdim; k++) + dist += (vec[k] - ptr[k]) * (vec[k] - ptr[k]); + if ( dist < min_dist ) + { + min_dist = dist; + min_idx = i; + } + ptr += som->kdim; + } + + if ( dist ) *dist = min_dist; + return min_idx; +} +static inline double som_get_score(som_t *som, double *vec, double bmu_th) +{ + double *ptr = som->w; + double min_dist = HUGE_VAL; + + int i, k; + for (i=0; isize; i++) + { + if ( som->c[i] >= bmu_th ) + { + double dist = 0; + for (k=0; kkdim; k++) + dist += (vec[k] - ptr[k]) * (vec[k] - ptr[k]); + if ( dist < min_dist ) min_dist = dist; + } + ptr += som->kdim; + } + return sqrt(min_dist); +} +// Convert flat index to that of a k-dimensional cube +static inline void som_idx_to_ndim(som_t *som, int idx, int *ndim) +{ + int i; + double sub = 0; + + ndim[0] = idx/som->div[0]; + for (i=1; indim; i++) + { + sub += ndim[i-1] * som->div[i-1]; + ndim[i] = (idx - sub)/som->div[i]; + } +} +static void som_train_site(som_t *som, double *vec, int update_counts) +{ + // update learning rate and learning radius + som->t++; + double dt = exp(-som->t/som->nt); + double learning_rate = som->learn * dt; + double radius = som->nbin * dt; radius *= radius; + + // find the best matching unit and its indexes + int min_idx = som_find_bmu(som, vec, NULL); + som_idx_to_ndim(som, min_idx, som->a_idx); + + // update the weights: traverse the map and make all nodes within the + // radius more similar to the input vector + double *ptr = som->w; + double *cnt = som->c; + int i, j, k; + for (i=0; isize; i++) + { + som_idx_to_ndim(som, i, som->b_idx); + double dist = 0; + for (j=0; jndim; j++) + dist += (som->a_idx[j] - som->b_idx[j]) * (som->a_idx[j] - som->b_idx[j]); + if ( dist <= radius ) + { + double influence = exp(-dist*dist*0.5/radius) * learning_rate; + for (k=0; kkdim; k++) + ptr[k] += influence * (vec[k] - ptr[k]); + + // Bad sites may help to shape the map, but only nodes with big enough + // influence will be used for classification. + if ( update_counts ) *cnt += influence; + } + ptr += som->kdim; + cnt++; + } +} +static void som_norm_counts(som_t *som) +{ + int i; + double max = 0; + for (i=0; isize; i++) + if ( max < som->c[i] ) max = som->c[i]; + for (i=0; isize; i++) + som->c[i] /= max; +} +static som_t *som_init(args_t *args) +{ + som_t *som = (som_t*) calloc(1,sizeof(som_t)); + som->ndim = args->ndim; + som->nbin = args->nbin; + som->kdim = args->mvals; + som->nt = args->ntrain; + som->learn = args->learn; + som->bmu_th = args->bmu_th; + som->size = pow(som->nbin,som->ndim); + som->w = (double*) malloc(sizeof(double)*som->size*som->kdim); + if ( !som->w ) error("Could not alloc %d bytes [nbin=%d ndim=%d kdim=%d]\n", sizeof(double)*som->size*som->kdim,som->nbin,som->ndim,som->kdim); + som->c = (double*) calloc(som->size,sizeof(double)); + if ( !som->w ) error("Could not alloc %d bytes [nbin=%d ndim=%d]\n", sizeof(double)*som->size,som->nbin,som->ndim); + int i; + for (i=0; isize*som->kdim; i++) + som->w[i] = (double)random()/RAND_MAX; + som->a_idx = (int*) malloc(sizeof(int)*som->ndim); + som->b_idx = (int*) malloc(sizeof(int)*som->ndim); + som->div = (double*) malloc(sizeof(double)*som->ndim); + for (i=0; indim; i++) + som->div[i] = pow(som->nbin,som->ndim-i-1); + return som; +} +static void som_destroy(som_t *som) +{ + free(som->a_idx); free(som->b_idx); free(som->div); + free(som->w); free(som->c); + free(som); +} + +static void init_data(args_t *args) +{ + // Get first line to learn the vector size + annots_reader_reset(args); + annots_reader_next(args); + + if ( args->action==SOM_CLASSIFY ) + args->som = som_load_map(args->prefix,&args->nfold); +} +static void destroy_data(args_t *args) +{ + int i; + if ( args->som ) + { + for (i=0; infold; i++) som_destroy(args->som[i]); + } + free(args->train_dat); + free(args->train_class); + free(args->som); + free(args->vals); + free(args->str.s); +} + +#define MERGE_MIN 0 +#define MERGE_MAX 1 +#define MERGE_AVG 2 +static double get_min_score(args_t *args, int iskip) +{ + int i; + double score, min_score = HUGE_VAL; + for (i=0; infold; i++) + { + if ( i==iskip ) continue; + score = som_get_score(args->som[i], args->vals, args->bmu_th); + if ( i==0 || score < min_score ) min_score = score; + } + return min_score; +} +static double get_max_score(args_t *args, int iskip) +{ + int i; + double score, max_score = -HUGE_VAL; + for (i=0; infold; i++) + { + if ( i==iskip ) continue; + score = som_get_score(args->som[i], args->vals, args->bmu_th); + if ( i==0 || max_score < score ) max_score = score; + } + return max_score; +} +static double get_avg_score(args_t *args, int iskip) +{ + int i, n = 0; + double score = 0; + for (i=0; infold; i++) + { + if ( i==iskip ) continue; + score += som_get_score(args->som[i], args->vals, args->bmu_th); + n++; + } + return score/n; +} +static int cmpfloat_desc(const void *a, const void *b) +{ + float fa = *((float*)a); + float fb = *((float*)b); + if ( fafb ) return -1; + return 0; +} + +static void create_eval_plot(args_t *args) +{ + FILE *fp = open_file(NULL,"w","%s.eval.py", args->prefix); + fprintf(fp, + "import matplotlib as mpl\n" + "mpl.use('Agg')\n" + "import matplotlib.pyplot as plt\n" + "\n" + "import csv\n" + "csv.register_dialect('tab', delimiter='\\t', quoting=csv.QUOTE_NONE)\n" + "dat = []\n" + "with open('%s.eval', 'rb') as f:\n" + "\treader = csv.reader(f, 'tab')\n" + "\tfor row in reader:\n" + "\t\tif row[0][0]!='#': dat.append(row)\n" + "\n" + "fig = plt.figure()\n" + "ax1 = plt.subplot(111)\n" + "ax1.plot([x[0] for x in dat],[x[1] for x in dat],'g',label='Good')\n" + "ax1.plot([x[0] for x in dat],[x[2] for x in dat],'r',label='Bad')\n" + "ax1.set_xlabel('SOM score')\n" + "ax1.set_ylabel('Number of training sites')\n" + "ax1.legend(loc='best',prop={'size':8},frameon=False)\n" + "plt.savefig('%s.eval.png')\n" + "plt.close()\n" + "\n", args->prefix,args->prefix + ); + fclose(fp); +} + +static void do_train(args_t *args) +{ + // read training sites + int i, igood = 0, ibad = 0, ngood = 0, nbad = 0, ntrain = 0; + annots_reader_reset(args); + while ( annots_reader_next(args) ) + { + // determine which of the nfold's SOMs to train + int isom = 0; + if ( args->dclass == args->good_class ) + { + if ( ++igood >= args->nfold ) igood = 0; + isom = igood; + ngood++; + } + else if ( args->dclass == args->bad_class ) + { + if ( ++ibad >= args->nfold ) ibad = 0; + isom = ibad; + nbad++; + } + else + error("Could not determine the class: %d (vs %d and %d)\n", args->dclass,args->good_class,args->bad_class); + + // save the values for evaluation + ntrain++; + hts_expand(double, ntrain*args->mvals, args->mtrain_dat, args->train_dat); + hts_expand(int, ntrain, args->mtrain_class, args->train_class); + memcpy(args->train_dat+(ntrain-1)*args->mvals, args->vals, args->mvals*sizeof(double)); + args->train_class[ntrain-1] = (args->dclass==args->good_class ? 1 : 0) | isom<<1; // store class + chunk used for training + } + annots_reader_close(args); + + // init maps + if ( !args->ntrain ) args->ntrain = ngood/args->nfold; + srandom(args->rand_seed); + args->som = (som_t**) malloc(sizeof(som_t*)*args->nfold); + for (i=0; infold; i++) args->som[i] = som_init(args); + + // train + for (i=0; itrain_class[i] & 1; + int isom = args->train_class[i] >> 1; + if ( is_good || args->train_bad ) + som_train_site(args->som[isom], args->train_dat+i*args->mvals, is_good); + } + + // norm and create plots + for (i=0; infold; i++) + { + som_norm_counts(args->som[i]); + if ( args->prefix ) + { + char *bname = msprintf("%s.som.%d", args->prefix,i); + som_create_plot(args->som[i], bname); + free(bname); + } + } + + // evaluate + float *good = (float*) malloc(sizeof(float)*ngood); assert(good); + float *bad = (float*) malloc(sizeof(float)*nbad); assert(bad); + igood = ibad = 0; + double max_score = sqrt(args->som[0]->kdim); + for (i=0; itrain_class[i] & 1; + int isom = args->train_class[i] >> 1; // this vector was used for training isom-th SOM, skip + if ( args->nfold==1 ) isom = -1; + memcpy(args->vals, args->train_dat+i*args->mvals, args->mvals*sizeof(double)); + switch (args->merge) + { + case MERGE_MIN: score = get_min_score(args, isom); break; + case MERGE_MAX: score = get_max_score(args, isom); break; + case MERGE_AVG: score = get_avg_score(args, isom); break; + } + score = 1.0 - score/max_score; + if ( is_good ) + good[igood++] = score; + else + bad[ibad++] = score; + } + qsort(good, ngood, sizeof(float), cmpfloat_desc); + qsort(bad, nbad, sizeof(float), cmpfloat_desc); + FILE *fp = NULL; + if ( args->prefix ) fp = open_file(NULL,"w","%s.eval", args->prefix); + igood = 0; + ibad = 0; + float prev_score = good[0]>bad[0] ? good[0] : bad[0]; + int printed = 0; + while ( igood 0.9 ) + { + fprintf(bcftools_stdout, "%.2f\t%.2f\t%e\t# %% of bad [1] and good [2] sites at a cutoff [3]\n", 100.*ibad/nbad,100.*igood/ngood,prev_score); + printed = 1; + } + + if ( igoodbad[ibad] ? good[igood] : bad[ibad]; + else if ( igoodprefix,strerror(errno)); + create_eval_plot(args); + som_write_map(args->prefix, args->som, args->nfold); + } + + free(good); + free(bad); +} + +static void do_classify(args_t *args) +{ + annots_reader_reset(args); + double max_score = sqrt(args->som[0]->kdim); + while ( annots_reader_next(args) ) + { + double score = 0; + switch (args->merge) + { + case MERGE_MIN: score = get_min_score(args, -1); break; + case MERGE_MAX: score = get_max_score(args, -1); break; + case MERGE_AVG: score = get_avg_score(args, -1); break; + } + fprintf(bcftools_stdout, "%e\n", 1.0 - score/max_score); + } + annots_reader_close(args); +} + +static void usage(void) +{ + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "About: SOM (Self-Organizing Map) filtering.\n"); + fprintf(bcftools_stderr, "Usage: bcftools som --train [options] \n"); + fprintf(bcftools_stderr, " bcftools som --classify [options]\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Model training options:\n"); + fprintf(bcftools_stderr, " -f, --nfold n-fold cross-validation (number of maps) [5]\n"); + fprintf(bcftools_stderr, " -p, --prefix prefix of output files\n"); + fprintf(bcftools_stderr, " -s, --size map size [20]\n"); + fprintf(bcftools_stderr, " -t, --train \n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Classifying options:\n"); + fprintf(bcftools_stderr, " -c, --classify \n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Experimental training options (no reason to change):\n"); + fprintf(bcftools_stderr, " -b, --bmu-threshold threshold for selection of best-matching unit [0.9]\n"); + fprintf(bcftools_stderr, " -d, --som-dimension SOM dimension [2]\n"); + fprintf(bcftools_stderr, " -e, --exclude-bad exclude bad sites from training, use for evaluation only\n"); + fprintf(bcftools_stderr, " -l, --learning-rate learning rate [1.0]\n"); + fprintf(bcftools_stderr, " -m, --merge -f merge algorithm [avg]\n"); + fprintf(bcftools_stderr, " -n, --ntrain-sites effective number of training sites [number of good sites]\n"); + fprintf(bcftools_stderr, " -r, --random-seed random seed, 0 for time() [1]\n"); + fprintf(bcftools_stderr, "\n"); + exit(1); +} + +int main_vcfsom(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->nbin = 20; + args->learn = 1.0; + args->bmu_th = 0.9; + args->nfold = 5; + args->rand_seed = 1; + args->ndim = 2; + args->bad_class = 1; + args->good_class = 2; + args->merge = MERGE_AVG; + args->train_bad = 1; + + static struct option loptions[] = + { + {"help",0,0,'h'}, + {"prefix",1,0,'p'}, + {"ntrain-sites",1,0,'n'}, + {"random-seed",1,0,'r'}, + {"bmu-threshold",1,0,'b'}, + {"exclude-bad",0,0,'e'}, + {"learning-rate",1,0,'l'}, + {"size",1,0,'s'}, + {"som-dimension",1,0,'d'}, + {"nfold",1,0,'f'}, + {"merge",1,0,'m'}, + {"train",0,0,'t'}, + {"classify",0,0,'c'}, + {0,0,0,0} + }; + while ((c = getopt_long(argc, argv, "htcp:n:r:b:l:s:f:d:m:e",loptions,NULL)) >= 0) { + switch (c) { + case 'e': args->train_bad = 0; break; + case 'm': + if ( !strcmp(optarg,"min") ) args->merge = MERGE_MIN; + else if ( !strcmp(optarg,"max") ) args->merge = MERGE_MAX; + else if ( !strcmp(optarg,"avg") ) args->merge = MERGE_AVG; + else error("The -m method not recognised: %s\n", optarg); + break; + case 'p': args->prefix = optarg; break; + case 'n': args->ntrain = atoi(optarg); break; + case 'r': args->rand_seed = atoi(optarg); break; + case 'b': args->bmu_th = atof(optarg); break; + case 'l': args->learn = atof(optarg); break; + case 's': args->nbin = atoi(optarg); break; + case 'f': args->nfold = atoi(optarg); break; + case 'd': + args->ndim = atoi(optarg); + if ( args->ndim<2 ) error("Expected -d >=2, got %d\n", args->ndim); + if ( args->ndim>3 ) fprintf(bcftools_stderr,"Warning: This will take a long time and is not going to make the results better: -d %d\n", args->ndim); + break; + case 't': args->action = SOM_TRAIN; break; + case 'c': args->action = SOM_CLASSIFY; break; + case 'h': + case '?': usage(); + default: error("Unknown argument: %s\n", optarg); + } + } + + if ( !args->rand_seed ) args->rand_seed = time(NULL); + if ( argc!=optind+1 ) usage(); + args->fname = argv[optind]; + init_data(args); + + if ( args->action == SOM_TRAIN ) do_train(args); + else if ( args->action == SOM_CLASSIFY ) do_classify(args); + + destroy_data(args); + free(args); + return 0; +} + diff --git a/bcftools/vcfsort.c b/bcftools/vcfsort.c new file mode 100644 index 0000000..e41b628 --- /dev/null +++ b/bcftools/vcfsort.c @@ -0,0 +1,306 @@ +/* vcfsort.c -- sort subcommand + + Copyright (C) 2017 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "kheap.h" +#include "bcftools.h" + +typedef struct +{ + char *fname; + htsFile *fh; + bcf1_t *rec; +} +blk_t; + +typedef struct _args_t +{ + bcf_hdr_t *hdr; + char **argv, *fname, *output_fname, *tmp_dir; + int argc, output_type; + size_t max_mem, mem; + bcf1_t **buf; + size_t nbuf, mbuf, nblk; + blk_t *blk; +} +args_t; + +int cmp_bcf_pos(const void *aptr, const void *bptr) +{ + bcf1_t *a = *((bcf1_t**)aptr); + bcf1_t *b = *((bcf1_t**)bptr); + if ( a->rid < b->rid ) return -1; + if ( a->rid > b->rid ) return 1; + if ( a->pos < b->pos ) return -1; + if ( a->pos > b->pos ) return 1; + return 0; +} + +void buf_flush(args_t *args) +{ + if ( !args->nbuf ) return; + + qsort(args->buf, args->nbuf, sizeof(*args->buf), cmp_bcf_pos); + + args->nblk++; + args->blk = (blk_t*) realloc(args->blk, sizeof(blk_t)*args->nblk); + blk_t *blk = args->blk + args->nblk - 1; + + kstring_t str = {0,0,0}; + ksprintf(&str, "%s/%05d.bcf", args->tmp_dir, (int)args->nblk); + blk->fname = str.s; + + htsFile *fh = hts_open(blk->fname, "wbu"); + if ( fh == NULL ) error("Cannot write %s: %s\n", blk->fname, strerror(errno)); + bcf_hdr_write(fh, args->hdr); + + int i; + for (i=0; inbuf; i++) + { + bcf_write(fh, args->hdr, args->buf[i]); + bcf_destroy(args->buf[i]); + } + hts_close(fh); + + args->nbuf = 0; + args->mem = 0; +} + +void buf_push(args_t *args, bcf1_t *rec) +{ + int delta = sizeof(bcf1_t) + rec->shared.l + rec->indiv.l + sizeof(bcf1_t*); + if ( args->mem + delta > args->max_mem ) buf_flush(args); + args->nbuf++; + args->mem += delta; + hts_expand(bcf1_t*, args->nbuf, args->mbuf, args->buf); + args->buf[args->nbuf-1] = rec; +} + +void sort_blocks(args_t *args) +{ + htsFile *in = hts_open(args->fname, "r"); + if ( !in ) error("Could not read %s\n", args->fname); + args->hdr = bcf_hdr_read(in); + + while ( 1 ) + { + bcf1_t *rec = bcf_init(); + int ret = bcf_read1(in, args->hdr, rec); + if ( ret < -1 ) error("Error encountered while parsing the input\n"); + if ( ret == -1 ) + { + bcf_destroy(rec); + break; + } + buf_push(args, rec); + } + buf_flush(args); + free(args->buf); + + if ( hts_close(in)!=0 ) error("Close failed: %s\n", args->fname); +} + +static inline int blk_is_smaller(blk_t **aptr, blk_t **bptr) +{ + blk_t *a = *aptr; + blk_t *b = *bptr; + if ( a->rec->rid < b->rec->rid ) return 1; + if ( a->rec->rid > b->rec->rid ) return 0; + if ( a->rec->pos < b->rec->pos ) return 1; + return 0; +} +KHEAP_INIT(blk, blk_t*, blk_is_smaller) + +void blk_read(khp_blk_t *bhp, bcf_hdr_t *hdr, blk_t *blk) +{ + if ( !blk->fh ) return; + int ret = bcf_read(blk->fh, hdr, blk->rec); + if ( ret < -1 ) error("Error reading %s\n", blk->fname); + if ( ret == -1 ) + { + if ( hts_close(blk->fh)!=0 ) error("Close failed: %s\n", blk->fname); + blk->fh = 0; + return; + } + khp_insert(blk, bhp, &blk); +} + +void merge_blocks(args_t *args) +{ + fprintf(stderr,"Merging %d temporary files\n", (int)args->nblk); + + khp_blk_t *bhp = khp_init(blk); + + int i; + for (i=0; inblk; i++) + { + blk_t *blk = args->blk + i; + blk->fh = hts_open(blk->fname, "r"); + if ( !blk->fh ) error("Could not read %s: %s\n", blk->fname, strerror(errno)); + bcf_hdr_t *hdr = bcf_hdr_read(blk->fh); + bcf_hdr_destroy(hdr); + blk->rec = bcf_init(); + blk_read(bhp, args->hdr, blk); + } + + htsFile *out = hts_open(args->output_fname, hts_bcf_wmode(args->output_type)); + bcf_hdr_write(out, args->hdr); + while ( bhp->ndat ) + { + blk_t *blk = bhp->dat[0]; + bcf_write(out, args->hdr, blk->rec); + khp_delete(blk, bhp); + blk_read(bhp, args->hdr, blk); + } + if ( hts_close(out)!=0 ) error("Close failed: %s\n", args->output_fname); + + fprintf(stderr,"Cleaning\n"); + for (i=0; inblk; i++) + { + blk_t *blk = args->blk + i; + unlink(blk->fname); + free(blk->fname); + bcf_destroy(blk->rec); + } + rmdir(args->tmp_dir); + free(args->blk); + khp_destroy(blk, bhp); + fprintf(stderr,"Done\n"); +} + +static void usage(args_t *args) +{ + fprintf(stderr, "\n"); + fprintf(stderr, "About: Sort VCF/BCF file.\n"); + fprintf(stderr, "Usage: bcftools sort [OPTIONS] \n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " -m, --max-mem [kMG] maximum memory to use [768M]\n"); // using metric units, 1M=1e6 + fprintf(stderr, " -o, --output-file output file name [stdout]\n"); + fprintf(stderr, " -O, --output-type b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"); + fprintf(stderr, " -T, --temp-dir temporary files [/tmp/bcftools-sort.XXXXXX/]\n"); + fprintf(stderr, "\n"); + exit(1); +} + +size_t parse_mem_string(char *str) +{ + char *tmp; + double mem = strtod(str, &tmp); + if ( tmp==str ) error("Could not parse: --max-mem %s\n", str); + if ( !strcasecmp("k",tmp) ) mem *= 1000; + else if ( !strcasecmp("m",tmp) ) mem *= 1000*1000; + else if ( !strcasecmp("g",tmp) ) mem *= 1000*1000*1000; + return mem; +} + +void mkdir_p(const char *fmt, ...); +void init(args_t *args) +{ + if ( !args->tmp_dir ) + { + args->tmp_dir = strdup("/tmp/bcftools-sort.XXXXXX"); + char *tmp_dir = mkdtemp(args->tmp_dir); + if ( !tmp_dir ) error("mkdtemp(%s) failed: %s\n", args->tmp_dir,strerror(errno)); + } + else + { + args->tmp_dir = strdup(args->tmp_dir); + mkdir_p(args->tmp_dir); + } + fprintf(stderr,"Writing to %s\n", args->tmp_dir); +} +void destroy(args_t *args) +{ + bcf_hdr_destroy(args->hdr); + free(args->tmp_dir); + free(args); +} + +int main_sort(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->max_mem = 768*1000*1000; + args->output_fname = "-"; + + static struct option loptions[] = + { + {"max-mem",required_argument,NULL,'m'}, + {"temp-dir",required_argument,NULL,'T'}, + {"output-type",required_argument,NULL,'O'}, + {"output-file",required_argument,NULL,'o'}, + {"help",no_argument,NULL,'h'}, + {0,0,0,0} + }; + while ((c = getopt_long(argc, argv, "m:T:O:o:h?",loptions,NULL)) >= 0) + { + switch (c) + { + case 'm': args->max_mem = parse_mem_string(optarg); break; + case 'T': args->tmp_dir = optarg; break; + case 'o': args->output_fname = optarg; break; + case 'O': + switch (optarg[0]) { + case 'b': args->output_type = FT_BCF_GZ; break; + case 'u': args->output_type = FT_BCF; break; + case 'z': args->output_type = FT_VCF_GZ; break; + case 'v': args->output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + }; + break; + case 'h': usage(args); + case '?': usage(args); + default: error("Unknown argument: %s\n", optarg); + } + } + + if ( optind>=argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) args->fname = "-"; // reading from stdin + else usage(args); + } + else args->fname = argv[optind]; + + init(args); + sort_blocks(args); + merge_blocks(args); + destroy(args); + + return 0; +} diff --git a/bcftools/vcfsort.c.pysam.c b/bcftools/vcfsort.c.pysam.c new file mode 100644 index 0000000..4a0325f --- /dev/null +++ b/bcftools/vcfsort.c.pysam.c @@ -0,0 +1,308 @@ +#include "bcftools.pysam.h" + +/* vcfsort.c -- sort subcommand + + Copyright (C) 2017 Genome Research Ltd. + + Author: Petr Danecek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "kheap.h" +#include "bcftools.h" + +typedef struct +{ + char *fname; + htsFile *fh; + bcf1_t *rec; +} +blk_t; + +typedef struct _args_t +{ + bcf_hdr_t *hdr; + char **argv, *fname, *output_fname, *tmp_dir; + int argc, output_type; + size_t max_mem, mem; + bcf1_t **buf; + size_t nbuf, mbuf, nblk; + blk_t *blk; +} +args_t; + +int cmp_bcf_pos(const void *aptr, const void *bptr) +{ + bcf1_t *a = *((bcf1_t**)aptr); + bcf1_t *b = *((bcf1_t**)bptr); + if ( a->rid < b->rid ) return -1; + if ( a->rid > b->rid ) return 1; + if ( a->pos < b->pos ) return -1; + if ( a->pos > b->pos ) return 1; + return 0; +} + +void buf_flush(args_t *args) +{ + if ( !args->nbuf ) return; + + qsort(args->buf, args->nbuf, sizeof(*args->buf), cmp_bcf_pos); + + args->nblk++; + args->blk = (blk_t*) realloc(args->blk, sizeof(blk_t)*args->nblk); + blk_t *blk = args->blk + args->nblk - 1; + + kstring_t str = {0,0,0}; + ksprintf(&str, "%s/%05d.bcf", args->tmp_dir, (int)args->nblk); + blk->fname = str.s; + + htsFile *fh = hts_open(blk->fname, "wbu"); + if ( fh == NULL ) error("Cannot write %s: %s\n", blk->fname, strerror(errno)); + bcf_hdr_write(fh, args->hdr); + + int i; + for (i=0; inbuf; i++) + { + bcf_write(fh, args->hdr, args->buf[i]); + bcf_destroy(args->buf[i]); + } + hts_close(fh); + + args->nbuf = 0; + args->mem = 0; +} + +void buf_push(args_t *args, bcf1_t *rec) +{ + int delta = sizeof(bcf1_t) + rec->shared.l + rec->indiv.l + sizeof(bcf1_t*); + if ( args->mem + delta > args->max_mem ) buf_flush(args); + args->nbuf++; + args->mem += delta; + hts_expand(bcf1_t*, args->nbuf, args->mbuf, args->buf); + args->buf[args->nbuf-1] = rec; +} + +void sort_blocks(args_t *args) +{ + htsFile *in = hts_open(args->fname, "r"); + if ( !in ) error("Could not read %s\n", args->fname); + args->hdr = bcf_hdr_read(in); + + while ( 1 ) + { + bcf1_t *rec = bcf_init(); + int ret = bcf_read1(in, args->hdr, rec); + if ( ret < -1 ) error("Error encountered while parsing the input\n"); + if ( ret == -1 ) + { + bcf_destroy(rec); + break; + } + buf_push(args, rec); + } + buf_flush(args); + free(args->buf); + + if ( hts_close(in)!=0 ) error("Close failed: %s\n", args->fname); +} + +static inline int blk_is_smaller(blk_t **aptr, blk_t **bptr) +{ + blk_t *a = *aptr; + blk_t *b = *bptr; + if ( a->rec->rid < b->rec->rid ) return 1; + if ( a->rec->rid > b->rec->rid ) return 0; + if ( a->rec->pos < b->rec->pos ) return 1; + return 0; +} +KHEAP_INIT(blk, blk_t*, blk_is_smaller) + +void blk_read(khp_blk_t *bhp, bcf_hdr_t *hdr, blk_t *blk) +{ + if ( !blk->fh ) return; + int ret = bcf_read(blk->fh, hdr, blk->rec); + if ( ret < -1 ) error("Error reading %s\n", blk->fname); + if ( ret == -1 ) + { + if ( hts_close(blk->fh)!=0 ) error("Close failed: %s\n", blk->fname); + blk->fh = 0; + return; + } + khp_insert(blk, bhp, &blk); +} + +void merge_blocks(args_t *args) +{ + fprintf(bcftools_stderr,"Merging %d temporary files\n", (int)args->nblk); + + khp_blk_t *bhp = khp_init(blk); + + int i; + for (i=0; inblk; i++) + { + blk_t *blk = args->blk + i; + blk->fh = hts_open(blk->fname, "r"); + if ( !blk->fh ) error("Could not read %s: %s\n", blk->fname, strerror(errno)); + bcf_hdr_t *hdr = bcf_hdr_read(blk->fh); + bcf_hdr_destroy(hdr); + blk->rec = bcf_init(); + blk_read(bhp, args->hdr, blk); + } + + htsFile *out = hts_open(args->output_fname, hts_bcf_wmode(args->output_type)); + bcf_hdr_write(out, args->hdr); + while ( bhp->ndat ) + { + blk_t *blk = bhp->dat[0]; + bcf_write(out, args->hdr, blk->rec); + khp_delete(blk, bhp); + blk_read(bhp, args->hdr, blk); + } + if ( hts_close(out)!=0 ) error("Close failed: %s\n", args->output_fname); + + fprintf(bcftools_stderr,"Cleaning\n"); + for (i=0; inblk; i++) + { + blk_t *blk = args->blk + i; + unlink(blk->fname); + free(blk->fname); + bcf_destroy(blk->rec); + } + rmdir(args->tmp_dir); + free(args->blk); + khp_destroy(blk, bhp); + fprintf(bcftools_stderr,"Done\n"); +} + +static void usage(args_t *args) +{ + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "About: Sort VCF/BCF file.\n"); + fprintf(bcftools_stderr, "Usage: bcftools sort [OPTIONS] \n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Options:\n"); + fprintf(bcftools_stderr, " -m, --max-mem [kMG] maximum memory to use [768M]\n"); // using metric units, 1M=1e6 + fprintf(bcftools_stderr, " -o, --output-file output file name [bcftools_stdout]\n"); + fprintf(bcftools_stderr, " -O, --output-type b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"); + fprintf(bcftools_stderr, " -T, --temp-dir temporary files [/tmp/bcftools-sort.XXXXXX/]\n"); + fprintf(bcftools_stderr, "\n"); + exit(1); +} + +size_t parse_mem_string(char *str) +{ + char *tmp; + double mem = strtod(str, &tmp); + if ( tmp==str ) error("Could not parse: --max-mem %s\n", str); + if ( !strcasecmp("k",tmp) ) mem *= 1000; + else if ( !strcasecmp("m",tmp) ) mem *= 1000*1000; + else if ( !strcasecmp("g",tmp) ) mem *= 1000*1000*1000; + return mem; +} + +void mkdir_p(const char *fmt, ...); +void init(args_t *args) +{ + if ( !args->tmp_dir ) + { + args->tmp_dir = strdup("/tmp/bcftools-sort.XXXXXX"); + char *tmp_dir = mkdtemp(args->tmp_dir); + if ( !tmp_dir ) error("mkdtemp(%s) failed: %s\n", args->tmp_dir,strerror(errno)); + } + else + { + args->tmp_dir = strdup(args->tmp_dir); + mkdir_p(args->tmp_dir); + } + fprintf(bcftools_stderr,"Writing to %s\n", args->tmp_dir); +} +void destroy(args_t *args) +{ + bcf_hdr_destroy(args->hdr); + free(args->tmp_dir); + free(args); +} + +int main_sort(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->max_mem = 768*1000*1000; + args->output_fname = "-"; + + static struct option loptions[] = + { + {"max-mem",required_argument,NULL,'m'}, + {"temp-dir",required_argument,NULL,'T'}, + {"output-type",required_argument,NULL,'O'}, + {"output-file",required_argument,NULL,'o'}, + {"help",no_argument,NULL,'h'}, + {0,0,0,0} + }; + while ((c = getopt_long(argc, argv, "m:T:O:o:h?",loptions,NULL)) >= 0) + { + switch (c) + { + case 'm': args->max_mem = parse_mem_string(optarg); break; + case 'T': args->tmp_dir = optarg; break; + case 'o': args->output_fname = optarg; break; + case 'O': + switch (optarg[0]) { + case 'b': args->output_type = FT_BCF_GZ; break; + case 'u': args->output_type = FT_BCF; break; + case 'z': args->output_type = FT_VCF_GZ; break; + case 'v': args->output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + }; + break; + case 'h': usage(args); + case '?': usage(args); + default: error("Unknown argument: %s\n", optarg); + } + } + + if ( optind>=argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) args->fname = "-"; // reading from stdin + else usage(args); + } + else args->fname = argv[optind]; + + init(args); + sort_blocks(args); + merge_blocks(args); + destroy(args); + + return 0; +} diff --git a/bcftools/vcfstats.c b/bcftools/vcfstats.c new file mode 100644 index 0000000..3b73173 --- /dev/null +++ b/bcftools/vcfstats.c @@ -0,0 +1,1724 @@ +/* vcfstats.c -- Produces stats which can be plotted using plot-vcfstats. + + Copyright (C) 2012-2016 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +/* + Notes and known issues: + - SN ts/tv calculation includes all non-ref alleles listed in ALT while per-sample ts/tv + takes the first non-ref allele only, something to consider with many non-ref HETs. +*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "filter.h" +#include "bin.h" + +// Logic of the filters: include or exclude sites which match the filters? +#define FLT_INCLUDE 1 +#define FLT_EXCLUDE 2 + +#define HWE_STATS 1 +#define QUAL_STATS 1 +#define IRC_STATS 1 +#define IRC_RLEN 10 +#define NA_STRING "0" + +typedef struct +{ + char *tag; + float min, max; + uint64_t *vals_ts, *vals_tv; + void *val; + int nbins, type, m_val; +} +user_stats_t; + +typedef struct +{ + int min, max, step, m_vals; + uint64_t *vals; +} +idist_t; + +typedef struct +{ + int n_snps, n_indels, n_mnps, n_others, n_mals, n_snp_mals, n_records, n_noalts; + int *af_ts, *af_tv, *af_snps; // first bin of af_* stats are singletons + #if HWE_STATS + int *af_hwe; + #endif + #if IRC_STATS + int n_repeat[IRC_RLEN][4], n_repeat_na; // number of indels which are repeat-consistent, repeat-inconsistent (dels and ins), and not applicable + int *af_repeats[3]; + #endif + int ts_alt1, tv_alt1; + #if QUAL_STATS + int *qual_ts, *qual_tv, *qual_snps, *qual_indels; + #endif + int *insertions, *deletions, m_indel; // maximum indel length + int in_frame, out_frame, na_frame, in_frame_alt1, out_frame_alt1, na_frame_alt1; + int subst[15]; + int *smpl_hets, *smpl_homRR, *smpl_homAA, *smpl_ts, *smpl_tv, *smpl_indels, *smpl_ndp, *smpl_sngl; + int *smpl_hapRef, *smpl_hapAlt; + int *smpl_indel_hets, *smpl_indel_homs; + int *smpl_frm_shifts; // not-applicable, in-frame, out-frame + unsigned long int *smpl_dp; + idist_t dp, dp_sites; + int nusr; + user_stats_t *usr; +} +stats_t; + +typedef struct +{ + uint64_t gt2gt[5][5]; // number of RR->RR, RR->RA, etc. matches/mismatches; see type2stats + /* + Pearson's R^2 is used for aggregate R^2 + y, yy .. sum of dosage and squared dosage in the query VCF (second file) + x, xx .. sum of squared dosage in the truth VCF (first file) + n .. number of genotypes + */ + double y, yy, x, xx, yx, n; +} +gtcmp_t; + +typedef struct +{ + char *seq; + int pos, cnt, len; +} +_idc1_t; +typedef struct +{ + faidx_t *ref; + _idc1_t *dat; + int ndat, mdat; +} +indel_ctx_t; + +typedef struct +{ + // stats + stats_t stats[3]; + int *tmp_iaf, ntmp_iaf, m_af, m_qual, naf_hwe, mtmp_frm; + uint8_t *tmp_frm; + int dp_min, dp_max, dp_step; + gtcmp_t *smpl_gts_snps, *smpl_gts_indels; + gtcmp_t *af_gts_snps, *af_gts_indels; // first bin of af_* stats are singletons + bin_t *af_bins; + float *farr; + int mfarr; + + // indel context + indel_ctx_t *indel_ctx; + char *ref_fname; + + // user stats + int nusr; + user_stats_t *usr; + + // other + bcf_srs_t *files; + bcf_sr_regions_t *exons; + char **argv, *exons_fname, *regions_list, *samples_list, *targets_list, *af_bins_list, *af_tag; + int argc, verbose_sites, first_allele_only, samples_is_file; + int split_by_id, nstats; + + filter_t *filter[2]; + char *filter_str; + int filter_logic; // include or exclude sites which match the filters? One of FLT_INCLUDE/FLT_EXCLUDE + int n_threads; +} +args_t; + +static int type2dosage[6], type2ploidy[6], type2stats[7]; + +static void idist_init(idist_t *d, int min, int max, int step) +{ + d->min = min; d->max = max; d->step = step; + d->m_vals = 4 + (d->max - d->min)/d->step; + d->vals = (uint64_t*) calloc(d->m_vals,sizeof(uint64_t)); +} +static void idist_destroy(idist_t *d) +{ + if ( d->vals ) free(d->vals); +} +static inline uint64_t *idist(idist_t *d, int val) +{ + if ( val < d->min ) return &d->vals[0]; + if ( val > d->max ) return &d->vals[d->m_vals-1]; + return &d->vals[1 + (val - d->min) / d->step]; +} +static inline int idist_i2bin(idist_t *d, int i) +{ + if ( i<=0 ) return d->min; + if ( i>= d->m_vals ) return d->max; + return i-1+d->min; +} + +static inline int clip_nonnegative(float x, int limit) +{ + if (x >= limit || isnan(x)) return limit - 1; + else if (x <= 0.0) return 0; + else return (int) x; +} + +#define IC_DBG 0 +#if IC_DBG +static void _indel_ctx_print1(_idc1_t *idc) +{ + int i; + fprintf(stdout, "%d\t", idc->cnt); + for (i=0; ilen; i++) + fputc(idc->seq[i], stdout); + fputc('\n', stdout); +} +static void _indel_ctx_print(indel_ctx_t *ctx) +{ + int i; + for (i=0; indat; i++) + _indel_ctx_print1(&ctx->dat[i]); + fputc('\n',stdout); +} +#endif +static int _indel_ctx_lookup(indel_ctx_t *ctx, char *seq, int seq_len, int *hit) +{ + // binary search + int min = 0, max = ctx->ndat - 1; + while ( min<=max ) + { + int i = (min+max)/2; + int cmp = strncmp(seq, ctx->dat[i].seq, seq_len); + if ( cmp<0 ) max = i - 1; + else if ( cmp>0 ) min = i + 1; + else + { + if ( seq_len==ctx->dat[i].len ) + { + *hit = 1; + return i; + } + else if ( seq_lendat[i].len ) max = i - 1; + else min = i + 1; + } + } + *hit = 0; + return max; +} +static void _indel_ctx_insert(indel_ctx_t *ctx, char *seq, int seq_len, int pos) +{ + int idat, hit, i; + idat = _indel_ctx_lookup(ctx, seq, seq_len, &hit); + if ( !hit ) + { + if ( pos>0 ) return; + idat++; + ctx->ndat++; + hts_expand(_idc1_t, ctx->ndat+1, ctx->mdat, ctx->dat); + if ( idatndat && ctx->ndat>1 ) + memmove(&ctx->dat[idat+1], &ctx->dat[idat], (ctx->ndat - idat - 1)*sizeof(_idc1_t)); + ctx->dat[idat].len = seq_len; + ctx->dat[idat].cnt = 1; + ctx->dat[idat].pos = pos; + ctx->dat[idat].seq = (char*) malloc(sizeof(char)*(seq_len+1)); + for (i=0; idat[idat].seq[i] = seq[i]; + ctx->dat[idat].seq[i] = 0; + return; + } + if ( ctx->dat[idat].pos + seq_len == pos ) + { + ctx->dat[idat].cnt++; + ctx->dat[idat].pos = pos; + } +} +indel_ctx_t *indel_ctx_init(char *fa_ref_fname) +{ + indel_ctx_t *ctx = (indel_ctx_t *) calloc(1,sizeof(indel_ctx_t)); + ctx->ref = fai_load(fa_ref_fname); + if ( !ctx->ref ) + { + free(ctx); + return NULL; + } + return ctx; +} +void indel_ctx_destroy(indel_ctx_t *ctx) +{ + fai_destroy(ctx->ref); + if ( ctx->mdat ) free(ctx->dat); + free(ctx); +} +/** + * indel_ctx_type() - determine indel context type + * @ctx: + * @chr: chromosome name + * @pos: position of the first @ref base, 1-based + * @ref: reference allele + * @alt: alternate allele. Only first of multiple comma-separated alleles is + * considered + * @nrep: number of repeated elements (w) + * @nlen: length of a single repeat element (w) + * + * Returns the INDEL length, negative for deletions, positive for insertions + */ +int indel_ctx_type(indel_ctx_t *ctx, char *chr, int pos, char *ref, char *alt, int *nrep, int *nlen) +{ + const int win_size = 50; // hard-wired for now + const int rep_len = IRC_RLEN; // hard-wired for now + + int ref_len = strlen(ref); + int alt_len = 0; + while ( alt[alt_len] && alt[alt_len]!=',' ) alt_len++; + + int i, fai_ref_len; + char *fai_ref = faidx_fetch_seq(ctx->ref, chr, pos-1, pos+win_size, &fai_ref_len); + for (i=0; i96 ) fai_ref[i] -= 32; + + // Sanity check: the reference sequence must match the REF allele + for (i=0; indat = 0; + for (i=0; indat; i++) + { + if ( max_cnt < ctx->dat[i].cnt || (max_cnt==ctx->dat[i].cnt && max_len < ctx->dat[i].len) ) + { + max_cnt = ctx->dat[i].cnt; + max_len = ctx->dat[i].len; + } + free(ctx->dat[i].seq); + } + free(fai_ref); + + *nrep = max_cnt; + *nlen = max_len; + return alt_len - ref_len; +} + +static void add_user_stats(args_t *args, char *str) +{ + args->nusr++; + args->usr = (user_stats_t*) realloc(args->usr,sizeof(user_stats_t)*args->nusr); + user_stats_t *usr = &args->usr[args->nusr-1]; + memset(usr,0,sizeof(*usr)); + usr->min = 0; + usr->max = 1; + usr->nbins = 100; + + char *tmp = str; + while ( *tmp && *tmp!=':' ) tmp++; + usr->tag = (char*)calloc(tmp-str+2,sizeof(char)); + memcpy(usr->tag,str,tmp-str); + + if ( *tmp ) + { + char *ptr = ++tmp; + usr->min = strtod(tmp, &ptr); + if ( tmp==ptr ) error("Could not parse %s\n", str); + tmp = ptr+1; + } + if ( *tmp ) + { + char *ptr = tmp; + usr->max = strtod(tmp, &ptr); + if ( tmp==ptr ) error("Could not parse %s\n", str); + tmp = ptr+1; + } + if ( *tmp ) + { + char *ptr = tmp; + usr->nbins = strtol(tmp, &ptr, 10); + if ( tmp==ptr ) error("Could not parse %s\n", str); + if ( usr->nbins<=0 ) error("Number of bins does not make sense (%d): %s.\n", usr->nbins, str); + } +} +static void init_user_stats(args_t *args, bcf_hdr_t *hdr, stats_t *stats) +{ + stats->nusr = args->nusr; + stats->usr = (user_stats_t*)malloc(sizeof(user_stats_t)*args->nusr); + memcpy(stats->usr,args->usr,args->nusr*sizeof(user_stats_t)); + int i; + for (i=0; inusr; i++) + { + user_stats_t *usr = &stats->usr[i]; + usr->vals_ts = (uint64_t*)calloc(usr->nbins,sizeof(uint64_t)); + usr->vals_tv = (uint64_t*)calloc(usr->nbins,sizeof(uint64_t)); + int id = bcf_hdr_id2int(hdr,BCF_DT_ID,usr->tag); + if ( !bcf_hdr_idinfo_exists(hdr,BCF_HL_INFO,id) ) error("The INFO tag \"%s\" is not defined in the header\n", usr->tag); + usr->type = bcf_hdr_id2type(hdr,BCF_HL_INFO,id); + if ( usr->type!=BCF_HT_REAL && usr->type!=BCF_HT_INT ) error("The INFO tag \"%s\" is not of Float or Integer type (%d)\n", usr->type); + } +} +static void init_stats(args_t *args) +{ + int i; + args->nstats = args->files->nreaders==1 ? 1 : 3; + if ( args->split_by_id ) args->nstats = 2; + + if ( args->filter_str ) + { + args->filter[0] = filter_init(bcf_sr_get_header(args->files,0), args->filter_str); + if ( args->files->nreaders==2 ) + args->filter[1] = filter_init(bcf_sr_get_header(args->files,1), args->filter_str); + args->files->max_unpack |= filter_max_unpack(args->filter[0]); + } + + // AF corresponds to AC but is more robust to mixtures of haploid and diploid GTs + if ( !args->af_bins_list ) + { + args->m_af = 101; + for (i=0; ifiles->nreaders; i++) + if ( bcf_hdr_nsamples(args->files->readers[i].header) + 1> args->m_af ) + args->m_af = bcf_hdr_nsamples(args->files->readers[i].header) + 1; + } + else + { + args->af_bins = bin_init(args->af_bins_list,0,1); + + // m_af is used also for other af arrays, where the first bin is for + // singletons. However, since the last element is unused in af_bins + // (n boundaries form n-1 intervals), the m_af count is good for both. + args->m_af = bin_get_size(args->af_bins); + } + + bcf_hdr_t *hdr = bcf_sr_get_header(args->files,0); + if ( args->af_tag && !bcf_hdr_idinfo_exists(hdr,BCF_HL_INFO,bcf_hdr_id2int(hdr,BCF_DT_ID,args->af_tag)) ) + error("No such INFO tag: %s\n", args->af_tag); + + #if QUAL_STATS + args->m_qual = 999; + #endif + #if HWE_STATS + args->naf_hwe = 100; + #endif + + if ( args->samples_list ) + { + if ( !bcf_sr_set_samples(args->files,args->samples_list,args->samples_is_file) ) + { + if ( !bcf_hdr_nsamples(args->files->readers[0].header) ) + error("No sample columns in %s\n", args->files->readers[0].fname); + error("Unable to parse the samples: \"%s\"\n", args->samples_list); + } + args->af_gts_snps = (gtcmp_t *) calloc(args->m_af,sizeof(gtcmp_t)); + args->af_gts_indels = (gtcmp_t *) calloc(args->m_af,sizeof(gtcmp_t)); + args->smpl_gts_snps = (gtcmp_t *) calloc(args->files->n_smpl,sizeof(gtcmp_t)); + args->smpl_gts_indels = (gtcmp_t *) calloc(args->files->n_smpl,sizeof(gtcmp_t)); + } + for (i=0; instats; i++) + { + stats_t *stats = &args->stats[i]; + stats->m_indel = 60; + stats->insertions = (int*) calloc(stats->m_indel,sizeof(int)); + stats->deletions = (int*) calloc(stats->m_indel,sizeof(int)); + stats->af_ts = (int*) calloc(args->m_af,sizeof(int)); + stats->af_tv = (int*) calloc(args->m_af,sizeof(int)); + stats->af_snps = (int*) calloc(args->m_af,sizeof(int)); + int j; + for (j=0; j<3; j++) stats->af_repeats[j] = (int*) calloc(args->m_af,sizeof(int)); + #if QUAL_STATS + stats->qual_ts = (int*) calloc(args->m_qual,sizeof(int)); + stats->qual_tv = (int*) calloc(args->m_qual,sizeof(int)); + stats->qual_snps = (int*) calloc(args->m_qual,sizeof(int)); + stats->qual_indels = (int*) calloc(args->m_qual,sizeof(int)); + #endif + if ( args->files->n_smpl ) + { + stats->smpl_hets = (int *) calloc(args->files->n_smpl,sizeof(int)); + stats->smpl_homAA = (int *) calloc(args->files->n_smpl,sizeof(int)); + stats->smpl_homRR = (int *) calloc(args->files->n_smpl,sizeof(int)); + stats->smpl_hapRef = (int *) calloc(args->files->n_smpl,sizeof(int)); + stats->smpl_hapAlt = (int *) calloc(args->files->n_smpl,sizeof(int)); + stats->smpl_indel_hets = (int *) calloc(args->files->n_smpl,sizeof(int)); + stats->smpl_indel_homs = (int *) calloc(args->files->n_smpl,sizeof(int)); + stats->smpl_ts = (int *) calloc(args->files->n_smpl,sizeof(int)); + stats->smpl_tv = (int *) calloc(args->files->n_smpl,sizeof(int)); + stats->smpl_indels = (int *) calloc(args->files->n_smpl,sizeof(int)); + stats->smpl_dp = (unsigned long int *) calloc(args->files->n_smpl,sizeof(unsigned long int)); + stats->smpl_ndp = (int *) calloc(args->files->n_smpl,sizeof(int)); + stats->smpl_sngl = (int *) calloc(args->files->n_smpl,sizeof(int)); + #if HWE_STATS + stats->af_hwe = (int*) calloc(args->m_af*args->naf_hwe,sizeof(int)); + #endif + if ( args->exons_fname ) + stats->smpl_frm_shifts = (int*) calloc(args->files->n_smpl*3,sizeof(int)); + } + idist_init(&stats->dp, args->dp_min,args->dp_max,args->dp_step); + idist_init(&stats->dp_sites, args->dp_min,args->dp_max,args->dp_step); + init_user_stats(args, i!=1 ? args->files->readers[0].header : args->files->readers[1].header, stats); + } + + if ( args->exons_fname ) + { + args->exons = bcf_sr_regions_init(args->exons_fname,1,0,1,2); + if ( !args->exons ) + error("Error occurred while reading, was the file compressed with bgzip: %s?\n", args->exons_fname); + } + + #if IRC_STATS + if ( args->ref_fname ) + args->indel_ctx = indel_ctx_init(args->ref_fname); + #endif + + type2dosage[GT_HOM_RR] = 0; + type2dosage[GT_HET_RA] = 1; + type2dosage[GT_HOM_AA] = 2; + type2dosage[GT_HET_AA] = 2; + type2dosage[GT_HAPL_R] = 0; + type2dosage[GT_HAPL_A] = 1; + + type2ploidy[GT_HOM_RR] = 1; + type2ploidy[GT_HET_RA] = 1; + type2ploidy[GT_HOM_AA] = 1; + type2ploidy[GT_HET_AA] = 1; + type2ploidy[GT_HAPL_R] = -1; + type2ploidy[GT_HAPL_A] = -1; + + type2stats[GT_HOM_RR] = 0; + type2stats[GT_HET_RA] = 1; + type2stats[GT_HOM_AA] = 2; + type2stats[GT_HET_AA] = 3; + type2stats[GT_HAPL_R] = 0; + type2stats[GT_HAPL_A] = 2; + type2stats[GT_UNKN] = 4; + +} +static void destroy_stats(args_t *args) +{ + int id, j; + for (id=0; idnstats; id++) + { + stats_t *stats = &args->stats[id]; + if (stats->af_ts) free(stats->af_ts); + if (stats->af_tv) free(stats->af_tv); + if (stats->af_snps) free(stats->af_snps); + for (j=0; j<3; j++) + if (stats->af_repeats[j]) free(stats->af_repeats[j]); + #if QUAL_STATS + if (stats->qual_ts) free(stats->qual_ts); + if (stats->qual_tv) free(stats->qual_tv); + if (stats->qual_snps) free(stats->qual_snps); + if (stats->qual_indels) free(stats->qual_indels); + #endif + #if HWE_STATS + free(stats->af_hwe); + #endif + free(stats->insertions); + free(stats->deletions); + free(stats->smpl_hets); + free(stats->smpl_homAA); + free(stats->smpl_homRR); + free(stats->smpl_hapRef); + free(stats->smpl_hapAlt); + free(stats->smpl_indel_homs); + free(stats->smpl_indel_hets); + free(stats->smpl_ts); + free(stats->smpl_tv); + free(stats->smpl_indels); + free(stats->smpl_dp); + free(stats->smpl_ndp); + free(stats->smpl_sngl); + idist_destroy(&stats->dp); + idist_destroy(&stats->dp_sites); + for (j=0; jnusr; j++) + { + free(stats->usr[j].vals_ts); + free(stats->usr[j].vals_tv); + free(stats->usr[j].val); + } + free(stats->usr); + if ( args->exons ) free(stats->smpl_frm_shifts); + } + for (j=0; jnusr; j++) free(args->usr[j].tag); + if ( args->af_bins ) bin_destroy(args->af_bins); + free(args->farr); + free(args->usr); + free(args->tmp_frm); + free(args->tmp_iaf); + if (args->exons) bcf_sr_regions_destroy(args->exons); + free(args->af_gts_snps); + free(args->af_gts_indels); + free(args->smpl_gts_snps); + free(args->smpl_gts_indels); + if (args->indel_ctx) indel_ctx_destroy(args->indel_ctx); + if (args->filter[0]) filter_destroy(args->filter[0]); + if (args->filter[1]) filter_destroy(args->filter[1]); +} + +static void init_iaf(args_t *args, bcf_sr_t *reader) +{ + bcf1_t *line = reader->buffer[0]; + hts_expand(int32_t,line->n_allele,args->ntmp_iaf,args->tmp_iaf); + + int i, ret; + if ( args->af_tag ) + { + ret = bcf_get_info_float(reader->header, line, args->af_tag, &args->farr, &args->mfarr); + if ( ret<=0 || ret!=line->n_allele-1 ) + { + // the AF tag is not present or wrong number of values, put in the singletons/unknown bin + for (i=0; in_allele; i++) args->tmp_iaf[i] = 0; + return; + } + args->tmp_iaf[0] = 0; + for (i=1; in_allele; i++) + { + float af = args->farr[i-1]; + if ( af<0 ) af = 0; + else if ( af>1 ) af = 1; + int iaf = args->af_bins ? bin_get_idx(args->af_bins,af) : af*(args->m_af-2); + args->tmp_iaf[i] = iaf + 1; // the first tmp_iaf bin is reserved for singletons + } + return; + } + + // tmp_iaf is first filled with AC counts in calc_ac and then transformed to + // an index to af_gts_snps + ret = bcf_calc_ac(reader->header, line, args->tmp_iaf, args->samples_list ? BCF_UN_INFO|BCF_UN_FMT : BCF_UN_INFO); + if ( !ret ) + { + for (i=0; in_allele; i++) args->tmp_iaf[i] = 0; // singletons/unknown bin + return; + } + + int an = 0; + for (i=0; in_allele; i++) + an += args->tmp_iaf[i]; + + args->tmp_iaf[0] = 0; + for (i=1; in_allele; i++) + { + if ( args->tmp_iaf[i]==1 ) + args->tmp_iaf[i] = 0; // singletons into the first bin + else if ( !an ) + args->tmp_iaf[i] = 1; // no genotype at all, put to the AF=0 bin + else + { + float af = (float) args->tmp_iaf[i] / an; + if ( af<0 ) af = 0; + else if ( af>1 ) af = 1; + int iaf = args->af_bins ? bin_get_idx(args->af_bins,af) : af*(args->m_af-2); + args->tmp_iaf[i] = iaf + 1; + } + } +} + +static inline void do_mnp_stats(args_t *args, stats_t *stats, bcf_sr_t *reader) +{ + stats->n_mnps++; +} + +static inline void do_other_stats(args_t *args, stats_t *stats, bcf_sr_t *reader) +{ + stats->n_others++; +} + +static void do_indel_stats(args_t *args, stats_t *stats, bcf_sr_t *reader) +{ + stats->n_indels++; + + bcf1_t *line = reader->buffer[0]; + + #if QUAL_STATS + int iqual = clip_nonnegative(line->qual, args->m_qual); + stats->qual_indels[iqual]++; + #endif + + // Check if the indel is near an exon for the frameshift statistics + int i, exon_overlap = 0; + if ( args->exons ) + { + if ( !bcf_sr_regions_overlap(args->exons, bcf_seqname(reader->header,line),line->pos,line->pos) ) exon_overlap = 1; + hts_expand(uint8_t,line->n_allele,args->mtmp_frm,args->tmp_frm); + for (i=0; in_allele; i++) args->tmp_frm[i] = 0; + } + + for (i=1; in_allele; i++) + { + if ( args->first_allele_only && i>1 ) break; + if ( bcf_get_variant_type(line,i)!=VCF_INDEL ) continue; + int len = line->d.var[i].n; + + #if IRC_STATS + // Indel repeat consistency + if ( args->indel_ctx ) + { + int nrep, nlen, ndel; + ndel = indel_ctx_type(args->indel_ctx, (char*)reader->header->id[BCF_DT_CTG][line->rid].key, line->pos+1, line->d.allele[0], line->d.allele[i], &nrep, &nlen); + if ( nlen<=1 || nrep<=1 ) + { + // not a repeat or a single base repeat + stats->n_repeat_na++; + stats->af_repeats[2][ args->tmp_iaf[i] ]++; + } + else + { + if ( abs(ndel) % nlen ) + { + // the length of the inserted/deleted sequence is not consistent with the repeat element + stats->n_repeat[nlen-1][ndel<0 ? 1 : 3]++; + stats->af_repeats[1][ args->tmp_iaf[i] ]++; + } + else + { + // the length consistent with the repeat + stats->n_repeat[nlen-1][ndel<0 ? 0 : 2]++; + stats->af_repeats[0][ args->tmp_iaf[i] ]++; + } + } + } + else + stats->af_repeats[2][ args->tmp_iaf[i] ]++; + #endif + + // Check the frameshifts + int tlen = 0; + if ( args->exons && exon_overlap ) // there is an exon + { + if ( len>0 ) + { + // insertion + if ( args->exons->start <= line->pos && args->exons->end > line->pos ) tlen = abs(len); + } + else if ( args->exons->start <= line->pos + abs(len) ) + { + // deletion + tlen = abs(len); + if ( line->pos < args->exons->start ) // trim the beginning + tlen -= args->exons->start - line->pos + 1; + if ( args->exons->end < line->pos + abs(len) ) // trim the end + tlen -= line->pos + abs(len) - args->exons->end; + } + } + if ( tlen ) // there are some deleted/inserted bases in the exon + { + if ( tlen%3 ) { stats->out_frame++; args->tmp_frm[i] = 2; } + else { stats->in_frame++; args->tmp_frm[i] = 1; } + + if ( i==1 ) + { + if ( tlen%3 ) stats->out_frame_alt1++; + else stats->in_frame_alt1++; + } + } + else // no exon affected + { + if ( i==1 ) stats->na_frame_alt1++; + stats->na_frame++; + } + + + // Indel length distribution + int *ptr = stats->insertions; + if ( len<0 ) + { + len *= -1; + ptr = stats->deletions; + } + if ( --len >= stats->m_indel ) len = stats->m_indel-1; + ptr[len]++; + } +} + +static void do_user_stats(stats_t *stats, bcf_sr_t *reader, int is_ts) +{ + int i; + for (i=0; inusr; i++) + { + user_stats_t *usr = &stats->usr[i]; + uint64_t *vals = is_ts ? usr->vals_ts : usr->vals_tv; + float val; + if ( usr->type==BCF_HT_REAL ) + { + if ( bcf_get_info_float(reader->header,reader->buffer[0],usr->tag,&usr->val,&usr->m_val)<=0 ) continue; + val = ((float*)usr->val)[0]; + } + else + { + if ( bcf_get_info_int32(reader->header,reader->buffer[0],usr->tag,&usr->val,&usr->m_val)<=0 ) continue; + val = ((int32_t*)usr->val)[0]; + } + int idx; + if ( val<=usr->min ) idx = 0; + else if ( val>=usr->max ) idx = usr->nbins - 1; + else idx = (val - usr->min)/(usr->max - usr->min) * (usr->nbins-1); + vals[idx]++; + } +} + +static void do_snp_stats(args_t *args, stats_t *stats, bcf_sr_t *reader) +{ + stats->n_snps++; + + bcf1_t *line = reader->buffer[0]; + int ref = bcf_acgt2int(*line->d.allele[0]); + if ( ref<0 ) return; + + #if QUAL_STATS + int iqual = clip_nonnegative(line->qual, args->m_qual); + stats->qual_snps[iqual]++; + #endif + + int i; + for (i=1; in_allele; i++) + { + if ( args->first_allele_only && i>1 ) break; + if ( !(bcf_get_variant_type(line,i)&VCF_SNP) ) continue; + int alt = bcf_acgt2int(*line->d.allele[i]); + if ( alt<0 || ref==alt ) continue; + stats->subst[ref<<2|alt]++; + int iaf = args->tmp_iaf[i]; + stats->af_snps[iaf]++; + if ( abs(ref-alt)==2 ) + { + if (i==1) + { + stats->ts_alt1++; + #if QUAL_STATS + stats->qual_ts[iqual]++; + #endif + do_user_stats(stats, reader, 1); + } + stats->af_ts[iaf]++; + } + else + { + if (i==1) + { + stats->tv_alt1++; + #if QUAL_STATS + stats->qual_tv[iqual]++; + #endif + do_user_stats(stats, reader, 0); + } + stats->af_tv[iaf]++; + } + } +} + +static void do_sample_stats(args_t *args, stats_t *stats, bcf_sr_t *reader, int matched) +{ + bcf_srs_t *files = args->files; + bcf1_t *line = reader->buffer[0]; + bcf_fmt_t *fmt_ptr; + int nref_tot = 0, nhet_tot = 0, nalt_tot = 0; + int line_type = bcf_get_variant_types(line); + + if ( (fmt_ptr = bcf_get_fmt(reader->header,reader->buffer[0],"GT")) ) + { + int ref = bcf_acgt2int(*line->d.allele[0]); + int is, n_nref = 0, i_nref = 0; + for (is=0; isfiles->n_smpl; is++) + { + int ial, jal; + int gt = bcf_gt_type(fmt_ptr, reader->samples[is], &ial, &jal); + if ( gt==GT_UNKN ) continue; + if ( gt==GT_HAPL_R || gt==GT_HAPL_A ) + { + if ( line_type&VCF_INDEL && stats->smpl_frm_shifts ) + { + assert( ialn_allele ); + stats->smpl_frm_shifts[is*3 + args->tmp_frm[ial]]++; + } + if ( gt == GT_HAPL_R ) stats->smpl_hapRef[is]++; + if ( gt == GT_HAPL_A ) stats->smpl_hapAlt[is]++; + continue; + } + if ( gt != GT_HOM_RR ) { n_nref++; i_nref = is; } + #if HWE_STATS + switch (gt) + { + case GT_HOM_RR: nref_tot++; break; + case GT_HET_RA: nhet_tot++; break; + case GT_HET_AA: + case GT_HOM_AA: nalt_tot++; break; + } + #endif + int var_type = 0; + if ( ial>0 ) var_type |= bcf_get_variant_type(line,ial); + if ( jal>0 ) var_type |= bcf_get_variant_type(line,jal); + if ( var_type&VCF_SNP || var_type==VCF_REF ) // count ALT=. as SNP + { + if ( gt == GT_HET_RA ) stats->smpl_hets[is]++; + else if ( gt == GT_HET_AA ) stats->smpl_hets[is]++; + else if ( gt == GT_HOM_RR ) stats->smpl_homRR[is]++; + else if ( gt == GT_HOM_AA ) stats->smpl_homAA[is]++; + if ( gt != GT_HOM_RR && line->d.var[ial].type&VCF_SNP ) // this is safe, bcf_get_variant_types has been already called + { + int alt = bcf_acgt2int(*line->d.allele[ial]); + if ( alt<0 ) continue; + if ( abs(ref-alt)==2 ) + stats->smpl_ts[is]++; + else + stats->smpl_tv[is]++; + } + } + if ( var_type&VCF_INDEL ) + { + if ( gt != GT_HOM_RR ) + { + stats->smpl_indels[is]++; + if ( gt==GT_HET_RA || gt==GT_HET_AA ) stats->smpl_indel_hets[is]++; + else if ( gt==GT_HOM_AA ) stats->smpl_indel_homs[is]++; + } + if ( stats->smpl_frm_shifts ) + { + assert( ialn_allele && jaln_allele ); + stats->smpl_frm_shifts[is*3 + args->tmp_frm[ial]]++; + stats->smpl_frm_shifts[is*3 + args->tmp_frm[jal]]++; + } + } + } + if ( n_nref==1 ) stats->smpl_sngl[i_nref]++; + } + + #if HWE_STATS + if ( nhet_tot + nref_tot + nalt_tot ) + { + float het_frac = (float)nhet_tot/(nhet_tot + nref_tot + nalt_tot); + int idx = het_frac*(args->naf_hwe - 1); +//check me: what is this? + if ( line->n_allele>1 ) idx += args->naf_hwe*args->tmp_iaf[1]; + stats->af_hwe[idx]++; + } + #endif + + if ( (fmt_ptr = bcf_get_fmt(reader->header,reader->buffer[0],"DP")) ) + { + #define BRANCH_INT(type_t,missing,vector_end) { \ + int is; \ + for (is=0; isfiles->n_smpl; is++) \ + { \ + type_t *p = (type_t *) (fmt_ptr->p + fmt_ptr->size*is); \ + if ( *p==vector_end ) continue; \ + if ( *p!=missing ) \ + { \ + (*idist(&stats->dp, *p))++; \ + stats->smpl_ndp[is]++; \ + stats->smpl_dp[is] += *p; \ + } \ + } \ + } + switch (fmt_ptr->type) { + case BCF_BT_INT8: BRANCH_INT(int8_t, bcf_int8_missing, bcf_int8_vector_end); break; + case BCF_BT_INT16: BRANCH_INT(int16_t, bcf_int16_missing, bcf_int16_vector_end); break; + case BCF_BT_INT32: BRANCH_INT(int32_t, bcf_int32_missing, bcf_int32_vector_end); break; + default: fprintf(stderr, "[E::%s] todo: %d\n", __func__, fmt_ptr->type); exit(1); break; + } + #undef BRANCH_INT + } + + if ( matched==3 ) + { + int is; + bcf_fmt_t *fmt0, *fmt1; + fmt0 = bcf_get_fmt(files->readers[0].header,files->readers[0].buffer[0],"GT"); if ( !fmt0 ) return; + fmt1 = bcf_get_fmt(files->readers[1].header,files->readers[1].buffer[0],"GT"); if ( !fmt1 ) return; + + // only the first ALT allele is considered + int iaf = args->tmp_iaf[1]; + int line_type = bcf_get_variant_types(files->readers[0].buffer[0]); + gtcmp_t *af_stats = line_type&VCF_SNP ? args->af_gts_snps : args->af_gts_indels; + gtcmp_t *smpl_stats = line_type&VCF_SNP ? args->smpl_gts_snps : args->smpl_gts_indels; + + for (is=0; isn_smpl; is++) + { + // Simplified comparison: only 0/0, 0/1, 1/1 is looked at as the identity of + // actual alleles can be enforced by running without the -c option. + int gt0 = bcf_gt_type(fmt0, files->readers[0].samples[is], NULL, NULL); + int gt1 = bcf_gt_type(fmt1, files->readers[1].samples[is], NULL, NULL); + + int idx0 = type2stats[gt0]; + int idx1 = type2stats[gt1]; + af_stats[iaf].gt2gt[idx0][idx1]++; + smpl_stats[is].gt2gt[idx0][idx1]++; + + if ( gt0 == GT_UNKN || gt1 == GT_UNKN ) continue; + if ( type2ploidy[gt0]*type2ploidy[gt1] == -1 ) continue; // cannot compare diploid and haploid genotypes + + float y = type2dosage[gt0]; + float x = type2dosage[gt1]; + + smpl_stats[is].yx += y*x; + smpl_stats[is].x += x; + smpl_stats[is].xx += x*x; + smpl_stats[is].y += y; + smpl_stats[is].yy += y*y; + smpl_stats[is].n += 1; + + af_stats[iaf].yx += y*x; + af_stats[iaf].x += x; + af_stats[iaf].xx += x*x; + af_stats[iaf].y += y; + af_stats[iaf].yy += y*y; + af_stats[iaf].n += 1; + } + + if ( args->verbose_sites ) + { + int nm = 0, nmm = 0, nrefm = 0; + for (is=0; isn_smpl; is++) + { + int gt = bcf_gt_type(fmt0, files->readers[0].samples[is], NULL, NULL); + if ( gt == GT_UNKN ) continue; + int gt2 = bcf_gt_type(fmt1, files->readers[1].samples[is], NULL, NULL); + if ( gt2 == GT_UNKN ) continue; + if ( gt != gt2 ) + { + nmm++; + bcf_sr_t *reader = &files->readers[0]; + printf("DBG\t%s\t%d\t%s\t%d\t%d\n",reader->header->id[BCF_DT_CTG][reader->buffer[0]->rid].key,reader->buffer[0]->pos+1,files->samples[is],gt,gt2); + } + else + { + if ( gt!=GT_HOM_RR ) nrefm++; + nm++; + } + } + float nrd = nrefm+nmm ? 100.*nmm/(nrefm+nmm) : 0; + printf("PSD\t%s\t%d\t%d\t%d\t%f\n", reader->header->id[BCF_DT_CTG][reader->buffer[0]->rid].key,reader->buffer[0]->pos+1,nm,nmm,nrd); + } + } +} + +static void do_vcf_stats(args_t *args) +{ + bcf_srs_t *files = args->files; + assert( sizeof(int)>files->nreaders ); + while ( bcf_sr_next_line(files) ) + { + bcf_sr_t *reader = NULL; + bcf1_t *line = NULL; + int ret = 0, i, pass = 1; + for (i=0; inreaders; i++) + { + if ( !bcf_sr_has_line(files,i) ) continue; + if ( args->filter[i] ) + { + int is_ok = filter_test(args->filter[i], bcf_sr_get_line(files,i), NULL); + if ( args->filter_logic & FLT_EXCLUDE ) is_ok = is_ok ? 0 : 1; + if ( !is_ok ) { pass = 0; break; } + } + ret |= 1<readers[i]; + line = bcf_sr_get_line(files,i); + } + + } + if ( !pass ) continue; + + int line_type = bcf_get_variant_types(line); + init_iaf(args, reader); + + stats_t *stats = &args->stats[ret-1]; + if ( args->split_by_id && line->d.id[0]=='.' && !line->d.id[1] ) + stats = &args->stats[1]; + + stats->n_records++; + + if ( line_type==VCF_REF ) + stats->n_noalts++; + if ( line_type&VCF_SNP ) + do_snp_stats(args, stats, reader); + if ( line_type&VCF_INDEL ) + do_indel_stats(args, stats, reader); + if ( line_type&VCF_MNP ) + do_mnp_stats(args, stats, reader); + if ( line_type&VCF_OTHER ) + do_other_stats(args, stats, reader); + + if ( line->n_allele>2 ) + { + stats->n_mals++; + if ( line_type == VCF_SNP ) stats->n_snp_mals++; // note: this will be fooled by C>C,T + } + + if ( files->n_smpl ) + do_sample_stats(args, stats, reader, ret); + + if ( bcf_get_info_int32(reader->header,line,"DP",&args->tmp_iaf,&args->ntmp_iaf)==1 ) + (*idist(&stats->dp_sites, args->tmp_iaf[0]))++; + } +} + +static void print_header(args_t *args) +{ + int i; + printf("# This file was produced by bcftools stats (%s+htslib-%s) and can be plotted using plot-vcfstats.\n", bcftools_version(),hts_version()); + printf("# The command line was:\tbcftools %s ", args->argv[0]); + for (i=1; iargc; i++) + printf(" %s",args->argv[i]); + printf("\n#\n"); + + printf("# Definition of sets:\n# ID\t[2]id\t[3]tab-separated file names\n"); + if ( args->files->nreaders==1 ) + { + const char *fname = strcmp("-",args->files->readers[0].fname) ? args->files->readers[0].fname : ""; + if ( args->split_by_id ) + { + printf("ID\t0\t%s:known (sites with ID different from \".\")\n", fname); + printf("ID\t1\t%s:novel (sites where ID column is \".\")\n", fname); + } + else + printf("ID\t0\t%s\n", fname); + } + else + { + const char *fname0 = strcmp("-",args->files->readers[0].fname) ? args->files->readers[0].fname : ""; + const char *fname1 = strcmp("-",args->files->readers[1].fname) ? args->files->readers[1].fname : ""; + printf("ID\t0\t%s\n", fname0); + printf("ID\t1\t%s\n", fname1); + printf("ID\t2\t%s\t%s\n", fname0,fname1); + + if ( args->verbose_sites ) + { + printf( + "# Verbose per-site discordance output.\n" + "# PSD\t[2]CHROM\t[3]POS\t[4]Number of matches\t[5]Number of mismatches\t[6]NRD\n"); + printf( + "# Verbose per-site and per-sample output. Genotype codes: %d:HomRefRef, %d:HomAltAlt, %d:HetAltRef, %d:HetAltAlt, %d:haploidRef, %d:haploidAlt\n" + "# DBG\t[2]CHROM\t[3]POS\t[4]Sample\t[5]GT in %s\t[6]GT in %s\n", + GT_HOM_RR, GT_HOM_AA, GT_HET_RA, GT_HET_AA, GT_HAPL_R, GT_HAPL_A, fname0,fname1); + } + } +} + +#define T2S(x) type2stats[x] +static void print_stats(args_t *args) +{ + int i, j,k, id; + printf("# SN, Summary numbers:\n"); + printf("# number of records .. number of data rows in the VCF\n"); + printf("# number of no-ALTs .. reference-only sites, ALT is either \".\" or identical to REF\n"); + printf("# number of SNPs .. number of rows with a SNP\n"); + printf("# number of MNPs .. number of rows with a MNP, such as CC>TT\n"); + printf("# number of indels .. number of rows with an indel\n"); + printf("# number of others .. number of rows with other type, for example a symbolic allele or\n"); + printf("# a complex substitution, such as ACT>TCGA\n"); + printf("# number of multiallelic sites .. number of rows with multiple alternate alleles\n"); + printf("# number of multiallelic SNP sites .. number of rows with multiple alternate alleles, all SNPs\n"); + printf("# \n"); + printf("# Note that rows containing multiple types will be counted multiple times, in each\n"); + printf("# counter. For example, a row with a SNP and an indel increments both the SNP and\n"); + printf("# the indel counter.\n"); + printf("# \n"); + printf("# SN\t[2]id\t[3]key\t[4]value\n"); + for (id=0; idfiles->nreaders; id++) + printf("SN\t%d\tnumber of samples:\t%d\n", id, bcf_hdr_nsamples(args->files->readers[id].header)); + for (id=0; idnstats; id++) + { + stats_t *stats = &args->stats[id]; + printf("SN\t%d\tnumber of records:\t%d\n", id, stats->n_records); + printf("SN\t%d\tnumber of no-ALTs:\t%d\n", id, stats->n_noalts); + printf("SN\t%d\tnumber of SNPs:\t%d\n", id, stats->n_snps); + printf("SN\t%d\tnumber of MNPs:\t%d\n", id, stats->n_mnps); + printf("SN\t%d\tnumber of indels:\t%d\n", id, stats->n_indels); + printf("SN\t%d\tnumber of others:\t%d\n", id, stats->n_others); + printf("SN\t%d\tnumber of multiallelic sites:\t%d\n", id, stats->n_mals); + printf("SN\t%d\tnumber of multiallelic SNP sites:\t%d\n", id, stats->n_snp_mals); + } + printf("# TSTV, transitions/transversions:\n# TSTV\t[2]id\t[3]ts\t[4]tv\t[5]ts/tv\t[6]ts (1st ALT)\t[7]tv (1st ALT)\t[8]ts/tv (1st ALT)\n"); + for (id=0; idnstats; id++) + { + stats_t *stats = &args->stats[id]; + int ts=0,tv=0; + for (i=0; im_af; i++) { ts += stats->af_ts[i]; tv += stats->af_tv[i]; } + printf("TSTV\t%d\t%d\t%d\t%.2f\t%d\t%d\t%.2f\n", id,ts,tv,tv?(float)ts/tv:0, stats->ts_alt1,stats->tv_alt1,stats->tv_alt1?(float)stats->ts_alt1/stats->tv_alt1:0); + } + if ( args->exons_fname ) + { + printf("# FS, Indel frameshifts:\n# FS\t[2]id\t[3]in-frame\t[4]out-frame\t[5]not applicable\t[6]out/(in+out) ratio\t[7]in-frame (1st ALT)\t[8]out-frame (1st ALT)\t[9]not applicable (1st ALT)\t[10]out/(in+out) ratio (1st ALT)\n"); + for (id=0; idnstats; id++) + { + int in=args->stats[id].in_frame, out=args->stats[id].out_frame, na=args->stats[id].na_frame; + int in1=args->stats[id].in_frame_alt1, out1=args->stats[id].out_frame_alt1, na1=args->stats[id].na_frame_alt1; + printf("FS\t%d\t%d\t%d\t%d\t%.2f\t%d\t%d\t%d\t%.2f\n", id, in,out,na,out?(float)out/(in+out):0,in1,out1,na1,out1?(float)out1/(in1+out1):0); + } + } + if ( args->indel_ctx ) + { + printf("# ICS, Indel context summary:\n# ICS\t[2]id\t[3]repeat-consistent\t[4]repeat-inconsistent\t[5]not applicable\t[6]c/(c+i) ratio\n"); + for (id=0; idnstats; id++) + { + int nc = 0, ni = 0, na = args->stats[id].n_repeat_na; + for (i=0; istats[id].n_repeat[i][0] + args->stats[id].n_repeat[i][2]; + ni += args->stats[id].n_repeat[i][1] + args->stats[id].n_repeat[i][3]; + } + printf("ICS\t%d\t%d\t%d\t%d\t%.4f\n", id, nc,ni,na,nc+ni ? (float)nc/(nc+ni) : 0.0); + } + printf("# ICL, Indel context by length:\n# ICL\t[2]id\t[3]length of repeat element\t[4]repeat-consistent deletions)\t[5]repeat-inconsistent deletions\t[6]consistent insertions\t[7]inconsistent insertions\t[8]c/(c+i) ratio\n"); + for (id=0; idnstats; id++) + { + for (i=1; istats[id].n_repeat[i][0]+args->stats[id].n_repeat[i][2], ni = args->stats[id].n_repeat[i][1]+args->stats[id].n_repeat[i][3]; + printf("ICL\t%d\t%d\t%d\t%d\t%d\t%d\t%.4f\n", id, i+1, + args->stats[id].n_repeat[i][0],args->stats[id].n_repeat[i][1],args->stats[id].n_repeat[i][2],args->stats[id].n_repeat[i][3], + nc+ni ? (float)nc/(nc+ni) : 0.0); + } + } + } + printf("# SiS, Singleton stats:\n# SiS\t[2]id\t[3]allele count\t[4]number of SNPs\t[5]number of transitions\t[6]number of transversions\t[7]number of indels\t[8]repeat-consistent\t[9]repeat-inconsistent\t[10]not applicable\n"); + for (id=0; idnstats; id++) + { + stats_t *stats = &args->stats[id]; + printf("SiS\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n", id,1,stats->af_snps[0],stats->af_ts[0],stats->af_tv[0], + stats->af_repeats[0][0]+stats->af_repeats[1][0]+stats->af_repeats[2][0],stats->af_repeats[0][0],stats->af_repeats[1][0],stats->af_repeats[2][0]); + // put the singletons stats into the first AF bin, note that not all of the stats is transferred (i.e. nrd mismatches) + stats->af_snps[1] += stats->af_snps[0]; + stats->af_ts[1] += stats->af_ts[0]; + stats->af_tv[1] += stats->af_tv[0]; + stats->af_repeats[0][1] += stats->af_repeats[0][0]; + stats->af_repeats[1][1] += stats->af_repeats[1][0]; + stats->af_repeats[2][1] += stats->af_repeats[2][0]; + } + // move the singletons stats into the first AF bin, singleton stats was collected separately because of init_iaf + if ( args->af_gts_snps ) + { + args->af_gts_snps[1].y += args->af_gts_snps[0].y; + args->af_gts_snps[1].yy += args->af_gts_snps[0].yy; + args->af_gts_snps[1].xx += args->af_gts_snps[0].xx; + args->af_gts_snps[1].yx += args->af_gts_snps[0].yx; + args->af_gts_snps[1].n += args->af_gts_snps[0].n; + } + if ( args->af_gts_indels ) + { + args->af_gts_indels[1].y += args->af_gts_indels[0].y; + args->af_gts_indels[1].yy += args->af_gts_indels[0].yy; + args->af_gts_indels[1].xx += args->af_gts_indels[0].xx; + args->af_gts_indels[1].yx += args->af_gts_indels[0].yx; + args->af_gts_indels[1].n += args->af_gts_indels[0].n; + } + + printf("# AF, Stats by non-reference allele frequency:\n# AF\t[2]id\t[3]allele frequency\t[4]number of SNPs\t[5]number of transitions\t[6]number of transversions\t[7]number of indels\t[8]repeat-consistent\t[9]repeat-inconsistent\t[10]not applicable\n"); + for (id=0; idnstats; id++) + { + stats_t *stats = &args->stats[id]; + for (i=1; im_af; i++) // note that af[1] now contains also af[0], see SiS stats output above + { + if ( stats->af_snps[i]+stats->af_ts[i]+stats->af_tv[i]+stats->af_repeats[0][i]+stats->af_repeats[1][i]+stats->af_repeats[2][i] == 0 ) continue; + double af = args->af_bins ? (bin_get_value(args->af_bins,i)+bin_get_value(args->af_bins,i-1))*0.5 : (double)(i-1)/(args->m_af-1); + printf("AF\t%d\t%f\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n", id,af,stats->af_snps[i],stats->af_ts[i],stats->af_tv[i], + stats->af_repeats[0][i]+stats->af_repeats[1][i]+stats->af_repeats[2][i],stats->af_repeats[0][i],stats->af_repeats[1][i],stats->af_repeats[2][i]); + } + } + #if QUAL_STATS + printf("# QUAL, Stats by quality:\n# QUAL\t[2]id\t[3]Quality\t[4]number of SNPs\t[5]number of transitions (1st ALT)\t[6]number of transversions (1st ALT)\t[7]number of indels\n"); + for (id=0; idnstats; id++) + { + stats_t *stats = &args->stats[id]; + for (i=0; im_qual; i++) + { + if ( stats->qual_snps[i]+stats->qual_ts[i]+stats->qual_tv[i]+stats->qual_indels[i] == 0 ) continue; + printf("QUAL\t%d\t%d\t%d\t%d\t%d\t%d\n", id,i,stats->qual_snps[i],stats->qual_ts[i],stats->qual_tv[i],stats->qual_indels[i]); + } + } + #endif + for (i=0; inusr; i++) + { + printf("# USR:%s, Stats by %s:\n# USR:%s\t[2]id\t[3]%s\t[4]number of SNPs\t[5]number of transitions (1st ALT)\t[6]number of transversions (1st ALT)\n", + args->usr[i].tag,args->usr[i].tag,args->usr[i].tag,args->usr[i].tag); + for (id=0; idnstats; id++) + { + user_stats_t *usr = &args->stats[id].usr[i]; + int j; + for (j=0; jnbins; j++) + { + if ( usr->vals_ts[j]+usr->vals_tv[j] == 0 ) continue; // skip empty bins + float val = usr->min + (usr->max - usr->min)*j/(usr->nbins-1); + const char *fmt = usr->type==BCF_HT_REAL ? "USR:%s\t%d\t%e\t%d\t%d\t%d\n" : "USR:%s\t%d\t%.0f\t%d\t%d\t%d\n"; + printf(fmt,usr->tag,id,val,usr->vals_ts[j]+usr->vals_tv[j],usr->vals_ts[j],usr->vals_tv[j]); + } + } + } + printf("# IDD, InDel distribution:\n# IDD\t[2]id\t[3]length (deletions negative)\t[4]count\n"); + for (id=0; idnstats; id++) + { + stats_t *stats = &args->stats[id]; + for (i=stats->m_indel-1; i>=0; i--) + if ( stats->deletions[i] ) printf("IDD\t%d\t%d\t%d\n", id,-i-1,stats->deletions[i]); + for (i=0; im_indel; i++) + if ( stats->insertions[i] ) printf("IDD\t%d\t%d\t%d\n", id,i+1,stats->insertions[i]); + } + printf("# ST, Substitution types:\n# ST\t[2]id\t[3]type\t[4]count\n"); + for (id=0; idnstats; id++) + { + int t; + for (t=0; t<15; t++) + { + if ( t>>2 == (t&3) ) continue; + printf("ST\t%d\t%c>%c\t%d\n", id, bcf_int2acgt(t>>2),bcf_int2acgt(t&3),args->stats[id].subst[t]); + } + } + if ( args->files->nreaders>1 && args->files->n_smpl ) + { + printf("SN\t%d\tnumber of samples:\t%d\n", 2, args->files->n_smpl); + + int x; + for (x=0; x<2; x++) // x=0: snps, x=1: indels + { + gtcmp_t *stats; + if ( x==0 ) + { + printf("# GCsAF, Genotype concordance by non-reference allele frequency (SNPs)\n# GCsAF\t[2]id\t[3]allele frequency\t[4]RR Hom matches\t[5]RA Het matches\t[6]AA Hom matches\t[7]RR Hom mismatches\t[8]RA Het mismatches\t[9]AA Hom mismatches\t[10]dosage r-squared\t[11]number of genotypes\n"); + stats = args->af_gts_snps; + } + else + { + printf("# GCiAF, Genotype concordance by non-reference allele frequency (indels)\n# GCiAF\t[2]id\t[3]allele frequency\t[4]RR Hom matches\t[5]RA Het matches\t[6]AA Hom matches\t[7]RR Hom mismatches\t[8]RA Het mismatches\t[9]AA Hom mismatches\t[10]dosage r-squared\t[11]number of genotypes\n"); + stats = args->af_gts_indels; + } + uint64_t nrd_m[4] = {0,0,0,0}, nrd_mm[4] = {0,0,0,0}; // across all bins + for (i=0; im_af; i++) + { + int n = 0; + uint64_t m[4] = {0,0,0,0}, mm[4] = {0,0,0,0}; // in i-th AF bin + for (j=0; j<4; j++) // rr, ra, aa hom, aa het, ./. + for (k=0; k<4; k++) + { + n += stats[i].gt2gt[j][k]; + if ( j==k ) + { + nrd_m[j] += stats[i].gt2gt[j][k]; + m[j] += stats[i].gt2gt[j][k]; + } + else + { + nrd_mm[j] += stats[i].gt2gt[j][k]; + mm[j] += stats[i].gt2gt[j][k]; + } + } + if ( !i || !n ) continue; // skip singleton stats and empty bins + + // Pearson's r2 + double r2 = 0; + if ( stats[i].n ) + { + r2 = (stats[i].yx - stats[i].x*stats[i].y/stats[i].n); + r2 /= sqrt((stats[i].xx - stats[i].x*stats[i].x/stats[i].n) * (stats[i].yy - stats[i].y*stats[i].y/stats[i].n)); + r2 *= r2; + } + double af = args->af_bins ? (bin_get_value(args->af_bins,i)+bin_get_value(args->af_bins,i-1))*0.5 : (double)(i-1)/(args->m_af-1); + printf("GC%cAF\t2\t%f", x==0 ? 's' : 'i', af); + printf("\t%"PRId64"\t%"PRId64"\t%"PRId64"", m[T2S(GT_HOM_RR)],m[T2S(GT_HET_RA)],m[T2S(GT_HOM_AA)]); + printf("\t%"PRId64"\t%"PRId64"\t%"PRId64"", mm[T2S(GT_HOM_RR)],mm[T2S(GT_HET_RA)],mm[T2S(GT_HOM_AA)]); + if ( stats[i].n && !isnan(r2) ) printf("\t%f", r2); + else printf("\t"NA_STRING); + printf("\t%.0f\n", stats[i].n); + } + + if ( x==0 ) + { + printf("# NRD and discordance is calculated as follows:\n"); + printf("# m .. number of matches\n"); + printf("# x .. number of mismatches\n"); + printf("# NRD = (xRR + xRA + xAA) / (xRR + xRA + xAA + mRA + mAA)\n"); + printf("# RR discordance = xRR / (xRR + mRR)\n"); + printf("# RA discordance = xRA / (xRA + mRA)\n"); + printf("# AA discordance = xAA / (xAA + mAA)\n"); + printf("# Non-Reference Discordance (NRD), SNPs\n# NRDs\t[2]id\t[3]NRD\t[4]Ref/Ref discordance\t[5]Ref/Alt discordance\t[6]Alt/Alt discordance\n"); + } + else + printf("# Non-Reference Discordance (NRD), indels\n# NRDi\t[2]id\t[3]NRD\t[4]Ref/Ref discordance\t[5]Ref/Alt discordance\t[6]Alt/Alt discordance\n"); + uint64_t m = nrd_m[T2S(GT_HET_RA)] + nrd_m[T2S(GT_HOM_AA)] + nrd_m[T2S(GT_HET_AA)]; + uint64_t mm = nrd_mm[T2S(GT_HOM_RR)] + nrd_mm[T2S(GT_HET_RA)] + nrd_mm[T2S(GT_HOM_AA)] + nrd_mm[T2S(GT_HET_AA)]; + printf("NRD%c\t2\t%f\t%f\t%f\t%f\n", x==0 ? 's' : 'i', + m+mm ? mm*100.0/(m+mm) : 0, + nrd_m[T2S(GT_HOM_RR)]+nrd_mm[T2S(GT_HOM_RR)] ? nrd_mm[T2S(GT_HOM_RR)]*100.0/(nrd_m[T2S(GT_HOM_RR)]+nrd_mm[T2S(GT_HOM_RR)]) : 0, + nrd_m[T2S(GT_HET_RA)]+nrd_mm[T2S(GT_HET_RA)] ? nrd_mm[T2S(GT_HET_RA)]*100.0/(nrd_m[T2S(GT_HET_RA)]+nrd_mm[T2S(GT_HET_RA)]) : 0, + nrd_m[T2S(GT_HOM_AA)]+nrd_mm[T2S(GT_HOM_AA)] ? nrd_mm[T2S(GT_HOM_AA)]*100.0/(nrd_m[T2S(GT_HOM_AA)]+nrd_mm[T2S(GT_HOM_AA)]) : 0 + ); + } + + for (x=0; x<2; x++) // x=0: snps, x=1: indels + { + gtcmp_t *stats; + if ( x==0 ) + { + printf("# GCsS, Genotype concordance by sample (SNPs)\n# GCsS\t[2]id\t[3]sample\t[4]non-reference discordance rate\t[5]RR Hom matches\t[6]RA Het matches\t[7]AA Hom matches\t[8]RR Hom mismatches\t[9]RA Het mismatches\t[10]AA Hom mismatches\t[11]dosage r-squared\n"); + stats = args->smpl_gts_snps; + } + else + { + printf("# GCiS, Genotype concordance by sample (indels)\n# GCiS\t[2]id\t[3]sample\t[4]non-reference discordance rate\t[5]RR Hom matches\t[6]RA Het matches\t[7]AA Hom matches\t[8]RR Hom mismatches\t[9]RA Het mismatches\t[10]AA Hom mismatches\t[11]dosage r-squared\n"); + stats = args->smpl_gts_indels; + } + for (i=0; ifiles->n_smpl; i++) + { + uint64_t mm = 0, m = stats[i].gt2gt[T2S(GT_HET_RA)][T2S(GT_HET_RA)] + stats[i].gt2gt[T2S(GT_HOM_AA)][T2S(GT_HOM_AA)]; + for (j=0; j<3; j++) + for (k=0; k<3; k++) + if ( j!=k ) mm += stats[i].gt2gt[j][k]; + + // Pearson's r2 + double r2 = 0; + if ( stats[i].n ) + { + r2 = (stats[i].yx - stats[i].x*stats[i].y/stats[i].n); + r2 /= sqrt((stats[i].xx - stats[i].x*stats[i].x/stats[i].n) * (stats[i].yy - stats[i].y*stats[i].y/stats[i].n)); + r2 *= r2; + } + printf("GC%cS\t2\t%s\t%.3f", x==0 ? 's' : 'i', args->files->samples[i], m+mm ? mm*100.0/(m+mm) : 0); + printf("\t%"PRId64"\t%"PRId64"\t%"PRId64"", + stats[i].gt2gt[T2S(GT_HOM_RR)][T2S(GT_HOM_RR)], + stats[i].gt2gt[T2S(GT_HET_RA)][T2S(GT_HET_RA)], + stats[i].gt2gt[T2S(GT_HOM_AA)][T2S(GT_HOM_AA)]); + printf("\t%"PRId64"\t%"PRId64"\t%"PRId64"", + stats[i].gt2gt[T2S(GT_HOM_RR)][T2S(GT_HET_RA)] + stats[i].gt2gt[T2S(GT_HOM_RR)][T2S(GT_HOM_AA)], + stats[i].gt2gt[T2S(GT_HET_RA)][T2S(GT_HOM_RR)] + stats[i].gt2gt[T2S(GT_HET_RA)][T2S(GT_HOM_AA)], + stats[i].gt2gt[T2S(GT_HOM_AA)][T2S(GT_HOM_RR)] + stats[i].gt2gt[T2S(GT_HOM_AA)][T2S(GT_HET_RA)]); + if ( stats[i].n && !isnan(r2) ) printf("\t%f\n", r2); + else printf("\t"NA_STRING"\n"); + } + } + for (x=0; x<2; x++) // x=0: snps, x=1: indels + { + //printf("# GCiS, Genotype concordance by sample (indels)\n# GCiS\t[2]id\t[3]sample\t[4]non-reference discordance rate\t[5]RR Hom matches\t[6]RA Het matches\t[7]AA Hom matches\t[8]RR Hom mismatches\t[9]RA Het mismatches\t[10]AA Hom mismatches\t[11]dosage r-squared\n"); + + gtcmp_t *stats; + if ( x==0 ) + { + printf("# GCTs, Genotype concordance table (SNPs)\n# GCTs"); + stats = args->smpl_gts_snps; + } + else + { + printf("# GCTi, Genotype concordance table (indels)\n# GCTi"); + stats = args->smpl_gts_indels; + } + i = 1; + printf("\t[%d]sample", ++i); + printf("\t[%d]RR Hom -> RR Hom", ++i); + printf("\t[%d]RR Hom -> RA Het", ++i); + printf("\t[%d]RR Hom -> AA Hom", ++i); + printf("\t[%d]RR Hom -> AA Het", ++i); + printf("\t[%d]RR Hom -> missing", ++i); + printf("\t[%d]RA Het -> RR Hom", ++i); + printf("\t[%d]RA Het -> RA Het", ++i); + printf("\t[%d]RA Het -> AA Hom", ++i); + printf("\t[%d]RA Het -> AA Het", ++i); + printf("\t[%d]RA Het -> missing", ++i); + printf("\t[%d]AA Hom -> RR Hom", ++i); + printf("\t[%d]AA Hom -> RA Het", ++i); + printf("\t[%d]AA Hom -> AA Hom", ++i); + printf("\t[%d]AA Hom -> AA Het", ++i); + printf("\t[%d]AA Hom -> missing", ++i); + printf("\t[%d]AA Het -> RR Hom", ++i); + printf("\t[%d]AA Het -> RA Het", ++i); + printf("\t[%d]AA Het -> AA Hom", ++i); + printf("\t[%d]AA Het -> AA Het", ++i); + printf("\t[%d]AA Het -> missing", ++i); + printf("\t[%d]missing -> RR Hom", ++i); + printf("\t[%d]missing -> RA Het", ++i); + printf("\t[%d]missing -> AA Hom", ++i); + printf("\t[%d]missing -> AA Het", ++i); + printf("\t[%d]missing -> missing\n", ++i); + + for (i=0; ifiles->n_smpl; i++) + { + printf("GCT%c\t%s", x==0 ? 's' : 'i', args->files->samples[i]); + for (j=0; j<5; j++) + for (k=0; k<5; k++) + printf("\t%"PRId64, stats[i].gt2gt[j][k]); + printf("\n"); + } + } + } + + printf("# DP, Depth distribution\n# DP\t[2]id\t[3]bin\t[4]number of genotypes\t[5]fraction of genotypes (%%)\t[6]number of sites\t[7]fraction of sites (%%)\n"); + for (id=0; idnstats; id++) + { + stats_t *stats = &args->stats[id]; + long unsigned int sum = 0, sum_sites = 0; + for (i=0; idp.m_vals; i++) { sum += stats->dp.vals[i]; sum_sites += stats->dp_sites.vals[i]; } + for (i=0; idp.m_vals; i++) + { + if ( stats->dp.vals[i]==0 && stats->dp_sites.vals[i]==0 ) continue; + printf("DP\t%d\t", id); + if ( i==0 ) printf("<%d", stats->dp.min); + else if ( i+1==stats->dp.m_vals ) printf(">%d", stats->dp.max); + else printf("%d", idist_i2bin(&stats->dp,i)); + printf("\t%"PRId64"\t%f", stats->dp.vals[i], sum ? stats->dp.vals[i]*100./sum : 0); + printf("\t%"PRId64"\t%f\n", stats->dp_sites.vals[i], sum_sites ? stats->dp_sites.vals[i]*100./sum_sites : 0); + } + } + + if ( args->files->n_smpl ) + { + printf("# PSC, Per-sample counts. Note that the ref/het/hom counts include only SNPs, for indels see PSI. Haploid counts include both SNPs and indels.\n"); + printf("# PSC\t[2]id\t[3]sample\t[4]nRefHom\t[5]nNonRefHom\t[6]nHets\t[7]nTransitions\t[8]nTransversions\t[9]nIndels\t[10]average depth\t[11]nSingletons" + "\t[12]nHapRef\t[13]nHapAlt\n"); + for (id=0; idnstats; id++) + { + stats_t *stats = &args->stats[id]; + for (i=0; ifiles->n_smpl; i++) + { + float dp = stats->smpl_ndp[i] ? stats->smpl_dp[i]/(float)stats->smpl_ndp[i] : 0; + printf("PSC\t%d\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%.1f\t%d\t%d\t%d\n", id,args->files->samples[i], + stats->smpl_homRR[i], stats->smpl_homAA[i], stats->smpl_hets[i], stats->smpl_ts[i], + stats->smpl_tv[i], stats->smpl_indels[i],dp, stats->smpl_sngl[i], stats->smpl_hapRef[i], stats->smpl_hapAlt[i]); + } + } + + + printf("# PSI, Per-Sample Indels\n# PSI\t[2]id\t[3]sample\t[4]in-frame\t[5]out-frame\t[6]not applicable\t[7]out/(in+out) ratio\t[8]nHets\t[9]nAA\n"); + for (id=0; idnstats; id++) + { + stats_t *stats = &args->stats[id]; + for (i=0; ifiles->n_smpl; i++) + { + int na = 0, in = 0, out = 0; + if ( args->exons ) + { + na = stats->smpl_frm_shifts[i*3 + 0]; + in = stats->smpl_frm_shifts[i*3 + 1]; + out = stats->smpl_frm_shifts[i*3 + 2]; + } + int nhom = stats->smpl_indel_homs[i]; + int nhet = stats->smpl_indel_hets[i]; + printf("PSI\t%d\t%s\t%d\t%d\t%d\t%.2f\t%d\t%d\n", id,args->files->samples[i], in,out,na,in+out?1.0*out/(in+out):0,nhet,nhom); + } + } + + #ifdef HWE_STATS + printf("# HWE\n# HWE\t[2]id\t[3]1st ALT allele frequency\t[4]Number of observations\t[5]25th percentile\t[6]median\t[7]75th percentile\n"); + for (id=0; idnstats; id++) + { + stats_t *stats = &args->stats[id]; + for (i=0; inaf_hwe; i++) stats->af_hwe[i+args->naf_hwe] += stats->af_hwe[i]; // singletons + for (i=1; im_af; i++) + { + unsigned int sum_tot = 0, sum_tmp = 0; + int j, *ptr = &stats->af_hwe[i*args->naf_hwe]; + for (j=0; jnaf_hwe; j++) sum_tot += ptr[j]; + if ( !sum_tot ) continue; + + double af = args->af_bins ? (bin_get_value(args->af_bins,i)+bin_get_value(args->af_bins,i-1))*0.5 : (double)(i-1)/(args->m_af-1); + + int nprn = 3; + printf("HWE\t%d\t%f\t%d",id,af,sum_tot); + for (j=0; jnaf_hwe; j++) + { + sum_tmp += ptr[j]; + float frac = (float)sum_tmp/sum_tot; + if ( frac >= 0.75 ) + { + while (nprn>0) { printf("\t%f", (float)j/args->naf_hwe); nprn--; } + break; + } + if ( frac >= 0.5 ) + { + while (nprn>1) { printf("\t%f", (float)j/args->naf_hwe); nprn--; } + continue; + } + if ( frac >= 0.25 ) + { + while (nprn>2) { printf("\t%f", (float)j/args->naf_hwe); nprn--; } + } + } + assert(nprn==0); + printf("\n"); + } + } + #endif + } +} + +static void usage(void) +{ + fprintf(stderr, "\n"); + fprintf(stderr, "About: Parses VCF or BCF and produces stats which can be plotted using plot-vcfstats.\n"); + fprintf(stderr, " When two files are given, the program generates separate stats for intersection\n"); + fprintf(stderr, " and the complements. By default only sites are compared, -s/-S must given to include\n"); + fprintf(stderr, " also sample columns.\n"); + fprintf(stderr, "Usage: bcftools stats [options] []\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " --af-bins allele frequency bins, a list (0.1,0.5,1) or a file (0.1\\n0.5\\n1)\n"); + fprintf(stderr, " --af-tag allele frequency tag to use, by default estimated from AN,AC or GT\n"); + fprintf(stderr, " -1, --1st-allele-only include only 1st allele at multiallelic sites\n"); + fprintf(stderr, " -c, --collapse treat as identical records with , see man page for details [none]\n"); + fprintf(stderr, " -d, --depth depth distribution: min,max,bin size [0,500,1]\n"); + fprintf(stderr, " -e, --exclude exclude sites for which the expression is true (see man page for details)\n"); + fprintf(stderr, " -E, --exons tab-delimited file with exons for indel frameshifts (chr,from,to; 1-based, inclusive, bgzip compressed)\n"); + fprintf(stderr, " -f, --apply-filters require at least one of the listed FILTER strings (e.g. \"PASS,.\")\n"); + fprintf(stderr, " -F, --fasta-ref faidx indexed reference sequence file to determine INDEL context\n"); + fprintf(stderr, " -i, --include select sites for which the expression is true (see man page for details)\n"); + fprintf(stderr, " -I, --split-by-ID collect stats for sites with ID separately (known vs novel)\n"); + fprintf(stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(stderr, " -s, --samples list of samples for sample stats, \"-\" to include all samples\n"); + fprintf(stderr, " -S, --samples-file file of samples to include\n"); + fprintf(stderr, " -t, --targets similar to -r but streams rather than index-jumps\n"); + fprintf(stderr, " -T, --targets-file similar to -R but streams rather than index-jumps\n"); + fprintf(stderr, " -u, --user-tstv collect Ts/Tv stats for any tag using the given binning [0:1:100]\n"); + fprintf(stderr, " --threads number of extra decompression threads [0]\n"); + fprintf(stderr, " -v, --verbose produce verbose per-site and per-sample output\n"); + fprintf(stderr, "\n"); + exit(1); +} + +int main_vcfstats(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->files = bcf_sr_init(); + args->argc = argc; args->argv = argv; + args->dp_min = 0; args->dp_max = 500; args->dp_step = 1; + int regions_is_file = 0, targets_is_file = 0; + + static struct option loptions[] = + { + {"af-bins",1,0,1}, + {"af-tag",1,0,2}, + {"1st-allele-only",0,0,'1'}, + {"include",1,0,'i'}, + {"exclude",1,0,'e'}, + {"help",0,0,'h'}, + {"collapse",1,0,'c'}, + {"regions",1,0,'r'}, + {"regions-file",1,0,'R'}, + {"verbose",0,0,'v'}, + {"depth",1,0,'d'}, + {"apply-filters",1,0,'f'}, + {"exons",1,0,'E'}, + {"samples",1,0,'s'}, + {"samples-file",1,0,'S'}, + {"split-by-ID",0,0,'I'}, + {"targets",1,0,'t'}, + {"targets-file",1,0,'T'}, + {"fasta-ref",1,0,'F'}, + {"user-tstv",1,0,'u'}, + {"threads",1,0,9}, + {0,0,0,0} + }; + while ((c = getopt_long(argc, argv, "hc:r:R:e:s:S:d:i:t:T:F:f:1u:vIE:",loptions,NULL)) >= 0) { + switch (c) { + case 1 : args->af_bins_list = optarg; break; + case 2 : args->af_tag = optarg; break; + case 'u': add_user_stats(args,optarg); break; + case '1': args->first_allele_only = 1; break; + case 'F': args->ref_fname = optarg; break; + case 't': args->targets_list = optarg; break; + case 'T': args->targets_list = optarg; targets_is_file = 1; break; + case 'c': + if ( !strcmp(optarg,"snps") ) args->files->collapse |= COLLAPSE_SNPS; + else if ( !strcmp(optarg,"indels") ) args->files->collapse |= COLLAPSE_INDELS; + else if ( !strcmp(optarg,"both") ) args->files->collapse |= COLLAPSE_SNPS | COLLAPSE_INDELS; + else if ( !strcmp(optarg,"any") ) args->files->collapse |= COLLAPSE_ANY; + else if ( !strcmp(optarg,"all") ) args->files->collapse |= COLLAPSE_ANY; + else if ( !strcmp(optarg,"some") ) args->files->collapse |= COLLAPSE_SOME; + else if ( !strcmp(optarg,"none") ) args->files->collapse = COLLAPSE_NONE; + else error("The --collapse string \"%s\" not recognised.\n", optarg); + break; + case 'v': args->verbose_sites = 1; break; + case 'd': + if ( sscanf(optarg,"%d,%d,%d",&args->dp_min,&args->dp_max,&args->dp_step)!=3 ) + error("Could not parse --depth %s\n", optarg); + if ( args->dp_min<0 || args->dp_min >= args->dp_max || args->dp_step > args->dp_max - args->dp_min + 1 ) + error("Is this a typo? --depth %s\n", optarg); + break; + case 'f': args->files->apply_filters = optarg; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; regions_is_file = 1; break; + case 'E': args->exons_fname = optarg; break; + case 's': args->samples_list = optarg; break; + case 'S': args->samples_list = optarg; args->samples_is_file = 1; break; + case 'I': args->split_by_id = 1; break; + case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break; + case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break; + case 9 : args->n_threads = strtol(optarg, 0, 0); break; + case 'h': + case '?': usage(); + default: error("Unknown argument: %s\n", optarg); + } + } + char *fname = NULL; + if ( optind==argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin + else usage(); + } + else fname = argv[optind]; + + if ( argc-optind>2 ) usage(); + if ( argc-optind>1 ) + { + args->files->require_index = 1; + if ( args->split_by_id ) error("Only one file can be given with -i.\n"); + } + if ( !args->samples_list ) args->files->max_unpack = BCF_UN_INFO; + if ( args->targets_list && bcf_sr_set_targets(args->files, args->targets_list, targets_is_file, 0)<0 ) + error("Failed to read the targets: %s\n", args->targets_list); + if ( args->regions_list && bcf_sr_set_regions(args->files, args->regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + if ( args->n_threads && bcf_sr_set_threads(args->files, args->n_threads)<0) + error("Failed to create threads\n"); + + while (fname) + { + if ( !bcf_sr_add_reader(args->files, fname) ) + error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); + fname = ++optind < argc ? argv[optind] : NULL; + } + + init_stats(args); + print_header(args); + do_vcf_stats(args); + print_stats(args); + destroy_stats(args); + bcf_sr_destroy(args->files); + free(args); + return 0; +} + diff --git a/bcftools/vcfstats.c.pysam.c b/bcftools/vcfstats.c.pysam.c new file mode 100644 index 0000000..875dd6a --- /dev/null +++ b/bcftools/vcfstats.c.pysam.c @@ -0,0 +1,1726 @@ +#include "bcftools.pysam.h" + +/* vcfstats.c -- Produces stats which can be plotted using plot-vcfstats. + + Copyright (C) 2012-2016 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +/* + Notes and known issues: + - SN ts/tv calculation includes all non-ref alleles listed in ALT while per-sample ts/tv + takes the first non-ref allele only, something to consider with many non-ref HETs. +*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "filter.h" +#include "bin.h" + +// Logic of the filters: include or exclude sites which match the filters? +#define FLT_INCLUDE 1 +#define FLT_EXCLUDE 2 + +#define HWE_STATS 1 +#define QUAL_STATS 1 +#define IRC_STATS 1 +#define IRC_RLEN 10 +#define NA_STRING "0" + +typedef struct +{ + char *tag; + float min, max; + uint64_t *vals_ts, *vals_tv; + void *val; + int nbins, type, m_val; +} +user_stats_t; + +typedef struct +{ + int min, max, step, m_vals; + uint64_t *vals; +} +idist_t; + +typedef struct +{ + int n_snps, n_indels, n_mnps, n_others, n_mals, n_snp_mals, n_records, n_noalts; + int *af_ts, *af_tv, *af_snps; // first bin of af_* stats are singletons + #if HWE_STATS + int *af_hwe; + #endif + #if IRC_STATS + int n_repeat[IRC_RLEN][4], n_repeat_na; // number of indels which are repeat-consistent, repeat-inconsistent (dels and ins), and not applicable + int *af_repeats[3]; + #endif + int ts_alt1, tv_alt1; + #if QUAL_STATS + int *qual_ts, *qual_tv, *qual_snps, *qual_indels; + #endif + int *insertions, *deletions, m_indel; // maximum indel length + int in_frame, out_frame, na_frame, in_frame_alt1, out_frame_alt1, na_frame_alt1; + int subst[15]; + int *smpl_hets, *smpl_homRR, *smpl_homAA, *smpl_ts, *smpl_tv, *smpl_indels, *smpl_ndp, *smpl_sngl; + int *smpl_hapRef, *smpl_hapAlt; + int *smpl_indel_hets, *smpl_indel_homs; + int *smpl_frm_shifts; // not-applicable, in-frame, out-frame + unsigned long int *smpl_dp; + idist_t dp, dp_sites; + int nusr; + user_stats_t *usr; +} +stats_t; + +typedef struct +{ + uint64_t gt2gt[5][5]; // number of RR->RR, RR->RA, etc. matches/mismatches; see type2stats + /* + Pearson's R^2 is used for aggregate R^2 + y, yy .. sum of dosage and squared dosage in the query VCF (second file) + x, xx .. sum of squared dosage in the truth VCF (first file) + n .. number of genotypes + */ + double y, yy, x, xx, yx, n; +} +gtcmp_t; + +typedef struct +{ + char *seq; + int pos, cnt, len; +} +_idc1_t; +typedef struct +{ + faidx_t *ref; + _idc1_t *dat; + int ndat, mdat; +} +indel_ctx_t; + +typedef struct +{ + // stats + stats_t stats[3]; + int *tmp_iaf, ntmp_iaf, m_af, m_qual, naf_hwe, mtmp_frm; + uint8_t *tmp_frm; + int dp_min, dp_max, dp_step; + gtcmp_t *smpl_gts_snps, *smpl_gts_indels; + gtcmp_t *af_gts_snps, *af_gts_indels; // first bin of af_* stats are singletons + bin_t *af_bins; + float *farr; + int mfarr; + + // indel context + indel_ctx_t *indel_ctx; + char *ref_fname; + + // user stats + int nusr; + user_stats_t *usr; + + // other + bcf_srs_t *files; + bcf_sr_regions_t *exons; + char **argv, *exons_fname, *regions_list, *samples_list, *targets_list, *af_bins_list, *af_tag; + int argc, verbose_sites, first_allele_only, samples_is_file; + int split_by_id, nstats; + + filter_t *filter[2]; + char *filter_str; + int filter_logic; // include or exclude sites which match the filters? One of FLT_INCLUDE/FLT_EXCLUDE + int n_threads; +} +args_t; + +static int type2dosage[6], type2ploidy[6], type2stats[7]; + +static void idist_init(idist_t *d, int min, int max, int step) +{ + d->min = min; d->max = max; d->step = step; + d->m_vals = 4 + (d->max - d->min)/d->step; + d->vals = (uint64_t*) calloc(d->m_vals,sizeof(uint64_t)); +} +static void idist_destroy(idist_t *d) +{ + if ( d->vals ) free(d->vals); +} +static inline uint64_t *idist(idist_t *d, int val) +{ + if ( val < d->min ) return &d->vals[0]; + if ( val > d->max ) return &d->vals[d->m_vals-1]; + return &d->vals[1 + (val - d->min) / d->step]; +} +static inline int idist_i2bin(idist_t *d, int i) +{ + if ( i<=0 ) return d->min; + if ( i>= d->m_vals ) return d->max; + return i-1+d->min; +} + +static inline int clip_nonnegative(float x, int limit) +{ + if (x >= limit || isnan(x)) return limit - 1; + else if (x <= 0.0) return 0; + else return (int) x; +} + +#define IC_DBG 0 +#if IC_DBG +static void _indel_ctx_print1(_idc1_t *idc) +{ + int i; + fprintf(bcftools_stdout, "%d\t", idc->cnt); + for (i=0; ilen; i++) + fputc(idc->seq[i], bcftools_stdout); + fputc('\n', bcftools_stdout); +} +static void _indel_ctx_print(indel_ctx_t *ctx) +{ + int i; + for (i=0; indat; i++) + _indel_ctx_print1(&ctx->dat[i]); + fputc('\n',bcftools_stdout); +} +#endif +static int _indel_ctx_lookup(indel_ctx_t *ctx, char *seq, int seq_len, int *hit) +{ + // binary search + int min = 0, max = ctx->ndat - 1; + while ( min<=max ) + { + int i = (min+max)/2; + int cmp = strncmp(seq, ctx->dat[i].seq, seq_len); + if ( cmp<0 ) max = i - 1; + else if ( cmp>0 ) min = i + 1; + else + { + if ( seq_len==ctx->dat[i].len ) + { + *hit = 1; + return i; + } + else if ( seq_lendat[i].len ) max = i - 1; + else min = i + 1; + } + } + *hit = 0; + return max; +} +static void _indel_ctx_insert(indel_ctx_t *ctx, char *seq, int seq_len, int pos) +{ + int idat, hit, i; + idat = _indel_ctx_lookup(ctx, seq, seq_len, &hit); + if ( !hit ) + { + if ( pos>0 ) return; + idat++; + ctx->ndat++; + hts_expand(_idc1_t, ctx->ndat+1, ctx->mdat, ctx->dat); + if ( idatndat && ctx->ndat>1 ) + memmove(&ctx->dat[idat+1], &ctx->dat[idat], (ctx->ndat - idat - 1)*sizeof(_idc1_t)); + ctx->dat[idat].len = seq_len; + ctx->dat[idat].cnt = 1; + ctx->dat[idat].pos = pos; + ctx->dat[idat].seq = (char*) malloc(sizeof(char)*(seq_len+1)); + for (i=0; idat[idat].seq[i] = seq[i]; + ctx->dat[idat].seq[i] = 0; + return; + } + if ( ctx->dat[idat].pos + seq_len == pos ) + { + ctx->dat[idat].cnt++; + ctx->dat[idat].pos = pos; + } +} +indel_ctx_t *indel_ctx_init(char *fa_ref_fname) +{ + indel_ctx_t *ctx = (indel_ctx_t *) calloc(1,sizeof(indel_ctx_t)); + ctx->ref = fai_load(fa_ref_fname); + if ( !ctx->ref ) + { + free(ctx); + return NULL; + } + return ctx; +} +void indel_ctx_destroy(indel_ctx_t *ctx) +{ + fai_destroy(ctx->ref); + if ( ctx->mdat ) free(ctx->dat); + free(ctx); +} +/** + * indel_ctx_type() - determine indel context type + * @ctx: + * @chr: chromosome name + * @pos: position of the first @ref base, 1-based + * @ref: reference allele + * @alt: alternate allele. Only first of multiple comma-separated alleles is + * considered + * @nrep: number of repeated elements (w) + * @nlen: length of a single repeat element (w) + * + * Returns the INDEL length, negative for deletions, positive for insertions + */ +int indel_ctx_type(indel_ctx_t *ctx, char *chr, int pos, char *ref, char *alt, int *nrep, int *nlen) +{ + const int win_size = 50; // hard-wired for now + const int rep_len = IRC_RLEN; // hard-wired for now + + int ref_len = strlen(ref); + int alt_len = 0; + while ( alt[alt_len] && alt[alt_len]!=',' ) alt_len++; + + int i, fai_ref_len; + char *fai_ref = faidx_fetch_seq(ctx->ref, chr, pos-1, pos+win_size, &fai_ref_len); + for (i=0; i96 ) fai_ref[i] -= 32; + + // Sanity check: the reference sequence must match the REF allele + for (i=0; indat = 0; + for (i=0; indat; i++) + { + if ( max_cnt < ctx->dat[i].cnt || (max_cnt==ctx->dat[i].cnt && max_len < ctx->dat[i].len) ) + { + max_cnt = ctx->dat[i].cnt; + max_len = ctx->dat[i].len; + } + free(ctx->dat[i].seq); + } + free(fai_ref); + + *nrep = max_cnt; + *nlen = max_len; + return alt_len - ref_len; +} + +static void add_user_stats(args_t *args, char *str) +{ + args->nusr++; + args->usr = (user_stats_t*) realloc(args->usr,sizeof(user_stats_t)*args->nusr); + user_stats_t *usr = &args->usr[args->nusr-1]; + memset(usr,0,sizeof(*usr)); + usr->min = 0; + usr->max = 1; + usr->nbins = 100; + + char *tmp = str; + while ( *tmp && *tmp!=':' ) tmp++; + usr->tag = (char*)calloc(tmp-str+2,sizeof(char)); + memcpy(usr->tag,str,tmp-str); + + if ( *tmp ) + { + char *ptr = ++tmp; + usr->min = strtod(tmp, &ptr); + if ( tmp==ptr ) error("Could not parse %s\n", str); + tmp = ptr+1; + } + if ( *tmp ) + { + char *ptr = tmp; + usr->max = strtod(tmp, &ptr); + if ( tmp==ptr ) error("Could not parse %s\n", str); + tmp = ptr+1; + } + if ( *tmp ) + { + char *ptr = tmp; + usr->nbins = strtol(tmp, &ptr, 10); + if ( tmp==ptr ) error("Could not parse %s\n", str); + if ( usr->nbins<=0 ) error("Number of bins does not make sense (%d): %s.\n", usr->nbins, str); + } +} +static void init_user_stats(args_t *args, bcf_hdr_t *hdr, stats_t *stats) +{ + stats->nusr = args->nusr; + stats->usr = (user_stats_t*)malloc(sizeof(user_stats_t)*args->nusr); + memcpy(stats->usr,args->usr,args->nusr*sizeof(user_stats_t)); + int i; + for (i=0; inusr; i++) + { + user_stats_t *usr = &stats->usr[i]; + usr->vals_ts = (uint64_t*)calloc(usr->nbins,sizeof(uint64_t)); + usr->vals_tv = (uint64_t*)calloc(usr->nbins,sizeof(uint64_t)); + int id = bcf_hdr_id2int(hdr,BCF_DT_ID,usr->tag); + if ( !bcf_hdr_idinfo_exists(hdr,BCF_HL_INFO,id) ) error("The INFO tag \"%s\" is not defined in the header\n", usr->tag); + usr->type = bcf_hdr_id2type(hdr,BCF_HL_INFO,id); + if ( usr->type!=BCF_HT_REAL && usr->type!=BCF_HT_INT ) error("The INFO tag \"%s\" is not of Float or Integer type (%d)\n", usr->type); + } +} +static void init_stats(args_t *args) +{ + int i; + args->nstats = args->files->nreaders==1 ? 1 : 3; + if ( args->split_by_id ) args->nstats = 2; + + if ( args->filter_str ) + { + args->filter[0] = filter_init(bcf_sr_get_header(args->files,0), args->filter_str); + if ( args->files->nreaders==2 ) + args->filter[1] = filter_init(bcf_sr_get_header(args->files,1), args->filter_str); + args->files->max_unpack |= filter_max_unpack(args->filter[0]); + } + + // AF corresponds to AC but is more robust to mixtures of haploid and diploid GTs + if ( !args->af_bins_list ) + { + args->m_af = 101; + for (i=0; ifiles->nreaders; i++) + if ( bcf_hdr_nsamples(args->files->readers[i].header) + 1> args->m_af ) + args->m_af = bcf_hdr_nsamples(args->files->readers[i].header) + 1; + } + else + { + args->af_bins = bin_init(args->af_bins_list,0,1); + + // m_af is used also for other af arrays, where the first bin is for + // singletons. However, since the last element is unused in af_bins + // (n boundaries form n-1 intervals), the m_af count is good for both. + args->m_af = bin_get_size(args->af_bins); + } + + bcf_hdr_t *hdr = bcf_sr_get_header(args->files,0); + if ( args->af_tag && !bcf_hdr_idinfo_exists(hdr,BCF_HL_INFO,bcf_hdr_id2int(hdr,BCF_DT_ID,args->af_tag)) ) + error("No such INFO tag: %s\n", args->af_tag); + + #if QUAL_STATS + args->m_qual = 999; + #endif + #if HWE_STATS + args->naf_hwe = 100; + #endif + + if ( args->samples_list ) + { + if ( !bcf_sr_set_samples(args->files,args->samples_list,args->samples_is_file) ) + { + if ( !bcf_hdr_nsamples(args->files->readers[0].header) ) + error("No sample columns in %s\n", args->files->readers[0].fname); + error("Unable to parse the samples: \"%s\"\n", args->samples_list); + } + args->af_gts_snps = (gtcmp_t *) calloc(args->m_af,sizeof(gtcmp_t)); + args->af_gts_indels = (gtcmp_t *) calloc(args->m_af,sizeof(gtcmp_t)); + args->smpl_gts_snps = (gtcmp_t *) calloc(args->files->n_smpl,sizeof(gtcmp_t)); + args->smpl_gts_indels = (gtcmp_t *) calloc(args->files->n_smpl,sizeof(gtcmp_t)); + } + for (i=0; instats; i++) + { + stats_t *stats = &args->stats[i]; + stats->m_indel = 60; + stats->insertions = (int*) calloc(stats->m_indel,sizeof(int)); + stats->deletions = (int*) calloc(stats->m_indel,sizeof(int)); + stats->af_ts = (int*) calloc(args->m_af,sizeof(int)); + stats->af_tv = (int*) calloc(args->m_af,sizeof(int)); + stats->af_snps = (int*) calloc(args->m_af,sizeof(int)); + int j; + for (j=0; j<3; j++) stats->af_repeats[j] = (int*) calloc(args->m_af,sizeof(int)); + #if QUAL_STATS + stats->qual_ts = (int*) calloc(args->m_qual,sizeof(int)); + stats->qual_tv = (int*) calloc(args->m_qual,sizeof(int)); + stats->qual_snps = (int*) calloc(args->m_qual,sizeof(int)); + stats->qual_indels = (int*) calloc(args->m_qual,sizeof(int)); + #endif + if ( args->files->n_smpl ) + { + stats->smpl_hets = (int *) calloc(args->files->n_smpl,sizeof(int)); + stats->smpl_homAA = (int *) calloc(args->files->n_smpl,sizeof(int)); + stats->smpl_homRR = (int *) calloc(args->files->n_smpl,sizeof(int)); + stats->smpl_hapRef = (int *) calloc(args->files->n_smpl,sizeof(int)); + stats->smpl_hapAlt = (int *) calloc(args->files->n_smpl,sizeof(int)); + stats->smpl_indel_hets = (int *) calloc(args->files->n_smpl,sizeof(int)); + stats->smpl_indel_homs = (int *) calloc(args->files->n_smpl,sizeof(int)); + stats->smpl_ts = (int *) calloc(args->files->n_smpl,sizeof(int)); + stats->smpl_tv = (int *) calloc(args->files->n_smpl,sizeof(int)); + stats->smpl_indels = (int *) calloc(args->files->n_smpl,sizeof(int)); + stats->smpl_dp = (unsigned long int *) calloc(args->files->n_smpl,sizeof(unsigned long int)); + stats->smpl_ndp = (int *) calloc(args->files->n_smpl,sizeof(int)); + stats->smpl_sngl = (int *) calloc(args->files->n_smpl,sizeof(int)); + #if HWE_STATS + stats->af_hwe = (int*) calloc(args->m_af*args->naf_hwe,sizeof(int)); + #endif + if ( args->exons_fname ) + stats->smpl_frm_shifts = (int*) calloc(args->files->n_smpl*3,sizeof(int)); + } + idist_init(&stats->dp, args->dp_min,args->dp_max,args->dp_step); + idist_init(&stats->dp_sites, args->dp_min,args->dp_max,args->dp_step); + init_user_stats(args, i!=1 ? args->files->readers[0].header : args->files->readers[1].header, stats); + } + + if ( args->exons_fname ) + { + args->exons = bcf_sr_regions_init(args->exons_fname,1,0,1,2); + if ( !args->exons ) + error("Error occurred while reading, was the file compressed with bgzip: %s?\n", args->exons_fname); + } + + #if IRC_STATS + if ( args->ref_fname ) + args->indel_ctx = indel_ctx_init(args->ref_fname); + #endif + + type2dosage[GT_HOM_RR] = 0; + type2dosage[GT_HET_RA] = 1; + type2dosage[GT_HOM_AA] = 2; + type2dosage[GT_HET_AA] = 2; + type2dosage[GT_HAPL_R] = 0; + type2dosage[GT_HAPL_A] = 1; + + type2ploidy[GT_HOM_RR] = 1; + type2ploidy[GT_HET_RA] = 1; + type2ploidy[GT_HOM_AA] = 1; + type2ploidy[GT_HET_AA] = 1; + type2ploidy[GT_HAPL_R] = -1; + type2ploidy[GT_HAPL_A] = -1; + + type2stats[GT_HOM_RR] = 0; + type2stats[GT_HET_RA] = 1; + type2stats[GT_HOM_AA] = 2; + type2stats[GT_HET_AA] = 3; + type2stats[GT_HAPL_R] = 0; + type2stats[GT_HAPL_A] = 2; + type2stats[GT_UNKN] = 4; + +} +static void destroy_stats(args_t *args) +{ + int id, j; + for (id=0; idnstats; id++) + { + stats_t *stats = &args->stats[id]; + if (stats->af_ts) free(stats->af_ts); + if (stats->af_tv) free(stats->af_tv); + if (stats->af_snps) free(stats->af_snps); + for (j=0; j<3; j++) + if (stats->af_repeats[j]) free(stats->af_repeats[j]); + #if QUAL_STATS + if (stats->qual_ts) free(stats->qual_ts); + if (stats->qual_tv) free(stats->qual_tv); + if (stats->qual_snps) free(stats->qual_snps); + if (stats->qual_indels) free(stats->qual_indels); + #endif + #if HWE_STATS + free(stats->af_hwe); + #endif + free(stats->insertions); + free(stats->deletions); + free(stats->smpl_hets); + free(stats->smpl_homAA); + free(stats->smpl_homRR); + free(stats->smpl_hapRef); + free(stats->smpl_hapAlt); + free(stats->smpl_indel_homs); + free(stats->smpl_indel_hets); + free(stats->smpl_ts); + free(stats->smpl_tv); + free(stats->smpl_indels); + free(stats->smpl_dp); + free(stats->smpl_ndp); + free(stats->smpl_sngl); + idist_destroy(&stats->dp); + idist_destroy(&stats->dp_sites); + for (j=0; jnusr; j++) + { + free(stats->usr[j].vals_ts); + free(stats->usr[j].vals_tv); + free(stats->usr[j].val); + } + free(stats->usr); + if ( args->exons ) free(stats->smpl_frm_shifts); + } + for (j=0; jnusr; j++) free(args->usr[j].tag); + if ( args->af_bins ) bin_destroy(args->af_bins); + free(args->farr); + free(args->usr); + free(args->tmp_frm); + free(args->tmp_iaf); + if (args->exons) bcf_sr_regions_destroy(args->exons); + free(args->af_gts_snps); + free(args->af_gts_indels); + free(args->smpl_gts_snps); + free(args->smpl_gts_indels); + if (args->indel_ctx) indel_ctx_destroy(args->indel_ctx); + if (args->filter[0]) filter_destroy(args->filter[0]); + if (args->filter[1]) filter_destroy(args->filter[1]); +} + +static void init_iaf(args_t *args, bcf_sr_t *reader) +{ + bcf1_t *line = reader->buffer[0]; + hts_expand(int32_t,line->n_allele,args->ntmp_iaf,args->tmp_iaf); + + int i, ret; + if ( args->af_tag ) + { + ret = bcf_get_info_float(reader->header, line, args->af_tag, &args->farr, &args->mfarr); + if ( ret<=0 || ret!=line->n_allele-1 ) + { + // the AF tag is not present or wrong number of values, put in the singletons/unknown bin + for (i=0; in_allele; i++) args->tmp_iaf[i] = 0; + return; + } + args->tmp_iaf[0] = 0; + for (i=1; in_allele; i++) + { + float af = args->farr[i-1]; + if ( af<0 ) af = 0; + else if ( af>1 ) af = 1; + int iaf = args->af_bins ? bin_get_idx(args->af_bins,af) : af*(args->m_af-2); + args->tmp_iaf[i] = iaf + 1; // the first tmp_iaf bin is reserved for singletons + } + return; + } + + // tmp_iaf is first filled with AC counts in calc_ac and then transformed to + // an index to af_gts_snps + ret = bcf_calc_ac(reader->header, line, args->tmp_iaf, args->samples_list ? BCF_UN_INFO|BCF_UN_FMT : BCF_UN_INFO); + if ( !ret ) + { + for (i=0; in_allele; i++) args->tmp_iaf[i] = 0; // singletons/unknown bin + return; + } + + int an = 0; + for (i=0; in_allele; i++) + an += args->tmp_iaf[i]; + + args->tmp_iaf[0] = 0; + for (i=1; in_allele; i++) + { + if ( args->tmp_iaf[i]==1 ) + args->tmp_iaf[i] = 0; // singletons into the first bin + else if ( !an ) + args->tmp_iaf[i] = 1; // no genotype at all, put to the AF=0 bin + else + { + float af = (float) args->tmp_iaf[i] / an; + if ( af<0 ) af = 0; + else if ( af>1 ) af = 1; + int iaf = args->af_bins ? bin_get_idx(args->af_bins,af) : af*(args->m_af-2); + args->tmp_iaf[i] = iaf + 1; + } + } +} + +static inline void do_mnp_stats(args_t *args, stats_t *stats, bcf_sr_t *reader) +{ + stats->n_mnps++; +} + +static inline void do_other_stats(args_t *args, stats_t *stats, bcf_sr_t *reader) +{ + stats->n_others++; +} + +static void do_indel_stats(args_t *args, stats_t *stats, bcf_sr_t *reader) +{ + stats->n_indels++; + + bcf1_t *line = reader->buffer[0]; + + #if QUAL_STATS + int iqual = clip_nonnegative(line->qual, args->m_qual); + stats->qual_indels[iqual]++; + #endif + + // Check if the indel is near an exon for the frameshift statistics + int i, exon_overlap = 0; + if ( args->exons ) + { + if ( !bcf_sr_regions_overlap(args->exons, bcf_seqname(reader->header,line),line->pos,line->pos) ) exon_overlap = 1; + hts_expand(uint8_t,line->n_allele,args->mtmp_frm,args->tmp_frm); + for (i=0; in_allele; i++) args->tmp_frm[i] = 0; + } + + for (i=1; in_allele; i++) + { + if ( args->first_allele_only && i>1 ) break; + if ( bcf_get_variant_type(line,i)!=VCF_INDEL ) continue; + int len = line->d.var[i].n; + + #if IRC_STATS + // Indel repeat consistency + if ( args->indel_ctx ) + { + int nrep, nlen, ndel; + ndel = indel_ctx_type(args->indel_ctx, (char*)reader->header->id[BCF_DT_CTG][line->rid].key, line->pos+1, line->d.allele[0], line->d.allele[i], &nrep, &nlen); + if ( nlen<=1 || nrep<=1 ) + { + // not a repeat or a single base repeat + stats->n_repeat_na++; + stats->af_repeats[2][ args->tmp_iaf[i] ]++; + } + else + { + if ( abs(ndel) % nlen ) + { + // the length of the inserted/deleted sequence is not consistent with the repeat element + stats->n_repeat[nlen-1][ndel<0 ? 1 : 3]++; + stats->af_repeats[1][ args->tmp_iaf[i] ]++; + } + else + { + // the length consistent with the repeat + stats->n_repeat[nlen-1][ndel<0 ? 0 : 2]++; + stats->af_repeats[0][ args->tmp_iaf[i] ]++; + } + } + } + else + stats->af_repeats[2][ args->tmp_iaf[i] ]++; + #endif + + // Check the frameshifts + int tlen = 0; + if ( args->exons && exon_overlap ) // there is an exon + { + if ( len>0 ) + { + // insertion + if ( args->exons->start <= line->pos && args->exons->end > line->pos ) tlen = abs(len); + } + else if ( args->exons->start <= line->pos + abs(len) ) + { + // deletion + tlen = abs(len); + if ( line->pos < args->exons->start ) // trim the beginning + tlen -= args->exons->start - line->pos + 1; + if ( args->exons->end < line->pos + abs(len) ) // trim the end + tlen -= line->pos + abs(len) - args->exons->end; + } + } + if ( tlen ) // there are some deleted/inserted bases in the exon + { + if ( tlen%3 ) { stats->out_frame++; args->tmp_frm[i] = 2; } + else { stats->in_frame++; args->tmp_frm[i] = 1; } + + if ( i==1 ) + { + if ( tlen%3 ) stats->out_frame_alt1++; + else stats->in_frame_alt1++; + } + } + else // no exon affected + { + if ( i==1 ) stats->na_frame_alt1++; + stats->na_frame++; + } + + + // Indel length distribution + int *ptr = stats->insertions; + if ( len<0 ) + { + len *= -1; + ptr = stats->deletions; + } + if ( --len >= stats->m_indel ) len = stats->m_indel-1; + ptr[len]++; + } +} + +static void do_user_stats(stats_t *stats, bcf_sr_t *reader, int is_ts) +{ + int i; + for (i=0; inusr; i++) + { + user_stats_t *usr = &stats->usr[i]; + uint64_t *vals = is_ts ? usr->vals_ts : usr->vals_tv; + float val; + if ( usr->type==BCF_HT_REAL ) + { + if ( bcf_get_info_float(reader->header,reader->buffer[0],usr->tag,&usr->val,&usr->m_val)<=0 ) continue; + val = ((float*)usr->val)[0]; + } + else + { + if ( bcf_get_info_int32(reader->header,reader->buffer[0],usr->tag,&usr->val,&usr->m_val)<=0 ) continue; + val = ((int32_t*)usr->val)[0]; + } + int idx; + if ( val<=usr->min ) idx = 0; + else if ( val>=usr->max ) idx = usr->nbins - 1; + else idx = (val - usr->min)/(usr->max - usr->min) * (usr->nbins-1); + vals[idx]++; + } +} + +static void do_snp_stats(args_t *args, stats_t *stats, bcf_sr_t *reader) +{ + stats->n_snps++; + + bcf1_t *line = reader->buffer[0]; + int ref = bcf_acgt2int(*line->d.allele[0]); + if ( ref<0 ) return; + + #if QUAL_STATS + int iqual = clip_nonnegative(line->qual, args->m_qual); + stats->qual_snps[iqual]++; + #endif + + int i; + for (i=1; in_allele; i++) + { + if ( args->first_allele_only && i>1 ) break; + if ( !(bcf_get_variant_type(line,i)&VCF_SNP) ) continue; + int alt = bcf_acgt2int(*line->d.allele[i]); + if ( alt<0 || ref==alt ) continue; + stats->subst[ref<<2|alt]++; + int iaf = args->tmp_iaf[i]; + stats->af_snps[iaf]++; + if ( abs(ref-alt)==2 ) + { + if (i==1) + { + stats->ts_alt1++; + #if QUAL_STATS + stats->qual_ts[iqual]++; + #endif + do_user_stats(stats, reader, 1); + } + stats->af_ts[iaf]++; + } + else + { + if (i==1) + { + stats->tv_alt1++; + #if QUAL_STATS + stats->qual_tv[iqual]++; + #endif + do_user_stats(stats, reader, 0); + } + stats->af_tv[iaf]++; + } + } +} + +static void do_sample_stats(args_t *args, stats_t *stats, bcf_sr_t *reader, int matched) +{ + bcf_srs_t *files = args->files; + bcf1_t *line = reader->buffer[0]; + bcf_fmt_t *fmt_ptr; + int nref_tot = 0, nhet_tot = 0, nalt_tot = 0; + int line_type = bcf_get_variant_types(line); + + if ( (fmt_ptr = bcf_get_fmt(reader->header,reader->buffer[0],"GT")) ) + { + int ref = bcf_acgt2int(*line->d.allele[0]); + int is, n_nref = 0, i_nref = 0; + for (is=0; isfiles->n_smpl; is++) + { + int ial, jal; + int gt = bcf_gt_type(fmt_ptr, reader->samples[is], &ial, &jal); + if ( gt==GT_UNKN ) continue; + if ( gt==GT_HAPL_R || gt==GT_HAPL_A ) + { + if ( line_type&VCF_INDEL && stats->smpl_frm_shifts ) + { + assert( ialn_allele ); + stats->smpl_frm_shifts[is*3 + args->tmp_frm[ial]]++; + } + if ( gt == GT_HAPL_R ) stats->smpl_hapRef[is]++; + if ( gt == GT_HAPL_A ) stats->smpl_hapAlt[is]++; + continue; + } + if ( gt != GT_HOM_RR ) { n_nref++; i_nref = is; } + #if HWE_STATS + switch (gt) + { + case GT_HOM_RR: nref_tot++; break; + case GT_HET_RA: nhet_tot++; break; + case GT_HET_AA: + case GT_HOM_AA: nalt_tot++; break; + } + #endif + int var_type = 0; + if ( ial>0 ) var_type |= bcf_get_variant_type(line,ial); + if ( jal>0 ) var_type |= bcf_get_variant_type(line,jal); + if ( var_type&VCF_SNP || var_type==VCF_REF ) // count ALT=. as SNP + { + if ( gt == GT_HET_RA ) stats->smpl_hets[is]++; + else if ( gt == GT_HET_AA ) stats->smpl_hets[is]++; + else if ( gt == GT_HOM_RR ) stats->smpl_homRR[is]++; + else if ( gt == GT_HOM_AA ) stats->smpl_homAA[is]++; + if ( gt != GT_HOM_RR && line->d.var[ial].type&VCF_SNP ) // this is safe, bcf_get_variant_types has been already called + { + int alt = bcf_acgt2int(*line->d.allele[ial]); + if ( alt<0 ) continue; + if ( abs(ref-alt)==2 ) + stats->smpl_ts[is]++; + else + stats->smpl_tv[is]++; + } + } + if ( var_type&VCF_INDEL ) + { + if ( gt != GT_HOM_RR ) + { + stats->smpl_indels[is]++; + if ( gt==GT_HET_RA || gt==GT_HET_AA ) stats->smpl_indel_hets[is]++; + else if ( gt==GT_HOM_AA ) stats->smpl_indel_homs[is]++; + } + if ( stats->smpl_frm_shifts ) + { + assert( ialn_allele && jaln_allele ); + stats->smpl_frm_shifts[is*3 + args->tmp_frm[ial]]++; + stats->smpl_frm_shifts[is*3 + args->tmp_frm[jal]]++; + } + } + } + if ( n_nref==1 ) stats->smpl_sngl[i_nref]++; + } + + #if HWE_STATS + if ( nhet_tot + nref_tot + nalt_tot ) + { + float het_frac = (float)nhet_tot/(nhet_tot + nref_tot + nalt_tot); + int idx = het_frac*(args->naf_hwe - 1); +//check me: what is this? + if ( line->n_allele>1 ) idx += args->naf_hwe*args->tmp_iaf[1]; + stats->af_hwe[idx]++; + } + #endif + + if ( (fmt_ptr = bcf_get_fmt(reader->header,reader->buffer[0],"DP")) ) + { + #define BRANCH_INT(type_t,missing,vector_end) { \ + int is; \ + for (is=0; isfiles->n_smpl; is++) \ + { \ + type_t *p = (type_t *) (fmt_ptr->p + fmt_ptr->size*is); \ + if ( *p==vector_end ) continue; \ + if ( *p!=missing ) \ + { \ + (*idist(&stats->dp, *p))++; \ + stats->smpl_ndp[is]++; \ + stats->smpl_dp[is] += *p; \ + } \ + } \ + } + switch (fmt_ptr->type) { + case BCF_BT_INT8: BRANCH_INT(int8_t, bcf_int8_missing, bcf_int8_vector_end); break; + case BCF_BT_INT16: BRANCH_INT(int16_t, bcf_int16_missing, bcf_int16_vector_end); break; + case BCF_BT_INT32: BRANCH_INT(int32_t, bcf_int32_missing, bcf_int32_vector_end); break; + default: fprintf(bcftools_stderr, "[E::%s] todo: %d\n", __func__, fmt_ptr->type); exit(1); break; + } + #undef BRANCH_INT + } + + if ( matched==3 ) + { + int is; + bcf_fmt_t *fmt0, *fmt1; + fmt0 = bcf_get_fmt(files->readers[0].header,files->readers[0].buffer[0],"GT"); if ( !fmt0 ) return; + fmt1 = bcf_get_fmt(files->readers[1].header,files->readers[1].buffer[0],"GT"); if ( !fmt1 ) return; + + // only the first ALT allele is considered + int iaf = args->tmp_iaf[1]; + int line_type = bcf_get_variant_types(files->readers[0].buffer[0]); + gtcmp_t *af_stats = line_type&VCF_SNP ? args->af_gts_snps : args->af_gts_indels; + gtcmp_t *smpl_stats = line_type&VCF_SNP ? args->smpl_gts_snps : args->smpl_gts_indels; + + for (is=0; isn_smpl; is++) + { + // Simplified comparison: only 0/0, 0/1, 1/1 is looked at as the identity of + // actual alleles can be enforced by running without the -c option. + int gt0 = bcf_gt_type(fmt0, files->readers[0].samples[is], NULL, NULL); + int gt1 = bcf_gt_type(fmt1, files->readers[1].samples[is], NULL, NULL); + + int idx0 = type2stats[gt0]; + int idx1 = type2stats[gt1]; + af_stats[iaf].gt2gt[idx0][idx1]++; + smpl_stats[is].gt2gt[idx0][idx1]++; + + if ( gt0 == GT_UNKN || gt1 == GT_UNKN ) continue; + if ( type2ploidy[gt0]*type2ploidy[gt1] == -1 ) continue; // cannot compare diploid and haploid genotypes + + float y = type2dosage[gt0]; + float x = type2dosage[gt1]; + + smpl_stats[is].yx += y*x; + smpl_stats[is].x += x; + smpl_stats[is].xx += x*x; + smpl_stats[is].y += y; + smpl_stats[is].yy += y*y; + smpl_stats[is].n += 1; + + af_stats[iaf].yx += y*x; + af_stats[iaf].x += x; + af_stats[iaf].xx += x*x; + af_stats[iaf].y += y; + af_stats[iaf].yy += y*y; + af_stats[iaf].n += 1; + } + + if ( args->verbose_sites ) + { + int nm = 0, nmm = 0, nrefm = 0; + for (is=0; isn_smpl; is++) + { + int gt = bcf_gt_type(fmt0, files->readers[0].samples[is], NULL, NULL); + if ( gt == GT_UNKN ) continue; + int gt2 = bcf_gt_type(fmt1, files->readers[1].samples[is], NULL, NULL); + if ( gt2 == GT_UNKN ) continue; + if ( gt != gt2 ) + { + nmm++; + bcf_sr_t *reader = &files->readers[0]; + fprintf(bcftools_stdout, "DBG\t%s\t%d\t%s\t%d\t%d\n",reader->header->id[BCF_DT_CTG][reader->buffer[0]->rid].key,reader->buffer[0]->pos+1,files->samples[is],gt,gt2); + } + else + { + if ( gt!=GT_HOM_RR ) nrefm++; + nm++; + } + } + float nrd = nrefm+nmm ? 100.*nmm/(nrefm+nmm) : 0; + fprintf(bcftools_stdout, "PSD\t%s\t%d\t%d\t%d\t%f\n", reader->header->id[BCF_DT_CTG][reader->buffer[0]->rid].key,reader->buffer[0]->pos+1,nm,nmm,nrd); + } + } +} + +static void do_vcf_stats(args_t *args) +{ + bcf_srs_t *files = args->files; + assert( sizeof(int)>files->nreaders ); + while ( bcf_sr_next_line(files) ) + { + bcf_sr_t *reader = NULL; + bcf1_t *line = NULL; + int ret = 0, i, pass = 1; + for (i=0; inreaders; i++) + { + if ( !bcf_sr_has_line(files,i) ) continue; + if ( args->filter[i] ) + { + int is_ok = filter_test(args->filter[i], bcf_sr_get_line(files,i), NULL); + if ( args->filter_logic & FLT_EXCLUDE ) is_ok = is_ok ? 0 : 1; + if ( !is_ok ) { pass = 0; break; } + } + ret |= 1<readers[i]; + line = bcf_sr_get_line(files,i); + } + + } + if ( !pass ) continue; + + int line_type = bcf_get_variant_types(line); + init_iaf(args, reader); + + stats_t *stats = &args->stats[ret-1]; + if ( args->split_by_id && line->d.id[0]=='.' && !line->d.id[1] ) + stats = &args->stats[1]; + + stats->n_records++; + + if ( line_type==VCF_REF ) + stats->n_noalts++; + if ( line_type&VCF_SNP ) + do_snp_stats(args, stats, reader); + if ( line_type&VCF_INDEL ) + do_indel_stats(args, stats, reader); + if ( line_type&VCF_MNP ) + do_mnp_stats(args, stats, reader); + if ( line_type&VCF_OTHER ) + do_other_stats(args, stats, reader); + + if ( line->n_allele>2 ) + { + stats->n_mals++; + if ( line_type == VCF_SNP ) stats->n_snp_mals++; // note: this will be fooled by C>C,T + } + + if ( files->n_smpl ) + do_sample_stats(args, stats, reader, ret); + + if ( bcf_get_info_int32(reader->header,line,"DP",&args->tmp_iaf,&args->ntmp_iaf)==1 ) + (*idist(&stats->dp_sites, args->tmp_iaf[0]))++; + } +} + +static void print_header(args_t *args) +{ + int i; + fprintf(bcftools_stdout, "# This file was produced by bcftools stats (%s+htslib-%s) and can be plotted using plot-vcfstats.\n", bcftools_version(),hts_version()); + fprintf(bcftools_stdout, "# The command line was:\tbcftools %s ", args->argv[0]); + for (i=1; iargc; i++) + fprintf(bcftools_stdout, " %s",args->argv[i]); + fprintf(bcftools_stdout, "\n#\n"); + + fprintf(bcftools_stdout, "# Definition of sets:\n# ID\t[2]id\t[3]tab-separated file names\n"); + if ( args->files->nreaders==1 ) + { + const char *fname = strcmp("-",args->files->readers[0].fname) ? args->files->readers[0].fname : ""; + if ( args->split_by_id ) + { + fprintf(bcftools_stdout, "ID\t0\t%s:known (sites with ID different from \".\")\n", fname); + fprintf(bcftools_stdout, "ID\t1\t%s:novel (sites where ID column is \".\")\n", fname); + } + else + fprintf(bcftools_stdout, "ID\t0\t%s\n", fname); + } + else + { + const char *fname0 = strcmp("-",args->files->readers[0].fname) ? args->files->readers[0].fname : ""; + const char *fname1 = strcmp("-",args->files->readers[1].fname) ? args->files->readers[1].fname : ""; + fprintf(bcftools_stdout, "ID\t0\t%s\n", fname0); + fprintf(bcftools_stdout, "ID\t1\t%s\n", fname1); + fprintf(bcftools_stdout, "ID\t2\t%s\t%s\n", fname0,fname1); + + if ( args->verbose_sites ) + { + fprintf(bcftools_stdout, + "# Verbose per-site discordance output.\n" + "# PSD\t[2]CHROM\t[3]POS\t[4]Number of matches\t[5]Number of mismatches\t[6]NRD\n"); + fprintf(bcftools_stdout, + "# Verbose per-site and per-sample output. Genotype codes: %d:HomRefRef, %d:HomAltAlt, %d:HetAltRef, %d:HetAltAlt, %d:haploidRef, %d:haploidAlt\n" + "# DBG\t[2]CHROM\t[3]POS\t[4]Sample\t[5]GT in %s\t[6]GT in %s\n", + GT_HOM_RR, GT_HOM_AA, GT_HET_RA, GT_HET_AA, GT_HAPL_R, GT_HAPL_A, fname0,fname1); + } + } +} + +#define T2S(x) type2stats[x] +static void print_stats(args_t *args) +{ + int i, j,k, id; + fprintf(bcftools_stdout, "# SN, Summary numbers:\n"); + fprintf(bcftools_stdout, "# number of records .. number of data rows in the VCF\n"); + fprintf(bcftools_stdout, "# number of no-ALTs .. reference-only sites, ALT is either \".\" or identical to REF\n"); + fprintf(bcftools_stdout, "# number of SNPs .. number of rows with a SNP\n"); + fprintf(bcftools_stdout, "# number of MNPs .. number of rows with a MNP, such as CC>TT\n"); + fprintf(bcftools_stdout, "# number of indels .. number of rows with an indel\n"); + fprintf(bcftools_stdout, "# number of others .. number of rows with other type, for example a symbolic allele or\n"); + fprintf(bcftools_stdout, "# a complex substitution, such as ACT>TCGA\n"); + fprintf(bcftools_stdout, "# number of multiallelic sites .. number of rows with multiple alternate alleles\n"); + fprintf(bcftools_stdout, "# number of multiallelic SNP sites .. number of rows with multiple alternate alleles, all SNPs\n"); + fprintf(bcftools_stdout, "# \n"); + fprintf(bcftools_stdout, "# Note that rows containing multiple types will be counted multiple times, in each\n"); + fprintf(bcftools_stdout, "# counter. For example, a row with a SNP and an indel increments both the SNP and\n"); + fprintf(bcftools_stdout, "# the indel counter.\n"); + fprintf(bcftools_stdout, "# \n"); + fprintf(bcftools_stdout, "# SN\t[2]id\t[3]key\t[4]value\n"); + for (id=0; idfiles->nreaders; id++) + fprintf(bcftools_stdout, "SN\t%d\tnumber of samples:\t%d\n", id, bcf_hdr_nsamples(args->files->readers[id].header)); + for (id=0; idnstats; id++) + { + stats_t *stats = &args->stats[id]; + fprintf(bcftools_stdout, "SN\t%d\tnumber of records:\t%d\n", id, stats->n_records); + fprintf(bcftools_stdout, "SN\t%d\tnumber of no-ALTs:\t%d\n", id, stats->n_noalts); + fprintf(bcftools_stdout, "SN\t%d\tnumber of SNPs:\t%d\n", id, stats->n_snps); + fprintf(bcftools_stdout, "SN\t%d\tnumber of MNPs:\t%d\n", id, stats->n_mnps); + fprintf(bcftools_stdout, "SN\t%d\tnumber of indels:\t%d\n", id, stats->n_indels); + fprintf(bcftools_stdout, "SN\t%d\tnumber of others:\t%d\n", id, stats->n_others); + fprintf(bcftools_stdout, "SN\t%d\tnumber of multiallelic sites:\t%d\n", id, stats->n_mals); + fprintf(bcftools_stdout, "SN\t%d\tnumber of multiallelic SNP sites:\t%d\n", id, stats->n_snp_mals); + } + fprintf(bcftools_stdout, "# TSTV, transitions/transversions:\n# TSTV\t[2]id\t[3]ts\t[4]tv\t[5]ts/tv\t[6]ts (1st ALT)\t[7]tv (1st ALT)\t[8]ts/tv (1st ALT)\n"); + for (id=0; idnstats; id++) + { + stats_t *stats = &args->stats[id]; + int ts=0,tv=0; + for (i=0; im_af; i++) { ts += stats->af_ts[i]; tv += stats->af_tv[i]; } + fprintf(bcftools_stdout, "TSTV\t%d\t%d\t%d\t%.2f\t%d\t%d\t%.2f\n", id,ts,tv,tv?(float)ts/tv:0, stats->ts_alt1,stats->tv_alt1,stats->tv_alt1?(float)stats->ts_alt1/stats->tv_alt1:0); + } + if ( args->exons_fname ) + { + fprintf(bcftools_stdout, "# FS, Indel frameshifts:\n# FS\t[2]id\t[3]in-frame\t[4]out-frame\t[5]not applicable\t[6]out/(in+out) ratio\t[7]in-frame (1st ALT)\t[8]out-frame (1st ALT)\t[9]not applicable (1st ALT)\t[10]out/(in+out) ratio (1st ALT)\n"); + for (id=0; idnstats; id++) + { + int in=args->stats[id].in_frame, out=args->stats[id].out_frame, na=args->stats[id].na_frame; + int in1=args->stats[id].in_frame_alt1, out1=args->stats[id].out_frame_alt1, na1=args->stats[id].na_frame_alt1; + fprintf(bcftools_stdout, "FS\t%d\t%d\t%d\t%d\t%.2f\t%d\t%d\t%d\t%.2f\n", id, in,out,na,out?(float)out/(in+out):0,in1,out1,na1,out1?(float)out1/(in1+out1):0); + } + } + if ( args->indel_ctx ) + { + fprintf(bcftools_stdout, "# ICS, Indel context summary:\n# ICS\t[2]id\t[3]repeat-consistent\t[4]repeat-inconsistent\t[5]not applicable\t[6]c/(c+i) ratio\n"); + for (id=0; idnstats; id++) + { + int nc = 0, ni = 0, na = args->stats[id].n_repeat_na; + for (i=0; istats[id].n_repeat[i][0] + args->stats[id].n_repeat[i][2]; + ni += args->stats[id].n_repeat[i][1] + args->stats[id].n_repeat[i][3]; + } + fprintf(bcftools_stdout, "ICS\t%d\t%d\t%d\t%d\t%.4f\n", id, nc,ni,na,nc+ni ? (float)nc/(nc+ni) : 0.0); + } + fprintf(bcftools_stdout, "# ICL, Indel context by length:\n# ICL\t[2]id\t[3]length of repeat element\t[4]repeat-consistent deletions)\t[5]repeat-inconsistent deletions\t[6]consistent insertions\t[7]inconsistent insertions\t[8]c/(c+i) ratio\n"); + for (id=0; idnstats; id++) + { + for (i=1; istats[id].n_repeat[i][0]+args->stats[id].n_repeat[i][2], ni = args->stats[id].n_repeat[i][1]+args->stats[id].n_repeat[i][3]; + fprintf(bcftools_stdout, "ICL\t%d\t%d\t%d\t%d\t%d\t%d\t%.4f\n", id, i+1, + args->stats[id].n_repeat[i][0],args->stats[id].n_repeat[i][1],args->stats[id].n_repeat[i][2],args->stats[id].n_repeat[i][3], + nc+ni ? (float)nc/(nc+ni) : 0.0); + } + } + } + fprintf(bcftools_stdout, "# SiS, Singleton stats:\n# SiS\t[2]id\t[3]allele count\t[4]number of SNPs\t[5]number of transitions\t[6]number of transversions\t[7]number of indels\t[8]repeat-consistent\t[9]repeat-inconsistent\t[10]not applicable\n"); + for (id=0; idnstats; id++) + { + stats_t *stats = &args->stats[id]; + fprintf(bcftools_stdout, "SiS\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n", id,1,stats->af_snps[0],stats->af_ts[0],stats->af_tv[0], + stats->af_repeats[0][0]+stats->af_repeats[1][0]+stats->af_repeats[2][0],stats->af_repeats[0][0],stats->af_repeats[1][0],stats->af_repeats[2][0]); + // put the singletons stats into the first AF bin, note that not all of the stats is transferred (i.e. nrd mismatches) + stats->af_snps[1] += stats->af_snps[0]; + stats->af_ts[1] += stats->af_ts[0]; + stats->af_tv[1] += stats->af_tv[0]; + stats->af_repeats[0][1] += stats->af_repeats[0][0]; + stats->af_repeats[1][1] += stats->af_repeats[1][0]; + stats->af_repeats[2][1] += stats->af_repeats[2][0]; + } + // move the singletons stats into the first AF bin, singleton stats was collected separately because of init_iaf + if ( args->af_gts_snps ) + { + args->af_gts_snps[1].y += args->af_gts_snps[0].y; + args->af_gts_snps[1].yy += args->af_gts_snps[0].yy; + args->af_gts_snps[1].xx += args->af_gts_snps[0].xx; + args->af_gts_snps[1].yx += args->af_gts_snps[0].yx; + args->af_gts_snps[1].n += args->af_gts_snps[0].n; + } + if ( args->af_gts_indels ) + { + args->af_gts_indels[1].y += args->af_gts_indels[0].y; + args->af_gts_indels[1].yy += args->af_gts_indels[0].yy; + args->af_gts_indels[1].xx += args->af_gts_indels[0].xx; + args->af_gts_indels[1].yx += args->af_gts_indels[0].yx; + args->af_gts_indels[1].n += args->af_gts_indels[0].n; + } + + fprintf(bcftools_stdout, "# AF, Stats by non-reference allele frequency:\n# AF\t[2]id\t[3]allele frequency\t[4]number of SNPs\t[5]number of transitions\t[6]number of transversions\t[7]number of indels\t[8]repeat-consistent\t[9]repeat-inconsistent\t[10]not applicable\n"); + for (id=0; idnstats; id++) + { + stats_t *stats = &args->stats[id]; + for (i=1; im_af; i++) // note that af[1] now contains also af[0], see SiS stats output above + { + if ( stats->af_snps[i]+stats->af_ts[i]+stats->af_tv[i]+stats->af_repeats[0][i]+stats->af_repeats[1][i]+stats->af_repeats[2][i] == 0 ) continue; + double af = args->af_bins ? (bin_get_value(args->af_bins,i)+bin_get_value(args->af_bins,i-1))*0.5 : (double)(i-1)/(args->m_af-1); + fprintf(bcftools_stdout, "AF\t%d\t%f\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n", id,af,stats->af_snps[i],stats->af_ts[i],stats->af_tv[i], + stats->af_repeats[0][i]+stats->af_repeats[1][i]+stats->af_repeats[2][i],stats->af_repeats[0][i],stats->af_repeats[1][i],stats->af_repeats[2][i]); + } + } + #if QUAL_STATS + fprintf(bcftools_stdout, "# QUAL, Stats by quality:\n# QUAL\t[2]id\t[3]Quality\t[4]number of SNPs\t[5]number of transitions (1st ALT)\t[6]number of transversions (1st ALT)\t[7]number of indels\n"); + for (id=0; idnstats; id++) + { + stats_t *stats = &args->stats[id]; + for (i=0; im_qual; i++) + { + if ( stats->qual_snps[i]+stats->qual_ts[i]+stats->qual_tv[i]+stats->qual_indels[i] == 0 ) continue; + fprintf(bcftools_stdout, "QUAL\t%d\t%d\t%d\t%d\t%d\t%d\n", id,i,stats->qual_snps[i],stats->qual_ts[i],stats->qual_tv[i],stats->qual_indels[i]); + } + } + #endif + for (i=0; inusr; i++) + { + fprintf(bcftools_stdout, "# USR:%s, Stats by %s:\n# USR:%s\t[2]id\t[3]%s\t[4]number of SNPs\t[5]number of transitions (1st ALT)\t[6]number of transversions (1st ALT)\n", + args->usr[i].tag,args->usr[i].tag,args->usr[i].tag,args->usr[i].tag); + for (id=0; idnstats; id++) + { + user_stats_t *usr = &args->stats[id].usr[i]; + int j; + for (j=0; jnbins; j++) + { + if ( usr->vals_ts[j]+usr->vals_tv[j] == 0 ) continue; // skip empty bins + float val = usr->min + (usr->max - usr->min)*j/(usr->nbins-1); + const char *fmt = usr->type==BCF_HT_REAL ? "USR:%s\t%d\t%e\t%d\t%d\t%d\n" : "USR:%s\t%d\t%.0f\t%d\t%d\t%d\n"; + fprintf(bcftools_stdout, fmt,usr->tag,id,val,usr->vals_ts[j]+usr->vals_tv[j],usr->vals_ts[j],usr->vals_tv[j]); + } + } + } + fprintf(bcftools_stdout, "# IDD, InDel distribution:\n# IDD\t[2]id\t[3]length (deletions negative)\t[4]count\n"); + for (id=0; idnstats; id++) + { + stats_t *stats = &args->stats[id]; + for (i=stats->m_indel-1; i>=0; i--) + if ( stats->deletions[i] ) fprintf(bcftools_stdout, "IDD\t%d\t%d\t%d\n", id,-i-1,stats->deletions[i]); + for (i=0; im_indel; i++) + if ( stats->insertions[i] ) fprintf(bcftools_stdout, "IDD\t%d\t%d\t%d\n", id,i+1,stats->insertions[i]); + } + fprintf(bcftools_stdout, "# ST, Substitution types:\n# ST\t[2]id\t[3]type\t[4]count\n"); + for (id=0; idnstats; id++) + { + int t; + for (t=0; t<15; t++) + { + if ( t>>2 == (t&3) ) continue; + fprintf(bcftools_stdout, "ST\t%d\t%c>%c\t%d\n", id, bcf_int2acgt(t>>2),bcf_int2acgt(t&3),args->stats[id].subst[t]); + } + } + if ( args->files->nreaders>1 && args->files->n_smpl ) + { + fprintf(bcftools_stdout, "SN\t%d\tnumber of samples:\t%d\n", 2, args->files->n_smpl); + + int x; + for (x=0; x<2; x++) // x=0: snps, x=1: indels + { + gtcmp_t *stats; + if ( x==0 ) + { + fprintf(bcftools_stdout, "# GCsAF, Genotype concordance by non-reference allele frequency (SNPs)\n# GCsAF\t[2]id\t[3]allele frequency\t[4]RR Hom matches\t[5]RA Het matches\t[6]AA Hom matches\t[7]RR Hom mismatches\t[8]RA Het mismatches\t[9]AA Hom mismatches\t[10]dosage r-squared\t[11]number of genotypes\n"); + stats = args->af_gts_snps; + } + else + { + fprintf(bcftools_stdout, "# GCiAF, Genotype concordance by non-reference allele frequency (indels)\n# GCiAF\t[2]id\t[3]allele frequency\t[4]RR Hom matches\t[5]RA Het matches\t[6]AA Hom matches\t[7]RR Hom mismatches\t[8]RA Het mismatches\t[9]AA Hom mismatches\t[10]dosage r-squared\t[11]number of genotypes\n"); + stats = args->af_gts_indels; + } + uint64_t nrd_m[4] = {0,0,0,0}, nrd_mm[4] = {0,0,0,0}; // across all bins + for (i=0; im_af; i++) + { + int n = 0; + uint64_t m[4] = {0,0,0,0}, mm[4] = {0,0,0,0}; // in i-th AF bin + for (j=0; j<4; j++) // rr, ra, aa hom, aa het, ./. + for (k=0; k<4; k++) + { + n += stats[i].gt2gt[j][k]; + if ( j==k ) + { + nrd_m[j] += stats[i].gt2gt[j][k]; + m[j] += stats[i].gt2gt[j][k]; + } + else + { + nrd_mm[j] += stats[i].gt2gt[j][k]; + mm[j] += stats[i].gt2gt[j][k]; + } + } + if ( !i || !n ) continue; // skip singleton stats and empty bins + + // Pearson's r2 + double r2 = 0; + if ( stats[i].n ) + { + r2 = (stats[i].yx - stats[i].x*stats[i].y/stats[i].n); + r2 /= sqrt((stats[i].xx - stats[i].x*stats[i].x/stats[i].n) * (stats[i].yy - stats[i].y*stats[i].y/stats[i].n)); + r2 *= r2; + } + double af = args->af_bins ? (bin_get_value(args->af_bins,i)+bin_get_value(args->af_bins,i-1))*0.5 : (double)(i-1)/(args->m_af-1); + fprintf(bcftools_stdout, "GC%cAF\t2\t%f", x==0 ? 's' : 'i', af); + fprintf(bcftools_stdout, "\t%"PRId64"\t%"PRId64"\t%"PRId64"", m[T2S(GT_HOM_RR)],m[T2S(GT_HET_RA)],m[T2S(GT_HOM_AA)]); + fprintf(bcftools_stdout, "\t%"PRId64"\t%"PRId64"\t%"PRId64"", mm[T2S(GT_HOM_RR)],mm[T2S(GT_HET_RA)],mm[T2S(GT_HOM_AA)]); + if ( stats[i].n && !isnan(r2) ) fprintf(bcftools_stdout, "\t%f", r2); + else fprintf(bcftools_stdout, "\t"NA_STRING); + fprintf(bcftools_stdout, "\t%.0f\n", stats[i].n); + } + + if ( x==0 ) + { + fprintf(bcftools_stdout, "# NRD and discordance is calculated as follows:\n"); + fprintf(bcftools_stdout, "# m .. number of matches\n"); + fprintf(bcftools_stdout, "# x .. number of mismatches\n"); + fprintf(bcftools_stdout, "# NRD = (xRR + xRA + xAA) / (xRR + xRA + xAA + mRA + mAA)\n"); + fprintf(bcftools_stdout, "# RR discordance = xRR / (xRR + mRR)\n"); + fprintf(bcftools_stdout, "# RA discordance = xRA / (xRA + mRA)\n"); + fprintf(bcftools_stdout, "# AA discordance = xAA / (xAA + mAA)\n"); + fprintf(bcftools_stdout, "# Non-Reference Discordance (NRD), SNPs\n# NRDs\t[2]id\t[3]NRD\t[4]Ref/Ref discordance\t[5]Ref/Alt discordance\t[6]Alt/Alt discordance\n"); + } + else + fprintf(bcftools_stdout, "# Non-Reference Discordance (NRD), indels\n# NRDi\t[2]id\t[3]NRD\t[4]Ref/Ref discordance\t[5]Ref/Alt discordance\t[6]Alt/Alt discordance\n"); + uint64_t m = nrd_m[T2S(GT_HET_RA)] + nrd_m[T2S(GT_HOM_AA)] + nrd_m[T2S(GT_HET_AA)]; + uint64_t mm = nrd_mm[T2S(GT_HOM_RR)] + nrd_mm[T2S(GT_HET_RA)] + nrd_mm[T2S(GT_HOM_AA)] + nrd_mm[T2S(GT_HET_AA)]; + fprintf(bcftools_stdout, "NRD%c\t2\t%f\t%f\t%f\t%f\n", x==0 ? 's' : 'i', + m+mm ? mm*100.0/(m+mm) : 0, + nrd_m[T2S(GT_HOM_RR)]+nrd_mm[T2S(GT_HOM_RR)] ? nrd_mm[T2S(GT_HOM_RR)]*100.0/(nrd_m[T2S(GT_HOM_RR)]+nrd_mm[T2S(GT_HOM_RR)]) : 0, + nrd_m[T2S(GT_HET_RA)]+nrd_mm[T2S(GT_HET_RA)] ? nrd_mm[T2S(GT_HET_RA)]*100.0/(nrd_m[T2S(GT_HET_RA)]+nrd_mm[T2S(GT_HET_RA)]) : 0, + nrd_m[T2S(GT_HOM_AA)]+nrd_mm[T2S(GT_HOM_AA)] ? nrd_mm[T2S(GT_HOM_AA)]*100.0/(nrd_m[T2S(GT_HOM_AA)]+nrd_mm[T2S(GT_HOM_AA)]) : 0 + ); + } + + for (x=0; x<2; x++) // x=0: snps, x=1: indels + { + gtcmp_t *stats; + if ( x==0 ) + { + fprintf(bcftools_stdout, "# GCsS, Genotype concordance by sample (SNPs)\n# GCsS\t[2]id\t[3]sample\t[4]non-reference discordance rate\t[5]RR Hom matches\t[6]RA Het matches\t[7]AA Hom matches\t[8]RR Hom mismatches\t[9]RA Het mismatches\t[10]AA Hom mismatches\t[11]dosage r-squared\n"); + stats = args->smpl_gts_snps; + } + else + { + fprintf(bcftools_stdout, "# GCiS, Genotype concordance by sample (indels)\n# GCiS\t[2]id\t[3]sample\t[4]non-reference discordance rate\t[5]RR Hom matches\t[6]RA Het matches\t[7]AA Hom matches\t[8]RR Hom mismatches\t[9]RA Het mismatches\t[10]AA Hom mismatches\t[11]dosage r-squared\n"); + stats = args->smpl_gts_indels; + } + for (i=0; ifiles->n_smpl; i++) + { + uint64_t mm = 0, m = stats[i].gt2gt[T2S(GT_HET_RA)][T2S(GT_HET_RA)] + stats[i].gt2gt[T2S(GT_HOM_AA)][T2S(GT_HOM_AA)]; + for (j=0; j<3; j++) + for (k=0; k<3; k++) + if ( j!=k ) mm += stats[i].gt2gt[j][k]; + + // Pearson's r2 + double r2 = 0; + if ( stats[i].n ) + { + r2 = (stats[i].yx - stats[i].x*stats[i].y/stats[i].n); + r2 /= sqrt((stats[i].xx - stats[i].x*stats[i].x/stats[i].n) * (stats[i].yy - stats[i].y*stats[i].y/stats[i].n)); + r2 *= r2; + } + fprintf(bcftools_stdout, "GC%cS\t2\t%s\t%.3f", x==0 ? 's' : 'i', args->files->samples[i], m+mm ? mm*100.0/(m+mm) : 0); + fprintf(bcftools_stdout, "\t%"PRId64"\t%"PRId64"\t%"PRId64"", + stats[i].gt2gt[T2S(GT_HOM_RR)][T2S(GT_HOM_RR)], + stats[i].gt2gt[T2S(GT_HET_RA)][T2S(GT_HET_RA)], + stats[i].gt2gt[T2S(GT_HOM_AA)][T2S(GT_HOM_AA)]); + fprintf(bcftools_stdout, "\t%"PRId64"\t%"PRId64"\t%"PRId64"", + stats[i].gt2gt[T2S(GT_HOM_RR)][T2S(GT_HET_RA)] + stats[i].gt2gt[T2S(GT_HOM_RR)][T2S(GT_HOM_AA)], + stats[i].gt2gt[T2S(GT_HET_RA)][T2S(GT_HOM_RR)] + stats[i].gt2gt[T2S(GT_HET_RA)][T2S(GT_HOM_AA)], + stats[i].gt2gt[T2S(GT_HOM_AA)][T2S(GT_HOM_RR)] + stats[i].gt2gt[T2S(GT_HOM_AA)][T2S(GT_HET_RA)]); + if ( stats[i].n && !isnan(r2) ) fprintf(bcftools_stdout, "\t%f\n", r2); + else fprintf(bcftools_stdout, "\t"NA_STRING"\n"); + } + } + for (x=0; x<2; x++) // x=0: snps, x=1: indels + { + //printf("# GCiS, Genotype concordance by sample (indels)\n# GCiS\t[2]id\t[3]sample\t[4]non-reference discordance rate\t[5]RR Hom matches\t[6]RA Het matches\t[7]AA Hom matches\t[8]RR Hom mismatches\t[9]RA Het mismatches\t[10]AA Hom mismatches\t[11]dosage r-squared\n"); + + gtcmp_t *stats; + if ( x==0 ) + { + fprintf(bcftools_stdout, "# GCTs, Genotype concordance table (SNPs)\n# GCTs"); + stats = args->smpl_gts_snps; + } + else + { + fprintf(bcftools_stdout, "# GCTi, Genotype concordance table (indels)\n# GCTi"); + stats = args->smpl_gts_indels; + } + i = 1; + fprintf(bcftools_stdout, "\t[%d]sample", ++i); + fprintf(bcftools_stdout, "\t[%d]RR Hom -> RR Hom", ++i); + fprintf(bcftools_stdout, "\t[%d]RR Hom -> RA Het", ++i); + fprintf(bcftools_stdout, "\t[%d]RR Hom -> AA Hom", ++i); + fprintf(bcftools_stdout, "\t[%d]RR Hom -> AA Het", ++i); + fprintf(bcftools_stdout, "\t[%d]RR Hom -> missing", ++i); + fprintf(bcftools_stdout, "\t[%d]RA Het -> RR Hom", ++i); + fprintf(bcftools_stdout, "\t[%d]RA Het -> RA Het", ++i); + fprintf(bcftools_stdout, "\t[%d]RA Het -> AA Hom", ++i); + fprintf(bcftools_stdout, "\t[%d]RA Het -> AA Het", ++i); + fprintf(bcftools_stdout, "\t[%d]RA Het -> missing", ++i); + fprintf(bcftools_stdout, "\t[%d]AA Hom -> RR Hom", ++i); + fprintf(bcftools_stdout, "\t[%d]AA Hom -> RA Het", ++i); + fprintf(bcftools_stdout, "\t[%d]AA Hom -> AA Hom", ++i); + fprintf(bcftools_stdout, "\t[%d]AA Hom -> AA Het", ++i); + fprintf(bcftools_stdout, "\t[%d]AA Hom -> missing", ++i); + fprintf(bcftools_stdout, "\t[%d]AA Het -> RR Hom", ++i); + fprintf(bcftools_stdout, "\t[%d]AA Het -> RA Het", ++i); + fprintf(bcftools_stdout, "\t[%d]AA Het -> AA Hom", ++i); + fprintf(bcftools_stdout, "\t[%d]AA Het -> AA Het", ++i); + fprintf(bcftools_stdout, "\t[%d]AA Het -> missing", ++i); + fprintf(bcftools_stdout, "\t[%d]missing -> RR Hom", ++i); + fprintf(bcftools_stdout, "\t[%d]missing -> RA Het", ++i); + fprintf(bcftools_stdout, "\t[%d]missing -> AA Hom", ++i); + fprintf(bcftools_stdout, "\t[%d]missing -> AA Het", ++i); + fprintf(bcftools_stdout, "\t[%d]missing -> missing\n", ++i); + + for (i=0; ifiles->n_smpl; i++) + { + fprintf(bcftools_stdout, "GCT%c\t%s", x==0 ? 's' : 'i', args->files->samples[i]); + for (j=0; j<5; j++) + for (k=0; k<5; k++) + fprintf(bcftools_stdout, "\t%"PRId64, stats[i].gt2gt[j][k]); + fprintf(bcftools_stdout, "\n"); + } + } + } + + fprintf(bcftools_stdout, "# DP, Depth distribution\n# DP\t[2]id\t[3]bin\t[4]number of genotypes\t[5]fraction of genotypes (%%)\t[6]number of sites\t[7]fraction of sites (%%)\n"); + for (id=0; idnstats; id++) + { + stats_t *stats = &args->stats[id]; + long unsigned int sum = 0, sum_sites = 0; + for (i=0; idp.m_vals; i++) { sum += stats->dp.vals[i]; sum_sites += stats->dp_sites.vals[i]; } + for (i=0; idp.m_vals; i++) + { + if ( stats->dp.vals[i]==0 && stats->dp_sites.vals[i]==0 ) continue; + fprintf(bcftools_stdout, "DP\t%d\t", id); + if ( i==0 ) fprintf(bcftools_stdout, "<%d", stats->dp.min); + else if ( i+1==stats->dp.m_vals ) fprintf(bcftools_stdout, ">%d", stats->dp.max); + else fprintf(bcftools_stdout, "%d", idist_i2bin(&stats->dp,i)); + fprintf(bcftools_stdout, "\t%"PRId64"\t%f", stats->dp.vals[i], sum ? stats->dp.vals[i]*100./sum : 0); + fprintf(bcftools_stdout, "\t%"PRId64"\t%f\n", stats->dp_sites.vals[i], sum_sites ? stats->dp_sites.vals[i]*100./sum_sites : 0); + } + } + + if ( args->files->n_smpl ) + { + fprintf(bcftools_stdout, "# PSC, Per-sample counts. Note that the ref/het/hom counts include only SNPs, for indels see PSI. Haploid counts include both SNPs and indels.\n"); + fprintf(bcftools_stdout, "# PSC\t[2]id\t[3]sample\t[4]nRefHom\t[5]nNonRefHom\t[6]nHets\t[7]nTransitions\t[8]nTransversions\t[9]nIndels\t[10]average depth\t[11]nSingletons" + "\t[12]nHapRef\t[13]nHapAlt\n"); + for (id=0; idnstats; id++) + { + stats_t *stats = &args->stats[id]; + for (i=0; ifiles->n_smpl; i++) + { + float dp = stats->smpl_ndp[i] ? stats->smpl_dp[i]/(float)stats->smpl_ndp[i] : 0; + fprintf(bcftools_stdout, "PSC\t%d\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%.1f\t%d\t%d\t%d\n", id,args->files->samples[i], + stats->smpl_homRR[i], stats->smpl_homAA[i], stats->smpl_hets[i], stats->smpl_ts[i], + stats->smpl_tv[i], stats->smpl_indels[i],dp, stats->smpl_sngl[i], stats->smpl_hapRef[i], stats->smpl_hapAlt[i]); + } + } + + + fprintf(bcftools_stdout, "# PSI, Per-Sample Indels\n# PSI\t[2]id\t[3]sample\t[4]in-frame\t[5]out-frame\t[6]not applicable\t[7]out/(in+out) ratio\t[8]nHets\t[9]nAA\n"); + for (id=0; idnstats; id++) + { + stats_t *stats = &args->stats[id]; + for (i=0; ifiles->n_smpl; i++) + { + int na = 0, in = 0, out = 0; + if ( args->exons ) + { + na = stats->smpl_frm_shifts[i*3 + 0]; + in = stats->smpl_frm_shifts[i*3 + 1]; + out = stats->smpl_frm_shifts[i*3 + 2]; + } + int nhom = stats->smpl_indel_homs[i]; + int nhet = stats->smpl_indel_hets[i]; + fprintf(bcftools_stdout, "PSI\t%d\t%s\t%d\t%d\t%d\t%.2f\t%d\t%d\n", id,args->files->samples[i], in,out,na,in+out?1.0*out/(in+out):0,nhet,nhom); + } + } + + #ifdef HWE_STATS + fprintf(bcftools_stdout, "# HWE\n# HWE\t[2]id\t[3]1st ALT allele frequency\t[4]Number of observations\t[5]25th percentile\t[6]median\t[7]75th percentile\n"); + for (id=0; idnstats; id++) + { + stats_t *stats = &args->stats[id]; + for (i=0; inaf_hwe; i++) stats->af_hwe[i+args->naf_hwe] += stats->af_hwe[i]; // singletons + for (i=1; im_af; i++) + { + unsigned int sum_tot = 0, sum_tmp = 0; + int j, *ptr = &stats->af_hwe[i*args->naf_hwe]; + for (j=0; jnaf_hwe; j++) sum_tot += ptr[j]; + if ( !sum_tot ) continue; + + double af = args->af_bins ? (bin_get_value(args->af_bins,i)+bin_get_value(args->af_bins,i-1))*0.5 : (double)(i-1)/(args->m_af-1); + + int nprn = 3; + fprintf(bcftools_stdout, "HWE\t%d\t%f\t%d",id,af,sum_tot); + for (j=0; jnaf_hwe; j++) + { + sum_tmp += ptr[j]; + float frac = (float)sum_tmp/sum_tot; + if ( frac >= 0.75 ) + { + while (nprn>0) { fprintf(bcftools_stdout, "\t%f", (float)j/args->naf_hwe); nprn--; } + break; + } + if ( frac >= 0.5 ) + { + while (nprn>1) { fprintf(bcftools_stdout, "\t%f", (float)j/args->naf_hwe); nprn--; } + continue; + } + if ( frac >= 0.25 ) + { + while (nprn>2) { fprintf(bcftools_stdout, "\t%f", (float)j/args->naf_hwe); nprn--; } + } + } + assert(nprn==0); + fprintf(bcftools_stdout, "\n"); + } + } + #endif + } +} + +static void usage(void) +{ + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "About: Parses VCF or BCF and produces stats which can be plotted using plot-vcfstats.\n"); + fprintf(bcftools_stderr, " When two files are given, the program generates separate stats for intersection\n"); + fprintf(bcftools_stderr, " and the complements. By default only sites are compared, -s/-S must given to include\n"); + fprintf(bcftools_stderr, " also sample columns.\n"); + fprintf(bcftools_stderr, "Usage: bcftools stats [options] []\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Options:\n"); + fprintf(bcftools_stderr, " --af-bins allele frequency bins, a list (0.1,0.5,1) or a file (0.1\\n0.5\\n1)\n"); + fprintf(bcftools_stderr, " --af-tag allele frequency tag to use, by default estimated from AN,AC or GT\n"); + fprintf(bcftools_stderr, " -1, --1st-allele-only include only 1st allele at multiallelic sites\n"); + fprintf(bcftools_stderr, " -c, --collapse treat as identical records with , see man page for details [none]\n"); + fprintf(bcftools_stderr, " -d, --depth depth distribution: min,max,bin size [0,500,1]\n"); + fprintf(bcftools_stderr, " -e, --exclude exclude sites for which the expression is true (see man page for details)\n"); + fprintf(bcftools_stderr, " -E, --exons tab-delimited file with exons for indel frameshifts (chr,from,to; 1-based, inclusive, bgzip compressed)\n"); + fprintf(bcftools_stderr, " -f, --apply-filters require at least one of the listed FILTER strings (e.g. \"PASS,.\")\n"); + fprintf(bcftools_stderr, " -F, --fasta-ref faidx indexed reference sequence file to determine INDEL context\n"); + fprintf(bcftools_stderr, " -i, --include select sites for which the expression is true (see man page for details)\n"); + fprintf(bcftools_stderr, " -I, --split-by-ID collect stats for sites with ID separately (known vs novel)\n"); + fprintf(bcftools_stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(bcftools_stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(bcftools_stderr, " -s, --samples list of samples for sample stats, \"-\" to include all samples\n"); + fprintf(bcftools_stderr, " -S, --samples-file file of samples to include\n"); + fprintf(bcftools_stderr, " -t, --targets similar to -r but streams rather than index-jumps\n"); + fprintf(bcftools_stderr, " -T, --targets-file similar to -R but streams rather than index-jumps\n"); + fprintf(bcftools_stderr, " -u, --user-tstv collect Ts/Tv stats for any tag using the given binning [0:1:100]\n"); + fprintf(bcftools_stderr, " --threads number of extra decompression threads [0]\n"); + fprintf(bcftools_stderr, " -v, --verbose produce verbose per-site and per-sample output\n"); + fprintf(bcftools_stderr, "\n"); + exit(1); +} + +int main_vcfstats(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->files = bcf_sr_init(); + args->argc = argc; args->argv = argv; + args->dp_min = 0; args->dp_max = 500; args->dp_step = 1; + int regions_is_file = 0, targets_is_file = 0; + + static struct option loptions[] = + { + {"af-bins",1,0,1}, + {"af-tag",1,0,2}, + {"1st-allele-only",0,0,'1'}, + {"include",1,0,'i'}, + {"exclude",1,0,'e'}, + {"help",0,0,'h'}, + {"collapse",1,0,'c'}, + {"regions",1,0,'r'}, + {"regions-file",1,0,'R'}, + {"verbose",0,0,'v'}, + {"depth",1,0,'d'}, + {"apply-filters",1,0,'f'}, + {"exons",1,0,'E'}, + {"samples",1,0,'s'}, + {"samples-file",1,0,'S'}, + {"split-by-ID",0,0,'I'}, + {"targets",1,0,'t'}, + {"targets-file",1,0,'T'}, + {"fasta-ref",1,0,'F'}, + {"user-tstv",1,0,'u'}, + {"threads",1,0,9}, + {0,0,0,0} + }; + while ((c = getopt_long(argc, argv, "hc:r:R:e:s:S:d:i:t:T:F:f:1u:vIE:",loptions,NULL)) >= 0) { + switch (c) { + case 1 : args->af_bins_list = optarg; break; + case 2 : args->af_tag = optarg; break; + case 'u': add_user_stats(args,optarg); break; + case '1': args->first_allele_only = 1; break; + case 'F': args->ref_fname = optarg; break; + case 't': args->targets_list = optarg; break; + case 'T': args->targets_list = optarg; targets_is_file = 1; break; + case 'c': + if ( !strcmp(optarg,"snps") ) args->files->collapse |= COLLAPSE_SNPS; + else if ( !strcmp(optarg,"indels") ) args->files->collapse |= COLLAPSE_INDELS; + else if ( !strcmp(optarg,"both") ) args->files->collapse |= COLLAPSE_SNPS | COLLAPSE_INDELS; + else if ( !strcmp(optarg,"any") ) args->files->collapse |= COLLAPSE_ANY; + else if ( !strcmp(optarg,"all") ) args->files->collapse |= COLLAPSE_ANY; + else if ( !strcmp(optarg,"some") ) args->files->collapse |= COLLAPSE_SOME; + else if ( !strcmp(optarg,"none") ) args->files->collapse = COLLAPSE_NONE; + else error("The --collapse string \"%s\" not recognised.\n", optarg); + break; + case 'v': args->verbose_sites = 1; break; + case 'd': + if ( sscanf(optarg,"%d,%d,%d",&args->dp_min,&args->dp_max,&args->dp_step)!=3 ) + error("Could not parse --depth %s\n", optarg); + if ( args->dp_min<0 || args->dp_min >= args->dp_max || args->dp_step > args->dp_max - args->dp_min + 1 ) + error("Is this a typo? --depth %s\n", optarg); + break; + case 'f': args->files->apply_filters = optarg; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; regions_is_file = 1; break; + case 'E': args->exons_fname = optarg; break; + case 's': args->samples_list = optarg; break; + case 'S': args->samples_list = optarg; args->samples_is_file = 1; break; + case 'I': args->split_by_id = 1; break; + case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break; + case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break; + case 9 : args->n_threads = strtol(optarg, 0, 0); break; + case 'h': + case '?': usage(); + default: error("Unknown argument: %s\n", optarg); + } + } + char *fname = NULL; + if ( optind==argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin + else usage(); + } + else fname = argv[optind]; + + if ( argc-optind>2 ) usage(); + if ( argc-optind>1 ) + { + args->files->require_index = 1; + if ( args->split_by_id ) error("Only one file can be given with -i.\n"); + } + if ( !args->samples_list ) args->files->max_unpack = BCF_UN_INFO; + if ( args->targets_list && bcf_sr_set_targets(args->files, args->targets_list, targets_is_file, 0)<0 ) + error("Failed to read the targets: %s\n", args->targets_list); + if ( args->regions_list && bcf_sr_set_regions(args->files, args->regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + if ( args->n_threads && bcf_sr_set_threads(args->files, args->n_threads)<0) + error("Failed to create threads\n"); + + while (fname) + { + if ( !bcf_sr_add_reader(args->files, fname) ) + error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); + fname = ++optind < argc ? argv[optind] : NULL; + } + + init_stats(args); + print_header(args); + do_vcf_stats(args); + print_stats(args); + destroy_stats(args); + bcf_sr_destroy(args->files); + free(args); + return 0; +} + diff --git a/bcftools/vcfview.c b/bcftools/vcfview.c new file mode 100644 index 0000000..645cc8a --- /dev/null +++ b/bcftools/vcfview.c @@ -0,0 +1,764 @@ +/* vcfview.c -- VCF/BCF conversion, view, subset and filter VCF/BCF files. + + Copyright (C) 2013-2014 Genome Research Ltd. + + Author: Shane McCarthy + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "filter.h" +#include "htslib/khash_str2int.h" + +#define FLT_INCLUDE 1 +#define FLT_EXCLUDE 2 + +#define ALLELE_NONREF 1 +#define ALLELE_MINOR 2 +#define ALLELE_ALT1 3 +#define ALLELE_MAJOR 4 +#define ALLELE_NONMAJOR 5 + +#define GT_NEED_HOM 1 +#define GT_NEED_HET 2 +#define GT_NO_HOM 3 +#define GT_NO_HET 4 +#define GT_NEED_MISSING 5 +#define GT_NO_MISSING 6 + +typedef struct _args_t +{ + filter_t *filter; + char *filter_str; + int filter_logic; // one of FLT_INCLUDE/FLT_EXCLUDE (-i or -e) + + bcf_srs_t *files; + bcf_hdr_t *hdr, *hnull, *hsub; // original header, sites-only header, subset header + char **argv, *format, *sample_names, *subset_fname, *targets_list, *regions_list; + int argc, clevel, n_threads, output_type, print_header, update_info, header_only, n_samples, *imap, calc_ac; + int trim_alts, sites_only, known, novel, min_alleles, max_alleles, private_vars, uncalled, phased; + int min_ac, min_ac_type, max_ac, max_ac_type, min_af_type, max_af_type, gt_type; + int *ac, mac; + float min_af, max_af; + char *fn_ref, *fn_out, **samples; + int sample_is_file, force_samples; + char *include_types, *exclude_types; + int include, exclude; + int record_cmd_line; + htsFile *out; +} +args_t; + +static void init_data(args_t *args) +{ + int i; + args->hdr = args->files->readers[0].header; + + if (args->calc_ac && args->update_info) + { + bcf_hdr_append(args->hdr,"##INFO="); + bcf_hdr_append(args->hdr,"##INFO="); + } + if (args->record_cmd_line) bcf_hdr_append_version(args->hdr, args->argc, args->argv, "bcftools_view"); + else bcf_hdr_sync(args->hdr); + + // setup sample data + if (args->sample_names) + { + void *hdr_samples = khash_str2int_init(); + for (i=0; ihdr); i++) + khash_str2int_inc(hdr_samples, bcf_hdr_int2id(args->hdr,BCF_DT_SAMPLE,i)); + + void *exclude = (args->sample_names[0]=='^') ? khash_str2int_init() : NULL; + int nsmpl; + char **smpl = NULL; + args->samples = NULL; args->n_samples = 0; + smpl = hts_readlist(exclude ? &args->sample_names[1] : args->sample_names, args->sample_is_file, &nsmpl); + if ( !smpl ) + { + error("Could not read the list: \"%s\"\n", exclude ? &args->sample_names[1] : args->sample_names); + } + + if ( exclude ) + { + for (i=0; iforce_samples) { + fprintf(stderr, "Warn: exclude called for sample that does not exist in header: \"%s\"... skipping\n", smpl[i]); + } else { + error("Error: exclude called for sample that does not exist in header: \"%s\". Use \"--force-samples\" to ignore this error.\n", smpl[i]); + } + } + khash_str2int_inc(exclude, smpl[i]); + } + + for (i=0; ihdr); i++) + { + if ( exclude && khash_str2int_has_key(exclude,bcf_hdr_int2id(args->hdr,BCF_DT_SAMPLE,i)) ) continue; + args->samples = (char**) realloc(args->samples, (args->n_samples+1)*sizeof(const char*)); + args->samples[args->n_samples++] = strdup(bcf_hdr_int2id(args->hdr,BCF_DT_SAMPLE,i)); + } + khash_str2int_destroy(exclude); + } + else + { + for (i=0; iforce_samples) { + fprintf(stderr, "Warn: subset called for sample that does not exist in header: \"%s\"... skipping\n", smpl[i]); + continue; + } else { + error("Error: subset called for sample that does not exist in header: \"%s\". Use \"--force-samples\" to ignore this error.\n", smpl[i]); + } + } + args->samples = (char**) realloc(args->samples, (args->n_samples+1)*sizeof(const char*)); + args->samples[args->n_samples++] = strdup(smpl[i]); + } + } + for (i=0; in_samples == 0) { + fprintf(stderr, "Warn: subsetting has removed all samples\n"); + args->sites_only = 1; + } + } + + if (args->n_samples) + args->imap = (int*)malloc(args->n_samples * sizeof(int)); + + // determine variant types to include/exclude + if (args->include_types || args->exclude_types) { + if (args->include_types && args->exclude_types) { + fprintf(stderr, "Error: only supply one of --include-types, --exclude-types options\n"); + exit(1); + } + char **type_list = 0; + int m = 0, n = 0; + const char *q, *p; + for (q = p = args->include_types ? args->include_types : args->exclude_types;; ++p) { + if (*p == ',' || *p == 0) { + if (m == n) { + m = m? m<<1 : 16; + type_list = (char**)realloc(type_list, m * sizeof(char*)); + } + type_list[n] = (char*)calloc(p - q + 1, 1); + strncpy(type_list[n++], q, p - q); + q = p + 1; + if (*p == 0) break; + } + } + type_list = (char**)realloc(type_list, n * sizeof(char*)); + + if (args->include_types) { + args->include = 0; + for (i = 0; i < n; ++i) { + if (strcmp(type_list[i], "snps") == 0) args->include |= VCF_SNP<<1; + else if (strcmp(type_list[i], "indels") == 0) args->include |= VCF_INDEL<<1; + else if (strcmp(type_list[i], "mnps") == 0) args->include |= VCF_MNP<<1; + else if (strcmp(type_list[i], "other") == 0) args->include |= VCF_OTHER<<1; + else if (strcmp(type_list[i], "ref") == 0) args->include |= VCF_OTHER<<1; + else if (strcmp(type_list[i], "bnd") == 0) args->include |= VCF_BND<<1; + else { + fprintf(stderr, "[E::%s] unknown type\n", type_list[i]); + fprintf(stderr, "Accepted types are snps, indels, mnps, other\n"); + exit(1); + } + } + } + if (args->exclude_types) { + args->exclude = 0; + for (i = 0; i < n; ++i) { + if (strcmp(type_list[i], "snps") == 0) args->exclude |= VCF_SNP<<1; + else if (strcmp(type_list[i], "indels") == 0) args->exclude |= VCF_INDEL<<1; + else if (strcmp(type_list[i], "mnps") == 0) args->exclude |= VCF_MNP<<1; + else if (strcmp(type_list[i], "other") == 0) args->exclude |= VCF_OTHER<<1; + else if (strcmp(type_list[i], "ref") == 0) args->exclude |= VCF_OTHER<<1; + else if (strcmp(type_list[i], "bnd") == 0) args->exclude |= VCF_BND<<1; + else { + fprintf(stderr, "[E::%s] unknown type\n", type_list[i]); + fprintf(stderr, "Accepted types are snps, indels, mnps, other\n"); + exit(1); + } + } + } + for (i = 0; i < n; ++i) + free(type_list[i]); + free(type_list); + } + + // setup output + char modew[8]; + strcpy(modew, "w"); + if (args->clevel >= 0 && args->clevel <= 9) sprintf(modew + 1, "%d", args->clevel); + if (args->output_type==FT_BCF) strcat(modew, "bu"); // uncompressed BCF + else if (args->output_type & FT_BCF) strcat(modew, "b"); // compressed BCF + else if (args->output_type & FT_GZ) strcat(modew,"z"); // compressed VCF + args->out = hts_open(args->fn_out ? args->fn_out : "-", modew); + if ( !args->out ) error("%s: %s\n", args->fn_out,strerror(errno)); + if ( args->n_threads > 0) + hts_set_opt(args->out, HTS_OPT_THREAD_POOL, args->files->p); + + // headers: hdr=full header, hsub=subset header, hnull=sites only header + if (args->sites_only){ + args->hnull = bcf_hdr_subset(args->hdr, 0, 0, 0); + bcf_hdr_remove(args->hnull, BCF_HL_FMT, NULL); + } + if (args->n_samples > 0) + { + args->hsub = bcf_hdr_subset(args->hdr, args->n_samples, args->samples, args->imap); + if ( !args->hsub ) error("Error occurred while subsetting samples\n"); + if ( args->n_samples != bcf_hdr_nsamples(args->hsub) ) + { + int i; + for (i=0; in_samples; i++) + if ( args->imap[i]<0 ) error("Error: No such sample: \"%s\"\n", args->samples[i]); + } + } + + if ( args->filter_str ) + args->filter = filter_init(args->hdr, args->filter_str); +} + +static void destroy_data(args_t *args) +{ + int i; + if ( args->imap ) { + for (i = 0; i < args->n_samples; ++i) + free(args->samples[i]); + free(args->samples); + free(args->imap); + } + if (args->hnull) bcf_hdr_destroy(args->hnull); + if (args->hsub) bcf_hdr_destroy(args->hsub); + if ( args->filter ) + filter_destroy(args->filter); + free(args->ac); +} + +// true if all samples are phased. +// haploid genotypes are considered phased +// ./. => not phased, .|. => phased +int bcf_all_phased(const bcf_hdr_t *header, bcf1_t *line) +{ + bcf_unpack(line, BCF_UN_FMT); + bcf_fmt_t *fmt_ptr = bcf_get_fmt(header, line, "GT"); + int all_phased = 1; + if ( fmt_ptr ) + { + int i, isample; + for (isample=0; isamplen_sample; isample++) + { + int sample_phased = 0; + #define BRANCH_INT(type_t,vector_end) { \ + type_t *p = (type_t*) (fmt_ptr->p + isample*fmt_ptr->size); \ + for (i=0; in; i++) \ + { \ + if (fmt_ptr->n == 1 || (p[i] == vector_end && i == 1)) { sample_phased = 1; break; } /* haploid phased by definition */ \ + if ( p[i] == vector_end ) { break; }; /* smaller ploidy */ \ + if ( bcf_gt_is_missing(p[i]) ) continue; /* missing allele */ \ + if ((p[i])&1) { \ + sample_phased = 1; \ + break; \ + } \ + } \ + } + switch (fmt_ptr->type) { + case BCF_BT_INT8: BRANCH_INT(int8_t, bcf_int8_vector_end); break; + case BCF_BT_INT16: BRANCH_INT(int16_t, bcf_int16_vector_end); break; + case BCF_BT_INT32: BRANCH_INT(int32_t, bcf_int32_vector_end); break; + default: fprintf(stderr, "[E::%s] todo: fmt_type %d\n", __func__, fmt_ptr->type); exit(1); break; + } + #undef BRANCH_INT + if (!sample_phased) { + all_phased = 0; + break; + } + } + } + return all_phased; +} + +int subset_vcf(args_t *args, bcf1_t *line) +{ + if ( args->min_alleles && line->n_allele < args->min_alleles ) return 0; // min alleles + if ( args->max_alleles && line->n_allele > args->max_alleles ) return 0; // max alleles + if (args->novel || args->known) + { + if ( args->novel && (line->d.id[0]!='.' || line->d.id[1]!=0) ) return 0; // skip sites which are known, ID != '.' + if ( args->known && line->d.id[0]=='.' && line->d.id[1]==0 ) return 0; // skip sites which are novel, ID == '.' + } + + if (args->include || args->exclude) + { + int line_type = bcf_get_variant_types(line); + if ( args->include && !((line_type<<1) & args->include) ) return 0; // include only given variant types + if ( args->exclude && (line_type<<1) & args->exclude ) return 0; // exclude given variant types + } + + if ( args->filter ) + { + int ret = filter_test(args->filter, line, NULL); + if ( args->filter_logic==FLT_INCLUDE ) { if ( !ret ) return 0; } + else if ( ret ) return 0; + } + + hts_expand(int, line->n_allele, args->mac, args->ac); + int i, an = 0, non_ref_ac = 0; + if (args->calc_ac) { + bcf_calc_ac(args->hdr, line, args->ac, BCF_UN_INFO|BCF_UN_FMT); // get original AC and AN values from INFO field if available, otherwise calculate + for (i=1; in_allele; i++) + non_ref_ac += args->ac[i]; + for (i=0; in_allele; i++) + an += args->ac[i]; + } + + if (args->n_samples) + { + int non_ref_ac_sub = 0, *ac_sub = (int*) calloc(line->n_allele,sizeof(int)); + bcf_subset(args->hdr, line, args->n_samples, args->imap); + if (args->calc_ac) { + bcf_calc_ac(args->hsub, line, ac_sub, BCF_UN_FMT); // recalculate AC and AN + an = 0; + for (i=0; in_allele; i++) { + args->ac[i] = ac_sub[i]; + an += ac_sub[i]; + } + for (i=1; in_allele; i++) + non_ref_ac_sub += ac_sub[i]; + if (args->private_vars) { + if (args->private_vars == FLT_INCLUDE && !(non_ref_ac_sub > 0 && non_ref_ac == non_ref_ac_sub)) { free(ac_sub); return 0; } // select private sites + if (args->private_vars == FLT_EXCLUDE && non_ref_ac_sub > 0 && non_ref_ac == non_ref_ac_sub) { free(ac_sub); return 0; } // exclude private sites + } + non_ref_ac = non_ref_ac_sub; + } + free(ac_sub); + } + + bcf_fmt_t *gt_fmt; + if ( args->gt_type && (gt_fmt=bcf_get_fmt(args->hdr,line,"GT")) ) + { + int nhet = 0, nhom = 0, nmiss = 0; + for (i=0; ihdr); i++) + { + int type = bcf_gt_type(gt_fmt,i,NULL,NULL); + if ( type==GT_HET_RA || type==GT_HET_AA ) + { + if ( args->gt_type==GT_NO_HET ) return 0; + nhet = 1; + } + else if ( type==GT_UNKN ) + { + if ( args->gt_type==GT_NO_MISSING ) return 0; + nmiss = 1; + } + else + { + if ( args->gt_type==GT_NO_HOM ) return 0; + nhom = 1; + } + } + if ( args->gt_type==GT_NEED_HOM && !nhom ) return 0; + else if ( args->gt_type==GT_NEED_HET && !nhet ) return 0; + else if ( args->gt_type==GT_NEED_MISSING && !nmiss ) return 0; + } + + int minor_ac = 0; + int major_ac = 0; + if ( args->calc_ac ) + { + minor_ac = args->ac[0]; + major_ac = args->ac[0]; + for (i=1; in_allele; i++){ + if (args->ac[i] < minor_ac) { minor_ac = args->ac[i]; } + if (args->ac[i] > major_ac) { major_ac = args->ac[i]; } + } + } + + if (args->min_ac!=-1) + { + if (args->min_ac_type == ALLELE_NONREF && args->min_ac>non_ref_ac) return 0; // min AC + else if (args->min_ac_type == ALLELE_MINOR && args->min_ac>minor_ac) return 0; // min minor AC + else if (args->min_ac_type == ALLELE_ALT1 && args->min_ac>args->ac[1]) return 0; // min 1st alternate AC + else if (args->min_ac_type == ALLELE_MAJOR && args->min_ac > major_ac) return 0; // min major AC + else if (args->min_ac_type == ALLELE_NONMAJOR && args->min_ac > an-major_ac) return 0; // min non-major AC + } + if (args->max_ac!=-1) + { + if (args->max_ac_type == ALLELE_NONREF && args->max_acmax_ac_type == ALLELE_MINOR && args->max_acmax_ac_type == ALLELE_ALT1 && args->max_acac[1]) return 0; // max 1st alternate AC + else if (args->max_ac_type == ALLELE_MAJOR && args->max_ac < major_ac) return 0; // max major AC + else if (args->max_ac_type == ALLELE_NONMAJOR && args->max_ac < an-major_ac) return 0; // max non-major AC + } + if (args->min_af!=-1) + { + if (an == 0) return 0; // freq not defined, skip site + if (args->min_af_type == ALLELE_NONREF && args->min_af>non_ref_ac/(double)an) return 0; // min AF + else if (args->min_af_type == ALLELE_MINOR && args->min_af>minor_ac/(double)an) return 0; // min minor AF + else if (args->min_af_type == ALLELE_ALT1 && args->min_af>args->ac[1]/(double)an) return 0; // min 1st alternate AF + else if (args->min_af_type == ALLELE_MAJOR && args->min_af > major_ac/(double)an) return 0; // min major AF + else if (args->min_af_type == ALLELE_NONMAJOR && args->min_af > (an-major_ac)/(double)an) return 0; // min non-major AF + } + if (args->max_af!=-1) + { + if (an == 0) return 0; // freq not defined, skip site + if (args->max_af_type == ALLELE_NONREF && args->max_afmax_af_type == ALLELE_MINOR && args->max_afmax_af_type == ALLELE_ALT1 && args->max_afac[1]/(double)an) return 0; // max 1st alternate AF + else if (args->max_af_type == ALLELE_MAJOR && args->max_af < major_ac/(double)an) return 0; // max major AF + else if (args->max_af_type == ALLELE_NONMAJOR && args->max_af < (an-major_ac)/(double)an) return 0; // max non-major AF + } + if (args->uncalled) { + if (args->uncalled == FLT_INCLUDE && an > 0) return 0; // select uncalled + if (args->uncalled == FLT_EXCLUDE && an == 0) return 0; // skip if uncalled + } + if (args->calc_ac && args->update_info) { + bcf_update_info_int32(args->hdr, line, "AC", &args->ac[1], line->n_allele-1); + bcf_update_info_int32(args->hdr, line, "AN", &an, 1); + } + if (args->trim_alts) + { + int ret = bcf_trim_alleles(args->hsub ? args->hsub : args->hdr, line); + if ( ret<0 ) error("Error: Could not trim alleles at %s:%d\n", bcf_seqname(args->hsub ? args->hsub : args->hdr, line), line->pos+1); + } + if (args->phased) { + int phased = bcf_all_phased(args->hdr, line); + if (args->phased == FLT_INCLUDE && !phased) { return 0; } // skip unphased + if (args->phased == FLT_EXCLUDE && phased) { return 0; } // skip phased + } + if (args->sites_only) bcf_subset(args->hsub ? args->hsub : args->hdr, line, 0, 0); + return 1; +} + +void set_allele_type (int *atype, char *atype_string) +{ + *atype = ALLELE_NONREF; + if (strcmp(atype_string, "minor") == 0) { + *atype = ALLELE_MINOR; + } + else if (strcmp(atype_string, "alt1") == 0) { + *atype = ALLELE_ALT1; + } + else if (strcmp(atype_string, "nref") == 0) { + *atype = ALLELE_NONREF; + } + else if (strcmp(atype_string, "major") == 0) { + *atype = ALLELE_MAJOR; + } + else if (strcmp(atype_string, "nonmajor") == 0) { + *atype = ALLELE_NONMAJOR; + } + else { + error("Error: allele type not recognised. Expected one of nref|alt1|minor|major|nonmajor, got \"%s\".\n", atype_string); + } +} + +static void usage(args_t *args) +{ + fprintf(stderr, "\n"); + fprintf(stderr, "About: VCF/BCF conversion, view, subset and filter VCF/BCF files.\n"); + fprintf(stderr, "Usage: bcftools view [options] [region1 [...]]\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Output options:\n"); + fprintf(stderr, " -G, --drop-genotypes drop individual genotype information (after subsetting if -s option set)\n"); + fprintf(stderr, " -h/H, --header-only/--no-header print the header only/suppress the header in VCF output\n"); + fprintf(stderr, " -l, --compression-level [0-9] compression level: 0 uncompressed, 1 best speed, 9 best compression [%d]\n", args->clevel); + fprintf(stderr, " --no-version do not append version and command line to the header\n"); + fprintf(stderr, " -o, --output-file output file name [stdout]\n"); + fprintf(stderr, " -O, --output-type b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"); + fprintf(stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(stderr, " -t, --targets [^] similar to -r but streams rather than index-jumps. Exclude regions with \"^\" prefix\n"); + fprintf(stderr, " -T, --targets-file [^] similar to -R but streams rather than index-jumps. Exclude regions with \"^\" prefix\n"); + fprintf(stderr, " --threads number of extra (de)compression threads [0]\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Subset options:\n"); + fprintf(stderr, " -a, --trim-alt-alleles trim alternate alleles not seen in the subset\n"); + fprintf(stderr, " -I, --no-update do not (re)calculate INFO fields for the subset (currently INFO/AC and INFO/AN)\n"); + fprintf(stderr, " -s, --samples [^] comma separated list of samples to include (or exclude with \"^\" prefix)\n"); + fprintf(stderr, " -S, --samples-file [^] file of samples to include (or exclude with \"^\" prefix)\n"); + fprintf(stderr, " --force-samples only warn about unknown subset samples\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Filter options:\n"); + fprintf(stderr, " -c/C, --min-ac/--max-ac [:] minimum/maximum count for non-reference (nref), 1st alternate (alt1), least frequent\n"); + fprintf(stderr, " (minor), most frequent (major) or sum of all but most frequent (nonmajor) alleles [nref]\n"); + fprintf(stderr, " -f, --apply-filters require at least one of the listed FILTER strings (e.g. \"PASS,.\")\n"); + fprintf(stderr, " -g, --genotype [^] require one or more hom/het/missing genotype or, if prefixed with \"^\", exclude sites with hom/het/missing genotypes\n"); + fprintf(stderr, " -i/e, --include/--exclude select/exclude sites for which the expression is true (see man page for details)\n"); + fprintf(stderr, " -k/n, --known/--novel select known/novel sites only (ID is not/is '.')\n"); + fprintf(stderr, " -m/M, --min-alleles/--max-alleles minimum/maximum number of alleles listed in REF and ALT (e.g. -m2 -M2 for biallelic sites)\n"); + fprintf(stderr, " -p/P, --phased/--exclude-phased select/exclude sites where all samples are phased\n"); + fprintf(stderr, " -q/Q, --min-af/--max-af [:] minimum/maximum frequency for non-reference (nref), 1st alternate (alt1), least frequent\n"); + fprintf(stderr, " (minor), most frequent (major) or sum of all but most frequent (nonmajor) alleles [nref]\n"); + fprintf(stderr, " -u/U, --uncalled/--exclude-uncalled select/exclude sites without a called genotype\n"); + fprintf(stderr, " -v/V, --types/--exclude-types select/exclude comma-separated list of variant types: snps,indels,mnps,ref,bnd,other [null]\n"); + fprintf(stderr, " -x/X, --private/--exclude-private select/exclude sites where the non-reference alleles are exclusive (private) to the subset samples\n"); + fprintf(stderr, "\n"); + exit(1); +} + +int main_vcfview(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->files = bcf_sr_init(); + args->clevel = -1; + args->print_header = 1; + args->update_info = 1; + args->output_type = FT_VCF; + args->n_threads = 0; + args->record_cmd_line = 1; + args->min_ac = args->max_ac = args->min_af = args->max_af = -1; + int targets_is_file = 0, regions_is_file = 0; + + static struct option loptions[] = + { + {"genotype",required_argument,NULL,'g'}, + {"compression-level",required_argument,NULL,'l'}, + {"threads",required_argument,NULL,9}, + {"header-only",no_argument,NULL,'h'}, + {"no-header",no_argument,NULL,'H'}, + {"exclude",required_argument,NULL,'e'}, + {"include",required_argument,NULL,'i'}, + {"trim-alt-alleles",no_argument,NULL,'a'}, + {"no-update",no_argument,NULL,'I'}, + {"drop-genotypes",no_argument,NULL,'G'}, + {"private",no_argument,NULL,'x'}, + {"exclude-private",no_argument,NULL,'X'}, + {"uncalled",no_argument,NULL,'u'}, + {"exclude-uncalled",no_argument,NULL,'U'}, + {"apply-filters",required_argument,NULL,'f'}, + {"known",no_argument,NULL,'k'}, + {"novel",no_argument,NULL,'n'}, + {"min-alleles",required_argument,NULL,'m'}, + {"max-alleles",required_argument,NULL,'M'}, + {"samples",required_argument,NULL,'s'}, + {"samples-file",required_argument,NULL,'S'}, + {"force-samples",no_argument,NULL,1}, + {"output-type",required_argument,NULL,'O'}, + {"output-file",required_argument,NULL,'o'}, + {"types",required_argument,NULL,'v'}, + {"exclude-types",required_argument,NULL,'V'}, + {"targets",required_argument,NULL,'t'}, + {"targets-file",required_argument,NULL,'T'}, + {"regions",required_argument,NULL,'r'}, + {"regions-file",required_argument,NULL,'R'}, + {"min-ac",required_argument,NULL,'c'}, + {"max-ac",required_argument,NULL,'C'}, + {"min-af",required_argument,NULL,'q'}, + {"max-af",required_argument,NULL,'Q'}, + {"phased",no_argument,NULL,'p'}, + {"exclude-phased",no_argument,NULL,'P'}, + {"no-version",no_argument,NULL,8}, + {NULL,0,NULL,0} + }; + char *tmp; + while ((c = getopt_long(argc, argv, "l:t:T:r:R:o:O:s:S:Gf:knv:V:m:M:auUhHc:C:Ii:e:xXpPq:Q:g:",loptions,NULL)) >= 0) + { + char allele_type[8] = "nref"; + switch (c) + { + case 'O': + switch (optarg[0]) { + case 'b': args->output_type = FT_BCF_GZ; break; + case 'u': args->output_type = FT_BCF; break; + case 'z': args->output_type = FT_VCF_GZ; break; + case 'v': args->output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + }; + break; + case 'l': + args->clevel = strtol(optarg,&tmp,10); + if ( *tmp ) error("Could not parse argument: --compression-level %s\n", optarg); + args->output_type |= FT_GZ; + break; + case 'o': args->fn_out = optarg; break; + case 'H': args->print_header = 0; break; + case 'h': args->header_only = 1; break; + + case 't': args->targets_list = optarg; break; + case 'T': args->targets_list = optarg; targets_is_file = 1; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; regions_is_file = 1; break; + + case 's': args->sample_names = optarg; break; + case 'S': args->sample_names = optarg; args->sample_is_file = 1; break; + case 1 : args->force_samples = 1; break; + case 'a': args->trim_alts = 1; args->calc_ac = 1; break; + case 'I': args->update_info = 0; break; + case 'G': args->sites_only = 1; break; + + case 'f': args->files->apply_filters = optarg; break; + case 'k': args->known = 1; break; + case 'n': args->novel = 1; break; + case 'm': + args->min_alleles = strtol(optarg,&tmp,10); + if ( *tmp ) error("Could not parse argument: --min-alleles %s\n", optarg); + break; + case 'M': + args->max_alleles = strtol(optarg,&tmp,10); + if ( *tmp ) error("Could not parse argument: --max-alleles %s\n", optarg); + break; + case 'v': args->include_types = optarg; break; + case 'V': args->exclude_types = optarg; break; + case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break; + case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break; + + case 'c': + { + args->min_ac_type = ALLELE_NONREF; + if ( sscanf(optarg,"%d:%s",&args->min_ac, allele_type)!=2 && sscanf(optarg,"%d",&args->min_ac)!=1 ) + error("Error: Could not parse --min-ac %s\n", optarg); + set_allele_type(&args->min_ac_type, allele_type); + args->calc_ac = 1; + break; + } + case 'C': + { + args->max_ac_type = ALLELE_NONREF; + if ( sscanf(optarg,"%d:%s",&args->max_ac, allele_type)!=2 && sscanf(optarg,"%d",&args->max_ac)!=1 ) + error("Error: Could not parse --max-ac %s\n", optarg); + set_allele_type(&args->max_ac_type, allele_type); + args->calc_ac = 1; + break; + } + case 'q': + { + args->min_af_type = ALLELE_NONREF; + if ( sscanf(optarg,"%f:%s",&args->min_af, allele_type)!=2 && sscanf(optarg,"%f",&args->min_af)!=1 ) + error("Error: Could not parse --min_af %s\n", optarg); + set_allele_type(&args->min_af_type, allele_type); + args->calc_ac = 1; + break; + } + case 'Q': + { + args->max_af_type = ALLELE_NONREF; + if ( sscanf(optarg,"%f:%s",&args->max_af, allele_type)!=2 && sscanf(optarg,"%f",&args->max_af)!=1 ) + error("Error: Could not parse --min_af %s\n", optarg); + set_allele_type(&args->max_af_type, allele_type); + args->calc_ac = 1; + break; + } + + case 'x': args->private_vars |= FLT_INCLUDE; args->calc_ac = 1; break; + case 'X': args->private_vars |= FLT_EXCLUDE; args->calc_ac = 1; break; + case 'u': args->uncalled |= FLT_INCLUDE; args->calc_ac = 1; break; + case 'U': args->uncalled |= FLT_EXCLUDE; args->calc_ac = 1; break; + case 'p': args->phased |= FLT_INCLUDE; break; // phased + case 'P': args->phased |= FLT_EXCLUDE; break; // exclude-phased + case 'g': + { + if ( !strcasecmp(optarg,"hom") ) args->gt_type = GT_NEED_HOM; + else if ( !strcasecmp(optarg,"het") ) args->gt_type = GT_NEED_HET; + else if ( !strcasecmp(optarg,"miss") ) args->gt_type = GT_NEED_MISSING; + else if ( !strcasecmp(optarg,"^hom") ) args->gt_type = GT_NO_HOM; + else if ( !strcasecmp(optarg,"^het") ) args->gt_type = GT_NO_HET; + else if ( !strcasecmp(optarg,"^miss") ) args->gt_type = GT_NO_MISSING; + else error("The argument to -g not recognised. Expected one of hom/het/miss/^hom/^het/^miss, got \"%s\".\n", optarg); + break; + } + case 9 : args->n_threads = strtol(optarg, 0, 0); break; + case 8 : args->record_cmd_line = 0; break; + case '?': usage(args); + default: error("Unknown argument: %s\n", optarg); + } + } + + if ( args->filter_logic == (FLT_EXCLUDE|FLT_INCLUDE) ) error("Only one of -i or -e can be given.\n"); + if ( args->private_vars > FLT_EXCLUDE ) error("Only one of -x or -X can be given.\n"); + if ( args->uncalled > FLT_EXCLUDE ) error("Only one of -u or -U can be given.\n"); + if ( args->phased > FLT_EXCLUDE ) error("Only one of -p or -P can be given.\n"); + + if ( args->sample_names && args->update_info) args->calc_ac = 1; + + char *fname = NULL; + if ( optind>=argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin + else usage(args); + } + else fname = argv[optind]; + + // read in the regions from the command line + if ( args->regions_list ) + { + if ( bcf_sr_set_regions(args->files, args->regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + } + else if ( optind+1 < argc ) + { + int i; + kstring_t tmp = {0,0,0}; + kputs(argv[optind+1],&tmp); + for (i=optind+2; ifiles, tmp.s, 0)<0 ) + error("Failed to read the regions: %s\n", tmp.s); + free(tmp.s); + } + if ( args->targets_list ) + { + if ( bcf_sr_set_targets(args->files, args->targets_list, targets_is_file, 0)<0 ) + error("Failed to read the targets: %s\n", args->targets_list); + } + + if ( bcf_sr_set_threads(args->files, args->n_threads)<0 ) error("Failed to create threads\n"); + if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); + + init_data(args); + bcf_hdr_t *out_hdr = args->hnull ? args->hnull : (args->hsub ? args->hsub : args->hdr); + if (args->print_header) + bcf_hdr_write(args->out, out_hdr); + else if ( args->output_type & FT_BCF ) + error("BCF output requires header, cannot proceed with -H\n"); + + int ret = 0; + if (!args->header_only) + { + while ( bcf_sr_next_line(args->files) ) + { + bcf1_t *line = args->files->readers[0].buffer[0]; + if ( line->errcode && out_hdr!=args->hdr ) error("Undefined tags in the header, cannot proceed in the sample subset mode.\n"); + if ( subset_vcf(args, line) ) + bcf_write1(args->out, out_hdr, line); + } + ret = args->files->errnum; + if ( ret ) fprintf(stderr,"Error: %s\n", bcf_sr_strerror(args->files->errnum)); + } + hts_close(args->out); + destroy_data(args); + bcf_sr_destroy(args->files); + free(args); + return ret; +} diff --git a/bcftools/vcfview.c.pysam.c b/bcftools/vcfview.c.pysam.c new file mode 100644 index 0000000..4fbe35a --- /dev/null +++ b/bcftools/vcfview.c.pysam.c @@ -0,0 +1,766 @@ +#include "bcftools.pysam.h" + +/* vcfview.c -- VCF/BCF conversion, view, subset and filter VCF/BCF files. + + Copyright (C) 2013-2014 Genome Research Ltd. + + Author: Shane McCarthy + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bcftools.h" +#include "filter.h" +#include "htslib/khash_str2int.h" + +#define FLT_INCLUDE 1 +#define FLT_EXCLUDE 2 + +#define ALLELE_NONREF 1 +#define ALLELE_MINOR 2 +#define ALLELE_ALT1 3 +#define ALLELE_MAJOR 4 +#define ALLELE_NONMAJOR 5 + +#define GT_NEED_HOM 1 +#define GT_NEED_HET 2 +#define GT_NO_HOM 3 +#define GT_NO_HET 4 +#define GT_NEED_MISSING 5 +#define GT_NO_MISSING 6 + +typedef struct _args_t +{ + filter_t *filter; + char *filter_str; + int filter_logic; // one of FLT_INCLUDE/FLT_EXCLUDE (-i or -e) + + bcf_srs_t *files; + bcf_hdr_t *hdr, *hnull, *hsub; // original header, sites-only header, subset header + char **argv, *format, *sample_names, *subset_fname, *targets_list, *regions_list; + int argc, clevel, n_threads, output_type, print_header, update_info, header_only, n_samples, *imap, calc_ac; + int trim_alts, sites_only, known, novel, min_alleles, max_alleles, private_vars, uncalled, phased; + int min_ac, min_ac_type, max_ac, max_ac_type, min_af_type, max_af_type, gt_type; + int *ac, mac; + float min_af, max_af; + char *fn_ref, *fn_out, **samples; + int sample_is_file, force_samples; + char *include_types, *exclude_types; + int include, exclude; + int record_cmd_line; + htsFile *out; +} +args_t; + +static void init_data(args_t *args) +{ + int i; + args->hdr = args->files->readers[0].header; + + if (args->calc_ac && args->update_info) + { + bcf_hdr_append(args->hdr,"##INFO="); + bcf_hdr_append(args->hdr,"##INFO="); + } + if (args->record_cmd_line) bcf_hdr_append_version(args->hdr, args->argc, args->argv, "bcftools_view"); + else bcf_hdr_sync(args->hdr); + + // setup sample data + if (args->sample_names) + { + void *hdr_samples = khash_str2int_init(); + for (i=0; ihdr); i++) + khash_str2int_inc(hdr_samples, bcf_hdr_int2id(args->hdr,BCF_DT_SAMPLE,i)); + + void *exclude = (args->sample_names[0]=='^') ? khash_str2int_init() : NULL; + int nsmpl; + char **smpl = NULL; + args->samples = NULL; args->n_samples = 0; + smpl = hts_readlist(exclude ? &args->sample_names[1] : args->sample_names, args->sample_is_file, &nsmpl); + if ( !smpl ) + { + error("Could not read the list: \"%s\"\n", exclude ? &args->sample_names[1] : args->sample_names); + } + + if ( exclude ) + { + for (i=0; iforce_samples) { + fprintf(bcftools_stderr, "Warn: exclude called for sample that does not exist in header: \"%s\"... skipping\n", smpl[i]); + } else { + error("Error: exclude called for sample that does not exist in header: \"%s\". Use \"--force-samples\" to ignore this error.\n", smpl[i]); + } + } + khash_str2int_inc(exclude, smpl[i]); + } + + for (i=0; ihdr); i++) + { + if ( exclude && khash_str2int_has_key(exclude,bcf_hdr_int2id(args->hdr,BCF_DT_SAMPLE,i)) ) continue; + args->samples = (char**) realloc(args->samples, (args->n_samples+1)*sizeof(const char*)); + args->samples[args->n_samples++] = strdup(bcf_hdr_int2id(args->hdr,BCF_DT_SAMPLE,i)); + } + khash_str2int_destroy(exclude); + } + else + { + for (i=0; iforce_samples) { + fprintf(bcftools_stderr, "Warn: subset called for sample that does not exist in header: \"%s\"... skipping\n", smpl[i]); + continue; + } else { + error("Error: subset called for sample that does not exist in header: \"%s\". Use \"--force-samples\" to ignore this error.\n", smpl[i]); + } + } + args->samples = (char**) realloc(args->samples, (args->n_samples+1)*sizeof(const char*)); + args->samples[args->n_samples++] = strdup(smpl[i]); + } + } + for (i=0; in_samples == 0) { + fprintf(bcftools_stderr, "Warn: subsetting has removed all samples\n"); + args->sites_only = 1; + } + } + + if (args->n_samples) + args->imap = (int*)malloc(args->n_samples * sizeof(int)); + + // determine variant types to include/exclude + if (args->include_types || args->exclude_types) { + if (args->include_types && args->exclude_types) { + fprintf(bcftools_stderr, "Error: only supply one of --include-types, --exclude-types options\n"); + exit(1); + } + char **type_list = 0; + int m = 0, n = 0; + const char *q, *p; + for (q = p = args->include_types ? args->include_types : args->exclude_types;; ++p) { + if (*p == ',' || *p == 0) { + if (m == n) { + m = m? m<<1 : 16; + type_list = (char**)realloc(type_list, m * sizeof(char*)); + } + type_list[n] = (char*)calloc(p - q + 1, 1); + strncpy(type_list[n++], q, p - q); + q = p + 1; + if (*p == 0) break; + } + } + type_list = (char**)realloc(type_list, n * sizeof(char*)); + + if (args->include_types) { + args->include = 0; + for (i = 0; i < n; ++i) { + if (strcmp(type_list[i], "snps") == 0) args->include |= VCF_SNP<<1; + else if (strcmp(type_list[i], "indels") == 0) args->include |= VCF_INDEL<<1; + else if (strcmp(type_list[i], "mnps") == 0) args->include |= VCF_MNP<<1; + else if (strcmp(type_list[i], "other") == 0) args->include |= VCF_OTHER<<1; + else if (strcmp(type_list[i], "ref") == 0) args->include |= VCF_OTHER<<1; + else if (strcmp(type_list[i], "bnd") == 0) args->include |= VCF_BND<<1; + else { + fprintf(bcftools_stderr, "[E::%s] unknown type\n", type_list[i]); + fprintf(bcftools_stderr, "Accepted types are snps, indels, mnps, other\n"); + exit(1); + } + } + } + if (args->exclude_types) { + args->exclude = 0; + for (i = 0; i < n; ++i) { + if (strcmp(type_list[i], "snps") == 0) args->exclude |= VCF_SNP<<1; + else if (strcmp(type_list[i], "indels") == 0) args->exclude |= VCF_INDEL<<1; + else if (strcmp(type_list[i], "mnps") == 0) args->exclude |= VCF_MNP<<1; + else if (strcmp(type_list[i], "other") == 0) args->exclude |= VCF_OTHER<<1; + else if (strcmp(type_list[i], "ref") == 0) args->exclude |= VCF_OTHER<<1; + else if (strcmp(type_list[i], "bnd") == 0) args->exclude |= VCF_BND<<1; + else { + fprintf(bcftools_stderr, "[E::%s] unknown type\n", type_list[i]); + fprintf(bcftools_stderr, "Accepted types are snps, indels, mnps, other\n"); + exit(1); + } + } + } + for (i = 0; i < n; ++i) + free(type_list[i]); + free(type_list); + } + + // setup output + char modew[8]; + strcpy(modew, "w"); + if (args->clevel >= 0 && args->clevel <= 9) sprintf(modew + 1, "%d", args->clevel); + if (args->output_type==FT_BCF) strcat(modew, "bu"); // uncompressed BCF + else if (args->output_type & FT_BCF) strcat(modew, "b"); // compressed BCF + else if (args->output_type & FT_GZ) strcat(modew,"z"); // compressed VCF + args->out = hts_open(args->fn_out ? args->fn_out : "-", modew); + if ( !args->out ) error("%s: %s\n", args->fn_out,strerror(errno)); + if ( args->n_threads > 0) + hts_set_opt(args->out, HTS_OPT_THREAD_POOL, args->files->p); + + // headers: hdr=full header, hsub=subset header, hnull=sites only header + if (args->sites_only){ + args->hnull = bcf_hdr_subset(args->hdr, 0, 0, 0); + bcf_hdr_remove(args->hnull, BCF_HL_FMT, NULL); + } + if (args->n_samples > 0) + { + args->hsub = bcf_hdr_subset(args->hdr, args->n_samples, args->samples, args->imap); + if ( !args->hsub ) error("Error occurred while subsetting samples\n"); + if ( args->n_samples != bcf_hdr_nsamples(args->hsub) ) + { + int i; + for (i=0; in_samples; i++) + if ( args->imap[i]<0 ) error("Error: No such sample: \"%s\"\n", args->samples[i]); + } + } + + if ( args->filter_str ) + args->filter = filter_init(args->hdr, args->filter_str); +} + +static void destroy_data(args_t *args) +{ + int i; + if ( args->imap ) { + for (i = 0; i < args->n_samples; ++i) + free(args->samples[i]); + free(args->samples); + free(args->imap); + } + if (args->hnull) bcf_hdr_destroy(args->hnull); + if (args->hsub) bcf_hdr_destroy(args->hsub); + if ( args->filter ) + filter_destroy(args->filter); + free(args->ac); +} + +// true if all samples are phased. +// haploid genotypes are considered phased +// ./. => not phased, .|. => phased +int bcf_all_phased(const bcf_hdr_t *header, bcf1_t *line) +{ + bcf_unpack(line, BCF_UN_FMT); + bcf_fmt_t *fmt_ptr = bcf_get_fmt(header, line, "GT"); + int all_phased = 1; + if ( fmt_ptr ) + { + int i, isample; + for (isample=0; isamplen_sample; isample++) + { + int sample_phased = 0; + #define BRANCH_INT(type_t,vector_end) { \ + type_t *p = (type_t*) (fmt_ptr->p + isample*fmt_ptr->size); \ + for (i=0; in; i++) \ + { \ + if (fmt_ptr->n == 1 || (p[i] == vector_end && i == 1)) { sample_phased = 1; break; } /* haploid phased by definition */ \ + if ( p[i] == vector_end ) { break; }; /* smaller ploidy */ \ + if ( bcf_gt_is_missing(p[i]) ) continue; /* missing allele */ \ + if ((p[i])&1) { \ + sample_phased = 1; \ + break; \ + } \ + } \ + } + switch (fmt_ptr->type) { + case BCF_BT_INT8: BRANCH_INT(int8_t, bcf_int8_vector_end); break; + case BCF_BT_INT16: BRANCH_INT(int16_t, bcf_int16_vector_end); break; + case BCF_BT_INT32: BRANCH_INT(int32_t, bcf_int32_vector_end); break; + default: fprintf(bcftools_stderr, "[E::%s] todo: fmt_type %d\n", __func__, fmt_ptr->type); exit(1); break; + } + #undef BRANCH_INT + if (!sample_phased) { + all_phased = 0; + break; + } + } + } + return all_phased; +} + +int subset_vcf(args_t *args, bcf1_t *line) +{ + if ( args->min_alleles && line->n_allele < args->min_alleles ) return 0; // min alleles + if ( args->max_alleles && line->n_allele > args->max_alleles ) return 0; // max alleles + if (args->novel || args->known) + { + if ( args->novel && (line->d.id[0]!='.' || line->d.id[1]!=0) ) return 0; // skip sites which are known, ID != '.' + if ( args->known && line->d.id[0]=='.' && line->d.id[1]==0 ) return 0; // skip sites which are novel, ID == '.' + } + + if (args->include || args->exclude) + { + int line_type = bcf_get_variant_types(line); + if ( args->include && !((line_type<<1) & args->include) ) return 0; // include only given variant types + if ( args->exclude && (line_type<<1) & args->exclude ) return 0; // exclude given variant types + } + + if ( args->filter ) + { + int ret = filter_test(args->filter, line, NULL); + if ( args->filter_logic==FLT_INCLUDE ) { if ( !ret ) return 0; } + else if ( ret ) return 0; + } + + hts_expand(int, line->n_allele, args->mac, args->ac); + int i, an = 0, non_ref_ac = 0; + if (args->calc_ac) { + bcf_calc_ac(args->hdr, line, args->ac, BCF_UN_INFO|BCF_UN_FMT); // get original AC and AN values from INFO field if available, otherwise calculate + for (i=1; in_allele; i++) + non_ref_ac += args->ac[i]; + for (i=0; in_allele; i++) + an += args->ac[i]; + } + + if (args->n_samples) + { + int non_ref_ac_sub = 0, *ac_sub = (int*) calloc(line->n_allele,sizeof(int)); + bcf_subset(args->hdr, line, args->n_samples, args->imap); + if (args->calc_ac) { + bcf_calc_ac(args->hsub, line, ac_sub, BCF_UN_FMT); // recalculate AC and AN + an = 0; + for (i=0; in_allele; i++) { + args->ac[i] = ac_sub[i]; + an += ac_sub[i]; + } + for (i=1; in_allele; i++) + non_ref_ac_sub += ac_sub[i]; + if (args->private_vars) { + if (args->private_vars == FLT_INCLUDE && !(non_ref_ac_sub > 0 && non_ref_ac == non_ref_ac_sub)) { free(ac_sub); return 0; } // select private sites + if (args->private_vars == FLT_EXCLUDE && non_ref_ac_sub > 0 && non_ref_ac == non_ref_ac_sub) { free(ac_sub); return 0; } // exclude private sites + } + non_ref_ac = non_ref_ac_sub; + } + free(ac_sub); + } + + bcf_fmt_t *gt_fmt; + if ( args->gt_type && (gt_fmt=bcf_get_fmt(args->hdr,line,"GT")) ) + { + int nhet = 0, nhom = 0, nmiss = 0; + for (i=0; ihdr); i++) + { + int type = bcf_gt_type(gt_fmt,i,NULL,NULL); + if ( type==GT_HET_RA || type==GT_HET_AA ) + { + if ( args->gt_type==GT_NO_HET ) return 0; + nhet = 1; + } + else if ( type==GT_UNKN ) + { + if ( args->gt_type==GT_NO_MISSING ) return 0; + nmiss = 1; + } + else + { + if ( args->gt_type==GT_NO_HOM ) return 0; + nhom = 1; + } + } + if ( args->gt_type==GT_NEED_HOM && !nhom ) return 0; + else if ( args->gt_type==GT_NEED_HET && !nhet ) return 0; + else if ( args->gt_type==GT_NEED_MISSING && !nmiss ) return 0; + } + + int minor_ac = 0; + int major_ac = 0; + if ( args->calc_ac ) + { + minor_ac = args->ac[0]; + major_ac = args->ac[0]; + for (i=1; in_allele; i++){ + if (args->ac[i] < minor_ac) { minor_ac = args->ac[i]; } + if (args->ac[i] > major_ac) { major_ac = args->ac[i]; } + } + } + + if (args->min_ac!=-1) + { + if (args->min_ac_type == ALLELE_NONREF && args->min_ac>non_ref_ac) return 0; // min AC + else if (args->min_ac_type == ALLELE_MINOR && args->min_ac>minor_ac) return 0; // min minor AC + else if (args->min_ac_type == ALLELE_ALT1 && args->min_ac>args->ac[1]) return 0; // min 1st alternate AC + else if (args->min_ac_type == ALLELE_MAJOR && args->min_ac > major_ac) return 0; // min major AC + else if (args->min_ac_type == ALLELE_NONMAJOR && args->min_ac > an-major_ac) return 0; // min non-major AC + } + if (args->max_ac!=-1) + { + if (args->max_ac_type == ALLELE_NONREF && args->max_acmax_ac_type == ALLELE_MINOR && args->max_acmax_ac_type == ALLELE_ALT1 && args->max_acac[1]) return 0; // max 1st alternate AC + else if (args->max_ac_type == ALLELE_MAJOR && args->max_ac < major_ac) return 0; // max major AC + else if (args->max_ac_type == ALLELE_NONMAJOR && args->max_ac < an-major_ac) return 0; // max non-major AC + } + if (args->min_af!=-1) + { + if (an == 0) return 0; // freq not defined, skip site + if (args->min_af_type == ALLELE_NONREF && args->min_af>non_ref_ac/(double)an) return 0; // min AF + else if (args->min_af_type == ALLELE_MINOR && args->min_af>minor_ac/(double)an) return 0; // min minor AF + else if (args->min_af_type == ALLELE_ALT1 && args->min_af>args->ac[1]/(double)an) return 0; // min 1st alternate AF + else if (args->min_af_type == ALLELE_MAJOR && args->min_af > major_ac/(double)an) return 0; // min major AF + else if (args->min_af_type == ALLELE_NONMAJOR && args->min_af > (an-major_ac)/(double)an) return 0; // min non-major AF + } + if (args->max_af!=-1) + { + if (an == 0) return 0; // freq not defined, skip site + if (args->max_af_type == ALLELE_NONREF && args->max_afmax_af_type == ALLELE_MINOR && args->max_afmax_af_type == ALLELE_ALT1 && args->max_afac[1]/(double)an) return 0; // max 1st alternate AF + else if (args->max_af_type == ALLELE_MAJOR && args->max_af < major_ac/(double)an) return 0; // max major AF + else if (args->max_af_type == ALLELE_NONMAJOR && args->max_af < (an-major_ac)/(double)an) return 0; // max non-major AF + } + if (args->uncalled) { + if (args->uncalled == FLT_INCLUDE && an > 0) return 0; // select uncalled + if (args->uncalled == FLT_EXCLUDE && an == 0) return 0; // skip if uncalled + } + if (args->calc_ac && args->update_info) { + bcf_update_info_int32(args->hdr, line, "AC", &args->ac[1], line->n_allele-1); + bcf_update_info_int32(args->hdr, line, "AN", &an, 1); + } + if (args->trim_alts) + { + int ret = bcf_trim_alleles(args->hsub ? args->hsub : args->hdr, line); + if ( ret<0 ) error("Error: Could not trim alleles at %s:%d\n", bcf_seqname(args->hsub ? args->hsub : args->hdr, line), line->pos+1); + } + if (args->phased) { + int phased = bcf_all_phased(args->hdr, line); + if (args->phased == FLT_INCLUDE && !phased) { return 0; } // skip unphased + if (args->phased == FLT_EXCLUDE && phased) { return 0; } // skip phased + } + if (args->sites_only) bcf_subset(args->hsub ? args->hsub : args->hdr, line, 0, 0); + return 1; +} + +void set_allele_type (int *atype, char *atype_string) +{ + *atype = ALLELE_NONREF; + if (strcmp(atype_string, "minor") == 0) { + *atype = ALLELE_MINOR; + } + else if (strcmp(atype_string, "alt1") == 0) { + *atype = ALLELE_ALT1; + } + else if (strcmp(atype_string, "nref") == 0) { + *atype = ALLELE_NONREF; + } + else if (strcmp(atype_string, "major") == 0) { + *atype = ALLELE_MAJOR; + } + else if (strcmp(atype_string, "nonmajor") == 0) { + *atype = ALLELE_NONMAJOR; + } + else { + error("Error: allele type not recognised. Expected one of nref|alt1|minor|major|nonmajor, got \"%s\".\n", atype_string); + } +} + +static void usage(args_t *args) +{ + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "About: VCF/BCF conversion, view, subset and filter VCF/BCF files.\n"); + fprintf(bcftools_stderr, "Usage: bcftools view [options] [region1 [...]]\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Output options:\n"); + fprintf(bcftools_stderr, " -G, --drop-genotypes drop individual genotype information (after subsetting if -s option set)\n"); + fprintf(bcftools_stderr, " -h/H, --header-only/--no-header print the header only/suppress the header in VCF output\n"); + fprintf(bcftools_stderr, " -l, --compression-level [0-9] compression level: 0 uncompressed, 1 best speed, 9 best compression [%d]\n", args->clevel); + fprintf(bcftools_stderr, " --no-version do not append version and command line to the header\n"); + fprintf(bcftools_stderr, " -o, --output-file output file name [bcftools_stdout]\n"); + fprintf(bcftools_stderr, " -O, --output-type b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"); + fprintf(bcftools_stderr, " -r, --regions restrict to comma-separated list of regions\n"); + fprintf(bcftools_stderr, " -R, --regions-file restrict to regions listed in a file\n"); + fprintf(bcftools_stderr, " -t, --targets [^] similar to -r but streams rather than index-jumps. Exclude regions with \"^\" prefix\n"); + fprintf(bcftools_stderr, " -T, --targets-file [^] similar to -R but streams rather than index-jumps. Exclude regions with \"^\" prefix\n"); + fprintf(bcftools_stderr, " --threads number of extra (de)compression threads [0]\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Subset options:\n"); + fprintf(bcftools_stderr, " -a, --trim-alt-alleles trim alternate alleles not seen in the subset\n"); + fprintf(bcftools_stderr, " -I, --no-update do not (re)calculate INFO fields for the subset (currently INFO/AC and INFO/AN)\n"); + fprintf(bcftools_stderr, " -s, --samples [^] comma separated list of samples to include (or exclude with \"^\" prefix)\n"); + fprintf(bcftools_stderr, " -S, --samples-file [^] file of samples to include (or exclude with \"^\" prefix)\n"); + fprintf(bcftools_stderr, " --force-samples only warn about unknown subset samples\n"); + fprintf(bcftools_stderr, "\n"); + fprintf(bcftools_stderr, "Filter options:\n"); + fprintf(bcftools_stderr, " -c/C, --min-ac/--max-ac [:] minimum/maximum count for non-reference (nref), 1st alternate (alt1), least frequent\n"); + fprintf(bcftools_stderr, " (minor), most frequent (major) or sum of all but most frequent (nonmajor) alleles [nref]\n"); + fprintf(bcftools_stderr, " -f, --apply-filters require at least one of the listed FILTER strings (e.g. \"PASS,.\")\n"); + fprintf(bcftools_stderr, " -g, --genotype [^] require one or more hom/het/missing genotype or, if prefixed with \"^\", exclude sites with hom/het/missing genotypes\n"); + fprintf(bcftools_stderr, " -i/e, --include/--exclude select/exclude sites for which the expression is true (see man page for details)\n"); + fprintf(bcftools_stderr, " -k/n, --known/--novel select known/novel sites only (ID is not/is '.')\n"); + fprintf(bcftools_stderr, " -m/M, --min-alleles/--max-alleles minimum/maximum number of alleles listed in REF and ALT (e.g. -m2 -M2 for biallelic sites)\n"); + fprintf(bcftools_stderr, " -p/P, --phased/--exclude-phased select/exclude sites where all samples are phased\n"); + fprintf(bcftools_stderr, " -q/Q, --min-af/--max-af [:] minimum/maximum frequency for non-reference (nref), 1st alternate (alt1), least frequent\n"); + fprintf(bcftools_stderr, " (minor), most frequent (major) or sum of all but most frequent (nonmajor) alleles [nref]\n"); + fprintf(bcftools_stderr, " -u/U, --uncalled/--exclude-uncalled select/exclude sites without a called genotype\n"); + fprintf(bcftools_stderr, " -v/V, --types/--exclude-types select/exclude comma-separated list of variant types: snps,indels,mnps,ref,bnd,other [null]\n"); + fprintf(bcftools_stderr, " -x/X, --private/--exclude-private select/exclude sites where the non-reference alleles are exclusive (private) to the subset samples\n"); + fprintf(bcftools_stderr, "\n"); + exit(1); +} + +int main_vcfview(int argc, char *argv[]) +{ + int c; + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->argc = argc; args->argv = argv; + args->files = bcf_sr_init(); + args->clevel = -1; + args->print_header = 1; + args->update_info = 1; + args->output_type = FT_VCF; + args->n_threads = 0; + args->record_cmd_line = 1; + args->min_ac = args->max_ac = args->min_af = args->max_af = -1; + int targets_is_file = 0, regions_is_file = 0; + + static struct option loptions[] = + { + {"genotype",required_argument,NULL,'g'}, + {"compression-level",required_argument,NULL,'l'}, + {"threads",required_argument,NULL,9}, + {"header-only",no_argument,NULL,'h'}, + {"no-header",no_argument,NULL,'H'}, + {"exclude",required_argument,NULL,'e'}, + {"include",required_argument,NULL,'i'}, + {"trim-alt-alleles",no_argument,NULL,'a'}, + {"no-update",no_argument,NULL,'I'}, + {"drop-genotypes",no_argument,NULL,'G'}, + {"private",no_argument,NULL,'x'}, + {"exclude-private",no_argument,NULL,'X'}, + {"uncalled",no_argument,NULL,'u'}, + {"exclude-uncalled",no_argument,NULL,'U'}, + {"apply-filters",required_argument,NULL,'f'}, + {"known",no_argument,NULL,'k'}, + {"novel",no_argument,NULL,'n'}, + {"min-alleles",required_argument,NULL,'m'}, + {"max-alleles",required_argument,NULL,'M'}, + {"samples",required_argument,NULL,'s'}, + {"samples-file",required_argument,NULL,'S'}, + {"force-samples",no_argument,NULL,1}, + {"output-type",required_argument,NULL,'O'}, + {"output-file",required_argument,NULL,'o'}, + {"types",required_argument,NULL,'v'}, + {"exclude-types",required_argument,NULL,'V'}, + {"targets",required_argument,NULL,'t'}, + {"targets-file",required_argument,NULL,'T'}, + {"regions",required_argument,NULL,'r'}, + {"regions-file",required_argument,NULL,'R'}, + {"min-ac",required_argument,NULL,'c'}, + {"max-ac",required_argument,NULL,'C'}, + {"min-af",required_argument,NULL,'q'}, + {"max-af",required_argument,NULL,'Q'}, + {"phased",no_argument,NULL,'p'}, + {"exclude-phased",no_argument,NULL,'P'}, + {"no-version",no_argument,NULL,8}, + {NULL,0,NULL,0} + }; + char *tmp; + while ((c = getopt_long(argc, argv, "l:t:T:r:R:o:O:s:S:Gf:knv:V:m:M:auUhHc:C:Ii:e:xXpPq:Q:g:",loptions,NULL)) >= 0) + { + char allele_type[8] = "nref"; + switch (c) + { + case 'O': + switch (optarg[0]) { + case 'b': args->output_type = FT_BCF_GZ; break; + case 'u': args->output_type = FT_BCF; break; + case 'z': args->output_type = FT_VCF_GZ; break; + case 'v': args->output_type = FT_VCF; break; + default: error("The output type \"%s\" not recognised\n", optarg); + }; + break; + case 'l': + args->clevel = strtol(optarg,&tmp,10); + if ( *tmp ) error("Could not parse argument: --compression-level %s\n", optarg); + args->output_type |= FT_GZ; + break; + case 'o': args->fn_out = optarg; break; + case 'H': args->print_header = 0; break; + case 'h': args->header_only = 1; break; + + case 't': args->targets_list = optarg; break; + case 'T': args->targets_list = optarg; targets_is_file = 1; break; + case 'r': args->regions_list = optarg; break; + case 'R': args->regions_list = optarg; regions_is_file = 1; break; + + case 's': args->sample_names = optarg; break; + case 'S': args->sample_names = optarg; args->sample_is_file = 1; break; + case 1 : args->force_samples = 1; break; + case 'a': args->trim_alts = 1; args->calc_ac = 1; break; + case 'I': args->update_info = 0; break; + case 'G': args->sites_only = 1; break; + + case 'f': args->files->apply_filters = optarg; break; + case 'k': args->known = 1; break; + case 'n': args->novel = 1; break; + case 'm': + args->min_alleles = strtol(optarg,&tmp,10); + if ( *tmp ) error("Could not parse argument: --min-alleles %s\n", optarg); + break; + case 'M': + args->max_alleles = strtol(optarg,&tmp,10); + if ( *tmp ) error("Could not parse argument: --max-alleles %s\n", optarg); + break; + case 'v': args->include_types = optarg; break; + case 'V': args->exclude_types = optarg; break; + case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break; + case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break; + + case 'c': + { + args->min_ac_type = ALLELE_NONREF; + if ( sscanf(optarg,"%d:%s",&args->min_ac, allele_type)!=2 && sscanf(optarg,"%d",&args->min_ac)!=1 ) + error("Error: Could not parse --min-ac %s\n", optarg); + set_allele_type(&args->min_ac_type, allele_type); + args->calc_ac = 1; + break; + } + case 'C': + { + args->max_ac_type = ALLELE_NONREF; + if ( sscanf(optarg,"%d:%s",&args->max_ac, allele_type)!=2 && sscanf(optarg,"%d",&args->max_ac)!=1 ) + error("Error: Could not parse --max-ac %s\n", optarg); + set_allele_type(&args->max_ac_type, allele_type); + args->calc_ac = 1; + break; + } + case 'q': + { + args->min_af_type = ALLELE_NONREF; + if ( sscanf(optarg,"%f:%s",&args->min_af, allele_type)!=2 && sscanf(optarg,"%f",&args->min_af)!=1 ) + error("Error: Could not parse --min_af %s\n", optarg); + set_allele_type(&args->min_af_type, allele_type); + args->calc_ac = 1; + break; + } + case 'Q': + { + args->max_af_type = ALLELE_NONREF; + if ( sscanf(optarg,"%f:%s",&args->max_af, allele_type)!=2 && sscanf(optarg,"%f",&args->max_af)!=1 ) + error("Error: Could not parse --min_af %s\n", optarg); + set_allele_type(&args->max_af_type, allele_type); + args->calc_ac = 1; + break; + } + + case 'x': args->private_vars |= FLT_INCLUDE; args->calc_ac = 1; break; + case 'X': args->private_vars |= FLT_EXCLUDE; args->calc_ac = 1; break; + case 'u': args->uncalled |= FLT_INCLUDE; args->calc_ac = 1; break; + case 'U': args->uncalled |= FLT_EXCLUDE; args->calc_ac = 1; break; + case 'p': args->phased |= FLT_INCLUDE; break; // phased + case 'P': args->phased |= FLT_EXCLUDE; break; // exclude-phased + case 'g': + { + if ( !strcasecmp(optarg,"hom") ) args->gt_type = GT_NEED_HOM; + else if ( !strcasecmp(optarg,"het") ) args->gt_type = GT_NEED_HET; + else if ( !strcasecmp(optarg,"miss") ) args->gt_type = GT_NEED_MISSING; + else if ( !strcasecmp(optarg,"^hom") ) args->gt_type = GT_NO_HOM; + else if ( !strcasecmp(optarg,"^het") ) args->gt_type = GT_NO_HET; + else if ( !strcasecmp(optarg,"^miss") ) args->gt_type = GT_NO_MISSING; + else error("The argument to -g not recognised. Expected one of hom/het/miss/^hom/^het/^miss, got \"%s\".\n", optarg); + break; + } + case 9 : args->n_threads = strtol(optarg, 0, 0); break; + case 8 : args->record_cmd_line = 0; break; + case '?': usage(args); + default: error("Unknown argument: %s\n", optarg); + } + } + + if ( args->filter_logic == (FLT_EXCLUDE|FLT_INCLUDE) ) error("Only one of -i or -e can be given.\n"); + if ( args->private_vars > FLT_EXCLUDE ) error("Only one of -x or -X can be given.\n"); + if ( args->uncalled > FLT_EXCLUDE ) error("Only one of -u or -U can be given.\n"); + if ( args->phased > FLT_EXCLUDE ) error("Only one of -p or -P can be given.\n"); + + if ( args->sample_names && args->update_info) args->calc_ac = 1; + + char *fname = NULL; + if ( optind>=argc ) + { + if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin + else usage(args); + } + else fname = argv[optind]; + + // read in the regions from the command line + if ( args->regions_list ) + { + if ( bcf_sr_set_regions(args->files, args->regions_list, regions_is_file)<0 ) + error("Failed to read the regions: %s\n", args->regions_list); + } + else if ( optind+1 < argc ) + { + int i; + kstring_t tmp = {0,0,0}; + kputs(argv[optind+1],&tmp); + for (i=optind+2; ifiles, tmp.s, 0)<0 ) + error("Failed to read the regions: %s\n", tmp.s); + free(tmp.s); + } + if ( args->targets_list ) + { + if ( bcf_sr_set_targets(args->files, args->targets_list, targets_is_file, 0)<0 ) + error("Failed to read the targets: %s\n", args->targets_list); + } + + if ( bcf_sr_set_threads(args->files, args->n_threads)<0 ) error("Failed to create threads\n"); + if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); + + init_data(args); + bcf_hdr_t *out_hdr = args->hnull ? args->hnull : (args->hsub ? args->hsub : args->hdr); + if (args->print_header) + bcf_hdr_write(args->out, out_hdr); + else if ( args->output_type & FT_BCF ) + error("BCF output requires header, cannot proceed with -H\n"); + + int ret = 0; + if (!args->header_only) + { + while ( bcf_sr_next_line(args->files) ) + { + bcf1_t *line = args->files->readers[0].buffer[0]; + if ( line->errcode && out_hdr!=args->hdr ) error("Undefined tags in the header, cannot proceed in the sample subset mode.\n"); + if ( subset_vcf(args, line) ) + bcf_write1(args->out, out_hdr, line); + } + ret = args->files->errnum; + if ( ret ) fprintf(bcftools_stderr,"Error: %s\n", bcf_sr_strerror(args->files->errnum)); + } + hts_close(args->out); + destroy_data(args); + bcf_sr_destroy(args->files); + free(args); + return ret; +} diff --git a/bcftools/vcmp.c b/bcftools/vcmp.c new file mode 100644 index 0000000..8d04b89 --- /dev/null +++ b/bcftools/vcmp.c @@ -0,0 +1,132 @@ +/* vcmp.c -- reference allele utility functions. + + Copyright (C) 2013 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include "vcmp.h" + +struct _vcmp_t +{ + char *dref; + int ndref, mdref; // ndref: positive when ref1 longer, negative when ref2 is longer + int nmatch; + int *map, mmap; +}; + +vcmp_t *vcmp_init() +{ + return (vcmp_t*)calloc(1,sizeof(vcmp_t)); +} + +void vcmp_destroy(vcmp_t *vcmp) +{ + free(vcmp->map); + free(vcmp->dref); + free(vcmp); +} + +int vcmp_set_ref(vcmp_t *vcmp, char *ref1, char *ref2) +{ + vcmp->ndref = 0; + + char *a = ref1, *b = ref2; + while ( *a && *b && toupper(*a)==toupper(*b) ) { a++; b++; } + if ( !*a && !*b ) return 0; + if ( *a && *b ) return -1; // refs not compatible + + int i; + if ( *a ) // ref1 is longer + { + vcmp->nmatch = b-ref2; + while ( *a ) a++; + vcmp->ndref = (a-ref1) - vcmp->nmatch; + hts_expand(char,vcmp->ndref+1,vcmp->mdref,vcmp->dref); + for (i=0; indref; i++) vcmp->dref[i] = toupper(ref1[vcmp->nmatch+i]); + vcmp->dref[vcmp->ndref] = 0; + return 0; + } + + // ref2 is longer + vcmp->nmatch = a-ref1; + while ( *b ) b++; + vcmp->ndref = (b-ref2) - vcmp->nmatch; + hts_expand(char,vcmp->ndref+1,vcmp->mdref,vcmp->dref); + for (i=0; indref; i++) vcmp->dref[i] = toupper(ref2[vcmp->nmatch+i]); + vcmp->dref[vcmp->ndref] = 0; + vcmp->ndref *= -1; + return 0; +} + +int vcmp_find_allele(vcmp_t *vcmp, char **als1, int nals1, char *al2) +{ + int i, j; + for (i=0; indref ) + { + if ( !*a && !*b ) break; // found + continue; + } + + // the prefixes match + if ( *a ) + { + if ( vcmp->ndref<0 ) continue; + for (j=0; jndref; j++) + if ( !a[j] || toupper(a[j])!=vcmp->dref[j] ) break; + if ( j!=vcmp->ndref || a[j] ) continue; + break; // found + } + + if ( vcmp->ndref>0 ) continue; + for (j=0; j<-vcmp->ndref; j++) + if ( !b[j] || toupper(b[j])!=vcmp->dref[j] ) break; + if ( j!=-vcmp->ndref || b[j] ) continue; + break; // found + } + if (i==nals1) return -1; + return i; +} + + +int *vcmp_map_ARvalues(vcmp_t *vcmp, int n, int nals1, char **als1, int nals2, char **als2) +{ + if ( vcmp_set_ref(vcmp,als1[0],als2[0]) < 0 ) return NULL; + + vcmp->map = (int*) realloc(vcmp->map,sizeof(int)*n); + + int i, ifrom = n==nals2 ? 0 : 1; + for (i=ifrom; imap[i-ifrom] = vcmp_find_allele(vcmp, als1+ifrom, nals1-ifrom, als2[i]); + } + return vcmp->map; +} + diff --git a/bcftools/vcmp.c.pysam.c b/bcftools/vcmp.c.pysam.c new file mode 100644 index 0000000..80b2420 --- /dev/null +++ b/bcftools/vcmp.c.pysam.c @@ -0,0 +1,134 @@ +#include "bcftools.pysam.h" + +/* vcmp.c -- reference allele utility functions. + + Copyright (C) 2013 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#include +#include +#include +#include +#include +#include "vcmp.h" + +struct _vcmp_t +{ + char *dref; + int ndref, mdref; // ndref: positive when ref1 longer, negative when ref2 is longer + int nmatch; + int *map, mmap; +}; + +vcmp_t *vcmp_init() +{ + return (vcmp_t*)calloc(1,sizeof(vcmp_t)); +} + +void vcmp_destroy(vcmp_t *vcmp) +{ + free(vcmp->map); + free(vcmp->dref); + free(vcmp); +} + +int vcmp_set_ref(vcmp_t *vcmp, char *ref1, char *ref2) +{ + vcmp->ndref = 0; + + char *a = ref1, *b = ref2; + while ( *a && *b && toupper(*a)==toupper(*b) ) { a++; b++; } + if ( !*a && !*b ) return 0; + if ( *a && *b ) return -1; // refs not compatible + + int i; + if ( *a ) // ref1 is longer + { + vcmp->nmatch = b-ref2; + while ( *a ) a++; + vcmp->ndref = (a-ref1) - vcmp->nmatch; + hts_expand(char,vcmp->ndref+1,vcmp->mdref,vcmp->dref); + for (i=0; indref; i++) vcmp->dref[i] = toupper(ref1[vcmp->nmatch+i]); + vcmp->dref[vcmp->ndref] = 0; + return 0; + } + + // ref2 is longer + vcmp->nmatch = a-ref1; + while ( *b ) b++; + vcmp->ndref = (b-ref2) - vcmp->nmatch; + hts_expand(char,vcmp->ndref+1,vcmp->mdref,vcmp->dref); + for (i=0; indref; i++) vcmp->dref[i] = toupper(ref2[vcmp->nmatch+i]); + vcmp->dref[vcmp->ndref] = 0; + vcmp->ndref *= -1; + return 0; +} + +int vcmp_find_allele(vcmp_t *vcmp, char **als1, int nals1, char *al2) +{ + int i, j; + for (i=0; indref ) + { + if ( !*a && !*b ) break; // found + continue; + } + + // the prefixes match + if ( *a ) + { + if ( vcmp->ndref<0 ) continue; + for (j=0; jndref; j++) + if ( !a[j] || toupper(a[j])!=vcmp->dref[j] ) break; + if ( j!=vcmp->ndref || a[j] ) continue; + break; // found + } + + if ( vcmp->ndref>0 ) continue; + for (j=0; j<-vcmp->ndref; j++) + if ( !b[j] || toupper(b[j])!=vcmp->dref[j] ) break; + if ( j!=-vcmp->ndref || b[j] ) continue; + break; // found + } + if (i==nals1) return -1; + return i; +} + + +int *vcmp_map_ARvalues(vcmp_t *vcmp, int n, int nals1, char **als1, int nals2, char **als2) +{ + if ( vcmp_set_ref(vcmp,als1[0],als2[0]) < 0 ) return NULL; + + vcmp->map = (int*) realloc(vcmp->map,sizeof(int)*n); + + int i, ifrom = n==nals2 ? 0 : 1; + for (i=ifrom; imap[i-ifrom] = vcmp_find_allele(vcmp, als1+ifrom, nals1-ifrom, als2[i]); + } + return vcmp->map; +} + diff --git a/bcftools/vcmp.h b/bcftools/vcmp.h new file mode 100644 index 0000000..0317704 --- /dev/null +++ b/bcftools/vcmp.h @@ -0,0 +1,62 @@ +/* vcmp.h -- reference allele utility functions. + + Copyright (C) 2013-2014 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +#ifndef __VCMP_H__ +#define __VCMP_H__ + +typedef struct _vcmp_t vcmp_t; + +vcmp_t *vcmp_init(void); +void vcmp_destroy(vcmp_t *vcmp); + +/* + * vcmp_set_ref() - sets and compares reference alleles + * Returns 0 on success or -1 if alleles not compatible + */ +int vcmp_set_ref(vcmp_t *vcmp, char *ref1, char *ref2); + +/* + * vcmp_find_allele() + * @param als1: alternate alleles to ref1 above + * @param al2: alternate allele to ref2 above + * Returns -1 if not found or 0-based index to als1 of matching allele + */ +int vcmp_find_allele(vcmp_t *vcmp, char **als1, int nals1, char *al2); + +/* + * vcmp_map_ARvalues() - Create mapping for Number=A,R tag values + * @param number: nals2 for Number=R, nals2-1 for Number=A + * @param nals1: number of alleles + * @param als1: alleles + * + * Returns pointer to an array of size nals2 with mapping from als2 + * to als1 or NULL if REFs (als1[0] and als2[0]) are not compatible. + * If i is the index of an allele in als2, ret[i] is the index of matching + * allele in als1 or -1 if als2 does not have a matching allele. + * The caller must not free the array. + */ +int *vcmp_map_ARvalues(vcmp_t *vcmp, int number, int nals1, char **als1, int nals2, char **als2); + + +#endif diff --git a/bcftools/version.c b/bcftools/version.c new file mode 100644 index 0000000..00eeb5a --- /dev/null +++ b/bcftools/version.c @@ -0,0 +1,55 @@ +/* version.c -- report version numbers for plugins. + + Copyright (C) 2014 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include +#include +#include +#include +#include "bcftools.h" +#include "version.h" + +void version(const char **bcftools_version, const char **htslib_version) +{ + *bcftools_version = BCFTOOLS_VERSION; + *htslib_version = hts_version(); +} + +void error(const char *format, ...) +{ + va_list ap; + va_start(ap, format); + vfprintf(stderr, format, ap); + va_end(ap); + exit(-1); +} + +const char *hts_bcf_wmode(int file_type) +{ + if ( file_type == FT_BCF ) return "wbu"; // uncompressed BCF + if ( file_type & FT_BCF ) return "wb"; // compressed BCF + if ( file_type & FT_GZ ) return "wz"; // compressed VCF + return "w"; // uncompressed VCF +} + + diff --git a/bcftools/version.c.pysam.c b/bcftools/version.c.pysam.c new file mode 100644 index 0000000..236d935 --- /dev/null +++ b/bcftools/version.c.pysam.c @@ -0,0 +1,57 @@ +#include "bcftools.pysam.h" + +/* version.c -- report version numbers for plugins. + + Copyright (C) 2014 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include +#include +#include +#include +#include "bcftools.h" +#include "version.h" + +void version(const char **bcftools_version, const char **htslib_version) +{ + *bcftools_version = BCFTOOLS_VERSION; + *htslib_version = hts_version(); +} + +void error(const char *format, ...) +{ + va_list ap; + va_start(ap, format); + vfprintf(bcftools_stderr, format, ap); + va_end(ap); + exit(-1); +} + +const char *hts_bcf_wmode(int file_type) +{ + if ( file_type == FT_BCF ) return "wbu"; // uncompressed BCF + if ( file_type & FT_BCF ) return "wb"; // compressed BCF + if ( file_type & FT_GZ ) return "wz"; // compressed VCF + return "w"; // uncompressed VCF +} + + diff --git a/bcftools/version.h b/bcftools/version.h new file mode 100644 index 0000000..eb2074c --- /dev/null +++ b/bcftools/version.h @@ -0,0 +1 @@ +#define BCFTOOLS_VERSION "1.6" diff --git a/benchmark/cython_flagstat.py b/benchmark/cython_flagstat.py new file mode 100644 index 0000000..6a9b7df --- /dev/null +++ b/benchmark/cython_flagstat.py @@ -0,0 +1,23 @@ +"""compute number of reads/alignments from BAM file +=================================================== + +This is a benchmarking utility script with limited functionality. + +Compute simple flag stats on a BAM-file using +the pysam cython interface. + +""" + +import sys +import pysam +import pyximport +pyximport.install() +import _cython_flagstat + +assert len(sys.argv) == 2, "USAGE: {} filename.bam".format(sys.argv[0]) + +is_paired, is_proper = _cython_flagstat.count( + pysam.AlignmentFile(sys.argv[1], "rb")) + +print ("there are alignments of %i paired reads" % is_paired) +print ("there are %i proper paired alignments" % is_proper) diff --git a/benchmark/python_flagstat.py b/benchmark/python_flagstat.py new file mode 100644 index 0000000..0a14d80 --- /dev/null +++ b/benchmark/python_flagstat.py @@ -0,0 +1,23 @@ +"""compute number of reads/alignments from BAM file +=================================================== + +This is a benchmarking utility script with limited functionality. + +Compute simple flag stats on a BAM-file using +the pysam python interface. +""" + +import sys +import pysam + +assert len(sys.argv) == 2, "USAGE: {} filename.bam".format(sys.argv[0]) + +is_paired = 0 +is_proper = 0 + +for read in pysam.AlignmentFile(sys.argv[1], "rb"): + is_paired += read.is_paired + is_proper += read.is_proper_pair + +print ("there are alignments of %i paired reads" % is_paired) +print ("there are %i proper paired alignments" % is_proper) diff --git a/buildwheels.sh b/buildwheels.sh new file mode 100755 index 0000000..ae0d953 --- /dev/null +++ b/buildwheels.sh @@ -0,0 +1,69 @@ +#!/bin/bash +# +# Build manylinux1 wheels for pysam. Based on the example at +# +# +# It is best to run this in a fresh clone of the repository! +# +# Run this within the repository root: +# docker run --rm -v $(pwd):/io quay.io/pypa/manylinux1_x86_64 /io/buildwheels.sh +# +# The wheels will be put into the wheelhouse/ subdirectory. +# +# For interactive tests: +# docker run -it -v $(pwd):/io quay.io/pypa/manylinux1_x86_64 /bin/bash + +set -xeuo pipefail + +# For convenience, if this script is called from outside of a docker container, +# it starts a container and runs itself inside of it. +if ! grep -q docker /proc/1/cgroup; then + # We are not inside a container + exec docker run --rm -v $(pwd):/io quay.io/pypa/manylinux1_x86_64 /io/$0 +fi + +yum install -y zlib-devel bzip2-devel xz-devel + +# Python 2.6 is not supported +rm -r /opt/python/cp26* + +# Python 3.3 builds fail with: +# /opt/rh/devtoolset-2/root/usr/libexec/gcc/x86_64-CentOS-linux/4.8.2/ld: cannot find -lchtslib +rm -r /opt/python/cp33* + +# Without libcurl support, htslib can open files from HTTP and FTP URLs. +# With libcurl support, it also supports HTTPS and S3 URLs, but libcurl needs a +# current version of OpenSSL, and we do not want to be responsible for +# updating the wheels as soon as there are any security issues. So disable +# libcurl for now. +# See also . +# +export HTSLIB_CONFIGURE_OPTIONS="--disable-libcurl" + +PYBINS="/opt/python/*/bin" +for PYBIN in ${PYBINS}; do + ${PYBIN}/pip install -r /io/requirements.txt + ${PYBIN}/pip wheel /io/ -w wheelhouse/ +done + +# Bundle external shared libraries into the wheels +# +# The '-L .' option is a workaround. By default, auditwheel puts all external +# libraries (.so files) into a .libs directory and sets the RUNPATH to $ORIGIN/.libs. +# When HTSLIB_MODE is 'shared' (now the default), then all so libraries part of +# pysam require that RUNPATH is set to $ORIGIN (without the .libs). It seems +# auditwheel overwrites $ORIGIN with $ORIGIN/.libs. This workaround makes +# auditwheel set the RUNPATH to "$ORIGIN/." and it will work as desired. +# +for whl in wheelhouse/*.whl; do + auditwheel repair -L . $whl -w /io/wheelhouse/ +done + +# Created files are owned by root, so fix permissions. +chown -R --reference=/io/setup.py /io/wheelhouse/ + +# TODO Install packages and test them +#for PYBIN in ${PYBINS}; do +# ${PYBIN}/pip install pysam --no-index -f /io/wheelhouse +# (cd $HOME; ${PYBIN}/nosetests ...) +#done diff --git a/ci/conda-recipe/build.sh b/ci/conda-recipe/build.sh new file mode 100644 index 0000000..32b67db --- /dev/null +++ b/ci/conda-recipe/build.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# Use internal htslib +chmod a+x ./htslib/configure +export CFLAGS="-I${PREFIX}/include/curl/ -I${PREFIX}/include -L${PREFIX}/lib" +export HTSLIB_CONFIGURE_OPTIONS="--disable-libcurl" + +$PYTHON setup.py install diff --git a/ci/conda-recipe/meta.yaml b/ci/conda-recipe/meta.yaml new file mode 100644 index 0000000..4e57895 --- /dev/null +++ b/ci/conda-recipe/meta.yaml @@ -0,0 +1,29 @@ +package: + name: pysam + version: 0.8.5 + +source: + path: ../../ + +build: + number: 0 + +requirements: + build: + - python + - setuptools + - zlib + - cython + + run: + - python + - zlib + +test: + imports: + - pysam + +about: + home: https://github.com/pysam-developers/pysam + license: MIT + summary: Pysam is a python module for reading and manipulating Samfiles. It's a lightweight wrapper of the samtools C-API. Pysam also includes an interface for tabix. diff --git a/ci/install-CGAT-tools.sh b/ci/install-CGAT-tools.sh new file mode 100755 index 0000000..27eb481 --- /dev/null +++ b/ci/install-CGAT-tools.sh @@ -0,0 +1,281 @@ +#!/usr/bin/env bash + +# function to detect the Operating System +detect_os(){ + +if [ -f /etc/os-release ]; then + + OS=$(cat /etc/os-release | awk '/VERSION_ID/ {sub("="," "); print $2;}' | sed 's/\"//g' | awk '{sub("\\."," "); print $1;}') + if [ "$OS" != "12" ] ; then + + echo + echo " Ubuntu version not supported " + echo + echo " Only Ubuntu 12.x has been tested so far " + echo + exit 1; + + fi + + OS="ubuntu" + +elif [ -f /etc/system-release ]; then + + OS=$(cat /etc/system-release | awk ' {print $4;}' | awk '{sub("\\."," "); print $1;}') + if [ "$OS" != "6" ] ; then + echo + echo " Scientific Linux version not supported " + echo + echo " Only 6.x Scientific Linux has been tested so far " + echo + exit 1; + fi + + OS="sl" + +else + + echo + echo " Operating system not supported " + echo + echo " Exiting installation " + echo + exit 1; + +fi +} # detect_os + +# message to display when the OS is not correct +sanity_check_os() { + echo + echo " Unsupported operating system: $OS " + echo " Installation aborted " + echo + exit 1; +} # sanity_check_os + +# function to install operating system dependencies +install_os_packages() { + +if [ "$OS" == "ubuntu" -o "$OS" == "travis" ] ; then + + echo + echo " Installing packages for Ubuntu " + echo + + apt-get install -y gcc g++ + +elif [ "$OS" == "sl" ] ; then + + echo + echo " Installing packages for Scientific Linux " + echo + + yum -y install gcc zlib-devel gcc-c++ + +else + + sanity_check_os + +fi # if-OS +} # install_os_packages + +# funcion to install Python dependencies +install_python_deps() { + +if [ "$OS" == "ubuntu" -o "$OS" == "sl" ] ; then + + echo + echo " Installing Python dependencies for $1 " + echo + + # Create virtual environment + cd + mkdir CGAT + cd CGAT + wget --no-check-certificate https://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.10.1.tar.gz + tar xvfz virtualenv-1.10.1.tar.gz + rm virtualenv-1.10.1.tar.gz + cd virtualenv-1.10.1 + python virtualenv.py cgat-venv + source cgat-venv/bin/activate + + # Install Python prerequisites + pip install cython + +elif [ "$OS" == "travis" ] ; then + # Travis-CI provides a virtualenv with Python 2.7 + echo + echo " Installing Python dependencies in travis " + echo + + # Install Python prerequisites + pip install cython + pip install nose + +else + + sanity_check_os + +fi # if-OS +} # install_python_deps + +# common set of tasks to prepare external dependencies +nosetests_external_deps() { +echo +echo " Running nosetests for $1 " +echo + +pushd . + +# create a new folder to store external tools +mkdir -p $HOME/CGAT/external-tools + +# install samtools +cd $HOME/CGAT/external-tools +curl -L http://downloads.sourceforge.net/project/samtools/samtools/1.3/samtools-1.3.tar.bz2 > samtools-1.3.tar.bz2 +tar xjf samtools-1.3.tar.bz2 +cd samtools-1.3 +make +PATH=$PATH:$HOME/CGAT/external-tools/samtools-1.3 + +echo "installed samtools" +samtools --version + +if [ $? != 0 ]; then + exit 1 +fi + +# install bcftools +cd $HOME/CGAT/external-tools +curl -L https://github.com/samtools/bcftools/releases/download/1.3/bcftools-1.3.tar.bz2 > bcftools-1.3.tar.bz2 +tar xjf bcftools-1.3.tar.bz2 +cd bcftools-1.3 +make +PATH=$PATH:$HOME/CGAT/external-tools/bcftools-1.3 + +echo "installed bcftools" +bcftools --version + +if [ $? != 0 ]; then + exit 1 +fi + +popd + +} # nosetests_external_deps + + +# function to run nosetests +run_nosetests() { + +echo +echo " Running nosetests for $1 " +echo + +# prepare external dependencies +nosetests_external_deps $OS + +# install code +python setup.py install + +# change into tests directory. Otherwise, +# 'import pysam' will import the repository, +# not the installed version. This causes +# problems in the compilation test. +cd tests + +# create auxilliary data +echo +echo 'building test data' +echo +make -C pysam_data all +make -C cbcf_data all + +# run nosetests +# -s: do not capture stdout, conflicts with pysam.dispatch +# -v: verbose output +nosetests -s -v + +} # run_nosetests + +# function to display help message +help_message() { +echo +echo " Use this script as follows: " +echo +echo " 1) Become root and install the operating system* packages: " +echo " ./install-CGAT-tools.sh --install-os-packages" +echo +echo " 2) Now, as a normal user (non root), install the Python dependencies**: " +echo " ./install-CGAT-tools.sh --install-python-deps" +echo +echo " At this stage the CGAT Code Collection is ready to go and you do not need further steps. Please type the following for more information:" +echo " source $HOME/CGAT/virtualenv-1.10.1/cgat-venv/bin/activate" +echo " cgat --help " +echo +echo " The CGAT Code Collection tests the software with nosetests. If you are interested in running those, please continue with the following steps:" +echo +echo " 3) Become root to install external tools and set up the environment: " +echo " ./install-CGAT-tools.sh --install-nosetests-deps" +echo +echo " 4) Then, back as a normal user (non root), run nosetests as follows:" +echo " ./install-CGAT-tools.sh --run-nosetests" +echo +echo " NOTES: " +echo " * Supported operating systems: Ubuntu 12.x and Scientific Linux 6.x " +echo " ** An isolated virtual environment will be created to install Python dependencies " +echo +exit 1; +} + + +# the main script starts here + +if [ $# -eq 0 -o $# -gt 1 ] ; then + + help_message + +else + + if [ "$1" == "--help" ] ; then + + help_message + + elif [ "$1" == "--travis" ] ; then + + OS="travis" + install_os_packages + install_python_deps + run_nosetests + + elif [ "$1" == "--install-os-packages" ] ; then + + detect_os + install_os_packages + + elif [ "$1" == "--install-python-deps" ] ; then + + detect_os + install_python_deps + + elif [ "$1" == "--install-nosetests-deps" ] ; then + + detect_os + install_nosetests_deps + + elif [ "$1" == "--run-nosetests" ] ; then + + detect_os + run_nosetests + + else + + echo + echo " Incorrect input parameter: $1 " + help_message + + fi # if argument 1 + +fi # if number of input parameters + diff --git a/cy_build.py b/cy_build.py new file mode 100644 index 0000000..fae7055 --- /dev/null +++ b/cy_build.py @@ -0,0 +1,86 @@ +import os +import re +import sys + +try: + from Cython.Distutils import build_ext +except ImportError: + from setuptools.command.build_ext import build_ext + +from distutils.extension import Extension +from distutils.sysconfig import get_config_vars, get_python_lib, get_python_version +from pkg_resources import Distribution + + +if sys.platform == 'darwin': + config_vars = get_config_vars() + config_vars['LDSHARED'] = config_vars['LDSHARED'].replace('-bundle', '') + config_vars['SHLIB_EXT'] = '.so' + + +def is_pip_install(): + if "_" in os.environ and os.environ["_"].endswith("pip"): + return True + if "pip-egg-info" in sys.argv: + return True + if re.search("/pip-.*-build/", __file__): + return True + return False + + +class CyExtension(Extension): + def __init__(self, *args, **kwargs): + self._init_func = kwargs.pop("init_func", None) + Extension.__init__(self, *args, **kwargs) + + def extend_includes(self, includes): + self.include_dirs.extend(includes) + + def extend_macros(self, macros): + self.define_macros.extend(macros) + + def extend_extra_objects(self, objs): + self.extra_objects.extend(objs) + + +class cy_build_ext(build_ext): + + def _get_egg_name(self): + ei_cmd = self.get_finalized_command("egg_info") + return Distribution( + None, None, ei_cmd.egg_name, ei_cmd.egg_version, get_python_version(), + self.distribution.has_ext_modules() and self.plat_name).egg_name() + + def build_extension(self, ext): + + if isinstance(ext, CyExtension) and ext._init_func: + ext._init_func(ext) + + if not self.inplace: + ext.library_dirs.append(os.path.join(self.build_lib, "pysam")) + + if sys.platform == 'darwin': + # The idea is to give shared libraries an install name of the form + # `@rpath/`, and to set the rpath equal to + # @loader_path. This will allow Python packages to find the library + # in the expected place, while still giving enough flexibility to + # external applications to link against the library. + relative_module_path = ext.name.replace(".", os.sep) + get_config_vars()["SO"] + library_path = os.path.join( + "@rpath", os.path.basename(relative_module_path) + ) + + if not ext.extra_link_args: + ext.extra_link_args = [] + ext.extra_link_args += ['-dynamiclib', + '-rpath', '@loader_path', + '-Wl,-headerpad_max_install_names', + '-Wl,-install_name,%s' % library_path, + '-Wl,-x'] + else: + if not ext.extra_link_args: + ext.extra_link_args = [] + + ext.extra_link_args += ['-Wl,-rpath,$ORIGIN'] + + build_ext.build_extension(self, ext) diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 0000000..69e4e3a --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,96 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d _build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +DIR_PUBLISH=/ifs/home/andreas/public_html/documentation/pysam + +.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + @echo " publish to copy the HTML documentation to the server." + +clean: + -rm -rf _build/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) _build/html + @echo + @echo "Build finished. The HTML pages are in _build/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) _build/dirhtml + @echo + @echo "Build finished. The HTML pages are in _build/dirhtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) _build/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) _build/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) _build/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in _build/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) _build/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in _build/qthelp, like this:" + @echo "# qcollectiongenerator _build/qthelp/samtools.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile _build/qthelp/samtools.qhc" + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) _build/latex + @echo + @echo "Build finished; the LaTeX files are in _build/latex." + @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ + "run these through (pdf)latex." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) _build/changes + @echo + @echo "The overview file is in _build/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) _build/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in _build/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) _build/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in _build/doctest/output.txt." + +publish: + rm -rf $(DIR_PUBLISH) + mkdir -p $(DIR_PUBLISH) + cp -r _build/html/* $(DIR_PUBLISH) diff --git a/doc/api.rst b/doc/api.rst new file mode 100644 index 0000000..8e76686 --- /dev/null +++ b/doc/api.rst @@ -0,0 +1,221 @@ +====================================================== +pysam - An interface for reading and writing SAM files +====================================================== + +Introduction +============ + +Pysam is a python module that makes it easy to read and manipulate +mapped short read sequence data stored in SAM/BAM files. It is a +lightweight wrapper of the htslib_ C-API. + +This page provides a quick introduction in using pysam followed by the +API. See :ref:`usage` for more detailed usage instructions. + +To use the module to read a file in BAM format, create a +:class:`~pysam.AlignmentFile` object:: + + import pysam + samfile = pysam.AlignmentFile("ex1.bam", "rb") + +Once a file is opened you can iterate over all of the read mapping to +a specified region using :meth:`~pysam.AlignmentFile.fetch`. Each +iteration returns a :class:`~pysam.AlignedSegment` object which +represents a single read along with its fields and optional tags:: + + for read in samfile.fetch('chr1', 100, 120): + print read + + samfile.close() + +To give:: + + EAS56_57:6:190:289:82 0 99 <<<7<<<;<<<<<<<<8;;<7;4<;<;;;;;94<; 69 CTCAAGGTTGTTGCAAGGGGGTCTATGTGAACAAA 0 192 1 + EAS56_57:6:190:289:82 0 99 <<<<<<;<<<<<<<<<<;<<;<<<<;8<6;9;;2; 137 AGGGGTGCAGAGCCGAGTCACGGGGTTGCCAGCAC 73 64 1 + EAS51_64:3:190:727:308 0 102 <<<<<<<<<<<<<<<<<<<<<<<<<<<::<<<844 99 GGTGCAGAGCCGAGTCACGGGGTTGCCAGCACAGG 99 18 1 + ... + +You can also write to a :class:`~pysam.AlignmentFile`:: + + import pysam + samfile = pysam.AlignmentFile("ex1.bam", "rb") + pairedreads = pysam.AlignmentFile("allpaired.bam", "wb", template=samfile) + for read in samfile.fetch(): + if read.is_paired: + pairedreads.write(read) + + pairedreads.close() + samfile.close() + +An alternative way of accessing the data in a SAM file is by iterating +over each base of a specified region using the +:meth:`~pysam.AlignmentFile.pileup` method. Each iteration returns a +:class:`~pysam.PileupColumn` which represents all the reads in the SAM +file that map to a single base in the reference sequence. The list of +reads are represented as :class:`~pysam.PileupRead` objects in the +:attr:`PileupColumn.pileups ` property:: + + import pysam + samfile = pysam.AlignmentFile("ex1.bam", "rb" ) + for pileupcolumn in samfile.pileup("chr1", 100, 120): + print ("\ncoverage at base %s = %s" % + (pileupcolumn.pos, pileupcolumn.n)) + for pileupread in pileupcolumn.pileups: + if not pileupread.is_del and not pileupread.is_refskip: + # query position is None if is_del or is_refskip is set. + print ('\tbase in read %s = %s' % + (pileupread.alignment.query_name, + pileupread.alignment.query_sequence[pileupread.query_position])) + + samfile.close() + +The above code outputs:: + + coverage at base 99 = 1 + base in read EAS56_57:6:190:289:82 = A + + coverage at base 100 = 1 + base in read EAS56_57:6:190:289:82 = G + + coverage at base 101 = 1 + base in read EAS56_57:6:190:289:82 = G + + coverage at base 102 = 2 + base in read EAS56_57:6:190:289:82 = G + base in read EAS51_64:3:190:727:308 = G + ... + +Commands available in :term:`csamtools` are available as simple +function calls. For example:: + + pysam.sort("-o", "output.bam", "ex1.bam") + +corresponds to the command line:: + + samtools sort -o output.bam ex1.bam + +Analogous to :class:`~pysam.AlignmentFile`, a +:class:`~pysam.TabixFile` allows fast random access to compressed and +tabix indexed tab-separated file formats with genomic data:: + + import pysam + tabixfile = pysam.TabixFile("example.gtf.gz") + + for gtf in tabixfile.fetch("chr1", 1000, 2000): + print (gtf.contig, gtf.start, gtf.end, gtf.gene_id) + +:class:`~pysam.TabixFile` implements lazy parsing in order to iterate +over large tables efficiently. + +More detailed usage instructions is at :ref:`usage`. + +.. note:: + + Coordinates in pysam are always 0-based (following the python + convention). SAM text files use 1-based coordinates. + +.. note:: + + The above examples can be run in the :file:`tests` directory of the + installation directory. Type 'make' before running them. + +.. seealso:: + + https://github.com/pysam-developers/pysam + + The pysam code repository, containing source code and download + instructions + + http://pysam.readthedocs.org/en/latest/ + + The pysam website containing documentation + +API +=== + +SAM/BAM files +------------- + +Objects of type :class:`~pysam.AlignmentFile` allow working with +BAM/SAM formatted files. + +.. autoclass:: pysam.AlignmentFile + :members: + +An :class:`~pysam.AlignedSegment` represents an aligned segment within +a SAM/BAM file. + +.. autoclass:: pysam.AlignedSegment + :members: + +.. autoclass:: pysam.PileupColumn + :members: + +.. autoclass:: pysam.PileupRead + :members: + +.. autoclass:: pysam.IndexedReads + :members: + + +Tabix files +----------- + +:class:`~pysam.TabixFile` opens tabular files that have been +indexed with tabix_. + +.. autoclass:: pysam.TabixFile + :members: + +To iterate over tabix files, use :func:`~pysam.tabix_iterator`: + +.. autofunction:: pysam.tabix_iterator + +.. autofunction:: pysam.tabix_compress + +.. autofunction:: pysam.tabix_index + +.. autoclass:: pysam.asTuple + :members: + +.. autoclass:: pysam.asVCF + :members: + +.. autoclass:: pysam.asBed + :members: + +.. autoclass:: pysam.asGTF + :members: + + +Fasta files +----------- + +.. autoclass:: pysam.FastaFile + :members: + +Fastq files +----------- + +.. autoclass:: pysam.FastxFile + :members: + + +.. autoclass:: pysam.FastqProxy + :members: + + +VCF files +--------- + +.. autoclass:: pysam.VariantFile + :members: + +.. autoclass:: pysam.VariantHeader + :members: + +.. autoclass:: pysam.VariantRecord + :members: + +.. autoclass:: pysam.VariantHeaderRecord + :members: diff --git a/doc/benchmarking.rst b/doc/benchmarking.rst new file mode 100644 index 0000000..1ec0d43 --- /dev/null +++ b/doc/benchmarking.rst @@ -0,0 +1,68 @@ +============ +Benchmarking +============ + +Latest benchmarking results:: + + ------------------------------------------------------------------------------------------------------------------------ benchmark: 57 tests ------------------------------------------------------------------------------------------------------------------------ + Name (time in us) Min Max Mean StdDev Median IQR Outliers OPS Rounds Iterations + --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + test_set_binary_tag 93.8382 (1.0) 199.8786 (1.0) 96.1554 (1.0) 2.6241 (1.0) 95.7036 (1.0) 1.2442 (1.0) 276;303 10,399.8372 (1.0) 3170 1 + test_fasta_iteration_long_sequences_without_persistence 145.3292 (1.55) 296.4940 (1.48) 176.5367 (1.84) 30.0896 (11.47) 167.2544 (1.75) 25.1532 (20.22) 840;579 5,664.5438 (0.54) 4972 1 + test_fasta_iteration_long_sequences_as_file 149.0638 (1.59) 312.6319 (1.56) 177.2990 (1.84) 30.5218 (11.63) 168.6383 (1.76) 27.7516 (22.30) 669;510 5,640.1883 (0.54) 4493 1 + test_fasta_iteration_long_sequences 150.3211 (1.60) 429.9153 (2.15) 176.7384 (1.84) 30.7021 (11.70) 167.5002 (1.75) 21.7482 (17.48) 682;647 5,658.0803 (0.54) 4845 1 + test_fasta_iteration_short_sequences_as_file 190.6604 (2.03) 395.8736 (1.98) 216.6984 (2.25) 32.8710 (12.53) 208.9385 (2.18) 16.8057 (13.51) 291;326 4,614.7086 (0.44) 3205 1 + test_read_python_uncompressed 214.1297 (2.28) 450.2051 (2.25) 234.6956 (2.44) 33.3642 (12.71) 223.4913 (2.34) 15.0129 (12.07) 140;221 4,260.8375 (0.41) 2043 1 + test_fastq_iteration_short_sequences_as_file 217.5961 (2.32) 420.1643 (2.10) 238.0264 (2.48) 30.4469 (11.60) 228.8874 (2.39) 15.5573 (12.50) 209;235 4,201.2146 (0.40) 2877 1 + test_iterate_file_uncompressed 225.5719 (2.40) 481.0989 (2.41) 249.7603 (2.60) 40.7266 (15.52) 239.5548 (2.50) 15.9908 (12.85) 209;327 4,003.8387 (0.38) 3627 1 + test_iterate_file_compressed 257.5517 (2.74) 576.6843 (2.89) 287.2536 (2.99) 49.8803 (19.01) 277.4149 (2.90) 14.3824 (11.56) 126;248 3,481.2446 (0.33) 3023 1 + test_iterate_generic_uncompressed 344.8855 (3.68) 712.5959 (3.57) 370.9369 (3.86) 46.2477 (17.62) 365.0384 (3.81) 15.7915 (12.69) 54;83 2,695.8763 (0.26) 2240 1 + test_iterate_parsed_uncompressed 349.3819 (3.72) 765.3460 (3.83) 378.1446 (3.93) 54.2199 (20.66) 369.5488 (3.86) 15.4320 (12.40) 48;69 2,644.4910 (0.25) 1638 1 + test_read_python_compressed 462.0645 (4.92) 836.2234 (4.18) 493.6158 (5.13) 51.2946 (19.55) 485.5469 (5.07) 11.4385 (9.19) 28;46 2,025.8670 (0.19) 906 1 + test_iterate_parsed_compressed 586.5730 (6.25) 1,050.1631 (5.25) 632.5464 (6.58) 82.6438 (31.49) 608.1080 (6.35) 20.1799 (16.22) 115;143 1,580.9117 (0.15) 1474 1 + test_iterate_generic_compressed 587.7707 (6.26) 1,093.4286 (5.47) 639.6830 (6.65) 85.2593 (32.49) 612.6408 (6.40) 19.9433 (16.03) 105;144 1,563.2743 (0.15) 1260 1 + test_fasta_iteration_short_sequences_without_persistence 725.2563 (7.73) 1,091.6069 (5.46) 774.6549 (8.06) 53.0901 (20.23) 751.8455 (7.86) 45.0788 (36.23) 172;110 1,290.8974 (0.12) 1276 1 + test_read_binary_tag 817.2598 (8.71) 1,232.0559 (6.16) 902.7002 (9.39) 87.7807 (33.45) 871.5261 (9.11) 17.4227 (14.00) 39;55 1,107.7875 (0.11) 331 1 + test_fastq_iteration_short_sequences_without_persistence 840.3640 (8.96) 1,201.5756 (6.01) 870.9679 (9.06) 35.8709 (13.67) 866.1682 (9.05) 15.9768 (12.84) 53;85 1,148.1480 (0.11) 1124 1 + test_count_number_lines_from_sam_with_pysam 2,755.6140 (29.37) 9,656.9806 (48.31) 2,963.2206 (30.82) 729.0077 (277.81) 2,814.3115 (29.41) 106.2388 (85.38) 8;14 337.4707 (0.03) 281 1 + test_fasta_iteration_short_sequences 2,905.5942 (30.96) 3,674.1439 (18.38) 2,982.3892 (31.02) 90.9585 (34.66) 2,941.2108 (30.73) 96.1348 (77.26) 27;7 335.3016 (0.03) 302 1 + test_fastq_iteration_short_sequences 3,601.3145 (38.38) 4,065.5769 (20.34) 3,671.8361 (38.19) 71.5348 (27.26) 3,635.1625 (37.98) 81.5415 (65.53) 43;10 272.3433 (0.03) 243 1 + test_count_number_lines_from_bam_with_pysam 4,178.8872 (44.53) 12,063.5536 (60.35) 4,395.9713 (45.72) 794.3991 (302.73) 4,240.1757 (44.31) 67.0198 (53.86) 6;19 227.4810 (0.02) 205 1 + test_build_depth_from_bam_with_pysam 6,290.2980 (67.03) 6,788.0806 (33.96) 6,420.3862 (66.77) 126.5447 (48.22) 6,357.6270 (66.43) 94.3104 (75.80) 35;29 155.7539 (0.01) 145 1 + test_build_depth_with_filter_from_bam_with_pysam 6,935.8926 (73.91) 8,309.5767 (41.57) 7,085.6801 (73.69) 221.5069 (84.41) 7,005.6170 (73.20) 74.4388 (59.83) 14;27 141.1297 (0.01) 139 1 + test_build_query_positions_from_bam_with_pysam 8,729.2437 (93.02) 16,836.6525 (84.23) 9,173.2902 (95.40) 1,057.4321 (402.97) 8,885.4395 (92.84) 264.7634 (212.79) 3;9 109.0121 (0.01) 103 1 + test_build_mapping_qualities_from_bam_with_pysam 8,805.0570 (93.83) 15,829.8910 (79.20) 9,274.7475 (96.46) 964.6925 (367.63) 9,004.7438 (94.09) 354.9103 (285.24) 4;9 107.8196 (0.01) 106 1 + test_build_query_qualities_from_bam_with_pysam 8,947.6798 (95.35) 16,756.8158 (83.83) 9,272.9117 (96.44) 1,008.7759 (384.43) 9,017.0493 (94.22) 217.2068 (174.57) 3;5 107.8410 (0.01) 94 1 + test_build_query_bases_from_bam_with_samtoolspysam 9,149.0448 (97.50) 9,776.0092 (48.91) 9,208.3405 (95.77) 86.1889 (32.85) 9,190.2809 (96.03) 34.1963 (27.48) 5;7 108.5972 (0.01) 84 1 + test_count_number_lines_from_bam_with_samtoolspipe 10,431.4052 (111.16) 13,431.7447 (67.20) 11,052.2360 (114.94) 445.8241 (169.90) 11,014.8042 (115.09) 492.6044 (395.91) 17;3 90.4794 (0.01) 90 1 + test_count_number_lines_from_bam_with_samtools 12,057.8520 (128.50) 13,537.5429 (67.73) 12,595.0708 (130.99) 381.1799 (145.26) 12,499.5783 (130.61) 457.8107 (367.94) 25;1 79.3961 (0.01) 73 1 + test_count_number_lines_from_sam_with_samtoolspipe 12,434.8756 (132.51) 14,234.1983 (71.21) 13,034.1032 (135.55) 371.0373 (141.40) 13,049.9089 (136.36) 464.8147 (373.57) 21;3 76.7218 (0.01) 72 1 + test_build_query_bases_from_bam_with_pysam 12,811.6887 (136.53) 19,972.7099 (99.92) 13,268.7908 (137.99) 1,103.9459 (420.70) 13,023.1632 (136.08) 202.3596 (162.64) 4;6 75.3648 (0.01) 76 1 + test_build_pileup_from_bam_with_samtoolspipe 13,480.7490 (143.66) 15,413.4836 (77.11) 13,968.3817 (145.27) 362.1282 (138.00) 13,917.4843 (145.42) 447.9736 (360.04) 12;3 71.5903 (0.01) 66 1 + test_count_number_lines_from_sam_with_samtools 13,963.2300 (148.80) 15,936.2238 (79.73) 14,442.5627 (150.20) 340.4846 (129.75) 14,395.4996 (150.42) 339.3036 (272.70) 12;2 69.2398 (0.01) 59 1 + test_build_pileup_from_bam_with_samtoolsshell 15,140.2969 (161.34) 16,469.8567 (82.40) 15,525.9034 (161.47) 256.0741 (97.59) 15,526.7641 (162.24) 318.5044 (255.98) 13;2 64.4085 (0.01) 51 1 + test_build_depth_from_bam_with_samtoolsshell 15,291.4841 (162.96) 16,387.9916 (81.99) 15,656.5365 (162.83) 217.2420 (82.79) 15,609.9945 (163.11) 258.9412 (208.11) 16;2 63.8711 (0.01) 57 1 + test_build_query_bases_from_bam_with_samtoolspipe 15,478.0652 (164.94) 17,068.8462 (85.40) 16,072.5749 (167.15) 327.6668 (124.87) 16,040.5049 (167.61) 428.1597 (344.11) 18;2 62.2178 (0.01) 60 1 + test_build_query_bases_from_bam_with_samtoolsshell 15,765.5794 (168.01) 17,102.8059 (85.57) 16,305.4955 (169.57) 367.6865 (140.12) 16,256.2486 (169.86) 593.9230 (477.34) 20;0 61.3290 (0.01) 57 1 + test_build_depth_from_bam_with_samtoolspipe 16,024.7944 (170.77) 25,804.2309 (129.10) 17,041.3497 (177.23) 1,522.0046 (580.01) 16,726.8887 (174.78) 767.1015 (616.52) 1;1 58.6808 (0.01) 40 1 + test_build_query_qualities_from_bam_with_samtoolspipe 16,275.7467 (173.44) 18,501.0433 (92.56) 17,262.6517 (179.53) 642.2656 (244.76) 17,255.3696 (180.30) 1,060.3429 (852.20) 20;0 57.9285 (0.01) 51 1 + test_build_pileup_from_bam_with_pysam 16,632.5681 (177.25) 19,306.6560 (96.59) 17,037.7162 (177.19) 531.0751 (202.38) 16,870.8330 (176.28) 279.1677 (224.37) 3;4 58.6933 (0.01) 32 1 + test_build_mapping_qualities_from_bam_with_samtoolspipe 17,398.3518 (185.41) 18,481.6569 (92.46) 17,832.1261 (185.45) 294.9103 (112.39) 17,837.8206 (186.39) 511.8400 (411.37) 21;0 56.0786 (0.01) 52 1 + test_build_query_names_from_bam_with_pysam 31,534.0199 (336.05) 38,316.2647 (191.70) 32,677.2804 (339.84) 1,371.6101 (522.70) 32,179.0325 (336.24) 1,392.1391 (>1000.0) 3;1 30.6023 (0.00) 30 1 + test_fetch_plain 43,747.1233 (466.20) 48,690.7829 (243.60) 44,573.8085 (463.56) 1,170.8588 (446.20) 44,067.5411 (460.46) 1,436.5837 (>1000.0) 3;1 22.4347 (0.00) 22 1 + test_build_query_positions_from_bam_with_samtoolspipe 46,316.5548 (493.58) 53,700.3577 (268.66) 48,235.6640 (501.64) 1,861.0317 (709.21) 47,625.2194 (497.63) 2,603.7074 (>1000.0) 6;1 20.7315 (0.00) 21 1 + test_build_query_bases_with_reference_from_bam_with_samtoolspysam 51,565.1479 (549.51) 53,523.1121 (267.78) 51,778.6650 (538.49) 424.4621 (161.76) 51,656.8925 (539.76) 110.5051 (88.81) 1;4 19.3130 (0.00) 20 1 + test_build_query_bases_with_reference_from_bam_with_pysam 58,850.6740 (627.15) 62,164.5451 (311.01) 60,161.6779 (625.67) 1,120.6101 (427.05) 59,595.2785 (622.71) 1,995.0196 (>1000.0) 7;0 16.6219 (0.00) 16 1 + test_iterate_file_large_uncompressed 59,419.9076 (633.22) 69,053.0874 (345.48) 62,825.7126 (653.38) 3,805.1150 (>1000.0) 60,805.1391 (635.35) 6,407.6949 (>1000.0) 3;0 15.9170 (0.00) 14 1 + test_iterate_file_large_compressed 63,986.9571 (681.89) 74,156.9120 (371.01) 68,370.8835 (711.05) 3,254.6200 (>1000.0) 67,221.2075 (702.39) 4,770.3525 (>1000.0) 5;0 14.6261 (0.00) 16 1 + test_read_python_large_uncompressed 67,611.8080 (720.51) 89,112.1533 (445.83) 73,631.8916 (765.76) 5,978.7052 (>1000.0) 71,702.4822 (749.21) 7,856.0165 (>1000.0) 2;1 13.5811 (0.00) 13 1 + test_fetch_parsed 72,237.5344 (769.81) 81,976.9856 (410.13) 74,540.4099 (775.21) 2,326.3668 (886.54) 74,016.3419 (773.39) 1,579.0667 (>1000.0) 1;1 13.4155 (0.00) 14 1 + test_build_query_bases_from_bam_with_pysam_pileups 75,841.3766 (808.21) 87,975.1425 (440.14) 79,393.9784 (825.68) 3,516.2458 (>1000.0) 79,346.7313 (829.09) 5,217.5033 (>1000.0) 2;0 12.5954 (0.00) 13 1 + test_build_query_bases_with_reference_from_bam_with_samtoolspipe 131,162.9396 (>1000.0) 132,858.8147 (664.70) 131,838.0199 (>1000.0) 595.6090 (226.98) 131,801.5633 (>1000.0) 956.9665 (769.11) 2;0 7.5851 (0.00) 8 1 + test_iterate_parsed_large_uncompressed 132,991.8914 (>1000.0) 140,153.4099 (701.19) 134,101.5892 (>1000.0) 2,452.3161 (934.54) 133,218.1590 (>1000.0) 396.3616 (318.56) 1;1 7.4570 (0.00) 8 1 + test_iterate_generic_large_uncompressed 134,743.7277 (>1000.0) 142,329.4526 (712.08) 138,167.4954 (>1000.0) 3,346.7773 (>1000.0) 136,839.1849 (>1000.0) 6,541.1879 (>1000.0) 4;0 7.2376 (0.00) 8 1 + test_read_python_large_compressed 175,127.6311 (>1000.0) 190,855.1529 (954.86) 181,702.9339 (>1000.0) 5,756.2207 (>1000.0) 181,221.0185 (>1000.0) 8,577.6616 (>1000.0) 2;0 5.5035 (0.00) 6 1 + test_iterate_parsed_large_compressed 231,405.7611 (>1000.0) 243,728.8519 (>1000.0) 239,037.8296 (>1000.0) 5,212.7778 (>1000.0) 241,544.3324 (>1000.0) 8,062.6113 (>1000.0) 1;0 4.1834 (0.00) 5 1 + test_iterate_generic_large_compressed 235,042.3876 (>1000.0) 256,518.8371 (>1000.0) 242,535.5468 (>1000.0) 8,272.5197 (>1000.0) 240,163.0748 (>1000.0) 8,360.1568 (>1000.0) 1;0 4.1231 (0.00) 5 1 + --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + diff --git a/doc/conf.py b/doc/conf.py new file mode 100644 index 0000000..375aa55 --- /dev/null +++ b/doc/conf.py @@ -0,0 +1,223 @@ +# -*- coding: utf-8 -*- +# +# samtools documentation build configuration file, created by +# sphinx-quickstart on Wed Aug 12 14:43:42 2009. +# +# This file is execfile()d with the current directory set to its containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys, os, glob + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +_libdir = "../build/lib.%s-%s-%s.%s" % (os.uname()[0].lower(), os.uname()[4], + sys.version_info[0], sys.version_info[1]) +if os.path.exists(_libdir): + sys.path.insert(0, os.path.abspath(_libdir)) + +# -- General configuration ----------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = ['sphinx.ext.autodoc', + 'sphinx.ext.autosummary', + 'sphinx.ext.todo', + 'sphinx.ext.ifconfig', + 'sphinx.ext.intersphinx', + 'sphinx.ext.napoleon'] + +intersphinx_mapping = {'python': ('http://docs.python.org/3.5', None)} + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'pysam' +copyright = u'2009, Andreas Heger, Kevin Jacobs et al.' + +# Included at the end of each rst file +rst_epilog = ''' +.. _CGAT Training Programme: http://www.cgat.org +.. _pysam: https://github.com/pysam-developers/pysam +.. _samtools: http://samtools.sourceforge.net/ +.. _bcftools: https://samtools.github.io/bcftools/bcftools.html +.. _htslib: http://www.htslib.org/ +.. _tabix: http://samtools.sourceforge.net/tabix.shtml +.. _Galaxy: https://main.g2.bx.psu.edu/ +.. _cython: http://cython.org/ +.. _python: http://python.org/ +.. _pyximport: http://www.prescod.net/pyximport/ +.. _conda: https://conda.io/docs/ +.. _bioconda: https://bioconda.github.io/ +''' + +autosummary_generate = True + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +import pysam.version +# The short X.Y version. +version = pysam.version.__version__ +# The full version, including alpha/beta/rc tags. +release = version + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +# today = '' +# Else, today_fmt is used as the format for a strftime call. +# today_fmt = '%B %d, %Y' + +# List of documents that shouldn't be included in the build. +# unused_docs = [] + +# List of directories, relative to source directory, that shouldn't be searched +# for source files. +exclude_trees = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all documents. +# default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +# add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +# add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +# show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + + +# -- Options for HTML output --------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. Major themes that come with +# Sphinx are currently 'default' and 'sphinxdoc'. +html_theme = 'default' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +# html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +# html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +# html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +# html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +# html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = [] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +# html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +# html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +# html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +# html_additional_pages = {} + +# If false, no module index is generated. +# html_use_modindex = True + +# If false, no index is generated. +# html_use_index = True + +# If true, the index is split into individual pages for each letter. +# html_split_index = False + +# If true, links to the reST sources are added to the pages. +# html_show_sourcelink = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +# html_use_opensearch = '' + +# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). +# html_file_suffix = '' + +# Output file base name for HTML help builder. +htmlhelp_basename = 'samtoolsdoc' + + +# -- Options for LaTeX output -------------------------------------------------- + +# The paper size ('letter' or 'a4'). +# latex_paper_size = 'letter' + +# The font size ('10pt', '11pt' or '12pt'). +# latex_font_size = '10pt' + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass [howto/manual]). +latex_documents = [ + ('index', 'pysam.tex', ur'pysam documentation', + ur'Andreas Heger, Kevin Jacobs et al.', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +# latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +# latex_use_parts = False + +# Additional stuff for the LaTeX preamble. +# latex_preamble = '' + +# Documents to append as an appendix to all manuals. +# latex_appendices = [] + +# If false, no module index is generated. +# latex_use_modindex = True diff --git a/doc/developer.rst b/doc/developer.rst new file mode 100644 index 0000000..09ae832 --- /dev/null +++ b/doc/developer.rst @@ -0,0 +1,74 @@ +================= +Developer's guide +================= + +Code organization +================= + +The top level directory is organized in the following +directories: + +:file:`pysam` + Code specific to pysam + +:file:`doc` + The documentation. To build the latest documention type:: + + make -C doc html + +:file:`tests` + Code and data for testing and benchmarking + +:file:`htslib` + Source code from htslib_ shipped with pysam. See + :file:`import.py` about importing. + +:file:`samtools` + Source code from :term:`csamtools` shipped with pysam. See + :file:`import.py` about importing. + +:file:`bcftools` + Source code from :term:`cbcftools` shipped with pysam. See + :file:`import.py` about importing. + + +Importing new versions of htslib and samtools +============================================= + +See instructions in :file:`import.py` to import the latest +version of htslib_, samtools_ and bcftools_. + +Unit testing +============ + +Unit tests are in the :file:`tests` directory. To run all unit tests, +run:: + + pytest tests + +Benchmarking +============ + +To run the benchmarking suite, make sure that `pytest-benchmark +`_ is installed. To run +all benchmarks, type:: + + pytest tests/*_bench.py + +See :ref:`Benchmarking` for more on this topic. + +Contributors +============ + +Please see github for a list of all contributors: + +https://github.com/pysam-developers/pysam/graphs/contributors + +Many thanks to all contributors for helping in making pysam +useful. + + + + + + diff --git a/doc/faq.rst b/doc/faq.rst new file mode 100644 index 0000000..e07e1cf --- /dev/null +++ b/doc/faq.rst @@ -0,0 +1,278 @@ +=== +FAQ +=== + +How should I cite pysam +======================= + +Pysam has not been published in print. When refering pysam, please +use the github URL: https://github.com/pysam-developers/pysam. +As pysam is a wrapper around htslib and the samtools package, I +suggest cite `Li et al (2009) `. + +Is pysam thread-safe? +===================== + +Pysam is a mix of python and C code. Instructions within python are +generally made thread-safe through python's `global interpreter lock`_ +(GIL_). This ensures that python data structures will always be in a +consistent state. + +If an external function outside python is called, the programmer has a +choice to keep the GIL in place or to release it. Keeping the GIL in +place will make sure that all python threads wait until the external +function has completed. This is a safe option and ensures +thread-safety. + +Alternatively, the GIL can be released while the external function is +called. This will allow other threads to run concurrently. This can be +beneficial if the external function is expected to halt, for example +when waiting for data to read or write. However, to achieve +thread-safety, the external function needs to implememented with +thread-safety in mind. This means that there can be no shared state +between threads, or if there is shared, it needs to be controlled to +prevent any access conflicts. + +Pysam generally uses the latter option and aims to release the GIL for +I/O intensive tasks. This is generally fine, but thread-safety of all +parts have not been fully tested. + +A related issue is when different threads read from the same file +objec - or the same thread uses two iterators over a file. There is +only a single file-position for each opened file. To prevent this from +hapeding, use the option ``mulitple_iterator=True`` when calling +a fetch() method. This will return an iterator on a newly opened +file. + +pysam coordinates are wrong +=========================== + +pysam uses 0-based coordinates and the half-open notation for ranges +as does python. Coordinates and intervals reported from pysam always +follow that convention. + +Confusion might arise as different file formats might have different +conventions. For example, the SAM format is 1-based while the BAM +format is 0-based. It is important to remember that pysam will always +conform to the python convention and translate to/from the file format +automatically. + +The only exception is the :term:`region` string in the +:meth:`~pysam.AlignmentFile.fetch` and +:meth:`~pysam.AlignmentFile.pileup` methods. This string follows the +convention of the samtools command line utilities. The same is true +for any coordinates passed to the samtools command utilities directly, +such as :meth:`pysam.mpileup`. + +Calling pysam.fetch() confuses existing iterators +================================================= + +The following code will cause unexpected behaviour:: + + samfile = pysam.AlignmentFile("pysam_ex1.bam", "rb") + + iter1 = samfile.fetch("chr1") + print (iter1.next().reference_id) + iter2 = samfile.fetch("chr2") + print (iter2.next().reference_id) + print (iter1.next().reference_id) + +This will give the following output:: + + 0 + 1 + Traceback (most recent call last): + File "xx.py", line 8, in + print iter1.next().reference_id + File "calignmentfile.pyx", line 1408, in + pysam.calignmentfile.IteratorRowRegion.__next__ + (pysam/calignmentfile.c:16461) + StopIteration + +Note how the second iterator stops as the file pointer has moved to +chr2. The correct way to work with multiple iterators is:: + + samfile = pysam.AlignmentFile("pysam_ex1.bam", "rb") + + iter1 = samfile.fetch("chr1", all) + print (iter1.next().reference_id) + iter2 = samfile.fetch("chr2") + print (iter2.next().reference_id) + print (iter1.next().reference_id) + +Here, the output is:: + + 0 + 1 + 0 + +The reason for this behaviour is that every iterator needs to keep +track of its current position in the file. Within pysam, each opened +file can only keep track of one file position and hence there can only +be one iterator per file. Using the option ``mulitple_iterators=True`` +will return an iterator within a newly opened file. This iterator will +not interfere with existing iterators as it has its own file handle +associated with it. + +Note that re-opening files incurs a performance penalty which can +become severe when calling :meth:`~pysam.AlignmentFile.fetch` often. +Thus, ``multiple_iterators`` is set to ``False`` by default. + +AlignmentFile.fetch does not show unmapped reads +================================================ + +:meth:`~pysam.AlignmentFile.fetch` will only iterate over alignments +in the SAM/BAM file. The following thus always works:: + + bf = pysam.AlignemFile(fname, "rb") + for r in bf.fetch(): + assert not r.is_unmapped + +If the SAM/BAM file contains unaligned reads, they can be included +in the iteration by adding the ``until_eof=True`` flag:: + + bf = pysam.AlignemFile(fname, "rb") + for r in bf.fetch(until_eof=True): + if r.is_unmapped: + print ("read is unmapped") + +I can't call AlignmentFile.fetch on a file without index +======================================================== + +:meth:`~pysam.AlignmentFile.fetch` requires an index when +iterating over a SAM/BAM file. To iterate over a file without +index, use the ``until_eof=True`:: + + bf = pysam.AlignemFile(fname, "rb") + for r in bf.fetch(until_eof=True): + print (r) + + +BAM files with a large number of reference sequences are slow +============================================================= + +If you have many reference sequences in a bam file, the following +might be slow:: + + track = pysam.AlignmentFile(fname, "rb") + for aln in track.fetch(): + pass + +The reason is that track.fetch() will iterate through the bam file +for each reference sequence in the order as it is defined in the +header. This might require a lot of jumping around in the file. To +avoid this, use:: + + track = pysam.AlignmentFile(fname, "rb") + for aln in track.fetch(until_eof=True): + pass + +This will iterate through reads as they appear in the file. + +Weirdness with spliced reads in samfile.pileup(chr,start,end) given spliced alignments from an RNA-seq bam file +=============================================================================================================== + +Spliced reads are reported within samfile.pileup. To ignore these +in your analysis, test the flags ``is_del == True and indel=0`` +in the :class:`~.PileupRead` object. + +I can't edit quality scores in place +==================================== + +Editing reads in-place generally works, though there is some +quirk to be aware of. Assigning to AlignedRead.seq will invalidate +any quality scores in AlignedRead.qual. The reason is that samtools +manages the memory of the sequence and quality scores together +and thus requires them to always be of the same length or 0. + +Thus, to in-place edit the sequence and quality scores, copies of +the quality scores need to be taken. Consider trimming for example:: + + q = read.qual + read.seq = read.seq[5:10] + read.qual = q[5:10] + +Why is there no SNPCaller class anymore? +========================================= + +SNP calling is highly complex and heavily parameterized. There was a +danger that the pysam implementations might show different behaviour from the +samtools implementation, which would have caused a lot of confusion. + +The best way to use samtools SNP calling from python is to use the +:meth:`pysam.mpileup` command and parse the output directly. + +I get an error 'PileupProxy accessed after iterator finished' +============================================================= + +Pysam works by providing proxy objects to objects defined within +the C-samtools package. Thus, some attention must be paid at the +lifetime of objects. The following to code snippets will cause an +error:: + + s = AlignmentFile('ex1.bam') + for p in s.pileup('chr1', 1000,1010): + pass + + for pp in p.pileups: + print pp + +The iteration has finished, thus the contents of p are invalid. A +variation of this:: + + p = next(AlignmentFile('ex1.bam').pileup('chr1', 1000, 1010)) + for pp in p.pileups: + print pp + +Again, the iteration finishes as the temporary iterator created +by pileup goes out of scope. The solution is to keep a handle +to the iterator that remains alive:: + + i = AlignmentFile('ex1.bam').pileup('chr1', 1000, 1010) + p = next(i) + for pp in p.pileups: + print pp + +Pysam won't compile +=================== + +Compiling pysam can be tricky as there are numerous variables that +differ between build environments such as OS, version, python version, +and compiler. It is difficult to build software that build cleanly +on all systems and the process might fail. Please see the +`pysam user group +`_ +for common issues. + +If there is a build issue, read the generated output carefully - +generally the cause of the problem is among the first errors to be +reported. For example, you will need to have the development version +of python installed that includes the header files such as +:file:`Python.h`. If that file is missing, the compiler will report +this at the very top of its error messages but will follow it +with any unknown function or variable definition it encounters later +on. + +A general advice is to always use the latest version on python_ and +cython_ when building pysam. There are some known incompatibilities: + +* Python 3.4 requires cython 0.20.2 or later (see `here + `_) + +.. _global interpreter lock: https://en.wikipedia.org/wiki/Global_interpreter_lock + +ImportError: cannot import name csamtools +========================================= + +In version 0.10.0 and onwards, all pysam extension modules contain a +``lib``-prefix. This facilates linking against pysam extension modules +with compilers that require to start with ``lib``. As a consequence, +all code using pysam extension modules directly will need to be +adapted. For example, for example:: + + cimport pysam.csamtools + +will become:: + + cimport pysam.libcamtools + diff --git a/doc/glossary.rst b/doc/glossary.rst new file mode 100644 index 0000000..3e739f9 --- /dev/null +++ b/doc/glossary.rst @@ -0,0 +1,119 @@ + ======== +Glossary +======== + +.. glossary:: + :sorted: + + cigar + Stands for Compact Idiosyncratic Gapped Alignment Report and + represents a compressed (run-length encoded) pairwise alignment + format. It was first defined by the Exonerate Aligner, but was alter + adapted and adopted as part of the :term:`SAM` standard and many other + aligners. In the Python API, the cigar alignment is presented as a + list of tuples ``(operation,length)``. For example, the tuple ``[ + (0,3), (1,5), (0,2) ]`` refers to an alignment with 3 matches, 5 + insertions and another 2 matches. + + region + A genomic region, stated relative to a reference sequence. A + region consists of reference name ('chr1'), start (10000), and + end (20000). Start and end can be omitted for regions spanning + a whole chromosome. If end is missing, the region will span from + start to the end of the chromosome. Within pysam, coordinates + are 0-based, half-open intervals, i.e., the position 10,000 is + part of the interval, but 20,000 is not. An exception are + :term:`samtools` compatible region strings such as + 'chr1:10000:20000', which are closed, i.e., both positions 10,000 + and 20,000 are part of the interval. + + column + Reads that are aligned to a base in the :term:`reference` sequence. + + tid + The :term:`target` id. The target id is 0 or a positive integer mapping to + entries within the sequence dictionary in the header section of + a :term:`TAM` file or :term:`BAM` file. + + contig + The sequence that a :term:`tid` refers to. For example ``chr1``, ``contig123``. + + Reference + Synonym for contig + + SAM + A textual format for storing genomic alignment information. + + BAM + Binary SAM format. BAM files are binary formatted, indexed and + allow random access. + + TAM + Text SAM file. TAM files are human readable files of + tab-separated fields. TAM files do not allow random access. + + sam file + A file containing aligned reads. The :term:`sam file` can either + be a :term:`BAM` file or a :term:`TAM` file. + + pileup + Pileup + + samtools + The samtools_ package. + + csamtools + The samtools_ C-API. + + fetching + Retrieving all mapped reads mapped to a :term:`region`. + + target + The sequence that a read has been aligned to. Target + sequences have bot a numerical identifier (:term:`tid`) + and an alphanumeric name (:term:`Reference`). + + tabix file + A sorted, compressed and indexed tab-separated file created + by the command line tool :file:`tabix` or the commands + :meth:`tabix_compress` and :meth:`tabix_index`. The file + is indexed by chromosomal coordinates. + + tabix row + A row in a :term:`tabix file`. Fields within a row are + tab-separated. + + soft clipping + soft clipped + + In alignments with soft clipping part of the query sequence + are not aligned. The unaligned query sequence is still part + of the alignment record. This is in difference to + :term:`hard clipped` reads. + + hard clipping + hard clipped + + In hard clipped reads, part of the sequence has been removed + prior to alignment. That only a subsequence is aligend might be + recorded in the :term:`cigar` alignment, but the removed + sequence will not be part of the alignment record, in contrast + to :term:`soft clipped` reads. + + VCF + Variant call format + + BCF + Binary :term:`VCF` + + tabix + Utility in the htslib package to index :term:`bgzip` compressed + files. + + faidx + Utility in the samtools package to index :term:`fasta` formatted + files. + + bgzip + Utility in the htslib package to block compress genomic data + files. diff --git a/doc/index.rst b/doc/index.rst new file mode 100644 index 0000000..01b2a8e --- /dev/null +++ b/doc/index.rst @@ -0,0 +1,73 @@ +pysam: htslib interface for python +================================== + +:Author: Andreas Heger, Kevin Jacobs and contributors +:Date: |today| +:Version: |version| + +Pysam is a python module for reading, manipulating and writing +genomic data sets. + +Pysam is a wrapper of the htslib_ C-API and provides facilities to +read and write SAM/BAM/VCF/BCF/BED/GFF/GTF/FASTA/FASTQ files as well +as access to the command line functionality of the samtools_ and +bcftools_ packages. The module supports compression and random access +through indexing. + +This module provides a low-level wrapper around the htslib_ C-API as +using cython and a high-level, pythonic API for convenient access to +the data within genomic file formats. + +The current version wraps *htslib-1.7*, *samtools-1.7* and +*bcftools-1.6*. + +To install the latest release, type:: + + pip install pysam + +See the :ref:`Installation notes ` for details. + +Contents +-------- + +.. toctree:: + :maxdepth: 2 + + api.rst + usage.rst + installation.rst + faq.rst + developer.rst + release.rst + benchmarking.rst + glossary.rst + +Indices and tables +------------------ + +Contents: + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + +References +---------- + +.. [Li2009] The Sequence Alignment/Map format and SAMtools. Li H, Handsaker B, Wysoker A, Fennell T, Ruan J, Homer N, Marth G, Abecasis G, Durbin R; 1000 Genome Project Data Processing Subgroup. + Bioinformatics. 2009 Aug 15;25(16):2078-9. Epub 2009 Jun 8. + `PMID: 19505943 `_ + +.. seealso:: + + Information about htslib + http://www.htslib.org + + The samtools homepage + http://samtools.sourceforge.net + + The cython C-extensions for python + http://cython.org/ + + The python language + http://www.python.org diff --git a/doc/installation.rst b/doc/installation.rst new file mode 100644 index 0000000..535f4bc --- /dev/null +++ b/doc/installation.rst @@ -0,0 +1,108 @@ +.. _installation: + +================ +Installing pysam +================ + +Pysam can be installed through conda_, pypi_ and from the repository. +The recommended way to install pysam is through conda/bioconda. + +Conda installation +================== + +To install pysam in your current conda_ environment, type:: + + conda config --add channels r + conda config --add channels bioconda + conda install pysam + +This will install pysam from the bioconda_ channel and automatically +makes sure that dependencies are installed. Also, compilation flags +will be set automatically, which will potentially save a lot of +trouble on OS X. + +Pypi installation +================= + +Pysam provides a python interface to the functionality contained +within the htslib_ C library. There are two ways that these two +can be combined, ``builtin`` and ``external``. + +Builtin +------- + +The typical installation will be through pypi_:: + + pip install pysam + +This will compile the ``builtin`` htslib source code within pysam. + +htslib_ can be configured at compilation to turn on additional +features such support using encrypted configurations, enable plugins, +and more. See the htslib_ project for more information on these. + +Pysam will attempt to configure htslib_ to turn on some advanced +features. If these fail, for example due to missing library +dependencies (`libcurl`, `libcrypto`), it will fall back to +conservative defaults. + +Options can be passed to the configure script explicitely by +setting the environment variable `HTSLIB_CONFIGURE_OPTIONS`. +For example:: + + export HTSLIB_CONFIGURE_OPTIONS=--enable-plugins + pip install pysam + +External +-------- + +pysam can be combined with an externally installed htslib_ +library. This is a good way to avoid duplication of libraries. To link +against an externally installed library, set the environment variables +`HTSLIB_LIBRARY_DIR` and `HTSLIB_INCLUDE_DIR` before installing:: + + export HTSLIB_LIBRARY_DIR=/usr/local/lib + export HTSLIB_INCLUDE_DIR=/usr/local/include + pip install pysam + +Note that the location of the file :file:`libhts.so` needs to be known +to the linker once you run pysam, for example by setting the +environment-varirable `LD_LIBRARY_PATH`. + +Note that generally the pysam and htslib version need to be +compatible. See the release notes for more information. + +Installation from repository +============================ + +pysam depends on cython_ to provide the connectivity to the htslib_ C +library. The installation of the source tarball (:file:`.tar.gz`) +contains pre-built C-files and cython needs not be present +during installation. However, when installing from the repository, +cython needs to be installed beforehand. + +To install from repository, type:: + + python setup.py install + +For compilation options, see the section on Pypi installation above. + +Requirements +============ + +Depending on the installation method, requirements for building pysam differ. + +When installing through conda_, dependencies will be resolved by the +package manager. The pip_ installation and installation from source +require a C compiler and its standard libraries as well as all +requirements for building htslib. Htslib requirements are listed in +the htslib/INSTALL file. + +Installing from the repository will require cython_ to be installed. + + + + + + + diff --git a/doc/make.bat b/doc/make.bat new file mode 100644 index 0000000..caca799 --- /dev/null +++ b/doc/make.bat @@ -0,0 +1,112 @@ +@ECHO OFF + +REM Command file for Sphinx documentation + +set SPHINXBUILD=sphinx-build +set ALLSPHINXOPTS=-d _build/doctrees %SPHINXOPTS% . +if NOT "%PAPER%" == "" ( + set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% +) + +if "%1" == "" goto help + +if "%1" == "help" ( + :help + echo.Please use `make ^` where ^ is one of + echo. html to make standalone HTML files + echo. dirhtml to make HTML files named index.html in directories + echo. pickle to make pickle files + echo. json to make JSON files + echo. htmlhelp to make HTML files and a HTML help project + echo. qthelp to make HTML files and a qthelp project + echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter + echo. changes to make an overview over all changed/added/deprecated items + echo. linkcheck to check all external links for integrity + echo. doctest to run all doctests embedded in the documentation if enabled + goto end +) + +if "%1" == "clean" ( + for /d %%i in (_build\*) do rmdir /q /s %%i + del /q /s _build\* + goto end +) + +if "%1" == "html" ( + %SPHINXBUILD% -b html %ALLSPHINXOPTS% _build/html + echo. + echo.Build finished. The HTML pages are in _build/html. + goto end +) + +if "%1" == "dirhtml" ( + %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% _build/dirhtml + echo. + echo.Build finished. The HTML pages are in _build/dirhtml. + goto end +) + +if "%1" == "pickle" ( + %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% _build/pickle + echo. + echo.Build finished; now you can process the pickle files. + goto end +) + +if "%1" == "json" ( + %SPHINXBUILD% -b json %ALLSPHINXOPTS% _build/json + echo. + echo.Build finished; now you can process the JSON files. + goto end +) + +if "%1" == "htmlhelp" ( + %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% _build/htmlhelp + echo. + echo.Build finished; now you can run HTML Help Workshop with the ^ +.hhp project file in _build/htmlhelp. + goto end +) + +if "%1" == "qthelp" ( + %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% _build/qthelp + echo. + echo.Build finished; now you can run "qcollectiongenerator" with the ^ +.qhcp project file in _build/qthelp, like this: + echo.^> qcollectiongenerator _build\qthelp\samtools.qhcp + echo.To view the help file: + echo.^> assistant -collectionFile _build\qthelp\samtools.ghc + goto end +) + +if "%1" == "latex" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% _build/latex + echo. + echo.Build finished; the LaTeX files are in _build/latex. + goto end +) + +if "%1" == "changes" ( + %SPHINXBUILD% -b changes %ALLSPHINXOPTS% _build/changes + echo. + echo.The overview file is in _build/changes. + goto end +) + +if "%1" == "linkcheck" ( + %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% _build/linkcheck + echo. + echo.Link check complete; look for any errors in the above output ^ +or in _build/linkcheck/output.txt. + goto end +) + +if "%1" == "doctest" ( + %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% _build/doctest + echo. + echo.Testing of doctests in the sources finished, look at the ^ +results in _build/doctest/output.txt. + goto end +) + +:end diff --git a/doc/release.rst b/doc/release.rst new file mode 100644 index 0000000..d0ece25 --- /dev/null +++ b/doc/release.rst @@ -0,0 +1,650 @@ +============= +Release notes +============= + +Release 0.14.0 +============== + +This release wraps htslib/samtools versions 1.7.0. + +* SAM/BAM/CRAM headers are now managed by a separate AlignmentHeader + class. +* AlignmentFile.header.as_dict() returns an ordered dictionary. +* Use "stop" instead of "end" to ensure consistency to + VariantFile. The end designations have been kept for backwards + compatibility. + +* [#611] and [#293] CRAM repeated fetch now works, each iterator + reloads index if multiple_iterators=True +* [#608] pysam now wraps htslib 1.7 and samtools 1.7. +* [#580] reference_name and next_reference_name can now be set to "*" + (will be converted to None to indicate an unmapped location) +* [#302] providing no coordinate to count_coverage will not count from + start/end of contig. +* [#325] @SQ records will be automatically added to header if they are + absent from text section of header. +* [#529] add get_forward_sequence() and get_forward_qualities() + methods +* [#577] add from_string() and to_dict()/from_dict() methods to + AlignedSegment. Rename tostring() to to_string() throughout for + consistency +* [#589] return None from build_alignment_sequence if no MD tag is set +* [#528] add PileupColumn.__len__ method + +Backwards incompatible changes: + +* AlignmentFile.header now returns an AlignmentHeader object. Use + AlignmentFile.header.to_dict() to get the dictionary as + previously. Most dictionary accessor methods (keys(), values(), + __getitem__, ...) have been implemented to ensure some level of + backwards compatibility when only reading. + + The rationale for this change is to have consistency between + AlignmentFile and VariantFile. + +* AlignmentFile and FastaFile now raise IOError instead of OSError + +Medium term we plan to have a 1.0 release. The pysam +interface has grown over the years and the API is cluttered with +deprecated names (Samfile, getrname(), gettid(), ...). To work towards +this, the next release (0.15.0) will yield DeprecationWarnings +for any parts of the API that are considered obsolete and will not be +in 1.0. Once 1.0 has been reached, we will use semantic versioning. + +Release 0.13.0 +=============== + +This release wraps htslib/samtools/bcftools versions 1.6.0 and +contains a series of bugfixes. + +* [#544] reading header from remote TabixFiles now works. +* [#531] add missing tag types H and A. A python float will now be + added as 'f' type instead of 'd' type. +* [#543] use FastaFile instead of Fastafile in pileup. +* [#546] set is_modified flag in setAttribute so updated attributes + are output. +* [#537] allow tabix index files to be created in a custom location. +* [#530] add get_index_statistics() method + + +Release 0.12.0.1 +================ + +Bugfix release to solve compilation issue due to missinge +bcftools/config.h file. + +Release 0.12.0 +============== + +This release wraps htslib/samtools/bcftools versions 1.5.0 and +contains a series of bugfixes. + +* [#473] A new FastxRecord class that can be instantiated from class and + modified in-place. Replaces PersistentFastqProxy. +* [#521] In AligmentFile, Simplify file detection logic and allow remote index files + * Removed attempts to guess data and index file names; this is magic left + to htslib. + * Removed file existence check prior to opening files with htslib + * Better error checking after opening files that raise the appropriate + error (IOError for when errno is set, ValueError otherwise for backward + compatibility). + * Report IO errors when loading an index by name. + * Allow remote indices (tested using S3 signed URLs). + * Document filepath_index and make it an alias for index_filename. + * Added a require_index parameter to AlignmentFile +* [#526] handle unset ref when creating new records +* [#513] fix bcf_translate to skip deleted FORMAT fields to avoid + segfaults +* [#516] expose IO errors via IOError exceptions +* [#487] add tabix line_skip, remove 'pileup' preset +* add FastxRecord, replaces PersistentFastqProxy (still present for + backwards compatibility) +* [#496] upgrade to htslib/samtools/bcftools versions 1.5 +* add start/stop to AlignmentFile.fetch() to be consistent with + VariantFile.fetch(). "end" is kept for backwards compatibility. +* [#512] add get_index_statistics() method to AlignmentFile. + +Upcoming changes: + +In the next release we are plannig to separate the header information +from AlignmentFile into a separate class AlignmentHeader. This layout +is similar to VariantFile/VariantHeader. With this change we will +ensure that an AlignedSegment record will be linked to a header so +that chromosome names can be automatically translated from the numeric +representation. As a consequence, the way new AlignedSegment records +are created will need to change as the constructor requires a header:: + + header = pysam.AlignmentHeader( + reference_names=["chr1", "chr2"], + reference_lengths=[1000, 1000]) + + read = pysam.AlignedSegment(header) + +This will affect all code that instantiates AlignedSegment objects +directly. We have not yet merged to allow users to provide feed-back. +The pull-request is here: https://github.com/pysam-developers/pysam/pull/518 +Please comment on github. + +Release 0.11.2.2 +================ + +Bugfix release to address two issues: + +* Changes in 0.11.2.1 broke the GTF/GFF3 parser. Corrected and + more tests have been added. +* [#479] Correct VariantRecord edge cases described in issue + +Release 0.11.2.1 +================ + +Release to fix release tar-ball containing 0.11.1 pre-compiled +C-files. + +Release 0.11.2 +============== + +This release wraps htslib/samtools/bcfools versions 1.4.1 in response +to a security fix in these libraries. Additionaly the following +issues have been fixed: + +* [#452] add GFF3 support for tabix parsers +* [#461] Multiple fixes related to VariantRecordInfo and handling of INFO/END +* [#447] limit query name to 251 characters (only partially addresses issue) + +VariantFile and related object fixes + +* Restore VariantFile.\_\_dealloc\_\_ +* Correct handling of bcf_str_missing in bcf_array_to_object and + bcf_object_to_array +* Added update() and pop() methods to some dict-like proxy objects +* scalar INFO entries could not be set again after being deleted +* VariantRecordInfo.__delitem__ now allows unset flags to be deleted without + raising a KeyError +* Multiple other fixes for VariantRecordInfo methods +* INFO/END is now accessible only via VariantRecord.stop and + VariantRecord.rlen. Even if present behind the scenes, it is no longer + accessible via VariantRecordInfo. +* Add argument to issue a warning instead of an exception if input appears + to be truncated + +Other features and fixes: + +* Make AlignmentFile \_\_dealloc\_\_ and close more + stringent +* Add argument AlignmentFile to issue a warning instead of an + exception if input appears to be truncated + +Release 0.11.1 +============== + +Bugfix release + +* [#440] add deprecated 'always' option to infer_query_length for backwards compatibility. + +Release 0.11.0 +============== + +This release wraps the latest versions of htslib/samtools/bcftools and +implements a few bugfixes. + +* [#413] Wrap HTSlib/Samtools/BCFtools 1.4 +* [#422] Fix missing pysam.sort.usage() message +* [#411] Fix BGZfile initialization bug +* [#412] Add seek support for BGZFile +* [#395] Make BGZfile iterable +* [#433] Correct getQueryEnd +* [#419] Export SAM enums such as pysam.CMATCH +* [#415] Fix access by tid in AlignmentFile.fetch() +* [#405] Writing SAM now outputs a header by default. +* [#332] split infer_query_length(always) into infer_query_length and infer_read_length + +Release 0.10.0 +============== + +This release implements further functionality in the VariantFile API +and includes several bugfixes: + +* treat special case -c option in samtools view outputs to stdout even + if -o given, fixes #315 +* permit reading BAM files with CSI index, closes #370 +* raise Error if query name exceeds maximum length, fixes #373 +* new method to compute hash value for AlignedSegment +* AlignmentFile, VariantFile and TabixFile all inherit from HTSFile +* Avoid segfault by detecting out of range reference_id and + next_reference in AlignedSegment.tostring +* Issue #355: Implement streams using file descriptors for VariantFile +* upgrade to htslib 1.3.2 +* fix compilation with musl libc +* Issue #316, #360: Rename all Cython modules to have lib as a prefix +* Issue #332, hardclipped bases in cigar included by + pysam.AlignedSegment.infer_query_length() +* Added support for Python 3.6 filename encoding protocol +* Issue #371, fix incorrect parsing of scalar INFO and FORMAT fields in VariantRecord +* Issue #331, fix failure in VariantFile.reset() method +* Issue #314, add VariantHeader.new_record(), VariantFile.new_record() and + VariantRecord.copy() methods to create new VariantRecord objects +* Added VariantRecordFilter.add() method to allow setting new VariantRecord filters +* Preliminary (potentially unsafe) support for removing and altering header metadata +* Many minor fixes and improvements to VariantFile and related objects + +Please note that all internal cython extensions now have a lib prefix +to facilitate linking against pysam extension modules. Any user cython +extensions using cimport to import pysam definitions will need +changes, for example:: + + cimport pysam.csamtools + +will become:: + + cimport pysam.libcamtools + +Release 0.9.1 +============= + +This is a bugfix release addressing some installation problems +in pysam 0.9.0, in particular: + +* patch included htslib to work with older libcurl versions, fixes #262. +* do not require cython for python 3 install, fixes #260 +* FastaFile does not accept filepath_index any more, see #270 +* add AlignedSegment.get_cigar_stats method. +* py3 bugfix in VariantFile.subset_samples, fixes #272 +* add missing sysconfig import, fixes #278 +* do not redirect stdout, but instead write to a separately + created file. This should resolve issues when pysam is used + in notebooks or other environments that redirect stdout. +* wrap htslib-1.3.1, samtools-1.3.1 and bcftools-1.3.1 +* use bgzf throughout instead of gzip +* allow specifying a fasta reference for CRAM file when opening + for both read and write, fixes #280 + +Release 0.9.0 +============= + +Overview +-------- + +The 0.9.0 release upgrades htslib to htslib 1.3 and numerous other +enchancements and bugfixes. See below for a detailed list. + +`Htslib 1.3 `_ +comes with additional capabilities for remote file access which depend +on the presence of optional system libraries. As a consequence, the +installation script :file:`setup.py` has become more complex. For an +overview, see :ref:`installation`. We have tested installation on +linux and OS X, but could not capture all variations. It is possible +that a 0.9.1 release might follow soon addressing installation issues. + +The :py:class:`~.pysam.VariantFile` class provides access to +:term:`vcf` and :term:`bcf` formatted files. The class is certainly +usable and interface is reaching completion, but the API and the +functionality is subject to change. + +Detailed release notes +---------------------- + +* upgrade to htslib 1.3 +* python 3 compatibility tested throughout. +* added a first set of bcftools commands in the pysam.bcftools + submodule. +* samtools commands are now in the pysam.samtools module. For + backwards compatibility they are still imported into the pysam + namespace. +* samtools/bcftools return stdout as a single (byte) string. As output + can be binary (VCF.gz, BAM) this is necessary to ensure py2/py3 + compatibility. To replicate the previous behaviour in py2.7, use:: + + pysam.samtools.view(self.filename).splitlines(True) + +* get_tags() returns the tag type as a character, not an integer (#214) +* TabixFile now raises ValueError on indices created by tabix <1.0 (#206) +* improve OSX installation and develop mode +* FastxIterator now handles empty sequences (#204) +* TabixFile.isremote is not TabixFile.is_remote in line with AlignmentFile +* AlignmentFile.count() has extra optional argument read_callback +* setup.py has been changed to: + * install a single builtin htslib library. Previously, each pysam + module contained its own version. This reduces compilation time + and code bloat. + * run configure for the builtin htslib library in order to detect + optional libraries such as libcurl. Configure behaviour can be + controlled by setting the environmet variable + HTSLIB_CONFIGURE_OPTIONS. +* get_reference_sequence() now returns the reference sequence and not + something looking like it. This bug had effects on + get_aligned_pairs(with_seq=True), see #225. If you have relied on on + get_aligned_pairs(with_seq=True) in pysam-0.8.4, please check your + results. +* improved autodetection of file formats in AlignmentFile and VariantFile. + +Release 0.8.4 +============= + +This release contains numerous bugfixes and a first implementation of +a pythonic interface to VCF/BCF files. Note that this code is still +incomplete and preliminary, but does offer a nearly complete immutable +Pythonic interface to VCF/BCF metadata and data with reading and +writing capability. + +Potential isses when upgrading from v0.8.3: + +* binary tags are now returned as python arrays + +* renamed several methods for pep8 compatibility, old names still retained for + backwards compatibility, but should be considered deprecated. + * gettid() is now get_tid() + * getrname() is now get_reference_name() + * parseRegion() is now parse_region() + +* some methods have changed for pep8 compatibility without the old + names being present: + * fromQualityString() is now qualitystring_to_array() + * toQualityString() is now qualities_to_qualitystring() + +* faidx now returns strings and not binary strings in py3. + +* The cython components have been broken up into smaller files with + more specific content. This will affect users using the cython + interfaces. + +Edited list of commit log changes: + +* fixes AlignmentFile.check_index to return True +* add RG/PM header tag - closes #179 +* add with_seq option to get_aligned_pairs +* use char * inside reconsituteReferenceSequence +* add soft clipping for get_reference_sequence +* add get_reference_sequence +* queryEnd now computes length from cigar string if no sequence present, closes #176 +* tolerate missing space at end of gtf files, closes #162 +* do not raise Error when receiving output on stderr +* add docu about fetching without index, closes #170 +* FastaFile and FastxFile now return strings in python3, closes #173 +* py3 compat: relative -> absolute imports. +* add reference_name and next_reference_name attributes to AlignedSegment +* add function signatures to cvcf cython. Added note about other VCF code. +* add context manager functions to FastaFile +* add reference_name and next_reference_name attributes to AlignedSegment +* PileupColumn also gets a reference_name attribute. +* add context manager functions to FastaFile +* TabixFile.header for remote files raises AttributeError, fixes #157 +* add context manager interface to TabixFile, closes #165 +* change ctypedef enum to typedef enum for cython 0.23 +* add function signatures to cvcf cython, also added note about other VCF code +* remove exception for custom upper-case header record tags. +* rename VALID_HEADER_FIELDS to KNOWN_HEADER_FIELDS +* fix header record tag parsing for custom tags. +* use cython.str in count_coverage, fixes #141 +* avoid maketrans (issues with python3) +* refactoring: AlignedSegment now in separate module +* do not execute remote tests if URL not available +* fix the unmapped count, incl reads with no SQ group +* add raw output to tags +* added write access for binary tags +* bugfix in call to resize +* implemented writing of binary tags from arrays +* implemented convert_binary_tag to use arrays +* add special cases for reads that are unmapped or whose mates are unmapped. +* rename TabProxies to ctabixproxies +* remove underscores from utility functions +* move utility methods into cutils +* remove callback argument to fetch - closes #128 +* avoid calling close in dealloc +* add unit tests for File object opening +* change AlignmentFile.open to filepath_or_object +* implement copy.copy, close #65 +* add chaching of array attributes in AlignedSegment, closes #121 +* add export of Fastafile +* remove superfluous pysam_dispatch +* use persist option in FastqFile +* get_tag: expose tag type if requested with `with_value_type` +* fix to allow reading vcf record info via tabix-based vcf reader +* add pFastqProxy and pFastqFile objects to make it possible to work with multiple fastq records per file handle, unlike FastqProxy/FastqFile. +* release GIL around htslib IO operations +* More work on read/write support, API improvements +* add `phased` property on `VariantRecordSample` +* add mutable properties to VariantRecord +* BCF fixes and start of read/write support +* VariantHeaderRecord objects now act like mappings for attributes. +* add VariantHeader.alts dict from alt ID->Record. +* Bug fix to strong representation of structured header records. +* VariantHeader is now mutable + + +Release 0.8.3 +============= + +* samtools command now accept the "catch_stdout" option. + +* get_aligned_pairs now works for soft-clipped reads. + +* query_position is now None when a PileupRead is not aligned + to a particular position. + +* AlignedSegments are now comparable and hashable. + +Release 0.8.2.1 +=============== + +* Installation bugfix release. + +Release 0.8.2 +============= + +* Pysam now wraps htslib 1.2.1 and samtools version 1.2. + +* Added CRAM file support to pysam. + +* New alignment info interface. + * opt() and setTag are deprecated, use get_tag() and set_tag() + instead. + * added has_tag() + * tags is deprecated, use get_tags() and set_tags() instead. + +* FastqFile is now FastxFile to reflect that the latter permits + iteration over both fastq- and fasta-formatted files. + +* A Cython wrapper for htslib VCF/BCF reader/writer. The wrapper + provides a nearly complete Pythonic interface to VCF/BCF metadata + with reading and writing capability. However, the interface is still + incomplete and preliminary and lacks capability to mutate the + resulting data. + +Release 0.8.1 +============= + +* Pysam now wraps htslib and samtools versions 1.1. + +* Bugfixes, most notable: + * issue #43: uncompressed BAM output + * issue #42: skip tests requiring network if none available + * issue #19: multiple iterators can now be made to work on the same tabix file + * issue #24: All strings returned from/passed to the pysam API are now unicode in python 3 + * issue #5: type guessing for lists of integers fixed + +* API changes for consistency. The old API is still present, + but deprecated. + In particular: + + * Tabixfile -> TabixFile + * Fastafile -> FastaFile + * Fastqfile -> FastqFile + * Samfile -> AlignmentFile + * AlignedRead -> AlignedSegment + * qname -> query_name + * tid -> reference_id + * pos -> reference_start + * mapq -> mapping_quality + * rnext -> next_reference_id + * pnext -> next_reference_start + * cigar -> cigartuples + * cigarstring -> cigarstring + * tlen -> template_length + * seq -> query_sequence + * qual -> query_qualities, now returns array + * qqual -> query_alignment_qualities, now returns array + * tags -> tags + * alen -> reference_length, reference is always "alignment", so removed + * aend -> reference_end + * rlen -> query_length + * query -> query_alignment_sequence + * qstart -> query_alignment_start + * qend -> query_alignment_end + * qlen -> query_alignment_length + * mrnm -> next_reference_id + * mpos -> next_reference_start + * rname -> reference_id + * isize -> template_length + * blocks -> get_blocks() + * aligned_pairs -> get_aligned_pairs() + * inferred_length -> infer_query_length() + * positions -> get_reference_positions() + * overlap() -> get_overlap() + + * All strings are now passed to or received from the pysam API + as strings, no more bytes. + +Other changes: + * AlignmentFile.fetch(reopen) option is now multiple_iterators. The + default changed to not reopen a file unless requested by the user. + * FastaFile.getReferenceLength is now FastaFile.get_reference_length + +Backwards incompatible changes + +* Empty cigarstring now returns None (intstead of '') +* Empty cigar now returns None (instead of []) +* When using the extension classes in cython modules, AlignedRead + needs to be substituted with AlignedSegment. +* fancy_str() has been removed +* qual, qqual now return arrays + +Release 0.8.0 +============= + +* Disabled features + * IteratorColumn.setMask() disabled as htslib does not implement + this functionality? + +* Not implemented yet: + * reading SAM files without header + +Tabix files between version 0.7.8 and 0.8.0 are +not compatible and need to be re-indexed. + +While version 0.7.8 and 0.8.0 should be mostly +compatible, there are some notable exceptions: + +* tabix iterators will fail if there are comments + in the middle or the end of a file. + +* tabix raises always ValueError for invalid intervals. + Previously, different types of errors were raised + (KeyError, IndexError, ValueError) depending on + the type of invalid intervals (missing chromosome, + out-of-range, malformatted interval). + + +Release 0.7.8 +============= + +* added AlignedRead.setTag method +* added AlignedRead.blocks +* unsetting CIGAR strings is now possible +* empty CIGAR string returns empty list +* added reopen flag to Samfile.fetch() +* various bugfixes + +Release 0.7.7 +============= + +* added Fastafile.references, .nreferences and .lengths +* tabix_iterator now uses kseq.h for python 2.7 + +Release 0.7.6 +============= + +* added inferred_length property +* issue 122: MACOSX getline missing, now it works? +* seq and qual can be set None +* added Fastqfile + +Release 0.7.5 +============= + +* switch to samtools 0.1.19 +* issue 122: MACOSX getline missing +* issue 130: clean up tempfiles +* various other bugfixes + +Release 0.7.4 +============= + +* further bugfixes to setup.py and package layout + +Release 0.7.3 +============= + +* further bugfixes to setup.py +* upgraded distribute_setup.py to 0.6.34 + +Release 0.7.2 +============= + +* bugfix in installer - failed when cython not present +* changed installation locations of shared libraries + +Release 0.7.1 +============= + +* bugfix: missing PP tag PG records in header +* added pre-built .c files to distribution + +Release 0.7 +=========== + +* switch to tabix 0.2.6 +* added cigarstring field +* python3 compatibility +* added B tag handling +* added check_sq and check_header options to Samfile.__init__ +* added lazy GTF parsing to tabix +* reworked support for VCF format parsing +* bugfixes + +Release 0.6 +=========== + +* switch to samtools 0.1.18 +* various bugfixes +* removed references to deprecated 'samtools pileup' functionality +* AlignedRead.tags now returns an empty list if there are no tags. +* added pnext, rnext and tlen + +Release 0.5 +=========== + +* switch to samtools 0.1.16 and tabix 0.2.5 +* improved tabix parsing, added vcf support +* re-organized code to permit linking against pysam +* various bugfixes +* added Samfile.positions and Samfile.overlap + +Release 0.4 +=========== + +* switch to samtools 0.1.12a and tabix 0.2.3 +* added snp and indel calling. +* switch from pyrex to cython +* changed handling of samtools stderr +* various bugfixes +* added Samfile.count and Samfile.mate +* deprecated AlignedRead.rname, added AlignedRead.tid + +Release 0.3 +=========== + +* switch to samtools 0.1.8 +* added support for tabix files +* numerous bugfixes including +* permit simultaneous iterators on the same file +* working access to remote files diff --git a/doc/usage.rst b/doc/usage.rst new file mode 100644 index 0000000..6172329 --- /dev/null +++ b/doc/usage.rst @@ -0,0 +1,422 @@ +.. _Usage: + +========================================= +Working with BAM/CRAM/SAM-formatted files +========================================= + +Opening a file +============== + +To begin with, import the pysam module and open a +:class:`pysam.AlignmentFile`:: + + import pysam + samfile = pysam.AlignmentFile("ex1.bam", "rb") + +The above command opens the file :file:`ex1.bam` for reading. +The ``b`` qualifier indicates that this is a :term:`BAM` file. +To open a :term:`SAM` file, type:: + + import pysam + samfile = pysam.AlignmentFile("ex1.sam", "r") + +:term:`CRAM` files are identified by a ``c`` qualifier:: + + import pysam + samfile = pysam.AlignmentFile("ex1.cram", "rc") + +Fetching reads mapped to a :term:`region` +========================================= + +Reads are obtained through a call to the +:meth:`pysam.AlignmentFile.fetch` method which returns an iterator. +Each call to the iterator will returns a :class:`pysam.AlignedSegment` +object:: + + iter = samfile.fetch("seq1", 10, 20) + for x in iter: + print (str(x)) + +:meth:`pysam.AlignmentFile.fetch` returns all reads overlapping a +region sorted by the first aligned base in the :term:`reference` +sequence. Note that it will also return reads that are only partially +overlapping with the :term:`region`. Thus the reads returned might +span a region that is larger than the one queried. + +Using the pileup-engine +======================= + +In contrast to :term:`fetching`, the :term:`pileup` engine returns for +each base in the :term:`reference` sequence the reads that map to that +particular position. In the typical view of reads stacking vertically +on top of the reference sequence similar to a multiple alignment, +:term:`fetching` iterates over the rows of this implied multiple +alignment while a :term:`pileup` iterates over the :term:`columns`. + +Calling :meth:`~pysam.AlignmentFile.pileup` will return an iterator +over each :term:`column` (reference base) of a specified +:term:`region`. Each call to the iterator returns an object of the +type :class:`pysam.PileupColumn` that provides access to all the +reads aligned to that particular reference position as well as +some additional information:: + + iter = samfile.pileup('seq1', 10, 20) + for x in iter: + print (str(x)) + + +Creating BAM/CRAM/SAM files from scratch +======================================== + +The following example shows how a new :term:`BAM` file is constructed +from scratch. The important part here is that the +:class:`pysam.AlignmentFile` class needs to receive the sequence +identifiers. These can be given either as a dictionary in a header +structure, as lists of names and sizes, or from a template file. +Here, we use a header dictionary:: + + header = { 'HD': {'VN': '1.0'}, + 'SQ': [{'LN': 1575, 'SN': 'chr1'}, + {'LN': 1584, 'SN': 'chr2'}] } + + with pysam.AlignmentFile(tmpfilename, "wb", header=header) as outf: + a = pysam.AlignedSegment() + a.query_name = "read_28833_29006_6945" + a.query_sequence="AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG" + a.flag = 99 + a.reference_id = 0 + a.reference_start = 32 + a.mapping_quality = 20 + a.cigar = ((0,10), (2,1), (0,25)) + a.next_reference_id = 0 + a.next_reference_start=199 + a.template_length=167 + a.query_qualities = pysam.qualitystring_to_array("<<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<<") + a.tags = (("NM", 1), + ("RG", "L1")) + outf.write(a) + +Using streams +============= + +Pysam does not support reading and writing from true python file +objects, but it does support reading and writing from stdin and +stdout. The following example reads from stdin and writes to stdout:: + + infile = pysam.AlignmentFile("-", "r") + outfile = pysam.AlignmentFile("-", "w", template=infile) + for s in infile: + outfile.write(s) + +It will also work with :term:`BAM` files. The following script +converts a :term:`BAM` formatted file on stdin to a :term:`SAM` +formatted file on stdout:: + + infile = pysam.AlignmentFile("-", "rb") + outfile = pysam.AlignmentFile("-", "w", template=infile) + for s in infile: + outfile.write(s) + +Note that the file open mode needs to changed from ``r`` to ``rb``. + +===================================== +Using samtools commands within python +===================================== + +Commands available in :term:`csamtools` are available as simple +function calls. Command line options are provided as arguments. For +example:: + + pysam.sort("-o", "output.bam", "ex1.bam") + +corresponds to the command line:: + + samtools sort -o output.bam ex1.bam + +Or for example:: + + pysam.sort("-m", "1000000", "-o", "output.bam", "ex1.bam") + +In order to get usage information, try:: + + print(pysam.sort.usage()) + +Argument errors raise a :class:`pysam.SamtoolsError`:: + + pysam.sort() + + Traceback (most recent call last): + File "x.py", line 12, in + pysam.sort() + File "/build/lib.linux-x86_64-2.6/pysam/__init__.py", line 37, in __call__ + if retval: raise SamtoolsError( "\n".join( stderr ) ) + pysam.SamtoolsError: 'Usage: samtools sort [-n] [-m ] \n' + +Messages from :term:`csamtools` on stderr are captured and are +available using the :meth:`getMessages` method:: + + pysam.sort.getMessage() + +Note that only the output from the last invocation of a command is +stored. + +In order for pysam to make the output of samtools commands accessible +the stdout stream needs to be redirected. This is the default +behaviour, but can cause problems in environments such as the ipython +notebook. A solution is to pass the ``catch_stdout`` keyword +argument:: + + pysam.sort(catch_stdout=False) + +Note that this means that output from commands which produce output on +stdout will not be available. The only solution is to run samtools +commands through subprocess. + +================================ +Working with tabix-indexed files +================================ + +To open a tabular file that has been indexed with tabix_, use +:class:`~pysam.TabixFile`:: + + import pysam + tbx = pysam.TabixFile("example.bed.gz") + +Similar to :class:`~pysam.AlignmentFile.fetch`, intervals within a +region can be retrieved by calling :meth:`~pysam.TabixFile.fetch()`:: + + for row in tbx.fetch("chr1", 1000, 2000): + print (str(row)) + +This will return a tuple-like data structure in which columns can +be retrieved by numeric index: + + for row in tbx.fetch("chr1", 1000, 2000): + print ("chromosome is", row[0]) + +By providing a parser to :class:`~pysam.AlignmentFile.fetch` +or :class:`~pysam.TabixFile`, the data will we presented in parsed +form:: + + for row in tbx.fetch("chr1", 1000, 2000, parser=pysam.asTuple()): + print ("chromosome is", row.contig) + print ("first field (chrom)=", row[0]) + +Pre-built parsers are available for :term:`bed` +(:class:`~pysam.asBed`) formatted files and :term:`gtf` +(:class:`~pysam.asGTF`) formatted files. Thus, additional fields +become available through named access, for example:: + + for row in tbx.fetch("chr1", 1000, 2000, parser=pysam.asBed()): + print ("name is", row.name) + + +.. Currently inactivated as pileup deprecated +.. Using the samtools SNP caller +.. ----------------------------- + +.. There are two ways to access the samtools SNP caller. The :class:`pysam.IteratorSNPCalls` +.. is appropriate when calling many consecutive SNPs, while :class:`pysam.SNPCaller` is +.. best when calling SNPs at non-consecutive genomic positions. Each snp caller returns objects of +.. type :class:`pysam.SNPCall`. + +.. To use :class:`pysam.IteratorSNPCalls`, associate it with a :class:`pysam.IteratorColumn`:: + +.. samfile = pysam.AlignmentFile( "ex1.bam", "rb") +.. fastafile = pysam.Fastafile( "ex1.fa" ) +.. pileup_iter = samfile.pileup( stepper = "samtools", fastafile = fastafile ) +.. sncpall_iter = pysam.IteratorSNPCalls(pileup_iter) +.. for call in snpcall_iter: +.. print str(call) + +.. Usage of :class:`pysam.SNPCaller` is similar:: + +.. samfile = pysam.AlignmentFile( "ex1.bam", "rb") +.. fastafile = pysam.Fastafile( "ex1.fa" ) +.. pileup_iter = samfile.pileup( stepper = "samtools", fastafile = fastafile ) +.. snpcaller = pysam.SNPCaller.call(pileup_iter) +.. print snpcaller( "chr1", 100 ) + +.. Note the use of the option *stepper* to control which reads are included in the +.. in the :term:`pileup`. The ``samtools`` stepper implements the same read selection +.. and processing as in the samtools pileup command. + +.. Calling indels works along the same lines, using the :class:`pysam.IteratorIndelCalls` +.. and :class:`pysam.IteratorIndelCaller`. + + +==================================== +Working with VCF/BCF formatted files +==================================== + +To iterate through a VCF/BCF formatted file use +:class:`~pysam.VariantFile`:: + + from pysam import VariantFile + + bcf_in = VariantFile("test.bcf") # auto-detect input format + bcf_out = VariantFile('-', 'w', header=bcf_in.header) + + for rec in bcf_in.fetch('chr1', 100000, 200000): + bcf_out.write(rec) + +:meth:`_pysam.VariantFile.fetch()` iterates over +:class:`~pysam.VariantRecord` objects which provides access to +simple variant attributes such as :class:`~pysam.VariantRecord.contig`, +:class:`~pysam.VariantRecord.pos`, :class:`~pysam.VariantRecord.ref`:: + + for rec in bcf_in.fetch(): + print (rec.pos) + +but also to complex attributes such as the contents to the +:term:`info`, :term:`format` and :term:`genotype` columns. These +complex attributes are views on the underlying htslib data structures +and provide dictionary-like access to the data:: + + for rec in bcf_in.fetch(): + print (rec.info) + print (rec.info.keys()) + print (rec.info["DP"]) + +The :py:attr:`~pysam.VariantFile.header` attribute +(:class:`~pysam.VariantHeader`) provides access information +stored in the :term:`vcf` header. The complete header can be printed:: + + >>> print (bcf_in.header) + ##fileformat=VCFv4.2 + ##FILTER= + ##fileDate=20090805 + ##source=myImputationProgramV3.1 + ##reference=1000GenomesPilot-NCBI36 + ##phasing=partial + ##INFO= + ##INFO= + ##INFO= + ##INFO= + ##INFO= + ##INFO= + ##FILTER= + ##FILTER= + ##FORMAT= + ##FORMAT= + ##FORMAT= + ##FORMAT= + ##contig= + ##contig= + ##contig= + ##bcftools_viewVersion=1.3+htslib-1.3 + ##bcftools_viewCommand=view -O b -o example_vcf42.bcf + example_vcf42.vcf.gz + #CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA0000 + +Individual contents such as contigs, info fields, samples, formats can +be retrieved as attributes from :py:attr:`~pysam.VariantFile.header`:: + + >>> print (bcf_in.header.contigs) + + +To convert these views to native python types, iterate through the views:: + + >>> print list((bcf_in.header.contigs)) + ['M', '17', '20'] + >>> print list((bcf_in.header.filters)) + ['PASS', 'q10', 's50'] + >>> print list((bcf_in.header.info)) + ['NS', 'DP', 'AF', 'AA', 'DB', 'H2'] + >>> print list((bcf_in.header.samples)) + ['NA00001', 'NA00002', 'NA00003'] + +Alternatively, it is possible to iterate through all records in the +header returning objects of type :py:class:`~pysam.VariantHeaderRecord`:: :: + + >>> for x in bcf_in.header.records: + >>> print (x) + >>> print (x.type, x.key) + GENERIC fileformat + FILTER FILTER + GENERIC fileDate + GENERIC source + GENERIC reference + GENERIC phasing + INFO INFO + INFO INFO + INFO INFO + INFO INFO + INFO INFO + INFO INFO + FILTER FILTER + FILTER FILTER + FORMAT FORMAT + FORMAT FORMAT + FORMAT FORMAT + FORMAT FORMAT + CONTIG contig + CONTIG contig + CONTIG contig + GENERIC bcftools_viewVersion + GENERIC bcftools_viewCommand + +=============== +Extending pysam +=============== + +Using pyximport_, it is (relatively) straight-forward to access pysam +internals and the underlying samtools library. An example is provided +in the :file:`tests` directory. The example emulates the samtools +flagstat command and consists of three files: + +1. The main script :file:`pysam_flagstat.py`. The important lines in + this script are:: + + import pyximport + pyximport.install() + import _pysam_flagstat + + ... + + flag_counts = _pysam_flagstat.count(pysam_in) + + The first part imports, sets up pyximport_ and imports the cython + module :file:`_pysam_flagstat`. The second part calls the + ``count`` method in :file:`_pysam_flagstat`. + +2. The cython implementation :file:`_pysam_flagstat.pyx`. This script + imports the pysam API via:: + + from pysam.calignmentfile cimport AlignmentFile, AlignedSegment + + This statement imports, amongst others, :class:`AlignedSegment` + into the namespace. Speed can be gained from declaring + variables. For example, to efficiently iterate over a file, an + :class:`AlignedSegment` object is declared:: + + # loop over samfile + cdef AlignedSegment read + for read in samfile: + ... + +3. A :file:`pyxbld` providing pyximport_ with build information. + Required are the locations of the samtools and pysam header + libraries of a source installation of pysam plus the + :file:`csamtools.so` shared library. For example:: + + def make_ext(modname, pyxfilename): + from distutils.extension import Extension + import pysam + return Extension(name=modname, + sources=[pyxfilename], + extra_link_args=pysam.get_libraries(), + include_dirs=pysam.get_include(), + define_macros=pysam.get_defines()) + +If the script :file:`pysam_flagstat.py` is called the first time, +pyximport_ will compile the cython_ extension +:file:`_pysam_flagstat.pyx` and make it available to the +script. Compilation requires a working compiler and cython_ +installation. Each time :file:`_pysam_flagstat.pyx` is modified, a +new compilation will take place. + +pyximport_ comes with cython_. + diff --git a/import.py b/import.py new file mode 100644 index 0000000..89aa9f1 --- /dev/null +++ b/import.py @@ -0,0 +1,228 @@ +################################################################# +# Importing samtools and htslib +# +# For htslib, simply copy the whole release tar-ball +# into the directory "htslib" and recreate the file version.h +# +# rm -rf htslib +# mv download/htslib htslib +# git checkout -- htslib/version.h +# Edit the file htslib/version.h to set the right version number. +# +# For samtools, type: +# rm -rf samtools +# python import.py samtools download/samtools +# git checkout -- samtools/version.h +# +# Manually, then: +# modify config.h to set compatibility flags +# +# For bcftools, type: +# rm -rf bcftools +# python import.py bcftools download/bedtools +# git checkout -- bcftools/version.h +# rm -rf bedtools/test bedtools/plugins + +import fnmatch +import os +import re +import itertools +import shutil +import sys +import hashlib + + +EXCLUDE = { + "samtools": ( + "razip.c", + "bgzip.c", + "main.c", + "calDepth.c", + "bam2bed.c", + "wgsim.c", + "bam_tview.c", + "bam_tview.h", + "bam_tview_html.c", + "bam_tview_curses.c", + "md5fa.c", + "md5sum-lite.c", + "maq2sam.c", + "bamcheck.c", + "chk_indel.c", + "vcf-miniview.c", + "hfile_irods.c", # requires irods library + ), + "bcftools": ( + "test", "plugins", "peakfit.c", + "peakfit.h", + # needs to renamed, name conflict with samtools reheader + # "reheader.c", + "polysomy.c"), + "htslib": ( + 'htslib/tabix.c', 'htslib/bgzip.c', + 'htslib/htsfile.c', 'htslib/hfile_irods.c'), +} + + +MAIN = { + "samtools": "bamtk", + "bcftools": "main" +} + + + +def locate(pattern, root=os.curdir): + '''Locate all files matching supplied filename pattern in and below + supplied root directory. + ''' + for path, dirs, files in os.walk(os.path.abspath(root)): + for filename in fnmatch.filter(files, pattern): + yield os.path.join(path, filename) + + +def _update_pysam_files(cf, destdir): + '''update pysam files applying redirection of ouput''' + basename = os.path.basename(destdir) + for filename in cf: + if not filename: + continue + dest = filename + ".pysam.c" + with open(filename, encoding="utf-8") as infile: + lines = "".join(infile.readlines()) + + with open(dest, "w", encoding="utf-8") as outfile: + outfile.write('#include "{}.pysam.h"\n\n'.format(basename)) + subname, _ = os.path.splitext(os.path.basename(filename)) + if subname in MAIN.get(basename, []): + lines = re.sub("int main\(", "int {}_main(".format( + basename), lines) + else: + lines = re.sub("int main\(", "int {}_{}_main(".format( + basename, subname), lines) + lines = re.sub("stderr", "{}_stderr".format(basename), lines) + lines = re.sub("stdout", "{}_stdout".format(basename), lines) + lines = re.sub(" printf\(", " fprintf({}_stdout, ".format(basename), lines) + lines = re.sub("([^kf])puts\(([^)]+)\)", + r"\1fputs(\2, {}_stdout) & fputc('\\n', {}_stdout)".format(basename, basename), + lines) + lines = re.sub("putchar\(([^)]+)\)", + r"fputc(\1, {}_stdout)".format(basename), lines) + + fn = os.path.basename(filename) + # some specific fixes: + SPECIFIC_SUBSTITUTIONS = { + "bam_md.c": ( + 'sam_open_format("-", mode_w', + 'sam_open_format({}_stdout_fn, mode_w'.format(basename)), + "phase.c": ( + 'putc("ACGT"[f->seq[j] == 1? (c&3, {}_stdout) : (c>>16&3)]);'.format(basename), + 'putc("ACGT"[f->seq[j] == 1? (c&3) : (c>>16&3)], {}_stdout);'.format(basename)), + "cut_target.c": ( + 'putc(33 + (cns[j]>>8>>2, {}_stdout));'.format(basename), + 'putc(33 + (cns[j]>>8>>2), {}_stdout);'.format(basename)) + } + if fn in SPECIFIC_SUBSTITUTIONS: + lines = lines.replace( + SPECIFIC_SUBSTITUTIONS[fn][0], + SPECIFIC_SUBSTITUTIONS[fn][1]) + outfile.write(lines) + + with open(os.path.join("import", "pysam.h")) as inf, \ + open(os.path.join(destdir, "{}.pysam.h".format(basename)), "w") as outf: + outf.write(re.sub("@pysam@", basename, inf.read())) + + with open(os.path.join("import", "pysam.c")) as inf, \ + open(os.path.join(destdir, "{}.pysam.c".format(basename)), "w") as outf: + outf.write(re.sub("@pysam@", basename, inf.read())) + + +if len(sys.argv) >= 1: + if len(sys.argv) != 3: + raise ValueError("import requires dest src") + + dest, srcdir = sys.argv[1:3] + if dest not in EXCLUDE: + raise ValueError("import expected one of %s" % + ",".join(EXCLUDE.keys())) + exclude = EXCLUDE[dest] + destdir = os.path.abspath(dest) + srcdir = os.path.abspath(srcdir) + if not os.path.exists(srcdir): + raise IOError( + "source directory `%s` does not exist." % srcdir) + + cfiles = locate("*.c", srcdir) + hfiles = locate("*.h", srcdir) + mfiles = itertools.chain(locate("README", srcdir), locate("LICENSE", srcdir)) + + # remove unwanted files and htslib subdirectory. + cfiles = [x for x in cfiles if os.path.basename(x) not in exclude + and not re.search("htslib-", x)] + + hfiles = [x for x in hfiles if os.path.basename(x) not in exclude + and not re.search("htslib-", x)] + + ncopied = 0 + + def _compareAndCopy(src, srcdir, destdir, exclude): + + d, f = os.path.split(src) + common_prefix = os.path.commonprefix((d, srcdir)) + subdir = re.sub(common_prefix, "", d)[1:] + targetdir = os.path.join(destdir, subdir) + if not os.path.exists(targetdir): + os.makedirs(targetdir) + old_file = os.path.join(targetdir, f) + if os.path.exists(old_file): + md5_old = hashlib.md5( + "".join(open(old_file, "r", encoding="utf-8").readlines()).encode()).digest() + md5_new = hashlib.md5( + "".join(open(src, "r", encoding="utf-8").readlines()).encode()).digest() + if md5_old != md5_new: + raise ValueError( + "incompatible files for %s and %s" % + (old_file, src)) + + shutil.copy(src, targetdir) + return old_file + + for src_file in hfiles: + _compareAndCopy(src_file, srcdir, destdir, exclude) + ncopied += 1 + + for src_file in mfiles: + _compareAndCopy(src_file, srcdir, destdir, exclude) + ncopied += 1 + + cf = [] + for src_file in cfiles: + cf.append(_compareAndCopy(src_file, + srcdir, + destdir, + exclude)) + ncopied += 1 + + sys.stdout.write( + "installed latest source code from %s: " + "%i files copied\n" % (srcdir, ncopied)) + # redirect stderr to pysamerr and replace bam.h with a stub. + sys.stdout.write("applying stderr redirection\n") + + _update_pysam_files(cf, destdir) + + sys.exit(0) + + +# if len(sys.argv) >= 2 and sys.argv[1] == "refresh": +# sys.stdout.write("refreshing latest source code from .c to .pysam.c") +# # redirect stderr to pysamerr and replace bam.h with a stub. +# sys.stdout.write("applying stderr redirection") +# for destdir in ('samtools', ): +# pysamcfiles = locate("*.pysam.c", destdir) +# for f in pysamcfiles: +# os.remove(f) +# cfiles = locate("*.c", destdir) +# _update_pysam_files(cfiles, destdir) + +# sys.exit(0) + diff --git a/import/pysam.c b/import/pysam.c new file mode 100644 index 0000000..1642013 --- /dev/null +++ b/import/pysam.c @@ -0,0 +1,68 @@ +#include +#include +#include +#include +#include +#include + +#include "@pysam@.pysam.h" + +FILE * @pysam@_stderr = NULL; +FILE * @pysam@_stdout = NULL; +const char * @pysam@_stdout_fn = NULL; +int @pysam@_stdout_fileno = STDOUT_FILENO; + + +FILE * @pysam@_set_stderr(int fd) +{ + if (@pysam@_stderr != NULL) + fclose(@pysam@_stderr); + @pysam@_stderr = fdopen(fd, "w"); + return @pysam@_stderr; +} + +void @pysam@_unset_stderr(void) +{ + if (@pysam@_stderr != NULL) + fclose(@pysam@_stderr); + @pysam@_stderr = fopen("/dev/null", "w"); +} + +FILE * @pysam@_set_stdout(int fd) +{ + if (@pysam@_stdout != NULL) + fclose(@pysam@_stdout); + @pysam@_stdout = fdopen(fd, "w"); + if (@pysam@_stdout == NULL) + { + fprintf(@pysam@_stderr, "could not set stdout to fd %i", fd); + } + @pysam@_stdout_fileno = fd; + return @pysam@_stdout; +} + +void @pysam@_set_stdout_fn(const char *fn) +{ + @pysam@_stdout_fn = fn; +} + +void @pysam@_unset_stdout(void) +{ + if (@pysam@_stdout != NULL) + fclose(@pysam@_stdout); + @pysam@_stdout = fopen("/dev/null", "w"); + @pysam@_stdout_fileno = STDOUT_FILENO; +} + +void @pysam@_set_optind(int val) +{ + // setting this in cython via + // "from posix.unistd cimport optind" + // did not work. + // + // setting to 0 forces a complete re-initialization + optind = val; +} + + + diff --git a/import/pysam.h b/import/pysam.h new file mode 100644 index 0000000..4a6ec29 --- /dev/null +++ b/import/pysam.h @@ -0,0 +1,47 @@ +#ifndef PYSAM_H +#define PYSAM_H + +#include "stdio.h" + +extern FILE * @pysam@_stderr; + +extern FILE * @pysam@_stdout; + +extern const char * @pysam@_stdout_fn; + +/*! set pysam standard error to point to file descriptor + + Setting the stderr will close the previous stderr. + */ +FILE * @pysam@_set_stderr(int fd); + +/*! set pysam standard output to point to file descriptor + + Setting the stderr will close the previous stdout. + */ +FILE * @pysam@_set_stdout(int fd); + +/*! set pysam standard output to point to filename + + */ +void @pysam@_set_stdout_fn(const char * fn); + +/*! set pysam standard error to /dev/null. + + Unsetting the stderr will close the previous stderr. + */ +void @pysam@_unset_stderr(void); + +/*! set pysam standard error to /dev/null. + + Unsetting the stderr will close the previous stderr. + */ +void @pysam@_unset_stdout(void); + +int @pysam@_dispatch(int argc, char *argv[]); + +void @pysam@_set_optind(int); + +extern int @pysam@_main(int argc, char *argv[]); + +#endif diff --git a/linker_tests/link_pre_489/PysamTestModule_link_pre_489/BuildRead.pyx b/linker_tests/link_pre_489/PysamTestModule_link_pre_489/BuildRead.pyx new file mode 100644 index 0000000..9c51e8f --- /dev/null +++ b/linker_tests/link_pre_489/PysamTestModule_link_pre_489/BuildRead.pyx @@ -0,0 +1,24 @@ +from __future__ import absolute_import + +from pysam.libchtslib cimport bam1_t, bam_endpos +from pysam.libcsamfile cimport aux_type2size +from pysam.libcalignedsegment cimport AlignedSegment + +import pysam + + +cpdef build_read(): + cdef AlignedSegment read = pysam.AlignedSegment() + read.query_name = "hello" + read.query_sequence = "ACGT" + read.reference_start = 10 + read.cigarstring = "4M" + + # Test calling htslib function + cdef bam1_t *calign = read._delegate + print(bam_endpos(calign)) + + # Test calling pysam htslib_util function + print(aux_type2size(12)) + + return read diff --git a/linker_tests/link_pre_489/PysamTestModule_link_pre_489/__init__.py b/linker_tests/link_pre_489/PysamTestModule_link_pre_489/__init__.py new file mode 100644 index 0000000..e441021 --- /dev/null +++ b/linker_tests/link_pre_489/PysamTestModule_link_pre_489/__init__.py @@ -0,0 +1,3 @@ +from PysamTestModule_link_pre_489.BuildRead import build_read + +all = ["build_read"] diff --git a/linker_tests/link_pre_489/cy_build.py b/linker_tests/link_pre_489/cy_build.py new file mode 100644 index 0000000..fae7055 --- /dev/null +++ b/linker_tests/link_pre_489/cy_build.py @@ -0,0 +1,86 @@ +import os +import re +import sys + +try: + from Cython.Distutils import build_ext +except ImportError: + from setuptools.command.build_ext import build_ext + +from distutils.extension import Extension +from distutils.sysconfig import get_config_vars, get_python_lib, get_python_version +from pkg_resources import Distribution + + +if sys.platform == 'darwin': + config_vars = get_config_vars() + config_vars['LDSHARED'] = config_vars['LDSHARED'].replace('-bundle', '') + config_vars['SHLIB_EXT'] = '.so' + + +def is_pip_install(): + if "_" in os.environ and os.environ["_"].endswith("pip"): + return True + if "pip-egg-info" in sys.argv: + return True + if re.search("/pip-.*-build/", __file__): + return True + return False + + +class CyExtension(Extension): + def __init__(self, *args, **kwargs): + self._init_func = kwargs.pop("init_func", None) + Extension.__init__(self, *args, **kwargs) + + def extend_includes(self, includes): + self.include_dirs.extend(includes) + + def extend_macros(self, macros): + self.define_macros.extend(macros) + + def extend_extra_objects(self, objs): + self.extra_objects.extend(objs) + + +class cy_build_ext(build_ext): + + def _get_egg_name(self): + ei_cmd = self.get_finalized_command("egg_info") + return Distribution( + None, None, ei_cmd.egg_name, ei_cmd.egg_version, get_python_version(), + self.distribution.has_ext_modules() and self.plat_name).egg_name() + + def build_extension(self, ext): + + if isinstance(ext, CyExtension) and ext._init_func: + ext._init_func(ext) + + if not self.inplace: + ext.library_dirs.append(os.path.join(self.build_lib, "pysam")) + + if sys.platform == 'darwin': + # The idea is to give shared libraries an install name of the form + # `@rpath/`, and to set the rpath equal to + # @loader_path. This will allow Python packages to find the library + # in the expected place, while still giving enough flexibility to + # external applications to link against the library. + relative_module_path = ext.name.replace(".", os.sep) + get_config_vars()["SO"] + library_path = os.path.join( + "@rpath", os.path.basename(relative_module_path) + ) + + if not ext.extra_link_args: + ext.extra_link_args = [] + ext.extra_link_args += ['-dynamiclib', + '-rpath', '@loader_path', + '-Wl,-headerpad_max_install_names', + '-Wl,-install_name,%s' % library_path, + '-Wl,-x'] + else: + if not ext.extra_link_args: + ext.extra_link_args = [] + + ext.extra_link_args += ['-Wl,-rpath,$ORIGIN'] + + build_ext.build_extension(self, ext) diff --git a/linker_tests/link_pre_489/setup.py b/linker_tests/link_pre_489/setup.py new file mode 100644 index 0000000..5fc75d5 --- /dev/null +++ b/linker_tests/link_pre_489/setup.py @@ -0,0 +1,28 @@ +import glob +import sys +import os + +from setuptools import setup, find_packages, Extension +from cy_build import CyExtension as Extension, cy_build_ext as build_ext + +import pysam + +test_module_suffix = os.path.dirname(os.path.abspath(__file__)).split(os.sep)[-1] +test_module_name = "PysamTestModule_{}".format(test_module_suffix) + +TestModule = Extension( + "{}.BuildRead".format(test_module_name), + ["{}/BuildRead.pyx".format(test_module_name)], + include_dirs=pysam.get_include(), + extra_link_args=pysam.get_libraries(), + define_macros=pysam.get_defines(), +) + +setup( + name=test_module_name, + version='0.1', + packages=find_packages(), + package_dir={test_module_name: test_module_name}, + ext_modules=[TestModule], + cmdclass={'build_ext': build_ext}, +) diff --git a/linker_tests/link_pre_489/tests/test_module.py b/linker_tests/link_pre_489/tests/test_module.py new file mode 100644 index 0000000..46ba27a --- /dev/null +++ b/linker_tests/link_pre_489/tests/test_module.py @@ -0,0 +1,15 @@ +import unittest + +from PysamTestModule_link_pre_489 import build_read + + +class TestModule(unittest.TestCase): + + def test_pass_if_module_can_be_called(self): + read = build_read() + self.assertEqual(read.query_name, "hello") + self.assertEqual(read.query_sequence, "ACGT") + + +if __name__ == "__main__": + unittest.main() diff --git a/linker_tests/link_with_rpath/PysamTestModule_link_with_rpath/BuildRead.pyx b/linker_tests/link_with_rpath/PysamTestModule_link_with_rpath/BuildRead.pyx new file mode 100644 index 0000000..9c51e8f --- /dev/null +++ b/linker_tests/link_with_rpath/PysamTestModule_link_with_rpath/BuildRead.pyx @@ -0,0 +1,24 @@ +from __future__ import absolute_import + +from pysam.libchtslib cimport bam1_t, bam_endpos +from pysam.libcsamfile cimport aux_type2size +from pysam.libcalignedsegment cimport AlignedSegment + +import pysam + + +cpdef build_read(): + cdef AlignedSegment read = pysam.AlignedSegment() + read.query_name = "hello" + read.query_sequence = "ACGT" + read.reference_start = 10 + read.cigarstring = "4M" + + # Test calling htslib function + cdef bam1_t *calign = read._delegate + print(bam_endpos(calign)) + + # Test calling pysam htslib_util function + print(aux_type2size(12)) + + return read diff --git a/linker_tests/link_with_rpath/PysamTestModule_link_with_rpath/__init__.py b/linker_tests/link_with_rpath/PysamTestModule_link_with_rpath/__init__.py new file mode 100644 index 0000000..c4b1a09 --- /dev/null +++ b/linker_tests/link_with_rpath/PysamTestModule_link_with_rpath/__init__.py @@ -0,0 +1,3 @@ +from PysamTestModule_link_with_rpath.BuildRead import build_read + +all = ["build_read"] diff --git a/linker_tests/link_with_rpath/setup.py b/linker_tests/link_with_rpath/setup.py new file mode 100644 index 0000000..2e5a8af --- /dev/null +++ b/linker_tests/link_with_rpath/setup.py @@ -0,0 +1,36 @@ +import glob +import sys +import os + +from setuptools import setup, find_packages, Extension +from Cython.Distutils import build_ext + +import pysam + +test_module_suffix = os.path.dirname(os.path.abspath(__file__)).split(os.sep)[-1] +test_module_name = "PysamTestModule_{}".format(test_module_suffix) + +pysam_libraries = pysam.get_libraries() +pysam_libdirs, pysam_libs = zip(*[os.path.split(x) for x in pysam_libraries]) +pysam_libdir = pysam_libdirs[0] +# remove lib and .so +pysam_libs = [x[3:-3] for x in pysam_libs] + +TestModule = Extension( + "{}.BuildRead".format(test_module_name), + ["{}/BuildRead.pyx".format(test_module_name)], + include_dirs=pysam.get_include(), + library_dirs=[pysam_libdir], + libraries=pysam_libs, + extra_link_args=['-Wl,-rpath,{}'.format(pysam_libdir)], + language="C", +) + +setup( + name=test_module_name, + version='0.1', + packages=find_packages(), + package_dir={test_module_name: test_module_name}, + ext_modules=[TestModule], + cmdclass={'build_ext': build_ext}, +) diff --git a/linker_tests/link_with_rpath/tests/test_module.py b/linker_tests/link_with_rpath/tests/test_module.py new file mode 100644 index 0000000..f8621b4 --- /dev/null +++ b/linker_tests/link_with_rpath/tests/test_module.py @@ -0,0 +1,15 @@ +import unittest + +from PysamTestModule_link_with_rpath import build_read + + +class TestModule(unittest.TestCase): + + def test_pass_if_module_can_be_called(self): + read = build_read() + self.assertEqual(read.query_name, "hello") + self.assertEqual(read.query_sequence, "ACGT") + + +if __name__ == "__main__": + unittest.main() diff --git a/linker_tests/link_without_rpath/PysamTestModule_link_without_rpath/BuildRead.pyx b/linker_tests/link_without_rpath/PysamTestModule_link_without_rpath/BuildRead.pyx new file mode 100644 index 0000000..9c51e8f --- /dev/null +++ b/linker_tests/link_without_rpath/PysamTestModule_link_without_rpath/BuildRead.pyx @@ -0,0 +1,24 @@ +from __future__ import absolute_import + +from pysam.libchtslib cimport bam1_t, bam_endpos +from pysam.libcsamfile cimport aux_type2size +from pysam.libcalignedsegment cimport AlignedSegment + +import pysam + + +cpdef build_read(): + cdef AlignedSegment read = pysam.AlignedSegment() + read.query_name = "hello" + read.query_sequence = "ACGT" + read.reference_start = 10 + read.cigarstring = "4M" + + # Test calling htslib function + cdef bam1_t *calign = read._delegate + print(bam_endpos(calign)) + + # Test calling pysam htslib_util function + print(aux_type2size(12)) + + return read diff --git a/linker_tests/link_without_rpath/PysamTestModule_link_without_rpath/__init__.py b/linker_tests/link_without_rpath/PysamTestModule_link_without_rpath/__init__.py new file mode 100644 index 0000000..722c5d0 --- /dev/null +++ b/linker_tests/link_without_rpath/PysamTestModule_link_without_rpath/__init__.py @@ -0,0 +1,3 @@ +from PysamTestModule_link_without_rpath.BuildRead import build_read + +all = ["build_read"] diff --git a/linker_tests/link_without_rpath/setup.py b/linker_tests/link_without_rpath/setup.py new file mode 100644 index 0000000..7846e4b --- /dev/null +++ b/linker_tests/link_without_rpath/setup.py @@ -0,0 +1,35 @@ +import glob +import sys +import os + +from setuptools import setup, find_packages, Extension +from Cython.Distutils import build_ext + +import pysam + +test_module_suffix = os.path.dirname(os.path.abspath(__file__)).split(os.sep)[-1] +test_module_name = "PysamTestModule_{}".format(test_module_suffix) + +pysam_libraries = pysam.get_libraries() +pysam_libdirs, pysam_libs = zip(*[os.path.split(x) for x in pysam_libraries]) +pysam_libdir = pysam_libdirs[0] +# remove lib and .so +pysam_libs = [x[3:-3] for x in pysam_libs] + +TestModule = Extension( + "{}.BuildRead".format(test_module_name), + ["{}/BuildRead.pyx".format(test_module_name)], + include_dirs=pysam.get_include(), + library_dirs=[pysam_libdir], + libraries=pysam_libs, + language="C", +) + +setup( + name=test_module_name, + version='0.1', + packages=find_packages(), + package_dir={test_module_name: test_module_name}, + ext_modules=[TestModule], + cmdclass={'build_ext': build_ext}, +) diff --git a/linker_tests/link_without_rpath/tests/test_module.py b/linker_tests/link_without_rpath/tests/test_module.py new file mode 100644 index 0000000..1da5bbc --- /dev/null +++ b/linker_tests/link_without_rpath/tests/test_module.py @@ -0,0 +1,15 @@ +import unittest + +from PysamTestModule_link_without_rpath import build_read + + +class TestModule(unittest.TestCase): + + def test_pass_if_module_can_be_called(self): + read = build_read() + self.assertEqual(read.query_name, "hello") + self.assertEqual(read.query_sequence, "ACGT") + + +if __name__ == "__main__": + unittest.main() diff --git a/pysam.py b/pysam.py new file mode 100644 index 0000000..0823abd --- /dev/null +++ b/pysam.py @@ -0,0 +1 @@ +raise ImportError('''calling "import pysam" from the source directory is not supported - please import pysam from somewhere else.''') diff --git a/pysam/Pileup.py b/pysam/Pileup.py new file mode 100644 index 0000000..1fe05ec --- /dev/null +++ b/pysam/Pileup.py @@ -0,0 +1,282 @@ +'''Tools for working with files in the samtools pileup -c format.''' +import collections +import pysam + +PileupSubstitution = collections.namedtuple("PileupSubstitution", + " ".join(( + "chromosome", + "pos", + "reference_base", + "genotype", + "consensus_quality", + "snp_quality", + "mapping_quality", + "coverage", + "read_bases", + "base_qualities"))) + +PileupIndel = collections.namedtuple("PileupIndel", + " ".join(( + "chromosome", + "pos", + "reference_base", + "genotype", + "consensus_quality", + "snp_quality", + "mapping_quality", + "coverage", + "first_allele", + "second_allele", + "reads_first", + "reads_second", + "reads_diff"))) + + +def iterate(infile): + '''iterate over ``samtools pileup -c`` formatted file. + + *infile* can be any iterator over a lines. + + The function yields named tuples of the type :class:`pysam.Pileup.PileupSubstitution` + or :class:`pysam.Pileup.PileupIndel`. + + .. note:: + + The parser converts to 0-based coordinates + ''' + + conv_subst = (str, lambda x: int(x) - 1, str, + str, int, int, int, int, str, str) + conv_indel = (str, lambda x: int(x) - 1, str, str, int, + int, int, int, str, str, int, int, int) + + for line in infile: + d = line[:-1].split() + if d[2] == "*": + try: + yield PileupIndel(*[x(y) for x, y in zip(conv_indel, d)]) + except TypeError: + raise pysam.SamtoolsError("parsing error in line: `%s`" % line) + else: + try: + yield PileupSubstitution(*[x(y) for x, y in zip(conv_subst, d)]) + except TypeError: + raise pysam.SamtoolsError("parsing error in line: `%s`" % line) + + +ENCODE_GENOTYPE = { + 'A': 'A', 'C': 'C', 'G': 'G', 'T': 'T', + 'AA': 'A', 'CC': 'C', 'GG': 'G', 'TT': 'T', 'UU': 'U', + 'AG': 'r', 'GA': 'R', + 'CT': 'y', 'TC': 'Y', + 'AC': 'm', 'CA': 'M', + 'GT': 'k', 'TG': 'K', + 'CG': 's', 'GC': 'S', + 'AT': 'w', 'TA': 'W', +} + +DECODE_GENOTYPE = { + 'A': 'AA', + 'C': 'CC', + 'G': 'GG', + 'T': 'TT', + 'r': 'AG', 'R': 'AG', + 'y': 'CT', 'Y': 'CT', + 'm': 'AC', 'M': 'AC', + 'k': 'GT', 'K': 'GT', + 's': 'CG', 'S': 'CG', + 'w': 'AT', 'W': 'AT', +} + +# ------------------------------------------------------------ + + +def encodeGenotype(code): + '''encode genotypes like GG, GA into a one-letter code. + The returned code is lower case if code[0] < code[1], otherwise + it is uppercase. + ''' + return ENCODE_GENOTYPE[code.upper()] + + +def decodeGenotype(code): + '''decode single letter genotypes like m, M into two letters. + This is the reverse operation to :meth:`encodeGenotype`. + ''' + return DECODE_GENOTYPE[code] + + +def translateIndelGenotypeFromVCF(vcf_genotypes, ref): + '''translate indel from vcf to pileup format.''' + + # indels + def getPrefix(s1, s2): + '''get common prefix of strings s1 and s2.''' + n = min(len(s1), len(s2)) + for x in range(n): + if s1[x] != s2[x]: + return s1[:x] + return s1[:n] + + def getSuffix(s1, s2): + '''get common sufix of strings s1 and s2.''' + n = min(len(s1), len(s2)) + if s1[-1] != s2[-1]: + return "" + for x in range(-2, -n - 1, -1): + if s1[x] != s2[x]: + return s1[x + 1:] + return s1[-n:] + + def getGenotype(variant, ref): + + if variant == ref: + return "*", 0 + + if len(ref) > len(variant): + # is a deletion + if ref.startswith(variant): + return "-%s" % ref[len(variant):], len(variant) - 1 + elif ref.endswith(variant): + return "-%s" % ref[:-len(variant)], -1 + else: + prefix = getPrefix(ref, variant) + suffix = getSuffix(ref, variant) + shared = len(prefix) + len(suffix) - len(variant) + # print "-", prefix, suffix, ref, variant, shared, len(prefix), len(suffix), len(ref) + if shared < 0: + raise ValueError() + return "-%s" % ref[len(prefix):-(len(suffix) - shared)], len(prefix) - 1 + + elif len(ref) < len(variant): + # is an insertion + if variant.startswith(ref): + return "+%s" % variant[len(ref):], len(ref) - 1 + elif variant.endswith(ref): + return "+%s" % variant[:len(ref)], 0 + else: + prefix = getPrefix(ref, variant) + suffix = getSuffix(ref, variant) + shared = len(prefix) + len(suffix) - len(ref) + if shared < 0: + raise ValueError() + + return "+%s" % variant[len(prefix):-(len(suffix) - shared)], len(prefix) + else: + assert 0, "snp?" + + # in pileup, the position refers to the base + # after the coordinate, hence subtract 1 + # pos -= 1 + + genotypes, offsets = [], [] + is_error = True + + for variant in vcf_genotypes: + try: + g, offset = getGenotype(variant, ref) + except ValueError: + break + + genotypes.append(g) + if g != "*": + offsets.append(offset) + + else: + is_error = False + + if is_error: + raise ValueError() + + assert len(set(offsets)) == 1, "multiple offsets for indel" + offset = offsets[0] + + genotypes = "/".join(genotypes) + return genotypes, offset + + +def vcf2pileup(vcf, sample): + '''convert vcf record to pileup record.''' + + chromosome = vcf.contig + pos = vcf.pos + reference = vcf.ref + allelles = [reference] + vcf.alt + + data = vcf[sample] + + # get genotype + genotypes = data["GT"] + if len(genotypes) > 1: + raise ValueError("only single genotype per position, %s" % (str(vcf))) + + genotypes = genotypes[0] + + # not a variant + if genotypes[0] == ".": + return None + + genotypes = [allelles[int(x)] for x in genotypes if x != "/"] + + # snp_quality is "genotype quality" + snp_quality = consensus_quality = data.get("GQ", [0])[0] + mapping_quality = vcf.info.get("MQ", [0])[0] + coverage = data.get("DP", 0) + + if len(reference) > 1 or max([len(x) for x in vcf.alt]) > 1: + # indel + genotype, offset = translateIndelGenotypeFromVCF(genotypes, reference) + + return PileupIndel(chromosome, + pos + offset, + "*", + genotype, + consensus_quality, + snp_quality, + mapping_quality, + coverage, + genotype, + "<" * len(genotype), + 0, + 0, + 0) + + else: + genotype = encodeGenotype("".join(genotypes)) + read_bases = "" + base_qualities = "" + + return PileupSubstitution(chromosome, pos, reference, + genotype, consensus_quality, + snp_quality, mapping_quality, + coverage, read_bases, + base_qualities) + + +def iterate_from_vcf(infile, sample): + '''iterate over a vcf-formatted file. + + *infile* can be any iterator over a lines. + + The function yields named tuples of the type + :class:`pysam.Pileup.PileupSubstitution` or + :class:`pysam.Pileup.PileupIndel`. + + Positions without a snp will be skipped. + + This method is wasteful and written to support same legacy code + that expects samtools pileup output. + + Better use the vcf parser directly. + + ''' + vcf = pysam.VCF() + vcf.connect(infile) + + if sample not in vcf.getsamples(): + raise KeyError("sample %s not vcf file") + + for row in vcf.fetch(): + result = vcf2pileup(row, sample) + if result: + yield result diff --git a/pysam/VCF.py.obsolete b/pysam/VCF.py.obsolete new file mode 100644 index 0000000..78e6220 --- /dev/null +++ b/pysam/VCF.py.obsolete @@ -0,0 +1,1087 @@ +# +# Code to read, write and edit VCF files +# +# VCF lines are encoded as a dictionary with these keys (note: all lowercase): +# 'chrom': string +# 'pos': integer +# 'id': string +# 'ref': string +# 'alt': list of strings +# 'qual': integer +# 'filter': None (missing value), or list of keys (strings); empty list parsed as ["PASS"] +# 'info': dictionary of values (see below) +# 'format': list of keys (strings) +# sample keys: dictionary of values (see below) +# +# The sample keys are accessible through vcf.getsamples() +# +# A dictionary of values contains value keys (defined in ##INFO or ##FORMAT lines) which map +# to a list, containign integers, floats, strings, or characters. Missing values are replaced +# by a particular value, often -1 or . +# +# Genotypes are not stored as a string, but as a list of 1 or 3 elements (for haploid and diploid samples), +# the first (and last) the integer representing an allele, and the second the separation character. +# Note that there is just one genotype per sample, but for consistency the single element is stored in a list. +# +# Header lines other than ##INFO, ##FORMAT and ##FILTER are stored as (key, value) pairs and are accessible +# through getheader() +# +# The VCF class can be instantiated with a 'regions' variable consisting of tuples (chrom,start,end) encoding +# 0-based half-open segments. Only variants with a position inside the segment will be parsed. A regions +# parser is available under parse_regions. +# +# When instantiated, a reference can be passed to the VCF class. This may be any class that supports a +# fetch(chrom, start, end) method. +# +# +# +# NOTE: the position that is returned to Python is 0-based, NOT 1-based as in the VCF file. +# +# +# +# TODO: +# only v4.0 writing is complete; alleles are not converted to v3.3 format +# + +from collections import namedtuple, defaultdict +from operator import itemgetter +import sys, re, copy, bisect + +import pysam + +gtsRegEx = re.compile("[|/\\\\]") +alleleRegEx = re.compile('^[ACGTN]+$') + +# Utility function. Uses 0-based coordinates +def get_sequence(chrom, start, end, fa): + # obtain sequence from .fa file, without truncation + if end<=start: return "" + if not fa: return "N"*(end-start) + if start<0: return "N"*(-start) + get_sequence(chrom, 0, end, fa).upper() + sequence = fa.fetch(chrom, start, end).upper() + if len(sequence) < end-start: sequence += "N"*(end-start-len(sequence)) + return sequence + +# Utility function. Parses a region string +def parse_regions( string ): + result = [] + for r in string.split(','): + elts = r.split(':') + chrom, start, end = elts[0], 0, 3000000000 + if len(elts)==1: pass + elif len(elts)==2: + if len(elts[1])>0: + ielts = elts[1].split('-') + if len(ielts) != 2: ValueError("Don't understand region string '%s'" % r) + try: start, end = int(ielts[0])-1, int(ielts[1]) + except: raise ValueError("Don't understand region string '%s'" % r) + else: + raise ValueError("Don't understand region string '%s'" % r) + result.append( (chrom,start,end) ) + return result + + +FORMAT = namedtuple('FORMAT','id numbertype number type description missingvalue') + +########################################################################################################### +# +# New class +# +########################################################################################################### + +class VCFRecord(object): + '''vcf record. + + initialized from data and vcf meta + ''' + + data = None + vcf = None + + def __init__(self, data, vcf): + self.data, self.vcf = data, vcf + + if len(data) != len(self.vcf._samples): + self.error(str(data), + self.BAD_NUMBER_OF_COLUMNS, + "expected %s for %s samples (%s), got %s" % \ + (len(self.vcf._samples), + len(self.vcf._samples), + self.vcf._samples, + len(data))) + + property contig: + def __get__( self ): return self.data[0] + + property pos: + def __get__( self ): + return self.data.pos + + property id: + def __get__( self ): return self.data[2] + + property ref: + def __get__(self ): + # note: gerton substitutes reference if it can be fixed. + return self.data[3].upper() + + property alt: + def __get__(self): + # convert v3.3 to v4.0 alleles below + alt = self.data[4] + if alt == ".": alt = [] + else: alt = alt.upper().split(',') + return alt + + property qual: + def __get__(self): + qual = self.data[5] + if qual == ".": qual = -1 + else: + try: qual = float(qual) + except: self.error(line,self.QUAL_NOT_NUMERICAL) + + property filter: + def __get__(self): + # postpone checking that filters exist. Encode missing filter or no filtering as empty list + if cols[6] == "." or cols[6] == "PASS" or cols[6] == "0": filter = [] + else: filter = cols[6].split(';') + + return filter + + property info: + def __get__(self): + col = self.data[7] + # dictionary of keys, and list of values + info = {} + if col != ".": + for blurp in col.split(';'): + elts = blurp.split('=') + if len(elts) == 1: v = None + elif len(elts) == 2: v = elts[1] + else: self.error(str(self.data),self.ERROR_INFO_STRING) + info[elts[0]] = self.parse_formatdata(elts[0], v, self.vcf._info, line) + return info + + property format: + def __get__(self): + return self.data[8].split(':') + + def __getitem__(self, key): + + # parse sample columns + values = self.data[self.vcf._sample2column[key]].split(':') + alt = self.alt + format = self.format + + if len(values) > len(format): + self.error(line,self.BAD_NUMBER_OF_VALUES,"(found %s values in element %s; expected %s)" % (len(values),sample,len(format))) + + result = {} + for idx in range(len(format)): + expected = self.vcf.get_expected(format[idx], self.vcf._format, alt) + if idx < len(values): value = values[idx] + else: + if expected == -1: value = "." + else: value = ",".join(["."]*expected) + + result[format[idx]] = self.vcf.parse_formatdata(format[idx], value, self.vcf._format, line) + if expected != -1 and len(result[format[idx]]) != expected: + self.error(str(self.data),self.BAD_NUMBER_OF_PARAMETERS, + "id=%s, expected %s parameters, got %s" % (format[idx],expected,result[format[idx]])) + if len(result[format[idx]] ) < expected: result[format[idx]] += [result[format[idx]][-1]]*(expected-len(result[format[idx]])) + result[format[idx]] = result[format[idx]][:expected] + + return result + + def __str__(self): + return str(self.data) + +class VCF: + + # types + NT_UNKNOWN = 0 + NT_NUMBER = 1 + NT_ALLELES = 2 + NT_NR_ALLELES = 3 + NT_GENOTYPES = 4 + NT_PHASED_GENOTYPES = 5 + + _errors = { 0:"UNKNOWN_FORMAT_STRING:Unknown file format identifier", + 1:"BADLY_FORMATTED_FORMAT_STRING:Formatting error in the format string", + 2:"BADLY_FORMATTED_HEADING:Did not find 9 required headings (CHROM, POS, ..., FORMAT) %s", + 3:"BAD_NUMBER_OF_COLUMNS:Wrong number of columns found (%s)", + 4:"POS_NOT_NUMERICAL:Position column is not numerical", + 5:"UNKNOWN_CHAR_IN_REF:Unknown character in reference field", + 6:"V33_BAD_REF:Reference should be single-character in v3.3 VCF", + 7:"V33_BAD_ALLELE:Cannot interpret allele for v3.3 VCF", + 8:"POS_NOT_POSITIVE:Position field must be >0", + 9:"QUAL_NOT_NUMERICAL:Quality field must be numerical, or '.'", + 10:"ERROR_INFO_STRING:Error while parsing info field", + 11:"ERROR_UNKNOWN_KEY:Unknown key (%s) found in formatted field (info; format; or filter)", + 12:"ERROR_FORMAT_NOT_NUMERICAL:Expected integer or float in formatted field; got %s", + 13:"ERROR_FORMAT_NOT_CHAR:Eexpected character in formatted field; got string", + 14:"FILTER_NOT_DEFINED:Identifier (%s) in filter found which was not defined in header", + 15:"FORMAT_NOT_DEFINED:Identifier (%s) in format found which was not defined in header", + 16:"BAD_NUMBER_OF_VALUES:Found too many of values in sample column (%s)", + 17:"BAD_NUMBER_OF_PARAMETERS:Found unexpected number of parameters (%s)", + 18:"BAD_GENOTYPE:Cannot parse genotype (%s)", + 19:"V40_BAD_ALLELE:Bad allele found for v4.0 VCF (%s)", + 20:"MISSING_REF:Reference allele missing", + 21:"V33_UNMATCHED_DELETION:Deleted sequence does not match reference (%s)", + 22:"V40_MISSING_ANGLE_BRACKETS:Format definition is not deliminted by angular brackets", + 23:"FORMAT_MISSING_QUOTES:Description field in format definition is not surrounded by quotes", + 24:"V40_FORMAT_MUST_HAVE_NAMED_FIELDS:Fields in v4.0 VCF format definition must have named fields", + 25:"HEADING_NOT_SEPARATED_BY_TABS:Heading line appears separated by spaces, not tabs", + 26:"WRONG_REF:Wrong reference %s", + 27:"ERROR_TRAILING_DATA:Numerical field ('%s') has semicolon-separated trailing data", + 28:"BAD_CHR_TAG:Error calculating chr tag for %s", + 29:"ZERO_LENGTH_ALLELE:Found zero-length allele", + 30:"MISSING_INDEL_ALLELE_REF_BASE:Indel alleles must begin with single reference base" + } + + # tag-value pairs; tags are not unique; does not include fileformat, INFO, FILTER or FORMAT fields + _header = [] + + # version number; 33=v3.3; 40=v4.0 + _version = 40 + + # info, filter and format data + _info = {} + _filter = {} + _format = {} + + # header; and required columns + _required = ["CHROM","POS","ID","REF","ALT","QUAL","FILTER","INFO","FORMAT"] + _samples = [] + + # control behaviour + _ignored_errors = set([11]) # ERROR_UNKNOWN_KEY + _warn_errors = set([]) + _leftalign = False + + # reference sequence + _reference = None + + # regions to include; None includes everything + _regions = None + + # statefull stuff + _lineno = -1 + _line = None + _lines = None + + def __init__(self, _copy=None, reference=None, regions=None, lines=None, leftalign=False): + # make error identifiers accessible by name + for id in self._errors.keys(): self.__dict__[self._errors[id].split(':')[0]] = id + if _copy != None: + self._leftalign = _copy._leftalign + self._header = _copy._header[:] + self._version = _copy._version + self._info = copy.deepcopy(_copy._info) + self._filter = copy.deepcopy(_copy._filter) + self._format = copy.deepcopy(_copy._format) + self._samples = _copy._samples[:] + self._sample2column = copy.deepcopy(_copy._sample2column) + self._ignored_errors = copy.deepcopy(_copy._ignored_errors) + self._warn_errors = copy.deepcopy(_copy._warn_errors) + self._reference = _copy._reference + self._regions = _copy._regions + if reference: self._reference = reference + if regions: self._regions = regions + if leftalign: self._leftalign = leftalign + self._lines = lines + + def error(self,line,error,opt=None): + if error in self._ignored_errors: return + errorlabel, errorstring = self._errors[error].split(':') + if opt: errorstring = errorstring % opt + errwarn = ["Error","Warning"][error in self._warn_errors] + sys.stderr.write("Line %s: '%s'\n%s %s: %s\n" % (self._lineno,line,errwarn,errorlabel,errorstring)) + if error in self._warn_errors: return + raise ValueError(errorstring) + + def parse_format(self,line,format,filter=False): + if self._version >= 40: + if not format.startswith('<'): + self.error(line,self.V40_MISSING_ANGLE_BRACKETS) + format = "<"+format + if not format.endswith('>'): + self.error(line,self.V40_MISSING_ANGLE_BRACKETS) + format += ">" + format = format[1:-1] + data = {'id':None,'number':None,'type':None,'descr':None} + idx = 0 + while len(format.strip())>0: + elts = format.strip().split(',') + first, rest = elts[0], ','.join(elts[1:]) + if first.find('=') == -1 or (first.find('"')>=0 and first.find('=') > first.find('"')): + if self._version >= 40: self.error(line,self.V40_FORMAT_MUST_HAVE_NAMED_FIELDS) + if idx == 4: self.error(line,self.BADLY_FORMATTED_FORMAT_STRING) + first = ["ID=","Number=","Type=","Description="][idx] + first + if first.startswith('ID='): data['id'] = first.split('=')[1] + elif first.startswith('Number='): data['number'] = first.split('=')[1] + elif first.startswith('Type='): data['type'] = first.split('=')[1] + elif first.startswith('Description='): + elts = format.split('"') + if len(elts)<3: + self.error(line,self.FORMAT_MISSING_QUOTES) + elts = first.split('=') + [rest] + data['descr'] = elts[1] + rest = '"'.join(elts[2:]) + if rest.startswith(','): rest = rest[1:] + else: + self.error(line,self.BADLY_FORMATTED_FORMAT_STRING) + format = rest + idx += 1 + if filter and idx==1: idx=3 # skip number and type fields for FILTER format strings + if not data['id']: self.error(line,self.BADLY_FORMATTED_FORMAT_STRING) + if not data['descr']: + self.error(line,self.BADLY_FORMATTED_FORMAT_STRING) + data['descr'] = '' + if not data['type'] and not data['number']: + # fine, ##filter format + return FORMAT(data['id'],self.NT_NUMBER,0,"Flag",data['descr'],'.') + if not data['type'] in ["Integer","Float","Character","String","Flag"]: + self.error(line,self.BADLY_FORMATTED_FORMAT_STRING) + # I would like a missing-value field, but it isn't there + if data['type'] in ['Integer','Float']: data['missing'] = None # Do NOT use arbitrary int/float as missing value + else: data['missing'] = '.' + if not data['number']: self.error(line,self.BADLY_FORMATTED_FORMAT_STRING) + try: + n = int(data['number']) + t = self.NT_NUMBER + except ValueError: + n = -1 + if data['number'] == '.': t = self.NT_UNKNOWN + elif data['number'] == '#alleles': t = self.NT_ALLELES + elif data['number'] == '#nonref_alleles': t = self.NT_NR_ALLELES + elif data['number'] == '#genotypes': t = self.NT_GENOTYPES + elif data['number'] == '#phased_genotypes': t = self.NT_PHASED_GENOTYPES + else: + self.error(line,self.BADLY_FORMATTED_FORMAT_STRING) + return FORMAT(data['id'],t,n,data['type'],data['descr'],data['missing']) + + + def format_format( self, fmt, filter=False ): + values = [('ID',fmt.id)] + if fmt.number != None and not filter: + if fmt.numbertype == self.NT_UNKNOWN: nmb = "." + elif fmt.numbertype == self.NT_NUMBER: nmb = str(fmt.number) + elif fmt.numbertype == self.NT_ALLELES: nmb = "#alleles" + elif fmt.numbertype == self.NT_NR_ALLELES: nmb = "#nonref_alleles" + elif fmt.numbertype == self.NT_GENOTYPES: nmb = "#genotypes" + elif fmt.numbertype == self.NT_PHASED_GENOTYPES: nmb = "#phased_genotypes" + else: + raise ValueError("Unknown number type encountered: %s" % fmt.numbertype) + values.append( ('Number',nmb) ) + values.append( ('Type', fmt.type) ) + values.append( ('Description', '"' + fmt.description + '"') ) + if self._version == 33: + format = ",".join(v for k,v in values) + else: + format = "<" + (",".join( "%s=%s" % (k,v) for (k,v) in values )) + ">" + return format + + def get_expected(self, format, formatdict, alt): + fmt = formatdict[format] + if fmt.numbertype == self.NT_UNKNOWN: return -1 + if fmt.numbertype == self.NT_NUMBER: return fmt.number + if fmt.numbertype == self.NT_ALLELES: return len(alt)+1 + if fmt.numbertype == self.NT_NR_ALLELES: return len(alt) + if fmt.numbertype == self.NT_GENOTYPES: return ((len(alt)+1)*(len(alt)+2)) // 2 + if fmt.numbertype == self.NT_PHASED_GENOTYPES: return (len(alt)+1)*(len(alt)+1) + return 0 + + + def _add_definition(self, formatdict, key, data, line ): + if key in formatdict: return + self.error(line,self.ERROR_UNKNOWN_KEY,key) + if data == None: + formatdict[key] = FORMAT(key,self.NT_NUMBER,0,"Flag","(Undefined tag)",".") + return + if data == []: data = [""] # unsure what type -- say string + if type(data[0]) == type(0.0): + formatdict[key] = FORMAT(key,self.NT_UNKNOWN,-1,"Float","(Undefined tag)",None) + return + if type(data[0]) == type(0): + formatdict[key] = FORMAT(key,self.NT_UNKNOWN,-1,"Integer","(Undefined tag)",None) + return + formatdict[key] = FORMAT(key,self.NT_UNKNOWN,-1,"String","(Undefined tag)",".") + + + # todo: trim trailing missing values + def format_formatdata( self, data, format, key=True, value=True, separator=":" ): + output, sdata = [], [] + if type(data) == type([]): # for FORMAT field, make data with dummy values + d = {} + for k in data: d[k] = [] + data = d + # convert missing values; and silently add definitions if required + for k in data: + self._add_definition( format, k, data[k], "(output)" ) + for idx,v in enumerate(data[k]): + if v == format[k].missingvalue: data[k][idx] = "." + # make sure GT comes first; and ensure fixed ordering; also convert GT data back to string + for k in data: + if k != 'GT': sdata.append( (k,data[k]) ) + sdata.sort() + if 'GT' in data: + sdata = [('GT',map(self.convertGTback,data['GT']))] + sdata + for k,v in sdata: + if v == []: v = None + if key and value: + if v != None: output.append( k+"="+','.join(map(str,v)) ) + else: output.append( k ) + elif key: output.append(k) + elif value: + if v != None: output.append( ','.join(map(str,v)) ) + else: output.append( "." ) # should not happen + # snip off trailing missing data + while len(output) > 1: + last = output[-1].replace(',','').replace('.','') + if len(last)>0: break + output = output[:-1] + return separator.join(output) + + + def enter_default_format(self): + for f in [FORMAT('GT',self.NT_NUMBER,1,'String','Genotype','.'), + FORMAT('GQ',self.NT_NUMBER,1,'Integer','Genotype Quality',-1), + FORMAT('DP',self.NT_NUMBER,1,'Integer','Read depth at this position for this sample',-1), + FORMAT('HQ',self.NT_UNKNOWN,-1,'Integer','Haplotype Quality',-1), # unknown number, since may be haploid + FORMAT('FT',self.NT_NUMBER,1,'String','Sample Genotype Filter','.')]: + if f.id not in self._format: + self._format[f.id] = f + + def parse_header( self, line ): + assert line.startswith('##') + elts = line[2:].split('=') + key = elts[0].strip() + value = '='.join(elts[1:]).strip() + if key == "fileformat": + if value == "VCFv3.3": + self._version = 33 + elif value == "VCFv4.0": + self._version = 40 + elif value == "VCFv4.1": + self._version = 41 + else: + self.error(line,self.UNKNOWN_FORMAT_STRING) + elif key == "INFO": + f = self.parse_format(line, value) + self._info[ f.id ] = f + elif key == "FILTER": + f = self.parse_format(line, value, filter=True) + self._filter[ f.id ] = f + elif key == "FORMAT": + f = self.parse_format(line, value) + self._format[ f.id ] = f + else: + # keep other keys in the header field + self._header.append( (key,value) ) + + + def write_header( self, stream ): + stream.write("##fileformat=VCFv%s.%s\n" % (self._version // 10, self._version % 10)) + for key,value in self._header: stream.write("##%s=%s\n" % (key,value)) + for var,label in [(self._info,"INFO"),(self._filter,"FILTER"),(self._format,"FORMAT")]: + for f in var.itervalues(): stream.write("##%s=%s\n" % (label,self.format_format(f,filter=(label=="FILTER")))) + + + def parse_heading( self, line ): + assert line.startswith('#') + assert not line.startswith('##') + headings = line[1:].split('\t') + if len(headings)==1 and len(line[1:].split()) >= 9: + self.error(line,self.HEADING_NOT_SEPARATED_BY_TABS) + headings = line[1:].split() + + for i,s in enumerate(self._required): + + if len(headings)<=i or headings[i] != s: + + if len(headings) <= i: + err = "(%sth entry not found)" % (i+1) + else: + err = "(found %s, expected %s)" % (headings[i],s) + + #self.error(line,self.BADLY_FORMATTED_HEADING,err) + + # allow FORMAT column to be absent + if len(headings) == 8: + headings.append("FORMAT") + else: + self.error(line,self.BADLY_FORMATTED_HEADING,err) + + self._samples = headings[9:] + self._sample2column = dict( [(y,x) for x,y in enumerate( self._samples ) ] ) + + def write_heading( self, stream ): + stream.write("#" + "\t".join(self._required + self._samples) + "\n") + + def convertGT(self, GTstring): + if GTstring == ".": return ["."] + try: + gts = gtsRegEx.split(GTstring) + if len(gts) == 1: return [int(gts[0])] + if len(gts) != 2: raise ValueError() + if gts[0] == "." and gts[1] == ".": return [gts[0],GTstring[len(gts[0]):-len(gts[1])],gts[1]] + return [int(gts[0]),GTstring[len(gts[0]):-len(gts[1])],int(gts[1])] + except ValueError: + self.error(self._line,self.BAD_GENOTYPE,GTstring) + return [".","|","."] + + + def convertGTback(self, GTdata): + return ''.join(map(str,GTdata)) + + def parse_formatdata( self, key, value, formatdict, line ): + # To do: check that the right number of values is present + f = formatdict.get(key,None) + if f == None: + self._add_definition(formatdict, key, value, line ) + f = formatdict[key] + if f.type == "Flag": + if value is not None: self.error(line,self.ERROR_FLAG_HAS_VALUE) + return [] + values = value.split(',') + # deal with trailing data in some early VCF files + if f.type in ["Float","Integer"] and len(values)>0 and values[-1].find(';') > -1: + self.error(line,self.ERROR_TRAILING_DATA,values[-1]) + values[-1] = values[-1].split(';')[0] + if f.type == "Integer": + for idx,v in enumerate(values): + try: + if v == ".": values[idx] = f.missingvalue + else: values[idx] = int(v) + except: + self.error(line,self.ERROR_FORMAT_NOT_NUMERICAL,values) + return [0] * len(values) + return values + elif f.type == "String": + self._line = line + if f.id == "GT": values = map( self.convertGT, values ) + return values + elif f.type == "Character": + for v in values: + if len(v) != 1: self.error(line,self.ERROR_FORMAT_NOT_CHAR) + return values + elif f.type == "Float": + for idx,v in enumerate(values): + if v == ".": values[idx] = f.missingvalue + try: return map(float,values) + except: + self.error(line,self.ERROR_FORMAT_NOT_NUMERICAL,values) + return [0.0] * len(values) + else: + # can't happen + self.error(line,self.ERROR_INFO_STRING) + + + def inregion(self, chrom, pos): + if not self._regions: return True + for r in self._regions: + if r[0] == chrom and r[1] <= pos < r[2]: return True + return False + + + def parse_data( self, line, lineparse=False ): + cols = line.split('\t') + if len(cols) != len(self._samples)+9: + # gracefully deal with absent FORMAT column + if len(cols) == 8 and len(self._samples)==0: + cols.append("") + else: + self.error(line, + self.BAD_NUMBER_OF_COLUMNS, + "expected %s for %s samples (%s), got %s" % (len(self._samples)+9, len(self._samples), self._samples, len(cols))) + + chrom = cols[0] + + # get 0-based position + try: pos = int(cols[1])-1 + except: self.error(line,self.POS_NOT_NUMERICAL) + if pos < 0: self.error(line,self.POS_NOT_POSITIVE) + + # implement filtering + if not self.inregion(chrom,pos): return None + + # end of first-pass parse for sortedVCF + if lineparse: return chrom, pos, line + + id = cols[2] + + ref = cols[3].upper() + if ref == ".": + self.error(line,self.MISSING_REF) + if self._version == 33: ref = get_sequence(chrom,pos,pos+1,self._reference) + else: ref = "" + else: + for c in ref: + if c not in "ACGTN": self.error(line,self.UNKNOWN_CHAR_IN_REF) + if "N" in ref: ref = get_sequence(chrom,pos,pos+len(ref),self._reference) + + # make sure reference is sane + if self._reference: + left = max(0,pos-100) + faref_leftflank = get_sequence(chrom,left,pos+len(ref),self._reference) + faref = faref_leftflank[pos-left:] + if faref != ref: self.error(line,self.WRONG_REF,"(reference is %s, VCF says %s)" % (faref,ref)) + ref = faref + + # convert v3.3 to v4.0 alleles below + if cols[4] == ".": alt = [] + else: alt = cols[4].upper().split(',') + + if cols[5] == ".": qual = -1 + else: + try: qual = float(cols[5]) + except: self.error(line,self.QUAL_NOT_NUMERICAL) + + # postpone checking that filters exist. Encode missing filter or no filtering as empty list + if cols[6] == "." or cols[6] == "PASS" or cols[6] == "0": filter = [] + else: filter = cols[6].split(';') + + # dictionary of keys, and list of values + info = {} + if cols[7] != ".": + for blurp in cols[7].split(';'): + elts = blurp.split('=') + if len(elts) == 1: v = None + elif len(elts) == 2: v = elts[1] + else: self.error(line,self.ERROR_INFO_STRING) + info[elts[0]] = self.parse_formatdata(elts[0], v, self._info, line) + + # Gracefully deal with absent FORMAT column + if cols[8] == "": format = [] + else: format = cols[8].split(':') + + # check: all filters are defined + for f in filter: + if f not in self._filter: self.error(line,self.FILTER_NOT_DEFINED, f) + + # check: format fields are defined + for f in format: + if f not in self._format: self.error(line,self.FORMAT_NOT_DEFINED, f) + + # convert v3.3 alleles + if self._version == 33: + if len(ref) != 1: self.error(line,self.V33_BAD_REF) + newalts = [] + have_deletions = False + for a in alt: + if len(a) == 1: a = a + ref[1:] # SNP; add trailing reference + elif a.startswith('I'): a = ref[0] + a[1:] + ref[1:] # insertion just beyond pos; add first and trailing reference + elif a.startswith('D'): # allow D and D + have_deletions = True + try: + l = int(a[1:]) # throws ValueError if sequence + if len(ref) < l: # add to reference if necessary + addns = get_sequence(chrom,pos+len(ref),pos+l,self._reference) + ref += addns + for i,na in enumerate(newalts): newalts[i] = na+addns + a = ref[l:] # new deletion, deleting pos...pos+l + except ValueError: + s = a[1:] + if len(ref) < len(s): # add Ns to reference if necessary + addns = get_sequence(chrom,pos+len(ref),pos+len(s),self._reference) + if not s.endswith(addns) and addns != 'N'*len(addns): + self.error(line,self.V33_UNMATCHED_DELETION, + "(deletion is %s, reference is %s)" % (a,get_sequence(chrom,pos,pos+len(s),self._reference))) + ref += addns + for i,na in enumerate(newalts): newalts[i] = na+addns + a = ref[len(s):] # new deletion, deleting from pos + else: + self.error(line,self.V33_BAD_ALLELE) + newalts.append(a) + alt = newalts + # deletion alleles exist, add dummy 1st reference allele, and account for leading base + if have_deletions: + if pos == 0: + # Petr Danacek's: we can't have a leading nucleotide at (1-based) position 1 + addn = get_sequence(chrom,pos+len(ref),pos+len(ref)+1,self._reference) + ref += addn + alt = [allele+addn for allele in alt] + else: + addn = get_sequence(chrom,pos-1,pos,self._reference) + ref = addn + ref + alt = [addn + allele for allele in alt] + pos -= 1 + else: + # format v4.0 -- just check for nucleotides + for allele in alt: + if not alleleRegEx.match(allele): + self.error(line,self.V40_BAD_ALLELE,allele) + + # check for leading nucleotide in indel calls + for allele in alt: + if len(allele) != len(ref): + if len(allele) == 0: self.error(line,self.ZERO_LENGTH_ALLELE) + if ref[0].upper() != allele[0].upper() and "N" not in (ref[0]+allele[0]).upper(): + self.error(line,self.MISSING_INDEL_ALLELE_REF_BASE) + + # trim trailing bases in alleles + for i in range(1,min(len(ref),min(map(len,alt)))): + if len(set(allele[-1].upper() for allele in alt)) > 1 or ref[-1].upper() != alt[0][-1].upper(): + break + ref, alt = ref[:-1], [allele[:-1] for allele in alt] + + # left-align alleles, if a reference is available + if self._leftalign and self._reference: + while left < pos: + movable = True + for allele in alt: + if len(allele) > len(ref): + longest, shortest = allele, ref + else: + longest, shortest = ref, allele + if len(longest) == len(shortest) or longest[:len(shortest)].upper() != shortest.upper(): + movable = False + if longest[-1].upper() != longest[len(shortest)-1].upper(): + movable = False + if not movable: + break + ref = ref[:-1] + alt = [allele[:-1] for allele in alt] + if min(len(allele) for allele in alt) == 0 or len(ref) == 0: + ref = faref_leftflank[pos-left-1] + ref + alt = [faref_leftflank[pos-left-1] + allele for allele in alt] + pos -= 1 + + # parse sample columns + samples = [] + for sample in cols[9:]: + dict = {} + values = sample.split(':') + if len(values) > len(format): + self.error(line,self.BAD_NUMBER_OF_VALUES,"(found %s values in element %s; expected %s)" % (len(values),sample,len(format))) + for idx in range(len(format)): + expected = self.get_expected(format[idx], self._format, alt) + if idx < len(values): value = values[idx] + else: + if expected == -1: value = "." + else: value = ",".join(["."]*expected) + dict[format[idx]] = self.parse_formatdata(format[idx], value, self._format, line) + if expected != -1 and len(dict[format[idx]]) != expected: + self.error(line,self.BAD_NUMBER_OF_PARAMETERS, + "id=%s, expected %s parameters, got %s" % (format[idx],expected,dict[format[idx]])) + if len(dict[format[idx]] ) < expected: dict[format[idx]] += [dict[format[idx]][-1]]*(expected-len(dict[format[idx]])) + dict[format[idx]] = dict[format[idx]][:expected] + samples.append( dict ) + + # done + d = {'chrom':chrom, + 'pos':pos, # return 0-based position + 'id':id, + 'ref':ref, + 'alt':alt, + 'qual':qual, + 'filter':filter, + 'info':info, + 'format':format} + for key,value in zip(self._samples,samples): + d[key] = value + + return d + + + def write_data(self, stream, data): + required = ['chrom','pos','id','ref','alt','qual','filter','info','format'] + self._samples + for k in required: + if k not in data: raise ValueError("Required key %s not found in data" % str(k)) + if data['alt'] == []: alt = "." + else: alt = ",".join(data['alt']) + if data['filter'] == None: filter = "." + elif data['filter'] == []: + if self._version == 33: filter = "0" + else: filter = "PASS" + else: filter = ';'.join(data['filter']) + if data['qual'] == -1: qual = "." + else: qual = str(data['qual']) + + output = [data['chrom'], + str(data['pos']+1), # change to 1-based position + data['id'], + data['ref'], + alt, + qual, + filter, + self.format_formatdata( data['info'], self._info, separator=";" ), + self.format_formatdata( data['format'], self._format, value=False ) ] + + for s in self._samples: + output.append( self.format_formatdata( data[s], self._format, key=False ) ) + + stream.write( "\t".join(output) + "\n" ) + + def _parse_header(self, stream): + self._lineno = 0 + for line in stream: + self._lineno += 1 + if line.startswith('##'): + self.parse_header( line.strip() ) + elif line.startswith('#'): + self.parse_heading( line.strip() ) + self.enter_default_format() + else: + break + return line + + def _parse(self, line, stream): + if len(line.strip()) > 0: + d = self.parse_data( line.strip() ) + if d: yield d + for line in stream: + self._lineno += 1 + if self._lines and self._lineno > self._lines: raise StopIteration + d = self.parse_data( line.strip() ) + if d: yield d + + ###################################################################################################### + # + # API follows + # + ###################################################################################################### + + def getsamples(self): + """ List of samples in VCF file """ + return self._samples + + def setsamples(self,samples): + """ List of samples in VCF file """ + self._samples = samples + + def getheader(self): + """ List of header key-value pairs (strings) """ + return self._header + + def setheader(self,header): + """ List of header key-value pairs (strings) """ + self._header = header + + def getinfo(self): + """ Dictionary of ##INFO tags, as VCF.FORMAT values """ + return self._info + + def setinfo(self,info): + """ Dictionary of ##INFO tags, as VCF.FORMAT values """ + self._info = info + + def getformat(self): + """ Dictionary of ##FORMAT tags, as VCF.FORMAT values """ + return self._format + + def setformat(self,format): + """ Dictionary of ##FORMAT tags, as VCF.FORMAT values """ + self._format = format + + def getfilter(self): + """ Dictionary of ##FILTER tags, as VCF.FORMAT values """ + return self._filter + + def setfilter(self,filter): + """ Dictionary of ##FILTER tags, as VCF.FORMAT values """ + self._filter = filter + + def setversion(self, version): + if version not in [33,40,41]: raise ValueError("Can only handle v3.3, v4.0 and v4.1 VCF files") + self._version = version + + def setregions(self, regions): + self._regions = regions + + def setreference(self, ref): + """ Provide a reference sequence; a Python class supporting a fetch(chromosome, start, end) method, e.g. PySam.FastaFile """ + self._reference = ref + + def ignoreerror(self, errorstring): + try: self._ignored_errors.add(self.__dict__[errorstring]) + except KeyError: raise ValueError("Invalid error string: %s" % errorstring) + + def warnerror(self, errorstring): + try: self._warn_errors.add(self.__dict__[errorstring]) + except KeyError: raise ValueError("Invalid error string: %s" % errorstring) + + def parse(self, stream): + """ Parse a stream of VCF-formatted lines. Initializes class instance and return generator """ + last_line = self._parse_header(stream) + # now return a generator that does the actual work. In this way the pre-processing is done + # before the first piece of data is yielded + return self._parse(last_line, stream) + + def write(self, stream, datagenerator): + """ Writes a VCF file to a stream, using a data generator (or list) """ + self.write_header(stream) + self.write_heading(stream) + for data in datagenerator: self.write_data(stream,data) + + def writeheader(self, stream): + """ Writes a VCF header """ + self.write_header(stream) + self.write_heading(stream) + + def compare_calls(self, pos1, ref1, alt1, pos2, ref2, alt2): + """ Utility function: compares two calls for equality """ + # a variant should always be assigned to a unique position, one base before + # the leftmost position of the alignment gap. If this rule is implemented + # correctly, the two positions must be equal for the calls to be identical. + if pos1 != pos2: return False + # from both calls, trim rightmost bases when identical. Do this safely, i.e. + # only when the reference bases are not Ns + while len(ref1)>0 and len(alt1)>0 and ref1[-1] == alt1[-1]: + ref1 = ref1[:-1] + alt1 = alt1[:-1] + while len(ref2)>0 and len(alt2)>0 and ref2[-1] == alt2[-1]: + ref2 = ref2[:-1] + alt2 = alt2[:-1] + # now, the alternative alleles must be identical + return alt1 == alt2 + +########################################################################################################### +########################################################################################################### +## API functions added by Andreas +########################################################################################################### + + def connect( self, filename ): + '''connect to tabix file.''' + self.tabixfile = pysam.Tabixfile( filename ) + self._parse_header(self.tabixfile.header) + + def fetch(self, + reference = None, + start = None, + end = None, + region = None ): + """ Parse a stream of VCF-formatted lines. Initializes class instance and return generator """ + + iter = self.tabixfile.fetch( reference, start, end, region, parser = pysam.asVCF() ) + for x in iter: + yield VCFRecord( x, self ) + + def validate( self, record ): + '''validate vcf record. + + returns a validated record. + ''' + + chrom, pos = record.chrom, record.pos + + # check reference + ref = record.ref + if ref == ".": + self.error(str(record),self.MISSING_REF) + if self._version == 33: ref = get_sequence(chrom,pos,pos+1,self._reference) + else: ref = "" + else: + for c in ref: + if c not in "ACGTN": self.error(str(record),self.UNKNOWN_CHAR_IN_REF) + if "N" in ref: ref = get_sequence(chrom, + pos, + pos+len(ref), + self._reference) + + # make sure reference is sane + if self._reference: + left = max(0,self.pos-100) + faref_leftflank = get_sequence(chrom,left,self.pos+len(ref),self._reference) + faref = faref_leftflank[pos-left:] + if faref != ref: self.error(line,self.WRONG_REF,"(reference is %s, VCF says %s)" % (faref,ref)) + ref = faref + + # check: format fields are defined + for f in record.format: + if f not in self._format: self.error(str(record),self.FORMAT_NOT_DEFINED, f) + + # check: all filters are defined + for f in record.filter: + if f not in self._filter: self.error(str(record),self.FILTER_NOT_DEFINED, f) + + # convert v3.3 alleles + if self._version == 33: + if len(ref) != 1: self.error(line,self.V33_BAD_REF) + newalts = [] + have_deletions = False + for a in alt: + if len(a) == 1: a = a + ref[1:] # SNP; add trailing reference + elif a.startswith('I'): a = ref[0] + a[1:] + ref[1:] # insertion just beyond pos; add first and trailing reference + elif a.startswith('D'): # allow D and D + have_deletions = True + try: + l = int(a[1:]) # throws ValueError if sequence + if len(ref) < l: # add to reference if necessary + addns = get_sequence(chrom,pos+len(ref),pos+l,self._reference) + ref += addns + for i,na in enumerate(newalts): newalts[i] = na+addns + a = ref[l:] # new deletion, deleting pos...pos+l + except ValueError: + s = a[1:] + if len(ref) < len(s): # add Ns to reference if necessary + addns = get_sequence(chrom,pos+len(ref),pos+len(s),self._reference) + if not s.endswith(addns) and addns != 'N'*len(addns): + self.error(line,self.V33_UNMATCHED_DELETION, + "(deletion is %s, reference is %s)" % (a,get_sequence(chrom,pos,pos+len(s),self._reference))) + ref += addns + for i,na in enumerate(newalts): newalts[i] = na+addns + a = ref[len(s):] # new deletion, deleting from pos + else: + self.error(line,self.V33_BAD_ALLELE) + newalts.append(a) + alt = newalts + # deletion alleles exist, add dummy 1st reference allele, and account for leading base + if have_deletions: + if pos == 0: + # Petr Danacek's: we can't have a leading nucleotide at (1-based) position 1 + addn = get_sequence(chrom,pos+len(ref),pos+len(ref)+1,self._reference) + ref += addn + alt = [allele+addn for allele in alt] + else: + addn = get_sequence(chrom,pos-1,pos,self._reference) + ref = addn + ref + alt = [addn + allele for allele in alt] + pos -= 1 + else: + # format v4.0 -- just check for nucleotides + for allele in alt: + if not alleleRegEx.match(allele): + self.error(line,self.V40_BAD_ALLELE,allele) + + + # check for leading nucleotide in indel calls + for allele in alt: + if len(allele) != len(ref): + if len(allele) == 0: self.error(line,self.ZERO_LENGTH_ALLELE) + if ref[0].upper() != allele[0].upper() and "N" not in (ref[0]+allele[0]).upper(): + self.error(line,self.MISSING_INDEL_ALLELE_REF_BASE) + + # trim trailing bases in alleles + for i in range(1,min(len(ref),min(map(len,alt)))): + if len(set(allele[-1].upper() for allele in alt)) > 1 or ref[-1].upper() != alt[0][-1].upper(): + break + ref, alt = ref[:-1], [allele[:-1] for allele in alt] + + # left-align alleles, if a reference is available + if self._leftalign and self._reference: + while left < pos: + movable = True + for allele in alt: + if len(allele) > len(ref): + longest, shortest = allele, ref + else: + longest, shortest = ref, allele + if len(longest) == len(shortest) or longest[:len(shortest)].upper() != shortest.upper(): + movable = False + if longest[-1].upper() != longest[len(shortest)-1].upper(): + movable = False + if not movable: + break + ref = ref[:-1] + alt = [allele[:-1] for allele in alt] + if min(len(allele) for allele in alt) == 0 or len(ref) == 0: + ref = faref_leftflank[pos-left-1] + ref + alt = [faref_leftflank[pos-left-1] + allele for allele in alt] + pos -= 1 + + + + diff --git a/pysam/__init__.py b/pysam/__init__.py new file mode 100644 index 0000000..40877da --- /dev/null +++ b/pysam/__init__.py @@ -0,0 +1,100 @@ +import os +import sys +import sysconfig + +from pysam.libchtslib import * +from pysam.libcsamtools import * +from pysam.libcbcftools import * +from pysam.libcutils import * +import pysam.libcutils as libcutils +import pysam.libcfaidx as libcfaidx +from pysam.libcfaidx import * +import pysam.libctabix as libctabix +from pysam.libctabix import * +# import pysam.libctabixproxies as libctabixproxies +# from pysam.libctabixproxies import * +import pysam.libcsamfile as libcsamfile +from pysam.libcsamfile import * +import pysam.libcalignmentfile as libcalignmentfile +from pysam.libcalignmentfile import * +import pysam.libcalignedsegment as libcalignedsegment +from pysam.libcalignedsegment import * +import pysam.libcvcf as libcvcf +from pysam.libcvcf import * +import pysam.libcbcf as libcbcf +from pysam.libcbcf import * +import pysam.libcbgzf as libcbgzf +from pysam.libcbgzf import * +from pysam.utils import SamtoolsError +import pysam.Pileup as Pileup +from pysam.samtools import * +import pysam.config + + +# export all the symbols from separate modules +__all__ = \ + libchtslib.__all__ +\ + libcutils.__all__ +\ + libctabix.__all__ +\ + libcvcf.__all__ +\ + libcbcf.__all__ +\ + libcbgzf.__all__ +\ + libcfaidx.__all__ +\ + libctabixproxies.__all__ +\ + libcalignmentfile.__all__ +\ + libcalignedsegment.__all__ +\ + libcsamfile.__all__ +\ + ["SamtoolsError"] +\ + ["Pileup"] + +from pysam.version import __version__, __samtools_version__ + + +def get_include(): + '''return a list of include directories.''' + dirname = os.path.abspath(os.path.join(os.path.dirname(__file__))) + + # + # Header files may be stored in different relative locations + # depending on installation mode (e.g., `python setup.py install`, + # `python setup.py develop`. The first entry in each list is + # where develop-mode headers can be found. + # + htslib_possibilities = [os.path.join(dirname, '..', 'htslib'), + os.path.join(dirname, 'include', 'htslib')] + samtool_possibilities = [os.path.join(dirname, '..', 'samtools'), + os.path.join(dirname, 'include', 'samtools')] + + includes = [dirname] + for header_locations in [htslib_possibilities, samtool_possibilities]: + for header_location in header_locations: + if os.path.exists(header_location): + includes.append(os.path.abspath(header_location)) + break + + return includes + + +def get_defines(): + '''return a list of defined compilation parameters.''' + # ('_FILE_OFFSET_BITS', '64'), + # ('_USE_KNETFILE', '')] + return [] + + +def get_libraries(): + '''return a list of libraries to link against.''' + # Note that this list does not include libcsamtools.so as there are + # numerous name conflicts with libchtslib.so. + dirname = os.path.abspath(os.path.join(os.path.dirname(__file__))) + pysam_libs = ['libctabixproxies', + 'libcfaidx', + 'libcsamfile', + 'libcvcf', + 'libcbcf', + 'libctabix'] + if pysam.config.HTSLIB == "builtin": + pysam_libs.append('libchtslib') + + so = sysconfig.get_config_var('SO') + return [os.path.join(dirname, x + so) for x in pysam_libs] diff --git a/pysam/alternatives.py.obsolete b/pysam/alternatives.py.obsolete new file mode 100644 index 0000000..fd76802 --- /dev/null +++ b/pysam/alternatives.py.obsolete @@ -0,0 +1,82 @@ +# This file contains an alternative implementation +# to call samtools functions. These are direct calls. +# Plus: less overhead +# Minus: more trouble in maintaining + +#in csamtools.pxd + # samtools toolkit functions + ctypedef int (*pysam_samtools_f)(int argc, char *argv[]) + + int bam_taf2baf(int argc, char *argv[]) + int bam_pileup(int argc, char *argv[]) + int bam_merge(int argc, char *argv[]) + int bam_index(int argc, char *argv[]) + int bam_sort(int argc, char *argv[]) + int bam_tview_main(int argc, char *argv[]) + int bam_mating(int argc, char *argv[]) + int bam_rmdup(int argc, char *argv[]) + int bam_rmdupse(int argc, char *argv[]) + int bam_flagstat(int argc, char *argv[]) + int bam_fillmd(int argc, char *argv[]) + int main_samview(int argc, char *argv[]) + int main_import(int argc, char *argv[]) + int faidx_main(int argc, char *argv[]) + int glf3_view_main(int argc, char *argv[]) + + +## Alternative code in csamtools.pyx +cdef class SamtoolsWrapper: + '''generic wrapper around samtools functions''' + cdef pysam_samtools_f f + + def __init__(self): self.f = NULL + + def call(self, *args ): + + if self.f == NULL: raise NotImplementedError("invalid call to base class" ) + + cdef char ** cargs + cdef int i, n, retval + n = len(args) + # allocate one more for first (dummy) argument (contains command) + cargs = calloc( n+1, sizeof( char *) ) + cargs[0] = "method" + for i from 0 <= i < n: + cargs[i+1] = args[i] + for i from 0 <= i < n+1: + print cargs[i] + retval = self.f(n+1, cargs) + free( cargs ) + return retval + +cdef class SamtoolsWrapperImport( SamtoolsWrapper ): + def __init__(self): self.f = main_import +cdef class SamtoolsWrapperPileup( SamtoolsWrapper ): + def __init__(self): self.f = bam_pileup +cdef class SamtoolsWrapperMerge( SamtoolsWrapper ): + def __init__(self): self.f = bam_merge +cdef class SamtoolsWrapperSort( SamtoolsWrapper ): + def __init__(self): self.f = bam_sort +cdef class SamtoolsWrapperIndex( SamtoolsWrapper ): + def __init__(self): self.f = bam_index +cdef class SamtoolsWrapperFaidx( SamtoolsWrapper ): + def __init__(self): self.f = faidx_main +cdef class SamtoolsWrapperFixMate( SamtoolsWrapper ): + def __init__(self): self.f = bam_mating +cdef class SamtoolsWrapperRmDup( SamtoolsWrapper ): + def __init__(self): self.f = bam_rmdup +cdef class SamtoolsWrapperRmDupSe( SamtoolsWrapper ): + def __init__(self): self.f = bam_rmdupse +cdef class SamtoolsWrapperGlf3Viwen( SamtoolsWrapper ): + def __init__(self): self.f = glf3_view_main +cdef class SamtoolsWrapperFlagStat( SamtoolsWrapper ): + def __init__(self): self.f = bam_flagstat +cdef class SamtoolsWrapperFillMd( SamtoolsWrapper ): + def __init__(self): self.f = bam_fillmd +cdef class SamtoolsWrapperCalMd( SamtoolsWrapper ): + def __init__(self): self.f = bam_fillmd + +automatic creation of these functions does not work +due to pyrex/cython + +def sort( *args, **kwargs ): return SamtoolsWrapperSort().call(*args, **kwargs) diff --git a/pysam/bcftools.py b/pysam/bcftools.py new file mode 100644 index 0000000..ab891d4 --- /dev/null +++ b/pysam/bcftools.py @@ -0,0 +1,24 @@ +from utils import PysamDispatcher + +BCFTOOLS_DISPATCH = [ + "index", + "annotate", + "concat", + "isec", + "merge", + "norm", + "plugin", + "query", + "reheader", + "view", + "call", + "consensus", + "cnv", + "filter", + "gtcheck", + "roh", + "stats"] + +# instantiate bcftools commands as python functions +for cmd in BCFTOOLS_DISPATCH: + globals()[cmd] = PysamDispatcher("bcftools", cmd, None) diff --git a/pysam/cbcftools_util.h b/pysam/cbcftools_util.h new file mode 100644 index 0000000..4a9f2e9 --- /dev/null +++ b/pysam/cbcftools_util.h @@ -0,0 +1,6 @@ +#ifndef CBCFTOOLS_UTIL_H +#define CBCFTOOLS_UTIL_H + +int bcftools_main(int argc, char *argv[]); + +#endif diff --git a/pysam/csamtools_util.h b/pysam/csamtools_util.h new file mode 100644 index 0000000..0a03c13 --- /dev/null +++ b/pysam/csamtools_util.h @@ -0,0 +1,6 @@ +#ifndef CSAMTOOLS_UTIL_H +#define CSAMTOOLS_UTIL_H + +int samtools_main(int argc, char *argv[]); + +#endif diff --git a/pysam/htslib_util.c b/pysam/htslib_util.c new file mode 100644 index 0000000..0830900 --- /dev/null +++ b/pysam/htslib_util.c @@ -0,0 +1,159 @@ +#include +#include +#include "htslib/khash.h" +#include "htslib/ksort.h" +#include "htslib/sam.h" +#include "htslib/hts.h" +#include "htslib/knetfile.h" +#include "htslib/kseq.h" +#include "htslib_util.h" +#include + +#ifndef inline +#define inline __inline +#endif + +// set htslib verbosity level +extern int hts_verbose; +int hts_set_verbosity(int verbosity) +{ + int old_verbosity = hts_verbose; + hts_verbose = verbosity; + return old_verbosity; +} + +int hts_get_verbosity(void) +{ + return hts_verbose; +} + + +// taken from samtools/bam_import.c +static inline uint8_t * alloc_data(bam1_t *b, size_t size) +{ + if (b->m_data < size) + { + b->m_data = size; + kroundup32(b->m_data); + b->data = (uint8_t*)realloc(b->data, b->m_data); + } + return b->data; +} + +// update the variable length data within a bam1_t entry. +// Adds *nbytes_new* - *nbytes_old* into the variable length data of *src* at *pos*. +// Data within the bam1_t entry is moved so that it is +// consistent with the data field lengths. +// Return NULL on error (memory allocation) +bam1_t * pysam_bam_update(bam1_t * b, + const size_t nbytes_old, + const size_t nbytes_new, + uint8_t * field_start) +{ + int d = nbytes_new - nbytes_old; + int new_size; + size_t nbytes_before; + uint8_t * retval = NULL; + + // no change + if (d == 0) + return b; + + // new size of total data + new_size = d + b->l_data; + + // fields before field in data + nbytes_before = field_start - b->data; + + if (b->l_data != 0) + { + assert(nbytes_before >= 0); + assert(nbytes_before <= b->l_data); + } + + // increase memory if required + if (d > 0) + { + retval = alloc_data(b, new_size); + if (retval == NULL) + return NULL; + field_start = b->data + nbytes_before; + } + + // move data after field to new location + memmove(field_start + nbytes_new, + field_start + nbytes_old, + b->l_data - (nbytes_before + nbytes_old)); + + // adjust l_data + b->l_data = new_size; + + return b; +} + +// translate a nucleotide character to binary code +unsigned char pysam_translate_sequence(const unsigned char s) +{ + return seq_nt16_table[s]; +} + +// Auxiliary functions for B support +void bam_aux_appendB(bam1_t *b, + const char tag[2], + char type, + char subtype, + int len, + uint8_t *data) +{ + + int ori_len; + int l_data; + + // check that type is 'B' + if('B' != type) return; + + ori_len = b->l_data; + + l_data = len * aux_type2size(subtype); + // infer the data length from the sub-type + b->l_data += 8 + l_data; + + // htslib: obsolete? + // b->l_aux += 8 + l_data; + if (b->m_data < b->l_data) + { + b->m_data = b->l_data; + kroundup32(b->m_data); + b->data = (uint8_t*)realloc(b->data, b->m_data); + } + + b->data[ori_len] = tag[0]; + b->data[ori_len + 1] = tag[1]; + // tag + b->data[ori_len + 2] = type; + // type + b->data[ori_len + 3] = subtype; + // subtype + (*(int32_t*)(b->data + ori_len + 4)) = len; + // size + memcpy(b->data + ori_len + 8, data, l_data); + // data +} + +int aux_type2size(uint8_t type) +{ + switch (type) { + case 'A': case 'c': case 'C': + return 1; + case 's': case 'S': + return 2; + case 'i': case 'I': case 'f': + return 4; + case 'd': + return 8; + case 'Z': case 'H': case 'B': + return type; + default: + return 0; + } +} diff --git a/pysam/htslib_util.h b/pysam/htslib_util.h new file mode 100644 index 0000000..25bd3e4 --- /dev/null +++ b/pysam/htslib_util.h @@ -0,0 +1,114 @@ +#ifndef HTSLIB_UTIL_H +#define HTSLIB_UTIL_H + +#include "htslib/sam.h" +#include "htslib/vcf.h" +#include "htslib/khash.h" + +int hts_useek(htsFile *fp, long uoffset, int where); +long hts_utell(htsFile *fp); + +int hts_set_verbosity(int verbosity); +int hts_get_verbosity(void); + + +KHASH_MAP_INIT_STR(vdict, bcf_idinfo_t) +typedef khash_t(vdict) vdict_t; + +KHASH_DECLARE(s2i, kh_cstr_t, int64_t) +typedef khash_t(s2i) s2i_t; + +////////////////////////////////////////////////////////////////// +/*! set pysam standard error to point to file descriptor + + Setting the stderr will close the previous stderr. + */ +// FILE * pysam_set_stderr(int fd); + +////////////////////////////////////////////////////////////////// +/*! set pysam standard error to /dev/null. + + Unsetting the stderr will close the previous stderr. + */ +// void pysam_unset_stderr(); + +////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////// +// various helper functions +// + +/*! + @abstract Update the variable length data within a bam1_t entry + + Old data is deleted and the data within b are re-arranged to + make place for new data. + + @discussion Return NULL on error, otherwise b is returned. + + @param b bam1_t data + @param nbytes_old size of old data + @param nbytes_new size of new data + @param pos position of data +*/ +bam1_t * pysam_bam_update(bam1_t * b, + const size_t nbytes_old, + const size_t nbytes_new, + uint8_t * pos); + +// translate a nucleotide character to binary code +unsigned char pysam_translate_sequence(const unsigned char s); + +// return byte size of type +int aux_type2size(uint8_t type); + + +//------------------------------------------------------- +// Wrapping accessor macros in sam.h +static inline int pysam_bam_is_rev(bam1_t * b) { + return bam_is_rev(b);}; + +static inline int pysam_bam_is_mrev(bam1_t * b) { + return bam_is_mrev(b);} + +static inline char * pysam_bam_get_qname(bam1_t * b) { + return bam_get_qname(b);} + +static inline uint32_t * pysam_bam_get_cigar(bam1_t * b) { + return bam_get_cigar(b);} + +static inline uint8_t * pysam_bam_get_seq(bam1_t * b) { + return bam_get_seq(b);} + +static inline uint8_t * pysam_bam_get_qual(bam1_t * b) { + return bam_get_qual(b);} + +static inline uint8_t * pysam_bam_get_aux(bam1_t * b) { + return bam_get_aux(b);} + +static inline int pysam_bam_get_l_aux(bam1_t * b) { + return bam_get_l_aux(b); } + +static inline char pysam_bam_seqi(uint8_t * s, int i) { + return bam_seqi(s,i);} + +static inline uint8_t pysam_get_qual(bam1_t * b) { + return b->core.qual;} + +static inline uint32_t pysam_get_n_cigar(bam1_t * b) { + return b->core.n_cigar;} + +static inline void pysam_set_qual(bam1_t * b, uint8_t v) { + b->core.qual=v;} + +static inline void pysam_set_n_cigar(bam1_t * b, uint32_t v) { + b->core.n_cigar=v;} + +static inline void pysam_update_flag(bam1_t * b, uint16_t v, uint16_t flag) { + if (v) + b->core.flag |= flag; + else + b->core.flag &= ~flag; +} + +#endif diff --git a/pysam/include/__init__.py b/pysam/include/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pysam/libcalignedsegment.pxd b/pysam/libcalignedsegment.pxd new file mode 100644 index 0000000..48ca93f --- /dev/null +++ b/pysam/libcalignedsegment.pxd @@ -0,0 +1,103 @@ +from pysam.libchtslib cimport * + +cdef extern from "htslib_util.h": + + # add *nbytes* into the variable length data of *src* at *pos* + bam1_t * pysam_bam_update(bam1_t * b, + size_t nbytes_old, + size_t nbytes_new, + uint8_t * pos) + + # now: static + int aux_type2size(int) + + char * pysam_bam_get_qname(bam1_t * b) + uint32_t * pysam_bam_get_cigar(bam1_t * b) + uint8_t * pysam_bam_get_seq(bam1_t * b) + uint8_t * pysam_bam_get_qual(bam1_t * b) + uint8_t * pysam_bam_get_aux(bam1_t * b) + int pysam_bam_get_l_aux(bam1_t * b) + char pysam_bam_seqi(uint8_t * s, int i) + + uint8_t pysam_get_qual(bam1_t * b) + uint32_t pysam_get_n_cigar(bam1_t * b) + void pysam_set_qual(bam1_t * b, uint8_t v) + void pysam_set_n_cigar(bam1_t * b, uint32_t v) + void pysam_update_flag(bam1_t * b, uint16_t v, uint16_t flag) + + +from pysam.libcalignmentfile cimport AlignmentFile, AlignmentHeader +ctypedef AlignmentFile AlignmentFile_t + + +# Note: need to declare all C fields and methods here +cdef class AlignedSegment: + + # object that this AlignedSegment represents + cdef bam1_t * _delegate + + # the header that a read is associated with + cdef readonly AlignmentHeader header + + # caching of array properties for quick access + cdef object cache_query_qualities + cdef object cache_query_alignment_qualities + cdef object cache_query_sequence + cdef object cache_query_alignment_sequence + + # add an alignment tag with value to the AlignedSegment + # an existing tag of the same name will be replaced. + cpdef set_tag(self, tag, value, value_type=?, replace=?) + + # add an alignment tag with value to the AlignedSegment + # an existing tag of the same name will be replaced. + cpdef get_tag(self, tag, with_value_type=?) + + # return true if tag exists + cpdef has_tag(self, tag) + + # returns a valid sam alignment string + cpdef to_string(self) + + # returns a valid sam alignment string (deprecated) + cpdef tostring(self, htsfile=*) + + +cdef class PileupColumn: + cdef bam_pileup1_t ** plp + cdef int tid + cdef int pos + cdef int n_pu + cdef AlignmentHeader header + cdef uint32_t min_base_quality + cdef uint8_t * buf + cdef char * reference_sequence + +cdef class PileupRead: + cdef int32_t _qpos + cdef AlignedSegment _alignment + cdef int _indel + cdef int _level + cdef uint32_t _is_del + cdef uint32_t _is_head + cdef uint32_t _is_tail + cdef uint32_t _is_refskip + +# factory methods +cdef AlignedSegment makeAlignedSegment( + bam1_t * src, + AlignmentHeader header) + +cdef PileupColumn makePileupColumn( + bam_pileup1_t ** plp, + int tid, + int pos, + int n_pu, + uint32_t min_base_quality, + char * reference_sequence, + AlignmentHeader header) + +cdef PileupRead makePileupRead(bam_pileup1_t * src, + AlignmentHeader header) + +cdef uint32_t get_alignment_length(bam1_t * src) diff --git a/pysam/libcalignedsegment.pyx b/pysam/libcalignedsegment.pyx new file mode 100644 index 0000000..e94db54 --- /dev/null +++ b/pysam/libcalignedsegment.pyx @@ -0,0 +1,3268 @@ +# cython: embedsignature=True +# cython: profile=True +############################################################################### +############################################################################### +# Cython wrapper for SAM/BAM/CRAM files based on htslib +############################################################################### +# The principal classes defined in this module are: +# +# class AlignedSegment an aligned segment (read) +# +# class PileupColumn a collection of segments (PileupRead) aligned to +# a particular genomic position. +# +# class PileupRead an AlignedSegment aligned to a particular genomic +# position. Contains additional attributes with respect +# to this. +# +# Additionally this module defines numerous additional classes that are part +# of the internal API. These are: +# +# Various iterator classes to iterate over alignments in sequential (IteratorRow) +# or in a stacked fashion (IteratorColumn): +# +# class IteratorRow +# class IteratorRowRegion +# class IteratorRowHead +# class IteratorRowAll +# class IteratorRowAllRefs +# class IteratorRowSelection +# +############################################################################### +# +# The MIT License +# +# Copyright (c) 2015 Andreas Heger +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +import re +import array +import json +import string +import ctypes +import struct + +cimport cython +from cpython cimport array as c_array +from cpython.version cimport PY_MAJOR_VERSION +from cpython cimport PyBytes_FromStringAndSize +from libc.string cimport strchr +from cpython cimport array as c_array +from libc.stdint cimport INT8_MIN, INT16_MIN, INT32_MIN, \ + INT8_MAX, INT16_MAX, INT32_MAX, \ + UINT8_MAX, UINT16_MAX, UINT32_MAX +from libc.stdio cimport snprintf + +from pysam.libchtslib cimport HTS_IDX_NOCOOR +from pysam.libcutils cimport force_bytes, force_str, \ + charptr_to_str, charptr_to_bytes +from pysam.libcutils cimport qualities_to_qualitystring, qualitystring_to_array, \ + array_to_qualitystring + +# Constants for binary tag conversion +cdef char * htslib_types = 'cCsSiIf' +cdef char * parray_types = 'bBhHiIf' + +cdef bint IS_PYTHON3 = PY_MAJOR_VERSION >= 3 + +# translation tables + +# cigar code to character and vice versa +cdef char* CODE2CIGAR= "MIDNSHP=XB" +cdef int NCIGAR_CODES = 10 + +# dimensioned for 8000 pileup limit (+ insertions/deletions) +cdef uint32_t MAX_PILEUP_BUFFER_SIZE = 10000 + +if IS_PYTHON3: + CIGAR2CODE = dict([y, x] for x, y in enumerate(CODE2CIGAR)) + maketrans = str.maketrans +else: + CIGAR2CODE = dict([ord(y), x] for x, y in enumerate(CODE2CIGAR)) + maketrans = string.maketrans + +CIGAR_REGEX = re.compile("(\d+)([MIDNSHP=XB])") + +# names for keys in dictionary representation of an AlignedSegment +KEY_NAMES = ["name", "flag", "ref_name", "ref_pos", "map_quality", "cigar", + "next_ref_name", "next_ref_pos", "length", "seq", "qual", "tags"] + +##################################################################### +# C multiplication with wrapping around +cdef inline uint32_t c_mul(uint32_t a, uint32_t b): + return (a * b) & 0xffffffff + + +cdef inline uint8_t tolower(uint8_t ch): + if ch >= 65 and ch <= 90: + return ch + 32 + else: + return ch + + +cdef inline uint8_t toupper(uint8_t ch): + if ch >= 97 and ch <= 122: + return ch - 32 + else: + return ch + + +cdef inline uint8_t strand_mark_char(uint8_t ch, bam1_t *b): + if ch == '=': + if bam_is_rev(b): + return ',' + else: + return '.' + else: + if bam_is_rev(b): + return tolower(ch) + else: + return toupper(ch) + + +cdef inline bint pileup_base_qual_skip(bam_pileup1_t * p, uint32_t threshold): + cdef uint32_t c + if p.qpos < p.b.core.l_qseq: + c = bam_get_qual(p.b)[p.qpos] + else: + c = 0 + if c < threshold: + return True + return False + + +cdef inline char map_typecode_htslib_to_python(uint8_t s): + """map an htslib typecode to the corresponding python typecode + to be used in the struct or array modules.""" + + # map type from htslib to python array + cdef char * f = strchr(htslib_types, s) + + if f == NULL: + return 0 + return parray_types[f - htslib_types] + + +cdef inline uint8_t map_typecode_python_to_htslib(char s): + """determine value type from type code of array""" + cdef char * f = strchr(parray_types, s) + if f == NULL: + return 0 + return htslib_types[f - parray_types] + + +cdef inline void update_bin(bam1_t * src): + if src.core.flag & BAM_FUNMAP: + # treat alignment as length of 1 for unmapped reads + src.core.bin = hts_reg2bin( + src.core.pos, + src.core.pos + 1, + 14, + 5) + elif pysam_get_n_cigar(src): + src.core.bin = hts_reg2bin( + src.core.pos, + bam_endpos(src), + 14, + 5) + else: + src.core.bin = hts_reg2bin( + src.core.pos, + src.core.pos + 1, + 14, + 5) + + +# optional tag data manipulation +cdef convert_binary_tag(uint8_t * tag): + """return bytesize, number of values and array of values + in aux_data memory location pointed to by tag.""" + cdef uint8_t auxtype + cdef uint8_t byte_size + cdef int32_t nvalues + # get byte size + auxtype = tag[0] + byte_size = aux_type2size(auxtype) + tag += 1 + # get number of values in array + nvalues = (tag)[0] + tag += 4 + + # define python array + cdef c_array.array c_values = array.array( + chr(map_typecode_htslib_to_python(auxtype))) + c_array.resize(c_values, nvalues) + + # copy data + memcpy(c_values.data.as_voidptr, tag, nvalues * byte_size) + + # no need to check for endian-ness as bam1_core_t fields + # and aux_data are in host endian-ness. See sam.c and calls + # to swap_data + return byte_size, nvalues, c_values + + +cdef inline uint8_t get_tag_typecode(value, value_type=None): + """guess type code for a *value*. If *value_type* is None, the type + code will be inferred based on the Python type of *value* + + """ + # 0 is unknown typecode + cdef char typecode = 0 + + if value_type is None: + if isinstance(value, int): + if value < 0: + if value >= INT8_MIN: + typecode = 'c' + elif value >= INT16_MIN: + typecode = 's' + elif value >= INT32_MIN: + typecode = 'i' + # unsigned ints + else: + if value <= UINT8_MAX: + typecode = 'C' + elif value <= UINT16_MAX: + typecode = 'S' + elif value <= UINT32_MAX: + typecode = 'I' + elif isinstance(value, float): + typecode = 'f' + elif isinstance(value, str): + typecode = 'Z' + elif isinstance(value, bytes): + typecode = 'Z' + elif isinstance(value, array.array) or \ + isinstance(value, list) or \ + isinstance(value, tuple): + typecode = 'B' + else: + if value_type in 'aAsSIcCZidfH': + typecode = force_bytes(value_type)[0] + + return typecode + + +cdef inline uint8_t get_btag_typecode(value, min_value=None, max_value=None): + '''returns the value typecode of a value. + + If max is specified, the appropriate type is returned for a range + where value is the minimum. + + Note that this method returns types from the extended BAM alphabet + of types that includes tags that are not part of the SAM + specification. + ''' + + + cdef uint8_t typecode + + t = type(value) + + if t is float: + typecode = 'f' + elif t is int: + if max_value is None: + max_value = value + if min_value is None: + min_value = value + # signed ints + if min_value < 0: + if min_value >= INT8_MIN and max_value <= INT8_MAX: + typecode = 'c' + elif min_value >= INT16_MIN and max_value <= INT16_MAX: + typecode = 's' + elif min_value >= INT32_MIN or max_value <= INT32_MAX: + typecode = 'i' + else: + raise ValueError( + "at least one signed integer out of range of " + "BAM/SAM specification") + # unsigned ints + else: + if max_value <= UINT8_MAX: + typecode = 'C' + elif max_value <= UINT16_MAX: + typecode = 'S' + elif max_value <= UINT32_MAX: + typecode = 'I' + else: + raise ValueError( + "at least one integer out of range of BAM/SAM specification") + else: + # Note: hex strings (H) are not supported yet + if t is not bytes: + value = value.encode('ascii') + if len(value) == 1: + typecode = 'A' + else: + typecode = 'Z' + + return typecode + + +# mapping python array.array and htslib typecodes to struct typecodes +DATATYPE2FORMAT = { + ord('c'): ('b', 1), + ord('C'): ('B', 1), + ord('s'): ('h', 2), + ord('S'): ('H', 2), + ord('i'): ('i', 4), + ord('I'): ('I', 4), + ord('f'): ('f', 4), + ord('d'): ('d', 8), + ord('A'): ('c', 1), + ord('a'): ('c', 1)} + + +cdef inline pack_tags(tags): + """pack a list of tags. Each tag is a tuple of (tag, tuple). + + Values are packed into the most space efficient data structure + possible unless the tag contains a third field with the typecode. + + Returns a format string and the associated list of arguments to be + used in a call to struct.pack_into. + """ + fmts, args = ["<"], [] + + # htslib typecode + cdef uint8_t typecode + for tag in tags: + + if len(tag) == 2: + pytag, value = tag + valuetype = None + elif len(tag) == 3: + pytag, value, valuetype = tag + else: + raise ValueError("malformatted tag: %s" % str(tag)) + + if valuetype is None: + typecode = 0 + else: + # only first character in valuecode matters + if IS_PYTHON3: + typecode = force_bytes(valuetype)[0] + else: + typecode = ord(valuetype[0]) + + pytag = force_bytes(pytag) + pytype = type(value) + + if pytype is tuple or pytype is list: + # binary tags from tuples or lists + if not typecode: + # automatically determine value type - first value + # determines type. If there is a mix of types, the + # result is undefined. + typecode = get_btag_typecode(min(value), + min_value=min(value), + max_value=max(value)) + + if typecode not in DATATYPE2FORMAT: + raise ValueError("invalid value type '{}'".format(chr(typecode))) + + datafmt = "2sBBI%i%s" % (len(value), DATATYPE2FORMAT[typecode][0]) + args.extend([pytag[:2], + ord("B"), + typecode, + len(value)] + list(value)) + + elif isinstance(value, array.array): + # binary tags from arrays + if typecode == 0: + typecode = map_typecode_python_to_htslib(ord(value.typecode)) + + if typecode == 0: + raise ValueError("unsupported type code '{}'".format(value.typecode)) + + if typecode not in DATATYPE2FORMAT: + raise ValueError("invalid value type '{}' ({})".format(chr(typecode), array.typecode)) + + # use array.tostring() to retrieve byte representation and + # save as bytes + datafmt = "2sBBI%is" % (len(value) * DATATYPE2FORMAT[typecode][1]) + args.extend([pytag[:2], + ord("B"), + typecode, + len(value), + force_bytes(value.tostring())]) + + else: + if typecode == 0: + typecode = get_tag_typecode(value) + if typecode == 0: + raise ValueError("could not deduce typecode for value {}".format(value)) + + if typecode == 'a' or typecode == 'A' or typecode == 'Z' or typecode == 'H': + value = force_bytes(value) + + if typecode == "a": + typecode = 'A' + + if typecode == 'Z' or typecode == 'H': + datafmt = "2sB%is" % (len(value)+1) + else: + datafmt = "2sB%s" % DATATYPE2FORMAT[typecode][0] + + args.extend([pytag[:2], + typecode, + value]) + + fmts.append(datafmt) + + return "".join(fmts), args + + +cdef inline int32_t calculateQueryLengthWithoutHardClipping(bam1_t * src): + """return query length computed from CIGAR alignment. + + Length ignores hard-clipped bases. + + Return 0 if there is no CIGAR alignment. + """ + + cdef uint32_t * cigar_p = pysam_bam_get_cigar(src) + + if cigar_p == NULL: + return 0 + + cdef uint32_t k, qpos + cdef int op + qpos = 0 + + for k from 0 <= k < pysam_get_n_cigar(src): + op = cigar_p[k] & BAM_CIGAR_MASK + + if op == BAM_CMATCH or \ + op == BAM_CINS or \ + op == BAM_CSOFT_CLIP or \ + op == BAM_CEQUAL or \ + op == BAM_CDIFF: + qpos += cigar_p[k] >> BAM_CIGAR_SHIFT + + return qpos + + +cdef inline int32_t calculateQueryLengthWithHardClipping(bam1_t * src): + """return query length computed from CIGAR alignment. + + Length includes hard-clipped bases. + + Return 0 if there is no CIGAR alignment. + """ + + cdef uint32_t * cigar_p = pysam_bam_get_cigar(src) + + if cigar_p == NULL: + return 0 + + cdef uint32_t k, qpos + cdef int op + qpos = 0 + + for k from 0 <= k < pysam_get_n_cigar(src): + op = cigar_p[k] & BAM_CIGAR_MASK + + if op == BAM_CMATCH or \ + op == BAM_CINS or \ + op == BAM_CSOFT_CLIP or \ + op == BAM_CHARD_CLIP or \ + op == BAM_CEQUAL or \ + op == BAM_CDIFF: + qpos += cigar_p[k] >> BAM_CIGAR_SHIFT + + return qpos + + +cdef inline int32_t getQueryStart(bam1_t *src) except -1: + cdef uint32_t * cigar_p + cdef uint32_t start_offset = 0 + cdef uint32_t k, op + + cigar_p = pysam_bam_get_cigar(src); + for k from 0 <= k < pysam_get_n_cigar(src): + op = cigar_p[k] & BAM_CIGAR_MASK + if op == BAM_CHARD_CLIP: + if start_offset != 0 and start_offset != src.core.l_qseq: + raise ValueError('Invalid clipping in CIGAR string') + elif op == BAM_CSOFT_CLIP: + start_offset += cigar_p[k] >> BAM_CIGAR_SHIFT + else: + break + + return start_offset + + +cdef inline int32_t getQueryEnd(bam1_t *src) except -1: + cdef uint32_t * cigar_p = pysam_bam_get_cigar(src) + cdef uint32_t end_offset = src.core.l_qseq + cdef uint32_t k, op + + # if there is no sequence, compute length from cigar string + if end_offset == 0: + for k from 0 <= k < pysam_get_n_cigar(src): + op = cigar_p[k] & BAM_CIGAR_MASK + if op == BAM_CMATCH or \ + op == BAM_CINS or \ + op == BAM_CEQUAL or \ + op == BAM_CDIFF or \ + (op == BAM_CSOFT_CLIP and end_offset == 0): + end_offset += cigar_p[k] >> BAM_CIGAR_SHIFT + else: + # walk backwards in cigar string + for k from pysam_get_n_cigar(src) > k >= 1: + op = cigar_p[k] & BAM_CIGAR_MASK + if op == BAM_CHARD_CLIP: + if end_offset != src.core.l_qseq: + raise ValueError('Invalid clipping in CIGAR string') + elif op == BAM_CSOFT_CLIP: + end_offset -= cigar_p[k] >> BAM_CIGAR_SHIFT + else: + break + + return end_offset + + +cdef inline bytes getSequenceInRange(bam1_t *src, + uint32_t start, + uint32_t end): + """return python string of the sequence in a bam1_t object. + """ + + cdef uint8_t * p + cdef uint32_t k + cdef char * s + + if not src.core.l_qseq: + return None + + seq = PyBytes_FromStringAndSize(NULL, end - start) + s = seq + p = pysam_bam_get_seq(src) + + for k from start <= k < end: + # equivalent to seq_nt16_str[bam1_seqi(s, i)] (see bam.c) + # note: do not use string literal as it will be a python string + s[k-start] = seq_nt16_str[p[k/2] >> 4 * (1 - k%2) & 0xf] + + return charptr_to_bytes(seq) + + +cdef inline object getQualitiesInRange(bam1_t *src, + uint32_t start, + uint32_t end): + """return python array of quality values from a bam1_t object""" + + cdef uint8_t * p + cdef uint32_t k + + p = pysam_bam_get_qual(src) + if p[0] == 0xff: + return None + + # 'B': unsigned char + cdef c_array.array result = array.array('B', [0]) + c_array.resize(result, end - start) + + # copy data + memcpy(result.data.as_voidptr, &p[start], end - start) + + return result + + +##################################################################### +## factory methods for instantiating extension classes +cdef class AlignedSegment +cdef AlignedSegment makeAlignedSegment(bam1_t *src, + AlignmentHeader header): + '''return an AlignedSegment object constructed from `src`''' + # note that the following does not call __init__ + cdef AlignedSegment dest = AlignedSegment.__new__(AlignedSegment) + dest._delegate = bam_dup1(src) + dest.header = header + return dest + + +cdef class PileupColumn +cdef PileupColumn makePileupColumn(bam_pileup1_t ** plp, + int tid, + int pos, + int n_pu, + uint32_t min_base_quality, + char * reference_sequence, + AlignmentHeader header): + '''return a PileupColumn object constructed from pileup in `plp` and + setting additional attributes. + + ''' + # note that the following does not call __init__ + cdef PileupColumn dest = PileupColumn.__new__(PileupColumn) + dest.header = header + dest.plp = plp + dest.tid = tid + dest.pos = pos + dest.n_pu = n_pu + dest.min_base_quality = min_base_quality + dest.reference_sequence = reference_sequence + dest.buf = calloc(MAX_PILEUP_BUFFER_SIZE, sizeof(uint8_t)) + if dest.buf == NULL: + raise MemoryError("could not allocate pileup buffer") + + return dest + + +cdef class PileupRead +cdef PileupRead makePileupRead(bam_pileup1_t *src, + AlignmentHeader header): + '''return a PileupRead object construted from a bam_pileup1_t * object.''' + # note that the following does not call __init__ + cdef PileupRead dest = PileupRead.__new__(PileupRead) + dest._alignment = makeAlignedSegment(src.b, header) + dest._qpos = src.qpos + dest._indel = src.indel + dest._level = src.level + dest._is_del = src.is_del + dest._is_head = src.is_head + dest._is_tail = src.is_tail + dest._is_refskip = src.is_refskip + return dest + + +cdef inline uint32_t get_alignment_length(bam1_t *src): + cdef uint32_t k = 0 + cdef uint32_t l = 0 + if src == NULL: + return 0 + cdef uint32_t * cigar_p = bam_get_cigar(src) + if cigar_p == NULL: + return 0 + cdef int op + cdef uint32_t n = pysam_get_n_cigar(src) + for k from 0 <= k < n: + op = cigar_p[k] & BAM_CIGAR_MASK + if op == BAM_CSOFT_CLIP or op == BAM_CHARD_CLIP: + continue + l += cigar_p[k] >> BAM_CIGAR_SHIFT + return l + + +cdef inline uint32_t get_md_reference_length(char * md_tag): + cdef int l = 0 + cdef int md_idx = 0 + cdef int nmatches = 0 + + while md_tag[md_idx] != 0: + if md_tag[md_idx] >= 48 and md_tag[md_idx] <= 57: + nmatches *= 10 + nmatches += md_tag[md_idx] - 48 + md_idx += 1 + continue + else: + l += nmatches + nmatches = 0 + if md_tag[md_idx] == '^': + md_idx += 1 + while md_tag[md_idx] >= 65 and md_tag[md_idx] <= 90: + md_idx += 1 + l += 1 + else: + md_idx += 1 + l += 1 + + l += nmatches + return l + +# TODO: avoid string copying for getSequenceInRange, reconstituneSequenceFromMD, ... +cdef inline bytes build_alignment_sequence(bam1_t * src): + """return expanded sequence from MD tag. + + The sequence includes substitutions and both insertions in the + reference as well as deletions to the reference sequence. Combine + with the cigar string to reconstitute the query or the reference + sequence. + + Positions corresponding to `N` (skipped region from the reference) + in the CIGAR string will not appear in the returned sequence. The + MD should correspondingly not contain these. Thus proper tags are:: + + Deletion from the reference: cigar=5M1D5M MD=5^C5 + Skipped region from reference: cigar=5M1N5M MD=10 + + Returns + ------- + + None, if no MD tag is present. + + """ + if src == NULL: + return None + + cdef uint8_t * md_tag_ptr = bam_aux_get(src, "MD") + if md_tag_ptr == NULL: + return None + + cdef uint32_t start = getQueryStart(src) + cdef uint32_t end = getQueryEnd(src) + # get read sequence, taking into account soft-clipping + r = getSequenceInRange(src, start, end) + cdef char * read_sequence = r + cdef uint32_t * cigar_p = pysam_bam_get_cigar(src) + if cigar_p == NULL: + return None + + cdef uint32_t r_idx = 0 + cdef int op + cdef uint32_t k, i, l, x + cdef int nmatches = 0 + cdef int s_idx = 0 + + cdef uint32_t max_len = get_alignment_length(src) + if max_len == 0: + raise ValueError("could not determine alignment length") + + cdef char * s = calloc(max_len + 1, sizeof(char)) + if s == NULL: + raise ValueError( + "could not allocate sequence of length %i" % max_len) + + for k from 0 <= k < pysam_get_n_cigar(src): + op = cigar_p[k] & BAM_CIGAR_MASK + l = cigar_p[k] >> BAM_CIGAR_SHIFT + if op == BAM_CMATCH or op == BAM_CEQUAL or op == BAM_CDIFF: + for i from 0 <= i < l: + s[s_idx] = read_sequence[r_idx] + r_idx += 1 + s_idx += 1 + elif op == BAM_CDEL: + for i from 0 <= i < l: + s[s_idx] = '-' + s_idx += 1 + elif op == BAM_CREF_SKIP: + pass + elif op == BAM_CINS: + for i from 0 <= i < l: + # encode insertions into reference as lowercase + s[s_idx] = read_sequence[r_idx] + 32 + r_idx += 1 + s_idx += 1 + elif op == BAM_CSOFT_CLIP: + pass + elif op == BAM_CHARD_CLIP: + pass # advances neither + elif op == BAM_CPAD: + raise NotImplementedError( + "Padding (BAM_CPAD, 6) is currently not supported. " + "Please implement. Sorry about that.") + + cdef char * md_tag = bam_aux2Z(md_tag_ptr) + cdef int md_idx = 0 + s_idx = 0 + + # Check if MD tag is valid by matching CIGAR length to MD tag defined length + # Insertions would be in addition to what is described by MD, so we calculate + # the number of insertions seperately. + cdef int insertions = 0 + + while s[s_idx] != 0: + if s[s_idx] >= 'a': + insertions += 1 + s_idx += 1 + s_idx = 0 + + cdef uint32_t md_len = get_md_reference_length(md_tag) + if md_len + insertions > max_len: + raise AssertionError( + "Invalid MD tag: MD length {} mismatch with CIGAR length {} and {} insertions".format( + md_len, max_len, insertions)) + + while md_tag[md_idx] != 0: + # c is numerical + if md_tag[md_idx] >= 48 and md_tag[md_idx] <= 57: + nmatches *= 10 + nmatches += md_tag[md_idx] - 48 + md_idx += 1 + continue + else: + # save matches up to this point, skipping insertions + for x from 0 <= x < nmatches: + while s[s_idx] >= 'a': + s_idx += 1 + s_idx += 1 + while s[s_idx] >= 'a': + s_idx += 1 + + r_idx += nmatches + nmatches = 0 + if md_tag[md_idx] == '^': + md_idx += 1 + while md_tag[md_idx] >= 65 and md_tag[md_idx] <= 90: + # assert s[s_idx] == '-' + s[s_idx] = md_tag[md_idx] + s_idx += 1 + md_idx += 1 + else: + # save mismatch and change to lower case + s[s_idx] = md_tag[md_idx] + 32 + s_idx += 1 + r_idx += 1 + md_idx += 1 + + # save matches up to this point, skipping insertions + for x from 0 <= x < nmatches: + while s[s_idx] >= 'a': + s_idx += 1 + s_idx += 1 + while s[s_idx] >= 'a': + s_idx += 1 + + seq = PyBytes_FromStringAndSize(s, s_idx) + free(s) + + return seq + + +cdef inline bytes build_reference_sequence(bam1_t * src): + """return the reference sequence in the region that is covered by the + alignment of the read to the reference. + + This method requires the MD tag to be set. + + """ + cdef uint32_t k, i, l + cdef int op + cdef int s_idx = 0 + ref_seq = build_alignment_sequence(src) + if ref_seq is None: + raise ValueError("MD tag not present") + + cdef char * s = calloc(len(ref_seq) + 1, sizeof(char)) + if s == NULL: + raise ValueError( + "could not allocate sequence of length %i" % len(ref_seq)) + + cdef char * cref_seq = ref_seq + cdef uint32_t * cigar_p = pysam_bam_get_cigar(src) + cdef uint32_t r_idx = 0 + for k from 0 <= k < pysam_get_n_cigar(src): + op = cigar_p[k] & BAM_CIGAR_MASK + l = cigar_p[k] >> BAM_CIGAR_SHIFT + if op == BAM_CMATCH or op == BAM_CEQUAL or op == BAM_CDIFF: + for i from 0 <= i < l: + s[s_idx] = cref_seq[r_idx] + r_idx += 1 + s_idx += 1 + elif op == BAM_CDEL: + for i from 0 <= i < l: + s[s_idx] = cref_seq[r_idx] + r_idx += 1 + s_idx += 1 + elif op == BAM_CREF_SKIP: + pass + elif op == BAM_CINS: + r_idx += l + elif op == BAM_CSOFT_CLIP: + pass + elif op == BAM_CHARD_CLIP: + pass # advances neither + elif op == BAM_CPAD: + raise NotImplementedError( + "Padding (BAM_CPAD, 6) is currently not supported. " + "Please implement. Sorry about that.") + + seq = PyBytes_FromStringAndSize(s, s_idx) + free(s) + + return seq + + +cdef class AlignedSegment: + '''Class representing an aligned segment. + + This class stores a handle to the samtools C-structure representing + an aligned read. Member read access is forwarded to the C-structure + and converted into python objects. This implementation should be fast, + as only the data needed is converted. + + For write access, the C-structure is updated in-place. This is + not the most efficient way to build BAM entries, as the variable + length data is concatenated and thus needs to be resized if + a field is updated. Furthermore, the BAM entry might be + in an inconsistent state. + + One issue to look out for is that the sequence should always + be set *before* the quality scores. Setting the sequence will + also erase any quality scores that were set previously. + + Parameters + ---------- + + header -- :class:`~pysam.AlignmentHeader` object to map numerical + identifiers to chromosome names. If not given, an empty + header is created. + ''' + + # Now only called when instances are created from Python + def __init__(self, AlignmentHeader header=None): + # see bam_init1 + self._delegate = calloc(1, sizeof(bam1_t)) + if self._delegate == NULL: + raise MemoryError("could not allocated memory of {} bytes".format(sizeof(bam1_t))) + # allocate some memory. If size is 0, calloc does not return a + # pointer that can be passed to free() so allocate 40 bytes + # for a new read + self._delegate.m_data = 40 + self._delegate.data = calloc( + self._delegate.m_data, 1) + if self._delegate.data == NULL: + raise MemoryError("could not allocate memory of {} bytes".format(self._delegate.m_data)) + self._delegate.l_data = 0 + # set some data to make read approximately legit. + # Note, SAM writing fails with q_name of length 0 + self._delegate.core.l_qname = 0 + self._delegate.core.tid = -1 + self._delegate.core.pos = -1 + self._delegate.core.mtid = -1 + self._delegate.core.mpos = -1 + + # caching for selected fields + self.cache_query_qualities = None + self.cache_query_alignment_qualities = None + self.cache_query_sequence = None + self.cache_query_alignment_sequence = None + + self.header = header + + def __dealloc__(self): + bam_destroy1(self._delegate) + + def __str__(self): + """return string representation of alignment. + + The representation is an approximate :term:`SAM` format, because + an aligned read might not be associated with a :term:`AlignmentFile`. + As a result :term:`tid` is shown instead of the reference name. + Similarly, the tags field is returned in its parsed state. + + To get a valid SAM record, use :meth:`to_string`. + """ + # sam-parsing is done in sam.c/bam_format1_core which + # requires a valid header. + return "\t".join(map(str, (self.query_name, + self.flag, + self.reference_id, + self.reference_start, + self.mapping_quality, + self.cigarstring, + self.next_reference_id, + self.next_reference_start, + self.query_alignment_length, + self.query_sequence, + self.query_qualities, + self.tags))) + + def __copy__(self): + return makeAlignedSegment(self._delegate, self.header) + + def __deepcopy__(self, memo): + return makeAlignedSegment(self._delegate, self.header) + + def compare(self, AlignedSegment other): + '''return -1,0,1, if contents in this are binary + <,=,> to *other* + ''' + + cdef int retval, x + cdef bam1_t *t + cdef bam1_t *o + + t = self._delegate + o = other._delegate + + # uncomment for debugging purposes + # cdef unsigned char * oo, * tt + # tt = (&t.core) + # oo = (&o.core) + # for x from 0 <= x < sizeof( bam1_core_t): print x, tt[x], oo[x] + # tt = (t.data) + # oo = (o.data) + # for x from 0 <= x < max(t.l_data, o.l_data): print x, tt[x], oo[x], chr(tt[x]), chr(oo[x]) + + # Fast-path test for object identity + if t == o: + return 0 + + cdef uint8_t *a = &t.core + cdef uint8_t *b = &o.core + + retval = memcmp(&t.core, &o.core, sizeof(bam1_core_t)) + if retval: + return retval + + # cmp(t.l_data, o.l_data) + retval = (t.l_data > o.l_data) - (t.l_data < o.l_data) + if retval: + return retval + return memcmp(t.data, o.data, t.l_data) + + def __richcmp__(self, AlignedSegment other, int op): + if op == 2: # == operator + return self.compare(other) == 0 + elif op == 3: # != operator + return self.compare(other) != 0 + else: + return NotImplemented + + def __hash__(self): + cdef bam1_t * src = self._delegate + cdef int x + + # see http://effbot.org/zone/python-hash.htm + cdef uint8_t * c = &src.core + cdef uint32_t hash_value = c[0] + for x from 1 <= x < sizeof(bam1_core_t): + hash_value = c_mul(hash_value, 1000003) ^ c[x] + c = src.data + for x from 0 <= x < src.l_data: + hash_value = c_mul(hash_value, 1000003) ^ c[x] + + return hash_value + + cpdef to_string(self): + """returns a string representation of the aligned segment. + + The output format is valid SAM format if a header is associated + with the AlignedSegment. + """ + cdef kstring_t line + line.l = line.m = 0 + line.s = NULL + + if self.header: + if sam_format1(self.header.ptr, self._delegate, &line) < 0: + if line.m: + free(line.s) + raise ValueError('sam_format failed') + else: + raise NotImplementedError("todo") + + ret = force_str(line.s[:line.l]) + + if line.m: + free(line.s) + + return ret + + @classmethod + def fromstring(cls, sam, AlignmentHeader header): + """parses a string representation of the aligned segment. + + The input format should be valid SAM format. + + Parameters + ---------- + sam -- :term:`SAM` formatted string + + """ + cdef AlignedSegment dest = cls.__new__(cls) + dest._delegate = calloc(1, sizeof(bam1_t)) + dest.header = header + + cdef kstring_t line + line.l = line.m = len(sam) + _sam = force_bytes(sam) + line.s = _sam + + sam_parse1(&line, dest.header.ptr, dest._delegate) + + return dest + + cpdef tostring(self, htsfile=None): + """deprecated, use :meth:`to_string()` instead. + + Parameters + ---------- + + htsfile -- (deprecated) AlignmentFile object to map numerical + identifiers to chromosome names. This parameter is present + for backwards compatibility and ignored. + """ + + return self.to_string() + + def to_dict(self): + """returns a json representation of the aligned segment. + + Field names are abbreviated versions of the class attributes. + """ + # let htslib do the string conversions, but treat optional field properly as list + vals = self.to_string().split("\t") + n = len(KEY_NAMES) - 1 + return dict(list(zip(KEY_NAMES[:-1], vals[:n])) + [(KEY_NAMES[-1], vals[n:])]) + + @classmethod + def from_dict(cls, sam_dict, AlignmentHeader header): + """parses a dictionary representation of the aligned segment. + + Parameters + ---------- + sam_dict -- dictionary of alignment values, keys corresponding to output from + :meth:`todict()`. + + """ + # let htslib do the parsing + # the tags field can be missing + return cls.fromstring( + "\t".join((sam_dict[x] for x in KEY_NAMES[:-1])) + + "\t" + + "\t".join(sam_dict.get(KEY_NAMES[-1], [])), header) + + ######################################################## + ## Basic attributes in order of appearance in SAM format + property query_name: + """the query template name (None if not present)""" + def __get__(self): + + cdef bam1_t * src = self._delegate + if src.core.l_qname == 0: + return None + + return charptr_to_str(pysam_bam_get_qname(src)) + + def __set__(self, qname): + + if qname is None or len(qname) == 0: + return + + # See issue #447 + # (The threshold is 252 chars, but this includes a \0 byte. + if len(qname) > 251: + raise ValueError("query length out of range {} > 251".format( + len(qname))) + + qname = force_bytes(qname) + cdef bam1_t * src = self._delegate + # the qname is \0 terminated + cdef uint8_t l = len(qname) + 1 + + cdef char * p = pysam_bam_get_qname(src) + cdef uint8_t l_extranul = 0 + + if l % 4 != 0: + l_extranul = 4 - l % 4 + + cdef bam1_t * retval = pysam_bam_update(src, + src.core.l_qname, + l + l_extranul, + p) + if retval == NULL: + raise MemoryError("could not allocate memory") + + src.core.l_extranul = l_extranul + src.core.l_qname = l + l_extranul + + # re-acquire pointer to location in memory + # as it might have moved + p = pysam_bam_get_qname(src) + + strncpy(p, qname, l) + # x might be > 255 + cdef uint16_t x = 0 + + for x from l <= x < l + l_extranul: + p[x] = '\0' + + property flag: + """properties flag""" + def __get__(self): + return self._delegate.core.flag + def __set__(self, flag): + self._delegate.core.flag = flag + + property reference_name: + """:term:`reference` name""" + def __get__(self): + if self._delegate.core.tid == -1: + return None + if self.header: + return self.header.get_reference_name(self._delegate.core.tid) + else: + raise ValueError("reference_name unknown if no header associated with record") + def __set__(self, reference): + cdef int tid + if reference is None or reference == "*": + self._delegate.core.tid = -1 + elif self.header: + tid = self.header.get_tid(reference) + if tid < 0: + raise ValueError("reference {} does not exist in header".format( + reference)) + self._delegate.core.tid = tid + else: + raise ValueError("reference_name can not be set if no header associated with record") + + property reference_id: + """:term:`reference` ID + + .. note:: + + This field contains the index of the reference sequence in + the sequence dictionary. To obtain the name of the + reference sequence, use :meth:`get_reference_name()` + + """ + def __get__(self): + return self._delegate.core.tid + def __set__(self, tid): + if tid != -1 and self.header and not self.header.is_valid_tid(tid): + raise ValueError("reference id {} does not exist in header".format( + tid)) + self._delegate.core.tid = tid + + property reference_start: + """0-based leftmost coordinate""" + def __get__(self): + return self._delegate.core.pos + def __set__(self, pos): + ## setting the position requires updating the "bin" attribute + cdef bam1_t * src + src = self._delegate + src.core.pos = pos + update_bin(src) + + property mapping_quality: + """mapping quality""" + def __get__(self): + return pysam_get_qual(self._delegate) + def __set__(self, qual): + pysam_set_qual(self._delegate, qual) + + property cigarstring: + '''the :term:`cigar` alignment as a string. + + The cigar string is a string of alternating integers + and characters denoting the length and the type of + an operation. + + .. note:: + The order length,operation is specified in the + SAM format. It is different from the order of + the :attr:`cigar` property. + + Returns None if not present. + + To unset the cigarstring, assign None or the + empty string. + ''' + def __get__(self): + c = self.cigartuples + if c is None: + return None + # reverse order + else: + return "".join([ "%i%c" % (y,CODE2CIGAR[x]) for x,y in c]) + + def __set__(self, cigar): + if cigar is None or len(cigar) == 0: + self.cigartuples = [] + else: + parts = CIGAR_REGEX.findall(cigar) + # reverse order + self.cigartuples = [(CIGAR2CODE[ord(y)], int(x)) for x,y in parts] + + # TODO + # property cigar: + # """the cigar alignment""" + + property next_reference_id: + """the :term:`reference` id of the mate/next read.""" + def __get__(self): + return self._delegate.core.mtid + def __set__(self, mtid): + if mtid != -1 and self.header and not self.header.is_valid_tid(mtid): + raise ValueError("reference id {} does not exist in header".format( + mtid)) + self._delegate.core.mtid = mtid + + property next_reference_name: + """:term:`reference` name of the mate/next read (None if no + AlignmentFile is associated)""" + def __get__(self): + if self._delegate.core.mtid == -1: + return None + if self.header: + return self.header.get_reference_name(self._delegate.core.mtid) + else: + raise ValueError("next_reference_name unknown if no header associated with record") + + def __set__(self, reference): + cdef int mtid + if reference is None or reference == "*": + self._delegate.core.mtid = -1 + elif reference == "=": + self._delegate.core.mtid = self._delegate.core.tid + elif self.header: + mtid = self.header.get_tid(reference) + if mtid < 0: + raise ValueError("reference {} does not exist in header".format( + reference)) + self._delegate.core.mtid = mtid + else: + raise ValueError("next_reference_name can not be set if no header associated with record") + + property next_reference_start: + """the position of the mate/next read.""" + def __get__(self): + return self._delegate.core.mpos + def __set__(self, mpos): + self._delegate.core.mpos = mpos + + property query_length: + """the length of the query/read. + + This value corresponds to the length of the sequence supplied + in the BAM/SAM file. The length of a query is 0 if there is no + sequence in the BAM/SAM file. In those cases, the read length + can be inferred from the CIGAR alignment, see + :meth:`pysam.AlignedSegment.infer_query_length`. + + The length includes soft-clipped bases and is equal to + ``len(query_sequence)``. + + This property is read-only but can be set by providing a + sequence. + + Returns 0 if not available. + + """ + def __get__(self): + return self._delegate.core.l_qseq + + property template_length: + """the observed query template length""" + def __get__(self): + return self._delegate.core.isize + def __set__(self, isize): + self._delegate.core.isize = isize + + property query_sequence: + """read sequence bases, including :term:`soft clipped` bases + (None if not present). + + Note that assigning to seq will invalidate any quality scores. + Thus, to in-place edit the sequence and quality scores, copies of + the quality scores need to be taken. Consider trimming for example:: + + q = read.query_qualities + read.query_squence = read.query_sequence[5:10] + read.query_qualities = q[5:10] + + The sequence is returned as it is stored in the BAM file. Some mappers + might have stored a reverse complement of the original read + sequence. + """ + def __get__(self): + if self.cache_query_sequence: + return self.cache_query_sequence + + cdef bam1_t * src + cdef char * s + src = self._delegate + + if src.core.l_qseq == 0: + return None + + self.cache_query_sequence = force_str(getSequenceInRange( + src, 0, src.core.l_qseq)) + return self.cache_query_sequence + + def __set__(self, seq): + # samtools manages sequence and quality length memory together + # if no quality information is present, the first byte says 0xff. + cdef bam1_t * src + cdef uint8_t * p + cdef char * s + cdef int l, k + cdef Py_ssize_t nbytes_new, nbytes_old + + if seq == None: + l = 0 + else: + l = len(seq) + seq = force_bytes(seq) + + src = self._delegate + + # as the sequence is stored in half-bytes, the total length (sequence + # plus quality scores) is (l+1)/2 + l + nbytes_new = (l + 1) / 2 + l + nbytes_old = (src.core.l_qseq + 1) / 2 + src.core.l_qseq + + # acquire pointer to location in memory + p = pysam_bam_get_seq(src) + src.core.l_qseq = l + + # change length of data field + cdef bam1_t * retval = pysam_bam_update(src, + nbytes_old, + nbytes_new, + p) + + if retval == NULL: + raise MemoryError("could not allocate memory") + + if l > 0: + # re-acquire pointer to location in memory + # as it might have moved + p = pysam_bam_get_seq(src) + for k from 0 <= k < nbytes_new: + p[k] = 0 + # convert to C string + s = seq + for k from 0 <= k < l: + p[k/2] |= seq_nt16_table[s[k]] << 4 * (1 - k % 2) + + # erase qualities + p = pysam_bam_get_qual(src) + p[0] = 0xff + + self.cache_query_sequence = force_str(seq) + + # clear cached values for quality values + self.cache_query_qualities = None + self.cache_query_alignment_qualities = None + + property query_qualities: + """read sequence base qualities, including :term:`soft + clipped` bases (None if not present). + + Quality scores are returned as a python array of unsigned + chars. Note that this is not the ASCII-encoded value typically + seen in FASTQ or SAM formatted files. Thus, no offset of 33 + needs to be subtracted. + + Note that to set quality scores the sequence has to be set + beforehand as this will determine the expected length of the + quality score array. + + This method raises a ValueError if the length of the + quality scores and the sequence are not the same. + + """ + def __get__(self): + + if self.cache_query_qualities: + return self.cache_query_qualities + + cdef bam1_t * src + cdef char * q + + src = self._delegate + + if src.core.l_qseq == 0: + return None + + self.cache_query_qualities = getQualitiesInRange(src, 0, src.core.l_qseq) + return self.cache_query_qualities + + def __set__(self, qual): + + # note that memory is already allocated via setting the sequence + # hence length match of sequence and quality needs is checked. + cdef bam1_t * src + cdef uint8_t * p + cdef int l + + src = self._delegate + p = pysam_bam_get_qual(src) + if qual is None or len(qual) == 0: + # if absent and there is a sequence: set to 0xff + if src.core.l_qseq != 0: + p[0] = 0xff + return + + # check for length match + l = len(qual) + if src.core.l_qseq != l: + raise ValueError( + "quality and sequence mismatch: %i != %i" % + (l, src.core.l_qseq)) + + # create a python array object filling it + # with the quality scores + + # NB: should avoid this copying if qual is + # already of the correct type. + cdef c_array.array result = c_array.array('B', qual) + + # copy data + memcpy(p, result.data.as_voidptr, l) + + # save in cache + self.cache_query_qualities = qual + + property bin: + """properties bin""" + def __get__(self): + return self._delegate.core.bin + def __set__(self, bin): + self._delegate.core.bin = bin + + + ########################################################## + # Derived simple attributes. These are simple attributes of + # AlignedSegment getting and setting values. + ########################################################## + # 1. Flags + ########################################################## + property is_paired: + """true if read is paired in sequencing""" + def __get__(self): + return (self.flag & BAM_FPAIRED) != 0 + def __set__(self,val): + pysam_update_flag(self._delegate, val, BAM_FPAIRED) + + property is_proper_pair: + """true if read is mapped in a proper pair""" + def __get__(self): + return (self.flag & BAM_FPROPER_PAIR) != 0 + def __set__(self,val): + pysam_update_flag(self._delegate, val, BAM_FPROPER_PAIR) + property is_unmapped: + """true if read itself is unmapped""" + def __get__(self): + return (self.flag & BAM_FUNMAP) != 0 + def __set__(self, val): + pysam_update_flag(self._delegate, val, BAM_FUNMAP) + # setting the unmapped flag requires recalculation of + # bin as alignment length is now implicitely 1 + update_bin(self._delegate) + + property mate_is_unmapped: + """true if the mate is unmapped""" + def __get__(self): + return (self.flag & BAM_FMUNMAP) != 0 + def __set__(self,val): + pysam_update_flag(self._delegate, val, BAM_FMUNMAP) + property is_reverse: + """true if read is mapped to reverse strand""" + def __get__(self): + return (self.flag & BAM_FREVERSE) != 0 + def __set__(self,val): + pysam_update_flag(self._delegate, val, BAM_FREVERSE) + property mate_is_reverse: + """true is read is mapped to reverse strand""" + def __get__(self): + return (self.flag & BAM_FMREVERSE) != 0 + def __set__(self,val): + pysam_update_flag(self._delegate, val, BAM_FMREVERSE) + property is_read1: + """true if this is read1""" + def __get__(self): + return (self.flag & BAM_FREAD1) != 0 + def __set__(self,val): + pysam_update_flag(self._delegate, val, BAM_FREAD1) + property is_read2: + """true if this is read2""" + def __get__(self): + return (self.flag & BAM_FREAD2) != 0 + def __set__(self, val): + pysam_update_flag(self._delegate, val, BAM_FREAD2) + property is_secondary: + """true if not primary alignment""" + def __get__(self): + return (self.flag & BAM_FSECONDARY) != 0 + def __set__(self, val): + pysam_update_flag(self._delegate, val, BAM_FSECONDARY) + property is_qcfail: + """true if QC failure""" + def __get__(self): + return (self.flag & BAM_FQCFAIL) != 0 + def __set__(self, val): + pysam_update_flag(self._delegate, val, BAM_FQCFAIL) + property is_duplicate: + """true if optical or PCR duplicate""" + def __get__(self): + return (self.flag & BAM_FDUP) != 0 + def __set__(self, val): + pysam_update_flag(self._delegate, val, BAM_FDUP) + property is_supplementary: + """true if this is a supplementary alignment""" + def __get__(self): + return (self.flag & BAM_FSUPPLEMENTARY) != 0 + def __set__(self, val): + pysam_update_flag(self._delegate, val, BAM_FSUPPLEMENTARY) + + # 2. Coordinates and lengths + property reference_end: + '''aligned reference position of the read on the reference genome. + + reference_end points to one past the last aligned residue. + Returns None if not available (read is unmapped or no cigar + alignment present). + + ''' + def __get__(self): + cdef bam1_t * src + src = self._delegate + if (self.flag & BAM_FUNMAP) or pysam_get_n_cigar(src) == 0: + return None + return bam_endpos(src) + + property reference_length: + '''aligned length of the read on the reference genome. + + This is equal to `aend - pos`. Returns None if not available.''' + def __get__(self): + cdef bam1_t * src + src = self._delegate + if (self.flag & BAM_FUNMAP) or pysam_get_n_cigar(src) == 0: + return None + return bam_endpos(src) - \ + self._delegate.core.pos + + property query_alignment_sequence: + """aligned portion of the read. + + This is a substring of :attr:`seq` that excludes flanking + bases that were :term:`soft clipped` (None if not present). It + is equal to ``seq[qstart:qend]``. + + SAM/BAM files may include extra flanking bases that are not + part of the alignment. These bases may be the result of the + Smith-Waterman or other algorithms, which may not require + alignments that begin at the first residue or end at the last. + In addition, extra sequencing adapters, multiplex identifiers, + and low-quality bases that were not considered for alignment + may have been retained. + + """ + + def __get__(self): + if self.cache_query_alignment_sequence: + return self.cache_query_alignment_sequence + + cdef bam1_t * src + cdef uint32_t start, end + + src = self._delegate + + if src.core.l_qseq == 0: + return None + + start = getQueryStart(src) + end = getQueryEnd(src) + + self.cache_query_alignment_sequence = force_str( + getSequenceInRange(src, start, end)) + return self.cache_query_alignment_sequence + + property query_alignment_qualities: + """aligned query sequence quality values (None if not present). These + are the quality values that correspond to :attr:`query`, that + is, they exclude qualities of :term:`soft clipped` bases. This + is equal to ``qual[qstart:qend]``. + + Quality scores are returned as a python array of unsigned + chars. Note that this is not the ASCII-encoded value typically + seen in FASTQ or SAM formatted files. Thus, no offset of 33 + needs to be subtracted. + + This property is read-only. + + """ + def __get__(self): + + if self.cache_query_alignment_qualities: + return self.cache_query_alignment_qualities + + cdef bam1_t * src + cdef uint32_t start, end + + src = self._delegate + + if src.core.l_qseq == 0: + return None + + start = getQueryStart(src) + end = getQueryEnd(src) + self.cache_query_alignment_qualities = \ + getQualitiesInRange(src, start, end) + return self.cache_query_alignment_qualities + + property query_alignment_start: + """start index of the aligned query portion of the sequence (0-based, + inclusive). + + This the index of the first base in :attr:`seq` that is not + soft-clipped. + """ + def __get__(self): + return getQueryStart(self._delegate) + + property query_alignment_end: + """end index of the aligned query portion of the sequence (0-based, + exclusive) + + This the index just past the last base in :attr:`seq` that is not + soft-clipped. + """ + def __get__(self): + return getQueryEnd(self._delegate) + + property query_alignment_length: + """length of the aligned query sequence. + + This is equal to :attr:`qend` - :attr:`qstart`""" + def __get__(self): + cdef bam1_t * src + src = self._delegate + return getQueryEnd(src) - getQueryStart(src) + + ##################################################### + # Computed properties + + def get_reference_positions(self, full_length=False): + """a list of reference positions that this read aligns to. + + By default, this method only returns positions in the + reference that are within the alignment. If *full_length* is + set, None values will be included for any soft-clipped or + unaligned positions within the read. The returned list will + thus be of the same length as the read. + + """ + cdef uint32_t k, i, l, pos + cdef int op + cdef uint32_t * cigar_p + cdef bam1_t * src + cdef bint _full = full_length + + src = self._delegate + if pysam_get_n_cigar(src) == 0: + return [] + + result = [] + pos = src.core.pos + cigar_p = pysam_bam_get_cigar(src) + + for k from 0 <= k < pysam_get_n_cigar(src): + op = cigar_p[k] & BAM_CIGAR_MASK + l = cigar_p[k] >> BAM_CIGAR_SHIFT + + if op == BAM_CSOFT_CLIP or op == BAM_CINS: + if _full: + for i from 0 <= i < l: + result.append(None) + elif op == BAM_CMATCH: + for i from pos <= i < pos + l: + result.append(i) + pos += l + elif op == BAM_CDEL or op == BAM_CREF_SKIP: + pos += l + + return result + + def infer_query_length(self, always=False): + """infer query length from CIGAR alignment. + + This method deduces the query length from the CIGAR alignment + but does not include hard-clipped bases. + + Returns None if CIGAR alignment is not present. + + If *always* is set to True, `infer_read_length` is used instead. + This is deprecated and only present for backward compatibility. + """ + if always is True: + return self.infer_read_length() + cdef int32_t l = calculateQueryLengthWithoutHardClipping(self._delegate) + if l > 0: + return l + else: + return None + + def infer_read_length(self): + """infer read length from CIGAR alignment. + + This method deduces the read length from the CIGAR alignment + including hard-clipped bases. + + Returns None if CIGAR alignment is not present. + """ + cdef int32_t l = calculateQueryLengthWithHardClipping(self._delegate) + if l > 0: + return l + else: + return None + + def get_reference_sequence(self): + """return the reference sequence in the region that is covered by the + alignment of the read to the reference. + + This method requires the MD tag to be set. + + """ + return force_str(build_reference_sequence(self._delegate)) + + def get_forward_sequence(self): + """return the original read sequence. + + Reads mapping to the reverse strand will be reverse + complemented. + """ + s = force_str(self.query_sequence) + if self.is_reverse: + s = s.translate(maketrans("ACGTacgtNnXx", "TGCAtgcaNnXx"))[::-1] + return s + + def get_forward_qualities(self): + """return the original read sequence. + + Reads mapping to the reverse strand will be reverse + complemented. + """ + if self.is_reverse: + return self.query_qualities[::-1] + else: + return self.query_qualities + + + def get_aligned_pairs(self, matches_only=False, with_seq=False): + """a list of aligned read (query) and reference positions. + + For inserts, deletions, skipping either query or reference + position may be None. + + Padding is currently not supported and leads to an exception. + + Parameters + ---------- + + matches_only : bool + If True, only matched bases are returned - no None on either + side. + with_seq : bool + If True, return a third element in the tuple containing the + reference sequence. Substitutions are lower-case. This option + requires an MD tag to be present. + + Returns + ------- + + aligned_pairs : list of tuples + + """ + cdef uint32_t k, i, pos, qpos, r_idx, l + cdef int op + cdef uint32_t * cigar_p + cdef bam1_t * src = self._delegate + cdef bint _matches_only = bool(matches_only) + cdef bint _with_seq = bool(with_seq) + + # TODO: this method performs no checking and assumes that + # read sequence, cigar and MD tag are consistent. + + if _with_seq: + # force_str required for py2/py3 compatibility + ref_seq = force_str(build_reference_sequence(src)) + if ref_seq is None: + raise ValueError("MD tag not present") + + r_idx = 0 + + if pysam_get_n_cigar(src) == 0: + return [] + + result = [] + pos = src.core.pos + qpos = 0 + cigar_p = pysam_bam_get_cigar(src) + for k from 0 <= k < pysam_get_n_cigar(src): + op = cigar_p[k] & BAM_CIGAR_MASK + l = cigar_p[k] >> BAM_CIGAR_SHIFT + + if op == BAM_CMATCH or op == BAM_CEQUAL or op == BAM_CDIFF: + if _with_seq: + for i from pos <= i < pos + l: + result.append((qpos, i, ref_seq[r_idx])) + r_idx += 1 + qpos += 1 + else: + for i from pos <= i < pos + l: + result.append((qpos, i)) + qpos += 1 + pos += l + + elif op == BAM_CINS or op == BAM_CSOFT_CLIP: + if not _matches_only: + if _with_seq: + for i from pos <= i < pos + l: + result.append((qpos, None, None)) + qpos += 1 + else: + for i from pos <= i < pos + l: + result.append((qpos, None)) + qpos += 1 + else: + qpos += l + + elif op == BAM_CDEL: + if not _matches_only: + if _with_seq: + for i from pos <= i < pos + l: + result.append((None, i, ref_seq[r_idx])) + r_idx += 1 + else: + for i from pos <= i < pos + l: + result.append((None, i)) + pos += l + + elif op == BAM_CHARD_CLIP: + pass # advances neither + + elif op == BAM_CREF_SKIP: + if not _matches_only: + if _with_seq: + for i from pos <= i < pos + l: + result.append((None, i, None)) + else: + for i from pos <= i < pos + l: + result.append((None, i)) + + pos += l + + elif op == BAM_CPAD: + raise NotImplementedError( + "Padding (BAM_CPAD, 6) is currently not supported. " + "Please implement. Sorry about that.") + + return result + + def get_blocks(self): + """ a list of start and end positions of + aligned gapless blocks. + + The start and end positions are in genomic + coordinates. + + Blocks are not normalized, i.e. two blocks + might be directly adjacent. This happens if + the two blocks are separated by an insertion + in the read. + """ + + cdef uint32_t k, pos, l + cdef int op + cdef uint32_t * cigar_p + cdef bam1_t * src + + src = self._delegate + if pysam_get_n_cigar(src) == 0: + return [] + + result = [] + pos = src.core.pos + cigar_p = pysam_bam_get_cigar(src) + l = 0 + + for k from 0 <= k < pysam_get_n_cigar(src): + op = cigar_p[k] & BAM_CIGAR_MASK + l = cigar_p[k] >> BAM_CIGAR_SHIFT + if op == BAM_CMATCH: + result.append((pos, pos + l)) + pos += l + elif op == BAM_CDEL or op == BAM_CREF_SKIP: + pos += l + + return result + + def get_overlap(self, uint32_t start, uint32_t end): + """return number of aligned bases of read overlapping the interval + *start* and *end* on the reference sequence. + + Return None if cigar alignment is not available. + """ + cdef uint32_t k, i, pos, overlap + cdef int op, o + cdef uint32_t * cigar_p + cdef bam1_t * src + + overlap = 0 + + src = self._delegate + if pysam_get_n_cigar(src) == 0: + return None + pos = src.core.pos + o = 0 + + cigar_p = pysam_bam_get_cigar(src) + for k from 0 <= k < pysam_get_n_cigar(src): + op = cigar_p[k] & BAM_CIGAR_MASK + l = cigar_p[k] >> BAM_CIGAR_SHIFT + + if op == BAM_CMATCH: + o = min( pos + l, end) - max( pos, start ) + if o > 0: overlap += o + + if op == BAM_CMATCH or op == BAM_CDEL or op == BAM_CREF_SKIP: + pos += l + + return overlap + + def get_cigar_stats(self): + """summary of operations in cigar string. + + The output order in the array is "MIDNSHP=X" followed by a + field for the NM tag. If the NM tag is not present, this + field will always be 0. + + +-----+--------------+-----+ + |M |BAM_CMATCH |0 | + +-----+--------------+-----+ + |I |BAM_CINS |1 | + +-----+--------------+-----+ + |D |BAM_CDEL |2 | + +-----+--------------+-----+ + |N |BAM_CREF_SKIP |3 | + +-----+--------------+-----+ + |S |BAM_CSOFT_CLIP|4 | + +-----+--------------+-----+ + |H |BAM_CHARD_CLIP|5 | + +-----+--------------+-----+ + |P |BAM_CPAD |6 | + +-----+--------------+-----+ + |= |BAM_CEQUAL |7 | + +-----+--------------+-----+ + |X |BAM_CDIFF |8 | + +-----+--------------+-----+ + |B |BAM_CBACK |9 | + +-----+--------------+-----+ + |NM |NM tag |10 | + +-----+--------------+-----+ + + If no cigar string is present, empty arrays will be returned. + + Parameters + ---------- + + Returns + ------- + + arrays : two arrays. The first contains the nucleotide counts within + each cigar operation, the second contains the number of blocks for + each cigar operation. + + """ + + cdef int nfields = NCIGAR_CODES + 1 + + cdef c_array.array base_counts = array.array( + "I", + [0] * nfields) + cdef uint32_t [:] base_view = base_counts + cdef c_array.array block_counts = array.array( + "I", + [0] * nfields) + cdef uint32_t [:] block_view = block_counts + + cdef bam1_t * src = self._delegate + cdef int op + cdef uint32_t l + cdef int32_t k + cdef uint32_t * cigar_p = pysam_bam_get_cigar(src) + + if cigar_p == NULL: + return None + + for k from 0 <= k < pysam_get_n_cigar(src): + op = cigar_p[k] & BAM_CIGAR_MASK + l = cigar_p[k] >> BAM_CIGAR_SHIFT + base_view[op] += l + block_view[op] += 1 + + cdef uint8_t * v = bam_aux_get(src, 'NM') + if v != NULL: + base_view[nfields - 1] = bam_aux2i(v) + + return base_counts, block_counts + + ##################################################### + ## Unsorted as yet + # TODO: capture in CIGAR object + property cigartuples: + """the :term:`cigar` alignment. The alignment + is returned as a list of tuples of (operation, length). + + If the alignment is not present, None is returned. + + The operations are: + + +-----+--------------+-----+ + |M |BAM_CMATCH |0 | + +-----+--------------+-----+ + |I |BAM_CINS |1 | + +-----+--------------+-----+ + |D |BAM_CDEL |2 | + +-----+--------------+-----+ + |N |BAM_CREF_SKIP |3 | + +-----+--------------+-----+ + |S |BAM_CSOFT_CLIP|4 | + +-----+--------------+-----+ + |H |BAM_CHARD_CLIP|5 | + +-----+--------------+-----+ + |P |BAM_CPAD |6 | + +-----+--------------+-----+ + |= |BAM_CEQUAL |7 | + +-----+--------------+-----+ + |X |BAM_CDIFF |8 | + +-----+--------------+-----+ + |B |BAM_CBACK |9 | + +-----+--------------+-----+ + + .. note:: + The output is a list of (operation, length) tuples, such as + ``[(0, 30)]``. + This is different from the SAM specification and + the :attr:`cigarstring` property, which uses a + (length, operation) order, for example: ``30M``. + + To unset the cigar property, assign an empty list + or None. + """ + def __get__(self): + cdef uint32_t * cigar_p + cdef bam1_t * src + cdef uint32_t op, l + cdef uint32_t k + + src = self._delegate + if pysam_get_n_cigar(src) == 0: + return None + + cigar = [] + + cigar_p = pysam_bam_get_cigar(src); + for k from 0 <= k < pysam_get_n_cigar(src): + op = cigar_p[k] & BAM_CIGAR_MASK + l = cigar_p[k] >> BAM_CIGAR_SHIFT + cigar.append((op, l)) + return cigar + + def __set__(self, values): + cdef uint32_t * p + cdef bam1_t * src + cdef op, l + cdef int k + + k = 0 + + src = self._delegate + + # get location of cigar string + p = pysam_bam_get_cigar(src) + + # empty values for cigar string + if values is None: + values = [] + + cdef uint32_t ncigar = len(values) + + cdef bam1_t * retval = pysam_bam_update(src, + pysam_get_n_cigar(src) * 4, + ncigar * 4, + p) + + if retval == NULL: + raise MemoryError("could not allocate memory") + + # length is number of cigar operations, not bytes + pysam_set_n_cigar(src, ncigar) + + # re-acquire pointer to location in memory + # as it might have moved + p = pysam_bam_get_cigar(src) + + # insert cigar operations + for op, l in values: + p[k] = l << BAM_CIGAR_SHIFT | op + k += 1 + + ## setting the cigar string requires updating the bin + update_bin(src) + + cpdef set_tag(self, + tag, + value, + value_type=None, + replace=True): + """sets a particular field *tag* to *value* in the optional alignment + section. + + *value_type* describes the type of *value* that is to entered + into the alignment record. It can be set explicitly to one of + the valid one-letter type codes. If unset, an appropriate type + will be chosen automatically based on the python type of + *value*. + + An existing value of the same *tag* will be overwritten unless + *replace* is set to False. This is usually not recommened as a + tag may only appear once in the optional alignment section. + + If *value* is None, the tag will be deleted. + + This method accepts valid SAM specification value types, which + are:: + + A: printable char + i: signed int + f: float + Z: printable string + H: Byte array in hex format + B: Integer or numeric array + + Additionally, it will accept the integer BAM types ('cCsSI') + + For htslib compatibility, 'a' is synonymous with 'A' and the + method accepts a 'd' type code for a double precision float. + + When deducing the type code by the python type of *value*, the + following mapping is applied:: + + i: python int + f: python float + Z: python str or bytes + B: python array.array, list or tuple + + Note that a single character string will be output as 'Z' and + not 'A' as the former is the more general type. + """ + + cdef int value_size + cdef uint8_t tc + cdef uint8_t * value_ptr + cdef uint8_t *existing_ptr + cdef float float_value + cdef double double_value + cdef int32_t int32_t_value + cdef uint32_t uint32_t_value + cdef int16_t int16_t_value + cdef uint16_t uint16_t_value + cdef int8_t int8_t_value + cdef uint8_t uint8_t_value + cdef bam1_t * src = self._delegate + cdef char * _value_type + cdef c_array.array array_value + cdef object buffer + + if len(tag) != 2: + raise ValueError('Invalid tag: %s' % tag) + + tag = force_bytes(tag) + if replace: + existing_ptr = bam_aux_get(src, tag) + if existing_ptr: + bam_aux_del(src, existing_ptr) + + # setting value to None deletes a tag + if value is None: + return + + cdef uint8_t typecode = get_tag_typecode(value, value_type) + if typecode == 0: + raise ValueError("can't guess type or invalid type code specified: {} {}".format( + value, value_type)) + + # sam_format1 for typecasting + if typecode == 'Z': + value = force_bytes(value) + value_ptr = value + value_size = len(value)+1 + elif typecode == 'H': + # Note that hex tags are stored the very same + # way as Z string.s + value = force_bytes(value) + value_ptr = value + value_size = len(value)+1 + elif typecode == 'A' or typecode == 'a': + value = force_bytes(value) + value_ptr = value + value_size = sizeof(char) + typecode = 'A' + elif typecode == 'i': + int32_t_value = value + value_ptr = &int32_t_value + value_size = sizeof(int32_t) + elif typecode == 'I': + uint32_t_value = value + value_ptr = &uint32_t_value + value_size = sizeof(uint32_t) + elif typecode == 's': + int16_t_value = value + value_ptr = &int16_t_value + value_size = sizeof(int16_t) + elif typecode == 'S': + uint16_t_value = value + value_ptr = &uint16_t_value + value_size = sizeof(uint16_t) + elif typecode == 'c': + int8_t_value = value + value_ptr = &int8_t_value + value_size = sizeof(int8_t) + elif typecode == 'C': + uint8_t_value = value + value_ptr = &uint8_t_value + value_size = sizeof(uint8_t) + elif typecode == 'd': + double_value = value + value_ptr = &double_value + value_size = sizeof(double) + elif typecode == 'f': + float_value = value + value_ptr = &float_value + value_size = sizeof(float) + elif typecode == 'B': + # the following goes through python, needs to be cleaned up + # pack array using struct + fmt, args = pack_tags([(tag, value, value_type)]) + + # remove tag and type code as set by bam_aux_append + # first four chars of format (<2sB) + fmt = '<' + fmt[4:] + # first two values to pack + args = args[2:] + value_size = struct.calcsize(fmt) + # buffer will be freed when object goes out of scope + buffer = ctypes.create_string_buffer(value_size) + struct.pack_into(fmt, buffer, 0, *args) + # bam_aux_append copies data from value_ptr + bam_aux_append(src, + tag, + typecode, + value_size, + buffer.raw) + return + else: + raise ValueError('unsupported value_type {} in set_option'.format(typecode)) + + bam_aux_append(src, + tag, + typecode, + value_size, + value_ptr) + + cpdef has_tag(self, tag): + """returns true if the optional alignment section + contains a given *tag*.""" + cdef uint8_t * v + cdef int nvalues + btag = force_bytes(tag) + v = bam_aux_get(self._delegate, btag) + return v != NULL + + cpdef get_tag(self, tag, with_value_type=False): + """ + retrieves data from the optional alignment section + given a two-letter *tag* denoting the field. + + The returned value is cast into an appropriate python type. + + This method is the fastest way to access the optional + alignment section if only few tags need to be retrieved. + + Possible value types are "AcCsSiIfZHB" (see BAM format + specification) as well as additional value type 'd' as + implemented in htslib. + + Parameters + ---------- + + tag : + data tag. + + with_value_type : Optional[bool] + if set to True, the return value is a tuple of (tag value, type code). + (default False) + + Returns + ------- + + A python object with the value of the `tag`. The type of the + object depends on the data type in the data record. + + Raises + ------ + + KeyError + If `tag` is not present, a KeyError is raised. + + """ + cdef uint8_t * v + cdef int nvalues + btag = force_bytes(tag) + v = bam_aux_get(self._delegate, btag) + if v == NULL: + raise KeyError("tag '%s' not present" % tag) + if chr(v[0]) == "B": + auxtype = chr(v[0]) + chr(v[1]) + else: + auxtype = chr(v[0]) + + if auxtype in "iIcCsS": + value = bam_aux2i(v) + elif auxtype == 'f' or auxtype == 'F': + value = bam_aux2f(v) + elif auxtype == 'd' or auxtype == 'D': + value = bam_aux2f(v) + elif auxtype == 'A' or auxtype == 'a': + # force A to a + v[0] = 'A' + # there might a more efficient way + # to convert a char into a string + value = '%c' % bam_aux2A(v) + elif auxtype == 'Z' or auxtype == 'H': + # Z and H are treated equally as strings in htslib + value = charptr_to_str(bam_aux2Z(v)) + elif auxtype[0] == 'B': + bytesize, nvalues, values = convert_binary_tag(v + 1) + value = values + else: + raise ValueError("unknown auxiliary type '%s'" % auxtype) + + if with_value_type: + return (value, auxtype) + else: + return value + + def get_tags(self, with_value_type=False): + """the fields in the optional aligment section. + + Returns a list of all fields in the optional + alignment section. Values are converted to appropriate python + values. For example: + + [(NM, 2), (RG, "GJP00TM04")] + + If *with_value_type* is set, the value type as encode in + the AlignedSegment record will be returned as well: + + [(NM, 2, "i"), (RG, "GJP00TM04", "Z")] + + This method will convert all values in the optional alignment + section. When getting only one or few tags, please see + :meth:`get_tag` for a quicker way to achieve this. + + """ + + cdef char * ctag + cdef bam1_t * src + cdef uint8_t * s + cdef char auxtag[3] + cdef char auxtype + cdef uint8_t byte_size + cdef int32_t nvalues + + src = self._delegate + if src.l_data == 0: + return [] + s = pysam_bam_get_aux(src) + result = [] + auxtag[2] = 0 + while s < (src.data + src.l_data): + # get tag + auxtag[0] = s[0] + auxtag[1] = s[1] + s += 2 + auxtype = s[0] + if auxtype in ('c', 'C'): + value = bam_aux2i(s) + s += 1 + elif auxtype in ('s', 'S'): + value = bam_aux2i(s) + s += 2 + elif auxtype in ('i', 'I'): + value = bam_aux2i(s) + s += 4 + elif auxtype == 'f': + value = bam_aux2f(s) + s += 4 + elif auxtype == 'd': + value = bam_aux2f(s) + s += 8 + elif auxtype in ('A', 'a'): + value = "%c" % bam_aux2A(s) + s += 1 + elif auxtype in ('Z', 'H'): + value = charptr_to_str(bam_aux2Z(s)) + # +1 for NULL terminated string + s += len(value) + 1 + elif auxtype == 'B': + s += 1 + byte_size, nvalues, value = convert_binary_tag(s) + # 5 for 1 char and 1 int + s += 5 + (nvalues * byte_size) - 1 + else: + raise KeyError("unknown type '%s'" % auxtype) + + s += 1 + + if with_value_type: + result.append((charptr_to_str(auxtag), value, chr(auxtype))) + else: + result.append((charptr_to_str(auxtag), value)) + + return result + + def set_tags(self, tags): + """sets the fields in the optional alignment section with + a list of (tag, value) tuples. + + The :term:`value type` of the values is determined from the + python type. Optionally, a type may be given explicitly as + a third value in the tuple, For example: + + x.set_tags([(NM, 2, "i"), (RG, "GJP00TM04", "Z")] + + This method will not enforce the rule that the same tag may appear + only once in the optional alignment section. + """ + + cdef bam1_t * src + cdef uint8_t * s + cdef char * temp + cdef int new_size = 0 + cdef int old_size + src = self._delegate + + # convert and pack the data + if tags is not None and len(tags) > 0: + fmt, args = pack_tags(tags) + new_size = struct.calcsize(fmt) + buffer = ctypes.create_string_buffer(new_size) + struct.pack_into(fmt, + buffer, + 0, + *args) + + + # delete the old data and allocate new space. + # If total_size == 0, the aux field will be + # empty + old_size = pysam_bam_get_l_aux(src) + cdef bam1_t * retval = pysam_bam_update(src, + old_size, + new_size, + pysam_bam_get_aux(src)) + if retval == NULL: + raise MemoryError("could not allocated memory") + + # copy data only if there is any + if new_size > 0: + + # get location of new data + s = pysam_bam_get_aux(src) + + # check if there is direct path from buffer.raw to tmp + p = buffer.raw + # create handle to make sure buffer stays alive long + # enough for memcpy, see issue 129 + temp = p + memcpy(s, temp, new_size) + + + ######################################################## + # Compatibility Accessors + # Functions, properties for compatibility with pysam < 0.8 + # + # Several options + # change the factory functions according to API + # * requires code changes throughout, incl passing + # handles to factory functions + # subclass functions and add attributes at runtime + # e.g.: AlignedSegments.qname = AlignedSegments.query_name + # * will slow down the default interface + # explicit declaration of getters/setters + ######################################################## + property qname: + """deprecated, use query_name instead""" + def __get__(self): return self.query_name + def __set__(self, v): self.query_name = v + property tid: + """deprecated, use reference_id instead""" + def __get__(self): return self.reference_id + def __set__(self, v): self.reference_id = v + property pos: + """deprecated, use reference_start instead""" + def __get__(self): return self.reference_start + def __set__(self, v): self.reference_start = v + property mapq: + """deprecated, use mapping_quality instead""" + def __get__(self): return self.mapping_quality + def __set__(self, v): self.mapping_quality = v + property rnext: + """deprecated, use next_reference_id instead""" + def __get__(self): return self.next_reference_id + def __set__(self, v): self.next_reference_id = v + property pnext: + """deprecated, use next_reference_start instead""" + def __get__(self): + return self.next_reference_start + def __set__(self, v): + self.next_reference_start = v + property cigar: + """deprecated, use cigartuples instead""" + def __get__(self): + r = self.cigartuples + if r is None: + r = [] + return r + def __set__(self, v): self.cigartuples = v + property tlen: + """deprecated, use template_length instead""" + def __get__(self): + return self.template_length + def __set__(self, v): + self.template_length = v + property seq: + """deprecated, use query_sequence instead""" + def __get__(self): + return self.query_sequence + def __set__(self, v): + self.query_sequence = v + property qual: + """deprecated, query_qualities instead""" + def __get__(self): + return array_to_qualitystring(self.query_qualities) + def __set__(self, v): + self.query_qualities = qualitystring_to_array(v) + property alen: + """deprecated, reference_length instead""" + def __get__(self): + return self.reference_length + def __set__(self, v): + self.reference_length = v + property aend: + """deprecated, reference_end instead""" + def __get__(self): + return self.reference_end + def __set__(self, v): + self.reference_end = v + property rlen: + """deprecated, query_length instead""" + def __get__(self): + return self.query_length + def __set__(self, v): + self.query_length = v + property query: + """deprecated, query_alignment_sequence instead""" + def __get__(self): + return self.query_alignment_sequence + def __set__(self, v): + self.query_alignment_sequence = v + property qqual: + """deprecated, query_alignment_qualities instead""" + def __get__(self): + return array_to_qualitystring(self.query_alignment_qualities) + def __set__(self, v): + self.query_alignment_qualities = qualitystring_to_array(v) + property qstart: + """deprecated, use query_alignment_start instead""" + def __get__(self): + return self.query_alignment_start + def __set__(self, v): + self.query_alignment_start = v + property qend: + """deprecated, use query_alignment_end instead""" + def __get__(self): + return self.query_alignment_end + def __set__(self, v): + self.query_alignment_end = v + property qlen: + """deprecated, use query_alignment_length instead""" + def __get__(self): + return self.query_alignment_length + def __set__(self, v): + self.query_alignment_length = v + property mrnm: + """deprecated, use next_reference_id instead""" + def __get__(self): + return self.next_reference_id + def __set__(self, v): + self.next_reference_id = v + property mpos: + """deprecated, use next_reference_start instead""" + def __get__(self): + return self.next_reference_start + def __set__(self, v): + self.next_reference_start = v + property rname: + """deprecated, use reference_id instead""" + def __get__(self): + return self.reference_id + def __set__(self, v): + self.reference_id = v + property isize: + """deprecated, use template_length instead""" + def __get__(self): + return self.template_length + def __set__(self, v): + self.template_length = v + property blocks: + """deprecated, use get_blocks() instead""" + def __get__(self): + return self.get_blocks() + property aligned_pairs: + """deprecated, use get_aligned_pairs() instead""" + def __get__(self): + return self.get_aligned_pairs() + property inferred_length: + """deprecated, use infer_query_length() instead""" + def __get__(self): + return self.infer_query_length() + property positions: + """deprecated, use get_reference_positions() instead""" + def __get__(self): + return self.get_reference_positions() + property tags: + """deprecated, use get_tags() instead""" + def __get__(self): + return self.get_tags() + def __set__(self, tags): + self.set_tags(tags) + def overlap(self): + """deprecated, use get_overlap() instead""" + return self.get_overlap() + def opt(self, tag): + """deprecated, use get_tag() instead""" + return self.get_tag(tag) + def setTag(self, tag, value, value_type=None, replace=True): + """deprecated, use set_tag() instead""" + return self.set_tag(tag, value, value_type, replace) + + +cdef class PileupColumn: + '''A pileup of reads at a particular reference sequence position + (:term:`column`). A pileup column contains all the reads that map + to a certain target base. + + This class is a proxy for results returned by the samtools pileup + engine. If the underlying engine iterator advances, the results + of this column will change. + ''' + def __init__(self): + raise TypeError("this class cannot be instantiated from Python") + + def __str__(self): + return "\t".join(map(str, + (self.reference_id, + self.reference_pos, + self.nsegments))) +\ + "\n" +\ + "\n".join(map(str, self.pileups)) + + def __dealloc__(self): + if self.buf is not NULL: + free(self.buf) + + def set_min_base_quality(self, min_base_quality): + """set the minimum base quality for this pileup column. + """ + self.min_base_quality = min_base_quality + + def __len__(self): + """return number of reads aligned to this column. + + see :meth:`get_num_aligned` + """ + return self.get_num_aligned() + + property reference_id: + '''the reference sequence number as defined in the header''' + def __get__(self): + return self.tid + + property reference_name: + """:term:`reference` name (None if no AlignmentFile is associated)""" + def __get__(self): + if self._alignment_file is not None: + return self._alignment_file.getrname(self.tid) + return None + + property nsegments: + '''number of reads mapping to this column. + + Note that this number ignores the base quality filter.''' + def __get__(self): + return self.n_pu + def __set__(self, n): + self.n_pu = n + + property reference_pos: + '''the position in the reference sequence (0-based).''' + def __get__(self): + return self.pos + + property pileups: + '''list of reads (:class:`pysam.PileupRead`) aligned to this column''' + def __get__(self): + if self.plp == NULL or self.plp[0] == NULL: + raise ValueError("PileupColumn accessed after iterator finished") + + cdef int x + cdef bam_pileup1_t * p = NULL + pileups = [] + + # warning: there could be problems if self.n and self.buf are + # out of sync. + for x from 0 <= x < self.n_pu: + p = &(self.plp[0][x]) + if pileup_base_qual_skip(p, self.min_base_quality): + continue + pileups.append(makePileupRead(p, self.header)) + return pileups + + ######################################################## + # Compatibility Accessors + # Functions, properties for compatibility with pysam < 0.8 + ######################################################## + property pos: + """deprecated: use reference_pos""" + def __get__(self): + return self.reference_pos + def __set__(self, v): + self.reference_pos = v + + property tid: + """deprecated: use reference_id""" + def __get__(self): + return self.reference_id + def __set__(self, v): + self.reference_id = v + + property n: + """deprecated: use nsegments""" + def __get__(self): + return self.nsegments + def __set__(self, v): + self.nsegments = v + + def get_num_aligned(self): + """return number of aligned bases at pileup column position. + + This method applies a base quality filter and the number is + equal to the size of :meth:`get_query_sequences`, + :meth:`get_mapping_qualities`, etc. + + """ + cdef uint32_t x = 0 + cdef uint32_t c = 0 + cdef uint32_t cnt = 0 + cdef bam_pileup1_t * p = NULL + for x from 0 <= x < self.n_pu: + p = &(self.plp[0][x]) + if pileup_base_qual_skip(p, self.min_base_quality): + continue + cnt += 1 + return cnt + + def get_query_sequences(self, bint mark_matches=False, bint mark_ends=False, bint add_indels=False): + """query bases/sequences at pileup column position. + + Optionally, the bases/sequences can be annotated according to the samtools + mpileup format. This is the format description from the samtools mpileup tool:: + + Information on match, mismatch, indel, strand, mapping + quality and start and end of a read are all encoded at the + read base column. At this column, a dot stands for a match + to the reference base on the forward strand, a comma for a + match on the reverse strand, a '>' or '<' for a reference + skip, `ACGTN' for a mismatch on the forward strand and + `acgtn' for a mismatch on the reverse strand. A pattern + `\\+[0-9]+[ACGTNacgtn]+' indicates there is an insertion + between this reference position and the next reference + position. The length of the insertion is given by the + integer in the pattern, followed by the inserted + sequence. Similarly, a pattern `-[0-9]+[ACGTNacgtn]+' + represents a deletion from the reference. The deleted bases + will be presented as `*' in the following lines. Also at + the read base column, a symbol `^' marks the start of a + read. The ASCII of the character following `^' minus 33 + gives the mapping quality. A symbol `$' marks the end of a + read segment + + To reproduce samtools mpileup format, set all of mark_matches, + mark_ends and add_indels to True. + + Parameters + ---------- + + mark_matches: bool + + If True, output bases matching the reference as "," or "." + for forward and reverse strand, respectively. This mark + requires the reference sequence. If no reference is + present, this option is ignored. + + mark_ends : bool + + If True, add markers "^" and "$" for read start and end, respectively. + + add_indels : bool + + If True, add bases for bases inserted into the reference and + 'N's for base skipped from the reference. If a reference sequence + is given, add the actual bases. + + Returns + ------- + + list: a list of bases/sequences per read at pileup column position. + + """ + cdef uint32_t x = 0 + cdef uint32_t j = 0 + cdef uint32_t c = 0 + cdef uint32_t n = 0 + cdef uint8_t cc = 0 + cdef uint8_t rb = 0 + cdef uint8_t * buf = self.buf + cdef bam_pileup1_t * p = NULL + + # todo: reference sequence to count matches/mismatches + # todo: convert assertions to exceptions + for x from 0 <= x < self.n_pu: + p = &(self.plp[0][x]) + if pileup_base_qual_skip(p, self.min_base_quality): + continue + # see samtools pileup_seq + if mark_ends and p.is_head: + buf[n] = '^' + n += 1 + assert n < MAX_PILEUP_BUFFER_SIZE + + if p.b.core.qual > 93: + buf[n] = 126 + else: + buf[n] = p.b.core.qual + 33 + n += 1 + assert n < MAX_PILEUP_BUFFER_SIZE + + if not p.is_del: + if p.qpos < p.b.core.l_qseq: + cc = seq_nt16_str[bam_seqi(bam_get_seq(p.b), p.qpos)] + else: + cc = 'N' + + if mark_matches and self.reference_sequence != NULL: + rb = self.reference_sequence[self.reference_pos] + if seq_nt16_table[cc] == seq_nt16_table[rb]: + cc = "=" + buf[n] = strand_mark_char(cc, p.b) + n += 1 + assert n < MAX_PILEUP_BUFFER_SIZE + elif add_indels: + if p.is_refskip: + if bam_is_rev(p.b): + buf[n] = '<' + else: + buf[n] = '>' + else: + buf[n] = '*' + n += 1 + assert n < MAX_PILEUP_BUFFER_SIZE + if add_indels: + if p.indel > 0: + buf[n] = '+' + n += 1 + assert n < MAX_PILEUP_BUFFER_SIZE + n += snprintf(&(buf[n]), + MAX_PILEUP_BUFFER_SIZE - n, + "%i", + p.indel) + assert n < MAX_PILEUP_BUFFER_SIZE + for j from 1 <= j <= p.indel: + cc = seq_nt16_str[bam_seqi(bam_get_seq(p.b), p.qpos + j)] + buf[n] = strand_mark_char(cc, p.b) + n += 1 + assert n < MAX_PILEUP_BUFFER_SIZE + elif p.indel < 0: + buf[n] = '-' + n += 1 + assert n < MAX_PILEUP_BUFFER_SIZE + n += snprintf(&(buf[n]), + MAX_PILEUP_BUFFER_SIZE - n, + "%i", + -p.indel) + assert n < MAX_PILEUP_BUFFER_SIZE + for j from 1 <= j <= -p.indel: + # TODO: out-of-range check here? + if self.reference_sequence == NULL: + cc = 'N' + else: + cc = self.reference_sequence[self.reference_pos + j] + buf[n] = strand_mark_char(cc, p.b) + n += 1 + assert n < MAX_PILEUP_BUFFER_SIZE + if mark_ends and p.is_tail: + buf[n] = '$' + n += 1 + assert n < MAX_PILEUP_BUFFER_SIZE + + buf[n] = ':' + n += 1 + assert n < MAX_PILEUP_BUFFER_SIZE + + # quicker to ensemble all and split than to encode all separately. + # ignore last ":" + return force_str(PyBytes_FromStringAndSize(buf, n-1)).split(":") + + def get_query_qualities(self): + """query base quality scores at pileup column position. + + Returns + ------- + + list: a list of quality scores + """ + cdef uint32_t x = 0 + cdef bam_pileup1_t * p = NULL + cdef uint32_t c = 0 + result = [] + for x from 0 <= x < self.n_pu: + p = &(self.plp[0][x]) + if p.qpos < p.b.core.l_qseq: + c = bam_get_qual(p.b)[p.qpos] + else: + c = 0 + if c < self.min_base_quality: + continue + result.append(c) + return result + + def get_mapping_qualities(self): + """query mapping quality scores at pileup column position. + + Returns + ------- + + list: a list of quality scores + """ + cdef uint32_t x = 0 + cdef bam_pileup1_t * p = NULL + result = [] + for x from 0 <= x < self.n_pu: + p = &(self.plp[0][x]) + if pileup_base_qual_skip(p, self.min_base_quality): + continue + result.append(p.b.core.qual) + return result + + def get_query_positions(self): + """positions in read at pileup column position. + + Returns + ------- + + list: a list of read positions + """ + + cdef uint32_t x = 0 + cdef bam_pileup1_t * p = NULL + result = [] + for x from 0 <= x < self.n_pu: + p = &(self.plp[0][x]) + if pileup_base_qual_skip(p, self.min_base_quality): + continue + result.append(p.qpos) + return result + + def get_query_names(self): + """query/read names aligned at pileup column position. + + Returns + ------- + + list: a list of query names at pileup column position. + """ + cdef uint32_t x = 0 + cdef bam_pileup1_t * p = NULL + result = [] + for x from 0 <= x < self.n_pu: + p = &(self.plp[0][x]) + if pileup_base_qual_skip(p, self.min_base_quality): + continue + result.append(charptr_to_str(pysam_bam_get_qname(p.b))) + return result + + +cdef class PileupRead: + '''Representation of a read aligned to a particular position in the + reference sequence. + + ''' + + def __init__(self): + raise TypeError( + "this class cannot be instantiated from Python") + + def __str__(self): + return "\t".join( + map(str, + (self.alignment, self.query_position, + self.indel, self.level, + self.is_del, self.is_head, + self.is_tail, self.is_refskip))) + + property alignment: + """a :class:`pysam.AlignedSegment` object of the aligned read""" + def __get__(self): + return self._alignment + + property query_position: + """position of the read base at the pileup site, 0-based. + None if is_del or is_refskip is set. + + """ + def __get__(self): + if self.is_del or self.is_refskip: + return None + else: + return self._qpos + + property query_position_or_next: + """position of the read base at the pileup site, 0-based. + + If the current position is a deletion, returns the next + aligned base. + + """ + def __get__(self): + return self._qpos + + property indel: + """indel length for the position following the current pileup site. + + This quantity peeks ahead to the next cigar operation in this + alignment. If the next operation is an insertion, indel will + be positive. If the next operation is a deletion, it will be + negation. 0 if the next operation is not an indel. + + """ + def __get__(self): + return self._indel + + property level: + """the level of the read in the "viewer" mode. Note that this value + is currently not computed.""" + def __get__(self): + return self._level + + property is_del: + """1 iff the base on the padded read is a deletion""" + def __get__(self): + return self._is_del + + property is_head: + """1 iff the base on the padded read is the left-most base.""" + def __get__(self): + return self._is_head + + property is_tail: + """1 iff the base on the padded read is the right-most base.""" + def __get__(self): + return self._is_tail + + property is_refskip: + """1 iff the base on the padded read is part of CIGAR N op.""" + def __get__(self): + return self._is_refskip + + + +cpdef enum CIGAR_OPS: + CMATCH = 0 + CINS = 1 + CDEL = 2 + CREF_SKIP = 3 + CSOFT_CLIP = 4 + CHARD_CLIP = 5 + CPAD = 6 + CEQUAL = 7 + CDIFF = 8 + CBACK = 9 + + +cpdef enum SAM_FLAGS: + # the read is paired in sequencing, no matter whether it is mapped in a pair + FPAIRED = 1 + # the read is mapped in a proper pair + FPROPER_PAIR = 2 + # the read itself is unmapped; conflictive with FPROPER_PAIR + FUNMAP = 4 + # the mate is unmapped + FMUNMAP = 8 + # the read is mapped to the reverse strand + FREVERSE = 16 + # the mate is mapped to the reverse strand + FMREVERSE = 32 + # this is read1 + FREAD1 = 64 + # this is read2 + FREAD2 = 128 + # not primary alignment + FSECONDARY = 256 + # QC failure + FQCFAIL = 512 + # optical or PCR duplicate + FDUP = 1024 + # supplementary alignment + FSUPPLEMENTARY = 2048 + + +__all__ = [ + "AlignedSegment", + "PileupColumn", + "PileupRead", + "CMATCH", + "CINS", + "CDEL", + "CREF_SKIP", + "CSOFT_CLIP", + "CHARD_CLIP", + "CPAD", + "CEQUAL", + "CDIFF", + "CBACK", + "FPAIRED", + "FPROPER_PAIR", + "FUNMAP", + "FMUNMAP", + "FREVERSE", + "FMREVERSE", + "FREAD1", + "FREAD2", + "FSECONDARY", + "FQCFAIL", + "FDUP", + "FSUPPLEMENTARY", + "KEY_NAMES"] diff --git a/pysam/libcalignmentfile.pxd b/pysam/libcalignmentfile.pxd new file mode 100644 index 0000000..7410230 --- /dev/null +++ b/pysam/libcalignmentfile.pxd @@ -0,0 +1,165 @@ +from libc.stdint cimport int8_t, int16_t, int32_t, int64_t +from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t +from libc.stdlib cimport malloc, calloc, realloc, free +from libc.string cimport memcpy, memcmp, strncpy, strlen, strdup +from libc.stdio cimport FILE, printf + +from pysam.libcfaidx cimport faidx_t, FastaFile +from pysam.libcalignedsegment cimport AlignedSegment +from pysam.libchtslib cimport * + +from cpython cimport array +cimport cython + +cdef extern from *: + ctypedef char* const_char_ptr "const char*" + +cdef extern from "htslib_util.h": + + char * pysam_bam_get_qname(bam1_t * b) + +#################################################################### +# Utility types + +ctypedef struct __iterdata: + htsFile * htsfile + bam_hdr_t * header + hts_itr_t * iter + faidx_t * fastafile + int tid + char * seq + int seq_len + int min_mapping_quality + int flag_require + int flag_filter + bint compute_baq + bint redo_baq + bint ignore_orphans + int adjust_capq_threshold + + +cdef class AlignmentHeader(object): + cdef bam_hdr_t *ptr + +cdef class AlignmentFile(HTSFile): + cdef readonly object reference_filename + cdef readonly AlignmentHeader header + + # pointer to index + cdef hts_idx_t *index + + # current read within iteration + cdef bam1_t * b + + cdef bam1_t * getCurrent(self) + cdef int cnext(self) + + # write an aligned read + cpdef int write(self, AlignedSegment read) except -1 + + +cdef class PileupColumn: + cdef bam_pileup1_t ** plp + cdef int tid + cdef int pos + cdef int n_pu + + +cdef class PileupRead: + cdef AlignedSegment _alignment + cdef int32_t _qpos + cdef int _indel + cdef int _level + cdef uint32_t _is_del + cdef uint32_t _is_head + cdef uint32_t _is_tail + cdef uint32_t _is_refskip + + +cdef class IteratorRow: + cdef int retval + cdef bam1_t * b + cdef AlignmentFile samfile + cdef htsFile * htsfile + cdef hts_idx_t * index + cdef AlignmentHeader header + cdef int owns_samfile + + +cdef class IteratorRowRegion(IteratorRow): + cdef hts_itr_t * iter + cdef bam1_t * getCurrent(self) + cdef int cnext(self) + + +cdef class IteratorRowHead(IteratorRow): + cdef int max_rows + cdef int current_row + cdef bam1_t * getCurrent(self) + cdef int cnext(self) + + +cdef class IteratorRowAll(IteratorRow): + cdef bam1_t * getCurrent(self) + cdef int cnext(self) + + +cdef class IteratorRowAllRefs(IteratorRow): + cdef int tid + cdef IteratorRowRegion rowiter + + +cdef class IteratorRowSelection(IteratorRow): + cdef int current_pos + cdef positions + cdef bam1_t * getCurrent(self) + cdef int cnext(self) + + +cdef class IteratorColumn: + + # result of the last plbuf_push + cdef IteratorRowRegion iter + cdef int tid + cdef int pos + cdef int n_plp + cdef uint32_t min_base_quality + cdef bam_pileup1_t * plp + cdef bam_mplp_t pileup_iter + cdef __iterdata iterdata + cdef AlignmentFile samfile + cdef FastaFile fastafile + cdef stepper + cdef int max_depth + cdef bint ignore_overlaps + + cdef int cnext(self) + cdef char * get_sequence(self) + cdef _setup_iterator(self, + int tid, + int start, + int stop, + int multiple_iterators=?) + + cdef reset(self, tid, start, stop) + cdef _free_pileup_iter(self) + # backwards compatibility + cdef char * getSequence(self) + + +cdef class IteratorColumnRegion(IteratorColumn): + cdef int start + cdef int stop + cdef int truncate + + +cdef class IteratorColumnAllRefs(IteratorColumn): + pass + + +cdef class IndexedReads: + cdef AlignmentFile samfile + cdef htsFile * htsfile + cdef object index + cdef int owns_samfile + cdef AlignmentHeader header diff --git a/pysam/libcalignmentfile.pyx b/pysam/libcalignmentfile.pyx new file mode 100644 index 0000000..439cc55 --- /dev/null +++ b/pysam/libcalignmentfile.pyx @@ -0,0 +1,2805 @@ +# cython: embedsignature=True +# cython: profile=True +######################################################## +######################################################## +# Cython wrapper for SAM/BAM/CRAM files based on htslib +######################################################## +# The principal classes defined in this module are: +# +# class AlignmentFile read/write access to SAM/BAM/CRAM formatted files +# +# class AlignmentHeader manage SAM/BAM/CRAM header data +# +# class IndexedReads index a SAM/BAM/CRAM file by query name while keeping +# the original sort order intact +# +# Additionally this module defines numerous additional classes that +# are part of the internal API. These are: +# +# Various iterator classes to iterate over alignments in sequential +# (IteratorRow) or in a stacked fashion (IteratorColumn): +# +# class IteratorRow +# class IteratorRowRegion +# class IteratorRowHead +# class IteratorRowAll +# class IteratorRowAllRefs +# class IteratorRowSelection +# class IteratorColumn +# class IteratorColumnRegion +# class IteratorColumnAllRefs +# +######################################################## +# +# The MIT License +# +# Copyright (c) 2015 Andreas Heger +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +######################################################## +import os +import collections +import re +import warnings +import array +from libc.errno cimport errno, EPIPE +from libc.string cimport strcmp, strpbrk, strerror +from cpython cimport array as c_array +from cpython.version cimport PY_MAJOR_VERSION + +from pysam.libcutils cimport force_bytes, force_str, charptr_to_str +from pysam.libcutils cimport encode_filename, from_string_and_size +from pysam.libcalignedsegment cimport makeAlignedSegment, makePileupColumn +from pysam.libchtslib cimport HTSFile, hisremote + +if PY_MAJOR_VERSION >= 3: + from io import StringIO +else: + from StringIO import StringIO + +cimport cython + + +__all__ = [ + "AlignmentFile", + "AlignmentHeader", + "IteratorRow", + "IteratorColumn", + "IndexedReads"] + +IndexStats = collections.namedtuple("IndexStats", + ("contig", + "mapped", + "unmapped", + "total")) + +######################################################## +## global variables +# maximum genomic coordinace +cdef int MAX_POS = 2 << 29 + +# valid types for SAM headers +VALID_HEADER_TYPES = {"HD" : collections.Mapping, + "SQ" : collections.Sequence, + "RG" : collections.Sequence, + "PG" : collections.Sequence, + "CO" : collections.Sequence} + +# order of records within SAM headers +VALID_HEADERS = ("HD", "SQ", "RG", "PG", "CO") + +# default type conversions within SAM header records +KNOWN_HEADER_FIELDS = {"HD" : {"VN" : str, "SO" : str, "GO" : str}, + "SQ" : {"SN" : str, "LN" : int, "AS" : str, + "M5" : str, "SP" : str, "UR" : str, + "AH" : str,}, + "RG" : {"ID" : str, "CN" : str, "DS" : str, + "DT" : str, "FO" : str, "KS" : str, + "LB" : str, "PG" : str, "PI" : str, + "PL" : str, "PM" : str, "PU" : str, + "SM" : str,}, + "PG" : {"ID" : str, "PN" : str, "CL" : str, + "PP" : str, "DS" : str, "VN" : str,},} + +# output order of fields within records. Ensure that CL is at +# the end as parsing a CL will ignore any subsequent records. +VALID_HEADER_ORDER = {"HD" : ("VN", "SO", "GO"), + "SQ" : ("SN", "LN", "AS", "M5", + "UR", "SP", "AH"), + "RG" : ("ID", "CN", "SM", "LB", + "PU", "PI", "DT", "DS", + "PL", "FO", "KS", "PG", + "PM"), + "PG" : ("PN", "ID", "VN", "PP", + "DS", "CL"),} + + +def build_header_line(fields, record): + '''build a header line from `fields` dictionary for `record`''' + + # TODO: add checking for field and sort order + line = ["@%s" % record] + # comment + if record == "CO": + line.append(fields) + # user tags + elif record.islower(): + for key in sorted(fields): + line.append("%s:%s" % (key, str(fields[key]))) + # defined tags + else: + # write fields of the specification + for key in VALID_HEADER_ORDER[record]: + if key in fields: + line.append("%s:%s" % (key, str(fields[key]))) + # write user fields + for key in fields: + if not key.isupper(): + line.append("%s:%s" % (key, str(fields[key]))) + + return "\t".join(line) + + +cdef AlignmentHeader makeAlignmentHeader(bam_hdr_t *hdr): + if not hdr: + raise ValueError('cannot create AlignmentHeader, received NULL pointer') + + # check: is AlignmetHeader.__cinit__ called? + cdef AlignmentHeader header = AlignmentHeader.__new__(AlignmentHeader) + header.ptr = hdr + + return header + + +# the following should be class-method for VariantHeader, but cdef @classmethods +# are not implemented in cython. +cdef int fill_AlignmentHeader_from_list(bam_hdr_t *dest, + reference_names, + reference_lengths, + add_sq_text=True, + text=None) except -1: + """build header from list of reference names and lengths. + """ + +cdef class AlignmentHeader(object): + """header information for a :class:`AlignmentFile` object + + Parameters + ---------- + header_dict : dict + build header from a multi-level dictionary. The + first level are the four types ('HD', 'SQ', ...). The second + level are a list of lines, with each line being a list of + tag-value pairs. The header is constructed first from all the + defined fields, followed by user tags in alphabetical + order. Alternatively, an :class:`~pysam.AlignmentHeader` + object can be passed directly. + + text : string + use the string provided as the header + + reference_names : list + see reference_lengths + + reference_lengths : list + build header from list of chromosome names and lengths. By + default, 'SQ' and 'LN' tags will be added to the header + text. This option can be changed by unsetting the flag + `add_sq_text`. + + add_sq_text : bool + do not add 'SQ' and 'LN' tags to header. This option permits + construction :term:`SAM` formatted files without a header. + + """ + + # See makeVariantHeader for C constructor + def __cinit__(self): + self.ptr = NULL + + # Python constructor + def __init__(self): + self.ptr = bam_hdr_init() + if self.ptr is NULL: + raise MemoryError("could not create header") + + @classmethod + def _from_text_and_lengths(cls, text, reference_names, reference_lengths): + + cdef AlignmentHeader self = AlignmentHeader() + cdef char *ctext + cdef int l_text + cdef int n, x + if text is not None: + btext = force_bytes(text) + ctext = btext + l_text = len(btext) + self.ptr.text = calloc(l_text + 1, sizeof(char)) + if self.ptr.text == NULL: + raise MemoryError("could not allocate {} bytes".format(l_text + 1), sizeof(char)) + self.ptr.l_text = l_text + memcpy(self.ptr.text, ctext, l_text + 1) + + if reference_names and reference_lengths: + reference_names = [force_bytes(ref) for ref in reference_names] + + self.ptr.n_targets = len(reference_names) + + n = sum([len(reference_names) + 1]) + self.ptr.target_name = calloc(n, sizeof(char*)) + if self.ptr.target_name == NULL: + raise MemoryError("could not allocate {} bytes".format(n, sizeof(char *))) + + self.ptr.target_len = calloc(n, sizeof(uint32_t)) + if self.ptr.target_len == NULL: + raise MemoryError("could not allocate {} bytes".format(n, sizeof(uint32_t))) + + for x from 0 <= x < self.ptr.n_targets: + self.ptr.target_len[x] = reference_lengths[x] + name = reference_names[x] + self.ptr.target_name[x] = calloc(len(name) + 1, sizeof(char)) + if self.ptr.target_name[x] == NULL: + raise MemoryError("could not allocate {} bytes".format(len(name) + 1, sizeof(char))) + strncpy(self.ptr.target_name[x], name, len(name)) + + return self + + @classmethod + def from_text(cls, text): + + reference_names, reference_lengths = [], [] + for line in text.splitlines(): + if line.startswith("@SQ"): + fields = dict([x.split(":", 1) for x in line.split("\t")[1:]]) + try: + reference_names.append(fields["SN"]) + reference_lengths.append(int(fields["LN"])) + except KeyError: + raise KeyError("incomplete sequence information in '%s'" % str(fields)) + except ValueError: + raise ValueError("wrong sequence information in '%s'" % str(fields)) + + return cls._from_text_and_lengths(text, reference_names, reference_lengths) + + @classmethod + def from_dict(cls, header_dict): + + cdef list lines = [] + # first: defined tags + for record in VALID_HEADERS: + if record in header_dict: + data = header_dict[record] + if not isinstance(data, VALID_HEADER_TYPES[record]): + raise ValueError( + "invalid type for record %s: %s, expected %s".format( + record, type(data), VALID_HEADER_TYPES[record])) + if isinstance(data, collections.Mapping): + lines.append(build_header_line(data, record)) + else: + for fields in header_dict[record]: + lines.append(build_header_line(fields, record)) + + # then: user tags (lower case), sorted alphabetically + for record, data in sorted(header_dict.items()): + if record in VALID_HEADERS: + continue + if isinstance(data, collections.Mapping): + lines.append(build_header_line(data, record)) + else: + for fields in header_dict[record]: + lines.append(build_header_line(fields, record)) + + text = "\n".join(lines) + "\n" + + reference_names, reference_lengths = [], [] + if "SQ" in header_dict: + for fields in header_dict["SQ"]: + try: + reference_names.append(fields["SN"]) + reference_lengths.append(fields["LN"]) + except KeyError: + raise KeyError("incomplete sequence information in '%s'" % str(fields)) + + return cls._from_text_and_lengths(text, reference_names, reference_lengths) + + @classmethod + def from_references(cls, reference_names, reference_lengths, text=None, add_sq_text=True): + + if len(reference_names) != len(reference_lengths): + raise ValueError("number of reference names and lengths do not match") + + # optionally, if there is no text, add a SAM compatible header to output file. + if text is None and add_sq_text: + text = "".join(["@SQ\tSN:{}\tLN:{}\n".format(x, y) for x, y in zip( + reference_names, reference_lengths)]) + + return cls._from_text_and_lengths(text, reference_names, reference_lengths) + + def __dealloc__(self): + bam_hdr_destroy(self.ptr) + self.ptr = NULL + + def __bool__(self): + return self.ptr != NULL + + def copy(self): + return makeAlignmentHeader(bam_hdr_dup(self.ptr)) + + property nreferences: + """"int with the number of :term:`reference` sequences in the file. + + This is a read-only attribute.""" + def __get__(self): + return self.ptr.n_targets + + property references: + """tuple with the names of :term:`reference` sequences. This is a + read-only attribute""" + def __get__(self): + t = [] + cdef int x + for x in range(self.ptr.n_targets): + t.append(charptr_to_str(self.ptr.target_name[x])) + return tuple(t) + + property lengths: + """tuple of the lengths of the :term:`reference` sequences. This is a + read-only attribute. The lengths are in the same order as + :attr:`pysam.AlignmentFile.references` + """ + def __get__(self): + t = [] + cdef int x + for x in range(self.ptr.n_targets): + t.append(self.ptr.target_len[x]) + return tuple(t) + + def _build_sequence_section(self): + """return sequence section of header. + + The sequence section is built from the list of reference names and + lengths stored in the BAM-file and not from any @SQ entries that + are part of the header's text section. + """ + + cdef int x + text = [] + for x in range(self.ptr.n_targets): + text.append("@SQ\tSN:{}\tLN:{}\n".format( + force_str(self.ptr.target_name[x]), + self.ptr.target_len[x])) + return "".join(text) + + def to_dict(self): + """return two-level dictionary with header information from the file. + + The first level contains the record (``HD``, ``SQ``, etc) and + the second level contains the fields (``VN``, ``LN``, etc). + + The parser is validating and will raise an AssertionError if + if encounters any record or field tags that are not part of + the SAM specification. Use the + :attr:`pysam.AlignmentFile.text` attribute to get the unparsed + header. + + The parsing follows the SAM format specification with the + exception of the ``CL`` field. This option will consume the + rest of a header line irrespective of any additional fields. + This behaviour has been added to accommodate command line + options that contain characters that are not valid field + separators. + + If no @SQ entries are within the text section of the header, + this will be automatically added from the reference names and + lengths stored in the binary part of the header. + """ + result = collections.OrderedDict() + + # convert to python string + t = self.__str__() + for line in t.split("\n"): + if not line.strip(): + continue + assert line.startswith("@"), \ + "header line without '@': '%s'" % line + fields = line[1:].split("\t") + record = fields[0] + assert record in VALID_HEADER_TYPES, \ + "header line with invalid type '%s': '%s'" % (record, line) + + # treat comments + if record == "CO": + if record not in result: + result[record] = [] + result[record].append("\t".join( fields[1:])) + continue + # the following is clumsy as generators do not work? + x = {} + + for idx, field in enumerate(fields[1:]): + if ":" not in field: + raise ValueError("malformatted header: no ':' in field" ) + key, value = field.split(":", 1) + if key in ("CL",): + # special treatment for command line + # statements (CL). These might contain + # characters that are non-conformant with + # the valid field separators in the SAM + # header. Thus, in contravention to the + # SAM API, consume the rest of the line. + key, value = "\t".join(fields[idx+1:]).split(":", 1) + x[key] = KNOWN_HEADER_FIELDS[record][key](value) + break + + # interpret type of known header record tags, default to str + x[key] = KNOWN_HEADER_FIELDS[record].get(key, str)(value) + + if VALID_HEADER_TYPES[record] == collections.Mapping: + if record in result: + raise ValueError( + "multiple '%s' lines are not permitted" % record) + + result[record] = x + elif VALID_HEADER_TYPES[record] == collections.Sequence: + if record not in result: result[record] = [] + result[record].append(x) + + # if there are no SQ lines in the header, add the + # reference names from the information in the bam + # file. + # + # Background: c-samtools keeps the textual part of the + # header separate from the list of reference names and + # lengths. Thus, if a header contains only SQ lines, + # the SQ information is not part of the textual header + # and thus are missing from the output. See issue 84. + if "SQ" not in result: + sq = [] + for ref, length in zip(self.references, self.lengths): + sq.append({'LN': length, 'SN': ref }) + result["SQ"] = sq + + return result + + def as_dict(self): + """deprecated: use :meth:`to_dict()`""" + return self.to_dict() + + def get_reference_name(self, tid): + if tid == -1: + return None + if not 0 <= tid < self.ptr.n_targets: + raise ValueError("reference_id %i out of range 0<=tid<%i" % + (tid, self.ptr.n_targets)) + return charptr_to_str(self.ptr.target_name[tid]) + + def get_reference_length(self, reference): + cdef int tid = self.get_tid(reference) + if tid < 0: + raise KeyError("unknown reference {}".format(reference)) + else: + return self.ptr.target_len[tid] + + def is_valid_tid(self, int tid): + """ + return True if the numerical :term:`tid` is valid; False otherwise. + + Note that the unmapped tid code (-1) counts as an invalid. + """ + return 0 <= tid < self.ptr.n_targets + + def get_tid(self, reference): + """ + return the numerical :term:`tid` corresponding to + :term:`reference` + + returns -1 if reference is not known. + """ + reference = force_bytes(reference) + return bam_name2id(self.ptr, reference) + + def __str__(self): + '''string with the full contents of the :term:`sam file` header as a + string. + + If no @SQ entries are within the text section of the header, + this will be automatically added from the reference names and + lengths stored in the binary part of the header. + + See :attr:`pysam.AlignmentFile.header.to_dict()` to get a parsed + representation of the header. + ''' + text = from_string_and_size(self.ptr.text, self.ptr.l_text) + if "@SQ" not in text: + text += "\n" + self._build_sequence_section() + return text + + # dictionary access methods, for backwards compatibility. + def __setitem__(self, key, value): + raise TypeError("AlignmentHeader does not support item assignment (use header.to_dict()") + + def __getitem__(self, key): + return self.to_dict().__getitem__(key) + + def items(self): + return self.to_dict().items() + + # PY2 compatibility + def iteritems(self): + return self.to_dict().items() + + def keys(self): + return self.to_dict().keys() + + def values(self): + return self.to_dict().values() + + def get(self, *args): + return self.to_dict().get(*args) + + def __len__(self): + return self.to_dict().__len__() + + def __contains__(self, key): + return self.to_dict().__contains__(key) + + +cdef class AlignmentFile(HTSFile): + """AlignmentFile(filepath_or_object, mode=None, template=None, + reference_names=None, reference_lengths=None, text=NULL, + header=None, add_sq_text=False, check_header=True, check_sq=True, + reference_filename=None, filename=None, index_filename=None, + filepath_index=None, require_index=False, duplicate_filehandle=True, + ignore_truncation=False) + + A :term:`SAM`/:term:`BAM`/:term:`CRAM` formatted file. + + If `filepath_or_object` is a string, the file is automatically + opened. If `filepath_or_object` is a python File object, the + already opened file will be used. + + If the file is opened for reading and an index exists (if file is BAM, a + .bai file or if CRAM a .crai file), it will be opened automatically. + `index_filename` may be specified explicitly. If the index is not named + in the standard manner, not located in the same directory as the + BAM/CRAM file, or is remote. Without an index, random access via + :meth:`~pysam.AlignmentFile.fetch` and :meth:`~pysam.AlignmentFile.pileup` + is disabled. + + For writing, the header of a :term:`SAM` file/:term:`BAM` file can + be constituted from several sources (see also the samtools format + specification): + + 1. If `template` is given, the header is copied from a another + `AlignmentFile` (`template` must be a + :class:`~pysam.AlignmentFile`). + + 2. If `header` is given, the header is built from a + multi-level dictionary. + + 3. If `text` is given, new header text is copied from raw + text. + + 4. The names (`reference_names`) and lengths + (`reference_lengths`) are supplied directly as lists. + + When reading or writing a CRAM file, the filename of a FASTA-formatted + reference can be specified with `reference_filename`. + + By default, if a file is opened in mode 'r', it is checked + for a valid header (`check_header` = True) and a definition of + chromosome names (`check_sq` = True). + + Parameters + ---------- + mode : string + `mode` should be ``r`` for reading or ``w`` for writing. The + default is text mode (:term:`SAM`). For binary (:term:`BAM`) + I/O you should append ``b`` for compressed or ``u`` for + uncompressed :term:`BAM` output. Use ``h`` to output header + information in text (:term:`TAM`) mode. Use ``c`` for + :term:`CRAM` formatted files. + + If ``b`` is present, it must immediately follow ``r`` or + ``w``. Valid modes are ``r``, ``w``, ``wh``, ``rb``, ``wb``, + ``wbu``, ``wb0``, ``rc`` and ``wc``. For instance, to open a + :term:`BAM` formatted file for reading, type:: + + f = pysam.AlignmentFile('ex1.bam','rb') + + If mode is not specified, the method will try to auto-detect + in the order 'rb', 'r', thus both the following should work:: + + f1 = pysam.AlignmentFile('ex1.bam') + f2 = pysam.AlignmentFile('ex1.sam') + + template : AlignmentFile + when writing, copy header from file `template`. + + header : dict or AlignmentHeader + when writing, build header from a multi-level dictionary. The + first level are the four types ('HD', 'SQ', ...). The second + level are a list of lines, with each line being a list of + tag-value pairs. The header is constructed first from all the + defined fields, followed by user tags in alphabetical + order. Alternatively, an :class:`~pysam.AlignmentHeader` + object can be passed directly. + + text : string + when writing, use the string provided as the header + + reference_names : list + see reference_lengths + + reference_lengths : list + when writing or opening a SAM file without header build header + from list of chromosome names and lengths. By default, 'SQ' + and 'LN' tags will be added to the header text. This option + can be changed by unsetting the flag `add_sq_text`. + + add_sq_text : bool + do not add 'SQ' and 'LN' tags to header. This option permits + construction :term:`SAM` formatted files without a header. + + add_sam_header : bool + when outputting SAM the default is to output a header. This is + equivalent to opening the file in 'wh' mode. If this option is + set to False, no header will be output. To read such a file, + set `check_header=False`. + + check_header : bool + obsolete: when reading a SAM file, check if header is present + (default=True) + + check_sq : bool + when reading, check if SQ entries are present in header + (default=True) + + reference_filename : string + Path to a FASTA-formatted reference file. Valid only for CRAM files. + When reading a CRAM file, this overrides both ``$REF_PATH`` and the URL + specified in the header (``UR`` tag), which are normally used to find + the reference. + + index_filename : string + Explicit path to the index file. Only needed if the index is not + named in the standard manner, not located in the same directory as + the BAM/CRAM file, or is remote. An IOError is raised if the index + cannot be found or is invalid. + + filepath_index : string + Alias for `index_filename`. + + require_index : bool + When reading, require that an index file is present and is valid or + raise an IOError. (default=False) + + filename : string + Alternative to filepath_or_object. Filename of the file + to be opened. + + duplicate_filehandle: bool + By default, file handles passed either directly or through + File-like objects will be duplicated before passing them to + htslib. The duplication prevents issues where the same stream + will be closed by htslib and through destruction of the + high-level python object. Set to False to turn off + duplication. + + ignore_truncation: bool + Issue a warning, instead of raising an error if the current file + appears to be truncated due to a missing EOF marker. Only applies + to bgzipped formats. (Default=False) + + format_options: list + A list of key=value strings, as accepted by --input-fmt-option and + --output-fmt-option in samtools. + """ + + def __cinit__(self, *args, **kwargs): + self.htsfile = NULL + self.filename = None + self.mode = None + self.is_stream = False + self.is_remote = False + self.index = NULL + + if "filename" in kwargs: + args = [kwargs["filename"]] + del kwargs["filename"] + + self._open(*args, **kwargs) + + # allocate memory for iterator + self.b = calloc(1, sizeof(bam1_t)) + if self.b == NULL: + raise MemoryError("could not allocate memory of size {}".format(sizeof(bam1_t))) + + def has_index(self): + """return true if htsfile has an existing (and opened) index. + """ + return self.index != NULL + + def check_index(self): + """return True if index is present. + + Raises + ------ + + AttributeError + if htsfile is :term:`SAM` formatted and thus has no index. + + ValueError + if htsfile is closed or index could not be opened. + """ + + if not self.is_open: + raise ValueError("I/O operation on closed file") + if not self.is_bam and not self.is_cram: + raise AttributeError( + "AlignmentFile.mapped only available in bam files") + if self.index == NULL: + raise ValueError( + "mapping information not recorded in index " + "or index not available") + return True + + def _open(self, + filepath_or_object, + mode=None, + AlignmentFile template=None, + reference_names=None, + reference_lengths=None, + reference_filename=None, + text=None, + header=None, + port=None, + add_sq_text=True, + add_sam_header=True, + check_header=True, + check_sq=True, + index_filename=None, + filepath_index=None, + require_index=False, + referencenames=None, + referencelengths=None, + duplicate_filehandle=True, + ignore_truncation=False, + format_options=None): + '''open a sam, bam or cram formatted file. + + If _open is called on an existing file, the current file + will be closed and a new file will be opened. + + ''' + cdef char *cfilename = NULL + cdef char *creference_filename = NULL + cdef char *cindexname = NULL + cdef char *cmode = NULL + cdef bam_hdr_t * hdr = NULL + + # for backwards compatibility: + if referencenames is not None: + reference_names = referencenames + if referencelengths is not None: + reference_lengths = referencelengths + + # close a previously opened file + if self.is_open: + self.close() + + # autodetection for read + if mode is None: + mode = "r" + + if add_sam_header and mode == "w": + mode = "wh" + + assert mode in ("r", "w", "rb", "wb", "wh", + "wbu", "rU", "wb0", + "rc", "wc"), \ + "invalid file opening mode `%s`" % mode + + self.duplicate_filehandle = duplicate_filehandle + + # StringIO not supported + if isinstance(filepath_or_object, StringIO): + raise NotImplementedError( + "access from StringIO objects not supported") + # reading from a file descriptor + elif isinstance(filepath_or_object, int): + self.filename = filepath_or_object + filename = None + self.is_remote = False + self.is_stream = True + # reading from a File object or other object with fileno + elif hasattr(filepath_or_object, "fileno"): + if filepath_or_object.closed: + raise ValueError('I/O operation on closed file') + self.filename = filepath_or_object + # .name can be TextIOWrapper + try: + filename = encode_filename(str(filepath_or_object.name)) + cfilename = filename + except AttributeError: + filename = None + self.is_remote = False + self.is_stream = True + # what remains is a filename + else: + self.filename = filename = encode_filename(filepath_or_object) + cfilename = filename + self.is_remote = hisremote(cfilename) + self.is_stream = self.filename == b'-' + + # for htslib, wbu seems to not work + if mode == "wbu": + mode = "wb0" + + self.mode = force_bytes(mode) + self.reference_filename = reference_filename = encode_filename( + reference_filename) + + if mode[0] == 'w': + # open file for writing + + if not (template or header or reference_names): + raise ValueError( + "either supply options `template`, `header` or both `reference_names` " + "and `reference_lengths` for writing") + + if template: + # header is copied, though at the moment not strictly + # necessary as AlignmentHeader is immutable. + self.header = template.header.copy() + elif isinstance(header, AlignmentHeader): + self.header = header.copy() + elif isinstance(header, collections.Mapping): + self.header = AlignmentHeader.from_dict(header) + elif reference_names and reference_lengths: + self.header = AlignmentHeader.from_references( + reference_names, + reference_lengths, + add_sq_text=add_sq_text, + text=text) + elif text: + self.header = AlignmentHeader.from_text(text) + else: + raise ValueError("not enough information to construct header. Please provide template, " + "header, text or reference_names/reference_lengths") + + self.htsfile = self._open_htsfile() + + if self.htsfile == NULL: + if errno: + raise IOError(errno, "could not open alignment file `{}`: {}".format( + force_str(filename), + force_str(strerror(errno)))) + else: + raise ValueError("could not open alignment file `{}`".format(force_str(filename))) + if format_options and len(format_options): + self.add_hts_options(format_options) + # set filename with reference sequences. If no filename + # is given, the CRAM reference arrays will be built from + # the @SQ header in the header + if "c" in mode and reference_filename: + # note that fn_aux takes ownership, so create a copy + self.htsfile.fn_aux = strdup(self.reference_filename) + + # write header to htsfile + if "b" in mode or "c" in mode or "h" in mode: + hdr = self.header.ptr + with nogil: + sam_hdr_write(self.htsfile, hdr) + + elif mode[0] == "r": + # open file for reading + self.htsfile = self._open_htsfile() + + if self.htsfile == NULL: + if errno: + raise IOError(errno, "could not open alignment file `{}`: {}".format(force_str(filename), + force_str(strerror(errno)))) + else: + raise ValueError("could not open alignment file `{}`".format(force_str(filename))) + + if self.htsfile.format.category != sequence_data: + raise ValueError("file does not contain alignment data") + + if format_options and len(format_options): + self.add_hts_options(format_options) + + self.check_truncation(ignore_truncation) + + # bam/cram files require a valid header + if self.is_bam or self.is_cram: + with nogil: + hdr = sam_hdr_read(self.htsfile) + if hdr == NULL: + raise ValueError( + "file does not have a valid header (mode='%s') " + "- is it BAM/CRAM format?" % mode) + self.header = makeAlignmentHeader(hdr) + else: + # in sam files a header is optional. If not given, + # user may provide reference names and lengths to built + # an on-the-fly header. + if reference_names and reference_lengths: + # build header from a target names and lengths + self.header = AlignmentHeader.from_references( + reference_names=reference_names, + reference_lengths=reference_lengths, + add_sq_text=add_sq_text, + text=text) + else: + with nogil: + hdr = sam_hdr_read(self.htsfile) + if hdr == NULL: + raise ValueError( + "SAM? file does not have a valid header (mode='%s'), " + "please provide reference_names and reference_lengths") + self.header = makeAlignmentHeader(hdr) + + # set filename with reference sequences + if self.is_cram and reference_filename: + creference_filename = self.reference_filename + hts_set_opt(self.htsfile, + CRAM_OPT_REFERENCE, + creference_filename) + + if check_sq and self.header.nreferences == 0: + raise ValueError( + ("file has no sequences defined (mode='%s') - " + "is it SAM/BAM format? Consider opening with " + "check_sq=False") % mode) + + if self.is_bam or self.is_cram: + self.index_filename = index_filename or filepath_index + if self.index_filename: + cindexname = bfile_name = encode_filename(self.index_filename) + + if cfilename or cindexname: + with nogil: + self.index = sam_index_load2(self.htsfile, cfilename, cindexname) + + if not self.index and (cindexname or require_index): + if errno: + raise IOError(errno, force_str(strerror(errno))) + else: + raise IOError('unable to open index file `%s`' % self.index_filename) + + elif require_index: + raise IOError('unable to open index file') + + # save start of data section + if not self.is_stream: + self.start_offset = self.tell() + + def fetch(self, + contig=None, + start=None, + stop=None, + region=None, + tid=None, + until_eof=False, + multiple_iterators=False, + reference=None, + end=None): + """fetch reads aligned in a :term:`region`. + + See :meth:`AlignmentFile.parse_region` for more information + on genomic regions. :term:`reference` and `end` are also accepted for + backward compatiblity as synonyms for :term:`contig` and `stop`, + respectively. + + Without a `contig` or `region` all mapped reads in the file + will be fetched. The reads will be returned ordered by reference + sequence, which will not necessarily be the order within the + file. This mode of iteration still requires an index. If there is + no index, use `until_eof=True`. + + If only `reference` is set, all reads aligned to `reference` + will be fetched. + + A :term:`SAM` file does not allow random access. If `region` + or `contig` are given, an exception is raised. + + :class:`~pysam.FastaFile` + :class:`~pysam.IteratorRow` + :class:`~pysam.IteratorRow` + :class:`~IteratorRow` + :class:`IteratorRow` + + Parameters + ---------- + + until_eof : bool + + If `until_eof` is True, all reads from the current file + position will be returned in order as they are within the + file. Using this option will also fetch unmapped reads. + + multiple_iterators : bool + + If `multiple_iterators` is True, multiple + iterators on the same file can be used at the same time. The + iterator returned will receive its own copy of a filehandle to + the file effectively re-opening the file. Re-opening a file + creates some overhead, so beware. + + Returns + ------- + + An iterator over a collection of reads. + + Raises + ------ + + ValueError + if the genomic coordinates are out of range or invalid or the + file does not permit random access to genomic coordinates. + + """ + cdef int rtid, rstart, rstop, has_coord + + if not self.is_open: + raise ValueError( "I/O operation on closed file" ) + + has_coord, rtid, rstart, rstop = self.parse_region( + contig, start, stop, region, tid, + end=end, reference=reference) + + # Turn of re-opening if htsfile is a stream + if self.is_stream: + multiple_iterators = False + + if self.is_bam or self.is_cram: + if not until_eof and not self.is_remote: + if not self.has_index(): + raise ValueError( + "fetch called on bamfile without index") + + if has_coord: + return IteratorRowRegion( + self, rtid, rstart, rstop, + multiple_iterators=multiple_iterators) + else: + if until_eof: + return IteratorRowAll( + self, + multiple_iterators=multiple_iterators) + else: + # AH: check - reason why no multiple_iterators for + # AllRefs? + return IteratorRowAllRefs( + self, + multiple_iterators=multiple_iterators) + else: + if has_coord: + raise ValueError( + "fetching by region is not available for SAM files") + + if multiple_iterators == True: + raise ValueError( + "multiple iterators not implemented for SAM files") + + return IteratorRowAll(self, + multiple_iterators=multiple_iterators) + + def head(self, n, multiple_iterators=True): + '''return an iterator over the first n alignments. + + This iterator is is useful for inspecting the bam-file. + + Parameters + ---------- + + multiple_iterators : bool + + is set to True by default in order to + avoid changing the current file position. + + Returns + ------- + + an iterator over a collection of reads + + ''' + return IteratorRowHead(self, n, + multiple_iterators=multiple_iterators) + + def mate(self, AlignedSegment read): + '''return the mate of :class:`~pysam.AlignedSegment` `read`. + + .. note:: + + Calling this method will change the file position. + This might interfere with any iterators that have + not re-opened the file. + + .. note:: + + This method is too slow for high-throughput processing. + If a read needs to be processed with its mate, work + from a read name sorted file or, better, cache reads. + + Returns + ------- + + :class:`~pysam.AlignedSegment` : the mate + + Raises + ------ + + ValueError + if the read is unpaired or the mate is unmapped + + ''' + cdef uint32_t flag = read._delegate.core.flag + + if flag & BAM_FPAIRED == 0: + raise ValueError("read %s: is unpaired" % + (read.query_name)) + if flag & BAM_FMUNMAP != 0: + raise ValueError("mate %s: is unmapped" % + (read.query_name)) + + # xor flags to get the other mate + cdef int x = BAM_FREAD1 + BAM_FREAD2 + flag = (flag ^ x) & x + + # Make sure to use a separate file to jump around + # to mate as otherwise the original file position + # will be lost + # The following code is not using the C API and + # could thus be made much quicker, for example + # by using tell and seek. + for mate in self.fetch( + read._delegate.core.mpos, + read._delegate.core.mpos + 1, + tid=read._delegate.core.mtid, + multiple_iterators=True): + if mate.flag & flag != 0 and \ + mate.query_name == read.query_name: + break + else: + raise ValueError("mate not found") + + return mate + + def pileup(self, + contig=None, + start=None, + stop=None, + region=None, + reference=None, + end=None, + **kwargs): + """perform a :term:`pileup` within a :term:`region`. The region is + specified by :term:`contig`, `start` and `stop` (using + 0-based indexing). :term:`reference` and `end` are also accepted for + backward compatiblity as synonyms for :term:`contig` and `stop`, + respectively. Alternatively, a samtools 'region' string + can be supplied. + + Without 'contig' or 'region' all reads will be used for the + pileup. The reads will be returned ordered by + :term:`contig` sequence, which will not necessarily be the + order within the file. + + Note that :term:`SAM` formatted files do not allow random + access. In these files, if a 'region' or 'contig' are + given an exception is raised. + + .. note:: + + 'all' reads which overlap the region are returned. The + first base returned will be the first base of the first + read 'not' necessarily the first base of the region used + in the query. + + Parameters + ---------- + + truncate : bool + + By default, the samtools pileup engine outputs all reads + overlapping a region. If truncate is True and a region is + given, only columns in the exact region specificied are + returned. + + max_depth : int + Maximum read depth permitted. The default limit is '8000'. + + stepper : string + The stepper controls how the iterator advances. + Possible options for the stepper are + + ``all`` + skip reads in which any of the following flags are set: + BAM_FUNMAP, BAM_FSECONDARY, BAM_FQCFAIL, BAM_FDUP + + ``nofilter`` + uses every single read turning off any filtering. + + ``samtools`` + same filter and read processing as in :term:`csamtools` + pileup. For full compatibility, this requires a + 'fastafile' to be given. The following options all pertain + to filtering of the ``samtools`` stepper. + + fastafile : :class:`~pysam.FastaFile` object. + + This is required for some of the steppers. + + ignore_overlaps: bool + + If set to True, detect if read pairs overlap and only take + the higher quality base. This is the default. + + flag_filter : int + + ignore reads where any of the bits in the flag are set. The default is + BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP. + + flag_require : int + + only use reads where certain flags are set. The default is 0. + + ignore_orphans: bool + + ignore orphans (paired reads that are not in a proper pair). + The default is to ignore orphans. + + min_base_quality: int + + Minimum base quality. Bases below the minimum quality will + not be output. + + adjust_capq_threshold: int + + adjust mapping quality. The default is 0 for no + adjustment. The recommended value for adjustment is 50. + + min_mapping_quality : int + + only use reads above a minimum mapping quality. The default is 0. + + compute_baq: bool + + re-alignment computing per-Base Alignment Qualities (BAQ). The + default is to do re-alignment. Realignment requires a reference + sequence. If none is present, no realignment will be performed. + + redo_baq: bool + + recompute per-Base Alignment Quality on the fly ignoring + existing base qualities. The default is False (use existing + base qualities). + + adjust_capq_threshold: int + + adjust mapping quality. The default is 0 for no + adjustment. The recommended value for adjustment is 50. + + Returns + ------- + + an iterator over genomic positions. + + """ + cdef int rtid, rstart, rstop, has_coord + + if not self.is_open: + raise ValueError("I/O operation on closed file") + + has_coord, rtid, rstart, rstop = self.parse_region( + contig, start, stop, region, reference=reference, end=end) + + if self.is_bam or self.is_cram: + if not self.has_index(): + raise ValueError("no index available for pileup") + + if has_coord: + return IteratorColumnRegion(self, + tid=rtid, + start=rstart, + stop=rstop, + **kwargs) + else: + return IteratorColumnAllRefs(self, **kwargs) + + else: + raise NotImplementedError( + "pileup of samfiles not implemented yet") + + def count(self, + contig=None, + start=None, + stop=None, + region=None, + until_eof=False, + read_callback="nofilter", + reference=None, + end=None): + '''count the number of reads in :term:`region` + + The region is specified by :term:`contig`, `start` and `stop`. + :term:`reference` and `end` are also accepted for backward + compatiblity as synonyms for :term:`contig` and `stop`, + respectively. Alternatively, a :term:`samtools` :term:`region` + string can be supplied. + + A :term:`SAM` file does not allow random access and if + `region` or `contig` are given, an exception is raised. + + Parameters + ---------- + + contig : string + reference_name of the genomic region (chromosome) + + start : int + start of the genomic region (0-based inclusive) + + stop : int + end of the genomic region (0-based exclusive) + + region : string + a region string in samtools format. + + until_eof : bool + count until the end of the file, possibly including + unmapped reads as well. + + read_callback: string or function + + select a call-back to ignore reads when counting. It can + be either a string with the following values: + + ``all`` + skip reads in which any of the following + flags are set: BAM_FUNMAP, BAM_FSECONDARY, BAM_FQCFAIL, + BAM_FDUP + + ``nofilter`` + uses every single read + + Alternatively, `read_callback` can be a function + ``check_read(read)`` that should return True only for + those reads that shall be included in the counting. + + reference : string + backward compatible synonym for `contig` + + end : int + backward compatible synonym for `stop` + + Raises + ------ + + ValueError + if the genomic coordinates are out of range or invalid. + + ''' + cdef AlignedSegment read + cdef long counter = 0 + + if not self.is_open: + raise ValueError("I/O operation on closed file") + + cdef int filter_method = 0 + if read_callback == "all": + filter_method = 1 + elif read_callback == "nofilter": + filter_method = 2 + + for read in self.fetch(contig=contig, + start=start, + stop=stop, + reference=reference, + end=end, + region=region, + until_eof=until_eof): + # apply filter + if filter_method == 1: + # filter = "all" + if (read.flag & (0x4 | 0x100 | 0x200 | 0x400)): + continue + elif filter_method == 2: + # filter = "nofilter" + pass + else: + if not read_callback(read): + continue + counter += 1 + + return counter + + @cython.boundscheck(False) # we do manual bounds checking + def count_coverage(self, + contig, + start=None, + stop=None, + region=None, + quality_threshold=15, + read_callback='all', + reference=None, + end=None): + """count the coverage of genomic positions by reads in :term:`region`. + + The region is specified by :term:`contig`, `start` and `stop`. + :term:`reference` and `end` are also accepted for backward + compatiblity as synonyms for :term:`contig` and `stop`, + respectively. Alternatively, a :term:`samtools` :term:`region` + string can be supplied. The coverage is computed per-base [ACGT]. + + Parameters + ---------- + + contig : string + reference_name of the genomic region (chromosome) + + start : int + start of the genomic region (0-based inclusive). If not + given, count from the start of the chromosome. + + stop : int + end of the genomic region (0-based exclusive). If not given, + count to the end of the chromosome. + + region : int + a region string. + + quality_threshold : int + quality_threshold is the minimum quality score (in phred) a + base has to reach to be counted. + + read_callback: string or function + + select a call-back to ignore reads when counting. It can + be either a string with the following values: + + ``all`` + skip reads in which any of the following + flags are set: BAM_FUNMAP, BAM_FSECONDARY, BAM_FQCFAIL, + BAM_FDUP + + ``nofilter`` + uses every single read + + Alternatively, `read_callback` can be a function + ``check_read(read)`` that should return True only for + those reads that shall be included in the counting. + + reference : string + backward compatible synonym for `contig` + + end : int + backward compatible synonym for `stop` + + Raises + ------ + + ValueError + if the genomic coordinates are out of range or invalid. + + Returns + ------- + + four array.arrays of the same length in order A C G T : tuple + + """ + + + cdef uint32_t contig_length = self.get_reference_length(contig) + cdef int _start = start if start is not None else 0 + cdef int _stop = stop if stop is not None else contig_length + _stop = _stop if _stop < contig_length else contig_length + + if _stop == _start: + raise ValueError("interval of size 0") + if _stop < _start: + raise ValueError("interval of size less than 0") + + cdef int length = _stop - _start + cdef c_array.array int_array_template = array.array('L', []) + cdef c_array.array count_a + cdef c_array.array count_c + cdef c_array.array count_g + cdef c_array.array count_t + count_a = c_array.clone(int_array_template, length, zero=True) + count_c = c_array.clone(int_array_template, length, zero=True) + count_g = c_array.clone(int_array_template, length, zero=True) + count_t = c_array.clone(int_array_template, length, zero=True) + + cdef AlignedSegment read + cdef cython.str seq + cdef c_array.array quality + cdef int qpos + cdef int refpos + cdef int c = 0 + cdef int filter_method = 0 + if read_callback == "all": + filter_method = 1 + elif read_callback == "nofilter": + filter_method = 2 + + cdef int _threshold = quality_threshold + for read in self.fetch(contig=contig, + reference=reference, + start=start, + stop=stop, + end=end, + region=region): + # apply filter + if filter_method == 1: + # filter = "all" + if (read.flag & (0x4 | 0x100 | 0x200 | 0x400)): + continue + elif filter_method == 2: + # filter = "nofilter" + pass + else: + if not read_callback(read): + continue + + # count + seq = read.seq + quality = read.query_qualities + for qpos, refpos in read.get_aligned_pairs(True): + if qpos is not None and refpos is not None and \ + _start <= refpos < _stop: + if quality[qpos] >= quality_threshold: + if seq[qpos] == 'A': + count_a.data.as_ulongs[refpos - _start] += 1 + if seq[qpos] == 'C': + count_c.data.as_ulongs[refpos - _start] += 1 + if seq[qpos] == 'G': + count_g.data.as_ulongs[refpos - _start] += 1 + if seq[qpos] == 'T': + count_t.data.as_ulongs[refpos - _start] += 1 + + return count_a, count_c, count_g, count_t + + def find_introns(self, read_iterator): + """Return a dictionary {(start, stop): count} + Listing the intronic sites in the reads (identified by 'N' in the cigar strings), + and their support ( = number of reads ). + + read_iterator can be the result of a .fetch(...) call. + Or it can be a generator filtering such reads. Example + samfile.find_introns((read for read in samfile.fetch(...) if read.is_reverse) + """ + import collections + res = collections.Counter() + for r in read_iterator: + if 'N' in r.cigarstring: + last_read_pos = False + for read_loc, genome_loc in r.get_aligned_pairs(): + if read_loc is None and last_read_pos: + start = genome_loc + elif read_loc and last_read_pos is None: + stop = genome_loc # we are right exclusive ,so this is correct + res[(start, stop)] += 1 + del start + del stop + last_read_pos = read_loc + return res + + def close(self): + '''closes the :class:`pysam.AlignmentFile`.''' + + if self.htsfile == NULL: + return + + cdef int ret = hts_close(self.htsfile) + self.htsfile = NULL + + if self.index != NULL: + hts_idx_destroy(self.index) + self.index = NULL + + self.header = None + + if ret < 0: + global errno + if errno == EPIPE: + errno = 0 + else: + raise IOError(errno, force_str(strerror(errno))) + + def __dealloc__(self): + cdef int ret = 0 + + if self.htsfile != NULL: + ret = hts_close(self.htsfile) + self.htsfile = NULL + + if self.index != NULL: + hts_idx_destroy(self.index) + self.index = NULL + + self.header = None + + if self.b: + bam_destroy1(self.b) + self.b = NULL + + if ret < 0: + global errno + if errno == EPIPE: + errno = 0 + else: + raise IOError(errno, force_str(strerror(errno))) + + cpdef int write(self, AlignedSegment read) except -1: + ''' + write a single :class:`pysam.AlignedSegment` to disk. + + Raises + ------ + ValueError + if the writing failed + + Returns + ------- + + int : the number of bytes written. If the file is closed, + this will be 0. + ''' + if not self.is_open: + return 0 + + cdef int ret + + with nogil: + ret = sam_write1(self.htsfile, + self.header.ptr, + read._delegate) + + # kbj: Still need to raise an exception with except -1. Otherwise + # when ret == -1 we get a "SystemError: error return without + # exception set". + if ret < 0: + raise IOError( + "sam_write1 failed with error code {}".format(ret)) + + return ret + + # context manager interface + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.close() + return False + + ############################################################### + ############################################################### + ############################################################### + ## properties + ############################################################### + property mapped: + """int with total number of mapped alignments according to the + statistics recorded in the index. This is a read-only + attribute. + """ + def __get__(self): + self.check_index() + cdef int tid + cdef uint64_t total = 0 + cdef uint64_t mapped, unmapped + for tid from 0 <= tid < self.header.nreferences: + with nogil: + hts_idx_get_stat(self.index, tid, &mapped, &unmapped) + total += mapped + return total + + property unmapped: + """int with total number of unmapped reads according to the statistics + recorded in the index. This number of reads includes the number of reads + without coordinates. This is a read-only attribute. + """ + def __get__(self): + self.check_index() + cdef int tid + cdef uint64_t total = hts_idx_get_n_no_coor(self.index) + cdef uint64_t mapped, unmapped + for tid from 0 <= tid < self.header.nreferences: + with nogil: + hts_idx_get_stat(self.index, tid, &mapped, &unmapped) + total += unmapped + return total + + property nocoordinate: + """int with total number of reads without coordinates according to the + statistics recorded in the index. This is a read-only attribute. + """ + def __get__(self): + self.check_index() + cdef uint64_t n + with nogil: + n = hts_idx_get_n_no_coor(self.index) + return n + + def get_index_statistics(self): + """return statistics about mapped/unmapped reads per chromosome as + they are stored in the index. + + Returns + ------- + list : a list of records for each chromosome. Each record has the attributes 'contig', + 'mapped', 'unmapped' and 'total'. + """ + + self.check_index() + cdef int tid + cdef uint64_t mapped, unmapped + results = [] + # TODO: use header + for tid from 0 <= tid < self.nreferences: + with nogil: + hts_idx_get_stat(self.index, tid, &mapped, &unmapped) + results.append( + IndexStats._make(( + self.get_reference_name(tid), + mapped, + unmapped, + mapped + unmapped))) + + return results + + ############################################################### + ## file-object like iterator access + ## note: concurrent access will cause errors (see IteratorRow + ## and multiple_iterators) + ## Possible solutions: deprecate or open new file handle + def __iter__(self): + if not self.is_open: + raise ValueError("I/O operation on closed file") + + if not self.is_bam and self.header.nreferences == 0: + raise NotImplementedError( + "can not iterate over samfile without header") + return self + + cdef bam1_t * getCurrent(self): + return self.b + + cdef int cnext(self): + ''' + cversion of iterator. Used by :class:`pysam.AlignmentFile.IteratorColumn`. + ''' + cdef int ret + cdef bam_hdr_t * hdr = self.header.ptr + with nogil: + ret = sam_read1(self.htsfile, + hdr, + self.b) + return ret + + def __next__(self): + cdef int ret = self.cnext() + if (ret >= 0): + return makeAlignedSegment(self.b, self.header) + elif ret == -2: + raise IOError('truncated file') + else: + raise StopIteration + + ########################################### + # methods/properties referencing the header + def is_valid_tid(self, int tid): + """ + return True if the numerical :term:`tid` is valid; False otherwise. + + Note that the unmapped tid code (-1) counts as an invalid. + """ + if self.header is None: + raise ValueError("header not available in closed files") + return self.header.is_valid_tid(tid) + + def get_tid(self, reference): + """ + return the numerical :term:`tid` corresponding to + :term:`reference` + + returns -1 if reference is not known. + """ + if self.header is None: + raise ValueError("header not available in closed files") + return self.header.get_tid(reference) + + def get_reference_name(self, tid): + """ + return :term:`reference` name corresponding to numerical :term:`tid` + """ + if self.header is None: + raise ValueError("header not available in closed files") + return self.header.get_reference_name(tid) + + def get_reference_length(self, reference): + """ + return :term:`reference` name corresponding to numerical :term:`tid` + """ + if self.header is None: + raise ValueError("header not available in closed files") + return self.header.get_reference_length(reference) + + property nreferences: + """"int with the number of :term:`reference` sequences in the file. + This is a read-only attribute.""" + def __get__(self): + if self.header: + return self.header.nreferences + else: + raise ValueError("header not available in closed files") + + property references: + """tuple with the names of :term:`reference` sequences. This is a + read-only attribute""" + def __get__(self): + if self.header: + return self.header.references + else: + raise ValueError("header not available in closed files") + + property lengths: + """tuple of the lengths of the :term:`reference` sequences. This is a + read-only attribute. The lengths are in the same order as + :attr:`pysam.AlignmentFile.references` + + """ + def __get__(self): + if self.header: + return self.header.lengths + else: + raise ValueError("header not available in closed files") + + # Compatibility functions for pysam < 0.14 + property text: + """deprecated, use .header directly""" + def __get__(self): + if self.header: + return self.header.__str__() + else: + raise ValueError("header not available in closed files") + + # Compatibility functions for pysam < 0.8.3 + def gettid(self, reference): + """deprecated, use get_tid() instead""" + return self.get_tid(reference) + + def getrname(self, tid): + """deprecated, use get_reference_name() instead""" + return self.get_reference_name(tid) + + +cdef class IteratorRow: + '''abstract base class for iterators over mapped reads. + + Various iterators implement different behaviours for wrapping around + contig boundaries. Examples include: + + :class:`pysam.IteratorRowRegion` + iterate within a single contig and a defined region. + + :class:`pysam.IteratorRowAll` + iterate until EOF. This iterator will also include unmapped reads. + + :class:`pysam.IteratorRowAllRefs` + iterate over all reads in all reference sequences. + + The method :meth:`AlignmentFile.fetch` returns an IteratorRow. + + .. note:: + + It is usually not necessary to create an object of this class + explicitly. It is returned as a result of call to a + :meth:`AlignmentFile.fetch`. + + ''' + + def __init__(self, AlignmentFile samfile, int multiple_iterators=False): + cdef char *cfilename + cdef char *creference_filename + cdef char *cindexname = NULL + + if not samfile.is_open: + raise ValueError("I/O operation on closed file") + + # makes sure that samfile stays alive as long as the + # iterator is alive + self.samfile = samfile + + # reopen the file - note that this makes the iterator + # slow and causes pileup to slow down significantly. + if multiple_iterators: + + cfilename = samfile.filename + with nogil: + self.htsfile = hts_open(cfilename, 'r') + assert self.htsfile != NULL + + if samfile.has_index(): + if samfile.index_filename: + cindexname = samfile.index_filename + with nogil: + self.index = sam_index_load2(self.htsfile, cfilename, cindexname) + else: + self.index = NULL + + # need to advance in newly opened file to position after header + # better: use seek/tell? + with nogil: + hdr = sam_hdr_read(self.htsfile) + if hdr is NULL: + raise IOError("unable to read header information") + self.header = makeAlignmentHeader(hdr) + + self.owns_samfile = True + + # options specific to CRAM files + if samfile.is_cram and samfile.reference_filename: + creference_filename = samfile.reference_filename + hts_set_opt(self.htsfile, + CRAM_OPT_REFERENCE, + creference_filename) + + else: + self.htsfile = samfile.htsfile + self.index = samfile.index + self.owns_samfile = False + self.header = samfile.header + + self.retval = 0 + + self.b = bam_init1() + + def __dealloc__(self): + bam_destroy1(self.b) + if self.owns_samfile: + hts_close(self.htsfile) + hts_idx_destroy(self.index) + + +cdef class IteratorRowRegion(IteratorRow): + """*(AlignmentFile samfile, int tid, int beg, int stop, + int multiple_iterators=False)* + + iterate over mapped reads in a region. + + .. note:: + + It is usually not necessary to create an object of this class + explicitly. It is returned as a result of call to a + :meth:`AlignmentFile.fetch`. + + """ + + def __init__(self, AlignmentFile samfile, + int tid, int beg, int stop, + int multiple_iterators=False): + + if not samfile.has_index(): + raise ValueError("no index available for iteration") + + IteratorRow.__init__(self, samfile, + multiple_iterators=multiple_iterators) + + with nogil: + self.iter = sam_itr_queryi( + self.index, + tid, + beg, + stop) + + def __iter__(self): + return self + + cdef bam1_t * getCurrent(self): + return self.b + + cdef int cnext(self): + '''cversion of iterator. Used by IteratorColumn''' + with nogil: + self.retval = hts_itr_next(hts_get_bgzfp(self.htsfile), + self.iter, + self.b, + self.htsfile) + + def __next__(self): + self.cnext() + if self.retval >= 0: + return makeAlignedSegment(self.b, self.header) + elif self.retval == -1: + raise StopIteration + elif self.retval == -2: + # Note: it is currently not the case that hts_iter_next + # returns -2 for a truncated file. + # See https://github.com/pysam-developers/pysam/pull/50#issuecomment-64928625 + raise IOError('truncated file') + else: + raise IOError("error while reading file {}: {}".format(self.samfile.filename, self.retval)) + + def __dealloc__(self): + hts_itr_destroy(self.iter) + + +cdef class IteratorRowHead(IteratorRow): + """*(AlignmentFile samfile, n, int multiple_iterators=False)* + + iterate over first n reads in `samfile` + + .. note:: + It is usually not necessary to create an object of this class + explicitly. It is returned as a result of call to a + :meth:`AlignmentFile.head`. + + """ + + def __init__(self, + AlignmentFile samfile, + int n, + int multiple_iterators=False): + + IteratorRow.__init__(self, samfile, + multiple_iterators=multiple_iterators) + + self.max_rows = n + self.current_row = 0 + + def __iter__(self): + return self + + cdef bam1_t * getCurrent(self): + return self.b + + cdef int cnext(self): + '''cversion of iterator. Used by IteratorColumn''' + cdef int ret + cdef bam_hdr_t * hdr = self.header.ptr + with nogil: + ret = sam_read1(self.htsfile, + hdr, + self.b) + return ret + + def __next__(self): + if self.current_row >= self.max_rows: + raise StopIteration + + cdef int ret = self.cnext() + if ret >= 0: + self.current_row += 1 + return makeAlignedSegment(self.b, self.header) + elif ret == -2: + raise IOError('truncated file') + else: + raise StopIteration + + +cdef class IteratorRowAll(IteratorRow): + """*(AlignmentFile samfile, int multiple_iterators=False)* + + iterate over all reads in `samfile` + + .. note:: + + It is usually not necessary to create an object of this class + explicitly. It is returned as a result of call to a + :meth:`AlignmentFile.fetch`. + + """ + + def __init__(self, AlignmentFile samfile, + int multiple_iterators=False): + + IteratorRow.__init__(self, samfile, + multiple_iterators=multiple_iterators) + + def __iter__(self): + return self + + cdef bam1_t * getCurrent(self): + return self.b + + cdef int cnext(self): + '''cversion of iterator. Used by IteratorColumn''' + cdef int ret + cdef bam_hdr_t * hdr = self.header.ptr + with nogil: + ret = sam_read1(self.htsfile, + hdr, + self.b) + return ret + + def __next__(self): + cdef int ret = self.cnext() + if ret >= 0: + return makeAlignedSegment(self.b, self.header) + elif ret == -2: + raise IOError('truncated file') + else: + raise StopIteration + + +cdef class IteratorRowAllRefs(IteratorRow): + """iterates over all mapped reads by chaining iterators over each + reference + + .. note:: + It is usually not necessary to create an object of this class + explicitly. It is returned as a result of call to a + :meth:`AlignmentFile.fetch`. + + """ + + def __init__(self, AlignmentFile samfile, + multiple_iterators=False): + + IteratorRow.__init__(self, samfile, + multiple_iterators=multiple_iterators) + + if not samfile.has_index(): + raise ValueError("no index available for fetch") + + self.tid = -1 + + def nextiter(self): + # get a new iterator for a chromosome. The file + # will not be re-opened. + self.rowiter = IteratorRowRegion(self.samfile, + self.tid, + 0, + 1<<29) + # set htsfile and header of the rowiter + # to the values in this iterator to reflect multiple_iterators + self.rowiter.htsfile = self.htsfile + self.rowiter.header = self.header + + # make sure the iterator understand that IteratorRowAllRefs + # has ownership + self.rowiter.owns_samfile = False + + def __iter__(self): + return self + + def __next__(self): + # Create an initial iterator + if self.tid == -1: + if not self.samfile.nreferences: + raise StopIteration + self.tid = 0 + self.nextiter() + + while 1: + self.rowiter.cnext() + + # If current iterator is not exhausted, return aligned read + if self.rowiter.retval > 0: + return makeAlignedSegment(self.rowiter.b, self.header) + + self.tid += 1 + + # Otherwise, proceed to next reference or stop + if self.tid < self.samfile.nreferences: + self.nextiter() + else: + raise StopIteration + + +cdef class IteratorRowSelection(IteratorRow): + """*(AlignmentFile samfile)* + + iterate over reads in `samfile` at a given list of file positions. + + .. note:: + It is usually not necessary to create an object of this class + explicitly. It is returned as a result of call to a :meth:`AlignmentFile.fetch`. + """ + + def __init__(self, AlignmentFile samfile, positions, int multiple_iterators=True): + + IteratorRow.__init__(self, samfile, multiple_iterators=multiple_iterators) + + self.positions = positions + self.current_pos = 0 + + def __iter__(self): + return self + + cdef bam1_t * getCurrent(self): + return self.b + + cdef int cnext(self): + '''cversion of iterator''' + # end iteration if out of positions + if self.current_pos >= len(self.positions): return -1 + + cdef uint64_t pos = self.positions[self.current_pos] + with nogil: + bgzf_seek(hts_get_bgzfp(self.htsfile), + pos, + 0) + self.current_pos += 1 + + cdef int ret + cdef bam_hdr_t * hdr = self.header.ptr + with nogil: + ret = sam_read1(self.htsfile, + hdr, + self.b) + return ret + + def __next__(self): + cdef int ret = self.cnext() + if ret >= 0: + return makeAlignedSegment(self.b, self.header) + elif ret == -2: + raise IOError('truncated file') + else: + raise StopIteration + + +cdef int __advance_nofilter(void *data, bam1_t *b): + '''advance without any read filtering. + ''' + cdef __iterdata * d = <__iterdata*>data + cdef int ret + with nogil: + ret = sam_itr_next(d.htsfile, d.iter, b) + return ret + + +cdef int __advance_all(void *data, bam1_t *b): + '''only use reads for pileup passing basic filters such as + + BAM_FUNMAP, BAM_FSECONDARY, BAM_FQCFAIL, BAM_FDUP + ''' + + cdef __iterdata * d = <__iterdata*>data + cdef mask = BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP + cdef int ret + while 1: + with nogil: + ret = sam_itr_next(d.htsfile, d.iter, b) + if ret < 0: + break + if b.core.flag & d.flag_filter: + continue + break + return ret + + +cdef int __advance_samtools(void * data, bam1_t * b): + '''advance using same filter and read processing as in + the samtools pileup. + ''' + cdef __iterdata * d = <__iterdata*>data + cdef int ret + cdef int q + + while 1: + with nogil: + ret = sam_itr_next(d.htsfile, d.iter, b) + if ret < 0: + break + if b.core.flag & d.flag_filter: + continue + if d.flag_require and not (b.core.flag & d.flag_require): + continue + + # reload sequence + if d.fastafile != NULL and b.core.tid != d.tid: + if d.seq != NULL: + free(d.seq) + d.tid = b.core.tid + with nogil: + d.seq = faidx_fetch_seq( + d.fastafile, + d.header.target_name[d.tid], + 0, MAX_POS, + &d.seq_len) + + if d.seq == NULL: + raise ValueError( + "reference sequence for '{}' (tid={}) not found".format( + d.header.target_name[d.tid], d.tid)) + + # realign read - changes base qualities + if d.seq != NULL and d.compute_baq: + # 4th option to realign is flag: + # apply_baq = flag&1, extend_baq = flag&2, redo_baq = flag&4 + if d.redo_baq: + sam_prob_realn(b, d.seq, d.seq_len, 7) + else: + sam_prob_realn(b, d.seq, d.seq_len, 3) + + if d.seq != NULL and d.adjust_capq_threshold > 10: + q = sam_cap_mapq(b, d.seq, d.seq_len, d.adjust_capq_threshold) + if q < 0: + continue + elif b.core.qual > q: + b.core.qual = q + + if b.core.qual < d.min_mapping_quality: + continue + if d.ignore_orphans and b.core.flag & BAM_FPAIRED and not (b.core.flag & BAM_FPROPER_PAIR): + continue + + break + + return ret + + +cdef class IteratorColumn: + '''abstract base class for iterators over columns. + + IteratorColumn objects wrap the pileup functionality of samtools. + + For reasons of efficiency, the iterator points to the current + pileup buffer. The pileup buffer is updated at every iteration. + This might cause some unexpected behavious. For example, + consider the conversion to a list:: + + f = AlignmentFile("file.bam", "rb") + result = list(f.pileup()) + + Here, ``result`` will contain ``n`` objects of type + :class:`~pysam.PileupColumn` for ``n`` columns, but each object in + ``result`` will contain the same information. + + The desired behaviour can be achieved by list comprehension:: + + result = [x.pileups() for x in f.pileup()] + + ``result`` will be a list of ``n`` lists of objects of type + :class:`~pysam.PileupRead`. + + If the iterator is associated with a :class:`~pysam.Fastafile` + using the :meth:`add_reference` method, then the iterator will + export the current sequence via the methods :meth:`get_sequence` + and :meth:`seq_len`. + + See :class:`~AlignmentFile.pileup` for kwargs to the iterator. + ''' + + def __cinit__( self, AlignmentFile samfile, **kwargs): + self.samfile = samfile + self.fastafile = kwargs.get("fastafile", None) + self.stepper = kwargs.get("stepper", "samtools") + self.max_depth = kwargs.get("max_depth", 8000) + self.ignore_overlaps = kwargs.get("ignore_overlaps", True) + self.min_base_quality = kwargs.get("min_base_quality", 13) + self.iterdata.seq = NULL + self.iterdata.min_mapping_quality = kwargs.get("min_mapping_quality", 0) + self.iterdata.flag_require = kwargs.get("flag_require", 0) + self.iterdata.flag_filter = kwargs.get("flag_filter", BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP) + self.iterdata.adjust_capq_threshold = kwargs.get("adjust_capq_threshold", 0) + self.iterdata.compute_baq = kwargs.get("compute_baq", True) + self.iterdata.redo_baq = kwargs.get("redo_baq", False) + self.iterdata.ignore_orphans = kwargs.get("ignore_orphans", True) + + self.tid = 0 + self.pos = 0 + self.n_plp = 0 + self.plp = NULL + self.pileup_iter = NULL + + def __iter__(self): + return self + + cdef int cnext(self): + '''perform next iteration. + ''' + # do not release gil here because of call-backs + cdef int ret = bam_mplp_auto(self.pileup_iter, + &self.tid, + &self.pos, + &self.n_plp, + &self.plp) + return ret + + cdef char * get_sequence(self): + '''return current reference sequence underlying the iterator. + ''' + return self.iterdata.seq + + property seq_len: + '''current sequence length.''' + def __get__(self): + return self.iterdata.seq_len + + def add_reference(self, FastaFile fastafile): + ''' + add reference sequences in `fastafile` to iterator.''' + self.fastafile = fastafile + if self.iterdata.seq != NULL: + free(self.iterdata.seq) + self.iterdata.tid = -1 + self.iterdata.fastafile = self.fastafile.fastafile + + def has_reference(self): + ''' + return true if iterator is associated with a reference''' + return self.fastafile + + cdef _setup_iterator(self, + int tid, + int start, + int stop, + int multiple_iterators=0): + '''setup the iterator structure''' + + self.iter = IteratorRowRegion(self.samfile, tid, start, stop, multiple_iterators) + self.iterdata.htsfile = self.samfile.htsfile + self.iterdata.iter = self.iter.iter + self.iterdata.seq = NULL + self.iterdata.tid = -1 + self.iterdata.header = self.samfile.header.ptr + + if self.fastafile is not None: + self.iterdata.fastafile = self.fastafile.fastafile + else: + self.iterdata.fastafile = NULL + + # Free any previously allocated memory before reassigning + # pileup_iter + self._free_pileup_iter() + + cdef void * data[1] + data[0] = &self.iterdata + + if self.stepper is None or self.stepper == "all": + with nogil: + self.pileup_iter = bam_mplp_init(1, + &__advance_all, + data) + elif self.stepper == "nofilter": + with nogil: + self.pileup_iter = bam_mplp_init(1, + &__advance_nofilter, + data) + elif self.stepper == "samtools": + with nogil: + self.pileup_iter = bam_mplp_init(1, + &__advance_samtools, + data) + else: + raise ValueError( + "unknown stepper option `%s` in IteratorColumn" % self.stepper) + + if self.max_depth: + with nogil: + bam_mplp_set_maxcnt(self.pileup_iter, self.max_depth) + + if self.ignore_overlaps: + with nogil: + bam_mplp_init_overlaps(self.pileup_iter) + + cdef reset(self, tid, start, stop): + '''reset iterator position. + + This permits using the iterator multiple times without + having to incur the full set-up costs. + ''' + self.iter = IteratorRowRegion(self.samfile, tid, start, stop, multiple_iterators=0) + self.iterdata.iter = self.iter.iter + + # invalidate sequence if different tid + if self.tid != tid: + if self.iterdata.seq != NULL: + free(self.iterdata.seq) + self.iterdata.seq = NULL + self.iterdata.tid = -1 + + # self.pileup_iter = bam_mplp_init(1 + # &__advancepileup, + # &self.iterdata) + with nogil: + bam_mplp_reset(self.pileup_iter) + + cdef _free_pileup_iter(self): + '''free the memory alloc'd by bam_plp_init. + + This is needed before setup_iterator allocates another + pileup_iter, or else memory will be lost. ''' + if self.pileup_iter != NULL: + with nogil: + bam_mplp_reset(self.pileup_iter) + bam_mplp_destroy(self.pileup_iter) + self.pileup_iter = NULL + + def __dealloc__(self): + # reset in order to avoid memory leak messages for iterators + # that have not been fully consumed + self._free_pileup_iter() + self.plp = NULL + + if self.iterdata.seq != NULL: + free(self.iterdata.seq) + self.iterdata.seq = NULL + + # backwards compatibility + + def hasReference(self): + return self.has_reference() + cdef char * getSequence(self): + return self.get_sequence() + def addReference(self, FastaFile fastafile): + return self.add_reference(fastafile) + + +cdef class IteratorColumnRegion(IteratorColumn): + '''iterates over a region only. + ''' + def __cinit__(self, + AlignmentFile samfile, + int tid = 0, + int start = 0, + int stop = MAX_POS, + int truncate = False, + **kwargs ): + + # initialize iterator + self._setup_iterator(tid, start, stop, 1) + self.start = start + self.stop = stop + self.truncate = truncate + + def __next__(self): + + cdef int n + + while 1: + n = self.cnext() + if n < 0: + raise ValueError("error during iteration" ) + + if n == 0: + raise StopIteration + + if self.truncate: + if self.start > self.pos: + continue + if self.pos >= self.stop: + raise StopIteration + + return makePileupColumn(&self.plp, + self.tid, + self.pos, + self.n_plp, + self.min_base_quality, + self.iterdata.seq, + self.samfile.header) + + +cdef class IteratorColumnAllRefs(IteratorColumn): + """iterates over all columns by chaining iterators over each reference + """ + + def __cinit__(self, + AlignmentFile samfile, + **kwargs): + + # no iteration over empty files + if not samfile.nreferences: + raise StopIteration + + # initialize iterator + self._setup_iterator(self.tid, 0, MAX_POS, 1) + + def __next__(self): + + cdef int n + while 1: + n = self.cnext() + if n < 0: + raise ValueError("error during iteration") + + # proceed to next reference or stop + if n == 0: + self.tid += 1 + if self.tid < self.samfile.nreferences: + self._setup_iterator(self.tid, 0, MAX_POS, 0) + else: + raise StopIteration + continue + + # return result, if within same reference + return makePileupColumn(&self.plp, + self.tid, + self.pos, + self.n_plp, + self.min_base_quality, + self.iterdata.seq, + self.samfile.header) + + +cdef class SNPCall: + '''the results of a SNP call.''' + cdef int _tid + cdef int _pos + cdef char _reference_base + cdef char _genotype + cdef int _consensus_quality + cdef int _snp_quality + cdef int _rms_mapping_quality + cdef int _coverage + + property tid: + '''the chromosome ID as is defined in the header''' + def __get__(self): + return self._tid + + property pos: + '''nucleotide position of SNP.''' + def __get__(self): return self._pos + + property reference_base: + '''reference base at pos. ``N`` if no reference sequence supplied.''' + def __get__(self): return from_string_and_size( &self._reference_base, 1 ) + + property genotype: + '''the genotype called.''' + def __get__(self): return from_string_and_size( &self._genotype, 1 ) + + property consensus_quality: + '''the genotype quality (Phred-scaled).''' + def __get__(self): return self._consensus_quality + + property snp_quality: + '''the snp quality (Phred scaled) - probability of consensus being + identical to reference sequence.''' + def __get__(self): return self._snp_quality + + property mapping_quality: + '''the root mean square (rms) of the mapping quality of all reads + involved in the call.''' + def __get__(self): return self._rms_mapping_quality + + property coverage: + '''coverage or read depth - the number of reads involved in the call.''' + def __get__(self): return self._coverage + + def __str__(self): + + return "\t".join( map(str, ( + self.tid, + self.pos, + self.reference_base, + self.genotype, + self.consensus_quality, + self.snp_quality, + self.mapping_quality, + self.coverage ) ) ) + + +cdef class IndexedReads: + """*(AlignmentFile samfile, multiple_iterators=True) + + Index a Sam/BAM-file by query name while keeping the + original sort order intact. + + The index is kept in memory and can be substantial. + + By default, the file is re-openend to avoid conflicts if multiple + operators work on the same file. Set `multiple_iterators` = False + to not re-open `samfile`. + + Parameters + ---------- + + samfile : AlignmentFile + File to be indexed. + + multiple_iterators : bool + Flag indicating whether the file should be reopened. Reopening prevents + existing iterators being affected by the indexing. + + """ + + def __init__(self, AlignmentFile samfile, int multiple_iterators=True): + cdef char *cfilename + + # makes sure that samfile stays alive as long as this + # object is alive. + self.samfile = samfile + cdef bam_hdr_t * hdr = NULL + assert samfile.is_bam, "can only apply IndexReads on bam files" + + # multiple_iterators the file - note that this makes the iterator + # slow and causes pileup to slow down significantly. + if multiple_iterators: + cfilename = samfile.filename + with nogil: + self.htsfile = hts_open(cfilename, 'r') + if self.htsfile == NULL: + raise OSError("unable to reopen htsfile") + + # need to advance in newly opened file to position after header + # better: use seek/tell? + with nogil: + hdr = sam_hdr_read(self.htsfile) + if hdr == NULL: + raise OSError("unable to read header information") + self.header = makeAlignmentHeader(hdr) + self.owns_samfile = True + else: + self.htsfile = self.samfile.htsfile + self.header = samfile.header + self.owns_samfile = False + + def build(self): + '''build the index.''' + + self.index = collections.defaultdict(list) + + # this method will start indexing from the current file position + cdef int ret = 1 + cdef bam1_t * b = calloc(1, sizeof( bam1_t)) + if b == NULL: + raise MemoryError("could not allocate {} bytes".format(sizeof(bam1_t))) + + cdef uint64_t pos + cdef bam_hdr_t * hdr = self.header.ptr + + while ret > 0: + with nogil: + pos = bgzf_tell(hts_get_bgzfp(self.htsfile)) + ret = sam_read1(self.htsfile, + hdr, + b) + + if ret > 0: + qname = charptr_to_str(pysam_bam_get_qname(b)) + self.index[qname].append(pos) + + bam_destroy1(b) + + def find(self, query_name): + '''find `query_name` in index. + + Returns + ------- + + IteratorRowSelection + Returns an iterator over all reads with query_name. + + Raises + ------ + + KeyError + if the `query_name` is not in the index. + + ''' + if query_name in self.index: + return IteratorRowSelection( + self.samfile, + self.index[query_name], + multiple_iterators = False) + else: + raise KeyError("read %s not found" % query_name) + + def __dealloc__(self): + if self.owns_samfile: + hts_close(self.htsfile) diff --git a/pysam/libcbcf.pxd b/pysam/libcbcf.pxd new file mode 100644 index 0000000..1d4129b --- /dev/null +++ b/pysam/libcbcf.pxd @@ -0,0 +1,141 @@ +############################################################################### +############################################################################### +## Cython wrapper for htslib VCF/BCF reader/writer +############################################################################### +# +# The MIT License +# +# Copyright (c) 2015, 2016 Kevin Jacobs (jacobs@bioinformed.com) +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### + +from libc.stdint cimport int8_t, int16_t, int32_t, int64_t +from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t +from libc.stdlib cimport malloc, calloc, realloc, free +from libc.string cimport memcpy, memcmp, memmove, strncpy, strlen, strdup + +from pysam.libchtslib cimport * + + +cdef class VariantHeader(object): + cdef bcf_hdr_t *ptr + + cdef _subset_samples(self, include_samples) + + +cdef class VariantHeaderRecord(object): + cdef readonly VariantHeader header + cdef bcf_hrec_t *ptr + + +cdef class VariantHeaderRecords(object): + cdef readonly VariantHeader header + + +cdef class VariantHeaderContigs(object): + cdef readonly VariantHeader header + + +cdef class VariantHeaderSamples(object): + cdef readonly VariantHeader header + + +cdef class VariantContig(object): + cdef readonly VariantHeader header + cdef int id + + +cdef class VariantMetadata(object): + cdef readonly VariantHeader header + cdef int type + cdef int id + + +cdef class VariantHeaderMetadata(object): + cdef readonly VariantHeader header + cdef int32_t type + + +cdef class VariantRecord(object): + cdef readonly VariantHeader header + cdef bcf1_t *ptr + + +cdef class VariantRecordFilter(object): + cdef VariantRecord record + + +cdef class VariantRecordFormat(object): + cdef VariantRecord record + + +cdef class VariantRecordInfo(object): + cdef VariantRecord record + + +cdef class VariantRecordSamples(object): + cdef VariantRecord record + + +cdef class VariantRecordSample(object): + cdef VariantRecord record + cdef readonly int32_t index + + +cdef class BaseIndex(object): + cdef tuple refs + cdef dict refmap + + +cdef class BCFIndex(BaseIndex): + cdef readonly VariantHeader header + cdef hts_idx_t *ptr + + +cdef class TabixIndex(BaseIndex): + cdef tbx_t *ptr + + +cdef class BaseIterator(object): + cdef VariantFile bcf + cdef hts_itr_t *iter + + +cdef class BCFIterator(BaseIterator): + cdef BCFIndex index + + +cdef class TabixIterator(BaseIterator): + cdef TabixIndex index + cdef kstring_t line_buffer + + +cdef class VariantFile(HTSFile): + cdef readonly VariantHeader header + cdef readonly BaseIndex index + + cdef readonly bint drop_samples # true if sample information is to be ignored + + # FIXME: Temporary, use htsFormat when it is available + cdef readonly bint is_reading # true if file has begun reading records + cdef readonly bint header_written # true if header has already been written + + cpdef int write(self, VariantRecord record) except -1 diff --git a/pysam/libcbcf.pyx b/pysam/libcbcf.pyx new file mode 100644 index 0000000..5087dff --- /dev/null +++ b/pysam/libcbcf.pyx @@ -0,0 +1,4417 @@ +# cython: embedsignature=True +# cython: profile=True +############################################################################### +############################################################################### +## Cython wrapper for htslib VCF/BCF reader/writer +############################################################################### +# +# NOTICE: This code is incomplete and preliminary. It offers a nearly +# complete Pythonic interface to VCF/BCF metadata and data with +# reading and writing capability. Documentation and a unit test suite +# are in the works. The code is best tested under Python 2, but +# should also work with Python 3. Please report any remaining +# str/bytes issues on the github site when using Python 3 and I'll +# fix them promptly. +# +# Here is a minimal example of how to use the API: +# +# $ cat bcfview.py +# import sys +# from pysam import VariantFile +# +# bcf_in = VariantFile(sys.argv[1]) # auto-detect input format +# bcf_out = VariantFile('-', 'w', header=bcf_in.header) +# +# for rec in bcf_in: +# bcf_out.write(rec) +# +# Performance is fairly close to that of bcftools view. Here is an example +# using some 1k Genomes data: +# +# $ time python bcfview.py ALL.chr22.phase3_shapeit2_mvncall_integrated_v5.20130502.genotypes.bcf |wc -l +# 1103799 +# +# real 0m56.114s +# user 1m4.489s +# sys 0m3.102s +# +# $ time bcftools view ALL.chr22.phase3_shapeit2_mvncall_integrated_v5.20130502.genotypes.bcf |wc -l +# 1103800 # bcftools adds an extra header +# +# real 0m55.126s +# user 1m3.502s +# sys 0m3.459s +# +############################################################################### +# +# TODO list: +# +# * more genotype methods +# * unit test suite (perhaps py.test based) +# * documentation +# * pickle support +# * left/right locus normalization +# * fix reopen to re-use fd +# +############################################################################### +# +# The MIT License +# +# Copyright (c) 2015,2016 Kevin Jacobs (jacobs@bioinformed.com) +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### + +from __future__ import division, print_function + +import os +import sys + +from libc.errno cimport errno, EPIPE +from libc.string cimport strcmp, strpbrk, strerror +from libc.stdint cimport INT8_MAX, INT16_MAX, INT32_MAX + +cimport cython + +from cpython.object cimport PyObject +from cpython.ref cimport Py_INCREF +from cpython.dict cimport PyDict_GetItemString, PyDict_SetItemString +from cpython.tuple cimport PyTuple_New, PyTuple_SET_ITEM +from cpython.bytes cimport PyBytes_FromStringAndSize +from cpython.unicode cimport PyUnicode_DecodeASCII +from cpython.version cimport PY_MAJOR_VERSION + +from pysam.libchtslib cimport HTSFile, hisremote + + +__all__ = ['VariantFile', + 'VariantHeader', + 'VariantHeaderRecord', + 'VariantRecord'] + +######################################################################## +######################################################################## +## Constants +######################################################################## + +cdef int MAX_POS = 2 << 29 +cdef tuple VALUE_TYPES = ('Flag', 'Integer', 'Float', 'String') +cdef tuple METADATA_TYPES = ('FILTER', 'INFO', 'FORMAT', 'CONTIG', 'STRUCTURED', 'GENERIC') +cdef tuple METADATA_LENGTHS = ('FIXED', 'VARIABLE', 'A', 'G', 'R') + + +######################################################################## +######################################################################## +## Python 3 compatibility functions +######################################################################## + +from pysam.libcutils cimport force_bytes, force_str, charptr_to_str, charptr_to_str_w_len +from pysam.libcutils cimport encode_filename, from_string_and_size + + +######################################################################## +######################################################################## +## Sentinel object +######################################################################## + +cdef object _nothing = object() + +######################################################################## +######################################################################## +## VCF/BCF string intern system +######################################################################## + +cdef dict bcf_str_cache = {} + +cdef inline bcf_str_cache_get_charptr(const char* s): + if s == NULL: + return None + + cdef PyObject *pystr = PyDict_GetItemString(bcf_str_cache, s) + if pystr: + return pystr + + if PY_MAJOR_VERSION < 3: + val = s + else: + val = PyUnicode_DecodeASCII(s, strlen(s), NULL) + + PyDict_SetItemString(bcf_str_cache, s, val) + + return val + + +######################################################################## +######################################################################## +## Genotype math +######################################################################## + +cdef int comb(int n, int k) except -1: + """Return binomial coeffient: n choose k + + >>> comb(5, 1) + 5 + >>> comb(5, 2) + 10 + >>> comb(2, 2) + 1 + >>> comb(100, 2) + 4950 + """ + if k > n: + return 0 + elif k == n: + return 1 + elif k > n // 2: + k = n - k + + cdef d, result + + d = result = n - k + 1 + for i in range(2, k + 1): + d += 1 + result *= d + result //= i + return result + + +cdef inline int bcf_geno_combinations(int ploidy, int alleles) except -1: + """Return the count of genotypes expected for the given ploidy and number of alleles. + + >>> bcf_geno_combinations(1, 2) + 2 + >>> bcf_geno_combinations(2, 2) + 3 + >>> bcf_geno_combinations(2, 3) + 6 + >>> bcf_geno_combinations(3, 2) + 4 + """ + return comb(alleles + ploidy - 1, ploidy) + + +######################################################################## +######################################################################## +## Low level type conversion helpers +######################################################################## + + +cdef inline bint check_header_id(bcf_hdr_t *hdr, int hl_type, int id): + return id >= 0 and id < hdr.n[BCF_DT_ID] and bcf_hdr_idinfo_exists(hdr, hl_type, id) + + +cdef inline int is_gt_fmt(bcf_hdr_t *hdr, int fmt_id): + return strcmp(bcf_hdr_int2id(hdr, BCF_DT_ID, fmt_id), 'GT') == 0 + + +cdef inline int bcf_genotype_count(bcf_hdr_t *hdr, bcf1_t *rec, int sample) except -1: + + if sample < 0: + raise ValueError('genotype is only valid as a format field') + + cdef int32_t *gt_arr = NULL + cdef int ngt = 0 + ngt = bcf_get_genotypes(hdr, rec, >_arr, &ngt) + + if ngt <= 0 or not gt_arr: + return 0 + + assert ngt % rec.n_sample == 0 + cdef int max_ploidy = ngt // rec.n_sample + cdef int32_t *gt = gt_arr + sample * max_ploidy + cdef int ploidy = 0 + + while ploidy < max_ploidy and gt[0] != bcf_int32_vector_end: + gt += 1 + ploidy += 1 + + free(gt_arr) + + return bcf_geno_combinations(ploidy, rec.n_allele) + + +cdef tuple char_array_to_tuple(const char **a, ssize_t n, int free_after=0): + if not a: + return None + try: + return tuple(charptr_to_str(a[i]) for i in range(n)) + finally: + if free_after and a: + free(a) + + +cdef bcf_array_to_object(void *data, int type, ssize_t n, ssize_t count, int scalar): + cdef char *datac + cdef int8_t *data8 + cdef int16_t *data16 + cdef int32_t *data32 + cdef float *dataf + cdef int i + cdef bytes b + + if not data or n <= 0: + return None + + if type == BCF_BT_CHAR: + datac = data + + if not n: + value = () + else: + # Check if at least one null terminator is present + if datac[n-1] == bcf_str_vector_end: + # If so, create a string up to the first null terminator + b = datac + else: + # Otherwise, copy the entire block + b = datac[:n] + value = tuple(v.decode('ascii') if v and v != bcf_str_missing else None for v in b.split(b',')) + else: + value = [] + if type == BCF_BT_INT8: + data8 = data + for i in range(n): + if data8[i] == bcf_int8_vector_end: + break + value.append(data8[i] if data8[i] != bcf_int8_missing else None) + elif type == BCF_BT_INT16: + data16 = data + for i in range(n): + if data16[i] == bcf_int16_vector_end: + break + value.append(data16[i] if data16[i] != bcf_int16_missing else None) + elif type == BCF_BT_INT32: + data32 = data + for i in range(n): + if data32[i] == bcf_int32_vector_end: + break + value.append(data32[i] if data32[i] != bcf_int32_missing else None) + elif type == BCF_BT_FLOAT: + dataf = data + for i in range(n): + if bcf_float_is_vector_end(dataf[i]): + break + value.append(dataf[i] if not bcf_float_is_missing(dataf[i]) else None) + else: + raise TypeError('unsupported info type code') + + # FIXME: Need to know length? Report errors? Pad with missing values? Not clear what to do. + if not value: + if scalar: + value = None + elif count <= 0: + value = () + else: + value = (None,)*count + elif scalar and len(value) == 1: + value = value[0] + else: + value = tuple(value) + + return value + + +cdef bcf_object_to_array(values, void *data, int bt_type, ssize_t n, int vlen): + cdef char *datac + cdef int8_t *data8 + cdef int16_t *data16 + cdef int32_t *data32 + cdef float *dataf + cdef ssize_t i, value_count = len(values) + + assert value_count <= n + + if bt_type == BCF_BT_CHAR: + if not isinstance(values, (str, bytes)): + values = b','.join(force_bytes(v) if v else bcf_str_missing for v in values) + value_count = len(values) + assert value_count <= n + datac = data + memcpy(datac, values, value_count) + for i in range(value_count, n): + datac[i] = 0 + elif bt_type == BCF_BT_INT8: + datai8 = data + for i in range(value_count): + val = values[i] + datai8[i] = val if val is not None else bcf_int8_missing + for i in range(value_count, n): + datai8[i] = bcf_int8_vector_end + elif bt_type == BCF_BT_INT16: + datai16 = data + for i in range(value_count): + val = values[i] + datai16[i] = val if val is not None else bcf_int16_missing + for i in range(value_count, n): + datai16[i] = bcf_int16_vector_end + elif bt_type == BCF_BT_INT32: + datai32 = data + for i in range(value_count): + val = values[i] + datai32[i] = val if val is not None else bcf_int32_missing + for i in range(value_count, n): + datai32[i] = bcf_int32_vector_end + elif bt_type == BCF_BT_FLOAT: + dataf = data + for i in range(value_count): + val = values[i] + if val is None: + bcf_float_set(dataf + i, bcf_float_missing) + else: + dataf[i] = val + for i in range(value_count, n): + bcf_float_set(dataf + i, bcf_float_vector_end) + else: + raise TypeError('unsupported type') + + +cdef bcf_empty_array(int type, ssize_t n, int vlen): + cdef char *datac + cdef int32_t *data32 + cdef float *dataf + cdef int i + + if n <= 0: + raise ValueError('Cannot create empty array') + + if type == BCF_HT_STR: + value = PyBytes_FromStringAndSize(NULL, sizeof(char)*n) + datac = value + for i in range(n): + datac[i] = bcf_str_missing if not vlen else bcf_str_vector_end + elif type == BCF_HT_INT: + value = PyBytes_FromStringAndSize(NULL, sizeof(int32_t)*n) + data32 = value + for i in range(n): + data32[i] = bcf_int32_missing if not vlen else bcf_int32_vector_end + elif type == BCF_HT_REAL: + value = PyBytes_FromStringAndSize(NULL, sizeof(float)*n) + dataf = value + for i in range(n): + bcf_float_set(dataf + i, bcf_float_missing if not vlen else bcf_float_vector_end) + else: + raise TypeError('unsupported header type code') + + return value + + +cdef bcf_copy_expand_array(void *src_data, int src_type, ssize_t src_values, + void *dst_data, int dst_type, ssize_t dst_values, + int vlen): + cdef char *src_datac + cdef char *dst_datac + cdef int8_t *src_datai8 + cdef int16_t *src_datai16 + cdef int32_t *src_datai32 + cdef int32_t *dst_datai + cdef float *src_dataf + cdef float *dst_dataf + cdef ssize_t src_size, dst_size, i, j + cdef int val + + if src_values > dst_values: + raise ValueError('Cannot copy arrays with src_values={} > dst_values={}'.format(src_values, dst_values)) + + if src_type == dst_type == BCF_BT_CHAR: + src_datac = src_data + dst_datac = dst_data + memcpy(src_datac, dst_datac, src_values) + for i in range(src_values, dst_values): + dst_datac[i] = 0 + elif src_type == BCF_BT_INT8 and dst_type == BCF_BT_INT32: + src_datai8 = src_data + dst_datai = dst_data + for i in range(src_values): + val = src_datai8[i] + if val == bcf_int8_missing: + val = bcf_int32_missing + elif val == bcf_int8_vector_end: + val = bcf_int32_vector_end + dst_datai[i] = val + for i in range(src_values, dst_values): + dst_datai[i] = bcf_int32_missing if not vlen else bcf_int32_vector_end + elif src_type == BCF_BT_INT16 and dst_type == BCF_BT_INT32: + src_datai16 = src_data + dst_datai = dst_data + for i in range(src_values): + val = src_datai16[i] + if val == bcf_int16_missing: + val = bcf_int32_missing + elif val == bcf_int16_vector_end: + val = bcf_int32_vector_end + dst_datai[i] = val + for i in range(src_values, dst_values): + dst_datai[i] = bcf_int32_missing if not vlen else bcf_int32_vector_end + elif src_type == BCF_BT_INT32 and dst_type == BCF_BT_INT32: + src_datai32 = src_data + dst_datai = dst_data + for i in range(src_values): + dst_datai[i] = src_datai32[i] + for i in range(src_values, dst_values): + dst_datai[i] = bcf_int32_missing if not vlen else bcf_int32_vector_end + elif src_type == BCF_BT_FLOAT and dst_type == BCF_BT_FLOAT: + src_dataf = src_data + dst_dataf = dst_data + for i in range(src_values): + dst_dataf[i] = src_dataf[i] + for i in range(src_values, dst_values): + bcf_float_set(dst_dataf + i, bcf_float_missing if not vlen else bcf_float_vector_end) + else: + raise TypeError('unsupported types') + + +cdef bcf_get_value_count(VariantRecord record, int hl_type, int id, ssize_t *count, int *scalar, int sample): + if record is None: + raise ValueError('record must not be None') + + cdef bcf_hdr_t *hdr = record.header.ptr + cdef bcf1_t *r = record.ptr + + if not check_header_id(hdr, hl_type, id): + raise ValueError('Invalid header') + + cdef int length = bcf_hdr_id2length(hdr, hl_type, id) + cdef int number = bcf_hdr_id2number(hdr, hl_type, id) + + scalar[0] = 0 + + if hl_type == BCF_HL_FMT and is_gt_fmt(hdr, id): + count[0] = number + elif length == BCF_VL_FIXED: + if number == 1: + scalar[0] = 1 + count[0] = number + elif length == BCF_VL_R: + count[0] = r.n_allele + elif length == BCF_VL_A: + count[0] = r.n_allele - 1 + elif length == BCF_VL_G: + count[0] = bcf_genotype_count(hdr, r, sample) + elif length == BCF_VL_VAR: + count[0] = -1 + else: + raise ValueError('Unknown format length') + + +cdef object bcf_info_get_value(VariantRecord record, const bcf_info_t *z): + if record is None: + raise ValueError('record must not be None') + + cdef bcf_hdr_t *hdr = record.header.ptr + + cdef char *s + cdef ssize_t count + cdef int scalar + + bcf_get_value_count(record, BCF_HL_INFO, z.key, &count, &scalar, -1) + + if z.len == 0: + if bcf_hdr_id2type(hdr, BCF_HL_INFO, z.key) == BCF_HT_FLAG: + value = True + elif scalar: + value = None + else: + value = () + elif z.len == 1: + if z.type == BCF_BT_INT8: + value = z.v1.i if z.v1.i != bcf_int8_missing else None + elif z.type == BCF_BT_INT16: + value = z.v1.i if z.v1.i != bcf_int16_missing else None + elif z.type == BCF_BT_INT32: + value = z.v1.i if z.v1.i != bcf_int32_missing else None + elif z.type == BCF_BT_FLOAT: + value = z.v1.f if not bcf_float_is_missing(z.v1.f) else None + elif z.type == BCF_BT_CHAR: + value = force_str(chr(z.v1.i)) + else: + raise TypeError('unsupported info type code') + + if not scalar and value != (): + value = (value,) + else: + value = bcf_array_to_object(z.vptr, z.type, z.len, count, scalar) + + return value + + +cdef object bcf_check_values(VariantRecord record, value, int sample, + int hl_type, int ht_type, + int id, int bt_type, ssize_t bt_len, + ssize_t *value_count, int *scalar, int *realloc): + + if record is None: + raise ValueError('record must not be None') + + bcf_get_value_count(record, hl_type, id, value_count, scalar, sample) + + # Validate values now that we know the type and size + values = (value,) if not isinstance(value, (list, tuple)) else value + + # Validate values now that we know the type and size + if ht_type == BCF_HT_FLAG: + value_count[0] = 1 + elif hl_type == BCF_HL_FMT and is_gt_fmt(record.header.ptr, id): + # KBJ: htslib lies about the cardinality of GT fields-- they're really VLEN (-1) + value_count[0] = -1 + + cdef int given = len(values) + if value_count[0] != -1 and value_count[0] != given: + if scalar[0]: + raise TypeError('value expected to be scalar, given len={}'.format(value_count[0], given)) + else: + raise TypeError('values expected to be {}-tuple, given len={}'.format(value_count[0], given)) + + if ht_type == BCF_HT_REAL: + for v in values: + if not(v is None or isinstance(v, (float, int))): + raise TypeError('invalid value for Float format') + elif ht_type == BCF_HT_INT: + for v in values: + if not(v is None or (isinstance(v, (float, int)) and int(v) == v)): + raise TypeError('invalid value for Integer format') + for v in values: + if not(v is None or bcf_int32_missing < v <= INT32_MAX): + raise ValueError('Integer value too small/large to store in VCF/BCF') + elif ht_type == BCF_HT_STR: + values = b','.join(force_bytes(v) if v is not None else b'' for v in values) + elif ht_type == BCF_HT_FLAG: + if values[0] not in (True, False, None, 1, 0): + raise ValueError('Flag values must be: True, False, None, 1, 0') + else: + raise TypeError('unsupported type') + + realloc[0] = 0 + if len(values) <= 1 and hl_type == BCF_HL_INFO: + realloc[0] = 0 + elif len(values) > bt_len: + realloc[0] = 1 + elif bt_type == BCF_BT_INT8: + for v in values: + if v is not None and not(bcf_int8_missing < v <= INT8_MAX): + realloc[0] = 1 + break + elif bt_type == BCF_BT_INT16: + for v in values: + if v is not None and not(bcf_int16_missing < v <= INT16_MAX): + realloc[0] = 1 + break + + return values + + +cdef bcf_encode_alleles(VariantRecord record, values): + if record is None: + raise ValueError('record must not be None') + + cdef bcf1_t *r = record.ptr + cdef int32_t nalleles = r.n_allele + cdef list gt_values = [] + cdef char *s + cdef int i + + if values is None: + return () + + if not isinstance(values, (list, tuple)): + values = (values,) + + for value in values: + if value is None: + gt_values.append(bcf_gt_missing) + elif isinstance(value, (str, bytes)): + bvalue = force_bytes(value) + s = bvalue + for i in range(r.n_allele): + if strcmp(r.d.allele[i], s) != 0: + gt_values.append(bcf_gt_unphased(i)) + break + else: + raise ValueError('Unknown allele') + else: + i = value + if not (0 <= i < nalleles): + raise ValueError('Invalid allele index') + gt_values.append(bcf_gt_unphased(i)) + + return gt_values + + +cdef bcf_info_set_value(VariantRecord record, key, value): + if record is None: + raise ValueError('record must not be None') + + cdef bcf_hdr_t *hdr = record.header.ptr + cdef bcf1_t *r = record.ptr + cdef int info_id, info_type, scalar, dst_type, realloc, vlen = 0 + cdef ssize_t i, value_count, alloc_len, alloc_size, dst_size + + if bcf_unpack(r, BCF_UN_INFO) < 0: + raise ValueError('Error unpacking VariantRecord') + + cdef bytes bkey = force_bytes(key) + cdef bcf_info_t *info = bcf_get_info(hdr, r, bkey) + + if info: + info_id = info.key + else: + info_id = bcf_header_get_info_id(hdr, bkey) + + if info_id < 0: + raise KeyError('unknown INFO: {}'.format(key)) + + if not check_header_id(hdr, BCF_HL_INFO, info_id): + raise ValueError('Invalid header') + + info_type = bcf_hdr_id2type(hdr, BCF_HL_INFO, info_id) + values = bcf_check_values(record, value, -1, + BCF_HL_INFO, info_type, info_id, + info.type if info else -1, + info.len if info else -1, + &value_count, &scalar, &realloc) + + if info_type == BCF_HT_FLAG: + if bcf_update_info(hdr, r, bkey, NULL, bool(values[0]), info_type) < 0: + raise ValueError('Unable to update INFO values') + return + + vlen = value_count < 0 + value_count = len(values) + + # DISABLED DUE TO ISSUES WITH THE CRAZY POINTERS + # If we can, write updated values to existing allocated storage + if 0 and info and not realloc: + r.d.shared_dirty |= BCF1_DIRTY_INF + + if value_count == 0: + info.len = 0 + if not info.vptr: + info.vptr = &info.v1.i + + elif value_count == 1: + # FIXME: Check if need to free vptr if info.len > 0? + if info.type == BCF_BT_INT8 or info.type == BCF_BT_INT16 or info.type == BCF_BT_INT32: + bcf_object_to_array(values, &info.v1.i, BCF_BT_INT32, 1, vlen) + elif info.type == BCF_BT_FLOAT: + bcf_object_to_array(values, &info.v1.f, BCF_BT_FLOAT, 1, vlen) + else: + raise TypeError('unsupported info type code') + + info.len = 1 + if not info.vptr: + info.vptr = &info.v1.i + else: + bcf_object_to_array(values, info.vptr, info.type, info.len, vlen) + + return + + alloc_len = max(1, value_count) + if info and info.len > alloc_len: + alloc_len = info.len + + new_values = bcf_empty_array(info_type, alloc_len, vlen) + cdef char *valp = new_values + + if info_type == BCF_HT_INT: + dst_type = BCF_BT_INT32 + elif info_type == BCF_HT_REAL: + dst_type = BCF_BT_FLOAT + elif info_type == BCF_HT_STR: + dst_type = BCF_BT_CHAR + else: + raise ValueError('Unsupported INFO type') + + bcf_object_to_array(values, valp, dst_type, alloc_len, vlen) + + if bcf_update_info(hdr, r, bkey, valp, alloc_len, info_type) < 0: + raise ValueError('Unable to update INFO values') + + +cdef bcf_info_del_value(VariantRecord record, key): + if record is None: + raise ValueError('record must not be None') + + cdef bcf_hdr_t *hdr = record.header.ptr + cdef bcf1_t *r = record.ptr + cdef ssize_t value_count + cdef int scalar + + if bcf_unpack(r, BCF_UN_INFO) < 0: + raise ValueError('Error unpacking VariantRecord') + + cdef bytes bkey = force_bytes(key) + cdef bcf_info_t *info = bcf_get_info(hdr, r, bkey) + + if not info: + raise KeyError(key) + + bcf_get_value_count(record, BCF_HL_INFO, info.key, &value_count, &scalar, -1) + + if value_count <= 0: + null_value = () + elif scalar: + null_value = None + else: + null_value = (None,)*value_count + + bcf_info_set_value(record, bkey, null_value) + + +cdef bcf_format_get_value(VariantRecordSample sample, key): + if sample is None: + raise ValueError('sample must not be None') + + cdef bcf_hdr_t *hdr = sample.record.header.ptr + cdef bcf1_t *r = sample.record.ptr + cdef ssize_t count + cdef int scalar + + if bcf_unpack(r, BCF_UN_ALL) < 0: + raise ValueError('Error unpacking VariantRecord') + + cdef bytes bkey = force_bytes(key) + cdef bcf_fmt_t *fmt = bcf_get_fmt(hdr, r, bkey) + + if not fmt or not fmt.p: + raise KeyError('invalid FORMAT: {}'.format(key)) + + if is_gt_fmt(hdr, fmt.id): + return bcf_format_get_allele_indices(sample) + + bcf_get_value_count(sample.record, BCF_HL_FMT, fmt.id, &count, &scalar, sample.index) + + if fmt.p and fmt.n and fmt.size: + return bcf_array_to_object(fmt.p + sample.index * fmt.size, fmt.type, fmt.n, count, scalar) + elif scalar: + return None + elif count <= 0: + return () + else: + return (None,)*count + + +cdef bcf_format_set_value(VariantRecordSample sample, key, value): + if sample is None: + raise ValueError('sample must not be None') + + if key == 'phased': + sample.phased = bool(value) + return + + cdef bcf_hdr_t *hdr = sample.record.header.ptr + cdef bcf1_t *r = sample.record.ptr + cdef int fmt_id + cdef vdict_t *d + cdef khiter_t k + cdef int fmt_type, scalar, realloc, dst_type, vlen = 0 + cdef ssize_t i, n, value_count, alloc_size, alloc_len, dst_size + + if bcf_unpack(r, BCF_UN_ALL) < 0: + raise ValueError('Error unpacking VariantRecord') + + cdef bytes bkey = force_bytes(key) + cdef bcf_fmt_t *fmt = bcf_get_fmt(hdr, r, bkey) + + if fmt: + fmt_id = fmt.id + else: + d = hdr.dict[BCF_DT_ID] + k = kh_get_vdict(d, bkey) + + if k == kh_end(d) or kh_val_vdict(d, k).info[BCF_HL_FMT] & 0xF == 0xF: + raise KeyError('unknown format: {}'.format(key)) + + fmt_id = kh_val_vdict(d, k).id + + if not check_header_id(hdr, BCF_HL_FMT, fmt_id): + raise ValueError('Invalid header') + + fmt_type = bcf_hdr_id2type(hdr, BCF_HL_FMT, fmt_id) + + if fmt_type == BCF_HT_FLAG: + raise ValueError('Flag types are not allowed on FORMATs') + + if is_gt_fmt(hdr, fmt_id): + value = bcf_encode_alleles(sample.record, value) + # KBJ: GT field is considered to be a string by the VCF header but BCF represents it as INT. + fmt_type = BCF_HT_INT + + values = bcf_check_values(sample.record, value, sample.index, + BCF_HL_FMT, fmt_type, fmt_id, + fmt.type if fmt else -1, + fmt.n if fmt else -1, + &value_count, &scalar, &realloc) + + vlen = value_count < 0 + value_count = len(values) + + # If we can, write updated values to existing allocated storage + if fmt and not realloc: + r.d.indiv_dirty = 1 + bcf_object_to_array(values, fmt.p + sample.index * fmt.size, fmt.type, fmt.n, vlen) + return + + alloc_len = max(1, value_count) + if fmt and fmt.n > alloc_len: + alloc_len = fmt.n + + n = r.n_sample + new_values = bcf_empty_array(fmt_type, n*alloc_len, vlen) + cdef char *valp = new_values + + if fmt_type == BCF_HT_INT: + dst_type = BCF_BT_INT32 + dst_size = sizeof(int32_t) * alloc_len + elif fmt_type == BCF_HT_REAL: + dst_type = BCF_BT_FLOAT + dst_size = sizeof(float) * alloc_len + elif fmt_type == BCF_HT_STR: + dst_type = BCF_BT_CHAR + dst_size = sizeof(char) * alloc_len + else: + raise ValueError('Unsupported FORMAT type') + + if fmt and n > 1: + for i in range(n): + bcf_copy_expand_array(fmt.p + i*fmt.size, fmt.type, fmt.n, + valp + i*dst_size, dst_type, alloc_len, + vlen) + + bcf_object_to_array(values, valp + sample.index*dst_size, dst_type, alloc_len, vlen) + + if bcf_update_format(hdr, r, bkey, valp, (n*alloc_len), fmt_type) < 0: + raise ValueError('Unable to update format values') + + +cdef bcf_format_del_value(VariantRecordSample sample, key): + if sample is None: + raise ValueError('sample must not be None') + + cdef bcf_hdr_t *hdr = sample.record.header.ptr + cdef bcf1_t *r = sample.record.ptr + cdef ssize_t value_count + cdef int scalar + + if bcf_unpack(r, BCF_UN_ALL) < 0: + raise ValueError('Error unpacking VariantRecord') + + cdef bytes bkey = force_bytes(key) + cdef bcf_fmt_t *fmt = bcf_get_fmt(hdr, r, bkey) + + if not fmt or not fmt.p: + raise KeyError(key) + + bcf_get_value_count(sample.record, BCF_HL_FMT, fmt.id, &value_count, &scalar, sample.index) + + if value_count <= 0: + null_value = () + elif scalar: + null_value = None + else: + null_value = (None,)*value_count + + bcf_format_set_value(sample, bkey, null_value) + + +cdef bcf_format_get_allele_indices(VariantRecordSample sample): + if sample is None: + raise ValueError('sample must not be None') + + cdef bcf_hdr_t *hdr = sample.record.header.ptr + cdef bcf1_t *r = sample.record.ptr + cdef int32_t n = r.n_sample + + if bcf_unpack(r, BCF_UN_ALL) < 0: + raise ValueError('Error unpacking VariantRecord') + + if sample.index < 0 or sample.index >= n or not r.n_fmt: + return () + + cdef bcf_fmt_t *fmt0 = r.d.fmt + cdef int gt0 = is_gt_fmt(hdr, fmt0.id) + + if not gt0 or not fmt0.n: + return () + + cdef int8_t *data8 + cdef int16_t *data16 + cdef int32_t *data32 + cdef int32_t a, nalleles = r.n_allele + cdef list alleles = [] + + if fmt0.type == BCF_BT_INT8: + data8 = (fmt0.p + sample.index * fmt0.size) + for i in range(fmt0.n): + if data8[i] == bcf_int8_vector_end: + break + elif data8[i] == bcf_gt_missing: + a = -1 + else: + a = bcf_gt_allele(data8[i]) + alleles.append(a if 0 <= a < nalleles else None) + elif fmt0.type == BCF_BT_INT16: + data16 = (fmt0.p + sample.index * fmt0.size) + for i in range(fmt0.n): + if data16[i] == bcf_int16_vector_end: + break + elif data16[i] == bcf_gt_missing: + a = -1 + else: + a = bcf_gt_allele(data16[i]) + alleles.append(a if 0 <= a < nalleles else None) + elif fmt0.type == BCF_BT_INT32: + data32 = (fmt0.p + sample.index * fmt0.size) + for i in range(fmt0.n): + if data32[i] == bcf_int32_vector_end: + break + elif data32[i] == bcf_gt_missing: + a = -1 + else: + a = bcf_gt_allele(data32[i]) + alleles.append(a if 0 <= a < nalleles else None) + + return tuple(alleles) + + +cdef bcf_format_get_alleles(VariantRecordSample sample): + if sample is None: + raise ValueError('sample must not be None') + + cdef bcf_hdr_t *hdr = sample.record.header.ptr + cdef bcf1_t *r = sample.record.ptr + cdef int32_t nsamples = r.n_sample + + if bcf_unpack(r, BCF_UN_ALL) < 0: + raise ValueError('Error unpacking VariantRecord') + + cdef int32_t nalleles = r.n_allele + + if sample.index < 0 or sample.index >= nsamples or not r.n_fmt: + return () + + cdef bcf_fmt_t *fmt0 = r.d.fmt + cdef int gt0 = is_gt_fmt(hdr, fmt0.id) + + if not gt0 or not fmt0.n: + return () + + cdef int32_t a + cdef int8_t *data8 + cdef int16_t *data16 + cdef int32_t *data32 + alleles = [] + if fmt0.type == BCF_BT_INT8: + data8 = (fmt0.p + sample.index * fmt0.size) + for i in range(fmt0.n): + if data8[i] == bcf_int8_vector_end: + break + a = bcf_gt_allele(data8[i]) + alleles.append(charptr_to_str(r.d.allele[a]) if 0 <= a < nalleles else None) + elif fmt0.type == BCF_BT_INT16: + data16 = (fmt0.p + sample.index * fmt0.size) + for i in range(fmt0.n): + if data16[i] == bcf_int16_vector_end: + break + a = bcf_gt_allele(data16[i]) + alleles.append(charptr_to_str(r.d.allele[a]) if 0 <= a < nalleles else None) + elif fmt0.type == BCF_BT_INT32: + data32 = (fmt0.p + sample.index * fmt0.size) + for i in range(fmt0.n): + if data32[i] == bcf_int32_vector_end: + break + a = bcf_gt_allele(data32[i]) + alleles.append(charptr_to_str(r.d.allele[a]) if 0 <= a < nalleles else None) + return tuple(alleles) + + +cdef bint bcf_sample_get_phased(VariantRecordSample sample): + if sample is None: + raise ValueError('sample must not be None') + + cdef bcf_hdr_t *hdr = sample.record.header.ptr + cdef bcf1_t *r = sample.record.ptr + cdef int32_t n = r.n_sample + + if bcf_unpack(r, BCF_UN_ALL) < 0: + raise ValueError('Error unpacking VariantRecord') + + if sample.index < 0 or sample.index >= n or not r.n_fmt: + return False + + cdef bcf_fmt_t *fmt0 = r.d.fmt + cdef int gt0 = is_gt_fmt(hdr, fmt0.id) + + if not gt0 or not fmt0.n: + return False + + cdef int8_t *data8 + cdef int16_t *data16 + cdef int32_t *data32 + + cdef bint phased = False + + if fmt0.type == BCF_BT_INT8: + data8 = (fmt0.p + sample.index * fmt0.size) + for i in range(fmt0.n): + if data8[i] == bcf_int8_vector_end: + break + elif data8[i] == bcf_int8_missing: + continue + elif i and not bcf_gt_is_phased(data8[i]): + return False + else: + phased = True + elif fmt0.type == BCF_BT_INT16: + data16 = (fmt0.p + sample.index * fmt0.size) + for i in range(fmt0.n): + if data16[i] == bcf_int16_vector_end: + break + elif data16[i] == bcf_int16_missing: + continue + elif i and not bcf_gt_is_phased(data16[i]): + return False + else: + phased = True + elif fmt0.type == BCF_BT_INT32: + data32 = (fmt0.p + sample.index * fmt0.size) + for i in range(fmt0.n): + if data32[i] == bcf_int32_vector_end: + break + elif data32[i] == bcf_int32_missing: + continue + elif i and not bcf_gt_is_phased(data32[i]): + return False + else: + phased = True + + return phased + + +cdef bcf_sample_set_phased(VariantRecordSample sample, bint phased): + if sample is None: + raise ValueError('sample must not be None') + + cdef bcf_hdr_t *hdr = sample.record.header.ptr + cdef bcf1_t *r = sample.record.ptr + cdef int32_t n = r.n_sample + + if bcf_unpack(r, BCF_UN_ALL) < 0: + raise ValueError('Error unpacking VariantRecord') + + if sample.index < 0 or sample.index >= n or not r.n_fmt: + return + + cdef bcf_fmt_t *fmt0 = r.d.fmt + cdef int gt0 = is_gt_fmt(hdr, fmt0.id) + + if not gt0 or not fmt0.n: + raise ValueError('Cannot set phased before genotype is set') + + cdef int8_t *data8 + cdef int16_t *data16 + cdef int32_t *data32 + + if fmt0.type == BCF_BT_INT8: + data8 = (fmt0.p + sample.index * fmt0.size) + for i in range(fmt0.n): + if data8[i] == bcf_int8_vector_end: + break + elif data8[i] == bcf_int8_missing: + continue + elif i: + data8[i] = (data8[i] & 0xFE) | phased + elif fmt0.type == BCF_BT_INT16: + data16 = (fmt0.p + sample.index * fmt0.size) + for i in range(fmt0.n): + if data16[i] == bcf_int16_vector_end: + break + elif data16[i] == bcf_int16_missing: + continue + elif i: + data16[i] = (data16[i] & 0xFFFE) | phased + elif fmt0.type == BCF_BT_INT32: + data32 = (fmt0.p + sample.index * fmt0.size) + for i in range(fmt0.n): + if data32[i] == bcf_int32_vector_end: + break + elif data32[i] == bcf_int32_missing: + continue + elif i: + data32[i] = (data32[i] & 0xFFFFFFFE) | phased + + +cdef inline bcf_sync_end(VariantRecord record): + cdef bcf_hdr_t *hdr = record.header.ptr + cdef bcf_info_t *info + cdef int end_id = bcf_header_get_info_id(record.header.ptr, b'END') + cdef int ref_len + + # allow missing ref when instantiating a new record + if record.ref is not None: + ref_len = len(record.ref) + else: + ref_len = 0 + + # Delete INFO/END if no alleles are present or if rlen is equal to len(ref) + # Always keep END for symbolic alleles + if not has_symbolic_allele(record) and (not record.ptr.n_allele or record.ptr.rlen == ref_len): + # If INFO/END is not defined in the header, it doesn't exist in the record + if end_id >= 0: + info = bcf_get_info(hdr, record.ptr, b'END') + if info and info.vptr: + if bcf_update_info(hdr, record.ptr, b'END', NULL, 0, info.type) < 0: + raise ValueError('Unable to delete END') + else: + # Create END header, if not present + if end_id < 0: + record.header.info.add('END', number=1, type='Integer', description='Stop position of the interval') + + # Update to reflect stop position + bcf_info_set_value(record, b'END', record.ptr.pos + record.ptr.rlen) + + +cdef inline int has_symbolic_allele(VariantRecord record): + """Return index of first symbolic allele. 0 if no symbolic alleles.""" + + for i in range(1, record.ptr.n_allele): + alt = record.ptr.d.allele[i] + if alt[0] == b'<' and alt[len(alt) - 1] == b'>': + return i + + return 0 + + +######################################################################## +######################################################################## +## Variant Header objects +######################################################################## + + +cdef bcf_header_remove_hrec(VariantHeader header, int i): + if header is None: + raise ValueError('header must not be None') + + cdef bcf_hdr_t *hdr = header.ptr + + if i < 0 or i >= hdr.nhrec: + raise ValueError('Invalid header record index') + + cdef bcf_hrec_t *hrec = hdr.hrec[i] + hdr.nhrec -= 1 + + if i < hdr.nhrec: + memmove(&hdr.hrec[i], &hdr.hrec[i+1], (hdr.nhrec-i)*sizeof(bcf_hrec_t*)) + + bcf_hrec_destroy(hrec) + hdr.hrec[hdr.nhrec] = NULL + hdr.dirty = 1 + + +#FIXME: implement a full mapping interface +#FIXME: passing bcf_hrec_t* is not safe, since we cannot control the +# object lifetime. +cdef class VariantHeaderRecord(object): + """header record from a :class:`VariantHeader` object""" + def __init__(self, *args, **kwargs): + raise TypeError('this class cannot be instantiated from Python') + + @property + def type(self): + """header type: FILTER, INFO, FORMAT, CONTIG, STRUCTURED, or GENERIC""" + cdef bcf_hrec_t *r = self.ptr + if not r: + return None + return METADATA_TYPES[r.type] + + @property + def key(self): + """header key (the part before '=', in FILTER/INFO/FORMAT/contig/fileformat etc.)""" + cdef bcf_hrec_t *r = self.ptr + return bcf_str_cache_get_charptr(r.key) if r and r.key else None + + @property + def value(self): + """header value. Set only for generic lines, None for FILTER/INFO, etc.""" + cdef bcf_hrec_t *r = self.ptr + return charptr_to_str(r.value) if r and r.value else None + + @property + def attrs(self): + """sequence of additional header attributes""" + cdef bcf_hrec_t *r = self.ptr + if not r: + return () + cdef int i + return tuple((bcf_str_cache_get_charptr(r.keys[i]) if r.keys[i] else None, + charptr_to_str(r.vals[i]) if r.vals[i] else None) + for i in range(r.nkeys)) + + def __len__(self): + cdef bcf_hrec_t *r = self.ptr + return r.nkeys if r else 0 + + def __bool__(self): + cdef bcf_hrec_t *r = self.ptr + return r != NULL and r.nkeys != 0 + + def __getitem__(self, key): + """get attribute value""" + cdef bcf_hrec_t *r = self.ptr + cdef int i + if r: + bkey = force_bytes(key) + for i in range(r.nkeys): + if r.keys[i] and r.keys[i] == bkey: + return charptr_to_str(r.vals[i]) if r.vals[i] else None + raise KeyError('cannot find metadata key') + + def __iter__(self): + cdef bcf_hrec_t *r = self.ptr + if not r: + return + cdef int i + for i in range(r.nkeys): + if r.keys[i]: + yield bcf_str_cache_get_charptr(r.keys[i]) + + def get(self, key, default=None): + """D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.""" + try: + return self[key] + except KeyError: + return default + + def __contains__(self, key): + try: + self[key] + except KeyError: + return False + else: + return True + + def iterkeys(self): + """D.iterkeys() -> an iterator over the keys of D""" + return iter(self) + + def itervalues(self): + """D.itervalues() -> an iterator over the values of D""" + cdef bcf_hrec_t *r = self.ptr + if not r: + return + cdef int i + for i in range(r.nkeys): + if r.keys[i]: + yield charptr_to_str(r.vals[i]) if r.vals[i] else None + + def iteritems(self): + """D.iteritems() -> an iterator over the (key, value) items of D""" + cdef bcf_hrec_t *r = self.ptr + if not r: + return + cdef int i + for i in range(r.nkeys): + if r.keys[i]: + yield (bcf_str_cache_get_charptr(r.keys[i]), charptr_to_str(r.vals[i]) if r.vals[i] else None) + + def keys(self): + """D.keys() -> list of D's keys""" + return list(self) + + def items(self): + """D.items() -> list of D's (key, value) pairs, as 2-tuples""" + return list(self.iteritems()) + + def values(self): + """D.values() -> list of D's values""" + return list(self.itervalues()) + + def update(self, items=None, **kwargs): + """D.update([E, ]**F) -> None. + + Update D from dict/iterable E and F. + """ + for k, v in items.items(): + self[k] = v + + if kwargs: + for k, v in kwargs.items(): + self[k] = v + + def pop(self, key, default=_nothing): + try: + value = self[key] + del self[key] + return value + except KeyError: + if default is not _nothing: + return default + raise + + # Mappings are not hashable by default, but subclasses can change this + __hash__ = None + + #TODO: implement __richcmp__ + + def __str__(self): + cdef bcf_hrec_t *r = self.ptr + + if not r: + raise ValueError('cannot convert deleted record to str') + + cdef kstring_t hrec_str + hrec_str.l = hrec_str.m = 0 + hrec_str.s = NULL + + bcf_hrec_format(r, &hrec_str) + + ret = charptr_to_str_w_len(hrec_str.s, hrec_str.l) + + if hrec_str.m: + free(hrec_str.s) + + return ret + + # FIXME: Not safe -- causes trivial segfaults at the moment + def remove(self): + cdef bcf_hdr_t *hdr = self.header.ptr + cdef bcf_hrec_t *r = self.ptr + if not r: + return + assert r.key + cdef char *key = r.key if r.type == BCF_HL_GEN else r.value + bcf_hdr_remove(hdr, r.type, key) + self.ptr = NULL + + +cdef VariantHeaderRecord makeVariantHeaderRecord(VariantHeader header, bcf_hrec_t *hdr): + if not header: + raise ValueError('invalid VariantHeader') + + if not hdr: + return None + + cdef VariantHeaderRecord record = VariantHeaderRecord.__new__(VariantHeaderRecord) + record.header = header + record.ptr = hdr + + return record + + +cdef class VariantHeaderRecords(object): + """sequence of :class:`VariantHeaderRecord` object from a :class:`VariantHeader` object""" + def __init__(self, *args, **kwargs): + raise TypeError('this class cannot be instantiated from Python') + + def __len__(self): + return self.header.ptr.nhrec + + def __bool__(self): + return self.header.ptr.nhrec != 0 + + def __getitem__(self, index): + cdef int32_t i = index + if i < 0 or i >= self.header.ptr.nhrec: + raise IndexError('invalid header record index') + return makeVariantHeaderRecord(self.header, self.header.ptr.hrec[i]) + + def __iter__(self): + cdef int32_t i + for i in range(self.header.ptr.nhrec): + yield makeVariantHeaderRecord(self.header, self.header.ptr.hrec[i]) + + __hash__ = None + + +cdef VariantHeaderRecords makeVariantHeaderRecords(VariantHeader header): + if not header: + raise ValueError('invalid VariantHeader') + + cdef VariantHeaderRecords records = VariantHeaderRecords.__new__(VariantHeaderRecords) + records.header = header + return records + + +cdef class VariantMetadata(object): + """filter, info or format metadata record from a :class:`VariantHeader` object""" + def __init__(self, *args, **kwargs): + raise TypeError('this class cannot be instantiated from Python') + + @property + def name(self): + """metadata name""" + cdef bcf_hdr_t *hdr = self.header.ptr + return bcf_str_cache_get_charptr(hdr.id[BCF_DT_ID][self.id].key) + + # Q: Should this be exposed? + @property + def id(self): + """metadata internal header id number""" + return self.id + + @property + def number(self): + """metadata number (i.e. cardinality)""" + cdef bcf_hdr_t *hdr = self.header.ptr + + if not check_header_id(hdr, self.type, self.id): + raise ValueError('Invalid header id') + + if self.type == BCF_HL_FLT: + return None + + cdef int l = bcf_hdr_id2length(hdr, self.type, self.id) + if l == BCF_VL_FIXED: + return bcf_hdr_id2number(hdr, self.type, self.id) + elif l == BCF_VL_VAR: + return '.' + else: + return METADATA_LENGTHS[l] + + @property + def type(self): + """metadata value type""" + cdef bcf_hdr_t *hdr = self.header.ptr + if not check_header_id(hdr, self.type, self.id): + raise ValueError('Invalid header id') + + if self.type == BCF_HL_FLT: + return None + return VALUE_TYPES[bcf_hdr_id2type(hdr, self.type, self.id)] + + @property + def description(self): + """metadata description (or None if not set)""" + descr = self.record.get('Description') + if descr: + descr = descr.strip('"') + return force_str(descr) + + @property + def record(self): + """:class:`VariantHeaderRecord` associated with this :class:`VariantMetadata` object""" + cdef bcf_hdr_t *hdr = self.header.ptr + if not check_header_id(hdr, self.type, self.id): + raise ValueError('Invalid header id') + cdef bcf_hrec_t *hrec = hdr.id[BCF_DT_ID][self.id].val.hrec[self.type] + if not hrec: + return None + return makeVariantHeaderRecord(self.header, hrec) + + def remove_header(self): + cdef bcf_hdr_t *hdr = self.header.ptr + cdef const char *key = hdr.id[BCF_DT_ID][self.id].key + bcf_hdr_remove(hdr, self.type, key) + + +cdef VariantMetadata makeVariantMetadata(VariantHeader header, int type, int id): + if not header: + raise ValueError('invalid VariantHeader') + + if type != BCF_HL_FLT and type != BCF_HL_INFO and type != BCF_HL_FMT: + raise ValueError('invalid metadata type') + + if id < 0 or id >= header.ptr.n[BCF_DT_ID]: + raise ValueError('invalid metadata id') + + cdef VariantMetadata meta = VariantMetadata.__new__(VariantMetadata) + meta.header = header + meta.type = type + meta.id = id + + return meta + + +cdef class VariantHeaderMetadata(object): + """mapping from filter, info or format name to :class:`VariantMetadata` object""" + def __init__(self, *args, **kwargs): + raise TypeError('this class cannot be instantiated from Python') + + def add(self, id, number, type, description, **kwargs): + """Add a new filter, info or format record""" + if id in self: + raise ValueError('Header already exists for id={}'.format(id)) + + if self.type == BCF_HL_FLT: + if number is not None: + raise ValueError('Number must be None when adding a filter') + if type is not None: + raise ValueError('Type must be None when adding a filter') + + items = [('ID', id), ('Description', description)] + else: + if type not in VALUE_TYPES: + raise ValueError('unknown type specified: {}'.format(type)) + if number is None: + number = '.' + + items = [('ID', id), + ('Number', number), + ('Type', type), + ('Description', description)] + + items += kwargs.items() + self.header.add_meta(METADATA_TYPES[self.type], items=items) + + def __len__(self): + cdef bcf_hdr_t *hdr = self.header.ptr + cdef bcf_idpair_t *idpair + cdef int32_t i, n = 0 + + for i in range(hdr.n[BCF_DT_ID]): + idpair = hdr.id[BCF_DT_ID] + i + if idpair.key and idpair.val and idpair.val.info[self.type] & 0xF != 0xF: + n += 1 + return n + + def __bool__(self): + cdef bcf_hdr_t *hdr = self.header.ptr + cdef bcf_idpair_t *idpair + cdef int32_t i + + for i in range(hdr.n[BCF_DT_ID]): + idpair = hdr.id[BCF_DT_ID] + i + if idpair.key and idpair.val and idpair.val.info[self.type] & 0xF != 0xF: + return True + return False + + def __getitem__(self, key): + cdef bcf_hdr_t *hdr = self.header.ptr + cdef vdict_t *d = hdr.dict[BCF_DT_ID] + + cdef bytes bkey = force_bytes(key) + cdef khiter_t k = kh_get_vdict(d, bkey) + + if k == kh_end(d) or kh_val_vdict(d, k).info[self.type] & 0xF == 0xF: + raise KeyError('invalid key: {}'.format(key)) + + return makeVariantMetadata(self.header, self.type, kh_val_vdict(d, k).id) + + def remove_header(self, key): + cdef bcf_hdr_t *hdr = self.header.ptr + cdef vdict_t *d = hdr.dict[BCF_DT_ID] + + cdef bytes bkey = force_bytes(key) + cdef khiter_t k = kh_get_vdict(d, bkey) + + if k == kh_end(d) or kh_val_vdict(d, k).info[self.type] & 0xF == 0xF: + raise KeyError('invalid key: {}'.format(key)) + + bcf_hdr_remove(hdr, self.type, bkey) + #bcf_hdr_sync(hdr) + + def clear_header(self): + cdef bcf_hdr_t *hdr = self.header.ptr + bcf_hdr_remove(hdr, self.type, NULL) + #bcf_hdr_sync(hdr) + + def __iter__(self): + cdef bcf_hdr_t *hdr = self.header.ptr + cdef bcf_idpair_t *idpair + cdef int32_t i + + for i in range(hdr.n[BCF_DT_ID]): + idpair = hdr.id[BCF_DT_ID] + i + if idpair.key and idpair.val and idpair.val.info[self.type] & 0xF != 0xF: + yield bcf_str_cache_get_charptr(idpair.key) + + def get(self, key, default=None): + """D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.""" + try: + return self[key] + except KeyError: + return default + + def __contains__(self, key): + try: + self[key] + except KeyError: + return False + else: + return True + + def iterkeys(self): + """D.iterkeys() -> an iterator over the keys of D""" + return iter(self) + + def itervalues(self): + """D.itervalues() -> an iterator over the values of D""" + for key in self: + yield self[key] + + def iteritems(self): + """D.iteritems() -> an iterator over the (key, value) items of D""" + for key in self: + yield (key, self[key]) + + def keys(self): + """D.keys() -> list of D's keys""" + return list(self) + + def items(self): + """D.items() -> list of D's (key, value) pairs, as 2-tuples""" + return list(self.iteritems()) + + def values(self): + """D.values() -> list of D's values""" + return list(self.itervalues()) + + # Mappings are not hashable by default, but subclasses can change this + __hash__ = None + + #TODO: implement __richcmp__ + + +cdef VariantHeaderMetadata makeVariantHeaderMetadata(VariantHeader header, int32_t type): + if not header: + raise ValueError('invalid VariantHeader') + + cdef VariantHeaderMetadata meta = VariantHeaderMetadata.__new__(VariantHeaderMetadata) + meta.header = header + meta.type = type + + return meta + + +cdef class VariantContig(object): + """contig metadata from a :class:`VariantHeader`""" + def __init__(self, *args, **kwargs): + raise TypeError('this class cannot be instantiated from Python') + + @property + def name(self): + """contig name""" + cdef bcf_hdr_t *hdr = self.header.ptr + return bcf_str_cache_get_charptr(hdr.id[BCF_DT_CTG][self.id].key) + + @property + def id(self): + """contig internal id number""" + return self.id + + @property + def length(self): + """contig length or None if not available""" + cdef bcf_hdr_t *hdr = self.header.ptr + cdef uint32_t length = hdr.id[BCF_DT_CTG][self.id].val.info[0] + return length if length else None + + @property + def header_record(self): + """:class:`VariantHeaderRecord` associated with this :class:`VariantContig` object""" + cdef bcf_hdr_t *hdr = self.header.ptr + cdef bcf_hrec_t *hrec = hdr.id[BCF_DT_CTG][self.id].val.hrec[0] + return makeVariantHeaderRecord(self.header, hrec) + + def remove_header(self): + cdef bcf_hdr_t *hdr = self.header.ptr + cdef const char *key = hdr.id[BCF_DT_CTG][self.id].key + bcf_hdr_remove(hdr, BCF_HL_CTG, key) + + +cdef VariantContig makeVariantContig(VariantHeader header, int id): + if not header: + raise ValueError('invalid VariantHeader') + + if id < 0 or id >= header.ptr.n[BCF_DT_CTG]: + raise ValueError('invalid contig id') + + cdef VariantContig contig = VariantContig.__new__(VariantContig) + contig.header = header + contig.id = id + + return contig + + +cdef class VariantHeaderContigs(object): + """mapping from contig name or index to :class:`VariantContig` object.""" + def __init__(self, *args, **kwargs): + raise TypeError('this class cannot be instantiated from Python') + + def __len__(self): + cdef bcf_hdr_t *hdr = self.header.ptr + assert kh_size(hdr.dict[BCF_DT_CTG]) == hdr.n[BCF_DT_CTG] + return hdr.n[BCF_DT_CTG] + + def __bool__(self): + cdef bcf_hdr_t *hdr = self.header.ptr + assert kh_size(hdr.dict[BCF_DT_CTG]) == hdr.n[BCF_DT_CTG] + return hdr.n[BCF_DT_CTG] != 0 + + def __getitem__(self, key): + cdef bcf_hdr_t *hdr = self.header.ptr + cdef int index + + if isinstance(key, int): + index = key + if index < 0 or index >= hdr.n[BCF_DT_CTG]: + raise IndexError('invalid contig index') + return makeVariantContig(self.header, index) + + cdef vdict_t *d = hdr.dict[BCF_DT_CTG] + cdef bytes bkey = force_bytes(key) + cdef khiter_t k = kh_get_vdict(d, bkey) + + if k == kh_end(d): + raise KeyError('invalid contig: {}'.format(key)) + + cdef int id = kh_val_vdict(d, k).id + + return makeVariantContig(self.header, id) + + def remove_header(self, key): + cdef bcf_hdr_t *hdr = self.header.ptr + cdef int index + cdef const char *ckey + cdef vdict_t *d + cdef khiter_t k + + if isinstance(key, int): + index = key + if index < 0 or index >= hdr.n[BCF_DT_CTG]: + raise IndexError('invalid contig index') + ckey = hdr.id[BCF_DT_CTG][self.id].key + else: + d = hdr.dict[BCF_DT_CTG] + key = force_bytes(key) + if kh_get_vdict(d, key) == kh_end(d): + raise KeyError('invalid contig: {}'.format(key)) + ckey = key + + bcf_hdr_remove(hdr, BCF_HL_CTG, ckey) + + def clear_header(self): + cdef bcf_hdr_t *hdr = self.header.ptr + bcf_hdr_remove(hdr, BCF_HL_CTG, NULL) + #bcf_hdr_sync(hdr) + + def __iter__(self): + cdef bcf_hdr_t *hdr = self.header.ptr + cdef vdict_t *d = hdr.dict[BCF_DT_CTG] + cdef uint32_t n = kh_size(d) + + assert n == hdr.n[BCF_DT_CTG] + + for i in range(n): + yield bcf_str_cache_get_charptr(bcf_hdr_id2name(hdr, i)) + + def get(self, key, default=None): + """D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.""" + try: + return self[key] + except KeyError: + return default + + def __contains__(self, key): + try: + self[key] + except KeyError: + return False + else: + return True + + def iterkeys(self): + """D.iterkeys() -> an iterator over the keys of D""" + return iter(self) + + def itervalues(self): + """D.itervalues() -> an iterator over the values of D""" + for key in self: + yield self[key] + + def iteritems(self): + """D.iteritems() -> an iterator over the (key, value) items of D""" + for key in self: + yield (key, self[key]) + + def keys(self): + """D.keys() -> list of D's keys""" + return list(self) + + def items(self): + """D.items() -> list of D's (key, value) pairs, as 2-tuples""" + return list(self.iteritems()) + + def values(self): + """D.values() -> list of D's values""" + return list(self.itervalues()) + + # Mappings are not hashable by default, but subclasses can change this + __hash__ = None + + #TODO: implement __richcmp__ + + def add(self, id, **kwargs): + """Add a new contig record""" + if id in self: + raise ValueError('Header already exists for contig {}'.format(id)) + + items = [('ID', id)] + items += kwargs.items() + self.header.add_meta('contig', items=items) + + +cdef VariantHeaderContigs makeVariantHeaderContigs(VariantHeader header): + if not header: + raise ValueError('invalid VariantHeader') + + cdef VariantHeaderContigs contigs = VariantHeaderContigs.__new__(VariantHeaderContigs) + contigs.header = header + + return contigs + + +cdef class VariantHeaderSamples(object): + """sequence of sample names from a :class:`VariantHeader` object""" + def __init__(self, *args, **kwargs): + raise TypeError('this class cannot be instantiated from Python') + + def __len__(self): + return bcf_hdr_nsamples(self.header.ptr) + + def __bool__(self): + return bcf_hdr_nsamples(self.header.ptr) != 0 + + def __getitem__(self, index): + cdef bcf_hdr_t *hdr = self.header.ptr + cdef int32_t n = bcf_hdr_nsamples(hdr) + cdef int32_t i = index + + if i < 0 or i >= n: + raise IndexError('invalid sample index') + + return charptr_to_str(hdr.samples[i]) + + def __iter__(self): + cdef bcf_hdr_t *hdr = self.header.ptr + cdef int32_t i, n = bcf_hdr_nsamples(hdr) + + for i in range(n): + yield charptr_to_str(hdr.samples[i]) + + def __contains__(self, key): + cdef bcf_hdr_t *hdr = self.header.ptr + cdef vdict_t *d = hdr.dict[BCF_DT_SAMPLE] + cdef bytes bkey = force_bytes(key) + cdef khiter_t k = kh_get_vdict(d, bkey) + + return k != kh_end(d) + + # Mappings are not hashable by default, but subclasses can change this + __hash__ = None + + #TODO: implement __richcmp__ + + def add(self, name): + """Add a new sample""" + self.header.add_sample(name) + + +cdef VariantHeaderSamples makeVariantHeaderSamples(VariantHeader header): + if not header: + raise ValueError('invalid VariantHeader') + + cdef VariantHeaderSamples samples = VariantHeaderSamples.__new__(VariantHeaderSamples) + samples.header = header + + return samples + + +cdef class VariantHeader(object): + """header information for a :class:`VariantFile` object""" + #FIXME: Add structured proxy + #FIXME: Add generic proxy + #FIXME: Add mutable methods + + # See makeVariantHeader for C constructor + def __cinit__(self): + self.ptr = NULL + + # Python constructor + def __init__(self): + self.ptr = bcf_hdr_init(b'w') + if not self.ptr: + raise ValueError('cannot create VariantHeader') + + def __dealloc__(self): + if self.ptr: + bcf_hdr_destroy(self.ptr) + self.ptr = NULL + + def __bool__(self): + return self.ptr != NULL + + def copy(self): + return makeVariantHeader(bcf_hdr_dup(self.ptr)) + + def merge(self, VariantHeader header): + if header is None: + raise ValueError('header must not be None') + bcf_hdr_merge(self.ptr, header.ptr) + + @property + def version(self): + """VCF version""" + return force_str(bcf_hdr_get_version(self.ptr)) + + @property + def samples(self): + """samples (:class:`VariantHeaderSamples`)""" + return makeVariantHeaderSamples(self) + + @property + def records(self): + """header records (:class:`VariantHeaderRecords`)""" + return makeVariantHeaderRecords(self) + + @property + def contigs(self): + """contig information (:class:`VariantHeaderContigs`)""" + return makeVariantHeaderContigs(self) + + @property + def filters(self): + """filter metadata (:class:`VariantHeaderMetadata`)""" + return makeVariantHeaderMetadata(self, BCF_HL_FLT) + + @property + def info(self): + """info metadata (:class:`VariantHeaderMetadata`)""" + return makeVariantHeaderMetadata(self, BCF_HL_INFO) + + @property + def formats(self): + """format metadata (:class:`VariantHeaderMetadata`)""" + return makeVariantHeaderMetadata(self, BCF_HL_FMT) + + @property + def alts(self): + """alt metadata (:class:`dict` ID->record). + + The data returned just a snapshot of alt records, is created + every time the property is requested, and modifications will + not be reflected in the header metadata and vice versa. + + i.e. it is just a dict that reflects the state of alt records + at the time it is created. + """ + return {record['ID']:record for record in self.records + if record.key.upper() == 'ALT' } + + # only safe to do when opening an htsfile + cdef _subset_samples(self, include_samples): + keep_samples = set(self.samples) + include_samples = set(include_samples) + missing_samples = include_samples - keep_samples + keep_samples &= include_samples + + if missing_samples: + # FIXME: add specialized exception with payload + raise ValueError( + 'missing {:d} requested samples'.format( + len(missing_samples))) + + keep_samples = force_bytes(','.join(keep_samples)) + cdef char *keep = keep_samples if keep_samples else NULL + cdef ret = bcf_hdr_set_samples(self.ptr, keep, 0) + + if ret != 0: + raise ValueError( + 'bcf_hdr_set_samples failed: ret = {}'.format(ret)) + + def __str__(self): + cdef int hlen + cdef char *hstr = bcf_hdr_fmt_text(self.ptr, 0, &hlen) + + try: + return charptr_to_str_w_len(hstr, hlen) + finally: + free(hstr) + + def new_record(self, contig=None, start=0, stop=0, alleles=None, + id=None, qual=None, filter=None, info=None, samples=None, + **kwargs): + """Create a new empty VariantRecord. + + Arguments are currently experimental. Use with caution and expect + changes in upcoming releases. + + """ + rec = makeVariantRecord(self, bcf_init()) + + if not rec: + raise MemoryError('unable to allocate BCF record') + + rec.ptr.n_sample = bcf_hdr_nsamples(self.ptr) + + if contig is not None: + rec.contig = contig + if alleles is not None: + rec.alleles = alleles + + rec.start = start + rec.stop = stop + rec.id = id + rec.qual = qual + + if filter is not None: + if isinstance(filter, (list, tuple, VariantRecordFilter)): + for f in filter: + rec.filter.add(f) + else: + rec.filter.add(filter) + + if info: + rec.info.update(info) + + if kwargs: + if 'GT' in kwargs: + rec.samples[0]['GT'] = kwargs.pop('GT') + rec.samples[0].update(kwargs) + + if samples: + for i, sample in enumerate(samples): + if 'GT' in sample: + rec.samples[i]['GT'] = sample.pop('GT') + rec.samples[i].update(sample) + + return rec + + def add_record(self, VariantHeaderRecord record): + """Add an existing :class:`VariantHeaderRecord` to this header""" + if record is None: + raise ValueError('record must not be None') + + cdef bcf_hrec_t *hrec = bcf_hrec_dup(record.ptr) + + bcf_hdr_add_hrec(self.ptr, hrec) + + if self.ptr.dirty: + bcf_hdr_sync(self.ptr) + + def add_line(self, line): + """Add a metadata line to this header""" + bline = force_bytes(line) + if bcf_hdr_append(self.ptr, bline) < 0: + raise ValueError('invalid header line') + + if self.ptr.dirty: + bcf_hdr_sync(self.ptr) + + def add_meta(self, key, value=None, items=None): + """Add metadata to this header""" + if not ((value is not None) ^ (items is not None)): + raise ValueError('either value or items must be specified') + + cdef bcf_hrec_t *hrec = calloc(1, sizeof(bcf_hrec_t)) + cdef int quoted + + try: + key = force_bytes(key) + hrec.key = strdup(key) + + if value is not None: + hrec.value = strdup(force_bytes(value)) + else: + for key, value in items: + key = force_bytes(key) + bcf_hrec_add_key(hrec, key, len(key)) + + value = force_bytes(str(value)) + quoted = strpbrk(value, ' ;,"\t<>') != NULL + bcf_hrec_set_val(hrec, hrec.nkeys-1, value, len(value), quoted) + except: + bcf_hrec_destroy(hrec) + raise + + bcf_hdr_add_hrec(self.ptr, hrec) + + if self.ptr.dirty: + bcf_hdr_sync(self.ptr) + + def add_sample(self, name): + """Add a new sample to this header""" + bname = force_bytes(name) + if bcf_hdr_add_sample(self.ptr, bname) < 0: + raise ValueError('Duplicated sample name: {}'.format(name)) + if self.ptr.dirty: + bcf_hdr_sync(self.ptr) + + +cdef VariantHeader makeVariantHeader(bcf_hdr_t *hdr): + if not hdr: + raise ValueError('cannot create VariantHeader') + + cdef VariantHeader header = VariantHeader.__new__(VariantHeader) + header.ptr = hdr + + return header + + +cdef inline int bcf_header_get_info_id(bcf_hdr_t *hdr, key) except? -2: + cdef vdict_t *d + cdef khiter_t k + cdef int info_id + + if isinstance(key, str): + key = force_bytes(key) + + d = hdr.dict[BCF_DT_ID] + k = kh_get_vdict(d, key) + + if k == kh_end(d) or kh_val_vdict(d, k).info[BCF_HL_INFO] & 0xF == 0xF: + return -1 + + return kh_val_vdict(d, k).id + + +######################################################################## +######################################################################## +## Variant Record objects +######################################################################## + +cdef class VariantRecordFilter(object): + """Filters set on a :class:`VariantRecord` object, presented as a mapping from + filter index or name to :class:`VariantMetadata` object""" + def __init__(self, *args, **kwargs): + raise TypeError('this class cannot be instantiated from Python') + + def __len__(self): + return self.record.ptr.d.n_flt + + def __bool__(self): + return self.record.ptr.d.n_flt != 0 + + def __getitem__(self, key): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef int index, id + cdef int n = r.d.n_flt + + if isinstance(key, int): + index = key + + if index < 0 or index >= n: + raise IndexError('invalid filter index') + + id = r.d.flt[index] + else: + if key == '.': + key = 'PASS' + + bkey = force_bytes(key) + id = bcf_hdr_id2int(hdr, BCF_DT_ID, bkey) + + if not check_header_id(hdr, BCF_HL_FLT, id) or not bcf_has_filter(hdr, r, bkey): + raise KeyError('Invalid filter: {}'.format(key)) + + return makeVariantMetadata(self.record.header, BCF_HL_FLT, id) + + def add(self, key): + """Add a new filter""" + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef int id + + if key == '.': + key = 'PASS' + + cdef bytes bkey = force_bytes(key) + id = bcf_hdr_id2int(hdr, BCF_DT_ID, bkey) + + if not check_header_id(hdr, BCF_HL_FLT, id): + raise KeyError('Invalid filter: {}'.format(key)) + + bcf_add_filter(hdr, r, id) + + def __delitem__(self, key): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef int index, id + cdef int n = r.d.n_flt + + if isinstance(key, int): + index = key + + if index < 0 or index >= n: + raise IndexError('invalid filter index') + + id = r.d.flt[index] + else: + if key == '.': + key = 'PASS' + + bkey = force_bytes(key) + id = bcf_hdr_id2int(hdr, BCF_DT_ID, bkey) + + if not check_header_id(hdr, BCF_HL_FLT, id) or not bcf_has_filter(hdr, r, bkey): + raise KeyError('Invalid filter: {}'.format(key)) + + bcf_remove_filter(hdr, r, id, 0) + + def clear(self): + """Clear all filters""" + cdef bcf1_t *r = self.record.ptr + r.d.shared_dirty |= BCF1_DIRTY_FLT + r.d.n_flt = 0 + + def __iter__(self): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef int i + + for i in range(r.d.n_flt): + yield bcf_str_cache_get_charptr(bcf_hdr_int2id(hdr, BCF_DT_ID, r.d.flt[i])) + + def get(self, key, default=None): + """D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.""" + try: + return self[key] + except KeyError: + return default + + def __contains__(self, key): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef bytes bkey = force_bytes(key) + return bcf_has_filter(hdr, r, bkey) == 1 + + def iterkeys(self): + """D.iterkeys() -> an iterator over the keys of D""" + return iter(self) + + def itervalues(self): + """D.itervalues() -> an iterator over the values of D""" + for key in self: + yield self[key] + + def iteritems(self): + """D.iteritems() -> an iterator over the (key, value) items of D""" + for key in self: + yield (key, self[key]) + + def keys(self): + """D.keys() -> list of D's keys""" + return list(self) + + def items(self): + """D.items() -> list of D's (key, value) pairs, as 2-tuples""" + return list(self.iteritems()) + + def values(self): + """D.values() -> list of D's values""" + return list(self.itervalues()) + + def __richcmp__(VariantRecordFilter self not None, VariantRecordFilter other not None, int op): + if op != 2 and op != 3: + return NotImplemented + + cdef bcf1_t *s = self.record.ptr + cdef bcf1_t *o = other.record.ptr + + cdef bint cmp = (s.d.n_flt == o.d.n_flt and list(self) == list(other)) + + if op == 3: + cmp = not cmp + + return cmp + + # Mappings are not hashable by default, but subclasses can change this + __hash__ = None + + #TODO: implement __richcmp__ + + +cdef VariantRecordFilter makeVariantRecordFilter(VariantRecord record): + if not record: + raise ValueError('invalid VariantRecord') + + cdef VariantRecordFilter filter = VariantRecordFilter.__new__(VariantRecordFilter) + filter.record = record + + return filter + + +cdef class VariantRecordFormat(object): + """Format data present for each sample in a :class:`VariantRecord` object, + presented as mapping from format name to :class:`VariantMetadata` object.""" + def __init__(self, *args, **kwargs): + raise TypeError('this class cannot be instantiated from Python') + + def __len__(self): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef int i, n = 0 + + for i in range(r.n_fmt): + if r.d.fmt[i].p: + n += 1 + return n + + def __bool__(self): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef int i + + for i in range(r.n_fmt): + if r.d.fmt[i].p: + return True + return False + + def __getitem__(self, key): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + + cdef bytes bkey = force_bytes(key) + cdef bcf_fmt_t *fmt = bcf_get_fmt(hdr, r, bkey) + + if not fmt or not fmt.p: + raise KeyError('unknown format: {}'.format(key)) + + return makeVariantMetadata(self.record.header, BCF_HL_FMT, fmt.id) + + def __delitem__(self, key): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + + cdef bytes bkey = force_bytes(key) + cdef bcf_fmt_t *fmt = bcf_get_fmt(hdr, r, bkey) + + if not fmt or not fmt.p: + raise KeyError('unknown format: {}'.format(key)) + + if bcf_update_format(hdr, r, bkey, fmt.p, 0, fmt.type) < 0: + raise ValueError('Unable to delete FORMAT') + + def clear(self): + """Clear all formats for all samples within the associated + :class:`VariantRecord` instance""" + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef bcf_fmt_t *fmt + cdef const char *key + cdef int i + + for i in reversed(range(r.n_fmt)): + fmt = &r.d.fmt[i] + if fmt.p: + key = bcf_hdr_int2id(hdr, BCF_DT_ID, fmt.id) + if bcf_update_format(hdr, r, key, fmt.p, 0, fmt.type) < 0: + raise ValueError('Unable to delete FORMAT') + + def __iter__(self): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef bcf_fmt_t *fmt + cdef int i + + for i in range(r.n_fmt): + fmt = &r.d.fmt[i] + if fmt.p: + yield bcf_str_cache_get_charptr(bcf_hdr_int2id(hdr, BCF_DT_ID, fmt.id)) + + def get(self, key, default=None): + """D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.""" + try: + return self[key] + except KeyError: + return default + + def __contains__(self, key): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef bytes bkey = force_bytes(key) + cdef bcf_fmt_t *fmt = bcf_get_fmt(hdr, r, bkey) + return fmt != NULL and fmt.p != NULL + + def iterkeys(self): + """D.iterkeys() -> an iterator over the keys of D""" + return iter(self) + + def itervalues(self): + """D.itervalues() -> an iterator over the values of D""" + for key in self: + yield self[key] + + def iteritems(self): + """D.iteritems() -> an iterator over the (key, value) items of D""" + for key in self: + yield (key, self[key]) + + def keys(self): + """D.keys() -> list of D's keys""" + return list(self) + + def items(self): + """D.items() -> list of D's (key, value) pairs, as 2-tuples""" + return list(self.iteritems()) + + def values(self): + """D.values() -> list of D's values""" + return list(self.itervalues()) + + # Mappings are not hashable by default, but subclasses can change this + __hash__ = None + + #TODO: implement __richcmp__ + + +cdef VariantRecordFormat makeVariantRecordFormat(VariantRecord record): + if not record: + raise ValueError('invalid VariantRecord') + + cdef VariantRecordFormat format = VariantRecordFormat.__new__(VariantRecordFormat) + format.record = record + + return format + + +#TODO: Add a getmeta method to return the corresponding VariantMetadata? +cdef class VariantRecordInfo(object): + """Info data stored in a :class:`VariantRecord` object, presented as a + mapping from info metadata name to value.""" + + def __init__(self, *args, **kwargs): + raise TypeError('this class cannot be instantiated from Python') + + def __len__(self): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef bcf_info_t *info + cdef const char *key + cdef int i, count = 0 + + if bcf_unpack(r, BCF_UN_INFO) < 0: + raise ValueError('Error unpacking VariantRecord') + + for i in range(r.n_info): + info = &r.d.info[i] + key = bcf_hdr_int2id(hdr, BCF_DT_ID, info.key) + if info != NULL and info.vptr != NULL and strcmp(key, b'END') != 0: + count += 1 + + return count + + def __bool__(self): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef bcf_info_t *info + cdef const char *key + cdef int i + + if bcf_unpack(r, BCF_UN_INFO) < 0: + raise ValueError('Error unpacking VariantRecord') + + for i in range(r.n_info): + info = &r.d.info[i] + key = bcf_hdr_int2id(hdr, BCF_DT_ID, info.key) + if info != NULL and info.vptr != NULL and strcmp(key, b'END') != 0: + return True + + return False + + def __getitem__(self, key): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + + if bcf_unpack(r, BCF_UN_INFO) < 0: + raise ValueError('Error unpacking VariantRecord') + + cdef bytes bkey = force_bytes(key) + + if strcmp(bkey, b'END') == 0: + raise KeyError('END is a reserved attribute; access is via record.stop') + + cdef bcf_info_t *info = bcf_get_info(hdr, r, bkey) + + # Cannot stop here if info == NULL, since flags must return False + cdef int info_id = bcf_header_get_info_id(hdr, bkey) if not info else info.key + + if info_id < 0: + raise KeyError('Unknown INFO field: {}'.format(key)) + + if not check_header_id(hdr, BCF_HL_INFO, info_id): + raise ValueError('Invalid header') + + # Handle type=Flag values + if bcf_hdr_id2type(hdr, BCF_HL_INFO, info_id) == BCF_HT_FLAG: + return info != NULL and info.vptr != NULL + + if not info or not info.vptr: + raise KeyError('Invalid INFO field: {}'.format(key)) + + return bcf_info_get_value(self.record, info) + + def __setitem__(self, key, value): + cdef bytes bkey = force_bytes(key) + + if strcmp(bkey, b'END') == 0: + raise KeyError('END is a reserved attribute; access is via record.stop') + + if bcf_unpack(self.record.ptr, BCF_UN_INFO) < 0: + raise ValueError('Error unpacking VariantRecord') + + bcf_info_set_value(self.record, key, value) + + def __delitem__(self, key): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + + cdef bytes bkey = force_bytes(key) + if strcmp(bkey, b'END') == 0: + raise KeyError('END is a reserved attribute; access is via record.stop') + + if bcf_unpack(r, BCF_UN_INFO) < 0: + raise ValueError('Error unpacking VariantRecord') + + cdef bcf_info_t *info = bcf_get_info(hdr, r, bkey) + + # Cannot stop here if info == NULL, since flags must return False + cdef int info_id = bcf_header_get_info_id(hdr, bkey) if not info else info.key + + if info_id < 0: + raise KeyError('Unknown INFO field: {}'.format(key)) + + if not check_header_id(hdr, BCF_HL_INFO, info_id): + raise ValueError('Invalid header') + + # Handle flags + if bcf_hdr_id2type(hdr, BCF_HL_INFO, info_id) == BCF_HT_FLAG and (not info or not info.vptr): + return + + if not info or not info.vptr: + raise KeyError('Unknown INFO field: {}'.format(key)) + + if bcf_update_info(hdr, r, bkey, NULL, 0, info.type) < 0: + raise ValueError('Unable to delete INFO') + + def clear(self): + """Clear all info data""" + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef bcf_info_t *info + cdef const char *key + cdef int i + + if bcf_unpack(r, BCF_UN_INFO) < 0: + raise ValueError('Error unpacking VariantRecord') + + for i in range(r.n_info): + info = &r.d.info[i] + if info and info.vptr: + key = bcf_hdr_int2id(hdr, BCF_DT_ID, info.key) + if strcmp(key, b'END') == 0: + continue + if bcf_update_info(hdr, r, key, NULL, 0, info.type) < 0: + raise ValueError('Unable to delete INFO') + + def __iter__(self): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef bcf_info_t *info + cdef const char *key + cdef int i + + if bcf_unpack(r, BCF_UN_INFO) < 0: + raise ValueError('Error unpacking VariantRecord') + + for i in range(r.n_info): + info = &r.d.info[i] + if info and info.vptr: + key = bcf_hdr_int2id(hdr, BCF_DT_ID, info.key) + if strcmp(key, b'END') != 0: + yield bcf_str_cache_get_charptr(key) + + def get(self, key, default=None): + """D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.""" + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + + if bcf_unpack(r, BCF_UN_INFO) < 0: + raise ValueError('Error unpacking VariantRecord') + + cdef bytes bkey = force_bytes(key) + + if strcmp(bkey, b'END') == 0: + return default + + cdef bcf_info_t *info = bcf_get_info(hdr, r, bkey) + + # Cannot stop here if info == NULL, since flags must return False + cdef int info_id = bcf_header_get_info_id(hdr, bkey) if not info else info.key + + if not check_header_id(hdr, BCF_HL_INFO, info_id): + raise ValueError('Invalid header') + + # Handle flags + if bcf_hdr_id2type(hdr, BCF_HL_INFO, info_id) == BCF_HT_FLAG: + return info != NULL and info.vptr != NULL + + if not info or not info.vptr: + return default + + return bcf_info_get_value(self.record, info) + + def __contains__(self, key): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + + if bcf_unpack(r, BCF_UN_INFO) < 0: + raise ValueError('Error unpacking VariantRecord') + + cdef bytes bkey = force_bytes(key) + + if strcmp(bkey, b'END') == 0: + return False + + cdef bcf_info_t *info = bcf_get_info(hdr, r, bkey) + + return info != NULL and info.vptr != NULL + + def iterkeys(self): + """D.iterkeys() -> an iterator over the keys of D""" + return iter(self) + + def itervalues(self): + """D.itervalues() -> an iterator over the values of D""" + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef bcf_info_t *info + cdef const char *key + cdef int i + + if bcf_unpack(r, BCF_UN_INFO) < 0: + raise ValueError('Error unpacking VariantRecord') + + for i in range(r.n_info): + info = &r.d.info[i] + if info and info.vptr: + key = bcf_hdr_int2id(hdr, BCF_DT_ID, info.key) + if strcmp(key, b'END') != 0: + yield bcf_info_get_value(self.record, info) + + def iteritems(self): + """D.iteritems() -> an iterator over the (key, value) items of D""" + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef bcf_info_t *info + cdef const char *key + cdef int i + + if bcf_unpack(r, BCF_UN_INFO) < 0: + raise ValueError('Error unpacking VariantRecord') + + for i in range(r.n_info): + info = &r.d.info[i] + if info and info.vptr: + key = bcf_hdr_int2id(hdr, BCF_DT_ID, info.key) + if strcmp(key, b'END') != 0: + value = bcf_info_get_value(self.record, info) + yield bcf_str_cache_get_charptr(key), value + + def keys(self): + """D.keys() -> list of D's keys""" + return list(self) + + def items(self): + """D.items() -> list of D's (key, value) pairs, as 2-tuples""" + return list(self.iteritems()) + + def values(self): + """D.values() -> list of D's values""" + return list(self.itervalues()) + + def update(self, items=None, **kwargs): + """D.update([E, ]**F) -> None. + + Update D from dict/iterable E and F. + """ + for k, v in items.items(): + if k != 'END': + self[k] = v + + if kwargs: + kwargs.pop('END', None) + for k, v in kwargs.items(): + self[k] = v + + def pop(self, key, default=_nothing): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + + if bcf_unpack(r, BCF_UN_INFO) < 0: + raise ValueError('Error unpacking VariantRecord') + + cdef bytes bkey = force_bytes(key) + cdef bcf_info_t *info = bcf_get_info(hdr, r, bkey) + + # Cannot stop here if info == NULL, since flags must return False + cdef int info_id = bcf_header_get_info_id(hdr, bkey) if not info else info.key + + if info_id < 0: + if default is _nothing: + raise KeyError('Unknown INFO field: {}'.format(key)) + return default + + if not check_header_id(hdr, BCF_HL_INFO, info_id): + raise ValueError('Invalid header') + + # Handle flags + if bcf_hdr_id2type(hdr, BCF_HL_INFO, info_id) == BCF_HT_FLAG and (not info or not info.vptr): + return + + if not info or not info.vptr: + if default is _nothing: + raise KeyError('Unknown INFO field: {}'.format(key)) + return default + + value = bcf_info_get_value(self.record, info) + + if bcf_update_info(hdr, r, bkey, NULL, 0, info.type) < 0: + raise ValueError('Unable to delete INFO') + + return value + + def __richcmp__(VariantRecordInfo self not None, VariantRecordInfo other not None, int op): + if op != 2 and op != 3: + return NotImplemented + + cdef bcf1_t *s = self.record.ptr + cdef bcf1_t *o = other.record.ptr + + # Cannot use n_info as shortcut logic, since null values may remain + cdef bint cmp = dict(self) == dict(other) + + if op == 3: + cmp = not cmp + + return cmp + + # Mappings are not hashable by default, but subclasses can change this + __hash__ = None + + +cdef VariantRecordInfo makeVariantRecordInfo(VariantRecord record): + if not record: + raise ValueError('invalid VariantRecord') + + cdef VariantRecordInfo info = VariantRecordInfo.__new__(VariantRecordInfo) + info.record = record + + return info + + +cdef class VariantRecordSamples(object): + """mapping from sample index or name to :class:`VariantRecordSample` object.""" + def __init__(self, *args, **kwargs): + raise TypeError('this class cannot be instantiated from Python') + + def __len__(self): + return self.record.ptr.n_sample # bcf_hdr_nsamples(self.record.header.ptr) + + def __bool__(self): + return self.record.ptr.n_sample != 0 # bcf_hdr_nsamples(self.record.header.ptr) != 0 + + def __getitem__(self, key): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef int n = self.record.ptr.n_sample + cdef int sample_index + cdef vdict_t *d + cdef khiter_t k + + if isinstance(key, int): + sample_index = key + else: + bkey = force_bytes(key) + sample_index = bcf_hdr_id2int(hdr, BCF_DT_SAMPLE, bkey) + if sample_index < 0: + raise KeyError('invalid sample name: {}'.format(key)) + + if sample_index < 0 or sample_index >= n: + raise IndexError('invalid sample index') + + return makeVariantRecordSample(self.record, sample_index) + + def __iter__(self): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef int32_t i, n = self.record.ptr.n_sample + + for i in range(n): + yield charptr_to_str(hdr.samples[i]) + + def get(self, key, default=None): + """D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.""" + try: + return self[key] + except KeyError: + return default + + def __contains__(self, key): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef int n = self.record.ptr.n_sample + cdef int sample_index + cdef vdict_t *d + cdef khiter_t k + + if isinstance(key, int): + sample_index = key + else: + bkey = force_bytes(key) + sample_index = bcf_hdr_id2int(hdr, BCF_DT_SAMPLE, bkey) + if sample_index < 0: + raise KeyError('invalid sample name: {}'.format(key)) + + return 0 <= sample_index < n + + def iterkeys(self): + """D.iterkeys() -> an iterator over the keys of D""" + return iter(self) + + def itervalues(self): + """D.itervalues() -> an iterator over the values of D""" + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef int32_t i, n = self.record.ptr.n_sample + + for i in range(n): + yield makeVariantRecordSample(self.record, i) + + def iteritems(self): + """D.iteritems() -> an iterator over the (key, value) items of D""" + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef int32_t i, n = self.record.ptr.n_sample + + for i in range(n): + yield (charptr_to_str(hdr.samples[i]), makeVariantRecordSample(self.record, i)) + + def keys(self): + """D.keys() -> list of D's keys""" + return list(self) + + def items(self): + """D.items() -> list of D's (key, value) pairs, as 2-tuples""" + return list(self.iteritems()) + + def values(self): + """D.values() -> list of D's values""" + return list(self.itervalues()) + + def update(self, items=None, **kwargs): + """D.update([E, ]**F) -> None. + + Update D from dict/iterable E and F. + """ + for k, v in items.items(): + self[k] = v + + if kwargs: + for k, v in kwargs.items(): + self[k] = v + + def pop(self, key, default=_nothing): + try: + value = self[key] + del self[key] + return value + except KeyError: + if default is not _nothing: + return default + raise + + def __richcmp__(VariantRecordSamples self not None, VariantRecordSamples other not None, int op): + if op != 2 and op != 3: + return NotImplemented + + cdef bcf1_t *s = self.record.ptr + cdef bcf1_t *o = other.record.ptr + + cdef bint cmp = (s.n_sample == o.n_sample and self.values() == other.values()) + + if op == 3: + cmp = not cmp + + return cmp + + # Mappings are not hashable by default, but subclasses can change this + __hash__ = None + + +cdef VariantRecordSamples makeVariantRecordSamples(VariantRecord record): + if not record: + raise ValueError('invalid VariantRecord') + + cdef VariantRecordSamples samples = VariantRecordSamples.__new__( + VariantRecordSamples) + samples.record = record + + return samples + + +cdef class VariantRecord(object): + """Variant record""" + def __init__(self, *args, **kwargs): + raise TypeError('this class cannot be instantiated from Python') + + def __dealloc__(self): + if self.ptr: + bcf_destroy1(self.ptr) + self.ptr = NULL + + def copy(self): + """return a copy of this VariantRecord object""" + return makeVariantRecord(self.header, bcf_dup(self.ptr)) + + def translate(self, VariantHeader dst_header): + if dst_header is None: + raise ValueError('dst_header must not be None') + + cdef bcf_hdr_t *src_hdr = self.header.ptr + cdef bcf_hdr_t *dst_hdr = dst_header.ptr + + if src_hdr != dst_hdr: + if self.ptr.n_sample != bcf_hdr_nsamples(dst_hdr): + msg = 'Cannot translate record. Number of samples does not match header ({} vs {})' + raise ValueError(msg.format(self.ptr.n_sample, bcf_hdr_nsamples(dst_hdr))) + + bcf_translate(dst_hdr, src_hdr, self.ptr) + self.header = dst_header + + @property + def rid(self): + """internal reference id number""" + return self.ptr.rid + + @rid.setter + def rid(self, value): + cdef bcf_hdr_t *hdr = self.header.ptr + cdef int r = value + if r < 0 or r >= hdr.n[BCF_DT_CTG] or not hdr.id[BCF_DT_CTG][r].val: + raise ValueError('invalid reference id') + self.ptr.rid = r + + @property + def chrom(self): + """chromosome/contig name""" + cdef bcf_hdr_t *hdr = self.header.ptr + cdef int rid = self.ptr.rid + if rid < 0 or rid >= hdr.n[BCF_DT_CTG]: + raise ValueError('Invalid header') + return bcf_str_cache_get_charptr(bcf_hdr_id2name(hdr, rid)) + + @chrom.setter + def chrom(self, value): + cdef vdict_t *d = self.header.ptr.dict[BCF_DT_CTG] + bchrom = force_bytes(value) + cdef khint_t k = kh_get_vdict(d, bchrom) + if k == kh_end(d): + raise ValueError('Invalid chromosome/contig') + self.ptr.rid = kh_val_vdict(d, k).id + + @property + def contig(self): + """chromosome/contig name""" + cdef bcf_hdr_t *hdr = self.header.ptr + cdef int rid = self.ptr.rid + if rid < 0 or rid >= hdr.n[BCF_DT_CTG]: + raise ValueError('Invalid header') + return bcf_str_cache_get_charptr(bcf_hdr_id2name(hdr, rid)) + + @contig.setter + def contig(self, value): + cdef vdict_t *d = self.header.ptr.dict[BCF_DT_CTG] + bchrom = force_bytes(value) + cdef khint_t k = kh_get_vdict(d, bchrom) + if k == kh_end(d): + raise ValueError('Invalid chromosome/contig') + self.ptr.rid = kh_val_vdict(d, k).id + + @property + def pos(self): + """record start position on chrom/contig (1-based inclusive)""" + return self.ptr.pos + 1 + + @pos.setter + def pos(self, value): + cdef int p = value + if p < 1: + raise ValueError('Position must be positive') + self.ptr.pos = p - 1 + bcf_sync_end(self) + + @property + def start(self): + """record start position on chrom/contig (0-based inclusive)""" + return self.ptr.pos + + @start.setter + def start(self, value): + cdef int s = value + if s < 0: + raise ValueError('Start coordinate must be non-negative') + self.ptr.pos = s + bcf_sync_end(self) + + @property + def stop(self): + """record stop position on chrom/contig (0-based exclusive)""" + return self.ptr.pos + self.ptr.rlen + + @stop.setter + def stop(self, value): + cdef int s = value + if s < 0: + raise ValueError('Stop coordinate must be non-negative') + self.ptr.rlen = s - self.ptr.pos + bcf_sync_end(self) + + @property + def rlen(self): + """record length on chrom/contig (aka rec.stop - rec.start)""" + return self.ptr.rlen + + @rlen.setter + def rlen(self, value): + cdef int r = value + self.ptr.rlen = r + bcf_sync_end(self) + + @property + def qual(self): + """phred scaled quality score or None if not available""" + return self.ptr.qual if not bcf_float_is_missing(self.ptr.qual) else None + + @qual.setter + def qual(self, value): + if value is not None: + self.ptr.qual = value + else: + bcf_float_set(&self.ptr.qual, bcf_float_missing) + + +# @property +# def n_allele(self): +# return self.ptr.n_allele + +# @property +# def n_sample(self): +# return self.ptr.n_sample + + @property + def id(self): + """record identifier or None if not available""" + cdef bcf1_t *r = self.ptr + if bcf_unpack(r, BCF_UN_STR) < 0: + raise ValueError('Error unpacking VariantRecord') + return bcf_str_cache_get_charptr(r.d.id) if r.d.id != b'.' else None + + @id.setter + def id(self, value): + cdef bcf1_t *r = self.ptr + if bcf_unpack(r, BCF_UN_STR) < 0: + raise ValueError('Error unpacking VariantRecord') + cdef char *idstr = NULL + if value is not None: + bid = force_bytes(value) + idstr = bid + if bcf_update_id(self.header.ptr, self.ptr, idstr) < 0: + raise ValueError('Error updating id') + + @property + def ref(self): + """reference allele""" + cdef bcf1_t *r = self.ptr + if bcf_unpack(r, BCF_UN_STR) < 0: + raise ValueError('Error unpacking VariantRecord') + return charptr_to_str(r.d.allele[0]) if r.d.allele else None + + @ref.setter + def ref(self, value): + cdef bcf1_t *r = self.ptr + if bcf_unpack(r, BCF_UN_STR) < 0: + raise ValueError('Error unpacking VariantRecord') + #FIXME: Set alleles directly -- this is stupid + if not value: + raise ValueError('ref allele must not be null') + value = force_bytes(value) + if r.d.allele and r.n_allele: + alleles = [r.d.allele[i] for i in range(r.n_allele)] + alleles[0] = value + else: + alleles = [value, ''] + self.alleles = alleles + bcf_sync_end(self) + + @property + def alleles(self): + """tuple of reference allele followed by alt alleles""" + cdef bcf1_t *r = self.ptr + if bcf_unpack(r, BCF_UN_STR) < 0: + raise ValueError('Error unpacking VariantRecord') + if not r.d.allele: + return None + cdef tuple res = PyTuple_New(r.n_allele) + for i in range(r.n_allele): + a = charptr_to_str(r.d.allele[i]) + PyTuple_SET_ITEM(res, i, a) + Py_INCREF(a) + return res + + @alleles.setter + def alleles(self, values): + cdef bcf1_t *r = self.ptr + + # Cache rlen of symbolic alleles before call to bcf_update_alleles_str + cdef int rlen = r.rlen + + if bcf_unpack(r, BCF_UN_STR) < 0: + raise ValueError('Error unpacking VariantRecord') + + values = [force_bytes(v) for v in values] + + if len(values) < 2: + raise ValueError('must set at least 2 alleles') + + if b'' in values: + raise ValueError('cannot set null allele') + + value = b','.join(values) + + if bcf_update_alleles_str(self.header.ptr, r, value) < 0: + raise ValueError('Error updating alleles') + + # Reset rlen if alternate allele isn't symbolic, otherwise used cached + if has_symbolic_allele(self): + self.ptr.rlen = rlen + else: + self.ptr.rlen = len(values[0]) + bcf_sync_end(self) + + @property + def alts(self): + """tuple of alt alleles""" + cdef bcf1_t *r = self.ptr + if bcf_unpack(r, BCF_UN_STR) < 0: + raise ValueError('Error unpacking VariantRecord') + if r.n_allele < 2 or not r.d.allele: + return None + cdef tuple res = PyTuple_New(r.n_allele - 1) + for i in range(1, r.n_allele): + a = charptr_to_str(r.d.allele[i]) + PyTuple_SET_ITEM(res, i - 1, a) + Py_INCREF(a) + return res + + @alts.setter + def alts(self, value): + #FIXME: Set alleles directly -- this is stupid + cdef bcf1_t *r = self.ptr + if bcf_unpack(r, BCF_UN_STR) < 0: + raise ValueError('Error unpacking VariantRecord') + value = [force_bytes(v) for v in value] + if b'' in value: + raise ValueError('cannot set null alt allele') + ref = [r.d.allele[0] if r.d.allele and r.n_allele else b'.'] + self.alleles = ref + value + + @property + def filter(self): + """filter information (see :class:`VariantRecordFilter`)""" + if bcf_unpack(self.ptr, BCF_UN_FLT) < 0: + raise ValueError('Error unpacking VariantRecord') + return makeVariantRecordFilter(self) + + @property + def info(self): + """info data (see :class:`VariantRecordInfo`)""" + if bcf_unpack(self.ptr, BCF_UN_INFO) < 0: + raise ValueError('Error unpacking VariantRecord') + return makeVariantRecordInfo(self) + + @property + def format(self): + """sample format metadata (see :class:`VariantRecordFormat`)""" + if bcf_unpack(self.ptr, BCF_UN_FMT) < 0: + raise ValueError('Error unpacking VariantRecord') + return makeVariantRecordFormat(self) + + @property + def samples(self): + """sample data (see :class:`VariantRecordSamples`)""" + if bcf_unpack(self.ptr, BCF_UN_ALL) < 0: + raise ValueError('Error unpacking VariantRecord') + return makeVariantRecordSamples(self) + + def __richcmp__(VariantRecord self not None, VariantRecord other not None, int op): + if op != 2 and op != 3: + return NotImplemented + + cdef bcf1_t *s = self.ptr + cdef bcf1_t *o = other.ptr + + cdef bint cmp = self is other or ( + s.pos == o.pos + and s.rlen == o.rlen + and ((bcf_float_is_missing(s.qual) and bcf_float_is_missing(o.qual)) + or s.qual == o.qual) + and s.n_sample == o.n_sample + and s.n_allele == o.n_allele + and self.contig == other.contig + and self.alleles == other.alleles + and self.id == other.id + and self.info == other.info + and self.filter == other.filter + and self.samples == other.samples) + + if op == 3: + cmp = not cmp + + return cmp + + def __str__(self): + cdef kstring_t line + cdef char c + + line.l = line.m = 0 + line.s = NULL + + if vcf_format(self.header.ptr, self.ptr, &line) < 0: + if line.m: + free(line.s) + raise ValueError('vcf_format failed') + + # Strip CR/LF? + #while line.l: + # c = line.s[line.l - 1] + # if c != b'\n' and c != b'\r': + # break + # line.l -= 1 + + ret = charptr_to_str_w_len(line.s, line.l) + + if line.m: + free(line.s) + + return ret + + +cdef VariantRecord makeVariantRecord(VariantHeader header, bcf1_t *r): + if not header: + raise ValueError('invalid VariantHeader') + + if not r: + raise ValueError('cannot create VariantRecord') + + if r.errcode: + msg = [] + #if r.errcode & BCF_ERR_CTG_UNDEF: + # msg.append('undefined contig') + #if r.errcode & BCF_ERR_TAG_UNDEF: + # msg.append('undefined tag') + if r.errcode & BCF_ERR_NCOLS: + msg.append('invalid number of columns') + if r.errcode & BCF_ERR_LIMITS: + msg.append('limits violated') + if r.errcode & BCF_ERR_CHAR: + msg.append('invalid character found') + if r.errcode & BCF_ERR_CTG_INVALID: + msg.append('invalid contig') + if r.errcode & BCF_ERR_TAG_INVALID: + msg.append('invalid tag') + + if msg: + msg = ', '.join(msg) + raise ValueError('Error(s) reading record: {}'.format(msg)) + + cdef VariantRecord record = VariantRecord.__new__(VariantRecord) + record.header = header + record.ptr = r + + return record + + +######################################################################## +######################################################################## +## Variant Sampletype object +######################################################################## + + +cdef class VariantRecordSample(object): + """Data for a single sample from a :class:`VariantRecord` object. + Provides data accessors for genotypes and a mapping interface + from format name to values. + """ + def __init__(self, *args, **kwargs): + raise TypeError('this class cannot be instantiated from Python') + + @property + def name(self): + """sample name""" + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef int32_t n = r.n_sample + + if self.index < 0 or self.index >= n: + raise ValueError('invalid sample index') + + return charptr_to_str(hdr.samples[self.index]) + + @property + def allele_indices(self): + """allele indices for called genotype, if present. Otherwise None""" + return bcf_format_get_allele_indices(self) + + @allele_indices.setter + def allele_indices(self, value): + self['GT'] = value + + @allele_indices.deleter + def allele_indices(self): + self['GT'] = () + + @property + def alleles(self): + """alleles for called genotype, if present. Otherwise None""" + return bcf_format_get_alleles(self) + + @alleles.setter + def alleles(self, value): + self['GT'] = value + + @alleles.deleter + def alleles(self): + self['GT'] = () + + @property + def phased(self): + """False if genotype is missing or any allele is unphased. Otherwise True.""" + return bcf_sample_get_phased(self) + + @phased.setter + def phased(self, value): + bcf_sample_set_phased(self, value) + + def __len__(self): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef int i, n = 0 + + if bcf_unpack(r, BCF_UN_FMT) < 0: + raise ValueError('Error unpacking VariantRecord') + + for i in range(r.n_fmt): + if r.d.fmt[i].p: + n += 1 + return n + + def __bool__(self): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef int i + + if bcf_unpack(r, BCF_UN_FMT) < 0: + raise ValueError('Error unpacking VariantRecord') + + for i in range(r.n_fmt): + if r.d.fmt[i].p: + return True + return False + + def __getitem__(self, key): + return bcf_format_get_value(self, key) + + def __setitem__(self, key, value): + bcf_format_set_value(self, key, value) + + def __delitem__(self, key): + bcf_format_del_value(self, key) + + def clear(self): + """Clear all format data (including genotype) for this sample""" + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef bcf_fmt_t *fmt + cdef int i + + for i in range(r.n_fmt): + fmt = &r.d.fmt[i] + if fmt.p: + bcf_format_del_value(self, bcf_hdr_int2id(hdr, BCF_DT_ID, fmt.id)) + + def __iter__(self): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef bcf_fmt_t *fmt + cdef int i + + for i in range(r.n_fmt): + fmt = &r.d.fmt[i] + if r.d.fmt[i].p: + yield bcf_str_cache_get_charptr(bcf_hdr_int2id(hdr, BCF_DT_ID, fmt.id)) + + def get(self, key, default=None): + """D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.""" + try: + return self[key] + except KeyError: + return default + + def __contains__(self, key): + cdef bcf_hdr_t *hdr = self.record.header.ptr + cdef bcf1_t *r = self.record.ptr + cdef bytes bkey = force_bytes(key) + cdef bcf_fmt_t *fmt = bcf_get_fmt(hdr, r, bkey) + return fmt != NULL and fmt.p != NULL + + def iterkeys(self): + """D.iterkeys() -> an iterator over the keys of D""" + return iter(self) + + def itervalues(self): + """D.itervalues() -> an iterator over the values of D""" + for key in self: + yield self[key] + + def iteritems(self): + """D.iteritems() -> an iterator over the (key, value) items of D""" + for key in self: + yield (key, self[key]) + + def keys(self): + """D.keys() -> list of D's keys""" + return list(self) + + def items(self): + """D.items() -> list of D's (key, value) pairs, as 2-tuples""" + return list(self.iteritems()) + + def values(self): + """D.values() -> list of D's values""" + return list(self.itervalues()) + + def update(self, items=None, **kwargs): + """D.update([E, ]**F) -> None. + + Update D from dict/iterable E and F. + """ + for k, v in items.items(): + self[k] = v + + if kwargs: + for k, v in kwargs.items(): + self[k] = v + + def pop(self, key, default=_nothing): + try: + value = self[key] + del self[key] + return value + except KeyError: + if default is not _nothing: + return default + raise + + def __richcmp__(VariantRecordSample self not None, VariantRecordSample other not None, int op): + if op != 2 and op != 3: + return NotImplemented + + cdef bint cmp = dict(self) == dict(other) + + if op == 3: + cmp = not cmp + + return cmp + + # Mappings are not hashable by default, but subclasses can change this + __hash__ = None + + +cdef VariantRecordSample makeVariantRecordSample(VariantRecord record, int32_t sample_index): + if not record or sample_index < 0: + raise ValueError('cannot create VariantRecordSample') + + cdef VariantRecordSample sample = VariantRecordSample.__new__(VariantRecordSample) + sample.record = record + sample.index = sample_index + + return sample + + +######################################################################## +######################################################################## +## Index objects +######################################################################## + + +cdef class BaseIndex(object): + def __init__(self): + self.refs = () + self.remap = {} + + def __len__(self): + return len(self.refs) + + def __bool__(self): + return len(self.refs) != 0 + + def __getitem__(self, key): + if isinstance(key, int): + return self.refs[key] + else: + return self.refmap[key] + + def __iter__(self): + return iter(self.refs) + + def get(self, key, default=None): + """D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.""" + try: + return self[key] + except KeyError: + return default + + def __contains__(self, key): + try: + self[key] + except KeyError: + return False + else: + return True + + def iterkeys(self): + """D.iterkeys() -> an iterator over the keys of D""" + return iter(self) + + def itervalues(self): + """D.itervalues() -> an iterator over the values of D""" + for key in self: + yield self[key] + + def iteritems(self): + """D.iteritems() -> an iterator over the (key, value) items of D""" + for key in self: + yield (key, self[key]) + + def keys(self): + """D.keys() -> list of D's keys""" + return list(self) + + def items(self): + """D.items() -> list of D's (key, value) pairs, as 2-tuples""" + return list(self.iteritems()) + + def values(self): + """D.values() -> list of D's values""" + return list(self.itervalues()) + + def update(self, items=None, **kwargs): + """D.update([E, ]**F) -> None. + + Update D from dict/iterable E and F. + """ + for k, v in items.items(): + self[k] = v + + if kwargs: + for k, v in kwargs.items(): + self[k] = v + + def pop(self, key, default=_nothing): + try: + value = self[key] + del self[key] + return value + except KeyError: + if default is not _nothing: + return default + raise + + # Mappings are not hashable by default, but subclasses can change this + __hash__ = None + + #TODO: implement __richcmp__ + + +cdef class BCFIndex(object): + """CSI index data structure for BCF files""" + def __init__(self): + self.refs = () + self.refmap = {} + + if not self.ptr: + raise ValueError('Invalid index object') + + cdef int n + cdef const char **refs = bcf_index_seqnames(self.ptr, self.header.ptr, &n) + + self.refs = char_array_to_tuple(refs, n, free_after=1) if refs else () + self.refmap = { r:i for i,r in enumerate(self.refs) } + + def __dealloc__(self): + if self.ptr: + hts_idx_destroy(self.ptr) + self.ptr = NULL + + def fetch(self, bcf, contig, start, stop, reopen): + return BCFIterator(bcf, contig, start, stop, reopen) + + +cdef BCFIndex makeBCFIndex(VariantHeader header, hts_idx_t *idx): + if not idx: + return None + + if not header: + raise ValueError('invalid VariantHeader') + + cdef BCFIndex index = BCFIndex.__new__(BCFIndex) + index.header = header + index.ptr = idx + index.__init__() + + return index + + +cdef class TabixIndex(BaseIndex): + """Tabix index data structure for VCF files""" + def __init__(self): + self.refs = () + self.refmap = {} + + if not self.ptr: + raise ValueError('Invalid index object') + + cdef int n + cdef const char **refs = tbx_seqnames(self.ptr, &n) + + self.refs = char_array_to_tuple(refs, n, free_after=1) if refs else () + self.refmap = { r:i for i,r in enumerate(self.refs) } + + def __dealloc__(self): + if self.ptr: + tbx_destroy(self.ptr) + self.ptr = NULL + + def fetch(self, bcf, contig, start, stop, reopen): + return TabixIterator(bcf, contig, start, stop, reopen) + + +cdef TabixIndex makeTabixIndex(tbx_t *idx): + if not idx: + return None + + cdef TabixIndex index = TabixIndex.__new__(TabixIndex) + index.ptr = idx + index.__init__() + + return index + + +######################################################################## +######################################################################## +## Iterators +######################################################################## + + +cdef class BaseIterator(object): + pass + + +# Interal function to clean up after iteration stop or failure. +# This would be a nested function if it weren't a cdef function. +cdef void _stop_BCFIterator(BCFIterator self, bcf1_t *record): + bcf_destroy1(record) + + # destroy iter so future calls to __next__ raise StopIteration + bcf_itr_destroy(self.iter) + self.iter = NULL + + +cdef class BCFIterator(BaseIterator): + def __init__(self, VariantFile bcf, contig=None, start=None, stop=None, reopen=True): + if bcf is None: + raise ValueError('bcf must not be None') + + if contig is None: + raise ValueError('contig must be specified') + + if not isinstance(bcf.index, BCFIndex): + raise ValueError('bcf index required') + + cdef BCFIndex index = bcf.index + + self.bcf = bcf + self.index = index + + cdef int rid, cstart, cstop + + try: + rid = index.refmap[contig] + except KeyError: + # A query for a non-existant contig yields an empty iterator, does not raise an error + self.iter = NULL + return + + if reopen: + self.bcf = self.bcf.copy() + + cstart = start if start is not None else 0 + cstop = stop if stop is not None else MAX_POS + + with nogil: + self.iter = bcf_itr_queryi(index.ptr, rid, cstart, cstop) + + if not self.iter: + if errno: + raise IOError(errno, strerror(errno)) + else: + raise IOError('unable to fetch {}:{}-{}'.format(contig, start+1, stop)) + + def __dealloc__(self): + if self.iter: + bcf_itr_destroy(self.iter) + self.iter = NULL + + def __iter__(self): + return self + + def __next__(self): + if not self.iter: + raise StopIteration + + cdef bcf1_t *record = bcf_init1() + + if not record: + raise MemoryError('unable to allocate BCF record') + + record.pos = -1 + if self.bcf.drop_samples: + record.max_unpack = BCF_UN_SHR + + cdef int ret + + with nogil: + ret = bcf_itr_next(self.bcf.htsfile, self.iter, record) + + if ret < 0: + _stop_BCFIterator(self, record) + if ret == -1: + raise StopIteration + elif ret == -2: + raise IOError('truncated file') + elif errno: + raise IOError(errno, strerror(errno)) + else: + raise IOError('unable to fetch next record') + + ret = bcf_subset_format(self.bcf.header.ptr, record) + + if ret < 0: + _stop_BCFIterator(self, record) + raise ValueError('error in bcf_subset_format') + + return makeVariantRecord(self.bcf.header, record) + + +cdef class TabixIterator(BaseIterator): + def __cinit__(self, *args, **kwargs): + self.line_buffer.l = 0 + self.line_buffer.m = 0 + self.line_buffer.s = NULL + + def __init__(self, VariantFile bcf, contig=None, start=None, stop=None, reopen=True): + if bcf is None: + raise ValueError('bcf must not be None') + + if not isinstance(bcf.index, TabixIndex): + raise ValueError('tabix index required') + + cdef TabixIndex index = bcf.index + + self.bcf = bcf + self.index = index + + cdef int rid, cstart, cstop + + try: + rid = index.refmap[contig] + except KeyError: + # A query for a non-existant contig yields an empty iterator, does not raise an error + self.iter = NULL + return + + if reopen: + self.bcf = self.bcf.copy() + + cstart = start if start is not None else 0 + cstop = stop if stop is not None else MAX_POS + + self.iter = tbx_itr_queryi(index.ptr, rid, start, stop) + + if not self.iter: + if errno: + raise IOError(errno, strerror(errno)) + else: + raise IOError('unable to fetch {}:{}-{}'.format(contig, start+1, stop)) + + def __dealloc__(self): + if self.iter: + tbx_itr_destroy(self.iter) + self.iter = NULL + + if self.line_buffer.m: + free(self.line_buffer.s) + + self.line_buffer.l = 0 + self.line_buffer.m = 0 + self.line_buffer.s = NULL + + def __iter__(self): + return self + + def __next__(self): + if not self.iter: + raise StopIteration + + cdef int ret + + with nogil: + ret = tbx_itr_next(self.bcf.htsfile, self.index.ptr, self.iter, &self.line_buffer) + + if ret < 0: + tbx_itr_destroy(self.iter) + self.iter = NULL + if ret == -1: + raise StopIteration + elif ret == -2: + raise IOError('truncated file') + elif errno: + raise IOError(errno, strerror(errno)) + else: + raise IOError('unable to fetch next record') + + cdef bcf1_t *record = bcf_init1() + + if not record: + raise MemoryError('unable to allocate BCF record') + + record.pos = -1 + if self.bcf.drop_samples: + record.max_unpack = BCF_UN_SHR + + ret = vcf_parse1(&self.line_buffer, self.bcf.header.ptr, record) + + # FIXME: stop iteration on parse failure? + if ret < 0: + bcf_destroy1(record) + raise ValueError('error in vcf_parse') + + return makeVariantRecord(self.bcf.header, record) + + +######################################################################## +######################################################################## +## Variant File +######################################################################## + + +cdef class VariantFile(HTSFile): + """*(filename, mode=None, index_filename=None, header=None, drop_samples=False, + duplicate_filehandle=True, ignore_truncation=False)* + + A :term:`VCF`/:term:`BCF` formatted file. The file is automatically + opened. + + If an index for a variant file exists (.csi or .tbi), it will be + opened automatically. Without an index random access to records + via :meth:`fetch` is disabled. + + For writing, a :class:`VariantHeader` object must be provided, + typically obtained from another :term:`VCF` file/:term:`BCF` + file. + + Parameters + ---------- + mode : string + *mode* should be ``r`` for reading or ``w`` for writing. The default is + text mode (:term:`VCF`). For binary (:term:`BCF`) I/O you should append + ``b`` for compressed or ``u`` for uncompressed :term:`BCF` output. + + If ``b`` is present, it must immediately follow ``r`` or ``w``. Valid + modes are ``r``, ``w``, ``wh``, ``rb``, ``wb``, ``wbu`` and ``wb0``. + For instance, to open a :term:`BCF` formatted file for reading, type:: + + f = pysam.VariantFile('ex1.bcf','r') + + If mode is not specified, we will try to auto-detect the file type. All + of the following should work:: + + f1 = pysam.VariantFile('ex1.bcf') + f2 = pysam.VariantFile('ex1.vcf') + f3 = pysam.VariantFile('ex1.vcf.gz') + + index_filename : string + Explicit path to an index file. + + header : VariantHeader + :class:`VariantHeader` object required for writing. + + drop_samples: bool + Ignore sample information when reading. + + duplicate_filehandle: bool + By default, file handles passed either directly or through + File-like objects will be duplicated before passing them to + htslib. The duplication prevents issues where the same stream + will be closed by htslib and through destruction of the + high-level python object. Set to False to turn off + duplication. + + ignore_truncation: bool + Issue a warning, instead of raising an error if the current file + appears to be truncated due to a missing EOF marker. Only applies + to bgzipped formats. (Default=False) + + """ + def __cinit__(self, *args, **kwargs): + self.htsfile = NULL + + def __init__(self, *args, **kwargs): + self.header = None + self.index = None + self.filename = None + self.mode = None + self.index_filename = None + self.is_stream = False + self.is_remote = False + self.is_reading = False + self.drop_samples = False + self.header_written = False + self.start_offset = -1 + + self.open(*args, **kwargs) + + def __dealloc__(self): + if not self.htsfile or not self.header: + return + + # Write header if no records were written + if self.htsfile.is_write and not self.header_written: + with nogil: + bcf_hdr_write(self.htsfile, self.header.ptr) + + cdef int ret = hts_close(self.htsfile) + self.htsfile = NULL + self.header = self.index = None + + if ret < 0: + global errno + if errno == EPIPE: + errno = 0 + else: + raise IOError(errno, force_str(strerror(errno))) + + def close(self): + """closes the :class:`pysam.VariantFile`.""" + if not self.htsfile: + return + + # Write header if no records were written + if self.htsfile.is_write and not self.header_written: + with nogil: + bcf_hdr_write(self.htsfile, self.header.ptr) + + cdef int ret = hts_close(self.htsfile) + self.htsfile = NULL + self.header = self.index = None + + if ret < 0: + global errno + if errno == EPIPE: + errno = 0 + else: + raise IOError(errno, force_str(strerror(errno))) + + def __iter__(self): + if not self.is_open: + raise ValueError('I/O operation on closed file') + + if self.htsfile.is_write: + raise ValueError('cannot iterate over Variantfile opened for writing') + + self.is_reading = 1 + return self + + def __next__(self): + cdef int ret + cdef bcf1_t *record = bcf_init1() + + if not record: + raise MemoryError('unable to allocate BCF record') + + record.pos = -1 + if self.drop_samples: + record.max_unpack = BCF_UN_SHR + + with nogil: + ret = bcf_read1(self.htsfile, self.header.ptr, record) + + if ret < 0: + bcf_destroy1(record) + if ret == -1: + raise StopIteration + elif ret == -2: + raise IOError('truncated file') + elif errno: + raise IOError(errno, strerror(errno)) + else: + raise IOError('unable to fetch next record') + + return makeVariantRecord(self.header, record) + + def copy(self): + if not self.is_open: + raise ValueError + + cdef VariantFile vars = VariantFile.__new__(VariantFile) + cdef bcf_hdr_t *hdr + + # FIXME: re-open using fd or else header and index could be invalid + vars.htsfile = self._open_htsfile() + + if not vars.htsfile: + raise ValueError('Cannot re-open htsfile') + + # minimize overhead by re-using header and index. This approach is + # currently risky, but see above for how this can be mitigated. + vars.header = self.header + vars.index = self.index + + vars.filename = self.filename + vars.mode = self.mode + vars.index_filename = self.index_filename + vars.drop_samples = self.drop_samples + vars.is_stream = self.is_stream + vars.is_remote = self.is_remote + vars.is_reading = self.is_reading + vars.start_offset = self.start_offset + vars.header_written = self.header_written + + if self.htsfile.is_bin: + vars.seek(self.tell()) + else: + with nogil: + hdr = bcf_hdr_read(vars.htsfile) + makeVariantHeader(hdr) + + return vars + + def open(self, filename, mode='r', + index_filename=None, + VariantHeader header=None, + drop_samples=False, + duplicate_filehandle=True, + ignore_truncation=False): + """open a vcf/bcf file. + + If open is called on an existing VariantFile, the current file will be + closed and a new file will be opened. + """ + cdef bcf_hdr_t *hdr + cdef BGZF *bgzfp + cdef hts_idx_t *idx + cdef tbx_t *tidx + cdef char *cfilename + cdef char *cindex_filename = NULL + cdef char *cmode + + # close a previously opened file + if self.is_open: + self.close() + + if not mode or mode[0] not in 'rwa': + raise ValueError('mode must begin with r, w or a') + + self.duplicate_filehandle = duplicate_filehandle + + format_modes = [m for m in mode[1:] if m in 'bcguz'] + if len(format_modes) > 1: + raise ValueError('mode contains conflicting format specifiers: {}'.format(''.join(format_modes))) + + invalid_modes = [m for m in mode[1:] if m not in 'bcguz0123456789ex'] + if invalid_modes: + raise ValueError('invalid mode options: {}'.format(''.join(invalid_modes))) + + # Autodetect mode from filename + if mode == 'w' and isinstance(filename, str): + if filename.endswith('.gz'): + mode = 'wz' + elif filename.endswith('.bcf'): + mode = 'wb' + + # for htslib, wbu seems to not work + if mode == 'wbu': + mode = 'wb0' + + self.mode = mode = force_bytes(mode) + try: + filename = encode_filename(filename) + self.is_remote = hisremote(filename) + self.is_stream = filename == b'-' + except TypeError: + filename = filename + self.is_remote = False + self.is_stream = True + + self.filename = filename + + if index_filename is not None: + self.index_filename = index_filename = encode_filename(index_filename) + else: + self.index_filename = None + + self.drop_samples = bool(drop_samples) + self.header = None + + self.header_written = False + + if mode.startswith(b'w'): + # open file for writing + if index_filename is not None: + raise ValueError('Cannot specify an index filename when writing a VCF/BCF file') + + # header structure (used for writing) + if header: + self.header = header.copy() + else: + self.header = VariantHeader() + #raise ValueError('a VariantHeader must be specified') + + # Header is not written until the first write or on close + self.htsfile = self._open_htsfile() + + if not self.htsfile: + raise ValueError("could not open file `{}` (mode='{}')".format(filename, mode)) + + elif mode.startswith(b'r'): + # open file for reading + self.htsfile = self._open_htsfile() + + if not self.htsfile: + if errno: + raise IOError(errno, 'could not open variant file `{}`: {}'.format(filename, force_str(strerror(errno)))) + else: + raise ValueError('could not open variant file `{}`'.format(filename)) + + if self.htsfile.format.format not in (bcf, vcf): + raise ValueError('invalid file `{}` (mode=`{}`) - is it VCF/BCF format?'.format(filename, mode)) + + self.check_truncation(ignore_truncation) + + with nogil: + hdr = bcf_hdr_read(self.htsfile) + + try: + self.header = makeVariantHeader(hdr) + except ValueError: + raise ValueError('file `{}` does not have valid header (mode=`{}`) - is it VCF/BCF format?'.format(filename, mode)) + + if isinstance(self.filename, bytes): + cfilename = self.filename + else: + cfilename = NULL + + # check for index and open if present + if self.htsfile.format.format == bcf and cfilename: + if index_filename is not None: + cindex_filename = index_filename + with nogil: + idx = bcf_index_load2(cfilename, cindex_filename) + self.index = makeBCFIndex(self.header, idx) + + elif self.htsfile.format.compression == bgzf and cfilename: + if index_filename is not None: + cindex_filename = index_filename + with nogil: + tidx = tbx_index_load2(cfilename, cindex_filename) + self.index = makeTabixIndex(tidx) + + if not self.is_stream: + self.start_offset = self.tell() + else: + raise ValueError('unknown mode {}'.format(mode)) + + def reset(self): + """reset file position to beginning of file just after the header.""" + return self.seek(self.start_offset) + + def is_valid_tid(self, tid): + """ + return True if the numerical :term:`tid` is valid; False otherwise. + + returns -1 if reference is not known. + """ + if not self.is_open: + raise ValueError('I/O operation on closed file') + + cdef bcf_hdr_t *hdr = self.header.ptr + cdef int rid = tid + return 0 <= rid < hdr.n[BCF_DT_CTG] + + def get_tid(self, reference): + """ + return the numerical :term:`tid` corresponding to + :term:`reference` + + returns -1 if reference is not known. + """ + if not self.is_open: + raise ValueError('I/O operation on closed file') + + cdef vdict_t *d = self.header.ptr.dict[BCF_DT_CTG] + reference = force_bytes(reference) + cdef khint_t k = kh_get_vdict(d, reference) + return kh_val_vdict(d, k).id if k != kh_end(d) else -1 + + def get_reference_name(self, tid): + """ + return :term:`reference` name corresponding to numerical :term:`tid` + """ + if not self.is_open: + raise ValueError('I/O operation on closed file') + + cdef bcf_hdr_t *hdr = self.header.ptr + cdef int rid = tid + if rid < 0 or rid >= hdr.n[BCF_DT_CTG]: + raise ValueError('Invalid tid') + return bcf_str_cache_get_charptr(bcf_hdr_id2name(hdr, rid)) + + def fetch(self, contig=None, start=None, stop=None, region=None, reopen=False, end=None, reference=None): + """fetch records in a :term:`region` using 0-based indexing. The + region is specified by :term:`contig`, *start* and *end*. + Alternatively, a samtools :term:`region` string can be supplied. + + Without *contig* or *region* all mapped records will be fetched. The + records will be returned ordered by contig, which will not necessarily + be the order within the file. + + Set *reopen* to true if you will be using multiple iterators on the + same file at the same time. The iterator returned will receive its + own copy of a filehandle to the file effectively re-opening the + file. Re-opening a file incurrs some overhead, so use with care. + + If only *contig* is set, all records on *contig* will be fetched. + If both *region* and *contig* are given, an exception is raised. + + Note that a bgzipped :term:`VCF`.gz file without a tabix/CSI index + (.tbi/.csi) or a :term:`BCF` file without a CSI index can only be + read sequentially. + """ + if not self.is_open: + raise ValueError('I/O operation on closed file') + + if self.htsfile.is_write: + raise ValueError('cannot fetch from Variantfile opened for writing') + + if contig is None and region is None: + self.is_reading = 1 + bcf = self.copy() if reopen else self + bcf.seek(self.start_offset) + return iter(bcf) + + if not self.index: + raise ValueError('fetch requires an index') + + _, tid, start, stop = self.parse_region(contig, start, stop, region, + None, end=end, reference=reference) + + if contig is None: + contig = self.get_reference_name(tid) + + self.is_reading = 1 + return self.index.fetch(self, contig, start, stop, reopen) + + def new_record(self, *args, **kwargs): + """Create a new empty :class:`VariantRecord`. + + See :meth:`VariantHeader.new_record` + """ + return self.header.new_record(*args, **kwargs) + + cpdef int write(self, VariantRecord record) except -1: + """ + write a single :class:`pysam.VariantRecord` to disk. + + returns the number of bytes written. + """ + if record is None: + raise ValueError('record must not be None') + + if not self.is_open: + return ValueError('I/O operation on closed file') + + if not self.htsfile.is_write: + raise ValueError('cannot write to a Variantfile opened for reading') + + if not self.header_written: + self.header_written = True + with nogil: + bcf_hdr_write(self.htsfile, self.header.ptr) + + #if record.header is not self.header: + # record.translate(self.header) + # raise ValueError('Writing records from a different VariantFile is not yet supported') + + if record.ptr.n_sample != bcf_hdr_nsamples(self.header.ptr): + msg = 'Invalid VariantRecord. Number of samples does not match header ({} vs {})' + raise ValueError(msg.format(record.ptr.n_sample, bcf_hdr_nsamples(self.header.ptr))) + + # Sync END annotation before writing + bcf_sync_end(record) + + cdef int ret + + with nogil: + ret = bcf_write1(self.htsfile, self.header.ptr, record.ptr) + + if ret < 0: + raise IOError(errno, strerror(errno)) + + return ret + + def subset_samples(self, include_samples): + """ + Read only a subset of samples to reduce processing time and memory. + Must be called prior to retrieving records. + """ + if not self.is_open: + raise ValueError('I/O operation on closed file') + + if self.htsfile.is_write: + raise ValueError('cannot subset samples from Variantfile opened for writing') + + if self.is_reading: + raise ValueError('cannot subset samples after fetching records') + + self.header._subset_samples(include_samples) + + # potentially unnecessary optimization that also sets max_unpack + if not include_samples: + self.drop_samples = True diff --git a/pysam/libcbcftools.pxd b/pysam/libcbcftools.pxd new file mode 100644 index 0000000..f1c8d76 --- /dev/null +++ b/pysam/libcbcftools.pxd @@ -0,0 +1,9 @@ +cdef extern from "bcftools.pysam.h": + + int bcftools_main(int argc, char *argv[]) + void bcftools_set_stderr(int fd) + void bcftools_unset_stderr() + void bcftools_set_stdout(int fd) + void bcftools_set_stdout_fn(const char *) + void bcftools_unset_stdout() + void bcftools_set_optind(int) diff --git a/pysam/libcbcftools.pyx b/pysam/libcbcftools.pyx new file mode 100644 index 0000000..8e90388 --- /dev/null +++ b/pysam/libcbcftools.pyx @@ -0,0 +1,2 @@ +def py_bcftools(): + pass diff --git a/pysam/libcbgzf.pyx b/pysam/libcbgzf.pyx new file mode 100644 index 0000000..02ff2a2 --- /dev/null +++ b/pysam/libcbgzf.pyx @@ -0,0 +1,238 @@ +"""Functions that read and write block gzipped files. + +The user of the file doesn't have to worry about the compression +and random access is allowed if an index file is present.""" + +# based on Python 3.5's gzip module + +import io + +from libc.stdint cimport int8_t, int16_t, int32_t, int64_t +from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t +from libc.stdlib cimport malloc, calloc, realloc, free + +from cpython.object cimport PyObject +from cpython.bytes cimport PyBytes_FromStringAndSize, _PyBytes_Resize + +from pysam.libcutils cimport force_bytes, encode_filename +from pysam.libchtslib cimport bgzf_open, bgzf_index_build_init, bgzf_write, bgzf_read, \ + bgzf_flush, bgzf_index_dump, bgzf_close, bgzf_seek, \ + bgzf_tell, bgzf_getline, kstring_t, SEEK_SET, BGZF + +__all__ = ["BGZFile"] + + +BUFFER_SIZE = io.DEFAULT_BUFFER_SIZE + + +cdef class BGZFile(object): + """The BGZFile class simulates most of the methods of a file object with + the exception of the truncate() method. + + This class only supports opening files in binary mode. If you need to open a + compressed file in text mode, use the gzip.open() function. + """ + cdef BGZF* bgzf + cdef readonly object name, index + + def __init__(self, filename, mode=None, index=None): + """Constructor for the BGZFile class. + + The mode argument can be any of 'r', 'rb', 'a', 'ab', 'w', 'wb', 'x', or + 'xb' depending on whether the file will be read or written. The default + is the mode of fileobj if discernible; otherwise, the default is 'rb'. + A mode of 'r' is equivalent to one of 'rb', and similarly for 'w' and + 'wb', 'a' and 'ab', and 'x' and 'xb'. + """ + if mode and ('t' in mode or 'U' in mode): + raise ValueError("Invalid mode: {!r}".format(mode)) + if not mode: + mode = 'rb' + elif mode and 'b' not in mode: + mode += 'b' + + mode = force_bytes(mode) + + self.name = encode_filename(filename) + self.index = encode_filename(index) if index is not None else None + + self.bgzf = bgzf_open(self.name, mode) + + if self.bgzf.is_write and index is not None and bgzf_index_build_init(self.bgzf) < 0: + raise IOError('Error building bgzf index') + + def __dealloc__(self): + self.close() + + def write(self, data): + if not self.bgzf: + raise ValueError("write() on closed BGZFile object") + + if not self.bgzf.is_write: + import errno + raise IOError(errno.EBADF, "write() on read-only BGZFile object") + + if isinstance(data, bytes): + length = len(data) + else: + # accept any data that supports the buffer protocol + data = memoryview(data) + length = data.nbytes + + if length > 0 and bgzf_write(self.bgzf, data, length) < 0: + raise IOError('BGZFile write failed') + + return length + + def read(self, size=-1): + cdef ssize_t read_size + + if not self.bgzf: + raise ValueError("read() on closed BGZFile object") + + if self.bgzf.is_write: + import errno + raise IOError(errno.EBADF, "read() on write-only BGZFile object") + + if size < 0: + chunks = [] + while 1: + chunk = PyBytes_FromStringAndSize(NULL, BUFFER_SIZE) + cdata = chunk + read_size = bgzf_read(self.bgzf, chunk, BUFFER_SIZE) + if read_size < 0: + raise IOError('Error reading from BGZFile') + elif not read_size: + break + elif read_size < BUFFER_SIZE: + chunk = chunk[:read_size] + chunks.append(chunk) + return b''.join(chunks) + + elif size > 0: + chunk = PyBytes_FromStringAndSize(NULL, size) + read_size = bgzf_read(self.bgzf, chunk, size) + if read_size < 0: + raise IOError('Error reading from BGZFile') + elif read_size < size: + chunk = chunk[:size] + return chunk + else: + return b'' + + @property + def closed(self): + return self.bgzf == NULL + + def close(self): + if not self.bgzf: + return + + if self.bgzf.is_write and bgzf_flush(self.bgzf) < 0: + raise IOError('Error flushing BGZFile object') + + if self.index and bgzf_index_dump(self.bgzf, self.index, NULL) < 0: + raise IOError('Cannot write index') + + cdef ret = bgzf_close(self.bgzf) + self.bgzf = NULL + + if ret < 0: + raise IOError('Error closing BGZFile object') + + def __enter__(self): + return self + + def __exit__(self, type, value, tb): + self.close() + + def flush(self): + if not self.bgzf: + return + + if self.bgzf.is_write and bgzf_flush(self.bgzf) < 0: + raise IOError('Error flushing BGZFile object') + + def fileno(self): + """Invoke the underlying file object's fileno() method. + + This will raise AttributeError if the underlying file object + doesn't support fileno(). + """ + raise AttributeError('fileno') + + def rewind(self): + '''Return the uncompressed stream file position indicator to the + beginning of the file''' + if not self.bgzf: + raise ValueError("rewind() on closed BGZFile object") + if not self.bgzf.is_write: + raise IOError("Can't rewind in write mode") + if bgzf_seek(self.bgzf, 0, SEEK_SET) < 0: + raise IOError('Error seeking BGZFFile object') + + def readable(self): + if not self.bgzf: + raise ValueError("readable() on closed BGZFile object") + return self.bgzf != NULL and not self.bgzf.is_write + + def writable(self): + return self.bgzf != NULL and self.bgzf.is_write + + def seekable(self): + return True + + def tell(self): + if not self.bgzf: + raise ValueError("seek() on closed BGZFile object") + cdef int64_t off = bgzf_tell(self.bgzf) + if off < 0: + raise IOError('Error in tell on BGZFFile object') + + return off + + def seek(self, offset, whence=io.SEEK_SET): + if not self.bgzf: + raise ValueError("seek() on closed BGZFile object") + if whence is not io.SEEK_SET: + raise ValueError('Seek from end not supported') + + cdef int64_t off = bgzf_seek(self.bgzf, offset, SEEK_SET) + if off < 0: + raise IOError('Error seeking BGZFFile object') + + return off + + def readline(self, size=-1): + if not self.bgzf: + raise ValueError("readline() on closed BGZFile object") + + cdef kstring_t line + cdef char c + + line.l = line.m = 0 + line.s = NULL + + cdef int ret = bgzf_getline(self.bgzf, '\n', &line) + if ret == -1: + s = b'' + elif ret == -2: + if line.m: + free(line.s) + raise IOError('Error reading line in BGZFFile object') + else: + s = line.s[:line.l] + + if line.m: + free(line.s) + + return s + + def __iter__(self): + return self + + def __next__(self): + line = self.readline() + if not line: + raise StopIteration() + return line diff --git a/pysam/libcfaidx.pxd b/pysam/libcfaidx.pxd new file mode 100644 index 0000000..53ad767 --- /dev/null +++ b/pysam/libcfaidx.pxd @@ -0,0 +1,80 @@ +from libc.stdint cimport int8_t, int16_t, int32_t, int64_t +from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t +from libc.stdlib cimport malloc, calloc, realloc, free +from libc.string cimport memcpy, memcmp, strncpy, strlen, strdup +from libc.stdio cimport FILE, printf +cimport cython + +from cpython cimport array +from pysam.libchtslib cimport faidx_t, kstring_t, BGZF + +# These functions are put here and not in chtslib.pxd in order +# to avoid warnings for unused functions. +cdef extern from "pysam_stream.h" nogil: + + ctypedef struct kstream_t: + pass + + ctypedef struct kseq_t: + kstring_t name + kstring_t comment + kstring_t seq + kstring_t qual + + kseq_t *kseq_init(BGZF *) + int kseq_read(kseq_t *) + void kseq_destroy(kseq_t *) + kstream_t *ks_init(BGZF *) + void ks_destroy(kstream_t *) + + # Retrieve characters from stream until delimiter + # is reached placing results in str. + int ks_getuntil(kstream_t *, + int delimiter, + kstring_t * str, + int * dret) + +cdef class FastaFile: + cdef bint is_remote + cdef object _filename, _references, _lengths, reference2length + cdef faidx_t* fastafile + cdef char* _fetch(self, char* reference, + int start, int end, int* length) except? NULL + + +cdef class FastqProxy: + cdef kseq_t * _delegate + cdef cython.str to_string(self) + cdef cython.str tostring(self) + cpdef array.array get_quality_array(self, int offset=*) + + +cdef class FastxRecord: + """ + Python container for pysam.libcfaidx.FastqProxy with persistence. + """ + cdef public str comment, quality, sequence, name + cdef cython.str to_string(self) + cdef cython.str tostring(self) + cpdef array.array get_quality_array(self, int offset=*) + +cdef class FastxFile: + cdef object _filename + cdef BGZF * fastqfile + cdef kseq_t * entry + cdef bint persist + cdef bint is_remote + + cdef kseq_t * getCurrent(self) + cdef int cnext(self) + + +# Compatibility Layer for pysam 0.8.1 +cdef class FastqFile(FastxFile): + pass + + +# Compatibility Layer for pysam < 0.8 +cdef class Fastafile(FastaFile): + pass + diff --git a/pysam/libcfaidx.pyx b/pysam/libcfaidx.pyx new file mode 100644 index 0000000..ca2f518 --- /dev/null +++ b/pysam/libcfaidx.pyx @@ -0,0 +1,666 @@ +# cython: embedsignature=True +# cython: profile=True +############################################################################### +############################################################################### +# Cython wrapper for SAM/BAM/CRAM files based on htslib +############################################################################### +# The principal classes defined in this module are: +# +# class FastaFile random read read/write access to faidx indexd files +# class FastxFile streamed read/write access to fasta/fastq files +# +# Additionally this module defines several additional classes that are part +# of the internal API. These are: +# +# class FastqProxy +# class FastxRecord +# +# For backwards compatibility, the following classes are also defined: +# +# class Fastafile equivalent to FastaFile +# class FastqFile equivalent to FastxFile +# +############################################################################### +# +# The MIT License +# +# Copyright (c) 2015 Andreas Heger +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +import sys +import os +import re + + +from libc.errno cimport errno +from libc.string cimport strerror + +from cpython cimport array + +from cpython cimport PyErr_SetString, \ + PyBytes_Check, \ + PyUnicode_Check, \ + PyBytes_FromStringAndSize + +from cpython.version cimport PY_MAJOR_VERSION + +from pysam.libchtslib cimport \ + faidx_nseq, fai_load, fai_load3, fai_destroy, fai_fetch, \ + faidx_seq_len, faidx_iseq, faidx_seq_len, \ + faidx_fetch_seq, hisremote, \ + bgzf_open, bgzf_close + +from pysam.libcutils cimport force_bytes, force_str, charptr_to_str +from pysam.libcutils cimport encode_filename, from_string_and_size +from pysam.libcutils cimport qualitystring_to_array, parse_region + +cdef class FastqProxy +cdef makeFastqProxy(kseq_t * src): + '''enter src into AlignedRead.''' + cdef FastqProxy dest = FastqProxy.__new__(FastqProxy) + dest._delegate = src + return dest + +## TODO: +## add automatic indexing. +## add function to get sequence names. +cdef class FastaFile: + """Random access to fasta formatted files that + have been indexed by :term:`faidx`. + + The file is automatically opened. The index file of file + ```` is expected to be called ``.fai``. + + Parameters + ---------- + + filename : string + Filename of fasta file to be opened. + + filepath_index : string + Optional, filename of the index. By default this is + the filename + ".fai". + + filepath_index_compressed : string + Optional, filename of the index if fasta file is. By default this is + the filename + ".gzi". + + Raises + ------ + + ValueError + if index file is missing + + IOError + if file could not be opened + + """ + + def __cinit__(self, *args, **kwargs): + self.fastafile = NULL + self._filename = None + self._references = None + self._lengths = None + self.reference2length = None + self._open(*args, **kwargs) + + def is_open(self): + '''return true if samfile has been opened.''' + return self.fastafile != NULL + + def __len__(self): + if self.fastafile == NULL: + raise ValueError("calling len() on closed file") + + return faidx_nseq(self.fastafile) + + def _open(self, filename, filepath_index=None, filepath_index_compressed=None): + '''open an indexed fasta file. + + This method expects an indexed fasta file. + ''' + + # close a previously opened file + if self.fastafile != NULL: + self.close() + + self._filename = encode_filename(filename) + cdef char *cfilename = self._filename + cdef char *cindexname = NULL + cdef char *cindexname_compressed = NULL + self.is_remote = hisremote(cfilename) + + # open file for reading + if (self._filename != b"-" + and not self.is_remote + and not os.path.exists(filename)): + raise IOError("file `%s` not found" % filename) + + # 3 modes to open: + # compressed fa: fai_load3 with filename, index_fai and index_gzi + # uncompressed fa: fai_load3 with filename and index_fai + # uncompressed fa: fai_load with default index name + if filepath_index: + # when opening, set flags to 0 - do not automatically + # build index if it does not exist. + + if not os.path.exists(filepath_index): + raise IOError("filename {} does not exist".format(filepath_index)) + cindexname = bindex_filename = encode_filename(filepath_index) + + if filepath_index_compressed: + if not os.path.exists(filepath_index_compressed): + raise IOError("filename {} does not exist".format(filepath_index_compressed)) + cindexname_compressed = bindex_filename_compressed = encode_filename(filepath_index_compressed) + with nogil: + self.fastafile = fai_load3(cfilename, cindexname, cindexname_compressed, 0) + else: + with nogil: + self.fastafile = fai_load3(cfilename, cindexname, NULL, 0) + else: + with nogil: + self.fastafile = fai_load(cfilename) + + if self.fastafile == NULL: + raise IOError("error when opening file `%s`" % filename) + + cdef int nreferences = faidx_nseq(self.fastafile) + cdef int x + cdef const char * s + self._references = [] + self._lengths = [] + for x from 0 <= x < nreferences: + s = faidx_iseq(self.fastafile, x) + ss = force_str(s) + self._references.append(ss) + self._lengths.append(faidx_seq_len(self.fastafile, s)) + self.reference2length = dict(zip(self._references, self._lengths)) + + def close(self): + """close the file.""" + if self.fastafile != NULL: + fai_destroy(self.fastafile) + self.fastafile = NULL + + def __dealloc__(self): + if self.fastafile != NULL: + fai_destroy(self.fastafile) + self.fastafile = NULL + + # context manager interface + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.close() + return False + + property closed: + """"bool indicating the current state of the file object. + This is a read-only attribute; the close() method changes the value. + """ + def __get__(self): + return not self.is_open() + + property filename: + """filename associated with this object. This is a read-only attribute.""" + def __get__(self): + return self._filename + + property references: + '''tuple with the names of :term:`reference` sequences.''' + def __get__(self): + return self._references + + property nreferences: + """"int with the number of :term:`reference` sequences in the file. + This is a read-only attribute.""" + def __get__(self): + return len(self._references) if self.references else None + + property lengths: + """tuple with the lengths of :term:`reference` sequences.""" + def __get__(self): + return self._lengths + + def fetch(self, + reference=None, + start=None, + end=None, + region=None): + """fetch sequences in a :term:`region`. + + A region can + either be specified by :term:`reference`, `start` and + `end`. `start` and `end` denote 0-based, half-open + intervals. + + Alternatively, a samtools :term:`region` string can be + supplied. + + If any of the coordinates are missing they will be replaced by the + minimum (`start`) or maximum (`end`) coordinate. + + Note that region strings are 1-based, while `start` and `end` denote + an interval in python coordinates. + The region is specified by :term:`reference`, `start` and `end`. + + Returns + ------- + + string : a string with the sequence specified by the region. + + Raises + ------ + + IndexError + if the coordinates are out of range + + ValueError + if the region is invalid + + """ + + if not self.is_open(): + raise ValueError("I/O operation on closed file" ) + + cdef int length + cdef char *seq + cdef char *ref + cdef int rstart, rend + + reference, rstart, rend = parse_region(reference, start, end, region) + + if reference is None: + raise ValueError("no sequence/region supplied.") + + if rstart == rend: + return "" + + ref = reference + with nogil: + length = faidx_seq_len(self.fastafile, ref) + if length == -1: + raise KeyError("sequence '%s' not present" % reference) + if rstart >= length: + return "" + + # fai_fetch adds a '\0' at the end + with nogil: + seq = faidx_fetch_seq(self.fastafile, + ref, + rstart, + rend-1, + &length) + + if not seq: + if errno: + raise IOError(errno, strerror(errno)) + else: + raise ValueError("failure when retrieving sequence on '%s'" % reference) + + try: + return charptr_to_str(seq) + finally: + free(seq) + + cdef char *_fetch(self, char *reference, int start, int end, int *length) except? NULL: + '''fetch sequence for reference, start and end''' + + cdef char *seq + with nogil: + seq = faidx_fetch_seq(self.fastafile, + reference, + start, + end-1, + length) + + if not seq: + if errno: + raise IOError(errno, strerror(errno)) + else: + raise ValueError("failure when retrieving sequence on '%s'" % reference) + + return seq + + def get_reference_length(self, reference): + '''return the length of reference.''' + return self.reference2length[reference] + + def __getitem__(self, reference): + return self.fetch(reference) + + def __contains__(self, reference): + '''return true if reference in fasta file.''' + return reference in self.reference2length + + +cdef class FastqProxy: + """A single entry in a fastq file.""" + def __init__(self): pass + + property name: + """The name of each entry in the fastq file.""" + def __get__(self): + return charptr_to_str(self._delegate.name.s) + + property sequence: + """The sequence of each entry in the fastq file.""" + def __get__(self): + return charptr_to_str(self._delegate.seq.s) + + property comment: + def __get__(self): + if self._delegate.comment.l: + return charptr_to_str(self._delegate.comment.s) + else: + return None + + property quality: + """The quality score of each entry in the fastq file, represented as a string.""" + def __get__(self): + if self._delegate.qual.l: + return charptr_to_str(self._delegate.qual.s) + else: + return None + + cdef cython.str to_string(self): + if self.comment is None: + comment = "" + else: + comment = " %s" % self.comment + + if self.quality is None: + return ">%s%s\n%s" % (self.name, comment, self.sequence) + else: + return "@%s%s\n%s\n+\n%s" % (self.name, comment, + self.sequence, self.quality) + + cdef cython.str tostring(self): + """deprecated : use :meth:`to_string`""" + return self.to_string() + + def __str__(self): + return self.to_string() + + cpdef array.array get_quality_array(self, int offset=33): + '''return quality values as integer array after subtracting offset.''' + if self.quality is None: + return None + return qualitystring_to_array(force_bytes(self.quality), + offset=offset) + +cdef class FastxRecord: + """A fasta/fastq record. + + A record must contain a name and a sequence. If either of them are + None, a ValueError is raised on writing. + + """ + def __init__(self, + name=None, + comment=None, + sequence=None, + quality=None, + FastqProxy proxy=None): + if proxy is not None: + self.comment = proxy.comment + self.quality = proxy.quality + self.sequence = proxy.sequence + self.name = proxy.name + else: + self.comment = comment + self.quality = quality + self.sequence = sequence + self.name = name + + def __copy__(self): + return FastxRecord(self.name, self.comment, self.sequence, self.quality) + + def __deepcopy__(self, memo): + return FastxRecord(self.name, self.comment, self.sequence, self.quality) + + cdef cython.str to_string(self): + if self.name is None: + raise ValueError("can not write record without name") + + if self.sequence is None: + raise ValueError("can not write record without a sequence") + + if self.comment is None: + comment = "" + else: + comment = " %s" % self.comment + + if self.quality is None: + return ">%s%s\n%s" % (self.name, comment, self.sequence) + else: + return "@%s%s\n%s\n+\n%s" % (self.name, comment, + self.sequence, self.quality) + + cdef cython.str tostring(self): + """deprecated : use :meth:`to_string`""" + return self.to_string() + + def set_name(self, name): + if name is None: + raise ValueError("FastxRecord must have a name and not None") + self.name = name + + def set_comment(self, comment): + self.comment = comment + + def set_sequence(self, sequence, quality=None): + """set sequence of this record. + + """ + self.sequence = sequence + if quality is not None: + if len(sequence) != len(quality): + raise ValueError("sequence and quality length do not match: {} vs {}".format( + len(sequence), len(quality))) + + self.quality = quality + else: + self.quality = None + + def __str__(self): + return self.to_string() + + cpdef array.array get_quality_array(self, int offset=33): + '''return quality values as array after subtracting offset.''' + if self.quality is None: + return None + return qualitystring_to_array(force_bytes(self.quality), + offset=offset) + + +cdef class FastxFile: + """Stream access to :term:`fasta` or :term:`fastq` formatted files. + + The file is automatically opened. + + Entries in the file can be both fastq or fasta formatted or even a + mixture of the two. + + This file object permits iterating over all entries in the + file. Random access is not implemented. The iteration returns + objects of type :class:`FastqProxy` + + Parameters + ---------- + + filename : string + Filename of fasta/fastq file to be opened. + + persist : bool + + If True (default) make a copy of the entry in the file during + iteration. If set to False, no copy will be made. This will + permit much faster iteration, but an entry will not persist + when the iteration continues and an entry is read-only. + + Notes + ----- + Prior to version 0.8.2, this class was called FastqFile. + + Raises + ------ + + IOError + if file could not be opened + + + Examples + -------- + >>> with pysam.FastxFile(filename) as fh: + ... for entry in fh: + ... print(entry.name) + ... print(entry.sequence) + ... print(entry.comment) + ... print(entry.quality) + >>> with pysam.FastxFile(filename) as fin, open(out_filename, mode='w') as fout: + ... for entry in fin: + ... fout.write(str(entry)) + + """ + def __cinit__(self, *args, **kwargs): + # self.fastqfile = NULL + self._filename = None + self.entry = NULL + self._open(*args, **kwargs) + + def is_open(self): + '''return true if samfile has been opened.''' + return self.entry != NULL + + def _open(self, filename, persist=True): + '''open a fastq/fasta file in *filename* + + Paramentes + ---------- + + persist : bool + + if True return a copy of the underlying data (default + True). The copy will persist even if the iteration + on the file continues. + + ''' + if self.fastqfile != NULL: + self.close() + + self._filename = encode_filename(filename) + cdef char *cfilename = self._filename + self.is_remote = hisremote(cfilename) + + # open file for reading + if (self._filename != b"-" + and not self.is_remote + and not os.path.exists(filename)): + raise IOError("file `%s` not found" % filename) + + self.persist = persist + + with nogil: + self.fastqfile = bgzf_open(cfilename, "r") + self.entry = kseq_init(self.fastqfile) + self._filename = filename + + def close(self): + '''close the file.''' + if self.fastqfile != NULL: + bgzf_close(self.fastqfile) + self.fastqfile = NULL + if self.entry != NULL: + kseq_destroy(self.entry) + self.entry = NULL + + def __dealloc__(self): + if self.fastqfile != NULL: + bgzf_close(self.fastqfile) + if self.entry: + kseq_destroy(self.entry) + + # context manager interface + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.close() + return False + + property closed: + """"bool indicating the current state of the file object. + This is a read-only attribute; the close() method changes the value. + """ + def __get__(self): + return not self.is_open() + + property filename: + """string with the filename associated with this object.""" + def __get__(self): + return self._filename + + def __iter__(self): + if not self.is_open(): + raise ValueError("I/O operation on closed file") + return self + + cdef kseq_t * getCurrent(self): + return self.entry + + cdef int cnext(self): + '''C version of iterator + ''' + with nogil: + return kseq_read(self.entry) + + def __next__(self): + """ + python version of next(). + """ + cdef int l + with nogil: + l = kseq_read(self.entry) + if (l >= 0): + if self.persist: + return FastxRecord(proxy=makeFastqProxy(self.entry)) + return makeFastqProxy(self.entry) + else: + raise StopIteration + +# Compatibility Layer for pysam 0.8.1 +cdef class FastqFile(FastxFile): + """FastqFile is deprecated: use FastxFile instead""" + pass + +# Compatibility Layer for pysam < 0.8 +cdef class Fastafile(FastaFile): + """Fastafile is deprecated: use FastaFile instead""" + pass + +__all__ = ["FastaFile", + "FastqFile", + "FastxFile", + "Fastafile", + "FastxRecord", + "FastqProxy"] diff --git a/pysam/libchtslib.pxd b/pysam/libchtslib.pxd new file mode 100644 index 0000000..119dab2 --- /dev/null +++ b/pysam/libchtslib.pxd @@ -0,0 +1,2602 @@ +from libc.stdint cimport int8_t, int16_t, int32_t, int64_t +from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t +from libc.stdlib cimport malloc, calloc, realloc, free +from libc.string cimport memcpy, memcmp, strncpy, strlen, strdup +from libc.stdio cimport FILE, printf +from posix.types cimport off_t + +cdef extern from "Python.h": + FILE* PyFile_AsFile(object) + + +# cython does not wrap stdarg +cdef extern from "stdarg.h": + ctypedef struct va_list: + pass + + +cdef extern from "htslib/kstring.h" nogil: + ctypedef struct kstring_t: + size_t l, m + char *s + + +cdef extern from "htslib_util.h" nogil: + int hts_set_verbosity(int verbosity) + int hts_get_verbosity() + + ctypedef uint32_t khint32_t + ctypedef uint32_t khint_t + ctypedef khint_t khiter_t + + # Used to manage BCF Header info + ctypedef struct vdict_t: + khint_t n_buckets, size, n_occupied, upper_bound + khint32_t *flags + const char *keys + bcf_idinfo_t *vals + + # Used to manage indexed contigs in Tabix + ctypedef struct s2i_t: + khint_t n_buckets, size, n_occupied, upper_bound + khint32_t *flags + const char *keys + int64_t *vals + + # Generic khash methods + khint_t kh_size(void *d) + khint_t kh_begin(void *d) + khint_t kh_end(void *d) + int kh_exist(void *d, khiter_t i) + + # Specialized khash methods for vdict + khint_t kh_get_vdict(vdict_t *d, const char *key) + const char *kh_key_vdict "kh_key" (vdict_t *d, khint_t i) + bcf_idinfo_t kh_val_vdict "kh_val" (vdict_t *d, khint_t i) + + +cdef extern from "htslib/hfile.h" nogil: + ctypedef struct hFILE + + # @abstract Open the named file or URL as a stream + # @return An hFILE pointer, or NULL (with errno set) if an error occurred. + hFILE *hopen(const char *filename, const char *mode, ...) + + # @abstract Associate a stream with an existing open file descriptor + # @return An hFILE pointer, or NULL (with errno set) if an error occurred. + # @notes For socket descriptors (on Windows), mode should contain 's'. + hFILE *hdopen(int fd, const char *mode) + + # @abstract Report whether the file name or URL denotes remote storage + # @return 0 if local, 1 if remote. + # @notes "Remote" means involving e.g. explicit network access, with the + # implication that callers may wish to cache such files' contents locally. + int hisremote(const char *filename) + + # @abstract Flush (for output streams) and close the stream + # @return 0 if successful, or EOF (with errno set) if an error occurred. + int hclose(hFILE *fp) + + # @abstract Close the stream, without flushing or propagating errors + # @notes For use while cleaning up after an error only. Preserves errno. + void hclose_abruptly(hFILE *fp) + + # @abstract Return the stream's error indicator + # @return Non-zero (in fact, an errno value) if an error has occurred. + # @notes This would be called herror() and return true/false to parallel + # ferror(3), but a networking-related herror(3) function already exists. */ + int herrno(hFILE *fp) + + # @abstract Clear the stream's error indicator + void hclearerr(hFILE *fp) + + # @abstract Reposition the read/write stream offset + # @return The resulting offset within the stream (as per lseek(2)), + # or negative if an error occurred. + off_t hseek(hFILE *fp, off_t offset, int whence) + + # @abstract Report the current stream offset + # @return The offset within the stream, starting from zero. + off_t htell(hFILE *fp) + + # @abstract Read one character from the stream + # @return The character read, or EOF on end-of-file or error + int hgetc(hFILE *fp) + + # Read from the stream until the delimiter, up to a maximum length + # @param buffer The buffer into which bytes will be written + # @param size The size of the buffer + # @param delim The delimiter (interpreted as an `unsigned char`) + # @param fp The file stream + # @return The number of bytes read, or negative on error. + # @since 1.4 + # + # Bytes will be read into the buffer up to and including a delimiter, until + # EOF is reached, or _size-1_ bytes have been written, whichever comes first. + # The string will then be terminated with a NUL byte (`\0`). + ssize_t hgetdelim(char *buffer, size_t size, int delim, hFILE *fp) + + # Read a line from the stream, up to a maximum length + # @param buffer The buffer into which bytes will be written + # @param size The size of the buffer + # @param fp The file stream + # @return The number of bytes read, or negative on error. + # @since 1.4 + # + # Specialization of hgetdelim() for a `\n` delimiter. + ssize_t hgetln(char *buffer, size_t size, hFILE *fp) + + # Read a line from the stream, up to a maximum length + # @param buffer The buffer into which bytes will be written + # @param size The size of the buffer (must be > 1 to be useful) + # @param fp The file stream + # @return _buffer_ on success, or `NULL` if an error occurred. + # @since 1.4 + # + # This function can be used as a replacement for `fgets(3)`, or together with + # kstring's `kgetline()` to read arbitrarily-long lines into a _kstring_t_. + char *hgets(char *buffer, int size, hFILE *fp) + + # @abstract Peek at characters to be read without removing them from buffers + # @param fp The file stream + # @param buffer The buffer to which the peeked bytes will be written + # @param nbytes The number of bytes to peek at; limited by the size of the + # internal buffer, which could be as small as 4K. + # @return The number of bytes peeked, which may be less than nbytes if EOF + # is encountered; or negative, if there was an I/O error. + # @notes The characters peeked at remain in the stream's internal buffer, + # and will be returned by later hread() etc calls. + ssize_t hpeek(hFILE *fp, void *buffer, size_t nbytes) + + # @abstract Read a block of characters from the file + # @return The number of bytes read, or negative if an error occurred. + # @notes The full nbytes requested will be returned, except as limited + # by EOF or I/O errors. + ssize_t hread(hFILE *fp, void *buffer, size_t nbytes) + + # @abstract Write a character to the stream + # @return The character written, or EOF if an error occurred. + int hputc(int c, hFILE *fp) + + # @abstract Write a string to the stream + # @return 0 if successful, or EOF if an error occurred. + int hputs(const char *text, hFILE *fp) + + # @abstract Write a block of characters to the file + # @return Either nbytes, or negative if an error occurred. + # @notes In the absence of I/O errors, the full nbytes will be written. + ssize_t hwrite(hFILE *fp, const void *buffer, size_t nbytes) + + # @abstract For writing streams, flush buffered output to the underlying stream + # @return 0 if successful, or EOF if an error occurred. + int hflush(hFILE *fp) + + +cdef extern from "htslib/bgzf.h" nogil: + ctypedef struct bgzf_mtaux_t + ctypedef struct bgzidx_t + ctypedef struct z_stream + + ctypedef struct BGZF: + unsigned errcode + unsigned is_write + int is_be + int compress_level + int is_compressed + int is_gzip + int cache_size + int64_t block_address + int64_t uncompressed_address + void *uncompressed_block + void *compressed_block + void *cache + hFILE *fp + bgzf_mtaux_t *mt + bgzidx_t *idx + int idx_build_otf + z_stream *gz_stream + + #***************** + # Basic routines * + # *****************/ + + # Open an existing file descriptor for reading or writing. + # + # @param fd file descriptor + # @param mode mode matching /[rwag][u0-9]+/: 'r' for reading, 'w' for + # writing, 'a' for appending, 'g' for gzip rather than BGZF + # compression (with 'w' only), and digit specifies the zlib + # compression level. + # Note that there is a distinction between 'u' and '0': the + # first yields plain uncompressed output whereas the latter + # outputs uncompressed data wrapped in the zlib format. + # @return BGZF file handler; 0 on error + + BGZF* bgzf_dopen(int fd, const char *mode) + BGZF* bgzf_fdopen(int fd, const char *mode) # for backward compatibility + + # Open the specified file for reading or writing. + BGZF* bgzf_open(const char* path, const char *mode) + + # Open an existing hFILE stream for reading or writing. + BGZF* bgzf_hopen(hFILE *fp, const char *mode) + + # Close the BGZF and free all associated resources. + # + # @param fp BGZF file handler + # @return 0 on success and -1 on error + int bgzf_close(BGZF *fp) + + # Read up to _length_ bytes from the file storing into _data_. + # + # @param fp BGZF file handler + # @param data data array to read into + # @param length size of data to read + # @return number of bytes actually read; 0 on end-of-file and -1 on error + ssize_t bgzf_read(BGZF *fp, void *data, size_t length) + + # Write _length_ bytes from _data_ to the file. If no I/O errors occur, + # the complete _length_ bytes will be written (or queued for writing). + # + # @param fp BGZF file handler + # @param data data array to write + # @param length size of data to write + # @return number of bytes written (i.e., _length_); negative on error + ssize_t bgzf_write(BGZF *fp, const void *data, size_t length) + + # Read up to _length_ bytes directly from the underlying stream without + # decompressing. Bypasses BGZF blocking, so must be used with care in + # specialised circumstances only. + # + # @param fp BGZF file handler + # @param data data array to read into + # @param length number of raw bytes to read + # @return number of bytes actually read; 0 on end-of-file and -1 on error + ssize_t bgzf_raw_read(BGZF *fp, void *data, size_t length) + + # Write _length_ bytes directly to the underlying stream without + # compressing. Bypasses BGZF blocking, so must be used with care + # in specialised circumstances only. + # + # @param fp BGZF file handler + # @param data data array to write + # @param length number of raw bytes to write + # @return number of bytes actually written; -1 on error + ssize_t bgzf_raw_write(BGZF *fp, const void *data, size_t length) + + # Write the data in the buffer to the file. + int bgzf_flush(BGZF *fp) + + int SEEK_SET + + # Return a virtual file pointer to the current location in the file. + # No interpetation of the value should be made, other than a subsequent + # call to bgzf_seek can be used to position the file at the same point. + # Return value is non-negative on success. + int64_t bgzf_tell(BGZF *fp) + + # Set the file to read from the location specified by _pos_. + # + # @param fp BGZF file handler + # @param pos virtual file offset returned by bgzf_tell() + # @param whence must be SEEK_SET + # @return 0 on success and -1 on error + # / + int64_t bgzf_seek(BGZF *fp, int64_t pos, int whence) + + # Check if the BGZF end-of-file (EOF) marker is present + # + # @param fp BGZF file handler opened for reading + # @return 1 if the EOF marker is present and correct + # 2 if it can't be checked, e.g., because fp isn't seekable + # 0 if the EOF marker is absent + # -1 (with errno set) on error + int bgzf_check_EOF(BGZF *fp) + + # Check if a file is in the BGZF format + # + # @param fn file name + # @return 1 if _fn_ is BGZF; 0 if not or on I/O error + int bgzf_is_bgzf(const char *fn) + + #********************* + # Advanced routines * + #********************* + + # Set the cache size. Only effective when compiled with -DBGZF_CACHE. + # + # @param fp BGZF file handler + # @param size size of cache in bytes; 0 to disable caching (default) + void bgzf_set_cache_size(BGZF *fp, int size) + + # Flush the file if the remaining buffer size is smaller than _size_ + # @return 0 if flushing succeeded or was not needed; negative on error + int bgzf_flush_try(BGZF *fp, ssize_t size) + + # Read one byte from a BGZF file. It is faster than bgzf_read() + # @param fp BGZF file handler + # @return byte read; -1 on end-of-file or error + int bgzf_getc(BGZF *fp) + + # Read one line from a BGZF file. It is faster than bgzf_getc() + # + # @param fp BGZF file handler + # @param delim delimitor + # @param str string to write to; must be initialized + # @return length of the string; 0 on end-of-file; negative on error + int bgzf_getline(BGZF *fp, int delim, kstring_t *str) + + # Read the next BGZF block. + int bgzf_read_block(BGZF *fp) + + # Enable multi-threading (only effective on writing and when the + # library was compiled with -DBGZF_MT) + # + # @param fp BGZF file handler; must be opened for writing + # @param n_threads #threads used for writing + # @param n_sub_blks #blocks processed by each thread; a value 64-256 is recommended + int bgzf_mt(BGZF *fp, int n_threads, int n_sub_blks) + + + # Compress a single BGZF block. + # + # @param dst output buffer (must have size >= BGZF_MAX_BLOCK_SIZE) + # @param dlen size of output buffer; updated on return to the number + # of bytes actually written to dst + # @param src buffer to be compressed + # @param slen size of data to compress (must be <= BGZF_BLOCK_SIZE) + # @param level compression level + # @return 0 on success and negative on error + # + int bgzf_compress(void *dst, size_t *dlen, const void *src, size_t slen, int level) + + #******************* + # bgzidx routines * + # BGZF at the uncompressed offset + # + # @param fp BGZF file handler; must be opened for reading + # @param uoffset file offset in the uncompressed data + # @param where SEEK_SET supported atm + # + # Returns 0 on success and -1 on error. + int bgzf_useek(BGZF *fp, long uoffset, int where) + + # Position in uncompressed BGZF + # + # @param fp BGZF file handler; must be opened for reading + # + # Returns the current offset on success and -1 on error. + long bgzf_utell(BGZF *fp) + + # Tell BGZF to build index while compressing. + # + # @param fp BGZF file handler; can be opened for reading or writing. + # + # Returns 0 on success and -1 on error. + int bgzf_index_build_init(BGZF *fp) + + # Load BGZF index + # + # @param fp BGZF file handler + # @param bname base name + # @param suffix suffix to add to bname (can be NULL) + # + # Returns 0 on success and -1 on error. + int bgzf_index_load(BGZF *fp, const char *bname, const char *suffix) + + # Save BGZF index + # + # @param fp BGZF file handler + # @param bname base name + # @param suffix suffix to add to bname (can be NULL) + # + # Returns 0 on success and -1 on error. + int bgzf_index_dump(BGZF *fp, const char *bname, const char *suffix) + + +cdef extern from "htslib/hts.h" nogil: + uint32_t kroundup32(uint32_t x) + + ctypedef struct cram_fd + + union FilePointerUnion: + BGZF *bgzf + cram_fd *cram + hFILE *hfile + void *voidp + + enum htsFormatCategory: + unknown_category + sequence_data # Sequence data -- SAM, BAM, CRAM, etc + variant_data # Variant calling data -- VCF, BCF, etc + index_file # Index file associated with some data file + region_list # Coordinate intervals or regions -- BED, etc + category_maximum + + enum htsExactFormat: + unknown_format + binary_format + text_format + sam, bam, bai, cram, crai, vcf, bcf, csi, gzi, tbi, bed + format_maximum + + enum htsCompression: + no_compression, gzip, bgzf, custom + compression_maximum + + cdef enum hts_fmt_option: + CRAM_OPT_DECODE_MD, + CRAM_OPT_PREFIX, + CRAM_OPT_VERBOSITY, + CRAM_OPT_SEQS_PER_SLICE, + CRAM_OPT_SLICES_PER_CONTAINER, + CRAM_OPT_RANGE, + CRAM_OPT_VERSION, + CRAM_OPT_EMBED_REF, + CRAM_OPT_IGNORE_MD5, + CRAM_OPT_REFERENCE, + CRAM_OPT_MULTI_SEQ_PER_SLICE, + CRAM_OPT_NO_REF, + CRAM_OPT_USE_BZIP2, + CRAM_OPT_SHARED_REF, + CRAM_OPT_NTHREADS, + CRAM_OPT_THREAD_POOL, + CRAM_OPT_USE_LZMA, + CRAM_OPT_USE_RANS, + CRAM_OPT_REQUIRED_FIELDS, + HTS_OPT_COMPRESSION_LEVEL, + HTS_OPT_NTHREADS, + + ctypedef struct htsVersion: + short major, minor + + ctypedef struct htsFormat: + htsFormatCategory category + htsExactFormat format + htsVersion version + htsCompression compression + short compression_level + void *specific + + ctypedef struct htsFile: + uint8_t is_bin + uint8_t is_write + uint8_t is_be + uint8_t is_cram + int64_t lineno + kstring_t line + char *fn + char *fn_aux + FilePointerUnion fp + htsFormat format + + int hts_verbose + + cdef union hts_opt_val_union: + int i + char *s + + ctypedef struct hts_opt: + char *arg + hts_fmt_option opt + hts_opt_val_union val + void *next + + # @abstract Parses arg and appends it to the option list. + # @return 0 on success and -1 on failure + int hts_opt_add(hts_opt **opts, const char *c_arg) + + # @abstract Applies an hts_opt option list to a given htsFile. + # @return 0 on success and -1 on failure + int hts_opt_apply(htsFile *fp, hts_opt *opts) + + # @abstract Frees an hts_opt list. + void hts_opt_free(hts_opt *opts) + + # @abstract Table for converting a nucleotide character to 4-bit encoding. + # The input character may be either an IUPAC ambiguity code, '=' for 0, or + # '0'/'1'/'2'/'3' for a result of 1/2/4/8. The result is encoded as 1/2/4/8 + # for A/C/G/T or combinations of these bits for ambiguous bases. + const unsigned char *seq_nt16_table + + # @abstract Table for converting a 4-bit encoded nucleotide to an IUPAC + # ambiguity code letter (or '=' when given 0). + const char *seq_nt16_str + + # @abstract Table for converting a 4-bit encoded nucleotide to about 2 bits. + # Returns 0/1/2/3 for 1/2/4/8 (i.e., A/C/G/T), or 4 otherwise (0 or ambiguous). + const int *seq_nt16_int + + # @abstract Get the htslib version number + # @return For released versions, a string like "N.N[.N]"; or git describe + # output if using a library built within a Git repository. + const char *hts_version() + + # @abstract Determine format by peeking at the start of a file + # @param fp File opened for reading, positioned at the beginning + # @param fmt Format structure that will be filled out on return + # @return 0 for success, or negative if an error occurred. + int hts_detect_format(hFILE *fp, htsFormat *fmt) + + # @abstract Get a human-readable description of the file format + # @return Description string, to be freed by the caller after use. + char *hts_format_description(const htsFormat *format) + + # @abstract Open a SAM/BAM/CRAM/VCF/BCF/etc file + # @param fn The file name or "-" for stdin/stdout + # @param mode Mode matching / [rwa][bceguxz0-9]* / + # @discussion + # With 'r' opens for reading; any further format mode letters are ignored + # as the format is detected by checking the first few bytes or BGZF blocks + # of the file. With 'w' or 'a' opens for writing or appending, with format + # specifier letters: + # b binary format (BAM, BCF, etc) rather than text (SAM, VCF, etc) + # c CRAM format + # g gzip compressed + # u uncompressed + # z bgzf compressed + # [0-9] zlib compression level + # and with non-format option letters (for any of 'r'/'w'/'a'): + # e close the file on exec(2) (opens with O_CLOEXEC, where supported) + # x create the file exclusively (opens with O_EXCL, where supported) + # Note that there is a distinction between 'u' and '0': the first yields + # plain uncompressed output whereas the latter outputs uncompressed data + # wrapped in the zlib format. + # @example + # [rw]b .. compressed BCF, BAM, FAI + # [rw]bu .. uncompressed BCF + # [rw]z .. compressed VCF + # [rw] .. uncompressed VCF + htsFile *hts_open(const char *fn, const char *mode) + + # @abstract Open a SAM/BAM/CRAM/VCF/BCF/etc file + # @param fn The file name or "-" for stdin/stdout + # @param mode Open mode, as per hts_open() + # @param fmt Optional format specific parameters + # @discussion + # See hts_open() for description of fn and mode. + # // TODO Update documentation for s/opts/fmt/ + # Opts contains a format string (sam, bam, cram, vcf, bcf) which will, + # if defined, override mode. Opts also contains a linked list of hts_opt + # structures to apply to the open file handle. These can contain things + # like pointers to the reference or information on compression levels, + # block sizes, etc. + htsFile *hts_open_format(const char *fn, const char *mode, const htsFormat *fmt) + + # @abstract Open an existing stream as a SAM/BAM/CRAM/VCF/BCF/etc file + # @param fp The already-open file handle + # @param fn The file name or "-" for stdin/stdout + # @param mode Open mode, as per hts_open() + htsFile *hts_hopen(hFILE *fp, const char *fn, const char *mode) + + # @abstract Close a file handle, flushing buffered data for output streams + # @param fp The file handle to be closed + # @return 0 for success, or negative if an error occurred. + int hts_close(htsFile *fp) + + # @abstract Returns the file's format information + # @param fp The file handle + # @return Read-only pointer to the file's htsFormat. + const htsFormat *hts_get_format(htsFile *fp) + + # @ abstract Returns a string containing the file format extension. + # @ param format Format structure containing the file type. + # @ return A string ("sam", "bam", etc) or "?" for unknown formats. + const char *hts_format_file_extension(const htsFormat *format) + + # @abstract Sets a specified CRAM option on the open file handle. + # @param fp The file handle open the open file. + # @param opt The CRAM_OPT_* option. + # @param ... Optional arguments, dependent on the option used. + # @return 0 for success, or negative if an error occurred. + int hts_set_opt(htsFile *fp, hts_fmt_option opt, ...) + + int hts_getline(htsFile *fp, int delimiter, kstring_t *str) + char **hts_readlines(const char *fn, int *_n) + + # @abstract Parse comma-separated list or read list from a file + # @param list File name or comma-separated list + # @param is_file + # @param _n Size of the output array (number of items read) + # @return NULL on failure or pointer to newly allocated array of + # strings + char **hts_readlist(const char *fn, int is_file, int *_n) + + # @abstract Create extra threads to aid compress/decompression for this file + # @param fp The file handle + # @param n The number of worker threads to create + # @return 0 for success, or negative if an error occurred. + # @notes THIS THREADING API IS LIKELY TO CHANGE IN FUTURE. + int hts_set_threads(htsFile *fp, int n) + + # @abstract Set .fai filename for a file opened for reading + # @return 0 for success, negative on failure + # @discussion + # Called before *_hdr_read(), this provides the name of a .fai file + # used to provide a reference list if the htsFile contains no @SQ headers. + int hts_set_fai_filename(htsFile *fp, const char *fn_aux) + + int8_t HTS_IDX_NOCOOR + int8_t HTS_IDX_START + int8_t HTS_IDX_REST + int8_t HTS_IDX_NONE + + int8_t HTS_FMT_CSI + int8_t HTS_FMT_BAI + int8_t HTS_FMT_TBI + int8_t HTS_FMT_CRAI + + BGZF *hts_get_bgzfp(htsFile *fp) + int hts_useek(htsFile *fp, long uoffset, int where) + long hts_utell(htsFile *fp) + + ctypedef struct hts_idx_t + + ctypedef struct hts_pair64_t: + uint64_t u, v + + ctypedef int hts_readrec_func(BGZF *fp, void *data, void *r, int *tid, int *beg, int *end) + + ctypedef struct hts_bins_t: + int n, m + int *a + + ctypedef struct hts_itr_t: + uint32_t read_rest + uint32_t finished + int tid, bed, end, n_off, i + int curr_tid, curr_beg, curr_end + uint64_t curr_off + hts_pair64_t *off + hts_readrec_func *readfunc + hts_bins_t bins + + hts_idx_t *hts_idx_init(int n, int fmt, uint64_t offset0, int min_shift, int n_lvls) + void hts_idx_destroy(hts_idx_t *idx) + int hts_idx_push(hts_idx_t *idx, int tid, int beg, int end, uint64_t offset, int is_mapped) + void hts_idx_finish(hts_idx_t *idx, uint64_t final_offset) + + #### Save an index to a file + # @param idx Index to be written + # @param fn Input BAM/BCF/etc filename, to which .bai/.csi/etc will be added + # @param fmt One of the HTS_FMT_* index formats + # @return 0 if successful, or negative if an error occurred. + int hts_idx_save(const hts_idx_t *idx, const char *fn, int fmt) + + #### Save an index to a specific file + # @param idx Index to be written + # @param fn Input BAM/BCF/etc filename + # @param fnidx Output filename, or NULL to add .bai/.csi/etc to @a fn + # @param fmt One of the HTS_FMT_* index formats + # @return 0 if successful, or negative if an error occurred. + int hts_idx_save_as(const hts_idx_t *idx, const char *fn, const char *fnidx, int fmt) + + #### Load an index file + # @param fn BAM/BCF/etc filename, to which .bai/.csi/etc will be added or + # the extension substituted, to search for an existing index file + # @param fmt One of the HTS_FMT_* index formats + # @return The index, or NULL if an error occurred. + hts_idx_t *hts_idx_load(const char *fn, int fmt) + + #### Load a specific index file + # @param fn Input BAM/BCF/etc filename + # @param fnidx The input index filename + # @return The index, or NULL if an error occurred. + hts_idx_t *hts_idx_load2(const char *fn, const char *fnidx) + + uint8_t *hts_idx_get_meta(hts_idx_t *idx, uint32_t *l_meta) + void hts_idx_set_meta(hts_idx_t *idx, int l_meta, uint8_t *meta, int is_copy) + + int hts_idx_get_stat(const hts_idx_t* idx, int tid, + uint64_t* mapped, uint64_t* unmapped) + + uint64_t hts_idx_get_n_no_coor(const hts_idx_t* idx) + + int HTS_PARSE_THOUSANDS_SEP # Ignore ',' separators within numbers + + # Parse a numeric string + # The number may be expressed in scientific notation, and optionally may + # contain commas in the integer part (before any decimal point or E notation). + # @param str String to be parsed + # @param strend If non-NULL, set on return to point to the first character + # in @a str after those forming the parsed number + # @param flags Or'ed-together combination of HTS_PARSE_* flags + # @return Converted value of the parsed number. + # + # When @a strend is NULL, a warning will be printed (if hts_verbose is 2 + # or more) if there are any trailing characters after the number. + long long hts_parse_decimal(const char *str, char **strend, int flags) + + # Parse a "CHR:START-END"-style region string + # @param str String to be parsed + # @param beg Set on return to the 0-based start of the region + # @param end Set on return to the 1-based end of the region + # @return Pointer to the colon or '\0' after the reference sequence name, + # or NULL if @a str could not be parsed. + const char *hts_parse_reg(const char *str, int *beg, int *end) + + hts_itr_t *hts_itr_query(const hts_idx_t *idx, int tid, int beg, int end, hts_readrec_func *readrec) + void hts_itr_destroy(hts_itr_t *iter) + + ctypedef int (*hts_name2id_f)(void*, const char*) + ctypedef const char *(*hts_id2name_f)(void*, int) + ctypedef hts_itr_t *hts_itr_query_func( + const hts_idx_t *idx, + int tid, + int beg, + int end, + hts_readrec_func *readrec) + + hts_itr_t *hts_itr_querys( + const hts_idx_t *idx, + const char *reg, + hts_name2id_f getid, + void *hdr, + hts_itr_query_func *itr_query, + hts_readrec_func *readrec) + + int hts_itr_next(BGZF *fp, hts_itr_t *iter, void *r, void *data) + const char **hts_idx_seqnames(const hts_idx_t *idx, int *n, hts_id2name_f getid, void *hdr) # free only the array, not the values + + # hts_file_type() - Convenience function to determine file type + # @fname: the file name + # + # Returns one of the FT_* defines. + # + # DEPRECATED: This function has been replaced by hts_detect_format(). + # It and these FT_* macros will be removed in a future HTSlib release. + int FT_UNKN + int FT_GZ + int FT_VCF + int FT_VCF_GZ + int FT_BCF + int FT_BCF_GZ + int FT_STDIN + + int hts_file_type(const char *fname) + + # /*************************** + # * Revised MAQ error model * + # ***************************/ + + ctypedef struct errmod_t + + errmod_t *errmod_init(double depcorr) + void errmod_destroy(errmod_t *em) + + # /* + # n: number of bases + # m: maximum base + # bases[i]: qual:6, strand:1, base:4 + # q[i*m+j]: phred-scaled likelihood of (i,j) + # */ + int errmod_cal(const errmod_t *em, int n, int m, uint16_t *bases, float *Probabilistic) + + # /***************************************** + # * q banded glocal alignment * + # *****************************************/ + + ctypedef struct probaln_par_t: + float d, e + int bw + + int probaln_glocal(const uint8_t *ref, + int l_ref, + const uint8_t *query, + int l_query, const uint8_t *iqual, + const probaln_par_t *c, + int *state, uint8_t *q) + + # /********************** + # * MD5 implementation * + # **********************/ + + ctypedef struct hts_md5_context + + # /*! @abstract Intialises an MD5 context. + # * @discussion + # * The expected use is to allocate an hts_md5_context using + # * hts_md5_init(). This pointer is then passed into one or more calls + # * of hts_md5_update() to compute successive internal portions of the + # * MD5 sum, which can then be externalised as a full 16-byte MD5sum + # * calculation by calling hts_md5_final(). This can then be turned + # * into ASCII via hts_md5_hex(). + # * + # * To dealloate any resources created by hts_md5_init() call the + # * hts_md5_destroy() function. + # * + # * @return hts_md5_context pointer on success, NULL otherwise. + # */ + hts_md5_context *hts_md5_init() + + # /*! @abstract Updates the context with the MD5 of the data. */ + void hts_md5_update(hts_md5_context *ctx, const void *data, unsigned long size) + + # /*! @abstract Computes the final 128-bit MD5 hash from the given context */ + void hts_md5_final(unsigned char *digest, hts_md5_context *ctx) + + # /*! @abstract Resets an md5_context to the initial state, as returned + # * by hts_md5_init(). + # */ + void hts_md5_reset(hts_md5_context *ctx) + + # /*! @abstract Converts a 128-bit MD5 hash into a 33-byte nul-termninated + # * hex string. + # */ + void hts_md5_hex(char *hex, const unsigned char *digest) + + # /*! @abstract Deallocates any memory allocated by hts_md5_init. */ + void hts_md5_destroy(hts_md5_context *ctx) + + int hts_reg2bin(int64_t beg, int64_t end, int min_shift, int n_lvls) + int hts_bin_bot(int bin, int n_lvls) + + # * Endianness * + int ed_is_big() + uint16_t ed_swap_2(uint16_t v) + void *ed_swap_2p(void *x) + uint32_t ed_swap_4(uint32_t v) + void *ed_swap_4p(void *x) + uint64_t ed_swap_8(uint64_t v) + void *ed_swap_8p(void *x) + + +cdef extern from "htslib/sam.h" nogil: + #********************** + #*** SAM/BAM header *** + #********************** + + # @abstract Structure for the alignment header. + # @field n_targets number of reference sequences + # @field l_text length of the plain text in the header + # @field target_len lengths of the reference sequences + # @field target_name names of the reference sequences + # @field text plain text + # @field sdict header dictionary + + ctypedef struct bam_hdr_t: + int32_t n_targets, ignore_sam_err + uint32_t l_text + uint32_t *target_len + uint8_t *cigar_tab + char **target_name + char *text + void *sdict + + #**************************** + #*** CIGAR related macros *** + #**************************** + + int BAM_CMATCH + int BAM_CINS + int BAM_CDEL + int BAM_CREF_SKIP + int BAM_CSOFT_CLIP + int BAM_CHARD_CLIP + int BAM_CPAD + int BAM_CEQUAL + int BAM_CDIFF + int BAM_CBACK + + char *BAM_CIGAR_STR + int BAM_CIGAR_SHIFT + uint32_t BAM_CIGAR_MASK + uint32_t BAM_CIGAR_TYPE + + char bam_cigar_op(uint32_t c) + uint32_t bam_cigar_oplen(uint32_t c) + char bam_cigar_opchr(uint32_t) + uint32_t bam_cigar_gen(char, uint32_t) + int bam_cigar_type(char o) + + # @abstract the read is paired in sequencing, no matter whether it is mapped in a pair + int BAM_FPAIRED + # @abstract the read is mapped in a proper pair + int BAM_FPROPER_PAIR + # @abstract the read itself is unmapped; conflictive with BAM_FPROPER_PAIR + int BAM_FUNMAP + # @abstract the mate is unmapped + int BAM_FMUNMAP + # @abstract the read is mapped to the reverse strand + int BAM_FREVERSE + # @abstract the mate is mapped to the reverse strand + int BAM_FMREVERSE + # @abstract this is read1 + int BAM_FREAD1 + # @abstract this is read2 + int BAM_FREAD2 + # @abstract not primary alignment + int BAM_FSECONDARY + # @abstract QC failure + int BAM_FQCFAIL + # @abstract optical or PCR duplicate + int BAM_FDUP + # @abstract supplementary alignment + int BAM_FSUPPLEMENTARY + + #************************* + #*** Alignment records *** + #************************* + + # @abstract Structure for core alignment information. + # @field tid chromosome ID, defined by bam_hdr_t + # @field pos 0-based leftmost coordinate + # @field bin bin calculated by bam_reg2bin() + # @field qual mapping quality + # @field l_qname length of the query name + # @field flag bitwise flag + # @field n_cigar number of CIGAR operations + # @field l_qseq length of the query sequence (read) + # @field mtid chromosome ID of next read in template, defined by bam_hdr_t + # @field mpos 0-based leftmost coordinate of next read in template + + ctypedef struct bam1_core_t: + int32_t tid + int32_t pos + uint16_t bin + uint8_t qual + uint8_t l_qname + uint16_t flag + uint8_t unused1 + uint8_t l_extranul + uint32_t n_cigar + int32_t l_qseq + int32_t mtid + int32_t mpos + int32_t isize + + # @abstract Structure for one alignment. + # @field core core information about the alignment + # @field l_data current length of bam1_t::data + # @field m_data maximum length of bam1_t::data + # @field data all variable-length data, concatenated; structure: qname-cigar-seq-qual-aux + # + # @discussion Notes: + # + # 1. qname is zero tailing and core.l_qname includes the tailing '\0'. + # 2. l_qseq is calculated from the total length of an alignment block + # on reading or from CIGAR. + # 3. cigar data is encoded 4 bytes per CIGAR operation. + # 4. seq is nybble-encoded according to seq_nt16_table. + ctypedef struct bam1_t: + bam1_core_t core + int l_data + uint32_t m_data + uint8_t *data + uint64_t id + + # @abstract Get whether the query is on the reverse strand + # @param b pointer to an alignment + # @return boolean true if query is on the reverse strand + int bam_is_rev(bam1_t *b) + + # @abstract Get whether the query's mate is on the reverse strand + # @param b pointer to an alignment + # @return boolean true if query's mate on the reverse strand + int bam_is_mrev(bam1_t *b) + + # @abstract Get the name of the query + # @param b pointer to an alignment + # @return pointer to the name string, null terminated + char *bam_get_qname(bam1_t *b) + + # @abstract Get the CIGAR array + # @param b pointer to an alignment + # @return pointer to the CIGAR array + # + # @discussion In the CIGAR array, each element is a 32-bit integer. The + # lower 4 bits gives a CIGAR operation and the higher 28 bits keep the + # length of a CIGAR. + uint32_t *bam_get_cigar(bam1_t *b) + + # @abstract Get query sequence + # @param b pointer to an alignment + # @return pointer to sequence + # + # @discussion Each base is encoded in 4 bits: 1 for A, 2 for C, 4 for G, + # 8 for T and 15 for N. Two bases are packed in one byte with the base + # at the higher 4 bits having smaller coordinate on the read. It is + # recommended to use bam_seqi() macro to get the base. + char *bam_get_seq(bam1_t *b) + + # @abstract Get query quality + # @param b pointer to an alignment + # @return pointer to quality string + uint8_t *bam_get_qual(bam1_t *b) + + # @abstract Get auxiliary data + # @param b pointer to an alignment + # @return pointer to the concatenated auxiliary data + uint8_t *bam_get_aux(bam1_t *b) + + # @abstract Get length of auxiliary data + # @param b pointer to an alignment + # @return length of the concatenated auxiliary data + int bam_get_l_aux(bam1_t *b) + + # @abstract Get a base on read + # @param s Query sequence returned by bam1_seq() + # @param i The i-th position, 0-based + # @return 4-bit integer representing the base. + char bam_seqi(char *s, int i) + + #************************** + #*** Exported functions *** + #************************** + + #*************** + #*** BAM I/O *** + #*************** + + bam_hdr_t *bam_hdr_init() + bam_hdr_t *bam_hdr_read(BGZF *fp) + int bam_hdr_write(BGZF *fp, const bam_hdr_t *h) + void bam_hdr_destroy(bam_hdr_t *h) + int bam_name2id(bam_hdr_t *h, const char *ref) + bam_hdr_t* bam_hdr_dup(const bam_hdr_t *h0) + + bam1_t *bam_init1() + void bam_destroy1(bam1_t *b) + int bam_read1(BGZF *fp, bam1_t *b) + int bam_write1(BGZF *fp, const bam1_t *b) + bam1_t *bam_copy1(bam1_t *bdst, const bam1_t *bsrc) + bam1_t *bam_dup1(const bam1_t *bsrc) + + int bam_cigar2qlen(int n_cigar, const uint32_t *cigar) + int bam_cigar2rlen(int n_cigar, const uint32_t *cigar) + + # @abstract Calculate the rightmost base position of an alignment on the + # reference genome. + + # @param b pointer to an alignment + # @return the coordinate of the first base after the alignment, 0-based + + # @discussion For a mapped read, this is just b->core.pos + bam_cigar2rlen. + # For an unmapped read (either according to its flags or if it has no cigar + # string), we return b->core.pos + 1 by convention. + int32_t bam_endpos(const bam1_t *b) + + int bam_str2flag(const char *str) # returns negative value on error + char *bam_flag2str(int flag) # The string must be freed by the user + + #************************* + #*** BAM/CRAM indexing *** + #************************* + + # These BAM iterator functions work only on BAM files. To work with either + # BAM or CRAM files use the sam_index_load() & sam_itr_*() functions. + void bam_itr_destroy(hts_itr_t *iter) + hts_itr_t *bam_itr_queryi(const hts_idx_t *idx, int tid, int beg, int end) + hts_itr_t *bam_itr_querys(const hts_idx_t *idx, bam_hdr_t *hdr, const char *region) + int bam_itr_next(htsFile *htsfp, hts_itr_t *itr, void *r) + + # Load/build .csi or .bai BAM index file. Does not work with CRAM. + # It is recommended to use the sam_index_* functions below instead. + hts_idx_t *bam_index_load(const char *fn) + int bam_index_build(const char *fn, int min_shift) + + # Load a BAM (.csi or .bai) or CRAM (.crai) index file + # @param fp File handle of the data file whose index is being opened + # @param fn BAM/CRAM/etc filename to search alongside for the index file + # @return The index, or NULL if an error occurred. + hts_idx_t *sam_index_load(htsFile *fp, const char *fn) + + # Load a specific BAM (.csi or .bai) or CRAM (.crai) index file + # @param fp File handle of the data file whose index is being opened + # @param fn BAM/CRAM/etc data file filename + # @param fnidx Index filename, or NULL to search alongside @a fn + # @return The index, or NULL if an error occurred. + hts_idx_t *sam_index_load2(htsFile *fp, const char *fn, const char *fnidx) + + # Generate and save an index file + # @param fn Input BAM/etc filename, to which .csi/etc will be added + # @param min_shift Positive to generate CSI, or 0 to generate BAI + # @return 0 if successful, or negative if an error occurred (usually -1; or + # -2: opening fn failed; -3: format not indexable) + int sam_index_build(const char *fn, int min_shift) + + # Generate and save an index to a specific file + # @param fn Input BAM/CRAM/etc filename + # @param fnidx Output filename, or NULL to add .bai/.csi/etc to @a fn + # @param min_shift Positive to generate CSI, or 0 to generate BAI + # @return 0 if successful, or negative if an error occurred. + int sam_index_build2(const char *fn, const char *fnidx, int min_shift) + + void sam_itr_destroy(hts_itr_t *iter) + hts_itr_t *sam_itr_queryi(const hts_idx_t *idx, int tid, int beg, int end) + hts_itr_t *sam_itr_querys(const hts_idx_t *idx, bam_hdr_t *hdr, const char *region) + int sam_itr_next(htsFile *htsfp, hts_itr_t *itr, void *r) + + #*************** + #*** SAM I/O *** + #*************** + + htsFile *sam_open(const char *fn, const char *mode) + htsFile *sam_open_format(const char *fn, const char *mode, const htsFormat *fmt) + int sam_close(htsFile *fp) + + int sam_open_mode(char *mode, const char *fn, const char *format) + + # A version of sam_open_mode that can handle ,key=value options. + # The format string is allocated and returned, to be freed by the caller. + # Prefix should be "r" or "w", + char *sam_open_mode_opts(const char *fn, const char *mode, const char *format) + + bam_hdr_t *sam_hdr_parse(int l_text, const char *text) + bam_hdr_t *sam_hdr_read(htsFile *fp) + int sam_hdr_write(htsFile *fp, const bam_hdr_t *h) + + int sam_parse1(kstring_t *s, bam_hdr_t *h, bam1_t *b) + int sam_format1(const bam_hdr_t *h, const bam1_t *b, kstring_t *str) + int sam_read1(htsFile *fp, bam_hdr_t *h, bam1_t *b) + int sam_write1(htsFile *fp, const bam_hdr_t *h, const bam1_t *b) + + #************************************* + #*** Manipulating auxiliary fields *** + #************************************* + + uint8_t *bam_aux_get(const bam1_t *b, const char *tag) + int64_t bam_aux2i(const uint8_t *s) + double bam_aux2f(const uint8_t *s) + char bam_aux2A(const uint8_t *s) + char *bam_aux2Z(const uint8_t *s) + + void bam_aux_append(bam1_t *b, const char *tag, char type, int len, uint8_t *data) + int bam_aux_del(bam1_t *b, uint8_t *s) + + #************************** + #*** Pileup and Mpileup *** + #************************** + + # @abstract Generic pileup 'client data'. + # @discussion The pileup iterator allows setting a constructor and + # destructor function, which will be called every time a sequence is + # fetched and discarded. This permits caching of per-sequence data in + # a tidy manner during the pileup process. This union is the cached + # data to be manipulated by the "client" (the caller of pileup). + # + union bam_pileup_cd: + void *p + int64_t i + double f + + # @abstract Structure for one alignment covering the pileup position. + # @field b pointer to the alignment + # @field qpos position of the read base at the pileup site, 0-based + # @field indel indel length; 0 for no indel, positive for ins and negative for del + # @field level the level of the read in the "viewer" mode + # @field is_del 1 iff the base on the padded read is a deletion + # @field is_head ??? + # @field is_tail ??? + # @field is_refskip ??? + # @field aux ??? + # + # @discussion See also bam_plbuf_push() and bam_lplbuf_push(). The + # difference between the two functions is that the former does not + # set bam_pileup1_t::level, while the later does. Level helps the + # implementation of alignment viewers, but calculating this has some + # overhead. + # + # is_del, is_head, etc are a bit field, declaring as below should + # work as expected, see + # https://groups.google.com/forum/#!msg/cython-users/24tD1kwRY7A/pmoPuSmanM0J + + ctypedef struct bam_pileup1_t: + bam1_t *b + int32_t qpos + int indel, level + uint32_t is_del + uint32_t is_head + uint32_t is_tail + uint32_t is_refskip + uint32_t aux + bam_pileup_cd cd + + ctypedef int (*bam_plp_auto_f)(void *data, bam1_t *b) + ctypedef int (*bam_test_f)() + + ctypedef struct __bam_plp_t + ctypedef __bam_plp_t *bam_plp_t + + ctypedef struct __bam_mplp_t + ctypedef __bam_mplp_t *bam_mplp_t + + # bam_plp_init() - sets an iterator over multiple + # @func: see mplp_func in bam_plcmd.c in samtools for an example. Expected return + # status: 0 on success, -1 on end, < -1 on non-recoverable errors + # @data: user data to pass to @func + bam_plp_t bam_plp_init(bam_plp_auto_f func, void *data) + void bam_plp_destroy(bam_plp_t iter) + int bam_plp_push(bam_plp_t iter, const bam1_t *b) + const bam_pileup1_t *bam_plp_next(bam_plp_t iter, int *_tid, int *_pos, int *_n_plp) + const bam_pileup1_t *bam_plp_auto(bam_plp_t iter, int *_tid, int *_pos, int *_n_plp) + void bam_plp_set_maxcnt(bam_plp_t iter, int maxcnt) + void bam_plp_reset(bam_plp_t iter) + + bam_mplp_t bam_mplp_init(int n, bam_plp_auto_f func, void **data) + + # bam_mplp_init_overlaps() - if called, mpileup will detect overlapping + # read pairs and for each base pair set the base quality of the + # lower-quality base to zero, thus effectively discarding it from + # calling. If the two bases are identical, the quality of the other base + # is increased to the sum of their qualities (capped at 200), otherwise + # it is multiplied by 0.8. + void bam_mplp_init_overlaps(bam_mplp_t iter) + void bam_mplp_destroy(bam_mplp_t iter) + void bam_mplp_set_maxcnt(bam_mplp_t iter, int maxcnt) + int bam_mplp_auto(bam_mplp_t iter, int *_tid, int *_pos, int *n_plp, const bam_pileup1_t **plp) + void bam_mplp_reset(bam_mplp_t iter) + void bam_mplp_constructor(bam_mplp_t iter, + int (*func)(void *data, const bam1_t *b, bam_pileup_cd *cd)) + void bam_mplp_destructor(bam_mplp_t iter, + int (*func)(void *data, const bam1_t *b, bam_pileup_cd *cd)) + + # Added by AH + # ctypedef bam_pileup1_t * const_bam_pileup1_t_ptr "const bam_pileup1_t *" + + # *********************************** + # * BAQ calculation and realignment * + # ***********************************/ + int sam_cap_mapq(bam1_t *b, const char *ref, int ref_len, int thres) + int sam_prob_realn(bam1_t *b, const char *ref, int ref_len, int flag) + + +cdef extern from "htslib/faidx.h" nogil: + + ctypedef struct faidx_t: + pass + + # /// Build index for a FASTA or bgzip-compressed FASTA file. + # /** @param fn FASTA file name + # @param fnfai Name of .fai file to build. + # @param fngzi Name of .gzi file to build (if fn is bgzip-compressed). + # @return 0 on success; or -1 on failure + + # If fnfai is NULL, ".fai" will be appended to fn to make the FAI file name. + # If fngzi is NULL, ".gzi" will be appended to fn for the GZI file. The GZI + # file will only be built if fn is bgzip-compressed. + # */ + int fai_build3(const char *fn, + const char *fnfai, + const char *fngzi) + + # /// Build index for a FASTA or bgzip-compressed FASTA file. + # /** @param fn FASTA file name + # @return 0 on success; or -1 on failure + # + # File "fn.fai" will be generated. This function is equivalent to + # fai_build3(fn, NULL, NULL); + # */ + int fai_build(char *fn) + + # /// Destroy a faidx_t struct + void fai_destroy(faidx_t *fai) + + # /// Load FASTA indexes. + # /** @param fn File name of the FASTA file (can be compressed with bgzip). + # @param fnfai File name of the FASTA index. + # @param fngzi File name of the bgzip index. + # @param flags Option flags to control index file caching and creation. + # @return Pointer to a faidx_t struct on success, NULL on failure. + + # If fnfai is NULL, ".fai" will be appended to fn to make the FAI file name. + # If fngzi is NULL, ".gzi" will be appended to fn for the bgzip index name. + # The bgzip index is only needed if fn is compressed. + + # If (flags & FAI_CREATE) is true, the index files will be built using + # fai_build3() if they are not already present. + # */ + faidx_t *fai_load3(const char *fn, + const char *fnfai, + const char *fngzi, + int flags) + + # /// Load index from "fn.fai". + # /** @param fn File name of the FASTA file + # @return Pointer to a faidx_t struct on success, NULL on failure. + # This function is equivalent to fai_load3(fn, NULL, NULL, FAI_CREATE|FAI_CACHE); + # */ + faidx_t *fai_load(char *fn) + + # /// Fetch the sequence in a region + # /** @param fai Pointer to the faidx_t struct + # @param reg Region in the format "chr2:20,000-30,000" + # @param len Length of the region; -2 if seq not present, -1 general error + # @return Pointer to the sequence; `NULL` on failure + # The returned sequence is allocated by `malloc()` family and should be destroyed + # by end users by calling `free()` on it. + # */ + char *fai_fetch(faidx_t *fai, + char *reg, + int *len) + + # /// Fetch the sequence in a region + # /** @param fai Pointer to the faidx_t struct + # @param c_name Region name + # @param p_beg_i Beginning position number (zero-based) + # @param p_end_i End position number (zero-based) + # @param len Length of the region; -2 if c_name not present, -1 general error + # @return Pointer to the sequence; null on failure + # The returned sequence is allocated by `malloc()` family and should be destroyed + # by end users by calling `free()` on it. + # */ + char *faidx_fetch_seq(faidx_t *fai, + char *c_name, + int p_beg_i, + int p_end_i, + int *len) + + # /// Query if sequence is present + # /** @param fai Pointer to the faidx_t struct + # @param seq Sequence name + # @return 1 if present or 0 if absent + # */ + int faidx_has_seq(faidx_t *fai, const char *seq) + + # /// Fetch the number of sequences + # /** @param fai Pointer to the faidx_t struct + # @return The number of sequences + # */ + int faidx_nseq(const faidx_t *fai) + + # /// Return name of i-th sequence + const char *faidx_iseq(const faidx_t *fai, int i) + + # /// Return sequence length, -1 if not present + int faidx_seq_len(faidx_t *fai, const char *seq) + +# tabix support +cdef extern from "htslib/tbx.h" nogil: + + # tbx.h definitions + int8_t TBX_MAX_SHIFT + int8_t TBX_GENERIC + int8_t TBX_SAM + int8_t TBX_VCF + int8_t TBX_UCSC + + ctypedef struct tbx_conf_t: + int32_t preset + int32_t sc, bc, ec # seq col., beg col. and end col. + int32_t meta_char, line_skip + + ctypedef struct tbx_t: + tbx_conf_t conf + hts_idx_t *idx + void * dict + + tbx_conf_t tbx_conf_gff + tbx_conf_t tbx_conf_bed + tbx_conf_t tbx_conf_psltbl + tbx_conf_t tbx_conf_sam + tbx_conf_t tbx_conf_vcf + + void tbx_itr_destroy(hts_itr_t * iter) + hts_itr_t * tbx_itr_queryi(tbx_t * t, int tid, int bed, int end) + hts_itr_t * tbx_itr_querys(tbx_t * t, char * s) + int tbx_itr_next(htsFile * fp, tbx_t * t, hts_itr_t * iter, void * data) + + int tbx_name2id(tbx_t *tbx, char *ss) + + int tbx_index_build(char *fn, int min_shift, tbx_conf_t *conf) + int tbx_index_build2(const char *fn, const char *fnidx, int min_shift, const tbx_conf_t *conf) + + tbx_t * tbx_index_load(char *fn) + tbx_t *tbx_index_load2(const char *fn, const char *fnidx) + + # free the array but not the values + char **tbx_seqnames(tbx_t *tbx, int *n) + + void tbx_destroy(tbx_t *tbx) + + +# VCF/BCF API +cdef extern from "htslib/vcf.h" nogil: + + # Header struct + + uint8_t BCF_HL_FLT # header line + uint8_t BCF_HL_INFO + uint8_t BCF_HL_FMT + uint8_t BCF_HL_CTG + uint8_t BCF_HL_STR # structured header line TAG= + uint8_t BCF_HL_GEN # generic header line + + uint8_t BCF_HT_FLAG # header type + uint8_t BCF_HT_INT + uint8_t BCF_HT_REAL + uint8_t BCF_HT_STR + + uint8_t BCF_VL_FIXED # variable length + uint8_t BCF_VL_VAR + uint8_t BCF_VL_A + uint8_t BCF_VL_G + uint8_t BCF_VL_R + + # === Dictionary === + # + # The header keeps three dictonaries. The first keeps IDs in the + # "FILTER/INFO/FORMAT" lines, the second keeps the sequence names and lengths + # in the "contig" lines and the last keeps the sample names. bcf_hdr_t::dict[] + # is the actual hash table, which is opaque to the end users. In the hash + # table, the key is the ID or sample name as a C string and the value is a + # bcf_idinfo_t struct. bcf_hdr_t::id[] points to key-value pairs in the hash + # table in the order that they appear in the VCF header. bcf_hdr_t::n[] is the + # size of the hash table or, equivalently, the length of the id[] arrays. + + uint8_t BCF_DT_ID # dictionary type + uint8_t BCF_DT_CTG + uint8_t BCF_DT_SAMPLE + + # Complete textual representation of a header line + ctypedef struct bcf_hrec_t: + int type # One of the BCF_HL_* type + char *key # The part before '=', i.e. FILTER/INFO/FORMAT/contig/fileformat etc. + char *value # Set only for generic lines, NULL for FILTER/INFO, etc. + int nkeys # Number of structured fields + char **keys # The key=value pairs + char **vals + + ctypedef struct bcf_idinfo_t: + uint32_t info[3] # stores Number:20, var:4, Type:4, ColType:4 in info[0..2] + bcf_hrec_t *hrec[3] # for BCF_HL_FLT,INFO,FMT and contig length in info[0] for BCF_HL_CTG + int id + + ctypedef struct bcf_idpair_t: + const char *key + const bcf_idinfo_t *val + + ctypedef struct bcf_hdr_t: + int32_t n[3] # n:the size of the dictionary block in use, (allocated size, m, is below to preserve ABI) + bcf_idpair_t *id[3] + void *dict[3] # ID dictionary, contig dict and sample dict + char **samples + bcf_hrec_t **hrec + int nhrec, dirty + int ntransl + int *transl[2] # for bcf_translate() + int nsamples_ori # for bcf_hdr_set_samples() + uint8_t *keep_samples + kstring_t mem + int32_t m[3] # m: allocated size of the dictionary block in use (see n above) + + uint8_t bcf_type_shift[] + + # * VCF record * + + uint8_t BCF_BT_NULL + uint8_t BCF_BT_INT8 + uint8_t BCF_BT_INT16 + uint8_t BCF_BT_INT32 + uint8_t BCF_BT_FLOAT + uint8_t BCF_BT_CHAR + + uint8_t VCF_REF + uint8_t VCF_SNP + uint8_t VCF_MNP + uint8_t VCF_INDEL + uint8_t VCF_OTHER + + ctypedef struct variant_t: + int type, n # variant type and the number of bases affected, negative for deletions + + ctypedef struct bcf_fmt_t: + int id # id: numeric tag id, the corresponding string is bcf_hdr_t::id[BCF_DT_ID][$id].key + int n, size, type # n: number of values per-sample; size: number of bytes per-sample; type: one of BCF_BT_* types + uint8_t *p # same as vptr and vptr_* in bcf_info_t below + uint32_t p_len + uint32_t p_off + uint8_t p_free + + union bcf_info_union_t: + int32_t i # integer value + float f # float value + + ctypedef struct bcf_info_t: + int key # key: numeric tag id, the corresponding string is bcf_hdr_t::id[BCF_DT_ID][$key].key + int type, len # type: one of BCF_BT_* types; len: vector length, 1 for scalars + + # v1 union only set if $len==1; for easier access + bcf_info_union_t v1 + uint8_t *vptr # pointer to data array in bcf1_t->shared.s, excluding the size+type and tag id bytes + uint32_t vptr_len # length of the vptr block or, when set, of the vptr_mod block, excluding offset + uint32_t vptr_off # vptr offset, i.e., the size of the INFO key plus size+type bytes + uint8_t vptr_free # indicates that vptr-vptr_off must be freed; set only when modified and the new + # data block is bigger than the original + + uint8_t BCF1_DIRTY_ID + uint8_t BCF1_DIRTY_ALS + uint8_t BCF1_DIRTY_FLT + uint8_t BCF1_DIRTY_INF + + ctypedef struct bcf_dec_t: + int m_fmt, m_info, m_id, m_als, m_allele, m_flt # allocated size (high-water mark); do not change + int n_flt # Number of FILTER fields + int *flt # FILTER keys in the dictionary + char *id # ID + char *als # REF+ALT block (\0-seperated) + char **allele # allele[0] is the REF (allele[] pointers to the als block); all null terminated + bcf_info_t *info # INFO + bcf_fmt_t *fmt # FORMAT and individual sample + variant_t *var # $var and $var_type set only when set_variant_types called + int n_var, var_type + int shared_dirty # if set, shared.s must be recreated on BCF output + int indiv_dirty # if set, indiv.s must be recreated on BCF output + + uint8_t BCF_ERR_CTG_UNDEF + uint8_t BCF_ERR_TAG_UNDEF + uint8_t BCF_ERR_NCOLS + uint8_t BCF_ERR_LIMITS + uint8_t BCF_ERR_CHAR + uint8_t BCF_ERR_CTG_INVALID + uint8_t BCF_ERR_TAG_INVALID + + # The bcf1_t structure corresponds to one VCF/BCF line. Reading from VCF file + # is slower because the string is first to be parsed, packed into BCF line + # (done in vcf_parse), then unpacked into internal bcf1_t structure. If it + # is known in advance that some of the fields will not be required (notably + # the sample columns), parsing of these can be skipped by setting max_unpack + # appropriately. + # Similarly, it is fast to output a BCF line because the columns (kept in + # shared.s, indiv.s, etc.) are written directly by bcf_write, whereas a VCF + # line must be formatted in vcf_format. + + ctypedef struct bcf1_t: + int32_t rid # CHROM + int32_t pos # POS + int32_t rlen # length of REF + float qual # QUAL + uint32_t n_info, n_allele + uint32_t n_fmt, n_sample + kstring_t shared, indiv + bcf_dec_t d # lazy evaluation: $d is not generated by bcf_read(), but by explicitly calling bcf_unpack() + int max_unpack # Set to BCF_UN_STR, BCF_UN_FLT, or BCF_UN_INFO to boost performance of vcf_parse when some of the fields won't be needed + int unpacked # remember what has been unpacked to allow calling bcf_unpack() repeatedly without redoing the work + int unpack_size[3] # the original block size of ID, REF+ALT and FILTER + int errcode # one of BCF_ERR_* codes + + ####### API ####### + + # BCF and VCF I/O + # + # A note about naming conventions: htslib internally represents VCF + # records as bcf1_t data structures, therefore most functions are + # prefixed with bcf_. There are a few exceptions where the functions must + # be aware of both BCF and VCF worlds, such as bcf_parse vs vcf_parse. In + # these cases, functions prefixed with bcf_ are more general and work + # with both BCF and VCF. + + # bcf_hdr_init() - create an empty BCF header. + # @param mode "r" or "w" + # + # When opened for writing, the mandatory fileFormat and + # FILTER=PASS lines are added automatically. + bcf_hdr_t *bcf_hdr_init(const char *mode) + + # Destroy a BCF header struct + void bcf_hdr_destroy(bcf_hdr_t *h) + + # Initialize a bcf1_t object; equivalent to calloc(1, sizeof(bcf1_t)) + bcf1_t *bcf_init() + + # Deallocate a bcf1_t object + void bcf_destroy(bcf1_t *v) + + # Same as bcf_destroy() but frees only the memory allocated by bcf1_t, + # not the bcf1_t object itself. + void bcf_empty(bcf1_t *v) + + # Make the bcf1_t object ready for next read. Intended mostly for + # internal use, the user should rarely need to call this function + # directly. + void bcf_clear(bcf1_t *v) + + # Reads VCF or BCF header + bcf_hdr_t *bcf_hdr_read(htsFile *fp) + + # bcf_hdr_set_samples() - for more efficient VCF parsing when only one/few samples are needed + # @samples: samples to include or exclude from file or as a comma-separated string. + # LIST|FILE .. select samples in list/file + # ^LIST|FILE .. exclude samples from list/file + # - .. include all samples + # NULL .. exclude all samples + # @is_file: @samples is a file (1) or a comma-separated list (0) + # + # The bottleneck of VCF reading is parsing of genotype fields. If the + # reader knows in advance that only subset of samples is needed (possibly + # no samples at all), the performance of bcf_read() can be significantly + # improved by calling bcf_hdr_set_samples after bcf_hdr_read(). + # The function bcf_read() will subset the VCF/BCF records automatically + # with the notable exception when reading records via bcf_itr_next(). + # In this case, bcf_subset_format() must be called explicitly, because + # bcf_readrec() does not see the header. + # + # Returns 0 on success, -1 on error or a positive integer if the list + # contains samples not present in the VCF header. In such a case, the + # return value is the index of the offending sample. + # + int bcf_hdr_set_samples(bcf_hdr_t *hdr, const char *samples, int is_file) + int bcf_subset_format(const bcf_hdr_t *hdr, bcf1_t *rec) + + # Writes VCF or BCF header + int bcf_hdr_write(htsFile *fp, bcf_hdr_t *h) + + # Parse VCF line contained in kstring and populate the bcf1_t struct + int vcf_parse(kstring_t *s, const bcf_hdr_t *h, bcf1_t *v) + + # The opposite of vcf_parse. It should rarely be called directly, see vcf_write + int vcf_format(const bcf_hdr_t *h, const bcf1_t *v, kstring_t *s) + + # bcf_read() - read next VCF or BCF record + # + # Returns -1 on critical errors, 0 otherwise. On errors which are not + # critical for reading, such as missing header definitions, v->errcode is + # set to one of BCF_ERR* code and must be checked before calling + # vcf_write(). + int bcf_read(htsFile *fp, const bcf_hdr_t *h, bcf1_t *v) + + # bcf_unpack() - unpack/decode a BCF record (fills the bcf1_t::d field) + # + # Note that bcf_unpack() must be called even when reading VCF. It is safe + # to call the function repeatedly, it will not unpack the same field + # twice. + uint8_t BCF_UN_STR # up to ALT inclusive + uint8_t BCF_UN_FLT # up to FILTER + uint8_t BCF_UN_INFO # up to INFO + uint8_t BCF_UN_SHR # all shared information + uint8_t BCF_UN_FMT # unpack format and each sample + uint8_t BCF_UN_IND # a synonymo of BCF_UN_FMT + uint8_t BCF_UN_ALL # everything + + int bcf_unpack(bcf1_t *b, int which) + + # bcf_dup() - create a copy of BCF record. + # + # Note that bcf_unpack() must be called on the returned copy as if it was + # obtained from bcf_read(). Also note that bcf_dup() calls bcf_sync1(src) + # internally to reflect any changes made by bcf_update_* functions. + bcf1_t *bcf_dup(bcf1_t *src) + bcf1_t *bcf_copy(bcf1_t *dst, bcf1_t *src) + + # bcf_write() - write one VCF or BCF record. The type is determined at the open() call. + int bcf_write(htsFile *fp, bcf_hdr_t *h, bcf1_t *v) + + # The following functions work only with VCFs and should rarely be called + # directly. Usually one wants to use their bcf_* alternatives, which work + # transparently with both VCFs and BCFs. + bcf_hdr_t *vcf_hdr_read(htsFile *fp) + int vcf_hdr_write(htsFile *fp, const bcf_hdr_t *h) + int vcf_read(htsFile *fp, const bcf_hdr_t *h, bcf1_t *v) + int vcf_write(htsFile *fp, const bcf_hdr_t *h, bcf1_t *v) + + #************************************************************************ + # Header querying and manipulation routines + #************************************************************************ + + # Create a new header using the supplied template + bcf_hdr_t *bcf_hdr_dup(const bcf_hdr_t *hdr) + + # Copy header lines from src to dst if not already present in dst. See also bcf_translate(). + # Returns 0 on success or sets a bit on error: + # 1 .. conflicting definitions of tag length + # # todo + int bcf_hdr_combine(bcf_hdr_t *dst, const bcf_hdr_t *src) + + # bcf_hdr_merge() - copy header lines from src to dst, see also bcf_translate() + # @param dst: the destination header to be merged into, NULL on the first pass + # @param src: the source header + # + # Notes: + # - use as: + # bcf_hdr_t *dst = NULL; + # for (i=0; i 0 ) + # for (i=0; i=0 + # + # The returned values are: + # bcf_hdr_id2length .. whether the number of values is fixed or variable, one of BCF_VL_* + # bcf_hdr_id2number .. the number of values, 0xfffff for variable length fields + # bcf_hdr_id2type .. the field type, one of BCF_HT_* + # bcf_hdr_id2coltype .. the column type, one of BCF_HL_* + # + # Notes: Prior to using the macros, the presence of the info should be + # tested with bcf_hdr_idinfo_exists(). + # + int bcf_hdr_id2length(const bcf_hdr_t *hdr, int type, int int_id) + int bcf_hdr_id2number(const bcf_hdr_t *hdr, int type, int int_id) + int bcf_hdr_id2type(const bcf_hdr_t *hdr, int type, int int_id) + int bcf_hdr_id2coltype(const bcf_hdr_t *hdr, int type, int int_id) + int bcf_hdr_idinfo_exists(const bcf_hdr_t *hdr, int type, int int_id) + bcf_hrec_t *bcf_hdr_id2hrec(const bcf_hdr_t *hdr, int type, int col_type, int int_id) + + void bcf_fmt_array(kstring_t *s, int n, int type, void *data) + uint8_t *bcf_fmt_sized_array(kstring_t *s, uint8_t *ptr) + + void bcf_enc_vchar(kstring_t *s, int l, const char *a) + void bcf_enc_vint(kstring_t *s, int n, int32_t *a, int wsize) + void bcf_enc_vfloat(kstring_t *s, int n, float *a) + + #************************************************************************ + # BCF index + # + # Note that these functions work with BCFs only. See synced_bcf_reader.h + # which provides (amongst other things) an API to work transparently with + # both indexed BCFs and VCFs. + #************************************************************************ + + hts_idx_t *bcf_index_load2(const char *fn, const char *fnidx) + int bcf_index_build(const char *fn, int min_shift) + int bcf_index_build2(const char *fn, const char *fnidx, int min_shift) + + #******************* + # Typed value I/O * + #****************** + + # Note that in contrast with BCFv2.1 specification, HTSlib implementation + # allows missing values in vectors. For integer types, the values 0x80, + # 0x8000, 0x80000000 are interpreted as missing values and 0x81, 0x8001, + # 0x80000001 as end-of-vector indicators. Similarly for floats, the value of + # 0x7F800001 is interpreted as a missing value and 0x7F800002 as an + # end-of-vector indicator. + # Note that the end-of-vector byte is not part of the vector. + + # This trial BCF version (v2.2) is compatible with the VCF specification and + # enables to handle correctly vectors with different ploidy in presence of + # missing values. + + int32_t bcf_int8_vector_end + int32_t bcf_int16_vector_end + int32_t bcf_int32_vector_end + int32_t bcf_str_vector_end + int32_t bcf_int8_missing + int32_t bcf_int16_missing + int32_t bcf_int32_missing + int32_t bcf_str_missing + + uint32_t bcf_float_vector_end + uint32_t bcf_float_missing + + void bcf_float_set(float *ptr, uint32_t value) + void bcf_float_set_vector_end(float *x) + void bcf_float_set_missing(float *x) + + int bcf_float_is_missing(float f) + int bcf_float_is_vector_end(float f) + void bcf_format_gt(bcf_fmt_t *fmt, int isample, kstring_t *str) + void bcf_enc_size(kstring_t *s, int size, int type) + int bcf_enc_inttype(long x) + void bcf_enc_int1(kstring_t *s, int32_t x) + int32_t bcf_dec_int1(const uint8_t *p, int type, uint8_t **q) + int32_t bcf_dec_typed_int1(const uint8_t *p, uint8_t **q) + int32_t bcf_dec_size(const uint8_t *p, uint8_t **q, int *type) + + # These trivial wrappers are defined only for consistency with other parts of htslib + bcf1_t *bcf_init1() + int bcf_read1(htsFile *fp, const bcf_hdr_t *h, bcf1_t *v) + int vcf_read1(htsFile *fp, const bcf_hdr_t *h, bcf1_t *v) + int bcf_write1(htsFile *fp, const bcf_hdr_t *h, bcf1_t *v) + int vcf_write1(htsFile *fp, const bcf_hdr_t *h, bcf1_t *v) + void bcf_destroy1(bcf1_t *v) + void bcf_empty1(bcf1_t *v) + int vcf_parse1(kstring_t *s, const bcf_hdr_t *h, bcf1_t *v) + void bcf_clear1(bcf1_t *v) + int vcf_format1(const bcf_hdr_t *h, const bcf1_t *v, kstring_t *s) + + # Other nice wrappers + void bcf_itr_destroy(hts_itr_t *iter) + hts_itr_t *bcf_itr_queryi(const hts_idx_t *idx, int tid, int beg, int end) + hts_itr_t *bcf_itr_querys(const hts_idx_t *idx, const bcf_hdr_t *hdr, char *s) + int bcf_itr_next(htsFile *fp, hts_itr_t *iter, void *r) + hts_idx_t *bcf_index_load(const char *fn) + const char **bcf_index_seqnames(const hts_idx_t *idx, const bcf_hdr_t *hdr, int *nptr) + + +# VCF/BCF utility functions +cdef extern from "htslib/vcfutils.h" nogil: + struct kbitset_t + + # bcf_trim_alleles() - remove ALT alleles unused in genotype fields + # @header: for access to BCF_DT_ID dictionary + # @line: VCF line obtain from vcf_parse1 + # + # Returns the number of removed alleles on success or negative + # on error: + # -1 .. some allele index is out of bounds + int bcf_trim_alleles(const bcf_hdr_t *header, bcf1_t *line) + + # bcf_remove_alleles() - remove ALT alleles according to bitmask @mask + # @header: for access to BCF_DT_ID dictionary + # @line: VCF line obtained from vcf_parse1 + # @mask: alleles to remove + # + # If you have more than 31 alleles, then the integer bit mask will + # overflow, so use bcf_remove_allele_set instead + void bcf_remove_alleles(const bcf_hdr_t *header, bcf1_t *line, int mask) + + # bcf_remove_allele_set() - remove ALT alleles according to bitset @rm_set + # @header: for access to BCF_DT_ID dictionary + # @line: VCF line obtained from vcf_parse1 + # @rm_set: pointer to kbitset_t object with bits set for allele + # indexes to remove + # + # Number=A,R,G INFO and FORMAT fields will be updated accordingly. + void bcf_remove_allele_set(const bcf_hdr_t *header, bcf1_t *line, kbitset_t *rm_set) + + # bcf_calc_ac() - calculate the number of REF and ALT alleles + # @header: for access to BCF_DT_ID dictionary + # @line: VCF line obtained from vcf_parse1 + # @ac: array of length line->n_allele + # @which: determine if INFO/AN,AC and indv fields be used + # + # Returns 1 if the call succeeded, or 0 if the value could not + # be determined. + # + # The value of @which determines if existing INFO/AC,AN can be + # used (BCF_UN_INFO) and and if indv fields can be splitted + # (BCF_UN_FMT). + int bcf_calc_ac(const bcf_hdr_t *header, bcf1_t *line, int *ac, int which) + + # bcf_gt_type() - determines type of the genotype + # @fmt_ptr: the GT format field as set for example by set_fmt_ptr + # @isample: sample index (starting from 0) + # @ial: index of the 1st non-reference allele (starting from 1) + # @jal: index of the 2nd non-reference allele (starting from 1) + # + # Returns the type of the genotype (one of GT_HOM_RR, GT_HET_RA, + # GT_HOM_AA, GT_HET_AA, GT_HAPL_R, GT_HAPL_A or GT_UNKN). If $ial + # is not NULL and the genotype has one or more non-reference + # alleles, $ial will be set. In case of GT_HET_AA, $ial is the + # position of the allele which appeared first in ALT. If $jal is + # not null and the genotype is GT_HET_AA, $jal will be set and is + # the position of the second allele in ALT. + uint8_t GT_HOM_RR # note: the actual value of GT_* matters, used in dosage r2 calculation + uint8_t GT_HOM_AA + uint8_t GT_HET_RA + uint8_t GT_HET_AA + uint8_t GT_HAPL_R + uint8_t GT_HAPL_A + uint8_t GT_UNKN + int bcf_gt_type(bcf_fmt_t *fmt_ptr, int isample, int *ial, int *jal) + + int bcf_acgt2int(char c) + char bcf_int2acgt(int i) + + # bcf_ij2G() - common task: allele indexes to Number=G index (diploid) + # @i,j: allele indexes, 0-based, i<=j + # Returns index to the Number=G diploid array + uint32_t bcf_ij2G(uint32_t i, uint32_t j) + + +cdef extern from "htslib/cram.h" nogil: + + enum cram_block_method: + ERROR + RAW + GZIP + BZIP2 + LZMA + RANS + RANS0 + RANS1 + GZIP_RLE + + enum cram_content_type: + CT_ERROR + FILE_HEADER + COMPRESSION_HEADER + MAPPED_SLICE + UNMAPPED_SLICE + EXTERNAL + CORE + + # Opaque data types, see cram_structs for the fully fledged versions. + ctypedef struct SAM_hdr + ctypedef struct cram_file_def + ctypedef struct cram_fd + ctypedef struct cram_container + ctypedef struct cram_block + ctypedef struct cram_slice + ctypedef struct cram_metrics + ctypedef struct cram_block_slice_hdr + ctypedef struct cram_block_compression_hdr + ctypedef struct refs_t + + # Accessor functions + + # + #----------------------------------------------------------------------------- + # cram_fd + # + SAM_hdr *cram_fd_get_header(cram_fd *fd) + void cram_fd_set_header(cram_fd *fd, SAM_hdr *hdr) + + int cram_fd_get_version(cram_fd *fd) + void cram_fd_set_version(cram_fd *fd, int vers) + + int cram_major_vers(cram_fd *fd) + int cram_minor_vers(cram_fd *fd) + + hFILE *cram_fd_get_fp(cram_fd *fd) + void cram_fd_set_fp(cram_fd *fd, hFILE *fp) + + # + #----------------------------------------------------------------------------- + # cram_container + # + int32_t cram_container_get_length(cram_container *c) + void cram_container_set_length(cram_container *c, int32_t length) + int32_t cram_container_get_num_blocks(cram_container *c) + void cram_container_set_num_blocks(cram_container *c, int32_t num_blocks) + int32_t *cram_container_get_landmarks(cram_container *c, int32_t *num_landmarks) + void cram_container_set_landmarks(cram_container *c, int32_t num_landmarks, + int32_t *landmarks) + + # Returns true if the container is empty (EOF marker) */ + int cram_container_is_empty(cram_fd *fd) + + + # + #----------------------------------------------------------------------------- + # cram_block + # + int32_t cram_block_get_content_id(cram_block *b) + int32_t cram_block_get_comp_size(cram_block *b) + int32_t cram_block_get_uncomp_size(cram_block *b) + int32_t cram_block_get_crc32(cram_block *b) + void * cram_block_get_data(cram_block *b) + + cram_content_type cram_block_get_content_type(cram_block *b) + + void cram_block_set_content_id(cram_block *b, int32_t id) + void cram_block_set_comp_size(cram_block *b, int32_t size) + void cram_block_set_uncomp_size(cram_block *b, int32_t size) + void cram_block_set_crc32(cram_block *b, int32_t crc) + void cram_block_set_data(cram_block *b, void *data) + + int cram_block_append(cram_block *b, void *data, int size) + void cram_block_update_size(cram_block *b) + + # Offset is known as "size" internally, but it can be confusing. + size_t cram_block_get_offset(cram_block *b) + void cram_block_set_offset(cram_block *b, size_t offset) + + # + # Computes the size of a cram block, including the block + # header itself. + # + uint32_t cram_block_size(cram_block *b) + + # + # Renumbers RG numbers in a cram compression header. + # + # CRAM stores RG as the Nth number in the header, rather than a + # string holding the ID: tag. This is smaller in space, but means + # "samtools cat" to join files together that contain single but + # different RG lines needs a way of renumbering them. + # + # The file descriptor is expected to be immediately after the + # cram_container structure (ie before the cram compression header). + # Due to the nature of the CRAM format, this needs to read and write + # the blocks itself. Note that there may be multiple slices within + # the container, meaning multiple compression headers to manipulate. + # Changing RG may change the size of the compression header and + # therefore the length field in the container. Hence we rewrite all + # blocks just incase and also emit the adjusted container. + # + # The current implementation can only cope with renumbering a single + # RG (and only then if it is using HUFFMAN or BETA codecs). In + # theory it *may* be possible to renumber multiple RGs if they use + # HUFFMAN to the CORE block or use an external block unshared by any + # other data series. So we have an API that can be upgraded to + # support this, but do not implement it for now. An example + # implementation of RG as an EXTERNAL block would be to find that + # block and rewrite it, returning the number of blocks consumed. + # + # Returns 0 on success; + # -1 if unable to edit; + # -2 on other errors (eg I/O). + # + int cram_transcode_rg(cram_fd *input, cram_fd *output, + cram_container *c, + int nrg, int *in_rg, int *out_rg) + + # + # Copies the blocks representing the next num_slice slices from a + # container from 'in' to 'out'. It is expected that the file pointer + # is just after the read of the cram_container and cram compression + # header. + # + # Returns 0 on success + # -1 on failure + # + int cram_copy_slice(cram_fd *input, cram_fd *output, int32_t num_slice) + + # + #----------------------------------------------------------------------------- + # SAM_hdr + # + + # Tokenises a SAM header into a hash table. + # + # Also extracts a few bits on specific data types, such as @RG lines. + # + # @return + # Returns a SAM_hdr struct on success (free with sam_hdr_free()) + # NULL on failure + # + SAM_hdr *sam_hdr_parse_(const char *hdr, int len) + + + # + #----------------------------------------------------------------------------- + # cram_io basics + # + + # CRAM blocks - the dynamically growable data block. We have code to + # create, update, (un)compress and read/write. + # + # These are derived from the deflate_interlaced.c blocks, but with the + # CRAM extension of content types and IDs. + # + + # Allocates a new cram_block structure with a specified content_type and + # id. + # + # @return + # Returns block pointer on success; + # NULL on failure + # + cram_block *cram_new_block(cram_content_type content_type, + int content_id) + + # Reads a block from a cram file. + # + # @return + # Returns cram_block pointer on success; + # NULL on failure + # + cram_block *cram_read_block(cram_fd *fd) + + # Writes a CRAM block. + # + # @return + # Returns 0 on success; + # -1 on failure + # + int cram_write_block(cram_fd *fd, cram_block *b) + + # Frees a CRAM block, deallocating internal data too. + # + void cram_free_block(cram_block *b) + + # Uncompresses a CRAM block, if compressed. + # + # @return + # Returns 0 on success; + # -1 on failure + # + int cram_uncompress_block(cram_block *b) + + # Compresses a block. + # + # Compresses a block using one of two different zlib strategies. If we only + # want one choice set strat2 to be -1. + # + # The logic here is that sometimes Z_RLE does a better job than Z_FILTERED + # or Z_DEFAULT_STRATEGY on quality data. If so, we'd rather use it as it is + # significantly faster. + # + # @return + # Returns 0 on success; + # -1 on failure + # + int cram_compress_block(cram_fd *fd, cram_block *b, cram_metrics *metrics, + int method, int level) + + # Containers + # + + # Creates a new container, specifying the maximum number of slices + # and records permitted. + # + # @return + # Returns cram_container ptr on success; + # NULL on failure + # + cram_container *cram_new_container(int nrec, int nslice) + void cram_free_container(cram_container *c) + + # Reads a container header. + # + # @return + # Returns cram_container on success; + # NULL on failure or no container left (fd->err == 0). + # + cram_container *cram_read_container(cram_fd *fd) + + # Writes a container structure. + # + # @return + # Returns 0 on success; + # -1 on failure + # + int cram_write_container(cram_fd *fd, cram_container *h) + + # + # Stores the container structure in dat and returns *size as the + # number of bytes written to dat[]. The input size of dat is also + # held in *size and should be initialised to cram_container_size(c). + # + # Returns 0 on success; + # -1 on failure + # + int cram_store_container(cram_fd *fd, cram_container *c, char *dat, int *size) + + int cram_container_size(cram_container *c) + + # The top-level cram opening, closing and option handling + # + + # Opens a CRAM file for read (mode "rb") or write ("wb"). + # + # The filename may be "-" to indicate stdin or stdout. + # + # @return + # Returns file handle on success; + # NULL on failure. + # + cram_fd *cram_open(const char *filename, const char *mode) + + # Opens an existing stream for reading or writing. + # + # @return + # Returns file handle on success; + # NULL on failure. + # + cram_fd *cram_dopen(hFILE *fp, const char *filename, const char *mode) + + # Closes a CRAM file. + # + # @return + # Returns 0 on success; + # -1 on failure + # + int cram_close(cram_fd *fd) + + # + # Seek within a CRAM file. + # + # Returns 0 on success + # -1 on failure + # + int cram_seek(cram_fd *fd, off_t offset, int whence) + + # + # Flushes a CRAM file. + # Useful for when writing to stdout without wishing to close the stream. + # + # Returns 0 on success + # -1 on failure + # + int cram_flush(cram_fd *fd) + + # Checks for end of file on a cram_fd stream. + # + # @return + # Returns 0 if not at end of file + # 1 if we hit an expected EOF (end of range or EOF block) + # 2 for other EOF (end of stream without EOF block) + # + int cram_eof(cram_fd *fd) + + # Sets options on the cram_fd. + # + # See CRAM_OPT_* definitions in hts.h. + # Use this immediately after opening. + # + # @return + # Returns 0 on success; + # -1 on failure + # + int cram_set_option(cram_fd *fd, hts_fmt_option opt, ...) + + # Sets options on the cram_fd. + # + # See CRAM_OPT_* definitions in hts.h. + # Use this immediately after opening. + # + # @return + # Returns 0 on success; + # -1 on failure + # + int cram_set_voption(cram_fd *fd, hts_fmt_option opt, va_list args) + + # + # Attaches a header to a cram_fd. + # + # This should be used when creating a new cram_fd for writing where + # we have an SAM_hdr already constructed (eg from a file we've read + # in). + # + # @return + # Returns 0 on success; + # -1 on failure + # + int cram_set_header(cram_fd *fd, SAM_hdr *hdr) + + # Check if this file has a proper EOF block + # + # @return + # Returns 3 if the file is a version of CRAM that does not contain EOF blocks + # 2 if the file is a stream and thus unseekable + # 1 if the file contains an EOF block + # 0 if the file does not contain an EOF block + # -1 if an error occured whilst reading the file or we could not seek back to where we were + # + # + int cram_check_EOF(cram_fd *fd) + + # As int32_decoded/encode, but from/to blocks instead of cram_fd */ + int int32_put_blk(cram_block *b, int32_t val) + + # Deallocates all storage used by a SAM_hdr struct. + # + # This also decrements the header reference count. If after decrementing + # it is still non-zero then the header is assumed to be in use by another + # caller and the free is not done. + # + # This is a synonym for sam_hdr_dec_ref(). + # + void sam_hdr_free(SAM_hdr *hdr) + + # Returns the current length of the SAM_hdr in text form. + # + # Call sam_hdr_rebuild() first if editing has taken place. + # + int sam_hdr_length(SAM_hdr *hdr) + + # Returns the string form of the SAM_hdr. + # + # Call sam_hdr_rebuild() first if editing has taken place. + # + char *sam_hdr_str(SAM_hdr *hdr) + + # Appends a formatted line to an existing SAM header. + # + # Line is a full SAM header record, eg "@SQ\tSN:foo\tLN:100", with + # optional new-line. If it contains more than 1 line then multiple lines + # will be added in order. + # + # Len is the length of the text data, or 0 if unknown (in which case + # it should be null terminated). + # + # @return + # Returns 0 on success; + # -1 on failure + # + + # Add an @PG line. + # + # If we wish complete control over this use sam_hdr_add() directly. This + # function uses that, but attempts to do a lot of tedious house work for + # you too. + # + # - It will generate a suitable ID if the supplied one clashes. + # - It will generate multiple @PG records if we have multiple PG chains. + # + # Call it as per sam_hdr_add() with a series of key,value pairs ending + # in NULL. + # + # @return + # Returns 0 on success; + # -1 on failure + # + int sam_hdr_add_PG(SAM_hdr *sh, const char *name, ...) + + # + # A function to help with construction of CL tags in @PG records. + # Takes an argc, argv pair and returns a single space-separated string. + # This string should be deallocated by the calling function. + # + # @return + # Returns malloced char * on success; + # NULL on failure + # + char *stringify_argv(int argc, char *argv[]) + + # + # Returns the refs_t structure used by a cram file handle. + # + # This may be used in conjunction with option CRAM_OPT_SHARED_REF to + # share reference memory between multiple file handles. + # + # @return + # Returns NULL if none exists or the file handle is not a CRAM file. + # + refs_t *cram_get_refs(htsFile *fd) + + +cdef class HTSFile(object): + cdef htsFile *htsfile # pointer to htsFile structure + cdef int64_t start_offset # BGZF offset of first record + + cdef readonly object filename # filename as supplied by user + cdef readonly object mode # file opening mode + cdef readonly object index_filename # filename of index, if supplied by user + + cdef readonly bint is_stream # Is htsfile a non-seekable stream + cdef readonly bint is_remote # Is htsfile a remote stream + cdef readonly bint duplicate_filehandle # Duplicate filehandle when opening via fh + + cdef htsFile *_open_htsfile(self) except? NULL diff --git a/pysam/libchtslib.pyx b/pysam/libchtslib.pyx new file mode 100644 index 0000000..7096a99 --- /dev/null +++ b/pysam/libchtslib.pyx @@ -0,0 +1,713 @@ +# cython: embedsignature=True +# cython: profile=True +# adds doc-strings for sphinx + +######################################################################## +######################################################################## +## Cython cimports +######################################################################## + +from posix.unistd cimport dup +from libc.errno cimport errno +from cpython cimport PyBytes_FromStringAndSize + +from pysam.libchtslib cimport * + +from pysam.libcutils cimport force_bytes, force_str, charptr_to_str, charptr_to_str_w_len +from pysam.libcutils cimport encode_filename, from_string_and_size + + +######################################################################## +######################################################################## +## Python imports +######################################################################## + +import os +import io +import re +from warnings import warn + + +######################################################################## +######################################################################## +## Constants +######################################################################## + +__all__ = ['get_verbosity', 'set_verbosity', 'HFile', 'HTSFile'] + +# defines imported from samtools +DEF SEEK_SET = 0 +DEF SEEK_CUR = 1 +DEF SEEK_END = 2 + +# maximum genomic coordinace +cdef int MAX_POS = 2 << 29 + +cdef tuple FORMAT_CATEGORIES = ('UNKNOWN', 'ALIGNMENTS', 'VARIANTS', 'INDEX', 'REGIONS') +cdef tuple FORMATS = ('UNKNOWN', 'BINARY_FORMAT', 'TEXT_FORMAT', 'SAM', 'BAM', 'BAI', 'CRAM', 'CRAI', + 'VCF', 'BCF', 'CSI', 'GZI', 'TBI', 'BED') +cdef tuple COMPRESSION = ('NONE', 'GZIP', 'BGZF', 'CUSTOM') + + +######################################################################## +######################################################################## +## Verbosity functions +######################################################################## + + +cpdef set_verbosity(int verbosity): + """Set htslib's hts_verbose global variable to the specified value.""" + return hts_set_verbosity(verbosity) + +cpdef get_verbosity(): + """Return the value of htslib's hts_verbose global variable.""" + return hts_get_verbosity() + + +######################################################################## +######################################################################## +## HFile wrapper class +######################################################################## + +cdef class HFile(object): + cdef hFILE *fp + cdef readonly object name, mode + + def __init__(self, name, mode='r', closedf=True): + self._open(name, mode, closefd=True) + + def __dealloc__(self): + self.close() + + @property + def closed(self): + return self.fp == NULL + + cdef _open(self, name, mode, closefd=True): + self.name = name + self.mode = mode + + mode = force_bytes(mode) + + if isinstance(name, int): + if self.fp != NULL: + name = dup(name) + self.fp = hdopen(name, mode) + else: + name = encode_filename(name) + self.fp = hopen(name, mode) + + if not self.fp: + raise IOError(errno, 'failed to open HFile', self.name) + + def close(self): + if self.fp == NULL: + return + + cdef hFILE *fp = self.fp + self.fp = NULL + + if hclose(fp) != 0: + raise IOError(herrno(self.fp), 'failed to close HFile', self.name) + + def fileno(self): + if self.fp == NULL: + raise IOError('operation on closed HFile') + if isinstance(self.name, int): + return self.name + else: + raise AttributeError('fileno not available') + + def __enter__(self): + return self + + def __exit__(self, type, value, tb): + self.close() + + def __iter__(self): + return self + + def __next__(self): + line = self.readline() + if not line: + raise StopIteration() + return line + + def flush(self): + if self.fp == NULL: + raise IOError('operation on closed HFile') + if hflush(self.fp) != 0: + raise IOError(herrno(self.fp), 'failed to flush HFile', self.name) + + def isatty(self): + if self.fp == NULL: + raise IOError('operation on closed HFile') + return False + + def readable(self): + return self.fp != NULL and 'r' in self.mode + + def read(self, Py_ssize_t size=-1): + if self.fp == NULL: + raise IOError('operation on closed HFile') + + if size == 0: + return b'' + + cdef list parts = [] + cdef bytes part + cdef Py_ssize_t chunk_size, ret, bytes_read = 0 + cdef char *cpart + + while size == -1 or bytes_read < size: + chunk_size = 4096 + if size != -1: + chunk_size = min(chunk_size, size - bytes_read) + + part = PyBytes_FromStringAndSize(NULL, chunk_size) + cpart = part + ret = hread(self.fp, cpart, chunk_size) + + if ret < 0: + IOError(herrno(self.fp), 'failed to read HFile', self.name) + elif not ret: + break + + bytes_read += ret + + if ret < chunk_size: + part = cpart[:ret] + + parts.append(part) + + return b''.join(parts) + + def readall(self): + return self.read() + + def readinto(self, buf): + if self.fp == NULL: + raise IOError('operation on closed HFile') + + size = len(buf) + + if size == 0: + return size + + mv = memoryview(buf) + ret = hread(self.fp, mv, size) + + if ret < 0: + IOError(herrno(self.fp), 'failed to read HFile', self.name) + + return ret + + def readline(self, Py_ssize_t size=-1): + if self.fp == NULL: + raise IOError('operation on closed HFile') + + if size == 0: + return b'' + + cdef list parts = [] + cdef bytes part + cdef Py_ssize_t chunk_size, ret, bytes_read = 0 + cdef char *cpart + + while size == -1 or bytes_read < size: + chunk_size = 4096 + if size != -1: + chunk_size = min(chunk_size, size - bytes_read) + + part = PyBytes_FromStringAndSize(NULL, chunk_size) + cpart = part + + # Python bytes objects allocate an extra byte for a null terminator + ret = hgetln(cpart, chunk_size+1, self.fp) + + if ret < 0: + IOError(herrno(self.fp), 'failed to read HFile', self.name) + elif not ret: + break + + bytes_read += ret + + if ret < chunk_size: + part = cpart[:ret] + cpart = part + + parts.append(part) + + if cpart[ret-1] == b'\n': + break + + return b''.join(parts) + + def readlines(self): + return list(self) + + def seek(self, Py_ssize_t offset, int whence=SEEK_SET): + if self.fp == NULL: + raise IOError('operation on closed HFile') + + cdef Py_ssize_t off = hseek(self.fp, offset, whence) + + if off < 0: + raise IOError(herrno(self.fp), 'seek failed on HFile', self.name) + + return off + + def tell(self): + if self.fp == NULL: + raise IOError('operation on closed HFile') + + ret = htell(self.fp) + + if ret < 0: + raise IOError(herrno(self.fp), 'tell failed on HFile', self.name) + + return ret + + def seekable(self): + return self.fp != NULL + + def truncate(self, size=None): + raise NotImplementedError() + + def writable(self): + return self.fp != NULL and 'w' in self.mode + + def write(self, bytes b): + if self.fp == NULL: + raise IOError('operation on closed HFile') + + got = hwrite(self.fp, b, len(b)) + + if got < 0: + raise IOError(herrno(self.fp), 'write failed on HFile', self.name) + + return got + + def writelines(self, lines): + for line in lines: + self.write(line) + + +######################################################################## +######################################################################## +## Helpers for backward compatibility to hide the difference between +## boolean properties and methods +######################################################################## + +class CallableValue(object): + def __init__(self, value): + self.value = value + def __call__(self): + return self.value + def __bool__(self): + return self.value + def __nonzero__(self): + return self.value + def __eq__(self, other): + return self.value == other + def __ne__(self, other): + return self.value != other + + +CTrue = CallableValue(True) +CFalse = CallableValue(False) + + +######################################################################## +######################################################################## +## HTSFile wrapper class (base class for AlignmentFile and VariantFile) +######################################################################## + +cdef class HTSFile(object): + """ + Base class for HTS file types + """ + def __cinit__(self, *args, **kwargs): + self.htsfile = NULL + self.duplicate_filehandle = True + + def close(self): + if self.htsfile: + hts_close(self.htsfile) + self.htsfile = NULL + + def __dealloc__(self): + if self.htsfile: + hts_close(self.htsfile) + self.htsfile = NULL + + def check_truncation(self, ignore_truncation=False): + """Check if file is truncated.""" + if not self.htsfile: + return + + if self.htsfile.format.compression != bgzf: + return + + cdef BGZF *bgzfp = hts_get_bgzfp(self.htsfile) + if not bgzfp: + return + + cdef int ret = bgzf_check_EOF(bgzfp) + if ret < 0: + raise IOError(errno, 'error checking for EOF marker') + elif ret == 0: + msg = 'no BGZF EOF marker; file may be truncated'.format(self.filename) + if ignore_truncation: + warn(msg) + else: + raise IOError(msg) + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.close() + return False + + @property + def category(self): + """General file format category. One of UNKNOWN, ALIGNMENTS, + VARIANTS, INDEX, REGIONS""" + if not self.htsfile: + raise ValueError('metadata not available on closed file') + return FORMAT_CATEGORIES[self.htsfile.format.category] + + @property + def format(self): + """File format. + + One of UNKNOWN, BINARY_FORMAT, TEXT_FORMAT, SAM, BAM, + BAI, CRAM, CRAI, VCF, BCF, CSI, GZI, TBI, BED. + """ + if not self.htsfile: + raise ValueError('metadata not available on closed file') + return FORMATS[self.htsfile.format.format] + + @property + def version(self): + """Tuple of file format version numbers (major, minor)""" + if not self.htsfile: + raise ValueError('metadata not available on closed file') + return self.htsfile.format.version.major, self.htsfile.format.version.minor + + @property + def compression(self): + """File compression. + + One of NONE, GZIP, BGZF, CUSTOM.""" + if not self.htsfile: + raise ValueError('metadata not available on closed file') + return COMPRESSION[self.htsfile.format.compression] + + @property + def description(self): + """Vaguely human readable description of the file format""" + if not self.htsfile: + raise ValueError('metadata not available on closed file') + cdef char *desc = hts_format_description(&self.htsfile.format) + try: + return charptr_to_str(desc) + finally: + free(desc) + + @property + def is_open(self): + """return True if HTSFile is open and in a valid state.""" + return CTrue if self.htsfile != NULL else CFalse + + @property + def is_closed(self): + """return True if HTSFile is closed.""" + return self.htsfile == NULL + + @property + def closed(self): + """return True if HTSFile is closed.""" + return self.htsfile == NULL + + @property + def is_write(self): + """return True if HTSFile is open for writing""" + return self.htsfile != NULL and self.htsfile.is_write != 0 + + @property + def is_read(self): + """return True if HTSFile is open for reading""" + return self.htsfile != NULL and self.htsfile.is_write == 0 + + @property + def is_sam(self): + """return True if HTSFile is reading or writing a SAM alignment file""" + return self.htsfile != NULL and self.htsfile.format.format == sam + + @property + def is_bam(self): + """return True if HTSFile is reading or writing a BAM alignment file""" + return self.htsfile != NULL and self.htsfile.format.format == bam + + @property + def is_cram(self): + """return True if HTSFile is reading or writing a BAM alignment file""" + return self.htsfile != NULL and self.htsfile.format.format == cram + + @property + def is_vcf(self): + """return True if HTSFile is reading or writing a VCF variant file""" + return self.htsfile != NULL and self.htsfile.format.format == vcf + + @property + def is_bcf(self): + """return True if HTSFile is reading or writing a BCF variant file""" + return self.htsfile != NULL and self.htsfile.format.format == bcf + + def reset(self): + """reset file position to beginning of file just after the header. + + Returns + ------- + + The file position after moving the file pointer. + + """ + return self.seek(self.start_offset) + + def seek(self, uint64_t offset): + """move file pointer to position *offset*, see :meth:`pysam.HTSFile.tell`.""" + if not self.is_open: + raise ValueError('I/O operation on closed file') + if self.is_stream: + raise IOError('seek not available in streams') + + cdef int64_t ret + if self.htsfile.format.compression == bgzf: + with nogil: + ret = bgzf_seek(hts_get_bgzfp(self.htsfile), offset, SEEK_SET) + elif self.htsfile.format.compression == no_compression: + with nogil: + ret = hts_useek(self.htsfile, offset, SEEK_SET) + else: + raise NotImplementedError("seek not implemented in files compressed by method {}".format( + self.htsfile.format.compression)) + return ret + + def tell(self): + """return current file position, see :meth:`pysam.HTSFile.seek`.""" + if not self.is_open: + raise ValueError('I/O operation on closed file') + if self.is_stream: + raise IOError('tell not available in streams') + + cdef int64_t ret + if self.htsfile.format.compression == bgzf: + with nogil: + ret = bgzf_tell(hts_get_bgzfp(self.htsfile)) + elif self.htsfile.format.compression == no_compression: + with nogil: + ret = hts_utell(self.htsfile) + elif self.htsfile.format.format == cram: + with nogil: + ret = htell(cram_fd_get_fp(self.htsfile.fp.cram)) + else: + raise NotImplementedError("seek not implemented in files compressed by method {}".format( + self.htsfile.format.compression)) + + return ret + + cdef htsFile *_open_htsfile(self) except? NULL: + cdef char *cfilename + cdef char *cmode = self.mode + cdef int fd, dup_fd + + if isinstance(self.filename, bytes): + cfilename = self.filename + with nogil: + return hts_open(cfilename, cmode) + else: + if isinstance(self.filename, int): + fd = self.filename + else: + fd = self.filename.fileno() + + if self.duplicate_filehandle: + dup_fd = dup(fd) + else: + dup_fd = fd + + # Replicate mode normalization done in hts_open_format + smode = self.mode.replace(b'b', b'').replace(b'c', b'') + if b'b' in self.mode: + smode += b'b' + elif b'c' in self.mode: + smode += b'c' + cmode = smode + + hfile = hdopen(dup_fd, cmode) + if hfile == NULL: + raise IOError('Cannot create hfile') + + try: + # filename.name can be an int + filename = str(self.filename.name) + except AttributeError: + filename = ''.format(fd) + + filename = encode_filename(filename) + cfilename = filename + with nogil: + return hts_hopen(hfile, cfilename, cmode) + + def add_hts_options(self, format_options=None): + """Given a list of key=value format option strings, add them to an open htsFile + """ + cdef int rval + cdef hts_opt *opts = NULL + + if format_options: + for format_option in format_options: + rval = hts_opt_add(&opts, format_option) + if rval != 0: + if opts != NULL: + hts_opt_free(opts) + raise RuntimeError('Invalid format option ({}) specified'.format(format_option)) + if opts != NULL: + rval = hts_opt_apply(self.htsfile, opts) + if rval != 0: + hts_opt_free(opts) + raise RuntimeError('An error occured while applying the requested format options') + hts_opt_free(opts) + + def parse_region(self, contig=None, start=None, stop=None, region=None,tid=None, + reference=None, end=None): + """parse alternative ways to specify a genomic region. A region can + either be specified by :term:`contig`, `start` and + `stop`. `start` and `stop` denote 0-based, half-open + intervals. :term:`reference` and `end` are also accepted for + backward compatiblity as synonyms for :term:`contig` and + `stop`, respectively. + + Alternatively, a samtools :term:`region` string can be + supplied. + + If any of the coordinates are missing they will be replaced by + the minimum (`start`) or maximum (`stop`) coordinate. + + Note that region strings are 1-based inclusive, while `start` + and `stop` denote an interval in 0-based, half-open + coordinates (like BED files and Python slices). + + If `contig` or `region` or are ``*``, unmapped reads at the end + of a BAM file will be returned. Setting either to ``.`` will + iterate from the beginning of the file. + + Returns + ------- + + tuple : a tuple of `flag`, :term:`tid`, `start` and + `stop`. The flag indicates whether no coordinates were + supplied and the genomic region is the complete genomic space. + + Raises + ------ + + ValueError + for invalid or out of bounds regions. + + """ + cdef int rtid + cdef long long rstart + cdef long long rstop + + if reference is not None: + if contig is not None: + raise ValueError('contig and reference should not both be specified') + contig = reference + + if end is not None: + if stop is not None: + raise ValueError('stop and end should not both be specified') + stop = end + + if contig is None and tid is None and region is None: + return 0, 0, 0, 0 + + rtid = -1 + rstart = 0 + rstop = MAX_POS + if start is not None: + try: + rstart = start + except OverflowError: + raise ValueError('start out of range (%i)' % start) + + if stop is not None: + try: + rstop = stop + except OverflowError: + raise ValueError('stop out of range (%i)' % stop) + + if region: + region = force_str(region) + parts = re.split('[:-]', region) + contig = parts[0] + if len(parts) >= 2: + rstart = int(parts[1]) - 1 + if len(parts) >= 3: + rstop = int(parts[2]) + + if tid is not None: + if not self.is_valid_tid(tid): + raise IndexError('invalid tid') + rtid = tid + else: + if contig == "*": + rtid = HTS_IDX_NOCOOR + elif contig == ".": + rtid = HTS_IDX_START + else: + rtid = self.get_tid(contig) + if rtid < 0: + raise ValueError('invalid contig `%s`' % contig) + + if rstart > rstop: + raise ValueError('invalid coordinates: start (%i) > stop (%i)' % (rstart, rstop)) + if not 0 <= rstart < MAX_POS: + raise ValueError('start out of range (%i)' % rstart) + if not 0 <= rstop <= MAX_POS: + raise ValueError('stop out of range (%i)' % rstop) + + return 1, rtid, rstart, rstop + + def is_valid_tid(self, tid): + """ + return True if the numerical :term:`tid` is valid; False otherwise. + + returns -1 if contig is not known. + """ + raise NotImplementedError() + + def is_valid_reference_name(self, contig): + """ + return True if the contig name :term:`contig` is valid; False otherwise. + """ + return self.get_tid(contig) != -1 + + def get_tid(self, contig): + """ + return the numerical :term:`tid` corresponding to + :term:`contig` + + returns -1 if contig is not known. + """ + raise NotImplementedError() + + def get_reference_name(self, tid): + """ + return :term:`contig` name corresponding to numerical :term:`tid` + """ + raise NotImplementedError() diff --git a/pysam/libcsamfile.pxd b/pysam/libcsamfile.pxd new file mode 100644 index 0000000..dff1345 --- /dev/null +++ b/pysam/libcsamfile.pxd @@ -0,0 +1,45 @@ +from pysam.libcalignmentfile cimport AlignedSegment, AlignmentFile + +################################################# +# Compatibility Layer for pysam < 0.8 + +# import all declarations from htslib +from pysam.libchtslib cimport * + +cdef class AlignedRead(AlignedSegment): + pass + +cdef class Samfile(AlignmentFile): + pass + +# import the conversion functions +cdef extern from "htslib_util.h": + + # add *nbytes* into the variable length data of *src* at *pos* + bam1_t * pysam_bam_update(bam1_t * b, + size_t nbytes_old, + size_t nbytes_new, + uint8_t * pos) + + # now: static + int aux_type2size(int) + + char * pysam_bam_get_qname(bam1_t * b) + uint32_t * pysam_bam_get_cigar(bam1_t * b) + uint8_t * pysam_bam_get_seq(bam1_t * b) + uint8_t * pysam_bam_get_qual(bam1_t * b) + uint8_t * pysam_bam_get_aux(bam1_t * b) + int pysam_bam_get_l_aux(bam1_t * b) + char pysam_bam_seqi(uint8_t * s, int i) + + uint16_t pysam_get_bin(bam1_t * b) + uint8_t pysam_get_qual(bam1_t * b) + uint8_t pysam_get_l_qname(bam1_t * b) + uint16_t pysam_get_flag(bam1_t * b) + uint32_t pysam_get_n_cigar(bam1_t * b) + void pysam_set_bin(bam1_t * b, uint16_t v) + void pysam_set_qual(bam1_t * b, uint8_t v) + void pysam_set_l_qname(bam1_t * b, uint8_t v) + void pysam_set_flag(bam1_t * b, uint16_t v) + void pysam_set_n_cigar(bam1_t * b, uint32_t v) + void pysam_update_flag(bam1_t * b, uint16_t v, uint16_t flag) diff --git a/pysam/libcsamfile.pyx b/pysam/libcsamfile.pyx new file mode 100644 index 0000000..bde93d8 --- /dev/null +++ b/pysam/libcsamfile.pyx @@ -0,0 +1,43 @@ +# cython: embedsignature=True +# cython: profile=True +# adds doc-strings for sphinx +import tempfile +import os +import sys +import types +import itertools +import struct +import ctypes +import collections +import re +import platform +import warnings +from cpython cimport PyErr_SetString, \ + PyBytes_Check, \ + PyUnicode_Check, \ + PyBytes_FromStringAndSize + +from cpython.version cimport PY_MAJOR_VERSION + +from pysam.libcalignmentfile cimport AlignmentFile, AlignedSegment + + +cdef class Samfile(AlignmentFile): + '''Deprecated alternative for :class:`~pysam.AlignmentFile` + + Added for backwards compatibility with pysam <= 0.8.0 + ''' + pass + + +cdef class AlignedRead(AlignedSegment): + '''Deprecated alternative for :class:`~pysam.AlignedSegment` + + Added for backwards compatibility with pysam <= 0.8.0 + ''' + pass + + +__all__ = ['Samfile', 'AlignedRead'] + + diff --git a/pysam/libcsamtools.pxd b/pysam/libcsamtools.pxd new file mode 100644 index 0000000..ff797f8 --- /dev/null +++ b/pysam/libcsamtools.pxd @@ -0,0 +1,9 @@ +cdef extern from "samtools.pysam.h": + + int samtools_main(int argc, char *argv[]) + void samtools_set_stderr(int fd) + void samtools_unset_stderr() + void samtools_set_stdout(int fd) + void samtools_set_stdout_fn(const char *) + void samtools_unset_stdout() + void samtools_set_optind(int) diff --git a/pysam/libcsamtools.pyx b/pysam/libcsamtools.pyx new file mode 100644 index 0000000..cc60ace --- /dev/null +++ b/pysam/libcsamtools.pyx @@ -0,0 +1,2 @@ +def py_samtools(): + pass diff --git a/pysam/libctabix.pxd b/pysam/libctabix.pxd new file mode 100644 index 0000000..c986f03 --- /dev/null +++ b/pysam/libctabix.pxd @@ -0,0 +1,127 @@ +from libc.stdint cimport int8_t, int16_t, int32_t, int64_t +from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t +from libc.stdlib cimport malloc, calloc, realloc, free +from libc.string cimport memcpy, memcmp, strncpy, strlen, strdup +from libc.stdio cimport FILE, printf + +# Note: this replaces python "open"! +cdef extern from "fcntl.h": + int open(char *pathname, int flags) + +cdef extern from "unistd.h" nogil: + ctypedef int ssize_t + ssize_t read(int fd, void *buf, size_t count) + int close(int fd) + +from pysam.libchtslib cimport hts_idx_t, hts_itr_t, htsFile, \ + tbx_t, kstring_t, BGZF, HTSFile + + +# These functions are put here and not in chtslib.pxd in order +# to avoid warnings for unused functions. +cdef extern from "pysam_stream.h" nogil: + + ctypedef struct kstream_t: + pass + + ctypedef struct kseq_t: + kstring_t name + kstring_t comment + kstring_t seq + kstring_t qual + + kseq_t *kseq_init(BGZF *) + int kseq_read(kseq_t *) + void kseq_destroy(kseq_t *) + kstream_t *ks_init(BGZF *) + void ks_destroy(kstream_t *) + + # Retrieve characters from stream until delimiter + # is reached placing results in str. + int ks_getuntil(kstream_t *, + int delimiter, + kstring_t * str, + int * dret) + + +cdef class tabix_file_iterator: + cdef BGZF * fh + cdef kstream_t * kstream + cdef kstring_t buffer + cdef size_t size + cdef Parser parser + cdef int fd + cdef int duplicated_fd + cdef infile + + cdef __cnext__(self) + + +cdef class TabixFile(HTSFile): + # pointer to index structure + cdef tbx_t * index + + cdef readonly object filename_index + + cdef Parser parser + + cdef encoding + + +cdef class Parser: + cdef encoding + cdef parse(self, char * buffer, int len) + + +cdef class asTuple(Parser): + cdef parse(self, char * buffer, int len) + + +cdef class asGTF(Parser): + pass + + +cdef class asGFF3(Parser): + pass + + +cdef class asBed(Parser): + pass + + +cdef class asVCF(Parser): + pass + + +cdef class TabixIterator: + cdef hts_itr_t * iterator + cdef TabixFile tabixfile + cdef kstring_t buffer + cdef encoding + cdef int __cnext__(self) + + +cdef class TabixIteratorParsed(TabixIterator): + cdef Parser parser + + +cdef class GZIterator: + cdef object _filename + cdef BGZF * gzipfile + cdef kstream_t * kstream + cdef kstring_t buffer + cdef int __cnext__(self) + cdef encoding + + +cdef class GZIteratorHead(GZIterator): + pass + + +cdef class GZIteratorParsed(GZIterator): + cdef Parser parser + + +# Compatibility Layer for pysam < 0.8 +cdef class Tabixfile(TabixFile): + pass diff --git a/pysam/libctabix.pyx b/pysam/libctabix.pyx new file mode 100644 index 0000000..10177ce --- /dev/null +++ b/pysam/libctabix.pyx @@ -0,0 +1,1300 @@ +# cython: embedsignature=True +# cython: profile=True +############################################################################### +############################################################################### +# Cython wrapper for access to tabix indexed files in bgzf format +############################################################################### +# The principal classes and functions defined in this module are: +# +# class TabixFile class wrapping tabix indexed files in bgzf format +# +# class asTuple Parser class for tuples +# class asGTF Parser class for GTF formatted rows +# class asGFF3 Parser class for GFF3 formatted rows +# class asBed Parser class for Bed formatted rows +# class asVCF Parser class for VCF formatted rows +# +# class tabix_generic_iterator Streamed iterator of bgzf formatted files +# +# Additionally this module defines several additional classes that are part +# of the internal API. These are: +# +# class Parser base class for parsers of tab-separated rows +# class tabix_file_iterator +# class TabixIterator iterator class over rows in bgzf file +# class EmptyIterator +# +# For backwards compatibility, the following classes are also defined: +# +# class Tabixfile equivalent to TabixFile +# +############################################################################### +# +# The MIT License +# +# Copyright (c) 2015 Andreas Heger +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +import binascii +import os +import sys + +from libc.stdio cimport printf, fprintf, stderr +from libc.string cimport strerror +from libc.errno cimport errno +from posix.unistd cimport dup + +from cpython cimport PyErr_SetString, PyBytes_Check, \ + PyUnicode_Check, PyBytes_FromStringAndSize, \ + PyObject_AsFileDescriptor + +from cpython.version cimport PY_MAJOR_VERSION + +cimport pysam.libctabixproxies as ctabixproxies + +from pysam.libchtslib cimport htsFile, hts_open, hts_close, HTS_IDX_START,\ + BGZF, bgzf_open, bgzf_dopen, bgzf_close, bgzf_write, \ + tbx_index_build2, tbx_index_load2, tbx_itr_queryi, tbx_itr_querys, \ + tbx_conf_t, tbx_seqnames, tbx_itr_next, tbx_itr_destroy, \ + tbx_destroy, hisremote, region_list, hts_getline, \ + TBX_GENERIC, TBX_SAM, TBX_VCF, TBX_UCSC, htsExactFormat, bcf, \ + bcf_index_build2 + +from pysam.libcutils cimport force_bytes, force_str, charptr_to_str +from pysam.libcutils cimport encode_filename, from_string_and_size + +cdef class Parser: + + def __init__(self, encoding="ascii"): + self.encoding = encoding + + def set_encoding(self, encoding): + self.encoding = encoding + + def get_encoding(self): + return self.encoding + + cdef parse(self, char * buffer, int length): + raise NotImplementedError( + 'parse method of %s not implemented' % str(self)) + + def __call__(self, char * buffer, int length): + return self.parse(buffer, length) + + +cdef class asTuple(Parser): + '''converts a :term:`tabix row` into a python tuple. + + A field in a row is accessed by numeric index. + ''' + cdef parse(self, char * buffer, int len): + cdef ctabixproxies.TupleProxy r + r = ctabixproxies.TupleProxy(self.encoding) + # need to copy - there were some + # persistence issues with "present" + r.copy(buffer, len) + return r + + +cdef class asGFF3(Parser): + '''converts a :term:`tabix row` into a GFF record with the following + fields: + + +----------+----------+-------------------------------+ + |*Column* |*Name* |*Content* | + +----------+----------+-------------------------------+ + |1 |contig |the chromosome name | + +----------+----------+-------------------------------+ + |2 |feature |The feature type | + +----------+----------+-------------------------------+ + |3 |source |The feature source | + +----------+----------+-------------------------------+ + |4 |start |genomic start coordinate | + | | |(0-based) | + +----------+----------+-------------------------------+ + |5 |end |genomic end coordinate | + | | |(0-based) | + +----------+----------+-------------------------------+ + |6 |score |feature score | + +----------+----------+-------------------------------+ + |7 |strand |strand | + +----------+----------+-------------------------------+ + |8 |frame |frame | + +----------+----------+-------------------------------+ + |9 |attributes|the attribute field | + +----------+----------+-------------------------------+ + + ''' + cdef parse(self, char * buffer, int len): + cdef ctabixproxies.GFF3Proxy r + r = ctabixproxies.GFF3Proxy(self.encoding) + r.copy(buffer, len) + return r + + +cdef class asGTF(Parser): + '''converts a :term:`tabix row` into a GTF record with the following + fields: + + +----------+----------+-------------------------------+ + |*Column* |*Name* |*Content* | + +----------+----------+-------------------------------+ + |1 |contig |the chromosome name | + +----------+----------+-------------------------------+ + |2 |feature |The feature type | + +----------+----------+-------------------------------+ + |3 |source |The feature source | + +----------+----------+-------------------------------+ + |4 |start |genomic start coordinate | + | | |(0-based) | + +----------+----------+-------------------------------+ + |5 |end |genomic end coordinate | + | | |(0-based) | + +----------+----------+-------------------------------+ + |6 |score |feature score | + +----------+----------+-------------------------------+ + |7 |strand |strand | + +----------+----------+-------------------------------+ + |8 |frame |frame | + +----------+----------+-------------------------------+ + |9 |attributes|the attribute field | + +----------+----------+-------------------------------+ + + GTF formatted entries also define the following fields that + are derived from the attributes field: + + +--------------------+------------------------------+ + |*Name* |*Content* | + +--------------------+------------------------------+ + |gene_id |the gene identifier | + +--------------------+------------------------------+ + |transcript_id |the transcript identifier | + +--------------------+------------------------------+ + + ''' + cdef parse(self, char * buffer, int len): + cdef ctabixproxies.GTFProxy r + r = ctabixproxies.GTFProxy(self.encoding) + r.copy(buffer, len) + return r + + +cdef class asBed(Parser): + '''converts a :term:`tabix row` into a bed record + with the following fields: + + +-----------+-----------+------------------------------------------+ + |*Column* |*Field* |*Contents* | + | | | | + +-----------+-----------+------------------------------------------+ + |1 |contig |contig | + | | | | + +-----------+-----------+------------------------------------------+ + |2 |start |genomic start coordinate (zero-based) | + +-----------+-----------+------------------------------------------+ + |3 |end |genomic end coordinate plus one | + | | |(zero-based) | + +-----------+-----------+------------------------------------------+ + |4 |name |name of feature. | + +-----------+-----------+------------------------------------------+ + |5 |score |score of feature | + +-----------+-----------+------------------------------------------+ + |6 |strand |strand of feature | + +-----------+-----------+------------------------------------------+ + |7 |thickStart |thickStart | + +-----------+-----------+------------------------------------------+ + |8 |thickEnd |thickEnd | + +-----------+-----------+------------------------------------------+ + |9 |itemRGB |itemRGB | + +-----------+-----------+------------------------------------------+ + |10 |blockCount |number of bocks | + +-----------+-----------+------------------------------------------+ + |11 |blockSizes |',' separated string of block sizes | + +-----------+-----------+------------------------------------------+ + |12 |blockStarts|',' separated string of block genomic | + | | |start positions | + +-----------+-----------+------------------------------------------+ + + Only the first three fields are required. Additional + fields are optional, but if one is defined, all the preceding + need to be defined as well. + + ''' + cdef parse(self, char * buffer, int len): + cdef ctabixproxies.BedProxy r + r = ctabixproxies.BedProxy(self.encoding) + r.copy(buffer, len) + return r + + +cdef class asVCF(Parser): + '''converts a :term:`tabix row` into a VCF record with + the following fields: + + +----------+---------+------------------------------------+ + |*Column* |*Field* |*Contents* | + | | | | + +----------+---------+------------------------------------+ + |1 |contig |chromosome | + +----------+---------+------------------------------------+ + |2 |pos |chromosomal position, zero-based | + +----------+---------+------------------------------------+ + |3 |id |id | + +----------+---------+------------------------------------+ + |4 |ref |reference allele | + +----------+---------+------------------------------------+ + |5 |alt |alternate alleles | + +----------+---------+------------------------------------+ + |6 |qual |quality | + +----------+---------+------------------------------------+ + |7 |filter |filter | + +----------+---------+------------------------------------+ + |8 |info |info | + +----------+---------+------------------------------------+ + |9 |format |format specifier. | + +----------+---------+------------------------------------+ + + Access to genotypes is via index:: + + contig = vcf.contig + first_sample_genotype = vcf[0] + second_sample_genotype = vcf[1] + + ''' + cdef parse(self, char * buffer, int len): + cdef ctabixproxies.VCFProxy r + r = ctabixproxies.VCFProxy(self.encoding) + r.copy(buffer, len) + return r + + +cdef class TabixFile: + """Random access to bgzf formatted files that + have been indexed by :term:`tabix`. + + The file is automatically opened. The index file of file + ```` is expected to be called ``.tbi`` + by default (see parameter `index`). + + Parameters + ---------- + + filename : string + Filename of bgzf file to be opened. + + index : string + The filename of the index. If not set, the default is to + assume that the index is called ``filename.tbi` + + mode : char + The file opening mode. Currently, only ``r`` is permitted. + + parser : :class:`pysam.Parser` + + sets the default parser for this tabix file. If `parser` + is None, the results are returned as an unparsed string. + Otherwise, `parser` is assumed to be a functor that will return + parsed data (see for example :class:`~pysam.asTuple` and + :class:`~pysam.asGTF`). + + encoding : string + + The encoding passed to the parser + + Raises + ------ + + ValueError + if index file is missing. + + IOError + if file could not be opened + """ + def __cinit__(self, + filename, + mode='r', + parser=None, + index=None, + encoding="ascii", + *args, + **kwargs ): + + self.htsfile = NULL + self.is_remote = False + self.is_stream = False + self.parser = parser + self._open(filename, mode, index, *args, **kwargs) + self.encoding = encoding + + def _open( self, + filename, + mode='r', + index=None, + ): + '''open a :term:`tabix file` for reading.''' + + if mode != 'r': + raise ValueError("invalid file opening mode `%s`" % mode) + + if self.htsfile != NULL: + self.close() + self.htsfile = NULL + + filename_index = index or (filename + ".tbi") + # encode all the strings to pass to tabix + self.filename = encode_filename(filename) + self.filename_index = encode_filename(filename_index) + + self.is_stream = self.filename == b'-' + self.is_remote = hisremote(self.filename) + + if not self.is_remote: + if not os.path.exists(filename): + raise IOError("file `%s` not found" % filename) + + if not os.path.exists(filename_index): + raise IOError("index `%s` not found" % filename_index) + + # open file + cdef char *cfilename = self.filename + cdef char *cfilename_index = self.filename_index + with nogil: + self.htsfile = hts_open(cfilename, 'r') + + if self.htsfile == NULL: + raise IOError("could not open file `%s`" % filename) + + #if self.htsfile.format.category != region_list: + # raise ValueError("file does not contain region data") + + with nogil: + self.index = tbx_index_load2(cfilename, cfilename_index) + + if self.index == NULL: + raise IOError("could not open index for `%s`" % filename) + + if not self.is_stream: + self.start_offset = self.tell() + + def _dup(self): + '''return a copy of this tabix file. + + The file is being re-opened. + ''' + return TabixFile(self.filename, + mode="r", + parser=self.parser, + index=self.filename_index, + encoding=self.encoding) + + def fetch(self, + reference=None, + start=None, + end=None, + region=None, + parser=None, + multiple_iterators=False): + '''fetch one or more rows in a :term:`region` using 0-based + indexing. The region is specified by :term:`reference`, + *start* and *end*. Alternatively, a samtools :term:`region` + string can be supplied. + + Without *reference* or *region* all entries will be fetched. + + If only *reference* is set, all reads matching on *reference* + will be fetched. + + If *parser* is None, the default parser will be used for + parsing. + + Set *multiple_iterators* to true if you will be using multiple + iterators on the same file at the same time. The iterator + returned will receive its own copy of a filehandle to the file + effectively re-opening the file. Re-opening a file creates + some overhead, so beware. + + ''' + if not self.is_open(): + raise ValueError("I/O operation on closed file") + + # convert coordinates to region string, which is one-based + if reference: + if end is not None: + if end < 0: + raise ValueError("end out of range (%i)" % end) + if start is None: + start = 0 + + if start < 0: + raise ValueError("start out of range (%i)" % end) + elif start > end: + raise ValueError( + 'start (%i) >= end (%i)' % (start, end)) + elif start == end: + return EmptyIterator() + else: + region = '%s:%i-%i' % (reference, start + 1, end) + elif start is not None: + if start < 0: + raise ValueError("start out of range (%i)" % end) + region = '%s:%i' % (reference, start + 1) + else: + region = reference + + # get iterator + cdef hts_itr_t * itr + cdef char *cstr + cdef TabixFile fileobj + + # reopen the same file if necessary + if multiple_iterators: + fileobj = self._dup() + else: + fileobj = self + + if region is None: + # without region or reference - iterate from start + with nogil: + itr = tbx_itr_queryi(fileobj.index, + HTS_IDX_START, + 0, + 0) + else: + s = force_bytes(region, encoding=fileobj.encoding) + cstr = s + with nogil: + itr = tbx_itr_querys(fileobj.index, cstr) + + if itr == NULL: + if region is None: + if len(self.contigs) > 0: + # when accessing a tabix file created prior tabix 1.0 + # the full-file iterator is empty. + raise ValueError( + "could not create iterator, possible " + "tabix version mismatch") + else: + # possible reason is that the file is empty - + # return an empty iterator + return EmptyIterator() + else: + raise ValueError( + "could not create iterator for region '%s'" % + region) + + # use default parser if no parser is specified + if parser is None: + parser = fileobj.parser + + cdef TabixIterator a + if parser is None: + a = TabixIterator(encoding=fileobj.encoding) + else: + parser.set_encoding(fileobj.encoding) + a = TabixIteratorParsed(parser) + + a.tabixfile = fileobj + a.iterator = itr + + return a + + ############################################################### + ############################################################### + ############################################################### + ## properties + ############################################################### + property header: + '''the file header. + + The file header consists of the lines at the beginning of a + file that are prefixed by the comment character ``#``. + + .. note:: + The header is returned as an iterator presenting lines + without the newline character. + ''' + + def __get__(self): + + cdef char *cfilename = self.filename + cdef char *cfilename_index = self.filename_index + + cdef kstring_t buffer + buffer.l = buffer.m = 0 + buffer.s = NULL + + cdef htsFile * fp = NULL + cdef int KS_SEP_LINE = 2 + cdef tbx_t * tbx = NULL + lines = [] + with nogil: + fp = hts_open(cfilename, 'r') + + if fp == NULL: + raise OSError("could not open {} for reading header".format(self.filename)) + + with nogil: + tbx = tbx_index_load2(cfilename, cfilename_index) + + if tbx == NULL: + raise OSError("could not load .tbi/.csi index of {}".format(self.filename)) + + while hts_getline(fp, KS_SEP_LINE, &buffer) >= 0: + if not buffer.l or buffer.s[0] != tbx.conf.meta_char: + break + lines.append(force_str(buffer.s, self.encoding)) + + with nogil: + hts_close(fp) + free(buffer.s) + + return lines + + property contigs: + '''list of chromosome names''' + def __get__(self): + cdef char ** sequences + cdef int nsequences + + with nogil: + sequences = tbx_seqnames(self.index, &nsequences) + cdef int x + result = [] + for x from 0 <= x < nsequences: + result.append(force_str(sequences[x])) + + # htslib instructions: + # only free container, not the sequences themselves + free(sequences) + + return result + + def close(self): + ''' + closes the :class:`pysam.TabixFile`.''' + if self.htsfile != NULL: + hts_close(self.htsfile) + self.htsfile = NULL + if self.index != NULL: + tbx_destroy(self.index) + self.index = NULL + + def __dealloc__( self ): + # remember: dealloc cannot call other python methods + # note: no doc string + # note: __del__ is not called. + if self.htsfile != NULL: + hts_close(self.htsfile) + self.htsfile = NULL + if self.index != NULL: + tbx_destroy(self.index) + + +cdef class TabixIterator: + """iterates over rows in *tabixfile* in region + given by *tid*, *start* and *end*. + """ + + def __init__(self, encoding="ascii"): + self.encoding = encoding + + def __iter__(self): + self.buffer.s = NULL + self.buffer.l = 0 + self.buffer.m = 0 + + return self + + cdef int __cnext__(self): + '''iterate to next element. + + Return -5 if file has been closed when this function + was called. + ''' + if self.tabixfile.htsfile == NULL: + return -5 + + cdef int retval + + while 1: + with nogil: + retval = tbx_itr_next( + self.tabixfile.htsfile, + self.tabixfile.index, + self.iterator, + &self.buffer) + + if retval < 0: + break + + if self.buffer.s[0] != '#': + break + + return retval + + def __next__(self): + """python version of next(). + + pyrex uses this non-standard name instead of next() + """ + + cdef int retval = self.__cnext__() + if retval == -5: + raise IOError("iteration on closed file") + elif retval < 0: + raise StopIteration + + return charptr_to_str(self.buffer.s, self.encoding) + + def next(self): + return self.__next__() + + def __dealloc__(self): + if self.iterator != NULL: + tbx_itr_destroy(self.iterator) + if self.buffer.s != NULL: + free(self.buffer.s) + + +class EmptyIterator: + '''empty iterator''' + + def __iter__(self): + return self + + def next(self): + raise StopIteration() + + def __next__(self): + raise StopIteration() + + +cdef class TabixIteratorParsed(TabixIterator): + """iterates over mapped reads in a region. + + The *parser* determines the encoding. + + Returns parsed data. + """ + + def __init__(self, + Parser parser): + + TabixIterator.__init__(self) + self.parser = parser + + def __next__(self): + """python version of next(). + + pyrex uses this non-standard name instead of next() + """ + + cdef int retval = self.__cnext__() + if retval == -5: + raise IOError("iteration on closed file") + elif retval < 0: + raise StopIteration + + return self.parser.parse(self.buffer.s, + self.buffer.l) + + +cdef class GZIterator: + def __init__(self, filename, int buffer_size=65536, encoding="ascii"): + '''iterate line-by-line through gzip (or bgzip) + compressed file. + ''' + if not os.path.exists(filename): + raise IOError("No such file or directory: %s" % filename) + + filename = encode_filename(filename) + cdef char *cfilename = filename + with nogil: + self.gzipfile = bgzf_open(cfilename, "r") + self._filename = filename + self.kstream = ks_init(self.gzipfile) + self.encoding = encoding + + self.buffer.l = 0 + self.buffer.m = 0 + self.buffer.s = malloc(buffer_size) + + def __dealloc__(self): + '''close file.''' + if self.gzipfile != NULL: + bgzf_close(self.gzipfile) + self.gzipfile = NULL + if self.buffer.s != NULL: + free(self.buffer.s) + if self.kstream != NULL: + ks_destroy(self.kstream) + + def __iter__(self): + return self + + cdef int __cnext__(self): + cdef int dret = 0 + cdef int retval = 0 + while 1: + with nogil: + retval = ks_getuntil(self.kstream, '\n', &self.buffer, &dret) + + if retval < 0: + break + + return dret + return -1 + + def __next__(self): + """python version of next(). + """ + cdef int retval = self.__cnext__() + if retval < 0: + raise StopIteration + return force_str(self.buffer.s, self.encoding) + + +cdef class GZIteratorHead(GZIterator): + '''iterate line-by-line through gzip (or bgzip) + compressed file returning comments at top of file. + ''' + + def __next__(self): + """python version of next(). + """ + cdef int retval = self.__cnext__() + if retval < 0: + raise StopIteration + if self.buffer.s[0] == '#': + return self.buffer.s + else: + raise StopIteration + + +cdef class GZIteratorParsed(GZIterator): + '''iterate line-by-line through gzip (or bgzip) + compressed file returning comments at top of file. + ''' + + def __init__(self, parser): + self.parser = parser + + def __next__(self): + """python version of next(). + """ + cdef int retval = self.__cnext__() + if retval < 0: + raise StopIteration + + return self.parser.parse(self.buffer.s, + self.buffer.l) + + +def tabix_compress(filename_in, + filename_out, + force=False): + '''compress *filename_in* writing the output to *filename_out*. + + Raise an IOError if *filename_out* already exists, unless *force* + is set. + ''' + + if not force and os.path.exists(filename_out): + raise IOError( + "Filename '%s' already exists, use *force* to " + "overwrite" % filename_out) + + cdef int WINDOW_SIZE + cdef int c, r + cdef void * buffer + cdef BGZF * fp + cdef int fd_src + cdef bint is_empty = True + cdef int O_RDONLY + O_RDONLY = os.O_RDONLY + + WINDOW_SIZE = 64 * 1024 + + fn = encode_filename(filename_out) + cdef char *cfn = fn + with nogil: + fp = bgzf_open(cfn, "w") + if fp == NULL: + raise IOError("could not open '%s' for writing" % filename_out) + + fn = encode_filename(filename_in) + fd_src = open(fn, O_RDONLY) + if fd_src == 0: + raise IOError("could not open '%s' for reading" % filename_in) + + buffer = malloc(WINDOW_SIZE) + c = 1 + + while c > 0: + with nogil: + c = read(fd_src, buffer, WINDOW_SIZE) + if c > 0: + is_empty = False + r = bgzf_write(fp, buffer, c) + if r < 0: + free(buffer) + raise IOError("writing failed") + + free(buffer) + r = bgzf_close(fp) + if r < 0: + raise IOError("error %i when writing to file %s" % (r, filename_out)) + + r = close(fd_src) + # an empty file will return with -1, thus ignore this. + if r < 0: + if not (r == -1 and is_empty): + raise IOError("error %i when closing file %s" % (r, filename_in)) + + +def is_gzip_file(filename): + gzip_magic_hex = b'1f8b' + fd = os.open(filename, os.O_RDONLY) + header = os.read(fd, 2) + return header == binascii.a2b_hex(gzip_magic_hex) + + +def tabix_index(filename, + force=False, + seq_col=None, + start_col=None, + end_col=None, + preset=None, + meta_char="#", + int line_skip=0, + zerobased=False, + int min_shift=-1, + index=None, + keep_original=False, + csi=False, + ): + '''index tab-separated *filename* using tabix. + + An existing index will not be overwritten unless *force* is set. + + The index will be built from coordinates in columns *seq_col*, + *start_col* and *end_col*. + + The contents of *filename* have to be sorted by contig and + position - the method does not check if the file is sorted. + + Column indices are 0-based. Note that this is different from the + tabix command line utility where column indices start at 1. + + Coordinates in the file are assumed to be 1-based unless + *zerobased* is set. + + If *preset* is provided, the column coordinates are taken from a + preset. Valid values for preset are "gff", "bed", "sam", "vcf", + psltbl", "pileup". + + Lines beginning with *meta_char* and the first *line_skip* lines + will be skipped. + + If *filename* is not detected as a gzip file it will be automatically + compressed. The original file will be removed and only the compressed + file will be retained. + + *min-shift* sets the minimal interval size to 1<malloc( buffer_size ) +# self.size = buffer_size +# self.parser = parser + +# def __iter__(self): +# return self + +# cdef __cnext__(self): + +# cdef char * b +# cdef size_t nbytes +# b = self.buffer + +# while not feof( self.infile ): +# nbytes = getline( &b, &self.size, self.infile) + +# # stop at first error or eof +# if (nbytes == -1): break +# # skip comments +# if (b[0] == '#'): continue + +# # skip empty lines +# if b[0] == '\0' or b[0] == '\n' or b[0] == '\r': continue + +# # make sure that entry is complete +# if b[nbytes-1] != '\n' and b[nbytes-1] != '\r': +# result = b +# raise ValueError( "incomplete line at %s" % result ) + +# # make sure that this goes fully through C +# # otherwise buffer is copied to/from a +# # Python object causing segfaults as +# # the wrong memory is freed +# return self.parser.parse( b, nbytes ) + +# raise StopIteration + +# def __dealloc__(self): +# free(self.buffer) + +# def __next__(self): +# return self.__cnext__() + +######################################################### +######################################################### +######################################################### +## Iterators for parsing through unindexed files. +######################################################### +# cdef buildGzipError(void *gzfp): +# cdef int errnum = 0 +# cdef char *s = gzerror(gzfp, &errnum) +# return "error (%d): %s (%d: %s)" % (errno, strerror(errno), errnum, s) + + +cdef class tabix_file_iterator: + '''iterate over a compressed or uncompressed ``infile``. + ''' + + def __cinit__(self, + infile, + Parser parser, + int buffer_size=65536): + + if infile.closed: + raise ValueError("I/O operation on closed file.") + + self.infile = infile + + cdef int fd = PyObject_AsFileDescriptor(infile) + if fd == -1: + raise ValueError("I/O operation on closed file.") + + self.duplicated_fd = dup(fd) + + # From the manual: + # gzopen can be used to read a file which is not in gzip format; + # in this case gzread will directly read from the file without decompression. + # When reading, this will be detected automatically by looking + # for the magic two-byte gzip header. + self.fh = bgzf_dopen(self.duplicated_fd, 'r') + + if self.fh == NULL: + raise IOError('%s' % strerror(errno)) + + self.kstream = ks_init(self.fh) + + self.buffer.s = malloc(buffer_size) + #if self.buffer == NULL: + # raise MemoryError( "tabix_file_iterator: could not allocate %i bytes" % buffer_size) + #self.size = buffer_size + self.parser = parser + + def __iter__(self): + return self + + cdef __cnext__(self): + + cdef char * b + cdef int dret = 0 + cdef int retval = 0 + while 1: + with nogil: + retval = ks_getuntil(self.kstream, '\n', &self.buffer, &dret) + + if retval < 0: + break + #raise IOError('gzip error: %s' % buildGzipError( self.fh )) + + b = self.buffer.s + + # skip comments + if (b[0] == '#'): + continue + + # skip empty lines + if b[0] == '\0' or b[0] == '\n' or b[0] == '\r': + continue + + # gzgets terminates at \n, no need to test + + # parser creates a copy + return self.parser.parse(b, self.buffer.l) + + raise StopIteration + + def __dealloc__(self): + free(self.buffer.s) + ks_destroy(self.kstream) + bgzf_close(self.fh) + + def __next__(self): + return self.__cnext__() + + def next(self): + return self.__cnext__() + + +class tabix_generic_iterator: + '''iterate over ``infile``. + + Permits the use of file-like objects for example from the gzip module. + ''' + def __init__(self, infile, parser): + + self.infile = infile + if self.infile.closed: + raise ValueError("I/O operation on closed file.") + self.parser = parser + + def __iter__(self): + return self + + # cython version - required for python 3 + def __next__(self): + + cdef char * b + cdef char * cpy + cdef size_t nbytes + + encoding = self.parser.get_encoding() + + # note that GzipFile.close() does not close the file + # reading is still possible. + if self.infile.closed: + raise ValueError("I/O operation on closed file.") + + while 1: + + line = self.infile.readline() + if not line: + break + + s = force_bytes(line, encoding) + b = s + nbytes = len(line) + assert b[nbytes] == '\0' + + # skip comments + if b[0] == '#': + continue + + # skip empty lines + if b[0] == '\0' or b[0] == '\n' or b[0] == '\r': + continue + + # make sure that entry is complete + if b[nbytes-1] != '\n' and b[nbytes-1] != '\r': + raise ValueError("incomplete line at %s" % line) + + bytes_cpy = b + cpy = bytes_cpy + + return self.parser(cpy, nbytes) + + raise StopIteration + + # python version - required for python 2.7 + def next(self): + return self.__next__() + + +def tabix_iterator(infile, parser): + """return an iterator over all entries in a file. + + Results are returned parsed as specified by the *parser*. If + *parser* is None, the results are returned as an unparsed string. + Otherwise, *parser* is assumed to be a functor that will return + parsed data (see for example :class:`~pysam.asTuple` and + :class:`~pysam.asGTF`). + + """ + if PY_MAJOR_VERSION >= 3: + return tabix_generic_iterator(infile, parser) + else: + return tabix_file_iterator(infile, parser) + + # file objects can use C stdio + # used to be: isinstance( infile, file): + # if PY_MAJOR_VERSION >= 3: + # if isinstance( infile, io.IOBase ): + # return tabix_copy_iterator( infile, parser ) + # else: + # return tabix_generic_iterator( infile, parser ) + # else: +# if isinstance( infile, file ): +# return tabix_copy_iterator( infile, parser ) +# else: +# return tabix_generic_iterator( infile, parser ) + +cdef class Tabixfile(TabixFile): + """Tabixfile is deprecated: use TabixFile instead""" + pass + + +__all__ = [ + "tabix_index", + "tabix_compress", + "TabixFile", + "Tabixfile", + "asTuple", + "asGTF", + "asGFF3", + "asVCF", + "asBed", + "GZIterator", + "GZIteratorHead", + "tabix_iterator", + "tabix_generic_iterator", + "tabix_file_iterator", +] diff --git a/pysam/libctabixproxies.pxd b/pysam/libctabixproxies.pxd new file mode 100644 index 0000000..edea701 --- /dev/null +++ b/pysam/libctabixproxies.pxd @@ -0,0 +1,61 @@ +#cdef extern from "Python.h": +# ctypedef struct FILE + +from libc.stdint cimport uint8_t, int32_t, uint32_t, int64_t, uint64_t + +cdef class TupleProxy: + + cdef: + char * data + char ** fields + int nfields + int index + int nbytes + int offset + bint is_modified + + cdef encoding + + cpdef int getMaxFields(self) + cpdef int getMinFields(self) +# cdef char * _getindex(self, int idx) + + cdef take(self, char * buffer, size_t nbytes) + cdef present(self, char * buffer, size_t nbytes) + cdef copy(self, char * buffer, size_t nbytes, bint reset=*) + cdef update(self, char * buffer, size_t nbytes) + + +cdef class NamedTupleProxy(TupleProxy): + pass + + +cdef class GTFProxy(NamedTupleProxy): + cdef object attribute_dict + cpdef int getMaxFields(self) + cpdef int getMinFields(self) + + +cdef class GFF3Proxy(GTFProxy): + pass + + +cdef class BedProxy(NamedTupleProxy): + + cdef: + char * contig + uint32_t start + uint32_t end + int bedfields + + cpdef int getMaxFields(self) + cpdef int getMinFields(self) + cdef update(self, char * buffer, size_t nbytes) + +cdef class VCFProxy(NamedTupleProxy) : + + cdef: + char * contig + uint32_t pos + + cdef update(self, char * buffer, size_t nbytes) diff --git a/pysam/libctabixproxies.pyx b/pysam/libctabixproxies.pyx new file mode 100644 index 0000000..f95425a --- /dev/null +++ b/pysam/libctabixproxies.pyx @@ -0,0 +1,833 @@ +from cpython cimport PyBytes_FromStringAndSize + +from libc.stdio cimport printf, feof, fgets +from libc.string cimport strcpy, strlen, memcmp, memcpy, memchr, strstr, strchr +from libc.stdlib cimport free, malloc, calloc, realloc +from libc.stdlib cimport atoi, atol, atof + +from pysam.libcutils cimport force_bytes, force_str, charptr_to_str +from pysam.libcutils cimport encode_filename, from_string_and_size + +import collections +import copy + + +cdef char *StrOrEmpty(char * buffer): + if buffer == NULL: + return "" + else: return buffer + + +cdef int isNew(char * p, char * buffer, size_t nbytes): + """return True if `p` is located within `buffer` of size + `nbytes` + """ + if p == NULL: + return 0 + + return not (buffer <= p <= buffer + nbytes) + + +cdef class TupleProxy: + '''Proxy class for access to parsed row as a tuple. + + This class represents a table row for fast read-access. + + Access to individual fields is via the [] operator. + + Only read-only access is implemented. + + ''' + + def __cinit__(self, encoding="ascii"): + self.data = NULL + self.fields = NULL + self.index = 0 + self.nbytes = 0 + self.is_modified = 0 + self.nfields = 0 + # start counting at field offset + self.offset = 0 + self.encoding = encoding + + def __dealloc__(self): + cdef int x + if self.is_modified: + for x from 0 <= x < self.nfields: + if isNew(self.fields[x], self.data, self.nbytes): + free(self.fields[x]) + self.fields[x] = NULL + + if self.data != NULL: + free(self.data) + if self.fields != NULL: + free(self.fields) + + def __copy__(self): + if self.is_modified: + raise NotImplementedError( + "copying modified tuples is not implemented") + cdef TupleProxy n = type(self)() + n.copy(self.data, self.nbytes, reset=True) + return n + + def compare(self, TupleProxy other): + '''return -1,0,1, if contents in this are binary + <,=,> to *other* + + ''' + if self.is_modified or other.is_modified: + raise NotImplementedError( + 'comparison of modified TupleProxies is not implemented') + if self.data == other.data: + return 0 + + if self.nbytes < other.nbytes: + return -1 + elif self.nbytes > other.nbytes: + return 1 + return memcmp(self.data, other.data, self.nbytes) + + def __richcmp__(self, TupleProxy other, int op): + if op == 2: # == operator + return self.compare(other) == 0 + elif op == 3: # != operator + return self.compare(other) != 0 + else: + err_msg = "op {0} isn't implemented yet".format(op) + raise NotImplementedError(err_msg) + + cdef take(self, char * buffer, size_t nbytes): + '''start presenting buffer. + + Take ownership of the pointer. + ''' + self.data = buffer + self.nbytes = nbytes + self.update(buffer, nbytes) + + cdef present(self, char * buffer, size_t nbytes): + '''start presenting buffer. + + Do not take ownership of the pointer. + ''' + self.update(buffer, nbytes) + + cdef copy(self, char * buffer, size_t nbytes, bint reset=False): + '''start presenting buffer of size *nbytes*. + + Buffer is a '\0'-terminated string without the '\n'. + + Take a copy of buffer. + ''' + # +1 for '\0' + cdef int s = sizeof(char) * (nbytes + 1) + self.data = malloc(s) + if self.data == NULL: + raise ValueError("out of memory in TupleProxy.copy()") + memcpy(self.data, buffer, s) + + if reset: + for x from 0 <= x < nbytes: + if self.data[x] == '\0': + self.data[x] = '\t' + + self.update(self.data, nbytes) + + cpdef int getMinFields(self): + '''return minimum number of fields.''' + # 1 is not a valid tabix entry, but TupleProxy + # could be more generic. + return 1 + + cpdef int getMaxFields(self): + '''return maximum number of fields. Return + 0 for unknown length.''' + return 0 + + cdef update(self, char * buffer, size_t nbytes): + '''update internal data. + + *buffer* is a \0 terminated string. + + *nbytes* is the number of bytes in buffer (excluding + the \0) + + Update starts work in buffer, thus can be used + to collect any number of fields until nbytes + is exhausted. + + If max_fields is set, the number of fields is initialized to + max_fields. + + ''' + cdef char * pos + cdef char * old_pos + cdef int field + cdef int max_fields, min_fields, x + + assert strlen(buffer) == nbytes, \ + "length of buffer (%i) != number of bytes (%i)" % ( + strlen(buffer), nbytes) + + if buffer[nbytes] != 0: + raise ValueError("incomplete line at %s" % buffer) + + ################################# + # remove line breaks and feeds and update number of bytes + x = nbytes - 1 + while x > 0 and (buffer[x] == '\n' or buffer[x] == '\r'): + buffer[x] = '\0' + x -= 1 + self.nbytes = x + 1 + + ################################# + # clear data + if self.fields != NULL: + free(self.fields) + + for field from 0 <= field < self.nfields: + if isNew(self.fields[field], self.data, self.nbytes): + free(self.fields[field]) + + self.is_modified = self.nfields = 0 + + ################################# + # allocate new + max_fields = self.getMaxFields() + # pre-count fields - better would be + # to guess or dynamically grow + if max_fields == 0: + for x from 0 <= x < nbytes: + if buffer[x] == '\t': + max_fields += 1 + max_fields += 1 + + self.fields = calloc(max_fields, sizeof(char *)) + if self.fields == NULL: + raise ValueError("out of memory in TupleProxy.update()") + + ################################# + # start filling + field = 0 + self.fields[field] = pos = buffer + field += 1 + old_pos = pos + while 1: + + pos = memchr(pos, '\t', nbytes) + if pos == NULL: + break + if field >= max_fields: + raise ValueError( + "parsing error: more than %i fields in line: %s" % + (max_fields, buffer)) + + pos[0] = '\0' + pos += 1 + self.fields[field] = pos + field += 1 + nbytes -= pos - old_pos + if nbytes < 0: + break + old_pos = pos + self.nfields = field + if self.nfields < self.getMinFields(): + raise ValueError( + "parsing error: fewer than %i fields in line: %s" % + (self.getMinFields(), buffer)) + + def _getindex(self, int index): + '''return item at idx index''' + cdef int i = index + if i < 0: + i += self.nfields + if i < 0: + raise IndexError("list index out of range") + # apply offset - separating a fixed number + # of fields from a variable number such as in VCF + i += self.offset + if i >= self.nfields: + raise IndexError( + "list index out of range %i >= %i" % + (i, self.nfields)) + return force_str(self.fields[i], self.encoding) + + def __getitem__(self, key): + if type(key) == int: + return self._getindex(key) + # slice object + start, end, step = key.indices(self.nfields) + result = [] + for index in range(start, end, step): + result.append(self._getindex(index)) + return result + + def _setindex(self, index, value): + '''set item at idx index.''' + cdef int idx = index + if idx < 0: + raise IndexError("list index out of range") + if idx >= self.nfields: + raise IndexError("list index out of range") + + if isNew(self.fields[idx], self.data, self.nbytes): + free(self.fields[idx]) + + self.is_modified = 1 + + if value is None: + self.fields[idx] = NULL + return + + # conversion with error checking + value = force_bytes(value) + cdef char * tmp = value + self.fields[idx] = malloc((strlen( tmp ) + 1) * sizeof(char)) + if self.fields[idx] == NULL: + raise ValueError("out of memory" ) + strcpy(self.fields[idx], tmp) + + def __setitem__(self, index, value): + '''set item at *index* to *value*''' + cdef int i = index + if i < 0: + i += self.nfields + i += self.offset + + self._setindex(i, value) + + def __len__(self): + return self.nfields + + def __iter__(self): + self.index = 0 + return self + + def __next__(self): + """python version of next(). + """ + if self.index >= self.nfields: + raise StopIteration + cdef char * retval = self.fields[self.index] + self.index += 1 + if retval == NULL: + return None + else: + return force_str(retval, self.encoding) + + def __str__(self): + '''return original data''' + # copy and replace \0 bytes with \t characters + cdef char * cpy + if self.is_modified: + # todo: treat NULL values + result = [] + for x in xrange(0, self.nfields): + result.append(StrOrEmpty(self.fields[x]).decode(self.encoding)) + return "\t".join(result) + else: + cpy = calloc(sizeof(char), self.nbytes+1) + if cpy == NULL: + raise ValueError("out of memory") + memcpy(cpy, self.data, self.nbytes+1) + for x from 0 <= x < self.nbytes: + if cpy[x] == '\0': + cpy[x] = '\t' + result = cpy[:self.nbytes] + free(cpy) + r = result.decode(self.encoding) + return r + +def toDot(v): + '''convert value to '.' if None''' + if v is None: + return "." + else: + return str(v) + +def quote(v): + '''return a quoted attribute.''' + if isinstance(v, str): + return '"%s"' % v + else: + return str(v) + + +cdef class NamedTupleProxy(TupleProxy): + + map_key2field = {} + + def __setattr__(self, key, value): + '''set attribute.''' + cdef int idx + idx, f = self.map_key2field[key] + if self.nfields < idx: + raise KeyError("field %s not set" % key) + TupleProxy.__setitem__(self, idx, str(value)) + + def __getattr__(self, key): + cdef int idx + idx, f = self.map_key2field[key] + if self.nfields < idx: + raise KeyError("field %s not set" % key) + if f == str: + return force_str(self.fields[idx], + self.encoding) + return f(self.fields[idx]) + + +cdef dot_or_float(v): + if v == "" or v == b".": + return None + else: + try: + return int(v) + except ValueError: + return float(v) + + +cdef dot_or_int(v): + if v == "" or v == b".": + return None + else: + return int(v) + + +cdef dot_or_str(v): + if v == "" or v == b".": + return None + else: + return force_str(v) + + +cdef int from1based(v): + return atoi(v) - 1 + + +cdef str to1based(int v): + return str(v + 1) + + +cdef class GTFProxy(NamedTupleProxy): + '''Proxy class for access to GTF fields. + + This class represents a GTF entry for fast read-access. + Write-access has been added as well, though some care must + be taken. If any of the string fields (contig, source, ...) + are set, the new value is tied to the lifetime of the + argument that was supplied. + + The only exception is the attributes field when set from + a dictionary - this field will manage its own memory. + + ''' + separator = "; " + + # first value is field index, the tuple contains conversion + # functions for getting (converting internal string representation + # to pythonic value) and setting (converting pythonic value to + # interval string representation) + map_key2field = { + 'contig' : (0, (str, str)), + 'source' : (1, (dot_or_str, str)), + 'feature': (2, (dot_or_str, str)), + 'start' : (3, (from1based, to1based)), + 'end' : (4, (int, int)), + 'score' : (5, (dot_or_float, toDot)), + 'strand' : (6, (dot_or_str, str)), + 'frame' : (7, (dot_or_int, toDot)), + 'attributes': (8, (str, str))} + + def __cinit__(self): + # automatically calls TupleProxy.__cinit__ + self.attribute_dict = None + + cpdef int getMinFields(self): + '''return minimum number of fields.''' + return 9 + + cpdef int getMaxFields(self): + '''return max number of fields.''' + return 9 + + def to_dict(self): + """parse attributes - return as dict + + The dictionary can be modified to update attributes. + """ + if not self.attribute_dict: + self.attribute_dict = self.attribute_string2dict( + self.attributes) + self.is_modified = True + return self.attribute_dict + + def as_dict(self): + """deprecated: use :meth:`to_dict` + """ + return self.to_dict() + + def from_dict(self, d): + '''set attributes from a dictionary.''' + self.attribute_dict = None + attribute_string = force_bytes( + self.attribute_dict2string(d), + self.encoding) + self._setindex(8, attribute_string) + + def __str__(self): + cdef char * cpy + cdef int x + + if self.is_modified: + return "\t".join( + (self.contig, + toDot(self.source), + toDot(self.feature), + str(self.start + 1), + str(self.end), + toDot(self.score), + toDot(self.strand), + toDot(self.frame), + self.attributes)) + else: + return TupleProxy.__str__(self) + + def invert(self, int lcontig): + '''invert coordinates to negative strand coordinates + + This method will only act if the feature is on the + negative strand.''' + + if self.strand[0] == '-': + start = min(self.start, self.end) + end = max(self.start, self.end) + self.start, self.end = lcontig - end, lcontig - start + + def keys(self): + '''return a list of attributes defined in this entry.''' + if not self.attribute_dict: + self.attribute_dict = self.attribute_string2dict( + self.attributes) + return self.attribute_dict.keys() + + def __getitem__(self, key): + return self.__getattr__(key) + + def setAttribute(self, name, value): + '''convenience method to set an attribute. + ''' + if not self.attribute_dict: + self.attribute_dict = self.attribute_string2dict( + self.attributes) + self.attribute_dict[name] = value + self.is_modified = True + + def attribute_string2dict(self, s): + return collections.OrderedDict( + self.attribute_string2iterator(s)) + + def __cmp__(self, other): + return (self.contig, self.strand, self.start) < \ + (other.contig, other.strand, other.start) + + # python 3 compatibility + def __richcmp__(GTFProxy self, GTFProxy other, int op): + if op == 0: + return (self.contig, self.strand, self.start) < \ + (other.contig, other.strand, other.start) + elif op == 1: + return (self.contig, self.strand, self.start) <= \ + (other.contig, other.strand, other.start) + elif op == 2: + return self.compare(other) == 0 + elif op == 3: + return self.compare(other) != 0 + else: + err_msg = "op {0} isn't implemented yet".format(op) + raise NotImplementedError(err_msg) + + def dict2attribute_string(self, d): + """convert dictionary to attribute string in GTF format. + + """ + aa = [] + for k, v in d.items(): + if isinstance(v, str): + aa.append('{} "{}"'.format(k, v)) + else: + aa.append("{} {}".format(k, str(v))) + + return self.separator.join(aa) + ";" + + def attribute_string2iterator(self, s): + """convert attribute string in GTF format to records + and iterate over key, value pairs. + """ + + # remove comments + attributes = force_str(s, encoding=self.encoding) + + # separate into fields + # Fields might contain a ";", for example in ENSEMBL GTF file + # for mouse, v78: + # ...; transcript_name "TXNRD2;-001"; .... + # The current heuristic is to split on a semicolon followed by a + # space, see also http://mblab.wustl.edu/GTF22.html + + # Remove white space to prevent a last empty field. + fields = [x.strip() for x in attributes.strip().split("; ")] + for f in fields: + + # strip semicolon (GTF files without a space after the last semicolon) + if f.endswith(";"): + f = f[:-1] + + # split at most once in order to avoid separating + # multi-word values + d = [x.strip() for x in f.split(" ", 1)] + + n, v = d[0], d[1] + if len(d) > 2: + v = d[1:] + + if v[0] == '"' and v[-1] == '"': + v = v[1:-1] + else: + ## try to convert to a value + try: + v = float(v) + v = int(v) + except ValueError: + pass + except TypeError: + pass + + yield n, v + + def __getattr__(self, key): + """Generic lookup of attribute from GFF/GTF attributes + """ + + # Only called if there *isn't* an attribute with this name + cdef int idx + idx, f = self.map_key2field.get(key, (-1, None)) + if idx >= 0: + # deal with known attributes (fields 0-8) + if idx == 8: + # flush attributes if requested + if self.is_modified and self.attribute_dict is not None: + s = self.dict2attribute_string(self.attribute_dict) + TupleProxy._setindex(self, idx, s) + self.attribute_dict = None + return s + + if f[0] == str: + return force_str(self.fields[idx], + self.encoding) + else: + return f[0](self.fields[idx]) + else: + # deal with generic attributes (gene_id, ...) + if self.attribute_dict is None: + self.attribute_dict = self.attribute_string2dict( + self.attributes) + return self.attribute_dict[key] + + def __setattr__(self, key, value): + '''set attribute.''' + + # Note that __setattr__ is called before properties, so __setattr__ and + # properties don't mix well. This is different from __getattr__ which is + # called after any properties have been resolved. + cdef int idx + idx, f = self.map_key2field.get(key, (-1, None)) + + if idx >= 0: + if value is None: + s = "." + elif f[1] == str: + s = force_bytes(value, + self.encoding) + else: + s = str(f[1](value)) + TupleProxy._setindex(self, idx, s) + else: + if self.attribute_dict is None: + self.attribute_dict = self.attribute_string2dict( + self.attributes) + self.attribute_dict[key] = value + self.is_modified = True + + # for backwards compatibility + def asDict(self, *args, **kwargs): + return self.to_dict(*args, **kwargs) + + def fromDict(self, *args, **kwargs): + return self.from_dict(*args, **kwargs) + + +cdef class GFF3Proxy(GTFProxy): + + def dict2attribute_string(self, d): + """convert dictionary to attribute string.""" + return ";".join(["{}={}".format(k, v) for k, v in d.items()]) + + def attribute_string2iterator(self, s): + """convert attribute string in GFF3 format to records + and iterate over key, value pairs. + """ + + for f in (x.strip() for x in s.split(";")): + if not f: + continue + + key, value = f.split("=", 1) + value = value.strip() + + ## try to convert to a value + try: + value = float(value) + value = int(value) + except ValueError: + pass + except TypeError: + pass + + yield key.strip(), value + + +cdef class BedProxy(NamedTupleProxy): + '''Proxy class for access to Bed fields. + + This class represents a BED entry for fast read-access. + ''' + map_key2field = { + 'contig' : (0, str), + 'start' : (1, int), + 'end' : (2, int), + 'name' : (3, str), + 'score' : (4, float), + 'strand' : (5, str), + 'thickStart' : (6, int), + 'thickEnd' : (7, int), + 'itemRGB' : (8, str), + 'blockCount': (9, int), + 'blockSizes': (10, str), + 'blockStarts': (11, str), } + + cpdef int getMinFields(self): + '''return minimum number of fields.''' + return 3 + + cpdef int getMaxFields(self): + '''return max number of fields.''' + return 12 + + cdef update(self, char * buffer, size_t nbytes): + '''update internal data. + + nbytes does not include the terminal '\0'. + ''' + TupleProxy.update(self, buffer, nbytes) + + if self.nfields < 3: + raise ValueError( + "bed format requires at least three columns") + + # determines bed format + self.bedfields = self.nfields + + # do automatic conversion + self.contig = self.fields[0] + self.start = atoi(self.fields[1]) + self.end = atoi(self.fields[2]) + + # __setattr__ in base class seems to take precedence + # hence implement setters in __setattr__ + #property start: + # def __get__( self ): return self.start + #property end: + # def __get__( self ): return self.end + + def __str__(self): + + cdef int save_fields = self.nfields + # ensure fields to use correct format + self.nfields = self.bedfields + retval = TupleProxy.__str__(self) + self.nfields = save_fields + return retval + + def __setattr__(self, key, value): + '''set attribute.''' + if key == "start": + self.start = value + elif key == "end": + self.end = value + + cdef int idx + idx, f = self.map_key2field[key] + TupleProxy._setindex(self, idx, str(value)) + + +cdef class VCFProxy(NamedTupleProxy): + '''Proxy class for access to VCF fields. + + The genotypes are accessed via a numeric index. + Sample headers are not available. + ''' + map_key2field = { + 'contig' : (0, str), + 'pos' : (1, int), + 'id' : (2, str), + 'ref' : (3, str), + 'alt' : (4, str), + 'qual' : (5, str), + 'filter' : (6, str), + 'info' : (7, str), + 'format' : (8, str) } + + def __cinit__(self): + # automatically calls TupleProxy.__cinit__ + # start indexed access at genotypes + self.offset = 9 + + cdef update(self, char * buffer, size_t nbytes): + '''update internal data. + + nbytes does not include the terminal '\0'. + ''' + TupleProxy.update(self, buffer, nbytes) + + self.contig = self.fields[0] + # vcf counts from 1 - correct here + self.pos = atoi(self.fields[1]) - 1 + + def __len__(self): + '''return number of genotype fields.''' + return max(0, self.nfields - 9) + + property pos: + '''feature end (in 0-based open/closed coordinates).''' + def __get__(self): + return self.pos + + def __setattr__(self, key, value): + '''set attribute.''' + if key == "pos": + self.pos = value + value += 1 + + cdef int idx + idx, f = self.map_key2field[key] + TupleProxy._setindex(self, idx, str(value)) + + +__all__ = [ + "TupleProxy", + "NamedTupleProxy", + "GTFProxy", + "GFF3Proxy", + "BedProxy", + "VCFProxy"] diff --git a/pysam/libcutils.pxd b/pysam/libcutils.pxd new file mode 100644 index 0000000..f2d0aeb --- /dev/null +++ b/pysam/libcutils.pxd @@ -0,0 +1,28 @@ +######################################################################### +# Utility functions used across pysam +######################################################################### +cimport cython +from cpython cimport array as c_array + +cpdef parse_region(reference=*, start=*, end=*, region=*) + +######################################################################### +# Utility functions for quality string conversions + +cpdef c_array.array qualitystring_to_array(input_str, int offset=*) +cpdef array_to_qualitystring(c_array.array arr, int offset=*) +cpdef qualities_to_qualitystring(qualities, int offset=*) + +######################################################################## +######################################################################## +######################################################################## +## Python 3 compatibility functions +######################################################################## +cdef charptr_to_str(const char *s, encoding=*) +cdef bytes charptr_to_bytes(const char *s, encoding=*) +cdef charptr_to_str_w_len(const char* s, size_t n, encoding=*) +cdef force_str(object s, encoding=*) +cdef bytes force_bytes(object s, encoding=*) +cdef bytes encode_filename(object filename) +cdef from_string_and_size(const char *s, size_t length) + diff --git a/pysam/libcutils.pyx b/pysam/libcutils.pyx new file mode 100644 index 0000000..66f9bf9 --- /dev/null +++ b/pysam/libcutils.pyx @@ -0,0 +1,394 @@ +import types +import sys +import string +import re +import tempfile +import os +import io +from contextlib import contextmanager + +from cpython.version cimport PY_MAJOR_VERSION, PY_MINOR_VERSION +from cpython cimport PyBytes_Check, PyUnicode_Check +from cpython cimport array as c_array +from libc.stdlib cimport calloc, free +from libc.string cimport strncpy +from libc.stdio cimport fprintf, stderr, fflush +from libc.stdio cimport stdout as c_stdout +from posix.fcntl cimport open as c_open, O_WRONLY + +from libcsamtools cimport samtools_main, samtools_set_stdout, samtools_set_stderr, \ + samtools_unset_stderr, samtools_unset_stdout, samtools_set_stdout_fn, samtools_set_optind + +from libcbcftools cimport bcftools_main, bcftools_set_stdout, bcftools_set_stderr, \ + bcftools_unset_stderr, bcftools_unset_stdout, bcftools_set_stdout_fn, bcftools_set_optind + +##################################################################### +# hard-coded constants +cdef int MAX_POS = 2 << 29 + +################################################################# +# Utility functions for quality string conversions +cpdef c_array.array qualitystring_to_array(input_str, int offset=33): + """convert a qualitystring to an array of quality values.""" + if input_str is None: + return None + qs = force_bytes(input_str) + cdef char i + return c_array.array('B', [i - offset for i in qs]) + + +cpdef array_to_qualitystring(c_array.array qualities, int offset=33): + """convert an array of quality values to a string.""" + if qualities is None: + return None + cdef int x + + cdef c_array.array result + result = c_array.clone(qualities, len(qualities), zero=False) + + for x from 0 <= x < len(qualities): + result[x] = qualities[x] + offset + return force_str(result.tostring()) + + +cpdef qualities_to_qualitystring(qualities, int offset=33): + """convert a list or array of quality scores to the string + representation used in the SAM format. + + Parameters + ---------- + offset : int + offset to be added to the quality scores to arrive at + the characters of the quality string (default=33). + + Returns + ------- + string + a quality string + + """ + cdef char x + if qualities is None: + return None + elif isinstance(qualities, c_array.array): + return array_to_qualitystring(qualities, offset=offset) + else: + # tuples and lists + return force_str("".join([chr(x + offset) for x in qualities])) + + +######################################################################## +######################################################################## +######################################################################## +## Python 3 compatibility functions +######################################################################## + +cdef bint IS_PYTHON3 = PY_MAJOR_VERSION >= 3 + +cdef from_string_and_size(const char* s, size_t length): + if IS_PYTHON3: + return s[:length].decode("ascii") + else: + return s[:length] + + +# filename encoding (adapted from lxml.etree.pyx) +cdef str FILENAME_ENCODING = sys.getfilesystemencoding() or sys.getdefaultencoding() or 'ascii' + + +cdef bytes encode_filename(object filename): + """Make sure a filename is 8-bit encoded (or None).""" + if filename is None: + return None + elif PY_MAJOR_VERSION >= 3 and PY_MINOR_VERSION >= 2: + # Added to support path-like objects + return os.fsencode(filename) + elif PyBytes_Check(filename): + return filename + elif PyUnicode_Check(filename): + return filename.encode(FILENAME_ENCODING) + else: + raise TypeError("Argument must be string or unicode.") + + +cdef bytes force_bytes(object s, encoding="ascii"): + """convert string or unicode object to bytes, assuming + ascii encoding. + """ + if s is None: + return None + elif PyBytes_Check(s): + return s + elif PyUnicode_Check(s): + return s.encode(encoding) + else: + raise TypeError("Argument must be string, bytes or unicode.") + + +cdef charptr_to_str(const char* s, encoding="ascii"): + if s == NULL: + return None + if PY_MAJOR_VERSION < 3: + return s + else: + return s.decode(encoding) + + +cdef charptr_to_str_w_len(const char* s, size_t n, encoding="ascii"): + if s == NULL: + return None + if PY_MAJOR_VERSION < 3: + return s[:n] + else: + return s[:n].decode(encoding) + + +cdef bytes charptr_to_bytes(const char* s, encoding="ascii"): + if s == NULL: + return None + else: + return s + + +cdef force_str(object s, encoding="ascii"): + """Return s converted to str type of current Python + (bytes in Py2, unicode in Py3)""" + if s is None: + return None + if PY_MAJOR_VERSION < 3: + return s + elif PyBytes_Check(s): + return s.decode(encoding) + else: + # assume unicode + return s + + +cpdef parse_region(reference=None, + start=None, + end=None, + region=None): + """parse alternative ways to specify a genomic region. A region can + either be specified by :term:`reference`, `start` and + `end`. `start` and `end` denote 0-based, half-open intervals. + + Alternatively, a samtools :term:`region` string can be supplied. + + If any of the coordinates are missing they will be replaced by the + minimum (`start`) or maximum (`end`) coordinate. + + Note that region strings are 1-based, while `start` and `end` + denote an interval in python coordinates. + + Returns + ------- + + tuple : a tuple of `reference`, `start` and `end`. + + Raises + ------ + + ValueError + for invalid or out of bounds regions. + + """ + cdef long long rstart + cdef long long rend + + rstart = 0 + rend = MAX_POS + if start != None: + try: + rstart = start + except OverflowError: + raise ValueError('start out of range (%i)' % start) + + if end != None: + try: + rend = end + except OverflowError: + raise ValueError('end out of range (%i)' % end) + + if region: + region = force_str(region) + parts = re.split("[:-]", region) + reference = parts[0] + if len(parts) >= 2: + rstart = int(parts[1]) - 1 + if len(parts) >= 3: + rend = int(parts[2]) + + if not reference: + return None, 0, 0 + + if not 0 <= rstart < MAX_POS: + raise ValueError('start out of range (%i)' % rstart) + if not 0 <= rend <= MAX_POS: + raise ValueError('end out of range (%i)' % rend) + if rstart > rend: + raise ValueError( + 'invalid region: start (%i) > end (%i)' % (rstart, rend)) + + return force_bytes(reference), rstart, rend + + +def _pysam_dispatch(collection, + method, + args=None, + catch_stdout=True, + is_usage=False, + save_stdout=None): + '''call ``method`` in samtools/bcftools providing arguments in args. + + By default, stdout is redirected to a temporary file using the patched + C sources except for a few commands that have an explicit output option + (typically: -o). In these commands (such as samtools view), this explicit + option is used. If *is_usage* is True, then these explicit output options + will not be used. + + Catching of stdout can be turned off by setting *catch_stdout* to + False. + ''' + + if method == "index": + if args and not os.path.exists(args[0]): + raise IOError("No such file or directory: '%s'" % args[0]) + + if args is None: + args = [] + else: + args = list(args) + + # redirect stderr to file + stderr_h, stderr_f = tempfile.mkstemp() + samtools_set_stderr(stderr_h) + bcftools_set_stderr(stderr_h) + + # redirect stdout to file + if save_stdout: + stdout_f = save_stdout + stdout_h = c_open(force_bytes(stdout_f), + O_WRONLY) + if stdout_h == -1: + raise IOError("error while opening {} for writing".format(stdout_f)) + + samtools_set_stdout_fn(force_bytes(stdout_f)) + samtools_set_stdout(stdout_h) + bcftools_set_stdout_fn(force_bytes(stdout_f)) + bcftools_set_stdout(stdout_h) + + elif catch_stdout: + stdout_h, stdout_f = tempfile.mkstemp() + MAP_STDOUT_OPTIONS = { + "samtools": { + "view": "-o {}", + "mpileup": "-o {}", + "depad": "-o {}", + "calmd": "", # uses pysam_stdout_fn + }, + "bcftools": {} + } + + stdout_option = None + if collection == "bcftools": + # in bcftools, most methods accept -o, the exceptions + # are below: + if method not in ("index", "roh", "stats"): + stdout_option = "-o {}" + elif method in MAP_STDOUT_OPTIONS[collection]: + # special case - samtools view -c outputs on stdout + if not(method == "view" and "-c" in args): + stdout_option = MAP_STDOUT_OPTIONS[collection][method] + + if stdout_option is not None and not is_usage: + os.close(stdout_h) + samtools_set_stdout_fn(force_bytes(stdout_f)) + bcftools_set_stdout_fn(force_bytes(stdout_f)) + args.extend(stdout_option.format(stdout_f).split(" ")) + else: + samtools_set_stdout(stdout_h) + bcftools_set_stdout(stdout_h) + else: + samtools_set_stdout_fn("-") + bcftools_set_stdout_fn("-") + + # setup the function call to samtools/bcftools main + cdef char ** cargs + cdef int i, n, retval, l + n = len(args) + method = force_bytes(method) + collection = force_bytes(collection) + args = [force_bytes(a) for a in args] + + # allocate two more for first (dummy) argument (contains command) + cdef int extra_args = 0 + if method == b"index": + extra_args = 1 + # add extra arguments for commands accepting optional arguments + # such as 'samtools index x.bam [out.index]' + cargs = calloc(n + 2 + extra_args, sizeof(char *)) + cargs[0] = collection + cargs[1] = method + + # create copies of strings - getopt for long options permutes + # arguments + for i from 0 <= i < n: + l = len(args[i]) + cargs[i + 2] = calloc(l + 1, sizeof(char)) + strncpy(cargs[i + 2], args[i], l) + + # reset getopt. On OsX there getopt reset is different + # between getopt and getopt_long + if method in [b'index', b'cat', b'quickcheck', + b'faidx', b'kprobaln']: + samtools_set_optind(1) + bcftools_set_optind(1) + else: + samtools_set_optind(0) + bcftools_set_optind(0) + + # call samtools/bcftools + if collection == b"samtools": + retval = samtools_main(n + 2, cargs) + elif collection == b"bcftools": + retval = bcftools_main(n + 2, cargs) + + for i from 0 <= i < n: + free(cargs[i + 2]) + free(cargs) + + # get error messages + def _collect(fn): + out = [] + try: + with open(fn, "r") as inf: + out = inf.read() + except UnicodeDecodeError: + with open(fn, "rb") as inf: + # read binary output + out = inf.read() + finally: + os.remove(fn) + return out + + samtools_unset_stderr() + bcftools_unset_stderr() + + if save_stdout or catch_stdout: + samtools_unset_stdout() + bcftools_unset_stdout() + + out_stderr = _collect(stderr_f) + if save_stdout: + out_stdout = None + elif catch_stdout: + out_stdout = _collect(stdout_f) + else: + out_stdout = None + + return retval, out_stderr, out_stdout + + +__all__ = ["qualitystring_to_array", + "array_to_qualitystring", + "qualities_to_qualitystring"] diff --git a/pysam/libcvcf.pxd b/pysam/libcvcf.pxd new file mode 100644 index 0000000..139597f --- /dev/null +++ b/pysam/libcvcf.pxd @@ -0,0 +1,2 @@ + + diff --git a/pysam/libcvcf.pyx b/pysam/libcvcf.pyx new file mode 100644 index 0000000..956f8a5 --- /dev/null +++ b/pysam/libcvcf.pyx @@ -0,0 +1,1203 @@ +# cython: embedsignature=True +# +# Code to read, write and edit VCF files +# +# VCF lines are encoded as a dictionary with these keys (note: all lowercase): +# 'chrom': string +# 'pos': integer +# 'id': string +# 'ref': string +# 'alt': list of strings +# 'qual': integer +# 'filter': None (missing value), or list of keys (strings); empty list parsed as ["PASS"] +# 'info': dictionary of values (see below) +# 'format': list of keys (strings) +# sample keys: dictionary of values (see below) +# +# The sample keys are accessible through vcf.getsamples() +# +# A dictionary of values contains value keys (defined in ##INFO or +# ##FORMAT lines) which map to a list, containing integers, floats, +# strings, or characters. Missing values are replaced by a particular +# value, often -1 or . +# +# Genotypes are not stored as a string, but as a list of 1 or 3 +# elements (for haploid and diploid samples), the first (and last) the +# integer representing an allele, and the second the separation +# character. Note that there is just one genotype per sample, but for +# consistency the single element is stored in a list. +# +# Header lines other than ##INFO, ##FORMAT and ##FILTER are stored as +# (key, value) pairs and are accessible through getheader() +# +# The VCF class can be instantiated with a 'regions' variable +# consisting of tuples (chrom,start,end) encoding 0-based half-open +# segments. Only variants with a position inside the segment will be +# parsed. A regions parser is available under parse_regions. +# +# When instantiated, a reference can be passed to the VCF class. This +# may be any class that supports a fetch(chrom, start, end) method. +# +# NOTE: the position that is returned to Python is 0-based, NOT +# 1-based as in the VCF file. +# NOTE: There is also preliminary VCF functionality in the VariantFile class. +# +# TODO: +# only v4.0 writing is complete; alleles are not converted to v3.3 format +# + +from collections import namedtuple, defaultdict +from operator import itemgetter +import sys, re, copy, bisect + +from libc.stdlib cimport atoi +from libc.stdint cimport int8_t, int16_t, int32_t, int64_t +from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t + +cimport pysam.libctabix as libctabix +cimport pysam.libctabixproxies as libctabixproxies + +from pysam.libcutils cimport force_str + +import pysam + +gtsRegEx = re.compile("[|/\\\\]") +alleleRegEx = re.compile('^[ACGTN]+$') + +# Utility function. Uses 0-based coordinates +def get_sequence(chrom, start, end, fa): + # obtain sequence from .fa file, without truncation + if end<=start: return "" + if not fa: return "N"*(end-start) + if start<0: return "N"*(-start) + get_sequence(chrom, 0, end, fa).upper() + sequence = fa.fetch(chrom, start, end).upper() + if len(sequence) < end-start: sequence += "N"*(end-start-len(sequence)) + return sequence + +# Utility function. Parses a region string +def parse_regions( string ): + result = [] + for r in string.split(','): + elts = r.split(':') + chrom, start, end = elts[0], 0, 3000000000 + if len(elts)==1: pass + elif len(elts)==2: + if len(elts[1])>0: + ielts = elts[1].split('-') + if len(ielts) != 2: ValueError("Don't understand region string '%s'" % r) + try: start, end = int(ielts[0])-1, int(ielts[1]) + except: raise ValueError("Don't understand region string '%s'" % r) + else: + raise ValueError("Don't understand region string '%s'" % r) + result.append( (chrom,start,end) ) + return result + + +FORMAT = namedtuple('FORMAT','id numbertype number type description missingvalue') + +########################################################################################################### +# +# New class +# +########################################################################################################### + +cdef class VCFRecord(libctabixproxies.TupleProxy): + '''vcf record. + + initialized from data and vcf meta + ''' + + cdef vcf + cdef char * contig + cdef uint32_t pos + + def __init__(self, vcf): + self.vcf = vcf + self.encoding = vcf.encoding + + # if len(data) != len(self.vcf._samples): + # self.vcf.error(str(data), + # self.BAD_NUMBER_OF_COLUMNS, + # "expected %s for %s samples (%s), got %s" % \ + # (len(self.vcf._samples), + # len(self.vcf._samples), + # self.vcf._samples, + # len(data))) + + def __cinit__(self, vcf): + # start indexed access at genotypes + self.offset = 9 + + self.vcf = vcf + self.encoding = vcf.encoding + + def error(self, line, error, opt=None): + '''raise error.''' + # pass to vcf file for error handling + return self.vcf.error(line, error, opt) + + cdef update(self, char * buffer, size_t nbytes): + '''update internal data. + + nbytes does not include the terminal '\0'. + ''' + libctabixproxies.TupleProxy.update(self, buffer, nbytes) + + self.contig = self.fields[0] + # vcf counts from 1 - correct here + self.pos = atoi(self.fields[1]) - 1 + + def __len__(self): + return max(0, self.nfields - 9) + + property contig: + def __get__(self): return self.contig + + property pos: + def __get__(self): return self.pos + + property id: + def __get__(self): return self.fields[2] + + property ref: + def __get__(self): + return self.fields[3] + + property alt: + def __get__(self): + # convert v3.3 to v4.0 alleles below + alt = self.fields[4] + if alt == ".": alt = [] + else: alt = alt.upper().split(',') + return alt + + property qual: + def __get__(self): + qual = self.fields[5] + if qual == b".": qual = -1 + else: + try: qual = float(qual) + except: self.vcf.error(str(self),self.QUAL_NOT_NUMERICAL) + return qual + + property filter: + def __get__(self): + f = self.fields[6] + # postpone checking that filters exist. Encode missing filter or no filtering as empty list + if f == b"." or f == b"PASS" or f == b"0": return [] + else: return f.split(';') + + property info: + def __get__(self): + col = self.fields[7] + # dictionary of keys, and list of values + info = {} + if col != b".": + for blurp in col.split(';'): + elts = blurp.split('=') + if len(elts) == 1: v = None + elif len(elts) == 2: v = elts[1] + else: self.vcf.error(str(self),self.ERROR_INFO_STRING) + info[elts[0]] = self.vcf.parse_formatdata(elts[0], v, self.vcf._info, str(self.vcf)) + return info + + property format: + def __get__(self): + return self.fields[8].split(':') + + property samples: + def __get__(self): + return self.vcf._samples + + def __getitem__(self, key): + + # parse sample columns + values = self.fields[self.vcf._sample2column[key]].split(':') + alt = self.alt + format = self.format + + if len(values) > len(format): + self.vcf.error(str(self.line),self.BAD_NUMBER_OF_VALUES,"(found %s values in element %s; expected %s)" %\ + (len(values),key,len(format))) + + result = {} + for idx in range(len(format)): + expected = self.vcf.get_expected(format[idx], self.vcf._format, alt) + if idx < len(values): value = values[idx] + else: + if expected == -1: value = "." + else: value = ",".join(["."]*expected) + + result[format[idx]] = self.vcf.parse_formatdata(format[idx], value, self.vcf._format, str(self.data)) + if expected != -1 and len(result[format[idx]]) != expected: + self.vcf.error(str(self.data),self.BAD_NUMBER_OF_PARAMETERS, + "id=%s, expected %s parameters, got %s" % (format[idx],expected,result[format[idx]])) + if len(result[format[idx]] ) < expected: result[format[idx]] += [result[format[idx]][-1]]*(expected-len(result[format[idx]])) + result[format[idx]] = result[format[idx]][:expected] + + return result + + +cdef class asVCFRecord(libctabix.Parser): + '''converts a :term:`tabix row` into a VCF record.''' + cdef vcffile + def __init__(self, vcffile): + self.vcffile = vcffile + + cdef parse(self, char * buffer, int len): + cdef VCFRecord r + r = VCFRecord(self.vcffile) + r.copy(buffer, len) + return r + +class VCF(object): + + # types + NT_UNKNOWN = 0 + NT_NUMBER = 1 + NT_ALLELES = 2 + NT_NR_ALLELES = 3 + NT_GENOTYPES = 4 + NT_PHASED_GENOTYPES = 5 + + _errors = { 0:"UNKNOWN_FORMAT_STRING:Unknown file format identifier", + 1:"BADLY_FORMATTED_FORMAT_STRING:Formatting error in the format string", + 2:"BADLY_FORMATTED_HEADING:Did not find 9 required headings (CHROM, POS, ..., FORMAT) %s", + 3:"BAD_NUMBER_OF_COLUMNS:Wrong number of columns found (%s)", + 4:"POS_NOT_NUMERICAL:Position column is not numerical", + 5:"UNKNOWN_CHAR_IN_REF:Unknown character in reference field", + 6:"V33_BAD_REF:Reference should be single-character in v3.3 VCF", + 7:"V33_BAD_ALLELE:Cannot interpret allele for v3.3 VCF", + 8:"POS_NOT_POSITIVE:Position field must be >0", + 9:"QUAL_NOT_NUMERICAL:Quality field must be numerical, or '.'", + 10:"ERROR_INFO_STRING:Error while parsing info field", + 11:"ERROR_UNKNOWN_KEY:Unknown key (%s) found in formatted field (info; format; or filter)", + 12:"ERROR_FORMAT_NOT_NUMERICAL:Expected integer or float in formatted field; got %s", + 13:"ERROR_FORMAT_NOT_CHAR:Eexpected character in formatted field; got string", + 14:"FILTER_NOT_DEFINED:Identifier (%s) in filter found which was not defined in header", + 15:"FORMAT_NOT_DEFINED:Identifier (%s) in format found which was not defined in header", + 16:"BAD_NUMBER_OF_VALUES:Found too many of values in sample column (%s)", + 17:"BAD_NUMBER_OF_PARAMETERS:Found unexpected number of parameters (%s)", + 18:"BAD_GENOTYPE:Cannot parse genotype (%s)", + 19:"V40_BAD_ALLELE:Bad allele found for v4.0 VCF (%s)", + 20:"MISSING_REF:Reference allele missing", + 21:"V33_UNMATCHED_DELETION:Deleted sequence does not match reference (%s)", + 22:"V40_MISSING_ANGLE_BRACKETS:Format definition is not deliminted by angular brackets", + 23:"FORMAT_MISSING_QUOTES:Description field in format definition is not surrounded by quotes", + 24:"V40_FORMAT_MUST_HAVE_NAMED_FIELDS:Fields in v4.0 VCF format definition must have named fields", + 25:"HEADING_NOT_SEPARATED_BY_TABS:Heading line appears separated by spaces, not tabs", + 26:"WRONG_REF:Wrong reference %s", + 27:"ERROR_TRAILING_DATA:Numerical field ('%s') has semicolon-separated trailing data", + 28:"BAD_CHR_TAG:Error calculating chr tag for %s", + 29:"ZERO_LENGTH_ALLELE:Found zero-length allele", + 30:"MISSING_INDEL_ALLELE_REF_BASE:Indel alleles must begin with single reference base", + 31:"ZERO_FOR_NON_FLAG_FIELD: number set to 0, but type is not 'FLAG'", + 32:"ERROR_FORMAT_NOT_INTEGER:Expected integer in formatted field; got %s", + 33:"ERROR_FLAG_HAS_VALUE:Flag fields should not have a value", + } + + # tag-value pairs; tags are not unique; does not include fileformat, INFO, FILTER or FORMAT fields + _header = [] + + # version number; 33=v3.3; 40=v4.0 + _version = 40 + + # info, filter and format data + _info = {} + _filter = {} + _format = {} + + # header; and required columns + _required = ["CHROM","POS","ID","REF","ALT","QUAL","FILTER","INFO","FORMAT"] + _samples = [] + + # control behaviour + _ignored_errors = set([11,31]) # ERROR_UNKNOWN_KEY, ERROR_ZERO_FOR_NON_FLAG_FIELD + _warn_errors = set([]) + _leftalign = False + + # reference sequence + _reference = None + + # regions to include; None includes everything + _regions = None + + # statefull stuff + _lineno = -1 + _line = None + _lines = None + + def __init__(self, _copy=None, reference=None, regions=None, + lines=None, leftalign=False): + # make error identifiers accessible by name + for id in self._errors.keys(): + self.__dict__[self._errors[id].split(':')[0]] = id + if _copy != None: + self._leftalign = _copy._leftalign + self._header = _copy._header[:] + self._version = _copy._version + self._info = copy.deepcopy(_copy._info) + self._filter = copy.deepcopy(_copy._filter) + self._format = copy.deepcopy(_copy._format) + self._samples = _copy._samples[:] + self._sample2column = copy.deepcopy(_copy._sample2column) + self._ignored_errors = copy.deepcopy(_copy._ignored_errors) + self._warn_errors = copy.deepcopy(_copy._warn_errors) + self._reference = _copy._reference + self._regions = _copy._regions + if reference: self._reference = reference + if regions: self._regions = regions + if leftalign: self._leftalign = leftalign + self._lines = lines + self.encoding = "ascii" + self.tabixfile = None + + def error(self,line,error,opt=None): + if error in self._ignored_errors: return + errorlabel, errorstring = self._errors[error].split(':') + if opt: errorstring = errorstring % opt + errwarn = ["Error","Warning"][error in self._warn_errors] + errorstring += " in line %s: '%s'\n%s %s: %s\n" % (self._lineno,line,errwarn,errorlabel,errorstring) + if error in self._warn_errors: return + raise ValueError(errorstring) + + def parse_format(self,line,format,filter=False): + if self._version == 40: + if not format.startswith('<'): + self.error(line,self.V40_MISSING_ANGLE_BRACKETS) + format = "<"+format + if not format.endswith('>'): + self.error(line,self.V40_MISSING_ANGLE_BRACKETS) + format += ">" + format = format[1:-1] + data = {'id':None,'number':None,'type':None,'descr':None} + idx = 0 + while len(format.strip())>0: + elts = format.strip().split(',') + first, rest = elts[0], ','.join(elts[1:]) + if first.find('=') == -1 or (first.find('"')>=0 and first.find('=') > first.find('"')): + if self._version == 40: self.error(line,self.V40_FORMAT_MUST_HAVE_NAMED_FIELDS) + if idx == 4: self.error(line,self.BADLY_FORMATTED_FORMAT_STRING) + first = ["ID=","Number=","Type=","Description="][idx] + first + if first.startswith('ID='): data['id'] = first.split('=')[1] + elif first.startswith('Number='): data['number'] = first.split('=')[1] + elif first.startswith('Type='): data['type'] = first.split('=')[1] + elif first.startswith('Description='): + elts = format.split('"') + if len(elts)<3: + self.error(line,self.FORMAT_MISSING_QUOTES) + elts = first.split('=') + [rest] + data['descr'] = elts[1] + rest = '"'.join(elts[2:]) + if rest.startswith(','): rest = rest[1:] + else: + self.error(line,self.BADLY_FORMATTED_FORMAT_STRING) + format = rest + idx += 1 + if filter and idx==1: idx=3 # skip number and type fields for FILTER format strings + if not data['id']: self.error(line,self.BADLY_FORMATTED_FORMAT_STRING) + if 'descr' not in data: + # missing description + self.error(line,self.BADLY_FORMATTED_FORMAT_STRING) + data['descr'] = "" + if not data['type'] and not data['number']: + # fine, ##filter format + return FORMAT(data['id'],self.NT_NUMBER,0,"Flag",data['descr'],'.') + if not data['type'] in ["Integer","Float","Character","String","Flag"]: + self.error(line,self.BADLY_FORMATTED_FORMAT_STRING) + # I would like a missing-value field, but it isn't there + if data['type'] in ['Integer','Float']: data['missing'] = None # Do NOT use arbitrary int/float as missing value + else: data['missing'] = '.' + if not data['number']: self.error(line,self.BADLY_FORMATTED_FORMAT_STRING) + try: + n = int(data['number']) + t = self.NT_NUMBER + except ValueError: + n = -1 + if data['number'] == '.': t = self.NT_UNKNOWN + elif data['number'] == '#alleles': t = self.NT_ALLELES + elif data['number'] == '#nonref_alleles': t = self.NT_NR_ALLELES + elif data['number'] == '#genotypes': t = self.NT_GENOTYPES + elif data['number'] == '#phased_genotypes': t = self.NT_PHASED_GENOTYPES + elif data['number'] == '#phased_genotypes': t = self.NT_PHASED_GENOTYPES + # abbreviations added in VCF version v4.1 + elif data['number'] == 'A': t = self.NT_ALLELES + elif data['number'] == 'G': t = self.NT_GENOTYPES + else: + self.error(line,self.BADLY_FORMATTED_FORMAT_STRING) + # if number is 0 - type must be Flag + if n == 0 and data['type'] != 'Flag': + self.error( line, self.ZERO_FOR_NON_FLAG_FIELD) + # force type 'Flag' if no number + data['type'] = 'Flag' + + return FORMAT(data['id'],t,n,data['type'],data['descr'],data['missing']) + + def format_format( self, fmt, filter=False ): + values = [('ID',fmt.id)] + if fmt.number != None and not filter: + if fmt.numbertype == self.NT_UNKNOWN: nmb = "." + elif fmt.numbertype == self.NT_NUMBER: nmb = str(fmt.number) + elif fmt.numbertype == self.NT_ALLELES: nmb = "#alleles" + elif fmt.numbertype == self.NT_NR_ALLELES: nmb = "#nonref_alleles" + elif fmt.numbertype == self.NT_GENOTYPES: nmb = "#genotypes" + elif fmt.numbertype == self.NT_PHASED_GENOTYPES: nmb = "#phased_genotypes" + else: + raise ValueError("Unknown number type encountered: %s" % fmt.numbertype) + values.append( ('Number',nmb) ) + values.append( ('Type', fmt.type) ) + values.append( ('Description', '"' + fmt.description + '"') ) + if self._version == 33: + format = ",".join([v for k,v in values]) + else: + format = "<" + (",".join( ["%s=%s" % (k,v) for (k,v) in values] )) + ">" + return format + + def get_expected(self, format, formatdict, alt): + fmt = formatdict[format] + if fmt.numbertype == self.NT_UNKNOWN: return -1 + if fmt.numbertype == self.NT_NUMBER: return fmt.number + if fmt.numbertype == self.NT_ALLELES: return len(alt)+1 + if fmt.numbertype == self.NT_NR_ALLELES: return len(alt) + if fmt.numbertype == self.NT_GENOTYPES: return ((len(alt)+1)*(len(alt)+2)) // 2 + if fmt.numbertype == self.NT_PHASED_GENOTYPES: return (len(alt)+1)*(len(alt)+1) + return 0 + + + def _add_definition(self, formatdict, key, data, line ): + if key in formatdict: return + self.error(line,self.ERROR_UNKNOWN_KEY,key) + if data == None: + formatdict[key] = FORMAT(key,self.NT_NUMBER,0,"Flag","(Undefined tag)",".") + return + if data == []: data = [""] # unsure what type -- say string + if type(data[0]) == type(0.0): + formatdict[key] = FORMAT(key,self.NT_UNKNOWN,-1,"Float","(Undefined tag)",None) + return + if type(data[0]) == type(0): + formatdict[key] = FORMAT(key,self.NT_UNKNOWN,-1,"Integer","(Undefined tag)",None) + return + formatdict[key] = FORMAT(key,self.NT_UNKNOWN,-1,"String","(Undefined tag)",".") + + + # todo: trim trailing missing values + def format_formatdata( self, data, format, key=True, value=True, separator=":" ): + output, sdata = [], [] + if type(data) == type([]): # for FORMAT field, make data with dummy values + d = {} + for k in data: d[k] = [] + data = d + # convert missing values; and silently add definitions if required + for k in data: + self._add_definition( format, k, data[k], "(output)" ) + for idx,v in enumerate(data[k]): + if v == format[k].missingvalue: data[k][idx] = "." + # make sure GT comes first; and ensure fixed ordering; also convert GT data back to string + for k in data: + if k != 'GT': sdata.append( (k,data[k]) ) + sdata.sort() + if 'GT' in data: + sdata = [('GT',map(self.convertGTback,data['GT']))] + sdata + for k,v in sdata: + if v == []: v = None + if key and value: + if v != None: output.append( k+"="+','.join(map(str,v)) ) + else: output.append( k ) + elif key: output.append(k) + elif value: + if v != None: output.append( ','.join(map(str,v)) ) + else: output.append( "." ) # should not happen + # snip off trailing missing data + while len(output) > 1: + last = output[-1].replace(',','').replace('.','') + if len(last)>0: break + output = output[:-1] + return separator.join(output) + + + def enter_default_format(self): + for f in [FORMAT('GT',self.NT_NUMBER,1,'String','Genotype','.'), + FORMAT('DP',self.NT_NUMBER,1,'Integer','Read depth at this position for this sample',-1), + FORMAT('FT',self.NT_NUMBER,1,'String','Sample Genotype Filter','.'), + FORMAT('GL',self.NT_UNKNOWN,-1,'Float','Genotype likelihoods','.'), + FORMAT('GLE',self.NT_UNKNOWN,-1,'Float','Genotype likelihoods','.'), + FORMAT('GQ',self.NT_NUMBER,1,'Integer','Genotype Quality',-1), + FORMAT('PL',self.NT_GENOTYPES,-1,'Integer','Phred-scaled genotype likelihoods', '.'), + FORMAT('GP',self.NT_GENOTYPES,-1,'Float','Genotype posterior probabilities','.'), + FORMAT('GQ',self.NT_GENOTYPES,-1,'Integer','Conditional genotype quality','.'), + FORMAT('HQ',self.NT_UNKNOWN,-1,'Integer','Haplotype Quality',-1), # unknown number, since may be haploid + FORMAT('PS',self.NT_UNKNOWN,-1,'Integer','Phase set','.'), + FORMAT('PQ',self.NT_NUMBER,1,'Integer','Phasing quality',-1), + FORMAT('EC',self.NT_ALLELES,1,'Integer','Expected alternate allel counts',-1), + FORMAT('MQ',self.NT_NUMBER,1,'Integer','RMS mapping quality',-1), + ]: + if f.id not in self._format: + self._format[f.id] = f + + def parse_header(self, line): + + assert line.startswith('##') + elts = line[2:].split('=') + key = elts[0].strip() + value = '='.join(elts[1:]).strip() + if key == "fileformat": + if value == "VCFv3.3": + self._version = 33 + elif value == "VCFv4.0": + self._version = 40 + elif value == "VCFv4.1": + # AH - for testing + self._version = 40 + elif value == "VCFv4.2": + # AH - for testing + self._version = 40 + else: + self.error(line,self.UNKNOWN_FORMAT_STRING) + elif key == "INFO": + f = self.parse_format(line, value) + self._info[ f.id ] = f + elif key == "FILTER": + f = self.parse_format(line, value, filter=True) + self._filter[ f.id ] = f + elif key == "FORMAT": + f = self.parse_format(line, value) + self._format[ f.id ] = f + else: + # keep other keys in the header field + self._header.append( (key,value) ) + + + def write_header( self, stream ): + stream.write("##fileformat=VCFv%s.%s\n" % (self._version // 10, self._version % 10)) + for key,value in self._header: stream.write("##%s=%s\n" % (key,value)) + for var,label in [(self._info,"INFO"),(self._filter,"FILTER"),(self._format,"FORMAT")]: + for f in var.itervalues(): stream.write("##%s=%s\n" % (label,self.format_format(f,filter=(label=="FILTER")))) + + + def parse_heading( self, line ): + assert line.startswith('#') + assert not line.startswith('##') + headings = line[1:].split('\t') + # test for 8, as FORMAT field might be missing + if len(headings)==1 and len(line[1:].split()) >= 8: + self.error(line,self.HEADING_NOT_SEPARATED_BY_TABS) + headings = line[1:].split() + + for i,s in enumerate(self._required): + + if len(headings)<=i or headings[i] != s: + + if len(headings) <= i: + err = "(%sth entry not found)" % (i+1) + else: + err = "(found %s, expected %s)" % (headings[i],s) + + #self.error(line,self.BADLY_FORMATTED_HEADING,err) + # allow FORMAT column to be absent + if len(headings) == 8: + headings.append("FORMAT") + else: + self.error(line,self.BADLY_FORMATTED_HEADING,err) + + self._samples = headings[9:] + self._sample2column = dict( [(y,x+9) for x,y in enumerate( self._samples ) ] ) + + def write_heading( self, stream ): + stream.write("#" + "\t".join(self._required + self._samples) + "\n") + + def convertGT(self, GTstring): + if GTstring == ".": return ["."] + try: + gts = gtsRegEx.split(GTstring) + if len(gts) == 1: return [int(gts[0])] + if len(gts) != 2: raise ValueError() + if gts[0] == "." and gts[1] == ".": return [gts[0],GTstring[len(gts[0]):-len(gts[1])],gts[1]] + return [int(gts[0]),GTstring[len(gts[0]):-len(gts[1])],int(gts[1])] + except ValueError: + self.error(self._line,self.BAD_GENOTYPE,GTstring) + return [".","|","."] + + def convertGTback(self, GTdata): + return ''.join(map(str,GTdata)) + + def parse_formatdata( self, key, value, formatdict, line ): + # To do: check that the right number of values is present + f = formatdict.get(key,None) + if f == None: + self._add_definition(formatdict, key, value, line ) + f = formatdict[key] + if f.type == "Flag": + if value is not None: self.error(line,self.ERROR_FLAG_HAS_VALUE) + return [] + values = value.split(',') + # deal with trailing data in some early VCF files + if f.type in ["Float","Integer"] and len(values)>0 and values[-1].find(';') > -1: + self.error(line,self.ERROR_TRAILING_DATA,values[-1]) + values[-1] = values[-1].split(';')[0] + if f.type == "Integer": + for idx,v in enumerate(values): + try: + if v == ".": values[idx] = f.missingvalue + else: values[idx] = int(v) + except: + self.error(line,self.ERROR_FORMAT_NOT_INTEGER,"%s=%s" % (key, str(values))) + return [0] * len(values) + return values + elif f.type == "String": + self._line = line + if f.id == "GT": values = list(map( self.convertGT, values )) + return values + elif f.type == "Character": + for v in values: + if len(v) != 1: self.error(line,self.ERROR_FORMAT_NOT_CHAR) + return values + elif f.type == "Float": + for idx,v in enumerate(values): + if v == ".": values[idx] = f.missingvalue + try: return list(map(float,values)) + except: + self.error(line,self.ERROR_FORMAT_NOT_NUMERICAL,"%s=%s" % (key, str(values))) + return [0.0] * len(values) + else: + # can't happen + self.error(line,self.ERROR_INFO_STRING) + + def inregion(self, chrom, pos): + if not self._regions: return True + for r in self._regions: + if r[0] == chrom and r[1] <= pos < r[2]: return True + return False + + def parse_data( self, line, lineparse=False ): + cols = line.split('\t') + if len(cols) != len(self._samples)+9: + # gracefully deal with absent FORMAT column + # and those missing samples + if len(cols) == 8: + cols.append("") + else: + self.error(line, + self.BAD_NUMBER_OF_COLUMNS, + "expected %s for %s samples (%s), got %s" % (len(self._samples)+9, len(self._samples), self._samples, len(cols))) + + chrom = cols[0] + + # get 0-based position + try: pos = int(cols[1])-1 + except: self.error(line,self.POS_NOT_NUMERICAL) + if pos < 0: self.error(line,self.POS_NOT_POSITIVE) + + # implement filtering + if not self.inregion(chrom,pos): return None + + # end of first-pass parse for sortedVCF + if lineparse: return chrom, pos, line + + id = cols[2] + + ref = cols[3].upper() + if ref == ".": + self.error(line,self.MISSING_REF) + if self._version == 33: ref = get_sequence(chrom,pos,pos+1,self._reference) + else: ref = "" + else: + for c in ref: + if c not in "ACGTN": self.error(line,self.UNKNOWN_CHAR_IN_REF) + if "N" in ref: ref = get_sequence(chrom,pos,pos+len(ref),self._reference) + + # make sure reference is sane + if self._reference: + left = max(0,pos-100) + faref_leftflank = get_sequence(chrom,left,pos+len(ref),self._reference) + faref = faref_leftflank[pos-left:] + if faref != ref: self.error(line,self.WRONG_REF,"(reference is %s, VCF says %s)" % (faref,ref)) + ref = faref + + # convert v3.3 to v4.0 alleles below + if cols[4] == ".": alt = [] + else: alt = cols[4].upper().split(',') + + if cols[5] == ".": qual = -1 + else: + try: qual = float(cols[5]) + except: self.error(line,self.QUAL_NOT_NUMERICAL) + + # postpone checking that filters exist. Encode missing filter or no filtering as empty list + if cols[6] == "." or cols[6] == "PASS" or cols[6] == "0": filter = [] + else: filter = cols[6].split(';') + + # dictionary of keys, and list of values + info = {} + if cols[7] != ".": + for blurp in cols[7].split(';'): + elts = blurp.split('=') + if len(elts) == 1: v = None + elif len(elts) == 2: v = elts[1] + else: self.error(line,self.ERROR_INFO_STRING) + info[elts[0]] = self.parse_formatdata(elts[0], + v, + self._info, + line) + + # Gracefully deal with absent FORMAT column + if cols[8] == "": format = [] + else: format = cols[8].split(':') + + # check: all filters are defined + for f in filter: + if f not in self._filter: self.error(line,self.FILTER_NOT_DEFINED, f) + + # check: format fields are defined + if self._format: + for f in format: + if f not in self._format: self.error(line,self.FORMAT_NOT_DEFINED, f) + + # convert v3.3 alleles + if self._version == 33: + if len(ref) != 1: self.error(line,self.V33_BAD_REF) + newalts = [] + have_deletions = False + for a in alt: + if len(a) == 1: a = a + ref[1:] # SNP; add trailing reference + elif a.startswith('I'): a = ref[0] + a[1:] + ref[1:] # insertion just beyond pos; add first and trailing reference + elif a.startswith('D'): # allow D and D + have_deletions = True + try: + l = int(a[1:]) # throws ValueError if sequence + if len(ref) < l: # add to reference if necessary + addns = get_sequence(chrom,pos+len(ref),pos+l,self._reference) + ref += addns + for i,na in enumerate(newalts): newalts[i] = na+addns + a = ref[l:] # new deletion, deleting pos...pos+l + except ValueError: + s = a[1:] + if len(ref) < len(s): # add Ns to reference if necessary + addns = get_sequence(chrom,pos+len(ref),pos+len(s),self._reference) + if not s.endswith(addns) and addns != 'N'*len(addns): + self.error(line,self.V33_UNMATCHED_DELETION, + "(deletion is %s, reference is %s)" % (a,get_sequence(chrom,pos,pos+len(s),self._reference))) + ref += addns + for i,na in enumerate(newalts): newalts[i] = na+addns + a = ref[len(s):] # new deletion, deleting from pos + else: + self.error(line,self.V33_BAD_ALLELE) + newalts.append(a) + alt = newalts + # deletion alleles exist, add dummy 1st reference allele, and account for leading base + if have_deletions: + if pos == 0: + # Petr Danacek's: we can't have a leading nucleotide at (1-based) position 1 + addn = get_sequence(chrom,pos+len(ref),pos+len(ref)+1,self._reference) + ref += addn + alt = [allele+addn for allele in alt] + else: + addn = get_sequence(chrom,pos-1,pos,self._reference) + ref = addn + ref + alt = [addn + allele for allele in alt] + pos -= 1 + else: + # format v4.0 -- just check for nucleotides + for allele in alt: + if not alleleRegEx.match(allele): + self.error(line,self.V40_BAD_ALLELE,allele) + + # check for leading nucleotide in indel calls + for allele in alt: + if len(allele) != len(ref): + if len(allele) == 0: self.error(line,self.ZERO_LENGTH_ALLELE) + if ref[0].upper() != allele[0].upper() and "N" not in (ref[0]+allele[0]).upper(): + self.error(line,self.MISSING_INDEL_ALLELE_REF_BASE) + + # trim trailing bases in alleles + # AH: not certain why trimming this needs to be added + # disabled now for unit testing + # if alt: + # for i in range(1,min(len(ref),min(map(len,alt)))): + # if len(set(allele[-1].upper() for allele in alt)) > 1 or ref[-1].upper() != alt[0][-1].upper(): + # break + # ref, alt = ref[:-1], [allele[:-1] for allele in alt] + + # left-align alleles, if a reference is available + if self._leftalign and self._reference: + while left < pos: + movable = True + for allele in alt: + if len(allele) > len(ref): + longest, shortest = allele, ref + else: + longest, shortest = ref, allele + if len(longest) == len(shortest) or longest[:len(shortest)].upper() != shortest.upper(): + movable = False + if longest[-1].upper() != longest[len(shortest)-1].upper(): + movable = False + if not movable: + break + ref = ref[:-1] + alt = [allele[:-1] for allele in alt] + if min([len(allele) for allele in alt]) == 0 or len(ref) == 0: + ref = faref_leftflank[pos-left-1] + ref + alt = [faref_leftflank[pos-left-1] + allele for allele in alt] + pos -= 1 + + # parse sample columns + samples = [] + for sample in cols[9:]: + dict = {} + values = sample.split(':') + if len(values) > len(format): + self.error(line,self.BAD_NUMBER_OF_VALUES,"(found %s values in element %s; expected %s)" % (len(values),sample,len(format))) + for idx in range(len(format)): + expected = self.get_expected(format[idx], self._format, alt) + if idx < len(values): value = values[idx] + else: + if expected == -1: value = "." + else: value = ",".join(["."]*expected) + + dict[format[idx]] = self.parse_formatdata(format[idx], + value, + self._format, + line) + if expected != -1 and len(dict[format[idx]]) != expected: + self.error(line,self.BAD_NUMBER_OF_PARAMETERS, + "id=%s, expected %s parameters, got %s" % (format[idx],expected,dict[format[idx]])) + if len(dict[format[idx]] ) < expected: dict[format[idx]] += [dict[format[idx]][-1]]*(expected-len(dict[format[idx]])) + dict[format[idx]] = dict[format[idx]][:expected] + samples.append( dict ) + + # done + d = {'chrom':chrom, + 'pos':pos, # return 0-based position + 'id':id, + 'ref':ref, + 'alt':alt, + 'qual':qual, + 'filter':filter, + 'info':info, + 'format':format} + for key,value in zip(self._samples,samples): + d[key] = value + + return d + + + def write_data(self, stream, data): + required = ['chrom','pos','id','ref','alt','qual','filter','info','format'] + self._samples + for k in required: + if k not in data: raise ValueError("Required key %s not found in data" % str(k)) + if data['alt'] == []: alt = "." + else: alt = ",".join(data['alt']) + if data['filter'] == None: filter = "." + elif data['filter'] == []: + if self._version == 33: filter = "0" + else: filter = "PASS" + else: filter = ';'.join(data['filter']) + if data['qual'] == -1: qual = "." + else: qual = str(data['qual']) + + output = [data['chrom'], + str(data['pos']+1), # change to 1-based position + data['id'], + data['ref'], + alt, + qual, + filter, + self.format_formatdata( + data['info'], self._info, separator=";"), + self.format_formatdata( + data['format'], self._format, value=False)] + + for s in self._samples: + output.append(self.format_formatdata( + data[s], self._format, key=False)) + + stream.write( "\t".join(output) + "\n" ) + + def _parse_header(self, stream): + self._lineno = 0 + for line in stream: + line = force_str(line, self.encoding) + self._lineno += 1 + if line.startswith('##'): + self.parse_header(line.strip()) + elif line.startswith('#'): + self.parse_heading(line.strip()) + self.enter_default_format() + else: + break + return line + + def _parse(self, line, stream): + # deal with files with header only + if line.startswith("##"): return + if len(line.strip()) > 0: + d = self.parse_data( line.strip() ) + if d: yield d + for line in stream: + self._lineno += 1 + if self._lines and self._lineno > self._lines: raise StopIteration + d = self.parse_data( line.strip() ) + if d: yield d + + ###################################################################################################### + # + # API follows + # + ###################################################################################################### + + def getsamples(self): + """ List of samples in VCF file """ + return self._samples + + def setsamples(self,samples): + """ List of samples in VCF file """ + self._samples = samples + + def getheader(self): + """ List of header key-value pairs (strings) """ + return self._header + + def setheader(self,header): + """ List of header key-value pairs (strings) """ + self._header = header + + def getinfo(self): + """ Dictionary of ##INFO tags, as VCF.FORMAT values """ + return self._info + + def setinfo(self,info): + """ Dictionary of ##INFO tags, as VCF.FORMAT values """ + self._info = info + + def getformat(self): + """ Dictionary of ##FORMAT tags, as VCF.FORMAT values """ + return self._format + + def setformat(self,format): + """ Dictionary of ##FORMAT tags, as VCF.FORMAT values """ + self._format = format + + def getfilter(self): + """ Dictionary of ##FILTER tags, as VCF.FORMAT values """ + return self._filter + + def setfilter(self,filter): + """ Dictionary of ##FILTER tags, as VCF.FORMAT values """ + self._filter = filter + + def setversion(self, version): + if version != 33 and version != 40: raise ValueError("Can only handle v3.3 and v4.0 VCF files") + self._version = version + + def setregions(self, regions): + self._regions = regions + + def setreference(self, ref): + """ Provide a reference sequence; a Python class supporting a fetch(chromosome, start, end) method, e.g. PySam.FastaFile """ + self._reference = ref + + def ignoreerror(self, errorstring): + try: self._ignored_errors.add(self.__dict__[errorstring]) + except KeyError: raise ValueError("Invalid error string: %s" % errorstring) + + def warnerror(self, errorstring): + try: self._warn_errors.add(self.__dict__[errorstring]) + except KeyError: raise ValueError("Invalid error string: %s" % errorstring) + + def parse(self, stream): + """ Parse a stream of VCF-formatted lines. Initializes class instance and return generator """ + last_line = self._parse_header(stream) + # now return a generator that does the actual work. In this way the pre-processing is done + # before the first piece of data is yielded + return self._parse(last_line, stream) + + def write(self, stream, datagenerator): + """ Writes a VCF file to a stream, using a data generator (or list) """ + self.write_header(stream) + self.write_heading(stream) + for data in datagenerator: self.write_data(stream,data) + + def writeheader(self, stream): + """ Writes a VCF header """ + self.write_header(stream) + self.write_heading(stream) + + def compare_calls(self, pos1, ref1, alt1, pos2, ref2, alt2): + """ Utility function: compares two calls for equality """ + # a variant should always be assigned to a unique position, one base before + # the leftmost position of the alignment gap. If this rule is implemented + # correctly, the two positions must be equal for the calls to be identical. + if pos1 != pos2: return False + # from both calls, trim rightmost bases when identical. Do this safely, i.e. + # only when the reference bases are not Ns + while len(ref1)>0 and len(alt1)>0 and ref1[-1] == alt1[-1]: + ref1 = ref1[:-1] + alt1 = alt1[:-1] + while len(ref2)>0 and len(alt2)>0 and ref2[-1] == alt2[-1]: + ref2 = ref2[:-1] + alt2 = alt2[:-1] + # now, the alternative alleles must be identical + return alt1 == alt2 + +########################################################################################################### +########################################################################################################### +## API functions added by Andreas +########################################################################################################### + + def connect(self, filename, encoding="ascii"): + '''connect to tabix file.''' + self.encoding=encoding + self.tabixfile = pysam.Tabixfile(filename, encoding=encoding) + self._parse_header(self.tabixfile.header) + + def __del__(self): + self.close() + self.tabixfile = None + + def close(self): + if self.tabixfile: + self.tabixfile.close() + self.tabixfile = None + + def fetch(self, + reference=None, + start=None, + end=None, + region=None ): + """ Parse a stream of VCF-formatted lines. + Initializes class instance and return generator """ + return self.tabixfile.fetch( + reference, + start, + end, + region, + parser = asVCFRecord(self)) + + def validate(self, record): + '''validate vcf record. + + returns a validated record. + ''' + + raise NotImplementedError("needs to be checked") + + chrom, pos = record.chrom, record.pos + + # check reference + ref = record.ref + if ref == ".": + self.error(str(record),self.MISSING_REF) + if self._version == 33: ref = get_sequence(chrom,pos,pos+1,self._reference) + else: ref = "" + else: + for c in ref: + if c not in "ACGTN": self.error(str(record),self.UNKNOWN_CHAR_IN_REF) + if "N" in ref: ref = get_sequence(chrom, + pos, + pos+len(ref), + self._reference) + + # make sure reference is sane + if self._reference: + left = max(0,self.pos-100) + faref_leftflank = get_sequence(chrom,left,self.pos+len(ref),self._reference) + faref = faref_leftflank[pos-left:] + if faref != ref: self.error(str(record),self.WRONG_REF,"(reference is %s, VCF says %s)" % (faref,ref)) + ref = faref + + # check: format fields are defined + for f in record.format: + if f not in self._format: self.error(str(record),self.FORMAT_NOT_DEFINED, f) + + # check: all filters are defined + for f in record.filter: + if f not in self._filter: self.error(str(record),self.FILTER_NOT_DEFINED, f) + + # convert v3.3 alleles + if self._version == 33: + if len(ref) != 1: self.error(str(record),self.V33_BAD_REF) + newalts = [] + have_deletions = False + for a in alt: + if len(a) == 1: a = a + ref[1:] # SNP; add trailing reference + elif a.startswith('I'): a = ref[0] + a[1:] + ref[1:] # insertion just beyond pos; add first and trailing reference + elif a.startswith('D'): # allow D and D + have_deletions = True + try: + l = int(a[1:]) # throws ValueError if sequence + if len(ref) < l: # add to reference if necessary + addns = get_sequence(chrom,pos+len(ref),pos+l,self._reference) + ref += addns + for i,na in enumerate(newalts): newalts[i] = na+addns + a = ref[l:] # new deletion, deleting pos...pos+l + except ValueError: + s = a[1:] + if len(ref) < len(s): # add Ns to reference if necessary + addns = get_sequence(chrom,pos+len(ref),pos+len(s),self._reference) + if not s.endswith(addns) and addns != 'N'*len(addns): + self.error(str(record),self.V33_UNMATCHED_DELETION, + "(deletion is %s, reference is %s)" % (a,get_sequence(chrom,pos,pos+len(s),self._reference))) + ref += addns + for i,na in enumerate(newalts): newalts[i] = na+addns + a = ref[len(s):] # new deletion, deleting from pos + else: + self.error(str(record),self.V33_BAD_ALLELE) + newalts.append(a) + alt = newalts + # deletion alleles exist, add dummy 1st reference allele, and account for leading base + if have_deletions: + if pos == 0: + # Petr Danacek's: we can't have a leading nucleotide at (1-based) position 1 + addn = get_sequence(chrom,pos+len(ref),pos+len(ref)+1,self._reference) + ref += addn + alt = [allele+addn for allele in alt] + else: + addn = get_sequence(chrom,pos-1,pos,self._reference) + ref = addn + ref + alt = [addn + allele for allele in alt] + pos -= 1 + else: + # format v4.0 -- just check for nucleotides + for allele in alt: + if not alleleRegEx.match(allele): + self.error(str(record),self.V40_BAD_ALLELE,allele) + + + # check for leading nucleotide in indel calls + for allele in alt: + if len(allele) != len(ref): + if len(allele) == 0: self.error(str(record),self.ZERO_LENGTH_ALLELE) + if ref[0].upper() != allele[0].upper() and "N" not in (ref[0]+allele[0]).upper(): + self.error(str(record),self.MISSING_INDEL_ALLELE_REF_BASE) + + # trim trailing bases in alleles + # AH: not certain why trimming this needs to be added + # disabled now for unit testing + # for i in range(1,min(len(ref),min(map(len,alt)))): + # if len(set(allele[-1].upper() for allele in alt)) > 1 or ref[-1].upper() != alt[0][-1].upper(): + # break + # ref, alt = ref[:-1], [allele[:-1] for allele in alt] + + # left-align alleles, if a reference is available + if self._leftalign and self._reference: + while left < pos: + movable = True + for allele in alt: + if len(allele) > len(ref): + longest, shortest = allele, ref + else: + longest, shortest = ref, allele + if len(longest) == len(shortest) or longest[:len(shortest)].upper() != shortest.upper(): + movable = False + if longest[-1].upper() != longest[len(shortest)-1].upper(): + movable = False + if not movable: + break + ref = ref[:-1] + alt = [allele[:-1] for allele in alt] + if min([len(allele) for allele in alt]) == 0 or len(ref) == 0: + ref = faref_leftflank[pos-left-1] + ref + alt = [faref_leftflank[pos-left-1] + allele for allele in alt] + pos -= 1 + +__all__ = [ + "VCF", "VCFRecord", ] diff --git a/pysam/pysam_stream.h b/pysam/pysam_stream.h new file mode 100644 index 0000000..3a4eb16 --- /dev/null +++ b/pysam/pysam_stream.h @@ -0,0 +1,13 @@ +#ifndef PYSAM_STREAM_H +#define PYSAM_STREAM_H + +#include "htslib/kseq.h" + +// ####################################################### +// fastq parsing +// KSEQ_INIT(gzFile, gzread) +KSEQ_INIT(BGZF *, bgzf_read) + +//KSTREAM_INIT( gzFile, gzread, 16384) + +#endif diff --git a/pysam/pysam_util.c b/pysam/pysam_util.c new file mode 100644 index 0000000..349af44 --- /dev/null +++ b/pysam/pysam_util.c @@ -0,0 +1,36 @@ +#include +#include +#include +#include +#include +#include + +#include "htslib/khash.h" +#include "htslib/ksort.h" +#include "htslib/knetfile.h" + +#if !(_POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700) +/* + * A rudimentary emulation of getline() for systems that dont support it + * natively. Since this is used for PPD file reading, it assumes (possibly + * falsely) that BUFSIZ is big enough. + */ +ssize_t +getline(char **line, size_t *linelen, FILE *fp) +{ + if (*linelen == 0) + { + *linelen = BUFSIZ; + *line = malloc(*linelen); + } + + memset(*line, 0, *linelen); + fgets(*line, *linelen, fp); + + return (strlen(*line)); + +} +#endif + + + diff --git a/pysam/pysam_util.h b/pysam/pysam_util.h new file mode 100644 index 0000000..789e9d0 --- /dev/null +++ b/pysam/pysam_util.h @@ -0,0 +1,5 @@ +#ifndef PYSAM_UTIL_H +#define PYSAM_UTIL_H + + +#endif diff --git a/pysam/samtools.py b/pysam/samtools.py new file mode 100644 index 0000000..f81fe8f --- /dev/null +++ b/pysam/samtools.py @@ -0,0 +1,46 @@ +from utils import PysamDispatcher + +# samtools command line options to export in python +# +# import is a python reserved word. +SAMTOOLS_DISPATCH = { + # samtools 'documented' commands + "view": ("view", None), + "sort": ("sort", None), + "mpileup": ("mpileup", None), + "depth": ("depth", None), + "faidx": ("faidx", None), + "tview": ("tview", None), + "index": ("index", None), + "idxstats": ("idxstats", None), + "fixmate": ("fixmate", None), + "flagstat": ("flagstat", None), + "calmd": ("calmd", None), + "merge": ("merge", None), + "rmdup": ("rmdup", None), + "reheader": ("reheader", None), + "cat": ("cat", None), + "targetcut": ("targetcut", None), + "phase": ("phase", None), + "samimport": ("import", None), + "bam2fq": ("bam2fq", None), + "dict": ("dict", None), + "addreplacerg": ("addreplacerg", None), + "pad2unpad": ("pad2unpad", None), + "depad": ("pad2unpad", None), + "bedcov": ("bedcov", None), + "bamshuf": ("bamshuf", None), + "collate": ("collate", None), + "stats": ("stats", None), + "fasta": ("fasta", None), + "fastq": ("fastq", None), + "quickcheck": ("quickcheck", None), + "split": ("split", None), +} + +# instantiate samtools commands as python functions +for key, options in SAMTOOLS_DISPATCH.items(): + cmd, parser = options + globals()[key] = PysamDispatcher("samtools", cmd, parser) + +__all__ = list(SAMTOOLS_DISPATCH) diff --git a/pysam/utils.py b/pysam/utils.py new file mode 100644 index 0000000..528c411 --- /dev/null +++ b/pysam/utils.py @@ -0,0 +1,104 @@ +from pysam.libcutils import _pysam_dispatch + + +class SamtoolsError(Exception): + '''exception raised in case of an error incurred in the samtools + library.''' + + def __init__(self, value): + self.value = value + + def __str__(self): + return repr(self.value) + + +class PysamDispatcher(object): + '''The dispatcher emulates the samtools/bctools command line. + + Captures stdout and stderr. + + Raises a :class:`pysam.SamtoolsError` exception in case samtools + exits with an error code other than 0. + + Some command line options are associated with parsers. For + example, the samtools command "pileup -c" creates a tab-separated + table on standard output. In order to associate parsers with + options, an optional list of parsers can be supplied. The list + will be processed in order checking for the presence of each + option. + + If no parser is given or no appropriate parser is found, the + stdout output of samtools/bcftools commands will be returned. + + ''' + + dispatch = None + parsers = None + collection = None + + def __init__(self, collection, dispatch, parsers): + self.collection = collection + self.dispatch = dispatch + self.parsers = parsers + self.stderr = [] + + def __call__(self, *args, **kwargs): + '''execute a samtools command. + + Keyword arguments: + catch_stdout -- redirect stdout from the samtools command and + return as variable (default True) + save_stdout -- redirect stdout to a filename. + raw -- ignore any parsers associated with this samtools command. + split_lines -- return stdout (if catch_stdout is True and stderr + as a list of strings. + ''' + retval, stderr, stdout = _pysam_dispatch( + self.collection, + self.dispatch, + args, + catch_stdout=kwargs.get("catch_stdout", True), + save_stdout=kwargs.get("save_stdout", None)) + + if kwargs.get("split_lines", False): + stdout = stdout.splitlines() + if stderr: + stderr = stderr.splitlines() + + if retval: + raise SamtoolsError( + "%s returned with error %i: " + "stdout=%s, stderr=%s" % + (self.collection, + retval, + stdout, + stderr)) + + self.stderr = stderr + + # call parser for stdout: + if not kwargs.get("raw") and stdout and self.parsers: + for options, parser in self.parsers: + for option in options: + if option not in args: + break + else: + return parser(stdout) + + return stdout + + def get_messages(self): + return self.stderr + + def usage(self): + '''return the samtools usage information for this command''' + retval, stderr, stdout = _pysam_dispatch( + self.collection, + self.dispatch, + is_usage=True, + catch_stdout=True) + # some tools write usage to stderr, such as mpileup + if stderr: + return stderr + else: + return stdout diff --git a/pysam/version.py b/pysam/version.py new file mode 100644 index 0000000..43da562 --- /dev/null +++ b/pysam/version.py @@ -0,0 +1,10 @@ +# pysam versioning information +__version__ = "0.14" + +# TODO: upgrade number +__samtools_version__ = "1.7" + +# TODO: upgrade code and number +__bcftools_version__ = "1.6" + +__htslib_version__ = "1.7" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..6e8fc44 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +cython>=0.24.1 diff --git a/run_tests_travis.sh b/run_tests_travis.sh new file mode 100755 index 0000000..b2659bc --- /dev/null +++ b/run_tests_travis.sh @@ -0,0 +1,121 @@ +#!/usr/bin/env bash + +# test script for pysam. +# The script performs the following tasks: +# 1. Setup a conda environment and install dependencies via conda +# 2. Build pysam via the conda recipe +# 3. Build pysam via setup.py from repository +# 4. Run tests on the setup.py version +# 5. Additional build tests +# 5.1 pip install with cython +# 5.2 pip install without cython +# 5.3 pip install without cython and without configure options + +pushd . + +WORKDIR=`pwd` + +#Install miniconda python +if [ $TRAVIS_OS_NAME == "osx" ]; then + wget https://repo.continuum.io/miniconda/Miniconda3-latest-MacOSX-x86_64.sh -O Miniconda3.sh +else + wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O Miniconda3.sh --no-check-certificate # Default OS versions are old and have SSL / CERT issues +fi + +bash Miniconda3.sh -b + +# Create a new conda environment with the target python version +~/miniconda3/bin/conda install conda-build -y +~/miniconda3/bin/conda create -q -y --name testenv python=$CONDA_PY cython numpy pytest psutil pip + +# activate testenv environment +source ~/miniconda3/bin/activate testenv + +conda config --add channels r +conda config --add channels defaults +conda config --add channels conda-forge +conda config --add channels bioconda + +# pin versions, so that tests do not fail when pysam/htslib out of step +# add htslib dependencies +conda install -y "samtools=1.7" "bcftools=1.6" "htslib=1.7" xz curl bzip2 + +# Need to make C compiler and linker use the anaconda includes and libraries: +export PREFIX=~/miniconda3/ +export CFLAGS="-I${PREFIX}/include -L${PREFIX}/lib" +export HTSLIB_CONFIGURE_OPTIONS="--disable-libcurl --disable-lzma" + +samtools --version +htslib --version +bcftools --version + +# Try building conda recipe first +~/miniconda3/bin/conda-build ci/conda-recipe/ --python=$CONDA_PY + +# install code from the repository via setup.py +echo "installing via setup.py from repository" +python setup.py install + +# create auxilliary data +echo +echo 'building test data' +echo +make -C tests/pysam_data +make -C tests/cbcf_data + +# echo any limits that are in place +ulimit -a + +# run tests +pytest + +if [ $? != 0 ]; then + exit 1 +fi + +# build source tar-ball. Make sure to run 'build' target so that .pyx +# files are cythonized. +python setup.py build sdist + +if [ $? != 0 ]; then + exit 1 +fi + +# check for presence of config.h files +echo "checking for presence of config.h files in tar-ball" +tar -tvzf dist/pysam-*.tar.gz | grep "config.h$" + +if [ $? != 1 ]; then + echo "ERROR: found config.h in tar-ball" + tar -tvzf dist/pysam-*.tar.gz | grep "config.h%" + exit 1 +fi + +# test pip installation from tar-ball with cython +echo "pip installing with cython" +pip install --verbose --no-deps --no-binary=:all: dist/pysam-*.tar.gz + +if [ $? != 0 ]; then + exit 1 +fi + +# attempt pip installation without cython +echo "pip installing without cython" +~/miniconda3/bin/conda remove -y cython +~/miniconda3/bin/conda list +echo "python is" `which python` +pip install --verbose --no-deps --no-binary=:all: --force-reinstall --upgrade dist/pysam-*.tar.gz + +if [ $? != 0 ]; then + exit 1 +fi + +# attempt pip installation without cython and without +# command line options +echo "pip installing without cython and no configure options" +export HTSLIB_CONFIGURE_OPTIONS="" +pip install --verbose --no-deps --no-binary=:all: --force-reinstall --upgrade dist/pysam-*.tar.gz + +if [ $? != 0 ]; then + exit 1 +fi diff --git a/samtools/LICENSE b/samtools/LICENSE new file mode 100644 index 0000000..aeaae3c --- /dev/null +++ b/samtools/LICENSE @@ -0,0 +1,33 @@ +The MIT/Expat License + +Copyright (C) 2008-2014 Genome Research Ltd. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + +[The use of a range of years within a copyright notice in this distribution +should be interpreted as being equivalent to a list of years including the +first and last year specified and all consecutive years between them. + +For example, a copyright notice that reads "Copyright (C) 2005, 2007-2009, +2011-2012" should be interpreted as being identical to a notice that reads +"Copyright (C) 2005, 2007, 2008, 2009, 2011, 2012" and a copyright notice +that reads "Copyright (C) 2005-2012" should be interpreted as being identical +to a notice that reads "Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012".] diff --git a/samtools/README b/samtools/README new file mode 100644 index 0000000..7088f79 --- /dev/null +++ b/samtools/README @@ -0,0 +1,54 @@ +Samtools implements various utilities for post-processing alignments in the +SAM, BAM, and CRAM formats, including indexing, variant calling (in conjunction +with bcftools), and a simple alignment viewer. + + +Building samtools +================= + +The typical simple case of building Samtools using the HTSlib bundled within +this Samtools release tarball is done as follows: + + cd .../samtools-1.7 # Within the unpacked release directory + ./configure + make + +You may wish to copy the resulting samtools executable into somewhere on your +$PATH, or run it where it is. + +Rather than running-in-place like that, the next simplest typical case is to +install samtools etc properly into a directory of your choosing. Building for +installation using the HTSlib bundled within this Samtools release tarball, +and building the various HTSlib utilities such as bgzip is done as follows: + + cd .../samtools-1.7 # Within the unpacked release directory + ./configure --prefix=/path/to/location + make all all-htslib + make install install-htslib + +You will likely wish to add /path/to/location/bin to your $PATH. + +See INSTALL for full building and installation instructions and details. + + +Using an optimised zlib library +=============================== + +Samtools has been minimally tested against both the Intel-optimised and +CloudFlare-optimised zlibs and shown to work. + +They can be downloaded from: + + https://github.com/jtkukunas/zlib # Intel + https://github.com/cloudflare/zlib # CloudFlare + +Neither Samtools nor HTSlib needs recompiling to use these optimised libraries, +but the LD_LIBRARY_PATH environment variable should be set to a directory +containing the libz.so.1 file. + +Benchmarks comparing the various zlibs are available at: + + http://www.htslib.org/benchmarks/zlib.html + +It is recommended that you perform your own rigorous tests for an entire +pipeline if you wish to switch to one of the optimised zlib implementations. diff --git a/samtools/bam.c b/samtools/bam.c new file mode 100644 index 0000000..4965e24 --- /dev/null +++ b/samtools/bam.c @@ -0,0 +1,247 @@ +/* bam.c -- BAM format. + + Copyright (C) 2008-2013, 2015 Genome Research Ltd. + Portions copyright (C) 2009-2012 Broad Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include "bam.h" +#include "htslib/kstring.h" +#include "sam_header.h" + +char *bam_format1(const bam_header_t *header, const bam1_t *b) +{ + kstring_t str; + str.l = str.m = 0; str.s = NULL; + if (sam_format1(header, b, &str) < 0) { + free(str.s); + str.s = NULL; + return NULL; + } + return str.s; +} + +int bam_view1(const bam_header_t *header, const bam1_t *b) +{ + char *s = bam_format1(header, b); + int ret = -1; + if (!s) return -1; + if (puts(s) != EOF) ret = 0; + free(s); + return ret; +} + +int bam_validate1(const bam_header_t *header, const bam1_t *b) +{ + char *s; + + if (b->core.tid < -1 || b->core.mtid < -1) return 0; + if (header && (b->core.tid >= header->n_targets || b->core.mtid >= header->n_targets)) return 0; + + if (b->data_len < b->core.l_qname) return 0; + s = memchr(bam1_qname(b), '\0', b->core.l_qname); + if (s != &bam1_qname(b)[b->core.l_qname-1]) return 0; + + // FIXME: Other fields could also be checked, especially the auxiliary data + + return 1; +} + +#ifndef MIN +#define MIN(a,b) ((a)<(b)?(a):(b)) +#endif + +// FIXME: we should also check the LB tag associated with each alignment +const char *bam_get_library(bam_header_t *h, const bam1_t *b) +{ + // Slow and inefficient. Rewrite once we get a proper header API. + const char *rg; + char *cp = h->text; + rg = (char *)bam_aux_get(b, "RG"); + + if (!rg) + return NULL; + else + rg++; + + // Header is guaranteed to be nul terminated, so this is valid. + while (*cp) { + char *ID, *LB; + char last = '\t'; + + // Find a @RG line + if (strncmp(cp, "@RG", 3) != 0) { + while (*cp && *cp != '\n') cp++; // skip line + if (*cp) cp++; + continue; + } + + // Find ID: and LB: keys + cp += 4; + ID = LB = NULL; + while (*cp && *cp != '\n') { + if (last == '\t') { + if (strncmp(cp, "LB:", 3) == 0) + LB = cp+3; + else if (strncmp(cp, "ID:", 3) == 0) + ID = cp+3; + } + last = *cp++; + } + + if (!ID || !LB) + continue; + + // Check it's the correct ID + if (strncmp(rg, ID, strlen(rg)) != 0 || ID[strlen(rg)] != '\t') + continue; + + // Valid until next query + static char LB_text[1024]; + for (cp = LB; *cp && *cp != '\t' && *cp != '\n'; cp++) + ; + strncpy(LB_text, LB, MIN(cp-LB, 1023)); + LB_text[MIN(cp-LB, 1023)] = 0; + + // Return it; valid until the next query. + return LB_text; + } + + return NULL; +} + +int bam_fetch(bamFile fp, const bam_index_t *idx, int tid, int beg, int end, void *data, bam_fetch_f func) +{ + int ret; + bam_iter_t iter; + bam1_t *b; + b = bam_init1(); + iter = bam_iter_query(idx, tid, beg, end); + while ((ret = bam_iter_read(fp, iter, b)) >= 0) func(b, data); + bam_iter_destroy(iter); + bam_destroy1(b); + return (ret == -1)? 0 : ret; +} + +/************ + * Remove B * + ************/ + +#define bam1_seq_seti(s, i, c) ( (s)[(i)>>1] = ((s)[(i)>>1] & 0xf<<(((i)&1)<<2)) | (c)<<((~(i)&1)<<2) ) + +int bam_remove_B(bam1_t *b) +{ + int i, j, end_j, k, l, no_qual; + uint32_t *cigar, *new_cigar; + uint8_t *seq, *qual, *p; + // test if removal is necessary + if (b->core.flag & BAM_FUNMAP) return 0; // unmapped; do nothing + cigar = bam1_cigar(b); + for (k = 0; k < b->core.n_cigar; ++k) + if (bam_cigar_op(cigar[k]) == BAM_CBACK) break; + if (k == b->core.n_cigar) return 0; // no 'B' + if (bam_cigar_op(cigar[0]) == BAM_CBACK) goto rmB_err; // cannot be removed + // allocate memory for the new CIGAR + if (b->data_len + (b->core.n_cigar + 1) * 4 > b->m_data) { // not enough memory + b->m_data = b->data_len + b->core.n_cigar * 4; + kroundup32(b->m_data); + b->data = (uint8_t*)realloc(b->data, b->m_data); + cigar = bam1_cigar(b); // after realloc, cigar may be changed + } + new_cigar = (uint32_t*)(b->data + (b->m_data - b->core.n_cigar * 4)); // from the end of b->data + // the core loop + seq = bam1_seq(b); qual = bam1_qual(b); + no_qual = (qual[0] == 0xff); // test whether base quality is available + i = j = 0; end_j = -1; + for (k = l = 0; k < b->core.n_cigar; ++k) { + int op = bam_cigar_op(cigar[k]); + int len = bam_cigar_oplen(cigar[k]); + if (op == BAM_CBACK) { // the backward operation + int t, u; + if (k == b->core.n_cigar - 1) break; // ignore 'B' at the end of CIGAR + if (len > j) goto rmB_err; // an excessively long backward + for (t = l - 1, u = 0; t >= 0; --t) { // look back + int op1 = bam_cigar_op(new_cigar[t]); + int len1 = bam_cigar_oplen(new_cigar[t]); + if (bam_cigar_type(op1)&1) { // consume the query + if (u + len1 >= len) { // stop + new_cigar[t] -= (len - u) << BAM_CIGAR_SHIFT; + break; + } else u += len1; + } + } + if (bam_cigar_oplen(new_cigar[t]) == 0) --t; // squeeze out the zero-length operation + l = t + 1; + end_j = j; j -= len; + } else { // other CIGAR operations + new_cigar[l++] = cigar[k]; + if (bam_cigar_type(op)&1) { // consume the query + if (i != j) { // no need to copy if i == j + int u, c, c0; + for (u = 0; u < len; ++u) { // construct the consensus + c = bam1_seqi(seq, i+u); + if (j + u < end_j) { // in an overlap + c0 = bam1_seqi(seq, j+u); + if (c != c0) { // a mismatch; choose the better base + if (qual[j+u] < qual[i+u]) { // the base in the 2nd segment is better + bam1_seq_seti(seq, j+u, c); + qual[j+u] = qual[i+u] - qual[j+u]; + } else qual[j+u] -= qual[i+u]; // the 1st is better; reduce base quality + } else qual[j+u] = qual[j+u] > qual[i+u]? qual[j+u] : qual[i+u]; + } else { // not in an overlap; copy over + bam1_seq_seti(seq, j+u, c); + qual[j+u] = qual[i+u]; + } + } + } + i += len, j += len; + } + } + } + if (no_qual) qual[0] = 0xff; // in very rare cases, this may be modified + // merge adjacent operations if possible + for (k = 1; k < l; ++k) + if (bam_cigar_op(new_cigar[k]) == bam_cigar_op(new_cigar[k-1])) + new_cigar[k] += new_cigar[k-1] >> BAM_CIGAR_SHIFT << BAM_CIGAR_SHIFT, new_cigar[k-1] &= 0xf; + // kill zero length operations + for (k = i = 0; k < l; ++k) + if (new_cigar[k] >> BAM_CIGAR_SHIFT) + new_cigar[i++] = new_cigar[k]; + l = i; + // update b + memcpy(cigar, new_cigar, l * 4); // set CIGAR + p = b->data + b->core.l_qname + l * 4; + memmove(p, seq, (j+1)>>1); p += (j+1)>>1; // set SEQ + memmove(p, qual, j); p += j; // set QUAL + memmove(p, bam1_aux(b), bam_get_l_aux(b)); p += bam_get_l_aux(b); // set optional fields + b->core.n_cigar = l, b->core.l_qseq = j; // update CIGAR length and query length + b->data_len = p - b->data; // update record length + return 0; + +rmB_err: + b->core.flag |= BAM_FUNMAP; + return -1; +} diff --git a/samtools/bam.c.pysam.c b/samtools/bam.c.pysam.c new file mode 100644 index 0000000..982bf41 --- /dev/null +++ b/samtools/bam.c.pysam.c @@ -0,0 +1,249 @@ +#include "samtools.pysam.h" + +/* bam.c -- BAM format. + + Copyright (C) 2008-2013, 2015 Genome Research Ltd. + Portions copyright (C) 2009-2012 Broad Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include "bam.h" +#include "htslib/kstring.h" +#include "sam_header.h" + +char *bam_format1(const bam_header_t *header, const bam1_t *b) +{ + kstring_t str; + str.l = str.m = 0; str.s = NULL; + if (sam_format1(header, b, &str) < 0) { + free(str.s); + str.s = NULL; + return NULL; + } + return str.s; +} + +int bam_view1(const bam_header_t *header, const bam1_t *b) +{ + char *s = bam_format1(header, b); + int ret = -1; + if (!s) return -1; + if (fputs(s, samtools_stdout) & fputc('\n', samtools_stdout) != EOF) ret = 0; + free(s); + return ret; +} + +int bam_validate1(const bam_header_t *header, const bam1_t *b) +{ + char *s; + + if (b->core.tid < -1 || b->core.mtid < -1) return 0; + if (header && (b->core.tid >= header->n_targets || b->core.mtid >= header->n_targets)) return 0; + + if (b->data_len < b->core.l_qname) return 0; + s = memchr(bam1_qname(b), '\0', b->core.l_qname); + if (s != &bam1_qname(b)[b->core.l_qname-1]) return 0; + + // FIXME: Other fields could also be checked, especially the auxiliary data + + return 1; +} + +#ifndef MIN +#define MIN(a,b) ((a)<(b)?(a):(b)) +#endif + +// FIXME: we should also check the LB tag associated with each alignment +const char *bam_get_library(bam_header_t *h, const bam1_t *b) +{ + // Slow and inefficient. Rewrite once we get a proper header API. + const char *rg; + char *cp = h->text; + rg = (char *)bam_aux_get(b, "RG"); + + if (!rg) + return NULL; + else + rg++; + + // Header is guaranteed to be nul terminated, so this is valid. + while (*cp) { + char *ID, *LB; + char last = '\t'; + + // Find a @RG line + if (strncmp(cp, "@RG", 3) != 0) { + while (*cp && *cp != '\n') cp++; // skip line + if (*cp) cp++; + continue; + } + + // Find ID: and LB: keys + cp += 4; + ID = LB = NULL; + while (*cp && *cp != '\n') { + if (last == '\t') { + if (strncmp(cp, "LB:", 3) == 0) + LB = cp+3; + else if (strncmp(cp, "ID:", 3) == 0) + ID = cp+3; + } + last = *cp++; + } + + if (!ID || !LB) + continue; + + // Check it's the correct ID + if (strncmp(rg, ID, strlen(rg)) != 0 || ID[strlen(rg)] != '\t') + continue; + + // Valid until next query + static char LB_text[1024]; + for (cp = LB; *cp && *cp != '\t' && *cp != '\n'; cp++) + ; + strncpy(LB_text, LB, MIN(cp-LB, 1023)); + LB_text[MIN(cp-LB, 1023)] = 0; + + // Return it; valid until the next query. + return LB_text; + } + + return NULL; +} + +int bam_fetch(bamFile fp, const bam_index_t *idx, int tid, int beg, int end, void *data, bam_fetch_f func) +{ + int ret; + bam_iter_t iter; + bam1_t *b; + b = bam_init1(); + iter = bam_iter_query(idx, tid, beg, end); + while ((ret = bam_iter_read(fp, iter, b)) >= 0) func(b, data); + bam_iter_destroy(iter); + bam_destroy1(b); + return (ret == -1)? 0 : ret; +} + +/************ + * Remove B * + ************/ + +#define bam1_seq_seti(s, i, c) ( (s)[(i)>>1] = ((s)[(i)>>1] & 0xf<<(((i)&1)<<2)) | (c)<<((~(i)&1)<<2) ) + +int bam_remove_B(bam1_t *b) +{ + int i, j, end_j, k, l, no_qual; + uint32_t *cigar, *new_cigar; + uint8_t *seq, *qual, *p; + // test if removal is necessary + if (b->core.flag & BAM_FUNMAP) return 0; // unmapped; do nothing + cigar = bam1_cigar(b); + for (k = 0; k < b->core.n_cigar; ++k) + if (bam_cigar_op(cigar[k]) == BAM_CBACK) break; + if (k == b->core.n_cigar) return 0; // no 'B' + if (bam_cigar_op(cigar[0]) == BAM_CBACK) goto rmB_err; // cannot be removed + // allocate memory for the new CIGAR + if (b->data_len + (b->core.n_cigar + 1) * 4 > b->m_data) { // not enough memory + b->m_data = b->data_len + b->core.n_cigar * 4; + kroundup32(b->m_data); + b->data = (uint8_t*)realloc(b->data, b->m_data); + cigar = bam1_cigar(b); // after realloc, cigar may be changed + } + new_cigar = (uint32_t*)(b->data + (b->m_data - b->core.n_cigar * 4)); // from the end of b->data + // the core loop + seq = bam1_seq(b); qual = bam1_qual(b); + no_qual = (qual[0] == 0xff); // test whether base quality is available + i = j = 0; end_j = -1; + for (k = l = 0; k < b->core.n_cigar; ++k) { + int op = bam_cigar_op(cigar[k]); + int len = bam_cigar_oplen(cigar[k]); + if (op == BAM_CBACK) { // the backward operation + int t, u; + if (k == b->core.n_cigar - 1) break; // ignore 'B' at the end of CIGAR + if (len > j) goto rmB_err; // an excessively long backward + for (t = l - 1, u = 0; t >= 0; --t) { // look back + int op1 = bam_cigar_op(new_cigar[t]); + int len1 = bam_cigar_oplen(new_cigar[t]); + if (bam_cigar_type(op1)&1) { // consume the query + if (u + len1 >= len) { // stop + new_cigar[t] -= (len - u) << BAM_CIGAR_SHIFT; + break; + } else u += len1; + } + } + if (bam_cigar_oplen(new_cigar[t]) == 0) --t; // squeeze out the zero-length operation + l = t + 1; + end_j = j; j -= len; + } else { // other CIGAR operations + new_cigar[l++] = cigar[k]; + if (bam_cigar_type(op)&1) { // consume the query + if (i != j) { // no need to copy if i == j + int u, c, c0; + for (u = 0; u < len; ++u) { // construct the consensus + c = bam1_seqi(seq, i+u); + if (j + u < end_j) { // in an overlap + c0 = bam1_seqi(seq, j+u); + if (c != c0) { // a mismatch; choose the better base + if (qual[j+u] < qual[i+u]) { // the base in the 2nd segment is better + bam1_seq_seti(seq, j+u, c); + qual[j+u] = qual[i+u] - qual[j+u]; + } else qual[j+u] -= qual[i+u]; // the 1st is better; reduce base quality + } else qual[j+u] = qual[j+u] > qual[i+u]? qual[j+u] : qual[i+u]; + } else { // not in an overlap; copy over + bam1_seq_seti(seq, j+u, c); + qual[j+u] = qual[i+u]; + } + } + } + i += len, j += len; + } + } + } + if (no_qual) qual[0] = 0xff; // in very rare cases, this may be modified + // merge adjacent operations if possible + for (k = 1; k < l; ++k) + if (bam_cigar_op(new_cigar[k]) == bam_cigar_op(new_cigar[k-1])) + new_cigar[k] += new_cigar[k-1] >> BAM_CIGAR_SHIFT << BAM_CIGAR_SHIFT, new_cigar[k-1] &= 0xf; + // kill zero length operations + for (k = i = 0; k < l; ++k) + if (new_cigar[k] >> BAM_CIGAR_SHIFT) + new_cigar[i++] = new_cigar[k]; + l = i; + // update b + memcpy(cigar, new_cigar, l * 4); // set CIGAR + p = b->data + b->core.l_qname + l * 4; + memmove(p, seq, (j+1)>>1); p += (j+1)>>1; // set SEQ + memmove(p, qual, j); p += j; // set QUAL + memmove(p, bam1_aux(b), bam_get_l_aux(b)); p += bam_get_l_aux(b); // set optional fields + b->core.n_cigar = l, b->core.l_qseq = j; // update CIGAR length and query length + b->data_len = p - b->data; // update record length + return 0; + +rmB_err: + b->core.flag |= BAM_FUNMAP; + return -1; +} diff --git a/samtools/bam.h b/samtools/bam.h new file mode 100644 index 0000000..d4df937 --- /dev/null +++ b/samtools/bam.h @@ -0,0 +1,580 @@ +/* bam.h -- BAM API. + + Copyright (C) 2008-2014 Genome Research Ltd. + Portions copyright (C) 2010-2012 Broad Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#ifndef BAM_BAM_H +#define BAM_BAM_H + +/*! + @header + + BAM library provides I/O and various operations on manipulating files + in the BAM (Binary Alignment/Mapping) or SAM (Sequence Alignment/Map) + format. It now supports importing from or exporting to SAM, sorting, + merging, generating pileup, and quickly retrieval of reads overlapped + with a specified region. + + @copyright Genome Research Ltd. + */ + +#define BAM_VERSION "1.7" + +#include +#include +#include +#include + +#include "htslib/bgzf.h" +#include "htslib/sam.h" + +/*! @abstract BAM file handler */ +typedef BGZF *bamFile; +#define bam_open(fn, mode) bgzf_open(fn, mode) +#define bam_dopen(fd, mode) bgzf_fdopen(fd, mode) +#define bam_close(fp) bgzf_close(fp) +#define bam_tell(fp) bgzf_tell(fp) +#define bam_seek(fp, pos, dir) bgzf_seek(fp, pos, dir) + +/*! @typedef + @abstract Structure for the alignment header. + @field n_targets number of reference sequences + @field target_name names of the reference sequences + @field target_len lengths of the referene sequences + @field dict header dictionary + @field hash hash table for fast name lookup + @field rg2lib hash table for @RG-ID -> LB lookup + @field l_text length of the plain text in the header + @field text plain text + + @discussion Field hash points to null by default. It is a private + member. + */ +typedef bam_hdr_t bam_header_t; + +// TODO This flag-formatting functionality does not currently exist in htslib +#define BAM_OFDEC 0 +#define BAM_OFHEX 1 +#define BAM_OFSTR 2 + +/*! @abstract defautl mask for pileup */ +#define BAM_DEF_MASK (BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP) + +/*! @typedef + @abstract Structure for core alignment information. + @field tid chromosome ID, defined by bam_header_t + @field pos 0-based leftmost coordinate + @field bin bin calculated by bam_reg2bin() + @field qual mapping quality + @field l_qname length of the query name + @field flag bitwise flag + @field n_cigar number of CIGAR operations + @field l_qseq length of the query sequence (read) + */ +// typedef struct { ... } bam1_core_t; + +/*! @typedef + @abstract Structure for one alignment. + @field core core information about the alignment + @field l_aux length of auxiliary data + @field data_len current length of bam1_t::data + @field m_data maximum length of bam1_t::data + @field data all variable-length data, concatenated; structure: qname-cigar-seq-qual-aux + + @discussion Notes: + + 1. qname is zero tailing and core.l_qname includes the tailing '\0'. + 2. l_qseq is calculated from the total length of an alignment block + on reading or from CIGAR. + 3. cigar data is encoded 4 bytes per CIGAR operation. + 4. seq is nybble-encoded according to bam_nt16_table. + */ +// typedef struct { ... } bam1_t; +// NOTE htslib version doesn't have l_aux; use bam_get_l_aux(b) instead +#ifndef SAMTOOLS_HTSLIB_SUPPRESS_HACKS +// NOTE htslib also renames data_len to l_data; this macro may help or hinder +#define data_len l_data +#endif + +typedef hts_itr_t *bam_iter_t; + +#define bam1_strand(b) (bam_is_rev((b))) +#define bam1_mstrand(b) (bam_is_mrev((b))) + +/*! @function + @abstract Get the CIGAR array + @param b pointer to an alignment + @return pointer to the CIGAR array + + @discussion In the CIGAR array, each element is a 32-bit integer. The + lower 4 bits gives a CIGAR operation and the higher 28 bits keep the + length of a CIGAR. + */ +#define bam1_cigar(b) (bam_get_cigar((b))) + +/*! @function + @abstract Get the name of the query + @param b pointer to an alignment + @return pointer to the name string, null terminated + */ +#define bam1_qname(b) (bam_get_qname((b))) + +/*! @function + @abstract Get query sequence + @param b pointer to an alignment + @return pointer to sequence + + @discussion Each base is encoded in 4 bits: 1 for A, 2 for C, 4 for G, + 8 for T and 15 for N. Two bases are packed in one byte with the base + at the higher 4 bits having smaller coordinate on the read. It is + recommended to use bam1_seqi() macro to get the base. + */ +#define bam1_seq(b) (bam_get_seq((b))) + +/*! @function + @abstract Get query quality + @param b pointer to an alignment + @return pointer to quality string + */ +#define bam1_qual(b) (bam_get_qual((b))) + +/*! @function + @abstract Get a base on read + @param s Query sequence returned by bam1_seq() + @param i The i-th position, 0-based + @return 4-bit integer representing the base. + */ +#define bam1_seqi(s, i) (bam_seqi((s), (i))) + +/*! @function + @abstract Get auxiliary data + @param b pointer to an alignment + @return pointer to the concatenated auxiliary data + */ +#define bam1_aux(b) (bam_get_aux((b))) + +/*! + @abstract Verbose level between 0 and 3; 0 is supposed to disable all + debugging information, though this may not have been implemented. + */ +#define bam_verbose hts_verbose + +/*! @abstract Table for converting a nucleotide character to the 4-bit encoding. */ +#define bam_nt16_table seq_nt16_table + +/*! @abstract Table for converting a 4-bit encoded nucleotide to a letter. */ +#define bam_nt16_rev_table seq_nt16_str + +/*! @abstract Table for converting a 4-bit encoded nucleotide to ~2 bits. */ +#define bam_nt16_nt4_table seq_nt16_int + +#ifdef __cplusplus +extern "C" { +#endif + + /********************* + * Low-level SAM I/O * + *********************/ + + /*! @abstract TAM file handler */ + typedef samFile *tamFile; + + /*! + @abstract Open a SAM file for reading, either uncompressed or compressed by gzip/zlib. + @param fn SAM file name + @return SAM file handler + */ + static inline tamFile samtools_sam_open(const char *fn) { return sam_open(fn, "r"); } + #undef sam_open + #define sam_open samtools_sam_open + + /*! + @abstract Close a SAM file handler + @param fp SAM file handler + */ + // void sam_close(tamFile fp); + + /*! + @abstract Read one alignment from a SAM file handler + @param fp SAM file handler + @param header header information (ordered names of chromosomes) + @param b read alignment; all members in b will be updated + @return 0 if successful; otherwise negative + */ + // int sam_read1(tamFile fp, bam_header_t *header, bam1_t *b); + + /*! + @abstract Read header information from a TAB-delimited list file. + @param fn_list file name for the list + @return a pointer to the header structure + + @discussion Each line in this file consists of chromosome name and + the length of chromosome. + */ + bam_header_t *sam_header_read2(const char *fn_list); + + /*! + @abstract Read header from a SAM file (if present) + @param fp SAM file handler + @return pointer to header struct; 0 if no @SQ lines available + */ + static inline bam_header_t *sam_header_read(tamFile fp) { return sam_hdr_read(fp); } + + // Note the distressing cast -- bam_name2id is not thread-safe + static inline int32_t bam_get_tid(const bam_header_t *header, const char *seq_name) { return bam_name2id((bam_header_t *)header, seq_name); } + + + /********************* + * Low-level BAM I/O * + *********************/ + + /*! + @abstract Initialize a header structure. + @return the pointer to the header structure + */ + static inline bam_header_t *bam_header_init(void) { return bam_hdr_init(); } + + /*! + @abstract Destroy a header structure. + @param header pointer to the header + */ + static inline void bam_header_destroy(bam_header_t *header) { bam_hdr_destroy(header); } + + /*! + @abstract Read a header structure from BAM. + @param fp BAM file handler, opened by bam_open() + @return pointer to the header structure + + @discussion The file position indicator must be placed at the + beginning of the file. Upon success, the position indicator will + be set at the start of the first alignment. + */ + static inline bam_header_t *bam_header_read(bamFile fp) { return bam_hdr_read(fp); } + + /*! + @abstract Write a header structure to BAM. + @param fp BAM file handler + @param header pointer to the header structure + @return always 0 currently + */ + static inline int bam_header_write(bamFile fp, const bam_header_t *header) { return bam_hdr_write(fp, header); } + + /*! + @abstract Read an alignment from BAM. + @param fp BAM file handler + @param b read alignment; all members are updated. + @return number of bytes read from the file + + @discussion The file position indicator must be + placed right before an alignment. Upon success, this function + will set the position indicator to the start of the next + alignment. This function is not affected by the machine + endianness. + */ + // int bam_read1(bamFile fp, bam1_t *b); + + int bam_remove_B(bam1_t *b); + + /*! + @abstract Write an alignment to BAM. + @param fp BAM file handler + @param b alignment to write + @return number of bytes written to the file + */ + // int bam_write1(bamFile fp, const bam1_t *b); + + /*! @function + @abstract Initiate a pointer to bam1_t struct + */ +//#define bam_init1() + + /*! @function + @abstract Free the memory allocated for an alignment. + @param b pointer to an alignment + */ +//#define bam_destroy1(b) + + /*! + @abstract Format a BAM record in the SAM format + @param header pointer to the header structure + @param b alignment to print + @return a pointer to the SAM string + */ + char *bam_format1(const bam_header_t *header, const bam1_t *b); + + /*! + @abstract Formats a BAM record and writes it and \n to stdout + @return 0 if successful, -1 on error + */ + int bam_view1(const bam_header_t *header, const bam1_t *b); + + /*! + @abstract Check whether a BAM record is plausibly valid + @param header associated header structure, or NULL if unavailable + @param b alignment to validate + @return 0 if the alignment is invalid; non-zero otherwise + + @discussion Simple consistency check of some of the fields of the + alignment record. If the header is provided, several additional checks + are made. Not all fields are checked, so a non-zero result is not a + guarantee that the record is valid. However it is usually good enough + to detect when bam_seek() has been called with a virtual file offset + that is not the offset of an alignment record. + */ + int bam_validate1(const bam_header_t *header, const bam1_t *b); + + // TODO Parses headers, so not yet implemented in terms of htslib + const char *bam_get_library(bam_header_t *header, const bam1_t *b); + + + /*************** + * pileup APIs * + ***************/ + + /*! @typedef + @abstract Structure for one alignment covering the pileup position. + @field b pointer to the alignment + @field qpos position of the read base at the pileup site, 0-based + @field indel indel length; 0 for no indel, positive for ins and negative for del + @field is_del 1 iff the base on the padded read is a deletion + @field level the level of the read in the "viewer" mode + + @discussion See also bam_plbuf_push() and bam_lplbuf_push(). The + difference between the two functions is that the former does not + set bam_pileup1_t::level, while the later does. Level helps the + implementation of alignment viewers, but calculating this has some + overhead. + */ + // typedef struct { ... } bam_pileup1_t; + + // typedef int (*bam_plp_auto_f)(void *data, bam1_t *b); + + // typedef struct incomplete *bam_plp_t; + + // bam_plp_t bam_plp_init(bam_plp_auto_f read, void *data); + // int bam_plp_push(bam_plp_t iter, const bam1_t *b); + // const bam_pileup1_t *bam_plp_next(bam_plp_t iter, int *_tid, int *_pos, int *_n_plp); + // const bam_pileup1_t *bam_plp_auto(bam_plp_t iter, int *_tid, int *_pos, int *_n_plp); + // void bam_plp_set_maxcnt(bam_plp_t iter, int maxcnt); + // void bam_plp_reset(bam_plp_t iter); + // void bam_plp_destroy(bam_plp_t iter); + + // typedef struct incomplete *bam_mplp_t; + + // bam_mplp_t bam_mplp_init(int n, bam_plp_auto_f func, void **data); + // void bam_mplp_destroy(bam_mplp_t iter); + // void bam_mplp_set_maxcnt(bam_mplp_t iter, int maxcnt); + // int bam_mplp_auto(bam_mplp_t iter, int *_tid, int *_pos, int *n_plp, const bam_pileup1_t **plp); + + /*! @typedef + @abstract Type of function to be called by bam_plbuf_push(). + @param tid chromosome ID as is defined in the header + @param pos start coordinate of the alignment, 0-based + @param n number of elements in pl array + @param pl array of alignments + @param data user provided data + @discussion See also bam_plbuf_push(), bam_plbuf_init() and bam_pileup1_t. + */ + typedef int (*bam_pileup_f)(uint32_t tid, uint32_t pos, int n, const bam_pileup1_t *pl, void *data); + + typedef struct { + bam_plp_t iter; + bam_pileup_f func; + void *data; + } bam_plbuf_t; + + void bam_plbuf_reset(bam_plbuf_t *buf); + bam_plbuf_t *bam_plbuf_init(bam_pileup_f func, void *data); + void bam_plbuf_destroy(bam_plbuf_t *buf); + int bam_plbuf_push(const bam1_t *b, bam_plbuf_t *buf); + + int bam_pileup_file(bamFile fp, int mask, bam_pileup_f func, void *func_data); + + struct __bam_lplbuf_t; + typedef struct __bam_lplbuf_t bam_lplbuf_t; + + void bam_lplbuf_reset(bam_lplbuf_t *buf); + + /*! @abstract bam_plbuf_init() equivalent with level calculated. */ + bam_lplbuf_t *bam_lplbuf_init(bam_pileup_f func, void *data); + + /*! @abstract bam_plbuf_destroy() equivalent with level calculated. */ + void bam_lplbuf_destroy(bam_lplbuf_t *tv); + + /*! @abstract bam_plbuf_push() equivalent with level calculated. */ + int bam_lplbuf_push(const bam1_t *b, bam_lplbuf_t *buf); + + + /********************* + * BAM indexing APIs * + *********************/ + + typedef hts_idx_t bam_index_t; + + /*! + @abstract Build index for a BAM file. + @discussion Index file "fn.bai" will be created. + @param fn name of the BAM file + @return always 0 currently + */ + static inline int samtools_bam_index_build(const char *fn) { return bam_index_build(fn, 0); } + #undef bam_index_build + #define bam_index_build samtools_bam_index_build + + /*! + @abstract Load index from file "fn.bai". + @param fn name of the BAM file (NOT the index file) + @return pointer to the index structure + */ + // bam_index_t *bam_index_load(const char *fn); + + /*! + @abstract Destroy an index structure. + @param idx pointer to the index structure + */ + static inline void bam_index_destroy(bam_index_t *idx) { hts_idx_destroy(idx); } + + /*! @typedef + @abstract Type of function to be called by bam_fetch(). + @param b the alignment + @param data user provided data + */ + typedef int (*bam_fetch_f)(const bam1_t *b, void *data); + + /*! + @abstract Retrieve the alignments that are overlapped with the + specified region. (For BAM files only; see also samfetch() in sam.h.) + + @discussion A user defined function will be called for each + retrieved alignment ordered by its start position. + + @param fp BAM file handler + @param idx pointer to the alignment index + @param tid chromosome ID as is defined in the header + @param beg start coordinate, 0-based + @param end end coordinate, 0-based + @param data user provided data (will be transferred to func) + @param func user defined function + */ + int bam_fetch(bamFile fp, const bam_index_t *idx, int tid, int beg, int end, void *data, bam_fetch_f func); + + static inline bam_iter_t bam_iter_query(const bam_index_t *idx, int tid, int beg, int end) { return bam_itr_queryi(idx, tid, beg, end); } + static inline int bam_iter_read(bamFile fp, bam_iter_t iter, bam1_t *b) { return iter? hts_itr_next(fp, iter, b, 0) : bam_read1(fp, b); } + static inline void bam_iter_destroy(bam_iter_t iter) { bam_itr_destroy(iter); } + + /*! + @abstract Parse a region in the format: "chr2:100,000-200,000". + @discussion bam_header_t::hash will be initialized if empty. + @param header pointer to the header structure + @param str string to be parsed + @param ref_id the returned chromosome ID + @param begin the returned start coordinate + @param end the returned end coordinate + @return 0 on success; -1 on failure + */ + int bam_parse_region(bam_header_t *header, const char *str, int *ref_id, int *begin, int *end); + + + /************************** + * APIs for optional tags * + **************************/ + + /*! + @abstract Retrieve data of a tag + @param b pointer to an alignment struct + @param tag two-character tag to be retrieved + + @return pointer to the type and data. The first character is the + type that can be 'iIsScCdfAZH'. + + @discussion Use bam_aux2?() series to convert the returned data to + the corresponding type. + */ + // uint8_t *bam_aux_get(const bam1_t *b, const char tag[2]); + + // int32_t bam_aux2i(const uint8_t *s); + // float bam_aux2f(const uint8_t *s); + #define bam_aux2d(s) (bam_aux2f((s))) + // char bam_aux2A(const uint8_t *s); + // char *bam_aux2Z(const uint8_t *s); + + // int bam_aux_del(bam1_t *b, uint8_t *s); + // void bam_aux_append(bam1_t *b, const char tag[2], char type, int len, uint8_t *data); + static inline uint8_t *bam_aux_get_core(bam1_t *b, const char tag[2]) { return bam_aux_get(b, tag); } // an alias of bam_aux_get() + + + /***************** + * Miscellaneous * + *****************/ + + /*! + @abstract Calculate the rightmost coordinate of an alignment on the + reference genome. + + @param c pointer to the bam1_core_t structure + @param cigar the corresponding CIGAR array (from bam1_t::cigar) + @return the rightmost coordinate, 0-based + */ + static inline uint32_t bam_calend(const bam1_core_t *c, const uint32_t *cigar) { return c->pos + (c->n_cigar? bam_cigar2rlen(c->n_cigar, cigar) : 1); } + + /*! + @abstract Calculate the length of the query sequence from CIGAR. + @param c pointer to the bam1_core_t structure + @param cigar the corresponding CIGAR array (from bam1_t::cigar) + @return length of the query sequence + */ + static inline int32_t samtools_bam_cigar2qlen(const bam1_core_t *c, const uint32_t *cigar) { return bam_cigar2qlen(c->n_cigar, cigar); } + #undef bam_cigar2qlen + #define bam_cigar2qlen samtools_bam_cigar2qlen + +#ifdef __cplusplus +} +#endif + +/*! + @abstract Calculate the minimum bin that contains a region [beg,end). + @param beg start of the region, 0-based + @param end end of the region, 0-based + @return bin + */ +static inline int bam_reg2bin(uint32_t beg, uint32_t end) +{ + return hts_reg2bin(beg, end, 14, 5); +} + +/*! + @abstract Copy an alignment + @param bdst destination alignment struct + @param bsrc source alignment struct + @return pointer to the destination alignment struct + */ +// bam1_t *bam_copy1(bam1_t *bdst, const bam1_t *bsrc) + +/*! + @abstract Duplicate an alignment + @param src source alignment struct + @return pointer to the destination alignment struct + */ +// bam1_t *bam_dup1(const bam1_t *src) + +#endif diff --git a/samtools/bam2bcf.c b/samtools/bam2bcf.c new file mode 100644 index 0000000..a824d5a --- /dev/null +++ b/samtools/bam2bcf.c @@ -0,0 +1,843 @@ +/* bam2bcf.c -- variant calling. + + Copyright (C) 2010-2012 Broad Institute. + Copyright (C) 2012-2014 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include "bam2bcf.h" + +extern void ks_introsort_uint32_t(size_t n, uint32_t a[]); + +#define CALL_DEFTHETA 0.83 +#define DEF_MAPQ 20 + +#define CAP_DIST 25 + +bcf_callaux_t *bcf_call_init(double theta, int min_baseQ) +{ + bcf_callaux_t *bca; + if (theta <= 0.) theta = CALL_DEFTHETA; + bca = calloc(1, sizeof(bcf_callaux_t)); + bca->capQ = 60; + bca->openQ = 40; bca->extQ = 20; bca->tandemQ = 100; + bca->min_baseQ = min_baseQ; + bca->e = errmod_init(1. - theta); + bca->min_frac = 0.002; + bca->min_support = 1; + bca->per_sample_flt = 0; + bca->npos = 100; + bca->ref_pos = malloc(bca->npos*sizeof(int)); + bca->alt_pos = malloc(bca->npos*sizeof(int)); + bca->nqual = 60; + bca->ref_mq = malloc(bca->nqual*sizeof(int)); + bca->alt_mq = malloc(bca->nqual*sizeof(int)); + bca->ref_bq = malloc(bca->nqual*sizeof(int)); + bca->alt_bq = malloc(bca->nqual*sizeof(int)); + bca->fwd_mqs = malloc(bca->nqual*sizeof(int)); + bca->rev_mqs = malloc(bca->nqual*sizeof(int)); + return bca; +} + +void bcf_call_destroy(bcf_callaux_t *bca) +{ + if (bca == 0) return; + errmod_destroy(bca->e); + if (bca->npos) { free(bca->ref_pos); free(bca->alt_pos); bca->npos = 0; } + free(bca->ref_mq); free(bca->alt_mq); free(bca->ref_bq); free(bca->alt_bq); + free(bca->fwd_mqs); free(bca->rev_mqs); + bca->nqual = 0; + free(bca->bases); free(bca->inscns); free(bca); +} + +// position in the sequence with respect to the aligned part of the read +static int get_position(const bam_pileup1_t *p, int *len) +{ + int icig, n_tot_bases = 0, iread = 0, edist = p->qpos + 1; + for (icig=0; icigb->core.n_cigar; icig++) + { + int cig = bam_get_cigar(p->b)[icig] & BAM_CIGAR_MASK; + int ncig = bam_get_cigar(p->b)[icig] >> BAM_CIGAR_SHIFT; + if ( cig==BAM_CMATCH || cig==BAM_CEQUAL || cig==BAM_CDIFF ) + { + n_tot_bases += ncig; + iread += ncig; + continue; + } + if ( cig==BAM_CINS ) + { + n_tot_bases += ncig; + iread += ncig; + continue; + } + if ( cig==BAM_CSOFT_CLIP ) + { + iread += ncig; + if ( iread<=p->qpos ) edist -= ncig; + continue; + } + if ( cig==BAM_CDEL ) continue; + if ( cig==BAM_CHARD_CLIP ) continue; + if ( cig==BAM_CPAD ) continue; + if ( cig==BAM_CREF_SKIP ) continue; + fprintf(stderr,"todo: cigar %d\n", cig); + assert(0); + } + *len = n_tot_bases; + return edist; +} + +void bcf_callaux_clean(bcf_callaux_t *bca, bcf_call_t *call) +{ + memset(bca->ref_pos,0,sizeof(int)*bca->npos); + memset(bca->alt_pos,0,sizeof(int)*bca->npos); + memset(bca->ref_mq,0,sizeof(int)*bca->nqual); + memset(bca->alt_mq,0,sizeof(int)*bca->nqual); + memset(bca->ref_bq,0,sizeof(int)*bca->nqual); + memset(bca->alt_bq,0,sizeof(int)*bca->nqual); + memset(bca->fwd_mqs,0,sizeof(int)*bca->nqual); + memset(bca->rev_mqs,0,sizeof(int)*bca->nqual); + if ( call->ADF ) memset(call->ADF,0,sizeof(int32_t)*(call->n+1)*B2B_MAX_ALLELES); + if ( call->ADR ) memset(call->ADR,0,sizeof(int32_t)*(call->n+1)*B2B_MAX_ALLELES); +} + +/* + Notes: + - Called from bam_plcmd.c by mpileup. Amongst other things, sets the bcf_callret1_t.qsum frequencies + which are carried over via bcf_call_combine and bcf_call2bcf to the output BCF as the QS annotation. + Later it's used for multiallelic calling by bcftools -m + - ref_base is the 4-bit representation of the reference base. It is negative if we are looking at an indel. + */ +/* + * This function is called once for each sample. + * _n is number of pilesups pl contributing reads to this sample + * pl is pointer to array of _n pileups (one pileup per read) + * ref_base is the 4-bit representation of the reference base. It is negative if we are looking at an indel. + * bca is the settings to perform calls across all samples + * r is the returned value of the call + */ +int bcf_call_glfgen(int _n, const bam_pileup1_t *pl, int ref_base, bcf_callaux_t *bca, bcf_callret1_t *r) +{ + int i, n, ref4, is_indel, ori_depth = 0; + + // clean from previous run + r->ori_depth = 0; + r->mq0 = 0; + memset(r->qsum,0,sizeof(float)*4); + memset(r->anno,0,sizeof(double)*16); + memset(r->p,0,sizeof(float)*25); + + if (ref_base >= 0) { + ref4 = seq_nt16_int[ref_base]; + is_indel = 0; + } else ref4 = 4, is_indel = 1; + if (_n == 0) return -1; + // enlarge the bases array if necessary + if (bca->max_bases < _n) { + bca->max_bases = _n; + kroundup32(bca->max_bases); + bca->bases = (uint16_t*)realloc(bca->bases, 2 * bca->max_bases); + } + // fill the bases array + for (i = n = 0; i < _n; ++i) { + const bam_pileup1_t *p = pl + i; + int q, b, mapQ, baseQ, is_diff, min_dist, seqQ; + // set base + if (p->is_del || p->is_refskip || (p->b->core.flag&BAM_FUNMAP)) continue; + ++ori_depth; + mapQ = p->b->core.qual < 255? p->b->core.qual : DEF_MAPQ; // special case for mapQ==255 + if ( !mapQ ) r->mq0++; + baseQ = q = is_indel? p->aux&0xff : (int)bam_get_qual(p->b)[p->qpos]; // base/indel quality + seqQ = is_indel? (p->aux>>8&0xff) : 99; + if (q < bca->min_baseQ) continue; + if (q > seqQ) q = seqQ; + mapQ = mapQ < bca->capQ? mapQ : bca->capQ; + if (q > mapQ) q = mapQ; + if (q > 63) q = 63; + if (q < 4) q = 4; // MQ=0 reads count as BQ=4 + if (!is_indel) { + b = bam_seqi(bam_get_seq(p->b), p->qpos); // base + b = seq_nt16_int[b? b : ref_base]; // b is the 2-bit base + is_diff = (ref4 < 4 && b == ref4)? 0 : 1; + } else { + b = p->aux>>16&0x3f; + is_diff = (b != 0); + } + bca->bases[n++] = q<<5 | (int)bam_is_rev(p->b)<<4 | b; + // collect annotations + if (b < 4) + { + r->qsum[b] += q; + if ( r->ADF ) + { + if ( bam_is_rev(p->b) ) + r->ADR[b]++; + else + r->ADF[b]++; + } + } + ++r->anno[0<<2|is_diff<<1|bam_is_rev(p->b)]; + min_dist = p->b->core.l_qseq - 1 - p->qpos; + if (min_dist > p->qpos) min_dist = p->qpos; + if (min_dist > CAP_DIST) min_dist = CAP_DIST; + r->anno[1<<2|is_diff<<1|0] += baseQ; + r->anno[1<<2|is_diff<<1|1] += baseQ * baseQ; + r->anno[2<<2|is_diff<<1|0] += mapQ; + r->anno[2<<2|is_diff<<1|1] += mapQ * mapQ; + r->anno[3<<2|is_diff<<1|0] += min_dist; + r->anno[3<<2|is_diff<<1|1] += min_dist * min_dist; + + // collect for bias tests + if ( baseQ > 59 ) baseQ = 59; + if ( mapQ > 59 ) mapQ = 59; + int len, pos = get_position(p, &len); + int epos = (double)pos/(len+1) * bca->npos; + int ibq = baseQ/60. * bca->nqual; + int imq = mapQ/60. * bca->nqual; + if ( bam_is_rev(p->b) ) bca->rev_mqs[imq]++; + else bca->fwd_mqs[imq]++; + if ( bam_seqi(bam_get_seq(p->b),p->qpos) == ref_base ) + { + bca->ref_pos[epos]++; + bca->ref_bq[ibq]++; + bca->ref_mq[imq]++; + } + else + { + bca->alt_pos[epos]++; + bca->alt_bq[ibq]++; + bca->alt_mq[imq]++; + } + } + r->ori_depth = ori_depth; + // glfgen + errmod_cal(bca->e, n, 5, bca->bases, r->p); // calculate PL of each genotype + return n; +} + + +/* + * calc_vdb() - returns value between zero (most biased) and one (no bias) + * on success, or HUGE_VAL when VDB cannot be calculated because + * of insufficient depth (<2x) + * + * Variant Distance Bias tests if the variant bases are positioned within the + * reads with sufficient randomness. Unlike other tests, it looks only at + * variant reads and therefore gives different kind of information than Read + * Position Bias for instance. VDB was developed for detecting artefacts in + * RNA-seq calls where reads from spliced transcripts span splice site + * boundaries. The current implementation differs somewhat from the original + * version described in supplementary material of PMID:22524474, but the idea + * remains the same. (Here the random variable tested is the average distance + * from the averaged position, not the average pairwise distance.) + * + * For coverage of 2x, the calculation is exact but is approximated for the + * rest. The result is most accurate between 4-200x. For 3x or >200x, the + * reported values are slightly more favourable than those of a true random + * distribution. + */ +double calc_vdb(int *pos, int npos) +{ + // Note well: the parameters were obtained by fitting to simulated data of + // 100bp reads. This assumes rescaling to 100bp in bcf_call_glfgen(). + const int readlen = 100; + assert( npos==readlen ); + + #define nparam 15 + const float param[nparam][3] = { {3,0.079,18}, {4,0.09,19.8}, {5,0.1,20.5}, {6,0.11,21.5}, + {7,0.125,21.6}, {8,0.135,22}, {9,0.14,22.2}, {10,0.153,22.3}, {15,0.19,22.8}, + {20,0.22,23.2}, {30,0.26,23.4}, {40,0.29,23.5}, {50,0.35,23.65}, {100,0.5,23.7}, + {200,0.7,23.7} }; + + int i, dp = 0; + float mean_pos = 0, mean_diff = 0; + for (i=0; i=200 ) + i = nparam; // shortcut for big depths + else + { + for (i=0; i=dp ) break; + } + float pshift, pscale; + if ( i==nparam ) + { + // the depth is too high, go with 200x + pscale = param[nparam-1][1]; + pshift = param[nparam-1][2]; + } + else if ( i>0 && param[i][0]!=dp ) + { + // linear interpolation of parameters + pscale = (param[i-1][1] + param[i][1])*0.5; + pshift = (param[i-1][2] + param[i][2])*0.5; + } + else + { + pscale = param[i][1]; + pshift = param[i][2]; + } + return 0.5*kf_erfc(-(mean_diff-pshift)*pscale); +} + +double calc_chisq_bias(int *a, int *b, int n) +{ + int na = 0, nb = 0, i, ndf = n; + for (i=0; i=8 && nb>=8 and reasonable if na<8 or nb<8 + if ( na>=8 || nb>=8 ) + { + double mean = ((double)na*nb)*0.5; + // Correction for ties: + // double N = na+nb; + // double var2 = (N*N-1)*N-ties; + // if ( var2==0 ) return 1.0; + // var2 *= ((double)na*nb)/N/(N-1)/12.0; + // No correction for ties: + double var2 = ((double)na*nb)*(na+nb+1)/12.0; + double z = (U_min - mean)/sqrt(2*var2); // z is N(0,1) + return 2.0 - kf_erfc(z); // which is 1 + erf(z) + } + + // Exact calculation + double pval = 2*mann_whitney_1947_cdf(na,nb,U_min); + return pval>1 ? 1 : pval; +} + +double calc_mwu_bias(int *a, int *b, int n) +{ + int na = 0, nb = 0, i; + double U = 0, ties = 0; + for (i=0; imean ? (2.0*mean-U)/mean : U/mean; + } + // Correction for ties: + // double N = na+nb; + // double var2 = (N*N-1)*N-ties; + // if ( var2==0 ) return 1.0; + // var2 *= ((double)na*nb)/N/(N-1)/12.0; + // No correction for ties: + double var2 = ((double)na*nb)*(na+nb+1)/12.0; + if ( na>=8 || nb>=8 ) + { + // Normal approximation, very good for na>=8 && nb>=8 and reasonable if na<8 or nb<8 + return exp(-0.5*(U-mean)*(U-mean)/var2); + } + + // Exact calculation + return mann_whitney_1947(na,nb,U) * sqrt(2*M_PI*var2); +} + +static inline double logsumexp2(double a, double b) +{ + if ( a>b ) + return log(1 + exp(b-a)) + a; + else + return log(1 + exp(a-b)) + b; +} + +void calc_SegBias(const bcf_callret1_t *bcr, bcf_call_t *call) +{ + call->seg_bias = HUGE_VAL; + if ( !bcr ) return; + + int nr = call->anno[2] + call->anno[3]; // number of observed non-reference reads + if ( !nr ) return; + + int avg_dp = (call->anno[0] + call->anno[1] + nr) / call->n; // average depth + double M = floor((double)nr / avg_dp + 0.5); // an approximate number of variants samples in the population + if ( M>call->n ) M = call->n; // clamp M at the number of samples + else if ( M==0 ) M = 1; + double f = M / 2. / call->n; // allele frequency + double p = (double) nr / call->n; // number of variant reads per sample expected if variant not real (poisson) + double q = (double) nr / M; // number of variant reads per sample expected if variant is real (poisson) + double sum = 0; + const double log2 = log(2.0); + + // fprintf(stderr,"M=%.1f p=%e q=%e f=%f dp=%d\n",M,p,q,f,avg_dp); + int i; + for (i=0; in; i++) + { + int oi = bcr[i].anno[2] + bcr[i].anno[3]; // observed number of non-ref reads + double tmp; + if ( oi ) + { + // tmp = log(f) + oi*log(q/p) - q + log(2*(1-f) + f*pow(2,oi)*exp(-q)) + p; // this can under/overflow + tmp = logsumexp2(log(2*(1-f)), log(f) + oi*log2 - q); + tmp += log(f) + oi*log(q/p) - q + p; + } + else + tmp = log(2*f*(1-f)*exp(-q) + f*f*exp(-2*q) + (1-f)*(1-f)) + p; + sum += tmp; + // fprintf(stderr,"oi=%d %e\n", oi,tmp); + } + call->seg_bias = sum; +} + +/** + * bcf_call_combine() - sets the PL array and VDB, RPB annotations, finds the top two alleles + * @n: number of samples + * @calls: each sample's calls + * @bca: auxiliary data structure for holding temporary values + * @ref_base: the reference base + * @call: filled with the annotations + * + * Combines calls across the various samples being studied + * 1. For each allele at each base across all samples the quality is summed so + * you end up with a set of quality sums for each allele present 2. The quality + * sums are sorted. + * 3. Using the sorted quality sums we now create the allele ordering array + * A\subN. This is done by doing the following: + * a) If the reference allele is known it always comes first, otherwise N + * comes first. + * b) Then the rest of the alleles are output in descending order of quality + * sum (which we already know the qsum array was sorted). Any allelles with + * qsum 0 will be excluded. + * 4. Using the allele ordering array we create the genotype ordering array. + * In the worst case with an unknown reference this will be: A0/A0 A1/A0 A1/A1 + * A2/A0 A2/A1 A2/A2 A3/A0 A3/A1 A3/A2 A3/A3 A4/A0 A4/A1 A4/A2 A4/A3 A4/A4 + * 5. The genotype ordering array is then used to extract data from the error + * model 5*5 matrix and is used to produce a Phread likelihood array for each + * sample. + */ +int bcf_call_combine(int n, const bcf_callret1_t *calls, bcf_callaux_t *bca, int ref_base /*4-bit*/, bcf_call_t *call) +{ + int ref4, i, j; + float qsum[5] = {0,0,0,0,0}; + if (ref_base >= 0) { + call->ori_ref = ref4 = seq_nt16_int[ref_base]; + if (ref4 > 4) ref4 = 4; + } else call->ori_ref = -1, ref4 = 0; + + // calculate qsum, this is done by summing normalized qsum across all samples, + // to account for differences in coverage + for (i = 0; i < n; ++i) + { + float sum = 0; + for (j = 0; j < 4; ++j) sum += calls[i].qsum[j]; + if ( sum ) + for (j = 0; j < 4; j++) qsum[j] += calls[i].qsum[j] / sum; + } + + // sort qsum in ascending order (insertion sort) + float *ptr[5], *tmp; + for (i=0; i<5; i++) ptr[i] = &qsum[i]; + for (i=1; i<4; i++) + for (j=i; j>0 && *ptr[j] < *ptr[j-1]; j--) + tmp = ptr[j], ptr[j] = ptr[j-1], ptr[j-1] = tmp; + + // Set the reference allele and alternative allele(s) + for (i=0; i<5; i++) call->a[i] = -1; + for (i=0; i<5; i++) call->qsum[i] = 0; + call->unseen = -1; + call->a[0] = ref4; + for (i=3, j=1; i>=0; i--) // i: alleles sorted by QS; j, a[j]: output allele ordering + { + int ipos = ptr[i] - qsum; // position in sorted qsum array + if ( ipos==ref4 ) + call->qsum[0] = qsum[ipos]; // REF's qsum + else + { + if ( !qsum[ipos] ) break; // qsum is 0, this and consequent alleles are not seen in the pileup + call->qsum[j] = qsum[ipos]; + call->a[j++] = ipos; + } + } + if (ref_base >= 0) + { + // for SNPs, find the "unseen" base + if (((ref4 < 4 && j < 4) || (ref4 == 4 && j < 5)) && i >= 0) + call->unseen = j, call->a[j++] = ptr[i] - qsum; + call->n_alleles = j; + } + else + { + call->n_alleles = j; + if (call->n_alleles == 1) return -1; // no reliable supporting read. stop doing anything + } + /* + * Set the phread likelihood array (call->PL) This array is 15 entries long + * for each sample because that is size of an upper or lower triangle of a + * worst case 5x5 matrix of possible genotypes. This worst case matrix will + * occur when all 4 possible alleles are present and the reference allele + * is unknown. The sides of the matrix will correspond to the reference + * allele (if known) followed by the alleles present in descending order of + * quality sum + */ + { + int x, g[15], z; + double sum_min = 0.; + x = call->n_alleles * (call->n_alleles + 1) / 2; + // get the possible genotypes + // this is done by creating an ordered list of locations g for call (allele a, allele b) in the genotype likelihood matrix + for (i = z = 0; i < call->n_alleles; ++i) { + for (j = 0; j <= i; ++j) { + g[z++] = call->a[j] * 5 + call->a[i]; + } + } + // for each sample calculate the PL + for (i = 0; i < n; ++i) + { + int32_t *PL = call->PL + x * i; + const bcf_callret1_t *r = calls + i; + float min = FLT_MAX; + for (j = 0; j < x; ++j) { + if (min > r->p[g[j]]) min = r->p[g[j]]; + } + sum_min += min; + for (j = 0; j < x; ++j) { + int y; + y = (int)(r->p[g[j]] - min + .499); + if (y > 255) y = 255; + PL[j] = y; + } + } + if ( call->DP4 ) + { + for (i=0; iDP4[4*i] = calls[i].anno[0]; + call->DP4[4*i+1] = calls[i].anno[1]; + call->DP4[4*i+2] = calls[i].anno[2]; + call->DP4[4*i+3] = calls[i].anno[3]; + } + } + if ( call->ADF ) + { + assert( call->n_alleles<=B2B_MAX_ALLELES ); // this is always true for SNPs and so far for indels as well + + // reorder ADR,ADF to match the allele ordering at this site + int32_t tmp[B2B_MAX_ALLELES]; + int32_t *adr = call->ADR + B2B_MAX_ALLELES, *adr_out = call->ADR + B2B_MAX_ALLELES; + int32_t *adf = call->ADF + B2B_MAX_ALLELES, *adf_out = call->ADF + B2B_MAX_ALLELES; + int32_t *adr_tot = call->ADR; // the first bin stores total counts per site + int32_t *adf_tot = call->ADF; + for (i=0; in_alleles; j++) + { + tmp[j] = adr[ call->a[j] ]; + adr_tot[j] += tmp[j]; + } + for (j=0; jn_alleles; j++) adr_out[j] = tmp[j]; + for (j=0; jn_alleles; j++) + { + tmp[j] = adf[ call->a[j] ]; + adf_tot[j] += tmp[j]; + } + for (j=0; jn_alleles; j++) adf_out[j] = tmp[j]; + adf_out += call->n_alleles; + adr_out += call->n_alleles; + adr += B2B_MAX_ALLELES; + adf += B2B_MAX_ALLELES; + } + } + +// if (ref_base < 0) fprintf(stderr, "%d,%d,%f,%d\n", call->n_alleles, x, sum_min, call->unseen); + call->shift = (int)(sum_min + .499); + } + // combine annotations + memset(call->anno, 0, 16 * sizeof(double)); + call->ori_depth = 0; + call->depth = 0; + call->mq0 = 0; + for (i = 0; i < n; ++i) { + call->depth += calls[i].anno[0] + calls[i].anno[1] + calls[i].anno[2] + calls[i].anno[3]; + call->ori_depth += calls[i].ori_depth; + call->mq0 += calls[i].mq0; + for (j = 0; j < 16; ++j) call->anno[j] += calls[i].anno[j]; + } + + calc_SegBias(calls, call); + + // calc_chisq_bias("XPOS", call->bcf_hdr->id[BCF_DT_CTG][call->tid].key, call->pos, bca->ref_pos, bca->alt_pos, bca->npos); + // calc_chisq_bias("XMQ", call->bcf_hdr->id[BCF_DT_CTG][call->tid].key, call->pos, bca->ref_mq, bca->alt_mq, bca->nqual); + // calc_chisq_bias("XBQ", call->bcf_hdr->id[BCF_DT_CTG][call->tid].key, call->pos, bca->ref_bq, bca->alt_bq, bca->nqual); + + call->mwu_pos = calc_mwu_bias(bca->ref_pos, bca->alt_pos, bca->npos); + call->mwu_mq = calc_mwu_bias(bca->ref_mq, bca->alt_mq, bca->nqual); + call->mwu_bq = calc_mwu_bias(bca->ref_bq, bca->alt_bq, bca->nqual); + call->mwu_mqs = calc_mwu_bias(bca->fwd_mqs, bca->rev_mqs, bca->nqual); + +#if CDF_MWU_TESTS + call->mwu_pos_cdf = calc_mwu_bias_cdf(bca->ref_pos, bca->alt_pos, bca->npos); + call->mwu_mq_cdf = calc_mwu_bias_cdf(bca->ref_mq, bca->alt_mq, bca->nqual); + call->mwu_bq_cdf = calc_mwu_bias_cdf(bca->ref_bq, bca->alt_bq, bca->nqual); + call->mwu_mqs_cdf = calc_mwu_bias_cdf(bca->fwd_mqs, bca->rev_mqs, bca->nqual); +#endif + + call->vdb = calc_vdb(bca->alt_pos, bca->npos); + + return 0; +} + +int bcf_call2bcf(bcf_call_t *bc, bcf1_t *rec, bcf_callret1_t *bcr, int fmt_flag, const bcf_callaux_t *bca, const char *ref) +{ + extern double kt_fisher_exact(int n11, int n12, int n21, int n22, double *_left, double *_right, double *two); + int i, j, nals = 1; + + bcf_hdr_t *hdr = bc->bcf_hdr; + rec->rid = bc->tid; + rec->pos = bc->pos; + rec->qual = 0; + + bc->tmp.l = 0; + if (bc->ori_ref < 0) // indel + { + // REF + kputc(ref[bc->pos], &bc->tmp); + for (j = 0; j < bca->indelreg; ++j) kputc(ref[bc->pos+1+j], &bc->tmp); + + // ALT + for (i=1; i<4; i++) + { + if (bc->a[i] < 0) break; + kputc(',', &bc->tmp); kputc(ref[bc->pos], &bc->tmp); + + if (bca->indel_types[bc->a[i]] < 0) { // deletion + for (j = -bca->indel_types[bc->a[i]]; j < bca->indelreg; ++j) + kputc(ref[bc->pos+1+j], &bc->tmp); + } else { // insertion; cannot be a reference unless a bug + char *inscns = &bca->inscns[bc->a[i] * bca->maxins]; + for (j = 0; j < bca->indel_types[bc->a[i]]; ++j) + kputc("ACGTN"[(int)inscns[j]], &bc->tmp); + for (j = 0; j < bca->indelreg; ++j) kputc(ref[bc->pos+1+j], &bc->tmp); + } + nals++; + } + } + else // SNP + { + kputc("ACGTN"[bc->ori_ref], &bc->tmp); + for (i=1; i<5; i++) + { + if (bc->a[i] < 0) break; + kputc(',', &bc->tmp); + if ( bc->unseen==i ) kputs("<*>", &bc->tmp); + else kputc("ACGT"[bc->a[i]], &bc->tmp); + nals++; + } + } + bcf_update_alleles_str(hdr, rec, bc->tmp.s); + + bc->tmp.l = 0; + + // INFO + if (bc->ori_ref < 0) + { + bcf_update_info_flag(hdr, rec, "INDEL", NULL, 1); + bcf_update_info_int32(hdr, rec, "IDV", &bca->max_support, 1); + bcf_update_info_float(hdr, rec, "IMF", &bca->max_frac, 1); + } + bcf_update_info_int32(hdr, rec, "DP", &bc->ori_depth, 1); + if ( fmt_flag&B2B_INFO_ADF ) + bcf_update_info_int32(hdr, rec, "ADF", bc->ADF, rec->n_allele); + if ( fmt_flag&B2B_INFO_ADR ) + bcf_update_info_int32(hdr, rec, "ADR", bc->ADR, rec->n_allele); + if ( fmt_flag&(B2B_INFO_AD|B2B_INFO_DPR) ) + { + for (i=0; in_allele; i++) bc->ADF[i] += bc->ADR[i]; + if ( fmt_flag&B2B_INFO_AD ) + bcf_update_info_int32(hdr, rec, "AD", bc->ADF, rec->n_allele); + if ( fmt_flag&B2B_INFO_DPR ) + bcf_update_info_int32(hdr, rec, "DPR", bc->ADF, rec->n_allele); + } + + float tmpf[16]; + for (i=0; i<16; i++) tmpf[i] = bc->anno[i]; + bcf_update_info_float(hdr, rec, "I16", tmpf, 16); + bcf_update_info_float(hdr, rec, "QS", bc->qsum, nals); + + if ( bc->vdb != HUGE_VAL ) bcf_update_info_float(hdr, rec, "VDB", &bc->vdb, 1); + if ( bc->seg_bias != HUGE_VAL ) bcf_update_info_float(hdr, rec, "SGB", &bc->seg_bias, 1); + if ( bc->mwu_pos != HUGE_VAL ) bcf_update_info_float(hdr, rec, "RPB", &bc->mwu_pos, 1); + if ( bc->mwu_mq != HUGE_VAL ) bcf_update_info_float(hdr, rec, "MQB", &bc->mwu_mq, 1); + if ( bc->mwu_mqs != HUGE_VAL ) bcf_update_info_float(hdr, rec, "MQSB", &bc->mwu_mqs, 1); + if ( bc->mwu_bq != HUGE_VAL ) bcf_update_info_float(hdr, rec, "BQB", &bc->mwu_bq, 1); +#if CDF_MWU_TESTS + if ( bc->mwu_pos_cdf != HUGE_VAL ) bcf_update_info_float(hdr, rec, "RPB2", &bc->mwu_pos_cdf, 1); + if ( bc->mwu_mq_cdf != HUGE_VAL ) bcf_update_info_float(hdr, rec, "MQB2", &bc->mwu_mq_cdf, 1); + if ( bc->mwu_mqs_cdf != HUGE_VAL ) bcf_update_info_float(hdr, rec, "MQSB2", &bc->mwu_mqs_cdf, 1); + if ( bc->mwu_bq_cdf != HUGE_VAL ) bcf_update_info_float(hdr, rec, "BQB2", &bc->mwu_bq_cdf, 1); +#endif + tmpf[0] = bc->ori_depth ? (float)bc->mq0/bc->ori_depth : 0; + bcf_update_info_float(hdr, rec, "MQ0F", tmpf, 1); + + // FORMAT + rec->n_sample = bc->n; + bcf_update_format_int32(hdr, rec, "PL", bc->PL, nals*(nals+1)/2 * rec->n_sample); + if ( fmt_flag&B2B_FMT_DP ) + { + int32_t *ptr = (int32_t*) bc->fmt_arr; + for (i=0; in; i++) + ptr[i] = bc->DP4[4*i] + bc->DP4[4*i+1] + bc->DP4[4*i+2] + bc->DP4[4*i+3]; + bcf_update_format_int32(hdr, rec, "DP", bc->fmt_arr, rec->n_sample); + } + if ( fmt_flag&B2B_FMT_DV ) + { + int32_t *ptr = (int32_t*) bc->fmt_arr; + for (i=0; in; i++) + ptr[i] = bc->DP4[4*i+2] + bc->DP4[4*i+3]; + bcf_update_format_int32(hdr, rec, "DV", bc->fmt_arr, rec->n_sample); + } + if ( fmt_flag&B2B_FMT_SP ) + { + int32_t *ptr = (int32_t*) bc->fmt_arr; + for (i=0; in; i++) + { + int fwd_ref = bc->DP4[4*i], rev_ref = bc->DP4[4*i+1], fwd_alt = bc->DP4[4*i+2], rev_alt = bc->DP4[4*i+3]; + if ( fwd_ref+rev_ref<2 || fwd_alt+rev_alt<2 || fwd_ref+fwd_alt<2 || rev_ref+rev_alt<2 ) + ptr[i] = 0; + else + { + double left, right, two; + kt_fisher_exact(fwd_ref, rev_ref, fwd_alt, rev_alt, &left, &right, &two); + int32_t x = (int)(-4.343 * log(two) + .499); + if (x > 255) x = 255; + ptr[i] = x; + } + } + bcf_update_format_int32(hdr, rec, "SP", bc->fmt_arr, rec->n_sample); + } + if ( fmt_flag&B2B_FMT_DP4 ) + bcf_update_format_int32(hdr, rec, "DP4", bc->DP4, rec->n_sample*4); + if ( fmt_flag&B2B_FMT_ADF ) + bcf_update_format_int32(hdr, rec, "ADF", bc->ADF+B2B_MAX_ALLELES, rec->n_sample*rec->n_allele); + if ( fmt_flag&B2B_FMT_ADR ) + bcf_update_format_int32(hdr, rec, "ADR", bc->ADR+B2B_MAX_ALLELES, rec->n_sample*rec->n_allele); + if ( fmt_flag&(B2B_FMT_AD|B2B_FMT_DPR) ) + { + for (i=0; in_sample*rec->n_allele; i++) bc->ADF[B2B_MAX_ALLELES+i] += bc->ADR[B2B_MAX_ALLELES+i]; + if ( fmt_flag&B2B_FMT_AD ) + bcf_update_format_int32(hdr, rec, "AD", bc->ADF+B2B_MAX_ALLELES, rec->n_sample*rec->n_allele); + if ( fmt_flag&B2B_FMT_DPR ) + bcf_update_format_int32(hdr, rec, "DPR", bc->ADF+B2B_MAX_ALLELES, rec->n_sample*rec->n_allele); + } + + return 0; +} diff --git a/samtools/bam2bcf.c.pysam.c b/samtools/bam2bcf.c.pysam.c new file mode 100644 index 0000000..3bd623d --- /dev/null +++ b/samtools/bam2bcf.c.pysam.c @@ -0,0 +1,845 @@ +#include "samtools.pysam.h" + +/* bam2bcf.c -- variant calling. + + Copyright (C) 2010-2012 Broad Institute. + Copyright (C) 2012-2014 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include "bam2bcf.h" + +extern void ks_introsort_uint32_t(size_t n, uint32_t a[]); + +#define CALL_DEFTHETA 0.83 +#define DEF_MAPQ 20 + +#define CAP_DIST 25 + +bcf_callaux_t *bcf_call_init(double theta, int min_baseQ) +{ + bcf_callaux_t *bca; + if (theta <= 0.) theta = CALL_DEFTHETA; + bca = calloc(1, sizeof(bcf_callaux_t)); + bca->capQ = 60; + bca->openQ = 40; bca->extQ = 20; bca->tandemQ = 100; + bca->min_baseQ = min_baseQ; + bca->e = errmod_init(1. - theta); + bca->min_frac = 0.002; + bca->min_support = 1; + bca->per_sample_flt = 0; + bca->npos = 100; + bca->ref_pos = malloc(bca->npos*sizeof(int)); + bca->alt_pos = malloc(bca->npos*sizeof(int)); + bca->nqual = 60; + bca->ref_mq = malloc(bca->nqual*sizeof(int)); + bca->alt_mq = malloc(bca->nqual*sizeof(int)); + bca->ref_bq = malloc(bca->nqual*sizeof(int)); + bca->alt_bq = malloc(bca->nqual*sizeof(int)); + bca->fwd_mqs = malloc(bca->nqual*sizeof(int)); + bca->rev_mqs = malloc(bca->nqual*sizeof(int)); + return bca; +} + +void bcf_call_destroy(bcf_callaux_t *bca) +{ + if (bca == 0) return; + errmod_destroy(bca->e); + if (bca->npos) { free(bca->ref_pos); free(bca->alt_pos); bca->npos = 0; } + free(bca->ref_mq); free(bca->alt_mq); free(bca->ref_bq); free(bca->alt_bq); + free(bca->fwd_mqs); free(bca->rev_mqs); + bca->nqual = 0; + free(bca->bases); free(bca->inscns); free(bca); +} + +// position in the sequence with respect to the aligned part of the read +static int get_position(const bam_pileup1_t *p, int *len) +{ + int icig, n_tot_bases = 0, iread = 0, edist = p->qpos + 1; + for (icig=0; icigb->core.n_cigar; icig++) + { + int cig = bam_get_cigar(p->b)[icig] & BAM_CIGAR_MASK; + int ncig = bam_get_cigar(p->b)[icig] >> BAM_CIGAR_SHIFT; + if ( cig==BAM_CMATCH || cig==BAM_CEQUAL || cig==BAM_CDIFF ) + { + n_tot_bases += ncig; + iread += ncig; + continue; + } + if ( cig==BAM_CINS ) + { + n_tot_bases += ncig; + iread += ncig; + continue; + } + if ( cig==BAM_CSOFT_CLIP ) + { + iread += ncig; + if ( iread<=p->qpos ) edist -= ncig; + continue; + } + if ( cig==BAM_CDEL ) continue; + if ( cig==BAM_CHARD_CLIP ) continue; + if ( cig==BAM_CPAD ) continue; + if ( cig==BAM_CREF_SKIP ) continue; + fprintf(samtools_stderr,"todo: cigar %d\n", cig); + assert(0); + } + *len = n_tot_bases; + return edist; +} + +void bcf_callaux_clean(bcf_callaux_t *bca, bcf_call_t *call) +{ + memset(bca->ref_pos,0,sizeof(int)*bca->npos); + memset(bca->alt_pos,0,sizeof(int)*bca->npos); + memset(bca->ref_mq,0,sizeof(int)*bca->nqual); + memset(bca->alt_mq,0,sizeof(int)*bca->nqual); + memset(bca->ref_bq,0,sizeof(int)*bca->nqual); + memset(bca->alt_bq,0,sizeof(int)*bca->nqual); + memset(bca->fwd_mqs,0,sizeof(int)*bca->nqual); + memset(bca->rev_mqs,0,sizeof(int)*bca->nqual); + if ( call->ADF ) memset(call->ADF,0,sizeof(int32_t)*(call->n+1)*B2B_MAX_ALLELES); + if ( call->ADR ) memset(call->ADR,0,sizeof(int32_t)*(call->n+1)*B2B_MAX_ALLELES); +} + +/* + Notes: + - Called from bam_plcmd.c by mpileup. Amongst other things, sets the bcf_callret1_t.qsum frequencies + which are carried over via bcf_call_combine and bcf_call2bcf to the output BCF as the QS annotation. + Later it's used for multiallelic calling by bcftools -m + - ref_base is the 4-bit representation of the reference base. It is negative if we are looking at an indel. + */ +/* + * This function is called once for each sample. + * _n is number of pilesups pl contributing reads to this sample + * pl is pointer to array of _n pileups (one pileup per read) + * ref_base is the 4-bit representation of the reference base. It is negative if we are looking at an indel. + * bca is the settings to perform calls across all samples + * r is the returned value of the call + */ +int bcf_call_glfgen(int _n, const bam_pileup1_t *pl, int ref_base, bcf_callaux_t *bca, bcf_callret1_t *r) +{ + int i, n, ref4, is_indel, ori_depth = 0; + + // clean from previous run + r->ori_depth = 0; + r->mq0 = 0; + memset(r->qsum,0,sizeof(float)*4); + memset(r->anno,0,sizeof(double)*16); + memset(r->p,0,sizeof(float)*25); + + if (ref_base >= 0) { + ref4 = seq_nt16_int[ref_base]; + is_indel = 0; + } else ref4 = 4, is_indel = 1; + if (_n == 0) return -1; + // enlarge the bases array if necessary + if (bca->max_bases < _n) { + bca->max_bases = _n; + kroundup32(bca->max_bases); + bca->bases = (uint16_t*)realloc(bca->bases, 2 * bca->max_bases); + } + // fill the bases array + for (i = n = 0; i < _n; ++i) { + const bam_pileup1_t *p = pl + i; + int q, b, mapQ, baseQ, is_diff, min_dist, seqQ; + // set base + if (p->is_del || p->is_refskip || (p->b->core.flag&BAM_FUNMAP)) continue; + ++ori_depth; + mapQ = p->b->core.qual < 255? p->b->core.qual : DEF_MAPQ; // special case for mapQ==255 + if ( !mapQ ) r->mq0++; + baseQ = q = is_indel? p->aux&0xff : (int)bam_get_qual(p->b)[p->qpos]; // base/indel quality + seqQ = is_indel? (p->aux>>8&0xff) : 99; + if (q < bca->min_baseQ) continue; + if (q > seqQ) q = seqQ; + mapQ = mapQ < bca->capQ? mapQ : bca->capQ; + if (q > mapQ) q = mapQ; + if (q > 63) q = 63; + if (q < 4) q = 4; // MQ=0 reads count as BQ=4 + if (!is_indel) { + b = bam_seqi(bam_get_seq(p->b), p->qpos); // base + b = seq_nt16_int[b? b : ref_base]; // b is the 2-bit base + is_diff = (ref4 < 4 && b == ref4)? 0 : 1; + } else { + b = p->aux>>16&0x3f; + is_diff = (b != 0); + } + bca->bases[n++] = q<<5 | (int)bam_is_rev(p->b)<<4 | b; + // collect annotations + if (b < 4) + { + r->qsum[b] += q; + if ( r->ADF ) + { + if ( bam_is_rev(p->b) ) + r->ADR[b]++; + else + r->ADF[b]++; + } + } + ++r->anno[0<<2|is_diff<<1|bam_is_rev(p->b)]; + min_dist = p->b->core.l_qseq - 1 - p->qpos; + if (min_dist > p->qpos) min_dist = p->qpos; + if (min_dist > CAP_DIST) min_dist = CAP_DIST; + r->anno[1<<2|is_diff<<1|0] += baseQ; + r->anno[1<<2|is_diff<<1|1] += baseQ * baseQ; + r->anno[2<<2|is_diff<<1|0] += mapQ; + r->anno[2<<2|is_diff<<1|1] += mapQ * mapQ; + r->anno[3<<2|is_diff<<1|0] += min_dist; + r->anno[3<<2|is_diff<<1|1] += min_dist * min_dist; + + // collect for bias tests + if ( baseQ > 59 ) baseQ = 59; + if ( mapQ > 59 ) mapQ = 59; + int len, pos = get_position(p, &len); + int epos = (double)pos/(len+1) * bca->npos; + int ibq = baseQ/60. * bca->nqual; + int imq = mapQ/60. * bca->nqual; + if ( bam_is_rev(p->b) ) bca->rev_mqs[imq]++; + else bca->fwd_mqs[imq]++; + if ( bam_seqi(bam_get_seq(p->b),p->qpos) == ref_base ) + { + bca->ref_pos[epos]++; + bca->ref_bq[ibq]++; + bca->ref_mq[imq]++; + } + else + { + bca->alt_pos[epos]++; + bca->alt_bq[ibq]++; + bca->alt_mq[imq]++; + } + } + r->ori_depth = ori_depth; + // glfgen + errmod_cal(bca->e, n, 5, bca->bases, r->p); // calculate PL of each genotype + return n; +} + + +/* + * calc_vdb() - returns value between zero (most biased) and one (no bias) + * on success, or HUGE_VAL when VDB cannot be calculated because + * of insufficient depth (<2x) + * + * Variant Distance Bias tests if the variant bases are positioned within the + * reads with sufficient randomness. Unlike other tests, it looks only at + * variant reads and therefore gives different kind of information than Read + * Position Bias for instance. VDB was developed for detecting artefacts in + * RNA-seq calls where reads from spliced transcripts span splice site + * boundaries. The current implementation differs somewhat from the original + * version described in supplementary material of PMID:22524474, but the idea + * remains the same. (Here the random variable tested is the average distance + * from the averaged position, not the average pairwise distance.) + * + * For coverage of 2x, the calculation is exact but is approximated for the + * rest. The result is most accurate between 4-200x. For 3x or >200x, the + * reported values are slightly more favourable than those of a true random + * distribution. + */ +double calc_vdb(int *pos, int npos) +{ + // Note well: the parameters were obtained by fitting to simulated data of + // 100bp reads. This assumes rescaling to 100bp in bcf_call_glfgen(). + const int readlen = 100; + assert( npos==readlen ); + + #define nparam 15 + const float param[nparam][3] = { {3,0.079,18}, {4,0.09,19.8}, {5,0.1,20.5}, {6,0.11,21.5}, + {7,0.125,21.6}, {8,0.135,22}, {9,0.14,22.2}, {10,0.153,22.3}, {15,0.19,22.8}, + {20,0.22,23.2}, {30,0.26,23.4}, {40,0.29,23.5}, {50,0.35,23.65}, {100,0.5,23.7}, + {200,0.7,23.7} }; + + int i, dp = 0; + float mean_pos = 0, mean_diff = 0; + for (i=0; i=200 ) + i = nparam; // shortcut for big depths + else + { + for (i=0; i=dp ) break; + } + float pshift, pscale; + if ( i==nparam ) + { + // the depth is too high, go with 200x + pscale = param[nparam-1][1]; + pshift = param[nparam-1][2]; + } + else if ( i>0 && param[i][0]!=dp ) + { + // linear interpolation of parameters + pscale = (param[i-1][1] + param[i][1])*0.5; + pshift = (param[i-1][2] + param[i][2])*0.5; + } + else + { + pscale = param[i][1]; + pshift = param[i][2]; + } + return 0.5*kf_erfc(-(mean_diff-pshift)*pscale); +} + +double calc_chisq_bias(int *a, int *b, int n) +{ + int na = 0, nb = 0, i, ndf = n; + for (i=0; i=8 && nb>=8 and reasonable if na<8 or nb<8 + if ( na>=8 || nb>=8 ) + { + double mean = ((double)na*nb)*0.5; + // Correction for ties: + // double N = na+nb; + // double var2 = (N*N-1)*N-ties; + // if ( var2==0 ) return 1.0; + // var2 *= ((double)na*nb)/N/(N-1)/12.0; + // No correction for ties: + double var2 = ((double)na*nb)*(na+nb+1)/12.0; + double z = (U_min - mean)/sqrt(2*var2); // z is N(0,1) + return 2.0 - kf_erfc(z); // which is 1 + erf(z) + } + + // Exact calculation + double pval = 2*mann_whitney_1947_cdf(na,nb,U_min); + return pval>1 ? 1 : pval; +} + +double calc_mwu_bias(int *a, int *b, int n) +{ + int na = 0, nb = 0, i; + double U = 0, ties = 0; + for (i=0; imean ? (2.0*mean-U)/mean : U/mean; + } + // Correction for ties: + // double N = na+nb; + // double var2 = (N*N-1)*N-ties; + // if ( var2==0 ) return 1.0; + // var2 *= ((double)na*nb)/N/(N-1)/12.0; + // No correction for ties: + double var2 = ((double)na*nb)*(na+nb+1)/12.0; + if ( na>=8 || nb>=8 ) + { + // Normal approximation, very good for na>=8 && nb>=8 and reasonable if na<8 or nb<8 + return exp(-0.5*(U-mean)*(U-mean)/var2); + } + + // Exact calculation + return mann_whitney_1947(na,nb,U) * sqrt(2*M_PI*var2); +} + +static inline double logsumexp2(double a, double b) +{ + if ( a>b ) + return log(1 + exp(b-a)) + a; + else + return log(1 + exp(a-b)) + b; +} + +void calc_SegBias(const bcf_callret1_t *bcr, bcf_call_t *call) +{ + call->seg_bias = HUGE_VAL; + if ( !bcr ) return; + + int nr = call->anno[2] + call->anno[3]; // number of observed non-reference reads + if ( !nr ) return; + + int avg_dp = (call->anno[0] + call->anno[1] + nr) / call->n; // average depth + double M = floor((double)nr / avg_dp + 0.5); // an approximate number of variants samples in the population + if ( M>call->n ) M = call->n; // clamp M at the number of samples + else if ( M==0 ) M = 1; + double f = M / 2. / call->n; // allele frequency + double p = (double) nr / call->n; // number of variant reads per sample expected if variant not real (poisson) + double q = (double) nr / M; // number of variant reads per sample expected if variant is real (poisson) + double sum = 0; + const double log2 = log(2.0); + + // fprintf(samtools_stderr,"M=%.1f p=%e q=%e f=%f dp=%d\n",M,p,q,f,avg_dp); + int i; + for (i=0; in; i++) + { + int oi = bcr[i].anno[2] + bcr[i].anno[3]; // observed number of non-ref reads + double tmp; + if ( oi ) + { + // tmp = log(f) + oi*log(q/p) - q + log(2*(1-f) + f*pow(2,oi)*exp(-q)) + p; // this can under/overflow + tmp = logsumexp2(log(2*(1-f)), log(f) + oi*log2 - q); + tmp += log(f) + oi*log(q/p) - q + p; + } + else + tmp = log(2*f*(1-f)*exp(-q) + f*f*exp(-2*q) + (1-f)*(1-f)) + p; + sum += tmp; + // fprintf(samtools_stderr,"oi=%d %e\n", oi,tmp); + } + call->seg_bias = sum; +} + +/** + * bcf_call_combine() - sets the PL array and VDB, RPB annotations, finds the top two alleles + * @n: number of samples + * @calls: each sample's calls + * @bca: auxiliary data structure for holding temporary values + * @ref_base: the reference base + * @call: filled with the annotations + * + * Combines calls across the various samples being studied + * 1. For each allele at each base across all samples the quality is summed so + * you end up with a set of quality sums for each allele present 2. The quality + * sums are sorted. + * 3. Using the sorted quality sums we now create the allele ordering array + * A\subN. This is done by doing the following: + * a) If the reference allele is known it always comes first, otherwise N + * comes first. + * b) Then the rest of the alleles are output in descending order of quality + * sum (which we already know the qsum array was sorted). Any allelles with + * qsum 0 will be excluded. + * 4. Using the allele ordering array we create the genotype ordering array. + * In the worst case with an unknown reference this will be: A0/A0 A1/A0 A1/A1 + * A2/A0 A2/A1 A2/A2 A3/A0 A3/A1 A3/A2 A3/A3 A4/A0 A4/A1 A4/A2 A4/A3 A4/A4 + * 5. The genotype ordering array is then used to extract data from the error + * model 5*5 matrix and is used to produce a Phread likelihood array for each + * sample. + */ +int bcf_call_combine(int n, const bcf_callret1_t *calls, bcf_callaux_t *bca, int ref_base /*4-bit*/, bcf_call_t *call) +{ + int ref4, i, j; + float qsum[5] = {0,0,0,0,0}; + if (ref_base >= 0) { + call->ori_ref = ref4 = seq_nt16_int[ref_base]; + if (ref4 > 4) ref4 = 4; + } else call->ori_ref = -1, ref4 = 0; + + // calculate qsum, this is done by summing normalized qsum across all samples, + // to account for differences in coverage + for (i = 0; i < n; ++i) + { + float sum = 0; + for (j = 0; j < 4; ++j) sum += calls[i].qsum[j]; + if ( sum ) + for (j = 0; j < 4; j++) qsum[j] += calls[i].qsum[j] / sum; + } + + // sort qsum in ascending order (insertion sort) + float *ptr[5], *tmp; + for (i=0; i<5; i++) ptr[i] = &qsum[i]; + for (i=1; i<4; i++) + for (j=i; j>0 && *ptr[j] < *ptr[j-1]; j--) + tmp = ptr[j], ptr[j] = ptr[j-1], ptr[j-1] = tmp; + + // Set the reference allele and alternative allele(s) + for (i=0; i<5; i++) call->a[i] = -1; + for (i=0; i<5; i++) call->qsum[i] = 0; + call->unseen = -1; + call->a[0] = ref4; + for (i=3, j=1; i>=0; i--) // i: alleles sorted by QS; j, a[j]: output allele ordering + { + int ipos = ptr[i] - qsum; // position in sorted qsum array + if ( ipos==ref4 ) + call->qsum[0] = qsum[ipos]; // REF's qsum + else + { + if ( !qsum[ipos] ) break; // qsum is 0, this and consequent alleles are not seen in the pileup + call->qsum[j] = qsum[ipos]; + call->a[j++] = ipos; + } + } + if (ref_base >= 0) + { + // for SNPs, find the "unseen" base + if (((ref4 < 4 && j < 4) || (ref4 == 4 && j < 5)) && i >= 0) + call->unseen = j, call->a[j++] = ptr[i] - qsum; + call->n_alleles = j; + } + else + { + call->n_alleles = j; + if (call->n_alleles == 1) return -1; // no reliable supporting read. stop doing anything + } + /* + * Set the phread likelihood array (call->PL) This array is 15 entries long + * for each sample because that is size of an upper or lower triangle of a + * worst case 5x5 matrix of possible genotypes. This worst case matrix will + * occur when all 4 possible alleles are present and the reference allele + * is unknown. The sides of the matrix will correspond to the reference + * allele (if known) followed by the alleles present in descending order of + * quality sum + */ + { + int x, g[15], z; + double sum_min = 0.; + x = call->n_alleles * (call->n_alleles + 1) / 2; + // get the possible genotypes + // this is done by creating an ordered list of locations g for call (allele a, allele b) in the genotype likelihood matrix + for (i = z = 0; i < call->n_alleles; ++i) { + for (j = 0; j <= i; ++j) { + g[z++] = call->a[j] * 5 + call->a[i]; + } + } + // for each sample calculate the PL + for (i = 0; i < n; ++i) + { + int32_t *PL = call->PL + x * i; + const bcf_callret1_t *r = calls + i; + float min = FLT_MAX; + for (j = 0; j < x; ++j) { + if (min > r->p[g[j]]) min = r->p[g[j]]; + } + sum_min += min; + for (j = 0; j < x; ++j) { + int y; + y = (int)(r->p[g[j]] - min + .499); + if (y > 255) y = 255; + PL[j] = y; + } + } + if ( call->DP4 ) + { + for (i=0; iDP4[4*i] = calls[i].anno[0]; + call->DP4[4*i+1] = calls[i].anno[1]; + call->DP4[4*i+2] = calls[i].anno[2]; + call->DP4[4*i+3] = calls[i].anno[3]; + } + } + if ( call->ADF ) + { + assert( call->n_alleles<=B2B_MAX_ALLELES ); // this is always true for SNPs and so far for indels as well + + // reorder ADR,ADF to match the allele ordering at this site + int32_t tmp[B2B_MAX_ALLELES]; + int32_t *adr = call->ADR + B2B_MAX_ALLELES, *adr_out = call->ADR + B2B_MAX_ALLELES; + int32_t *adf = call->ADF + B2B_MAX_ALLELES, *adf_out = call->ADF + B2B_MAX_ALLELES; + int32_t *adr_tot = call->ADR; // the first bin stores total counts per site + int32_t *adf_tot = call->ADF; + for (i=0; in_alleles; j++) + { + tmp[j] = adr[ call->a[j] ]; + adr_tot[j] += tmp[j]; + } + for (j=0; jn_alleles; j++) adr_out[j] = tmp[j]; + for (j=0; jn_alleles; j++) + { + tmp[j] = adf[ call->a[j] ]; + adf_tot[j] += tmp[j]; + } + for (j=0; jn_alleles; j++) adf_out[j] = tmp[j]; + adf_out += call->n_alleles; + adr_out += call->n_alleles; + adr += B2B_MAX_ALLELES; + adf += B2B_MAX_ALLELES; + } + } + +// if (ref_base < 0) fprintf(samtools_stderr, "%d,%d,%f,%d\n", call->n_alleles, x, sum_min, call->unseen); + call->shift = (int)(sum_min + .499); + } + // combine annotations + memset(call->anno, 0, 16 * sizeof(double)); + call->ori_depth = 0; + call->depth = 0; + call->mq0 = 0; + for (i = 0; i < n; ++i) { + call->depth += calls[i].anno[0] + calls[i].anno[1] + calls[i].anno[2] + calls[i].anno[3]; + call->ori_depth += calls[i].ori_depth; + call->mq0 += calls[i].mq0; + for (j = 0; j < 16; ++j) call->anno[j] += calls[i].anno[j]; + } + + calc_SegBias(calls, call); + + // calc_chisq_bias("XPOS", call->bcf_hdr->id[BCF_DT_CTG][call->tid].key, call->pos, bca->ref_pos, bca->alt_pos, bca->npos); + // calc_chisq_bias("XMQ", call->bcf_hdr->id[BCF_DT_CTG][call->tid].key, call->pos, bca->ref_mq, bca->alt_mq, bca->nqual); + // calc_chisq_bias("XBQ", call->bcf_hdr->id[BCF_DT_CTG][call->tid].key, call->pos, bca->ref_bq, bca->alt_bq, bca->nqual); + + call->mwu_pos = calc_mwu_bias(bca->ref_pos, bca->alt_pos, bca->npos); + call->mwu_mq = calc_mwu_bias(bca->ref_mq, bca->alt_mq, bca->nqual); + call->mwu_bq = calc_mwu_bias(bca->ref_bq, bca->alt_bq, bca->nqual); + call->mwu_mqs = calc_mwu_bias(bca->fwd_mqs, bca->rev_mqs, bca->nqual); + +#if CDF_MWU_TESTS + call->mwu_pos_cdf = calc_mwu_bias_cdf(bca->ref_pos, bca->alt_pos, bca->npos); + call->mwu_mq_cdf = calc_mwu_bias_cdf(bca->ref_mq, bca->alt_mq, bca->nqual); + call->mwu_bq_cdf = calc_mwu_bias_cdf(bca->ref_bq, bca->alt_bq, bca->nqual); + call->mwu_mqs_cdf = calc_mwu_bias_cdf(bca->fwd_mqs, bca->rev_mqs, bca->nqual); +#endif + + call->vdb = calc_vdb(bca->alt_pos, bca->npos); + + return 0; +} + +int bcf_call2bcf(bcf_call_t *bc, bcf1_t *rec, bcf_callret1_t *bcr, int fmt_flag, const bcf_callaux_t *bca, const char *ref) +{ + extern double kt_fisher_exact(int n11, int n12, int n21, int n22, double *_left, double *_right, double *two); + int i, j, nals = 1; + + bcf_hdr_t *hdr = bc->bcf_hdr; + rec->rid = bc->tid; + rec->pos = bc->pos; + rec->qual = 0; + + bc->tmp.l = 0; + if (bc->ori_ref < 0) // indel + { + // REF + kputc(ref[bc->pos], &bc->tmp); + for (j = 0; j < bca->indelreg; ++j) kputc(ref[bc->pos+1+j], &bc->tmp); + + // ALT + for (i=1; i<4; i++) + { + if (bc->a[i] < 0) break; + kputc(',', &bc->tmp); kputc(ref[bc->pos], &bc->tmp); + + if (bca->indel_types[bc->a[i]] < 0) { // deletion + for (j = -bca->indel_types[bc->a[i]]; j < bca->indelreg; ++j) + kputc(ref[bc->pos+1+j], &bc->tmp); + } else { // insertion; cannot be a reference unless a bug + char *inscns = &bca->inscns[bc->a[i] * bca->maxins]; + for (j = 0; j < bca->indel_types[bc->a[i]]; ++j) + kputc("ACGTN"[(int)inscns[j]], &bc->tmp); + for (j = 0; j < bca->indelreg; ++j) kputc(ref[bc->pos+1+j], &bc->tmp); + } + nals++; + } + } + else // SNP + { + kputc("ACGTN"[bc->ori_ref], &bc->tmp); + for (i=1; i<5; i++) + { + if (bc->a[i] < 0) break; + kputc(',', &bc->tmp); + if ( bc->unseen==i ) kputs("<*>", &bc->tmp); + else kputc("ACGT"[bc->a[i]], &bc->tmp); + nals++; + } + } + bcf_update_alleles_str(hdr, rec, bc->tmp.s); + + bc->tmp.l = 0; + + // INFO + if (bc->ori_ref < 0) + { + bcf_update_info_flag(hdr, rec, "INDEL", NULL, 1); + bcf_update_info_int32(hdr, rec, "IDV", &bca->max_support, 1); + bcf_update_info_float(hdr, rec, "IMF", &bca->max_frac, 1); + } + bcf_update_info_int32(hdr, rec, "DP", &bc->ori_depth, 1); + if ( fmt_flag&B2B_INFO_ADF ) + bcf_update_info_int32(hdr, rec, "ADF", bc->ADF, rec->n_allele); + if ( fmt_flag&B2B_INFO_ADR ) + bcf_update_info_int32(hdr, rec, "ADR", bc->ADR, rec->n_allele); + if ( fmt_flag&(B2B_INFO_AD|B2B_INFO_DPR) ) + { + for (i=0; in_allele; i++) bc->ADF[i] += bc->ADR[i]; + if ( fmt_flag&B2B_INFO_AD ) + bcf_update_info_int32(hdr, rec, "AD", bc->ADF, rec->n_allele); + if ( fmt_flag&B2B_INFO_DPR ) + bcf_update_info_int32(hdr, rec, "DPR", bc->ADF, rec->n_allele); + } + + float tmpf[16]; + for (i=0; i<16; i++) tmpf[i] = bc->anno[i]; + bcf_update_info_float(hdr, rec, "I16", tmpf, 16); + bcf_update_info_float(hdr, rec, "QS", bc->qsum, nals); + + if ( bc->vdb != HUGE_VAL ) bcf_update_info_float(hdr, rec, "VDB", &bc->vdb, 1); + if ( bc->seg_bias != HUGE_VAL ) bcf_update_info_float(hdr, rec, "SGB", &bc->seg_bias, 1); + if ( bc->mwu_pos != HUGE_VAL ) bcf_update_info_float(hdr, rec, "RPB", &bc->mwu_pos, 1); + if ( bc->mwu_mq != HUGE_VAL ) bcf_update_info_float(hdr, rec, "MQB", &bc->mwu_mq, 1); + if ( bc->mwu_mqs != HUGE_VAL ) bcf_update_info_float(hdr, rec, "MQSB", &bc->mwu_mqs, 1); + if ( bc->mwu_bq != HUGE_VAL ) bcf_update_info_float(hdr, rec, "BQB", &bc->mwu_bq, 1); +#if CDF_MWU_TESTS + if ( bc->mwu_pos_cdf != HUGE_VAL ) bcf_update_info_float(hdr, rec, "RPB2", &bc->mwu_pos_cdf, 1); + if ( bc->mwu_mq_cdf != HUGE_VAL ) bcf_update_info_float(hdr, rec, "MQB2", &bc->mwu_mq_cdf, 1); + if ( bc->mwu_mqs_cdf != HUGE_VAL ) bcf_update_info_float(hdr, rec, "MQSB2", &bc->mwu_mqs_cdf, 1); + if ( bc->mwu_bq_cdf != HUGE_VAL ) bcf_update_info_float(hdr, rec, "BQB2", &bc->mwu_bq_cdf, 1); +#endif + tmpf[0] = bc->ori_depth ? (float)bc->mq0/bc->ori_depth : 0; + bcf_update_info_float(hdr, rec, "MQ0F", tmpf, 1); + + // FORMAT + rec->n_sample = bc->n; + bcf_update_format_int32(hdr, rec, "PL", bc->PL, nals*(nals+1)/2 * rec->n_sample); + if ( fmt_flag&B2B_FMT_DP ) + { + int32_t *ptr = (int32_t*) bc->fmt_arr; + for (i=0; in; i++) + ptr[i] = bc->DP4[4*i] + bc->DP4[4*i+1] + bc->DP4[4*i+2] + bc->DP4[4*i+3]; + bcf_update_format_int32(hdr, rec, "DP", bc->fmt_arr, rec->n_sample); + } + if ( fmt_flag&B2B_FMT_DV ) + { + int32_t *ptr = (int32_t*) bc->fmt_arr; + for (i=0; in; i++) + ptr[i] = bc->DP4[4*i+2] + bc->DP4[4*i+3]; + bcf_update_format_int32(hdr, rec, "DV", bc->fmt_arr, rec->n_sample); + } + if ( fmt_flag&B2B_FMT_SP ) + { + int32_t *ptr = (int32_t*) bc->fmt_arr; + for (i=0; in; i++) + { + int fwd_ref = bc->DP4[4*i], rev_ref = bc->DP4[4*i+1], fwd_alt = bc->DP4[4*i+2], rev_alt = bc->DP4[4*i+3]; + if ( fwd_ref+rev_ref<2 || fwd_alt+rev_alt<2 || fwd_ref+fwd_alt<2 || rev_ref+rev_alt<2 ) + ptr[i] = 0; + else + { + double left, right, two; + kt_fisher_exact(fwd_ref, rev_ref, fwd_alt, rev_alt, &left, &right, &two); + int32_t x = (int)(-4.343 * log(two) + .499); + if (x > 255) x = 255; + ptr[i] = x; + } + } + bcf_update_format_int32(hdr, rec, "SP", bc->fmt_arr, rec->n_sample); + } + if ( fmt_flag&B2B_FMT_DP4 ) + bcf_update_format_int32(hdr, rec, "DP4", bc->DP4, rec->n_sample*4); + if ( fmt_flag&B2B_FMT_ADF ) + bcf_update_format_int32(hdr, rec, "ADF", bc->ADF+B2B_MAX_ALLELES, rec->n_sample*rec->n_allele); + if ( fmt_flag&B2B_FMT_ADR ) + bcf_update_format_int32(hdr, rec, "ADR", bc->ADR+B2B_MAX_ALLELES, rec->n_sample*rec->n_allele); + if ( fmt_flag&(B2B_FMT_AD|B2B_FMT_DPR) ) + { + for (i=0; in_sample*rec->n_allele; i++) bc->ADF[B2B_MAX_ALLELES+i] += bc->ADR[B2B_MAX_ALLELES+i]; + if ( fmt_flag&B2B_FMT_AD ) + bcf_update_format_int32(hdr, rec, "AD", bc->ADF+B2B_MAX_ALLELES, rec->n_sample*rec->n_allele); + if ( fmt_flag&B2B_FMT_DPR ) + bcf_update_format_int32(hdr, rec, "DPR", bc->ADF+B2B_MAX_ALLELES, rec->n_sample*rec->n_allele); + } + + return 0; +} diff --git a/samtools/bam2bcf.h b/samtools/bam2bcf.h new file mode 100644 index 0000000..54e5faa --- /dev/null +++ b/samtools/bam2bcf.h @@ -0,0 +1,139 @@ +/* bam2bcf.h -- variant calling. + + Copyright (C) 2010-2012 Broad Institute. + Copyright (C) 2012-2014 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#ifndef BAM2BCF_H +#define BAM2BCF_H + +#include +#include +#include + +/** + * A simplified version of Mann-Whitney U-test is calculated + * by default (no CDF) because it is faster and seems to work + * better in machine learning filtering. When enabled by setting + * CDF_MWU_TESTS, additional annotations will appear on mpileup's + * output (RPB2 in addition to RPB, etc.). + */ +#ifndef CDF_MWU_TESTS +#define CDF_MWU_TESTS 0 +#endif + +#define B2B_INDEL_NULL 10000 + +#define B2B_FMT_DP (1<<0) +#define B2B_FMT_SP (1<<1) +#define B2B_FMT_DV (1<<2) +#define B2B_FMT_DP4 (1<<3) +#define B2B_FMT_DPR (1<<4) +#define B2B_INFO_DPR (1<<5) +#define B2B_FMT_AD (1<<6) +#define B2B_FMT_ADF (1<<7) +#define B2B_FMT_ADR (1<<8) +#define B2B_INFO_AD (1<<9) +#define B2B_INFO_ADF (1<<10) +#define B2B_INFO_ADR (1<<11) + +#define B2B_MAX_ALLELES 5 + +typedef struct __bcf_callaux_t { + int capQ, min_baseQ; + int openQ, extQ, tandemQ; // for indels + uint32_t min_support, max_support; // for collecting indel candidates + double min_frac; // for collecting indel candidates + float max_frac; // for collecting indel candidates + int per_sample_flt; // indel filtering strategy + int *ref_pos, *alt_pos, npos, *ref_mq, *alt_mq, *ref_bq, *alt_bq, *fwd_mqs, *rev_mqs, nqual; // for bias tests + // for internal uses + int max_bases; + int indel_types[4]; // indel lengths + int maxins, indelreg; + int read_len; + char *inscns; + uint16_t *bases; // 5bit: unused, 6:quality, 1:is_rev, 4:2-bit base or indel allele (index to bcf_callaux_t.indel_types) + errmod_t *e; + void *rghash; +} bcf_callaux_t; + +typedef struct { + uint32_t ori_depth; + unsigned int mq0; + int32_t *ADF, *ADR; + float qsum[4]; + // The fields are: + // depth fwd .. ref (0) and non-ref (2) + // depth rev .. ref (1) and non-ref (3) + // baseQ .. ref (4) and non-ref (6) + // baseQ^2 .. ref (5) and non-ref (7) + // mapQ .. ref (8) and non-ref (10) + // mapQ^2 .. ref (9) and non-ref (11) + // minDist .. ref (12) and non-ref (14) + // minDist^2 .. ref (13) and non-ref (15) + // Note that this probably needs a more thorough fix: int types in + // bcf_call_t do overflow with high-coverage data, such as exomes, and + // BCFv2 supports only floats which may not suffice. + double anno[16]; + float p[25]; // phred-scaled likelihood of each genotype +} bcf_callret1_t; + +typedef struct { + int tid, pos; + bcf_hdr_t *bcf_hdr; + int a[5]; // alleles: ref, alt, alt2, alt3 + float qsum[5]; // for the QS tag + int n, n_alleles, shift, ori_ref, unseen; + int n_supp; // number of supporting non-reference reads + double anno[16]; + unsigned int depth, ori_depth, mq0; + int32_t *PL, *DP4, *ADR, *ADF; + uint8_t *fmt_arr; + float vdb; // variant distance bias + float mwu_pos, mwu_mq, mwu_bq, mwu_mqs; +#if CDF_MWU_TESTS + float mwu_pos_cdf, mwu_mq_cdf, mwu_bq_cdf, mwu_mqs_cdf; +#endif + float seg_bias; + kstring_t tmp; +} bcf_call_t; + +#ifdef __cplusplus +extern "C" { +#endif + + bcf_callaux_t *bcf_call_init(double theta, int min_baseQ); + void bcf_call_destroy(bcf_callaux_t *bca); + int bcf_call_glfgen(int _n, const bam_pileup1_t *pl, int ref_base, bcf_callaux_t *bca, bcf_callret1_t *r); + int bcf_call_combine(int n, const bcf_callret1_t *calls, bcf_callaux_t *bca, int ref_base /*4-bit*/, bcf_call_t *call); + int bcf_call2bcf(bcf_call_t *bc, bcf1_t *b, bcf_callret1_t *bcr, int fmt_flag, + const bcf_callaux_t *bca, const char *ref); + int bcf_call_gap_prep(int n, int *n_plp, bam_pileup1_t **plp, int pos, bcf_callaux_t *bca, const char *ref, + const void *rghash); + void bcf_callaux_clean(bcf_callaux_t *bca, bcf_call_t *call); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/samtools/bam2bcf_indel.c b/samtools/bam2bcf_indel.c new file mode 100644 index 0000000..9749d5b --- /dev/null +++ b/samtools/bam2bcf_indel.c @@ -0,0 +1,539 @@ +/* bam2bcf_indel.c -- indel caller. + + Copyright (C) 2010, 2011 Broad Institute. + Copyright (C) 2012-2014 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include "htslib/hts.h" +#include "htslib/sam.h" +#include "bam2bcf.h" +#include "htslib/khash.h" +KHASH_SET_INIT_STR(rg) + +#include "htslib/ksort.h" +KSORT_INIT_GENERIC(uint32_t) + +#define MINUS_CONST 0x10000000 +#define INDEL_WINDOW_SIZE 50 + +void *bcf_call_add_rg(void *_hash, const char *hdtext, const char *list) +{ + const char *s, *p, *q, *r, *t; + khash_t(rg) *hash; + if (list == 0 || hdtext == 0) return _hash; + if (_hash == 0) _hash = kh_init(rg); + hash = (khash_t(rg)*)_hash; + if ((s = strstr(hdtext, "@RG\t")) == 0) return hash; + do { + t = strstr(s + 4, "@RG\t"); // the next @RG + if ((p = strstr(s, "\tID:")) != 0) p += 4; + if ((q = strstr(s, "\tPL:")) != 0) q += 4; + if (p && q && (t == 0 || (p < t && q < t))) { // ID and PL are both present + int lp, lq; + char *x; + for (r = p; *r && *r != '\t' && *r != '\n'; ++r) { } + lp = r - p; + for (r = q; *r && *r != '\t' && *r != '\n'; ++r) { } + lq = r - q; + x = calloc((lp > lq? lp : lq) + 1, 1); + for (r = q; *r && *r != '\t' && *r != '\n'; ++r) x[r-q] = *r; + if (strstr(list, x)) { // insert ID to the hash table + khint_t k; + int ret; + for (r = p; *r && *r != '\t' && *r != '\n'; ++r) x[r-p] = *r; + x[r-p] = 0; + k = kh_get(rg, hash, x); + if (k == kh_end(hash)) k = kh_put(rg, hash, x, &ret); + else free(x); + } else free(x); + } + s = t; + } while (s); + return hash; +} + +void bcf_call_del_rghash(void *_hash) +{ + khint_t k; + khash_t(rg) *hash = (khash_t(rg)*)_hash; + if (hash == 0) return; + for (k = kh_begin(hash); k < kh_end(hash); ++k) + if (kh_exist(hash, k)) + free((char*)kh_key(hash, k)); + kh_destroy(rg, hash); +} + +static int tpos2qpos(const bam1_core_t *c, const uint32_t *cigar, int32_t tpos, int is_left, int32_t *_tpos) +{ + int k, x = c->pos, y = 0, last_y = 0; + *_tpos = c->pos; + for (k = 0; k < c->n_cigar; ++k) { + int op = cigar[k] & BAM_CIGAR_MASK; + int l = cigar[k] >> BAM_CIGAR_SHIFT; + if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { + if (c->pos > tpos) return y; + if (x + l > tpos) { + *_tpos = tpos; + return y + (tpos - x); + } + x += l; y += l; + last_y = y; + } else if (op == BAM_CINS || op == BAM_CSOFT_CLIP) y += l; + else if (op == BAM_CDEL || op == BAM_CREF_SKIP) { + if (x + l > tpos) { + *_tpos = is_left? x : x + l; + return y; + } + x += l; + } + } + *_tpos = x; + return last_y; +} +// FIXME: check if the inserted sequence is consistent with the homopolymer run +// l is the relative gap length and l_run is the length of the homopolymer on the reference +static inline int est_seqQ(const bcf_callaux_t *bca, int l, int l_run) +{ + int q, qh; + q = bca->openQ + bca->extQ * (abs(l) - 1); + qh = l_run >= 3? (int)(bca->tandemQ * (double)abs(l) / l_run + .499) : 1000; + return q < qh? q : qh; +} + +static inline int est_indelreg(int pos, const char *ref, int l, char *ins4) +{ + int i, j, max = 0, max_i = pos, score = 0; + l = abs(l); + for (i = pos + 1, j = 0; ref[i]; ++i, ++j) { + if (ins4) score += (toupper(ref[i]) != "ACGTN"[(int)ins4[j%l]])? -10 : 1; + else score += (toupper(ref[i]) != toupper(ref[pos+1+j%l]))? -10 : 1; + if (score < 0) break; + if (max < score) max = score, max_i = i; + } + return max_i - pos; +} + +/* + notes: + - n .. number of samples + - the routine sets bam_pileup1_t.aux of each read as follows: + - 6: unused + - 6: the call; index to bcf_callaux_t.indel_types .. (aux>>16)&0x3f + - 8: estimated sequence quality .. (aux>>8)&0xff + - 8: indel quality .. aux&0xff + */ +int bcf_call_gap_prep(int n, int *n_plp, bam_pileup1_t **plp, int pos, bcf_callaux_t *bca, const char *ref, + const void *rghash) +{ + int i, s, j, k, t, n_types, *types, max_rd_len, left, right, max_ins, *score1, *score2, max_ref2; + int N, K, l_run, ref_type, n_alt; + char *inscns = 0, *ref2, *query, **ref_sample; + khash_t(rg) *hash = (khash_t(rg)*)rghash; + if (ref == 0 || bca == 0) return -1; + // mark filtered reads + if (rghash) { + N = 0; + for (s = N = 0; s < n; ++s) { + for (i = 0; i < n_plp[s]; ++i) { + bam_pileup1_t *p = plp[s] + i; + const uint8_t *rg = bam_aux_get(p->b, "RG"); + p->aux = 1; // filtered by default + if (rg) { + khint_t k = kh_get(rg, hash, (const char*)(rg + 1)); + if (k != kh_end(hash)) p->aux = 0, ++N; // not filtered + } + } + } + if (N == 0) return -1; // no reads left + } + // determine if there is a gap + for (s = N = 0; s < n; ++s) { + for (i = 0; i < n_plp[s]; ++i) + if (plp[s][i].indel != 0) break; + if (i < n_plp[s]) break; + } + if (s == n) return -1; // there is no indel at this position. + for (s = N = 0; s < n; ++s) N += n_plp[s]; // N is the total number of reads + { // find out how many types of indels are present + bca->max_support = bca->max_frac = 0; + int m, n_alt = 0, n_tot = 0, indel_support_ok = 0; + uint32_t *aux; + aux = calloc(N + 1, 4); + m = max_rd_len = 0; + aux[m++] = MINUS_CONST; // zero indel is always a type + for (s = 0; s < n; ++s) { + int na = 0, nt = 0; + for (i = 0; i < n_plp[s]; ++i) { + const bam_pileup1_t *p = plp[s] + i; + if (rghash == 0 || p->aux == 0) { + ++nt; + if (p->indel != 0) { + ++na; + aux[m++] = MINUS_CONST + p->indel; + } + } + j = bam_cigar2qlen(p->b->core.n_cigar, bam_get_cigar(p->b)); + if (j > max_rd_len) max_rd_len = j; + } + double frac = (double)na/nt; + if ( !indel_support_ok && na >= bca->min_support && frac >= bca->min_frac ) + indel_support_ok = 1; + if ( na > bca->max_support && frac > 0 ) bca->max_support = na, bca->max_frac = frac; + n_alt += na; + n_tot += nt; + } + // To prevent long stretches of N's to be mistaken for indels (sometimes thousands of bases), + // check the number of N's in the sequence and skip places where half or more reference bases are Ns. + int nN=0; for (i=pos; i-pos(i-pos) ) { free(aux); return -1; } + + ks_introsort(uint32_t, m, aux); + // squeeze out identical types + for (i = 1, n_types = 1; i < m; ++i) + if (aux[i] != aux[i-1]) ++n_types; + // Taking totals makes it hard to call rare indels + if ( !bca->per_sample_flt ) + indel_support_ok = ( (double)n_alt / n_tot < bca->min_frac || n_alt < bca->min_support ) ? 0 : 1; + if ( n_types == 1 || !indel_support_ok ) { // then skip + free(aux); return -1; + } + if (n_types >= 64) { + free(aux); + // TODO revisit how/whether to control printing this warning + if (hts_verbose >= 2) + fprintf(stderr, "[%s] excessive INDEL alleles at position %d. Skip the position.\n", __func__, pos + 1); + return -1; + } + types = (int*)calloc(n_types, sizeof(int)); + t = 0; + types[t++] = aux[0] - MINUS_CONST; + for (i = 1; i < m; ++i) + if (aux[i] != aux[i-1]) + types[t++] = aux[i] - MINUS_CONST; + free(aux); + for (t = 0; t < n_types; ++t) + if (types[t] == 0) break; + ref_type = t; // the index of the reference type (0) + } + { // calculate left and right boundary + left = pos > INDEL_WINDOW_SIZE? pos - INDEL_WINDOW_SIZE : 0; + right = pos + INDEL_WINDOW_SIZE; + if (types[0] < 0) right -= types[0]; + // in case the alignments stand out the reference + for (i = pos; i < right; ++i) + if (ref[i] == 0) break; + right = i; + } + /* The following block fixes a long-existing flaw in the INDEL + * calling model: the interference of nearby SNPs. However, it also + * reduces the power because sometimes, substitutions caused by + * indels are not distinguishable from true mutations. Multiple + * sequence realignment helps to increase the power. + * + * Masks mismatches present in at least 70% of the reads with 'N'. + */ + { // construct per-sample consensus + int L = right - left + 1, max_i, max2_i; + uint32_t *cns, max, max2; + char *ref0, *r; + ref_sample = calloc(n, sizeof(char*)); + cns = calloc(L, 4); + ref0 = calloc(L, 1); + for (i = 0; i < right - left; ++i) + ref0[i] = seq_nt16_table[(int)ref[i+left]]; + for (s = 0; s < n; ++s) { + r = ref_sample[s] = calloc(L, 1); + memset(cns, 0, sizeof(int) * L); + // collect ref and non-ref counts + for (i = 0; i < n_plp[s]; ++i) { + bam_pileup1_t *p = plp[s] + i; + bam1_t *b = p->b; + uint32_t *cigar = bam_get_cigar(b); + uint8_t *seq = bam_get_seq(b); + int x = b->core.pos, y = 0; + for (k = 0; k < b->core.n_cigar; ++k) { + int op = cigar[k]&0xf; + int j, l = cigar[k]>>4; + if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { + for (j = 0; j < l; ++j) + if (x + j >= left && x + j < right) + cns[x+j-left] += (bam_seqi(seq, y+j) == ref0[x+j-left])? 1 : 0x10000; + x += l; y += l; + } else if (op == BAM_CDEL || op == BAM_CREF_SKIP) x += l; + else if (op == BAM_CINS || op == BAM_CSOFT_CLIP) y += l; + } + } + // determine the consensus + for (i = 0; i < right - left; ++i) r[i] = ref0[i]; + max = max2 = 0; max_i = max2_i = -1; + for (i = 0; i < right - left; ++i) { + if (cns[i]>>16 >= max>>16) max2 = max, max2_i = max_i, max = cns[i], max_i = i; + else if (cns[i]>>16 >= max2>>16) max2 = cns[i], max2_i = i; + } + if ((double)(max&0xffff) / ((max&0xffff) + (max>>16)) >= 0.7) max_i = -1; + if ((double)(max2&0xffff) / ((max2&0xffff) + (max2>>16)) >= 0.7) max2_i = -1; + if (max_i >= 0) r[max_i] = 15; + if (max2_i >= 0) r[max2_i] = 15; + //for (i = 0; i < right - left; ++i) fputc("=ACMGRSVTWYHKDBN"[(int)r[i]], stderr); fputc('\n', stderr); + } + free(ref0); free(cns); + } + { // the length of the homopolymer run around the current position + int c = seq_nt16_table[(int)ref[pos + 1]]; + if (c == 15) l_run = 1; + else { + for (i = pos + 2; ref[i]; ++i) + if (seq_nt16_table[(int)ref[i]] != c) break; + l_run = i; + for (i = pos; i >= 0; --i) + if (seq_nt16_table[(int)ref[i]] != c) break; + l_run -= i + 1; + } + } + // construct the consensus sequence + max_ins = types[n_types - 1]; // max_ins is at least 0 + if (max_ins > 0) { + int *inscns_aux = calloc(5 * n_types * max_ins, sizeof(int)); + // count the number of occurrences of each base at each position for each type of insertion + for (t = 0; t < n_types; ++t) { + if (types[t] > 0) { + for (s = 0; s < n; ++s) { + for (i = 0; i < n_plp[s]; ++i) { + bam_pileup1_t *p = plp[s] + i; + if (p->indel == types[t]) { + uint8_t *seq = bam_get_seq(p->b); + for (k = 1; k <= p->indel; ++k) { + int c = seq_nt16_int[bam_seqi(seq, p->qpos + k)]; + assert(c<5); + ++inscns_aux[(t*max_ins+(k-1))*5 + c]; + } + } + } + } + } + } + // use the majority rule to construct the consensus + inscns = calloc(n_types * max_ins, 1); + for (t = 0; t < n_types; ++t) { + for (j = 0; j < types[t]; ++j) { + int max = 0, max_k = -1, *ia = &inscns_aux[(t*max_ins+j)*5]; + for (k = 0; k < 5; ++k) + if (ia[k] > max) + max = ia[k], max_k = k; + inscns[t*max_ins + j] = max? max_k : 4; + if ( max_k==4 ) { types[t] = 0; break; } // discard insertions which contain N's + } + } + free(inscns_aux); + } + // compute the likelihood given each type of indel for each read + max_ref2 = right - left + 2 + 2 * (max_ins > -types[0]? max_ins : -types[0]); + ref2 = calloc(max_ref2, 1); + query = calloc(right - left + max_rd_len + max_ins + 2, 1); + score1 = calloc(N * n_types, sizeof(int)); + score2 = calloc(N * n_types, sizeof(int)); + bca->indelreg = 0; + for (t = 0; t < n_types; ++t) { + int l, ir; + probaln_par_t apf1 = { 1e-4, 1e-2, 10 }, apf2 = { 1e-6, 1e-3, 10 }; + apf1.bw = apf2.bw = abs(types[t]) + 3; + // compute indelreg + if (types[t] == 0) ir = 0; + else if (types[t] > 0) ir = est_indelreg(pos, ref, types[t], &inscns[t*max_ins]); + else ir = est_indelreg(pos, ref, -types[t], 0); + if (ir > bca->indelreg) bca->indelreg = ir; +// fprintf(stderr, "%d, %d, %d\n", pos, types[t], ir); + // realignment + for (s = K = 0; s < n; ++s) { + // write ref2 + for (k = 0, j = left; j <= pos; ++j) + ref2[k++] = seq_nt16_int[(int)ref_sample[s][j-left]]; + if (types[t] <= 0) j += -types[t]; + else for (l = 0; l < types[t]; ++l) + ref2[k++] = inscns[t*max_ins + l]; + for (; j < right && ref[j]; ++j) + ref2[k++] = seq_nt16_int[(int)ref_sample[s][j-left]]; + for (; k < max_ref2; ++k) ref2[k] = 4; + if (j < right) right = j; + // align each read to ref2 + for (i = 0; i < n_plp[s]; ++i, ++K) { + bam_pileup1_t *p = plp[s] + i; + int qbeg, qend, tbeg, tend, sc, kk; + uint8_t *seq = bam_get_seq(p->b); + uint32_t *cigar = bam_get_cigar(p->b); + if (p->b->core.flag&4) continue; // unmapped reads + // FIXME: the following loop should be better moved outside; nonetheless, realignment should be much slower anyway. + for (kk = 0; kk < p->b->core.n_cigar; ++kk) + if ((cigar[kk]&BAM_CIGAR_MASK) == BAM_CREF_SKIP) break; + if (kk < p->b->core.n_cigar) continue; + // FIXME: the following skips soft clips, but using them may be more sensitive. + // determine the start and end of sequences for alignment + qbeg = tpos2qpos(&p->b->core, bam_get_cigar(p->b), left, 0, &tbeg); + qend = tpos2qpos(&p->b->core, bam_get_cigar(p->b), right, 1, &tend); + if (types[t] < 0) { + int l = -types[t]; + tbeg = tbeg - l > left? tbeg - l : left; + } + // write the query sequence + for (l = qbeg; l < qend; ++l) + query[l - qbeg] = seq_nt16_int[bam_seqi(seq, l)]; + { // do realignment; this is the bottleneck + const uint8_t *qual = bam_get_qual(p->b), *bq; + uint8_t *qq; + qq = calloc(qend - qbeg, 1); + bq = (uint8_t*)bam_aux_get(p->b, "ZQ"); + if (bq) ++bq; // skip type + for (l = qbeg; l < qend; ++l) { + qq[l - qbeg] = bq? qual[l] + (bq[l] - 64) : qual[l]; + if (qq[l - qbeg] > 30) qq[l - qbeg] = 30; + if (qq[l - qbeg] < 7) qq[l - qbeg] = 7; + } + sc = probaln_glocal((uint8_t*)ref2 + tbeg - left, tend - tbeg + abs(types[t]), + (uint8_t*)query, qend - qbeg, qq, &apf1, 0, 0); + l = (int)(100. * sc / (qend - qbeg) + .499); // used for adjusting indelQ below + if (l > 255) l = 255; + score1[K*n_types + t] = score2[K*n_types + t] = sc<<8 | l; + if (sc > 5) { + sc = probaln_glocal((uint8_t*)ref2 + tbeg - left, tend - tbeg + abs(types[t]), + (uint8_t*)query, qend - qbeg, qq, &apf2, 0, 0); + l = (int)(100. * sc / (qend - qbeg) + .499); + if (l > 255) l = 255; + score2[K*n_types + t] = sc<<8 | l; + } + free(qq); + } +/* + for (l = 0; l < tend - tbeg + abs(types[t]); ++l) + fputc("ACGTN"[(int)ref2[tbeg-left+l]], stderr); + fputc('\n', stderr); + for (l = 0; l < qend - qbeg; ++l) fputc("ACGTN"[(int)query[l]], stderr); + fputc('\n', stderr); + fprintf(stderr, "pos=%d type=%d read=%d:%d name=%s qbeg=%d tbeg=%d score=%d\n", pos, types[t], s, i, bam1_qname(p->b), qbeg, tbeg, sc); +*/ + } + } + } + free(ref2); free(query); + { // compute indelQ + int sc_a[16], sumq_a[16]; + int tmp, *sc = sc_a, *sumq = sumq_a; + if (n_types > 16) { + sc = (int *)malloc(n_types * sizeof(int)); + sumq = (int *)malloc(n_types * sizeof(int)); + } + memset(sumq, 0, n_types * sizeof(int)); + for (s = K = 0; s < n; ++s) { + for (i = 0; i < n_plp[s]; ++i, ++K) { + bam_pileup1_t *p = plp[s] + i; + int *sct = &score1[K*n_types], indelQ1, indelQ2, seqQ, indelQ; + for (t = 0; t < n_types; ++t) sc[t] = sct[t]<<6 | t; + for (t = 1; t < n_types; ++t) // insertion sort + for (j = t; j > 0 && sc[j] < sc[j-1]; --j) + tmp = sc[j], sc[j] = sc[j-1], sc[j-1] = tmp; + /* errmod_cal() assumes that if the call is wrong, the + * likelihoods of other events are equal. This is about + * right for substitutions, but is not desired for + * indels. To reuse errmod_cal(), I have to make + * compromise for multi-allelic indels. + */ + if ((sc[0]&0x3f) == ref_type) { + indelQ1 = (sc[1]>>14) - (sc[0]>>14); + seqQ = est_seqQ(bca, types[sc[1]&0x3f], l_run); + } else { + for (t = 0; t < n_types; ++t) // look for the reference type + if ((sc[t]&0x3f) == ref_type) break; + indelQ1 = (sc[t]>>14) - (sc[0]>>14); + seqQ = est_seqQ(bca, types[sc[0]&0x3f], l_run); + } + tmp = sc[0]>>6 & 0xff; + indelQ1 = tmp > 111? 0 : (int)((1. - tmp/111.) * indelQ1 + .499); // reduce indelQ + sct = &score2[K*n_types]; + for (t = 0; t < n_types; ++t) sc[t] = sct[t]<<6 | t; + for (t = 1; t < n_types; ++t) // insertion sort + for (j = t; j > 0 && sc[j] < sc[j-1]; --j) + tmp = sc[j], sc[j] = sc[j-1], sc[j-1] = tmp; + if ((sc[0]&0x3f) == ref_type) { + indelQ2 = (sc[1]>>14) - (sc[0]>>14); + } else { + for (t = 0; t < n_types; ++t) // look for the reference type + if ((sc[t]&0x3f) == ref_type) break; + indelQ2 = (sc[t]>>14) - (sc[0]>>14); + } + tmp = sc[0]>>6 & 0xff; + indelQ2 = tmp > 111? 0 : (int)((1. - tmp/111.) * indelQ2 + .499); + // pick the smaller between indelQ1 and indelQ2 + indelQ = indelQ1 < indelQ2? indelQ1 : indelQ2; + if (indelQ > 255) indelQ = 255; + if (seqQ > 255) seqQ = 255; + p->aux = (sc[0]&0x3f)<<16 | seqQ<<8 | indelQ; // use 22 bits in total + sumq[sc[0]&0x3f] += indelQ < seqQ? indelQ : seqQ; +// fprintf(stderr, "pos=%d read=%d:%d name=%s call=%d indelQ=%d seqQ=%d\n", pos, s, i, bam1_qname(p->b), types[sc[0]&0x3f], indelQ, seqQ); + } + } + // determine bca->indel_types[] and bca->inscns + bca->maxins = max_ins; + bca->inscns = realloc(bca->inscns, bca->maxins * 4); + for (t = 0; t < n_types; ++t) + sumq[t] = sumq[t]<<6 | t; + for (t = 1; t < n_types; ++t) // insertion sort + for (j = t; j > 0 && sumq[j] > sumq[j-1]; --j) + tmp = sumq[j], sumq[j] = sumq[j-1], sumq[j-1] = tmp; + for (t = 0; t < n_types; ++t) // look for the reference type + if ((sumq[t]&0x3f) == ref_type) break; + if (t) { // then move the reference type to the first + tmp = sumq[t]; + for (; t > 0; --t) sumq[t] = sumq[t-1]; + sumq[0] = tmp; + } + for (t = 0; t < 4; ++t) bca->indel_types[t] = B2B_INDEL_NULL; + for (t = 0; t < 4 && t < n_types; ++t) { + bca->indel_types[t] = types[sumq[t]&0x3f]; + memcpy(&bca->inscns[t * bca->maxins], &inscns[(sumq[t]&0x3f) * max_ins], bca->maxins); + } + // update p->aux + for (s = n_alt = 0; s < n; ++s) { + for (i = 0; i < n_plp[s]; ++i) { + bam_pileup1_t *p = plp[s] + i; + int x = types[p->aux>>16&0x3f]; + for (j = 0; j < 4; ++j) + if (x == bca->indel_types[j]) break; + p->aux = j<<16 | (j == 4? 0 : (p->aux&0xffff)); + if ((p->aux>>16&0x3f) > 0) ++n_alt; + //fprintf(stderr, "X pos=%d read=%d:%d name=%s call=%d type=%d seqQ=%d indelQ=%d\n", pos, s, i, bam1_qname(p->b), (p->aux>>16)&0x3f, bca->indel_types[(p->aux>>16)&0x3f], (p->aux>>8)&0xff, p->aux&0xff); + } + } + + if (sc != sc_a) free(sc); + if (sumq != sumq_a) free(sumq); + } + free(score1); free(score2); + // free + for (i = 0; i < n; ++i) free(ref_sample[i]); + free(ref_sample); + free(types); free(inscns); + return n_alt > 0? 0 : -1; +} diff --git a/samtools/bam2bcf_indel.c.pysam.c b/samtools/bam2bcf_indel.c.pysam.c new file mode 100644 index 0000000..8241d37 --- /dev/null +++ b/samtools/bam2bcf_indel.c.pysam.c @@ -0,0 +1,541 @@ +#include "samtools.pysam.h" + +/* bam2bcf_indel.c -- indel caller. + + Copyright (C) 2010, 2011 Broad Institute. + Copyright (C) 2012-2014 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include "htslib/hts.h" +#include "htslib/sam.h" +#include "bam2bcf.h" +#include "htslib/khash.h" +KHASH_SET_INIT_STR(rg) + +#include "htslib/ksort.h" +KSORT_INIT_GENERIC(uint32_t) + +#define MINUS_CONST 0x10000000 +#define INDEL_WINDOW_SIZE 50 + +void *bcf_call_add_rg(void *_hash, const char *hdtext, const char *list) +{ + const char *s, *p, *q, *r, *t; + khash_t(rg) *hash; + if (list == 0 || hdtext == 0) return _hash; + if (_hash == 0) _hash = kh_init(rg); + hash = (khash_t(rg)*)_hash; + if ((s = strstr(hdtext, "@RG\t")) == 0) return hash; + do { + t = strstr(s + 4, "@RG\t"); // the next @RG + if ((p = strstr(s, "\tID:")) != 0) p += 4; + if ((q = strstr(s, "\tPL:")) != 0) q += 4; + if (p && q && (t == 0 || (p < t && q < t))) { // ID and PL are both present + int lp, lq; + char *x; + for (r = p; *r && *r != '\t' && *r != '\n'; ++r) { } + lp = r - p; + for (r = q; *r && *r != '\t' && *r != '\n'; ++r) { } + lq = r - q; + x = calloc((lp > lq? lp : lq) + 1, 1); + for (r = q; *r && *r != '\t' && *r != '\n'; ++r) x[r-q] = *r; + if (strstr(list, x)) { // insert ID to the hash table + khint_t k; + int ret; + for (r = p; *r && *r != '\t' && *r != '\n'; ++r) x[r-p] = *r; + x[r-p] = 0; + k = kh_get(rg, hash, x); + if (k == kh_end(hash)) k = kh_put(rg, hash, x, &ret); + else free(x); + } else free(x); + } + s = t; + } while (s); + return hash; +} + +void bcf_call_del_rghash(void *_hash) +{ + khint_t k; + khash_t(rg) *hash = (khash_t(rg)*)_hash; + if (hash == 0) return; + for (k = kh_begin(hash); k < kh_end(hash); ++k) + if (kh_exist(hash, k)) + free((char*)kh_key(hash, k)); + kh_destroy(rg, hash); +} + +static int tpos2qpos(const bam1_core_t *c, const uint32_t *cigar, int32_t tpos, int is_left, int32_t *_tpos) +{ + int k, x = c->pos, y = 0, last_y = 0; + *_tpos = c->pos; + for (k = 0; k < c->n_cigar; ++k) { + int op = cigar[k] & BAM_CIGAR_MASK; + int l = cigar[k] >> BAM_CIGAR_SHIFT; + if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { + if (c->pos > tpos) return y; + if (x + l > tpos) { + *_tpos = tpos; + return y + (tpos - x); + } + x += l; y += l; + last_y = y; + } else if (op == BAM_CINS || op == BAM_CSOFT_CLIP) y += l; + else if (op == BAM_CDEL || op == BAM_CREF_SKIP) { + if (x + l > tpos) { + *_tpos = is_left? x : x + l; + return y; + } + x += l; + } + } + *_tpos = x; + return last_y; +} +// FIXME: check if the inserted sequence is consistent with the homopolymer run +// l is the relative gap length and l_run is the length of the homopolymer on the reference +static inline int est_seqQ(const bcf_callaux_t *bca, int l, int l_run) +{ + int q, qh; + q = bca->openQ + bca->extQ * (abs(l) - 1); + qh = l_run >= 3? (int)(bca->tandemQ * (double)abs(l) / l_run + .499) : 1000; + return q < qh? q : qh; +} + +static inline int est_indelreg(int pos, const char *ref, int l, char *ins4) +{ + int i, j, max = 0, max_i = pos, score = 0; + l = abs(l); + for (i = pos + 1, j = 0; ref[i]; ++i, ++j) { + if (ins4) score += (toupper(ref[i]) != "ACGTN"[(int)ins4[j%l]])? -10 : 1; + else score += (toupper(ref[i]) != toupper(ref[pos+1+j%l]))? -10 : 1; + if (score < 0) break; + if (max < score) max = score, max_i = i; + } + return max_i - pos; +} + +/* + notes: + - n .. number of samples + - the routine sets bam_pileup1_t.aux of each read as follows: + - 6: unused + - 6: the call; index to bcf_callaux_t.indel_types .. (aux>>16)&0x3f + - 8: estimated sequence quality .. (aux>>8)&0xff + - 8: indel quality .. aux&0xff + */ +int bcf_call_gap_prep(int n, int *n_plp, bam_pileup1_t **plp, int pos, bcf_callaux_t *bca, const char *ref, + const void *rghash) +{ + int i, s, j, k, t, n_types, *types, max_rd_len, left, right, max_ins, *score1, *score2, max_ref2; + int N, K, l_run, ref_type, n_alt; + char *inscns = 0, *ref2, *query, **ref_sample; + khash_t(rg) *hash = (khash_t(rg)*)rghash; + if (ref == 0 || bca == 0) return -1; + // mark filtered reads + if (rghash) { + N = 0; + for (s = N = 0; s < n; ++s) { + for (i = 0; i < n_plp[s]; ++i) { + bam_pileup1_t *p = plp[s] + i; + const uint8_t *rg = bam_aux_get(p->b, "RG"); + p->aux = 1; // filtered by default + if (rg) { + khint_t k = kh_get(rg, hash, (const char*)(rg + 1)); + if (k != kh_end(hash)) p->aux = 0, ++N; // not filtered + } + } + } + if (N == 0) return -1; // no reads left + } + // determine if there is a gap + for (s = N = 0; s < n; ++s) { + for (i = 0; i < n_plp[s]; ++i) + if (plp[s][i].indel != 0) break; + if (i < n_plp[s]) break; + } + if (s == n) return -1; // there is no indel at this position. + for (s = N = 0; s < n; ++s) N += n_plp[s]; // N is the total number of reads + { // find out how many types of indels are present + bca->max_support = bca->max_frac = 0; + int m, n_alt = 0, n_tot = 0, indel_support_ok = 0; + uint32_t *aux; + aux = calloc(N + 1, 4); + m = max_rd_len = 0; + aux[m++] = MINUS_CONST; // zero indel is always a type + for (s = 0; s < n; ++s) { + int na = 0, nt = 0; + for (i = 0; i < n_plp[s]; ++i) { + const bam_pileup1_t *p = plp[s] + i; + if (rghash == 0 || p->aux == 0) { + ++nt; + if (p->indel != 0) { + ++na; + aux[m++] = MINUS_CONST + p->indel; + } + } + j = bam_cigar2qlen(p->b->core.n_cigar, bam_get_cigar(p->b)); + if (j > max_rd_len) max_rd_len = j; + } + double frac = (double)na/nt; + if ( !indel_support_ok && na >= bca->min_support && frac >= bca->min_frac ) + indel_support_ok = 1; + if ( na > bca->max_support && frac > 0 ) bca->max_support = na, bca->max_frac = frac; + n_alt += na; + n_tot += nt; + } + // To prevent long stretches of N's to be mistaken for indels (sometimes thousands of bases), + // check the number of N's in the sequence and skip places where half or more reference bases are Ns. + int nN=0; for (i=pos; i-pos(i-pos) ) { free(aux); return -1; } + + ks_introsort(uint32_t, m, aux); + // squeeze out identical types + for (i = 1, n_types = 1; i < m; ++i) + if (aux[i] != aux[i-1]) ++n_types; + // Taking totals makes it hard to call rare indels + if ( !bca->per_sample_flt ) + indel_support_ok = ( (double)n_alt / n_tot < bca->min_frac || n_alt < bca->min_support ) ? 0 : 1; + if ( n_types == 1 || !indel_support_ok ) { // then skip + free(aux); return -1; + } + if (n_types >= 64) { + free(aux); + // TODO revisit how/whether to control printing this warning + if (hts_verbose >= 2) + fprintf(samtools_stderr, "[%s] excessive INDEL alleles at position %d. Skip the position.\n", __func__, pos + 1); + return -1; + } + types = (int*)calloc(n_types, sizeof(int)); + t = 0; + types[t++] = aux[0] - MINUS_CONST; + for (i = 1; i < m; ++i) + if (aux[i] != aux[i-1]) + types[t++] = aux[i] - MINUS_CONST; + free(aux); + for (t = 0; t < n_types; ++t) + if (types[t] == 0) break; + ref_type = t; // the index of the reference type (0) + } + { // calculate left and right boundary + left = pos > INDEL_WINDOW_SIZE? pos - INDEL_WINDOW_SIZE : 0; + right = pos + INDEL_WINDOW_SIZE; + if (types[0] < 0) right -= types[0]; + // in case the alignments stand out the reference + for (i = pos; i < right; ++i) + if (ref[i] == 0) break; + right = i; + } + /* The following block fixes a long-existing flaw in the INDEL + * calling model: the interference of nearby SNPs. However, it also + * reduces the power because sometimes, substitutions caused by + * indels are not distinguishable from true mutations. Multiple + * sequence realignment helps to increase the power. + * + * Masks mismatches present in at least 70% of the reads with 'N'. + */ + { // construct per-sample consensus + int L = right - left + 1, max_i, max2_i; + uint32_t *cns, max, max2; + char *ref0, *r; + ref_sample = calloc(n, sizeof(char*)); + cns = calloc(L, 4); + ref0 = calloc(L, 1); + for (i = 0; i < right - left; ++i) + ref0[i] = seq_nt16_table[(int)ref[i+left]]; + for (s = 0; s < n; ++s) { + r = ref_sample[s] = calloc(L, 1); + memset(cns, 0, sizeof(int) * L); + // collect ref and non-ref counts + for (i = 0; i < n_plp[s]; ++i) { + bam_pileup1_t *p = plp[s] + i; + bam1_t *b = p->b; + uint32_t *cigar = bam_get_cigar(b); + uint8_t *seq = bam_get_seq(b); + int x = b->core.pos, y = 0; + for (k = 0; k < b->core.n_cigar; ++k) { + int op = cigar[k]&0xf; + int j, l = cigar[k]>>4; + if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { + for (j = 0; j < l; ++j) + if (x + j >= left && x + j < right) + cns[x+j-left] += (bam_seqi(seq, y+j) == ref0[x+j-left])? 1 : 0x10000; + x += l; y += l; + } else if (op == BAM_CDEL || op == BAM_CREF_SKIP) x += l; + else if (op == BAM_CINS || op == BAM_CSOFT_CLIP) y += l; + } + } + // determine the consensus + for (i = 0; i < right - left; ++i) r[i] = ref0[i]; + max = max2 = 0; max_i = max2_i = -1; + for (i = 0; i < right - left; ++i) { + if (cns[i]>>16 >= max>>16) max2 = max, max2_i = max_i, max = cns[i], max_i = i; + else if (cns[i]>>16 >= max2>>16) max2 = cns[i], max2_i = i; + } + if ((double)(max&0xffff) / ((max&0xffff) + (max>>16)) >= 0.7) max_i = -1; + if ((double)(max2&0xffff) / ((max2&0xffff) + (max2>>16)) >= 0.7) max2_i = -1; + if (max_i >= 0) r[max_i] = 15; + if (max2_i >= 0) r[max2_i] = 15; + //for (i = 0; i < right - left; ++i) fputc("=ACMGRSVTWYHKDBN"[(int)r[i]], samtools_stderr); fputc('\n', samtools_stderr); + } + free(ref0); free(cns); + } + { // the length of the homopolymer run around the current position + int c = seq_nt16_table[(int)ref[pos + 1]]; + if (c == 15) l_run = 1; + else { + for (i = pos + 2; ref[i]; ++i) + if (seq_nt16_table[(int)ref[i]] != c) break; + l_run = i; + for (i = pos; i >= 0; --i) + if (seq_nt16_table[(int)ref[i]] != c) break; + l_run -= i + 1; + } + } + // construct the consensus sequence + max_ins = types[n_types - 1]; // max_ins is at least 0 + if (max_ins > 0) { + int *inscns_aux = calloc(5 * n_types * max_ins, sizeof(int)); + // count the number of occurrences of each base at each position for each type of insertion + for (t = 0; t < n_types; ++t) { + if (types[t] > 0) { + for (s = 0; s < n; ++s) { + for (i = 0; i < n_plp[s]; ++i) { + bam_pileup1_t *p = plp[s] + i; + if (p->indel == types[t]) { + uint8_t *seq = bam_get_seq(p->b); + for (k = 1; k <= p->indel; ++k) { + int c = seq_nt16_int[bam_seqi(seq, p->qpos + k)]; + assert(c<5); + ++inscns_aux[(t*max_ins+(k-1))*5 + c]; + } + } + } + } + } + } + // use the majority rule to construct the consensus + inscns = calloc(n_types * max_ins, 1); + for (t = 0; t < n_types; ++t) { + for (j = 0; j < types[t]; ++j) { + int max = 0, max_k = -1, *ia = &inscns_aux[(t*max_ins+j)*5]; + for (k = 0; k < 5; ++k) + if (ia[k] > max) + max = ia[k], max_k = k; + inscns[t*max_ins + j] = max? max_k : 4; + if ( max_k==4 ) { types[t] = 0; break; } // discard insertions which contain N's + } + } + free(inscns_aux); + } + // compute the likelihood given each type of indel for each read + max_ref2 = right - left + 2 + 2 * (max_ins > -types[0]? max_ins : -types[0]); + ref2 = calloc(max_ref2, 1); + query = calloc(right - left + max_rd_len + max_ins + 2, 1); + score1 = calloc(N * n_types, sizeof(int)); + score2 = calloc(N * n_types, sizeof(int)); + bca->indelreg = 0; + for (t = 0; t < n_types; ++t) { + int l, ir; + probaln_par_t apf1 = { 1e-4, 1e-2, 10 }, apf2 = { 1e-6, 1e-3, 10 }; + apf1.bw = apf2.bw = abs(types[t]) + 3; + // compute indelreg + if (types[t] == 0) ir = 0; + else if (types[t] > 0) ir = est_indelreg(pos, ref, types[t], &inscns[t*max_ins]); + else ir = est_indelreg(pos, ref, -types[t], 0); + if (ir > bca->indelreg) bca->indelreg = ir; +// fprintf(samtools_stderr, "%d, %d, %d\n", pos, types[t], ir); + // realignment + for (s = K = 0; s < n; ++s) { + // write ref2 + for (k = 0, j = left; j <= pos; ++j) + ref2[k++] = seq_nt16_int[(int)ref_sample[s][j-left]]; + if (types[t] <= 0) j += -types[t]; + else for (l = 0; l < types[t]; ++l) + ref2[k++] = inscns[t*max_ins + l]; + for (; j < right && ref[j]; ++j) + ref2[k++] = seq_nt16_int[(int)ref_sample[s][j-left]]; + for (; k < max_ref2; ++k) ref2[k] = 4; + if (j < right) right = j; + // align each read to ref2 + for (i = 0; i < n_plp[s]; ++i, ++K) { + bam_pileup1_t *p = plp[s] + i; + int qbeg, qend, tbeg, tend, sc, kk; + uint8_t *seq = bam_get_seq(p->b); + uint32_t *cigar = bam_get_cigar(p->b); + if (p->b->core.flag&4) continue; // unmapped reads + // FIXME: the following loop should be better moved outside; nonetheless, realignment should be much slower anyway. + for (kk = 0; kk < p->b->core.n_cigar; ++kk) + if ((cigar[kk]&BAM_CIGAR_MASK) == BAM_CREF_SKIP) break; + if (kk < p->b->core.n_cigar) continue; + // FIXME: the following skips soft clips, but using them may be more sensitive. + // determine the start and end of sequences for alignment + qbeg = tpos2qpos(&p->b->core, bam_get_cigar(p->b), left, 0, &tbeg); + qend = tpos2qpos(&p->b->core, bam_get_cigar(p->b), right, 1, &tend); + if (types[t] < 0) { + int l = -types[t]; + tbeg = tbeg - l > left? tbeg - l : left; + } + // write the query sequence + for (l = qbeg; l < qend; ++l) + query[l - qbeg] = seq_nt16_int[bam_seqi(seq, l)]; + { // do realignment; this is the bottleneck + const uint8_t *qual = bam_get_qual(p->b), *bq; + uint8_t *qq; + qq = calloc(qend - qbeg, 1); + bq = (uint8_t*)bam_aux_get(p->b, "ZQ"); + if (bq) ++bq; // skip type + for (l = qbeg; l < qend; ++l) { + qq[l - qbeg] = bq? qual[l] + (bq[l] - 64) : qual[l]; + if (qq[l - qbeg] > 30) qq[l - qbeg] = 30; + if (qq[l - qbeg] < 7) qq[l - qbeg] = 7; + } + sc = probaln_glocal((uint8_t*)ref2 + tbeg - left, tend - tbeg + abs(types[t]), + (uint8_t*)query, qend - qbeg, qq, &apf1, 0, 0); + l = (int)(100. * sc / (qend - qbeg) + .499); // used for adjusting indelQ below + if (l > 255) l = 255; + score1[K*n_types + t] = score2[K*n_types + t] = sc<<8 | l; + if (sc > 5) { + sc = probaln_glocal((uint8_t*)ref2 + tbeg - left, tend - tbeg + abs(types[t]), + (uint8_t*)query, qend - qbeg, qq, &apf2, 0, 0); + l = (int)(100. * sc / (qend - qbeg) + .499); + if (l > 255) l = 255; + score2[K*n_types + t] = sc<<8 | l; + } + free(qq); + } +/* + for (l = 0; l < tend - tbeg + abs(types[t]); ++l) + fputc("ACGTN"[(int)ref2[tbeg-left+l]], samtools_stderr); + fputc('\n', samtools_stderr); + for (l = 0; l < qend - qbeg; ++l) fputc("ACGTN"[(int)query[l]], samtools_stderr); + fputc('\n', samtools_stderr); + fprintf(samtools_stderr, "pos=%d type=%d read=%d:%d name=%s qbeg=%d tbeg=%d score=%d\n", pos, types[t], s, i, bam1_qname(p->b), qbeg, tbeg, sc); +*/ + } + } + } + free(ref2); free(query); + { // compute indelQ + int sc_a[16], sumq_a[16]; + int tmp, *sc = sc_a, *sumq = sumq_a; + if (n_types > 16) { + sc = (int *)malloc(n_types * sizeof(int)); + sumq = (int *)malloc(n_types * sizeof(int)); + } + memset(sumq, 0, n_types * sizeof(int)); + for (s = K = 0; s < n; ++s) { + for (i = 0; i < n_plp[s]; ++i, ++K) { + bam_pileup1_t *p = plp[s] + i; + int *sct = &score1[K*n_types], indelQ1, indelQ2, seqQ, indelQ; + for (t = 0; t < n_types; ++t) sc[t] = sct[t]<<6 | t; + for (t = 1; t < n_types; ++t) // insertion sort + for (j = t; j > 0 && sc[j] < sc[j-1]; --j) + tmp = sc[j], sc[j] = sc[j-1], sc[j-1] = tmp; + /* errmod_cal() assumes that if the call is wrong, the + * likelihoods of other events are equal. This is about + * right for substitutions, but is not desired for + * indels. To reuse errmod_cal(), I have to make + * compromise for multi-allelic indels. + */ + if ((sc[0]&0x3f) == ref_type) { + indelQ1 = (sc[1]>>14) - (sc[0]>>14); + seqQ = est_seqQ(bca, types[sc[1]&0x3f], l_run); + } else { + for (t = 0; t < n_types; ++t) // look for the reference type + if ((sc[t]&0x3f) == ref_type) break; + indelQ1 = (sc[t]>>14) - (sc[0]>>14); + seqQ = est_seqQ(bca, types[sc[0]&0x3f], l_run); + } + tmp = sc[0]>>6 & 0xff; + indelQ1 = tmp > 111? 0 : (int)((1. - tmp/111.) * indelQ1 + .499); // reduce indelQ + sct = &score2[K*n_types]; + for (t = 0; t < n_types; ++t) sc[t] = sct[t]<<6 | t; + for (t = 1; t < n_types; ++t) // insertion sort + for (j = t; j > 0 && sc[j] < sc[j-1]; --j) + tmp = sc[j], sc[j] = sc[j-1], sc[j-1] = tmp; + if ((sc[0]&0x3f) == ref_type) { + indelQ2 = (sc[1]>>14) - (sc[0]>>14); + } else { + for (t = 0; t < n_types; ++t) // look for the reference type + if ((sc[t]&0x3f) == ref_type) break; + indelQ2 = (sc[t]>>14) - (sc[0]>>14); + } + tmp = sc[0]>>6 & 0xff; + indelQ2 = tmp > 111? 0 : (int)((1. - tmp/111.) * indelQ2 + .499); + // pick the smaller between indelQ1 and indelQ2 + indelQ = indelQ1 < indelQ2? indelQ1 : indelQ2; + if (indelQ > 255) indelQ = 255; + if (seqQ > 255) seqQ = 255; + p->aux = (sc[0]&0x3f)<<16 | seqQ<<8 | indelQ; // use 22 bits in total + sumq[sc[0]&0x3f] += indelQ < seqQ? indelQ : seqQ; +// fprintf(samtools_stderr, "pos=%d read=%d:%d name=%s call=%d indelQ=%d seqQ=%d\n", pos, s, i, bam1_qname(p->b), types[sc[0]&0x3f], indelQ, seqQ); + } + } + // determine bca->indel_types[] and bca->inscns + bca->maxins = max_ins; + bca->inscns = realloc(bca->inscns, bca->maxins * 4); + for (t = 0; t < n_types; ++t) + sumq[t] = sumq[t]<<6 | t; + for (t = 1; t < n_types; ++t) // insertion sort + for (j = t; j > 0 && sumq[j] > sumq[j-1]; --j) + tmp = sumq[j], sumq[j] = sumq[j-1], sumq[j-1] = tmp; + for (t = 0; t < n_types; ++t) // look for the reference type + if ((sumq[t]&0x3f) == ref_type) break; + if (t) { // then move the reference type to the first + tmp = sumq[t]; + for (; t > 0; --t) sumq[t] = sumq[t-1]; + sumq[0] = tmp; + } + for (t = 0; t < 4; ++t) bca->indel_types[t] = B2B_INDEL_NULL; + for (t = 0; t < 4 && t < n_types; ++t) { + bca->indel_types[t] = types[sumq[t]&0x3f]; + memcpy(&bca->inscns[t * bca->maxins], &inscns[(sumq[t]&0x3f) * max_ins], bca->maxins); + } + // update p->aux + for (s = n_alt = 0; s < n; ++s) { + for (i = 0; i < n_plp[s]; ++i) { + bam_pileup1_t *p = plp[s] + i; + int x = types[p->aux>>16&0x3f]; + for (j = 0; j < 4; ++j) + if (x == bca->indel_types[j]) break; + p->aux = j<<16 | (j == 4? 0 : (p->aux&0xffff)); + if ((p->aux>>16&0x3f) > 0) ++n_alt; + //fprintf(samtools_stderr, "X pos=%d read=%d:%d name=%s call=%d type=%d seqQ=%d indelQ=%d\n", pos, s, i, bam1_qname(p->b), (p->aux>>16)&0x3f, bca->indel_types[(p->aux>>16)&0x3f], (p->aux>>8)&0xff, p->aux&0xff); + } + } + + if (sc != sc_a) free(sc); + if (sumq != sumq_a) free(sumq); + } + free(score1); free(score2); + // free + for (i = 0; i < n; ++i) free(ref_sample[i]); + free(ref_sample); + free(types); free(inscns); + return n_alt > 0? 0 : -1; +} diff --git a/samtools/bam2depth.c b/samtools/bam2depth.c new file mode 100644 index 0000000..b732e8e --- /dev/null +++ b/samtools/bam2depth.c @@ -0,0 +1,311 @@ +/* bam2depth.c -- depth subcommand. + + Copyright (C) 2011, 2012 Broad Institute. + Copyright (C) 2012-2014 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +/* This program demonstrates how to generate pileup from multiple BAMs + * simutaneously, to achieve random access and to use the BED interface. + * To compile this program separately, you may: + * + * gcc -g -O2 -Wall -o bam2depth -D_MAIN_BAM2DEPTH bam2depth.c -lhts -lz + */ + +#include + +#include +#include +#include +#include +#include +#include "htslib/sam.h" +#include "samtools.h" +#include "sam_opts.h" + +typedef struct { // auxiliary data structure + samFile *fp; // the file handle + bam_hdr_t *hdr; // the file header + hts_itr_t *iter; // NULL if a region not specified + int min_mapQ, min_len; // mapQ filter; length filter +} aux_t; + +void *bed_read(const char *fn); // read a BED or position list file +void bed_destroy(void *_h); // destroy the BED data structure +int bed_overlap(const void *_h, const char *chr, int beg, int end); // test if chr:beg-end overlaps +int bed_query(const void *_h, const char *chr, int pos, int *beg, int *end); + +// This function reads a BAM alignment from one BAM file. +static int read_bam(void *data, bam1_t *b) // read level filters better go here to avoid pileup +{ + aux_t *aux = (aux_t*)data; // data in fact is a pointer to an auxiliary structure + int ret; + while (1) + { + ret = aux->iter? sam_itr_next(aux->fp, aux->iter, b) : sam_read1(aux->fp, aux->hdr, b); + if ( ret<0 ) break; + if ( b->core.flag & (BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP) ) continue; + if ( (int)b->core.qual < aux->min_mapQ ) continue; + if ( aux->min_len && bam_cigar2qlen(b->core.n_cigar, bam_get_cigar(b)) < aux->min_len ) continue; + break; + } + return ret; +} + +int read_file_list(const char *file_list,int *n,char **argv[]); + +static int usage() { + fprintf(stderr, "\n"); + fprintf(stderr, "Usage: samtools depth [options] in1.bam [in2.bam [...]]\n"); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " -a output all positions (including zero depth)\n"); + fprintf(stderr, " -a -a (or -aa) output absolutely all positions, including unused ref. sequences\n"); + fprintf(stderr, " -b list of positions or regions\n"); + fprintf(stderr, " -f list of input BAM filenames, one per line [null]\n"); + fprintf(stderr, " -l read length threshold (ignore reads shorter than ) [0]\n"); + fprintf(stderr, " -d/-m maximum coverage depth [8000]\n"); // the htslib's default + fprintf(stderr, " -q base quality threshold [0]\n"); + fprintf(stderr, " -Q mapping quality threshold [0]\n"); + fprintf(stderr, " -r region\n"); + + sam_global_opt_help(stderr, "-.--.-"); + + fprintf(stderr, "\n"); + fprintf(stderr, "The output is a simple tab-separated table with three columns: reference name,\n"); + fprintf(stderr, "position, and coverage depth. Note that positions with zero coverage may be\n"); + fprintf(stderr, "omitted by default; see the -a option.\n"); + fprintf(stderr, "\n"); + + return 1; +} + +int main_depth(int argc, char *argv[]) +{ + int i, n, tid, reg_tid, beg, end, pos, *n_plp, baseQ = 0, mapQ = 0, min_len = 0; + int all = 0, status = EXIT_SUCCESS, nfiles, max_depth = -1; + const bam_pileup1_t **plp; + char *reg = 0; // specified region + void *bed = 0; // BED data structure + char *file_list = NULL, **fn = NULL; + bam_hdr_t *h = NULL; // BAM header of the 1st input + aux_t **data; + bam_mplp_t mplp; + int last_pos = -1, last_tid = -1, ret; + + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, '-', '-', 0, '-'), + { NULL, 0, NULL, 0 } + }; + + // parse the command line + while ((n = getopt_long(argc, argv, "r:b:q:Q:l:f:am:d:", lopts, NULL)) >= 0) { + switch (n) { + case 'l': min_len = atoi(optarg); break; // minimum query length + case 'r': reg = strdup(optarg); break; // parsing a region requires a BAM header + case 'b': + bed = bed_read(optarg); // BED or position list file can be parsed now + if (!bed) { print_error_errno("depth", "Could not read file \"%s\"", optarg); return 1; } + break; + case 'q': baseQ = atoi(optarg); break; // base quality threshold + case 'Q': mapQ = atoi(optarg); break; // mapping quality threshold + case 'f': file_list = optarg; break; + case 'a': all++; break; + case 'd': case 'm': max_depth = atoi(optarg); break; // maximum coverage depth + default: if (parse_sam_global_opt(n, optarg, lopts, &ga) == 0) break; + /* else fall-through */ + case '?': return usage(); + } + } + if (optind == argc && !file_list) + return usage(); + + // initialize the auxiliary data structures + if (file_list) + { + if ( read_file_list(file_list,&nfiles,&fn) ) return 1; + n = nfiles; + argv = fn; + optind = 0; + } + else + n = argc - optind; // the number of BAMs on the command line + data = calloc(n, sizeof(aux_t*)); // data[i] for the i-th input + reg_tid = 0; beg = 0; end = INT_MAX; // set the default region + for (i = 0; i < n; ++i) { + int rf; + data[i] = calloc(1, sizeof(aux_t)); + data[i]->fp = sam_open_format(argv[optind+i], "r", &ga.in); // open BAM + if (data[i]->fp == NULL) { + print_error_errno("depth", "Could not open \"%s\"", argv[optind+i]); + status = EXIT_FAILURE; + goto depth_end; + } + rf = SAM_FLAG | SAM_RNAME | SAM_POS | SAM_MAPQ | SAM_CIGAR | SAM_SEQ; + if (baseQ) rf |= SAM_QUAL; + if (hts_set_opt(data[i]->fp, CRAM_OPT_REQUIRED_FIELDS, rf)) { + fprintf(stderr, "Failed to set CRAM_OPT_REQUIRED_FIELDS value\n"); + return 1; + } + if (hts_set_opt(data[i]->fp, CRAM_OPT_DECODE_MD, 0)) { + fprintf(stderr, "Failed to set CRAM_OPT_DECODE_MD value\n"); + return 1; + } + data[i]->min_mapQ = mapQ; // set the mapQ filter + data[i]->min_len = min_len; // set the qlen filter + data[i]->hdr = sam_hdr_read(data[i]->fp); // read the BAM header + if (data[i]->hdr == NULL) { + fprintf(stderr, "Couldn't read header for \"%s\"\n", + argv[optind+i]); + status = EXIT_FAILURE; + goto depth_end; + } + if (reg) { // if a region is specified + hts_idx_t *idx = sam_index_load(data[i]->fp, argv[optind+i]); // load the index + if (idx == NULL) { + print_error("depth", "can't load index for \"%s\"", argv[optind+i]); + status = EXIT_FAILURE; + goto depth_end; + } + data[i]->iter = sam_itr_querys(idx, data[i]->hdr, reg); // set the iterator + hts_idx_destroy(idx); // the index is not needed any more; free the memory + if (data[i]->iter == NULL) { + print_error("depth", "can't parse region \"%s\"", reg); + status = EXIT_FAILURE; + goto depth_end; + } + } + } + + h = data[0]->hdr; // easy access to the header of the 1st BAM + if (reg) { + beg = data[0]->iter->beg; // and to the parsed region coordinates + end = data[0]->iter->end; + reg_tid = data[0]->iter->tid; + } + + // the core multi-pileup loop + mplp = bam_mplp_init(n, read_bam, (void**)data); // initialization + if (0 < max_depth) + bam_mplp_set_maxcnt(mplp,max_depth); // set maximum coverage depth + n_plp = calloc(n, sizeof(int)); // n_plp[i] is the number of covering reads from the i-th BAM + plp = calloc(n, sizeof(bam_pileup1_t*)); // plp[i] points to the array of covering reads (internal in mplp) + while ((ret=bam_mplp_auto(mplp, &tid, &pos, n_plp, plp)) > 0) { // come to the next covered position + if (pos < beg || pos >= end) continue; // out of range; skip + if (tid >= h->n_targets) continue; // diff number of @SQ lines per file? + if (all) { + while (tid > last_tid) { + if (last_tid >= 0 && !reg) { + // Deal with remainder or entirety of last tid. + while (++last_pos < h->target_len[last_tid]) { + // Horribly inefficient, but the bed API is an obfuscated black box. + if (bed && bed_overlap(bed, h->target_name[last_tid], last_pos, last_pos + 1) == 0) + continue; + fputs(h->target_name[last_tid], stdout); printf("\t%d", last_pos+1); + for (i = 0; i < n; i++) + putchar('\t'), putchar('0'); + putchar('\n'); + } + } + last_tid++; + last_pos = -1; + if (all < 2) + break; + } + + // Deal with missing portion of current tid + while (++last_pos < pos) { + if (last_pos < beg) continue; // out of range; skip + if (bed && bed_overlap(bed, h->target_name[tid], last_pos, last_pos + 1) == 0) + continue; + fputs(h->target_name[tid], stdout); printf("\t%d", last_pos+1); + for (i = 0; i < n; i++) + putchar('\t'), putchar('0'); + putchar('\n'); + } + + last_tid = tid; + last_pos = pos; + } + if (bed && bed_overlap(bed, h->target_name[tid], pos, pos + 1) == 0) continue; + fputs(h->target_name[tid], stdout); printf("\t%d", pos+1); // a customized printf() would be faster + for (i = 0; i < n; ++i) { // base level filters have to go here + int j, m = 0; + for (j = 0; j < n_plp[i]; ++j) { + const bam_pileup1_t *p = plp[i] + j; // DON'T modfity plp[][] unless you really know + if (p->is_del || p->is_refskip) ++m; // having dels or refskips at tid:pos + else if (bam_get_qual(p->b)[p->qpos] < baseQ) ++m; // low base quality + } + printf("\t%d", n_plp[i] - m); // this the depth to output + } + putchar('\n'); + } + if (ret < 0) status = EXIT_FAILURE; + free(n_plp); free(plp); + bam_mplp_destroy(mplp); + + if (all) { + // Handle terminating region + if (last_tid < 0 && reg && all > 1) { + last_tid = reg_tid; + last_pos = beg-1; + } + while (last_tid >= 0 && last_tid < h->n_targets) { + while (++last_pos < h->target_len[last_tid]) { + if (last_pos >= end) break; + if (bed && bed_overlap(bed, h->target_name[last_tid], last_pos, last_pos + 1) == 0) + continue; + fputs(h->target_name[last_tid], stdout); printf("\t%d", last_pos+1); + for (i = 0; i < n; i++) + putchar('\t'), putchar('0'); + putchar('\n'); + } + last_tid++; + last_pos = -1; + if (all < 2 || reg) + break; + } + } + +depth_end: + for (i = 0; i < n && data[i]; ++i) { + bam_hdr_destroy(data[i]->hdr); + if (data[i]->fp) sam_close(data[i]->fp); + hts_itr_destroy(data[i]->iter); + free(data[i]); + } + free(data); free(reg); + if (bed) bed_destroy(bed); + if ( file_list ) + { + for (i=0; i + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +/* This program demonstrates how to generate pileup from multiple BAMs + * simutaneously, to achieve random access and to use the BED interface. + * To compile this program separately, you may: + * + * gcc -g -O2 -Wall -o bam2depth -D_MAIN_BAM2DEPTH bam2depth.c -lhts -lz + */ + +#include + +#include +#include +#include +#include +#include +#include "htslib/sam.h" +#include "samtools.h" +#include "sam_opts.h" + +typedef struct { // auxiliary data structure + samFile *fp; // the file handle + bam_hdr_t *hdr; // the file header + hts_itr_t *iter; // NULL if a region not specified + int min_mapQ, min_len; // mapQ filter; length filter +} aux_t; + +void *bed_read(const char *fn); // read a BED or position list file +void bed_destroy(void *_h); // destroy the BED data structure +int bed_overlap(const void *_h, const char *chr, int beg, int end); // test if chr:beg-end overlaps +int bed_query(const void *_h, const char *chr, int pos, int *beg, int *end); + +// This function reads a BAM alignment from one BAM file. +static int read_bam(void *data, bam1_t *b) // read level filters better go here to avoid pileup +{ + aux_t *aux = (aux_t*)data; // data in fact is a pointer to an auxiliary structure + int ret; + while (1) + { + ret = aux->iter? sam_itr_next(aux->fp, aux->iter, b) : sam_read1(aux->fp, aux->hdr, b); + if ( ret<0 ) break; + if ( b->core.flag & (BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP) ) continue; + if ( (int)b->core.qual < aux->min_mapQ ) continue; + if ( aux->min_len && bam_cigar2qlen(b->core.n_cigar, bam_get_cigar(b)) < aux->min_len ) continue; + break; + } + return ret; +} + +int read_file_list(const char *file_list,int *n,char **argv[]); + +static int usage() { + fprintf(samtools_stderr, "\n"); + fprintf(samtools_stderr, "Usage: samtools depth [options] in1.bam [in2.bam [...]]\n"); + fprintf(samtools_stderr, "Options:\n"); + fprintf(samtools_stderr, " -a output all positions (including zero depth)\n"); + fprintf(samtools_stderr, " -a -a (or -aa) output absolutely all positions, including unused ref. sequences\n"); + fprintf(samtools_stderr, " -b list of positions or regions\n"); + fprintf(samtools_stderr, " -f list of input BAM filenames, one per line [null]\n"); + fprintf(samtools_stderr, " -l read length threshold (ignore reads shorter than ) [0]\n"); + fprintf(samtools_stderr, " -d/-m maximum coverage depth [8000]\n"); // the htslib's default + fprintf(samtools_stderr, " -q base quality threshold [0]\n"); + fprintf(samtools_stderr, " -Q mapping quality threshold [0]\n"); + fprintf(samtools_stderr, " -r region\n"); + + sam_global_opt_help(samtools_stderr, "-.--.-"); + + fprintf(samtools_stderr, "\n"); + fprintf(samtools_stderr, "The output is a simple tab-separated table with three columns: reference name,\n"); + fprintf(samtools_stderr, "position, and coverage depth. Note that positions with zero coverage may be\n"); + fprintf(samtools_stderr, "omitted by default; see the -a option.\n"); + fprintf(samtools_stderr, "\n"); + + return 1; +} + +int main_depth(int argc, char *argv[]) +{ + int i, n, tid, reg_tid, beg, end, pos, *n_plp, baseQ = 0, mapQ = 0, min_len = 0; + int all = 0, status = EXIT_SUCCESS, nfiles, max_depth = -1; + const bam_pileup1_t **plp; + char *reg = 0; // specified region + void *bed = 0; // BED data structure + char *file_list = NULL, **fn = NULL; + bam_hdr_t *h = NULL; // BAM header of the 1st input + aux_t **data; + bam_mplp_t mplp; + int last_pos = -1, last_tid = -1, ret; + + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, '-', '-', 0, '-'), + { NULL, 0, NULL, 0 } + }; + + // parse the command line + while ((n = getopt_long(argc, argv, "r:b:q:Q:l:f:am:d:", lopts, NULL)) >= 0) { + switch (n) { + case 'l': min_len = atoi(optarg); break; // minimum query length + case 'r': reg = strdup(optarg); break; // parsing a region requires a BAM header + case 'b': + bed = bed_read(optarg); // BED or position list file can be parsed now + if (!bed) { print_error_errno("depth", "Could not read file \"%s\"", optarg); return 1; } + break; + case 'q': baseQ = atoi(optarg); break; // base quality threshold + case 'Q': mapQ = atoi(optarg); break; // mapping quality threshold + case 'f': file_list = optarg; break; + case 'a': all++; break; + case 'd': case 'm': max_depth = atoi(optarg); break; // maximum coverage depth + default: if (parse_sam_global_opt(n, optarg, lopts, &ga) == 0) break; + /* else fall-through */ + case '?': return usage(); + } + } + if (optind == argc && !file_list) + return usage(); + + // initialize the auxiliary data structures + if (file_list) + { + if ( read_file_list(file_list,&nfiles,&fn) ) return 1; + n = nfiles; + argv = fn; + optind = 0; + } + else + n = argc - optind; // the number of BAMs on the command line + data = calloc(n, sizeof(aux_t*)); // data[i] for the i-th input + reg_tid = 0; beg = 0; end = INT_MAX; // set the default region + for (i = 0; i < n; ++i) { + int rf; + data[i] = calloc(1, sizeof(aux_t)); + data[i]->fp = sam_open_format(argv[optind+i], "r", &ga.in); // open BAM + if (data[i]->fp == NULL) { + print_error_errno("depth", "Could not open \"%s\"", argv[optind+i]); + status = EXIT_FAILURE; + goto depth_end; + } + rf = SAM_FLAG | SAM_RNAME | SAM_POS | SAM_MAPQ | SAM_CIGAR | SAM_SEQ; + if (baseQ) rf |= SAM_QUAL; + if (hts_set_opt(data[i]->fp, CRAM_OPT_REQUIRED_FIELDS, rf)) { + fprintf(samtools_stderr, "Failed to set CRAM_OPT_REQUIRED_FIELDS value\n"); + return 1; + } + if (hts_set_opt(data[i]->fp, CRAM_OPT_DECODE_MD, 0)) { + fprintf(samtools_stderr, "Failed to set CRAM_OPT_DECODE_MD value\n"); + return 1; + } + data[i]->min_mapQ = mapQ; // set the mapQ filter + data[i]->min_len = min_len; // set the qlen filter + data[i]->hdr = sam_hdr_read(data[i]->fp); // read the BAM header + if (data[i]->hdr == NULL) { + fprintf(samtools_stderr, "Couldn't read header for \"%s\"\n", + argv[optind+i]); + status = EXIT_FAILURE; + goto depth_end; + } + if (reg) { // if a region is specified + hts_idx_t *idx = sam_index_load(data[i]->fp, argv[optind+i]); // load the index + if (idx == NULL) { + print_error("depth", "can't load index for \"%s\"", argv[optind+i]); + status = EXIT_FAILURE; + goto depth_end; + } + data[i]->iter = sam_itr_querys(idx, data[i]->hdr, reg); // set the iterator + hts_idx_destroy(idx); // the index is not needed any more; free the memory + if (data[i]->iter == NULL) { + print_error("depth", "can't parse region \"%s\"", reg); + status = EXIT_FAILURE; + goto depth_end; + } + } + } + + h = data[0]->hdr; // easy access to the header of the 1st BAM + if (reg) { + beg = data[0]->iter->beg; // and to the parsed region coordinates + end = data[0]->iter->end; + reg_tid = data[0]->iter->tid; + } + + // the core multi-pileup loop + mplp = bam_mplp_init(n, read_bam, (void**)data); // initialization + if (0 < max_depth) + bam_mplp_set_maxcnt(mplp,max_depth); // set maximum coverage depth + n_plp = calloc(n, sizeof(int)); // n_plp[i] is the number of covering reads from the i-th BAM + plp = calloc(n, sizeof(bam_pileup1_t*)); // plp[i] points to the array of covering reads (internal in mplp) + while ((ret=bam_mplp_auto(mplp, &tid, &pos, n_plp, plp)) > 0) { // come to the next covered position + if (pos < beg || pos >= end) continue; // out of range; skip + if (tid >= h->n_targets) continue; // diff number of @SQ lines per file? + if (all) { + while (tid > last_tid) { + if (last_tid >= 0 && !reg) { + // Deal with remainder or entirety of last tid. + while (++last_pos < h->target_len[last_tid]) { + // Horribly inefficient, but the bed API is an obfuscated black box. + if (bed && bed_overlap(bed, h->target_name[last_tid], last_pos, last_pos + 1) == 0) + continue; + fputs(h->target_name[last_tid], samtools_stdout); fprintf(samtools_stdout, "\t%d", last_pos+1); + for (i = 0; i < n; i++) + fputc('\t', samtools_stdout), fputc('0', samtools_stdout); + fputc('\n', samtools_stdout); + } + } + last_tid++; + last_pos = -1; + if (all < 2) + break; + } + + // Deal with missing portion of current tid + while (++last_pos < pos) { + if (last_pos < beg) continue; // out of range; skip + if (bed && bed_overlap(bed, h->target_name[tid], last_pos, last_pos + 1) == 0) + continue; + fputs(h->target_name[tid], samtools_stdout); fprintf(samtools_stdout, "\t%d", last_pos+1); + for (i = 0; i < n; i++) + fputc('\t', samtools_stdout), fputc('0', samtools_stdout); + fputc('\n', samtools_stdout); + } + + last_tid = tid; + last_pos = pos; + } + if (bed && bed_overlap(bed, h->target_name[tid], pos, pos + 1) == 0) continue; + fputs(h->target_name[tid], samtools_stdout); fprintf(samtools_stdout, "\t%d", pos+1); // a customized fprintf(samtools_stdout, ) would be faster + for (i = 0; i < n; ++i) { // base level filters have to go here + int j, m = 0; + for (j = 0; j < n_plp[i]; ++j) { + const bam_pileup1_t *p = plp[i] + j; // DON'T modfity plp[][] unless you really know + if (p->is_del || p->is_refskip) ++m; // having dels or refskips at tid:pos + else if (bam_get_qual(p->b)[p->qpos] < baseQ) ++m; // low base quality + } + fprintf(samtools_stdout, "\t%d", n_plp[i] - m); // this the depth to output + } + fputc('\n', samtools_stdout); + } + if (ret < 0) status = EXIT_FAILURE; + free(n_plp); free(plp); + bam_mplp_destroy(mplp); + + if (all) { + // Handle terminating region + if (last_tid < 0 && reg && all > 1) { + last_tid = reg_tid; + last_pos = beg-1; + } + while (last_tid >= 0 && last_tid < h->n_targets) { + while (++last_pos < h->target_len[last_tid]) { + if (last_pos >= end) break; + if (bed && bed_overlap(bed, h->target_name[last_tid], last_pos, last_pos + 1) == 0) + continue; + fputs(h->target_name[last_tid], samtools_stdout); fprintf(samtools_stdout, "\t%d", last_pos+1); + for (i = 0; i < n; i++) + fputc('\t', samtools_stdout), fputc('0', samtools_stdout); + fputc('\n', samtools_stdout); + } + last_tid++; + last_pos = -1; + if (all < 2 || reg) + break; + } + } + +depth_end: + for (i = 0; i < n && data[i]; ++i) { + bam_hdr_destroy(data[i]->hdr); + if (data[i]->fp) sam_close(data[i]->fp); + hts_itr_destroy(data[i]->iter); + free(data[i]); + } + free(data); free(reg); + if (bed) bed_destroy(bed); + if ( file_list ) + { + for (i=0; i + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include "samtools.h" +#include "htslib/thread_pool.h" +#include "sam_opts.h" +#include +#include +#include +#include +#include +#include +#include + +typedef enum { + overwrite_all, + orphan_only, +} rg_mode; + +struct parsed_opts { + char* input_name; + char* output_name; + char* rg_id; + char* rg_line; + rg_mode mode; + sam_global_args ga; + htsThreadPool p; +}; + +struct state; +typedef struct parsed_opts parsed_opts_t; +typedef struct state state_t; + +struct state { + samFile* input_file; + bam_hdr_t* input_header; + samFile* output_file; + bam_hdr_t* output_header; + char* rg_id; + void (*mode_func)(const state_t*, bam1_t*); +}; + +static void cleanup_opts(parsed_opts_t* opts) +{ + if (!opts) return; + free(opts->rg_id); + free(opts->output_name); + free(opts->input_name); + if (opts->p.pool) hts_tpool_destroy(opts->p.pool); + sam_global_args_free(&opts->ga); + free(opts); +} + +static void cleanup_state(state_t* state) +{ + if (!state) return; + free(state->rg_id); + if (state->output_file) sam_close(state->output_file); + bam_hdr_destroy(state->output_header); + if (state->input_file) sam_close(state->input_file); + bam_hdr_destroy(state->input_header); + free(state); +} + +// Converts \t and \n into real tabs and newlines +static char* basic_unescape(const char* in) +{ + assert(in); + char *ptr, *out; + out = ptr = malloc(strlen(in)+1); + size_t size = 0; + while (*in) { + if (*in == '\\') { + ++in; + if (*in == '\0') { + fprintf(stderr, "[%s] Unterminated escape sequence.\n", __func__); + free(out); + return NULL; + } + switch (*in) { + case '\\': + *ptr = '\\'; + break; + case 't': + *ptr = '\t'; + break; + case 'n': + fprintf(stderr, "[%s] \\n in escape sequence is not supported.\n", __func__); + free(out); + return NULL; + default: + fprintf(stderr, "[%s] Unsupported escape sequence.\n", __func__); + free(out); + return NULL; + } + } else { + *ptr = *in; + } + ++in; + ++ptr; + ++size; + } + *ptr = '\0'; + ++size; + char* tmp = (char*)realloc(out, size); + if (!tmp) { + free(out); + } + return tmp; +} + +// Malloc a string containing [s,slim) or to the end of s if slim is NULL. +// If lenp is non-NULL, stores the length of the resulting string there. +static char *dup_substring(const char *s, const char *slim, size_t *lenp) +{ + size_t len = slim? (slim - s) : strlen(s); + char *ns = malloc(len+1); + if (ns == NULL) return NULL; + memcpy(ns, s, len); + ns[len] = '\0'; + if (lenp) *lenp = len; + return ns; +} + +// These are to be replaced by samtools header parser +// Extracts the first @RG line from a string. +static char* get_rg_line(const char* text, size_t* last) +{ + const char* rg = text; + if (rg[0] != '@' || rg[1] != 'R' || rg[2] != 'G' ) { + if ((rg = (const char*)strstr(text,"\n@RG")) == NULL) { + return NULL; + } + rg++;//skip initial \n + } + // duplicate the line for return + return dup_substring(rg, strchr(rg, '\n'), last); +} + +// Given a @RG line return the id +static char* get_rg_id(const char *line) +{ + const char *id = strstr(line, "\tID:"); + if (! id) return NULL; + + id += 4; + return dup_substring(id, strchr(id, '\t'), NULL); +} + +// Confirms the existance of an RG line with a given ID in a bam header +static bool confirm_rg( const bam_hdr_t *hdr, const char* rgid ) +{ + assert( hdr != NULL && rgid != NULL ); + + const char *ptr = hdr->text; + bool found = false; + while (ptr != NULL && *ptr != '\0' && found == false ) { + size_t end = 0; + char* line = get_rg_line(ptr, &end); + if (line == NULL) break; // No more @RG + char* id; + if (((id = get_rg_id(line)) != NULL) && !strcmp(id, rgid)) { + found = true; + } + free(id); + free(line); + ptr += end; + } + return found; +} + +static char* get_first_rgid( const bam_hdr_t *hdr ) +{ + assert( hdr != NULL ); + const char *ptr = hdr->text; + char* found = NULL; + while (ptr != NULL && *ptr != '\0' && found == NULL ) { + size_t end = 0; + char* line = get_rg_line(ptr, &end); + if ( line ) { + found = get_rg_id(line); + } else break; + free(line); + ptr += end; + } + return found; +} + +static void usage(FILE *fp) +{ + fprintf(fp, + "Usage: samtools addreplacerg [options] [-r <@RG line> | -R ] [-o ] \n" + "\n" + "Options:\n" + " -m MODE Set the mode of operation from one of overwrite_all, orphan_only [overwrite_all]\n" + " -o FILE Where to write output to [stdout]\n" + " -r STRING @RG line text\n" + " -R STRING ID of @RG line in existing header to use\n" + ); + sam_global_opt_help(fp, "..O..@"); +} + +static bool parse_args(int argc, char** argv, parsed_opts_t** opts) +{ + *opts = NULL; + int n; + + if (argc == 1) { usage(stdout); return true; } + + parsed_opts_t* retval = calloc(1, sizeof(parsed_opts_t)); + if (! retval ) { + fprintf(stderr, "[%s] Out of memory allocating parsed_opts_t\n", __func__); + return false; + } + // Set defaults + retval->mode = overwrite_all; + sam_global_args_init(&retval->ga); + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS(0, 0, 'O', 0, 0, '@'), + { NULL, 0, NULL, 0 } + }; + kstring_t rg_line = {0,0,NULL}; + + while ((n = getopt_long(argc, argv, "r:R:m:o:O:l:h@:", lopts, NULL)) >= 0) { + switch (n) { + case 'r': + // Are we adding to existing rg line? + if (ks_len(&rg_line) == 0) { + if (strlen(optarg)<3 || (optarg[0] != '@' && optarg[1] != 'R' && optarg[2] != 'G')) { + kputs("@RG\t", &rg_line); + } + } else { + kputs("\t", &rg_line); + } + kputs(optarg, &rg_line); + break; + case 'R': + retval->rg_id = strdup(optarg); + break; + case 'm': { + if (strcmp(optarg, "overwrite_all") == 0) { + retval->mode = overwrite_all; + } else if (strcmp(optarg, "orphan_only") == 0) { + retval->mode = orphan_only; + } else { + usage(stderr); + return false; + } + break; + } + case 'o': + retval->output_name = strdup(optarg); + break; + case 'h': + usage(stdout); + free(retval); + return true; + case '?': + usage(stderr); + free(retval); + return false; + case 'O': + default: + if (parse_sam_global_opt(n, optarg, lopts, &retval->ga) == 0) break; + usage(stderr); + free(retval); + return false; + } + } + retval->rg_line = ks_release(&rg_line); + + if (argc-optind < 1) { + fprintf(stderr, "You must specify an input file.\n"); + usage(stderr); + cleanup_opts(retval); + return false; + } + if (retval->rg_id && retval->rg_line) { + fprintf(stderr, "The options -r and -R are mutually exclusive.\n"); + cleanup_opts(retval); + return false; + } + + if (retval->rg_line) + { + char* tmp = basic_unescape(retval->rg_line); + + if ((retval->rg_id = get_rg_id(tmp)) == NULL) { + fprintf(stderr, "[%s] The supplied RG line lacks an ID tag.\n", __func__); + free(tmp); + cleanup_opts(retval); + return false; + } + retval->rg_line = tmp; + } + retval->input_name = strdup(argv[optind+0]); + + if (retval->ga.nthreads > 0) { + if (!(retval->p.pool = hts_tpool_init(retval->ga.nthreads))) { + fprintf(stderr, "Error creating thread pool\n"); + return false; + } + } + + *opts = retval; + return true; +} + +static void overwrite_all_func(const state_t* state, bam1_t* file_read) +{ + uint8_t* data = (uint8_t*)strdup(state->rg_id); + int len = strlen(state->rg_id)+1; + // If the old exists delete it + uint8_t* old = bam_aux_get(file_read, "RG"); + if (old != NULL) { + bam_aux_del(file_read, old); + } + + bam_aux_append(file_read, "RG", 'Z', len, data); + free(data); +} + +static void orphan_only_func(const state_t* state, bam1_t* file_read) +{ + uint8_t* data = (uint8_t*)strdup(state->rg_id); + int len = strlen(state->rg_id)+1; + // If the old exists don't do anything + uint8_t* old = bam_aux_get(file_read, "RG"); + if (old == NULL) { + bam_aux_append(file_read, "RG",'Z',len,data); + } + free(data); +} + +static bool init(const parsed_opts_t* opts, state_t** state_out) { + state_t* retval = (state_t*) calloc(1, sizeof(state_t)); + if (retval == NULL) { + fprintf(stderr, "[init] Out of memory allocating state struct.\n"); + return false; + } + *state_out = retval; + + // Open files + retval->input_file = sam_open_format(opts->input_name, "r", &opts->ga.in); + if (retval->input_file == NULL) { + print_error_errno("addreplacerg", "could not open \"%s\"", opts->input_name); + return false; + } + retval->input_header = sam_hdr_read(retval->input_file); + + retval->output_header = bam_hdr_dup(retval->input_header); + retval->output_file = sam_open_format(opts->output_name == NULL?"-":opts->output_name, "w", &opts->ga.out); + + if (retval->output_file == NULL) { + print_error_errno("addreplacerg", "could not create \"%s\"", opts->output_name); + return false; + } + + if (opts->p.pool) { + hts_set_opt(retval->input_file, HTS_OPT_THREAD_POOL, &opts->p); + hts_set_opt(retval->output_file, HTS_OPT_THREAD_POOL, &opts->p); + } + + if (opts->rg_line) { + // Append new RG line to header. + // Check does not already exist + if ( confirm_rg(retval->output_header, opts->rg_id) ) { + fprintf(stderr, "[init] ID of new RG line specified conflicts with that of an existing header RG line. Overwrite not yet implemented.\n"); + return false; + } + retval->rg_id = strdup(opts->rg_id); + size_t new_len = strlen( retval->output_header->text ) + strlen( opts->rg_line ) + 2; + char* new_header = malloc(new_len); + if (!new_header) { + fprintf(stderr, "[init] Out of memory whilst writing new header.\n"); + return false; + } + sprintf(new_header,"%s%s\n", retval->output_header->text, opts->rg_line); + free(retval->output_header->text); + retval->output_header->text = new_header; + retval->output_header->l_text = (int)new_len - 1; + } else { + if (opts->rg_id) { + // Confirm what has been supplied exists + if ( !confirm_rg(retval->output_header, opts->rg_id) ) { + fprintf(stderr, "RG ID supplied does not exist in header. Supply full @RG line with -r instead?\n"); + return false; + } + retval->rg_id = strdup(opts->rg_id); + } else { + if ((retval->rg_id = get_first_rgid(retval->output_header)) == NULL ) { + fprintf(stderr, "No RG specified on command line or in existing header.\n"); + return false; + } + } + } + + switch (opts->mode) { + case overwrite_all: + retval->mode_func = &overwrite_all_func; + break; + case orphan_only: + retval->mode_func = &orphan_only_func; + break; + } + + return true; +} + +static bool readgroupise(state_t* state) +{ + if (sam_hdr_write(state->output_file, state->output_header) != 0) { + print_error_errno("addreplacerg", "[%s] Could not write header to output file", __func__); + return false; + } + + bam1_t* file_read = bam_init1(); + int ret; + while ((ret = sam_read1(state->input_file, state->input_header, file_read)) >= 0) { + state->mode_func(state, file_read); + + if (sam_write1(state->output_file, state->output_header, file_read) < 0) { + print_error_errno("addreplacerg", "[%s] Could not write read to output file", __func__); + bam_destroy1(file_read); + return false; + } + } + bam_destroy1(file_read); + if (ret != -1) { + print_error_errno("addreplacerg", "[%s] Error reading from input file", __func__); + return false; + } else { + return true; + } +} + +int main_addreplacerg(int argc, char** argv) +{ + parsed_opts_t* opts = NULL; + state_t* state = NULL; + + if (!parse_args(argc, argv, &opts)) goto error; + if (opts == NULL) return EXIT_SUCCESS; // Not an error but user doesn't want us to proceed + if (!opts || !init(opts, &state)) goto error; + + if (!readgroupise(state)) goto error; + + cleanup_state(state); + cleanup_opts(opts); + + return EXIT_SUCCESS; +error: + cleanup_state(state); + cleanup_opts(opts); + + return EXIT_FAILURE; +} diff --git a/samtools/bam_addrprg.c.pysam.c b/samtools/bam_addrprg.c.pysam.c new file mode 100644 index 0000000..6d65ccb --- /dev/null +++ b/samtools/bam_addrprg.c.pysam.c @@ -0,0 +1,484 @@ +#include "samtools.pysam.h" + +/* bam_addrprg.c -- samtools command to add or replace readgroups. + + Copyright (c) 2013, 2015, 2016 Genome Research Limited. + + Author: Martin O. Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include "samtools.h" +#include "htslib/thread_pool.h" +#include "sam_opts.h" +#include +#include +#include +#include +#include +#include +#include + +typedef enum { + overwrite_all, + orphan_only, +} rg_mode; + +struct parsed_opts { + char* input_name; + char* output_name; + char* rg_id; + char* rg_line; + rg_mode mode; + sam_global_args ga; + htsThreadPool p; +}; + +struct state; +typedef struct parsed_opts parsed_opts_t; +typedef struct state state_t; + +struct state { + samFile* input_file; + bam_hdr_t* input_header; + samFile* output_file; + bam_hdr_t* output_header; + char* rg_id; + void (*mode_func)(const state_t*, bam1_t*); +}; + +static void cleanup_opts(parsed_opts_t* opts) +{ + if (!opts) return; + free(opts->rg_id); + free(opts->output_name); + free(opts->input_name); + if (opts->p.pool) hts_tpool_destroy(opts->p.pool); + sam_global_args_free(&opts->ga); + free(opts); +} + +static void cleanup_state(state_t* state) +{ + if (!state) return; + free(state->rg_id); + if (state->output_file) sam_close(state->output_file); + bam_hdr_destroy(state->output_header); + if (state->input_file) sam_close(state->input_file); + bam_hdr_destroy(state->input_header); + free(state); +} + +// Converts \t and \n into real tabs and newlines +static char* basic_unescape(const char* in) +{ + assert(in); + char *ptr, *out; + out = ptr = malloc(strlen(in)+1); + size_t size = 0; + while (*in) { + if (*in == '\\') { + ++in; + if (*in == '\0') { + fprintf(samtools_stderr, "[%s] Unterminated escape sequence.\n", __func__); + free(out); + return NULL; + } + switch (*in) { + case '\\': + *ptr = '\\'; + break; + case 't': + *ptr = '\t'; + break; + case 'n': + fprintf(samtools_stderr, "[%s] \\n in escape sequence is not supported.\n", __func__); + free(out); + return NULL; + default: + fprintf(samtools_stderr, "[%s] Unsupported escape sequence.\n", __func__); + free(out); + return NULL; + } + } else { + *ptr = *in; + } + ++in; + ++ptr; + ++size; + } + *ptr = '\0'; + ++size; + char* tmp = (char*)realloc(out, size); + if (!tmp) { + free(out); + } + return tmp; +} + +// Malloc a string containing [s,slim) or to the end of s if slim is NULL. +// If lenp is non-NULL, stores the length of the resulting string there. +static char *dup_substring(const char *s, const char *slim, size_t *lenp) +{ + size_t len = slim? (slim - s) : strlen(s); + char *ns = malloc(len+1); + if (ns == NULL) return NULL; + memcpy(ns, s, len); + ns[len] = '\0'; + if (lenp) *lenp = len; + return ns; +} + +// These are to be replaced by samtools header parser +// Extracts the first @RG line from a string. +static char* get_rg_line(const char* text, size_t* last) +{ + const char* rg = text; + if (rg[0] != '@' || rg[1] != 'R' || rg[2] != 'G' ) { + if ((rg = (const char*)strstr(text,"\n@RG")) == NULL) { + return NULL; + } + rg++;//skip initial \n + } + // duplicate the line for return + return dup_substring(rg, strchr(rg, '\n'), last); +} + +// Given a @RG line return the id +static char* get_rg_id(const char *line) +{ + const char *id = strstr(line, "\tID:"); + if (! id) return NULL; + + id += 4; + return dup_substring(id, strchr(id, '\t'), NULL); +} + +// Confirms the existance of an RG line with a given ID in a bam header +static bool confirm_rg( const bam_hdr_t *hdr, const char* rgid ) +{ + assert( hdr != NULL && rgid != NULL ); + + const char *ptr = hdr->text; + bool found = false; + while (ptr != NULL && *ptr != '\0' && found == false ) { + size_t end = 0; + char* line = get_rg_line(ptr, &end); + if (line == NULL) break; // No more @RG + char* id; + if (((id = get_rg_id(line)) != NULL) && !strcmp(id, rgid)) { + found = true; + } + free(id); + free(line); + ptr += end; + } + return found; +} + +static char* get_first_rgid( const bam_hdr_t *hdr ) +{ + assert( hdr != NULL ); + const char *ptr = hdr->text; + char* found = NULL; + while (ptr != NULL && *ptr != '\0' && found == NULL ) { + size_t end = 0; + char* line = get_rg_line(ptr, &end); + if ( line ) { + found = get_rg_id(line); + } else break; + free(line); + ptr += end; + } + return found; +} + +static void usage(FILE *fp) +{ + fprintf(fp, + "Usage: samtools addreplacerg [options] [-r <@RG line> | -R ] [-o ] \n" + "\n" + "Options:\n" + " -m MODE Set the mode of operation from one of overwrite_all, orphan_only [overwrite_all]\n" + " -o FILE Where to write output to [samtools_stdout]\n" + " -r STRING @RG line text\n" + " -R STRING ID of @RG line in existing header to use\n" + ); + sam_global_opt_help(fp, "..O..@"); +} + +static bool parse_args(int argc, char** argv, parsed_opts_t** opts) +{ + *opts = NULL; + int n; + + if (argc == 1) { usage(samtools_stdout); return true; } + + parsed_opts_t* retval = calloc(1, sizeof(parsed_opts_t)); + if (! retval ) { + fprintf(samtools_stderr, "[%s] Out of memory allocating parsed_opts_t\n", __func__); + return false; + } + // Set defaults + retval->mode = overwrite_all; + sam_global_args_init(&retval->ga); + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS(0, 0, 'O', 0, 0, '@'), + { NULL, 0, NULL, 0 } + }; + kstring_t rg_line = {0,0,NULL}; + + while ((n = getopt_long(argc, argv, "r:R:m:o:O:l:h@:", lopts, NULL)) >= 0) { + switch (n) { + case 'r': + // Are we adding to existing rg line? + if (ks_len(&rg_line) == 0) { + if (strlen(optarg)<3 || (optarg[0] != '@' && optarg[1] != 'R' && optarg[2] != 'G')) { + kputs("@RG\t", &rg_line); + } + } else { + kputs("\t", &rg_line); + } + kputs(optarg, &rg_line); + break; + case 'R': + retval->rg_id = strdup(optarg); + break; + case 'm': { + if (strcmp(optarg, "overwrite_all") == 0) { + retval->mode = overwrite_all; + } else if (strcmp(optarg, "orphan_only") == 0) { + retval->mode = orphan_only; + } else { + usage(samtools_stderr); + return false; + } + break; + } + case 'o': + retval->output_name = strdup(optarg); + break; + case 'h': + usage(samtools_stdout); + free(retval); + return true; + case '?': + usage(samtools_stderr); + free(retval); + return false; + case 'O': + default: + if (parse_sam_global_opt(n, optarg, lopts, &retval->ga) == 0) break; + usage(samtools_stderr); + free(retval); + return false; + } + } + retval->rg_line = ks_release(&rg_line); + + if (argc-optind < 1) { + fprintf(samtools_stderr, "You must specify an input file.\n"); + usage(samtools_stderr); + cleanup_opts(retval); + return false; + } + if (retval->rg_id && retval->rg_line) { + fprintf(samtools_stderr, "The options -r and -R are mutually exclusive.\n"); + cleanup_opts(retval); + return false; + } + + if (retval->rg_line) + { + char* tmp = basic_unescape(retval->rg_line); + + if ((retval->rg_id = get_rg_id(tmp)) == NULL) { + fprintf(samtools_stderr, "[%s] The supplied RG line lacks an ID tag.\n", __func__); + free(tmp); + cleanup_opts(retval); + return false; + } + retval->rg_line = tmp; + } + retval->input_name = strdup(argv[optind+0]); + + if (retval->ga.nthreads > 0) { + if (!(retval->p.pool = hts_tpool_init(retval->ga.nthreads))) { + fprintf(samtools_stderr, "Error creating thread pool\n"); + return false; + } + } + + *opts = retval; + return true; +} + +static void overwrite_all_func(const state_t* state, bam1_t* file_read) +{ + uint8_t* data = (uint8_t*)strdup(state->rg_id); + int len = strlen(state->rg_id)+1; + // If the old exists delete it + uint8_t* old = bam_aux_get(file_read, "RG"); + if (old != NULL) { + bam_aux_del(file_read, old); + } + + bam_aux_append(file_read, "RG", 'Z', len, data); + free(data); +} + +static void orphan_only_func(const state_t* state, bam1_t* file_read) +{ + uint8_t* data = (uint8_t*)strdup(state->rg_id); + int len = strlen(state->rg_id)+1; + // If the old exists don't do anything + uint8_t* old = bam_aux_get(file_read, "RG"); + if (old == NULL) { + bam_aux_append(file_read, "RG",'Z',len,data); + } + free(data); +} + +static bool init(const parsed_opts_t* opts, state_t** state_out) { + state_t* retval = (state_t*) calloc(1, sizeof(state_t)); + if (retval == NULL) { + fprintf(samtools_stderr, "[init] Out of memory allocating state struct.\n"); + return false; + } + *state_out = retval; + + // Open files + retval->input_file = sam_open_format(opts->input_name, "r", &opts->ga.in); + if (retval->input_file == NULL) { + print_error_errno("addreplacerg", "could not open \"%s\"", opts->input_name); + return false; + } + retval->input_header = sam_hdr_read(retval->input_file); + + retval->output_header = bam_hdr_dup(retval->input_header); + retval->output_file = sam_open_format(opts->output_name == NULL?"-":opts->output_name, "w", &opts->ga.out); + + if (retval->output_file == NULL) { + print_error_errno("addreplacerg", "could not create \"%s\"", opts->output_name); + return false; + } + + if (opts->p.pool) { + hts_set_opt(retval->input_file, HTS_OPT_THREAD_POOL, &opts->p); + hts_set_opt(retval->output_file, HTS_OPT_THREAD_POOL, &opts->p); + } + + if (opts->rg_line) { + // Append new RG line to header. + // Check does not already exist + if ( confirm_rg(retval->output_header, opts->rg_id) ) { + fprintf(samtools_stderr, "[init] ID of new RG line specified conflicts with that of an existing header RG line. Overwrite not yet implemented.\n"); + return false; + } + retval->rg_id = strdup(opts->rg_id); + size_t new_len = strlen( retval->output_header->text ) + strlen( opts->rg_line ) + 2; + char* new_header = malloc(new_len); + if (!new_header) { + fprintf(samtools_stderr, "[init] Out of memory whilst writing new header.\n"); + return false; + } + sprintf(new_header,"%s%s\n", retval->output_header->text, opts->rg_line); + free(retval->output_header->text); + retval->output_header->text = new_header; + retval->output_header->l_text = (int)new_len - 1; + } else { + if (opts->rg_id) { + // Confirm what has been supplied exists + if ( !confirm_rg(retval->output_header, opts->rg_id) ) { + fprintf(samtools_stderr, "RG ID supplied does not exist in header. Supply full @RG line with -r instead?\n"); + return false; + } + retval->rg_id = strdup(opts->rg_id); + } else { + if ((retval->rg_id = get_first_rgid(retval->output_header)) == NULL ) { + fprintf(samtools_stderr, "No RG specified on command line or in existing header.\n"); + return false; + } + } + } + + switch (opts->mode) { + case overwrite_all: + retval->mode_func = &overwrite_all_func; + break; + case orphan_only: + retval->mode_func = &orphan_only_func; + break; + } + + return true; +} + +static bool readgroupise(state_t* state) +{ + if (sam_hdr_write(state->output_file, state->output_header) != 0) { + print_error_errno("addreplacerg", "[%s] Could not write header to output file", __func__); + return false; + } + + bam1_t* file_read = bam_init1(); + int ret; + while ((ret = sam_read1(state->input_file, state->input_header, file_read)) >= 0) { + state->mode_func(state, file_read); + + if (sam_write1(state->output_file, state->output_header, file_read) < 0) { + print_error_errno("addreplacerg", "[%s] Could not write read to output file", __func__); + bam_destroy1(file_read); + return false; + } + } + bam_destroy1(file_read); + if (ret != -1) { + print_error_errno("addreplacerg", "[%s] Error reading from input file", __func__); + return false; + } else { + return true; + } +} + +int main_addreplacerg(int argc, char** argv) +{ + parsed_opts_t* opts = NULL; + state_t* state = NULL; + + if (!parse_args(argc, argv, &opts)) goto error; + if (opts == NULL) return EXIT_SUCCESS; // Not an error but user doesn't want us to proceed + if (!opts || !init(opts, &state)) goto error; + + if (!readgroupise(state)) goto error; + + cleanup_state(state); + cleanup_opts(opts); + + return EXIT_SUCCESS; +error: + cleanup_state(state); + cleanup_opts(opts); + + return EXIT_FAILURE; +} diff --git a/samtools/bam_aux.c b/samtools/bam_aux.c new file mode 100644 index 0000000..d90b4a8 --- /dev/null +++ b/samtools/bam_aux.c @@ -0,0 +1,81 @@ +/* bam_aux.c -- remaining aux field handling. + + Copyright (C) 2008-2010, 2013 Genome Research Ltd. + Portions copyright (C) 2011 Broad Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include "bam.h" + +static inline int bam_aux_type2size(int x) +{ + if (x == 'C' || x == 'c' || x == 'A') return 1; + else if (x == 'S' || x == 's') return 2; + else if (x == 'I' || x == 'i' || x == 'f' || x == 'F') return 4; + else return 0; +} + +#define __skip_tag(s) do { \ + int type = toupper(*(s)); \ + ++(s); \ + if (type == 'Z' || type == 'H') { while (*(s)) ++(s); ++(s); } \ + else if (type == 'B') (s) += 5 + bam_aux_type2size(*(s)) * (*(int32_t*)((s)+1)); \ + else (s) += bam_aux_type2size(type); \ + } while(0) + + +int bam_aux_drop_other(bam1_t *b, uint8_t *s) +{ + if (s) { + uint8_t *p, *aux; + aux = bam1_aux(b); + p = s - 2; + __skip_tag(s); + memmove(aux, p, s - p); + b->data_len -= bam_get_l_aux(b) - (s - p); + } else { + b->data_len -= bam_get_l_aux(b); + } + return 0; +} + +int bam_parse_region(bam_header_t *header, const char *str, int *ref_id, int *beg, int *end) +{ + const char *name_lim = hts_parse_reg(str, beg, end); + if (name_lim) { + char *name = malloc(name_lim - str + 1); + memcpy(name, str, name_lim - str); + name[name_lim - str] = '\0'; + *ref_id = bam_name2id(header, name); + free(name); + } + else { + // not parsable as a region, but possibly a sequence named "foo:a" + *ref_id = bam_name2id(header, str); + *beg = 0; *end = INT_MAX; + } + if (*ref_id == -1) return -1; + return *beg <= *end? 0 : -1; +} diff --git a/samtools/bam_aux.c.pysam.c b/samtools/bam_aux.c.pysam.c new file mode 100644 index 0000000..637e766 --- /dev/null +++ b/samtools/bam_aux.c.pysam.c @@ -0,0 +1,83 @@ +#include "samtools.pysam.h" + +/* bam_aux.c -- remaining aux field handling. + + Copyright (C) 2008-2010, 2013 Genome Research Ltd. + Portions copyright (C) 2011 Broad Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include "bam.h" + +static inline int bam_aux_type2size(int x) +{ + if (x == 'C' || x == 'c' || x == 'A') return 1; + else if (x == 'S' || x == 's') return 2; + else if (x == 'I' || x == 'i' || x == 'f' || x == 'F') return 4; + else return 0; +} + +#define __skip_tag(s) do { \ + int type = toupper(*(s)); \ + ++(s); \ + if (type == 'Z' || type == 'H') { while (*(s)) ++(s); ++(s); } \ + else if (type == 'B') (s) += 5 + bam_aux_type2size(*(s)) * (*(int32_t*)((s)+1)); \ + else (s) += bam_aux_type2size(type); \ + } while(0) + + +int bam_aux_drop_other(bam1_t *b, uint8_t *s) +{ + if (s) { + uint8_t *p, *aux; + aux = bam1_aux(b); + p = s - 2; + __skip_tag(s); + memmove(aux, p, s - p); + b->data_len -= bam_get_l_aux(b) - (s - p); + } else { + b->data_len -= bam_get_l_aux(b); + } + return 0; +} + +int bam_parse_region(bam_header_t *header, const char *str, int *ref_id, int *beg, int *end) +{ + const char *name_lim = hts_parse_reg(str, beg, end); + if (name_lim) { + char *name = malloc(name_lim - str + 1); + memcpy(name, str, name_lim - str); + name[name_lim - str] = '\0'; + *ref_id = bam_name2id(header, name); + free(name); + } + else { + // not parsable as a region, but possibly a sequence named "foo:a" + *ref_id = bam_name2id(header, str); + *beg = 0; *end = INT_MAX; + } + if (*ref_id == -1) return -1; + return *beg <= *end? 0 : -1; +} diff --git a/samtools/bam_cat.c b/samtools/bam_cat.c new file mode 100644 index 0000000..95498ec --- /dev/null +++ b/samtools/bam_cat.c @@ -0,0 +1,637 @@ +/* bam_cat.c -- efficiently concatenates bam files. + + Copyright (C) 2008-2009, 2011-2013, 2015-2016 Genome Research Ltd. + Modified SAMtools work copyright (C) 2010 Illumina, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notices and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +/* +bam_cat can be used to concatenate BAM files. Under special +circumstances, it can be used as an alternative to 'samtools merge' to +concatenate multiple sorted files into a single sorted file. For this +to work each file must be sorted, and the sorted files must be given +as command line arguments in order such that the final read in file i +is less than or equal to the first read in file i+1. + +This code is derived from the bam_reheader function in samtools 0.1.8 +and modified to perform concatenation by Chris Saunders on behalf of +Illumina. +*/ + +#include + +#include +#include +#include +#include +#include + +#include "htslib/bgzf.h" +#include "htslib/sam.h" +#include "htslib/cram.h" +#include "htslib/khash.h" +#include "samtools.h" + +KHASH_MAP_INIT_STR(s2i, int) + +// Bi-directional lookup. +// We can go from name to ID or ID to name. +typedef struct khash_s2i { + khash_t(s2i) *h; + int n_id, a_id; + const char **id; // map Nth entry back to key + const char **line; +} khash_s2i; + +static int hash_s2i_inc(khash_s2i *hash, const char *str, const char *line, int *added) { + // loosly based on khash_str2int_inc + khint_t k; + int n; + + if ( !hash ) return -1; + // inefficient, but works + char *my_str = strdup(str); + k = kh_put(s2i, hash->h, my_str, added); + if (*added == 0) { + free(my_str); + return kh_val(hash->h, k); + } + n = hash->n_id++; + kh_val(hash->h, k) = n; + if (hash->a_id <= n) { + const char **id; + hash->a_id = (n+1)*2; + if (!(id = realloc(hash->id, hash->a_id*sizeof(*hash->id)))) + return -1; + hash->id = id; + if (!(id = realloc(hash->line, hash->a_id*sizeof(*hash->line)))) + return -1; + hash->line = id; + } + hash->id[n] = my_str; // reverse map + if (line) + hash->line[n] = line; + + return n; +} + +khash_s2i *hash_s2i_create(void) { + khash_s2i *h = calloc(1, sizeof(*h)); + if (!h) + return NULL; + + h->h = kh_init(s2i); + if (!h->h) { + free(h); + return NULL; + } + return h; +} + +static void hash_s2i_free(khash_s2i *hash) { + // based on khash_str2int_destroy_free + khint_t k; + if (!hash) return; + if (hash->h) { + for (k = 0; k < kh_end(hash->h); ++k) + if (kh_exist(hash->h, k)) free((char*)kh_key(hash->h, k)); + kh_destroy(s2i, hash->h); + } + if (hash->id) + free(hash->id); + if (hash->line) + free(hash->line); + + free(hash); +} + +static khash_s2i *hash_rg(const bam_hdr_t *h) { + khash_s2i *rg2id = hash_s2i_create(); + char *cp, *line; + int j, l; + + if (!h) + return rg2id; + + if (!rg2id) + return NULL; + + cp = h->text; + + for (l = 0; l+3 < h->l_text; l++) { + line = &cp[l]; + if (!(cp[l] == '@' && cp[l+1] == 'R' && cp[l+2] == 'G')) { + while (l < h->l_text && cp[l] != '\n') + l++; + continue; + } + + // Found an @RG line; add to hash + while (cp[l] != '\n') { + while (l < h->l_text && cp[l] != '\n' && cp[l] != '\t') + l++; + if (l+4 < h->l_text && cp[l+1] == 'I' && cp[l+2] == 'D') + break; + } + if (cp[l] == '\n') + continue; + l = (j = l+4); + while (l < h->l_text && cp[l] != '\n' && cp[l] != '\t') + l++; + + // To do: save id and keep realloc as needed, as hash_s2i_inc strdups. + char *id = malloc(l-j+1); + strncpy(id, &cp[j], l-j); + id[l-j] = 0; + + int added; + hash_s2i_inc(rg2id, id, line, &added); + free(id); + + while (l < h->l_text && cp[l] != '\n') + l++; + } + + return rg2id; +} + +/* + * Check the files are consistent and capable of being concatenated. + * Also fills out the rg2id read-group hash and the version numbers + * and produces a new bam_hdr_t structure with merged RG lines. + * Note it is only a simple merge, as we lack the niceties of a proper + * header API. + * + * Returns updated header on success; + * NULL on failure. + */ +static bam_hdr_t *cram_cat_check_hdr(int nfn, char * const *fn, const bam_hdr_t *h, + khash_s2i **rg2id, int *vers_maj_p, int *vers_min_p) { + int i, vers_maj = -1, vers_min = -1; + bam_hdr_t *new_h = NULL; + + if (h) { + new_h = bam_hdr_dup(h); + *rg2id = hash_rg(new_h); + } + + for (i = 0; i < nfn; ++i) { + samFile *in; + cram_fd *in_c; + khint_t ki; + int new_rg = -1; + + in = sam_open(fn[i], "rc"); + if (in == 0) { + print_error_errno("cat", "fail to open file '%s'", fn[i]); + return NULL; + } + in_c = in->fp.cram; + + int vmaj = cram_major_vers(in_c); + int vmin = cram_minor_vers(in_c); + if ((vers_maj != -1 && vers_maj != vmaj) || + (vers_min != -1 && vers_min != vmin)) { + fprintf(stderr, "[%s] ERROR: input files have differing version numbers.\n", + __func__); + return NULL; + } + vers_maj = vmaj; + vers_min = vmin; + + bam_hdr_t *old = sam_hdr_read(in); + khash_s2i *rg2id_in = hash_rg(old); + + if (!new_h) { + new_h = bam_hdr_dup(old); + *rg2id = hash_rg(new_h); + } + + // Add any existing @RG entries to our global @RG hash. + for (ki = 0; ki < rg2id_in->n_id; ki++) { + int added; + + new_rg = hash_s2i_inc(*rg2id, rg2id_in->id[ki], rg2id_in->line[ki], &added); + //fprintf(stderr, "RG %s: #%d -> #%d\n", + // rg2id_in->id[ki], ki, new_rg); + + if (added) { + // Also add to new_h + const char *line = rg2id_in->line[ki]; + const char *line_end = line; + while (*line && *line_end++ != '\n') + ; + new_h->l_text += line_end - line; + new_h->text = realloc(new_h->text, new_h->l_text+1); + strncat(&new_h->text[new_h->l_text - (line_end - line)], + line, line_end - line); + } + + if (new_rg != ki && rg2id_in->n_id > 1) { + fprintf(stderr, "[%s] ERROR: Same size @RG lists but differing order / contents\n", + __func__); + return NULL; + } + } + + hash_s2i_free(rg2id_in); + bam_hdr_destroy(old); + sam_close(in); + } + + *vers_maj_p = vers_maj; + *vers_min_p = vers_min; + + return new_h; +} + + +/* + * CRAM files don't store the RG:Z:ID per read in the aux field. + * Instead they have a numerical data series (RG) to point each read + * back to the Nth @RG line in the file. This means that we may need + * to edit the RG data series (if the files were produced from + * "samtools split" for example). + * + * The encoding method is stored in the compression header. Typical + * examples: + * + * RG => EXTERNAL {18} # Block content-id 18 holds RG values + * # as a series of ITF8 encoded values + * + * RG => HUFFMAN {1, 255, 255, 255, 255, 255, 1, 0} + * # One RG value #-1. (No RG) + * + * RG => HUFFMAN {1, 0, 1, 0} # One RG value #0 (always first RG) + * + * RG => HUFFMAN {2, 0, 1, 2, 1, 1} + * # Two RG values, #0 and #1, written + * # to the CORE block and possibly + * # mixed with other data series. + * + * A single value can (but may not be) implemented as a zero bit + * huffman code. In this situation we can change the meta-data in the + * compression header to renumber an RG value.. + */ +int cram_cat(int nfn, char * const *fn, const bam_hdr_t *h, const char* outcram) +{ + samFile *out; + cram_fd *out_c; + int i, vers_maj, vers_min; + khash_s2i *rg2id = NULL; + bam_hdr_t *new_h = NULL; + + /* Check consistent versioning and compatible headers */ + if (!(new_h = cram_cat_check_hdr(nfn, fn, h, &rg2id, &vers_maj, &vers_min))) + return -1; + + /* Open the file with cram_vers */ + char vers[100]; + sprintf(vers, "%d.%d", vers_maj, vers_min); + out = sam_open(outcram, "wc"); + if (out == 0) { + print_error_errno("cat", "fail to open output file '%s'", outcram); + return -1; + } + out_c = out->fp.cram; + cram_set_option(out_c, CRAM_OPT_VERSION, vers); + //fprintf(stderr, "Creating cram vers %s\n", vers); + + cram_fd_set_header(out_c, sam_hdr_parse_(new_h->text, new_h->l_text)); // needed? + if (sam_hdr_write(out, new_h) < 0) { + print_error_errno("cat", "Couldn't write header"); + return -1; + } + + for (i = 0; i < nfn; ++i) { + samFile *in; + cram_fd *in_c; + cram_container *c; + bam_hdr_t *old; + int new_rg = -1; + + in = sam_open(fn[i], "rc"); + if (in == 0) { + print_error_errno("cat", "fail to open file '%s'", fn[i]); + return -1; + } + in_c = in->fp.cram; + + old = sam_hdr_read(in); + khash_s2i *rg2id_in = hash_rg(old); + + // Compute RG mapping if suitable for changing. + if (rg2id_in->n_id == 1) { + int _; + new_rg = hash_s2i_inc(rg2id, rg2id_in->id[0], NULL, &_); + } else { + new_rg = 0; + } + + hash_s2i_free(rg2id_in); + + + // Copy contains and blocks within them + while ((c = cram_read_container(in_c))) { + cram_block *blk; + + if (cram_container_is_empty(in_c)) { + if (cram_write_container(out_c, c) != 0) + return -1; + + // Container compression header + if (!(blk = cram_read_block(in_c))) + return -1; + if (cram_write_block(out_c, blk) != 0) { + cram_free_block(blk); + return -1; + } + cram_free_block(blk); + cram_free_container(c); + + continue; + } + + // If we have just one RG key and new_rg != 0 then + // we need to edit the compression header. IF WE CAN. + if (new_rg) { + int zero = 0; + //fprintf(stderr, "Transcode RG %d to %d\n", 0, new_rg); + cram_transcode_rg(in_c, out_c, c, 1, &zero, &new_rg); + } else { + int32_t num_slices; + + // Not switching rg so do the usual read/write loop + if (cram_write_container(out_c, c) != 0) + return -1; + + // Container compression header + if (!(blk = cram_read_block(in_c))) + return -1; + if (cram_write_block(out_c, blk) != 0) { + cram_free_block(blk); + return -1; + } + cram_free_block(blk); + + + // Container num_blocks can be invalid, due to a bug. + // Instead we iterate in slice context instead. + (void)cram_container_get_landmarks(c, &num_slices); + cram_copy_slice(in_c, out_c, num_slices); + } + + cram_free_container(c); + } + + bam_hdr_destroy(old); + sam_close(in); + } + sam_close(out); + + hash_s2i_free(rg2id); + bam_hdr_destroy(new_h); + + return 0; +} + + +#define BUF_SIZE 0x10000 + +#define GZIPID1 31 +#define GZIPID2 139 + +#define BGZF_EMPTY_BLOCK_SIZE 28 + +int bam_cat(int nfn, char * const *fn, const bam_hdr_t *h, const char* outbam) +{ + BGZF *fp, *in = NULL; + uint8_t *buf = NULL; + uint8_t ebuf[BGZF_EMPTY_BLOCK_SIZE]; + const int es=BGZF_EMPTY_BLOCK_SIZE; + int i; + + fp = strcmp(outbam, "-")? bgzf_open(outbam, "w") : bgzf_fdopen(fileno(stdout), "w"); + if (fp == 0) { + print_error_errno("cat", "fail to open output file '%s'", outbam); + return -1; + } + if (h) { + if (bam_hdr_write(fp, h) < 0) { + print_error_errno("cat", "Couldn't write header"); + goto fail; + } + } + + buf = (uint8_t*) malloc(BUF_SIZE); + if (!buf) { + fprintf(stderr, "[%s] Couldn't allocate buffer\n", __func__); + goto fail; + } + for(i = 0; i < nfn; ++i){ + bam_hdr_t *old; + int len,j; + + in = strcmp(fn[i], "-")? bgzf_open(fn[i], "r") : bgzf_fdopen(fileno(stdin), "r"); + if (in == 0) { + print_error_errno("cat", "fail to open file '%s'", fn[i]); + goto fail; + } + if (in->is_write) return -1; + + old = bam_hdr_read(in); + if (old == NULL) { + fprintf(stderr, "[%s] ERROR: couldn't read header for '%s'.\n", + __func__, fn[i]); + goto fail; + } + if (h == 0 && i == 0) { + if (bam_hdr_write(fp, old) < 0) { + print_error_errno("cat", "Couldn't write header"); + goto fail; + } + } + + if (in->block_offset < in->block_length) { + if (bgzf_write(fp, (char *)in->uncompressed_block + in->block_offset, in->block_length - in->block_offset) < 0) goto write_fail; + if (bgzf_flush(fp) != 0) goto write_fail; + } + + j=0; + while ((len = bgzf_raw_read(in, buf, BUF_SIZE)) > 0) { + if(len= 0) { + switch (c) { + case 'h': { + samFile *fph = sam_open(optarg, "r"); + if (fph == 0) { + fprintf(stderr, "[%s] ERROR: fail to read the header from '%s'.\n", __func__, argv[1]); + return 1; + } + h = sam_hdr_read(fph); + if (h == NULL) { + fprintf(stderr, + "[%s] ERROR: failed to read the header for '%s'.\n", + __func__, argv[1]); + return 1; + } + sam_close(fph); + break; + } + case 'o': outfn = strdup(optarg); break; + case 'b': { + // add file names in "optarg" to the list + // of files to concatenate + int nfns; + char **fns_read = hts_readlines(optarg, &nfns); + if (fns_read) { + infns = realloc(infns, (infns_size + nfns) * sizeof(char*)); + if (infns == NULL) { ret = 1; goto end; } + memcpy(infns+infns_size, fns_read, nfns * sizeof(char*)); + infns_size += nfns; + free(fns_read); + } else { + print_error("cat", "Invalid file list \"%s\"", optarg); + ret = 1; + } + break; + } + } + } + + // Append files specified in argv to the list. + int nargv_fns = argc - optind; + if (nargv_fns > 0) { + infns = realloc(infns, (infns_size + nargv_fns) * sizeof(char*)); + if (infns == NULL) { ret = 1; goto end; } + memcpy(infns + infns_size, argv + optind, nargv_fns * sizeof(char*)); + } + + // Require at least one input file + if (infns_size + nargv_fns == 0) { + fprintf(stderr, "Usage: samtools cat [options] [... ]\n"); + fprintf(stderr, " samtools cat [options] [... ]\n\n"); + fprintf(stderr, "Concatenate BAM or CRAM files, first those in , then those\non the command line.\n\n"); + fprintf(stderr, "Options: -b FILE list of input BAM/CRAM file names, one per line\n"); + fprintf(stderr, " -h FILE copy the header from FILE [default is 1st input file]\n"); + fprintf(stderr, " -o FILE output BAM/CRAM\n"); + return 1; + } + + in = sam_open(infns[0], "r"); + if (!in) { + print_error_errno("cat", "failed to open file '%s'", infns[0]); + return 1; + } + + switch (hts_get_format(in)->format) { + case bam: + sam_close(in); + if (bam_cat(infns_size+nargv_fns, infns, h, outfn? outfn : "-") < 0) + ret = 1; + break; + + case cram: + sam_close(in); + if (cram_cat(infns_size+nargv_fns, infns, h, outfn? outfn : "-") < 0) + ret = 1; + break; + + default: + sam_close(in); + fprintf(stderr, "[%s] ERROR: input is not BAM or CRAM\n", __func__); + return 1; + } + + end: + if (infns_size > 0) { + int i; + for (i=0; i + +#include +#include +#include +#include +#include + +#include "htslib/bgzf.h" +#include "htslib/sam.h" +#include "htslib/cram.h" +#include "htslib/khash.h" +#include "samtools.h" + +KHASH_MAP_INIT_STR(s2i, int) + +// Bi-directional lookup. +// We can go from name to ID or ID to name. +typedef struct khash_s2i { + khash_t(s2i) *h; + int n_id, a_id; + const char **id; // map Nth entry back to key + const char **line; +} khash_s2i; + +static int hash_s2i_inc(khash_s2i *hash, const char *str, const char *line, int *added) { + // loosly based on khash_str2int_inc + khint_t k; + int n; + + if ( !hash ) return -1; + // inefficient, but works + char *my_str = strdup(str); + k = kh_put(s2i, hash->h, my_str, added); + if (*added == 0) { + free(my_str); + return kh_val(hash->h, k); + } + n = hash->n_id++; + kh_val(hash->h, k) = n; + if (hash->a_id <= n) { + const char **id; + hash->a_id = (n+1)*2; + if (!(id = realloc(hash->id, hash->a_id*sizeof(*hash->id)))) + return -1; + hash->id = id; + if (!(id = realloc(hash->line, hash->a_id*sizeof(*hash->line)))) + return -1; + hash->line = id; + } + hash->id[n] = my_str; // reverse map + if (line) + hash->line[n] = line; + + return n; +} + +khash_s2i *hash_s2i_create(void) { + khash_s2i *h = calloc(1, sizeof(*h)); + if (!h) + return NULL; + + h->h = kh_init(s2i); + if (!h->h) { + free(h); + return NULL; + } + return h; +} + +static void hash_s2i_free(khash_s2i *hash) { + // based on khash_str2int_destroy_free + khint_t k; + if (!hash) return; + if (hash->h) { + for (k = 0; k < kh_end(hash->h); ++k) + if (kh_exist(hash->h, k)) free((char*)kh_key(hash->h, k)); + kh_destroy(s2i, hash->h); + } + if (hash->id) + free(hash->id); + if (hash->line) + free(hash->line); + + free(hash); +} + +static khash_s2i *hash_rg(const bam_hdr_t *h) { + khash_s2i *rg2id = hash_s2i_create(); + char *cp, *line; + int j, l; + + if (!h) + return rg2id; + + if (!rg2id) + return NULL; + + cp = h->text; + + for (l = 0; l+3 < h->l_text; l++) { + line = &cp[l]; + if (!(cp[l] == '@' && cp[l+1] == 'R' && cp[l+2] == 'G')) { + while (l < h->l_text && cp[l] != '\n') + l++; + continue; + } + + // Found an @RG line; add to hash + while (cp[l] != '\n') { + while (l < h->l_text && cp[l] != '\n' && cp[l] != '\t') + l++; + if (l+4 < h->l_text && cp[l+1] == 'I' && cp[l+2] == 'D') + break; + } + if (cp[l] == '\n') + continue; + l = (j = l+4); + while (l < h->l_text && cp[l] != '\n' && cp[l] != '\t') + l++; + + // To do: save id and keep realloc as needed, as hash_s2i_inc strdups. + char *id = malloc(l-j+1); + strncpy(id, &cp[j], l-j); + id[l-j] = 0; + + int added; + hash_s2i_inc(rg2id, id, line, &added); + free(id); + + while (l < h->l_text && cp[l] != '\n') + l++; + } + + return rg2id; +} + +/* + * Check the files are consistent and capable of being concatenated. + * Also fills out the rg2id read-group hash and the version numbers + * and produces a new bam_hdr_t structure with merged RG lines. + * Note it is only a simple merge, as we lack the niceties of a proper + * header API. + * + * Returns updated header on success; + * NULL on failure. + */ +static bam_hdr_t *cram_cat_check_hdr(int nfn, char * const *fn, const bam_hdr_t *h, + khash_s2i **rg2id, int *vers_maj_p, int *vers_min_p) { + int i, vers_maj = -1, vers_min = -1; + bam_hdr_t *new_h = NULL; + + if (h) { + new_h = bam_hdr_dup(h); + *rg2id = hash_rg(new_h); + } + + for (i = 0; i < nfn; ++i) { + samFile *in; + cram_fd *in_c; + khint_t ki; + int new_rg = -1; + + in = sam_open(fn[i], "rc"); + if (in == 0) { + print_error_errno("cat", "fail to open file '%s'", fn[i]); + return NULL; + } + in_c = in->fp.cram; + + int vmaj = cram_major_vers(in_c); + int vmin = cram_minor_vers(in_c); + if ((vers_maj != -1 && vers_maj != vmaj) || + (vers_min != -1 && vers_min != vmin)) { + fprintf(samtools_stderr, "[%s] ERROR: input files have differing version numbers.\n", + __func__); + return NULL; + } + vers_maj = vmaj; + vers_min = vmin; + + bam_hdr_t *old = sam_hdr_read(in); + khash_s2i *rg2id_in = hash_rg(old); + + if (!new_h) { + new_h = bam_hdr_dup(old); + *rg2id = hash_rg(new_h); + } + + // Add any existing @RG entries to our global @RG hash. + for (ki = 0; ki < rg2id_in->n_id; ki++) { + int added; + + new_rg = hash_s2i_inc(*rg2id, rg2id_in->id[ki], rg2id_in->line[ki], &added); + //fprintf(samtools_stderr, "RG %s: #%d -> #%d\n", + // rg2id_in->id[ki], ki, new_rg); + + if (added) { + // Also add to new_h + const char *line = rg2id_in->line[ki]; + const char *line_end = line; + while (*line && *line_end++ != '\n') + ; + new_h->l_text += line_end - line; + new_h->text = realloc(new_h->text, new_h->l_text+1); + strncat(&new_h->text[new_h->l_text - (line_end - line)], + line, line_end - line); + } + + if (new_rg != ki && rg2id_in->n_id > 1) { + fprintf(samtools_stderr, "[%s] ERROR: Same size @RG lists but differing order / contents\n", + __func__); + return NULL; + } + } + + hash_s2i_free(rg2id_in); + bam_hdr_destroy(old); + sam_close(in); + } + + *vers_maj_p = vers_maj; + *vers_min_p = vers_min; + + return new_h; +} + + +/* + * CRAM files don't store the RG:Z:ID per read in the aux field. + * Instead they have a numerical data series (RG) to point each read + * back to the Nth @RG line in the file. This means that we may need + * to edit the RG data series (if the files were produced from + * "samtools split" for example). + * + * The encoding method is stored in the compression header. Typical + * examples: + * + * RG => EXTERNAL {18} # Block content-id 18 holds RG values + * # as a series of ITF8 encoded values + * + * RG => HUFFMAN {1, 255, 255, 255, 255, 255, 1, 0} + * # One RG value #-1. (No RG) + * + * RG => HUFFMAN {1, 0, 1, 0} # One RG value #0 (always first RG) + * + * RG => HUFFMAN {2, 0, 1, 2, 1, 1} + * # Two RG values, #0 and #1, written + * # to the CORE block and possibly + * # mixed with other data series. + * + * A single value can (but may not be) implemented as a zero bit + * huffman code. In this situation we can change the meta-data in the + * compression header to renumber an RG value.. + */ +int cram_cat(int nfn, char * const *fn, const bam_hdr_t *h, const char* outcram) +{ + samFile *out; + cram_fd *out_c; + int i, vers_maj, vers_min; + khash_s2i *rg2id = NULL; + bam_hdr_t *new_h = NULL; + + /* Check consistent versioning and compatible headers */ + if (!(new_h = cram_cat_check_hdr(nfn, fn, h, &rg2id, &vers_maj, &vers_min))) + return -1; + + /* Open the file with cram_vers */ + char vers[100]; + sprintf(vers, "%d.%d", vers_maj, vers_min); + out = sam_open(outcram, "wc"); + if (out == 0) { + print_error_errno("cat", "fail to open output file '%s'", outcram); + return -1; + } + out_c = out->fp.cram; + cram_set_option(out_c, CRAM_OPT_VERSION, vers); + //fprintf(samtools_stderr, "Creating cram vers %s\n", vers); + + cram_fd_set_header(out_c, sam_hdr_parse_(new_h->text, new_h->l_text)); // needed? + if (sam_hdr_write(out, new_h) < 0) { + print_error_errno("cat", "Couldn't write header"); + return -1; + } + + for (i = 0; i < nfn; ++i) { + samFile *in; + cram_fd *in_c; + cram_container *c; + bam_hdr_t *old; + int new_rg = -1; + + in = sam_open(fn[i], "rc"); + if (in == 0) { + print_error_errno("cat", "fail to open file '%s'", fn[i]); + return -1; + } + in_c = in->fp.cram; + + old = sam_hdr_read(in); + khash_s2i *rg2id_in = hash_rg(old); + + // Compute RG mapping if suitable for changing. + if (rg2id_in->n_id == 1) { + int _; + new_rg = hash_s2i_inc(rg2id, rg2id_in->id[0], NULL, &_); + } else { + new_rg = 0; + } + + hash_s2i_free(rg2id_in); + + + // Copy contains and blocks within them + while ((c = cram_read_container(in_c))) { + cram_block *blk; + + if (cram_container_is_empty(in_c)) { + if (cram_write_container(out_c, c) != 0) + return -1; + + // Container compression header + if (!(blk = cram_read_block(in_c))) + return -1; + if (cram_write_block(out_c, blk) != 0) { + cram_free_block(blk); + return -1; + } + cram_free_block(blk); + cram_free_container(c); + + continue; + } + + // If we have just one RG key and new_rg != 0 then + // we need to edit the compression header. IF WE CAN. + if (new_rg) { + int zero = 0; + //fprintf(samtools_stderr, "Transcode RG %d to %d\n", 0, new_rg); + cram_transcode_rg(in_c, out_c, c, 1, &zero, &new_rg); + } else { + int32_t num_slices; + + // Not switching rg so do the usual read/write loop + if (cram_write_container(out_c, c) != 0) + return -1; + + // Container compression header + if (!(blk = cram_read_block(in_c))) + return -1; + if (cram_write_block(out_c, blk) != 0) { + cram_free_block(blk); + return -1; + } + cram_free_block(blk); + + + // Container num_blocks can be invalid, due to a bug. + // Instead we iterate in slice context instead. + (void)cram_container_get_landmarks(c, &num_slices); + cram_copy_slice(in_c, out_c, num_slices); + } + + cram_free_container(c); + } + + bam_hdr_destroy(old); + sam_close(in); + } + sam_close(out); + + hash_s2i_free(rg2id); + bam_hdr_destroy(new_h); + + return 0; +} + + +#define BUF_SIZE 0x10000 + +#define GZIPID1 31 +#define GZIPID2 139 + +#define BGZF_EMPTY_BLOCK_SIZE 28 + +int bam_cat(int nfn, char * const *fn, const bam_hdr_t *h, const char* outbam) +{ + BGZF *fp, *in = NULL; + uint8_t *buf = NULL; + uint8_t ebuf[BGZF_EMPTY_BLOCK_SIZE]; + const int es=BGZF_EMPTY_BLOCK_SIZE; + int i; + + fp = strcmp(outbam, "-")? bgzf_open(outbam, "w") : bgzf_fdopen(fileno(samtools_stdout), "w"); + if (fp == 0) { + print_error_errno("cat", "fail to open output file '%s'", outbam); + return -1; + } + if (h) { + if (bam_hdr_write(fp, h) < 0) { + print_error_errno("cat", "Couldn't write header"); + goto fail; + } + } + + buf = (uint8_t*) malloc(BUF_SIZE); + if (!buf) { + fprintf(samtools_stderr, "[%s] Couldn't allocate buffer\n", __func__); + goto fail; + } + for(i = 0; i < nfn; ++i){ + bam_hdr_t *old; + int len,j; + + in = strcmp(fn[i], "-")? bgzf_open(fn[i], "r") : bgzf_fdopen(fileno(stdin), "r"); + if (in == 0) { + print_error_errno("cat", "fail to open file '%s'", fn[i]); + goto fail; + } + if (in->is_write) return -1; + + old = bam_hdr_read(in); + if (old == NULL) { + fprintf(samtools_stderr, "[%s] ERROR: couldn't read header for '%s'.\n", + __func__, fn[i]); + goto fail; + } + if (h == 0 && i == 0) { + if (bam_hdr_write(fp, old) < 0) { + print_error_errno("cat", "Couldn't write header"); + goto fail; + } + } + + if (in->block_offset < in->block_length) { + if (bgzf_write(fp, (char *)in->uncompressed_block + in->block_offset, in->block_length - in->block_offset) < 0) goto write_fail; + if (bgzf_flush(fp) != 0) goto write_fail; + } + + j=0; + while ((len = bgzf_raw_read(in, buf, BUF_SIZE)) > 0) { + if(len= 0) { + switch (c) { + case 'h': { + samFile *fph = sam_open(optarg, "r"); + if (fph == 0) { + fprintf(samtools_stderr, "[%s] ERROR: fail to read the header from '%s'.\n", __func__, argv[1]); + return 1; + } + h = sam_hdr_read(fph); + if (h == NULL) { + fprintf(samtools_stderr, + "[%s] ERROR: failed to read the header for '%s'.\n", + __func__, argv[1]); + return 1; + } + sam_close(fph); + break; + } + case 'o': outfn = strdup(optarg); break; + case 'b': { + // add file names in "optarg" to the list + // of files to concatenate + int nfns; + char **fns_read = hts_readlines(optarg, &nfns); + if (fns_read) { + infns = realloc(infns, (infns_size + nfns) * sizeof(char*)); + if (infns == NULL) { ret = 1; goto end; } + memcpy(infns+infns_size, fns_read, nfns * sizeof(char*)); + infns_size += nfns; + free(fns_read); + } else { + print_error("cat", "Invalid file list \"%s\"", optarg); + ret = 1; + } + break; + } + } + } + + // Append files specified in argv to the list. + int nargv_fns = argc - optind; + if (nargv_fns > 0) { + infns = realloc(infns, (infns_size + nargv_fns) * sizeof(char*)); + if (infns == NULL) { ret = 1; goto end; } + memcpy(infns + infns_size, argv + optind, nargv_fns * sizeof(char*)); + } + + // Require at least one input file + if (infns_size + nargv_fns == 0) { + fprintf(samtools_stderr, "Usage: samtools cat [options] [... ]\n"); + fprintf(samtools_stderr, " samtools cat [options] [... ]\n\n"); + fprintf(samtools_stderr, "Concatenate BAM or CRAM files, first those in , then those\non the command line.\n\n"); + fprintf(samtools_stderr, "Options: -b FILE list of input BAM/CRAM file names, one per line\n"); + fprintf(samtools_stderr, " -h FILE copy the header from FILE [default is 1st input file]\n"); + fprintf(samtools_stderr, " -o FILE output BAM/CRAM\n"); + return 1; + } + + in = sam_open(infns[0], "r"); + if (!in) { + print_error_errno("cat", "failed to open file '%s'", infns[0]); + return 1; + } + + switch (hts_get_format(in)->format) { + case bam: + sam_close(in); + if (bam_cat(infns_size+nargv_fns, infns, h, outfn? outfn : "-") < 0) + ret = 1; + break; + + case cram: + sam_close(in); + if (cram_cat(infns_size+nargv_fns, infns, h, outfn? outfn : "-") < 0) + ret = 1; + break; + + default: + sam_close(in); + fprintf(samtools_stderr, "[%s] ERROR: input is not BAM or CRAM\n", __func__); + return 1; + } + + end: + if (infns_size > 0) { + int i; + for (i=0; i + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include "bam.h" + +/*! + @abstract Get the color encoding the previous and current base + @param b pointer to an alignment + @param i The i-th position, 0-based + @return color + + @discussion Returns 0 no color information is found. + */ +char bam_aux_getCSi(bam1_t *b, int i) +{ + uint8_t *c = bam_aux_get(b, "CS"); + char *cs = NULL; + + // return the base if the tag was not found + if(0 == c) return 0; + + cs = bam_aux2Z(c); + // adjust for strandedness and leading adaptor + if(bam1_strand(b)) { + i = strlen(cs) - 1 - i; + // adjust for leading hard clip + uint32_t cigar = bam1_cigar(b)[0]; + if((cigar & BAM_CIGAR_MASK) == BAM_CHARD_CLIP) { + i -= cigar >> BAM_CIGAR_SHIFT; + } + } else { i++; } + return cs[i]; +} + +/*! + @abstract Get the color quality of the color encoding the previous and current base + @param b pointer to an alignment + @param i The i-th position, 0-based + @return color quality + + @discussion Returns 0 no color information is found. + */ +char bam_aux_getCQi(bam1_t *b, int i) +{ + uint8_t *c = bam_aux_get(b, "CQ"); + char *cq = NULL; + + // return the base if the tag was not found + if(0 == c) return 0; + + cq = bam_aux2Z(c); + // adjust for strandedness + if(bam1_strand(b)) { + i = strlen(cq) - 1 - i; + // adjust for leading hard clip + uint32_t cigar = bam1_cigar(b)[0]; + if((cigar & BAM_CIGAR_MASK) == BAM_CHARD_CLIP) { + i -= (cigar >> BAM_CIGAR_SHIFT); + } + } + return cq[i]; +} + +char bam_aux_nt2int(char a) +{ + switch(toupper(a)) { + case 'A': + return 0; + break; + case 'C': + return 1; + break; + case 'G': + return 2; + break; + case 'T': + return 3; + break; + default: + return 4; + break; + } +} + +char bam_aux_ntnt2cs(char a, char b) +{ + a = bam_aux_nt2int(a); + b = bam_aux_nt2int(b); + if(4 == a || 4 == b) return '4'; + return "0123"[(int)(a ^ b)]; +} + +/*! + @abstract Get the color error profile at the give position + @param b pointer to an alignment + @return the original color if the color was an error, '-' (dash) otherwise + + @discussion Returns 0 no color information is found. + */ +char bam_aux_getCEi(bam1_t *b, int i) +{ + int cs_i; + uint8_t *c = bam_aux_get(b, "CS"); + char *cs = NULL; + char prev_b, cur_b; + char cur_color, cor_color; + + // return the base if the tag was not found + if(0 == c) return 0; + + cs = bam_aux2Z(c); + + // adjust for strandedness and leading adaptor + if(bam1_strand(b)) { //reverse strand + cs_i = strlen(cs) - 1 - i; + // adjust for leading hard clip + uint32_t cigar = bam1_cigar(b)[0]; + if((cigar & BAM_CIGAR_MASK) == BAM_CHARD_CLIP) { + cs_i -= cigar >> BAM_CIGAR_SHIFT; + } + // get current color + cur_color = cs[cs_i]; + // get previous base. Note: must rc adaptor + prev_b = (cs_i == 1) ? "TGCAN"[(int)bam_aux_nt2int(cs[0])] : bam_nt16_rev_table[bam1_seqi(bam1_seq(b), i+1)]; + // get current base + cur_b = bam_nt16_rev_table[bam1_seqi(bam1_seq(b), i)]; + } + else { + cs_i=i+1; + // get current color + cur_color = cs[cs_i]; + // get previous base + prev_b = (0 == i) ? cs[0] : bam_nt16_rev_table[bam1_seqi(bam1_seq(b), i-1)]; + // get current base + cur_b = bam_nt16_rev_table[bam1_seqi(bam1_seq(b), i)]; + } + + // corrected color + cor_color = bam_aux_ntnt2cs(prev_b, cur_b); + + if(cur_color == cor_color) { + return '-'; + } + else { + return cur_color; + } +} diff --git a/samtools/bam_color.c.pysam.c b/samtools/bam_color.c.pysam.c new file mode 100644 index 0000000..762e83b --- /dev/null +++ b/samtools/bam_color.c.pysam.c @@ -0,0 +1,173 @@ +#include "samtools.pysam.h" + +/* bam_color.c -- color-space support. + + Copyright (C) 2009, 2012 University of California - Los Angeles. + + Author: Nils Homer + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include "bam.h" + +/*! + @abstract Get the color encoding the previous and current base + @param b pointer to an alignment + @param i The i-th position, 0-based + @return color + + @discussion Returns 0 no color information is found. + */ +char bam_aux_getCSi(bam1_t *b, int i) +{ + uint8_t *c = bam_aux_get(b, "CS"); + char *cs = NULL; + + // return the base if the tag was not found + if(0 == c) return 0; + + cs = bam_aux2Z(c); + // adjust for strandedness and leading adaptor + if(bam1_strand(b)) { + i = strlen(cs) - 1 - i; + // adjust for leading hard clip + uint32_t cigar = bam1_cigar(b)[0]; + if((cigar & BAM_CIGAR_MASK) == BAM_CHARD_CLIP) { + i -= cigar >> BAM_CIGAR_SHIFT; + } + } else { i++; } + return cs[i]; +} + +/*! + @abstract Get the color quality of the color encoding the previous and current base + @param b pointer to an alignment + @param i The i-th position, 0-based + @return color quality + + @discussion Returns 0 no color information is found. + */ +char bam_aux_getCQi(bam1_t *b, int i) +{ + uint8_t *c = bam_aux_get(b, "CQ"); + char *cq = NULL; + + // return the base if the tag was not found + if(0 == c) return 0; + + cq = bam_aux2Z(c); + // adjust for strandedness + if(bam1_strand(b)) { + i = strlen(cq) - 1 - i; + // adjust for leading hard clip + uint32_t cigar = bam1_cigar(b)[0]; + if((cigar & BAM_CIGAR_MASK) == BAM_CHARD_CLIP) { + i -= (cigar >> BAM_CIGAR_SHIFT); + } + } + return cq[i]; +} + +char bam_aux_nt2int(char a) +{ + switch(toupper(a)) { + case 'A': + return 0; + break; + case 'C': + return 1; + break; + case 'G': + return 2; + break; + case 'T': + return 3; + break; + default: + return 4; + break; + } +} + +char bam_aux_ntnt2cs(char a, char b) +{ + a = bam_aux_nt2int(a); + b = bam_aux_nt2int(b); + if(4 == a || 4 == b) return '4'; + return "0123"[(int)(a ^ b)]; +} + +/*! + @abstract Get the color error profile at the give position + @param b pointer to an alignment + @return the original color if the color was an error, '-' (dash) otherwise + + @discussion Returns 0 no color information is found. + */ +char bam_aux_getCEi(bam1_t *b, int i) +{ + int cs_i; + uint8_t *c = bam_aux_get(b, "CS"); + char *cs = NULL; + char prev_b, cur_b; + char cur_color, cor_color; + + // return the base if the tag was not found + if(0 == c) return 0; + + cs = bam_aux2Z(c); + + // adjust for strandedness and leading adaptor + if(bam1_strand(b)) { //reverse strand + cs_i = strlen(cs) - 1 - i; + // adjust for leading hard clip + uint32_t cigar = bam1_cigar(b)[0]; + if((cigar & BAM_CIGAR_MASK) == BAM_CHARD_CLIP) { + cs_i -= cigar >> BAM_CIGAR_SHIFT; + } + // get current color + cur_color = cs[cs_i]; + // get previous base. Note: must rc adaptor + prev_b = (cs_i == 1) ? "TGCAN"[(int)bam_aux_nt2int(cs[0])] : bam_nt16_rev_table[bam1_seqi(bam1_seq(b), i+1)]; + // get current base + cur_b = bam_nt16_rev_table[bam1_seqi(bam1_seq(b), i)]; + } + else { + cs_i=i+1; + // get current color + cur_color = cs[cs_i]; + // get previous base + prev_b = (0 == i) ? cs[0] : bam_nt16_rev_table[bam1_seqi(bam1_seq(b), i-1)]; + // get current base + cur_b = bam_nt16_rev_table[bam1_seqi(bam1_seq(b), i)]; + } + + // corrected color + cor_color = bam_aux_ntnt2cs(prev_b, cur_b); + + if(cur_color == cor_color) { + return '-'; + } + else { + return cur_color; + } +} diff --git a/samtools/bam_endian.h b/samtools/bam_endian.h new file mode 100644 index 0000000..d870ca5 --- /dev/null +++ b/samtools/bam_endian.h @@ -0,0 +1,66 @@ +/* bam_endian.h -- endianness conversion functions. + + Copyright (C) 2008 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#ifndef BAM_ENDIAN_H +#define BAM_ENDIAN_H + +#include + +static inline int bam_is_big_endian() +{ + long one= 1; + return !(*((char *)(&one))); +} +static inline uint16_t bam_swap_endian_2(uint16_t v) +{ + return (uint16_t)(((v & 0x00FF00FFU) << 8) | ((v & 0xFF00FF00U) >> 8)); +} +static inline void *bam_swap_endian_2p(void *x) +{ + *(uint16_t*)x = bam_swap_endian_2(*(uint16_t*)x); + return x; +} +static inline uint32_t bam_swap_endian_4(uint32_t v) +{ + v = ((v & 0x0000FFFFU) << 16) | (v >> 16); + return ((v & 0x00FF00FFU) << 8) | ((v & 0xFF00FF00U) >> 8); +} +static inline void *bam_swap_endian_4p(void *x) +{ + *(uint32_t*)x = bam_swap_endian_4(*(uint32_t*)x); + return x; +} +static inline uint64_t bam_swap_endian_8(uint64_t v) +{ + v = ((v & 0x00000000FFFFFFFFLLU) << 32) | (v >> 32); + v = ((v & 0x0000FFFF0000FFFFLLU) << 16) | ((v & 0xFFFF0000FFFF0000LLU) >> 16); + return ((v & 0x00FF00FF00FF00FFLLU) << 8) | ((v & 0xFF00FF00FF00FF00LLU) >> 8); +} +static inline void *bam_swap_endian_8p(void *x) +{ + *(uint64_t*)x = bam_swap_endian_8(*(uint64_t*)x); + return x; +} + +#endif diff --git a/samtools/bam_flags.c b/samtools/bam_flags.c new file mode 100644 index 0000000..11a82b6 --- /dev/null +++ b/samtools/bam_flags.c @@ -0,0 +1,70 @@ +/* bam_flags.c -- flags subcommand. + + Copyright (C) 2013-2014 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +static void usage(void) +{ + fprintf(stderr, "\n"); + fprintf(stderr, "About: Convert between textual and numeric flag representation\n"); + fprintf(stderr, "Usage: samtools flags INT|STR[,...]\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Flags:\n"); + fprintf(stderr, "\t0x%x\tPAIRED .. paired-end (or multiple-segment) sequencing technology\n", BAM_FPAIRED); + fprintf(stderr, "\t0x%x\tPROPER_PAIR .. each segment properly aligned according to the aligner\n", BAM_FPROPER_PAIR); + fprintf(stderr, "\t0x%x\tUNMAP .. segment unmapped\n", BAM_FUNMAP); + fprintf(stderr, "\t0x%x\tMUNMAP .. next segment in the template unmapped\n", BAM_FMUNMAP); + fprintf(stderr, "\t0x%x\tREVERSE .. SEQ is reverse complemented\n", BAM_FREVERSE); + fprintf(stderr, "\t0x%x\tMREVERSE .. SEQ of the next segment in the template is reversed\n", BAM_FMREVERSE); + fprintf(stderr, "\t0x%x\tREAD1 .. the first segment in the template\n", BAM_FREAD1); + fprintf(stderr, "\t0x%x\tREAD2 .. the last segment in the template\n", BAM_FREAD2); + fprintf(stderr, "\t0x%x\tSECONDARY .. secondary alignment\n", BAM_FSECONDARY); + fprintf(stderr, "\t0x%x\tQCFAIL .. not passing quality controls\n", BAM_FQCFAIL); + fprintf(stderr, "\t0x%x\tDUP .. PCR or optical duplicate\n", BAM_FDUP); + fprintf(stderr, "\t0x%x\tSUPPLEMENTARY .. supplementary alignment\n", BAM_FSUPPLEMENTARY); + fprintf(stderr, "\n"); +} + + +int main_flags(int argc, char *argv[]) +{ + if ( argc!=2 ) usage(); + else + { + int mask = bam_str2flag(argv[1]); + if ( mask<0 ) { fprintf(stderr,"Error: Could not parse \"%s\"\n", argv[1]); usage(); return 1; } + printf("0x%x\t%d\t%s\n", mask, mask, bam_flag2str(mask)); + } + return 0; +} + diff --git a/samtools/bam_flags.c.pysam.c b/samtools/bam_flags.c.pysam.c new file mode 100644 index 0000000..9c6424f --- /dev/null +++ b/samtools/bam_flags.c.pysam.c @@ -0,0 +1,72 @@ +#include "samtools.pysam.h" + +/* bam_flags.c -- flags subcommand. + + Copyright (C) 2013-2014 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +static void usage(void) +{ + fprintf(samtools_stderr, "\n"); + fprintf(samtools_stderr, "About: Convert between textual and numeric flag representation\n"); + fprintf(samtools_stderr, "Usage: samtools flags INT|STR[,...]\n"); + fprintf(samtools_stderr, "\n"); + fprintf(samtools_stderr, "Flags:\n"); + fprintf(samtools_stderr, "\t0x%x\tPAIRED .. paired-end (or multiple-segment) sequencing technology\n", BAM_FPAIRED); + fprintf(samtools_stderr, "\t0x%x\tPROPER_PAIR .. each segment properly aligned according to the aligner\n", BAM_FPROPER_PAIR); + fprintf(samtools_stderr, "\t0x%x\tUNMAP .. segment unmapped\n", BAM_FUNMAP); + fprintf(samtools_stderr, "\t0x%x\tMUNMAP .. next segment in the template unmapped\n", BAM_FMUNMAP); + fprintf(samtools_stderr, "\t0x%x\tREVERSE .. SEQ is reverse complemented\n", BAM_FREVERSE); + fprintf(samtools_stderr, "\t0x%x\tMREVERSE .. SEQ of the next segment in the template is reversed\n", BAM_FMREVERSE); + fprintf(samtools_stderr, "\t0x%x\tREAD1 .. the first segment in the template\n", BAM_FREAD1); + fprintf(samtools_stderr, "\t0x%x\tREAD2 .. the last segment in the template\n", BAM_FREAD2); + fprintf(samtools_stderr, "\t0x%x\tSECONDARY .. secondary alignment\n", BAM_FSECONDARY); + fprintf(samtools_stderr, "\t0x%x\tQCFAIL .. not passing quality controls\n", BAM_FQCFAIL); + fprintf(samtools_stderr, "\t0x%x\tDUP .. PCR or optical duplicate\n", BAM_FDUP); + fprintf(samtools_stderr, "\t0x%x\tSUPPLEMENTARY .. supplementary alignment\n", BAM_FSUPPLEMENTARY); + fprintf(samtools_stderr, "\n"); +} + + +int main_flags(int argc, char *argv[]) +{ + if ( argc!=2 ) usage(); + else + { + int mask = bam_str2flag(argv[1]); + if ( mask<0 ) { fprintf(samtools_stderr,"Error: Could not parse \"%s\"\n", argv[1]); usage(); return 1; } + fprintf(samtools_stdout, "0x%x\t%d\t%s\n", mask, mask, bam_flag2str(mask)); + } + return 0; +} + diff --git a/samtools/bam_import.c b/samtools/bam_import.c new file mode 100644 index 0000000..96f8158 --- /dev/null +++ b/samtools/bam_import.c @@ -0,0 +1,65 @@ +/* bam_import.c -- SAM format parsing. + + Copyright (C) 2008-2013 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include "htslib/kstring.h" +#include "bam.h" +#include "htslib/kseq.h" + +KSTREAM_INIT(gzFile, gzread, 16384) + +bam_header_t *sam_header_read2(const char *fn) +{ + bam_header_t *header; + int c, dret, n_targets = 0; + gzFile fp; + kstream_t *ks; + kstring_t *str; + kstring_t samstr = { 0, 0, NULL }; + if (fn == 0) return 0; + fp = (strcmp(fn, "-") == 0)? gzdopen(fileno(stdin), "r") : gzopen(fn, "r"); + if (fp == 0) return 0; + ks = ks_init(fp); + str = (kstring_t*)calloc(1, sizeof(kstring_t)); + while (ks_getuntil(ks, 0, str, &dret) > 0) { + ksprintf(&samstr, "@SQ\tSN:%s", str->s); + ks_getuntil(ks, 0, str, &dret); + ksprintf(&samstr, "\tLN:%d\n", atoi(str->s)); + n_targets++; + if (dret != '\n') + while ((c = ks_getc(ks)) != '\n' && c != -1); + } + ks_destroy(ks); + gzclose(fp); + free(str->s); free(str); + header = sam_hdr_parse(samstr.l, samstr.s? samstr.s : ""); + free(samstr.s); + fprintf(stderr, "[sam_header_read2] %d sequences loaded.\n", n_targets); + return header; +} diff --git a/samtools/bam_import.c.pysam.c b/samtools/bam_import.c.pysam.c new file mode 100644 index 0000000..f0a9730 --- /dev/null +++ b/samtools/bam_import.c.pysam.c @@ -0,0 +1,67 @@ +#include "samtools.pysam.h" + +/* bam_import.c -- SAM format parsing. + + Copyright (C) 2008-2013 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include "htslib/kstring.h" +#include "bam.h" +#include "htslib/kseq.h" + +KSTREAM_INIT(gzFile, gzread, 16384) + +bam_header_t *sam_header_read2(const char *fn) +{ + bam_header_t *header; + int c, dret, n_targets = 0; + gzFile fp; + kstream_t *ks; + kstring_t *str; + kstring_t samstr = { 0, 0, NULL }; + if (fn == 0) return 0; + fp = (strcmp(fn, "-") == 0)? gzdopen(fileno(stdin), "r") : gzopen(fn, "r"); + if (fp == 0) return 0; + ks = ks_init(fp); + str = (kstring_t*)calloc(1, sizeof(kstring_t)); + while (ks_getuntil(ks, 0, str, &dret) > 0) { + ksprintf(&samstr, "@SQ\tSN:%s", str->s); + ks_getuntil(ks, 0, str, &dret); + ksprintf(&samstr, "\tLN:%d\n", atoi(str->s)); + n_targets++; + if (dret != '\n') + while ((c = ks_getc(ks)) != '\n' && c != -1); + } + ks_destroy(ks); + gzclose(fp); + free(str->s); free(str); + header = sam_hdr_parse(samstr.l, samstr.s? samstr.s : ""); + free(samstr.s); + fprintf(samtools_stderr, "[sam_header_read2] %d sequences loaded.\n", n_targets); + return header; +} diff --git a/samtools/bam_index.c b/samtools/bam_index.c new file mode 100644 index 0000000..40b7e0f --- /dev/null +++ b/samtools/bam_index.c @@ -0,0 +1,145 @@ +/* bam_index.c -- index and idxstats subcommands. + + Copyright (C) 2008-2011, 2013, 2014 Genome Research Ltd. + Portions copyright (C) 2010 Broad Institute. + Portions copyright (C) 2013 Peter Cock, The James Hutton Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notices and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#define __STDC_FORMAT_MACROS +#include +#include + +#include "samtools.h" + +#define BAM_LIDX_SHIFT 14 + +static void index_usage(FILE *fp) +{ + fprintf(fp, +"Usage: samtools index [-bc] [-m INT] [out.index]\n" +"Options:\n" +" -b Generate BAI-format index for BAM files [default]\n" +" -c Generate CSI-format index for BAM files\n" +" -m INT Set minimum interval size for CSI indices to 2^INT [%d]\n" +" -@ INT Sets the number of threads [none]\n", BAM_LIDX_SHIFT); +} + +int bam_index(int argc, char *argv[]) +{ + int csi = 0; + int min_shift = BAM_LIDX_SHIFT; + int n_threads = 0; + int c, ret; + + while ((c = getopt(argc, argv, "bcm:@:")) >= 0) + switch (c) { + case 'b': csi = 0; break; + case 'c': csi = 1; break; + case 'm': csi = 1; min_shift = atoi(optarg); break; + case '@': n_threads = atoi(optarg); break; + default: + index_usage(stderr); + return 1; + } + + if (optind == argc) { + index_usage(stdout); + return 1; + } + + ret = sam_index_build3(argv[optind], argv[optind+1], csi? min_shift : 0, n_threads); + switch (ret) { + case 0: + return 0; + + case -2: + print_error_errno("index", "failed to open \"%s\"", argv[optind]); + break; + + case -3: + print_error("index", "\"%s\" is in a format that cannot be usefully indexed", argv[optind]); + break; + + case -4: + if (argv[optind+1]) + print_error("index", "failed to create or write index \"%s\"", argv[optind+1]); + else + print_error("index", "failed to create or write index"); + break; + + default: + print_error_errno("index", "failed to create index for \"%s\"", argv[optind]); + break; + } + + return EXIT_FAILURE; +} + +int bam_idxstats(int argc, char *argv[]) +{ + hts_idx_t* idx; + bam_hdr_t* header; + samFile* fp; + + if (argc < 2) { + fprintf(stderr, "Usage: samtools idxstats \n"); + return 1; + } + fp = sam_open(argv[1], "r"); + if (fp == NULL) { + print_error_errno("idxstats", "failed to open \"%s\"", argv[1]); + return 1; + } + header = sam_hdr_read(fp); + if (header == NULL) { + print_error("idxstats", "failed to read header for \"%s\"", argv[1]); + return 1; + } + idx = sam_index_load(fp, argv[1]); + if (idx == NULL) { + print_error("idxstats", "fail to load index for \"%s\"", argv[1]); + return 1; + } + + int i; + for (i = 0; i < header->n_targets; ++i) { + // Print out contig name and length + printf("%s\t%d", header->target_name[i], header->target_len[i]); + // Now fetch info about it from the meta bin + uint64_t u, v; + hts_idx_get_stat(idx, i, &u, &v); + printf("\t%" PRIu64 "\t%" PRIu64 "\n", u, v); + } + // Dump information about unmapped reads + printf("*\t0\t0\t%" PRIu64 "\n", hts_idx_get_n_no_coor(idx)); + bam_hdr_destroy(header); + hts_idx_destroy(idx); + sam_close(fp); + return 0; +} diff --git a/samtools/bam_index.c.pysam.c b/samtools/bam_index.c.pysam.c new file mode 100644 index 0000000..e13d453 --- /dev/null +++ b/samtools/bam_index.c.pysam.c @@ -0,0 +1,147 @@ +#include "samtools.pysam.h" + +/* bam_index.c -- index and idxstats subcommands. + + Copyright (C) 2008-2011, 2013, 2014 Genome Research Ltd. + Portions copyright (C) 2010 Broad Institute. + Portions copyright (C) 2013 Peter Cock, The James Hutton Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notices and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#define __STDC_FORMAT_MACROS +#include +#include + +#include "samtools.h" + +#define BAM_LIDX_SHIFT 14 + +static void index_usage(FILE *fp) +{ + fprintf(fp, +"Usage: samtools index [-bc] [-m INT] [out.index]\n" +"Options:\n" +" -b Generate BAI-format index for BAM files [default]\n" +" -c Generate CSI-format index for BAM files\n" +" -m INT Set minimum interval size for CSI indices to 2^INT [%d]\n" +" -@ INT Sets the number of threads [none]\n", BAM_LIDX_SHIFT); +} + +int bam_index(int argc, char *argv[]) +{ + int csi = 0; + int min_shift = BAM_LIDX_SHIFT; + int n_threads = 0; + int c, ret; + + while ((c = getopt(argc, argv, "bcm:@:")) >= 0) + switch (c) { + case 'b': csi = 0; break; + case 'c': csi = 1; break; + case 'm': csi = 1; min_shift = atoi(optarg); break; + case '@': n_threads = atoi(optarg); break; + default: + index_usage(samtools_stderr); + return 1; + } + + if (optind == argc) { + index_usage(samtools_stdout); + return 1; + } + + ret = sam_index_build3(argv[optind], argv[optind+1], csi? min_shift : 0, n_threads); + switch (ret) { + case 0: + return 0; + + case -2: + print_error_errno("index", "failed to open \"%s\"", argv[optind]); + break; + + case -3: + print_error("index", "\"%s\" is in a format that cannot be usefully indexed", argv[optind]); + break; + + case -4: + if (argv[optind+1]) + print_error("index", "failed to create or write index \"%s\"", argv[optind+1]); + else + print_error("index", "failed to create or write index"); + break; + + default: + print_error_errno("index", "failed to create index for \"%s\"", argv[optind]); + break; + } + + return EXIT_FAILURE; +} + +int bam_idxstats(int argc, char *argv[]) +{ + hts_idx_t* idx; + bam_hdr_t* header; + samFile* fp; + + if (argc < 2) { + fprintf(samtools_stderr, "Usage: samtools idxstats \n"); + return 1; + } + fp = sam_open(argv[1], "r"); + if (fp == NULL) { + print_error_errno("idxstats", "failed to open \"%s\"", argv[1]); + return 1; + } + header = sam_hdr_read(fp); + if (header == NULL) { + print_error("idxstats", "failed to read header for \"%s\"", argv[1]); + return 1; + } + idx = sam_index_load(fp, argv[1]); + if (idx == NULL) { + print_error("idxstats", "fail to load index for \"%s\"", argv[1]); + return 1; + } + + int i; + for (i = 0; i < header->n_targets; ++i) { + // Print out contig name and length + fprintf(samtools_stdout, "%s\t%d", header->target_name[i], header->target_len[i]); + // Now fetch info about it from the meta bin + uint64_t u, v; + hts_idx_get_stat(idx, i, &u, &v); + fprintf(samtools_stdout, "\t%" PRIu64 "\t%" PRIu64 "\n", u, v); + } + // Dump information about unmapped reads + fprintf(samtools_stdout, "*\t0\t0\t%" PRIu64 "\n", hts_idx_get_n_no_coor(idx)); + bam_hdr_destroy(header); + hts_idx_destroy(idx); + sam_close(fp); + return 0; +} diff --git a/samtools/bam_lpileup.c b/samtools/bam_lpileup.c new file mode 100644 index 0000000..cc7a75b --- /dev/null +++ b/samtools/bam_lpileup.c @@ -0,0 +1,226 @@ +/* bam_lpileup.c -- lplbuf routines. + + Copyright (C) 2008, 2009, 2013 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include "bam_plbuf.h" +#include "bam_lpileup.h" +#include "samtools.h" +#include + +#define TV_GAP 2 + +typedef struct __freenode_t { + uint32_t level:28, cnt:4; + struct __freenode_t *next; +} freenode_t, *freenode_p; + +#define freenode_lt(a,b) ((a)->cnt < (b)->cnt || ((a)->cnt == (b)->cnt && (a)->level < (b)->level)) +KSORT_INIT(node, freenode_p, freenode_lt) + +/* Memory pool, similar to the one in bam_pileup.c */ +typedef struct { + int cnt, n, max; + freenode_t **buf; +} mempool_t; + +static mempool_t *mp_init(void) +{ + return (mempool_t*)calloc(1, sizeof(mempool_t)); +} +static void mp_destroy(mempool_t *mp) +{ + int k; + for (k = 0; k < mp->n; ++k) free(mp->buf[k]); + free(mp->buf); free(mp); +} +static inline freenode_t *mp_alloc(mempool_t *mp) +{ + ++mp->cnt; + if (mp->n == 0) return (freenode_t*)calloc(1, sizeof(freenode_t)); + else return mp->buf[--mp->n]; +} +static inline void mp_free(mempool_t *mp, freenode_t *p) +{ + --mp->cnt; p->next = 0; p->cnt = TV_GAP; + if (mp->n == mp->max) { + mp->max = mp->max? mp->max<<1 : 256; + mp->buf = (freenode_t**)realloc(mp->buf, sizeof(freenode_t*) * mp->max); + } + mp->buf[mp->n++] = p; +} + +/* core part */ +struct __bam_lplbuf_t { + int max, n_cur, n_pre; + int max_level, *cur_level, *pre_level; + mempool_t *mp; + freenode_t **aux, *head, *tail; + int n_nodes, m_aux; + bam_pileup_f func; + void *user_data; + bam_plbuf_t *plbuf; +}; + +void bam_lplbuf_reset(bam_lplbuf_t *buf) +{ + freenode_t *p, *q; + bam_plbuf_reset(buf->plbuf); + for (p = buf->head; p->next;) { + q = p->next; + mp_free(buf->mp, p); + p = q; + } + buf->head = buf->tail; + buf->max_level = 0; + buf->n_cur = buf->n_pre = 0; + buf->n_nodes = 0; +} + +static int tview_func(uint32_t tid, uint32_t pos, int n, const bam_pileup1_t *pl, void *data) +{ + bam_lplbuf_t *tv = (bam_lplbuf_t*)data; + freenode_t *p; + int i, l, max_level; + // allocate memory if necessary + if (tv->max < n) { // enlarge + tv->max = n; + kroundup32(tv->max); + tv->cur_level = (int*)realloc(tv->cur_level, sizeof(int) * tv->max); + tv->pre_level = (int*)realloc(tv->pre_level, sizeof(int) * tv->max); + } + tv->n_cur = n; + // update cnt + for (p = tv->head; p->next; p = p->next) + if (p->cnt > 0) --p->cnt; + // calculate cur_level[] + max_level = 0; + for (i = l = 0; i < n; ++i) { + const bam_pileup1_t *p = pl + i; + if (p->is_head) { + if (tv->head->next && tv->head->cnt == 0) { // then take a free slot + freenode_t *p = tv->head->next; + tv->cur_level[i] = tv->head->level; + mp_free(tv->mp, tv->head); + tv->head = p; + --tv->n_nodes; + } else tv->cur_level[i] = ++tv->max_level; + } else { + tv->cur_level[i] = tv->pre_level[l++]; + if (p->is_tail) { // then return a free slot + tv->tail->level = tv->cur_level[i]; + tv->tail->next = mp_alloc(tv->mp); + tv->tail = tv->tail->next; + ++tv->n_nodes; + } + } + if (tv->cur_level[i] > max_level) max_level = tv->cur_level[i]; + ((bam_pileup1_t*)p)->level = tv->cur_level[i]; + } + assert(l == tv->n_pre); + tv->func(tid, pos, n, pl, tv->user_data); + // sort the linked list + if (tv->n_nodes) { + freenode_t *q; + if (tv->n_nodes + 1 > tv->m_aux) { // enlarge + tv->m_aux = tv->n_nodes + 1; + kroundup32(tv->m_aux); + tv->aux = (freenode_t**)realloc(tv->aux, sizeof(freenode_t*) * tv->m_aux); + } + for (p = tv->head, i = l = 0; p->next;) { + if (p->level > max_level) { // then discard this entry + q = p->next; + mp_free(tv->mp, p); + p = q; + } else { + tv->aux[i++] = p; + p = p->next; + } + } + tv->aux[i] = tv->tail; // add a proper tail for the loop below + tv->n_nodes = i; + if (tv->n_nodes) { + ks_introsort(node, tv->n_nodes, tv->aux); + for (i = 0; i < tv->n_nodes; ++i) tv->aux[i]->next = tv->aux[i+1]; + tv->head = tv->aux[0]; + } else tv->head = tv->tail; + } + // clean up + tv->max_level = max_level; + memcpy(tv->pre_level, tv->cur_level, tv->n_cur * 4); + // squeeze out terminated levels + for (i = l = 0; i < n; ++i) { + const bam_pileup1_t *p = pl + i; + if (!p->is_tail) + tv->pre_level[l++] = tv->pre_level[i]; + } + tv->n_pre = l; +/* + fprintf(stderr, "%d\t", pos+1); + for (i = 0; i < n; ++i) { + const bam_pileup1_t *p = pl + i; + if (p->is_head) fprintf(stderr, "^"); + if (p->is_tail) fprintf(stderr, "$"); + fprintf(stderr, "%d,", p->level); + } + fprintf(stderr, "\n"); +*/ + return 0; +} + +bam_lplbuf_t *bam_lplbuf_init(bam_pileup_f func, void *data) +{ + bam_lplbuf_t *tv; + tv = (bam_lplbuf_t*)calloc(1, sizeof(bam_lplbuf_t)); + tv->mp = mp_init(); + tv->head = tv->tail = mp_alloc(tv->mp); + tv->func = func; + tv->user_data = data; + tv->plbuf = bam_plbuf_init(tview_func, tv); + return (bam_lplbuf_t*)tv; +} + +void bam_lplbuf_destroy(bam_lplbuf_t *tv) +{ + freenode_t *p, *q; + free(tv->cur_level); free(tv->pre_level); + bam_plbuf_destroy(tv->plbuf); + free(tv->aux); + for (p = tv->head; p->next;) { + q = p->next; + mp_free(tv->mp, p); p = q; + } + mp_free(tv->mp, p); + assert(tv->mp->cnt == 0); + mp_destroy(tv->mp); + free(tv); +} + +int bam_lplbuf_push(const bam1_t *b, bam_lplbuf_t *tv) +{ + return bam_plbuf_push(b, tv->plbuf); +} diff --git a/samtools/bam_lpileup.c.pysam.c b/samtools/bam_lpileup.c.pysam.c new file mode 100644 index 0000000..8a1555c --- /dev/null +++ b/samtools/bam_lpileup.c.pysam.c @@ -0,0 +1,228 @@ +#include "samtools.pysam.h" + +/* bam_lpileup.c -- lplbuf routines. + + Copyright (C) 2008, 2009, 2013 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include "bam_plbuf.h" +#include "bam_lpileup.h" +#include "samtools.h" +#include + +#define TV_GAP 2 + +typedef struct __freenode_t { + uint32_t level:28, cnt:4; + struct __freenode_t *next; +} freenode_t, *freenode_p; + +#define freenode_lt(a,b) ((a)->cnt < (b)->cnt || ((a)->cnt == (b)->cnt && (a)->level < (b)->level)) +KSORT_INIT(node, freenode_p, freenode_lt) + +/* Memory pool, similar to the one in bam_pileup.c */ +typedef struct { + int cnt, n, max; + freenode_t **buf; +} mempool_t; + +static mempool_t *mp_init(void) +{ + return (mempool_t*)calloc(1, sizeof(mempool_t)); +} +static void mp_destroy(mempool_t *mp) +{ + int k; + for (k = 0; k < mp->n; ++k) free(mp->buf[k]); + free(mp->buf); free(mp); +} +static inline freenode_t *mp_alloc(mempool_t *mp) +{ + ++mp->cnt; + if (mp->n == 0) return (freenode_t*)calloc(1, sizeof(freenode_t)); + else return mp->buf[--mp->n]; +} +static inline void mp_free(mempool_t *mp, freenode_t *p) +{ + --mp->cnt; p->next = 0; p->cnt = TV_GAP; + if (mp->n == mp->max) { + mp->max = mp->max? mp->max<<1 : 256; + mp->buf = (freenode_t**)realloc(mp->buf, sizeof(freenode_t*) * mp->max); + } + mp->buf[mp->n++] = p; +} + +/* core part */ +struct __bam_lplbuf_t { + int max, n_cur, n_pre; + int max_level, *cur_level, *pre_level; + mempool_t *mp; + freenode_t **aux, *head, *tail; + int n_nodes, m_aux; + bam_pileup_f func; + void *user_data; + bam_plbuf_t *plbuf; +}; + +void bam_lplbuf_reset(bam_lplbuf_t *buf) +{ + freenode_t *p, *q; + bam_plbuf_reset(buf->plbuf); + for (p = buf->head; p->next;) { + q = p->next; + mp_free(buf->mp, p); + p = q; + } + buf->head = buf->tail; + buf->max_level = 0; + buf->n_cur = buf->n_pre = 0; + buf->n_nodes = 0; +} + +static int tview_func(uint32_t tid, uint32_t pos, int n, const bam_pileup1_t *pl, void *data) +{ + bam_lplbuf_t *tv = (bam_lplbuf_t*)data; + freenode_t *p; + int i, l, max_level; + // allocate memory if necessary + if (tv->max < n) { // enlarge + tv->max = n; + kroundup32(tv->max); + tv->cur_level = (int*)realloc(tv->cur_level, sizeof(int) * tv->max); + tv->pre_level = (int*)realloc(tv->pre_level, sizeof(int) * tv->max); + } + tv->n_cur = n; + // update cnt + for (p = tv->head; p->next; p = p->next) + if (p->cnt > 0) --p->cnt; + // calculate cur_level[] + max_level = 0; + for (i = l = 0; i < n; ++i) { + const bam_pileup1_t *p = pl + i; + if (p->is_head) { + if (tv->head->next && tv->head->cnt == 0) { // then take a free slot + freenode_t *p = tv->head->next; + tv->cur_level[i] = tv->head->level; + mp_free(tv->mp, tv->head); + tv->head = p; + --tv->n_nodes; + } else tv->cur_level[i] = ++tv->max_level; + } else { + tv->cur_level[i] = tv->pre_level[l++]; + if (p->is_tail) { // then return a free slot + tv->tail->level = tv->cur_level[i]; + tv->tail->next = mp_alloc(tv->mp); + tv->tail = tv->tail->next; + ++tv->n_nodes; + } + } + if (tv->cur_level[i] > max_level) max_level = tv->cur_level[i]; + ((bam_pileup1_t*)p)->level = tv->cur_level[i]; + } + assert(l == tv->n_pre); + tv->func(tid, pos, n, pl, tv->user_data); + // sort the linked list + if (tv->n_nodes) { + freenode_t *q; + if (tv->n_nodes + 1 > tv->m_aux) { // enlarge + tv->m_aux = tv->n_nodes + 1; + kroundup32(tv->m_aux); + tv->aux = (freenode_t**)realloc(tv->aux, sizeof(freenode_t*) * tv->m_aux); + } + for (p = tv->head, i = l = 0; p->next;) { + if (p->level > max_level) { // then discard this entry + q = p->next; + mp_free(tv->mp, p); + p = q; + } else { + tv->aux[i++] = p; + p = p->next; + } + } + tv->aux[i] = tv->tail; // add a proper tail for the loop below + tv->n_nodes = i; + if (tv->n_nodes) { + ks_introsort(node, tv->n_nodes, tv->aux); + for (i = 0; i < tv->n_nodes; ++i) tv->aux[i]->next = tv->aux[i+1]; + tv->head = tv->aux[0]; + } else tv->head = tv->tail; + } + // clean up + tv->max_level = max_level; + memcpy(tv->pre_level, tv->cur_level, tv->n_cur * 4); + // squeeze out terminated levels + for (i = l = 0; i < n; ++i) { + const bam_pileup1_t *p = pl + i; + if (!p->is_tail) + tv->pre_level[l++] = tv->pre_level[i]; + } + tv->n_pre = l; +/* + fprintf(samtools_stderr, "%d\t", pos+1); + for (i = 0; i < n; ++i) { + const bam_pileup1_t *p = pl + i; + if (p->is_head) fprintf(samtools_stderr, "^"); + if (p->is_tail) fprintf(samtools_stderr, "$"); + fprintf(samtools_stderr, "%d,", p->level); + } + fprintf(samtools_stderr, "\n"); +*/ + return 0; +} + +bam_lplbuf_t *bam_lplbuf_init(bam_pileup_f func, void *data) +{ + bam_lplbuf_t *tv; + tv = (bam_lplbuf_t*)calloc(1, sizeof(bam_lplbuf_t)); + tv->mp = mp_init(); + tv->head = tv->tail = mp_alloc(tv->mp); + tv->func = func; + tv->user_data = data; + tv->plbuf = bam_plbuf_init(tview_func, tv); + return (bam_lplbuf_t*)tv; +} + +void bam_lplbuf_destroy(bam_lplbuf_t *tv) +{ + freenode_t *p, *q; + free(tv->cur_level); free(tv->pre_level); + bam_plbuf_destroy(tv->plbuf); + free(tv->aux); + for (p = tv->head; p->next;) { + q = p->next; + mp_free(tv->mp, p); p = q; + } + mp_free(tv->mp, p); + assert(tv->mp->cnt == 0); + mp_destroy(tv->mp); + free(tv); +} + +int bam_lplbuf_push(const bam1_t *b, bam_lplbuf_t *tv) +{ + return bam_plbuf_push(b, tv->plbuf); +} diff --git a/samtools/bam_lpileup.h b/samtools/bam_lpileup.h new file mode 100644 index 0000000..24acd2b --- /dev/null +++ b/samtools/bam_lpileup.h @@ -0,0 +1,57 @@ +/* bam_lpileup.h -- lplbuf routines (declarations copied from bam.h). + + Copyright (C) 2008, 2013 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#ifndef BAM_LPILEUP_H +#define BAM_LPILEUP_H + + +#include + +struct __bam_lplbuf_t; +typedef struct __bam_lplbuf_t bam_lplbuf_t; + +#ifndef BAM_PILEUP_F_DEFINED +#define BAM_PILEUP_F_DEFINED +typedef int (*bam_pileup_f)(uint32_t tid, uint32_t pos, int n, const bam_pileup1_t *pl, void *data); +#endif //BAM_PILEUP_F_DEFINED + + +#ifdef __cplusplus +extern "C" { +#endif + void bam_lplbuf_reset(bam_lplbuf_t *buf); + + /*! @abstract bam_plbuf_init() equivalent with level calculated. */ + bam_lplbuf_t *bam_lplbuf_init(bam_pileup_f func, void *data); + + /*! @abstract bam_plbuf_destroy() equivalent with level calculated. */ + void bam_lplbuf_destroy(bam_lplbuf_t *tv); + + /*! @abstract bam_plbuf_push() equivalent with level calculated. */ + int bam_lplbuf_push(const bam1_t *b, bam_lplbuf_t *buf); +#ifdef __cplusplus +} +#endif + +#endif // BAM_LPILEUP_H diff --git a/samtools/bam_markdup.c b/samtools/bam_markdup.c new file mode 100644 index 0000000..21bf90a --- /dev/null +++ b/samtools/bam_markdup.c @@ -0,0 +1,1039 @@ +/* bam_markdup.c -- Mark duplicates from a coord sorted file that has gone + through fixmates with the mate scoring option on. + + Copyright (C) 2017 Genome Research Ltd. + + Author: Andrew Whitwham + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE +*/ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include "htslib/thread_pool.h" +#include "htslib/sam.h" +#include "sam_opts.h" +#include "samtools.h" +#include "htslib/khash.h" +#include "htslib/klist.h" +#include "htslib/kstring.h" +#include "tmp_file.h" + +typedef struct { + int32_t single; + int32_t this_ref; + int32_t this_coord; + int32_t other_ref; + int32_t other_coord; + int32_t leftmost; + int32_t orientation; +} key_data_t; + +typedef struct { + bam1_t *p; +} in_hash_t; + +typedef struct { + bam1_t *b; + int32_t pos; + key_data_t pair_key; + key_data_t single_key; +} read_queue_t; + + + +static khint32_t do_hash(unsigned char *key, khint32_t len); + +static khint_t hash_key(key_data_t key) { + int i = 0; + khint_t hash; + + if (key.single) { + unsigned char sig[12]; + + memcpy(sig + i, &key.this_ref, 4); i += 4; + memcpy(sig + i, &key.this_coord, 4); i += 4; + memcpy(sig + i, &key.orientation, 4); i += 4; + + hash = do_hash(sig, i); + } else { + unsigned char sig[24]; + + memcpy(sig + i, &key.this_ref, 4); i += 4; + memcpy(sig + i, &key.this_coord, 4); i += 4; + memcpy(sig + i, &key.other_ref, 4); i += 4; + memcpy(sig + i, &key.other_coord, 4); i += 4; + memcpy(sig + i, &key.leftmost, 4); i += 4; + memcpy(sig + i, &key.orientation, 4); i += 4; + + hash = do_hash(sig, i); + } + + return hash; +} + + +static int key_equal(key_data_t a, key_data_t b) { + int match = 1; + + if (a.this_coord != b.this_coord) + match = 0; + else if (a.orientation != b.orientation) + match = 0; + else if (a.this_ref != b.this_ref) + match = 0; + else if (a.single != b.single) + match = 0; + + if (!a.single) { + if (a.other_coord != b.other_coord) + match = 0; + else if (a.leftmost != b.leftmost) + match = 0; + else if (a.other_ref != b.other_ref) + match = 0; + } + + return match; +} + + +#define __free_queue_element(p) +#define O_FF 2 +#define O_RR 3 +#define O_FR 5 +#define O_RF 7 + +KHASH_INIT(reads, key_data_t, in_hash_t, 1, hash_key, key_equal) // read map hash +KLIST_INIT(read_queue, read_queue_t, __free_queue_element) // the reads buffer +KHASH_MAP_INIT_STR(duplicates, int) // map of duplicates for supplementary dup id + + +/* Calculate the mate's unclipped start based on position and cigar string from MC tag. */ + +static int32_t unclipped_other_start(int32_t op, char *cigar) { + char *c = cigar; + int32_t clipped = 0; + + while (*c && *c != '*') { + long num = 0; + + if (isdigit((int)*c)) { + num = strtol(c, &c, 10); + } else { + num = 1; + } + + if (*c == 'S' || *c == 'H') { // clips + clipped += num; + } else { + break; + } + + c++; + } + + return op - clipped + 1; +} + + +/* Calculate the current read's start based on the stored cigar string. */ + +static int32_t unclipped_start(bam1_t *b) { + uint32_t *cigar = bam_get_cigar(b); + int32_t clipped = 0; + uint32_t i; + + for (i = 0; i < b->core.n_cigar; i++) { + char c = bam_cigar_opchr(cigar[i]); + + if (c == 'S' || c == 'H') { // clips + clipped += bam_cigar_oplen(cigar[i]); + } else { + break; + } + } + + return b->core.pos - clipped + 1; +} + + +/* Calculate the mate's unclipped end based on start position and cigar string from MC tag.*/ + +static int32_t unclipped_other_end(int32_t op, char *cigar) { + char *c = cigar; + int32_t refpos = 0; + int skip = 1; + + while (*c && *c != '*') { + long num = 0; + + if (isdigit((int)*c)) { + num = strtol(c, &c, 10); + } else { + num = 1; + } + + switch (*c) { + case 'M': + case 'D': + case 'N': + case '=': + case 'X': + refpos += num; + skip = 0; // ignore initial clips + break; + + case 'S': + case 'H': + if (!skip) { + refpos += num; + } + break; + } + + c++; + } + + return op + refpos; +} + + +/* Calculate the current read's end based on the stored cigar string. */ + +static int32_t unclipped_end(bam1_t *b) { + uint32_t *cigar = bam_get_cigar(b); + int32_t end_pos, clipped = 0; + int32_t i; + + end_pos = bam_endpos(b); + + // now get the clipped end bases (if any) + // if we get to the beginning of the cigar string + // without hitting a non-clip then the results are meaningless + for (i = b->core.n_cigar - 1; i >= 0; i--) { + char c = bam_cigar_opchr(cigar[i]); + + if (c == 'S' || c == 'H') { // clips + clipped += bam_cigar_oplen(cigar[i]); + } else { + break; + } + } + + return end_pos + clipped; +} + + +/* The Bob Jenkins one_at_a_time hash to reduce the key to a 32 bit value. */ + +static khint32_t do_hash(unsigned char *key, khint32_t len) { + khint32_t hash, i; + + for (hash = 0, i = 0; i < len; ++i) { + hash += key[i]; + hash += (hash << 10); + hash ^= (hash >> 6); + } + + hash += (hash << 3); + hash ^= (hash >> 11); + hash += (hash << 15); + + return hash; +} + + +/* Get mate score from tag. */ + +static int64_t get_mate_score(bam1_t *b) { + uint8_t *data; + int64_t score; + + if ((data = bam_aux_get(b, "ms"))) { + score = bam_aux2i(data); + } else { + fprintf(stderr, "[markdup] error: no ms score tag.\n"); + return -1; + } + + return score; +} + + +/* Calc current score from quality. */ + +static int64_t calc_score(bam1_t *b) +{ + int64_t score = 0; + uint8_t *qual = bam_get_qual(b); + int i; + + for (i = 0; i < b->core.l_qseq; i++) { + if (qual[i] >= 15) score += qual[i]; + } + + return score; +} + + +/* Create a signature hash of the current read and its pair. + Uses the unclipped start (or end depending on orientation), + the reference id, orientation and whether the current + read is leftmost of the pair. */ + +static int make_pair_key(key_data_t *key, bam1_t *bam) { + int32_t this_ref, this_coord, this_end; + int32_t other_ref, other_coord, other_end; + int32_t orientation, leftmost; + uint8_t *data; + char *cig; + + this_ref = bam->core.tid + 1; // avoid a 0 being put into the hash + other_ref = bam->core.mtid + 1; + + this_coord = unclipped_start(bam); + this_end = unclipped_end(bam); + + if ((data = bam_aux_get(bam, "MC"))) { + cig = bam_aux2Z(data); + other_end = unclipped_other_end(bam->core.mpos, cig); + other_coord = unclipped_other_start(bam->core.mpos, cig); + } else { + fprintf(stderr, "[markdup] error: no MC tag.\n"); + return 1; + } + + // work out orientations + if (this_ref != other_ref) { + leftmost = this_ref < other_ref; + } else { + if (bam_is_rev(bam) == bam_is_mrev(bam)) { + if (!bam_is_rev(bam)) { + leftmost = this_coord <= other_coord; + } else { + leftmost = this_end <= other_end; + } + } else { + if (bam_is_rev(bam)) { + leftmost = this_end <= other_coord; + } else { + leftmost = this_coord <= other_end; + } + } + } + + // pair orientation + if (leftmost) { + if (bam_is_rev(bam) == bam_is_mrev(bam)) { + other_coord = other_end; + + if (!bam_is_rev(bam)) { + if (bam->core.flag & BAM_FREAD1) { + orientation = O_FF; + } else { + orientation = O_RR; + } + } else { + if (bam->core.flag & BAM_FREAD1) { + orientation = O_RR; + } else { + orientation = O_FF; + } + } + } else { + if (!bam_is_rev(bam)) { + orientation = O_FR; + other_coord = other_end; + } else { + orientation = O_RF; + this_coord = this_end; + } + } + } else { + if (bam_is_rev(bam) == bam_is_mrev(bam)) { + this_coord = this_end; + + if (!bam_is_rev(bam)) { + if (bam->core.flag & BAM_FREAD1) { + orientation = O_RR; + } else { + orientation = O_FF; + } + } else { + if (bam->core.flag & BAM_FREAD1) { + orientation = O_FF; + } else { + orientation = O_RR; + } + } + } else { + if (!bam_is_rev(bam)) { + orientation = O_RF; + other_coord = other_end; + } else { + orientation = O_FR; + this_coord = this_end; + } + } + } + + if (!leftmost) + leftmost = 13; + else + leftmost = 11; + + key->single = 0; + key->this_ref = this_ref; + key->this_coord = this_coord; + key->other_ref = other_ref; + key->other_coord = other_coord; + key->leftmost = leftmost; + key->orientation = orientation; + + return 0; +} + + +/* Create a signature hash of single read (or read with an unmatched pair). + Uses unclipped start (or end depending on orientation), reference id, + and orientation. */ + +static void make_single_key(key_data_t *key, bam1_t *bam) { + int32_t this_ref, this_coord; + int32_t orientation; + + this_ref = bam->core.tid + 1; // avoid a 0 being put into the hash + + if (bam_is_rev(bam)) { + this_coord = unclipped_end(bam); + orientation = O_RR; + } else { + this_coord = unclipped_start(bam); + orientation = O_FF; + } + + key->single = 1; + key->this_ref = this_ref; + key->this_coord = this_coord; + key->orientation = orientation; +} + +/* Add the duplicate name to a hash if it does not exist. */ + +static int add_duplicate(khash_t(duplicates) *d_hash, bam1_t *dupe) { + khiter_t d; + int ret; + + d = kh_get(duplicates, d_hash, bam_get_qname(dupe)); + + if (d == kh_end(d_hash)) { + d = kh_put(duplicates, d_hash, strdup(bam_get_qname(dupe)), &ret); + + if (ret > 0) { + kh_value(d_hash, d) = 1; + } else if (ret == 0) { + kh_value(d_hash, d)++; + } else { + fprintf(stderr, "[markdup] error: unable to store supplementary duplicates.\n"); + return 1; + } + } + + return 0; +} + + +/* Compare the reads near each other (coordinate sorted) and try to spot the duplicates. + Generally the highest quality scoring is chosen as the original and all others the duplicates. + The score is based on the sum of the quality values (<= 15) of the read and its mate (if any). + While single reads are compared to only one read of a pair, the pair will chosen as the original. + The comparison is done on position and orientation, see above for details. + + Marking the supplementary reads of a duplicate as also duplicates takes an extra file read/write + step. This is because the duplicate can occur before the primary read.*/ + +static int bam_mark_duplicates(samFile *in, samFile *out, char *prefix, int remove_dups, int32_t max_length, int do_stats, int supp, int tag) { + bam_hdr_t *header; + khiter_t k; + khash_t(reads) *pair_hash = kh_init(reads); + khash_t(reads) *single_hash = kh_init(reads); + klist_t(read_queue) *read_buffer = kl_init(read_queue); + kliter_t(read_queue) *rq; + khash_t(duplicates) *dup_hash = kh_init(duplicates); + int32_t prev_tid, prev_coord; + read_queue_t *in_read; + int ret; + int reading, writing, excluded, duplicate, single, pair, single_dup, examined; + tmp_file_t temp; + + if ((header = sam_hdr_read(in)) == NULL) { + fprintf(stderr, "[markdup] error reading header\n"); + return 1; + } + + // accept unknown, unsorted or coordinate sort order, but error on queryname sorted. + // only really works on coordinate sorted files. + if ((header->l_text > 3) && (strncmp(header->text, "@HD", 3) == 0)) { + char *p, *q; + + p = strstr(header->text, "\tSO:queryname"); + q = strchr(header->text, '\n'); + + // looking for SO:queryname within @HD only + // (e.g. must ignore in a @CO comment line later in header) + if ((p != 0) && (p < q)) { + fprintf(stderr, "[markdup] error: queryname sorted, must be sorted by coordinate.\n"); + return 1; + } + } + + if (sam_hdr_write(out, header) < 0) { + fprintf(stderr, "[markdup] error writing header.\n"); + return 1; + } + + // used for coordinate order checks + prev_tid = prev_coord = 0; + + // get the buffer going + in_read = kl_pushp(read_queue, read_buffer); + + // handling supplementary reads needs a temporary file + if (supp) { + if (tmp_file_open_write(&temp, prefix, 1)) { + fprintf(stderr, "[markdup] error: unable to open tmp file %s.\n", prefix); + return 1; + } + } + + if ((in_read->b = bam_init1()) == NULL) { + fprintf(stderr, "[markdup] error: unable to allocate memory for alignment.\n"); + return 1; + } + + reading = writing = excluded = single_dup = duplicate = examined = pair = single = 0; + + while ((ret = sam_read1(in, header, in_read->b)) >= 0) { + + // do some basic coordinate order checks + if (in_read->b->core.tid >= 0) { // -1 for unmapped reads + if (in_read->b->core.tid < prev_tid || + ((in_read->b->core.tid == prev_tid) && (in_read->b->core.pos < prev_coord))) { + fprintf(stderr, "[markdup] error: bad coordinate order.\n"); + return 1; + } + } + + prev_coord = in_read->pos = in_read->b->core.pos; + prev_tid = in_read->b->core.tid; + in_read->pair_key.single = 1; + in_read->single_key.single = 0; + + reading++; + + // read must not be secondary, supplementary, unmapped or failed QC + if (!(in_read->b->core.flag & (BAM_FSECONDARY | BAM_FSUPPLEMENTARY | BAM_FUNMAP | BAM_FQCFAIL))) { + examined++; + + + // look at the pairs first + if ((in_read->b->core.flag & BAM_FPAIRED) && !(in_read->b->core.flag & BAM_FMUNMAP)) { + int ret, mate_tmp; + key_data_t pair_key; + key_data_t single_key; + in_hash_t *bp; + + if (make_pair_key(&pair_key, in_read->b)) { + fprintf(stderr, "[markdup] error: unable to assign pair hash key.\n"); + return 1; + } + + make_single_key(&single_key, in_read->b); + + pair++; + in_read->pos = single_key.this_coord; // cigar/orientation modified pos + + // put in singles hash for checking against non paired reads + k = kh_put(reads, single_hash, single_key, &ret); + + if (ret > 0) { // new + // add to single duplicate hash + bp = &kh_val(single_hash, k); + bp->p = in_read->b; + in_read->single_key = single_key; + } else if (ret == 0) { // exists + // look at singles only for duplication marking + bp = &kh_val(single_hash, k); + + if (!(bp->p->core.flag & BAM_FPAIRED) || (bp->p->core.flag & BAM_FMUNMAP)) { + bam1_t *dup = bp->p; + + // singleton will always be marked duplicate even if + // scores more than one read of the pair + + bp->p = in_read->b; + dup->core.flag |= BAM_FDUP; + single_dup++; + + if (tag) { + if (bam_aux_append(dup, "do", 'Z', strlen(bam_get_qname(bp->p)) + 1, (uint8_t*)bam_get_qname(bp->p))) { + fprintf(stderr, "[markdup] error: unable to append 'do' tag.\n"); + return 1; + } + } + + if (supp) { + if (bam_aux_get(dup, "SA") || (dup->core.flag & BAM_FMUNMAP)) { + if (add_duplicate(dup_hash, dup)) { + return 1; + } + } + } + } + } else { + fprintf(stderr, "[markdup] error: single hashing failure.\n"); + return 1; + } + + // now do the pair + k = kh_put(reads, pair_hash, pair_key, &ret); + + if (ret > 0) { // new + // add to the pair hash + bp = &kh_val(pair_hash, k); + bp->p = in_read->b; + in_read->pair_key = pair_key; + } else if (ret == 0) { + int64_t old_score, new_score, tie_add = 0; + bam1_t *dup; + + bp = &kh_val(pair_hash, k); + + if ((mate_tmp = get_mate_score(bp->p)) == -1) { + fprintf(stderr, "[markdup] error: no ms score tag.\n"); + return 1; + } else { + old_score = calc_score(bp->p) + mate_tmp; + } + + if ((mate_tmp = get_mate_score(in_read->b)) == -1) { + fprintf(stderr, "[markdup] error: no ms score tag.\n"); + return 1; + } else { + new_score = calc_score(in_read->b) + mate_tmp; + } + + // choose the highest score as the original + // and add it to the pair hash, mark the other as duplicate + + if (new_score == old_score) { + if (strcmp(bam_get_qname(in_read->b), bam_get_qname(bp->p)) < 0) { + tie_add = 1; + } else { + tie_add = -1; + } + } + + if (new_score + tie_add > old_score) { // swap reads + dup = bp->p; + bp->p = in_read->b; + } else { + dup = in_read->b; + } + + dup->core.flag |= BAM_FDUP; + + if (tag) { + if (bam_aux_append(dup, "do", 'Z', strlen(bam_get_qname(bp->p)) + 1, (uint8_t*)bam_get_qname(bp->p))) { + fprintf(stderr, "[markdup] error: unable to append 'do' tag.\n"); + return 1; + } + + } + + if (supp) { + if (bam_aux_get(dup, "SA") || (dup->core.flag & BAM_FMUNMAP)) { + if (add_duplicate(dup_hash, dup)) { + return 1; + } + } + } + + duplicate++; + } else { + fprintf(stderr, "[markdup] error: pair hashing failure.\n"); + return 1; + } + } else { // do the single (or effectively single) reads + int ret; + key_data_t single_key; + in_hash_t *bp; + + make_single_key(&single_key, in_read->b); + + single++; + in_read->pos = single_key.this_coord; // cigar/orientation modified pos + + k = kh_put(reads, single_hash, single_key, &ret); + + if (ret > 0) { // new + bp = &kh_val(single_hash, k); + bp->p = in_read->b; + in_read->single_key = single_key; + } else if (ret == 0) { // exists + bp = &kh_val(single_hash, k); + + if ((bp->p->core.flag & BAM_FPAIRED) && !(bp->p->core.flag & BAM_FMUNMAP)) { + // if matched against one of a pair just mark as duplicate + + if (tag) { + if (bam_aux_append(in_read->b, "do", 'Z', strlen(bam_get_qname(bp->p)) + 1, (uint8_t*)bam_get_qname(bp->p))) { + fprintf(stderr, "[markdup] error: unable to append 'do' tag.\n"); + return 1; + } + } + + if (supp) { + if (bam_aux_get(in_read->b, "SA") || (in_read->b->core.flag & BAM_FMUNMAP)) { + if (add_duplicate(dup_hash, in_read->b)) { + return 1; + } + } + } + + in_read->b->core.flag |= BAM_FDUP; + } else { + int64_t old_score, new_score; + bam1_t *dup; + + old_score = calc_score(bp->p); + new_score = calc_score(in_read->b); + + // choose the highest score as the original, add it + // to the single hash and mark the other as duplicate + if (new_score > old_score) { // swap reads + dup = bp->p; + bp->p = in_read->b; + } else { + dup = in_read->b; + } + + dup->core.flag |= BAM_FDUP; + + if (tag) { + if (bam_aux_append(dup, "do", 'Z', strlen(bam_get_qname(bp->p)) + 1, (uint8_t*)bam_get_qname(bp->p))) { + fprintf(stderr, "[markdup] error: unable to append 'do' tag.\n"); + return 1; + } + } + + if (supp) { + if (bam_aux_get(dup, "SA") || (dup->core.flag & BAM_FMUNMAP)) { + if (add_duplicate(dup_hash, dup)) { + return 1; + } + } + } + } + + single_dup++; + } else { + fprintf(stderr, "[markdup] error: single hashing failure.\n"); + return 1; + } + } + } else { + excluded++; + } + + // loop through the stored reads and write out those we + // no longer need + rq = kl_begin(read_buffer); + while (rq != kl_end(read_buffer)) { + in_read = &kl_val(rq); + + /* keep a moving window of reads based on coordinates and max read length. Any unaligned reads + should just be written as they cannot be matched as duplicates. */ + if (in_read->pos + max_length > prev_coord && in_read->b->core.tid == prev_tid && (prev_tid != -1 || prev_coord != -1)) { + break; + } + + if (!remove_dups || !(in_read->b->core.flag & BAM_FDUP)) { + if (supp) { + if (tmp_file_write(&temp, in_read->b)) { + fprintf(stderr, "[markdup] error: writing temp output failed.\n"); + return 1; + } + } else { + if (sam_write1(out, header, in_read->b) < 0) { + fprintf(stderr, "[markdup] error: writing output failed.\n"); + return 1; + } + } + + writing++; + } + + // remove from hash + if (in_read->pair_key.single == 0) { + k = kh_get(reads, pair_hash, in_read->pair_key); + kh_del(reads, pair_hash, k); + } + + if (in_read->single_key.single == 1) { + k = kh_get(reads, single_hash, in_read->single_key); + kh_del(reads, single_hash, k); + } + + kl_shift(read_queue, read_buffer, NULL); + bam_destroy1(in_read->b); + rq = kl_begin(read_buffer); + } + + // set the next one up for reading + in_read = kl_pushp(read_queue, read_buffer); + + if ((in_read->b = bam_init1()) == NULL) { + fprintf(stderr, "[markdup] error: unable to allocate memory for alignment.\n"); + return 1; + } + } + + if (ret < -1) { + fprintf(stderr, "[markdup] error: truncated input file.\n"); + return 1; + } + + // write out the end of the list + rq = kl_begin(read_buffer); + while (rq != kl_end(read_buffer)) { + in_read = &kl_val(rq); + + if (bam_get_qname(in_read->b)) { // last entry will be blank + if (!remove_dups || !(in_read->b->core.flag & BAM_FDUP)) { + if (supp) { + if (tmp_file_write(&temp, in_read->b)) { + fprintf(stderr, "[markdup] error: writing temp output failed.\n"); + return 1; + } + } else { + if (sam_write1(out, header, in_read->b) < 0) { + fprintf(stderr, "[markdup] error: writing output failed.\n"); + return 1; + } + } + + writing++; + } + } + + kl_shift(read_queue, read_buffer, NULL); + bam_destroy1(in_read->b); + rq = kl_begin(read_buffer); + } + + if (supp) { + bam1_t *b; + + if (tmp_file_end_write(&temp)) { + fprintf(stderr, "[markdup] error: unable to end tmp writing.\n"); + return 1; + } + + // read data from temp file and mark duplicate supplementary alignments + + if (tmp_file_begin_read(&temp, NULL)) { + return 1; + } + + b = bam_init1(); + + while ((ret = tmp_file_read(&temp, b)) > 0) { + + if ((b->core.flag & BAM_FSUPPLEMENTARY) || (b->core.flag & BAM_FUNMAP)) { + k = kh_get(duplicates, dup_hash, bam_get_qname(b)); + + if (k != kh_end(dup_hash)) { + b->core.flag |= BAM_FDUP; + } + } + + if (!remove_dups || !(b->core.flag & BAM_FDUP)) { + if (sam_write1(out, header, b) < 0) { + fprintf(stderr, "[markdup] error: writing final output failed.\n"); + return 1; + } + } + } + + if (ret == -1) { + fprintf(stderr, "[markdup] error: failed to read tmp file.\n"); + return 1; + } + + for (k = kh_begin(dup_hash); k != kh_end(dup_hash); ++k) { + if (kh_exist(dup_hash, k)) { + free((char *)kh_key(dup_hash, k)); + } + } + + tmp_file_destroy(&temp, b, 0); + kh_destroy(duplicates, dup_hash); + bam_destroy1(b); + } + + if (do_stats) { + fprintf(stderr, "READ %d WRITTEN %d \n" + "EXCLUDED %d EXAMINED %d\n" + "PAIRED %d SINGLE %d\n" + "DULPICATE PAIR %d DUPLICATE SINGLE %d\n" + "DUPLICATE TOTAL %d\n", reading, writing, excluded, examined, pair, single, + duplicate, single_dup, single_dup + duplicate); + } + + kh_destroy(reads, pair_hash); + kh_destroy(reads, single_hash); + kl_destroy(read_queue, read_buffer); + bam_hdr_destroy(header); + + return 0; +} + + +static int markdup_usage(void) { + fprintf(stderr, "\n"); + fprintf(stderr, "Usage: samtools markdup \n\n"); + fprintf(stderr, "Option: \n"); + fprintf(stderr, " -r Remove duplicate reads\n"); + fprintf(stderr, " -l INT Max read length (default 300 bases)\n"); + fprintf(stderr, " -S Mark supplemenary alignments of duplicates as duplicates (slower).\n"); + fprintf(stderr, " -s Report stats.\n"); + fprintf(stderr, " -T PREFIX Write temporary files to PREFIX.samtools.nnnn.nnnn.tmp.\n"); + fprintf(stderr, " -t Mark primary duplicates with the name of the original in a \'do\' tag." + " Mainly for information and debugging.\n"); + + sam_global_opt_help(stderr, "-.O..@"); + + fprintf(stderr, "\nThe input file must be coordinate sorted and must have gone" + " through fixmates with the mate scoring option on.\n"); + + return 1; +} + + +int bam_markdup(int argc, char **argv) { + int c, ret, remove_dups = 0, report_stats = 0, include_supplementary = 0, tag_dup = 0; + int32_t max_length = 300; + samFile *in = NULL, *out = NULL; + char wmode[3] = {'w', 'b', 0}; + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + htsThreadPool p = {NULL, 0}; + kstring_t tmpprefix = {0, 0, NULL}; + struct stat st; + unsigned int t; + + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, 'O', 0, 0, '@'), + {NULL, 0, NULL, 0} + }; + + while ((c = getopt_long(argc, argv, "rsl:StT:O:@:", lopts, NULL)) >= 0) { + switch (c) { + case 'r': remove_dups = 1; break; + case 'l': max_length = atoi(optarg); break; + case 's': report_stats = 1; break; + case 'T': kputs(optarg, &tmpprefix); break; + case 'S': include_supplementary = 1; break; + case 't': tag_dup = 1; break; + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + /* else fall-through */ + case '?': return markdup_usage(); + } + } + + if (optind + 2 > argc) + return markdup_usage(); + + in = sam_open_format(argv[optind], "r", &ga.in); + + if (!in) { + print_error_errno("markdup", "failed to open \"%s\" for input", argv[optind]); + return 1; + } + + sam_open_mode(wmode + 1, argv[optind + 1], NULL); + out = sam_open_format(argv[optind + 1], wmode, &ga.out); + + if (!out) { + print_error_errno("markdup", "failed to open \"%s\" for output", argv[optind + 1]); + return 1; + } + + if (ga.nthreads > 0) { + if (!(p.pool = hts_tpool_init(ga.nthreads))) { + fprintf(stderr, "[markdup] error creating thread pool\n"); + return 1; + } + + hts_set_opt(in, HTS_OPT_THREAD_POOL, &p); + hts_set_opt(out, HTS_OPT_THREAD_POOL, &p); + } + + // actual stuff happens here + + // we need temp files so fix up the name here + if (tmpprefix.l == 0) { + + if (strcmp(argv[optind + 1], "-") != 0) + ksprintf(&tmpprefix, "%s.", argv[optind + 1]); + else + kputc('.', &tmpprefix); + } + + if (stat(tmpprefix.s, &st) == 0 && S_ISDIR(st.st_mode)) { + if (tmpprefix.s[tmpprefix.l-1] != '/') kputc('/', &tmpprefix); + } + + t = ((unsigned) time(NULL)) ^ ((unsigned) clock()); + ksprintf(&tmpprefix, "samtools.%d.%u.tmp", (int) getpid(), t % 10000); + + ret = bam_mark_duplicates(in, out, tmpprefix.s, remove_dups, max_length, report_stats, include_supplementary, tag_dup); + + sam_close(in); + + if (sam_close(out) < 0) { + fprintf(stderr, "[markdup] error closing output file\n"); + ret = 1; + } + + if (p.pool) hts_tpool_destroy(p.pool); + + free(tmpprefix.s); + sam_global_args_free(&ga); + + return ret; +} diff --git a/samtools/bam_markdup.c.pysam.c b/samtools/bam_markdup.c.pysam.c new file mode 100644 index 0000000..ce621d3 --- /dev/null +++ b/samtools/bam_markdup.c.pysam.c @@ -0,0 +1,1041 @@ +#include "samtools.pysam.h" + +/* bam_markdup.c -- Mark duplicates from a coord sorted file that has gone + through fixmates with the mate scoring option on. + + Copyright (C) 2017 Genome Research Ltd. + + Author: Andrew Whitwham + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE +*/ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include "htslib/thread_pool.h" +#include "htslib/sam.h" +#include "sam_opts.h" +#include "samtools.h" +#include "htslib/khash.h" +#include "htslib/klist.h" +#include "htslib/kstring.h" +#include "tmp_file.h" + +typedef struct { + int32_t single; + int32_t this_ref; + int32_t this_coord; + int32_t other_ref; + int32_t other_coord; + int32_t leftmost; + int32_t orientation; +} key_data_t; + +typedef struct { + bam1_t *p; +} in_hash_t; + +typedef struct { + bam1_t *b; + int32_t pos; + key_data_t pair_key; + key_data_t single_key; +} read_queue_t; + + + +static khint32_t do_hash(unsigned char *key, khint32_t len); + +static khint_t hash_key(key_data_t key) { + int i = 0; + khint_t hash; + + if (key.single) { + unsigned char sig[12]; + + memcpy(sig + i, &key.this_ref, 4); i += 4; + memcpy(sig + i, &key.this_coord, 4); i += 4; + memcpy(sig + i, &key.orientation, 4); i += 4; + + hash = do_hash(sig, i); + } else { + unsigned char sig[24]; + + memcpy(sig + i, &key.this_ref, 4); i += 4; + memcpy(sig + i, &key.this_coord, 4); i += 4; + memcpy(sig + i, &key.other_ref, 4); i += 4; + memcpy(sig + i, &key.other_coord, 4); i += 4; + memcpy(sig + i, &key.leftmost, 4); i += 4; + memcpy(sig + i, &key.orientation, 4); i += 4; + + hash = do_hash(sig, i); + } + + return hash; +} + + +static int key_equal(key_data_t a, key_data_t b) { + int match = 1; + + if (a.this_coord != b.this_coord) + match = 0; + else if (a.orientation != b.orientation) + match = 0; + else if (a.this_ref != b.this_ref) + match = 0; + else if (a.single != b.single) + match = 0; + + if (!a.single) { + if (a.other_coord != b.other_coord) + match = 0; + else if (a.leftmost != b.leftmost) + match = 0; + else if (a.other_ref != b.other_ref) + match = 0; + } + + return match; +} + + +#define __free_queue_element(p) +#define O_FF 2 +#define O_RR 3 +#define O_FR 5 +#define O_RF 7 + +KHASH_INIT(reads, key_data_t, in_hash_t, 1, hash_key, key_equal) // read map hash +KLIST_INIT(read_queue, read_queue_t, __free_queue_element) // the reads buffer +KHASH_MAP_INIT_STR(duplicates, int) // map of duplicates for supplementary dup id + + +/* Calculate the mate's unclipped start based on position and cigar string from MC tag. */ + +static int32_t unclipped_other_start(int32_t op, char *cigar) { + char *c = cigar; + int32_t clipped = 0; + + while (*c && *c != '*') { + long num = 0; + + if (isdigit((int)*c)) { + num = strtol(c, &c, 10); + } else { + num = 1; + } + + if (*c == 'S' || *c == 'H') { // clips + clipped += num; + } else { + break; + } + + c++; + } + + return op - clipped + 1; +} + + +/* Calculate the current read's start based on the stored cigar string. */ + +static int32_t unclipped_start(bam1_t *b) { + uint32_t *cigar = bam_get_cigar(b); + int32_t clipped = 0; + uint32_t i; + + for (i = 0; i < b->core.n_cigar; i++) { + char c = bam_cigar_opchr(cigar[i]); + + if (c == 'S' || c == 'H') { // clips + clipped += bam_cigar_oplen(cigar[i]); + } else { + break; + } + } + + return b->core.pos - clipped + 1; +} + + +/* Calculate the mate's unclipped end based on start position and cigar string from MC tag.*/ + +static int32_t unclipped_other_end(int32_t op, char *cigar) { + char *c = cigar; + int32_t refpos = 0; + int skip = 1; + + while (*c && *c != '*') { + long num = 0; + + if (isdigit((int)*c)) { + num = strtol(c, &c, 10); + } else { + num = 1; + } + + switch (*c) { + case 'M': + case 'D': + case 'N': + case '=': + case 'X': + refpos += num; + skip = 0; // ignore initial clips + break; + + case 'S': + case 'H': + if (!skip) { + refpos += num; + } + break; + } + + c++; + } + + return op + refpos; +} + + +/* Calculate the current read's end based on the stored cigar string. */ + +static int32_t unclipped_end(bam1_t *b) { + uint32_t *cigar = bam_get_cigar(b); + int32_t end_pos, clipped = 0; + int32_t i; + + end_pos = bam_endpos(b); + + // now get the clipped end bases (if any) + // if we get to the beginning of the cigar string + // without hitting a non-clip then the results are meaningless + for (i = b->core.n_cigar - 1; i >= 0; i--) { + char c = bam_cigar_opchr(cigar[i]); + + if (c == 'S' || c == 'H') { // clips + clipped += bam_cigar_oplen(cigar[i]); + } else { + break; + } + } + + return end_pos + clipped; +} + + +/* The Bob Jenkins one_at_a_time hash to reduce the key to a 32 bit value. */ + +static khint32_t do_hash(unsigned char *key, khint32_t len) { + khint32_t hash, i; + + for (hash = 0, i = 0; i < len; ++i) { + hash += key[i]; + hash += (hash << 10); + hash ^= (hash >> 6); + } + + hash += (hash << 3); + hash ^= (hash >> 11); + hash += (hash << 15); + + return hash; +} + + +/* Get mate score from tag. */ + +static int64_t get_mate_score(bam1_t *b) { + uint8_t *data; + int64_t score; + + if ((data = bam_aux_get(b, "ms"))) { + score = bam_aux2i(data); + } else { + fprintf(samtools_stderr, "[markdup] error: no ms score tag.\n"); + return -1; + } + + return score; +} + + +/* Calc current score from quality. */ + +static int64_t calc_score(bam1_t *b) +{ + int64_t score = 0; + uint8_t *qual = bam_get_qual(b); + int i; + + for (i = 0; i < b->core.l_qseq; i++) { + if (qual[i] >= 15) score += qual[i]; + } + + return score; +} + + +/* Create a signature hash of the current read and its pair. + Uses the unclipped start (or end depending on orientation), + the reference id, orientation and whether the current + read is leftmost of the pair. */ + +static int make_pair_key(key_data_t *key, bam1_t *bam) { + int32_t this_ref, this_coord, this_end; + int32_t other_ref, other_coord, other_end; + int32_t orientation, leftmost; + uint8_t *data; + char *cig; + + this_ref = bam->core.tid + 1; // avoid a 0 being put into the hash + other_ref = bam->core.mtid + 1; + + this_coord = unclipped_start(bam); + this_end = unclipped_end(bam); + + if ((data = bam_aux_get(bam, "MC"))) { + cig = bam_aux2Z(data); + other_end = unclipped_other_end(bam->core.mpos, cig); + other_coord = unclipped_other_start(bam->core.mpos, cig); + } else { + fprintf(samtools_stderr, "[markdup] error: no MC tag.\n"); + return 1; + } + + // work out orientations + if (this_ref != other_ref) { + leftmost = this_ref < other_ref; + } else { + if (bam_is_rev(bam) == bam_is_mrev(bam)) { + if (!bam_is_rev(bam)) { + leftmost = this_coord <= other_coord; + } else { + leftmost = this_end <= other_end; + } + } else { + if (bam_is_rev(bam)) { + leftmost = this_end <= other_coord; + } else { + leftmost = this_coord <= other_end; + } + } + } + + // pair orientation + if (leftmost) { + if (bam_is_rev(bam) == bam_is_mrev(bam)) { + other_coord = other_end; + + if (!bam_is_rev(bam)) { + if (bam->core.flag & BAM_FREAD1) { + orientation = O_FF; + } else { + orientation = O_RR; + } + } else { + if (bam->core.flag & BAM_FREAD1) { + orientation = O_RR; + } else { + orientation = O_FF; + } + } + } else { + if (!bam_is_rev(bam)) { + orientation = O_FR; + other_coord = other_end; + } else { + orientation = O_RF; + this_coord = this_end; + } + } + } else { + if (bam_is_rev(bam) == bam_is_mrev(bam)) { + this_coord = this_end; + + if (!bam_is_rev(bam)) { + if (bam->core.flag & BAM_FREAD1) { + orientation = O_RR; + } else { + orientation = O_FF; + } + } else { + if (bam->core.flag & BAM_FREAD1) { + orientation = O_FF; + } else { + orientation = O_RR; + } + } + } else { + if (!bam_is_rev(bam)) { + orientation = O_RF; + other_coord = other_end; + } else { + orientation = O_FR; + this_coord = this_end; + } + } + } + + if (!leftmost) + leftmost = 13; + else + leftmost = 11; + + key->single = 0; + key->this_ref = this_ref; + key->this_coord = this_coord; + key->other_ref = other_ref; + key->other_coord = other_coord; + key->leftmost = leftmost; + key->orientation = orientation; + + return 0; +} + + +/* Create a signature hash of single read (or read with an unmatched pair). + Uses unclipped start (or end depending on orientation), reference id, + and orientation. */ + +static void make_single_key(key_data_t *key, bam1_t *bam) { + int32_t this_ref, this_coord; + int32_t orientation; + + this_ref = bam->core.tid + 1; // avoid a 0 being put into the hash + + if (bam_is_rev(bam)) { + this_coord = unclipped_end(bam); + orientation = O_RR; + } else { + this_coord = unclipped_start(bam); + orientation = O_FF; + } + + key->single = 1; + key->this_ref = this_ref; + key->this_coord = this_coord; + key->orientation = orientation; +} + +/* Add the duplicate name to a hash if it does not exist. */ + +static int add_duplicate(khash_t(duplicates) *d_hash, bam1_t *dupe) { + khiter_t d; + int ret; + + d = kh_get(duplicates, d_hash, bam_get_qname(dupe)); + + if (d == kh_end(d_hash)) { + d = kh_put(duplicates, d_hash, strdup(bam_get_qname(dupe)), &ret); + + if (ret > 0) { + kh_value(d_hash, d) = 1; + } else if (ret == 0) { + kh_value(d_hash, d)++; + } else { + fprintf(samtools_stderr, "[markdup] error: unable to store supplementary duplicates.\n"); + return 1; + } + } + + return 0; +} + + +/* Compare the reads near each other (coordinate sorted) and try to spot the duplicates. + Generally the highest quality scoring is chosen as the original and all others the duplicates. + The score is based on the sum of the quality values (<= 15) of the read and its mate (if any). + While single reads are compared to only one read of a pair, the pair will chosen as the original. + The comparison is done on position and orientation, see above for details. + + Marking the supplementary reads of a duplicate as also duplicates takes an extra file read/write + step. This is because the duplicate can occur before the primary read.*/ + +static int bam_mark_duplicates(samFile *in, samFile *out, char *prefix, int remove_dups, int32_t max_length, int do_stats, int supp, int tag) { + bam_hdr_t *header; + khiter_t k; + khash_t(reads) *pair_hash = kh_init(reads); + khash_t(reads) *single_hash = kh_init(reads); + klist_t(read_queue) *read_buffer = kl_init(read_queue); + kliter_t(read_queue) *rq; + khash_t(duplicates) *dup_hash = kh_init(duplicates); + int32_t prev_tid, prev_coord; + read_queue_t *in_read; + int ret; + int reading, writing, excluded, duplicate, single, pair, single_dup, examined; + tmp_file_t temp; + + if ((header = sam_hdr_read(in)) == NULL) { + fprintf(samtools_stderr, "[markdup] error reading header\n"); + return 1; + } + + // accept unknown, unsorted or coordinate sort order, but error on queryname sorted. + // only really works on coordinate sorted files. + if ((header->l_text > 3) && (strncmp(header->text, "@HD", 3) == 0)) { + char *p, *q; + + p = strstr(header->text, "\tSO:queryname"); + q = strchr(header->text, '\n'); + + // looking for SO:queryname within @HD only + // (e.g. must ignore in a @CO comment line later in header) + if ((p != 0) && (p < q)) { + fprintf(samtools_stderr, "[markdup] error: queryname sorted, must be sorted by coordinate.\n"); + return 1; + } + } + + if (sam_hdr_write(out, header) < 0) { + fprintf(samtools_stderr, "[markdup] error writing header.\n"); + return 1; + } + + // used for coordinate order checks + prev_tid = prev_coord = 0; + + // get the buffer going + in_read = kl_pushp(read_queue, read_buffer); + + // handling supplementary reads needs a temporary file + if (supp) { + if (tmp_file_open_write(&temp, prefix, 1)) { + fprintf(samtools_stderr, "[markdup] error: unable to open tmp file %s.\n", prefix); + return 1; + } + } + + if ((in_read->b = bam_init1()) == NULL) { + fprintf(samtools_stderr, "[markdup] error: unable to allocate memory for alignment.\n"); + return 1; + } + + reading = writing = excluded = single_dup = duplicate = examined = pair = single = 0; + + while ((ret = sam_read1(in, header, in_read->b)) >= 0) { + + // do some basic coordinate order checks + if (in_read->b->core.tid >= 0) { // -1 for unmapped reads + if (in_read->b->core.tid < prev_tid || + ((in_read->b->core.tid == prev_tid) && (in_read->b->core.pos < prev_coord))) { + fprintf(samtools_stderr, "[markdup] error: bad coordinate order.\n"); + return 1; + } + } + + prev_coord = in_read->pos = in_read->b->core.pos; + prev_tid = in_read->b->core.tid; + in_read->pair_key.single = 1; + in_read->single_key.single = 0; + + reading++; + + // read must not be secondary, supplementary, unmapped or failed QC + if (!(in_read->b->core.flag & (BAM_FSECONDARY | BAM_FSUPPLEMENTARY | BAM_FUNMAP | BAM_FQCFAIL))) { + examined++; + + + // look at the pairs first + if ((in_read->b->core.flag & BAM_FPAIRED) && !(in_read->b->core.flag & BAM_FMUNMAP)) { + int ret, mate_tmp; + key_data_t pair_key; + key_data_t single_key; + in_hash_t *bp; + + if (make_pair_key(&pair_key, in_read->b)) { + fprintf(samtools_stderr, "[markdup] error: unable to assign pair hash key.\n"); + return 1; + } + + make_single_key(&single_key, in_read->b); + + pair++; + in_read->pos = single_key.this_coord; // cigar/orientation modified pos + + // put in singles hash for checking against non paired reads + k = kh_put(reads, single_hash, single_key, &ret); + + if (ret > 0) { // new + // add to single duplicate hash + bp = &kh_val(single_hash, k); + bp->p = in_read->b; + in_read->single_key = single_key; + } else if (ret == 0) { // exists + // look at singles only for duplication marking + bp = &kh_val(single_hash, k); + + if (!(bp->p->core.flag & BAM_FPAIRED) || (bp->p->core.flag & BAM_FMUNMAP)) { + bam1_t *dup = bp->p; + + // singleton will always be marked duplicate even if + // scores more than one read of the pair + + bp->p = in_read->b; + dup->core.flag |= BAM_FDUP; + single_dup++; + + if (tag) { + if (bam_aux_append(dup, "do", 'Z', strlen(bam_get_qname(bp->p)) + 1, (uint8_t*)bam_get_qname(bp->p))) { + fprintf(samtools_stderr, "[markdup] error: unable to append 'do' tag.\n"); + return 1; + } + } + + if (supp) { + if (bam_aux_get(dup, "SA") || (dup->core.flag & BAM_FMUNMAP)) { + if (add_duplicate(dup_hash, dup)) { + return 1; + } + } + } + } + } else { + fprintf(samtools_stderr, "[markdup] error: single hashing failure.\n"); + return 1; + } + + // now do the pair + k = kh_put(reads, pair_hash, pair_key, &ret); + + if (ret > 0) { // new + // add to the pair hash + bp = &kh_val(pair_hash, k); + bp->p = in_read->b; + in_read->pair_key = pair_key; + } else if (ret == 0) { + int64_t old_score, new_score, tie_add = 0; + bam1_t *dup; + + bp = &kh_val(pair_hash, k); + + if ((mate_tmp = get_mate_score(bp->p)) == -1) { + fprintf(samtools_stderr, "[markdup] error: no ms score tag.\n"); + return 1; + } else { + old_score = calc_score(bp->p) + mate_tmp; + } + + if ((mate_tmp = get_mate_score(in_read->b)) == -1) { + fprintf(samtools_stderr, "[markdup] error: no ms score tag.\n"); + return 1; + } else { + new_score = calc_score(in_read->b) + mate_tmp; + } + + // choose the highest score as the original + // and add it to the pair hash, mark the other as duplicate + + if (new_score == old_score) { + if (strcmp(bam_get_qname(in_read->b), bam_get_qname(bp->p)) < 0) { + tie_add = 1; + } else { + tie_add = -1; + } + } + + if (new_score + tie_add > old_score) { // swap reads + dup = bp->p; + bp->p = in_read->b; + } else { + dup = in_read->b; + } + + dup->core.flag |= BAM_FDUP; + + if (tag) { + if (bam_aux_append(dup, "do", 'Z', strlen(bam_get_qname(bp->p)) + 1, (uint8_t*)bam_get_qname(bp->p))) { + fprintf(samtools_stderr, "[markdup] error: unable to append 'do' tag.\n"); + return 1; + } + + } + + if (supp) { + if (bam_aux_get(dup, "SA") || (dup->core.flag & BAM_FMUNMAP)) { + if (add_duplicate(dup_hash, dup)) { + return 1; + } + } + } + + duplicate++; + } else { + fprintf(samtools_stderr, "[markdup] error: pair hashing failure.\n"); + return 1; + } + } else { // do the single (or effectively single) reads + int ret; + key_data_t single_key; + in_hash_t *bp; + + make_single_key(&single_key, in_read->b); + + single++; + in_read->pos = single_key.this_coord; // cigar/orientation modified pos + + k = kh_put(reads, single_hash, single_key, &ret); + + if (ret > 0) { // new + bp = &kh_val(single_hash, k); + bp->p = in_read->b; + in_read->single_key = single_key; + } else if (ret == 0) { // exists + bp = &kh_val(single_hash, k); + + if ((bp->p->core.flag & BAM_FPAIRED) && !(bp->p->core.flag & BAM_FMUNMAP)) { + // if matched against one of a pair just mark as duplicate + + if (tag) { + if (bam_aux_append(in_read->b, "do", 'Z', strlen(bam_get_qname(bp->p)) + 1, (uint8_t*)bam_get_qname(bp->p))) { + fprintf(samtools_stderr, "[markdup] error: unable to append 'do' tag.\n"); + return 1; + } + } + + if (supp) { + if (bam_aux_get(in_read->b, "SA") || (in_read->b->core.flag & BAM_FMUNMAP)) { + if (add_duplicate(dup_hash, in_read->b)) { + return 1; + } + } + } + + in_read->b->core.flag |= BAM_FDUP; + } else { + int64_t old_score, new_score; + bam1_t *dup; + + old_score = calc_score(bp->p); + new_score = calc_score(in_read->b); + + // choose the highest score as the original, add it + // to the single hash and mark the other as duplicate + if (new_score > old_score) { // swap reads + dup = bp->p; + bp->p = in_read->b; + } else { + dup = in_read->b; + } + + dup->core.flag |= BAM_FDUP; + + if (tag) { + if (bam_aux_append(dup, "do", 'Z', strlen(bam_get_qname(bp->p)) + 1, (uint8_t*)bam_get_qname(bp->p))) { + fprintf(samtools_stderr, "[markdup] error: unable to append 'do' tag.\n"); + return 1; + } + } + + if (supp) { + if (bam_aux_get(dup, "SA") || (dup->core.flag & BAM_FMUNMAP)) { + if (add_duplicate(dup_hash, dup)) { + return 1; + } + } + } + } + + single_dup++; + } else { + fprintf(samtools_stderr, "[markdup] error: single hashing failure.\n"); + return 1; + } + } + } else { + excluded++; + } + + // loop through the stored reads and write out those we + // no longer need + rq = kl_begin(read_buffer); + while (rq != kl_end(read_buffer)) { + in_read = &kl_val(rq); + + /* keep a moving window of reads based on coordinates and max read length. Any unaligned reads + should just be written as they cannot be matched as duplicates. */ + if (in_read->pos + max_length > prev_coord && in_read->b->core.tid == prev_tid && (prev_tid != -1 || prev_coord != -1)) { + break; + } + + if (!remove_dups || !(in_read->b->core.flag & BAM_FDUP)) { + if (supp) { + if (tmp_file_write(&temp, in_read->b)) { + fprintf(samtools_stderr, "[markdup] error: writing temp output failed.\n"); + return 1; + } + } else { + if (sam_write1(out, header, in_read->b) < 0) { + fprintf(samtools_stderr, "[markdup] error: writing output failed.\n"); + return 1; + } + } + + writing++; + } + + // remove from hash + if (in_read->pair_key.single == 0) { + k = kh_get(reads, pair_hash, in_read->pair_key); + kh_del(reads, pair_hash, k); + } + + if (in_read->single_key.single == 1) { + k = kh_get(reads, single_hash, in_read->single_key); + kh_del(reads, single_hash, k); + } + + kl_shift(read_queue, read_buffer, NULL); + bam_destroy1(in_read->b); + rq = kl_begin(read_buffer); + } + + // set the next one up for reading + in_read = kl_pushp(read_queue, read_buffer); + + if ((in_read->b = bam_init1()) == NULL) { + fprintf(samtools_stderr, "[markdup] error: unable to allocate memory for alignment.\n"); + return 1; + } + } + + if (ret < -1) { + fprintf(samtools_stderr, "[markdup] error: truncated input file.\n"); + return 1; + } + + // write out the end of the list + rq = kl_begin(read_buffer); + while (rq != kl_end(read_buffer)) { + in_read = &kl_val(rq); + + if (bam_get_qname(in_read->b)) { // last entry will be blank + if (!remove_dups || !(in_read->b->core.flag & BAM_FDUP)) { + if (supp) { + if (tmp_file_write(&temp, in_read->b)) { + fprintf(samtools_stderr, "[markdup] error: writing temp output failed.\n"); + return 1; + } + } else { + if (sam_write1(out, header, in_read->b) < 0) { + fprintf(samtools_stderr, "[markdup] error: writing output failed.\n"); + return 1; + } + } + + writing++; + } + } + + kl_shift(read_queue, read_buffer, NULL); + bam_destroy1(in_read->b); + rq = kl_begin(read_buffer); + } + + if (supp) { + bam1_t *b; + + if (tmp_file_end_write(&temp)) { + fprintf(samtools_stderr, "[markdup] error: unable to end tmp writing.\n"); + return 1; + } + + // read data from temp file and mark duplicate supplementary alignments + + if (tmp_file_begin_read(&temp, NULL)) { + return 1; + } + + b = bam_init1(); + + while ((ret = tmp_file_read(&temp, b)) > 0) { + + if ((b->core.flag & BAM_FSUPPLEMENTARY) || (b->core.flag & BAM_FUNMAP)) { + k = kh_get(duplicates, dup_hash, bam_get_qname(b)); + + if (k != kh_end(dup_hash)) { + b->core.flag |= BAM_FDUP; + } + } + + if (!remove_dups || !(b->core.flag & BAM_FDUP)) { + if (sam_write1(out, header, b) < 0) { + fprintf(samtools_stderr, "[markdup] error: writing final output failed.\n"); + return 1; + } + } + } + + if (ret == -1) { + fprintf(samtools_stderr, "[markdup] error: failed to read tmp file.\n"); + return 1; + } + + for (k = kh_begin(dup_hash); k != kh_end(dup_hash); ++k) { + if (kh_exist(dup_hash, k)) { + free((char *)kh_key(dup_hash, k)); + } + } + + tmp_file_destroy(&temp, b, 0); + kh_destroy(duplicates, dup_hash); + bam_destroy1(b); + } + + if (do_stats) { + fprintf(samtools_stderr, "READ %d WRITTEN %d \n" + "EXCLUDED %d EXAMINED %d\n" + "PAIRED %d SINGLE %d\n" + "DULPICATE PAIR %d DUPLICATE SINGLE %d\n" + "DUPLICATE TOTAL %d\n", reading, writing, excluded, examined, pair, single, + duplicate, single_dup, single_dup + duplicate); + } + + kh_destroy(reads, pair_hash); + kh_destroy(reads, single_hash); + kl_destroy(read_queue, read_buffer); + bam_hdr_destroy(header); + + return 0; +} + + +static int markdup_usage(void) { + fprintf(samtools_stderr, "\n"); + fprintf(samtools_stderr, "Usage: samtools markdup \n\n"); + fprintf(samtools_stderr, "Option: \n"); + fprintf(samtools_stderr, " -r Remove duplicate reads\n"); + fprintf(samtools_stderr, " -l INT Max read length (default 300 bases)\n"); + fprintf(samtools_stderr, " -S Mark supplemenary alignments of duplicates as duplicates (slower).\n"); + fprintf(samtools_stderr, " -s Report stats.\n"); + fprintf(samtools_stderr, " -T PREFIX Write temporary files to PREFIX.samtools.nnnn.nnnn.tmp.\n"); + fprintf(samtools_stderr, " -t Mark primary duplicates with the name of the original in a \'do\' tag." + " Mainly for information and debugging.\n"); + + sam_global_opt_help(samtools_stderr, "-.O..@"); + + fprintf(samtools_stderr, "\nThe input file must be coordinate sorted and must have gone" + " through fixmates with the mate scoring option on.\n"); + + return 1; +} + + +int bam_markdup(int argc, char **argv) { + int c, ret, remove_dups = 0, report_stats = 0, include_supplementary = 0, tag_dup = 0; + int32_t max_length = 300; + samFile *in = NULL, *out = NULL; + char wmode[3] = {'w', 'b', 0}; + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + htsThreadPool p = {NULL, 0}; + kstring_t tmpprefix = {0, 0, NULL}; + struct stat st; + unsigned int t; + + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, 'O', 0, 0, '@'), + {NULL, 0, NULL, 0} + }; + + while ((c = getopt_long(argc, argv, "rsl:StT:O:@:", lopts, NULL)) >= 0) { + switch (c) { + case 'r': remove_dups = 1; break; + case 'l': max_length = atoi(optarg); break; + case 's': report_stats = 1; break; + case 'T': kputs(optarg, &tmpprefix); break; + case 'S': include_supplementary = 1; break; + case 't': tag_dup = 1; break; + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + /* else fall-through */ + case '?': return markdup_usage(); + } + } + + if (optind + 2 > argc) + return markdup_usage(); + + in = sam_open_format(argv[optind], "r", &ga.in); + + if (!in) { + print_error_errno("markdup", "failed to open \"%s\" for input", argv[optind]); + return 1; + } + + sam_open_mode(wmode + 1, argv[optind + 1], NULL); + out = sam_open_format(argv[optind + 1], wmode, &ga.out); + + if (!out) { + print_error_errno("markdup", "failed to open \"%s\" for output", argv[optind + 1]); + return 1; + } + + if (ga.nthreads > 0) { + if (!(p.pool = hts_tpool_init(ga.nthreads))) { + fprintf(samtools_stderr, "[markdup] error creating thread pool\n"); + return 1; + } + + hts_set_opt(in, HTS_OPT_THREAD_POOL, &p); + hts_set_opt(out, HTS_OPT_THREAD_POOL, &p); + } + + // actual stuff happens here + + // we need temp files so fix up the name here + if (tmpprefix.l == 0) { + + if (strcmp(argv[optind + 1], "-") != 0) + ksprintf(&tmpprefix, "%s.", argv[optind + 1]); + else + kputc('.', &tmpprefix); + } + + if (stat(tmpprefix.s, &st) == 0 && S_ISDIR(st.st_mode)) { + if (tmpprefix.s[tmpprefix.l-1] != '/') kputc('/', &tmpprefix); + } + + t = ((unsigned) time(NULL)) ^ ((unsigned) clock()); + ksprintf(&tmpprefix, "samtools.%d.%u.tmp", (int) getpid(), t % 10000); + + ret = bam_mark_duplicates(in, out, tmpprefix.s, remove_dups, max_length, report_stats, include_supplementary, tag_dup); + + sam_close(in); + + if (sam_close(out) < 0) { + fprintf(samtools_stderr, "[markdup] error closing output file\n"); + ret = 1; + } + + if (p.pool) hts_tpool_destroy(p.pool); + + free(tmpprefix.s); + sam_global_args_free(&ga); + + return ret; +} diff --git a/samtools/bam_mate.c b/samtools/bam_mate.c new file mode 100644 index 0000000..1d6c55f --- /dev/null +++ b/samtools/bam_mate.c @@ -0,0 +1,483 @@ +/* bam_mate.c -- fix mate pairing information and clean up flags. + + Copyright (C) 2009, 2011-2017 Genome Research Ltd. + Portions copyright (C) 2011 Broad Institute. + Portions copyright (C) 2012 Peter Cock, The James Hutton Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notices and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include "htslib/thread_pool.h" +#include "sam_opts.h" +#include "htslib/kstring.h" +#include "htslib/sam.h" +#include "samtools.h" + +/* + * This function calculates ct tag for two bams, it assumes they are from the same template and + * writes the tag to the first read in position terms. + */ +static void bam_template_cigar(bam1_t *b1, bam1_t *b2, kstring_t *str) +{ + bam1_t *swap; + int i, end; + uint32_t *cigar; + str->l = 0; + if (b1->core.tid != b2->core.tid || b1->core.tid < 0 || b1->core.pos < 0 || b2->core.pos < 0 || b1->core.flag&BAM_FUNMAP || b2->core.flag&BAM_FUNMAP) return; // coordinateless or not on the same chr; skip + if (b1->core.pos > b2->core.pos) swap = b1, b1 = b2, b2 = swap; // make sure b1 has a smaller coordinate + kputc((b1->core.flag & BAM_FREAD1)? '1' : '2', str); // segment index + kputc((b1->core.flag & BAM_FREVERSE)? 'R' : 'F', str); // strand + for (i = 0, cigar = bam_get_cigar(b1); i < b1->core.n_cigar; ++i) { + kputw(bam_cigar_oplen(cigar[i]), str); + kputc(bam_cigar_opchr(cigar[i]), str); + } + end = bam_endpos(b1); + kputw(b2->core.pos - end, str); + kputc('T', str); + kputc((b2->core.flag & BAM_FREAD1)? '1' : '2', str); // segment index + kputc((b2->core.flag & BAM_FREVERSE)? 'R' : 'F', str); // strand + for (i = 0, cigar = bam_get_cigar(b2); i < b2->core.n_cigar; ++i) { + kputw(bam_cigar_oplen(cigar[i]), str); + kputc(bam_cigar_opchr(cigar[i]), str); + } + + uint8_t* data; + if ((data = bam_aux_get(b1,"ct")) != NULL) bam_aux_del(b1, data); + if ((data = bam_aux_get(b2,"ct")) != NULL) bam_aux_del(b2, data); + + bam_aux_append(b1, "ct", 'Z', str->l+1, (uint8_t*)str->s); +} + +/* + * What This Program is Supposed To Do: + * Fill in mate coordinates, ISIZE and mate related flags from a name-sorted + * alignment. + * + * How We Handle Input + * + * Secondary and supplementary Reads: + * -write to output unchanged + * All Reads: + * -if pos == 0 (1 based), tid == -1 set UNMAPPED flag + * single Reads: + * -if pos == 0 (1 based), tid == -1, or UNMAPPED then set UNMAPPED, pos = 0, + * tid = -1 + * -clear bad flags (PAIRED, MREVERSE, PROPER_PAIR) + * -set mpos = 0 (1 based), mtid = -1 and isize = 0 + * -write to output + * Paired Reads: + * -if read is unmapped and mate is not, set pos and tid to equal that of mate + * -sync mate flags (MREVERSE, MUNMAPPED), mpos, mtid + * -recalculate ISIZE if possible, otherwise set it to 0 + * -optionally clear PROPER_PAIR flag from reads where mapping or orientation + * indicate this is not possible (Illumina orientation only) + * -calculate ct and apply to lowest positioned read + * -write to output + * Limitations + * -Does not handle tandem reads + * -Should mark supplementary reads the same as primary. + * Notes + * -CT definition appears to be something else in spec, this was in here before + * I started tampering with it, anyone know what is going on here? To work + * around this I have demoted the CT this tool generates to ct. + */ + +static void sync_unmapped_pos_inner(bam1_t* src, bam1_t* dest) { + if ((dest->core.flag & BAM_FUNMAP) && !(src->core.flag & BAM_FUNMAP)) { + // Set unmapped read's RNAME and POS to those of its mapped mate + // (recommended best practice, ensures if coord sort will be together) + dest->core.tid = src->core.tid; + dest->core.pos = src->core.pos; + } +} + +static void sync_mate_inner(bam1_t* src, bam1_t* dest) +{ + // sync mate pos information + dest->core.mtid = src->core.tid; dest->core.mpos = src->core.pos; + // sync flag info + if (src->core.flag&BAM_FREVERSE) + dest->core.flag |= BAM_FMREVERSE; + else + dest->core.flag &= ~BAM_FMREVERSE; + if (src->core.flag & BAM_FUNMAP) { + dest->core.flag |= BAM_FMUNMAP; + } +} + +// Is it plausible that these reads are properly paired? +// Can't really give definitive answer without checking isize +static bool plausibly_properly_paired(bam1_t* a, bam1_t* b) +{ + if ((a->core.flag & BAM_FUNMAP) || (b->core.flag & BAM_FUNMAP)) return false; + assert(a->core.tid >= 0); // This should never happen if FUNMAP is set correctly + + if (a->core.tid != b->core.tid) return false; + + bam1_t* first = a; + bam1_t* second = b; + int32_t a_pos = a->core.flag&BAM_FREVERSE ? bam_endpos(a) : a->core.pos; + int32_t b_pos = b->core.flag&BAM_FREVERSE ? bam_endpos(b) : b->core.pos; + if (a_pos > b_pos) { + first = b; + second = a; + } else { + first = a; + second = b; + } + + if (!(first->core.flag&BAM_FREVERSE) && (second->core.flag&BAM_FREVERSE)) + return true; + else + return false; +} + +// Returns 0 on success, -1 on failure. +static int bam_format_cigar(const bam1_t* b, kstring_t* str) +{ + // An empty cigar is a special case return "*" rather than "" + if (b->core.n_cigar == 0) { + return (kputc('*', str) == EOF) ? -1 : 0; + } + + const uint32_t *cigar = bam_get_cigar(b); + uint32_t i; + + for (i = 0; i < b->core.n_cigar; ++i) { + if (kputw(bam_cigar_oplen(cigar[i]), str) == EOF) return -1; + if (kputc(bam_cigar_opchr(cigar[i]), str) == EOF) return -1; + } + + return 0; +} + +// Returns 0 on success, -1 on failure. +static int sync_mq_mc(bam1_t* src, bam1_t* dest) +{ + if ( (src->core.flag & BAM_FUNMAP) == 0 ) { // If mapped + // Copy Mate Mapping Quality + uint32_t mq = src->core.qual; + uint8_t* data; + if ((data = bam_aux_get(dest,"MQ")) != NULL) { + bam_aux_del(dest, data); + } + + bam_aux_append(dest, "MQ", 'i', sizeof(uint32_t), (uint8_t*)&mq); + } + // Copy mate cigar if either read is mapped + if ( (src->core.flag & BAM_FUNMAP) == 0 || (dest->core.flag & BAM_FUNMAP) == 0 ) { + uint8_t* data_mc; + if ((data_mc = bam_aux_get(dest,"MC")) != NULL) { + bam_aux_del(dest, data_mc); + } + + // Convert cigar to string + kstring_t mc = { 0, 0, NULL }; + if (bam_format_cigar(src, &mc) < 0) return -1; + + bam_aux_append(dest, "MC", 'Z', ks_len(&mc)+1, (uint8_t*)ks_str(&mc)); + free(mc.s); + } + return 0; +} + +// Copy flags. +// Returns 0 on success, -1 on failure. +static int sync_mate(bam1_t* a, bam1_t* b) +{ + sync_unmapped_pos_inner(a,b); + sync_unmapped_pos_inner(b,a); + sync_mate_inner(a,b); + sync_mate_inner(b,a); + if (sync_mq_mc(a,b) < 0) return -1; + if (sync_mq_mc(b,a) < 0) return -1; + return 0; +} + + +static uint32_t calc_mate_score(bam1_t *b) +{ + uint32_t score = 0; + uint8_t *qual = bam_get_qual(b); + int i; + + for (i = 0; i < b->core.l_qseq; i++) { + if (qual[i] >= 15) score += qual[i]; + } + + return score; +} + + +static int add_mate_score(bam1_t *src, bam1_t *dest) +{ + uint8_t *data_ms; + uint32_t mate_score = calc_mate_score(src); + + if ((data_ms = bam_aux_get(dest, "ms")) != NULL) { + bam_aux_del(dest, data_ms); + } + + if (bam_aux_append(dest, "ms", 'i', sizeof(uint32_t), (uint8_t*)&mate_score) == -1) { + return -1; + } + + return 0; +} + +// currently, this function ONLY works if each read has one hit +static int bam_mating_core(samFile *in, samFile *out, int remove_reads, int proper_pair_check, int add_ct, int do_mate_scoring) +{ + bam_hdr_t *header; + bam1_t *b[2] = { NULL, NULL }; + int curr, has_prev, pre_end = 0, cur_end = 0; + kstring_t str; + + str.l = str.m = 0; str.s = 0; + header = sam_hdr_read(in); + if (header == NULL) { + fprintf(stderr, "[bam_mating_core] ERROR: Couldn't read header\n"); + return 1; + } + // Accept unknown, unsorted, or queryname sort order, but error on coordinate sorted. + if ((header->l_text > 3) && (strncmp(header->text, "@HD", 3) == 0)) { + char *p, *q; + p = strstr(header->text, "\tSO:coordinate"); + q = strchr(header->text, '\n'); + // Looking for SO:coordinate within the @HD line only + // (e.g. must ignore in a @CO comment line later in header) + if ((p != 0) && (p < q)) { + fprintf(stderr, "[bam_mating_core] ERROR: Coordinate sorted, require grouped/sorted by queryname.\n"); + goto fail; + } + } + if (sam_hdr_write(out, header) < 0) goto write_fail; + + b[0] = bam_init1(); + b[1] = bam_init1(); + curr = 0; has_prev = 0; + while (sam_read1(in, header, b[curr]) >= 0) { + bam1_t *cur = b[curr], *pre = b[1-curr]; + if (cur->core.flag & BAM_FSECONDARY) + { + if ( !remove_reads ) { + if (sam_write1(out, header, cur) < 0) goto write_fail; + } + continue; // skip secondary alignments + } + if (cur->core.flag & BAM_FSUPPLEMENTARY) + { + if (sam_write1(out, header, cur) < 0) goto write_fail; + continue; // pass supplementary alignments through unchanged (TODO:make them match read they came from) + } + if (cur->core.tid < 0 || cur->core.pos < 0) // If unmapped set the flag + { + cur->core.flag |= BAM_FUNMAP; + } + if ((cur->core.flag&BAM_FUNMAP) == 0) // If mapped calculate end + { + cur_end = bam_endpos(cur); + + // Check cur_end isn't past the end of the contig we're on, if it is set the UNMAP'd flag + if (cur_end > (int)header->target_len[cur->core.tid]) cur->core.flag |= BAM_FUNMAP; + } + if (has_prev) { // do we have a pair of reads to examine? + if (strcmp(bam_get_qname(cur), bam_get_qname(pre)) == 0) { // identical pair name + pre->core.flag |= BAM_FPAIRED; + cur->core.flag |= BAM_FPAIRED; + if (sync_mate(pre, cur)) goto fail; + + if (pre->core.tid == cur->core.tid && !(cur->core.flag&(BAM_FUNMAP|BAM_FMUNMAP)) + && !(pre->core.flag&(BAM_FUNMAP|BAM_FMUNMAP))) // if safe set TLEN/ISIZE + { + uint32_t cur5, pre5; + cur5 = (cur->core.flag&BAM_FREVERSE)? cur_end : cur->core.pos; + pre5 = (pre->core.flag&BAM_FREVERSE)? pre_end : pre->core.pos; + cur->core.isize = pre5 - cur5; pre->core.isize = cur5 - pre5; + } else cur->core.isize = pre->core.isize = 0; + if (add_ct) bam_template_cigar(pre, cur, &str); + // TODO: Add code to properly check if read is in a proper pair based on ISIZE distribution + if (proper_pair_check && !plausibly_properly_paired(pre,cur)) { + pre->core.flag &= ~BAM_FPROPER_PAIR; + cur->core.flag &= ~BAM_FPROPER_PAIR; + } + + if (do_mate_scoring) { + if ((add_mate_score(pre, cur) == -1) || (add_mate_score(cur, pre) == -1)) { + fprintf(stderr, "[bam_mating_core] ERROR: unable to add mate score.\n"); + goto fail; + } + } + + // Write out result + if ( !remove_reads ) { + if (sam_write1(out, header, pre) < 0) goto write_fail; + if (sam_write1(out, header, cur) < 0) goto write_fail; + } else { + // If we have to remove reads make sure we do it in a way that doesn't create orphans with bad flags + if(pre->core.flag&BAM_FUNMAP) cur->core.flag &= ~(BAM_FPAIRED|BAM_FMREVERSE|BAM_FPROPER_PAIR); + if(cur->core.flag&BAM_FUNMAP) pre->core.flag &= ~(BAM_FPAIRED|BAM_FMREVERSE|BAM_FPROPER_PAIR); + if(!(pre->core.flag&BAM_FUNMAP)) { + if (sam_write1(out, header, pre) < 0) goto write_fail; + } + if(!(cur->core.flag&BAM_FUNMAP)) { + if (sam_write1(out, header, cur) < 0) goto write_fail; + } + } + has_prev = 0; + } else { // unpaired? clear bad info and write it out + if (pre->core.tid < 0 || pre->core.pos < 0 || pre->core.flag&BAM_FUNMAP) { // If unmapped + pre->core.flag |= BAM_FUNMAP; + pre->core.tid = -1; + pre->core.pos = -1; + } + pre->core.mtid = -1; pre->core.mpos = -1; pre->core.isize = 0; + pre->core.flag &= ~(BAM_FPAIRED|BAM_FMREVERSE|BAM_FPROPER_PAIR); + if ( !remove_reads || !(pre->core.flag&BAM_FUNMAP) ) { + if (sam_write1(out, header, pre) < 0) goto write_fail; + } + } + } else has_prev = 1; + curr = 1 - curr; + pre_end = cur_end; + } + if (has_prev && !remove_reads) { // If we still have a BAM in the buffer it must be unpaired + bam1_t *pre = b[1-curr]; + if (pre->core.tid < 0 || pre->core.pos < 0 || pre->core.flag&BAM_FUNMAP) { // If unmapped + pre->core.flag |= BAM_FUNMAP; + pre->core.tid = -1; + pre->core.pos = -1; + } + pre->core.mtid = -1; pre->core.mpos = -1; pre->core.isize = 0; + pre->core.flag &= ~(BAM_FPAIRED|BAM_FMREVERSE|BAM_FPROPER_PAIR); + + if (sam_write1(out, header, pre) < 0) goto write_fail; + } + bam_hdr_destroy(header); + bam_destroy1(b[0]); + bam_destroy1(b[1]); + free(str.s); + return 0; + + write_fail: + print_error_errno("fixmate", "Couldn't write to output file"); + fail: + bam_hdr_destroy(header); + bam_destroy1(b[0]); + bam_destroy1(b[1]); + return 1; +} + +void usage(FILE* where) +{ + fprintf(where, +"Usage: samtools fixmate \n" +"Options:\n" +" -r Remove unmapped reads and secondary alignments\n" +" -p Disable FR proper pair check\n" +" -c Add template cigar ct tag\n" +" -m Add mate score tag\n"); + + sam_global_opt_help(where, "-.O..@"); + + fprintf(where, +"\n" +"As elsewhere in samtools, use '-' as the filename for stdin/stdout. The input\n" +"file must be grouped by read name (e.g. sorted by name). Coordinated sorted\n" +"input is not accepted.\n"); +} + +int bam_mating(int argc, char *argv[]) +{ + htsThreadPool p = {NULL, 0}; + samFile *in = NULL, *out = NULL; + int c, remove_reads = 0, proper_pair_check = 1, add_ct = 0, res = 1, mate_score = 0; + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + char wmode[3] = {'w', 'b', 0}; + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, 'O', 0, 0, '@'), + { NULL, 0, NULL, 0 } + }; + + // parse args + if (argc == 1) { usage(stdout); return 0; } + while ((c = getopt_long(argc, argv, "rpcmO:@:", lopts, NULL)) >= 0) { + switch (c) { + case 'r': remove_reads = 1; break; + case 'p': proper_pair_check = 0; break; + case 'c': add_ct = 1; break; + case 'm': mate_score = 1; break; + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + /* else fall-through */ + case '?': usage(stderr); goto fail; + } + } + if (optind+1 >= argc) { usage(stderr); goto fail; } + + // init + if ((in = sam_open_format(argv[optind], "rb", &ga.in)) == NULL) { + print_error_errno("fixmate", "cannot open input file"); + goto fail; + } + sam_open_mode(wmode+1, argv[optind+1], NULL); + if ((out = sam_open_format(argv[optind+1], wmode, &ga.out)) == NULL) { + print_error_errno("fixmate", "cannot open output file"); + goto fail; + } + + if (ga.nthreads > 0) { + if (!(p.pool = hts_tpool_init(ga.nthreads))) { + fprintf(stderr, "Error creating thread pool\n"); + goto fail; + } + hts_set_opt(in, HTS_OPT_THREAD_POOL, &p); + hts_set_opt(out, HTS_OPT_THREAD_POOL, &p); + } + + // run + res = bam_mating_core(in, out, remove_reads, proper_pair_check, add_ct, mate_score); + + // cleanup + sam_close(in); + if (sam_close(out) < 0) { + fprintf(stderr, "[bam_mating] error while closing output file\n"); + res = 1; + } + + if (p.pool) hts_tpool_destroy(p.pool); + sam_global_args_free(&ga); + return res; + + fail: + if (in) sam_close(in); + if (out) sam_close(out); + if (p.pool) hts_tpool_destroy(p.pool); + sam_global_args_free(&ga); + return 1; +} + + diff --git a/samtools/bam_mate.c.pysam.c b/samtools/bam_mate.c.pysam.c new file mode 100644 index 0000000..57159cc --- /dev/null +++ b/samtools/bam_mate.c.pysam.c @@ -0,0 +1,485 @@ +#include "samtools.pysam.h" + +/* bam_mate.c -- fix mate pairing information and clean up flags. + + Copyright (C) 2009, 2011-2017 Genome Research Ltd. + Portions copyright (C) 2011 Broad Institute. + Portions copyright (C) 2012 Peter Cock, The James Hutton Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notices and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include "htslib/thread_pool.h" +#include "sam_opts.h" +#include "htslib/kstring.h" +#include "htslib/sam.h" +#include "samtools.h" + +/* + * This function calculates ct tag for two bams, it assumes they are from the same template and + * writes the tag to the first read in position terms. + */ +static void bam_template_cigar(bam1_t *b1, bam1_t *b2, kstring_t *str) +{ + bam1_t *swap; + int i, end; + uint32_t *cigar; + str->l = 0; + if (b1->core.tid != b2->core.tid || b1->core.tid < 0 || b1->core.pos < 0 || b2->core.pos < 0 || b1->core.flag&BAM_FUNMAP || b2->core.flag&BAM_FUNMAP) return; // coordinateless or not on the same chr; skip + if (b1->core.pos > b2->core.pos) swap = b1, b1 = b2, b2 = swap; // make sure b1 has a smaller coordinate + kputc((b1->core.flag & BAM_FREAD1)? '1' : '2', str); // segment index + kputc((b1->core.flag & BAM_FREVERSE)? 'R' : 'F', str); // strand + for (i = 0, cigar = bam_get_cigar(b1); i < b1->core.n_cigar; ++i) { + kputw(bam_cigar_oplen(cigar[i]), str); + kputc(bam_cigar_opchr(cigar[i]), str); + } + end = bam_endpos(b1); + kputw(b2->core.pos - end, str); + kputc('T', str); + kputc((b2->core.flag & BAM_FREAD1)? '1' : '2', str); // segment index + kputc((b2->core.flag & BAM_FREVERSE)? 'R' : 'F', str); // strand + for (i = 0, cigar = bam_get_cigar(b2); i < b2->core.n_cigar; ++i) { + kputw(bam_cigar_oplen(cigar[i]), str); + kputc(bam_cigar_opchr(cigar[i]), str); + } + + uint8_t* data; + if ((data = bam_aux_get(b1,"ct")) != NULL) bam_aux_del(b1, data); + if ((data = bam_aux_get(b2,"ct")) != NULL) bam_aux_del(b2, data); + + bam_aux_append(b1, "ct", 'Z', str->l+1, (uint8_t*)str->s); +} + +/* + * What This Program is Supposed To Do: + * Fill in mate coordinates, ISIZE and mate related flags from a name-sorted + * alignment. + * + * How We Handle Input + * + * Secondary and supplementary Reads: + * -write to output unchanged + * All Reads: + * -if pos == 0 (1 based), tid == -1 set UNMAPPED flag + * single Reads: + * -if pos == 0 (1 based), tid == -1, or UNMAPPED then set UNMAPPED, pos = 0, + * tid = -1 + * -clear bad flags (PAIRED, MREVERSE, PROPER_PAIR) + * -set mpos = 0 (1 based), mtid = -1 and isize = 0 + * -write to output + * Paired Reads: + * -if read is unmapped and mate is not, set pos and tid to equal that of mate + * -sync mate flags (MREVERSE, MUNMAPPED), mpos, mtid + * -recalculate ISIZE if possible, otherwise set it to 0 + * -optionally clear PROPER_PAIR flag from reads where mapping or orientation + * indicate this is not possible (Illumina orientation only) + * -calculate ct and apply to lowest positioned read + * -write to output + * Limitations + * -Does not handle tandem reads + * -Should mark supplementary reads the same as primary. + * Notes + * -CT definition appears to be something else in spec, this was in here before + * I started tampering with it, anyone know what is going on here? To work + * around this I have demoted the CT this tool generates to ct. + */ + +static void sync_unmapped_pos_inner(bam1_t* src, bam1_t* dest) { + if ((dest->core.flag & BAM_FUNMAP) && !(src->core.flag & BAM_FUNMAP)) { + // Set unmapped read's RNAME and POS to those of its mapped mate + // (recommended best practice, ensures if coord sort will be together) + dest->core.tid = src->core.tid; + dest->core.pos = src->core.pos; + } +} + +static void sync_mate_inner(bam1_t* src, bam1_t* dest) +{ + // sync mate pos information + dest->core.mtid = src->core.tid; dest->core.mpos = src->core.pos; + // sync flag info + if (src->core.flag&BAM_FREVERSE) + dest->core.flag |= BAM_FMREVERSE; + else + dest->core.flag &= ~BAM_FMREVERSE; + if (src->core.flag & BAM_FUNMAP) { + dest->core.flag |= BAM_FMUNMAP; + } +} + +// Is it plausible that these reads are properly paired? +// Can't really give definitive answer without checking isize +static bool plausibly_properly_paired(bam1_t* a, bam1_t* b) +{ + if ((a->core.flag & BAM_FUNMAP) || (b->core.flag & BAM_FUNMAP)) return false; + assert(a->core.tid >= 0); // This should never happen if FUNMAP is set correctly + + if (a->core.tid != b->core.tid) return false; + + bam1_t* first = a; + bam1_t* second = b; + int32_t a_pos = a->core.flag&BAM_FREVERSE ? bam_endpos(a) : a->core.pos; + int32_t b_pos = b->core.flag&BAM_FREVERSE ? bam_endpos(b) : b->core.pos; + if (a_pos > b_pos) { + first = b; + second = a; + } else { + first = a; + second = b; + } + + if (!(first->core.flag&BAM_FREVERSE) && (second->core.flag&BAM_FREVERSE)) + return true; + else + return false; +} + +// Returns 0 on success, -1 on failure. +static int bam_format_cigar(const bam1_t* b, kstring_t* str) +{ + // An empty cigar is a special case return "*" rather than "" + if (b->core.n_cigar == 0) { + return (kputc('*', str) == EOF) ? -1 : 0; + } + + const uint32_t *cigar = bam_get_cigar(b); + uint32_t i; + + for (i = 0; i < b->core.n_cigar; ++i) { + if (kputw(bam_cigar_oplen(cigar[i]), str) == EOF) return -1; + if (kputc(bam_cigar_opchr(cigar[i]), str) == EOF) return -1; + } + + return 0; +} + +// Returns 0 on success, -1 on failure. +static int sync_mq_mc(bam1_t* src, bam1_t* dest) +{ + if ( (src->core.flag & BAM_FUNMAP) == 0 ) { // If mapped + // Copy Mate Mapping Quality + uint32_t mq = src->core.qual; + uint8_t* data; + if ((data = bam_aux_get(dest,"MQ")) != NULL) { + bam_aux_del(dest, data); + } + + bam_aux_append(dest, "MQ", 'i', sizeof(uint32_t), (uint8_t*)&mq); + } + // Copy mate cigar if either read is mapped + if ( (src->core.flag & BAM_FUNMAP) == 0 || (dest->core.flag & BAM_FUNMAP) == 0 ) { + uint8_t* data_mc; + if ((data_mc = bam_aux_get(dest,"MC")) != NULL) { + bam_aux_del(dest, data_mc); + } + + // Convert cigar to string + kstring_t mc = { 0, 0, NULL }; + if (bam_format_cigar(src, &mc) < 0) return -1; + + bam_aux_append(dest, "MC", 'Z', ks_len(&mc)+1, (uint8_t*)ks_str(&mc)); + free(mc.s); + } + return 0; +} + +// Copy flags. +// Returns 0 on success, -1 on failure. +static int sync_mate(bam1_t* a, bam1_t* b) +{ + sync_unmapped_pos_inner(a,b); + sync_unmapped_pos_inner(b,a); + sync_mate_inner(a,b); + sync_mate_inner(b,a); + if (sync_mq_mc(a,b) < 0) return -1; + if (sync_mq_mc(b,a) < 0) return -1; + return 0; +} + + +static uint32_t calc_mate_score(bam1_t *b) +{ + uint32_t score = 0; + uint8_t *qual = bam_get_qual(b); + int i; + + for (i = 0; i < b->core.l_qseq; i++) { + if (qual[i] >= 15) score += qual[i]; + } + + return score; +} + + +static int add_mate_score(bam1_t *src, bam1_t *dest) +{ + uint8_t *data_ms; + uint32_t mate_score = calc_mate_score(src); + + if ((data_ms = bam_aux_get(dest, "ms")) != NULL) { + bam_aux_del(dest, data_ms); + } + + if (bam_aux_append(dest, "ms", 'i', sizeof(uint32_t), (uint8_t*)&mate_score) == -1) { + return -1; + } + + return 0; +} + +// currently, this function ONLY works if each read has one hit +static int bam_mating_core(samFile *in, samFile *out, int remove_reads, int proper_pair_check, int add_ct, int do_mate_scoring) +{ + bam_hdr_t *header; + bam1_t *b[2] = { NULL, NULL }; + int curr, has_prev, pre_end = 0, cur_end = 0; + kstring_t str; + + str.l = str.m = 0; str.s = 0; + header = sam_hdr_read(in); + if (header == NULL) { + fprintf(samtools_stderr, "[bam_mating_core] ERROR: Couldn't read header\n"); + return 1; + } + // Accept unknown, unsorted, or queryname sort order, but error on coordinate sorted. + if ((header->l_text > 3) && (strncmp(header->text, "@HD", 3) == 0)) { + char *p, *q; + p = strstr(header->text, "\tSO:coordinate"); + q = strchr(header->text, '\n'); + // Looking for SO:coordinate within the @HD line only + // (e.g. must ignore in a @CO comment line later in header) + if ((p != 0) && (p < q)) { + fprintf(samtools_stderr, "[bam_mating_core] ERROR: Coordinate sorted, require grouped/sorted by queryname.\n"); + goto fail; + } + } + if (sam_hdr_write(out, header) < 0) goto write_fail; + + b[0] = bam_init1(); + b[1] = bam_init1(); + curr = 0; has_prev = 0; + while (sam_read1(in, header, b[curr]) >= 0) { + bam1_t *cur = b[curr], *pre = b[1-curr]; + if (cur->core.flag & BAM_FSECONDARY) + { + if ( !remove_reads ) { + if (sam_write1(out, header, cur) < 0) goto write_fail; + } + continue; // skip secondary alignments + } + if (cur->core.flag & BAM_FSUPPLEMENTARY) + { + if (sam_write1(out, header, cur) < 0) goto write_fail; + continue; // pass supplementary alignments through unchanged (TODO:make them match read they came from) + } + if (cur->core.tid < 0 || cur->core.pos < 0) // If unmapped set the flag + { + cur->core.flag |= BAM_FUNMAP; + } + if ((cur->core.flag&BAM_FUNMAP) == 0) // If mapped calculate end + { + cur_end = bam_endpos(cur); + + // Check cur_end isn't past the end of the contig we're on, if it is set the UNMAP'd flag + if (cur_end > (int)header->target_len[cur->core.tid]) cur->core.flag |= BAM_FUNMAP; + } + if (has_prev) { // do we have a pair of reads to examine? + if (strcmp(bam_get_qname(cur), bam_get_qname(pre)) == 0) { // identical pair name + pre->core.flag |= BAM_FPAIRED; + cur->core.flag |= BAM_FPAIRED; + if (sync_mate(pre, cur)) goto fail; + + if (pre->core.tid == cur->core.tid && !(cur->core.flag&(BAM_FUNMAP|BAM_FMUNMAP)) + && !(pre->core.flag&(BAM_FUNMAP|BAM_FMUNMAP))) // if safe set TLEN/ISIZE + { + uint32_t cur5, pre5; + cur5 = (cur->core.flag&BAM_FREVERSE)? cur_end : cur->core.pos; + pre5 = (pre->core.flag&BAM_FREVERSE)? pre_end : pre->core.pos; + cur->core.isize = pre5 - cur5; pre->core.isize = cur5 - pre5; + } else cur->core.isize = pre->core.isize = 0; + if (add_ct) bam_template_cigar(pre, cur, &str); + // TODO: Add code to properly check if read is in a proper pair based on ISIZE distribution + if (proper_pair_check && !plausibly_properly_paired(pre,cur)) { + pre->core.flag &= ~BAM_FPROPER_PAIR; + cur->core.flag &= ~BAM_FPROPER_PAIR; + } + + if (do_mate_scoring) { + if ((add_mate_score(pre, cur) == -1) || (add_mate_score(cur, pre) == -1)) { + fprintf(samtools_stderr, "[bam_mating_core] ERROR: unable to add mate score.\n"); + goto fail; + } + } + + // Write out result + if ( !remove_reads ) { + if (sam_write1(out, header, pre) < 0) goto write_fail; + if (sam_write1(out, header, cur) < 0) goto write_fail; + } else { + // If we have to remove reads make sure we do it in a way that doesn't create orphans with bad flags + if(pre->core.flag&BAM_FUNMAP) cur->core.flag &= ~(BAM_FPAIRED|BAM_FMREVERSE|BAM_FPROPER_PAIR); + if(cur->core.flag&BAM_FUNMAP) pre->core.flag &= ~(BAM_FPAIRED|BAM_FMREVERSE|BAM_FPROPER_PAIR); + if(!(pre->core.flag&BAM_FUNMAP)) { + if (sam_write1(out, header, pre) < 0) goto write_fail; + } + if(!(cur->core.flag&BAM_FUNMAP)) { + if (sam_write1(out, header, cur) < 0) goto write_fail; + } + } + has_prev = 0; + } else { // unpaired? clear bad info and write it out + if (pre->core.tid < 0 || pre->core.pos < 0 || pre->core.flag&BAM_FUNMAP) { // If unmapped + pre->core.flag |= BAM_FUNMAP; + pre->core.tid = -1; + pre->core.pos = -1; + } + pre->core.mtid = -1; pre->core.mpos = -1; pre->core.isize = 0; + pre->core.flag &= ~(BAM_FPAIRED|BAM_FMREVERSE|BAM_FPROPER_PAIR); + if ( !remove_reads || !(pre->core.flag&BAM_FUNMAP) ) { + if (sam_write1(out, header, pre) < 0) goto write_fail; + } + } + } else has_prev = 1; + curr = 1 - curr; + pre_end = cur_end; + } + if (has_prev && !remove_reads) { // If we still have a BAM in the buffer it must be unpaired + bam1_t *pre = b[1-curr]; + if (pre->core.tid < 0 || pre->core.pos < 0 || pre->core.flag&BAM_FUNMAP) { // If unmapped + pre->core.flag |= BAM_FUNMAP; + pre->core.tid = -1; + pre->core.pos = -1; + } + pre->core.mtid = -1; pre->core.mpos = -1; pre->core.isize = 0; + pre->core.flag &= ~(BAM_FPAIRED|BAM_FMREVERSE|BAM_FPROPER_PAIR); + + if (sam_write1(out, header, pre) < 0) goto write_fail; + } + bam_hdr_destroy(header); + bam_destroy1(b[0]); + bam_destroy1(b[1]); + free(str.s); + return 0; + + write_fail: + print_error_errno("fixmate", "Couldn't write to output file"); + fail: + bam_hdr_destroy(header); + bam_destroy1(b[0]); + bam_destroy1(b[1]); + return 1; +} + +void usage(FILE* where) +{ + fprintf(where, +"Usage: samtools fixmate \n" +"Options:\n" +" -r Remove unmapped reads and secondary alignments\n" +" -p Disable FR proper pair check\n" +" -c Add template cigar ct tag\n" +" -m Add mate score tag\n"); + + sam_global_opt_help(where, "-.O..@"); + + fprintf(where, +"\n" +"As elsewhere in samtools, use '-' as the filename for stdin/samtools_stdout. The input\n" +"file must be grouped by read name (e.g. sorted by name). Coordinated sorted\n" +"input is not accepted.\n"); +} + +int bam_mating(int argc, char *argv[]) +{ + htsThreadPool p = {NULL, 0}; + samFile *in = NULL, *out = NULL; + int c, remove_reads = 0, proper_pair_check = 1, add_ct = 0, res = 1, mate_score = 0; + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + char wmode[3] = {'w', 'b', 0}; + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, 'O', 0, 0, '@'), + { NULL, 0, NULL, 0 } + }; + + // parse args + if (argc == 1) { usage(samtools_stdout); return 0; } + while ((c = getopt_long(argc, argv, "rpcmO:@:", lopts, NULL)) >= 0) { + switch (c) { + case 'r': remove_reads = 1; break; + case 'p': proper_pair_check = 0; break; + case 'c': add_ct = 1; break; + case 'm': mate_score = 1; break; + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + /* else fall-through */ + case '?': usage(samtools_stderr); goto fail; + } + } + if (optind+1 >= argc) { usage(samtools_stderr); goto fail; } + + // init + if ((in = sam_open_format(argv[optind], "rb", &ga.in)) == NULL) { + print_error_errno("fixmate", "cannot open input file"); + goto fail; + } + sam_open_mode(wmode+1, argv[optind+1], NULL); + if ((out = sam_open_format(argv[optind+1], wmode, &ga.out)) == NULL) { + print_error_errno("fixmate", "cannot open output file"); + goto fail; + } + + if (ga.nthreads > 0) { + if (!(p.pool = hts_tpool_init(ga.nthreads))) { + fprintf(samtools_stderr, "Error creating thread pool\n"); + goto fail; + } + hts_set_opt(in, HTS_OPT_THREAD_POOL, &p); + hts_set_opt(out, HTS_OPT_THREAD_POOL, &p); + } + + // run + res = bam_mating_core(in, out, remove_reads, proper_pair_check, add_ct, mate_score); + + // cleanup + sam_close(in); + if (sam_close(out) < 0) { + fprintf(samtools_stderr, "[bam_mating] error while closing output file\n"); + res = 1; + } + + if (p.pool) hts_tpool_destroy(p.pool); + sam_global_args_free(&ga); + return res; + + fail: + if (in) sam_close(in); + if (out) sam_close(out); + if (p.pool) hts_tpool_destroy(p.pool); + sam_global_args_free(&ga); + return 1; +} + + diff --git a/samtools/bam_md.c b/samtools/bam_md.c new file mode 100644 index 0000000..f095030 --- /dev/null +++ b/samtools/bam_md.c @@ -0,0 +1,321 @@ +/* bam_md.c -- calmd subcommand. + + Copyright (C) 2009-2011, 2014-2015 Genome Research Ltd. + Portions copyright (C) 2009-2011 Broad Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include "htslib/faidx.h" +#include "htslib/sam.h" +#include "htslib/kstring.h" +#include "htslib/thread_pool.h" +#include "sam_opts.h" +#include "samtools.h" + +#define USE_EQUAL 1 +#define DROP_TAG 2 +#define BIN_QUAL 4 +#define UPDATE_NM 8 +#define UPDATE_MD 16 +#define HASH_QNM 32 + +int bam_aux_drop_other(bam1_t *b, uint8_t *s); + +void bam_fillmd1_core(bam1_t *b, char *ref, int ref_len, int flag, int max_nm) +{ + uint8_t *seq = bam_get_seq(b); + uint32_t *cigar = bam_get_cigar(b); + bam1_core_t *c = &b->core; + int i, x, y, u = 0; + kstring_t *str; + int32_t old_nm_i = -1, nm = 0; + + str = (kstring_t*)calloc(1, sizeof(kstring_t)); + for (i = y = 0, x = c->pos; i < c->n_cigar; ++i) { + int j, l = cigar[i]>>4, op = cigar[i]&0xf; + if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { + for (j = 0; j < l; ++j) { + int c1, c2, z = y + j; + if (x+j >= ref_len || ref[x+j] == '\0') break; // out of bounds + c1 = bam_seqi(seq, z), c2 = seq_nt16_table[(int)ref[x+j]]; + if ((c1 == c2 && c1 != 15 && c2 != 15) || c1 == 0) { // a match + if (flag&USE_EQUAL) seq[z/2] &= (z&1)? 0xf0 : 0x0f; + ++u; + } else { + kputw(u, str); kputc(ref[x+j], str); + u = 0; ++nm; + } + } + if (j < l) break; + x += l; y += l; + } else if (op == BAM_CDEL) { + kputw(u, str); kputc('^', str); + for (j = 0; j < l; ++j) { + if (x+j >= ref_len || ref[x+j] == '\0') break; + kputc(ref[x+j], str); + } + u = 0; + x += j; nm += j; + if (j < l) break; + } else if (op == BAM_CINS || op == BAM_CSOFT_CLIP) { + y += l; + if (op == BAM_CINS) nm += l; + } else if (op == BAM_CREF_SKIP) { + x += l; + } + } + kputw(u, str); + // apply max_nm + if (max_nm > 0 && nm >= max_nm) { + for (i = y = 0, x = c->pos; i < c->n_cigar; ++i) { + int j, l = cigar[i]>>4, op = cigar[i]&0xf; + if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { + for (j = 0; j < l; ++j) { + int c1, c2, z = y + j; + if (x+j >= ref_len || ref[x+j] == '\0') break; // out of bounds + c1 = bam_seqi(seq, z), c2 = seq_nt16_table[(int)ref[x+j]]; + if ((c1 == c2 && c1 != 15 && c2 != 15) || c1 == 0) { // a match + seq[z/2] |= (z&1)? 0x0f : 0xf0; + bam_get_qual(b)[z] = 0; + } + } + if (j < l) break; + x += l; y += l; + } else if (op == BAM_CDEL || op == BAM_CREF_SKIP) x += l; + else if (op == BAM_CINS || op == BAM_CSOFT_CLIP) y += l; + } + } + // update NM + if ((flag & UPDATE_NM) && !(c->flag & BAM_FUNMAP)) { + uint8_t *old_nm = bam_aux_get(b, "NM"); + if (old_nm) old_nm_i = bam_aux2i(old_nm); + if (!old_nm) bam_aux_append(b, "NM", 'i', 4, (uint8_t*)&nm); + else if (nm != old_nm_i) { + fprintf(stderr, "[bam_fillmd1] different NM for read '%s': %d -> %d\n", bam_get_qname(b), old_nm_i, nm); + bam_aux_del(b, old_nm); + bam_aux_append(b, "NM", 'i', 4, (uint8_t*)&nm); + } + } + // update MD + if ((flag & UPDATE_MD) && !(c->flag & BAM_FUNMAP)) { + uint8_t *old_md = bam_aux_get(b, "MD"); + if (!old_md) bam_aux_append(b, "MD", 'Z', str->l + 1, (uint8_t*)str->s); + else { + int is_diff = 0; + if (strlen((char*)old_md+1) == str->l) { + for (i = 0; i < str->l; ++i) + if (toupper(old_md[i+1]) != toupper(str->s[i])) + break; + if (i < str->l) is_diff = 1; + } else is_diff = 1; + if (is_diff) { + fprintf(stderr, "[bam_fillmd1] different MD for read '%s': '%s' -> '%s'\n", bam_get_qname(b), old_md+1, str->s); + bam_aux_del(b, old_md); + bam_aux_append(b, "MD", 'Z', str->l + 1, (uint8_t*)str->s); + } + } + } + + // drop all tags but RG + if (flag&DROP_TAG) { + uint8_t *q = bam_aux_get(b, "RG"); + bam_aux_drop_other(b, q); + } + // reduce the resolution of base quality + if (flag&BIN_QUAL) { + uint8_t *qual = bam_get_qual(b); + for (i = 0; i < b->core.l_qseq; ++i) + if (qual[i] >= 3) qual[i] = qual[i]/10*10 + 7; + } + + free(str->s); free(str); +} + +void bam_fillmd1(bam1_t *b, char *ref, int flag) +{ + bam_fillmd1_core(b, ref, INT_MAX, flag, 0); +} + +int calmd_usage() { + fprintf(stderr, +"Usage: samtools calmd [-eubrAES] \n" +"Options:\n" +" -e change identical bases to '='\n" +" -u uncompressed BAM output (for piping)\n" +" -b compressed BAM output\n" +" -S ignored (input format is auto-detected)\n" +" -A modify the quality string\n" +" -r compute the BQ tag (without -A) or cap baseQ by BAQ (with -A)\n" +" -E extended BAQ for better sensitivity but lower specificity\n"); + + sam_global_opt_help(stderr, "-....@"); + return 1; +} + +int bam_fillmd(int argc, char *argv[]) +{ + int c, flt_flag, tid = -2, ret, len, is_bam_out, is_uncompressed, max_nm, is_realn, capQ, baq_flag; + htsThreadPool p = {NULL, 0}; + samFile *fp = NULL, *fpout = NULL; + bam_hdr_t *header = NULL; + faidx_t *fai = NULL; + char *ref = NULL, mode_w[8], *ref_file; + bam1_t *b = NULL; + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, 0, 0, 0,'@'), + { NULL, 0, NULL, 0 } + }; + + flt_flag = UPDATE_NM | UPDATE_MD; + is_bam_out = is_uncompressed = is_realn = max_nm = capQ = baq_flag = 0; + strcpy(mode_w, "w"); + while ((c = getopt_long(argc, argv, "EqreuNhbSC:n:Ad@:", lopts, NULL)) >= 0) { + switch (c) { + case 'r': is_realn = 1; break; + case 'e': flt_flag |= USE_EQUAL; break; + case 'd': flt_flag |= DROP_TAG; break; + case 'q': flt_flag |= BIN_QUAL; break; + case 'h': flt_flag |= HASH_QNM; break; + case 'N': flt_flag &= ~(UPDATE_MD|UPDATE_NM); break; + case 'b': is_bam_out = 1; break; + case 'u': is_uncompressed = is_bam_out = 1; break; + case 'S': break; + case 'n': max_nm = atoi(optarg); break; + case 'C': capQ = atoi(optarg); break; + case 'A': baq_flag |= 1; break; + case 'E': baq_flag |= 2; break; + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + fprintf(stderr, "[bam_fillmd] unrecognized option '-%c'\n\n", c); + /* else fall-through */ + case '?': return calmd_usage(); + } + } + if (is_bam_out) strcat(mode_w, "b"); + else strcat(mode_w, "h"); + if (is_uncompressed) strcat(mode_w, "0"); + if (optind + (ga.reference == NULL) >= argc) + return calmd_usage(); + fp = sam_open_format(argv[optind], "r", &ga.in); + if (fp == NULL) { + print_error_errno("calmd", "Failed to open input file '%s'", argv[optind]); + return 1; + } + + header = sam_hdr_read(fp); + if (header == NULL || header->n_targets == 0) { + fprintf(stderr, "[bam_fillmd] input SAM does not have header. Abort!\n"); + goto fail; + } + + fpout = sam_open_format("-", mode_w, &ga.out); + if (fpout == NULL) { + print_error_errno("calmd", "Failed to open output"); + goto fail; + } + if (sam_hdr_write(fpout, header) < 0) { + print_error_errno("calmd", "Failed to write sam header"); + goto fail; + } + + if (ga.nthreads > 0) { + if (!(p.pool = hts_tpool_init(ga.nthreads))) { + fprintf(stderr, "Error creating thread pool\n"); + goto fail; + } + hts_set_opt(fp, HTS_OPT_THREAD_POOL, &p); + hts_set_opt(fpout, HTS_OPT_THREAD_POOL, &p); + } + + ref_file = argc > optind + 1 ? argv[optind+1] : ga.reference; + fai = fai_load(ref_file); + + if (!fai) { + print_error_errno("calmd", "Failed to open reference file '%s'", ref_file); + goto fail; + } + + b = bam_init1(); + if (!b) { + fprintf(stderr, "[bam_fillmd] Failed to allocate bam struct\n"); + goto fail; + } + while ((ret = sam_read1(fp, header, b)) >= 0) { + if (b->core.tid >= 0) { + if (tid != b->core.tid) { + free(ref); + ref = fai_fetch(fai, header->target_name[b->core.tid], &len); + tid = b->core.tid; + if (ref == 0) { // FIXME: Should this always be fatal? + fprintf(stderr, "[bam_fillmd] fail to find sequence '%s' in the reference.\n", + header->target_name[tid]); + if (is_realn || capQ > 10) goto fail; // Would otherwise crash + } + } + if (is_realn) sam_prob_realn(b, ref, len, baq_flag); + if (capQ > 10) { + int q = sam_cap_mapq(b, ref, len, capQ); + if (b->core.qual > q) b->core.qual = q; + } + if (ref) bam_fillmd1_core(b, ref, len, flt_flag, max_nm); + } + if (sam_write1(fpout, header, b) < 0) { + print_error_errno("calmd", "failed to write to output file"); + goto fail; + } + } + if (ret < -1) { + fprintf(stderr, "[bam_fillmd] Error reading input.\n"); + goto fail; + } + bam_destroy1(b); + bam_hdr_destroy(header); + + free(ref); + fai_destroy(fai); + sam_close(fp); + if (sam_close(fpout) < 0) { + fprintf(stderr, "[bam_fillmd] error when closing output file\n"); + return 1; + } + if (p.pool) hts_tpool_destroy(p.pool); + + return 0; + + fail: + free(ref); + if (b) bam_destroy1(b); + if (header) bam_hdr_destroy(header); + if (fai) fai_destroy(fai); + if (fp) sam_close(fp); + if (fpout) sam_close(fpout); + if (p.pool) hts_tpool_destroy(p.pool); + + return 1; +} diff --git a/samtools/bam_md.c.pysam.c b/samtools/bam_md.c.pysam.c new file mode 100644 index 0000000..f266fe7 --- /dev/null +++ b/samtools/bam_md.c.pysam.c @@ -0,0 +1,323 @@ +#include "samtools.pysam.h" + +/* bam_md.c -- calmd subcommand. + + Copyright (C) 2009-2011, 2014-2015 Genome Research Ltd. + Portions copyright (C) 2009-2011 Broad Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include "htslib/faidx.h" +#include "htslib/sam.h" +#include "htslib/kstring.h" +#include "htslib/thread_pool.h" +#include "sam_opts.h" +#include "samtools.h" + +#define USE_EQUAL 1 +#define DROP_TAG 2 +#define BIN_QUAL 4 +#define UPDATE_NM 8 +#define UPDATE_MD 16 +#define HASH_QNM 32 + +int bam_aux_drop_other(bam1_t *b, uint8_t *s); + +void bam_fillmd1_core(bam1_t *b, char *ref, int ref_len, int flag, int max_nm) +{ + uint8_t *seq = bam_get_seq(b); + uint32_t *cigar = bam_get_cigar(b); + bam1_core_t *c = &b->core; + int i, x, y, u = 0; + kstring_t *str; + int32_t old_nm_i = -1, nm = 0; + + str = (kstring_t*)calloc(1, sizeof(kstring_t)); + for (i = y = 0, x = c->pos; i < c->n_cigar; ++i) { + int j, l = cigar[i]>>4, op = cigar[i]&0xf; + if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { + for (j = 0; j < l; ++j) { + int c1, c2, z = y + j; + if (x+j >= ref_len || ref[x+j] == '\0') break; // out of bounds + c1 = bam_seqi(seq, z), c2 = seq_nt16_table[(int)ref[x+j]]; + if ((c1 == c2 && c1 != 15 && c2 != 15) || c1 == 0) { // a match + if (flag&USE_EQUAL) seq[z/2] &= (z&1)? 0xf0 : 0x0f; + ++u; + } else { + kputw(u, str); kputc(ref[x+j], str); + u = 0; ++nm; + } + } + if (j < l) break; + x += l; y += l; + } else if (op == BAM_CDEL) { + kputw(u, str); kputc('^', str); + for (j = 0; j < l; ++j) { + if (x+j >= ref_len || ref[x+j] == '\0') break; + kputc(ref[x+j], str); + } + u = 0; + x += j; nm += j; + if (j < l) break; + } else if (op == BAM_CINS || op == BAM_CSOFT_CLIP) { + y += l; + if (op == BAM_CINS) nm += l; + } else if (op == BAM_CREF_SKIP) { + x += l; + } + } + kputw(u, str); + // apply max_nm + if (max_nm > 0 && nm >= max_nm) { + for (i = y = 0, x = c->pos; i < c->n_cigar; ++i) { + int j, l = cigar[i]>>4, op = cigar[i]&0xf; + if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { + for (j = 0; j < l; ++j) { + int c1, c2, z = y + j; + if (x+j >= ref_len || ref[x+j] == '\0') break; // out of bounds + c1 = bam_seqi(seq, z), c2 = seq_nt16_table[(int)ref[x+j]]; + if ((c1 == c2 && c1 != 15 && c2 != 15) || c1 == 0) { // a match + seq[z/2] |= (z&1)? 0x0f : 0xf0; + bam_get_qual(b)[z] = 0; + } + } + if (j < l) break; + x += l; y += l; + } else if (op == BAM_CDEL || op == BAM_CREF_SKIP) x += l; + else if (op == BAM_CINS || op == BAM_CSOFT_CLIP) y += l; + } + } + // update NM + if ((flag & UPDATE_NM) && !(c->flag & BAM_FUNMAP)) { + uint8_t *old_nm = bam_aux_get(b, "NM"); + if (old_nm) old_nm_i = bam_aux2i(old_nm); + if (!old_nm) bam_aux_append(b, "NM", 'i', 4, (uint8_t*)&nm); + else if (nm != old_nm_i) { + fprintf(samtools_stderr, "[bam_fillmd1] different NM for read '%s': %d -> %d\n", bam_get_qname(b), old_nm_i, nm); + bam_aux_del(b, old_nm); + bam_aux_append(b, "NM", 'i', 4, (uint8_t*)&nm); + } + } + // update MD + if ((flag & UPDATE_MD) && !(c->flag & BAM_FUNMAP)) { + uint8_t *old_md = bam_aux_get(b, "MD"); + if (!old_md) bam_aux_append(b, "MD", 'Z', str->l + 1, (uint8_t*)str->s); + else { + int is_diff = 0; + if (strlen((char*)old_md+1) == str->l) { + for (i = 0; i < str->l; ++i) + if (toupper(old_md[i+1]) != toupper(str->s[i])) + break; + if (i < str->l) is_diff = 1; + } else is_diff = 1; + if (is_diff) { + fprintf(samtools_stderr, "[bam_fillmd1] different MD for read '%s': '%s' -> '%s'\n", bam_get_qname(b), old_md+1, str->s); + bam_aux_del(b, old_md); + bam_aux_append(b, "MD", 'Z', str->l + 1, (uint8_t*)str->s); + } + } + } + + // drop all tags but RG + if (flag&DROP_TAG) { + uint8_t *q = bam_aux_get(b, "RG"); + bam_aux_drop_other(b, q); + } + // reduce the resolution of base quality + if (flag&BIN_QUAL) { + uint8_t *qual = bam_get_qual(b); + for (i = 0; i < b->core.l_qseq; ++i) + if (qual[i] >= 3) qual[i] = qual[i]/10*10 + 7; + } + + free(str->s); free(str); +} + +void bam_fillmd1(bam1_t *b, char *ref, int flag) +{ + bam_fillmd1_core(b, ref, INT_MAX, flag, 0); +} + +int calmd_usage() { + fprintf(samtools_stderr, +"Usage: samtools calmd [-eubrAES] \n" +"Options:\n" +" -e change identical bases to '='\n" +" -u uncompressed BAM output (for piping)\n" +" -b compressed BAM output\n" +" -S ignored (input format is auto-detected)\n" +" -A modify the quality string\n" +" -r compute the BQ tag (without -A) or cap baseQ by BAQ (with -A)\n" +" -E extended BAQ for better sensitivity but lower specificity\n"); + + sam_global_opt_help(samtools_stderr, "-....@"); + return 1; +} + +int bam_fillmd(int argc, char *argv[]) +{ + int c, flt_flag, tid = -2, ret, len, is_bam_out, is_uncompressed, max_nm, is_realn, capQ, baq_flag; + htsThreadPool p = {NULL, 0}; + samFile *fp = NULL, *fpout = NULL; + bam_hdr_t *header = NULL; + faidx_t *fai = NULL; + char *ref = NULL, mode_w[8], *ref_file; + bam1_t *b = NULL; + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, 0, 0, 0,'@'), + { NULL, 0, NULL, 0 } + }; + + flt_flag = UPDATE_NM | UPDATE_MD; + is_bam_out = is_uncompressed = is_realn = max_nm = capQ = baq_flag = 0; + strcpy(mode_w, "w"); + while ((c = getopt_long(argc, argv, "EqreuNhbSC:n:Ad@:", lopts, NULL)) >= 0) { + switch (c) { + case 'r': is_realn = 1; break; + case 'e': flt_flag |= USE_EQUAL; break; + case 'd': flt_flag |= DROP_TAG; break; + case 'q': flt_flag |= BIN_QUAL; break; + case 'h': flt_flag |= HASH_QNM; break; + case 'N': flt_flag &= ~(UPDATE_MD|UPDATE_NM); break; + case 'b': is_bam_out = 1; break; + case 'u': is_uncompressed = is_bam_out = 1; break; + case 'S': break; + case 'n': max_nm = atoi(optarg); break; + case 'C': capQ = atoi(optarg); break; + case 'A': baq_flag |= 1; break; + case 'E': baq_flag |= 2; break; + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + fprintf(samtools_stderr, "[bam_fillmd] unrecognized option '-%c'\n\n", c); + /* else fall-through */ + case '?': return calmd_usage(); + } + } + if (is_bam_out) strcat(mode_w, "b"); + else strcat(mode_w, "h"); + if (is_uncompressed) strcat(mode_w, "0"); + if (optind + (ga.reference == NULL) >= argc) + return calmd_usage(); + fp = sam_open_format(argv[optind], "r", &ga.in); + if (fp == NULL) { + print_error_errno("calmd", "Failed to open input file '%s'", argv[optind]); + return 1; + } + + header = sam_hdr_read(fp); + if (header == NULL || header->n_targets == 0) { + fprintf(samtools_stderr, "[bam_fillmd] input SAM does not have header. Abort!\n"); + goto fail; + } + + fpout = sam_open_format(samtools_stdout_fn, mode_w, &ga.out); + if (fpout == NULL) { + print_error_errno("calmd", "Failed to open output"); + goto fail; + } + if (sam_hdr_write(fpout, header) < 0) { + print_error_errno("calmd", "Failed to write sam header"); + goto fail; + } + + if (ga.nthreads > 0) { + if (!(p.pool = hts_tpool_init(ga.nthreads))) { + fprintf(samtools_stderr, "Error creating thread pool\n"); + goto fail; + } + hts_set_opt(fp, HTS_OPT_THREAD_POOL, &p); + hts_set_opt(fpout, HTS_OPT_THREAD_POOL, &p); + } + + ref_file = argc > optind + 1 ? argv[optind+1] : ga.reference; + fai = fai_load(ref_file); + + if (!fai) { + print_error_errno("calmd", "Failed to open reference file '%s'", ref_file); + goto fail; + } + + b = bam_init1(); + if (!b) { + fprintf(samtools_stderr, "[bam_fillmd] Failed to allocate bam struct\n"); + goto fail; + } + while ((ret = sam_read1(fp, header, b)) >= 0) { + if (b->core.tid >= 0) { + if (tid != b->core.tid) { + free(ref); + ref = fai_fetch(fai, header->target_name[b->core.tid], &len); + tid = b->core.tid; + if (ref == 0) { // FIXME: Should this always be fatal? + fprintf(samtools_stderr, "[bam_fillmd] fail to find sequence '%s' in the reference.\n", + header->target_name[tid]); + if (is_realn || capQ > 10) goto fail; // Would otherwise crash + } + } + if (is_realn) sam_prob_realn(b, ref, len, baq_flag); + if (capQ > 10) { + int q = sam_cap_mapq(b, ref, len, capQ); + if (b->core.qual > q) b->core.qual = q; + } + if (ref) bam_fillmd1_core(b, ref, len, flt_flag, max_nm); + } + if (sam_write1(fpout, header, b) < 0) { + print_error_errno("calmd", "failed to write to output file"); + goto fail; + } + } + if (ret < -1) { + fprintf(samtools_stderr, "[bam_fillmd] Error reading input.\n"); + goto fail; + } + bam_destroy1(b); + bam_hdr_destroy(header); + + free(ref); + fai_destroy(fai); + sam_close(fp); + if (sam_close(fpout) < 0) { + fprintf(samtools_stderr, "[bam_fillmd] error when closing output file\n"); + return 1; + } + if (p.pool) hts_tpool_destroy(p.pool); + + return 0; + + fail: + free(ref); + if (b) bam_destroy1(b); + if (header) bam_hdr_destroy(header); + if (fai) fai_destroy(fai); + if (fp) sam_close(fp); + if (fpout) sam_close(fpout); + if (p.pool) hts_tpool_destroy(p.pool); + + return 1; +} diff --git a/samtools/bam_plbuf.c b/samtools/bam_plbuf.c new file mode 100644 index 0000000..12ea250 --- /dev/null +++ b/samtools/bam_plbuf.c @@ -0,0 +1,68 @@ +/* bam_plbuf.c -- plbuf routines (previously in bam_pileup.c). + + Copyright (C) 2008-2010, 2013 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include "bam_plbuf.h" + +/***************** + * callback APIs * + *****************/ + +void bam_plbuf_reset(bam_plbuf_t *buf) +{ + bam_plp_reset(buf->iter); +} + +bam_plbuf_t *bam_plbuf_init(bam_pileup_f func, void *data) +{ + bam_plbuf_t *buf; + buf = calloc(1, sizeof(bam_plbuf_t)); + buf->iter = bam_plp_init(0, 0); + buf->func = func; + buf->data = data; + return buf; +} + +void bam_plbuf_destroy(bam_plbuf_t *buf) +{ + bam_plp_destroy(buf->iter); + free(buf); +} + +int bam_plbuf_push(const bam1_t *b, bam_plbuf_t *buf) +{ + int ret, n_plp, tid, pos; + const bam_pileup1_t *plp; + ret = bam_plp_push(buf->iter, b); + if (ret < 0) return ret; + while ((plp = bam_plp_next(buf->iter, &tid, &pos, &n_plp)) != 0) + buf->func(tid, pos, n_plp, plp, buf->data); + return 0; +} diff --git a/samtools/bam_plbuf.c.pysam.c b/samtools/bam_plbuf.c.pysam.c new file mode 100644 index 0000000..a2e3d18 --- /dev/null +++ b/samtools/bam_plbuf.c.pysam.c @@ -0,0 +1,70 @@ +#include "samtools.pysam.h" + +/* bam_plbuf.c -- plbuf routines (previously in bam_pileup.c). + + Copyright (C) 2008-2010, 2013 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include "bam_plbuf.h" + +/***************** + * callback APIs * + *****************/ + +void bam_plbuf_reset(bam_plbuf_t *buf) +{ + bam_plp_reset(buf->iter); +} + +bam_plbuf_t *bam_plbuf_init(bam_pileup_f func, void *data) +{ + bam_plbuf_t *buf; + buf = calloc(1, sizeof(bam_plbuf_t)); + buf->iter = bam_plp_init(0, 0); + buf->func = func; + buf->data = data; + return buf; +} + +void bam_plbuf_destroy(bam_plbuf_t *buf) +{ + bam_plp_destroy(buf->iter); + free(buf); +} + +int bam_plbuf_push(const bam1_t *b, bam_plbuf_t *buf) +{ + int ret, n_plp, tid, pos; + const bam_pileup1_t *plp; + ret = bam_plp_push(buf->iter, b); + if (ret < 0) return ret; + while ((plp = bam_plp_next(buf->iter, &tid, &pos, &n_plp)) != 0) + buf->func(tid, pos, n_plp, plp, buf->data); + return 0; +} diff --git a/samtools/bam_plbuf.h b/samtools/bam_plbuf.h new file mode 100644 index 0000000..1534551 --- /dev/null +++ b/samtools/bam_plbuf.h @@ -0,0 +1,55 @@ +/* bam_plbuf.h -- plbuf routines (declarations copied from bam.h). + + Copyright (C) 2008, 2013 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#ifndef BAM_PLBUF_H +#define BAM_PLBUF_H + +#include + +#ifndef BAM_PILEUP_F_DEFINED +#define BAM_PILEUP_F_DEFINED +typedef int (*bam_pileup_f)(uint32_t tid, uint32_t pos, int n, const bam_pileup1_t *pl, void *data); +#endif //BAM_PILEUP_F_DEFINED + +typedef struct { + bam_plp_t iter; + bam_pileup_f func; + void *data; +} bam_plbuf_t; + +#ifdef __cplusplus +extern "C" { +#endif + void bam_plbuf_reset(bam_plbuf_t *buf); + + bam_plbuf_t *bam_plbuf_init(bam_pileup_f func, void *data); + + void bam_plbuf_destroy(bam_plbuf_t *buf); + + int bam_plbuf_push(const bam1_t *b, bam_plbuf_t *buf); +#ifdef __cplusplus +} +#endif + +#endif // BAM_PLBUF_H diff --git a/samtools/bam_plcmd.c b/samtools/bam_plcmd.c new file mode 100644 index 0000000..d451ffd --- /dev/null +++ b/samtools/bam_plcmd.c @@ -0,0 +1,1140 @@ +/* bam_plcmd.c -- mpileup subcommand. + + Copyright (C) 2008-2015 Genome Research Ltd. + Portions copyright (C) 2009-2012 Broad Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "sam_header.h" +#include "samtools.h" +#include "sam_opts.h" + +static inline int printw(int c, FILE *fp) +{ + char buf[16]; + int l, x; + if (c == 0) return fputc('0', fp); + for (l = 0, x = c < 0? -c : c; x > 0; x /= 10) buf[l++] = x%10 + '0'; + if (c < 0) buf[l++] = '-'; + buf[l] = 0; + for (x = 0; x < l/2; ++x) { + int y = buf[x]; buf[x] = buf[l-1-x]; buf[l-1-x] = y; + } + fputs(buf, fp); + return 0; +} + +static inline void pileup_seq(FILE *fp, const bam_pileup1_t *p, int pos, int ref_len, const char *ref) +{ + int j; + if (p->is_head) { + putc('^', fp); + putc(p->b->core.qual > 93? 126 : p->b->core.qual + 33, fp); + } + if (!p->is_del) { + int c = p->qpos < p->b->core.l_qseq + ? seq_nt16_str[bam_seqi(bam_get_seq(p->b), p->qpos)] + : 'N'; + if (ref) { + int rb = pos < ref_len? ref[pos] : 'N'; + if (c == '=' || seq_nt16_table[c] == seq_nt16_table[rb]) c = bam_is_rev(p->b)? ',' : '.'; + else c = bam_is_rev(p->b)? tolower(c) : toupper(c); + } else { + if (c == '=') c = bam_is_rev(p->b)? ',' : '.'; + else c = bam_is_rev(p->b)? tolower(c) : toupper(c); + } + putc(c, fp); + } else putc(p->is_refskip? (bam_is_rev(p->b)? '<' : '>') : '*', fp); + if (p->indel > 0) { + putc('+', fp); printw(p->indel, fp); + for (j = 1; j <= p->indel; ++j) { + int c = seq_nt16_str[bam_seqi(bam_get_seq(p->b), p->qpos + j)]; + putc(bam_is_rev(p->b)? tolower(c) : toupper(c), fp); + } + } else if (p->indel < 0) { + printw(p->indel, fp); + for (j = 1; j <= -p->indel; ++j) { + int c = (ref && (int)pos+j < ref_len)? ref[pos+j] : 'N'; + putc(bam_is_rev(p->b)? tolower(c) : toupper(c), fp); + } + } + if (p->is_tail) putc('$', fp); +} + +#include +#include "bam2bcf.h" +#include "sample.h" + +#define MPLP_BCF 1 +#define MPLP_VCF (1<<1) +#define MPLP_NO_COMP (1<<2) +#define MPLP_NO_ORPHAN (1<<3) +#define MPLP_REALN (1<<4) +#define MPLP_NO_INDEL (1<<5) +#define MPLP_REDO_BAQ (1<<6) +#define MPLP_ILLUMINA13 (1<<7) +#define MPLP_IGNORE_RG (1<<8) +#define MPLP_PRINT_POS (1<<9) +#define MPLP_PRINT_MAPQ (1<<10) +#define MPLP_PER_SAMPLE (1<<11) +#define MPLP_SMART_OVERLAPS (1<<12) +#define MPLP_PRINT_QNAME (1<<13) + +void *bed_read(const char *fn); +void bed_destroy(void *_h); +int bed_overlap(const void *_h, const char *chr, int beg, int end); + +typedef struct { + int min_mq, flag, min_baseQ, capQ_thres, max_depth, max_indel_depth, fmt_flag, all; + int rflag_require, rflag_filter; + int openQ, extQ, tandemQ, min_support; // for indels + double min_frac; // for indels + char *reg, *pl_list, *fai_fname, *output_fname; + faidx_t *fai; + void *bed, *rghash; + int argc; + char **argv; + sam_global_args ga; +} mplp_conf_t; + +typedef struct { + char *ref[2]; + int ref_id[2]; + int ref_len[2]; +} mplp_ref_t; + +#define MPLP_REF_INIT {{NULL,NULL},{-1,-1},{0,0}} + +typedef struct { + samFile *fp; + hts_itr_t *iter; + bam_hdr_t *h; + mplp_ref_t *ref; + const mplp_conf_t *conf; +} mplp_aux_t; + +typedef struct { + int n; + int *n_plp, *m_plp; + bam_pileup1_t **plp; +} mplp_pileup_t; + +static int mplp_get_ref(mplp_aux_t *ma, int tid, char **ref, int *ref_len) { + mplp_ref_t *r = ma->ref; + + //printf("get ref %d {%d/%p, %d/%p}\n", tid, r->ref_id[0], r->ref[0], r->ref_id[1], r->ref[1]); + + if (!r || !ma->conf->fai) { + *ref = NULL; + return 0; + } + + // Do we need to reference count this so multiple mplp_aux_t can + // track which references are in use? + // For now we just cache the last two. Sufficient? + if (tid == r->ref_id[0]) { + *ref = r->ref[0]; + *ref_len = r->ref_len[0]; + return 1; + } + if (tid == r->ref_id[1]) { + // Last, swap over + int tmp; + tmp = r->ref_id[0]; r->ref_id[0] = r->ref_id[1]; r->ref_id[1] = tmp; + tmp = r->ref_len[0]; r->ref_len[0] = r->ref_len[1]; r->ref_len[1] = tmp; + + char *tc; + tc = r->ref[0]; r->ref[0] = r->ref[1]; r->ref[1] = tc; + *ref = r->ref[0]; + *ref_len = r->ref_len[0]; + return 1; + } + + // New, so migrate to old and load new + free(r->ref[1]); + r->ref[1] = r->ref[0]; + r->ref_id[1] = r->ref_id[0]; + r->ref_len[1] = r->ref_len[0]; + + r->ref_id[0] = tid; + r->ref[0] = faidx_fetch_seq(ma->conf->fai, + ma->h->target_name[r->ref_id[0]], + 0, + INT_MAX, + &r->ref_len[0]); + + if (!r->ref[0]) { + r->ref[0] = NULL; + r->ref_id[0] = -1; + r->ref_len[0] = 0; + *ref = NULL; + return 0; + } + + *ref = r->ref[0]; + *ref_len = r->ref_len[0]; + return 1; +} + +static void +print_empty_pileup(FILE *fp, const mplp_conf_t *conf, const char *tname, + int pos, int n, const char *ref, int ref_len) +{ + int i; + fprintf(fp, "%s\t%d\t%c", tname, pos+1, (ref && pos < ref_len)? ref[pos] : 'N'); + for (i = 0; i < n; ++i) { + fputs("\t0\t*\t*", fp); + if (conf->flag & MPLP_PRINT_MAPQ) fputs("\t*", fp); + if (conf->flag & MPLP_PRINT_POS) fputs("\t*", fp); + if (conf->flag & MPLP_PRINT_QNAME) fputs("\t*", fp); + } + putc('\n', fp); +} + +static int mplp_func(void *data, bam1_t *b) +{ + char *ref; + mplp_aux_t *ma = (mplp_aux_t*)data; + int ret, skip = 0, ref_len; + do { + int has_ref; + ret = ma->iter? sam_itr_next(ma->fp, ma->iter, b) : sam_read1(ma->fp, ma->h, b); + if (ret < 0) break; + // The 'B' cigar operation is not part of the specification, considering as obsolete. + // bam_remove_B(b); + if (b->core.tid < 0 || (b->core.flag&BAM_FUNMAP)) { // exclude unmapped reads + skip = 1; + continue; + } + if (ma->conf->rflag_require && !(ma->conf->rflag_require&b->core.flag)) { skip = 1; continue; } + if (ma->conf->rflag_filter && ma->conf->rflag_filter&b->core.flag) { skip = 1; continue; } + if (ma->conf->bed && ma->conf->all == 0) { // test overlap + skip = !bed_overlap(ma->conf->bed, ma->h->target_name[b->core.tid], b->core.pos, bam_endpos(b)); + if (skip) continue; + } + if (ma->conf->rghash) { // exclude read groups + uint8_t *rg = bam_aux_get(b, "RG"); + skip = (rg && khash_str2int_get(ma->conf->rghash, (const char*)(rg+1), NULL)==0); + if (skip) continue; + } + if (ma->conf->flag & MPLP_ILLUMINA13) { + int i; + uint8_t *qual = bam_get_qual(b); + for (i = 0; i < b->core.l_qseq; ++i) + qual[i] = qual[i] > 31? qual[i] - 31 : 0; + } + + if (ma->conf->fai && b->core.tid >= 0) { + has_ref = mplp_get_ref(ma, b->core.tid, &ref, &ref_len); + if (has_ref && ref_len <= b->core.pos) { // exclude reads outside of the reference sequence + fprintf(stderr,"[%s] Skipping because %d is outside of %d [ref:%d]\n", + __func__, b->core.pos, ref_len, b->core.tid); + skip = 1; + continue; + } + } else { + has_ref = 0; + } + + skip = 0; + if (has_ref && (ma->conf->flag&MPLP_REALN)) sam_prob_realn(b, ref, ref_len, (ma->conf->flag & MPLP_REDO_BAQ)? 7 : 3); + if (has_ref && ma->conf->capQ_thres > 10) { + int q = sam_cap_mapq(b, ref, ref_len, ma->conf->capQ_thres); + if (q < 0) skip = 1; + else if (b->core.qual > q) b->core.qual = q; + } + if (b->core.qual < ma->conf->min_mq) skip = 1; + else if ((ma->conf->flag&MPLP_NO_ORPHAN) && (b->core.flag&BAM_FPAIRED) && !(b->core.flag&BAM_FPROPER_PAIR)) skip = 1; + } while (skip); + return ret; +} + +static void group_smpl(mplp_pileup_t *m, bam_sample_t *sm, kstring_t *buf, + int n, char *const*fn, int *n_plp, const bam_pileup1_t **plp, int ignore_rg) +{ + int i, j; + memset(m->n_plp, 0, m->n * sizeof(int)); + for (i = 0; i < n; ++i) { + for (j = 0; j < n_plp[i]; ++j) { + const bam_pileup1_t *p = plp[i] + j; + uint8_t *q; + int id = -1; + q = ignore_rg? NULL : bam_aux_get(p->b, "RG"); + if (q) id = bam_smpl_rg2smid(sm, fn[i], (char*)q+1, buf); + if (id < 0) id = bam_smpl_rg2smid(sm, fn[i], 0, buf); + if (id < 0 || id >= m->n) { + assert(q); // otherwise a bug + fprintf(stderr, "[%s] Read group %s used in file %s but absent from the header or an alignment missing read group.\n", __func__, (char*)q+1, fn[i]); + exit(EXIT_FAILURE); + } + if (m->n_plp[id] == m->m_plp[id]) { + m->m_plp[id] = m->m_plp[id]? m->m_plp[id]<<1 : 8; + m->plp[id] = realloc(m->plp[id], sizeof(bam_pileup1_t) * m->m_plp[id]); + } + m->plp[id][m->n_plp[id]++] = *p; + } + } +} + +/* + * Performs pileup + * @param conf configuration for this pileup + * @param n number of files specified in fn + * @param fn filenames + */ +static int mpileup(mplp_conf_t *conf, int n, char **fn) +{ + extern void *bcf_call_add_rg(void *rghash, const char *hdtext, const char *list); + extern void bcf_call_del_rghash(void *rghash); + mplp_aux_t **data; + int i, tid, pos, *n_plp, beg0 = 0, end0 = INT_MAX, tid0 = 0, ref_len, max_depth, max_indel_depth; + const bam_pileup1_t **plp; + mplp_ref_t mp_ref = MPLP_REF_INIT; + bam_mplp_t iter; + bam_hdr_t *h = NULL; /* header of first file in input list */ + char *ref; + void *rghash = NULL; + FILE *pileup_fp = NULL; + + bcf_callaux_t *bca = NULL; + bcf_callret1_t *bcr = NULL; + bcf_call_t bc; + htsFile *bcf_fp = NULL; + bcf_hdr_t *bcf_hdr = NULL; + + bam_sample_t *sm = NULL; + kstring_t buf; + mplp_pileup_t gplp; + + memset(&gplp, 0, sizeof(mplp_pileup_t)); + memset(&buf, 0, sizeof(kstring_t)); + memset(&bc, 0, sizeof(bcf_call_t)); + data = calloc(n, sizeof(mplp_aux_t*)); + plp = calloc(n, sizeof(bam_pileup1_t*)); + n_plp = calloc(n, sizeof(int)); + sm = bam_smpl_init(); + + if (n == 0) { + fprintf(stderr,"[%s] no input file/data given\n", __func__); + exit(EXIT_FAILURE); + } + + // read the header of each file in the list and initialize data + for (i = 0; i < n; ++i) { + bam_hdr_t *h_tmp; + data[i] = calloc(1, sizeof(mplp_aux_t)); + data[i]->fp = sam_open_format(fn[i], "rb", &conf->ga.in); + if ( !data[i]->fp ) + { + fprintf(stderr, "[%s] failed to open %s: %s\n", __func__, fn[i], strerror(errno)); + exit(EXIT_FAILURE); + } + if (hts_set_opt(data[i]->fp, CRAM_OPT_DECODE_MD, 0)) { + fprintf(stderr, "Failed to set CRAM_OPT_DECODE_MD value\n"); + exit(EXIT_FAILURE); + } + if (conf->fai_fname && hts_set_fai_filename(data[i]->fp, conf->fai_fname) != 0) { + fprintf(stderr, "[%s] failed to process %s: %s\n", + __func__, conf->fai_fname, strerror(errno)); + exit(EXIT_FAILURE); + } + data[i]->conf = conf; + data[i]->ref = &mp_ref; + h_tmp = sam_hdr_read(data[i]->fp); + if ( !h_tmp ) { + fprintf(stderr,"[%s] fail to read the header of %s\n", __func__, fn[i]); + exit(EXIT_FAILURE); + } + bam_smpl_add(sm, fn[i], (conf->flag&MPLP_IGNORE_RG)? 0 : h_tmp->text); + // Collect read group IDs with PL (platform) listed in pl_list (note: fragile, strstr search) + rghash = bcf_call_add_rg(rghash, h_tmp->text, conf->pl_list); + if (conf->reg) { + hts_idx_t *idx = sam_index_load(data[i]->fp, fn[i]); + if (idx == NULL) { + fprintf(stderr, "[%s] fail to load index for %s\n", __func__, fn[i]); + exit(EXIT_FAILURE); + } + if ( (data[i]->iter=sam_itr_querys(idx, h_tmp, conf->reg)) == 0) { + fprintf(stderr, "[E::%s] fail to parse region '%s' with %s\n", __func__, conf->reg, fn[i]); + exit(EXIT_FAILURE); + } + if (i == 0) beg0 = data[i]->iter->beg, end0 = data[i]->iter->end, tid0 = data[i]->iter->tid; + hts_idx_destroy(idx); + } + else + data[i]->iter = NULL; + + if (i == 0) h = data[i]->h = h_tmp; // save the header of the first file + else { + // FIXME: check consistency between h and h_tmp + bam_hdr_destroy(h_tmp); + + // we store only the first file's header; it's (alleged to be) + // compatible with the i-th file's target_name lookup needs + data[i]->h = h; + } + } + // allocate data storage proportionate to number of samples being studied sm->n + gplp.n = sm->n; + gplp.n_plp = calloc(sm->n, sizeof(int)); + gplp.m_plp = calloc(sm->n, sizeof(int)); + gplp.plp = calloc(sm->n, sizeof(bam_pileup1_t*)); + + fprintf(stderr, "[%s] %d samples in %d input files\n", __func__, sm->n, n); + // write the VCF header + if (conf->flag & MPLP_BCF) + { + const char *mode; + if ( conf->flag & MPLP_VCF ) + mode = (conf->flag&MPLP_NO_COMP)? "wu" : "wz"; // uncompressed VCF or compressed VCF + else + mode = (conf->flag&MPLP_NO_COMP)? "wub" : "wb"; // uncompressed BCF or compressed BCF + + bcf_fp = bcf_open(conf->output_fname? conf->output_fname : "-", mode); + if (bcf_fp == NULL) { + fprintf(stderr, "[%s] failed to write to %s: %s\n", __func__, conf->output_fname? conf->output_fname : "standard output", strerror(errno)); + exit(EXIT_FAILURE); + } + + // BCF header creation + bcf_hdr = bcf_hdr_init("w"); + kstring_t str = {0,0,NULL}; + + ksprintf(&str, "##samtoolsVersion=%s+htslib-%s\n",samtools_version(),hts_version()); + bcf_hdr_append(bcf_hdr, str.s); + + str.l = 0; + ksprintf(&str, "##samtoolsCommand=samtools mpileup"); + for (i=1; iargc; i++) ksprintf(&str, " %s", conf->argv[i]); + kputc('\n', &str); + bcf_hdr_append(bcf_hdr, str.s); + + if (conf->fai_fname) + { + str.l = 0; + ksprintf(&str, "##reference=file://%s\n", conf->fai_fname); + bcf_hdr_append(bcf_hdr, str.s); + } + + // Translate BAM @SQ tags to BCF ##contig tags + // todo: use/write new BAM header manipulation routines, fill also UR, M5 + for (i=0; in_targets; i++) + { + str.l = 0; + ksprintf(&str, "##contig=", h->target_name[i], h->target_len[i]); + bcf_hdr_append(bcf_hdr, str.s); + } + free(str.s); + bcf_hdr_append(bcf_hdr,"##ALT="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); +#if CDF_MWU_TESTS + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); +#endif + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_DP ) + bcf_hdr_append(bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_DV ) + bcf_hdr_append(bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_DPR ) + bcf_hdr_append(bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_INFO_DPR ) + bcf_hdr_append(bcf_hdr,"##INFO="); + if ( conf->fmt_flag&B2B_FMT_DP4 ) + bcf_hdr_append(bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_SP ) + bcf_hdr_append(bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_AD ) + bcf_hdr_append(bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_ADF ) + bcf_hdr_append(bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_ADR ) + bcf_hdr_append(bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_INFO_AD ) + bcf_hdr_append(bcf_hdr,"##INFO="); + if ( conf->fmt_flag&B2B_INFO_ADF ) + bcf_hdr_append(bcf_hdr,"##INFO="); + if ( conf->fmt_flag&B2B_INFO_ADR ) + bcf_hdr_append(bcf_hdr,"##INFO="); + + for (i=0; in; i++) + bcf_hdr_add_sample(bcf_hdr, sm->smpl[i]); + bcf_hdr_add_sample(bcf_hdr, NULL); + bcf_hdr_write(bcf_fp, bcf_hdr); + // End of BCF header creation + + // Initialise the calling algorithm + bca = bcf_call_init(-1., conf->min_baseQ); + bcr = calloc(sm->n, sizeof(bcf_callret1_t)); + bca->rghash = rghash; + bca->openQ = conf->openQ, bca->extQ = conf->extQ, bca->tandemQ = conf->tandemQ; + bca->min_frac = conf->min_frac; + bca->min_support = conf->min_support; + bca->per_sample_flt = conf->flag & MPLP_PER_SAMPLE; + + bc.bcf_hdr = bcf_hdr; + bc.n = sm->n; + bc.PL = malloc(15 * sm->n * sizeof(*bc.PL)); + if (conf->fmt_flag) + { + assert( sizeof(float)==sizeof(int32_t) ); + bc.DP4 = malloc(sm->n * sizeof(int32_t) * 4); + bc.fmt_arr = malloc(sm->n * sizeof(float)); // all fmt_flag fields + if ( conf->fmt_flag&(B2B_INFO_DPR|B2B_FMT_DPR|B2B_INFO_AD|B2B_INFO_ADF|B2B_INFO_ADR|B2B_FMT_AD|B2B_FMT_ADF|B2B_FMT_ADR) ) + { + // first B2B_MAX_ALLELES fields for total numbers, the rest per-sample + bc.ADR = (int32_t*) malloc((sm->n+1)*B2B_MAX_ALLELES*sizeof(int32_t)); + bc.ADF = (int32_t*) malloc((sm->n+1)*B2B_MAX_ALLELES*sizeof(int32_t)); + for (i=0; in; i++) + { + bcr[i].ADR = bc.ADR + (i+1)*B2B_MAX_ALLELES; + bcr[i].ADF = bc.ADF + (i+1)*B2B_MAX_ALLELES; + } + } + } + } + else { + pileup_fp = conf->output_fname? fopen(conf->output_fname, "w") : stdout; + + if (pileup_fp == NULL) { + fprintf(stderr, "[%s] failed to write to %s: %s\n", __func__, conf->output_fname, strerror(errno)); + exit(EXIT_FAILURE); + } + } + + // init pileup + iter = bam_mplp_init(n, mplp_func, (void**)data); + if ( conf->flag & MPLP_SMART_OVERLAPS ) bam_mplp_init_overlaps(iter); + max_depth = conf->max_depth; + if (max_depth * sm->n > 1<<20) + fprintf(stderr, "(%s) Max depth is above 1M. Potential memory hog!\n", __func__); + if (max_depth * sm->n < 8000) { + max_depth = 8000 / sm->n; + fprintf(stderr, "<%s> Set max per-file depth to %d\n", __func__, max_depth); + } + max_indel_depth = conf->max_indel_depth * sm->n; + bam_mplp_set_maxcnt(iter, max_depth); + bcf1_t *bcf_rec = bcf_init1(); + int ret; + int last_tid = -1, last_pos = -1; + + // begin pileup + while ( (ret=bam_mplp_auto(iter, &tid, &pos, n_plp, plp)) > 0) { + if (conf->reg && (pos < beg0 || pos >= end0)) continue; // out of the region requested + mplp_get_ref(data[0], tid, &ref, &ref_len); + //printf("tid=%d len=%d ref=%p/%s\n", tid, ref_len, ref, ref); + if (conf->flag & MPLP_BCF) { + int total_depth, _ref0, ref16; + if (conf->bed && tid >= 0 && !bed_overlap(conf->bed, h->target_name[tid], pos, pos+1)) continue; + for (i = total_depth = 0; i < n; ++i) total_depth += n_plp[i]; + group_smpl(&gplp, sm, &buf, n, fn, n_plp, plp, conf->flag & MPLP_IGNORE_RG); + _ref0 = (ref && pos < ref_len)? ref[pos] : 'N'; + ref16 = seq_nt16_table[_ref0]; + bcf_callaux_clean(bca, &bc); + for (i = 0; i < gplp.n; ++i) + bcf_call_glfgen(gplp.n_plp[i], gplp.plp[i], ref16, bca, bcr + i); + bc.tid = tid; bc.pos = pos; + bcf_call_combine(gplp.n, bcr, bca, ref16, &bc); + bcf_clear1(bcf_rec); + bcf_call2bcf(&bc, bcf_rec, bcr, conf->fmt_flag, 0, 0); + bcf_write1(bcf_fp, bcf_hdr, bcf_rec); + // call indels; todo: subsampling with total_depth>max_indel_depth instead of ignoring? + if (!(conf->flag&MPLP_NO_INDEL) && total_depth < max_indel_depth && bcf_call_gap_prep(gplp.n, gplp.n_plp, gplp.plp, pos, bca, ref, rghash) >= 0) + { + bcf_callaux_clean(bca, &bc); + for (i = 0; i < gplp.n; ++i) + bcf_call_glfgen(gplp.n_plp[i], gplp.plp[i], -1, bca, bcr + i); + if (bcf_call_combine(gplp.n, bcr, bca, -1, &bc) >= 0) { + bcf_clear1(bcf_rec); + bcf_call2bcf(&bc, bcf_rec, bcr, conf->fmt_flag, bca, ref); + bcf_write1(bcf_fp, bcf_hdr, bcf_rec); + } + } + } else { + if (conf->all) { + // Deal with missing portions of previous tids + while (tid > last_tid) { + if (last_tid >= 0 && !conf->reg) { + while (++last_pos < h->target_len[last_tid]) { + if (conf->bed && bed_overlap(conf->bed, h->target_name[last_tid], last_pos, last_pos + 1) == 0) + continue; + print_empty_pileup(pileup_fp, conf, h->target_name[last_tid], last_pos, n, ref, ref_len); + } + } + last_tid++; + last_pos = -1; + if (conf->all < 2) + break; + } + } + if (conf->all) { + // Deal with missing portion of current tid + while (++last_pos < pos) { + if (conf->reg && last_pos < beg0) continue; // out of range; skip + if (conf->bed && bed_overlap(conf->bed, h->target_name[tid], last_pos, last_pos + 1) == 0) + continue; + print_empty_pileup(pileup_fp, conf, h->target_name[tid], last_pos, n, ref, ref_len); + } + last_tid = tid; + last_pos = pos; + } + if (conf->bed && tid >= 0 && !bed_overlap(conf->bed, h->target_name[tid], pos, pos+1)) continue; + + fprintf(pileup_fp, "%s\t%d\t%c", h->target_name[tid], pos + 1, (ref && pos < ref_len)? ref[pos] : 'N'); + for (i = 0; i < n; ++i) { + int j, cnt; + for (j = cnt = 0; j < n_plp[i]; ++j) { + const bam_pileup1_t *p = plp[i] + j; + int c = p->qpos < p->b->core.l_qseq + ? bam_get_qual(p->b)[p->qpos] + : 0; + if (c >= conf->min_baseQ) ++cnt; + } + fprintf(pileup_fp, "\t%d\t", cnt); + if (n_plp[i] == 0) { + fputs("*\t*", pileup_fp); + if (conf->flag & MPLP_PRINT_MAPQ) fputs("\t*", pileup_fp); + if (conf->flag & MPLP_PRINT_POS) fputs("\t*", pileup_fp); + if (conf->flag & MPLP_PRINT_QNAME) fputs("\t*", pileup_fp); + } else { + int n = 0; + for (j = 0; j < n_plp[i]; ++j) { + const bam_pileup1_t *p = plp[i] + j; + int c = p->qpos < p->b->core.l_qseq + ? bam_get_qual(p->b)[p->qpos] + : 0; + if (c >= conf->min_baseQ) + n++, pileup_seq(pileup_fp, plp[i] + j, pos, ref_len, ref); + } + if (!n) putc('*', pileup_fp); + + n = 0; + putc('\t', pileup_fp); + for (j = 0; j < n_plp[i]; ++j) { + const bam_pileup1_t *p = plp[i] + j; + int c = p->qpos < p->b->core.l_qseq + ? bam_get_qual(p->b)[p->qpos] + : 0; + if (c >= conf->min_baseQ) { + c = c + 33 < 126? c + 33 : 126; + putc(c, pileup_fp); + n++; + } + } + if (!n) putc('*', pileup_fp); + + if (conf->flag & MPLP_PRINT_MAPQ) { + n = 0; + putc('\t', pileup_fp); + for (j = 0; j < n_plp[i]; ++j) { + const bam_pileup1_t *p = plp[i] + j; + int c = bam_get_qual(p->b)[p->qpos]; + if ( c < conf->min_baseQ ) continue; + c = plp[i][j].b->core.qual + 33; + if (c > 126) c = 126; + putc(c, pileup_fp); + n++; + } + if (!n) putc('*', pileup_fp); + } + + if (conf->flag & MPLP_PRINT_POS) { + n = 0; + putc('\t', pileup_fp); + for (j = 0; j < n_plp[i]; ++j) { + const bam_pileup1_t *p = plp[i] + j; + int c = bam_get_qual(p->b)[p->qpos]; + if ( c < conf->min_baseQ ) continue; + + if (n > 0) putc(',', pileup_fp); + fprintf(pileup_fp, "%d", plp[i][j].qpos + 1); // FIXME: printf() is very slow... + n++; + } + if (!n) putc('*', pileup_fp); + } + + if (conf->flag & MPLP_PRINT_QNAME) { + n = 0; + putc('\t', pileup_fp); + for (j = 0; j < n_plp[i]; ++j) { + const bam_pileup1_t *p = &plp[i][j]; + int c = bam_get_qual(p->b)[p->qpos]; + if ( c < conf->min_baseQ ) continue; + + if (n > 0) putc(',', pileup_fp); + fputs(bam_get_qname(p->b), pileup_fp); + n++; + } + if (!n) putc('*', pileup_fp); + } + } + } + putc('\n', pileup_fp); + } + } + + if (conf->all && !(conf->flag & MPLP_BCF)) { + // Handle terminating region + if (last_tid < 0 && conf->reg && conf->all > 1) { + last_tid = tid0; + last_pos = beg0-1; + mplp_get_ref(data[0], tid0, &ref, &ref_len); + } + while (last_tid >= 0 && last_tid < h->n_targets) { + while (++last_pos < h->target_len[last_tid]) { + if (last_pos >= end0) break; + if (conf->bed && bed_overlap(conf->bed, h->target_name[last_tid], last_pos, last_pos + 1) == 0) + continue; + print_empty_pileup(pileup_fp, conf, h->target_name[last_tid], last_pos, n, ref, ref_len); + } + last_tid++; + last_pos = -1; + if (conf->all < 2 || conf->reg) + break; + } + } + + // clean up + free(bc.tmp.s); + bcf_destroy1(bcf_rec); + if (bcf_fp) + { + hts_close(bcf_fp); + bcf_hdr_destroy(bcf_hdr); + bcf_call_destroy(bca); + free(bc.PL); + free(bc.DP4); + free(bc.ADR); + free(bc.ADF); + free(bc.fmt_arr); + free(bcr); + } + if (pileup_fp && conf->output_fname) fclose(pileup_fp); + bam_smpl_destroy(sm); free(buf.s); + for (i = 0; i < gplp.n; ++i) free(gplp.plp[i]); + free(gplp.plp); free(gplp.n_plp); free(gplp.m_plp); + bcf_call_del_rghash(rghash); + bam_mplp_destroy(iter); + bam_hdr_destroy(h); + for (i = 0; i < n; ++i) { + sam_close(data[i]->fp); + if (data[i]->iter) hts_itr_destroy(data[i]->iter); + free(data[i]); + } + free(data); free(plp); free(n_plp); + free(mp_ref.ref[0]); + free(mp_ref.ref[1]); + return ret; +} + +static int is_url(const char *s) +{ + static const char uri_scheme_chars[] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+.-"; + return s[strspn(s, uri_scheme_chars)] == ':'; +} + +#define MAX_PATH_LEN 1024 +int read_file_list(const char *file_list,int *n,char **argv[]) +{ + char buf[MAX_PATH_LEN]; + int len, nfiles = 0; + char **files = NULL; + struct stat sb; + + *n = 0; + *argv = NULL; + + FILE *fh = fopen(file_list,"r"); + if ( !fh ) + { + fprintf(stderr,"%s: %s\n", file_list,strerror(errno)); + return 1; + } + + files = calloc(nfiles,sizeof(char*)); + nfiles = 0; + while ( fgets(buf,MAX_PATH_LEN,fh) ) + { + // allow empty lines and trailing spaces + len = strlen(buf); + while ( len>0 && isspace(buf[len-1]) ) len--; + if ( !len ) continue; + + // check sanity of the file list + buf[len] = 0; + if (! (is_url(buf) || stat(buf, &sb) == 0)) + { + // no such file, check if it is safe to print its name + int i, safe_to_print = 1; + for (i=0; irflag_require); + char *tmp_filter = bam_flag2str(mplp->rflag_filter); + + // Display usage information, formatted for the standard 80 columns. + // (The unusual string formatting here aids the readability of this + // source code in 80 columns, to the extent that's possible.) + + fprintf(fp, +"\n" +"Usage: samtools mpileup [options] in1.bam [in2.bam [...]]\n" +"\n" +"Input options:\n" +" -6, --illumina1.3+ quality is in the Illumina-1.3+ encoding\n" +" -A, --count-orphans do not discard anomalous read pairs\n" +" -b, --bam-list FILE list of input BAM filenames, one per line\n" +" -B, --no-BAQ disable BAQ (per-Base Alignment Quality)\n" +" -C, --adjust-MQ INT adjust mapping quality; recommended:50, disable:0 [0]\n" +" -d, --max-depth INT max per-file depth; avoids excessive memory usage [%d]\n", mplp->max_depth); + fprintf(fp, +" -E, --redo-BAQ recalculate BAQ on the fly, ignore existing BQs\n" +" -f, --fasta-ref FILE faidx indexed reference sequence file\n" +" -G, --exclude-RG FILE exclude read groups listed in FILE\n" +" -l, --positions FILE skip unlisted positions (chr pos) or regions (BED)\n" +" -q, --min-MQ INT skip alignments with mapQ smaller than INT [%d]\n", mplp->min_mq); + fprintf(fp, +" -Q, --min-BQ INT skip bases with baseQ/BAQ smaller than INT [%d]\n", mplp->min_baseQ); + fprintf(fp, +" -r, --region REG region in which pileup is generated\n" +" -R, --ignore-RG ignore RG tags (one BAM = one sample)\n" +" --rf, --incl-flags STR|INT required flags: skip reads with mask bits unset [%s]\n", tmp_require); + fprintf(fp, +" --ff, --excl-flags STR|INT filter flags: skip reads with mask bits set\n" +" [%s]\n", tmp_filter); + fprintf(fp, +" -x, --ignore-overlaps disable read-pair overlap detection\n" +"\n" +"Output options:\n" +" -o, --output FILE write output to FILE [standard output]\n" +" -g, --BCF generate genotype likelihoods in BCF format\n" +" -v, --VCF generate genotype likelihoods in VCF format\n" +"\n" +"Output options for mpileup format (without -g/-v):\n" +" -O, --output-BP output base positions on reads\n" +" -s, --output-MQ output mapping quality\n" +" --output-QNAME output read names\n" +" -a output all positions (including zero depth)\n" +" -a -a (or -aa) output absolutely all positions, including unused ref. sequences\n" +"\n" +"Output options for genotype likelihoods (when -g/-v is used):\n" +" -t, --output-tags LIST optional tags to output:\n" +" DP,AD,ADF,ADR,SP,INFO/AD,INFO/ADF,INFO/ADR []\n" +" -u, --uncompressed generate uncompressed VCF/BCF output\n" +"\n" +"SNP/INDEL genotype likelihoods options (effective with -g/-v):\n" +" -e, --ext-prob INT Phred-scaled gap extension seq error probability [%d]\n", mplp->extQ); + fprintf(fp, +" -F, --gap-frac FLOAT minimum fraction of gapped reads [%g]\n", mplp->min_frac); + fprintf(fp, +" -h, --tandem-qual INT coefficient for homopolymer errors [%d]\n", mplp->tandemQ); + fprintf(fp, +" -I, --skip-indels do not perform indel calling\n" +" -L, --max-idepth INT maximum per-file depth for INDEL calling [%d]\n", mplp->max_indel_depth); + fprintf(fp, +" -m, --min-ireads INT minimum number gapped reads for indel candidates [%d]\n", mplp->min_support); + fprintf(fp, +" -o, --open-prob INT Phred-scaled gap open seq error probability [%d]\n", mplp->openQ); + fprintf(fp, +" -p, --per-sample-mF apply -m and -F per-sample for increased sensitivity\n" +" -P, --platforms STR comma separated list of platforms for indels [all]\n"); + sam_global_opt_help(fp, "-.--.-"); + fprintf(fp, +"\n" +"Notes: Assuming diploid individuals.\n"); + + free(tmp_require); + free(tmp_filter); +} + +int bam_mpileup(int argc, char *argv[]) +{ + int c; + const char *file_list = NULL; + char **fn = NULL; + int nfiles = 0, use_orphan = 0; + mplp_conf_t mplp; + memset(&mplp, 0, sizeof(mplp_conf_t)); + mplp.min_baseQ = 13; + mplp.capQ_thres = 0; + mplp.max_depth = 250; mplp.max_indel_depth = 250; + mplp.openQ = 40; mplp.extQ = 20; mplp.tandemQ = 100; + mplp.min_frac = 0.002; mplp.min_support = 1; + mplp.flag = MPLP_NO_ORPHAN | MPLP_REALN | MPLP_SMART_OVERLAPS; + mplp.argc = argc; mplp.argv = argv; + mplp.rflag_filter = BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP; + mplp.output_fname = NULL; + mplp.all = 0; + sam_global_args_init(&mplp.ga); + + static const struct option lopts[] = + { + SAM_OPT_GLOBAL_OPTIONS('-', 0, '-', '-', 0, '-'), + {"rf", required_argument, NULL, 1}, // require flag + {"ff", required_argument, NULL, 2}, // filter flag + {"incl-flags", required_argument, NULL, 1}, + {"excl-flags", required_argument, NULL, 2}, + {"output", required_argument, NULL, 3}, + {"open-prob", required_argument, NULL, 4}, + {"output-QNAME", no_argument, NULL, 5}, + {"output-qname", no_argument, NULL, 5}, + {"illumina1.3+", no_argument, NULL, '6'}, + {"count-orphans", no_argument, NULL, 'A'}, + {"bam-list", required_argument, NULL, 'b'}, + {"no-BAQ", no_argument, NULL, 'B'}, + {"no-baq", no_argument, NULL, 'B'}, + {"adjust-MQ", required_argument, NULL, 'C'}, + {"adjust-mq", required_argument, NULL, 'C'}, + {"max-depth", required_argument, NULL, 'd'}, + {"redo-BAQ", no_argument, NULL, 'E'}, + {"redo-baq", no_argument, NULL, 'E'}, + {"fasta-ref", required_argument, NULL, 'f'}, + {"exclude-RG", required_argument, NULL, 'G'}, + {"exclude-rg", required_argument, NULL, 'G'}, + {"positions", required_argument, NULL, 'l'}, + {"region", required_argument, NULL, 'r'}, + {"ignore-RG", no_argument, NULL, 'R'}, + {"ignore-rg", no_argument, NULL, 'R'}, + {"min-MQ", required_argument, NULL, 'q'}, + {"min-mq", required_argument, NULL, 'q'}, + {"min-BQ", required_argument, NULL, 'Q'}, + {"min-bq", required_argument, NULL, 'Q'}, + {"ignore-overlaps", no_argument, NULL, 'x'}, + {"BCF", no_argument, NULL, 'g'}, + {"bcf", no_argument, NULL, 'g'}, + {"VCF", no_argument, NULL, 'v'}, + {"vcf", no_argument, NULL, 'v'}, + {"output-BP", no_argument, NULL, 'O'}, + {"output-bp", no_argument, NULL, 'O'}, + {"output-MQ", no_argument, NULL, 's'}, + {"output-mq", no_argument, NULL, 's'}, + {"output-tags", required_argument, NULL, 't'}, + {"uncompressed", no_argument, NULL, 'u'}, + {"ext-prob", required_argument, NULL, 'e'}, + {"gap-frac", required_argument, NULL, 'F'}, + {"tandem-qual", required_argument, NULL, 'h'}, + {"skip-indels", no_argument, NULL, 'I'}, + {"max-idepth", required_argument, NULL, 'L'}, + {"min-ireads ", required_argument, NULL, 'm'}, + {"per-sample-mF", no_argument, NULL, 'p'}, + {"per-sample-mf", no_argument, NULL, 'p'}, + {"platforms", required_argument, NULL, 'P'}, + {NULL, 0, NULL, 0} + }; + while ((c = getopt_long(argc, argv, "Agf:r:l:q:Q:uRC:BDSd:L:b:P:po:e:h:Im:F:EG:6OsVvxt:a",lopts,NULL)) >= 0) { + switch (c) { + case 'x': mplp.flag &= ~MPLP_SMART_OVERLAPS; break; + case 1 : + mplp.rflag_require = bam_str2flag(optarg); + if ( mplp.rflag_require<0 ) { fprintf(stderr,"Could not parse --rf %s\n", optarg); return 1; } + break; + case 2 : + mplp.rflag_filter = bam_str2flag(optarg); + if ( mplp.rflag_filter<0 ) { fprintf(stderr,"Could not parse --ff %s\n", optarg); return 1; } + break; + case 3 : mplp.output_fname = optarg; break; + case 4 : mplp.openQ = atoi(optarg); break; + case 5 : mplp.flag |= MPLP_PRINT_QNAME; break; + case 'f': + mplp.fai = fai_load(optarg); + if (mplp.fai == NULL) return 1; + mplp.fai_fname = optarg; + break; + case 'd': mplp.max_depth = atoi(optarg); break; + case 'r': mplp.reg = strdup(optarg); break; + case 'l': + // In the original version the whole BAM was streamed which is inefficient + // with few BED intervals and big BAMs. Todo: devise a heuristic to determine + // best strategy, that is streaming or jumping. + mplp.bed = bed_read(optarg); + if (!mplp.bed) { print_error_errno("mpileup", "Could not read file \"%s\"", optarg); return 1; } + break; + case 'P': mplp.pl_list = strdup(optarg); break; + case 'p': mplp.flag |= MPLP_PER_SAMPLE; break; + case 'g': mplp.flag |= MPLP_BCF; break; + case 'v': mplp.flag |= MPLP_BCF | MPLP_VCF; break; + case 'u': mplp.flag |= MPLP_NO_COMP | MPLP_BCF; break; + case 'B': mplp.flag &= ~MPLP_REALN; break; + case 'D': mplp.fmt_flag |= B2B_FMT_DP; fprintf(stderr, "[warning] samtools mpileup option `-D` is functional, but deprecated. Please switch to `-t DP` in future.\n"); break; + case 'S': mplp.fmt_flag |= B2B_FMT_SP; fprintf(stderr, "[warning] samtools mpileup option `-S` is functional, but deprecated. Please switch to `-t SP` in future.\n"); break; + case 'V': mplp.fmt_flag |= B2B_FMT_DV; fprintf(stderr, "[warning] samtools mpileup option `-V` is functional, but deprecated. Please switch to `-t DV` in future.\n"); break; + case 'I': mplp.flag |= MPLP_NO_INDEL; break; + case 'E': mplp.flag |= MPLP_REDO_BAQ; break; + case '6': mplp.flag |= MPLP_ILLUMINA13; break; + case 'R': mplp.flag |= MPLP_IGNORE_RG; break; + case 's': mplp.flag |= MPLP_PRINT_MAPQ; break; + case 'O': mplp.flag |= MPLP_PRINT_POS; break; + case 'C': mplp.capQ_thres = atoi(optarg); break; + case 'q': mplp.min_mq = atoi(optarg); break; + case 'Q': mplp.min_baseQ = atoi(optarg); break; + case 'b': file_list = optarg; break; + case 'o': { + char *end; + long value = strtol(optarg, &end, 10); + // Distinguish between -o INT and -o FILE (a bit of a hack!) + if (*end == '\0') mplp.openQ = value; + else mplp.output_fname = optarg; + } + break; + case 'e': mplp.extQ = atoi(optarg); break; + case 'h': mplp.tandemQ = atoi(optarg); break; + case 'A': use_orphan = 1; break; + case 'F': mplp.min_frac = atof(optarg); break; + case 'm': mplp.min_support = atoi(optarg); break; + case 'L': mplp.max_indel_depth = atoi(optarg); break; + case 'G': { + FILE *fp_rg; + char buf[1024]; + mplp.rghash = khash_str2int_init(); + if ((fp_rg = fopen(optarg, "r")) == NULL) + fprintf(stderr, "(%s) Fail to open file %s. Continue anyway.\n", __func__, optarg); + while (!feof(fp_rg) && fscanf(fp_rg, "%s", buf) > 0) // this is not a good style, but forgive me... + khash_str2int_inc(mplp.rghash, strdup(buf)); + fclose(fp_rg); + } + break; + case 't': mplp.fmt_flag |= parse_format_flag(optarg); break; + case 'a': mplp.all++; break; + default: + if (parse_sam_global_opt(c, optarg, lopts, &mplp.ga) == 0) break; + /* else fall-through */ + case '?': + print_usage(stderr, &mplp); + return 1; + } + } + if (!mplp.fai && mplp.ga.reference) { + mplp.fai_fname = mplp.ga.reference; + mplp.fai = fai_load(mplp.fai_fname); + if (mplp.fai == NULL) return 1; + } + + if ( !(mplp.flag&MPLP_REALN) && mplp.flag&MPLP_REDO_BAQ ) + { + fprintf(stderr,"Error: The -B option cannot be combined with -E\n"); + return 1; + } + if (use_orphan) mplp.flag &= ~MPLP_NO_ORPHAN; + if (argc == 1) + { + print_usage(stderr, &mplp); + return 1; + } + int ret; + if (file_list) { + if ( read_file_list(file_list,&nfiles,&fn) ) return 1; + ret = mpileup(&mplp,nfiles,fn); + for (c=0; c + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "sam_header.h" +#include "samtools.h" +#include "sam_opts.h" + +static inline int printw(int c, FILE *fp) +{ + char buf[16]; + int l, x; + if (c == 0) return fputc('0', fp); + for (l = 0, x = c < 0? -c : c; x > 0; x /= 10) buf[l++] = x%10 + '0'; + if (c < 0) buf[l++] = '-'; + buf[l] = 0; + for (x = 0; x < l/2; ++x) { + int y = buf[x]; buf[x] = buf[l-1-x]; buf[l-1-x] = y; + } + fputs(buf, fp); + return 0; +} + +static inline void pileup_seq(FILE *fp, const bam_pileup1_t *p, int pos, int ref_len, const char *ref) +{ + int j; + if (p->is_head) { + putc('^', fp); + putc(p->b->core.qual > 93? 126 : p->b->core.qual + 33, fp); + } + if (!p->is_del) { + int c = p->qpos < p->b->core.l_qseq + ? seq_nt16_str[bam_seqi(bam_get_seq(p->b), p->qpos)] + : 'N'; + if (ref) { + int rb = pos < ref_len? ref[pos] : 'N'; + if (c == '=' || seq_nt16_table[c] == seq_nt16_table[rb]) c = bam_is_rev(p->b)? ',' : '.'; + else c = bam_is_rev(p->b)? tolower(c) : toupper(c); + } else { + if (c == '=') c = bam_is_rev(p->b)? ',' : '.'; + else c = bam_is_rev(p->b)? tolower(c) : toupper(c); + } + putc(c, fp); + } else putc(p->is_refskip? (bam_is_rev(p->b)? '<' : '>') : '*', fp); + if (p->indel > 0) { + putc('+', fp); printw(p->indel, fp); + for (j = 1; j <= p->indel; ++j) { + int c = seq_nt16_str[bam_seqi(bam_get_seq(p->b), p->qpos + j)]; + putc(bam_is_rev(p->b)? tolower(c) : toupper(c), fp); + } + } else if (p->indel < 0) { + printw(p->indel, fp); + for (j = 1; j <= -p->indel; ++j) { + int c = (ref && (int)pos+j < ref_len)? ref[pos+j] : 'N'; + putc(bam_is_rev(p->b)? tolower(c) : toupper(c), fp); + } + } + if (p->is_tail) putc('$', fp); +} + +#include +#include "bam2bcf.h" +#include "sample.h" + +#define MPLP_BCF 1 +#define MPLP_VCF (1<<1) +#define MPLP_NO_COMP (1<<2) +#define MPLP_NO_ORPHAN (1<<3) +#define MPLP_REALN (1<<4) +#define MPLP_NO_INDEL (1<<5) +#define MPLP_REDO_BAQ (1<<6) +#define MPLP_ILLUMINA13 (1<<7) +#define MPLP_IGNORE_RG (1<<8) +#define MPLP_PRINT_POS (1<<9) +#define MPLP_PRINT_MAPQ (1<<10) +#define MPLP_PER_SAMPLE (1<<11) +#define MPLP_SMART_OVERLAPS (1<<12) +#define MPLP_PRINT_QNAME (1<<13) + +void *bed_read(const char *fn); +void bed_destroy(void *_h); +int bed_overlap(const void *_h, const char *chr, int beg, int end); + +typedef struct { + int min_mq, flag, min_baseQ, capQ_thres, max_depth, max_indel_depth, fmt_flag, all; + int rflag_require, rflag_filter; + int openQ, extQ, tandemQ, min_support; // for indels + double min_frac; // for indels + char *reg, *pl_list, *fai_fname, *output_fname; + faidx_t *fai; + void *bed, *rghash; + int argc; + char **argv; + sam_global_args ga; +} mplp_conf_t; + +typedef struct { + char *ref[2]; + int ref_id[2]; + int ref_len[2]; +} mplp_ref_t; + +#define MPLP_REF_INIT {{NULL,NULL},{-1,-1},{0,0}} + +typedef struct { + samFile *fp; + hts_itr_t *iter; + bam_hdr_t *h; + mplp_ref_t *ref; + const mplp_conf_t *conf; +} mplp_aux_t; + +typedef struct { + int n; + int *n_plp, *m_plp; + bam_pileup1_t **plp; +} mplp_pileup_t; + +static int mplp_get_ref(mplp_aux_t *ma, int tid, char **ref, int *ref_len) { + mplp_ref_t *r = ma->ref; + + //printf("get ref %d {%d/%p, %d/%p}\n", tid, r->ref_id[0], r->ref[0], r->ref_id[1], r->ref[1]); + + if (!r || !ma->conf->fai) { + *ref = NULL; + return 0; + } + + // Do we need to reference count this so multiple mplp_aux_t can + // track which references are in use? + // For now we just cache the last two. Sufficient? + if (tid == r->ref_id[0]) { + *ref = r->ref[0]; + *ref_len = r->ref_len[0]; + return 1; + } + if (tid == r->ref_id[1]) { + // Last, swap over + int tmp; + tmp = r->ref_id[0]; r->ref_id[0] = r->ref_id[1]; r->ref_id[1] = tmp; + tmp = r->ref_len[0]; r->ref_len[0] = r->ref_len[1]; r->ref_len[1] = tmp; + + char *tc; + tc = r->ref[0]; r->ref[0] = r->ref[1]; r->ref[1] = tc; + *ref = r->ref[0]; + *ref_len = r->ref_len[0]; + return 1; + } + + // New, so migrate to old and load new + free(r->ref[1]); + r->ref[1] = r->ref[0]; + r->ref_id[1] = r->ref_id[0]; + r->ref_len[1] = r->ref_len[0]; + + r->ref_id[0] = tid; + r->ref[0] = faidx_fetch_seq(ma->conf->fai, + ma->h->target_name[r->ref_id[0]], + 0, + INT_MAX, + &r->ref_len[0]); + + if (!r->ref[0]) { + r->ref[0] = NULL; + r->ref_id[0] = -1; + r->ref_len[0] = 0; + *ref = NULL; + return 0; + } + + *ref = r->ref[0]; + *ref_len = r->ref_len[0]; + return 1; +} + +static void +print_empty_pileup(FILE *fp, const mplp_conf_t *conf, const char *tname, + int pos, int n, const char *ref, int ref_len) +{ + int i; + fprintf(fp, "%s\t%d\t%c", tname, pos+1, (ref && pos < ref_len)? ref[pos] : 'N'); + for (i = 0; i < n; ++i) { + fputs("\t0\t*\t*", fp); + if (conf->flag & MPLP_PRINT_MAPQ) fputs("\t*", fp); + if (conf->flag & MPLP_PRINT_POS) fputs("\t*", fp); + if (conf->flag & MPLP_PRINT_QNAME) fputs("\t*", fp); + } + putc('\n', fp); +} + +static int mplp_func(void *data, bam1_t *b) +{ + char *ref; + mplp_aux_t *ma = (mplp_aux_t*)data; + int ret, skip = 0, ref_len; + do { + int has_ref; + ret = ma->iter? sam_itr_next(ma->fp, ma->iter, b) : sam_read1(ma->fp, ma->h, b); + if (ret < 0) break; + // The 'B' cigar operation is not part of the specification, considering as obsolete. + // bam_remove_B(b); + if (b->core.tid < 0 || (b->core.flag&BAM_FUNMAP)) { // exclude unmapped reads + skip = 1; + continue; + } + if (ma->conf->rflag_require && !(ma->conf->rflag_require&b->core.flag)) { skip = 1; continue; } + if (ma->conf->rflag_filter && ma->conf->rflag_filter&b->core.flag) { skip = 1; continue; } + if (ma->conf->bed && ma->conf->all == 0) { // test overlap + skip = !bed_overlap(ma->conf->bed, ma->h->target_name[b->core.tid], b->core.pos, bam_endpos(b)); + if (skip) continue; + } + if (ma->conf->rghash) { // exclude read groups + uint8_t *rg = bam_aux_get(b, "RG"); + skip = (rg && khash_str2int_get(ma->conf->rghash, (const char*)(rg+1), NULL)==0); + if (skip) continue; + } + if (ma->conf->flag & MPLP_ILLUMINA13) { + int i; + uint8_t *qual = bam_get_qual(b); + for (i = 0; i < b->core.l_qseq; ++i) + qual[i] = qual[i] > 31? qual[i] - 31 : 0; + } + + if (ma->conf->fai && b->core.tid >= 0) { + has_ref = mplp_get_ref(ma, b->core.tid, &ref, &ref_len); + if (has_ref && ref_len <= b->core.pos) { // exclude reads outside of the reference sequence + fprintf(samtools_stderr,"[%s] Skipping because %d is outside of %d [ref:%d]\n", + __func__, b->core.pos, ref_len, b->core.tid); + skip = 1; + continue; + } + } else { + has_ref = 0; + } + + skip = 0; + if (has_ref && (ma->conf->flag&MPLP_REALN)) sam_prob_realn(b, ref, ref_len, (ma->conf->flag & MPLP_REDO_BAQ)? 7 : 3); + if (has_ref && ma->conf->capQ_thres > 10) { + int q = sam_cap_mapq(b, ref, ref_len, ma->conf->capQ_thres); + if (q < 0) skip = 1; + else if (b->core.qual > q) b->core.qual = q; + } + if (b->core.qual < ma->conf->min_mq) skip = 1; + else if ((ma->conf->flag&MPLP_NO_ORPHAN) && (b->core.flag&BAM_FPAIRED) && !(b->core.flag&BAM_FPROPER_PAIR)) skip = 1; + } while (skip); + return ret; +} + +static void group_smpl(mplp_pileup_t *m, bam_sample_t *sm, kstring_t *buf, + int n, char *const*fn, int *n_plp, const bam_pileup1_t **plp, int ignore_rg) +{ + int i, j; + memset(m->n_plp, 0, m->n * sizeof(int)); + for (i = 0; i < n; ++i) { + for (j = 0; j < n_plp[i]; ++j) { + const bam_pileup1_t *p = plp[i] + j; + uint8_t *q; + int id = -1; + q = ignore_rg? NULL : bam_aux_get(p->b, "RG"); + if (q) id = bam_smpl_rg2smid(sm, fn[i], (char*)q+1, buf); + if (id < 0) id = bam_smpl_rg2smid(sm, fn[i], 0, buf); + if (id < 0 || id >= m->n) { + assert(q); // otherwise a bug + fprintf(samtools_stderr, "[%s] Read group %s used in file %s but absent from the header or an alignment missing read group.\n", __func__, (char*)q+1, fn[i]); + exit(EXIT_FAILURE); + } + if (m->n_plp[id] == m->m_plp[id]) { + m->m_plp[id] = m->m_plp[id]? m->m_plp[id]<<1 : 8; + m->plp[id] = realloc(m->plp[id], sizeof(bam_pileup1_t) * m->m_plp[id]); + } + m->plp[id][m->n_plp[id]++] = *p; + } + } +} + +/* + * Performs pileup + * @param conf configuration for this pileup + * @param n number of files specified in fn + * @param fn filenames + */ +static int mpileup(mplp_conf_t *conf, int n, char **fn) +{ + extern void *bcf_call_add_rg(void *rghash, const char *hdtext, const char *list); + extern void bcf_call_del_rghash(void *rghash); + mplp_aux_t **data; + int i, tid, pos, *n_plp, beg0 = 0, end0 = INT_MAX, tid0 = 0, ref_len, max_depth, max_indel_depth; + const bam_pileup1_t **plp; + mplp_ref_t mp_ref = MPLP_REF_INIT; + bam_mplp_t iter; + bam_hdr_t *h = NULL; /* header of first file in input list */ + char *ref; + void *rghash = NULL; + FILE *pileup_fp = NULL; + + bcf_callaux_t *bca = NULL; + bcf_callret1_t *bcr = NULL; + bcf_call_t bc; + htsFile *bcf_fp = NULL; + bcf_hdr_t *bcf_hdr = NULL; + + bam_sample_t *sm = NULL; + kstring_t buf; + mplp_pileup_t gplp; + + memset(&gplp, 0, sizeof(mplp_pileup_t)); + memset(&buf, 0, sizeof(kstring_t)); + memset(&bc, 0, sizeof(bcf_call_t)); + data = calloc(n, sizeof(mplp_aux_t*)); + plp = calloc(n, sizeof(bam_pileup1_t*)); + n_plp = calloc(n, sizeof(int)); + sm = bam_smpl_init(); + + if (n == 0) { + fprintf(samtools_stderr,"[%s] no input file/data given\n", __func__); + exit(EXIT_FAILURE); + } + + // read the header of each file in the list and initialize data + for (i = 0; i < n; ++i) { + bam_hdr_t *h_tmp; + data[i] = calloc(1, sizeof(mplp_aux_t)); + data[i]->fp = sam_open_format(fn[i], "rb", &conf->ga.in); + if ( !data[i]->fp ) + { + fprintf(samtools_stderr, "[%s] failed to open %s: %s\n", __func__, fn[i], strerror(errno)); + exit(EXIT_FAILURE); + } + if (hts_set_opt(data[i]->fp, CRAM_OPT_DECODE_MD, 0)) { + fprintf(samtools_stderr, "Failed to set CRAM_OPT_DECODE_MD value\n"); + exit(EXIT_FAILURE); + } + if (conf->fai_fname && hts_set_fai_filename(data[i]->fp, conf->fai_fname) != 0) { + fprintf(samtools_stderr, "[%s] failed to process %s: %s\n", + __func__, conf->fai_fname, strerror(errno)); + exit(EXIT_FAILURE); + } + data[i]->conf = conf; + data[i]->ref = &mp_ref; + h_tmp = sam_hdr_read(data[i]->fp); + if ( !h_tmp ) { + fprintf(samtools_stderr,"[%s] fail to read the header of %s\n", __func__, fn[i]); + exit(EXIT_FAILURE); + } + bam_smpl_add(sm, fn[i], (conf->flag&MPLP_IGNORE_RG)? 0 : h_tmp->text); + // Collect read group IDs with PL (platform) listed in pl_list (note: fragile, strstr search) + rghash = bcf_call_add_rg(rghash, h_tmp->text, conf->pl_list); + if (conf->reg) { + hts_idx_t *idx = sam_index_load(data[i]->fp, fn[i]); + if (idx == NULL) { + fprintf(samtools_stderr, "[%s] fail to load index for %s\n", __func__, fn[i]); + exit(EXIT_FAILURE); + } + if ( (data[i]->iter=sam_itr_querys(idx, h_tmp, conf->reg)) == 0) { + fprintf(samtools_stderr, "[E::%s] fail to parse region '%s' with %s\n", __func__, conf->reg, fn[i]); + exit(EXIT_FAILURE); + } + if (i == 0) beg0 = data[i]->iter->beg, end0 = data[i]->iter->end, tid0 = data[i]->iter->tid; + hts_idx_destroy(idx); + } + else + data[i]->iter = NULL; + + if (i == 0) h = data[i]->h = h_tmp; // save the header of the first file + else { + // FIXME: check consistency between h and h_tmp + bam_hdr_destroy(h_tmp); + + // we store only the first file's header; it's (alleged to be) + // compatible with the i-th file's target_name lookup needs + data[i]->h = h; + } + } + // allocate data storage proportionate to number of samples being studied sm->n + gplp.n = sm->n; + gplp.n_plp = calloc(sm->n, sizeof(int)); + gplp.m_plp = calloc(sm->n, sizeof(int)); + gplp.plp = calloc(sm->n, sizeof(bam_pileup1_t*)); + + fprintf(samtools_stderr, "[%s] %d samples in %d input files\n", __func__, sm->n, n); + // write the VCF header + if (conf->flag & MPLP_BCF) + { + const char *mode; + if ( conf->flag & MPLP_VCF ) + mode = (conf->flag&MPLP_NO_COMP)? "wu" : "wz"; // uncompressed VCF or compressed VCF + else + mode = (conf->flag&MPLP_NO_COMP)? "wub" : "wb"; // uncompressed BCF or compressed BCF + + bcf_fp = bcf_open(conf->output_fname? conf->output_fname : "-", mode); + if (bcf_fp == NULL) { + fprintf(samtools_stderr, "[%s] failed to write to %s: %s\n", __func__, conf->output_fname? conf->output_fname : "standard output", strerror(errno)); + exit(EXIT_FAILURE); + } + + // BCF header creation + bcf_hdr = bcf_hdr_init("w"); + kstring_t str = {0,0,NULL}; + + ksprintf(&str, "##samtoolsVersion=%s+htslib-%s\n",samtools_version(),hts_version()); + bcf_hdr_append(bcf_hdr, str.s); + + str.l = 0; + ksprintf(&str, "##samtoolsCommand=samtools mpileup"); + for (i=1; iargc; i++) ksprintf(&str, " %s", conf->argv[i]); + kputc('\n', &str); + bcf_hdr_append(bcf_hdr, str.s); + + if (conf->fai_fname) + { + str.l = 0; + ksprintf(&str, "##reference=file://%s\n", conf->fai_fname); + bcf_hdr_append(bcf_hdr, str.s); + } + + // Translate BAM @SQ tags to BCF ##contig tags + // todo: use/write new BAM header manipulation routines, fill also UR, M5 + for (i=0; in_targets; i++) + { + str.l = 0; + ksprintf(&str, "##contig=", h->target_name[i], h->target_len[i]); + bcf_hdr_append(bcf_hdr, str.s); + } + free(str.s); + bcf_hdr_append(bcf_hdr,"##ALT="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); +#if CDF_MWU_TESTS + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); +#endif + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##INFO="); + bcf_hdr_append(bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_DP ) + bcf_hdr_append(bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_DV ) + bcf_hdr_append(bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_DPR ) + bcf_hdr_append(bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_INFO_DPR ) + bcf_hdr_append(bcf_hdr,"##INFO="); + if ( conf->fmt_flag&B2B_FMT_DP4 ) + bcf_hdr_append(bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_SP ) + bcf_hdr_append(bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_AD ) + bcf_hdr_append(bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_ADF ) + bcf_hdr_append(bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_FMT_ADR ) + bcf_hdr_append(bcf_hdr,"##FORMAT="); + if ( conf->fmt_flag&B2B_INFO_AD ) + bcf_hdr_append(bcf_hdr,"##INFO="); + if ( conf->fmt_flag&B2B_INFO_ADF ) + bcf_hdr_append(bcf_hdr,"##INFO="); + if ( conf->fmt_flag&B2B_INFO_ADR ) + bcf_hdr_append(bcf_hdr,"##INFO="); + + for (i=0; in; i++) + bcf_hdr_add_sample(bcf_hdr, sm->smpl[i]); + bcf_hdr_add_sample(bcf_hdr, NULL); + bcf_hdr_write(bcf_fp, bcf_hdr); + // End of BCF header creation + + // Initialise the calling algorithm + bca = bcf_call_init(-1., conf->min_baseQ); + bcr = calloc(sm->n, sizeof(bcf_callret1_t)); + bca->rghash = rghash; + bca->openQ = conf->openQ, bca->extQ = conf->extQ, bca->tandemQ = conf->tandemQ; + bca->min_frac = conf->min_frac; + bca->min_support = conf->min_support; + bca->per_sample_flt = conf->flag & MPLP_PER_SAMPLE; + + bc.bcf_hdr = bcf_hdr; + bc.n = sm->n; + bc.PL = malloc(15 * sm->n * sizeof(*bc.PL)); + if (conf->fmt_flag) + { + assert( sizeof(float)==sizeof(int32_t) ); + bc.DP4 = malloc(sm->n * sizeof(int32_t) * 4); + bc.fmt_arr = malloc(sm->n * sizeof(float)); // all fmt_flag fields + if ( conf->fmt_flag&(B2B_INFO_DPR|B2B_FMT_DPR|B2B_INFO_AD|B2B_INFO_ADF|B2B_INFO_ADR|B2B_FMT_AD|B2B_FMT_ADF|B2B_FMT_ADR) ) + { + // first B2B_MAX_ALLELES fields for total numbers, the rest per-sample + bc.ADR = (int32_t*) malloc((sm->n+1)*B2B_MAX_ALLELES*sizeof(int32_t)); + bc.ADF = (int32_t*) malloc((sm->n+1)*B2B_MAX_ALLELES*sizeof(int32_t)); + for (i=0; in; i++) + { + bcr[i].ADR = bc.ADR + (i+1)*B2B_MAX_ALLELES; + bcr[i].ADF = bc.ADF + (i+1)*B2B_MAX_ALLELES; + } + } + } + } + else { + pileup_fp = conf->output_fname? fopen(conf->output_fname, "w") : samtools_stdout; + + if (pileup_fp == NULL) { + fprintf(samtools_stderr, "[%s] failed to write to %s: %s\n", __func__, conf->output_fname, strerror(errno)); + exit(EXIT_FAILURE); + } + } + + // init pileup + iter = bam_mplp_init(n, mplp_func, (void**)data); + if ( conf->flag & MPLP_SMART_OVERLAPS ) bam_mplp_init_overlaps(iter); + max_depth = conf->max_depth; + if (max_depth * sm->n > 1<<20) + fprintf(samtools_stderr, "(%s) Max depth is above 1M. Potential memory hog!\n", __func__); + if (max_depth * sm->n < 8000) { + max_depth = 8000 / sm->n; + fprintf(samtools_stderr, "<%s> Set max per-file depth to %d\n", __func__, max_depth); + } + max_indel_depth = conf->max_indel_depth * sm->n; + bam_mplp_set_maxcnt(iter, max_depth); + bcf1_t *bcf_rec = bcf_init1(); + int ret; + int last_tid = -1, last_pos = -1; + + // begin pileup + while ( (ret=bam_mplp_auto(iter, &tid, &pos, n_plp, plp)) > 0) { + if (conf->reg && (pos < beg0 || pos >= end0)) continue; // out of the region requested + mplp_get_ref(data[0], tid, &ref, &ref_len); + //printf("tid=%d len=%d ref=%p/%s\n", tid, ref_len, ref, ref); + if (conf->flag & MPLP_BCF) { + int total_depth, _ref0, ref16; + if (conf->bed && tid >= 0 && !bed_overlap(conf->bed, h->target_name[tid], pos, pos+1)) continue; + for (i = total_depth = 0; i < n; ++i) total_depth += n_plp[i]; + group_smpl(&gplp, sm, &buf, n, fn, n_plp, plp, conf->flag & MPLP_IGNORE_RG); + _ref0 = (ref && pos < ref_len)? ref[pos] : 'N'; + ref16 = seq_nt16_table[_ref0]; + bcf_callaux_clean(bca, &bc); + for (i = 0; i < gplp.n; ++i) + bcf_call_glfgen(gplp.n_plp[i], gplp.plp[i], ref16, bca, bcr + i); + bc.tid = tid; bc.pos = pos; + bcf_call_combine(gplp.n, bcr, bca, ref16, &bc); + bcf_clear1(bcf_rec); + bcf_call2bcf(&bc, bcf_rec, bcr, conf->fmt_flag, 0, 0); + bcf_write1(bcf_fp, bcf_hdr, bcf_rec); + // call indels; todo: subsampling with total_depth>max_indel_depth instead of ignoring? + if (!(conf->flag&MPLP_NO_INDEL) && total_depth < max_indel_depth && bcf_call_gap_prep(gplp.n, gplp.n_plp, gplp.plp, pos, bca, ref, rghash) >= 0) + { + bcf_callaux_clean(bca, &bc); + for (i = 0; i < gplp.n; ++i) + bcf_call_glfgen(gplp.n_plp[i], gplp.plp[i], -1, bca, bcr + i); + if (bcf_call_combine(gplp.n, bcr, bca, -1, &bc) >= 0) { + bcf_clear1(bcf_rec); + bcf_call2bcf(&bc, bcf_rec, bcr, conf->fmt_flag, bca, ref); + bcf_write1(bcf_fp, bcf_hdr, bcf_rec); + } + } + } else { + if (conf->all) { + // Deal with missing portions of previous tids + while (tid > last_tid) { + if (last_tid >= 0 && !conf->reg) { + while (++last_pos < h->target_len[last_tid]) { + if (conf->bed && bed_overlap(conf->bed, h->target_name[last_tid], last_pos, last_pos + 1) == 0) + continue; + print_empty_pileup(pileup_fp, conf, h->target_name[last_tid], last_pos, n, ref, ref_len); + } + } + last_tid++; + last_pos = -1; + if (conf->all < 2) + break; + } + } + if (conf->all) { + // Deal with missing portion of current tid + while (++last_pos < pos) { + if (conf->reg && last_pos < beg0) continue; // out of range; skip + if (conf->bed && bed_overlap(conf->bed, h->target_name[tid], last_pos, last_pos + 1) == 0) + continue; + print_empty_pileup(pileup_fp, conf, h->target_name[tid], last_pos, n, ref, ref_len); + } + last_tid = tid; + last_pos = pos; + } + if (conf->bed && tid >= 0 && !bed_overlap(conf->bed, h->target_name[tid], pos, pos+1)) continue; + + fprintf(pileup_fp, "%s\t%d\t%c", h->target_name[tid], pos + 1, (ref && pos < ref_len)? ref[pos] : 'N'); + for (i = 0; i < n; ++i) { + int j, cnt; + for (j = cnt = 0; j < n_plp[i]; ++j) { + const bam_pileup1_t *p = plp[i] + j; + int c = p->qpos < p->b->core.l_qseq + ? bam_get_qual(p->b)[p->qpos] + : 0; + if (c >= conf->min_baseQ) ++cnt; + } + fprintf(pileup_fp, "\t%d\t", cnt); + if (n_plp[i] == 0) { + fputs("*\t*", pileup_fp); + if (conf->flag & MPLP_PRINT_MAPQ) fputs("\t*", pileup_fp); + if (conf->flag & MPLP_PRINT_POS) fputs("\t*", pileup_fp); + if (conf->flag & MPLP_PRINT_QNAME) fputs("\t*", pileup_fp); + } else { + int n = 0; + for (j = 0; j < n_plp[i]; ++j) { + const bam_pileup1_t *p = plp[i] + j; + int c = p->qpos < p->b->core.l_qseq + ? bam_get_qual(p->b)[p->qpos] + : 0; + if (c >= conf->min_baseQ) + n++, pileup_seq(pileup_fp, plp[i] + j, pos, ref_len, ref); + } + if (!n) putc('*', pileup_fp); + + n = 0; + putc('\t', pileup_fp); + for (j = 0; j < n_plp[i]; ++j) { + const bam_pileup1_t *p = plp[i] + j; + int c = p->qpos < p->b->core.l_qseq + ? bam_get_qual(p->b)[p->qpos] + : 0; + if (c >= conf->min_baseQ) { + c = c + 33 < 126? c + 33 : 126; + putc(c, pileup_fp); + n++; + } + } + if (!n) putc('*', pileup_fp); + + if (conf->flag & MPLP_PRINT_MAPQ) { + n = 0; + putc('\t', pileup_fp); + for (j = 0; j < n_plp[i]; ++j) { + const bam_pileup1_t *p = plp[i] + j; + int c = bam_get_qual(p->b)[p->qpos]; + if ( c < conf->min_baseQ ) continue; + c = plp[i][j].b->core.qual + 33; + if (c > 126) c = 126; + putc(c, pileup_fp); + n++; + } + if (!n) putc('*', pileup_fp); + } + + if (conf->flag & MPLP_PRINT_POS) { + n = 0; + putc('\t', pileup_fp); + for (j = 0; j < n_plp[i]; ++j) { + const bam_pileup1_t *p = plp[i] + j; + int c = bam_get_qual(p->b)[p->qpos]; + if ( c < conf->min_baseQ ) continue; + + if (n > 0) putc(',', pileup_fp); + fprintf(pileup_fp, "%d", plp[i][j].qpos + 1); // FIXME: fprintf(samtools_stdout, ) is very slow... + n++; + } + if (!n) putc('*', pileup_fp); + } + + if (conf->flag & MPLP_PRINT_QNAME) { + n = 0; + putc('\t', pileup_fp); + for (j = 0; j < n_plp[i]; ++j) { + const bam_pileup1_t *p = &plp[i][j]; + int c = bam_get_qual(p->b)[p->qpos]; + if ( c < conf->min_baseQ ) continue; + + if (n > 0) putc(',', pileup_fp); + fputs(bam_get_qname(p->b), pileup_fp); + n++; + } + if (!n) putc('*', pileup_fp); + } + } + } + putc('\n', pileup_fp); + } + } + + if (conf->all && !(conf->flag & MPLP_BCF)) { + // Handle terminating region + if (last_tid < 0 && conf->reg && conf->all > 1) { + last_tid = tid0; + last_pos = beg0-1; + mplp_get_ref(data[0], tid0, &ref, &ref_len); + } + while (last_tid >= 0 && last_tid < h->n_targets) { + while (++last_pos < h->target_len[last_tid]) { + if (last_pos >= end0) break; + if (conf->bed && bed_overlap(conf->bed, h->target_name[last_tid], last_pos, last_pos + 1) == 0) + continue; + print_empty_pileup(pileup_fp, conf, h->target_name[last_tid], last_pos, n, ref, ref_len); + } + last_tid++; + last_pos = -1; + if (conf->all < 2 || conf->reg) + break; + } + } + + // clean up + free(bc.tmp.s); + bcf_destroy1(bcf_rec); + if (bcf_fp) + { + hts_close(bcf_fp); + bcf_hdr_destroy(bcf_hdr); + bcf_call_destroy(bca); + free(bc.PL); + free(bc.DP4); + free(bc.ADR); + free(bc.ADF); + free(bc.fmt_arr); + free(bcr); + } + if (pileup_fp && conf->output_fname) fclose(pileup_fp); + bam_smpl_destroy(sm); free(buf.s); + for (i = 0; i < gplp.n; ++i) free(gplp.plp[i]); + free(gplp.plp); free(gplp.n_plp); free(gplp.m_plp); + bcf_call_del_rghash(rghash); + bam_mplp_destroy(iter); + bam_hdr_destroy(h); + for (i = 0; i < n; ++i) { + sam_close(data[i]->fp); + if (data[i]->iter) hts_itr_destroy(data[i]->iter); + free(data[i]); + } + free(data); free(plp); free(n_plp); + free(mp_ref.ref[0]); + free(mp_ref.ref[1]); + return ret; +} + +static int is_url(const char *s) +{ + static const char uri_scheme_chars[] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+.-"; + return s[strspn(s, uri_scheme_chars)] == ':'; +} + +#define MAX_PATH_LEN 1024 +int read_file_list(const char *file_list,int *n,char **argv[]) +{ + char buf[MAX_PATH_LEN]; + int len, nfiles = 0; + char **files = NULL; + struct stat sb; + + *n = 0; + *argv = NULL; + + FILE *fh = fopen(file_list,"r"); + if ( !fh ) + { + fprintf(samtools_stderr,"%s: %s\n", file_list,strerror(errno)); + return 1; + } + + files = calloc(nfiles,sizeof(char*)); + nfiles = 0; + while ( fgets(buf,MAX_PATH_LEN,fh) ) + { + // allow empty lines and trailing spaces + len = strlen(buf); + while ( len>0 && isspace(buf[len-1]) ) len--; + if ( !len ) continue; + + // check sanity of the file list + buf[len] = 0; + if (! (is_url(buf) || stat(buf, &sb) == 0)) + { + // no such file, check if it is safe to print its name + int i, safe_to_print = 1; + for (i=0; irflag_require); + char *tmp_filter = bam_flag2str(mplp->rflag_filter); + + // Display usage information, formatted for the standard 80 columns. + // (The unusual string formatting here aids the readability of this + // source code in 80 columns, to the extent that's possible.) + + fprintf(fp, +"\n" +"Usage: samtools mpileup [options] in1.bam [in2.bam [...]]\n" +"\n" +"Input options:\n" +" -6, --illumina1.3+ quality is in the Illumina-1.3+ encoding\n" +" -A, --count-orphans do not discard anomalous read pairs\n" +" -b, --bam-list FILE list of input BAM filenames, one per line\n" +" -B, --no-BAQ disable BAQ (per-Base Alignment Quality)\n" +" -C, --adjust-MQ INT adjust mapping quality; recommended:50, disable:0 [0]\n" +" -d, --max-depth INT max per-file depth; avoids excessive memory usage [%d]\n", mplp->max_depth); + fprintf(fp, +" -E, --redo-BAQ recalculate BAQ on the fly, ignore existing BQs\n" +" -f, --fasta-ref FILE faidx indexed reference sequence file\n" +" -G, --exclude-RG FILE exclude read groups listed in FILE\n" +" -l, --positions FILE skip unlisted positions (chr pos) or regions (BED)\n" +" -q, --min-MQ INT skip alignments with mapQ smaller than INT [%d]\n", mplp->min_mq); + fprintf(fp, +" -Q, --min-BQ INT skip bases with baseQ/BAQ smaller than INT [%d]\n", mplp->min_baseQ); + fprintf(fp, +" -r, --region REG region in which pileup is generated\n" +" -R, --ignore-RG ignore RG tags (one BAM = one sample)\n" +" --rf, --incl-flags STR|INT required flags: skip reads with mask bits unset [%s]\n", tmp_require); + fprintf(fp, +" --ff, --excl-flags STR|INT filter flags: skip reads with mask bits set\n" +" [%s]\n", tmp_filter); + fprintf(fp, +" -x, --ignore-overlaps disable read-pair overlap detection\n" +"\n" +"Output options:\n" +" -o, --output FILE write output to FILE [standard output]\n" +" -g, --BCF generate genotype likelihoods in BCF format\n" +" -v, --VCF generate genotype likelihoods in VCF format\n" +"\n" +"Output options for mpileup format (without -g/-v):\n" +" -O, --output-BP output base positions on reads\n" +" -s, --output-MQ output mapping quality\n" +" --output-QNAME output read names\n" +" -a output all positions (including zero depth)\n" +" -a -a (or -aa) output absolutely all positions, including unused ref. sequences\n" +"\n" +"Output options for genotype likelihoods (when -g/-v is used):\n" +" -t, --output-tags LIST optional tags to output:\n" +" DP,AD,ADF,ADR,SP,INFO/AD,INFO/ADF,INFO/ADR []\n" +" -u, --uncompressed generate uncompressed VCF/BCF output\n" +"\n" +"SNP/INDEL genotype likelihoods options (effective with -g/-v):\n" +" -e, --ext-prob INT Phred-scaled gap extension seq error probability [%d]\n", mplp->extQ); + fprintf(fp, +" -F, --gap-frac FLOAT minimum fraction of gapped reads [%g]\n", mplp->min_frac); + fprintf(fp, +" -h, --tandem-qual INT coefficient for homopolymer errors [%d]\n", mplp->tandemQ); + fprintf(fp, +" -I, --skip-indels do not perform indel calling\n" +" -L, --max-idepth INT maximum per-file depth for INDEL calling [%d]\n", mplp->max_indel_depth); + fprintf(fp, +" -m, --min-ireads INT minimum number gapped reads for indel candidates [%d]\n", mplp->min_support); + fprintf(fp, +" -o, --open-prob INT Phred-scaled gap open seq error probability [%d]\n", mplp->openQ); + fprintf(fp, +" -p, --per-sample-mF apply -m and -F per-sample for increased sensitivity\n" +" -P, --platforms STR comma separated list of platforms for indels [all]\n"); + sam_global_opt_help(fp, "-.--.-"); + fprintf(fp, +"\n" +"Notes: Assuming diploid individuals.\n"); + + free(tmp_require); + free(tmp_filter); +} + +int bam_mpileup(int argc, char *argv[]) +{ + int c; + const char *file_list = NULL; + char **fn = NULL; + int nfiles = 0, use_orphan = 0; + mplp_conf_t mplp; + memset(&mplp, 0, sizeof(mplp_conf_t)); + mplp.min_baseQ = 13; + mplp.capQ_thres = 0; + mplp.max_depth = 250; mplp.max_indel_depth = 250; + mplp.openQ = 40; mplp.extQ = 20; mplp.tandemQ = 100; + mplp.min_frac = 0.002; mplp.min_support = 1; + mplp.flag = MPLP_NO_ORPHAN | MPLP_REALN | MPLP_SMART_OVERLAPS; + mplp.argc = argc; mplp.argv = argv; + mplp.rflag_filter = BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP; + mplp.output_fname = NULL; + mplp.all = 0; + sam_global_args_init(&mplp.ga); + + static const struct option lopts[] = + { + SAM_OPT_GLOBAL_OPTIONS('-', 0, '-', '-', 0, '-'), + {"rf", required_argument, NULL, 1}, // require flag + {"ff", required_argument, NULL, 2}, // filter flag + {"incl-flags", required_argument, NULL, 1}, + {"excl-flags", required_argument, NULL, 2}, + {"output", required_argument, NULL, 3}, + {"open-prob", required_argument, NULL, 4}, + {"output-QNAME", no_argument, NULL, 5}, + {"output-qname", no_argument, NULL, 5}, + {"illumina1.3+", no_argument, NULL, '6'}, + {"count-orphans", no_argument, NULL, 'A'}, + {"bam-list", required_argument, NULL, 'b'}, + {"no-BAQ", no_argument, NULL, 'B'}, + {"no-baq", no_argument, NULL, 'B'}, + {"adjust-MQ", required_argument, NULL, 'C'}, + {"adjust-mq", required_argument, NULL, 'C'}, + {"max-depth", required_argument, NULL, 'd'}, + {"redo-BAQ", no_argument, NULL, 'E'}, + {"redo-baq", no_argument, NULL, 'E'}, + {"fasta-ref", required_argument, NULL, 'f'}, + {"exclude-RG", required_argument, NULL, 'G'}, + {"exclude-rg", required_argument, NULL, 'G'}, + {"positions", required_argument, NULL, 'l'}, + {"region", required_argument, NULL, 'r'}, + {"ignore-RG", no_argument, NULL, 'R'}, + {"ignore-rg", no_argument, NULL, 'R'}, + {"min-MQ", required_argument, NULL, 'q'}, + {"min-mq", required_argument, NULL, 'q'}, + {"min-BQ", required_argument, NULL, 'Q'}, + {"min-bq", required_argument, NULL, 'Q'}, + {"ignore-overlaps", no_argument, NULL, 'x'}, + {"BCF", no_argument, NULL, 'g'}, + {"bcf", no_argument, NULL, 'g'}, + {"VCF", no_argument, NULL, 'v'}, + {"vcf", no_argument, NULL, 'v'}, + {"output-BP", no_argument, NULL, 'O'}, + {"output-bp", no_argument, NULL, 'O'}, + {"output-MQ", no_argument, NULL, 's'}, + {"output-mq", no_argument, NULL, 's'}, + {"output-tags", required_argument, NULL, 't'}, + {"uncompressed", no_argument, NULL, 'u'}, + {"ext-prob", required_argument, NULL, 'e'}, + {"gap-frac", required_argument, NULL, 'F'}, + {"tandem-qual", required_argument, NULL, 'h'}, + {"skip-indels", no_argument, NULL, 'I'}, + {"max-idepth", required_argument, NULL, 'L'}, + {"min-ireads ", required_argument, NULL, 'm'}, + {"per-sample-mF", no_argument, NULL, 'p'}, + {"per-sample-mf", no_argument, NULL, 'p'}, + {"platforms", required_argument, NULL, 'P'}, + {NULL, 0, NULL, 0} + }; + while ((c = getopt_long(argc, argv, "Agf:r:l:q:Q:uRC:BDSd:L:b:P:po:e:h:Im:F:EG:6OsVvxt:a",lopts,NULL)) >= 0) { + switch (c) { + case 'x': mplp.flag &= ~MPLP_SMART_OVERLAPS; break; + case 1 : + mplp.rflag_require = bam_str2flag(optarg); + if ( mplp.rflag_require<0 ) { fprintf(samtools_stderr,"Could not parse --rf %s\n", optarg); return 1; } + break; + case 2 : + mplp.rflag_filter = bam_str2flag(optarg); + if ( mplp.rflag_filter<0 ) { fprintf(samtools_stderr,"Could not parse --ff %s\n", optarg); return 1; } + break; + case 3 : mplp.output_fname = optarg; break; + case 4 : mplp.openQ = atoi(optarg); break; + case 5 : mplp.flag |= MPLP_PRINT_QNAME; break; + case 'f': + mplp.fai = fai_load(optarg); + if (mplp.fai == NULL) return 1; + mplp.fai_fname = optarg; + break; + case 'd': mplp.max_depth = atoi(optarg); break; + case 'r': mplp.reg = strdup(optarg); break; + case 'l': + // In the original version the whole BAM was streamed which is inefficient + // with few BED intervals and big BAMs. Todo: devise a heuristic to determine + // best strategy, that is streaming or jumping. + mplp.bed = bed_read(optarg); + if (!mplp.bed) { print_error_errno("mpileup", "Could not read file \"%s\"", optarg); return 1; } + break; + case 'P': mplp.pl_list = strdup(optarg); break; + case 'p': mplp.flag |= MPLP_PER_SAMPLE; break; + case 'g': mplp.flag |= MPLP_BCF; break; + case 'v': mplp.flag |= MPLP_BCF | MPLP_VCF; break; + case 'u': mplp.flag |= MPLP_NO_COMP | MPLP_BCF; break; + case 'B': mplp.flag &= ~MPLP_REALN; break; + case 'D': mplp.fmt_flag |= B2B_FMT_DP; fprintf(samtools_stderr, "[warning] samtools mpileup option `-D` is functional, but deprecated. Please switch to `-t DP` in future.\n"); break; + case 'S': mplp.fmt_flag |= B2B_FMT_SP; fprintf(samtools_stderr, "[warning] samtools mpileup option `-S` is functional, but deprecated. Please switch to `-t SP` in future.\n"); break; + case 'V': mplp.fmt_flag |= B2B_FMT_DV; fprintf(samtools_stderr, "[warning] samtools mpileup option `-V` is functional, but deprecated. Please switch to `-t DV` in future.\n"); break; + case 'I': mplp.flag |= MPLP_NO_INDEL; break; + case 'E': mplp.flag |= MPLP_REDO_BAQ; break; + case '6': mplp.flag |= MPLP_ILLUMINA13; break; + case 'R': mplp.flag |= MPLP_IGNORE_RG; break; + case 's': mplp.flag |= MPLP_PRINT_MAPQ; break; + case 'O': mplp.flag |= MPLP_PRINT_POS; break; + case 'C': mplp.capQ_thres = atoi(optarg); break; + case 'q': mplp.min_mq = atoi(optarg); break; + case 'Q': mplp.min_baseQ = atoi(optarg); break; + case 'b': file_list = optarg; break; + case 'o': { + char *end; + long value = strtol(optarg, &end, 10); + // Distinguish between -o INT and -o FILE (a bit of a hack!) + if (*end == '\0') mplp.openQ = value; + else mplp.output_fname = optarg; + } + break; + case 'e': mplp.extQ = atoi(optarg); break; + case 'h': mplp.tandemQ = atoi(optarg); break; + case 'A': use_orphan = 1; break; + case 'F': mplp.min_frac = atof(optarg); break; + case 'm': mplp.min_support = atoi(optarg); break; + case 'L': mplp.max_indel_depth = atoi(optarg); break; + case 'G': { + FILE *fp_rg; + char buf[1024]; + mplp.rghash = khash_str2int_init(); + if ((fp_rg = fopen(optarg, "r")) == NULL) + fprintf(samtools_stderr, "(%s) Fail to open file %s. Continue anyway.\n", __func__, optarg); + while (!feof(fp_rg) && fscanf(fp_rg, "%s", buf) > 0) // this is not a good style, but forgive me... + khash_str2int_inc(mplp.rghash, strdup(buf)); + fclose(fp_rg); + } + break; + case 't': mplp.fmt_flag |= parse_format_flag(optarg); break; + case 'a': mplp.all++; break; + default: + if (parse_sam_global_opt(c, optarg, lopts, &mplp.ga) == 0) break; + /* else fall-through */ + case '?': + print_usage(samtools_stderr, &mplp); + return 1; + } + } + if (!mplp.fai && mplp.ga.reference) { + mplp.fai_fname = mplp.ga.reference; + mplp.fai = fai_load(mplp.fai_fname); + if (mplp.fai == NULL) return 1; + } + + if ( !(mplp.flag&MPLP_REALN) && mplp.flag&MPLP_REDO_BAQ ) + { + fprintf(samtools_stderr,"Error: The -B option cannot be combined with -E\n"); + return 1; + } + if (use_orphan) mplp.flag &= ~MPLP_NO_ORPHAN; + if (argc == 1) + { + print_usage(samtools_stderr, &mplp); + return 1; + } + int ret; + if (file_list) { + if ( read_file_list(file_list,&nfiles,&fn) ) return 1; + ret = mpileup(&mplp,nfiles,fn); + for (c=0; c + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include + +/* File status flags (zero means OK). It's possible for more than one to be + * set on a single file. The final exit status is the bitwise-or of the + * status of all the files. */ +#define QC_FAIL_OPEN 2 +#define QC_NOT_SEQUENCE 4 +#define QC_BAD_HEADER 8 +#define QC_NO_EOF_BLOCK 16 +#define QC_FAIL_CLOSE 32 + +static void usage_quickcheck(FILE *write_to) +{ + fprintf(write_to, +"Usage: samtools quickcheck [options] [...]\n" +"Options:\n" +" -v verbose output (repeat for more verbosity)\n" +" -q suppress warning messages\n" +"\n" +"Notes:\n" +"\n" +"1. By default quickcheck will emit a warning message if and only if a file\n" +" fails the checks, in which case the exit status is non-zero. Under normal\n" +" behaviour with valid data it will be silent and has a zero exit status.\n" +" The warning messages are purely for manual inspection and should not be \n" +" parsed by scripts.\n" +"\n" +"2. In order to use this command programmatically, you should check its exit\n" +" status. One way to use quickcheck might be as a check that all BAM files in\n" +" a directory are okay:\n" +"\n" +"\tsamtools quickcheck *.bam && echo 'all ok' \\\n" +"\t || echo 'fail!'\n" +"\n" +" The first level of verbosity lists only files that fail to stdout.\n" +" To obtain a parsable list of files that have failed, use this option:\n" +"\n" +"\tsamtools quickcheck -qv *.bam > bad_bams.fofn \\\n" +"\t && echo 'all ok' \\\n" +"\t || echo 'some files failed check, see bad_bams.fofn'\n" + ); +} + +#define QC_ERR(state, v, msg, arg1) \ + file_state |= (state); \ + if (!quiet || verbose >= (v)) fprintf(stderr, (msg), (arg1)) + +int main_quickcheck(int argc, char** argv) +{ + int verbose = 0, quiet = 0; + hts_verbose = 0; + + const char* optstring = "vq"; + int opt; + while ((opt = getopt(argc, argv, optstring)) != -1) { + switch (opt) { + case 'v': + verbose++; + break; + case 'q': + quiet = 1; + break; + default: + usage_quickcheck(stderr); + return 1; + } + } + + argc -= optind; + argv += optind; + + if (argc < 1) { + usage_quickcheck(stdout); + return 1; + } + + if (verbose >= 2) { + fprintf(stderr, "verbosity set to %d\n", verbose); + } + + if (verbose >= 4) { + hts_verbose = 3; + } + + int ret = 0; + int i; + + for (i = 0; i < argc; i++) { + char* fn = argv[i]; + int file_state = 0; + + if (verbose >= 3) fprintf(stderr, "checking %s\n", fn); + + // attempt to open + htsFile *hts_fp = hts_open(fn, "r"); + if (hts_fp == NULL) { + QC_ERR(QC_FAIL_OPEN, 2, "%s could not be opened for reading.\n", fn); + } + else { + if (verbose >= 3) fprintf(stderr, "opened %s\n", fn); + // make sure we have sequence data + const htsFormat *fmt = hts_get_format(hts_fp); + if (fmt->category != sequence_data ) { + QC_ERR(QC_NOT_SEQUENCE, 2, "%s was not identified as sequence data.\n", fn); + } + else { + if (verbose >= 3) fprintf(stderr, "%s is sequence data\n", fn); + // check header + bam_hdr_t *header = sam_hdr_read(hts_fp); + if (header == NULL) { + QC_ERR(QC_BAD_HEADER, 2, "%s caused an error whilst reading its header.\n", fn); + } else { + if (header->n_targets <= 0) { + QC_ERR(QC_BAD_HEADER, 2, "%s had no targets in header.\n", fn); + } + else { + if (verbose >= 3) fprintf(stderr, "%s has %d targets in header.\n", fn, header->n_targets); + } + bam_hdr_destroy(header); + } + } + // check EOF on formats that support this + int ret; + if ((ret = hts_check_EOF(hts_fp)) < 0) { + QC_ERR(QC_NO_EOF_BLOCK, 2, "%s caused an error whilst checking for EOF block.\n", fn); + } + else { + switch (ret) { + case 0: + QC_ERR(QC_NO_EOF_BLOCK, 2, "%s was missing EOF block when one should be present.\n", fn); + break; + case 1: + if (verbose >= 3) fprintf(stderr, "%s has good EOF block.\n", fn); + break; + case 2: + if (verbose >= 3) fprintf(stderr, "%s cannot be checked for EOF block as it is not seekable.\n", fn); + break; + case 3: + if (verbose >= 3) fprintf(stderr, "%s cannot be checked for EOF block because its filetype does not contain one.\n", fn); + break; + } + } + + if (hts_close(hts_fp) < 0) { + QC_ERR(QC_FAIL_CLOSE, 2, "%s did not close cleanly.\n", fn); + } + } + + if (file_state > 0 && verbose >= 1) { + fprintf(stdout, "%s\n", fn); + } + ret |= file_state; + } + + return ret; +} diff --git a/samtools/bam_quickcheck.c.pysam.c b/samtools/bam_quickcheck.c.pysam.c new file mode 100644 index 0000000..fc0af2e --- /dev/null +++ b/samtools/bam_quickcheck.c.pysam.c @@ -0,0 +1,188 @@ +#include "samtools.pysam.h" + +/* bam_quickcheck.c -- quickcheck subcommand. + + Copyright (C) 2015 Genome Research Ltd. + + Author: Joshua C. Randall + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include + +/* File status flags (zero means OK). It's possible for more than one to be + * set on a single file. The final exit status is the bitwise-or of the + * status of all the files. */ +#define QC_FAIL_OPEN 2 +#define QC_NOT_SEQUENCE 4 +#define QC_BAD_HEADER 8 +#define QC_NO_EOF_BLOCK 16 +#define QC_FAIL_CLOSE 32 + +static void usage_quickcheck(FILE *write_to) +{ + fprintf(write_to, +"Usage: samtools quickcheck [options] [...]\n" +"Options:\n" +" -v verbose output (repeat for more verbosity)\n" +" -q suppress warning messages\n" +"\n" +"Notes:\n" +"\n" +"1. By default quickcheck will emit a warning message if and only if a file\n" +" fails the checks, in which case the exit status is non-zero. Under normal\n" +" behaviour with valid data it will be silent and has a zero exit status.\n" +" The warning messages are purely for manual inspection and should not be \n" +" parsed by scripts.\n" +"\n" +"2. In order to use this command programmatically, you should check its exit\n" +" status. One way to use quickcheck might be as a check that all BAM files in\n" +" a directory are okay:\n" +"\n" +"\tsamtools quickcheck *.bam && echo 'all ok' \\\n" +"\t || echo 'fail!'\n" +"\n" +" The first level of verbosity lists only files that fail to samtools_stdout.\n" +" To obtain a parsable list of files that have failed, use this option:\n" +"\n" +"\tsamtools quickcheck -qv *.bam > bad_bams.fofn \\\n" +"\t && echo 'all ok' \\\n" +"\t || echo 'some files failed check, see bad_bams.fofn'\n" + ); +} + +#define QC_ERR(state, v, msg, arg1) \ + file_state |= (state); \ + if (!quiet || verbose >= (v)) fprintf(samtools_stderr, (msg), (arg1)) + +int main_quickcheck(int argc, char** argv) +{ + int verbose = 0, quiet = 0; + hts_verbose = 0; + + const char* optstring = "vq"; + int opt; + while ((opt = getopt(argc, argv, optstring)) != -1) { + switch (opt) { + case 'v': + verbose++; + break; + case 'q': + quiet = 1; + break; + default: + usage_quickcheck(samtools_stderr); + return 1; + } + } + + argc -= optind; + argv += optind; + + if (argc < 1) { + usage_quickcheck(samtools_stdout); + return 1; + } + + if (verbose >= 2) { + fprintf(samtools_stderr, "verbosity set to %d\n", verbose); + } + + if (verbose >= 4) { + hts_verbose = 3; + } + + int ret = 0; + int i; + + for (i = 0; i < argc; i++) { + char* fn = argv[i]; + int file_state = 0; + + if (verbose >= 3) fprintf(samtools_stderr, "checking %s\n", fn); + + // attempt to open + htsFile *hts_fp = hts_open(fn, "r"); + if (hts_fp == NULL) { + QC_ERR(QC_FAIL_OPEN, 2, "%s could not be opened for reading.\n", fn); + } + else { + if (verbose >= 3) fprintf(samtools_stderr, "opened %s\n", fn); + // make sure we have sequence data + const htsFormat *fmt = hts_get_format(hts_fp); + if (fmt->category != sequence_data ) { + QC_ERR(QC_NOT_SEQUENCE, 2, "%s was not identified as sequence data.\n", fn); + } + else { + if (verbose >= 3) fprintf(samtools_stderr, "%s is sequence data\n", fn); + // check header + bam_hdr_t *header = sam_hdr_read(hts_fp); + if (header == NULL) { + QC_ERR(QC_BAD_HEADER, 2, "%s caused an error whilst reading its header.\n", fn); + } else { + if (header->n_targets <= 0) { + QC_ERR(QC_BAD_HEADER, 2, "%s had no targets in header.\n", fn); + } + else { + if (verbose >= 3) fprintf(samtools_stderr, "%s has %d targets in header.\n", fn, header->n_targets); + } + bam_hdr_destroy(header); + } + } + // check EOF on formats that support this + int ret; + if ((ret = hts_check_EOF(hts_fp)) < 0) { + QC_ERR(QC_NO_EOF_BLOCK, 2, "%s caused an error whilst checking for EOF block.\n", fn); + } + else { + switch (ret) { + case 0: + QC_ERR(QC_NO_EOF_BLOCK, 2, "%s was missing EOF block when one should be present.\n", fn); + break; + case 1: + if (verbose >= 3) fprintf(samtools_stderr, "%s has good EOF block.\n", fn); + break; + case 2: + if (verbose >= 3) fprintf(samtools_stderr, "%s cannot be checked for EOF block as it is not seekable.\n", fn); + break; + case 3: + if (verbose >= 3) fprintf(samtools_stderr, "%s cannot be checked for EOF block because its filetype does not contain one.\n", fn); + break; + } + } + + if (hts_close(hts_fp) < 0) { + QC_ERR(QC_FAIL_CLOSE, 2, "%s did not close cleanly.\n", fn); + } + } + + if (file_state > 0 && verbose >= 1) { + fprintf(samtools_stdout, "%s\n", fn); + } + ret |= file_state; + } + + return ret; +} diff --git a/samtools/bam_reheader.c b/samtools/bam_reheader.c new file mode 100644 index 0000000..acaebd4 --- /dev/null +++ b/samtools/bam_reheader.c @@ -0,0 +1,514 @@ +/* bam_reheader.c -- reheader subcommand. + + Copyright (C) 2010 Broad Institute. + Copyright (C) 2012-2015 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include + +#include "htslib/bgzf.h" +#include "htslib/sam.h" +#include "htslib/hfile.h" +#include "htslib/cram.h" +#include "samtools.h" + +#define BUF_SIZE 0x10000 + +/* + * Reads a file and outputs a new BAM file to fd with 'h' replaced as + * the header. No checks are made to the validity. + */ +int bam_reheader(BGZF *in, bam_hdr_t *h, int fd, + const char *arg_list, int add_PG) +{ + BGZF *fp = NULL; + ssize_t len; + uint8_t *buf = NULL; + SAM_hdr *sh = NULL; + if (in->is_write) return -1; + buf = malloc(BUF_SIZE); + if (!buf) { + fprintf(stderr, "Out of memory\n"); + return -1; + } + if (bam_hdr_read(in) == NULL) { + fprintf(stderr, "Couldn't read header\n"); + goto fail; + } + fp = bgzf_fdopen(fd, "w"); + if (!fp) { + print_error_errno("reheader", "Couldn't open output file"); + goto fail; + } + + if (add_PG) { + // Around the houses, but it'll do until we can manipulate bam_hdr_t natively. + sh = sam_hdr_parse_(h->text, h->l_text); + if (!sh) + goto fail; + if (sam_hdr_add_PG(sh, "samtools", + "VN", samtools_version(), + arg_list ? "CL": NULL, + arg_list ? arg_list : NULL, + NULL) != 0) + goto fail; + + free(h->text); + h->text = strdup(sam_hdr_str(sh)); + h->l_text = sam_hdr_length(sh); + if (!h->text) + goto fail; + sam_hdr_free(sh); + sh = NULL; + } + + if (bam_hdr_write(fp, h) < 0) { + print_error_errno("reheader", "Couldn't write header"); + goto fail; + } + if (in->block_offset < in->block_length) { + if (bgzf_write(fp, (char *)in->uncompressed_block + in->block_offset, in->block_length - in->block_offset) < 0) goto write_fail; + if (bgzf_flush(fp) < 0) goto write_fail; + } + while ((len = bgzf_raw_read(in, buf, BUF_SIZE)) > 0) { + if (bgzf_raw_write(fp, buf, len) < 0) goto write_fail; + } + if (len < 0) { + fprintf(stderr, "[%s] Error reading input file\n", __func__); + goto fail; + } + free(buf); + fp->block_offset = in->block_offset = 0; + if (bgzf_close(fp) < 0) { + fprintf(stderr, "[%s] Error closing output file\n", __func__); + return -1; + } + return 0; + + write_fail: + print_error_errno("reheader", "Error writing to output file"); + fail: + bgzf_close(fp); + free(buf); + sam_hdr_free(sh); + return -1; +} + +/* + * Reads a file and outputs a new CRAM file to stdout with 'h' + * replaced as the header. No checks are made to the validity. + * + * FIXME: error checking + */ +int cram_reheader(cram_fd *in, bam_hdr_t *h, const char *arg_list, int add_PG) +{ + htsFile *h_out = hts_open("-", "wc"); + cram_fd *out = h_out->fp.cram; + cram_container *c = NULL; + int ret = -1; + + // Attempt to fill out a cram->refs[] array from @SQ headers + cram_fd_set_header(out, sam_hdr_parse_(h->text, h->l_text)); + if (add_PG) { + if (sam_hdr_add_PG(cram_fd_get_header(out), "samtools", + "VN", samtools_version(), + arg_list ? "CL": NULL, + arg_list ? arg_list : NULL, + NULL) != 0) + goto err; + + // Covert back to bam_hdr_t struct + free(h->text); + h->text = strdup(sam_hdr_str(cram_fd_get_header(out))); + h->l_text = sam_hdr_length(cram_fd_get_header(out)); + if (!h->text) + goto err; + } + + if (sam_hdr_write(h_out, h) != 0) + goto err; + cram_set_option(out, CRAM_OPT_REFERENCE, NULL); + + while ((c = cram_read_container(in))) { + int32_t i, num_blocks = cram_container_get_num_blocks(c); + if (cram_write_container(out, c) != 0) + goto err; + + for (i = 0; i < num_blocks; i++) { + cram_block *blk = cram_read_block(in); + if (!blk || cram_write_block(out, blk) != 0) { + if (blk) cram_free_block(blk); + goto err; + } + cram_free_block(blk); + } + cram_free_container(c); + } + + ret = 0; + + err: + if (hts_close(h_out) != 0) + ret = -1; + + return ret; +} + + + +/* + * Reads a version 2 CRAM file and replaces the header in-place, + * provided the header is small enough to fit without growing the + * entire file. + * + * Version 2 format has an uncompressed SAM header with multiple nul + * termination bytes to permit inline header editing. + * + * Returns 0 on success; + * -1 on general failure; + * -2 on failure due to insufficient size + */ +int cram_reheader_inplace2(cram_fd *fd, const bam_hdr_t *h, const char *arg_list, + int add_PG) +{ + cram_container *c = NULL; + cram_block *b = NULL; + SAM_hdr *hdr = NULL; + off_t start; + int ret = -1; + + if (cram_major_vers(fd) < 2 || + cram_major_vers(fd) > 3) { + fprintf(stderr, "[%s] unsupported CRAM version %d\n", __func__, + cram_major_vers(fd)); + goto err; + } + + if (!(hdr = sam_hdr_parse_(h->text, h->l_text))) + goto err; + + if (add_PG && sam_hdr_add_PG(hdr, "samtools", "VN", samtools_version(), + arg_list ? "CL": NULL, + arg_list ? arg_list : NULL, + NULL)) + goto err; + + int header_len = sam_hdr_length(hdr); + /* Fix M5 strings? Maybe out of scope for this tool */ + + // Load the existing header + if ((start = hseek(cram_fd_get_fp(fd), 26, SEEK_SET)) != 26) + goto err; + + if (!(c = cram_read_container(fd))) + goto err; + + // Version 2.1 has a single uncompressed block which is nul + // terminated with many nuls to permit growth. + // + // So load old block and keep all contents identical bar the + // header text itself + if (!(b = cram_read_block(fd))) + goto err; + + if (cram_block_get_uncomp_size(b) < header_len+4) { + fprintf(stderr, "New header will not fit. Use non-inplace version (%d > %d)\n", + header_len+4, cram_block_get_uncomp_size(b)); + ret = -2; + goto err; + } + + cram_block_set_offset(b, 0); // rewind block + int32_put_blk(b, header_len); + cram_block_append(b, sam_hdr_str(hdr), header_len); + // Zero the remaining block + memset((char *)cram_block_get_data(b)+cram_block_get_offset(b), 0, + cram_block_get_uncomp_size(b) - cram_block_get_offset(b)); + // Make sure all sizes and byte-offsets are consistent after memset + cram_block_set_offset(b, cram_block_get_uncomp_size(b)); + cram_block_set_comp_size(b, cram_block_get_uncomp_size(b)); + + if (hseek(cram_fd_get_fp(fd), start, SEEK_SET) != start) + goto err; + + if (cram_write_container(fd, c) == -1) + goto err; + + if (cram_write_block(fd, b) == -1) + goto err; + + ret = 0; + err: + if (c) cram_free_container(c); + if (b) cram_free_block(b); + if (hdr) sam_hdr_free(hdr); + + return ret; +} + + +/* + * Reads a version 3 CRAM file and replaces the header in-place, + * provided the header is small enough to fit without growing the + * entire file. + * + * Version 3 format has a SAM header held as an (optionally) + * compressed block within the header container. Additional + * uncompressed blocks or simply unallocated space (the difference + * between total block sizes and the container size) are used to + * provide room for growth or contraction of the compressed header. + * + * Returns 0 on success; + * -1 on general failure; + * -2 on failure due to insufficient size + */ +int cram_reheader_inplace3(cram_fd *fd, const bam_hdr_t *h, const char *arg_list, + int add_PG) +{ + cram_container *c = NULL; + cram_block *b = NULL; + SAM_hdr *hdr = NULL; + off_t start, sz, end; + int container_sz, max_container_sz; + char *buf = NULL; + int ret = -1; + + if (cram_major_vers(fd) < 2 || + cram_major_vers(fd) > 3) { + fprintf(stderr, "[%s] unsupported CRAM version %d\n", __func__, + cram_major_vers(fd)); + goto err; + } + + if (!(hdr = sam_hdr_parse_(h->text, h->l_text))) + goto err; + + if (add_PG && sam_hdr_add_PG(hdr, "samtools", "VN", samtools_version(), + arg_list ? "CL": NULL, + arg_list ? arg_list : NULL, + NULL)) + goto err; + + int header_len = sam_hdr_length(hdr); + /* Fix M5 strings? Maybe out of scope for this tool */ + + // Find current size of SAM header block + if ((start = hseek(cram_fd_get_fp(fd), 26, SEEK_SET)) != 26) + goto err; + + if (!(c = cram_read_container(fd))) + goto err; + + // +5 allows num_landmarks to increase from 0 to 1 (Cramtools) + max_container_sz = cram_container_size(c)+5; + + sz = htell(cram_fd_get_fp(fd)) + cram_container_get_length(c) - start; + end = htell(cram_fd_get_fp(fd)) + cram_container_get_length(c); + + // We force 1 block instead of (optionally) 2. C CRAM + // implementations for v3 were writing 1 compressed block followed + // by 1 uncompressed block. However this is tricky to deal with + // as changing block sizes can mean the block header also changes + // size due to itf8 and variable size integers. + // + // If we had 1 block, this doesn't change anything. + // If we had 2 blocks, the new container header will be smaller by + // 1+ bytes, requiring the cram_container_get_length(c) to be larger in value. + // However this is an int32 instead of itf8 so the container + // header structure stays the same size. This means we can always + // reduce the number of blocks without running into size problems. + cram_container_set_num_blocks(c, 1); + int32_t *landmark; + int32_t num_landmarks; + landmark = cram_container_get_landmarks(c, &num_landmarks); + if (num_landmarks && landmark) { + num_landmarks = 1; + landmark[0] = 0; + } else { + num_landmarks = 0; + } + cram_container_set_landmarks(c, num_landmarks, landmark); + + buf = malloc(max_container_sz); + container_sz = max_container_sz; + if (cram_store_container(fd, c, buf, &container_sz) != 0) + goto err; + + if (!buf) + goto err; + + // Proposed new length, but changing cram_container_get_length(c) may change the + // container_sz and thus the remainder (cram_container_get_length(c) itself). + cram_container_set_length(c, sz - container_sz); + + int old_container_sz = container_sz; + container_sz = max_container_sz; + if (cram_store_container(fd, c, buf, &container_sz) != 0) + goto err; + + if (old_container_sz != container_sz) { + fprintf(stderr, "Quirk of fate makes this troublesome! " + "Please use non-inplace version.\n"); + goto err; + } + + + + // Version 3.0 supports compressed header + b = cram_new_block(FILE_HEADER, 0); + int32_put_blk(b, header_len); + cram_block_append(b, sam_hdr_str(hdr), header_len); + cram_block_update_size(b); + + cram_compress_block(fd, b, NULL, -1, -1); + + if (hseek(cram_fd_get_fp(fd), 26, SEEK_SET) != 26) + goto err; + + if (cram_block_size(b) > cram_container_get_length(c)) { + fprintf(stderr, "New header will not fit. Use non-inplace version" + " (%d > %d)\n", + (int)cram_block_size(b), cram_container_get_length(c)); + ret = -2; + goto err; + } + + if (cram_write_container(fd, c) == -1) + goto err; + + if (cram_write_block(fd, b) == -1) + goto err; + + // Blank out the remainder + int rsz = end - htell(cram_fd_get_fp(fd)); + assert(rsz >= 0); + if (rsz) { + char *rem = calloc(1, rsz); + ret = hwrite(cram_fd_get_fp(fd), rem, rsz) == rsz ? 0 : -1; + free(rem); + } + + err: + if (c) cram_free_container(c); + if (buf) free(buf); + if (b) cram_free_block(b); + if (hdr) sam_hdr_free(hdr); + + return ret; +} + +int cram_reheader_inplace(cram_fd *fd, const bam_hdr_t *h, const char *arg_list, + int add_PG) +{ + switch (cram_major_vers(fd)) { + case 2: return cram_reheader_inplace2(fd, h, arg_list, add_PG); + case 3: return cram_reheader_inplace3(fd, h, arg_list, add_PG); + default: + fprintf(stderr, "[%s] unsupported CRAM version %d\n", __func__, + cram_major_vers(fd)); + return -1; + } +} + +static void usage(FILE *fp, int ret) { + fprintf(fp, + "Usage: samtools reheader [-P] in.header.sam in.bam > out.bam\n" + " or samtools reheader [-P] -i in.header.sam file.bam\n" + "\n" + "Options:\n" + " -P, --no-PG Do not generate an @PG header line.\n" + " -i, --in-place Modify the bam/cram file directly.\n" + " (Defaults to outputting to stdout.)\n"); + exit(ret); +} + +int main_reheader(int argc, char *argv[]) +{ + int inplace = 0, r, add_PG = 1, c; + bam_hdr_t *h; + samFile *in; + char *arg_list = stringify_argv(argc+1, argv-1); + + static const struct option lopts[] = { + {"help", no_argument, NULL, 'h'}, + {"in-place", no_argument, NULL, 'i'}, + {"no-PG", no_argument, NULL, 'P'}, + {NULL, 0, NULL, 0} + }; + + while ((c = getopt_long(argc, argv, "hiP", lopts, NULL)) >= 0) { + switch (c) { + case 'P': add_PG = 0; break; + case 'i': inplace = 1; break; + case 'h': usage(stdout, 0); break; + default: + fprintf(stderr, "Invalid option '%c'\n", c); + usage(stderr, 1); + } + } + + if (argc - optind != 2) + usage(stderr, 1); + + { // read the header + samFile *fph = sam_open(argv[optind], "r"); + if (fph == 0) { + print_error_errno("reheader", "fail to read the header from '%s'", argv[optind]); + return 1; + } + h = sam_hdr_read(fph); + sam_close(fph); + if (h == NULL) { + fprintf(stderr, "[%s] failed to read the header for '%s'.\n", + __func__, argv[1]); + return 1; + } + } + in = sam_open(argv[optind+1], inplace?"r+":"r"); + if (in == 0) { + print_error_errno("reheader", "fail to open file '%s'", argv[optind+1]); + return 1; + } + if (hts_get_format(in)->format == bam) { + r = bam_reheader(in->fp.bgzf, h, fileno(stdout), arg_list, add_PG); + } else { + if (inplace) + r = cram_reheader_inplace(in->fp.cram, h, arg_list, add_PG); + else + r = cram_reheader(in->fp.cram, h, arg_list, add_PG); + } + + if (sam_close(in) != 0) + r = -1; + + bam_hdr_destroy(h); + + if (arg_list) + free(arg_list); + + return -r; +} diff --git a/samtools/bam_reheader.c.pysam.c b/samtools/bam_reheader.c.pysam.c new file mode 100644 index 0000000..4ba6353 --- /dev/null +++ b/samtools/bam_reheader.c.pysam.c @@ -0,0 +1,516 @@ +#include "samtools.pysam.h" + +/* bam_reheader.c -- reheader subcommand. + + Copyright (C) 2010 Broad Institute. + Copyright (C) 2012-2015 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include + +#include "htslib/bgzf.h" +#include "htslib/sam.h" +#include "htslib/hfile.h" +#include "htslib/cram.h" +#include "samtools.h" + +#define BUF_SIZE 0x10000 + +/* + * Reads a file and outputs a new BAM file to fd with 'h' replaced as + * the header. No checks are made to the validity. + */ +int bam_reheader(BGZF *in, bam_hdr_t *h, int fd, + const char *arg_list, int add_PG) +{ + BGZF *fp = NULL; + ssize_t len; + uint8_t *buf = NULL; + SAM_hdr *sh = NULL; + if (in->is_write) return -1; + buf = malloc(BUF_SIZE); + if (!buf) { + fprintf(samtools_stderr, "Out of memory\n"); + return -1; + } + if (bam_hdr_read(in) == NULL) { + fprintf(samtools_stderr, "Couldn't read header\n"); + goto fail; + } + fp = bgzf_fdopen(fd, "w"); + if (!fp) { + print_error_errno("reheader", "Couldn't open output file"); + goto fail; + } + + if (add_PG) { + // Around the houses, but it'll do until we can manipulate bam_hdr_t natively. + sh = sam_hdr_parse_(h->text, h->l_text); + if (!sh) + goto fail; + if (sam_hdr_add_PG(sh, "samtools", + "VN", samtools_version(), + arg_list ? "CL": NULL, + arg_list ? arg_list : NULL, + NULL) != 0) + goto fail; + + free(h->text); + h->text = strdup(sam_hdr_str(sh)); + h->l_text = sam_hdr_length(sh); + if (!h->text) + goto fail; + sam_hdr_free(sh); + sh = NULL; + } + + if (bam_hdr_write(fp, h) < 0) { + print_error_errno("reheader", "Couldn't write header"); + goto fail; + } + if (in->block_offset < in->block_length) { + if (bgzf_write(fp, (char *)in->uncompressed_block + in->block_offset, in->block_length - in->block_offset) < 0) goto write_fail; + if (bgzf_flush(fp) < 0) goto write_fail; + } + while ((len = bgzf_raw_read(in, buf, BUF_SIZE)) > 0) { + if (bgzf_raw_write(fp, buf, len) < 0) goto write_fail; + } + if (len < 0) { + fprintf(samtools_stderr, "[%s] Error reading input file\n", __func__); + goto fail; + } + free(buf); + fp->block_offset = in->block_offset = 0; + if (bgzf_close(fp) < 0) { + fprintf(samtools_stderr, "[%s] Error closing output file\n", __func__); + return -1; + } + return 0; + + write_fail: + print_error_errno("reheader", "Error writing to output file"); + fail: + bgzf_close(fp); + free(buf); + sam_hdr_free(sh); + return -1; +} + +/* + * Reads a file and outputs a new CRAM file to samtools_stdout with 'h' + * replaced as the header. No checks are made to the validity. + * + * FIXME: error checking + */ +int cram_reheader(cram_fd *in, bam_hdr_t *h, const char *arg_list, int add_PG) +{ + htsFile *h_out = hts_open("-", "wc"); + cram_fd *out = h_out->fp.cram; + cram_container *c = NULL; + int ret = -1; + + // Attempt to fill out a cram->refs[] array from @SQ headers + cram_fd_set_header(out, sam_hdr_parse_(h->text, h->l_text)); + if (add_PG) { + if (sam_hdr_add_PG(cram_fd_get_header(out), "samtools", + "VN", samtools_version(), + arg_list ? "CL": NULL, + arg_list ? arg_list : NULL, + NULL) != 0) + goto err; + + // Covert back to bam_hdr_t struct + free(h->text); + h->text = strdup(sam_hdr_str(cram_fd_get_header(out))); + h->l_text = sam_hdr_length(cram_fd_get_header(out)); + if (!h->text) + goto err; + } + + if (sam_hdr_write(h_out, h) != 0) + goto err; + cram_set_option(out, CRAM_OPT_REFERENCE, NULL); + + while ((c = cram_read_container(in))) { + int32_t i, num_blocks = cram_container_get_num_blocks(c); + if (cram_write_container(out, c) != 0) + goto err; + + for (i = 0; i < num_blocks; i++) { + cram_block *blk = cram_read_block(in); + if (!blk || cram_write_block(out, blk) != 0) { + if (blk) cram_free_block(blk); + goto err; + } + cram_free_block(blk); + } + cram_free_container(c); + } + + ret = 0; + + err: + if (hts_close(h_out) != 0) + ret = -1; + + return ret; +} + + + +/* + * Reads a version 2 CRAM file and replaces the header in-place, + * provided the header is small enough to fit without growing the + * entire file. + * + * Version 2 format has an uncompressed SAM header with multiple nul + * termination bytes to permit inline header editing. + * + * Returns 0 on success; + * -1 on general failure; + * -2 on failure due to insufficient size + */ +int cram_reheader_inplace2(cram_fd *fd, const bam_hdr_t *h, const char *arg_list, + int add_PG) +{ + cram_container *c = NULL; + cram_block *b = NULL; + SAM_hdr *hdr = NULL; + off_t start; + int ret = -1; + + if (cram_major_vers(fd) < 2 || + cram_major_vers(fd) > 3) { + fprintf(samtools_stderr, "[%s] unsupported CRAM version %d\n", __func__, + cram_major_vers(fd)); + goto err; + } + + if (!(hdr = sam_hdr_parse_(h->text, h->l_text))) + goto err; + + if (add_PG && sam_hdr_add_PG(hdr, "samtools", "VN", samtools_version(), + arg_list ? "CL": NULL, + arg_list ? arg_list : NULL, + NULL)) + goto err; + + int header_len = sam_hdr_length(hdr); + /* Fix M5 strings? Maybe out of scope for this tool */ + + // Load the existing header + if ((start = hseek(cram_fd_get_fp(fd), 26, SEEK_SET)) != 26) + goto err; + + if (!(c = cram_read_container(fd))) + goto err; + + // Version 2.1 has a single uncompressed block which is nul + // terminated with many nuls to permit growth. + // + // So load old block and keep all contents identical bar the + // header text itself + if (!(b = cram_read_block(fd))) + goto err; + + if (cram_block_get_uncomp_size(b) < header_len+4) { + fprintf(samtools_stderr, "New header will not fit. Use non-inplace version (%d > %d)\n", + header_len+4, cram_block_get_uncomp_size(b)); + ret = -2; + goto err; + } + + cram_block_set_offset(b, 0); // rewind block + int32_put_blk(b, header_len); + cram_block_append(b, sam_hdr_str(hdr), header_len); + // Zero the remaining block + memset((char *)cram_block_get_data(b)+cram_block_get_offset(b), 0, + cram_block_get_uncomp_size(b) - cram_block_get_offset(b)); + // Make sure all sizes and byte-offsets are consistent after memset + cram_block_set_offset(b, cram_block_get_uncomp_size(b)); + cram_block_set_comp_size(b, cram_block_get_uncomp_size(b)); + + if (hseek(cram_fd_get_fp(fd), start, SEEK_SET) != start) + goto err; + + if (cram_write_container(fd, c) == -1) + goto err; + + if (cram_write_block(fd, b) == -1) + goto err; + + ret = 0; + err: + if (c) cram_free_container(c); + if (b) cram_free_block(b); + if (hdr) sam_hdr_free(hdr); + + return ret; +} + + +/* + * Reads a version 3 CRAM file and replaces the header in-place, + * provided the header is small enough to fit without growing the + * entire file. + * + * Version 3 format has a SAM header held as an (optionally) + * compressed block within the header container. Additional + * uncompressed blocks or simply unallocated space (the difference + * between total block sizes and the container size) are used to + * provide room for growth or contraction of the compressed header. + * + * Returns 0 on success; + * -1 on general failure; + * -2 on failure due to insufficient size + */ +int cram_reheader_inplace3(cram_fd *fd, const bam_hdr_t *h, const char *arg_list, + int add_PG) +{ + cram_container *c = NULL; + cram_block *b = NULL; + SAM_hdr *hdr = NULL; + off_t start, sz, end; + int container_sz, max_container_sz; + char *buf = NULL; + int ret = -1; + + if (cram_major_vers(fd) < 2 || + cram_major_vers(fd) > 3) { + fprintf(samtools_stderr, "[%s] unsupported CRAM version %d\n", __func__, + cram_major_vers(fd)); + goto err; + } + + if (!(hdr = sam_hdr_parse_(h->text, h->l_text))) + goto err; + + if (add_PG && sam_hdr_add_PG(hdr, "samtools", "VN", samtools_version(), + arg_list ? "CL": NULL, + arg_list ? arg_list : NULL, + NULL)) + goto err; + + int header_len = sam_hdr_length(hdr); + /* Fix M5 strings? Maybe out of scope for this tool */ + + // Find current size of SAM header block + if ((start = hseek(cram_fd_get_fp(fd), 26, SEEK_SET)) != 26) + goto err; + + if (!(c = cram_read_container(fd))) + goto err; + + // +5 allows num_landmarks to increase from 0 to 1 (Cramtools) + max_container_sz = cram_container_size(c)+5; + + sz = htell(cram_fd_get_fp(fd)) + cram_container_get_length(c) - start; + end = htell(cram_fd_get_fp(fd)) + cram_container_get_length(c); + + // We force 1 block instead of (optionally) 2. C CRAM + // implementations for v3 were writing 1 compressed block followed + // by 1 uncompressed block. However this is tricky to deal with + // as changing block sizes can mean the block header also changes + // size due to itf8 and variable size integers. + // + // If we had 1 block, this doesn't change anything. + // If we had 2 blocks, the new container header will be smaller by + // 1+ bytes, requiring the cram_container_get_length(c) to be larger in value. + // However this is an int32 instead of itf8 so the container + // header structure stays the same size. This means we can always + // reduce the number of blocks without running into size problems. + cram_container_set_num_blocks(c, 1); + int32_t *landmark; + int32_t num_landmarks; + landmark = cram_container_get_landmarks(c, &num_landmarks); + if (num_landmarks && landmark) { + num_landmarks = 1; + landmark[0] = 0; + } else { + num_landmarks = 0; + } + cram_container_set_landmarks(c, num_landmarks, landmark); + + buf = malloc(max_container_sz); + container_sz = max_container_sz; + if (cram_store_container(fd, c, buf, &container_sz) != 0) + goto err; + + if (!buf) + goto err; + + // Proposed new length, but changing cram_container_get_length(c) may change the + // container_sz and thus the remainder (cram_container_get_length(c) itself). + cram_container_set_length(c, sz - container_sz); + + int old_container_sz = container_sz; + container_sz = max_container_sz; + if (cram_store_container(fd, c, buf, &container_sz) != 0) + goto err; + + if (old_container_sz != container_sz) { + fprintf(samtools_stderr, "Quirk of fate makes this troublesome! " + "Please use non-inplace version.\n"); + goto err; + } + + + + // Version 3.0 supports compressed header + b = cram_new_block(FILE_HEADER, 0); + int32_put_blk(b, header_len); + cram_block_append(b, sam_hdr_str(hdr), header_len); + cram_block_update_size(b); + + cram_compress_block(fd, b, NULL, -1, -1); + + if (hseek(cram_fd_get_fp(fd), 26, SEEK_SET) != 26) + goto err; + + if (cram_block_size(b) > cram_container_get_length(c)) { + fprintf(samtools_stderr, "New header will not fit. Use non-inplace version" + " (%d > %d)\n", + (int)cram_block_size(b), cram_container_get_length(c)); + ret = -2; + goto err; + } + + if (cram_write_container(fd, c) == -1) + goto err; + + if (cram_write_block(fd, b) == -1) + goto err; + + // Blank out the remainder + int rsz = end - htell(cram_fd_get_fp(fd)); + assert(rsz >= 0); + if (rsz) { + char *rem = calloc(1, rsz); + ret = hwrite(cram_fd_get_fp(fd), rem, rsz) == rsz ? 0 : -1; + free(rem); + } + + err: + if (c) cram_free_container(c); + if (buf) free(buf); + if (b) cram_free_block(b); + if (hdr) sam_hdr_free(hdr); + + return ret; +} + +int cram_reheader_inplace(cram_fd *fd, const bam_hdr_t *h, const char *arg_list, + int add_PG) +{ + switch (cram_major_vers(fd)) { + case 2: return cram_reheader_inplace2(fd, h, arg_list, add_PG); + case 3: return cram_reheader_inplace3(fd, h, arg_list, add_PG); + default: + fprintf(samtools_stderr, "[%s] unsupported CRAM version %d\n", __func__, + cram_major_vers(fd)); + return -1; + } +} + +static void usage(FILE *fp, int ret) { + fprintf(fp, + "Usage: samtools reheader [-P] in.header.sam in.bam > out.bam\n" + " or samtools reheader [-P] -i in.header.sam file.bam\n" + "\n" + "Options:\n" + " -P, --no-PG Do not generate an @PG header line.\n" + " -i, --in-place Modify the bam/cram file directly.\n" + " (Defaults to outputting to samtools_stdout.)\n"); + exit(ret); +} + +int main_reheader(int argc, char *argv[]) +{ + int inplace = 0, r, add_PG = 1, c; + bam_hdr_t *h; + samFile *in; + char *arg_list = stringify_argv(argc+1, argv-1); + + static const struct option lopts[] = { + {"help", no_argument, NULL, 'h'}, + {"in-place", no_argument, NULL, 'i'}, + {"no-PG", no_argument, NULL, 'P'}, + {NULL, 0, NULL, 0} + }; + + while ((c = getopt_long(argc, argv, "hiP", lopts, NULL)) >= 0) { + switch (c) { + case 'P': add_PG = 0; break; + case 'i': inplace = 1; break; + case 'h': usage(samtools_stdout, 0); break; + default: + fprintf(samtools_stderr, "Invalid option '%c'\n", c); + usage(samtools_stderr, 1); + } + } + + if (argc - optind != 2) + usage(samtools_stderr, 1); + + { // read the header + samFile *fph = sam_open(argv[optind], "r"); + if (fph == 0) { + print_error_errno("reheader", "fail to read the header from '%s'", argv[optind]); + return 1; + } + h = sam_hdr_read(fph); + sam_close(fph); + if (h == NULL) { + fprintf(samtools_stderr, "[%s] failed to read the header for '%s'.\n", + __func__, argv[1]); + return 1; + } + } + in = sam_open(argv[optind+1], inplace?"r+":"r"); + if (in == 0) { + print_error_errno("reheader", "fail to open file '%s'", argv[optind+1]); + return 1; + } + if (hts_get_format(in)->format == bam) { + r = bam_reheader(in->fp.bgzf, h, fileno(samtools_stdout), arg_list, add_PG); + } else { + if (inplace) + r = cram_reheader_inplace(in->fp.cram, h, arg_list, add_PG); + else + r = cram_reheader(in->fp.cram, h, arg_list, add_PG); + } + + if (sam_close(in) != 0) + r = -1; + + bam_hdr_destroy(h); + + if (arg_list) + free(arg_list); + + return -r; +} diff --git a/samtools/bam_rmdup.c b/samtools/bam_rmdup.c new file mode 100644 index 0000000..513848d --- /dev/null +++ b/samtools/bam_rmdup.c @@ -0,0 +1,322 @@ +/* bam_rmdup.c -- duplicate read detection. + + Copyright (C) 2009, 2015 Genome Research Ltd. + Portions copyright (C) 2009 Broad Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include "htslib/sam.h" +#include "sam_opts.h" +#include "samtools.h" +#include "bam.h" // for bam_get_library + +typedef bam1_t *bam1_p; + +#include "htslib/khash.h" +KHASH_SET_INIT_STR(name) +KHASH_MAP_INIT_INT64(pos, bam1_p) + +#define BUFFER_SIZE 0x40000 + +typedef struct { + uint64_t n_checked, n_removed; + khash_t(pos) *best_hash; +} lib_aux_t; +KHASH_MAP_INIT_STR(lib, lib_aux_t) + +typedef struct { + int n, max; + bam1_t **a; +} tmp_stack_t; + +static inline void stack_insert(tmp_stack_t *stack, bam1_t *b) +{ + if (stack->n == stack->max) { + stack->max = stack->max? stack->max<<1 : 0x10000; + stack->a = (bam1_t**)realloc(stack->a, sizeof(bam1_t*) * stack->max); + } + stack->a[stack->n++] = b; +} + +static inline int dump_best(tmp_stack_t *stack, samFile *out, bam_hdr_t *hdr) +{ + int i; + for (i = 0; i != stack->n; ++i) { + if (sam_write1(out, hdr, stack->a[i]) < 0) return -1; + bam_destroy1(stack->a[i]); + stack->a[i] = NULL; + } + stack->n = 0; + return 0; +} + +static inline void clear_stack(tmp_stack_t *stack) { + int i; + if (!stack->a) return; + for (i = 0; i != stack->n; ++i) { + bam_destroy1(stack->a[i]); + } +} + +static void clear_del_set(khash_t(name) *del_set) +{ + khint_t k; + for (k = kh_begin(del_set); k < kh_end(del_set); ++k) + if (kh_exist(del_set, k)) + free((char*)kh_key(del_set, k)); + kh_clear(name, del_set); +} + +static lib_aux_t *get_aux(khash_t(lib) *aux, const char *lib) +{ + khint_t k = kh_get(lib, aux, lib); + if (k == kh_end(aux)) { + int ret; + char *p = strdup(lib); + lib_aux_t *q; + k = kh_put(lib, aux, p, &ret); + q = &kh_val(aux, k); + q->n_checked = q->n_removed = 0; + q->best_hash = kh_init(pos); + return q; + } else return &kh_val(aux, k); +} + +static void clear_best(khash_t(lib) *aux, int max) +{ + khint_t k; + for (k = kh_begin(aux); k != kh_end(aux); ++k) { + if (kh_exist(aux, k)) { + lib_aux_t *q = &kh_val(aux, k); + if (kh_size(q->best_hash) >= max) + kh_clear(pos, q->best_hash); + } + } +} + +static inline int sum_qual(const bam1_t *b) +{ + int i, q; + uint8_t *qual = bam_get_qual(b); + for (i = q = 0; i < b->core.l_qseq; ++i) q += qual[i]; + return q; +} + +int bam_rmdup_core(samFile *in, bam_hdr_t *hdr, samFile *out) +{ + bam1_t *b = NULL; + int last_tid = -1, last_pos = -1, r; + tmp_stack_t stack; + khint_t k; + khash_t(lib) *aux = NULL; + khash_t(name) *del_set = NULL; + + memset(&stack, 0, sizeof(tmp_stack_t)); + aux = kh_init(lib); + del_set = kh_init(name); + b = bam_init1(); + if (!aux || !del_set || !b) { + perror(__func__); + goto fail; + } + + kh_resize(name, del_set, 4 * BUFFER_SIZE); + while ((r = sam_read1(in, hdr, b)) >= 0) { + bam1_core_t *c = &b->core; + if (c->tid != last_tid || last_pos != c->pos) { + if (dump_best(&stack, out, hdr) < 0) goto write_fail; // write the result + clear_best(aux, BUFFER_SIZE); + if (c->tid != last_tid) { + clear_best(aux, 0); + if (kh_size(del_set)) { // check + fprintf(stderr, "[bam_rmdup_core] %llu unmatched pairs\n", (long long)kh_size(del_set)); + clear_del_set(del_set); + } + if ((int)c->tid == -1) { // append unmapped reads + if (sam_write1(out, hdr, b) < 0) goto write_fail; + while ((r = sam_read1(in, hdr, b)) >= 0) { + if (sam_write1(out, hdr, b) < 0) goto write_fail; + } + break; + } + last_tid = c->tid; + fprintf(stderr, "[bam_rmdup_core] processing reference %s...\n", hdr->target_name[c->tid]); + } + } + if (!(c->flag&BAM_FPAIRED) || (c->flag&(BAM_FUNMAP|BAM_FMUNMAP)) || (c->mtid >= 0 && c->tid != c->mtid)) { + if (sam_write1(out, hdr, b) < 0) goto write_fail; + } else if (c->isize > 0) { // paired, head + uint64_t key = (uint64_t)c->pos<<32 | c->isize; + const char *lib; + lib_aux_t *q; + int ret; + lib = bam_get_library(hdr, b); + q = lib? get_aux(aux, lib) : get_aux(aux, "\t"); + ++q->n_checked; + k = kh_put(pos, q->best_hash, key, &ret); + if (ret == 0) { // found in best_hash + bam1_t *p = kh_val(q->best_hash, k); + ++q->n_removed; + if (sum_qual(p) < sum_qual(b)) { // the current alignment is better; this can be accelerated in principle + kh_put(name, del_set, strdup(bam_get_qname(p)), &ret); // p will be removed + bam_copy1(p, b); // replaced as b + } else kh_put(name, del_set, strdup(bam_get_qname(b)), &ret); // b will be removed + if (ret == 0) + fprintf(stderr, "[bam_rmdup_core] inconsistent BAM file for pair '%s'. Continue anyway.\n", bam_get_qname(b)); + } else { // not found in best_hash + kh_val(q->best_hash, k) = bam_dup1(b); + stack_insert(&stack, kh_val(q->best_hash, k)); + } + } else { // paired, tail + k = kh_get(name, del_set, bam_get_qname(b)); + if (k != kh_end(del_set)) { + free((char*)kh_key(del_set, k)); + kh_del(name, del_set, k); + } else { + if (sam_write1(out, hdr, b) < 0) goto write_fail; + } + } + last_pos = c->pos; + } + if (r < -1) { + fprintf(stderr, "[%s] failed to read input file\n", __func__); + goto fail; + } + + for (k = kh_begin(aux); k != kh_end(aux); ++k) { + if (kh_exist(aux, k)) { + lib_aux_t *q = &kh_val(aux, k); + if (dump_best(&stack, out, hdr) < 0) goto write_fail; + fprintf(stderr, "[bam_rmdup_core] %lld / %lld = %.4lf in library '%s'\n", (long long)q->n_removed, + (long long)q->n_checked, (double)q->n_removed/q->n_checked, kh_key(aux, k)); + kh_destroy(pos, q->best_hash); + free((char*)kh_key(aux, k)); + kh_del(lib, aux, k); + } + } + kh_destroy(lib, aux); + + clear_del_set(del_set); + kh_destroy(name, del_set); + free(stack.a); + bam_destroy1(b); + return 0; + + write_fail: + print_error_errno("rmdup", "failed to write record"); + fail: + clear_stack(&stack); + free(stack.a); + if (aux) { + for (k = kh_begin(aux); k != kh_end(aux); ++k) { + if (kh_exist(aux, k)) { + lib_aux_t *q = &kh_val(aux, k); + kh_destroy(pos, q->best_hash); + free((char*)kh_key(aux, k)); + } + } + kh_destroy(lib, aux); + } + if (del_set) { + clear_del_set(del_set); + kh_destroy(name, del_set); + } + bam_destroy1(b); + return 1; +} + +int bam_rmdupse_core(samFile *in, bam_hdr_t *hdr, samFile *out, int force_se); + +static int rmdup_usage(void) { + fprintf(stderr, "\n"); + fprintf(stderr, "Usage: samtools rmdup [-sS] \n\n"); + fprintf(stderr, "Option: -s rmdup for SE reads\n"); + fprintf(stderr, " -S treat PE reads as SE in rmdup (force -s)\n"); + + sam_global_opt_help(stderr, "-....-"); + return 1; +} + +int bam_rmdup(int argc, char *argv[]) +{ + int c, ret, is_se = 0, force_se = 0; + samFile *in, *out; + bam_hdr_t *header; + char wmode[3] = {'w', 'b', 0}; + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, 0, 0, 0, '-'), + { NULL, 0, NULL, 0 } + }; + + while ((c = getopt_long(argc, argv, "sS", lopts, NULL)) >= 0) { + switch (c) { + case 's': is_se = 1; break; + case 'S': force_se = is_se = 1; break; + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + /* else fall-through */ + case '?': return rmdup_usage(); + } + } + if (optind + 2 > argc) + return rmdup_usage(); + + in = sam_open_format(argv[optind], "r", &ga.in); + if (!in) { + print_error_errno("rmdup", "failed to open \"%s\" for input", argv[optind]); + return 1; + } + header = sam_hdr_read(in); + if (header == NULL || header->n_targets == 0) { + fprintf(stderr, "[bam_rmdup] input SAM does not have header. Abort!\n"); + return 1; + } + + sam_open_mode(wmode+1, argv[optind+1], NULL); + out = sam_open_format(argv[optind+1], wmode, &ga.out); + if (!out) { + print_error_errno("rmdup", "failed to open \"%s\" for output", argv[optind+1]); + return 1; + } + if (sam_hdr_write(out, header) < 0) { + print_error_errno("rmdup", "failed to write header"); + return 1; + } + + if (is_se) ret = bam_rmdupse_core(in, header, out, force_se); + else ret = bam_rmdup_core(in, header, out); + + bam_hdr_destroy(header); + sam_close(in); + if (sam_close(out) < 0) { + fprintf(stderr, "[bam_rmdup] error closing output file\n"); + ret = 1; + } + return ret; +} diff --git a/samtools/bam_rmdup.c.pysam.c b/samtools/bam_rmdup.c.pysam.c new file mode 100644 index 0000000..64326de --- /dev/null +++ b/samtools/bam_rmdup.c.pysam.c @@ -0,0 +1,324 @@ +#include "samtools.pysam.h" + +/* bam_rmdup.c -- duplicate read detection. + + Copyright (C) 2009, 2015 Genome Research Ltd. + Portions copyright (C) 2009 Broad Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include "htslib/sam.h" +#include "sam_opts.h" +#include "samtools.h" +#include "bam.h" // for bam_get_library + +typedef bam1_t *bam1_p; + +#include "htslib/khash.h" +KHASH_SET_INIT_STR(name) +KHASH_MAP_INIT_INT64(pos, bam1_p) + +#define BUFFER_SIZE 0x40000 + +typedef struct { + uint64_t n_checked, n_removed; + khash_t(pos) *best_hash; +} lib_aux_t; +KHASH_MAP_INIT_STR(lib, lib_aux_t) + +typedef struct { + int n, max; + bam1_t **a; +} tmp_stack_t; + +static inline void stack_insert(tmp_stack_t *stack, bam1_t *b) +{ + if (stack->n == stack->max) { + stack->max = stack->max? stack->max<<1 : 0x10000; + stack->a = (bam1_t**)realloc(stack->a, sizeof(bam1_t*) * stack->max); + } + stack->a[stack->n++] = b; +} + +static inline int dump_best(tmp_stack_t *stack, samFile *out, bam_hdr_t *hdr) +{ + int i; + for (i = 0; i != stack->n; ++i) { + if (sam_write1(out, hdr, stack->a[i]) < 0) return -1; + bam_destroy1(stack->a[i]); + stack->a[i] = NULL; + } + stack->n = 0; + return 0; +} + +static inline void clear_stack(tmp_stack_t *stack) { + int i; + if (!stack->a) return; + for (i = 0; i != stack->n; ++i) { + bam_destroy1(stack->a[i]); + } +} + +static void clear_del_set(khash_t(name) *del_set) +{ + khint_t k; + for (k = kh_begin(del_set); k < kh_end(del_set); ++k) + if (kh_exist(del_set, k)) + free((char*)kh_key(del_set, k)); + kh_clear(name, del_set); +} + +static lib_aux_t *get_aux(khash_t(lib) *aux, const char *lib) +{ + khint_t k = kh_get(lib, aux, lib); + if (k == kh_end(aux)) { + int ret; + char *p = strdup(lib); + lib_aux_t *q; + k = kh_put(lib, aux, p, &ret); + q = &kh_val(aux, k); + q->n_checked = q->n_removed = 0; + q->best_hash = kh_init(pos); + return q; + } else return &kh_val(aux, k); +} + +static void clear_best(khash_t(lib) *aux, int max) +{ + khint_t k; + for (k = kh_begin(aux); k != kh_end(aux); ++k) { + if (kh_exist(aux, k)) { + lib_aux_t *q = &kh_val(aux, k); + if (kh_size(q->best_hash) >= max) + kh_clear(pos, q->best_hash); + } + } +} + +static inline int sum_qual(const bam1_t *b) +{ + int i, q; + uint8_t *qual = bam_get_qual(b); + for (i = q = 0; i < b->core.l_qseq; ++i) q += qual[i]; + return q; +} + +int bam_rmdup_core(samFile *in, bam_hdr_t *hdr, samFile *out) +{ + bam1_t *b = NULL; + int last_tid = -1, last_pos = -1, r; + tmp_stack_t stack; + khint_t k; + khash_t(lib) *aux = NULL; + khash_t(name) *del_set = NULL; + + memset(&stack, 0, sizeof(tmp_stack_t)); + aux = kh_init(lib); + del_set = kh_init(name); + b = bam_init1(); + if (!aux || !del_set || !b) { + perror(__func__); + goto fail; + } + + kh_resize(name, del_set, 4 * BUFFER_SIZE); + while ((r = sam_read1(in, hdr, b)) >= 0) { + bam1_core_t *c = &b->core; + if (c->tid != last_tid || last_pos != c->pos) { + if (dump_best(&stack, out, hdr) < 0) goto write_fail; // write the result + clear_best(aux, BUFFER_SIZE); + if (c->tid != last_tid) { + clear_best(aux, 0); + if (kh_size(del_set)) { // check + fprintf(samtools_stderr, "[bam_rmdup_core] %llu unmatched pairs\n", (long long)kh_size(del_set)); + clear_del_set(del_set); + } + if ((int)c->tid == -1) { // append unmapped reads + if (sam_write1(out, hdr, b) < 0) goto write_fail; + while ((r = sam_read1(in, hdr, b)) >= 0) { + if (sam_write1(out, hdr, b) < 0) goto write_fail; + } + break; + } + last_tid = c->tid; + fprintf(samtools_stderr, "[bam_rmdup_core] processing reference %s...\n", hdr->target_name[c->tid]); + } + } + if (!(c->flag&BAM_FPAIRED) || (c->flag&(BAM_FUNMAP|BAM_FMUNMAP)) || (c->mtid >= 0 && c->tid != c->mtid)) { + if (sam_write1(out, hdr, b) < 0) goto write_fail; + } else if (c->isize > 0) { // paired, head + uint64_t key = (uint64_t)c->pos<<32 | c->isize; + const char *lib; + lib_aux_t *q; + int ret; + lib = bam_get_library(hdr, b); + q = lib? get_aux(aux, lib) : get_aux(aux, "\t"); + ++q->n_checked; + k = kh_put(pos, q->best_hash, key, &ret); + if (ret == 0) { // found in best_hash + bam1_t *p = kh_val(q->best_hash, k); + ++q->n_removed; + if (sum_qual(p) < sum_qual(b)) { // the current alignment is better; this can be accelerated in principle + kh_put(name, del_set, strdup(bam_get_qname(p)), &ret); // p will be removed + bam_copy1(p, b); // replaced as b + } else kh_put(name, del_set, strdup(bam_get_qname(b)), &ret); // b will be removed + if (ret == 0) + fprintf(samtools_stderr, "[bam_rmdup_core] inconsistent BAM file for pair '%s'. Continue anyway.\n", bam_get_qname(b)); + } else { // not found in best_hash + kh_val(q->best_hash, k) = bam_dup1(b); + stack_insert(&stack, kh_val(q->best_hash, k)); + } + } else { // paired, tail + k = kh_get(name, del_set, bam_get_qname(b)); + if (k != kh_end(del_set)) { + free((char*)kh_key(del_set, k)); + kh_del(name, del_set, k); + } else { + if (sam_write1(out, hdr, b) < 0) goto write_fail; + } + } + last_pos = c->pos; + } + if (r < -1) { + fprintf(samtools_stderr, "[%s] failed to read input file\n", __func__); + goto fail; + } + + for (k = kh_begin(aux); k != kh_end(aux); ++k) { + if (kh_exist(aux, k)) { + lib_aux_t *q = &kh_val(aux, k); + if (dump_best(&stack, out, hdr) < 0) goto write_fail; + fprintf(samtools_stderr, "[bam_rmdup_core] %lld / %lld = %.4lf in library '%s'\n", (long long)q->n_removed, + (long long)q->n_checked, (double)q->n_removed/q->n_checked, kh_key(aux, k)); + kh_destroy(pos, q->best_hash); + free((char*)kh_key(aux, k)); + kh_del(lib, aux, k); + } + } + kh_destroy(lib, aux); + + clear_del_set(del_set); + kh_destroy(name, del_set); + free(stack.a); + bam_destroy1(b); + return 0; + + write_fail: + print_error_errno("rmdup", "failed to write record"); + fail: + clear_stack(&stack); + free(stack.a); + if (aux) { + for (k = kh_begin(aux); k != kh_end(aux); ++k) { + if (kh_exist(aux, k)) { + lib_aux_t *q = &kh_val(aux, k); + kh_destroy(pos, q->best_hash); + free((char*)kh_key(aux, k)); + } + } + kh_destroy(lib, aux); + } + if (del_set) { + clear_del_set(del_set); + kh_destroy(name, del_set); + } + bam_destroy1(b); + return 1; +} + +int bam_rmdupse_core(samFile *in, bam_hdr_t *hdr, samFile *out, int force_se); + +static int rmdup_usage(void) { + fprintf(samtools_stderr, "\n"); + fprintf(samtools_stderr, "Usage: samtools rmdup [-sS] \n\n"); + fprintf(samtools_stderr, "Option: -s rmdup for SE reads\n"); + fprintf(samtools_stderr, " -S treat PE reads as SE in rmdup (force -s)\n"); + + sam_global_opt_help(samtools_stderr, "-....-"); + return 1; +} + +int bam_rmdup(int argc, char *argv[]) +{ + int c, ret, is_se = 0, force_se = 0; + samFile *in, *out; + bam_hdr_t *header; + char wmode[3] = {'w', 'b', 0}; + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, 0, 0, 0, '-'), + { NULL, 0, NULL, 0 } + }; + + while ((c = getopt_long(argc, argv, "sS", lopts, NULL)) >= 0) { + switch (c) { + case 's': is_se = 1; break; + case 'S': force_se = is_se = 1; break; + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + /* else fall-through */ + case '?': return rmdup_usage(); + } + } + if (optind + 2 > argc) + return rmdup_usage(); + + in = sam_open_format(argv[optind], "r", &ga.in); + if (!in) { + print_error_errno("rmdup", "failed to open \"%s\" for input", argv[optind]); + return 1; + } + header = sam_hdr_read(in); + if (header == NULL || header->n_targets == 0) { + fprintf(samtools_stderr, "[bam_rmdup] input SAM does not have header. Abort!\n"); + return 1; + } + + sam_open_mode(wmode+1, argv[optind+1], NULL); + out = sam_open_format(argv[optind+1], wmode, &ga.out); + if (!out) { + print_error_errno("rmdup", "failed to open \"%s\" for output", argv[optind+1]); + return 1; + } + if (sam_hdr_write(out, header) < 0) { + print_error_errno("rmdup", "failed to write header"); + return 1; + } + + if (is_se) ret = bam_rmdupse_core(in, header, out, force_se); + else ret = bam_rmdup_core(in, header, out); + + bam_hdr_destroy(header); + sam_close(in); + if (sam_close(out) < 0) { + fprintf(samtools_stderr, "[bam_rmdup] error closing output file\n"); + ret = 1; + } + return ret; +} diff --git a/samtools/bam_rmdupse.c b/samtools/bam_rmdupse.c new file mode 100644 index 0000000..f6baef0 --- /dev/null +++ b/samtools/bam_rmdupse.c @@ -0,0 +1,227 @@ +/* bam_rmdupse.c -- duplicate read detection for unpaired reads. + + Copyright (C) 2009, 2015 Genome Research Ltd. + Portions copyright (C) 2009 Broad Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include "bam.h" // for bam_get_library +#include "htslib/sam.h" +#include "htslib/khash.h" +#include "htslib/klist.h" +#include "samtools.h" + +#define QUEUE_CLEAR_SIZE 0x100000 +#define MAX_POS 0x7fffffff + +typedef struct { + int endpos; + uint32_t score:31, discarded:1; + bam1_t *b; +} elem_t, *elem_p; +#define __free_elem(p) bam_destroy1((p)->data.b) +KLIST_INIT(q, elem_t, __free_elem) +typedef klist_t(q) queue_t; + +KHASH_MAP_INIT_INT(best, elem_p) +typedef khash_t(best) besthash_t; + +typedef struct { + uint64_t n_checked, n_removed; + besthash_t *left, *rght; +} lib_aux_t; +KHASH_MAP_INIT_STR(lib, lib_aux_t) + +static lib_aux_t *get_aux(khash_t(lib) *aux, const char *lib) +{ + khint_t k = kh_get(lib, aux, lib); + if (k == kh_end(aux)) { + int ret; + char *p = strdup(lib); + lib_aux_t *q; + k = kh_put(lib, aux, p, &ret); + q = &kh_val(aux, k); + q->left = kh_init(best); + q->rght = kh_init(best); + q->n_checked = q->n_removed = 0; + return q; + } else return &kh_val(aux, k); +} + +static inline int sum_qual(const bam1_t *b) +{ + int i, q; + uint8_t *qual = bam_get_qual(b); + for (i = q = 0; i < b->core.l_qseq; ++i) q += qual[i]; + return q; +} + +static inline elem_t *push_queue(queue_t *queue, const bam1_t *b, int endpos, int score) +{ + elem_t *p = kl_pushp(q, queue); + p->discarded = 0; + p->endpos = endpos; p->score = score; + if (p->b == 0) p->b = bam_init1(); + bam_copy1(p->b, b); + return p; +} + +static void clear_besthash(besthash_t *h, int32_t pos) +{ + khint_t k; + for (k = kh_begin(h); k != kh_end(h); ++k) + if (kh_exist(h, k) && kh_val(h, k)->endpos <= pos) + kh_del(best, h, k); +} + +static int dump_alignment(samFile *out, bam_hdr_t *hdr, + queue_t *queue, int32_t pos, khash_t(lib) *h) +{ + if (queue->size > QUEUE_CLEAR_SIZE || pos == MAX_POS) { + khint_t k; + while (1) { + elem_t *q; + if (queue->head == queue->tail) break; + q = &kl_val(queue->head); + if (q->discarded) { + q->b->l_data = 0; + kl_shift(q, queue, 0); + continue; + } + if ((q->b->core.flag&BAM_FREVERSE) && q->endpos > pos) break; + if (sam_write1(out, hdr, q->b) < 0) return -1; + q->b->l_data = 0; + kl_shift(q, queue, 0); + } + for (k = kh_begin(h); k != kh_end(h); ++k) { + if (kh_exist(h, k)) { + clear_besthash(kh_val(h, k).left, pos); + clear_besthash(kh_val(h, k).rght, pos); + } + } + } + return 0; +} + +int bam_rmdupse_core(samFile *in, bam_hdr_t *hdr, samFile *out, int force_se) +{ + bam1_t *b = NULL; + queue_t *queue = NULL; + khint_t k; + int last_tid = -2, r; + khash_t(lib) *aux = NULL; + + aux = kh_init(lib); + b = bam_init1(); + queue = kl_init(q); + if (!aux || !b || !queue) { + perror(__func__); + goto fail; + } + + while ((r = sam_read1(in, hdr, b)) >= 0) { + bam1_core_t *c = &b->core; + int endpos = bam_endpos(b); + int score = sum_qual(b); + + if (last_tid != c->tid) { + if (last_tid >= 0) { + if (dump_alignment(out, hdr, queue, MAX_POS, aux) < 0) + goto write_fail; + } + last_tid = c->tid; + } else { + if (dump_alignment(out, hdr, queue, c->pos, aux) < 0) + goto write_fail; + } + if ((c->flag&BAM_FUNMAP) || ((c->flag&BAM_FPAIRED) && !force_se)) { + push_queue(queue, b, endpos, score); + } else { + const char *lib; + lib_aux_t *q; + besthash_t *h; + uint32_t key; + int ret; + lib = bam_get_library(hdr, b); + q = lib? get_aux(aux, lib) : get_aux(aux, "\t"); + ++q->n_checked; + h = (c->flag&BAM_FREVERSE)? q->rght : q->left; + key = (c->flag&BAM_FREVERSE)? endpos : c->pos; + k = kh_put(best, h, key, &ret); + if (ret == 0) { // in the hash table + elem_t *p = kh_val(h, k); + ++q->n_removed; + if (p->score < score) { + if (c->flag&BAM_FREVERSE) { // mark "discarded" and push the queue + p->discarded = 1; + kh_val(h, k) = push_queue(queue, b, endpos, score); + } else { // replace + p->score = score; p->endpos = endpos; + bam_copy1(p->b, b); + } + } // otherwise, discard the alignment + } else kh_val(h, k) = push_queue(queue, b, endpos, score); + } + } + if (r < -1) { + fprintf(stderr, "[%s] error reading input file\n", __func__); + goto fail; + } + + if (dump_alignment(out, hdr, queue, MAX_POS, aux) < 0) goto write_fail; + + for (k = kh_begin(aux); k != kh_end(aux); ++k) { + if (kh_exist(aux, k)) { + lib_aux_t *q = &kh_val(aux, k); + fprintf(stderr, "[bam_rmdupse_core] %lld / %lld = %.4lf in library '%s'\n", (long long)q->n_removed, + (long long)q->n_checked, (double)q->n_removed/q->n_checked, kh_key(aux, k)); + kh_destroy(best, q->left); kh_destroy(best, q->rght); + free((char*)kh_key(aux, k)); + kh_del(lib, aux, k); + } + } + kh_destroy(lib, aux); + bam_destroy1(b); + kl_destroy(q, queue); + return 0; + + write_fail: + print_error_errno("rmdup", "failed to write record"); + fail: + if (aux) { + for (k = kh_begin(aux); k != kh_end(aux); ++k) { + if (kh_exist(aux, k)) { + lib_aux_t *q = &kh_val(aux, k); + kh_destroy(best, q->left); + kh_destroy(best, q->rght); + free((char*)kh_key(aux, k)); + } + } + kh_destroy(lib, aux); + } + bam_destroy1(b); + kl_destroy(q, queue); + return 1; +} diff --git a/samtools/bam_rmdupse.c.pysam.c b/samtools/bam_rmdupse.c.pysam.c new file mode 100644 index 0000000..2038dbf --- /dev/null +++ b/samtools/bam_rmdupse.c.pysam.c @@ -0,0 +1,229 @@ +#include "samtools.pysam.h" + +/* bam_rmdupse.c -- duplicate read detection for unpaired reads. + + Copyright (C) 2009, 2015 Genome Research Ltd. + Portions copyright (C) 2009 Broad Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include "bam.h" // for bam_get_library +#include "htslib/sam.h" +#include "htslib/khash.h" +#include "htslib/klist.h" +#include "samtools.h" + +#define QUEUE_CLEAR_SIZE 0x100000 +#define MAX_POS 0x7fffffff + +typedef struct { + int endpos; + uint32_t score:31, discarded:1; + bam1_t *b; +} elem_t, *elem_p; +#define __free_elem(p) bam_destroy1((p)->data.b) +KLIST_INIT(q, elem_t, __free_elem) +typedef klist_t(q) queue_t; + +KHASH_MAP_INIT_INT(best, elem_p) +typedef khash_t(best) besthash_t; + +typedef struct { + uint64_t n_checked, n_removed; + besthash_t *left, *rght; +} lib_aux_t; +KHASH_MAP_INIT_STR(lib, lib_aux_t) + +static lib_aux_t *get_aux(khash_t(lib) *aux, const char *lib) +{ + khint_t k = kh_get(lib, aux, lib); + if (k == kh_end(aux)) { + int ret; + char *p = strdup(lib); + lib_aux_t *q; + k = kh_put(lib, aux, p, &ret); + q = &kh_val(aux, k); + q->left = kh_init(best); + q->rght = kh_init(best); + q->n_checked = q->n_removed = 0; + return q; + } else return &kh_val(aux, k); +} + +static inline int sum_qual(const bam1_t *b) +{ + int i, q; + uint8_t *qual = bam_get_qual(b); + for (i = q = 0; i < b->core.l_qseq; ++i) q += qual[i]; + return q; +} + +static inline elem_t *push_queue(queue_t *queue, const bam1_t *b, int endpos, int score) +{ + elem_t *p = kl_pushp(q, queue); + p->discarded = 0; + p->endpos = endpos; p->score = score; + if (p->b == 0) p->b = bam_init1(); + bam_copy1(p->b, b); + return p; +} + +static void clear_besthash(besthash_t *h, int32_t pos) +{ + khint_t k; + for (k = kh_begin(h); k != kh_end(h); ++k) + if (kh_exist(h, k) && kh_val(h, k)->endpos <= pos) + kh_del(best, h, k); +} + +static int dump_alignment(samFile *out, bam_hdr_t *hdr, + queue_t *queue, int32_t pos, khash_t(lib) *h) +{ + if (queue->size > QUEUE_CLEAR_SIZE || pos == MAX_POS) { + khint_t k; + while (1) { + elem_t *q; + if (queue->head == queue->tail) break; + q = &kl_val(queue->head); + if (q->discarded) { + q->b->l_data = 0; + kl_shift(q, queue, 0); + continue; + } + if ((q->b->core.flag&BAM_FREVERSE) && q->endpos > pos) break; + if (sam_write1(out, hdr, q->b) < 0) return -1; + q->b->l_data = 0; + kl_shift(q, queue, 0); + } + for (k = kh_begin(h); k != kh_end(h); ++k) { + if (kh_exist(h, k)) { + clear_besthash(kh_val(h, k).left, pos); + clear_besthash(kh_val(h, k).rght, pos); + } + } + } + return 0; +} + +int bam_rmdupse_core(samFile *in, bam_hdr_t *hdr, samFile *out, int force_se) +{ + bam1_t *b = NULL; + queue_t *queue = NULL; + khint_t k; + int last_tid = -2, r; + khash_t(lib) *aux = NULL; + + aux = kh_init(lib); + b = bam_init1(); + queue = kl_init(q); + if (!aux || !b || !queue) { + perror(__func__); + goto fail; + } + + while ((r = sam_read1(in, hdr, b)) >= 0) { + bam1_core_t *c = &b->core; + int endpos = bam_endpos(b); + int score = sum_qual(b); + + if (last_tid != c->tid) { + if (last_tid >= 0) { + if (dump_alignment(out, hdr, queue, MAX_POS, aux) < 0) + goto write_fail; + } + last_tid = c->tid; + } else { + if (dump_alignment(out, hdr, queue, c->pos, aux) < 0) + goto write_fail; + } + if ((c->flag&BAM_FUNMAP) || ((c->flag&BAM_FPAIRED) && !force_se)) { + push_queue(queue, b, endpos, score); + } else { + const char *lib; + lib_aux_t *q; + besthash_t *h; + uint32_t key; + int ret; + lib = bam_get_library(hdr, b); + q = lib? get_aux(aux, lib) : get_aux(aux, "\t"); + ++q->n_checked; + h = (c->flag&BAM_FREVERSE)? q->rght : q->left; + key = (c->flag&BAM_FREVERSE)? endpos : c->pos; + k = kh_put(best, h, key, &ret); + if (ret == 0) { // in the hash table + elem_t *p = kh_val(h, k); + ++q->n_removed; + if (p->score < score) { + if (c->flag&BAM_FREVERSE) { // mark "discarded" and push the queue + p->discarded = 1; + kh_val(h, k) = push_queue(queue, b, endpos, score); + } else { // replace + p->score = score; p->endpos = endpos; + bam_copy1(p->b, b); + } + } // otherwise, discard the alignment + } else kh_val(h, k) = push_queue(queue, b, endpos, score); + } + } + if (r < -1) { + fprintf(samtools_stderr, "[%s] error reading input file\n", __func__); + goto fail; + } + + if (dump_alignment(out, hdr, queue, MAX_POS, aux) < 0) goto write_fail; + + for (k = kh_begin(aux); k != kh_end(aux); ++k) { + if (kh_exist(aux, k)) { + lib_aux_t *q = &kh_val(aux, k); + fprintf(samtools_stderr, "[bam_rmdupse_core] %lld / %lld = %.4lf in library '%s'\n", (long long)q->n_removed, + (long long)q->n_checked, (double)q->n_removed/q->n_checked, kh_key(aux, k)); + kh_destroy(best, q->left); kh_destroy(best, q->rght); + free((char*)kh_key(aux, k)); + kh_del(lib, aux, k); + } + } + kh_destroy(lib, aux); + bam_destroy1(b); + kl_destroy(q, queue); + return 0; + + write_fail: + print_error_errno("rmdup", "failed to write record"); + fail: + if (aux) { + for (k = kh_begin(aux); k != kh_end(aux); ++k) { + if (kh_exist(aux, k)) { + lib_aux_t *q = &kh_val(aux, k); + kh_destroy(best, q->left); + kh_destroy(best, q->rght); + free((char*)kh_key(aux, k)); + } + } + kh_destroy(lib, aux); + } + bam_destroy1(b); + kl_destroy(q, queue); + return 1; +} diff --git a/samtools/bam_sort.c b/samtools/bam_sort.c new file mode 100644 index 0000000..509c1d9 --- /dev/null +++ b/samtools/bam_sort.c @@ -0,0 +1,2360 @@ +/* bam_sort.c -- sorting and merging. + + Copyright (C) 2008-2016 Genome Research Ltd. + Portions copyright (C) 2009-2012 Broad Institute. + + Author: Heng Li + Author: Martin Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "htslib/bgzf.h" +#include "htslib/ksort.h" +#include "htslib/hts_os.h" +#include "htslib/khash.h" +#include "htslib/klist.h" +#include "htslib/kstring.h" +#include "htslib/sam.h" +#include "sam_opts.h" +#include "samtools.h" + + +// Struct which contains the a record, and the pointer to the sort tag (if any) +// Used to speed up sort-by-tag. +typedef struct bam1_tag { + bam1_t *bam_record; + const uint8_t *tag; +} bam1_tag; + +/* Minimum memory required in megabytes before sort will attempt to run. This + is to prevent accidents where failing to use the -m option correctly results + in the creation of a temporary file for each read in the input file. + Don't forget to update the man page if you change this. */ +const size_t SORT_MIN_MEGS_PER_THREAD = 1; + +/* Default per-thread memory for sort. Must be >= SORT_MIN_MEGS_PER_THREAD. + Don't forget to update the man page if you change this. */ +const size_t SORT_DEFAULT_MEGS_PER_THREAD = 768; + +#if !defined(__DARWIN_C_LEVEL) || __DARWIN_C_LEVEL < 900000L +#define NEED_MEMSET_PATTERN4 +#endif + +#ifdef NEED_MEMSET_PATTERN4 +void memset_pattern4(void *target, const void *pattern, size_t size) { + uint32_t* target_iter = target; + size_t loops = size/4; + size_t i; + for (i = 0; i < loops; ++i) { + memcpy(target_iter, pattern, 4); + ++target_iter; + } + if (size%4 != 0) + memcpy(target_iter, pattern, size%4); +} +#endif + +KHASH_INIT(c2c, char*, char*, 1, kh_str_hash_func, kh_str_hash_equal) +KHASH_INIT(cset, char*, char, 0, kh_str_hash_func, kh_str_hash_equal) +KHASH_MAP_INIT_STR(c2i, int) + +#define hdrln_free_char(p) +KLIST_INIT(hdrln, char*, hdrln_free_char) + +static int g_is_by_qname = 0; +static int g_is_by_tag = 0; +static char g_sort_tag[2] = {0,0}; + +static int strnum_cmp(const char *_a, const char *_b) +{ + const unsigned char *a = (const unsigned char*)_a, *b = (const unsigned char*)_b; + const unsigned char *pa = a, *pb = b; + while (*pa && *pb) { + if (isdigit(*pa) && isdigit(*pb)) { + while (*pa == '0') ++pa; + while (*pb == '0') ++pb; + while (isdigit(*pa) && isdigit(*pb) && *pa == *pb) ++pa, ++pb; + if (isdigit(*pa) && isdigit(*pb)) { + int i = 0; + while (isdigit(pa[i]) && isdigit(pb[i])) ++i; + return isdigit(pa[i])? 1 : isdigit(pb[i])? -1 : (int)*pa - (int)*pb; + } else if (isdigit(*pa)) return 1; + else if (isdigit(*pb)) return -1; + else if (pa - a != pb - b) return pa - a < pb - b? 1 : -1; + } else { + if (*pa != *pb) return (int)*pa - (int)*pb; + ++pa; ++pb; + } + } + return *pa? 1 : *pb? -1 : 0; +} + +#define HEAP_EMPTY UINT64_MAX + +typedef struct { + int i; + uint64_t pos, idx; + bam1_tag entry; +} heap1_t; + +static inline int bam1_cmp_by_tag(const bam1_tag a, const bam1_tag b); + +// Function to compare reads in the heap and determine which one is < the other +static inline int heap_lt(const heap1_t a, const heap1_t b) +{ + if (!a.entry.bam_record) + return 1; + if (!b.entry.bam_record) + return 0; + + if (g_is_by_tag) { + int t; + t = bam1_cmp_by_tag(a.entry, b.entry); + if (t != 0) return t > 0; + } else if (g_is_by_qname) { + int t, fa, fb; + t = strnum_cmp(bam_get_qname(a.entry.bam_record), bam_get_qname(b.entry.bam_record)); + if (t != 0) return t > 0; + fa = a.entry.bam_record->core.flag & 0xc0; + fb = b.entry.bam_record->core.flag & 0xc0; + if (fa != fb) return fa > fb; + } else { + if (a.pos != b.pos) return a.pos > b.pos; + } + // This compares by position in the input file(s) + if (a.i != b.i) return a.i > b.i; + return a.idx > b.idx; +} + +KSORT_INIT(heap, heap1_t, heap_lt) + +typedef struct merged_header { + kstring_t out_hd; + kstring_t out_sq; + kstring_t out_rg; + kstring_t out_pg; + kstring_t out_co; + char **target_name; + uint32_t *target_len; + size_t n_targets; + size_t targets_sz; + khash_t(c2i) *sq_tids; + khash_t(cset) *rg_ids; + khash_t(cset) *pg_ids; + bool have_hd; +} merged_header_t; + +typedef struct trans_tbl { + int32_t n_targets; + int* tid_trans; + kh_c2c_t* rg_trans; + kh_c2c_t* pg_trans; + bool lost_coord_sort; +} trans_tbl_t; + +/* Something to look like a regmatch_t */ +typedef struct hdr_match { + ptrdiff_t rm_so; + ptrdiff_t rm_eo; +} hdr_match_t; + +/* + * Search for header lines of a particular record type. + * + * This replaces a regex search for something like /^@SQ.*\tSN:([^\t]+).*$/ + * but is much quicker. The locations found are returned in *matches, + * which has a signature the same as that of a regmatch_t. + * + * rec is the record type to match (i.e. @HD, @SQ, @PG or @RG) + * tag is a tag type in the record to match (SN for @SQ, ID for @PG or @RG) + * + * The location of the record (if found) is returned in matches[0] + * If tag is not NULL, the record is searched for the presence of the + * given tag. If found, the location of the value is returned in matches[1]. + * If the tag isn't found then the record is ignored and the search resumes + * on the next header line. + * + * For simplicity, some assumptions are made about rec and tag: + * rec should include the leading '@' sign and be three characters long. + * tag should be exactly two characters long. + * These are always string constants when this is called below, so we don't + * bother to check here. + * + * Returns 0 if a match was found, -1 if not. + */ + + +static int hdr_line_match(const char *text, const char *rec, + const char *tag, hdr_match_t *matches) { + const char *line_start, *line_end = text; + const char *tag_start, *tag_end; + + for (;;) { + // Find record, ensure either at start of text or follows '\n' + line_start = strstr(line_end, rec); + while (line_start && line_start > text && *(line_start - 1) != '\n') { + line_start = strstr(line_start + 3, rec); + } + if (!line_start) return -1; + + // Find end of header line + line_end = strchr(line_start, '\n'); + if (!line_end) line_end = line_start + strlen(line_start); + + matches[0].rm_so = line_start - text; + matches[0].rm_eo = line_end - text; + if (!tag) return 0; // Match found if not looking for tag. + + for (tag_start = line_start + 3; tag_start < line_end; tag_start++) { + // Find possible tag start. Hacky but quick. + while (*tag_start > '\n') tag_start++; + + // Check it + if (tag_start[0] == '\t' + && strncmp(tag_start + 1, tag, 2) == 0 + && tag_start[3] == ':') { + // Found tag, record location and return. + tag_end = tag_start + 4; + while (*tag_end && *tag_end != '\t' && *tag_end != '\n') + ++tag_end; + matches[1].rm_so = tag_start - text + 4; + matches[1].rm_eo = tag_end - text; + return 0; + } + } + // Couldn't find tag, try again from end of current record. + } +} + +static void trans_tbl_destroy(trans_tbl_t *tbl) { + khiter_t iter; + + free(tbl->tid_trans); + + /* + * The values for the tbl->rg_trans and tbl->pg_trans hashes are pointers + * to keys in the rg_ids and pg_ids sets of the merged_header_t, so + * they should not be freed here. + * + * The keys are unique to each hash entry, so they do have to go. + */ + + for (iter = kh_begin(tbl->rg_trans); iter != kh_end(tbl->rg_trans); ++iter) { + if (kh_exist(tbl->rg_trans, iter)) { + free(kh_key(tbl->rg_trans, iter)); + } + } + for (iter = kh_begin(tbl->pg_trans); iter != kh_end(tbl->pg_trans); ++iter) { + if (kh_exist(tbl->pg_trans, iter)) { + free(kh_key(tbl->pg_trans, iter)); + } + } + + kh_destroy(c2c,tbl->rg_trans); + kh_destroy(c2c,tbl->pg_trans); +} + +/* + * Create a merged_header_t struct. + */ + +static merged_header_t * init_merged_header() { + merged_header_t *merged_hdr; + + merged_hdr = calloc(1, sizeof(*merged_hdr)); + if (merged_hdr == NULL) return NULL; + + merged_hdr->targets_sz = 16; + merged_hdr->target_name = malloc(merged_hdr->targets_sz + * sizeof(*merged_hdr->target_name)); + if (NULL == merged_hdr->target_name) goto fail; + + merged_hdr->target_len = malloc(merged_hdr->targets_sz + * sizeof(*merged_hdr->target_len)); + if (NULL == merged_hdr->target_len) goto fail; + + merged_hdr->sq_tids = kh_init(c2i); + if (merged_hdr->sq_tids == NULL) goto fail; + + merged_hdr->rg_ids = kh_init(cset); + if (merged_hdr->rg_ids == NULL) goto fail; + + merged_hdr->pg_ids = kh_init(cset); + if (merged_hdr->pg_ids == NULL) goto fail; + + return merged_hdr; + + fail: + perror("[init_merged_header]"); + kh_destroy(cset, merged_hdr->pg_ids); + kh_destroy(cset, merged_hdr->rg_ids); + kh_destroy(c2i, merged_hdr->sq_tids); + free(merged_hdr->target_name); + free(merged_hdr->target_len); + free(merged_hdr); + return NULL; +} + +/* Some handy kstring manipulating functions */ + +// Append char range to kstring +static inline int range_to_ks(const char *src, int from, int to, + kstring_t *dest) { + return kputsn(src + from, to - from, dest) != to - from; +} + +// Append a header line match to kstring +static inline int match_to_ks(const char *src, const hdr_match_t *match, + kstring_t *dest) { + return range_to_ks(src, match->rm_so, match->rm_eo, dest); +} + +// Append a kstring to a kstring +static inline int ks_to_ks(kstring_t *src, kstring_t *dest) { + return kputsn(ks_str(src), ks_len(src), dest) != ks_len(src); +} + +/* + * Generate a unique ID by appending a random suffix to a given prefix. + * existing_ids is the set of IDs that are already in use. + * If always_add_suffix is true, the suffix will always be included. + * If false, prefix will be returned unchanged if it isn't in existing_ids. + */ + +static int gen_unique_id(char *prefix, khash_t(cset) *existing_ids, + bool always_add_suffix, kstring_t *dest) { + khiter_t iter; + + if (!always_add_suffix) { + // Try prefix on its own first + iter = kh_get(cset, existing_ids, prefix); + if (iter == kh_end(existing_ids)) { // prefix isn't used yet + dest->l = 0; + if (kputs(prefix, dest) == EOF) return -1; + return 0; + } + } + + do { + dest->l = 0; + ksprintf(dest, "%s-%0lX", prefix, lrand48()); + iter = kh_get(cset, existing_ids, ks_str(dest)); + } while (iter != kh_end(existing_ids)); + + return 0; +} + +/* + * Add the @HD line to the new header + * In practice the @HD line will come from the first input header. + */ + +static int trans_tbl_add_hd(merged_header_t* merged_hdr, + bam_hdr_t *translate) { + hdr_match_t match = {0, 0}; + + // TODO: handle case when @HD needs merging. + if (merged_hdr->have_hd) return 0; + + if (hdr_line_match(translate->text, "@HD", NULL, &match) != 0) { + return 0; + } + + if (match_to_ks(translate->text, &match, &merged_hdr->out_hd)) goto memfail; + if (kputc('\n', &merged_hdr->out_hd) == EOF) goto memfail; + merged_hdr->have_hd = true; + + return 0; + + memfail: + perror(__func__); + return -1; +} + +static inline int grow_target_list(merged_header_t* merged_hdr) { + size_t new_size; + char **new_names; + uint32_t *new_len; + + new_size = merged_hdr->targets_sz * 2; + new_names = realloc(merged_hdr->target_name, sizeof(*new_names) * new_size); + if (!new_names) goto fail; + merged_hdr->target_name = new_names; + + new_len = realloc(merged_hdr->target_len, sizeof(*new_len) * new_size); + if (!new_len) goto fail; + merged_hdr->target_len = new_len; + + merged_hdr->targets_sz = new_size; + + return 0; + + fail: + perror(__func__); + return -1; +} + +/* + * Add @SQ records to the translation table. + * + * Go through the target list for the input header. Any new targets found + * are added to the output header target list. At the same time, a mapping + * from the input to output target ids is stored in tbl. + * + * If any new targets are found, the header text is scanned to find the + * corresponding @SQ records. They are then copied into the + * merged_hdr->out_text kstring (which will eventually become the + * output header text). + * + * Returns 0 on success, -1 on failure. + */ + +static int trans_tbl_add_sq(merged_header_t* merged_hdr, bam_hdr_t *translate, + trans_tbl_t* tbl) { + + kstring_t *out_text = &merged_hdr->out_sq; + khash_t(c2i)* sq_tids = merged_hdr->sq_tids; + hdr_match_t *new_sq_matches = NULL; + char *text; + hdr_match_t matches[2]; + int32_t i; + int32_t old_n_targets = merged_hdr->n_targets; + khiter_t iter; + int min_tid = -1; + + // Fill in the tid part of the translation table, adding new targets + // to the merged header as we go. + + for (i = 0; i < translate->n_targets; ++i) { + + // Check if it's a new target. + iter = kh_get(c2i, sq_tids, translate->target_name[i]); + + if (iter == kh_end(sq_tids)) { + int ret; + // Append missing entries to out_hdr + + if (merged_hdr->n_targets == merged_hdr->targets_sz) { + if (grow_target_list(merged_hdr)) goto fail; + } + + merged_hdr->target_name[merged_hdr->n_targets] = strdup(translate->target_name[i]); + if (merged_hdr->target_name[merged_hdr->n_targets] == NULL) goto memfail; + merged_hdr->target_len[merged_hdr->n_targets] = translate->target_len[i]; + + // Record the new identifier for reference below, + // and when building the ttable for other inputs. + iter = kh_put(c2i, sq_tids, + merged_hdr->target_name[merged_hdr->n_targets], &ret); + if (ret < 0) { + free(merged_hdr->target_name[merged_hdr->n_targets]); + goto memfail; + } + assert(ret > 0); // Should not be in hash already. + + kh_value(sq_tids, iter) = merged_hdr->n_targets; + tbl->tid_trans[i] = merged_hdr->n_targets++; + } else { + tbl->tid_trans[i] = kh_value(sq_tids, iter); + } + + if (tbl->tid_trans[i] > min_tid) { + min_tid = tbl->tid_trans[i]; + } else { + tbl->lost_coord_sort = true; + } + } + + if (merged_hdr->n_targets == old_n_targets) + return 0; // Everything done if no new targets. + + // Otherwise, find @SQ lines in translate->text for all newly added targets. + + new_sq_matches = malloc((merged_hdr->n_targets - old_n_targets) + * sizeof(*new_sq_matches)); + if (new_sq_matches == NULL) goto memfail; + + for (i = 0; i < merged_hdr->n_targets - old_n_targets; i++) { + new_sq_matches[i].rm_so = new_sq_matches[i].rm_eo = -1; + } + + text = translate->text; + while (hdr_line_match(text, "@SQ", "SN", matches) == 0) { + // matches[0] is whole line, matches[1] is SN value. + + // This is a bit disgusting, but avoids a copy... + char c = text[matches[1].rm_eo]; + int idx; + + text[matches[1].rm_eo] = '\0'; + + // Look up the SN value in the sq_tids hash. + iter = kh_get(c2i, sq_tids, text + matches[1].rm_so); + text[matches[1].rm_eo] = c; // restore text + + if (iter == kh_end(sq_tids)) { + // Warn about this, but it's not really fatal. + fprintf(stderr, "[W::%s] @SQ SN (%.*s) found in text header but not binary header.\n", + __func__, + (int) (matches[1].rm_eo - matches[1].rm_so), + text + matches[1].rm_so); + text += matches[0].rm_eo; + continue; // Skip to next + } + + idx = kh_value(sq_tids, iter); + if (idx >= old_n_targets) { + // is a new SQ, so record position so we can add it to out_text. + assert(idx < merged_hdr->n_targets); + ptrdiff_t off = text - translate->text; + new_sq_matches[idx - old_n_targets].rm_so = matches[0].rm_so + off; + new_sq_matches[idx - old_n_targets].rm_eo = matches[0].rm_eo + off; + } + + // Carry on searching from end of current match + text += matches[0].rm_eo; + } + + // Copy the @SQ headers found and recreate any missing from binary header. + for (i = 0; i < merged_hdr->n_targets - old_n_targets; i++) { + if (new_sq_matches[i].rm_so >= 0) { + if (match_to_ks(translate->text, &new_sq_matches[i], out_text)) + goto memfail; + if (kputc('\n', out_text) == EOF) goto memfail; + } else { + if (kputs("@SQ\tSN:", out_text) == EOF || + kputs(merged_hdr->target_name[i + old_n_targets], out_text) == EOF || + kputs("\tLN:", out_text) == EOF || + kputuw(merged_hdr->target_len[i + old_n_targets], out_text) == EOF || + kputc('\n', out_text) == EOF) goto memfail; + } + } + + free(new_sq_matches); + return 0; + + memfail: + perror(__func__); + fail: + free(new_sq_matches); + return -1; +} + +/* + * Common code for setting up RG and PG record ID tag translation. + * + * is_rg is true for RG translation, false for PG. + * translate is the input bam header + * merge is true if tags with the same ID are to be merged. + * known_ids is the set of IDs already in the output header. + * id_map is the translation map from input header IDs to output header IDs + * If override is set, it will be used to replace the existing ID (RG only) + * + * known_ids and id_map have entries for the new IDs added to them. + * + * Return value is a linked list of header lines with the translated IDs, + * or NULL if something went wrong (probably out of memory). + * + */ + +static klist_t(hdrln) * trans_rg_pg(bool is_rg, bam_hdr_t *translate, + bool merge, khash_t(cset)* known_ids, + khash_t(c2c)* id_map, char *override) { + hdr_match_t matches[2]; + khiter_t iter; + const char *text = translate->text; + const char *rec_type = is_rg ? "@RG" : "@PG"; + klist_t(hdrln) *hdr_lines; + + hdr_lines = kl_init(hdrln); + + // Search through translate's header + while (hdr_line_match(text, rec_type, "ID", matches) == 0) { + // matches[0] is the whole @RG/PG line; matches[1] is the ID field value + + kstring_t orig_id = { 0, 0, NULL }; // ID in original header + kstring_t transformed_id = { 0, 0, NULL }; // ID in output header + char *map_value; // Value to store in id_map + bool id_changed; // Have we changed the ID? + bool not_found_in_output; // ID isn't in the output header (yet) + + // Take a copy of the ID as we'll need it for a hash key. + if (match_to_ks(text, &matches[1], &orig_id)) goto memfail; + + // is our matched ID in our output ID set already? + iter = kh_get(cset, known_ids, ks_str(&orig_id)); + not_found_in_output = (iter == kh_end(known_ids)); + + if (override) { + // Override original ID (RG only) +#ifdef OVERRIDE_DOES_NOT_MERGE + if (gen_unique_id(override, known_ids, false, &transformed_id)) + goto memfail; + not_found_in_output = true; // As ID now unique +#else + if (kputs(override, &transformed_id) == EOF) goto memfail; + // Know about override already? + iter = kh_get(cset, known_ids, ks_str(&transformed_id)); + not_found_in_output = (iter == kh_end(known_ids)); +#endif + id_changed = true; + } else { + if ( not_found_in_output || merge) { + // Not in there or merging so can add it as 1-1 mapping + if (ks_to_ks(&orig_id, &transformed_id)) goto memfail; + id_changed = false; + } else { + // It's in there so we need to transform it by appending + // a random number to the id + if (gen_unique_id(ks_str(&orig_id), known_ids, + true, &transformed_id)) + goto memfail; + id_changed = true; + not_found_in_output = true; // As ID now unique + } + } + + // Does this line need to go into our output header? + if (not_found_in_output) { + + // Take matched line and replace ID with transformed_id + kstring_t new_hdr_line = { 0, 0, NULL }; + + if (!id_changed) { // Can just copy + if (match_to_ks(text, &matches[0], &new_hdr_line)) goto memfail; + } else { // Substitute new name for original + if (range_to_ks(text, matches[0].rm_so, matches[1].rm_so, + &new_hdr_line)) goto memfail; + if (ks_to_ks(&transformed_id, &new_hdr_line)) goto memfail; + if (range_to_ks(text, matches[1].rm_eo, matches[0].rm_eo, + &new_hdr_line)) goto memfail; + } + + // append line to output linked list + char** ln = kl_pushp(hdrln, hdr_lines); + *ln = ks_release(&new_hdr_line); // Give away to linked list + + // Need to add it to known_ids set + int in_there = 0; + iter = kh_put(cset, known_ids, ks_str(&transformed_id), &in_there); + if (in_there < 0) goto memfail; + assert(in_there > 0); // Should not already be in the map + map_value = ks_release(&transformed_id); + } else { + // Use existing string in id_map + assert(kh_exist(known_ids, iter)); + map_value = kh_key(known_ids, iter); + free(ks_release(&transformed_id)); + } + + // Insert it into our translation map + int in_there = 0; + iter = kh_put(c2c, id_map, ks_release(&orig_id), &in_there); + kh_value(id_map, iter) = map_value; + + text += matches[0].rm_eo; // next! + } + + // If there are no RG lines in the file and we are overriding add one + if (is_rg && override && kl_begin(hdr_lines) == NULL) { + kstring_t new_id = {0, 0, NULL}; + kstring_t line = {0, 0, NULL}; + kstring_t empty = {0, 0, NULL}; + int in_there = 0; + char** ln; + + // Get the new ID + if (gen_unique_id(override, known_ids, false, &new_id)) + goto memfail; + + // Make into a header line and add to linked list + ksprintf(&line, "@RG\tID:%s", ks_str(&new_id)); + ln = kl_pushp(hdrln, hdr_lines); + *ln = ks_release(&line); + + // Put into known_ids set + iter = kh_put(cset, known_ids, ks_str(&new_id), &in_there); + if (in_there < 0) goto memfail; + assert(in_there > 0); // Should be a new entry + + // Put into translation map (key is empty string) + if (kputs("", &empty) == EOF) goto memfail; + iter = kh_put(c2c, id_map, ks_release(&empty), &in_there); + if (in_there < 0) goto memfail; + assert(in_there > 0); // Should be a new entry + kh_value(id_map, iter) = ks_release(&new_id); + } + + return hdr_lines; + + memfail: + perror(__func__); + if (hdr_lines) kl_destroy(hdrln, hdr_lines); + return NULL; +} + +/* + * Common code for completing RG and PG record translation. + * + * Input is a list of header lines, and the mapping from input to + * output @PG record IDs. + * + * RG and PG records can contain tags that cross-reference to other @PG + * records. This fixes the tags to contain the new IDs before adding + * them to the output header text. + */ + +static int finish_rg_pg(bool is_rg, klist_t(hdrln) *hdr_lines, + khash_t(c2c)* pg_map, kstring_t *out_text) { + const char *search = is_rg ? "\tPG:" : "\tPP:"; + khiter_t idx; + char *line = NULL; + + while ((kl_shift(hdrln, hdr_lines, &line)) == 0) { + char *id = strstr(line, search); // Look for tag to fix + int pos1 = 0, pos2 = 0; + char *new_id = NULL; + + if (id) { + // Found a tag. Look up the value in the translation map + // to see what it should be changed to in the output file. + char *end, tmp; + + id += 4; // Point to value + end = strchr(id, '\t'); // Find end of tag + if (!end) end = id + strlen(id); + + tmp = *end; + *end = '\0'; // Temporarily get the value on its own. + + // Look-up in translation table + idx = kh_get(c2c, pg_map, id); + if (idx == kh_end(pg_map)) { + // Not found, warn. + fprintf(stderr, "[W::%s] Tag %s%s not found in @PG records\n", + __func__, search + 1, id); + } else { + // Remember new id and splice points on original string + new_id = kh_value(pg_map, idx); + pos1 = id - line; + pos2 = end - line; + } + + *end = tmp; // Restore string + } + + // Copy line to output: + // line[0..pos1), new_id (if not NULL), line[pos2..end), '\n' + + if (pos1 && range_to_ks(line, 0, pos1, out_text)) goto memfail; + if (new_id && kputs(new_id, out_text) == EOF) goto memfail; + if (kputs(line + pos2, out_text) == EOF) goto memfail; + if (kputc('\n', out_text) == EOF) goto memfail; + free(line); // No longer needed + line = NULL; + } + + return 0; + + memfail: + perror(__func__); + free(line); // Prevent leakage as no longer on list + return -1; +} + +/* + * Build the translation table for an input *am file. This stores mappings + * which allow IDs to be converted from those used in the input file + * to the ones which will be used in the output. The mappings are for: + * Reference sequence IDs (for @SQ records) + * @RG record ID tags + * @PG record ID tags + * + * At the same time, new header text is built up by copying records + * from the input bam file. This will eventually become the header for + * the output file. When copied, the ID tags for @RG and @PG records + * are replaced with their values. The @PG PP: and @RG PG: tags + * are also modified if necessary. + * + * merged_hdr holds state on the output header (which IDs are present, etc.) + * translate is the input header + * tbl is the translation table that gets filled in. + * merge_rg controls merging of @RG records + * merge_pg controls merging of @PG records + * If rg_override is not NULL, it will be used to replace the existing @RG ID + * + * Returns 0 on success, -1 on failure. + */ + +static int trans_tbl_init(merged_header_t* merged_hdr, bam_hdr_t* translate, + trans_tbl_t* tbl, bool merge_rg, bool merge_pg, + bool copy_co, char* rg_override) +{ + klist_t(hdrln) *rg_list = NULL; + klist_t(hdrln) *pg_list = NULL; + + tbl->n_targets = translate->n_targets; + tbl->rg_trans = tbl->pg_trans = NULL; + tbl->tid_trans = (int*)calloc(translate->n_targets, sizeof(int)); + if (tbl->tid_trans == NULL) goto memfail; + tbl->rg_trans = kh_init(c2c); + if (tbl->rg_trans == NULL) goto memfail; + tbl->pg_trans = kh_init(c2c); + if (tbl->pg_trans == NULL) goto memfail; + + tbl->lost_coord_sort = false; + + // Get the @HD record (if not there already). + if (trans_tbl_add_hd(merged_hdr, translate)) goto fail; + + // Fill in map and add header lines for @SQ records + if (trans_tbl_add_sq(merged_hdr, translate, tbl)) goto fail; + + // Get translated header lines and fill in map for @RG records + rg_list = trans_rg_pg(true, translate, merge_rg, merged_hdr->rg_ids, + tbl->rg_trans, rg_override); + if (!rg_list) goto fail; + + // Get translated header lines and fill in map for @PG records + pg_list = trans_rg_pg(false, translate, merge_pg, merged_hdr->pg_ids, + tbl->pg_trans, NULL); + + // Fix-up PG: tags in the new @RG records and add to output + if (finish_rg_pg(true, rg_list, tbl->pg_trans, &merged_hdr->out_rg)) + goto fail; + + // Fix-up PP: tags in the new @PG records and add to output + if (finish_rg_pg(false, pg_list, tbl->pg_trans, &merged_hdr->out_pg)) + goto fail; + + kl_destroy(hdrln, rg_list); rg_list = NULL; + kl_destroy(hdrln, pg_list); pg_list = NULL; + + if (copy_co) { + // Just append @CO headers without translation + const char *line, *end_pointer; + for (line = translate->text; *line; line = end_pointer + 1) { + end_pointer = strchr(line, '\n'); + if (strncmp(line, "@CO", 3) == 0) { + if (end_pointer) { + if (kputsn(line, end_pointer - line + 1, &merged_hdr->out_co) == EOF) + goto memfail; + } else { // Last line with no trailing '\n' + if (kputs(line, &merged_hdr->out_co) == EOF) goto memfail; + if (kputc('\n', &merged_hdr->out_co) == EOF) goto memfail; + } + } + if (end_pointer == NULL) break; + } + } + + return 0; + + memfail: + perror(__func__); + fail: + trans_tbl_destroy(tbl); + if (rg_list) kl_destroy(hdrln, rg_list); + if (pg_list) kl_destroy(hdrln, pg_list); + return -1; +} + +static inline void move_kstr_to_text(char **text, kstring_t *ks) { + memcpy(*text, ks_str(ks), ks_len(ks)); + *text += ks_len(ks); + **text = '\0'; + free(ks_release(ks)); +} + +/* + * Populate a bam_hdr_t struct from data in a merged_header_t. + */ + +static bam_hdr_t * finish_merged_header(merged_header_t *merged_hdr) { + size_t txt_sz; + char *text; + bam_hdr_t *hdr; + + // Check output text size + txt_sz = (ks_len(&merged_hdr->out_hd) + + ks_len(&merged_hdr->out_sq) + + ks_len(&merged_hdr->out_rg) + + ks_len(&merged_hdr->out_pg) + + ks_len(&merged_hdr->out_co)); + if (txt_sz >= INT32_MAX) { + fprintf(stderr, "[%s] Output header text too long\n", __func__); + return NULL; + } + + // Allocate new header + hdr = bam_hdr_init(); + if (hdr == NULL) goto memfail; + + // Transfer targets arrays to new header + hdr->n_targets = merged_hdr->n_targets; + if (hdr->n_targets > 0) { + // Try to shrink targets arrays to correct size + hdr->target_name = realloc(merged_hdr->target_name, + hdr->n_targets * sizeof(char*)); + if (!hdr->target_name) hdr->target_name = merged_hdr->target_name; + + hdr->target_len = realloc(merged_hdr->target_len, + hdr->n_targets * sizeof(uint32_t)); + if (!hdr->target_len) hdr->target_len = merged_hdr->target_len; + + // These have either been freed by realloc() or, in the unlikely + // event that failed, have had their ownership transferred to hdr + merged_hdr->target_name = NULL; + merged_hdr->target_len = NULL; + } + else { + hdr->target_name = NULL; + hdr->target_len = NULL; + } + + // Allocate text + text = hdr->text = malloc(txt_sz + 1); + if (!text) goto memfail; + + // Put header text in order @HD, @SQ, @RG, @PG, @CO + move_kstr_to_text(&text, &merged_hdr->out_hd); + move_kstr_to_text(&text, &merged_hdr->out_sq); + move_kstr_to_text(&text, &merged_hdr->out_rg); + move_kstr_to_text(&text, &merged_hdr->out_pg); + move_kstr_to_text(&text, &merged_hdr->out_co); + hdr->l_text = txt_sz; + + return hdr; + + memfail: + perror(__func__); + bam_hdr_destroy(hdr); + return NULL; +} + +/* + * Free a merged_header_t struct and all associated data. + * + * Note that the keys to the rg_ids and pg_ids sets are also used as + * values in the translation tables. This function should therefore not + * be called until the translation tables are no longer needed. + */ + +static void free_merged_header(merged_header_t *merged_hdr) { + size_t i; + khiter_t iter; + if (!merged_hdr) return; + free(ks_release(&merged_hdr->out_hd)); + free(ks_release(&merged_hdr->out_sq)); + free(ks_release(&merged_hdr->out_rg)); + free(ks_release(&merged_hdr->out_pg)); + free(ks_release(&merged_hdr->out_co)); + if (merged_hdr->target_name) { + for (i = 0; i < merged_hdr->n_targets; i++) { + free(merged_hdr->target_name[i]); + } + free(merged_hdr->target_name); + } + free(merged_hdr->target_len); + kh_destroy(c2i, merged_hdr->sq_tids); + + if (merged_hdr->rg_ids) { + for (iter = kh_begin(merged_hdr->rg_ids); + iter != kh_end(merged_hdr->rg_ids); ++iter) { + if (kh_exist(merged_hdr->rg_ids, iter)) + free(kh_key(merged_hdr->rg_ids, iter)); + } + kh_destroy(cset, merged_hdr->rg_ids); + } + + if (merged_hdr->pg_ids) { + for (iter = kh_begin(merged_hdr->pg_ids); + iter != kh_end(merged_hdr->pg_ids); ++iter) { + if (kh_exist(merged_hdr->pg_ids, iter)) + free(kh_key(merged_hdr->pg_ids, iter)); + } + kh_destroy(cset, merged_hdr->pg_ids); + } + + free(merged_hdr); +} + +static void bam_translate(bam1_t* b, trans_tbl_t* tbl) +{ + // Update target id if not unmapped tid + if ( b->core.tid >= 0 ) { b->core.tid = tbl->tid_trans[b->core.tid]; } + if ( b->core.mtid >= 0 ) { b->core.mtid = tbl->tid_trans[b->core.mtid]; } + + // If we have a RG update it + uint8_t *rg = bam_aux_get(b, "RG"); + if (rg) { + char* decoded_rg = bam_aux2Z(rg); + khiter_t k = kh_get(c2c, tbl->rg_trans, decoded_rg); + if (k != kh_end(tbl->rg_trans)) { + char* translate_rg = kh_value(tbl->rg_trans,k); + bam_aux_del(b, rg); + if (translate_rg) { + bam_aux_append(b, "RG", 'Z', strlen(translate_rg) + 1, + (uint8_t*)translate_rg); + } + } else { + char *tmp = strdup(decoded_rg); + fprintf(stderr, + "[bam_translate] RG tag \"%s\" on read \"%s\" encountered " + "with no corresponding entry in header, tag lost. " + "Unknown tags are only reported once per input file for " + "each tag ID.\n", + decoded_rg, bam_get_qname(b)); + bam_aux_del(b, rg); + // Prevent future whinges + if (tmp) { + int in_there = 0; + k = kh_put(c2c, tbl->rg_trans, tmp, &in_there); + if (in_there > 0) kh_value(tbl->rg_trans, k) = NULL; + } + } + } + + // If we have a PG update it + uint8_t *pg = bam_aux_get(b, "PG"); + if (pg) { + char* decoded_pg = bam_aux2Z(pg); + khiter_t k = kh_get(c2c, tbl->pg_trans, decoded_pg); + if (k != kh_end(tbl->pg_trans)) { + char* translate_pg = kh_value(tbl->pg_trans,k); + bam_aux_del(b, pg); + if (translate_pg) { + bam_aux_append(b, "PG", 'Z', strlen(translate_pg) + 1, + (uint8_t*)translate_pg); + } + } else { + char *tmp = strdup(decoded_pg); + fprintf(stderr, + "[bam_translate] PG tag \"%s\" on read \"%s\" encountered " + "with no corresponding entry in header, tag lost. " + "Unknown tags are only reported once per input file for " + "each tag ID.\n", + decoded_pg, bam_get_qname(b)); + bam_aux_del(b, pg); + // Prevent future whinges + if (tmp) { + int in_there = 0; + k = kh_put(c2c, tbl->pg_trans, tmp, &in_there); + if (in_there > 0) kh_value(tbl->pg_trans, k) = NULL; + } + } + } +} + +int* rtrans_build(int n, int n_targets, trans_tbl_t* translation_tbl) +{ + // Create reverse translation table for tids + int* rtrans = (int*)malloc(sizeof(int32_t)*n*n_targets); + const int32_t NOTID = INT32_MIN; + if (!rtrans) return NULL; + memset_pattern4((void*)rtrans, &NOTID, sizeof(int32_t)*n*n_targets); + int i; + for (i = 0; i < n; ++i) { + int j; + for (j = 0; j < (translation_tbl+i)->n_targets; ++j) { + if ((translation_tbl+i)->tid_trans[j] != -1) { + rtrans[i*n_targets + (translation_tbl+i)->tid_trans[j]] = j; + } + } + } + + return rtrans; +} + +#define MERGE_RG 1 // Attach RG tag based on filename +#define MERGE_UNCOMP 2 // Generate uncompressed BAM +#define MERGE_LEVEL1 4 // Compress the BAM at level 1 (fast) mode +#define MERGE_FORCE 8 // Overwrite output BAM if it exists +#define MERGE_COMBINE_RG 16 // Combine RG tags frather than redefining them +#define MERGE_COMBINE_PG 32 // Combine PG tags frather than redefining them +#define MERGE_FIRST_CO 64 // Use only first file's @CO headers (sort cmd only) + +/* + * How merging is handled + * + * If a hheader is defined use we will use that as our output header + * otherwise we use the first header from the first input file. + * + * Now go through each file and create a translation table for that file for: + * -RG + * -tid + * -PG tags + * + * Then whenever we read a record from a bam we translate that read before + * stashing it in the hash. + * + * In the actual merge, a read is read from each input file, translated and + * stashed in the hash. This assumes that all input files are sorted in the + * same way. Next we just extract the next position ordered read from the + * hash, and replace it if there are still reads left in it's source input + * file. Finally we write our chosen read it to the output file. + */ + +/*! + @abstract Merge multiple sorted BAM. + @param by_qname whether to sort by query name + @param sort_tag if non-null, sort by the given tag + @param out output BAM file name + @param mode sam_open() mode to be used to create the final output file + (overrides level settings from UNCOMP and LEVEL1 flags) + @param headers name of SAM file from which to copy '@' header lines, + or NULL to copy them from the first file to be merged + @param n number of files to be merged + @param fn names of files to be merged + @param flag flags that control how the merge is undertaken + @param reg region to merge + @param n_threads number of threads to use (passed to htslib) + @param cmd command name (used in print_error() etc) + @param in_fmt format options for input files + @param out_fmt output file format and options + @discussion Padding information may NOT correctly maintained. This + function is NOT thread safe. + */ +int bam_merge_core2(int by_qname, char* sort_tag, const char *out, const char *mode, + const char *headers, int n, char * const *fn, int flag, + const char *reg, int n_threads, const char *cmd, + const htsFormat *in_fmt, const htsFormat *out_fmt) +{ + samFile *fpout, **fp = NULL; + heap1_t *heap = NULL; + bam_hdr_t *hout = NULL; + bam_hdr_t *hin = NULL; + int i, j, *RG_len = NULL; + uint64_t idx = 0; + char **RG = NULL; + hts_itr_t **iter = NULL; + bam_hdr_t **hdr = NULL; + trans_tbl_t *translation_tbl = NULL; + int *rtrans = NULL; + merged_header_t *merged_hdr = init_merged_header(); + if (!merged_hdr) return -1; + + // Is there a specified pre-prepared header to use for output? + if (headers) { + samFile* fpheaders = sam_open(headers, "r"); + if (fpheaders == NULL) { + print_error_errno(cmd, "cannot open \"%s\"", headers); + return -1; + } + hin = sam_hdr_read(fpheaders); + sam_close(fpheaders); + if (hin == NULL) { + print_error(cmd, "couldn't read headers from \"%s\"", headers); + goto mem_fail; + } + } + + g_is_by_qname = by_qname; + if (sort_tag) { + g_is_by_tag = 1; + g_sort_tag[0] = sort_tag[0]; + g_sort_tag[1] = sort_tag[1]; + } + + fp = (samFile**)calloc(n, sizeof(samFile*)); + if (!fp) goto mem_fail; + heap = (heap1_t*)calloc(n, sizeof(heap1_t)); + if (!heap) goto mem_fail; + iter = (hts_itr_t**)calloc(n, sizeof(hts_itr_t*)); + if (!iter) goto mem_fail; + hdr = (bam_hdr_t**)calloc(n, sizeof(bam_hdr_t*)); + if (!hdr) goto mem_fail; + translation_tbl = (trans_tbl_t*)calloc(n, sizeof(trans_tbl_t)); + if (!translation_tbl) goto mem_fail; + RG = (char**)calloc(n, sizeof(char*)); + if (!RG) goto mem_fail; + + // prepare RG tag from file names + if (flag & MERGE_RG) { + RG_len = (int*)calloc(n, sizeof(int)); + if (!RG_len) goto mem_fail; + for (i = 0; i != n; ++i) { + int l = strlen(fn[i]); + const char *s = fn[i]; + if (l > 4 && (strcmp(s + l - 4, ".bam") == 0 || strcmp(s + l - 4, ".sam") == 0)) l -= 4; + if (l > 5 && strcmp(s + l - 5, ".cram") == 0) l -= 5; + for (j = l - 1; j >= 0; --j) if (s[j] == '/') break; + ++j; l -= j; + RG[i] = (char*)calloc(l + 1, 1); + if (!RG[i]) goto mem_fail; + RG_len[i] = l; + strncpy(RG[i], s + j, l); + } + } + + if (hin) { + // Popluate merged_hdr from the pre-prepared header + trans_tbl_t dummy; + int res; + res = trans_tbl_init(merged_hdr, hin, &dummy, flag & MERGE_COMBINE_RG, + flag & MERGE_COMBINE_PG, true, NULL); + trans_tbl_destroy(&dummy); + if (res) return -1; // FIXME: memory leak + } + + // open and read the header from each file + for (i = 0; i < n; ++i) { + bam_hdr_t *hin; + fp[i] = sam_open_format(fn[i], "r", in_fmt); + if (fp[i] == NULL) { + print_error_errno(cmd, "fail to open \"%s\"", fn[i]); + goto fail; + } + hin = sam_hdr_read(fp[i]); + if (hin == NULL) { + print_error(cmd, "failed to read header from \"%s\"", fn[i]); + goto fail; + } + + if (trans_tbl_init(merged_hdr, hin, translation_tbl+i, + flag & MERGE_COMBINE_RG, flag & MERGE_COMBINE_PG, + (flag & MERGE_FIRST_CO)? (i == 0) : true, + RG[i])) + return -1; // FIXME: memory leak + + // TODO sam_itr_next() doesn't yet work for SAM files, + // so for those keep the headers around for use with sam_read1() + if (hts_get_format(fp[i])->format == sam) hdr[i] = hin; + else { bam_hdr_destroy(hin); hdr[i] = NULL; } + + if ((translation_tbl+i)->lost_coord_sort && !by_qname) { + fprintf(stderr, "[bam_merge_core] Order of targets in file %s caused coordinate sort to be lost\n", fn[i]); + } + + // Potential future improvement is to share headers between CRAM files for + // samtools sort (where all headers are identical. + // Eg: + // + // if (i > 1) { + // sam_hdr_free(cram_fd_get_header(fp[i]->fp.cram)); + // cram_fd_set_header(fp[i]->fp.cram, cram_fd_get_header(fp[0]->fp.cram)); + // sam_hdr_incr_ref(cram_fd_get_header(fp[0]->fp.cram)); + // } + } + + // Did we get an @HD line? + if (!merged_hdr->have_hd) { + fprintf(stderr, "[W::%s] No @HD tag found.\n", __func__); + /* FIXME: Should we add an @HD line here, and if so what should + we put in it? Ideally we want a way of getting htslib to tell + us the SAM version number to assume given no @HD line. Is + it also safe to assume that the output is coordinate sorted? + SO: is optional so we don't have to have it.*/ + /* ksprintf(&merged_hdr->out_hd, "@HD\tVN:1.5\tSO:coordinate\n"); */ + } + + // Transform the header into standard form + hout = finish_merged_header(merged_hdr); + if (!hout) return -1; // FIXME: memory leak + + // If we're only merging a specified region move our iters to start at that point + if (reg) { + int tid, beg, end; + const char *name_lim; + + rtrans = rtrans_build(n, hout->n_targets, translation_tbl); + if (!rtrans) goto mem_fail; + + name_lim = hts_parse_reg(reg, &beg, &end); + if (name_lim) { + char *name = malloc(name_lim - reg + 1); + if (!name) goto mem_fail; + memcpy(name, reg, name_lim - reg); + name[name_lim - reg] = '\0'; + tid = bam_name2id(hout, name); + free(name); + } + else { + // not parsable as a region, but possibly a sequence named "foo:a" + tid = bam_name2id(hout, reg); + beg = 0; + end = INT_MAX; + } + if (tid < 0) { + if (name_lim) fprintf(stderr, "[%s] Region \"%s\" specifies an unknown reference name\n", __func__, reg); + else fprintf(stderr, "[%s] Badly formatted region: \"%s\"\n", __func__, reg); + goto fail; + } + for (i = 0; i < n; ++i) { + hts_idx_t *idx = sam_index_load(fp[i], fn[i]); + // (rtrans[i*n+tid]) Look up what hout tid translates to in input tid space + int mapped_tid = rtrans[i*hout->n_targets+tid]; + if (idx == NULL) { + fprintf(stderr, "[%s] failed to load index for %s. Random alignment retrieval only works for indexed BAM or CRAM files.\n", + __func__, fn[i]); + goto fail; + } + if (mapped_tid != INT32_MIN) { + iter[i] = sam_itr_queryi(idx, mapped_tid, beg, end); + } else { + iter[i] = sam_itr_queryi(idx, HTS_IDX_NONE, 0, 0); + } + hts_idx_destroy(idx); + if (iter[i] == NULL) { + if (mapped_tid != INT32_MIN) { + fprintf(stderr, + "[%s] failed to get iterator over " + "{%s, %d, %d, %d}\n", + __func__, fn[i], mapped_tid, beg, end); + } else { + fprintf(stderr, + "[%s] failed to get iterator over " + "{%s, HTS_IDX_NONE, 0, 0}\n", + __func__, fn[i]); + } + goto fail; + } + } + free(rtrans); + rtrans = NULL; + } else { + for (i = 0; i < n; ++i) { + if (hdr[i] == NULL) { + iter[i] = sam_itr_queryi(NULL, HTS_IDX_REST, 0, 0); + if (iter[i] == NULL) { + fprintf(stderr, "[%s] failed to get iterator\n", __func__); + goto fail; + } + } + else iter[i] = NULL; + } + } + + // Load the first read from each file into the heap + for (i = 0; i < n; ++i) { + heap1_t *h = heap + i; + int res; + h->i = i; + h->entry.bam_record = bam_init1(); + h->entry.tag = NULL; + if (!h->entry.bam_record) goto mem_fail; + res = iter[i] ? sam_itr_next(fp[i], iter[i], h->entry.bam_record) : sam_read1(fp[i], hdr[i], h->entry.bam_record); + if (res >= 0) { + bam_translate(h->entry.bam_record, translation_tbl + i); + h->pos = ((uint64_t)h->entry.bam_record->core.tid<<32) | (uint32_t)((int32_t)h->entry.bam_record->core.pos+1)<<1 | bam_is_rev(h->entry.bam_record); + h->idx = idx++; + if (g_is_by_tag) { + h->entry.tag = bam_aux_get(h->entry.bam_record, g_sort_tag); + } else { + h->entry.tag = NULL; + } + } + else if (res == -1 && (!iter[i] || iter[i]->finished)) { + h->pos = HEAP_EMPTY; + bam_destroy1(h->entry.bam_record); + h->entry.bam_record = NULL; + h->entry.tag = NULL; + } else { + print_error(cmd, "failed to read first record from \"%s\"", fn[i]); + goto fail; + } + } + + // Open output file and write header + if ((fpout = sam_open_format(out, mode, out_fmt)) == 0) { + print_error_errno(cmd, "failed to create \"%s\"", out); + return -1; + } + if (sam_hdr_write(fpout, hout) != 0) { + print_error_errno(cmd, "failed to write header to \"%s\"", out); + sam_close(fpout); + return -1; + } + if (!(flag & MERGE_UNCOMP)) hts_set_threads(fpout, n_threads); + + // Begin the actual merge + ks_heapmake(heap, n, heap); + while (heap->pos != HEAP_EMPTY) { + bam1_t *b = heap->entry.bam_record; + if (flag & MERGE_RG) { + uint8_t *rg = bam_aux_get(b, "RG"); + if (rg) bam_aux_del(b, rg); + bam_aux_append(b, "RG", 'Z', RG_len[heap->i] + 1, (uint8_t*)RG[heap->i]); + } + if (sam_write1(fpout, hout, b) < 0) { + print_error_errno(cmd, "failed writing to \"%s\"", out); + sam_close(fpout); + return -1; + } + if ((j = (iter[heap->i]? sam_itr_next(fp[heap->i], iter[heap->i], b) : sam_read1(fp[heap->i], hdr[heap->i], b))) >= 0) { + bam_translate(b, translation_tbl + heap->i); + heap->pos = ((uint64_t)b->core.tid<<32) | (uint32_t)((int)b->core.pos+1)<<1 | bam_is_rev(b); + heap->idx = idx++; + if (g_is_by_tag) { + heap->entry.tag = bam_aux_get(heap->entry.bam_record, g_sort_tag); + } else { + heap->entry.tag = NULL; + } + } else if (j == -1 && (!iter[heap->i] || iter[heap->i]->finished)) { + heap->pos = HEAP_EMPTY; + bam_destroy1(heap->entry.bam_record); + heap->entry.bam_record = NULL; + heap->entry.tag = NULL; + } else { + print_error(cmd, "\"%s\" is truncated", fn[heap->i]); + goto fail; + } + ks_heapadjust(heap, 0, n, heap); + } + + // Clean up and close + if (flag & MERGE_RG) { + for (i = 0; i != n; ++i) free(RG[i]); + free(RG_len); + } + for (i = 0; i < n; ++i) { + trans_tbl_destroy(translation_tbl + i); + hts_itr_destroy(iter[i]); + bam_hdr_destroy(hdr[i]); + sam_close(fp[i]); + } + bam_hdr_destroy(hin); + bam_hdr_destroy(hout); + free_merged_header(merged_hdr); + free(RG); free(translation_tbl); free(fp); free(heap); free(iter); free(hdr); + if (sam_close(fpout) < 0) { + print_error(cmd, "error closing output file"); + return -1; + } + return 0; + + mem_fail: + print_error(cmd, "Out of memory"); + + fail: + if (flag & MERGE_RG) { + if (RG) { + for (i = 0; i != n; ++i) free(RG[i]); + } + free(RG_len); + } + for (i = 0; i < n; ++i) { + if (translation_tbl && translation_tbl[i].tid_trans) trans_tbl_destroy(translation_tbl + i); + if (iter && iter[i]) hts_itr_destroy(iter[i]); + if (hdr && hdr[i]) bam_hdr_destroy(hdr[i]); + if (fp && fp[i]) sam_close(fp[i]); + if (heap && heap[i].entry.bam_record) bam_destroy1(heap[i].entry.bam_record); + } + if (hout) bam_hdr_destroy(hout); + free(RG); + free(translation_tbl); + free(hdr); + free(iter); + free(heap); + free(fp); + free(rtrans); + return -1; +} + +// Unused here but may be used by legacy samtools-using third-party code +int bam_merge_core(int by_qname, const char *out, const char *headers, int n, char * const *fn, int flag, const char *reg) +{ + char mode[12]; + strcpy(mode, "wb"); + if (flag & MERGE_UNCOMP) strcat(mode, "0"); + else if (flag & MERGE_LEVEL1) strcat(mode, "1"); + return bam_merge_core2(by_qname, NULL, out, mode, headers, n, fn, flag, reg, 0, "merge", NULL, NULL); +} + +static void merge_usage(FILE *to) +{ + fprintf(to, +"Usage: samtools merge [-nurlf] [-h inh.sam] [-b ] [ ... ]\n" +"\n" +"Options:\n" +" -n Input files are sorted by read name\n" +" -t TAG Input files are sorted by TAG value\n" +" -r Attach RG tag (inferred from file names)\n" +" -u Uncompressed BAM output\n" +" -f Overwrite the output BAM if exist\n" +" -1 Compress level 1\n" +" -l INT Compression level, from 0 to 9 [-1]\n" +" -R STR Merge file in the specified region STR [all]\n" +" -h FILE Copy the header in FILE to [in1.bam]\n" +" -c Combine @RG headers with colliding IDs [alter IDs to be distinct]\n" +" -p Combine @PG headers with colliding IDs [alter IDs to be distinct]\n" +" -s VALUE Override random seed\n" +" -b FILE List of input BAM filenames, one per line [null]\n"); + sam_global_opt_help(to, "-.O..@"); +} + +int bam_merge(int argc, char *argv[]) +{ + int c, is_by_qname = 0, flag = 0, ret = 0, level = -1; + char *fn_headers = NULL, *reg = NULL, mode[12]; + char *sort_tag = NULL; + long random_seed = (long)time(NULL); + char** fn = NULL; + int fn_size = 0; + + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, 'O', 0, 0, '@'), + { "threads", required_argument, NULL, '@' }, + { NULL, 0, NULL, 0 } + }; + + if (argc == 1) { + merge_usage(stdout); + return 0; + } + + while ((c = getopt_long(argc, argv, "h:nru1R:f@:l:cps:b:O:t:", lopts, NULL)) >= 0) { + switch (c) { + case 'r': flag |= MERGE_RG; break; + case 'f': flag |= MERGE_FORCE; break; + case 'h': fn_headers = strdup(optarg); break; + case 'n': is_by_qname = 1; break; + case 't': sort_tag = strdup(optarg); break; + case '1': flag |= MERGE_LEVEL1; level = 1; break; + case 'u': flag |= MERGE_UNCOMP; level = 0; break; + case 'R': reg = strdup(optarg); break; + case 'l': level = atoi(optarg); break; + case 'c': flag |= MERGE_COMBINE_RG; break; + case 'p': flag |= MERGE_COMBINE_PG; break; + case 's': random_seed = atol(optarg); break; + case 'b': { + // load the list of files to read + int nfiles; + char **fn_read = hts_readlines(optarg, &nfiles); + if (fn_read) { + // Append to end of array + fn = realloc(fn, (fn_size+nfiles) * sizeof(char*)); + if (fn == NULL) { ret = 1; goto end; } + memcpy(fn+fn_size, fn_read, nfiles * sizeof(char*)); + fn_size += nfiles; + free(fn_read); + } + else { + print_error("merge", "Invalid file list \"%s\"", optarg); + ret = 1; + } + break; + } + + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + /* else fall-through */ + case '?': merge_usage(stderr); return 1; + } + } + if ( argc - optind < 1 ) { + print_error("merge", "You must at least specify the output file"); + merge_usage(stderr); + return 1; + } + + srand48(random_seed); + if (!(flag & MERGE_FORCE) && strcmp(argv[optind], "-")) { + FILE *fp = fopen(argv[optind], "rb"); + if (fp != NULL) { + fclose(fp); + fprintf(stderr, "[%s] File '%s' exists. Please apply '-f' to overwrite. Abort.\n", __func__, argv[optind]); + return 1; + } + } + + int nargcfiles = argc - (optind+1); + if (nargcfiles > 0) { + // Add argc files to end of array + fn = realloc(fn, (fn_size+nargcfiles) * sizeof(char*)); + if (fn == NULL) { ret = 1; goto end; } + memcpy(fn+fn_size, argv + (optind+1), nargcfiles * sizeof(char*)); + } + if (fn_size+nargcfiles < 1) { + print_error("merge", "You must specify at least one (and usually two or more) input files"); + merge_usage(stderr); + return 1; + } + strcpy(mode, "wb"); + sam_open_mode(mode+1, argv[optind], NULL); + if (level >= 0) sprintf(strchr(mode, '\0'), "%d", level < 9? level : 9); + if (bam_merge_core2(is_by_qname, sort_tag, argv[optind], mode, fn_headers, + fn_size+nargcfiles, fn, flag, reg, ga.nthreads, + "merge", &ga.in, &ga.out) < 0) + ret = 1; + +end: + if (fn_size > 0) { + int i; + for (i=0; ii, res; + if (i < nfiles) { // read from file + res = sam_read1(fp[i], hout, heap->entry.bam_record); + } else { // read from memory + if (in_mem[i - nfiles].from < in_mem[i - nfiles].to) { + heap->entry.bam_record = buf[in_mem[i - nfiles].from++].bam_record; + res = 0; + } else { + res = -1; + } + } + if (res >= 0) { + heap->pos = (((uint64_t)heap->entry.bam_record->core.tid<<32) + | (uint32_t)((int32_t)heap->entry.bam_record->core.pos+1)<<1 + | bam_is_rev(heap->entry.bam_record)); + heap->idx = (*idx)++; + if (g_is_by_tag) { + heap->entry.tag = bam_aux_get(heap->entry.bam_record, g_sort_tag); + } else { + heap->entry.tag = NULL; + } + } else if (res == -1) { + heap->pos = HEAP_EMPTY; + if (i < nfiles) bam_destroy1(heap->entry.bam_record); + heap->entry.bam_record = NULL; + heap->entry.tag = NULL; + } else { + return -1; + } + return 0; +} + +static int bam_merge_simple(int by_qname, char *sort_tag, const char *out, + const char *mode, bam_hdr_t *hout, + int n, char * const *fn, int num_in_mem, + buf_region *in_mem, bam1_tag *buf, int n_threads, + const char *cmd, const htsFormat *in_fmt, + const htsFormat *out_fmt) { + samFile *fpout = NULL, **fp = NULL; + heap1_t *heap = NULL; + uint64_t idx = 0; + int i, heap_size = n + num_in_mem; + + g_is_by_qname = by_qname; + if (sort_tag) { + g_is_by_tag = 1; + g_sort_tag[0] = sort_tag[0]; + g_sort_tag[1] = sort_tag[1]; + } + if (n > 0) { + fp = (samFile**)calloc(n, sizeof(samFile*)); + if (!fp) goto mem_fail; + } + heap = (heap1_t*)calloc(heap_size, sizeof(heap1_t)); + if (!heap) goto mem_fail; + + // Open each file, read the header and put the first read into the heap + for (i = 0; i < heap_size; i++) { + bam_hdr_t *hin; + heap1_t *h = &heap[i]; + + if (i < n) { + fp[i] = sam_open_format(fn[i], "r", in_fmt); + if (fp[i] == NULL) { + print_error_errno(cmd, "fail to open \"%s\"", fn[i]); + goto fail; + } + + // Read header ... + hin = sam_hdr_read(fp[i]); + if (hin == NULL) { + print_error(cmd, "failed to read header from \"%s\"", fn[i]); + goto fail; + } + // ... and throw it away as we don't really need it + bam_hdr_destroy(hin); + } + + // Get a read into the heap + h->i = i; + h->entry.tag = NULL; + if (i < n) { + h->entry.bam_record = bam_init1(); + if (!h->entry.bam_record) goto mem_fail; + } + if (heap_add_read(h, n, fp, num_in_mem, in_mem, buf, &idx, hout) < 0) { + assert(i < n); + print_error(cmd, "failed to read first record from \"%s\"", fn[i]); + goto fail; + } + } + + // Open output file and write header + if ((fpout = sam_open_format(out, mode, out_fmt)) == 0) { + print_error_errno(cmd, "failed to create \"%s\"", out); + return -1; + } + + hts_set_threads(fpout, n_threads); + + if (sam_hdr_write(fpout, hout) != 0) { + print_error_errno(cmd, "failed to write header to \"%s\"", out); + sam_close(fpout); + return -1; + } + + // Now do the merge + ks_heapmake(heap, heap_size, heap); + while (heap->pos != HEAP_EMPTY) { + bam1_t *b = heap->entry.bam_record; + if (sam_write1(fpout, hout, b) < 0) { + print_error_errno(cmd, "failed writing to \"%s\"", out); + sam_close(fpout); + return -1; + } + if (heap_add_read(heap, n, fp, num_in_mem, in_mem, buf, &idx, hout) < 0) { + assert(heap->i < n); + print_error(cmd, "Error reading \"%s\" : %s", + fn[heap->i], strerror(errno)); + goto fail; + } + ks_heapadjust(heap, 0, heap_size, heap); + } + // Clean up and close + for (i = 0; i < n; i++) { + if (sam_close(fp[i]) != 0) { + print_error(cmd, "Error on closing \"%s\" : %s", + fn[i], strerror(errno)); + } + } + free(fp); + free(heap); + if (sam_close(fpout) < 0) { + print_error(cmd, "error closing output file"); + return -1; + } + return 0; + mem_fail: + print_error(cmd, "Out of memory"); + + fail: + for (i = 0; i < n; i++) { + if (fp && fp[i]) sam_close(fp[i]); + if (heap && heap[i].entry.bam_record) bam_destroy1(heap[i].entry.bam_record); + } + free(fp); + free(heap); + if (fpout) sam_close(fpout); + return -1; +} + +// Function to compare reads and determine which one is < or > the other +// Handle sort-by-pos and sort-by-name. Used as the secondary sort in bam1_lt_by_tag, if reads are equivalent by tag. +// Returns a value less than, equal to or greater than zero if a is less than, +// equal to or greater than b, respectively. +static inline int bam1_cmp_core(const bam1_tag a, const bam1_tag b) +{ + uint64_t pa, pb; + if (!a.bam_record) + return 1; + if (!b.bam_record) + return 0; + + if (g_is_by_qname) { + int t = strnum_cmp(bam_get_qname(a.bam_record), bam_get_qname(b.bam_record)); + if (t != 0) return t; + return (int) (a.bam_record->core.flag&0xc0) - (int) (b.bam_record->core.flag&0xc0); + } else { + pa = (uint64_t)a.bam_record->core.tid<<32|(a.bam_record->core.pos+1)<<1|bam_is_rev(a.bam_record); + pb = (uint64_t)b.bam_record->core.tid<<32|(b.bam_record->core.pos+1)<<1|bam_is_rev(b.bam_record); + return pa < pb ? -1 : (pa > pb ? 1 : 0); + } +} + +uint8_t normalize_type(const uint8_t* aux) { + if (*aux == 'c' || *aux == 'C' || *aux == 's' || *aux == 'S' || *aux == 'i' || *aux == 'I') { + return 'c'; + } else if (*aux == 'f' || *aux == 'd') { + return 'f'; + } else if (*aux == 'H' || *aux == 'Z') { + return 'H'; + } else { + return *aux; + } +} + +// Sort record by tag, using pos or read name as a secondary key if tags are identical. Reads not carrying the tag sort first. +// Tags are first sorted by the type character (in case the types differ), or by the appropriate comparator for that type if they agree. +// Returns a value less than, equal to or greater than zero if a is less than, +// equal to or greater than b, respectively. +static inline int bam1_cmp_by_tag(const bam1_tag a, const bam1_tag b) +{ + const uint8_t* aux_a = a.tag; + const uint8_t* aux_b = b.tag; + + if (aux_a == NULL && aux_b != NULL) { + return -1; + } else if (aux_a != NULL && aux_b == NULL) { + return 1; + } else if (aux_a == NULL && aux_b == NULL) { + return bam1_cmp_core(a,b); + } + + // 'Normalize' the letters of the datatypes to a canonical letter, + // so that comparison of different types + // forms a correct total ordering. + uint8_t a_type = normalize_type(aux_a); + uint8_t b_type = normalize_type(aux_b); + + if (a_type != b_type) { + // Fix int to float comparisons by using bam_aux2f() to read the int + if (a_type == 'c' && b_type == 'f') { + a_type = 'f'; + } else if (a_type == 'f' && b_type == 'c') { + b_type = 'f'; + } else { + // Unfixable mismatched types + return a_type < b_type ? -1 : 1; + } + } + + if (a_type == 'c') { + int64_t va = bam_aux2i(aux_a); + int64_t vb = bam_aux2i(aux_b); + if (va != vb) return va < vb ? -1 : 1; + return bam1_cmp_core(a, b); + } else if (a_type == 'f') { + double va = bam_aux2f(aux_a); + double vb = bam_aux2f(aux_b); + if (va != vb) return va < vb ? -1 : 1; + return bam1_cmp_core(a, b); + } else if (a_type == 'A') { + unsigned char va = bam_aux2A(aux_a); + unsigned char vb = bam_aux2A(aux_b); + if (va != vb) return va < vb ? -1 : 1; + return bam1_cmp_core(a, b); + } else if (a_type == 'H') { + int t = strcmp(bam_aux2Z(aux_a), bam_aux2Z(aux_b)); + if (t) return t; + return bam1_cmp_core(a, b); + } else { + return bam1_cmp_core(a,b); + } +} + +// Function to compare reads and determine which one is < the other +// Handle sort-by-pos, sort-by-name, or sort-by-tag +static inline int bam1_lt(const bam1_tag a, const bam1_tag b) +{ + if (g_is_by_tag) { + return bam1_cmp_by_tag(a, b) < 0; + } else { + return bam1_cmp_core(a,b) < 0; + } +} + + + +KSORT_INIT(sort, bam1_tag, bam1_lt) + +typedef struct { + size_t buf_len; + const char *prefix; + bam1_tag *buf; + const bam_hdr_t *h; + int index; + int error; + int no_save; +} worker_t; + +// Returns 0 for success +// -1 for failure +static int write_buffer(const char *fn, const char *mode, size_t l, bam1_tag *buf, const bam_hdr_t *h, int n_threads, const htsFormat *fmt) +{ + size_t i; + samFile* fp; + fp = sam_open_format(fn, mode, fmt); + if (fp == NULL) return -1; + if (sam_hdr_write(fp, h) != 0) goto fail; + if (n_threads > 1) hts_set_threads(fp, n_threads); + for (i = 0; i < l; ++i) { + if (sam_write1(fp, h, buf[i].bam_record) < 0) goto fail; + } + if (sam_close(fp) < 0) return -1; + return 0; + fail: + sam_close(fp); + return -1; +} + +static void *worker(void *data) +{ + worker_t *w = (worker_t*)data; + char *name; + w->error = 0; + ks_mergesort(sort, w->buf_len, w->buf, 0); + + if (w->no_save) + return 0; + + name = (char*)calloc(strlen(w->prefix) + 20, 1); + if (!name) { w->error = errno; return 0; } + sprintf(name, "%s.%.4d.bam", w->prefix, w->index); + + uint32_t max_ncigar = 0; + int i; + for (i = 0; i < w->buf_len; i++) { + uint32_t nc = w->buf[i].bam_record->core.n_cigar; + if (max_ncigar < nc) + max_ncigar = nc; + } + + if (max_ncigar > 65535) { + htsFormat fmt; + memset(&fmt, 0, sizeof(fmt)); + if (hts_parse_format(&fmt, "cram,version=3.0,no_ref,seqs_per_slice=1000") < 0) { + w->error = errno; + free(name); + return 0; + } + + if (write_buffer(name, "wcx1", w->buf_len, w->buf, w->h, 0, &fmt) < 0) + w->error = errno; + } else { + if (write_buffer(name, "wbx1", w->buf_len, w->buf, w->h, 0, NULL) < 0) + w->error = errno; + } + + free(name); + return 0; +} + +static int sort_blocks(int n_files, size_t k, bam1_tag *buf, const char *prefix, + const bam_hdr_t *h, int n_threads, buf_region *in_mem) +{ + int i; + size_t pos, rest; + pthread_t *tid; + pthread_attr_t attr; + worker_t *w; + int n_failed = 0; + + if (n_threads < 1) n_threads = 1; + if (k < n_threads * 64) n_threads = 1; // use a single thread if we only sort a small batch of records + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + w = (worker_t*)calloc(n_threads, sizeof(worker_t)); + if (!w) return -1; + tid = (pthread_t*)calloc(n_threads, sizeof(pthread_t)); + if (!tid) { free(w); return -1; } + pos = 0; rest = k; + for (i = 0; i < n_threads; ++i) { + w[i].buf_len = rest / (n_threads - i); + w[i].buf = &buf[pos]; + w[i].prefix = prefix; + w[i].h = h; + w[i].index = n_files + i; + if (in_mem) { + w[i].no_save = 1; + in_mem[i].from = pos; + in_mem[i].to = pos + w[i].buf_len; + } else { + w[i].no_save = 0; + } + pos += w[i].buf_len; rest -= w[i].buf_len; + pthread_create(&tid[i], &attr, worker, &w[i]); + } + for (i = 0; i < n_threads; ++i) { + pthread_join(tid[i], 0); + if (w[i].error != 0) { + errno = w[i].error; + print_error_errno("sort", "failed to create temporary file \"%s.%.4d.bam\"", prefix, w[i].index); + n_failed++; + } + } + free(tid); free(w); + if (n_failed) return -1; + if (in_mem) return n_threads; + return n_files + n_threads; +} + +/*! + @abstract Sort an unsorted BAM file based on the chromosome order + and the leftmost position of an alignment + + @param is_by_qname whether to sort by query name + @param sort_by_tag if non-null, sort by the given tag + @param fn name of the file to be sorted + @param prefix prefix of the temporary files (prefix.NNNN.bam are written) + @param fnout name of the final output file to be written + @param modeout sam_open() mode to be used to create the final output file + @param max_mem approxiate maximum memory (very inaccurate) + @param in_fmt input file format options + @param out_fmt output file format and options + @return 0 for successful sorting, negative on errors + + @discussion It may create multiple temporary subalignment files + and then merge them by calling bam_merge_simple(). This function is + NOT thread safe. + */ +int bam_sort_core_ext(int is_by_qname, char* sort_by_tag, const char *fn, const char *prefix, + const char *fnout, const char *modeout, + size_t _max_mem, int n_threads, + const htsFormat *in_fmt, const htsFormat *out_fmt) +{ + int ret = -1, res, i, n_files = 0; + size_t max_k, k, max_mem, bam_mem_offset; + bam_hdr_t *header = NULL; + samFile *fp; + bam1_tag *buf = NULL; + bam1_t *b = bam_init1(); + uint8_t *bam_mem = NULL; + char **fns = NULL; + const char *new_so; + buf_region *in_mem = NULL; + int num_in_mem = 0; + + if (!b) { + print_error("sort", "couldn't allocate memory for bam record"); + return -1; + } + + if (n_threads < 2) n_threads = 1; + g_is_by_qname = is_by_qname; + if (sort_by_tag) { + g_is_by_tag = 1; + strncpy(g_sort_tag, sort_by_tag, 2); + } + + max_mem = _max_mem * n_threads; + buf = NULL; + fp = sam_open_format(fn, "r", in_fmt); + if (fp == NULL) { + print_error_errno("sort", "can't open \"%s\"", fn); + goto err; + } + header = sam_hdr_read(fp); + if (header == NULL) { + print_error("sort", "failed to read header from \"%s\"", fn); + goto err; + } + + if (sort_by_tag != NULL) + new_so = "unknown"; + else if (is_by_qname) + new_so = "queryname"; + else + new_so = "coordinate"; + + if (sam_hdr_change_HD(header, "SO", new_so) != 0) { + print_error("sort", + "failed to change sort order header to '%s'\n", new_so); + goto err; + } + if (sam_hdr_change_HD(header, "GO", NULL) != 0) { + print_error("sort", + "failed to delete group order header\n"); + goto err; + } + + // No gain to using the thread pool here as the flow of this code + // is such that we are *either* reading *or* sorting. Hence a shared + // pool makes no real difference except to reduce the thread count a little. + if (n_threads > 1) + hts_set_threads(fp, n_threads); + + if ((bam_mem = malloc(max_mem)) == NULL) { + print_error("sort", "couldn't allocate memory for bam_mem"); + goto err; + } + + // write sub files + k = max_k = bam_mem_offset = 0; + while ((res = sam_read1(fp, header, b)) >= 0) { + int mem_full = 0; + + if (k == max_k) { + bam1_tag *new_buf; + max_k = max_k? max_k<<1 : 0x10000; + if ((new_buf = realloc(buf, max_k * sizeof(bam1_tag))) == NULL) { + print_error("sort", "couldn't allocate memory for buf"); + goto err; + } + buf = new_buf; + } + + // Check if the BAM record will fit in the memory limit + if (bam_mem_offset + sizeof(*b) + b->l_data < max_mem) { + // Copy record into the memory block + buf[k].bam_record = (bam1_t *)(bam_mem + bam_mem_offset); + *buf[k].bam_record = *b; + buf[k].bam_record->data = (uint8_t *)((char *)buf[k].bam_record + sizeof(bam1_t)); + memcpy(buf[k].bam_record->data, b->data, b->l_data); + // store next BAM record in next 8-byte-aligned address after + // current one + bam_mem_offset = (bam_mem_offset + sizeof(*b) + b->l_data + 8 - 1) & ~((size_t)(8 - 1)); + } else { + // Add a pointer to the remaining record + buf[k].bam_record = b; + mem_full = 1; + } + + // Pull out the pointer to the sort tag if applicable + if (g_is_by_tag) { + buf[k].tag = bam_aux_get(buf[k].bam_record, g_sort_tag); + } else { + buf[k].tag = NULL; + } + ++k; + + if (mem_full) { + n_files = sort_blocks(n_files, k, buf, prefix, header, n_threads, + NULL); + if (n_files < 0) { + goto err; + } + k = 0; + bam_mem_offset = 0; + } + } + if (res != -1) { + print_error("sort", "truncated file. Aborting"); + goto err; + } + + // Sort last records + if (k > 0) { + in_mem = calloc(n_threads > 0 ? n_threads : 1, sizeof(in_mem[0])); + if (!in_mem) goto err; + num_in_mem = sort_blocks(n_files, k, buf, prefix, header, n_threads, + in_mem); + if (num_in_mem < 0) goto err; + } else { + num_in_mem = 0; + } + + // write the final output + if (n_files == 0 && num_in_mem < 2) { // a single block + ks_mergesort(sort, k, buf, 0); + if (write_buffer(fnout, modeout, k, buf, header, n_threads, out_fmt) != 0) { + print_error_errno("sort", "failed to create \"%s\"", fnout); + goto err; + } + } else { // then merge + fprintf(stderr, + "[bam_sort_core] merging from %d files and %d in-memory blocks...\n", + n_files, num_in_mem); + fns = (char**)calloc(n_files, sizeof(char*)); + if (!fns) goto err; + for (i = 0; i < n_files; ++i) { + fns[i] = (char*)calloc(strlen(prefix) + 20, 1); + if (!fns[i]) goto err; + sprintf(fns[i], "%s.%.4d.bam", prefix, i); + } + if (bam_merge_simple(is_by_qname, sort_by_tag, fnout, modeout, header, + n_files, fns, num_in_mem, in_mem, buf, + n_threads, "sort", in_fmt, out_fmt) < 0) { + // Propagate bam_merge_simple() failure; it has already emitted a + // message explaining the failure, so no further message is needed. + goto err; + } + } + + ret = 0; + + err: + // free + if (fns) { + for (i = 0; i < n_files; ++i) { + if (fns[i]) { + unlink(fns[i]); + free(fns[i]); + } + } + free(fns); + } + bam_destroy1(b); + free(buf); + free(bam_mem); + bam_hdr_destroy(header); + if (fp) sam_close(fp); + return ret; +} + +// Unused here but may be used by legacy samtools-using third-party code +int bam_sort_core(int is_by_qname, const char *fn, const char *prefix, size_t max_mem) +{ + int ret; + char *fnout = calloc(strlen(prefix) + 4 + 1, 1); + if (!fnout) return -1; + sprintf(fnout, "%s.bam", prefix); + ret = bam_sort_core_ext(is_by_qname, NULL, fn, prefix, fnout, "wb", max_mem, 0, NULL, NULL); + free(fnout); + return ret; +} + +static void sort_usage(FILE *fp) +{ + fprintf(fp, +"Usage: samtools sort [options...] [in.bam]\n" +"Options:\n" +" -l INT Set compression level, from 0 (uncompressed) to 9 (best)\n" +" -m INT Set maximum memory per thread; suffix K/M/G recognized [768M]\n" +" -n Sort by read name\n" +" -t TAG Sort by value of TAG. Uses position as secondary index (or read name if -n is set)\n" +" -o FILE Write final output to FILE rather than standard output\n" +" -T PREFIX Write temporary files to PREFIX.nnnn.bam\n"); + sam_global_opt_help(fp, "-.O..@"); +} + +static void complain_about_memory_setting(size_t max_mem) { + char *suffix = ""; + const size_t nine_k = 9<<10; + if (max_mem > nine_k) { max_mem >>= 10; suffix = "K"; } + if (max_mem > nine_k) { max_mem >>= 10; suffix = "M"; } + + fprintf(stderr, +"[bam_sort] -m setting (%zu%s bytes) is less than the minimum required (%zuM).\n\n" +"Trying to run with -m too small can lead to the creation of a very large number\n" +"of temporary files. This may make sort fail due to it exceeding limits on the\n" +"number of files it can have open at the same time.\n\n" +"Please check your -m parameter. It should be an integer followed by one of the\n" +"letters K (for kilobytes), M (megabytes) or G (gigabytes). You should ensure it\n" +"is at least the minimum above, and much higher if you are sorting a large file.\n", + max_mem, suffix, SORT_MIN_MEGS_PER_THREAD); +} + +int bam_sort(int argc, char *argv[]) +{ + size_t max_mem = SORT_DEFAULT_MEGS_PER_THREAD << 20; + int c, nargs, is_by_qname = 0, ret, o_seen = 0, level = -1; + char* sort_tag = NULL; + char *fnout = "-", modeout[12]; + kstring_t tmpprefix = { 0, 0, NULL }; + struct stat st; + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, 'O', 0, 0, '@'), + { "threads", required_argument, NULL, '@' }, + { NULL, 0, NULL, 0 } + }; + + while ((c = getopt_long(argc, argv, "l:m:no:O:T:@:t:", lopts, NULL)) >= 0) { + switch (c) { + case 'o': fnout = optarg; o_seen = 1; break; + case 'n': is_by_qname = 1; break; + case 't': sort_tag = strdup(optarg); break; + case 'm': { + char *q; + max_mem = strtol(optarg, &q, 0); + if (*q == 'k' || *q == 'K') max_mem <<= 10; + else if (*q == 'm' || *q == 'M') max_mem <<= 20; + else if (*q == 'g' || *q == 'G') max_mem <<= 30; + break; + } + case 'T': kputs(optarg, &tmpprefix); break; + case 'l': level = atoi(optarg); break; + + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + /* else fall-through */ + case '?': sort_usage(stderr); ret = EXIT_FAILURE; goto sort_end; + } + } + + nargs = argc - optind; + if (nargs == 0 && isatty(STDIN_FILENO)) { + sort_usage(stdout); + ret = EXIT_SUCCESS; + goto sort_end; + } + else if (nargs >= 2) { + // If exactly two, user probably tried to specify legacy + if (nargs == 2) + fprintf(stderr, "[bam_sort] Use -T PREFIX / -o FILE to specify temporary and final output files\n"); + + sort_usage(stderr); + ret = EXIT_FAILURE; + goto sort_end; + } + + if (max_mem < (SORT_MIN_MEGS_PER_THREAD << 20)) { + complain_about_memory_setting(max_mem); + ret = EXIT_FAILURE; + goto sort_end; + } + + strcpy(modeout, "wb"); + sam_open_mode(modeout+1, fnout, NULL); + if (level >= 0) sprintf(strchr(modeout, '\0'), "%d", level < 9? level : 9); + + if (tmpprefix.l == 0) { + if (strcmp(fnout, "-") != 0) ksprintf(&tmpprefix, "%s.tmp", fnout); + else kputc('.', &tmpprefix); + } + if (stat(tmpprefix.s, &st) == 0 && S_ISDIR(st.st_mode)) { + unsigned t = ((unsigned) time(NULL)) ^ ((unsigned) clock()); + if (tmpprefix.s[tmpprefix.l-1] != '/') kputc('/', &tmpprefix); + ksprintf(&tmpprefix, "samtools.%d.%u.tmp", (int) getpid(), t % 10000); + } + + ret = bam_sort_core_ext(is_by_qname, sort_tag, (nargs > 0)? argv[optind] : "-", + tmpprefix.s, fnout, modeout, max_mem, ga.nthreads, + &ga.in, &ga.out); + if (ret >= 0) + ret = EXIT_SUCCESS; + else { + char dummy[4]; + // If we failed on opening the input file & it has no .bam/.cram/etc + // extension, the user probably tried legacy -o + if (ret == -2 && o_seen && nargs > 0 && sam_open_mode(dummy, argv[optind], NULL) < 0) + fprintf(stderr, "[bam_sort] Note the argument has been replaced by -T/-o options\n"); + + ret = EXIT_FAILURE; + } + +sort_end: + free(tmpprefix.s); + sam_global_args_free(&ga); + + return ret; +} diff --git a/samtools/bam_sort.c.pysam.c b/samtools/bam_sort.c.pysam.c new file mode 100644 index 0000000..d38a311 --- /dev/null +++ b/samtools/bam_sort.c.pysam.c @@ -0,0 +1,2362 @@ +#include "samtools.pysam.h" + +/* bam_sort.c -- sorting and merging. + + Copyright (C) 2008-2016 Genome Research Ltd. + Portions copyright (C) 2009-2012 Broad Institute. + + Author: Heng Li + Author: Martin Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "htslib/bgzf.h" +#include "htslib/ksort.h" +#include "htslib/hts_os.h" +#include "htslib/khash.h" +#include "htslib/klist.h" +#include "htslib/kstring.h" +#include "htslib/sam.h" +#include "sam_opts.h" +#include "samtools.h" + + +// Struct which contains the a record, and the pointer to the sort tag (if any) +// Used to speed up sort-by-tag. +typedef struct bam1_tag { + bam1_t *bam_record; + const uint8_t *tag; +} bam1_tag; + +/* Minimum memory required in megabytes before sort will attempt to run. This + is to prevent accidents where failing to use the -m option correctly results + in the creation of a temporary file for each read in the input file. + Don't forget to update the man page if you change this. */ +const size_t SORT_MIN_MEGS_PER_THREAD = 1; + +/* Default per-thread memory for sort. Must be >= SORT_MIN_MEGS_PER_THREAD. + Don't forget to update the man page if you change this. */ +const size_t SORT_DEFAULT_MEGS_PER_THREAD = 768; + +#if !defined(__DARWIN_C_LEVEL) || __DARWIN_C_LEVEL < 900000L +#define NEED_MEMSET_PATTERN4 +#endif + +#ifdef NEED_MEMSET_PATTERN4 +void memset_pattern4(void *target, const void *pattern, size_t size) { + uint32_t* target_iter = target; + size_t loops = size/4; + size_t i; + for (i = 0; i < loops; ++i) { + memcpy(target_iter, pattern, 4); + ++target_iter; + } + if (size%4 != 0) + memcpy(target_iter, pattern, size%4); +} +#endif + +KHASH_INIT(c2c, char*, char*, 1, kh_str_hash_func, kh_str_hash_equal) +KHASH_INIT(cset, char*, char, 0, kh_str_hash_func, kh_str_hash_equal) +KHASH_MAP_INIT_STR(c2i, int) + +#define hdrln_free_char(p) +KLIST_INIT(hdrln, char*, hdrln_free_char) + +static int g_is_by_qname = 0; +static int g_is_by_tag = 0; +static char g_sort_tag[2] = {0,0}; + +static int strnum_cmp(const char *_a, const char *_b) +{ + const unsigned char *a = (const unsigned char*)_a, *b = (const unsigned char*)_b; + const unsigned char *pa = a, *pb = b; + while (*pa && *pb) { + if (isdigit(*pa) && isdigit(*pb)) { + while (*pa == '0') ++pa; + while (*pb == '0') ++pb; + while (isdigit(*pa) && isdigit(*pb) && *pa == *pb) ++pa, ++pb; + if (isdigit(*pa) && isdigit(*pb)) { + int i = 0; + while (isdigit(pa[i]) && isdigit(pb[i])) ++i; + return isdigit(pa[i])? 1 : isdigit(pb[i])? -1 : (int)*pa - (int)*pb; + } else if (isdigit(*pa)) return 1; + else if (isdigit(*pb)) return -1; + else if (pa - a != pb - b) return pa - a < pb - b? 1 : -1; + } else { + if (*pa != *pb) return (int)*pa - (int)*pb; + ++pa; ++pb; + } + } + return *pa? 1 : *pb? -1 : 0; +} + +#define HEAP_EMPTY UINT64_MAX + +typedef struct { + int i; + uint64_t pos, idx; + bam1_tag entry; +} heap1_t; + +static inline int bam1_cmp_by_tag(const bam1_tag a, const bam1_tag b); + +// Function to compare reads in the heap and determine which one is < the other +static inline int heap_lt(const heap1_t a, const heap1_t b) +{ + if (!a.entry.bam_record) + return 1; + if (!b.entry.bam_record) + return 0; + + if (g_is_by_tag) { + int t; + t = bam1_cmp_by_tag(a.entry, b.entry); + if (t != 0) return t > 0; + } else if (g_is_by_qname) { + int t, fa, fb; + t = strnum_cmp(bam_get_qname(a.entry.bam_record), bam_get_qname(b.entry.bam_record)); + if (t != 0) return t > 0; + fa = a.entry.bam_record->core.flag & 0xc0; + fb = b.entry.bam_record->core.flag & 0xc0; + if (fa != fb) return fa > fb; + } else { + if (a.pos != b.pos) return a.pos > b.pos; + } + // This compares by position in the input file(s) + if (a.i != b.i) return a.i > b.i; + return a.idx > b.idx; +} + +KSORT_INIT(heap, heap1_t, heap_lt) + +typedef struct merged_header { + kstring_t out_hd; + kstring_t out_sq; + kstring_t out_rg; + kstring_t out_pg; + kstring_t out_co; + char **target_name; + uint32_t *target_len; + size_t n_targets; + size_t targets_sz; + khash_t(c2i) *sq_tids; + khash_t(cset) *rg_ids; + khash_t(cset) *pg_ids; + bool have_hd; +} merged_header_t; + +typedef struct trans_tbl { + int32_t n_targets; + int* tid_trans; + kh_c2c_t* rg_trans; + kh_c2c_t* pg_trans; + bool lost_coord_sort; +} trans_tbl_t; + +/* Something to look like a regmatch_t */ +typedef struct hdr_match { + ptrdiff_t rm_so; + ptrdiff_t rm_eo; +} hdr_match_t; + +/* + * Search for header lines of a particular record type. + * + * This replaces a regex search for something like /^@SQ.*\tSN:([^\t]+).*$/ + * but is much quicker. The locations found are returned in *matches, + * which has a signature the same as that of a regmatch_t. + * + * rec is the record type to match (i.e. @HD, @SQ, @PG or @RG) + * tag is a tag type in the record to match (SN for @SQ, ID for @PG or @RG) + * + * The location of the record (if found) is returned in matches[0] + * If tag is not NULL, the record is searched for the presence of the + * given tag. If found, the location of the value is returned in matches[1]. + * If the tag isn't found then the record is ignored and the search resumes + * on the next header line. + * + * For simplicity, some assumptions are made about rec and tag: + * rec should include the leading '@' sign and be three characters long. + * tag should be exactly two characters long. + * These are always string constants when this is called below, so we don't + * bother to check here. + * + * Returns 0 if a match was found, -1 if not. + */ + + +static int hdr_line_match(const char *text, const char *rec, + const char *tag, hdr_match_t *matches) { + const char *line_start, *line_end = text; + const char *tag_start, *tag_end; + + for (;;) { + // Find record, ensure either at start of text or follows '\n' + line_start = strstr(line_end, rec); + while (line_start && line_start > text && *(line_start - 1) != '\n') { + line_start = strstr(line_start + 3, rec); + } + if (!line_start) return -1; + + // Find end of header line + line_end = strchr(line_start, '\n'); + if (!line_end) line_end = line_start + strlen(line_start); + + matches[0].rm_so = line_start - text; + matches[0].rm_eo = line_end - text; + if (!tag) return 0; // Match found if not looking for tag. + + for (tag_start = line_start + 3; tag_start < line_end; tag_start++) { + // Find possible tag start. Hacky but quick. + while (*tag_start > '\n') tag_start++; + + // Check it + if (tag_start[0] == '\t' + && strncmp(tag_start + 1, tag, 2) == 0 + && tag_start[3] == ':') { + // Found tag, record location and return. + tag_end = tag_start + 4; + while (*tag_end && *tag_end != '\t' && *tag_end != '\n') + ++tag_end; + matches[1].rm_so = tag_start - text + 4; + matches[1].rm_eo = tag_end - text; + return 0; + } + } + // Couldn't find tag, try again from end of current record. + } +} + +static void trans_tbl_destroy(trans_tbl_t *tbl) { + khiter_t iter; + + free(tbl->tid_trans); + + /* + * The values for the tbl->rg_trans and tbl->pg_trans hashes are pointers + * to keys in the rg_ids and pg_ids sets of the merged_header_t, so + * they should not be freed here. + * + * The keys are unique to each hash entry, so they do have to go. + */ + + for (iter = kh_begin(tbl->rg_trans); iter != kh_end(tbl->rg_trans); ++iter) { + if (kh_exist(tbl->rg_trans, iter)) { + free(kh_key(tbl->rg_trans, iter)); + } + } + for (iter = kh_begin(tbl->pg_trans); iter != kh_end(tbl->pg_trans); ++iter) { + if (kh_exist(tbl->pg_trans, iter)) { + free(kh_key(tbl->pg_trans, iter)); + } + } + + kh_destroy(c2c,tbl->rg_trans); + kh_destroy(c2c,tbl->pg_trans); +} + +/* + * Create a merged_header_t struct. + */ + +static merged_header_t * init_merged_header() { + merged_header_t *merged_hdr; + + merged_hdr = calloc(1, sizeof(*merged_hdr)); + if (merged_hdr == NULL) return NULL; + + merged_hdr->targets_sz = 16; + merged_hdr->target_name = malloc(merged_hdr->targets_sz + * sizeof(*merged_hdr->target_name)); + if (NULL == merged_hdr->target_name) goto fail; + + merged_hdr->target_len = malloc(merged_hdr->targets_sz + * sizeof(*merged_hdr->target_len)); + if (NULL == merged_hdr->target_len) goto fail; + + merged_hdr->sq_tids = kh_init(c2i); + if (merged_hdr->sq_tids == NULL) goto fail; + + merged_hdr->rg_ids = kh_init(cset); + if (merged_hdr->rg_ids == NULL) goto fail; + + merged_hdr->pg_ids = kh_init(cset); + if (merged_hdr->pg_ids == NULL) goto fail; + + return merged_hdr; + + fail: + perror("[init_merged_header]"); + kh_destroy(cset, merged_hdr->pg_ids); + kh_destroy(cset, merged_hdr->rg_ids); + kh_destroy(c2i, merged_hdr->sq_tids); + free(merged_hdr->target_name); + free(merged_hdr->target_len); + free(merged_hdr); + return NULL; +} + +/* Some handy kstring manipulating functions */ + +// Append char range to kstring +static inline int range_to_ks(const char *src, int from, int to, + kstring_t *dest) { + return kputsn(src + from, to - from, dest) != to - from; +} + +// Append a header line match to kstring +static inline int match_to_ks(const char *src, const hdr_match_t *match, + kstring_t *dest) { + return range_to_ks(src, match->rm_so, match->rm_eo, dest); +} + +// Append a kstring to a kstring +static inline int ks_to_ks(kstring_t *src, kstring_t *dest) { + return kputsn(ks_str(src), ks_len(src), dest) != ks_len(src); +} + +/* + * Generate a unique ID by appending a random suffix to a given prefix. + * existing_ids is the set of IDs that are already in use. + * If always_add_suffix is true, the suffix will always be included. + * If false, prefix will be returned unchanged if it isn't in existing_ids. + */ + +static int gen_unique_id(char *prefix, khash_t(cset) *existing_ids, + bool always_add_suffix, kstring_t *dest) { + khiter_t iter; + + if (!always_add_suffix) { + // Try prefix on its own first + iter = kh_get(cset, existing_ids, prefix); + if (iter == kh_end(existing_ids)) { // prefix isn't used yet + dest->l = 0; + if (kputs(prefix, dest) == EOF) return -1; + return 0; + } + } + + do { + dest->l = 0; + ksprintf(dest, "%s-%0lX", prefix, lrand48()); + iter = kh_get(cset, existing_ids, ks_str(dest)); + } while (iter != kh_end(existing_ids)); + + return 0; +} + +/* + * Add the @HD line to the new header + * In practice the @HD line will come from the first input header. + */ + +static int trans_tbl_add_hd(merged_header_t* merged_hdr, + bam_hdr_t *translate) { + hdr_match_t match = {0, 0}; + + // TODO: handle case when @HD needs merging. + if (merged_hdr->have_hd) return 0; + + if (hdr_line_match(translate->text, "@HD", NULL, &match) != 0) { + return 0; + } + + if (match_to_ks(translate->text, &match, &merged_hdr->out_hd)) goto memfail; + if (kputc('\n', &merged_hdr->out_hd) == EOF) goto memfail; + merged_hdr->have_hd = true; + + return 0; + + memfail: + perror(__func__); + return -1; +} + +static inline int grow_target_list(merged_header_t* merged_hdr) { + size_t new_size; + char **new_names; + uint32_t *new_len; + + new_size = merged_hdr->targets_sz * 2; + new_names = realloc(merged_hdr->target_name, sizeof(*new_names) * new_size); + if (!new_names) goto fail; + merged_hdr->target_name = new_names; + + new_len = realloc(merged_hdr->target_len, sizeof(*new_len) * new_size); + if (!new_len) goto fail; + merged_hdr->target_len = new_len; + + merged_hdr->targets_sz = new_size; + + return 0; + + fail: + perror(__func__); + return -1; +} + +/* + * Add @SQ records to the translation table. + * + * Go through the target list for the input header. Any new targets found + * are added to the output header target list. At the same time, a mapping + * from the input to output target ids is stored in tbl. + * + * If any new targets are found, the header text is scanned to find the + * corresponding @SQ records. They are then copied into the + * merged_hdr->out_text kstring (which will eventually become the + * output header text). + * + * Returns 0 on success, -1 on failure. + */ + +static int trans_tbl_add_sq(merged_header_t* merged_hdr, bam_hdr_t *translate, + trans_tbl_t* tbl) { + + kstring_t *out_text = &merged_hdr->out_sq; + khash_t(c2i)* sq_tids = merged_hdr->sq_tids; + hdr_match_t *new_sq_matches = NULL; + char *text; + hdr_match_t matches[2]; + int32_t i; + int32_t old_n_targets = merged_hdr->n_targets; + khiter_t iter; + int min_tid = -1; + + // Fill in the tid part of the translation table, adding new targets + // to the merged header as we go. + + for (i = 0; i < translate->n_targets; ++i) { + + // Check if it's a new target. + iter = kh_get(c2i, sq_tids, translate->target_name[i]); + + if (iter == kh_end(sq_tids)) { + int ret; + // Append missing entries to out_hdr + + if (merged_hdr->n_targets == merged_hdr->targets_sz) { + if (grow_target_list(merged_hdr)) goto fail; + } + + merged_hdr->target_name[merged_hdr->n_targets] = strdup(translate->target_name[i]); + if (merged_hdr->target_name[merged_hdr->n_targets] == NULL) goto memfail; + merged_hdr->target_len[merged_hdr->n_targets] = translate->target_len[i]; + + // Record the new identifier for reference below, + // and when building the ttable for other inputs. + iter = kh_put(c2i, sq_tids, + merged_hdr->target_name[merged_hdr->n_targets], &ret); + if (ret < 0) { + free(merged_hdr->target_name[merged_hdr->n_targets]); + goto memfail; + } + assert(ret > 0); // Should not be in hash already. + + kh_value(sq_tids, iter) = merged_hdr->n_targets; + tbl->tid_trans[i] = merged_hdr->n_targets++; + } else { + tbl->tid_trans[i] = kh_value(sq_tids, iter); + } + + if (tbl->tid_trans[i] > min_tid) { + min_tid = tbl->tid_trans[i]; + } else { + tbl->lost_coord_sort = true; + } + } + + if (merged_hdr->n_targets == old_n_targets) + return 0; // Everything done if no new targets. + + // Otherwise, find @SQ lines in translate->text for all newly added targets. + + new_sq_matches = malloc((merged_hdr->n_targets - old_n_targets) + * sizeof(*new_sq_matches)); + if (new_sq_matches == NULL) goto memfail; + + for (i = 0; i < merged_hdr->n_targets - old_n_targets; i++) { + new_sq_matches[i].rm_so = new_sq_matches[i].rm_eo = -1; + } + + text = translate->text; + while (hdr_line_match(text, "@SQ", "SN", matches) == 0) { + // matches[0] is whole line, matches[1] is SN value. + + // This is a bit disgusting, but avoids a copy... + char c = text[matches[1].rm_eo]; + int idx; + + text[matches[1].rm_eo] = '\0'; + + // Look up the SN value in the sq_tids hash. + iter = kh_get(c2i, sq_tids, text + matches[1].rm_so); + text[matches[1].rm_eo] = c; // restore text + + if (iter == kh_end(sq_tids)) { + // Warn about this, but it's not really fatal. + fprintf(samtools_stderr, "[W::%s] @SQ SN (%.*s) found in text header but not binary header.\n", + __func__, + (int) (matches[1].rm_eo - matches[1].rm_so), + text + matches[1].rm_so); + text += matches[0].rm_eo; + continue; // Skip to next + } + + idx = kh_value(sq_tids, iter); + if (idx >= old_n_targets) { + // is a new SQ, so record position so we can add it to out_text. + assert(idx < merged_hdr->n_targets); + ptrdiff_t off = text - translate->text; + new_sq_matches[idx - old_n_targets].rm_so = matches[0].rm_so + off; + new_sq_matches[idx - old_n_targets].rm_eo = matches[0].rm_eo + off; + } + + // Carry on searching from end of current match + text += matches[0].rm_eo; + } + + // Copy the @SQ headers found and recreate any missing from binary header. + for (i = 0; i < merged_hdr->n_targets - old_n_targets; i++) { + if (new_sq_matches[i].rm_so >= 0) { + if (match_to_ks(translate->text, &new_sq_matches[i], out_text)) + goto memfail; + if (kputc('\n', out_text) == EOF) goto memfail; + } else { + if (kputs("@SQ\tSN:", out_text) == EOF || + kputs(merged_hdr->target_name[i + old_n_targets], out_text) == EOF || + kputs("\tLN:", out_text) == EOF || + kputuw(merged_hdr->target_len[i + old_n_targets], out_text) == EOF || + kputc('\n', out_text) == EOF) goto memfail; + } + } + + free(new_sq_matches); + return 0; + + memfail: + perror(__func__); + fail: + free(new_sq_matches); + return -1; +} + +/* + * Common code for setting up RG and PG record ID tag translation. + * + * is_rg is true for RG translation, false for PG. + * translate is the input bam header + * merge is true if tags with the same ID are to be merged. + * known_ids is the set of IDs already in the output header. + * id_map is the translation map from input header IDs to output header IDs + * If override is set, it will be used to replace the existing ID (RG only) + * + * known_ids and id_map have entries for the new IDs added to them. + * + * Return value is a linked list of header lines with the translated IDs, + * or NULL if something went wrong (probably out of memory). + * + */ + +static klist_t(hdrln) * trans_rg_pg(bool is_rg, bam_hdr_t *translate, + bool merge, khash_t(cset)* known_ids, + khash_t(c2c)* id_map, char *override) { + hdr_match_t matches[2]; + khiter_t iter; + const char *text = translate->text; + const char *rec_type = is_rg ? "@RG" : "@PG"; + klist_t(hdrln) *hdr_lines; + + hdr_lines = kl_init(hdrln); + + // Search through translate's header + while (hdr_line_match(text, rec_type, "ID", matches) == 0) { + // matches[0] is the whole @RG/PG line; matches[1] is the ID field value + + kstring_t orig_id = { 0, 0, NULL }; // ID in original header + kstring_t transformed_id = { 0, 0, NULL }; // ID in output header + char *map_value; // Value to store in id_map + bool id_changed; // Have we changed the ID? + bool not_found_in_output; // ID isn't in the output header (yet) + + // Take a copy of the ID as we'll need it for a hash key. + if (match_to_ks(text, &matches[1], &orig_id)) goto memfail; + + // is our matched ID in our output ID set already? + iter = kh_get(cset, known_ids, ks_str(&orig_id)); + not_found_in_output = (iter == kh_end(known_ids)); + + if (override) { + // Override original ID (RG only) +#ifdef OVERRIDE_DOES_NOT_MERGE + if (gen_unique_id(override, known_ids, false, &transformed_id)) + goto memfail; + not_found_in_output = true; // As ID now unique +#else + if (kputs(override, &transformed_id) == EOF) goto memfail; + // Know about override already? + iter = kh_get(cset, known_ids, ks_str(&transformed_id)); + not_found_in_output = (iter == kh_end(known_ids)); +#endif + id_changed = true; + } else { + if ( not_found_in_output || merge) { + // Not in there or merging so can add it as 1-1 mapping + if (ks_to_ks(&orig_id, &transformed_id)) goto memfail; + id_changed = false; + } else { + // It's in there so we need to transform it by appending + // a random number to the id + if (gen_unique_id(ks_str(&orig_id), known_ids, + true, &transformed_id)) + goto memfail; + id_changed = true; + not_found_in_output = true; // As ID now unique + } + } + + // Does this line need to go into our output header? + if (not_found_in_output) { + + // Take matched line and replace ID with transformed_id + kstring_t new_hdr_line = { 0, 0, NULL }; + + if (!id_changed) { // Can just copy + if (match_to_ks(text, &matches[0], &new_hdr_line)) goto memfail; + } else { // Substitute new name for original + if (range_to_ks(text, matches[0].rm_so, matches[1].rm_so, + &new_hdr_line)) goto memfail; + if (ks_to_ks(&transformed_id, &new_hdr_line)) goto memfail; + if (range_to_ks(text, matches[1].rm_eo, matches[0].rm_eo, + &new_hdr_line)) goto memfail; + } + + // append line to output linked list + char** ln = kl_pushp(hdrln, hdr_lines); + *ln = ks_release(&new_hdr_line); // Give away to linked list + + // Need to add it to known_ids set + int in_there = 0; + iter = kh_put(cset, known_ids, ks_str(&transformed_id), &in_there); + if (in_there < 0) goto memfail; + assert(in_there > 0); // Should not already be in the map + map_value = ks_release(&transformed_id); + } else { + // Use existing string in id_map + assert(kh_exist(known_ids, iter)); + map_value = kh_key(known_ids, iter); + free(ks_release(&transformed_id)); + } + + // Insert it into our translation map + int in_there = 0; + iter = kh_put(c2c, id_map, ks_release(&orig_id), &in_there); + kh_value(id_map, iter) = map_value; + + text += matches[0].rm_eo; // next! + } + + // If there are no RG lines in the file and we are overriding add one + if (is_rg && override && kl_begin(hdr_lines) == NULL) { + kstring_t new_id = {0, 0, NULL}; + kstring_t line = {0, 0, NULL}; + kstring_t empty = {0, 0, NULL}; + int in_there = 0; + char** ln; + + // Get the new ID + if (gen_unique_id(override, known_ids, false, &new_id)) + goto memfail; + + // Make into a header line and add to linked list + ksprintf(&line, "@RG\tID:%s", ks_str(&new_id)); + ln = kl_pushp(hdrln, hdr_lines); + *ln = ks_release(&line); + + // Put into known_ids set + iter = kh_put(cset, known_ids, ks_str(&new_id), &in_there); + if (in_there < 0) goto memfail; + assert(in_there > 0); // Should be a new entry + + // Put into translation map (key is empty string) + if (kputs("", &empty) == EOF) goto memfail; + iter = kh_put(c2c, id_map, ks_release(&empty), &in_there); + if (in_there < 0) goto memfail; + assert(in_there > 0); // Should be a new entry + kh_value(id_map, iter) = ks_release(&new_id); + } + + return hdr_lines; + + memfail: + perror(__func__); + if (hdr_lines) kl_destroy(hdrln, hdr_lines); + return NULL; +} + +/* + * Common code for completing RG and PG record translation. + * + * Input is a list of header lines, and the mapping from input to + * output @PG record IDs. + * + * RG and PG records can contain tags that cross-reference to other @PG + * records. This fixes the tags to contain the new IDs before adding + * them to the output header text. + */ + +static int finish_rg_pg(bool is_rg, klist_t(hdrln) *hdr_lines, + khash_t(c2c)* pg_map, kstring_t *out_text) { + const char *search = is_rg ? "\tPG:" : "\tPP:"; + khiter_t idx; + char *line = NULL; + + while ((kl_shift(hdrln, hdr_lines, &line)) == 0) { + char *id = strstr(line, search); // Look for tag to fix + int pos1 = 0, pos2 = 0; + char *new_id = NULL; + + if (id) { + // Found a tag. Look up the value in the translation map + // to see what it should be changed to in the output file. + char *end, tmp; + + id += 4; // Point to value + end = strchr(id, '\t'); // Find end of tag + if (!end) end = id + strlen(id); + + tmp = *end; + *end = '\0'; // Temporarily get the value on its own. + + // Look-up in translation table + idx = kh_get(c2c, pg_map, id); + if (idx == kh_end(pg_map)) { + // Not found, warn. + fprintf(samtools_stderr, "[W::%s] Tag %s%s not found in @PG records\n", + __func__, search + 1, id); + } else { + // Remember new id and splice points on original string + new_id = kh_value(pg_map, idx); + pos1 = id - line; + pos2 = end - line; + } + + *end = tmp; // Restore string + } + + // Copy line to output: + // line[0..pos1), new_id (if not NULL), line[pos2..end), '\n' + + if (pos1 && range_to_ks(line, 0, pos1, out_text)) goto memfail; + if (new_id && kputs(new_id, out_text) == EOF) goto memfail; + if (kputs(line + pos2, out_text) == EOF) goto memfail; + if (kputc('\n', out_text) == EOF) goto memfail; + free(line); // No longer needed + line = NULL; + } + + return 0; + + memfail: + perror(__func__); + free(line); // Prevent leakage as no longer on list + return -1; +} + +/* + * Build the translation table for an input *am file. This stores mappings + * which allow IDs to be converted from those used in the input file + * to the ones which will be used in the output. The mappings are for: + * Reference sequence IDs (for @SQ records) + * @RG record ID tags + * @PG record ID tags + * + * At the same time, new header text is built up by copying records + * from the input bam file. This will eventually become the header for + * the output file. When copied, the ID tags for @RG and @PG records + * are replaced with their values. The @PG PP: and @RG PG: tags + * are also modified if necessary. + * + * merged_hdr holds state on the output header (which IDs are present, etc.) + * translate is the input header + * tbl is the translation table that gets filled in. + * merge_rg controls merging of @RG records + * merge_pg controls merging of @PG records + * If rg_override is not NULL, it will be used to replace the existing @RG ID + * + * Returns 0 on success, -1 on failure. + */ + +static int trans_tbl_init(merged_header_t* merged_hdr, bam_hdr_t* translate, + trans_tbl_t* tbl, bool merge_rg, bool merge_pg, + bool copy_co, char* rg_override) +{ + klist_t(hdrln) *rg_list = NULL; + klist_t(hdrln) *pg_list = NULL; + + tbl->n_targets = translate->n_targets; + tbl->rg_trans = tbl->pg_trans = NULL; + tbl->tid_trans = (int*)calloc(translate->n_targets, sizeof(int)); + if (tbl->tid_trans == NULL) goto memfail; + tbl->rg_trans = kh_init(c2c); + if (tbl->rg_trans == NULL) goto memfail; + tbl->pg_trans = kh_init(c2c); + if (tbl->pg_trans == NULL) goto memfail; + + tbl->lost_coord_sort = false; + + // Get the @HD record (if not there already). + if (trans_tbl_add_hd(merged_hdr, translate)) goto fail; + + // Fill in map and add header lines for @SQ records + if (trans_tbl_add_sq(merged_hdr, translate, tbl)) goto fail; + + // Get translated header lines and fill in map for @RG records + rg_list = trans_rg_pg(true, translate, merge_rg, merged_hdr->rg_ids, + tbl->rg_trans, rg_override); + if (!rg_list) goto fail; + + // Get translated header lines and fill in map for @PG records + pg_list = trans_rg_pg(false, translate, merge_pg, merged_hdr->pg_ids, + tbl->pg_trans, NULL); + + // Fix-up PG: tags in the new @RG records and add to output + if (finish_rg_pg(true, rg_list, tbl->pg_trans, &merged_hdr->out_rg)) + goto fail; + + // Fix-up PP: tags in the new @PG records and add to output + if (finish_rg_pg(false, pg_list, tbl->pg_trans, &merged_hdr->out_pg)) + goto fail; + + kl_destroy(hdrln, rg_list); rg_list = NULL; + kl_destroy(hdrln, pg_list); pg_list = NULL; + + if (copy_co) { + // Just append @CO headers without translation + const char *line, *end_pointer; + for (line = translate->text; *line; line = end_pointer + 1) { + end_pointer = strchr(line, '\n'); + if (strncmp(line, "@CO", 3) == 0) { + if (end_pointer) { + if (kputsn(line, end_pointer - line + 1, &merged_hdr->out_co) == EOF) + goto memfail; + } else { // Last line with no trailing '\n' + if (kputs(line, &merged_hdr->out_co) == EOF) goto memfail; + if (kputc('\n', &merged_hdr->out_co) == EOF) goto memfail; + } + } + if (end_pointer == NULL) break; + } + } + + return 0; + + memfail: + perror(__func__); + fail: + trans_tbl_destroy(tbl); + if (rg_list) kl_destroy(hdrln, rg_list); + if (pg_list) kl_destroy(hdrln, pg_list); + return -1; +} + +static inline void move_kstr_to_text(char **text, kstring_t *ks) { + memcpy(*text, ks_str(ks), ks_len(ks)); + *text += ks_len(ks); + **text = '\0'; + free(ks_release(ks)); +} + +/* + * Populate a bam_hdr_t struct from data in a merged_header_t. + */ + +static bam_hdr_t * finish_merged_header(merged_header_t *merged_hdr) { + size_t txt_sz; + char *text; + bam_hdr_t *hdr; + + // Check output text size + txt_sz = (ks_len(&merged_hdr->out_hd) + + ks_len(&merged_hdr->out_sq) + + ks_len(&merged_hdr->out_rg) + + ks_len(&merged_hdr->out_pg) + + ks_len(&merged_hdr->out_co)); + if (txt_sz >= INT32_MAX) { + fprintf(samtools_stderr, "[%s] Output header text too long\n", __func__); + return NULL; + } + + // Allocate new header + hdr = bam_hdr_init(); + if (hdr == NULL) goto memfail; + + // Transfer targets arrays to new header + hdr->n_targets = merged_hdr->n_targets; + if (hdr->n_targets > 0) { + // Try to shrink targets arrays to correct size + hdr->target_name = realloc(merged_hdr->target_name, + hdr->n_targets * sizeof(char*)); + if (!hdr->target_name) hdr->target_name = merged_hdr->target_name; + + hdr->target_len = realloc(merged_hdr->target_len, + hdr->n_targets * sizeof(uint32_t)); + if (!hdr->target_len) hdr->target_len = merged_hdr->target_len; + + // These have either been freed by realloc() or, in the unlikely + // event that failed, have had their ownership transferred to hdr + merged_hdr->target_name = NULL; + merged_hdr->target_len = NULL; + } + else { + hdr->target_name = NULL; + hdr->target_len = NULL; + } + + // Allocate text + text = hdr->text = malloc(txt_sz + 1); + if (!text) goto memfail; + + // Put header text in order @HD, @SQ, @RG, @PG, @CO + move_kstr_to_text(&text, &merged_hdr->out_hd); + move_kstr_to_text(&text, &merged_hdr->out_sq); + move_kstr_to_text(&text, &merged_hdr->out_rg); + move_kstr_to_text(&text, &merged_hdr->out_pg); + move_kstr_to_text(&text, &merged_hdr->out_co); + hdr->l_text = txt_sz; + + return hdr; + + memfail: + perror(__func__); + bam_hdr_destroy(hdr); + return NULL; +} + +/* + * Free a merged_header_t struct and all associated data. + * + * Note that the keys to the rg_ids and pg_ids sets are also used as + * values in the translation tables. This function should therefore not + * be called until the translation tables are no longer needed. + */ + +static void free_merged_header(merged_header_t *merged_hdr) { + size_t i; + khiter_t iter; + if (!merged_hdr) return; + free(ks_release(&merged_hdr->out_hd)); + free(ks_release(&merged_hdr->out_sq)); + free(ks_release(&merged_hdr->out_rg)); + free(ks_release(&merged_hdr->out_pg)); + free(ks_release(&merged_hdr->out_co)); + if (merged_hdr->target_name) { + for (i = 0; i < merged_hdr->n_targets; i++) { + free(merged_hdr->target_name[i]); + } + free(merged_hdr->target_name); + } + free(merged_hdr->target_len); + kh_destroy(c2i, merged_hdr->sq_tids); + + if (merged_hdr->rg_ids) { + for (iter = kh_begin(merged_hdr->rg_ids); + iter != kh_end(merged_hdr->rg_ids); ++iter) { + if (kh_exist(merged_hdr->rg_ids, iter)) + free(kh_key(merged_hdr->rg_ids, iter)); + } + kh_destroy(cset, merged_hdr->rg_ids); + } + + if (merged_hdr->pg_ids) { + for (iter = kh_begin(merged_hdr->pg_ids); + iter != kh_end(merged_hdr->pg_ids); ++iter) { + if (kh_exist(merged_hdr->pg_ids, iter)) + free(kh_key(merged_hdr->pg_ids, iter)); + } + kh_destroy(cset, merged_hdr->pg_ids); + } + + free(merged_hdr); +} + +static void bam_translate(bam1_t* b, trans_tbl_t* tbl) +{ + // Update target id if not unmapped tid + if ( b->core.tid >= 0 ) { b->core.tid = tbl->tid_trans[b->core.tid]; } + if ( b->core.mtid >= 0 ) { b->core.mtid = tbl->tid_trans[b->core.mtid]; } + + // If we have a RG update it + uint8_t *rg = bam_aux_get(b, "RG"); + if (rg) { + char* decoded_rg = bam_aux2Z(rg); + khiter_t k = kh_get(c2c, tbl->rg_trans, decoded_rg); + if (k != kh_end(tbl->rg_trans)) { + char* translate_rg = kh_value(tbl->rg_trans,k); + bam_aux_del(b, rg); + if (translate_rg) { + bam_aux_append(b, "RG", 'Z', strlen(translate_rg) + 1, + (uint8_t*)translate_rg); + } + } else { + char *tmp = strdup(decoded_rg); + fprintf(samtools_stderr, + "[bam_translate] RG tag \"%s\" on read \"%s\" encountered " + "with no corresponding entry in header, tag lost. " + "Unknown tags are only reported once per input file for " + "each tag ID.\n", + decoded_rg, bam_get_qname(b)); + bam_aux_del(b, rg); + // Prevent future whinges + if (tmp) { + int in_there = 0; + k = kh_put(c2c, tbl->rg_trans, tmp, &in_there); + if (in_there > 0) kh_value(tbl->rg_trans, k) = NULL; + } + } + } + + // If we have a PG update it + uint8_t *pg = bam_aux_get(b, "PG"); + if (pg) { + char* decoded_pg = bam_aux2Z(pg); + khiter_t k = kh_get(c2c, tbl->pg_trans, decoded_pg); + if (k != kh_end(tbl->pg_trans)) { + char* translate_pg = kh_value(tbl->pg_trans,k); + bam_aux_del(b, pg); + if (translate_pg) { + bam_aux_append(b, "PG", 'Z', strlen(translate_pg) + 1, + (uint8_t*)translate_pg); + } + } else { + char *tmp = strdup(decoded_pg); + fprintf(samtools_stderr, + "[bam_translate] PG tag \"%s\" on read \"%s\" encountered " + "with no corresponding entry in header, tag lost. " + "Unknown tags are only reported once per input file for " + "each tag ID.\n", + decoded_pg, bam_get_qname(b)); + bam_aux_del(b, pg); + // Prevent future whinges + if (tmp) { + int in_there = 0; + k = kh_put(c2c, tbl->pg_trans, tmp, &in_there); + if (in_there > 0) kh_value(tbl->pg_trans, k) = NULL; + } + } + } +} + +int* rtrans_build(int n, int n_targets, trans_tbl_t* translation_tbl) +{ + // Create reverse translation table for tids + int* rtrans = (int*)malloc(sizeof(int32_t)*n*n_targets); + const int32_t NOTID = INT32_MIN; + if (!rtrans) return NULL; + memset_pattern4((void*)rtrans, &NOTID, sizeof(int32_t)*n*n_targets); + int i; + for (i = 0; i < n; ++i) { + int j; + for (j = 0; j < (translation_tbl+i)->n_targets; ++j) { + if ((translation_tbl+i)->tid_trans[j] != -1) { + rtrans[i*n_targets + (translation_tbl+i)->tid_trans[j]] = j; + } + } + } + + return rtrans; +} + +#define MERGE_RG 1 // Attach RG tag based on filename +#define MERGE_UNCOMP 2 // Generate uncompressed BAM +#define MERGE_LEVEL1 4 // Compress the BAM at level 1 (fast) mode +#define MERGE_FORCE 8 // Overwrite output BAM if it exists +#define MERGE_COMBINE_RG 16 // Combine RG tags frather than redefining them +#define MERGE_COMBINE_PG 32 // Combine PG tags frather than redefining them +#define MERGE_FIRST_CO 64 // Use only first file's @CO headers (sort cmd only) + +/* + * How merging is handled + * + * If a hheader is defined use we will use that as our output header + * otherwise we use the first header from the first input file. + * + * Now go through each file and create a translation table for that file for: + * -RG + * -tid + * -PG tags + * + * Then whenever we read a record from a bam we translate that read before + * stashing it in the hash. + * + * In the actual merge, a read is read from each input file, translated and + * stashed in the hash. This assumes that all input files are sorted in the + * same way. Next we just extract the next position ordered read from the + * hash, and replace it if there are still reads left in it's source input + * file. Finally we write our chosen read it to the output file. + */ + +/*! + @abstract Merge multiple sorted BAM. + @param by_qname whether to sort by query name + @param sort_tag if non-null, sort by the given tag + @param out output BAM file name + @param mode sam_open() mode to be used to create the final output file + (overrides level settings from UNCOMP and LEVEL1 flags) + @param headers name of SAM file from which to copy '@' header lines, + or NULL to copy them from the first file to be merged + @param n number of files to be merged + @param fn names of files to be merged + @param flag flags that control how the merge is undertaken + @param reg region to merge + @param n_threads number of threads to use (passed to htslib) + @param cmd command name (used in print_error() etc) + @param in_fmt format options for input files + @param out_fmt output file format and options + @discussion Padding information may NOT correctly maintained. This + function is NOT thread safe. + */ +int bam_merge_core2(int by_qname, char* sort_tag, const char *out, const char *mode, + const char *headers, int n, char * const *fn, int flag, + const char *reg, int n_threads, const char *cmd, + const htsFormat *in_fmt, const htsFormat *out_fmt) +{ + samFile *fpout, **fp = NULL; + heap1_t *heap = NULL; + bam_hdr_t *hout = NULL; + bam_hdr_t *hin = NULL; + int i, j, *RG_len = NULL; + uint64_t idx = 0; + char **RG = NULL; + hts_itr_t **iter = NULL; + bam_hdr_t **hdr = NULL; + trans_tbl_t *translation_tbl = NULL; + int *rtrans = NULL; + merged_header_t *merged_hdr = init_merged_header(); + if (!merged_hdr) return -1; + + // Is there a specified pre-prepared header to use for output? + if (headers) { + samFile* fpheaders = sam_open(headers, "r"); + if (fpheaders == NULL) { + print_error_errno(cmd, "cannot open \"%s\"", headers); + return -1; + } + hin = sam_hdr_read(fpheaders); + sam_close(fpheaders); + if (hin == NULL) { + print_error(cmd, "couldn't read headers from \"%s\"", headers); + goto mem_fail; + } + } + + g_is_by_qname = by_qname; + if (sort_tag) { + g_is_by_tag = 1; + g_sort_tag[0] = sort_tag[0]; + g_sort_tag[1] = sort_tag[1]; + } + + fp = (samFile**)calloc(n, sizeof(samFile*)); + if (!fp) goto mem_fail; + heap = (heap1_t*)calloc(n, sizeof(heap1_t)); + if (!heap) goto mem_fail; + iter = (hts_itr_t**)calloc(n, sizeof(hts_itr_t*)); + if (!iter) goto mem_fail; + hdr = (bam_hdr_t**)calloc(n, sizeof(bam_hdr_t*)); + if (!hdr) goto mem_fail; + translation_tbl = (trans_tbl_t*)calloc(n, sizeof(trans_tbl_t)); + if (!translation_tbl) goto mem_fail; + RG = (char**)calloc(n, sizeof(char*)); + if (!RG) goto mem_fail; + + // prepare RG tag from file names + if (flag & MERGE_RG) { + RG_len = (int*)calloc(n, sizeof(int)); + if (!RG_len) goto mem_fail; + for (i = 0; i != n; ++i) { + int l = strlen(fn[i]); + const char *s = fn[i]; + if (l > 4 && (strcmp(s + l - 4, ".bam") == 0 || strcmp(s + l - 4, ".sam") == 0)) l -= 4; + if (l > 5 && strcmp(s + l - 5, ".cram") == 0) l -= 5; + for (j = l - 1; j >= 0; --j) if (s[j] == '/') break; + ++j; l -= j; + RG[i] = (char*)calloc(l + 1, 1); + if (!RG[i]) goto mem_fail; + RG_len[i] = l; + strncpy(RG[i], s + j, l); + } + } + + if (hin) { + // Popluate merged_hdr from the pre-prepared header + trans_tbl_t dummy; + int res; + res = trans_tbl_init(merged_hdr, hin, &dummy, flag & MERGE_COMBINE_RG, + flag & MERGE_COMBINE_PG, true, NULL); + trans_tbl_destroy(&dummy); + if (res) return -1; // FIXME: memory leak + } + + // open and read the header from each file + for (i = 0; i < n; ++i) { + bam_hdr_t *hin; + fp[i] = sam_open_format(fn[i], "r", in_fmt); + if (fp[i] == NULL) { + print_error_errno(cmd, "fail to open \"%s\"", fn[i]); + goto fail; + } + hin = sam_hdr_read(fp[i]); + if (hin == NULL) { + print_error(cmd, "failed to read header from \"%s\"", fn[i]); + goto fail; + } + + if (trans_tbl_init(merged_hdr, hin, translation_tbl+i, + flag & MERGE_COMBINE_RG, flag & MERGE_COMBINE_PG, + (flag & MERGE_FIRST_CO)? (i == 0) : true, + RG[i])) + return -1; // FIXME: memory leak + + // TODO sam_itr_next() doesn't yet work for SAM files, + // so for those keep the headers around for use with sam_read1() + if (hts_get_format(fp[i])->format == sam) hdr[i] = hin; + else { bam_hdr_destroy(hin); hdr[i] = NULL; } + + if ((translation_tbl+i)->lost_coord_sort && !by_qname) { + fprintf(samtools_stderr, "[bam_merge_core] Order of targets in file %s caused coordinate sort to be lost\n", fn[i]); + } + + // Potential future improvement is to share headers between CRAM files for + // samtools sort (where all headers are identical. + // Eg: + // + // if (i > 1) { + // sam_hdr_free(cram_fd_get_header(fp[i]->fp.cram)); + // cram_fd_set_header(fp[i]->fp.cram, cram_fd_get_header(fp[0]->fp.cram)); + // sam_hdr_incr_ref(cram_fd_get_header(fp[0]->fp.cram)); + // } + } + + // Did we get an @HD line? + if (!merged_hdr->have_hd) { + fprintf(samtools_stderr, "[W::%s] No @HD tag found.\n", __func__); + /* FIXME: Should we add an @HD line here, and if so what should + we put in it? Ideally we want a way of getting htslib to tell + us the SAM version number to assume given no @HD line. Is + it also safe to assume that the output is coordinate sorted? + SO: is optional so we don't have to have it.*/ + /* ksprintf(&merged_hdr->out_hd, "@HD\tVN:1.5\tSO:coordinate\n"); */ + } + + // Transform the header into standard form + hout = finish_merged_header(merged_hdr); + if (!hout) return -1; // FIXME: memory leak + + // If we're only merging a specified region move our iters to start at that point + if (reg) { + int tid, beg, end; + const char *name_lim; + + rtrans = rtrans_build(n, hout->n_targets, translation_tbl); + if (!rtrans) goto mem_fail; + + name_lim = hts_parse_reg(reg, &beg, &end); + if (name_lim) { + char *name = malloc(name_lim - reg + 1); + if (!name) goto mem_fail; + memcpy(name, reg, name_lim - reg); + name[name_lim - reg] = '\0'; + tid = bam_name2id(hout, name); + free(name); + } + else { + // not parsable as a region, but possibly a sequence named "foo:a" + tid = bam_name2id(hout, reg); + beg = 0; + end = INT_MAX; + } + if (tid < 0) { + if (name_lim) fprintf(samtools_stderr, "[%s] Region \"%s\" specifies an unknown reference name\n", __func__, reg); + else fprintf(samtools_stderr, "[%s] Badly formatted region: \"%s\"\n", __func__, reg); + goto fail; + } + for (i = 0; i < n; ++i) { + hts_idx_t *idx = sam_index_load(fp[i], fn[i]); + // (rtrans[i*n+tid]) Look up what hout tid translates to in input tid space + int mapped_tid = rtrans[i*hout->n_targets+tid]; + if (idx == NULL) { + fprintf(samtools_stderr, "[%s] failed to load index for %s. Random alignment retrieval only works for indexed BAM or CRAM files.\n", + __func__, fn[i]); + goto fail; + } + if (mapped_tid != INT32_MIN) { + iter[i] = sam_itr_queryi(idx, mapped_tid, beg, end); + } else { + iter[i] = sam_itr_queryi(idx, HTS_IDX_NONE, 0, 0); + } + hts_idx_destroy(idx); + if (iter[i] == NULL) { + if (mapped_tid != INT32_MIN) { + fprintf(samtools_stderr, + "[%s] failed to get iterator over " + "{%s, %d, %d, %d}\n", + __func__, fn[i], mapped_tid, beg, end); + } else { + fprintf(samtools_stderr, + "[%s] failed to get iterator over " + "{%s, HTS_IDX_NONE, 0, 0}\n", + __func__, fn[i]); + } + goto fail; + } + } + free(rtrans); + rtrans = NULL; + } else { + for (i = 0; i < n; ++i) { + if (hdr[i] == NULL) { + iter[i] = sam_itr_queryi(NULL, HTS_IDX_REST, 0, 0); + if (iter[i] == NULL) { + fprintf(samtools_stderr, "[%s] failed to get iterator\n", __func__); + goto fail; + } + } + else iter[i] = NULL; + } + } + + // Load the first read from each file into the heap + for (i = 0; i < n; ++i) { + heap1_t *h = heap + i; + int res; + h->i = i; + h->entry.bam_record = bam_init1(); + h->entry.tag = NULL; + if (!h->entry.bam_record) goto mem_fail; + res = iter[i] ? sam_itr_next(fp[i], iter[i], h->entry.bam_record) : sam_read1(fp[i], hdr[i], h->entry.bam_record); + if (res >= 0) { + bam_translate(h->entry.bam_record, translation_tbl + i); + h->pos = ((uint64_t)h->entry.bam_record->core.tid<<32) | (uint32_t)((int32_t)h->entry.bam_record->core.pos+1)<<1 | bam_is_rev(h->entry.bam_record); + h->idx = idx++; + if (g_is_by_tag) { + h->entry.tag = bam_aux_get(h->entry.bam_record, g_sort_tag); + } else { + h->entry.tag = NULL; + } + } + else if (res == -1 && (!iter[i] || iter[i]->finished)) { + h->pos = HEAP_EMPTY; + bam_destroy1(h->entry.bam_record); + h->entry.bam_record = NULL; + h->entry.tag = NULL; + } else { + print_error(cmd, "failed to read first record from \"%s\"", fn[i]); + goto fail; + } + } + + // Open output file and write header + if ((fpout = sam_open_format(out, mode, out_fmt)) == 0) { + print_error_errno(cmd, "failed to create \"%s\"", out); + return -1; + } + if (sam_hdr_write(fpout, hout) != 0) { + print_error_errno(cmd, "failed to write header to \"%s\"", out); + sam_close(fpout); + return -1; + } + if (!(flag & MERGE_UNCOMP)) hts_set_threads(fpout, n_threads); + + // Begin the actual merge + ks_heapmake(heap, n, heap); + while (heap->pos != HEAP_EMPTY) { + bam1_t *b = heap->entry.bam_record; + if (flag & MERGE_RG) { + uint8_t *rg = bam_aux_get(b, "RG"); + if (rg) bam_aux_del(b, rg); + bam_aux_append(b, "RG", 'Z', RG_len[heap->i] + 1, (uint8_t*)RG[heap->i]); + } + if (sam_write1(fpout, hout, b) < 0) { + print_error_errno(cmd, "failed writing to \"%s\"", out); + sam_close(fpout); + return -1; + } + if ((j = (iter[heap->i]? sam_itr_next(fp[heap->i], iter[heap->i], b) : sam_read1(fp[heap->i], hdr[heap->i], b))) >= 0) { + bam_translate(b, translation_tbl + heap->i); + heap->pos = ((uint64_t)b->core.tid<<32) | (uint32_t)((int)b->core.pos+1)<<1 | bam_is_rev(b); + heap->idx = idx++; + if (g_is_by_tag) { + heap->entry.tag = bam_aux_get(heap->entry.bam_record, g_sort_tag); + } else { + heap->entry.tag = NULL; + } + } else if (j == -1 && (!iter[heap->i] || iter[heap->i]->finished)) { + heap->pos = HEAP_EMPTY; + bam_destroy1(heap->entry.bam_record); + heap->entry.bam_record = NULL; + heap->entry.tag = NULL; + } else { + print_error(cmd, "\"%s\" is truncated", fn[heap->i]); + goto fail; + } + ks_heapadjust(heap, 0, n, heap); + } + + // Clean up and close + if (flag & MERGE_RG) { + for (i = 0; i != n; ++i) free(RG[i]); + free(RG_len); + } + for (i = 0; i < n; ++i) { + trans_tbl_destroy(translation_tbl + i); + hts_itr_destroy(iter[i]); + bam_hdr_destroy(hdr[i]); + sam_close(fp[i]); + } + bam_hdr_destroy(hin); + bam_hdr_destroy(hout); + free_merged_header(merged_hdr); + free(RG); free(translation_tbl); free(fp); free(heap); free(iter); free(hdr); + if (sam_close(fpout) < 0) { + print_error(cmd, "error closing output file"); + return -1; + } + return 0; + + mem_fail: + print_error(cmd, "Out of memory"); + + fail: + if (flag & MERGE_RG) { + if (RG) { + for (i = 0; i != n; ++i) free(RG[i]); + } + free(RG_len); + } + for (i = 0; i < n; ++i) { + if (translation_tbl && translation_tbl[i].tid_trans) trans_tbl_destroy(translation_tbl + i); + if (iter && iter[i]) hts_itr_destroy(iter[i]); + if (hdr && hdr[i]) bam_hdr_destroy(hdr[i]); + if (fp && fp[i]) sam_close(fp[i]); + if (heap && heap[i].entry.bam_record) bam_destroy1(heap[i].entry.bam_record); + } + if (hout) bam_hdr_destroy(hout); + free(RG); + free(translation_tbl); + free(hdr); + free(iter); + free(heap); + free(fp); + free(rtrans); + return -1; +} + +// Unused here but may be used by legacy samtools-using third-party code +int bam_merge_core(int by_qname, const char *out, const char *headers, int n, char * const *fn, int flag, const char *reg) +{ + char mode[12]; + strcpy(mode, "wb"); + if (flag & MERGE_UNCOMP) strcat(mode, "0"); + else if (flag & MERGE_LEVEL1) strcat(mode, "1"); + return bam_merge_core2(by_qname, NULL, out, mode, headers, n, fn, flag, reg, 0, "merge", NULL, NULL); +} + +static void merge_usage(FILE *to) +{ + fprintf(to, +"Usage: samtools merge [-nurlf] [-h inh.sam] [-b ] [ ... ]\n" +"\n" +"Options:\n" +" -n Input files are sorted by read name\n" +" -t TAG Input files are sorted by TAG value\n" +" -r Attach RG tag (inferred from file names)\n" +" -u Uncompressed BAM output\n" +" -f Overwrite the output BAM if exist\n" +" -1 Compress level 1\n" +" -l INT Compression level, from 0 to 9 [-1]\n" +" -R STR Merge file in the specified region STR [all]\n" +" -h FILE Copy the header in FILE to [in1.bam]\n" +" -c Combine @RG headers with colliding IDs [alter IDs to be distinct]\n" +" -p Combine @PG headers with colliding IDs [alter IDs to be distinct]\n" +" -s VALUE Override random seed\n" +" -b FILE List of input BAM filenames, one per line [null]\n"); + sam_global_opt_help(to, "-.O..@"); +} + +int bam_merge(int argc, char *argv[]) +{ + int c, is_by_qname = 0, flag = 0, ret = 0, level = -1; + char *fn_headers = NULL, *reg = NULL, mode[12]; + char *sort_tag = NULL; + long random_seed = (long)time(NULL); + char** fn = NULL; + int fn_size = 0; + + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, 'O', 0, 0, '@'), + { "threads", required_argument, NULL, '@' }, + { NULL, 0, NULL, 0 } + }; + + if (argc == 1) { + merge_usage(samtools_stdout); + return 0; + } + + while ((c = getopt_long(argc, argv, "h:nru1R:f@:l:cps:b:O:t:", lopts, NULL)) >= 0) { + switch (c) { + case 'r': flag |= MERGE_RG; break; + case 'f': flag |= MERGE_FORCE; break; + case 'h': fn_headers = strdup(optarg); break; + case 'n': is_by_qname = 1; break; + case 't': sort_tag = strdup(optarg); break; + case '1': flag |= MERGE_LEVEL1; level = 1; break; + case 'u': flag |= MERGE_UNCOMP; level = 0; break; + case 'R': reg = strdup(optarg); break; + case 'l': level = atoi(optarg); break; + case 'c': flag |= MERGE_COMBINE_RG; break; + case 'p': flag |= MERGE_COMBINE_PG; break; + case 's': random_seed = atol(optarg); break; + case 'b': { + // load the list of files to read + int nfiles; + char **fn_read = hts_readlines(optarg, &nfiles); + if (fn_read) { + // Append to end of array + fn = realloc(fn, (fn_size+nfiles) * sizeof(char*)); + if (fn == NULL) { ret = 1; goto end; } + memcpy(fn+fn_size, fn_read, nfiles * sizeof(char*)); + fn_size += nfiles; + free(fn_read); + } + else { + print_error("merge", "Invalid file list \"%s\"", optarg); + ret = 1; + } + break; + } + + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + /* else fall-through */ + case '?': merge_usage(samtools_stderr); return 1; + } + } + if ( argc - optind < 1 ) { + print_error("merge", "You must at least specify the output file"); + merge_usage(samtools_stderr); + return 1; + } + + srand48(random_seed); + if (!(flag & MERGE_FORCE) && strcmp(argv[optind], "-")) { + FILE *fp = fopen(argv[optind], "rb"); + if (fp != NULL) { + fclose(fp); + fprintf(samtools_stderr, "[%s] File '%s' exists. Please apply '-f' to overwrite. Abort.\n", __func__, argv[optind]); + return 1; + } + } + + int nargcfiles = argc - (optind+1); + if (nargcfiles > 0) { + // Add argc files to end of array + fn = realloc(fn, (fn_size+nargcfiles) * sizeof(char*)); + if (fn == NULL) { ret = 1; goto end; } + memcpy(fn+fn_size, argv + (optind+1), nargcfiles * sizeof(char*)); + } + if (fn_size+nargcfiles < 1) { + print_error("merge", "You must specify at least one (and usually two or more) input files"); + merge_usage(samtools_stderr); + return 1; + } + strcpy(mode, "wb"); + sam_open_mode(mode+1, argv[optind], NULL); + if (level >= 0) sprintf(strchr(mode, '\0'), "%d", level < 9? level : 9); + if (bam_merge_core2(is_by_qname, sort_tag, argv[optind], mode, fn_headers, + fn_size+nargcfiles, fn, flag, reg, ga.nthreads, + "merge", &ga.in, &ga.out) < 0) + ret = 1; + +end: + if (fn_size > 0) { + int i; + for (i=0; ii, res; + if (i < nfiles) { // read from file + res = sam_read1(fp[i], hout, heap->entry.bam_record); + } else { // read from memory + if (in_mem[i - nfiles].from < in_mem[i - nfiles].to) { + heap->entry.bam_record = buf[in_mem[i - nfiles].from++].bam_record; + res = 0; + } else { + res = -1; + } + } + if (res >= 0) { + heap->pos = (((uint64_t)heap->entry.bam_record->core.tid<<32) + | (uint32_t)((int32_t)heap->entry.bam_record->core.pos+1)<<1 + | bam_is_rev(heap->entry.bam_record)); + heap->idx = (*idx)++; + if (g_is_by_tag) { + heap->entry.tag = bam_aux_get(heap->entry.bam_record, g_sort_tag); + } else { + heap->entry.tag = NULL; + } + } else if (res == -1) { + heap->pos = HEAP_EMPTY; + if (i < nfiles) bam_destroy1(heap->entry.bam_record); + heap->entry.bam_record = NULL; + heap->entry.tag = NULL; + } else { + return -1; + } + return 0; +} + +static int bam_merge_simple(int by_qname, char *sort_tag, const char *out, + const char *mode, bam_hdr_t *hout, + int n, char * const *fn, int num_in_mem, + buf_region *in_mem, bam1_tag *buf, int n_threads, + const char *cmd, const htsFormat *in_fmt, + const htsFormat *out_fmt) { + samFile *fpout = NULL, **fp = NULL; + heap1_t *heap = NULL; + uint64_t idx = 0; + int i, heap_size = n + num_in_mem; + + g_is_by_qname = by_qname; + if (sort_tag) { + g_is_by_tag = 1; + g_sort_tag[0] = sort_tag[0]; + g_sort_tag[1] = sort_tag[1]; + } + if (n > 0) { + fp = (samFile**)calloc(n, sizeof(samFile*)); + if (!fp) goto mem_fail; + } + heap = (heap1_t*)calloc(heap_size, sizeof(heap1_t)); + if (!heap) goto mem_fail; + + // Open each file, read the header and put the first read into the heap + for (i = 0; i < heap_size; i++) { + bam_hdr_t *hin; + heap1_t *h = &heap[i]; + + if (i < n) { + fp[i] = sam_open_format(fn[i], "r", in_fmt); + if (fp[i] == NULL) { + print_error_errno(cmd, "fail to open \"%s\"", fn[i]); + goto fail; + } + + // Read header ... + hin = sam_hdr_read(fp[i]); + if (hin == NULL) { + print_error(cmd, "failed to read header from \"%s\"", fn[i]); + goto fail; + } + // ... and throw it away as we don't really need it + bam_hdr_destroy(hin); + } + + // Get a read into the heap + h->i = i; + h->entry.tag = NULL; + if (i < n) { + h->entry.bam_record = bam_init1(); + if (!h->entry.bam_record) goto mem_fail; + } + if (heap_add_read(h, n, fp, num_in_mem, in_mem, buf, &idx, hout) < 0) { + assert(i < n); + print_error(cmd, "failed to read first record from \"%s\"", fn[i]); + goto fail; + } + } + + // Open output file and write header + if ((fpout = sam_open_format(out, mode, out_fmt)) == 0) { + print_error_errno(cmd, "failed to create \"%s\"", out); + return -1; + } + + hts_set_threads(fpout, n_threads); + + if (sam_hdr_write(fpout, hout) != 0) { + print_error_errno(cmd, "failed to write header to \"%s\"", out); + sam_close(fpout); + return -1; + } + + // Now do the merge + ks_heapmake(heap, heap_size, heap); + while (heap->pos != HEAP_EMPTY) { + bam1_t *b = heap->entry.bam_record; + if (sam_write1(fpout, hout, b) < 0) { + print_error_errno(cmd, "failed writing to \"%s\"", out); + sam_close(fpout); + return -1; + } + if (heap_add_read(heap, n, fp, num_in_mem, in_mem, buf, &idx, hout) < 0) { + assert(heap->i < n); + print_error(cmd, "Error reading \"%s\" : %s", + fn[heap->i], strerror(errno)); + goto fail; + } + ks_heapadjust(heap, 0, heap_size, heap); + } + // Clean up and close + for (i = 0; i < n; i++) { + if (sam_close(fp[i]) != 0) { + print_error(cmd, "Error on closing \"%s\" : %s", + fn[i], strerror(errno)); + } + } + free(fp); + free(heap); + if (sam_close(fpout) < 0) { + print_error(cmd, "error closing output file"); + return -1; + } + return 0; + mem_fail: + print_error(cmd, "Out of memory"); + + fail: + for (i = 0; i < n; i++) { + if (fp && fp[i]) sam_close(fp[i]); + if (heap && heap[i].entry.bam_record) bam_destroy1(heap[i].entry.bam_record); + } + free(fp); + free(heap); + if (fpout) sam_close(fpout); + return -1; +} + +// Function to compare reads and determine which one is < or > the other +// Handle sort-by-pos and sort-by-name. Used as the secondary sort in bam1_lt_by_tag, if reads are equivalent by tag. +// Returns a value less than, equal to or greater than zero if a is less than, +// equal to or greater than b, respectively. +static inline int bam1_cmp_core(const bam1_tag a, const bam1_tag b) +{ + uint64_t pa, pb; + if (!a.bam_record) + return 1; + if (!b.bam_record) + return 0; + + if (g_is_by_qname) { + int t = strnum_cmp(bam_get_qname(a.bam_record), bam_get_qname(b.bam_record)); + if (t != 0) return t; + return (int) (a.bam_record->core.flag&0xc0) - (int) (b.bam_record->core.flag&0xc0); + } else { + pa = (uint64_t)a.bam_record->core.tid<<32|(a.bam_record->core.pos+1)<<1|bam_is_rev(a.bam_record); + pb = (uint64_t)b.bam_record->core.tid<<32|(b.bam_record->core.pos+1)<<1|bam_is_rev(b.bam_record); + return pa < pb ? -1 : (pa > pb ? 1 : 0); + } +} + +uint8_t normalize_type(const uint8_t* aux) { + if (*aux == 'c' || *aux == 'C' || *aux == 's' || *aux == 'S' || *aux == 'i' || *aux == 'I') { + return 'c'; + } else if (*aux == 'f' || *aux == 'd') { + return 'f'; + } else if (*aux == 'H' || *aux == 'Z') { + return 'H'; + } else { + return *aux; + } +} + +// Sort record by tag, using pos or read name as a secondary key if tags are identical. Reads not carrying the tag sort first. +// Tags are first sorted by the type character (in case the types differ), or by the appropriate comparator for that type if they agree. +// Returns a value less than, equal to or greater than zero if a is less than, +// equal to or greater than b, respectively. +static inline int bam1_cmp_by_tag(const bam1_tag a, const bam1_tag b) +{ + const uint8_t* aux_a = a.tag; + const uint8_t* aux_b = b.tag; + + if (aux_a == NULL && aux_b != NULL) { + return -1; + } else if (aux_a != NULL && aux_b == NULL) { + return 1; + } else if (aux_a == NULL && aux_b == NULL) { + return bam1_cmp_core(a,b); + } + + // 'Normalize' the letters of the datatypes to a canonical letter, + // so that comparison of different types + // forms a correct total ordering. + uint8_t a_type = normalize_type(aux_a); + uint8_t b_type = normalize_type(aux_b); + + if (a_type != b_type) { + // Fix int to float comparisons by using bam_aux2f() to read the int + if (a_type == 'c' && b_type == 'f') { + a_type = 'f'; + } else if (a_type == 'f' && b_type == 'c') { + b_type = 'f'; + } else { + // Unfixable mismatched types + return a_type < b_type ? -1 : 1; + } + } + + if (a_type == 'c') { + int64_t va = bam_aux2i(aux_a); + int64_t vb = bam_aux2i(aux_b); + if (va != vb) return va < vb ? -1 : 1; + return bam1_cmp_core(a, b); + } else if (a_type == 'f') { + double va = bam_aux2f(aux_a); + double vb = bam_aux2f(aux_b); + if (va != vb) return va < vb ? -1 : 1; + return bam1_cmp_core(a, b); + } else if (a_type == 'A') { + unsigned char va = bam_aux2A(aux_a); + unsigned char vb = bam_aux2A(aux_b); + if (va != vb) return va < vb ? -1 : 1; + return bam1_cmp_core(a, b); + } else if (a_type == 'H') { + int t = strcmp(bam_aux2Z(aux_a), bam_aux2Z(aux_b)); + if (t) return t; + return bam1_cmp_core(a, b); + } else { + return bam1_cmp_core(a,b); + } +} + +// Function to compare reads and determine which one is < the other +// Handle sort-by-pos, sort-by-name, or sort-by-tag +static inline int bam1_lt(const bam1_tag a, const bam1_tag b) +{ + if (g_is_by_tag) { + return bam1_cmp_by_tag(a, b) < 0; + } else { + return bam1_cmp_core(a,b) < 0; + } +} + + + +KSORT_INIT(sort, bam1_tag, bam1_lt) + +typedef struct { + size_t buf_len; + const char *prefix; + bam1_tag *buf; + const bam_hdr_t *h; + int index; + int error; + int no_save; +} worker_t; + +// Returns 0 for success +// -1 for failure +static int write_buffer(const char *fn, const char *mode, size_t l, bam1_tag *buf, const bam_hdr_t *h, int n_threads, const htsFormat *fmt) +{ + size_t i; + samFile* fp; + fp = sam_open_format(fn, mode, fmt); + if (fp == NULL) return -1; + if (sam_hdr_write(fp, h) != 0) goto fail; + if (n_threads > 1) hts_set_threads(fp, n_threads); + for (i = 0; i < l; ++i) { + if (sam_write1(fp, h, buf[i].bam_record) < 0) goto fail; + } + if (sam_close(fp) < 0) return -1; + return 0; + fail: + sam_close(fp); + return -1; +} + +static void *worker(void *data) +{ + worker_t *w = (worker_t*)data; + char *name; + w->error = 0; + ks_mergesort(sort, w->buf_len, w->buf, 0); + + if (w->no_save) + return 0; + + name = (char*)calloc(strlen(w->prefix) + 20, 1); + if (!name) { w->error = errno; return 0; } + sprintf(name, "%s.%.4d.bam", w->prefix, w->index); + + uint32_t max_ncigar = 0; + int i; + for (i = 0; i < w->buf_len; i++) { + uint32_t nc = w->buf[i].bam_record->core.n_cigar; + if (max_ncigar < nc) + max_ncigar = nc; + } + + if (max_ncigar > 65535) { + htsFormat fmt; + memset(&fmt, 0, sizeof(fmt)); + if (hts_parse_format(&fmt, "cram,version=3.0,no_ref,seqs_per_slice=1000") < 0) { + w->error = errno; + free(name); + return 0; + } + + if (write_buffer(name, "wcx1", w->buf_len, w->buf, w->h, 0, &fmt) < 0) + w->error = errno; + } else { + if (write_buffer(name, "wbx1", w->buf_len, w->buf, w->h, 0, NULL) < 0) + w->error = errno; + } + + free(name); + return 0; +} + +static int sort_blocks(int n_files, size_t k, bam1_tag *buf, const char *prefix, + const bam_hdr_t *h, int n_threads, buf_region *in_mem) +{ + int i; + size_t pos, rest; + pthread_t *tid; + pthread_attr_t attr; + worker_t *w; + int n_failed = 0; + + if (n_threads < 1) n_threads = 1; + if (k < n_threads * 64) n_threads = 1; // use a single thread if we only sort a small batch of records + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + w = (worker_t*)calloc(n_threads, sizeof(worker_t)); + if (!w) return -1; + tid = (pthread_t*)calloc(n_threads, sizeof(pthread_t)); + if (!tid) { free(w); return -1; } + pos = 0; rest = k; + for (i = 0; i < n_threads; ++i) { + w[i].buf_len = rest / (n_threads - i); + w[i].buf = &buf[pos]; + w[i].prefix = prefix; + w[i].h = h; + w[i].index = n_files + i; + if (in_mem) { + w[i].no_save = 1; + in_mem[i].from = pos; + in_mem[i].to = pos + w[i].buf_len; + } else { + w[i].no_save = 0; + } + pos += w[i].buf_len; rest -= w[i].buf_len; + pthread_create(&tid[i], &attr, worker, &w[i]); + } + for (i = 0; i < n_threads; ++i) { + pthread_join(tid[i], 0); + if (w[i].error != 0) { + errno = w[i].error; + print_error_errno("sort", "failed to create temporary file \"%s.%.4d.bam\"", prefix, w[i].index); + n_failed++; + } + } + free(tid); free(w); + if (n_failed) return -1; + if (in_mem) return n_threads; + return n_files + n_threads; +} + +/*! + @abstract Sort an unsorted BAM file based on the chromosome order + and the leftmost position of an alignment + + @param is_by_qname whether to sort by query name + @param sort_by_tag if non-null, sort by the given tag + @param fn name of the file to be sorted + @param prefix prefix of the temporary files (prefix.NNNN.bam are written) + @param fnout name of the final output file to be written + @param modeout sam_open() mode to be used to create the final output file + @param max_mem approxiate maximum memory (very inaccurate) + @param in_fmt input file format options + @param out_fmt output file format and options + @return 0 for successful sorting, negative on errors + + @discussion It may create multiple temporary subalignment files + and then merge them by calling bam_merge_simple(). This function is + NOT thread safe. + */ +int bam_sort_core_ext(int is_by_qname, char* sort_by_tag, const char *fn, const char *prefix, + const char *fnout, const char *modeout, + size_t _max_mem, int n_threads, + const htsFormat *in_fmt, const htsFormat *out_fmt) +{ + int ret = -1, res, i, n_files = 0; + size_t max_k, k, max_mem, bam_mem_offset; + bam_hdr_t *header = NULL; + samFile *fp; + bam1_tag *buf = NULL; + bam1_t *b = bam_init1(); + uint8_t *bam_mem = NULL; + char **fns = NULL; + const char *new_so; + buf_region *in_mem = NULL; + int num_in_mem = 0; + + if (!b) { + print_error("sort", "couldn't allocate memory for bam record"); + return -1; + } + + if (n_threads < 2) n_threads = 1; + g_is_by_qname = is_by_qname; + if (sort_by_tag) { + g_is_by_tag = 1; + strncpy(g_sort_tag, sort_by_tag, 2); + } + + max_mem = _max_mem * n_threads; + buf = NULL; + fp = sam_open_format(fn, "r", in_fmt); + if (fp == NULL) { + print_error_errno("sort", "can't open \"%s\"", fn); + goto err; + } + header = sam_hdr_read(fp); + if (header == NULL) { + print_error("sort", "failed to read header from \"%s\"", fn); + goto err; + } + + if (sort_by_tag != NULL) + new_so = "unknown"; + else if (is_by_qname) + new_so = "queryname"; + else + new_so = "coordinate"; + + if (sam_hdr_change_HD(header, "SO", new_so) != 0) { + print_error("sort", + "failed to change sort order header to '%s'\n", new_so); + goto err; + } + if (sam_hdr_change_HD(header, "GO", NULL) != 0) { + print_error("sort", + "failed to delete group order header\n"); + goto err; + } + + // No gain to using the thread pool here as the flow of this code + // is such that we are *either* reading *or* sorting. Hence a shared + // pool makes no real difference except to reduce the thread count a little. + if (n_threads > 1) + hts_set_threads(fp, n_threads); + + if ((bam_mem = malloc(max_mem)) == NULL) { + print_error("sort", "couldn't allocate memory for bam_mem"); + goto err; + } + + // write sub files + k = max_k = bam_mem_offset = 0; + while ((res = sam_read1(fp, header, b)) >= 0) { + int mem_full = 0; + + if (k == max_k) { + bam1_tag *new_buf; + max_k = max_k? max_k<<1 : 0x10000; + if ((new_buf = realloc(buf, max_k * sizeof(bam1_tag))) == NULL) { + print_error("sort", "couldn't allocate memory for buf"); + goto err; + } + buf = new_buf; + } + + // Check if the BAM record will fit in the memory limit + if (bam_mem_offset + sizeof(*b) + b->l_data < max_mem) { + // Copy record into the memory block + buf[k].bam_record = (bam1_t *)(bam_mem + bam_mem_offset); + *buf[k].bam_record = *b; + buf[k].bam_record->data = (uint8_t *)((char *)buf[k].bam_record + sizeof(bam1_t)); + memcpy(buf[k].bam_record->data, b->data, b->l_data); + // store next BAM record in next 8-byte-aligned address after + // current one + bam_mem_offset = (bam_mem_offset + sizeof(*b) + b->l_data + 8 - 1) & ~((size_t)(8 - 1)); + } else { + // Add a pointer to the remaining record + buf[k].bam_record = b; + mem_full = 1; + } + + // Pull out the pointer to the sort tag if applicable + if (g_is_by_tag) { + buf[k].tag = bam_aux_get(buf[k].bam_record, g_sort_tag); + } else { + buf[k].tag = NULL; + } + ++k; + + if (mem_full) { + n_files = sort_blocks(n_files, k, buf, prefix, header, n_threads, + NULL); + if (n_files < 0) { + goto err; + } + k = 0; + bam_mem_offset = 0; + } + } + if (res != -1) { + print_error("sort", "truncated file. Aborting"); + goto err; + } + + // Sort last records + if (k > 0) { + in_mem = calloc(n_threads > 0 ? n_threads : 1, sizeof(in_mem[0])); + if (!in_mem) goto err; + num_in_mem = sort_blocks(n_files, k, buf, prefix, header, n_threads, + in_mem); + if (num_in_mem < 0) goto err; + } else { + num_in_mem = 0; + } + + // write the final output + if (n_files == 0 && num_in_mem < 2) { // a single block + ks_mergesort(sort, k, buf, 0); + if (write_buffer(fnout, modeout, k, buf, header, n_threads, out_fmt) != 0) { + print_error_errno("sort", "failed to create \"%s\"", fnout); + goto err; + } + } else { // then merge + fprintf(samtools_stderr, + "[bam_sort_core] merging from %d files and %d in-memory blocks...\n", + n_files, num_in_mem); + fns = (char**)calloc(n_files, sizeof(char*)); + if (!fns) goto err; + for (i = 0; i < n_files; ++i) { + fns[i] = (char*)calloc(strlen(prefix) + 20, 1); + if (!fns[i]) goto err; + sprintf(fns[i], "%s.%.4d.bam", prefix, i); + } + if (bam_merge_simple(is_by_qname, sort_by_tag, fnout, modeout, header, + n_files, fns, num_in_mem, in_mem, buf, + n_threads, "sort", in_fmt, out_fmt) < 0) { + // Propagate bam_merge_simple() failure; it has already emitted a + // message explaining the failure, so no further message is needed. + goto err; + } + } + + ret = 0; + + err: + // free + if (fns) { + for (i = 0; i < n_files; ++i) { + if (fns[i]) { + unlink(fns[i]); + free(fns[i]); + } + } + free(fns); + } + bam_destroy1(b); + free(buf); + free(bam_mem); + bam_hdr_destroy(header); + if (fp) sam_close(fp); + return ret; +} + +// Unused here but may be used by legacy samtools-using third-party code +int bam_sort_core(int is_by_qname, const char *fn, const char *prefix, size_t max_mem) +{ + int ret; + char *fnout = calloc(strlen(prefix) + 4 + 1, 1); + if (!fnout) return -1; + sprintf(fnout, "%s.bam", prefix); + ret = bam_sort_core_ext(is_by_qname, NULL, fn, prefix, fnout, "wb", max_mem, 0, NULL, NULL); + free(fnout); + return ret; +} + +static void sort_usage(FILE *fp) +{ + fprintf(fp, +"Usage: samtools sort [options...] [in.bam]\n" +"Options:\n" +" -l INT Set compression level, from 0 (uncompressed) to 9 (best)\n" +" -m INT Set maximum memory per thread; suffix K/M/G recognized [768M]\n" +" -n Sort by read name\n" +" -t TAG Sort by value of TAG. Uses position as secondary index (or read name if -n is set)\n" +" -o FILE Write final output to FILE rather than standard output\n" +" -T PREFIX Write temporary files to PREFIX.nnnn.bam\n"); + sam_global_opt_help(fp, "-.O..@"); +} + +static void complain_about_memory_setting(size_t max_mem) { + char *suffix = ""; + const size_t nine_k = 9<<10; + if (max_mem > nine_k) { max_mem >>= 10; suffix = "K"; } + if (max_mem > nine_k) { max_mem >>= 10; suffix = "M"; } + + fprintf(samtools_stderr, +"[bam_sort] -m setting (%zu%s bytes) is less than the minimum required (%zuM).\n\n" +"Trying to run with -m too small can lead to the creation of a very large number\n" +"of temporary files. This may make sort fail due to it exceeding limits on the\n" +"number of files it can have open at the same time.\n\n" +"Please check your -m parameter. It should be an integer followed by one of the\n" +"letters K (for kilobytes), M (megabytes) or G (gigabytes). You should ensure it\n" +"is at least the minimum above, and much higher if you are sorting a large file.\n", + max_mem, suffix, SORT_MIN_MEGS_PER_THREAD); +} + +int bam_sort(int argc, char *argv[]) +{ + size_t max_mem = SORT_DEFAULT_MEGS_PER_THREAD << 20; + int c, nargs, is_by_qname = 0, ret, o_seen = 0, level = -1; + char* sort_tag = NULL; + char *fnout = "-", modeout[12]; + kstring_t tmpprefix = { 0, 0, NULL }; + struct stat st; + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, 'O', 0, 0, '@'), + { "threads", required_argument, NULL, '@' }, + { NULL, 0, NULL, 0 } + }; + + while ((c = getopt_long(argc, argv, "l:m:no:O:T:@:t:", lopts, NULL)) >= 0) { + switch (c) { + case 'o': fnout = optarg; o_seen = 1; break; + case 'n': is_by_qname = 1; break; + case 't': sort_tag = strdup(optarg); break; + case 'm': { + char *q; + max_mem = strtol(optarg, &q, 0); + if (*q == 'k' || *q == 'K') max_mem <<= 10; + else if (*q == 'm' || *q == 'M') max_mem <<= 20; + else if (*q == 'g' || *q == 'G') max_mem <<= 30; + break; + } + case 'T': kputs(optarg, &tmpprefix); break; + case 'l': level = atoi(optarg); break; + + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + /* else fall-through */ + case '?': sort_usage(samtools_stderr); ret = EXIT_FAILURE; goto sort_end; + } + } + + nargs = argc - optind; + if (nargs == 0 && isatty(STDIN_FILENO)) { + sort_usage(samtools_stdout); + ret = EXIT_SUCCESS; + goto sort_end; + } + else if (nargs >= 2) { + // If exactly two, user probably tried to specify legacy + if (nargs == 2) + fprintf(samtools_stderr, "[bam_sort] Use -T PREFIX / -o FILE to specify temporary and final output files\n"); + + sort_usage(samtools_stderr); + ret = EXIT_FAILURE; + goto sort_end; + } + + if (max_mem < (SORT_MIN_MEGS_PER_THREAD << 20)) { + complain_about_memory_setting(max_mem); + ret = EXIT_FAILURE; + goto sort_end; + } + + strcpy(modeout, "wb"); + sam_open_mode(modeout+1, fnout, NULL); + if (level >= 0) sprintf(strchr(modeout, '\0'), "%d", level < 9? level : 9); + + if (tmpprefix.l == 0) { + if (strcmp(fnout, "-") != 0) ksprintf(&tmpprefix, "%s.tmp", fnout); + else kputc('.', &tmpprefix); + } + if (stat(tmpprefix.s, &st) == 0 && S_ISDIR(st.st_mode)) { + unsigned t = ((unsigned) time(NULL)) ^ ((unsigned) clock()); + if (tmpprefix.s[tmpprefix.l-1] != '/') kputc('/', &tmpprefix); + ksprintf(&tmpprefix, "samtools.%d.%u.tmp", (int) getpid(), t % 10000); + } + + ret = bam_sort_core_ext(is_by_qname, sort_tag, (nargs > 0)? argv[optind] : "-", + tmpprefix.s, fnout, modeout, max_mem, ga.nthreads, + &ga.in, &ga.out); + if (ret >= 0) + ret = EXIT_SUCCESS; + else { + char dummy[4]; + // If we failed on opening the input file & it has no .bam/.cram/etc + // extension, the user probably tried legacy -o + if (ret == -2 && o_seen && nargs > 0 && sam_open_mode(dummy, argv[optind], NULL) < 0) + fprintf(samtools_stderr, "[bam_sort] Note the argument has been replaced by -T/-o options\n"); + + ret = EXIT_FAILURE; + } + +sort_end: + free(tmpprefix.s); + sam_global_args_free(&ga); + + return ret; +} diff --git a/samtools/bam_split.c b/samtools/bam_split.c new file mode 100644 index 0000000..9bb2030 --- /dev/null +++ b/samtools/bam_split.c @@ -0,0 +1,626 @@ +/* bam_split.c -- split subcommand. + + Copyright (C) 2013-2016 Genome Research Ltd. + + Author: Martin Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "htslib/thread_pool.h" +#include "sam_opts.h" +#include "samtools.h" + + +KHASH_MAP_INIT_STR(c2i, int) + +struct parsed_opts { + char* merged_input_name; + char* unaccounted_header_name; + char* unaccounted_name; + char* output_format_string; + bool verbose; + sam_global_args ga; +}; + +typedef struct parsed_opts parsed_opts_t; + +struct state { + samFile* merged_input_file; + bam_hdr_t* merged_input_header; + samFile* unaccounted_file; + bam_hdr_t* unaccounted_header; + size_t output_count; + char** rg_id; + char **rg_output_file_name; + samFile** rg_output_file; + bam_hdr_t** rg_output_header; + kh_c2i_t* rg_hash; + htsThreadPool p; +}; + +typedef struct state state_t; + +static int cleanup_state(state_t* status, bool check_close); +static void cleanup_opts(parsed_opts_t* opts); + +static void usage(FILE *write_to) +{ + fprintf(write_to, +"Usage: samtools split [-u [:]]\n" +" [-f ] [-v] \n" +"Options:\n" +" -f STRING output filename format string [\"%%*_%%#.%%.\"]\n" +" -u FILE1 put reads with no RG tag or an unrecognised RG tag in FILE1\n" +" -u FILE1:FILE2 ...and override the header with FILE2\n" +" -v verbose output\n"); + sam_global_opt_help(write_to, "-....@"); + fprintf(write_to, +"\n" +"Format string expansions:\n" +" %%%% %%\n" +" %%* basename\n" +" %%# @RG index\n" +" %%! @RG ID\n" +" %%. filename extension for output format\n" + ); +} + +// Takes the command line options and turns them into something we can understand +static parsed_opts_t* parse_args(int argc, char** argv) +{ + if (argc == 1) { usage(stdout); return NULL; } + + const char* optstring = "vf:u:@:"; + char* delim; + + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, 0, 0, 0, '@'), + { NULL, 0, NULL, 0 } + }; + + parsed_opts_t* retval = calloc(sizeof(parsed_opts_t), 1); + if (! retval ) { perror("cannot allocate option parsing memory"); return NULL; } + + sam_global_args_init(&retval->ga); + + int opt; + while ((opt = getopt_long(argc, argv, optstring, lopts, NULL)) != -1) { + switch (opt) { + case 'f': + retval->output_format_string = strdup(optarg); + if (! retval->output_format_string ) { perror("cannot allocate output format string memory"); return NULL; } + break; + case 'v': + retval->verbose = true; + break; + case 'u': + retval->unaccounted_name = strdup(optarg); + if (! retval->unaccounted_name ) { perror("cannot allocate string memory"); return NULL; } + if ((delim = strchr(retval->unaccounted_name, ':')) != NULL) { + *delim = '\0'; + retval->unaccounted_header_name = strdup(delim+1); + if (! retval->unaccounted_header_name ) { perror("cannot allocate string memory"); return NULL; } + } + break; + default: + if (parse_sam_global_opt(opt, optarg, lopts, &retval->ga) == 0) break; + /* else fall-through */ + case '?': + usage(stdout); + free(retval); + return NULL; + } + } + + if (retval->output_format_string == NULL) retval->output_format_string = strdup("%*_%#.%."); + + argc -= optind; + argv += optind; + + if (argc != 1) { + print_error("split", "Invalid number of arguments: %d", argc); + usage(stderr); + free(retval); + return NULL; + } + + retval->merged_input_name = strdup(argv[0]); + if (! retval->merged_input_name ) { perror("cannot allocate string memory"); return NULL; } + + return retval; +} + +// Expands a output filename format string +static char* expand_format_string(const char* format_string, const char* basename, const char* rg_id, const int rg_idx, const htsFormat *format) +{ + kstring_t str = { 0, 0, NULL }; + const char* pointer = format_string; + const char* next; + while ((next = strchr(pointer, '%')) != NULL) { + kputsn(pointer, next-pointer, &str); + ++next; + switch (*next) { + case '%': + kputc('%', &str); + break; + case '*': + kputs(basename, &str); + break; + case '#': + kputl(rg_idx, &str); + break; + case '!': + kputs(rg_id, &str); + break; + case '.': + // Only really need to cope with sam, bam, cram + if (format->format != unknown_format) + kputs(hts_format_file_extension(format), &str); + else + kputs("bam", &str); + break; + case '\0': + // Error is: fprintf(stderr, "bad format string, trailing %%\n"); + free(str.s); + return NULL; + default: + // Error is: fprintf(stderr, "bad format string, unknown format specifier\n"); + free(str.s); + return NULL; + } + pointer = next + 1; + } + kputs(pointer, &str); + return ks_release(&str); +} + +// Parse the header, count the number of RG tags and return a list of their names +static bool count_RG(bam_hdr_t* hdr, size_t* count, char*** output_name) +{ + if (hdr->l_text < 3 ) { + *count = 0; + *output_name = NULL; + return true; + } + kstring_t input = { 0, 0, NULL }; + kputsn(hdr->text, hdr->l_text, &input); + + ////////////////////////////////////////// + // First stage count number of @RG tags // + ////////////////////////////////////////// + char* pointer = ks_str(&input); + size_t n_rg = 0; + // Guard against rare case where @RG is first header line + // This shouldn't happen but could where @HD is omitted + if (pointer[0] == '@' && pointer[1] == 'R' && pointer[2] == 'G' ) { + ++n_rg; + pointer += 3; + } + char* line; + while ((line = strstr(pointer, "\n@RG")) != NULL) { + ++n_rg; + pointer = line + 1; + } + + ////////////////////////////////// + // Second stage locate @RG ID's // + ////////////////////////////////// + char** names = (char**)calloc(sizeof(char*), n_rg); + size_t next = 0; + + regex_t rg_finder; + if (regcomp(&rg_finder, "^@RG.*\tID:([!-)+-<>-~][ !-~]*)(\t.*$|$)", REG_EXTENDED|REG_NEWLINE) != 0) { + free(input.s); + free(names); + return false; + } + regmatch_t* matches = (regmatch_t*)calloc(sizeof(regmatch_t),2); + int error; + char* begin = ks_str(&input); + + while ((error = regexec(&rg_finder, begin, 2, matches, 0)) == 0) { + kstring_t str = { 0, 0, NULL }; + kputsn(begin+matches[1].rm_so, matches[1].rm_eo-matches[1].rm_so, &str); + names[next++] = ks_release(&str); + begin += matches[0].rm_eo; + } + + if (error != REG_NOMATCH) { + // cleanup + regfree(&rg_finder); + free(matches); + free(names); + free(input.s); + return false; + } + free(matches); + + // return results + *count = n_rg; + *output_name = names; + regfree(&rg_finder); + free(input.s); + return true; +} + +// Filters a header of @RG lines where ID != id_keep +// TODO: strip @PG's descended from other RGs and their descendants +static bool filter_header_rg(bam_hdr_t* hdr, const char* id_keep, const char *arg_list) +{ + kstring_t str = {0, 0, NULL}; + + regex_t rg_finder; + + if (regcomp(&rg_finder, "^@RG.*\tID:([!-)+-<>-~][ !-~]*)(\t.*$|$)", REG_EXTENDED|REG_NEWLINE) != 0) { + return false; + } + + // regex vars + char* header = hdr->text; + regmatch_t* matches = (regmatch_t*)calloc(sizeof(regmatch_t),2); + kstring_t found_id = { 0, 0, NULL }; + int error; + + while ((error = regexec(&rg_finder, header, 2, matches, 0)) == 0) { + kputsn(header, matches[0].rm_so, &str); // copy header up until the found RG line + + found_id.l = 0; + kputsn(header+matches[1].rm_so, matches[1].rm_eo-matches[1].rm_so, &found_id); // extract ID + // if it matches keep keep it, else we can just ignore it + if (strcmp(ks_str(&found_id), id_keep) == 0) { + kputsn(header+matches[0].rm_so, (matches[0].rm_eo+1)-matches[0].rm_so, &str); + } + // move pointer forward + header += matches[0].rm_eo+1; + } + // cleanup + free(found_id.s); + free(matches); + regfree(&rg_finder); + // Did we leave loop because of an error? + if (error != REG_NOMATCH) { + return false; + } + + // Write remainder of string + kputs(header, &str); + + // Modify header + hdr->l_text = ks_len(&str); + free(hdr->text); + hdr->text = ks_release(&str); + + // Add the PG line + SAM_hdr *sh = sam_hdr_parse_(hdr->text, hdr->l_text); + if (sam_hdr_add_PG(sh, "samtools", + "VN", samtools_version(), + arg_list ? "CL": NULL, + arg_list ? arg_list : NULL, + NULL) != 0) + return -1; + + free(hdr->text); + hdr->text = strdup(sam_hdr_str(sh)); + hdr->l_text = sam_hdr_length(sh); + if (!hdr->text) + return false; + sam_hdr_free(sh); + + return true; +} + +// Set the initial state +static state_t* init(parsed_opts_t* opts, const char *arg_list) +{ + state_t* retval = calloc(sizeof(state_t), 1); + if (!retval) { + print_error_errno("split", "Initialisation failed"); + return NULL; + } + + if (opts->ga.nthreads > 0) { + if (!(retval->p.pool = hts_tpool_init(opts->ga.nthreads))) { + fprintf(stderr, "Error creating thread pool\n"); + return NULL; + } + } + + retval->merged_input_file = sam_open_format(opts->merged_input_name, "rb", &opts->ga.in); + if (!retval->merged_input_file) { + print_error_errno("split", "Could not open \"%s\"", opts->merged_input_name); + free(retval); + return NULL; + } + if (retval->p.pool) + hts_set_opt(retval->merged_input_file, HTS_OPT_THREAD_POOL, &retval->p); + retval->merged_input_header = sam_hdr_read(retval->merged_input_file); + if (retval->merged_input_header == NULL) { + print_error("split", "Could not read header from \"%s\"", opts->merged_input_name); + cleanup_state(retval, false); + return NULL; + } + + if (opts->unaccounted_name) { + if (opts->unaccounted_header_name) { + samFile* hdr_load = sam_open_format(opts->unaccounted_header_name, "r", &opts->ga.in); + if (!hdr_load) { + print_error_errno("split", "Could not open unaccounted header file \"%s\"", opts->unaccounted_header_name); + cleanup_state(retval, false); + return NULL; + } + retval->unaccounted_header = sam_hdr_read(hdr_load); + if (retval->unaccounted_header == NULL) { + print_error("split", "Could not read header from \"%s\"", opts->unaccounted_header_name); + cleanup_state(retval, false); + return NULL; + } + sam_close(hdr_load); + } else { + retval->unaccounted_header = bam_hdr_dup(retval->merged_input_header); + } + + retval->unaccounted_file = sam_open_format(opts->unaccounted_name, "wb", &opts->ga.out); + if (retval->unaccounted_file == NULL) { + print_error_errno("split", "Could not open unaccounted output file \"%s\"", opts->unaccounted_name); + cleanup_state(retval, false); + return NULL; + } + if (retval->p.pool) + hts_set_opt(retval->unaccounted_file, HTS_OPT_THREAD_POOL, &retval->p); + } + + // Open output files for RGs + if (!count_RG(retval->merged_input_header, &retval->output_count, &retval->rg_id)) return NULL; + if (opts->verbose) fprintf(stderr, "@RG's found %zu\n",retval->output_count); + + retval->rg_output_file_name = (char **)calloc(retval->output_count, sizeof(char *)); + retval->rg_output_file = (samFile**)calloc(retval->output_count, sizeof(samFile*)); + retval->rg_output_header = (bam_hdr_t**)calloc(retval->output_count, sizeof(bam_hdr_t*)); + retval->rg_hash = kh_init_c2i(); + if (!retval->rg_output_file_name || !retval->rg_output_file || !retval->rg_output_header || !retval->rg_hash) { + print_error_errno("split", "Could not initialise output file array"); + cleanup_state(retval, false); + return NULL; + } + + char* dirsep = strrchr(opts->merged_input_name, '/'); + char* input_base_name = strdup(dirsep? dirsep+1 : opts->merged_input_name); + if (!input_base_name) { + print_error_errno("split", "Filename manipulation failed"); + cleanup_state(retval, false); + return NULL; + } + char* extension = strrchr(input_base_name, '.'); + if (extension) *extension = '\0'; + + size_t i; + for (i = 0; i < retval->output_count; i++) { + char* output_filename = NULL; + + output_filename = expand_format_string(opts->output_format_string, + input_base_name, + retval->rg_id[i], i, + &opts->ga.out); + + if ( output_filename == NULL ) { + print_error("split", "Error expanding output filename format string"); + cleanup_state(retval, false); + free(input_base_name); + return NULL; + } + + retval->rg_output_file_name[i] = output_filename; + retval->rg_output_file[i] = sam_open_format(output_filename, "wb", &opts->ga.out); + if (retval->rg_output_file[i] == NULL) { + print_error_errno("split", "Could not open \"%s\"", output_filename); + cleanup_state(retval, false); + free(input_base_name); + return NULL; + } + if (retval->p.pool) + hts_set_opt(retval->rg_output_file[i], HTS_OPT_THREAD_POOL, &retval->p); + + // Record index in hash + int ret; + khiter_t iter = kh_put_c2i(retval->rg_hash, retval->rg_id[i], &ret); + kh_val(retval->rg_hash,iter) = i; + + // Set and edit header + retval->rg_output_header[i] = bam_hdr_dup(retval->merged_input_header); + if ( !filter_header_rg(retval->rg_output_header[i], retval->rg_id[i], arg_list) ) { + print_error("split", "Could not rewrite header for \"%s\"", output_filename); + cleanup_state(retval, false); + free(input_base_name); + return NULL; + } + } + + free(input_base_name); + + return retval; +} + +static bool split(state_t* state) +{ + if (state->unaccounted_file && sam_hdr_write(state->unaccounted_file, state->unaccounted_header) != 0) { + print_error_errno("split", "Could not write output file header"); + return false; + } + size_t i; + for (i = 0; i < state->output_count; i++) { + if (sam_hdr_write(state->rg_output_file[i], state->rg_output_header[i]) != 0) { + print_error_errno("split", "Could not write file header to \"%s\"", state->rg_output_file_name[i]); + return false; + } + } + + bam1_t* file_read = bam_init1(); + // Read the first record + int r; + if ((r=sam_read1(state->merged_input_file, state->merged_input_header, file_read)) < 0) { + // Nothing more to read? Ignore this file + bam_destroy1(file_read); + file_read = NULL; + if (r < -1) { + print_error("split", "Could not read first input record"); + return false; + } + } + + while (file_read != NULL) { + // Get RG tag from read and look it up in hash to find file to output it to + uint8_t* tag = bam_aux_get(file_read, "RG"); + khiter_t iter; + if ( tag != NULL ) { + char* rg = bam_aux2Z(tag); + iter = kh_get_c2i(state->rg_hash, rg); + } else { + iter = kh_end(state->rg_hash); + } + + // Write the read out to correct file + if (iter != kh_end(state->rg_hash)) { + // if found write to the appropriate untangled bam + int i = kh_val(state->rg_hash,iter); + if (sam_write1(state->rg_output_file[i], state->rg_output_header[i], file_read) < 0) { + print_error_errno("split", "Could not write to \"%s\"", state->rg_output_file_name[i]); + bam_destroy1(file_read); + return false; + } + } else { + // otherwise write to the unaccounted bam if there is one or fail + if (state->unaccounted_file == NULL) { + if (tag) { + fprintf(stderr, "Read \"%s\" with unaccounted for tag \"%s\".\n", bam_get_qname(file_read), bam_aux2Z(tag)); + } else { + fprintf(stderr, "Read \"%s\" has no RG tag.\n", bam_get_qname(file_read)); + } + bam_destroy1(file_read); + return false; + } else { + if (sam_write1(state->unaccounted_file, state->unaccounted_header, file_read) < 0) { + print_error_errno("split", "Could not write to unaccounted output file"); + bam_destroy1(file_read); + return false; + } + } + } + + // Replace written read with the next one to process + if ((r=sam_read1(state->merged_input_file, state->merged_input_header, file_read)) < 0) { + // Nothing more to read? Ignore this file in future + bam_destroy1(file_read); + file_read = NULL; + if (r < -1) { + print_error("split", "Could not read input record"); + return false; + } + } + } + + return true; +} + +static int cleanup_state(state_t* status, bool check_close) +{ + int ret = 0; + + if (!status) return 0; + if (status->unaccounted_header) bam_hdr_destroy(status->unaccounted_header); + if (status->unaccounted_file) { + if (sam_close(status->unaccounted_file) < 0 && check_close) { + print_error("split", "Error on closing unaccounted file"); + ret = -1; + } + } + sam_close(status->merged_input_file); + size_t i; + for (i = 0; i < status->output_count; i++) { + if (status->rg_output_header && status->rg_output_header[i]) + bam_hdr_destroy(status->rg_output_header[i]); + if (status->rg_output_file && status->rg_output_file[i]) { + if (sam_close(status->rg_output_file[i]) < 0 && check_close) { + print_error("split", "Error on closing output file \"%s\"", status->rg_output_file_name[i]); + ret = -1; + } + } + if (status->rg_id) free(status->rg_id[i]); + if (status->rg_output_file_name) free(status->rg_output_file_name[i]); + } + if (status->merged_input_header) + bam_hdr_destroy(status->merged_input_header); + free(status->rg_output_header); + free(status->rg_output_file); + free(status->rg_output_file_name); + kh_destroy_c2i(status->rg_hash); + free(status->rg_id); + free(status); + + if (status->p.pool) + hts_tpool_destroy(status->p.pool); + + return ret; +} + +static void cleanup_opts(parsed_opts_t* opts) +{ + if (!opts) return; + free(opts->merged_input_name); + free(opts->unaccounted_header_name); + free(opts->unaccounted_name); + free(opts->output_format_string); + sam_global_args_free(&opts->ga); + free(opts); +} + +int main_split(int argc, char** argv) +{ + int ret = 1; + char *arg_list = stringify_argv(argc+1, argv-1); + parsed_opts_t* opts = parse_args(argc, argv); + if (!opts) goto cleanup_opts; + state_t* status = init(opts, arg_list); + if (!status) goto cleanup_opts; + + if (!split(status)) { + cleanup_state(status, false); + goto cleanup_opts; + } + + ret = cleanup_state(status, true); + +cleanup_opts: + cleanup_opts(opts); + free(arg_list); + + return ret; +} diff --git a/samtools/bam_split.c.pysam.c b/samtools/bam_split.c.pysam.c new file mode 100644 index 0000000..9395c81 --- /dev/null +++ b/samtools/bam_split.c.pysam.c @@ -0,0 +1,628 @@ +#include "samtools.pysam.h" + +/* bam_split.c -- split subcommand. + + Copyright (C) 2013-2016 Genome Research Ltd. + + Author: Martin Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "htslib/thread_pool.h" +#include "sam_opts.h" +#include "samtools.h" + + +KHASH_MAP_INIT_STR(c2i, int) + +struct parsed_opts { + char* merged_input_name; + char* unaccounted_header_name; + char* unaccounted_name; + char* output_format_string; + bool verbose; + sam_global_args ga; +}; + +typedef struct parsed_opts parsed_opts_t; + +struct state { + samFile* merged_input_file; + bam_hdr_t* merged_input_header; + samFile* unaccounted_file; + bam_hdr_t* unaccounted_header; + size_t output_count; + char** rg_id; + char **rg_output_file_name; + samFile** rg_output_file; + bam_hdr_t** rg_output_header; + kh_c2i_t* rg_hash; + htsThreadPool p; +}; + +typedef struct state state_t; + +static int cleanup_state(state_t* status, bool check_close); +static void cleanup_opts(parsed_opts_t* opts); + +static void usage(FILE *write_to) +{ + fprintf(write_to, +"Usage: samtools split [-u [:]]\n" +" [-f ] [-v] \n" +"Options:\n" +" -f STRING output filename format string [\"%%*_%%#.%%.\"]\n" +" -u FILE1 put reads with no RG tag or an unrecognised RG tag in FILE1\n" +" -u FILE1:FILE2 ...and override the header with FILE2\n" +" -v verbose output\n"); + sam_global_opt_help(write_to, "-....@"); + fprintf(write_to, +"\n" +"Format string expansions:\n" +" %%%% %%\n" +" %%* basename\n" +" %%# @RG index\n" +" %%! @RG ID\n" +" %%. filename extension for output format\n" + ); +} + +// Takes the command line options and turns them into something we can understand +static parsed_opts_t* parse_args(int argc, char** argv) +{ + if (argc == 1) { usage(samtools_stdout); return NULL; } + + const char* optstring = "vf:u:@:"; + char* delim; + + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, 0, 0, 0, '@'), + { NULL, 0, NULL, 0 } + }; + + parsed_opts_t* retval = calloc(sizeof(parsed_opts_t), 1); + if (! retval ) { perror("cannot allocate option parsing memory"); return NULL; } + + sam_global_args_init(&retval->ga); + + int opt; + while ((opt = getopt_long(argc, argv, optstring, lopts, NULL)) != -1) { + switch (opt) { + case 'f': + retval->output_format_string = strdup(optarg); + if (! retval->output_format_string ) { perror("cannot allocate output format string memory"); return NULL; } + break; + case 'v': + retval->verbose = true; + break; + case 'u': + retval->unaccounted_name = strdup(optarg); + if (! retval->unaccounted_name ) { perror("cannot allocate string memory"); return NULL; } + if ((delim = strchr(retval->unaccounted_name, ':')) != NULL) { + *delim = '\0'; + retval->unaccounted_header_name = strdup(delim+1); + if (! retval->unaccounted_header_name ) { perror("cannot allocate string memory"); return NULL; } + } + break; + default: + if (parse_sam_global_opt(opt, optarg, lopts, &retval->ga) == 0) break; + /* else fall-through */ + case '?': + usage(samtools_stdout); + free(retval); + return NULL; + } + } + + if (retval->output_format_string == NULL) retval->output_format_string = strdup("%*_%#.%."); + + argc -= optind; + argv += optind; + + if (argc != 1) { + print_error("split", "Invalid number of arguments: %d", argc); + usage(samtools_stderr); + free(retval); + return NULL; + } + + retval->merged_input_name = strdup(argv[0]); + if (! retval->merged_input_name ) { perror("cannot allocate string memory"); return NULL; } + + return retval; +} + +// Expands a output filename format string +static char* expand_format_string(const char* format_string, const char* basename, const char* rg_id, const int rg_idx, const htsFormat *format) +{ + kstring_t str = { 0, 0, NULL }; + const char* pointer = format_string; + const char* next; + while ((next = strchr(pointer, '%')) != NULL) { + kputsn(pointer, next-pointer, &str); + ++next; + switch (*next) { + case '%': + kputc('%', &str); + break; + case '*': + kputs(basename, &str); + break; + case '#': + kputl(rg_idx, &str); + break; + case '!': + kputs(rg_id, &str); + break; + case '.': + // Only really need to cope with sam, bam, cram + if (format->format != unknown_format) + kputs(hts_format_file_extension(format), &str); + else + kputs("bam", &str); + break; + case '\0': + // Error is: fprintf(samtools_stderr, "bad format string, trailing %%\n"); + free(str.s); + return NULL; + default: + // Error is: fprintf(samtools_stderr, "bad format string, unknown format specifier\n"); + free(str.s); + return NULL; + } + pointer = next + 1; + } + kputs(pointer, &str); + return ks_release(&str); +} + +// Parse the header, count the number of RG tags and return a list of their names +static bool count_RG(bam_hdr_t* hdr, size_t* count, char*** output_name) +{ + if (hdr->l_text < 3 ) { + *count = 0; + *output_name = NULL; + return true; + } + kstring_t input = { 0, 0, NULL }; + kputsn(hdr->text, hdr->l_text, &input); + + ////////////////////////////////////////// + // First stage count number of @RG tags // + ////////////////////////////////////////// + char* pointer = ks_str(&input); + size_t n_rg = 0; + // Guard against rare case where @RG is first header line + // This shouldn't happen but could where @HD is omitted + if (pointer[0] == '@' && pointer[1] == 'R' && pointer[2] == 'G' ) { + ++n_rg; + pointer += 3; + } + char* line; + while ((line = strstr(pointer, "\n@RG")) != NULL) { + ++n_rg; + pointer = line + 1; + } + + ////////////////////////////////// + // Second stage locate @RG ID's // + ////////////////////////////////// + char** names = (char**)calloc(sizeof(char*), n_rg); + size_t next = 0; + + regex_t rg_finder; + if (regcomp(&rg_finder, "^@RG.*\tID:([!-)+-<>-~][ !-~]*)(\t.*$|$)", REG_EXTENDED|REG_NEWLINE) != 0) { + free(input.s); + free(names); + return false; + } + regmatch_t* matches = (regmatch_t*)calloc(sizeof(regmatch_t),2); + int error; + char* begin = ks_str(&input); + + while ((error = regexec(&rg_finder, begin, 2, matches, 0)) == 0) { + kstring_t str = { 0, 0, NULL }; + kputsn(begin+matches[1].rm_so, matches[1].rm_eo-matches[1].rm_so, &str); + names[next++] = ks_release(&str); + begin += matches[0].rm_eo; + } + + if (error != REG_NOMATCH) { + // cleanup + regfree(&rg_finder); + free(matches); + free(names); + free(input.s); + return false; + } + free(matches); + + // return results + *count = n_rg; + *output_name = names; + regfree(&rg_finder); + free(input.s); + return true; +} + +// Filters a header of @RG lines where ID != id_keep +// TODO: strip @PG's descended from other RGs and their descendants +static bool filter_header_rg(bam_hdr_t* hdr, const char* id_keep, const char *arg_list) +{ + kstring_t str = {0, 0, NULL}; + + regex_t rg_finder; + + if (regcomp(&rg_finder, "^@RG.*\tID:([!-)+-<>-~][ !-~]*)(\t.*$|$)", REG_EXTENDED|REG_NEWLINE) != 0) { + return false; + } + + // regex vars + char* header = hdr->text; + regmatch_t* matches = (regmatch_t*)calloc(sizeof(regmatch_t),2); + kstring_t found_id = { 0, 0, NULL }; + int error; + + while ((error = regexec(&rg_finder, header, 2, matches, 0)) == 0) { + kputsn(header, matches[0].rm_so, &str); // copy header up until the found RG line + + found_id.l = 0; + kputsn(header+matches[1].rm_so, matches[1].rm_eo-matches[1].rm_so, &found_id); // extract ID + // if it matches keep keep it, else we can just ignore it + if (strcmp(ks_str(&found_id), id_keep) == 0) { + kputsn(header+matches[0].rm_so, (matches[0].rm_eo+1)-matches[0].rm_so, &str); + } + // move pointer forward + header += matches[0].rm_eo+1; + } + // cleanup + free(found_id.s); + free(matches); + regfree(&rg_finder); + // Did we leave loop because of an error? + if (error != REG_NOMATCH) { + return false; + } + + // Write remainder of string + kputs(header, &str); + + // Modify header + hdr->l_text = ks_len(&str); + free(hdr->text); + hdr->text = ks_release(&str); + + // Add the PG line + SAM_hdr *sh = sam_hdr_parse_(hdr->text, hdr->l_text); + if (sam_hdr_add_PG(sh, "samtools", + "VN", samtools_version(), + arg_list ? "CL": NULL, + arg_list ? arg_list : NULL, + NULL) != 0) + return -1; + + free(hdr->text); + hdr->text = strdup(sam_hdr_str(sh)); + hdr->l_text = sam_hdr_length(sh); + if (!hdr->text) + return false; + sam_hdr_free(sh); + + return true; +} + +// Set the initial state +static state_t* init(parsed_opts_t* opts, const char *arg_list) +{ + state_t* retval = calloc(sizeof(state_t), 1); + if (!retval) { + print_error_errno("split", "Initialisation failed"); + return NULL; + } + + if (opts->ga.nthreads > 0) { + if (!(retval->p.pool = hts_tpool_init(opts->ga.nthreads))) { + fprintf(samtools_stderr, "Error creating thread pool\n"); + return NULL; + } + } + + retval->merged_input_file = sam_open_format(opts->merged_input_name, "rb", &opts->ga.in); + if (!retval->merged_input_file) { + print_error_errno("split", "Could not open \"%s\"", opts->merged_input_name); + free(retval); + return NULL; + } + if (retval->p.pool) + hts_set_opt(retval->merged_input_file, HTS_OPT_THREAD_POOL, &retval->p); + retval->merged_input_header = sam_hdr_read(retval->merged_input_file); + if (retval->merged_input_header == NULL) { + print_error("split", "Could not read header from \"%s\"", opts->merged_input_name); + cleanup_state(retval, false); + return NULL; + } + + if (opts->unaccounted_name) { + if (opts->unaccounted_header_name) { + samFile* hdr_load = sam_open_format(opts->unaccounted_header_name, "r", &opts->ga.in); + if (!hdr_load) { + print_error_errno("split", "Could not open unaccounted header file \"%s\"", opts->unaccounted_header_name); + cleanup_state(retval, false); + return NULL; + } + retval->unaccounted_header = sam_hdr_read(hdr_load); + if (retval->unaccounted_header == NULL) { + print_error("split", "Could not read header from \"%s\"", opts->unaccounted_header_name); + cleanup_state(retval, false); + return NULL; + } + sam_close(hdr_load); + } else { + retval->unaccounted_header = bam_hdr_dup(retval->merged_input_header); + } + + retval->unaccounted_file = sam_open_format(opts->unaccounted_name, "wb", &opts->ga.out); + if (retval->unaccounted_file == NULL) { + print_error_errno("split", "Could not open unaccounted output file \"%s\"", opts->unaccounted_name); + cleanup_state(retval, false); + return NULL; + } + if (retval->p.pool) + hts_set_opt(retval->unaccounted_file, HTS_OPT_THREAD_POOL, &retval->p); + } + + // Open output files for RGs + if (!count_RG(retval->merged_input_header, &retval->output_count, &retval->rg_id)) return NULL; + if (opts->verbose) fprintf(samtools_stderr, "@RG's found %zu\n",retval->output_count); + + retval->rg_output_file_name = (char **)calloc(retval->output_count, sizeof(char *)); + retval->rg_output_file = (samFile**)calloc(retval->output_count, sizeof(samFile*)); + retval->rg_output_header = (bam_hdr_t**)calloc(retval->output_count, sizeof(bam_hdr_t*)); + retval->rg_hash = kh_init_c2i(); + if (!retval->rg_output_file_name || !retval->rg_output_file || !retval->rg_output_header || !retval->rg_hash) { + print_error_errno("split", "Could not initialise output file array"); + cleanup_state(retval, false); + return NULL; + } + + char* dirsep = strrchr(opts->merged_input_name, '/'); + char* input_base_name = strdup(dirsep? dirsep+1 : opts->merged_input_name); + if (!input_base_name) { + print_error_errno("split", "Filename manipulation failed"); + cleanup_state(retval, false); + return NULL; + } + char* extension = strrchr(input_base_name, '.'); + if (extension) *extension = '\0'; + + size_t i; + for (i = 0; i < retval->output_count; i++) { + char* output_filename = NULL; + + output_filename = expand_format_string(opts->output_format_string, + input_base_name, + retval->rg_id[i], i, + &opts->ga.out); + + if ( output_filename == NULL ) { + print_error("split", "Error expanding output filename format string"); + cleanup_state(retval, false); + free(input_base_name); + return NULL; + } + + retval->rg_output_file_name[i] = output_filename; + retval->rg_output_file[i] = sam_open_format(output_filename, "wb", &opts->ga.out); + if (retval->rg_output_file[i] == NULL) { + print_error_errno("split", "Could not open \"%s\"", output_filename); + cleanup_state(retval, false); + free(input_base_name); + return NULL; + } + if (retval->p.pool) + hts_set_opt(retval->rg_output_file[i], HTS_OPT_THREAD_POOL, &retval->p); + + // Record index in hash + int ret; + khiter_t iter = kh_put_c2i(retval->rg_hash, retval->rg_id[i], &ret); + kh_val(retval->rg_hash,iter) = i; + + // Set and edit header + retval->rg_output_header[i] = bam_hdr_dup(retval->merged_input_header); + if ( !filter_header_rg(retval->rg_output_header[i], retval->rg_id[i], arg_list) ) { + print_error("split", "Could not rewrite header for \"%s\"", output_filename); + cleanup_state(retval, false); + free(input_base_name); + return NULL; + } + } + + free(input_base_name); + + return retval; +} + +static bool split(state_t* state) +{ + if (state->unaccounted_file && sam_hdr_write(state->unaccounted_file, state->unaccounted_header) != 0) { + print_error_errno("split", "Could not write output file header"); + return false; + } + size_t i; + for (i = 0; i < state->output_count; i++) { + if (sam_hdr_write(state->rg_output_file[i], state->rg_output_header[i]) != 0) { + print_error_errno("split", "Could not write file header to \"%s\"", state->rg_output_file_name[i]); + return false; + } + } + + bam1_t* file_read = bam_init1(); + // Read the first record + int r; + if ((r=sam_read1(state->merged_input_file, state->merged_input_header, file_read)) < 0) { + // Nothing more to read? Ignore this file + bam_destroy1(file_read); + file_read = NULL; + if (r < -1) { + print_error("split", "Could not read first input record"); + return false; + } + } + + while (file_read != NULL) { + // Get RG tag from read and look it up in hash to find file to output it to + uint8_t* tag = bam_aux_get(file_read, "RG"); + khiter_t iter; + if ( tag != NULL ) { + char* rg = bam_aux2Z(tag); + iter = kh_get_c2i(state->rg_hash, rg); + } else { + iter = kh_end(state->rg_hash); + } + + // Write the read out to correct file + if (iter != kh_end(state->rg_hash)) { + // if found write to the appropriate untangled bam + int i = kh_val(state->rg_hash,iter); + if (sam_write1(state->rg_output_file[i], state->rg_output_header[i], file_read) < 0) { + print_error_errno("split", "Could not write to \"%s\"", state->rg_output_file_name[i]); + bam_destroy1(file_read); + return false; + } + } else { + // otherwise write to the unaccounted bam if there is one or fail + if (state->unaccounted_file == NULL) { + if (tag) { + fprintf(samtools_stderr, "Read \"%s\" with unaccounted for tag \"%s\".\n", bam_get_qname(file_read), bam_aux2Z(tag)); + } else { + fprintf(samtools_stderr, "Read \"%s\" has no RG tag.\n", bam_get_qname(file_read)); + } + bam_destroy1(file_read); + return false; + } else { + if (sam_write1(state->unaccounted_file, state->unaccounted_header, file_read) < 0) { + print_error_errno("split", "Could not write to unaccounted output file"); + bam_destroy1(file_read); + return false; + } + } + } + + // Replace written read with the next one to process + if ((r=sam_read1(state->merged_input_file, state->merged_input_header, file_read)) < 0) { + // Nothing more to read? Ignore this file in future + bam_destroy1(file_read); + file_read = NULL; + if (r < -1) { + print_error("split", "Could not read input record"); + return false; + } + } + } + + return true; +} + +static int cleanup_state(state_t* status, bool check_close) +{ + int ret = 0; + + if (!status) return 0; + if (status->unaccounted_header) bam_hdr_destroy(status->unaccounted_header); + if (status->unaccounted_file) { + if (sam_close(status->unaccounted_file) < 0 && check_close) { + print_error("split", "Error on closing unaccounted file"); + ret = -1; + } + } + sam_close(status->merged_input_file); + size_t i; + for (i = 0; i < status->output_count; i++) { + if (status->rg_output_header && status->rg_output_header[i]) + bam_hdr_destroy(status->rg_output_header[i]); + if (status->rg_output_file && status->rg_output_file[i]) { + if (sam_close(status->rg_output_file[i]) < 0 && check_close) { + print_error("split", "Error on closing output file \"%s\"", status->rg_output_file_name[i]); + ret = -1; + } + } + if (status->rg_id) free(status->rg_id[i]); + if (status->rg_output_file_name) free(status->rg_output_file_name[i]); + } + if (status->merged_input_header) + bam_hdr_destroy(status->merged_input_header); + free(status->rg_output_header); + free(status->rg_output_file); + free(status->rg_output_file_name); + kh_destroy_c2i(status->rg_hash); + free(status->rg_id); + free(status); + + if (status->p.pool) + hts_tpool_destroy(status->p.pool); + + return ret; +} + +static void cleanup_opts(parsed_opts_t* opts) +{ + if (!opts) return; + free(opts->merged_input_name); + free(opts->unaccounted_header_name); + free(opts->unaccounted_name); + free(opts->output_format_string); + sam_global_args_free(&opts->ga); + free(opts); +} + +int main_split(int argc, char** argv) +{ + int ret = 1; + char *arg_list = stringify_argv(argc+1, argv-1); + parsed_opts_t* opts = parse_args(argc, argv); + if (!opts) goto cleanup_opts; + state_t* status = init(opts, arg_list); + if (!status) goto cleanup_opts; + + if (!split(status)) { + cleanup_state(status, false); + goto cleanup_opts; + } + + ret = cleanup_state(status, true); + +cleanup_opts: + cleanup_opts(opts); + free(arg_list); + + return ret; +} diff --git a/samtools/bam_stat.c b/samtools/bam_stat.c new file mode 100644 index 0000000..aa5f8d3 --- /dev/null +++ b/samtools/bam_stat.c @@ -0,0 +1,177 @@ +/* bam_stat.c -- flagstat subcommand. + + Copyright (C) 2009, 2011, 2013-2015 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "htslib/sam.h" +#include "samtools.h" +#include "sam_opts.h" + +typedef struct { + long long n_reads[2], n_mapped[2], n_pair_all[2], n_pair_map[2], n_pair_good[2]; + long long n_sgltn[2], n_read1[2], n_read2[2]; + long long n_dup[2]; + long long n_diffchr[2], n_diffhigh[2]; + long long n_secondary[2], n_supp[2]; +} bam_flagstat_t; + +#define flagstat_loop(s, c) do { \ + int w = ((c)->flag & BAM_FQCFAIL)? 1 : 0; \ + ++(s)->n_reads[w]; \ + if ((c)->flag & BAM_FSECONDARY ) { \ + ++(s)->n_secondary[w]; \ + } else if ((c)->flag & BAM_FSUPPLEMENTARY ) { \ + ++(s)->n_supp[w]; \ + } else if ((c)->flag & BAM_FPAIRED) { \ + ++(s)->n_pair_all[w]; \ + if (((c)->flag & BAM_FPROPER_PAIR) && !((c)->flag & BAM_FUNMAP) ) ++(s)->n_pair_good[w]; \ + if ((c)->flag & BAM_FREAD1) ++(s)->n_read1[w]; \ + if ((c)->flag & BAM_FREAD2) ++(s)->n_read2[w]; \ + if (((c)->flag & BAM_FMUNMAP) && !((c)->flag & BAM_FUNMAP)) ++(s)->n_sgltn[w]; \ + if (!((c)->flag & BAM_FUNMAP) && !((c)->flag & BAM_FMUNMAP)) { \ + ++(s)->n_pair_map[w]; \ + if ((c)->mtid != (c)->tid) { \ + ++(s)->n_diffchr[w]; \ + if ((c)->qual >= 5) ++(s)->n_diffhigh[w]; \ + } \ + } \ + } \ + if (!((c)->flag & BAM_FUNMAP)) ++(s)->n_mapped[w]; \ + if ((c)->flag & BAM_FDUP) ++(s)->n_dup[w]; \ + } while (0) + +bam_flagstat_t *bam_flagstat_core(samFile *fp, bam_hdr_t *h) +{ + bam_flagstat_t *s; + bam1_t *b; + bam1_core_t *c; + int ret; + s = (bam_flagstat_t*)calloc(1, sizeof(bam_flagstat_t)); + b = bam_init1(); + c = &b->core; + while ((ret = sam_read1(fp, h, b)) >= 0) + flagstat_loop(s, c); + bam_destroy1(b); + if (ret != -1) + fprintf(stderr, "[bam_flagstat_core] Truncated file? Continue anyway.\n"); + return s; +} + +static const char *percent(char *buffer, long long n, long long total) +{ + if (total != 0) sprintf(buffer, "%.2f%%", (float)n / total * 100.0); + else strcpy(buffer, "N/A"); + return buffer; +} + +static void usage_exit(FILE *fp, int exit_status) +{ + fprintf(fp, "Usage: samtools flagstat [options] \n"); + sam_global_opt_help(fp, "-.---@"); + exit(exit_status); +} + +int bam_flagstat(int argc, char *argv[]) +{ + samFile *fp; + bam_hdr_t *header; + bam_flagstat_t *s; + char b0[16], b1[16]; + int c; + + enum { + INPUT_FMT_OPTION = CHAR_MAX+1, + }; + + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, '-', '-', '-', '@'), + {NULL, 0, NULL, 0} + }; + + while ((c = getopt_long(argc, argv, "@:", lopts, NULL)) >= 0) { + switch (c) { + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + /* else fall-through */ + case '?': + usage_exit(stderr, EXIT_FAILURE); + } + } + + if (argc != optind+1) { + if (argc == optind) usage_exit(stdout, EXIT_SUCCESS); + else usage_exit(stderr, EXIT_FAILURE); + } + fp = sam_open_format(argv[optind], "r", &ga.in); + if (fp == NULL) { + print_error_errno("flagstat", "Cannot open input file \"%s\"", argv[optind]); + return 1; + } + if (ga.nthreads > 0) + hts_set_threads(fp, ga.nthreads); + + if (hts_set_opt(fp, CRAM_OPT_REQUIRED_FIELDS, + SAM_FLAG | SAM_MAPQ | SAM_RNEXT)) { + fprintf(stderr, "Failed to set CRAM_OPT_REQUIRED_FIELDS value\n"); + return 1; + } + + if (hts_set_opt(fp, CRAM_OPT_DECODE_MD, 0)) { + fprintf(stderr, "Failed to set CRAM_OPT_DECODE_MD value\n"); + return 1; + } + + header = sam_hdr_read(fp); + if (header == NULL) { + fprintf(stderr, "Failed to read header for \"%s\"\n", argv[optind]); + return 1; + } + s = bam_flagstat_core(fp, header); + printf("%lld + %lld in total (QC-passed reads + QC-failed reads)\n", s->n_reads[0], s->n_reads[1]); + printf("%lld + %lld secondary\n", s->n_secondary[0], s->n_secondary[1]); + printf("%lld + %lld supplementary\n", s->n_supp[0], s->n_supp[1]); + printf("%lld + %lld duplicates\n", s->n_dup[0], s->n_dup[1]); + printf("%lld + %lld mapped (%s : %s)\n", s->n_mapped[0], s->n_mapped[1], percent(b0, s->n_mapped[0], s->n_reads[0]), percent(b1, s->n_mapped[1], s->n_reads[1])); + printf("%lld + %lld paired in sequencing\n", s->n_pair_all[0], s->n_pair_all[1]); + printf("%lld + %lld read1\n", s->n_read1[0], s->n_read1[1]); + printf("%lld + %lld read2\n", s->n_read2[0], s->n_read2[1]); + printf("%lld + %lld properly paired (%s : %s)\n", s->n_pair_good[0], s->n_pair_good[1], percent(b0, s->n_pair_good[0], s->n_pair_all[0]), percent(b1, s->n_pair_good[1], s->n_pair_all[1])); + printf("%lld + %lld with itself and mate mapped\n", s->n_pair_map[0], s->n_pair_map[1]); + printf("%lld + %lld singletons (%s : %s)\n", s->n_sgltn[0], s->n_sgltn[1], percent(b0, s->n_sgltn[0], s->n_pair_all[0]), percent(b1, s->n_sgltn[1], s->n_pair_all[1])); + printf("%lld + %lld with mate mapped to a different chr\n", s->n_diffchr[0], s->n_diffchr[1]); + printf("%lld + %lld with mate mapped to a different chr (mapQ>=5)\n", s->n_diffhigh[0], s->n_diffhigh[1]); + free(s); + bam_hdr_destroy(header); + sam_close(fp); + sam_global_args_free(&ga); + return 0; +} diff --git a/samtools/bam_stat.c.pysam.c b/samtools/bam_stat.c.pysam.c new file mode 100644 index 0000000..40c17c4 --- /dev/null +++ b/samtools/bam_stat.c.pysam.c @@ -0,0 +1,179 @@ +#include "samtools.pysam.h" + +/* bam_stat.c -- flagstat subcommand. + + Copyright (C) 2009, 2011, 2013-2015 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "htslib/sam.h" +#include "samtools.h" +#include "sam_opts.h" + +typedef struct { + long long n_reads[2], n_mapped[2], n_pair_all[2], n_pair_map[2], n_pair_good[2]; + long long n_sgltn[2], n_read1[2], n_read2[2]; + long long n_dup[2]; + long long n_diffchr[2], n_diffhigh[2]; + long long n_secondary[2], n_supp[2]; +} bam_flagstat_t; + +#define flagstat_loop(s, c) do { \ + int w = ((c)->flag & BAM_FQCFAIL)? 1 : 0; \ + ++(s)->n_reads[w]; \ + if ((c)->flag & BAM_FSECONDARY ) { \ + ++(s)->n_secondary[w]; \ + } else if ((c)->flag & BAM_FSUPPLEMENTARY ) { \ + ++(s)->n_supp[w]; \ + } else if ((c)->flag & BAM_FPAIRED) { \ + ++(s)->n_pair_all[w]; \ + if (((c)->flag & BAM_FPROPER_PAIR) && !((c)->flag & BAM_FUNMAP) ) ++(s)->n_pair_good[w]; \ + if ((c)->flag & BAM_FREAD1) ++(s)->n_read1[w]; \ + if ((c)->flag & BAM_FREAD2) ++(s)->n_read2[w]; \ + if (((c)->flag & BAM_FMUNMAP) && !((c)->flag & BAM_FUNMAP)) ++(s)->n_sgltn[w]; \ + if (!((c)->flag & BAM_FUNMAP) && !((c)->flag & BAM_FMUNMAP)) { \ + ++(s)->n_pair_map[w]; \ + if ((c)->mtid != (c)->tid) { \ + ++(s)->n_diffchr[w]; \ + if ((c)->qual >= 5) ++(s)->n_diffhigh[w]; \ + } \ + } \ + } \ + if (!((c)->flag & BAM_FUNMAP)) ++(s)->n_mapped[w]; \ + if ((c)->flag & BAM_FDUP) ++(s)->n_dup[w]; \ + } while (0) + +bam_flagstat_t *bam_flagstat_core(samFile *fp, bam_hdr_t *h) +{ + bam_flagstat_t *s; + bam1_t *b; + bam1_core_t *c; + int ret; + s = (bam_flagstat_t*)calloc(1, sizeof(bam_flagstat_t)); + b = bam_init1(); + c = &b->core; + while ((ret = sam_read1(fp, h, b)) >= 0) + flagstat_loop(s, c); + bam_destroy1(b); + if (ret != -1) + fprintf(samtools_stderr, "[bam_flagstat_core] Truncated file? Continue anyway.\n"); + return s; +} + +static const char *percent(char *buffer, long long n, long long total) +{ + if (total != 0) sprintf(buffer, "%.2f%%", (float)n / total * 100.0); + else strcpy(buffer, "N/A"); + return buffer; +} + +static void usage_exit(FILE *fp, int exit_status) +{ + fprintf(fp, "Usage: samtools flagstat [options] \n"); + sam_global_opt_help(fp, "-.---@"); + exit(exit_status); +} + +int bam_flagstat(int argc, char *argv[]) +{ + samFile *fp; + bam_hdr_t *header; + bam_flagstat_t *s; + char b0[16], b1[16]; + int c; + + enum { + INPUT_FMT_OPTION = CHAR_MAX+1, + }; + + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, '-', '-', '-', '@'), + {NULL, 0, NULL, 0} + }; + + while ((c = getopt_long(argc, argv, "@:", lopts, NULL)) >= 0) { + switch (c) { + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + /* else fall-through */ + case '?': + usage_exit(samtools_stderr, EXIT_FAILURE); + } + } + + if (argc != optind+1) { + if (argc == optind) usage_exit(samtools_stdout, EXIT_SUCCESS); + else usage_exit(samtools_stderr, EXIT_FAILURE); + } + fp = sam_open_format(argv[optind], "r", &ga.in); + if (fp == NULL) { + print_error_errno("flagstat", "Cannot open input file \"%s\"", argv[optind]); + return 1; + } + if (ga.nthreads > 0) + hts_set_threads(fp, ga.nthreads); + + if (hts_set_opt(fp, CRAM_OPT_REQUIRED_FIELDS, + SAM_FLAG | SAM_MAPQ | SAM_RNEXT)) { + fprintf(samtools_stderr, "Failed to set CRAM_OPT_REQUIRED_FIELDS value\n"); + return 1; + } + + if (hts_set_opt(fp, CRAM_OPT_DECODE_MD, 0)) { + fprintf(samtools_stderr, "Failed to set CRAM_OPT_DECODE_MD value\n"); + return 1; + } + + header = sam_hdr_read(fp); + if (header == NULL) { + fprintf(samtools_stderr, "Failed to read header for \"%s\"\n", argv[optind]); + return 1; + } + s = bam_flagstat_core(fp, header); + fprintf(samtools_stdout, "%lld + %lld in total (QC-passed reads + QC-failed reads)\n", s->n_reads[0], s->n_reads[1]); + fprintf(samtools_stdout, "%lld + %lld secondary\n", s->n_secondary[0], s->n_secondary[1]); + fprintf(samtools_stdout, "%lld + %lld supplementary\n", s->n_supp[0], s->n_supp[1]); + fprintf(samtools_stdout, "%lld + %lld duplicates\n", s->n_dup[0], s->n_dup[1]); + fprintf(samtools_stdout, "%lld + %lld mapped (%s : %s)\n", s->n_mapped[0], s->n_mapped[1], percent(b0, s->n_mapped[0], s->n_reads[0]), percent(b1, s->n_mapped[1], s->n_reads[1])); + fprintf(samtools_stdout, "%lld + %lld paired in sequencing\n", s->n_pair_all[0], s->n_pair_all[1]); + fprintf(samtools_stdout, "%lld + %lld read1\n", s->n_read1[0], s->n_read1[1]); + fprintf(samtools_stdout, "%lld + %lld read2\n", s->n_read2[0], s->n_read2[1]); + fprintf(samtools_stdout, "%lld + %lld properly paired (%s : %s)\n", s->n_pair_good[0], s->n_pair_good[1], percent(b0, s->n_pair_good[0], s->n_pair_all[0]), percent(b1, s->n_pair_good[1], s->n_pair_all[1])); + fprintf(samtools_stdout, "%lld + %lld with itself and mate mapped\n", s->n_pair_map[0], s->n_pair_map[1]); + fprintf(samtools_stdout, "%lld + %lld singletons (%s : %s)\n", s->n_sgltn[0], s->n_sgltn[1], percent(b0, s->n_sgltn[0], s->n_pair_all[0]), percent(b1, s->n_sgltn[1], s->n_pair_all[1])); + fprintf(samtools_stdout, "%lld + %lld with mate mapped to a different chr\n", s->n_diffchr[0], s->n_diffchr[1]); + fprintf(samtools_stdout, "%lld + %lld with mate mapped to a different chr (mapQ>=5)\n", s->n_diffhigh[0], s->n_diffhigh[1]); + free(s); + bam_hdr_destroy(header); + sam_close(fp); + sam_global_args_free(&ga); + return 0; +} diff --git a/samtools/bamshuf.c b/samtools/bamshuf.c new file mode 100644 index 0000000..c1c89fb --- /dev/null +++ b/samtools/bamshuf.c @@ -0,0 +1,322 @@ +/* bamshuf.c -- collate subcommand. + + Copyright (C) 2012 Broad Institute. + Copyright (C) 2013, 2015 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include "htslib/sam.h" +#include "htslib/hts.h" +#include "htslib/ksort.h" +#include "samtools.h" +#include "htslib/thread_pool.h" +#include "sam_opts.h" + +#define DEF_CLEVEL 1 + +static inline unsigned hash_Wang(unsigned key) +{ + key += ~(key << 15); + key ^= (key >> 10); + key += (key << 3); + key ^= (key >> 6); + key += ~(key << 11); + key ^= (key >> 16); + return key; +} + +static inline unsigned hash_X31_Wang(const char *s) +{ + unsigned h = *s; + if (h) { + for (++s ; *s; ++s) h = (h << 5) - h + *s; + return hash_Wang(h); + } else return 0; +} + +typedef struct { + unsigned key; + bam1_t *b; +} elem_t; + +static inline int elem_lt(elem_t x, elem_t y) +{ + if (x.key < y.key) return 1; + if (x.key == y.key) { + int t; + t = strcmp(bam_get_qname(x.b), bam_get_qname(y.b)); + if (t < 0) return 1; + return (t == 0 && ((x.b->core.flag>>6&3) < (y.b->core.flag>>6&3))); + } else return 0; +} + +KSORT_INIT(bamshuf, elem_t, elem_lt) + +static int bamshuf(const char *fn, int n_files, const char *pre, int clevel, + int is_stdout, sam_global_args *ga) +{ + samFile *fp, *fpw = NULL, **fpt = NULL; + char **fnt = NULL, modew[8]; + bam1_t *b = NULL; + int i, l, r; + bam_hdr_t *h = NULL; + int64_t j, max_cnt = 0, *cnt = NULL; + elem_t *a = NULL; + htsThreadPool p = {NULL, 0}; + + if (ga->nthreads > 0) { + if (!(p.pool = hts_tpool_init(ga->nthreads))) { + print_error_errno("collate", "Error creating thread pool\n"); + return 1; + } + } + + // Read input, distribute reads pseudo-randomly into n_files temporary + // files. + fp = sam_open_format(fn, "r", &ga->in); + if (fp == NULL) { + print_error_errno("collate", "Cannot open input file \"%s\"", fn); + return 1; + } + if (p.pool) hts_set_opt(fp, HTS_OPT_THREAD_POOL, &p); + + h = sam_hdr_read(fp); + if (h == NULL) { + fprintf(stderr, "Couldn't read header for '%s'\n", fn); + goto fail; + } + + if (sam_hdr_change_HD(h, "SO", "unsorted") != 0) { + print_error("collate", + "failed to change sort order header to 'unsorted'\n"); + goto fail; + } + if (sam_hdr_change_HD(h, "GO", "query") != 0) { + print_error("collate", + "failed to change group order header to 'query'\n"); + goto fail; + } + + fnt = (char**)calloc(n_files, sizeof(char*)); + if (!fnt) goto mem_fail; + fpt = (samFile**)calloc(n_files, sizeof(samFile*)); + if (!fpt) goto mem_fail; + cnt = (int64_t*)calloc(n_files, 8); + if (!cnt) goto mem_fail; + + l = strlen(pre); + + for (i = 0; i < n_files; ++i) { + fnt[i] = (char*)calloc(l + 10, 1); + if (!fnt[i]) goto mem_fail; + sprintf(fnt[i], "%s.%.4d.bam", pre, i); + fpt[i] = sam_open(fnt[i], "wb1"); + if (fpt[i] == NULL) { + print_error_errno("collate", "Cannot open intermediate file \"%s\"", fnt[i]); + goto fail; + } + if (sam_hdr_write(fpt[i], h) < 0) { + print_error_errno("collate", "Couldn't write header to intermediate file \"%s\"", fnt[i]); + goto fail; + } + } + b = bam_init1(); + if (!b) goto mem_fail; + while ((r = sam_read1(fp, h, b)) >= 0) { + uint32_t x; + x = hash_X31_Wang(bam_get_qname(b)) % n_files; + if (sam_write1(fpt[x], h, b) < 0) { + print_error_errno("collate", "Couldn't write to intermediate file \"%s\"", fnt[x]); + goto fail; + } + ++cnt[x]; + } + bam_destroy1(b); + b = NULL; + if (r < -1) { + fprintf(stderr, "Error reading input file\n"); + goto fail; + } + for (i = 0; i < n_files; ++i) { + // Close split output + r = sam_close(fpt[i]); + fpt[i] = NULL; + if (r < 0) { + fprintf(stderr, "Error on closing '%s'\n", fnt[i]); + return 1; + } + + // Find biggest count + if (max_cnt < cnt[i]) max_cnt = cnt[i]; + } + free(fpt); + fpt = NULL; + sam_close(fp); + fp = NULL; + // merge + sprintf(modew, "wb%d", (clevel >= 0 && clevel <= 9)? clevel : DEF_CLEVEL); + if (!is_stdout) { // output to a file + char *fnw = (char*)calloc(l + 5, 1); + if (!fnw) goto mem_fail; + if (ga->out.format == unknown_format) + sprintf(fnw, "%s.bam", pre); // "wb" above makes BAM the default + else + sprintf(fnw, "%s.%s", pre, hts_format_file_extension(&ga->out)); + fpw = sam_open_format(fnw, modew, &ga->out); + free(fnw); + } else fpw = sam_open_format("-", modew, &ga->out); // output to stdout + if (fpw == NULL) { + if (is_stdout) print_error_errno("collate", "Cannot open standard output"); + else print_error_errno("collate", "Cannot open output file \"%s.bam\"", pre); + goto fail; + } + if (p.pool) hts_set_opt(fpw, HTS_OPT_THREAD_POOL, &p); + + if (sam_hdr_write(fpw, h) < 0) { + print_error_errno("collate", "Couldn't write header"); + goto fail; + } + + a = malloc(max_cnt * sizeof(elem_t)); + if (!a) goto mem_fail; + for (j = 0; j < max_cnt; ++j) { + a[j].b = bam_init1(); + if (!a[j].b) { max_cnt = j; goto mem_fail; } + } + + for (i = 0; i < n_files; ++i) { + int64_t c = cnt[i]; + fp = sam_open_format(fnt[i], "r", &ga->in); + if (NULL == fp) { + print_error_errno("collate", "Couldn't open \"%s\"", fnt[i]); + goto fail; + } + if (p.pool) hts_set_opt(fp, HTS_OPT_THREAD_POOL, &p); + bam_hdr_destroy(sam_hdr_read(fp)); // Skip over header + + // Slurp in one of the split files + for (j = 0; j < c; ++j) { + if (sam_read1(fp, h, a[j].b) < 0) { + fprintf(stderr, "Error reading '%s'\n", fnt[i]); + goto fail; + } + a[j].key = hash_X31_Wang(bam_get_qname(a[j].b)); + } + sam_close(fp); + unlink(fnt[i]); + free(fnt[i]); + fnt[i] = NULL; + + ks_introsort(bamshuf, c, a); // Shuffle all the reads + + // Write them out again + for (j = 0; j < c; ++j) { + if (sam_write1(fpw, h, a[j].b) < 0) { + print_error_errno("collate", "Error writing to output"); + goto fail; + } + } + } + + bam_hdr_destroy(h); + for (j = 0; j < max_cnt; ++j) bam_destroy1(a[j].b); + free(a); free(fnt); free(cnt); + sam_global_args_free(ga); + if (sam_close(fpw) < 0) { + fprintf(stderr, "Error on closing output\n"); + return 1; + } + + if (p.pool) hts_tpool_destroy(p.pool); + return 0; + + mem_fail: + fprintf(stderr, "Out of memory\n"); + + fail: + if (fp) sam_close(fp); + if (fpw) sam_close(fpw); + if (h) bam_hdr_destroy(h); + if (b) bam_destroy1(b); + for (i = 0; i < n_files; ++i) { + if (fnt) free(fnt[i]); + if (fpt && fpt[i]) sam_close(fpt[i]); + } + if (a) { + for (j = 0; j < max_cnt; ++j) bam_destroy1(a[j].b); + free(a); + } + free(fnt); + free(fpt); + free(cnt); + if (p.pool) hts_tpool_destroy(p.pool); + sam_global_args_free(ga); + return 1; +} + +static int usage(FILE *fp, int n_files) { + fprintf(fp, + "Usage: samtools collate [-Ou] [-n nFiles] [-l cLevel] \n\n" + "Options:\n" + " -O output to stdout\n" + " -u uncompressed BAM output\n" + " -l INT compression level [%d]\n" // DEF_CLEVEL + " -n INT number of temporary files [%d]\n", // n_files + DEF_CLEVEL, n_files); + + sam_global_opt_help(fp, "-....@"); + + return 1; +} + +int main_bamshuf(int argc, char *argv[]) +{ + int c, n_files = 64, clevel = DEF_CLEVEL, is_stdout = 0, is_un = 0; + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, 0, 0, 0, '@'), + { NULL, 0, NULL, 0 } + }; + + while ((c = getopt_long(argc, argv, "n:l:uO@:", lopts, NULL)) >= 0) { + switch (c) { + case 'n': n_files = atoi(optarg); break; + case 'l': clevel = atoi(optarg); break; + case 'u': is_un = 1; break; + case 'O': is_stdout = 1; break; + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + /* else fall-through */ + case '?': return usage(stderr, n_files); + } + } + if (is_un) clevel = 0; + if (optind + 2 > argc) + return usage(stderr, n_files); + + return bamshuf(argv[optind], n_files, argv[optind+1], clevel, is_stdout, &ga); +} diff --git a/samtools/bamshuf.c.pysam.c b/samtools/bamshuf.c.pysam.c new file mode 100644 index 0000000..008aa0c --- /dev/null +++ b/samtools/bamshuf.c.pysam.c @@ -0,0 +1,324 @@ +#include "samtools.pysam.h" + +/* bamshuf.c -- collate subcommand. + + Copyright (C) 2012 Broad Institute. + Copyright (C) 2013, 2015 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include "htslib/sam.h" +#include "htslib/hts.h" +#include "htslib/ksort.h" +#include "samtools.h" +#include "htslib/thread_pool.h" +#include "sam_opts.h" + +#define DEF_CLEVEL 1 + +static inline unsigned hash_Wang(unsigned key) +{ + key += ~(key << 15); + key ^= (key >> 10); + key += (key << 3); + key ^= (key >> 6); + key += ~(key << 11); + key ^= (key >> 16); + return key; +} + +static inline unsigned hash_X31_Wang(const char *s) +{ + unsigned h = *s; + if (h) { + for (++s ; *s; ++s) h = (h << 5) - h + *s; + return hash_Wang(h); + } else return 0; +} + +typedef struct { + unsigned key; + bam1_t *b; +} elem_t; + +static inline int elem_lt(elem_t x, elem_t y) +{ + if (x.key < y.key) return 1; + if (x.key == y.key) { + int t; + t = strcmp(bam_get_qname(x.b), bam_get_qname(y.b)); + if (t < 0) return 1; + return (t == 0 && ((x.b->core.flag>>6&3) < (y.b->core.flag>>6&3))); + } else return 0; +} + +KSORT_INIT(bamshuf, elem_t, elem_lt) + +static int bamshuf(const char *fn, int n_files, const char *pre, int clevel, + int is_samtools_stdout, sam_global_args *ga) +{ + samFile *fp, *fpw = NULL, **fpt = NULL; + char **fnt = NULL, modew[8]; + bam1_t *b = NULL; + int i, l, r; + bam_hdr_t *h = NULL; + int64_t j, max_cnt = 0, *cnt = NULL; + elem_t *a = NULL; + htsThreadPool p = {NULL, 0}; + + if (ga->nthreads > 0) { + if (!(p.pool = hts_tpool_init(ga->nthreads))) { + print_error_errno("collate", "Error creating thread pool\n"); + return 1; + } + } + + // Read input, distribute reads pseudo-randomly into n_files temporary + // files. + fp = sam_open_format(fn, "r", &ga->in); + if (fp == NULL) { + print_error_errno("collate", "Cannot open input file \"%s\"", fn); + return 1; + } + if (p.pool) hts_set_opt(fp, HTS_OPT_THREAD_POOL, &p); + + h = sam_hdr_read(fp); + if (h == NULL) { + fprintf(samtools_stderr, "Couldn't read header for '%s'\n", fn); + goto fail; + } + + if (sam_hdr_change_HD(h, "SO", "unsorted") != 0) { + print_error("collate", + "failed to change sort order header to 'unsorted'\n"); + goto fail; + } + if (sam_hdr_change_HD(h, "GO", "query") != 0) { + print_error("collate", + "failed to change group order header to 'query'\n"); + goto fail; + } + + fnt = (char**)calloc(n_files, sizeof(char*)); + if (!fnt) goto mem_fail; + fpt = (samFile**)calloc(n_files, sizeof(samFile*)); + if (!fpt) goto mem_fail; + cnt = (int64_t*)calloc(n_files, 8); + if (!cnt) goto mem_fail; + + l = strlen(pre); + + for (i = 0; i < n_files; ++i) { + fnt[i] = (char*)calloc(l + 10, 1); + if (!fnt[i]) goto mem_fail; + sprintf(fnt[i], "%s.%.4d.bam", pre, i); + fpt[i] = sam_open(fnt[i], "wb1"); + if (fpt[i] == NULL) { + print_error_errno("collate", "Cannot open intermediate file \"%s\"", fnt[i]); + goto fail; + } + if (sam_hdr_write(fpt[i], h) < 0) { + print_error_errno("collate", "Couldn't write header to intermediate file \"%s\"", fnt[i]); + goto fail; + } + } + b = bam_init1(); + if (!b) goto mem_fail; + while ((r = sam_read1(fp, h, b)) >= 0) { + uint32_t x; + x = hash_X31_Wang(bam_get_qname(b)) % n_files; + if (sam_write1(fpt[x], h, b) < 0) { + print_error_errno("collate", "Couldn't write to intermediate file \"%s\"", fnt[x]); + goto fail; + } + ++cnt[x]; + } + bam_destroy1(b); + b = NULL; + if (r < -1) { + fprintf(samtools_stderr, "Error reading input file\n"); + goto fail; + } + for (i = 0; i < n_files; ++i) { + // Close split output + r = sam_close(fpt[i]); + fpt[i] = NULL; + if (r < 0) { + fprintf(samtools_stderr, "Error on closing '%s'\n", fnt[i]); + return 1; + } + + // Find biggest count + if (max_cnt < cnt[i]) max_cnt = cnt[i]; + } + free(fpt); + fpt = NULL; + sam_close(fp); + fp = NULL; + // merge + sprintf(modew, "wb%d", (clevel >= 0 && clevel <= 9)? clevel : DEF_CLEVEL); + if (!is_samtools_stdout) { // output to a file + char *fnw = (char*)calloc(l + 5, 1); + if (!fnw) goto mem_fail; + if (ga->out.format == unknown_format) + sprintf(fnw, "%s.bam", pre); // "wb" above makes BAM the default + else + sprintf(fnw, "%s.%s", pre, hts_format_file_extension(&ga->out)); + fpw = sam_open_format(fnw, modew, &ga->out); + free(fnw); + } else fpw = sam_open_format("-", modew, &ga->out); // output to samtools_stdout + if (fpw == NULL) { + if (is_samtools_stdout) print_error_errno("collate", "Cannot open standard output"); + else print_error_errno("collate", "Cannot open output file \"%s.bam\"", pre); + goto fail; + } + if (p.pool) hts_set_opt(fpw, HTS_OPT_THREAD_POOL, &p); + + if (sam_hdr_write(fpw, h) < 0) { + print_error_errno("collate", "Couldn't write header"); + goto fail; + } + + a = malloc(max_cnt * sizeof(elem_t)); + if (!a) goto mem_fail; + for (j = 0; j < max_cnt; ++j) { + a[j].b = bam_init1(); + if (!a[j].b) { max_cnt = j; goto mem_fail; } + } + + for (i = 0; i < n_files; ++i) { + int64_t c = cnt[i]; + fp = sam_open_format(fnt[i], "r", &ga->in); + if (NULL == fp) { + print_error_errno("collate", "Couldn't open \"%s\"", fnt[i]); + goto fail; + } + if (p.pool) hts_set_opt(fp, HTS_OPT_THREAD_POOL, &p); + bam_hdr_destroy(sam_hdr_read(fp)); // Skip over header + + // Slurp in one of the split files + for (j = 0; j < c; ++j) { + if (sam_read1(fp, h, a[j].b) < 0) { + fprintf(samtools_stderr, "Error reading '%s'\n", fnt[i]); + goto fail; + } + a[j].key = hash_X31_Wang(bam_get_qname(a[j].b)); + } + sam_close(fp); + unlink(fnt[i]); + free(fnt[i]); + fnt[i] = NULL; + + ks_introsort(bamshuf, c, a); // Shuffle all the reads + + // Write them out again + for (j = 0; j < c; ++j) { + if (sam_write1(fpw, h, a[j].b) < 0) { + print_error_errno("collate", "Error writing to output"); + goto fail; + } + } + } + + bam_hdr_destroy(h); + for (j = 0; j < max_cnt; ++j) bam_destroy1(a[j].b); + free(a); free(fnt); free(cnt); + sam_global_args_free(ga); + if (sam_close(fpw) < 0) { + fprintf(samtools_stderr, "Error on closing output\n"); + return 1; + } + + if (p.pool) hts_tpool_destroy(p.pool); + return 0; + + mem_fail: + fprintf(samtools_stderr, "Out of memory\n"); + + fail: + if (fp) sam_close(fp); + if (fpw) sam_close(fpw); + if (h) bam_hdr_destroy(h); + if (b) bam_destroy1(b); + for (i = 0; i < n_files; ++i) { + if (fnt) free(fnt[i]); + if (fpt && fpt[i]) sam_close(fpt[i]); + } + if (a) { + for (j = 0; j < max_cnt; ++j) bam_destroy1(a[j].b); + free(a); + } + free(fnt); + free(fpt); + free(cnt); + if (p.pool) hts_tpool_destroy(p.pool); + sam_global_args_free(ga); + return 1; +} + +static int usage(FILE *fp, int n_files) { + fprintf(fp, + "Usage: samtools collate [-Ou] [-n nFiles] [-l cLevel] \n\n" + "Options:\n" + " -O output to samtools_stdout\n" + " -u uncompressed BAM output\n" + " -l INT compression level [%d]\n" // DEF_CLEVEL + " -n INT number of temporary files [%d]\n", // n_files + DEF_CLEVEL, n_files); + + sam_global_opt_help(fp, "-....@"); + + return 1; +} + +int main_bamshuf(int argc, char *argv[]) +{ + int c, n_files = 64, clevel = DEF_CLEVEL, is_samtools_stdout = 0, is_un = 0; + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, 0, 0, 0, '@'), + { NULL, 0, NULL, 0 } + }; + + while ((c = getopt_long(argc, argv, "n:l:uO@:", lopts, NULL)) >= 0) { + switch (c) { + case 'n': n_files = atoi(optarg); break; + case 'l': clevel = atoi(optarg); break; + case 'u': is_un = 1; break; + case 'O': is_samtools_stdout = 1; break; + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + /* else fall-through */ + case '?': return usage(samtools_stderr, n_files); + } + } + if (is_un) clevel = 0; + if (optind + 2 > argc) + return usage(samtools_stderr, n_files); + + return bamshuf(argv[optind], n_files, argv[optind+1], clevel, is_samtools_stdout, &ga); +} diff --git a/samtools/bamtk.c b/samtools/bamtk.c new file mode 100644 index 0000000..d1e89c6 --- /dev/null +++ b/samtools/bamtk.c @@ -0,0 +1,209 @@ +/* bamtk.c -- main samtools command front-end. + + Copyright (C) 2008-2018 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include + +#include "htslib/hts.h" +#include "samtools.h" + +int bam_taf2baf(int argc, char *argv[]); +int bam_mpileup(int argc, char *argv[]); +int bam_merge(int argc, char *argv[]); +int bam_index(int argc, char *argv[]); +int bam_sort(int argc, char *argv[]); +int bam_tview_main(int argc, char *argv[]); +int bam_mating(int argc, char *argv[]); +int bam_rmdup(int argc, char *argv[]); +int bam_flagstat(int argc, char *argv[]); +int bam_fillmd(int argc, char *argv[]); +int bam_idxstats(int argc, char *argv[]); +int bam_markdup(int argc, char *argv[]); +int main_samview(int argc, char *argv[]); +int main_import(int argc, char *argv[]); +int main_reheader(int argc, char *argv[]); +int main_cut_target(int argc, char *argv[]); +int main_phase(int argc, char *argv[]); +int main_cat(int argc, char *argv[]); +int main_depth(int argc, char *argv[]); +int main_bam2fq(int argc, char *argv[]); +int main_pad2unpad(int argc, char *argv[]); +int main_bedcov(int argc, char *argv[]); +int main_bamshuf(int argc, char *argv[]); +int main_stats(int argc, char *argv[]); +int main_flags(int argc, char *argv[]); +int main_split(int argc, char *argv[]); +int main_quickcheck(int argc, char *argv[]); +int main_addreplacerg(int argc, char *argv[]); +int faidx_main(int argc, char *argv[]); +int dict_main(int argc, char *argv[]); + + +static void usage(FILE *fp) +{ + /* Please improve the grouping */ + + fprintf(fp, +"\n" +"Program: samtools (Tools for alignments in the SAM format)\n" +"Version: %s (using htslib %s)\n\n", samtools_version(), hts_version()); + fprintf(fp, +"Usage: samtools [options]\n" +"\n" +"Commands:\n" +" -- Indexing\n" +" dict create a sequence dictionary file\n" +" faidx index/extract FASTA\n" +" index index alignment\n" +"\n" +" -- Editing\n" +" calmd recalculate MD/NM tags and '=' bases\n" +" fixmate fix mate information\n" +" reheader replace BAM header\n" +" targetcut cut fosmid regions (for fosmid pool only)\n" +" addreplacerg adds or replaces RG tags\n" +" markdup mark duplicates\n" +"\n" +" -- File operations\n" +" collate shuffle and group alignments by name\n" +" cat concatenate BAMs\n" +" merge merge sorted alignments\n" +" mpileup multi-way pileup\n" +" sort sort alignment file\n" +" split splits a file by read group\n" +" quickcheck quickly check if SAM/BAM/CRAM file appears intact\n" +" fastq converts a BAM to a FASTQ\n" +" fasta converts a BAM to a FASTA\n" +"\n" +" -- Statistics\n" +" bedcov read depth per BED region\n" +" depth compute the depth\n" +" flagstat simple stats\n" +" idxstats BAM index stats\n" +" phase phase heterozygotes\n" +" stats generate stats (former bamcheck)\n" +"\n" +" -- Viewing\n" +" flags explain BAM flags\n" +" tview text alignment viewer\n" +" view SAM<->BAM<->CRAM conversion\n" +" depad convert padded BAM to unpadded BAM\n" +"\n"); +#ifdef _WIN32 + fprintf(fp, +"Note: The Windows version of SAMtools is mainly designed for read-only\n" +" operations, such as viewing the alignments and generating the pileup.\n" +" Binary files generated by the Windows version may be buggy.\n\n"); +#endif +} + +// This is a tricky one, but on Windows the filename wildcard expansion is done by +// the application and not by the shell, as traditionally it never had a "shell". +// Even now, DOS and Powershell do not do this expansion (but bash does). +// +// This means that Mingw/Msys implements code before main() that takes e.g. "*" and +// expands it up to a list of matching filenames. This in turn breaks things like +// specifying "*" as a region (all the unmapped reads). We take a hard line here - +// filename expansion is the task of the shell, not our application! +#ifdef _WIN32 +int _CRT_glob = 0; +#endif + +int main(int argc, char *argv[]) +{ +#ifdef _WIN32 + setmode(fileno(stdout), O_BINARY); + setmode(fileno(stdin), O_BINARY); +#endif + if (argc < 2) { usage(stderr); return 1; } + + if (strcmp(argv[1], "help") == 0 || strcmp(argv[1], "--help") == 0) { + if (argc == 2) { usage(stdout); return 0; } + + // Otherwise change "samtools help COMMAND [...]" to "samtools COMMAND"; + // main_xyz() functions by convention display the subcommand's usage + // when invoked without any arguments. + argv++; + argc = 2; + } + + int ret = 0; + if (strcmp(argv[1], "view") == 0) ret = main_samview(argc-1, argv+1); + else if (strcmp(argv[1], "import") == 0) ret = main_import(argc-1, argv+1); + else if (strcmp(argv[1], "mpileup") == 0) ret = bam_mpileup(argc-1, argv+1); + else if (strcmp(argv[1], "merge") == 0) ret = bam_merge(argc-1, argv+1); + else if (strcmp(argv[1], "sort") == 0) ret = bam_sort(argc-1, argv+1); + else if (strcmp(argv[1], "index") == 0) ret = bam_index(argc-1, argv+1); + else if (strcmp(argv[1], "idxstats") == 0) ret = bam_idxstats(argc-1, argv+1); + else if (strcmp(argv[1], "faidx") == 0) ret = faidx_main(argc-1, argv+1); + else if (strcmp(argv[1], "dict") == 0) ret = dict_main(argc-1, argv+1); + else if (strcmp(argv[1], "fixmate") == 0) ret = bam_mating(argc-1, argv+1); + else if (strcmp(argv[1], "rmdup") == 0) ret = bam_rmdup(argc-1, argv+1); + else if (strcmp(argv[1], "markdup") == 0) ret = bam_markdup(argc-1, argv+1); + else if (strcmp(argv[1], "flagstat") == 0) ret = bam_flagstat(argc-1, argv+1); + else if (strcmp(argv[1], "calmd") == 0) ret = bam_fillmd(argc-1, argv+1); + else if (strcmp(argv[1], "fillmd") == 0) ret = bam_fillmd(argc-1, argv+1); + else if (strcmp(argv[1], "reheader") == 0) ret = main_reheader(argc-1, argv+1); + else if (strcmp(argv[1], "cat") == 0) ret = main_cat(argc-1, argv+1); + else if (strcmp(argv[1], "targetcut") == 0) ret = main_cut_target(argc-1, argv+1); + else if (strcmp(argv[1], "phase") == 0) ret = main_phase(argc-1, argv+1); + else if (strcmp(argv[1], "depth") == 0) ret = main_depth(argc-1, argv+1); + else if (strcmp(argv[1], "bam2fq") == 0 || + strcmp(argv[1], "fastq") == 0 || + strcmp(argv[1], "fasta") == 0) ret = main_bam2fq(argc-1, argv+1); + else if (strcmp(argv[1], "pad2unpad") == 0) ret = main_pad2unpad(argc-1, argv+1); + else if (strcmp(argv[1], "depad") == 0) ret = main_pad2unpad(argc-1, argv+1); + else if (strcmp(argv[1], "bedcov") == 0) ret = main_bedcov(argc-1, argv+1); + else if (strcmp(argv[1], "bamshuf") == 0) ret = main_bamshuf(argc-1, argv+1); + else if (strcmp(argv[1], "collate") == 0) ret = main_bamshuf(argc-1, argv+1); + else if (strcmp(argv[1], "stats") == 0) ret = main_stats(argc-1, argv+1); + else if (strcmp(argv[1], "flags") == 0) ret = main_flags(argc-1, argv+1); + else if (strcmp(argv[1], "split") == 0) ret = main_split(argc-1, argv+1); + else if (strcmp(argv[1], "quickcheck") == 0) ret = main_quickcheck(argc-1, argv+1); + else if (strcmp(argv[1], "addreplacerg") == 0) ret = main_addreplacerg(argc-1, argv+1); + else if (strcmp(argv[1], "pileup") == 0) { + fprintf(stderr, "[main] The `pileup' command has been removed. Please use `mpileup' instead.\n"); + return 1; + } + else if (strcmp(argv[1], "tview") == 0) ret = bam_tview_main(argc-1, argv+1); + else if (strcmp(argv[1], "--version") == 0) { + printf( +"samtools %s\n" +"Using htslib %s\n" +"Copyright (C) 2018 Genome Research Ltd.\n", + samtools_version(), hts_version()); + } + else if (strcmp(argv[1], "--version-only") == 0) { + printf("%s+htslib-%s\n", samtools_version(), hts_version()); + } + else { + fprintf(stderr, "[main] unrecognized command '%s'\n", argv[1]); + return 1; + } + return ret; +} diff --git a/samtools/bamtk.c.pysam.c b/samtools/bamtk.c.pysam.c new file mode 100644 index 0000000..e14f01c --- /dev/null +++ b/samtools/bamtk.c.pysam.c @@ -0,0 +1,211 @@ +#include "samtools.pysam.h" + +/* bamtk.c -- main samtools command front-end. + + Copyright (C) 2008-2018 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include + +#include "htslib/hts.h" +#include "samtools.h" + +int bam_taf2baf(int argc, char *argv[]); +int bam_mpileup(int argc, char *argv[]); +int bam_merge(int argc, char *argv[]); +int bam_index(int argc, char *argv[]); +int bam_sort(int argc, char *argv[]); +// int bam_tview_main(int argc, char *argv[]); +int bam_mating(int argc, char *argv[]); +int bam_rmdup(int argc, char *argv[]); +int bam_flagstat(int argc, char *argv[]); +int bam_fillmd(int argc, char *argv[]); +int bam_idxstats(int argc, char *argv[]); +int bam_markdup(int argc, char *argv[]); +int main_samview(int argc, char *argv[]); +int main_import(int argc, char *argv[]); +int main_reheader(int argc, char *argv[]); +int main_cut_target(int argc, char *argv[]); +int main_phase(int argc, char *argv[]); +int main_cat(int argc, char *argv[]); +int main_depth(int argc, char *argv[]); +int main_bam2fq(int argc, char *argv[]); +int main_pad2unpad(int argc, char *argv[]); +int main_bedcov(int argc, char *argv[]); +int main_bamshuf(int argc, char *argv[]); +int main_stats(int argc, char *argv[]); +int main_flags(int argc, char *argv[]); +int main_split(int argc, char *argv[]); +int main_quickcheck(int argc, char *argv[]); +int main_addreplacerg(int argc, char *argv[]); +int faidx_main(int argc, char *argv[]); +int dict_main(int argc, char *argv[]); + + +static void usage(FILE *fp) +{ + /* Please improve the grouping */ + + fprintf(fp, +"\n" +"Program: samtools (Tools for alignments in the SAM format)\n" +"Version: %s (using htslib %s)\n\n", samtools_version(), hts_version()); + fprintf(fp, +"Usage: samtools [options]\n" +"\n" +"Commands:\n" +" -- Indexing\n" +" dict create a sequence dictionary file\n" +" faidx index/extract FASTA\n" +" index index alignment\n" +"\n" +" -- Editing\n" +" calmd recalculate MD/NM tags and '=' bases\n" +" fixmate fix mate information\n" +" reheader replace BAM header\n" +" targetcut cut fosmid regions (for fosmid pool only)\n" +" addreplacerg adds or replaces RG tags\n" +" markdup mark duplicates\n" +"\n" +" -- File operations\n" +" collate shuffle and group alignments by name\n" +" cat concatenate BAMs\n" +" merge merge sorted alignments\n" +" mpileup multi-way pileup\n" +" sort sort alignment file\n" +" split splits a file by read group\n" +" quickcheck quickly check if SAM/BAM/CRAM file appears intact\n" +" fastq converts a BAM to a FASTQ\n" +" fasta converts a BAM to a FASTA\n" +"\n" +" -- Statistics\n" +" bedcov read depth per BED region\n" +" depth compute the depth\n" +" flagstat simple stats\n" +" idxstats BAM index stats\n" +" phase phase heterozygotes\n" +" stats generate stats (former bamcheck)\n" +"\n" +" -- Viewing\n" +" flags explain BAM flags\n" +" tview text alignment viewer\n" +" view SAM<->BAM<->CRAM conversion\n" +" depad convert padded BAM to unpadded BAM\n" +"\n"); +#ifdef _WIN32 + fprintf(fp, +"Note: The Windows version of SAMtools is mainly designed for read-only\n" +" operations, such as viewing the alignments and generating the pileup.\n" +" Binary files generated by the Windows version may be buggy.\n\n"); +#endif +} + +// This is a tricky one, but on Windows the filename wildcard expansion is done by +// the application and not by the shell, as traditionally it never had a "shell". +// Even now, DOS and Powershell do not do this expansion (but bash does). +// +// This means that Mingw/Msys implements code before main() that takes e.g. "*" and +// expands it up to a list of matching filenames. This in turn breaks things like +// specifying "*" as a region (all the unmapped reads). We take a hard line here - +// filename expansion is the task of the shell, not our application! +#ifdef _WIN32 +int _CRT_glob = 0; +#endif + +int samtools_main(int argc, char *argv[]) +{ +#ifdef _WIN32 + setmode(fileno(samtools_stdout), O_BINARY); + setmode(fileno(stdin), O_BINARY); +#endif + if (argc < 2) { usage(samtools_stderr); return 1; } + + if (strcmp(argv[1], "help") == 0 || strcmp(argv[1], "--help") == 0) { + if (argc == 2) { usage(samtools_stdout); return 0; } + + // Otherwise change "samtools help COMMAND [...]" to "samtools COMMAND"; + // main_xyz() functions by convention display the subcommand's usage + // when invoked without any arguments. + argv++; + argc = 2; + } + + int ret = 0; + if (strcmp(argv[1], "view") == 0) ret = main_samview(argc-1, argv+1); + else if (strcmp(argv[1], "import") == 0) ret = main_import(argc-1, argv+1); + else if (strcmp(argv[1], "mpileup") == 0) ret = bam_mpileup(argc-1, argv+1); + else if (strcmp(argv[1], "merge") == 0) ret = bam_merge(argc-1, argv+1); + else if (strcmp(argv[1], "sort") == 0) ret = bam_sort(argc-1, argv+1); + else if (strcmp(argv[1], "index") == 0) ret = bam_index(argc-1, argv+1); + else if (strcmp(argv[1], "idxstats") == 0) ret = bam_idxstats(argc-1, argv+1); + else if (strcmp(argv[1], "faidx") == 0) ret = faidx_main(argc-1, argv+1); + else if (strcmp(argv[1], "dict") == 0) ret = dict_main(argc-1, argv+1); + else if (strcmp(argv[1], "fixmate") == 0) ret = bam_mating(argc-1, argv+1); + else if (strcmp(argv[1], "rmdup") == 0) ret = bam_rmdup(argc-1, argv+1); + else if (strcmp(argv[1], "markdup") == 0) ret = bam_markdup(argc-1, argv+1); + else if (strcmp(argv[1], "flagstat") == 0) ret = bam_flagstat(argc-1, argv+1); + else if (strcmp(argv[1], "calmd") == 0) ret = bam_fillmd(argc-1, argv+1); + else if (strcmp(argv[1], "fillmd") == 0) ret = bam_fillmd(argc-1, argv+1); + else if (strcmp(argv[1], "reheader") == 0) ret = main_reheader(argc-1, argv+1); + else if (strcmp(argv[1], "cat") == 0) ret = main_cat(argc-1, argv+1); + else if (strcmp(argv[1], "targetcut") == 0) ret = main_cut_target(argc-1, argv+1); + else if (strcmp(argv[1], "phase") == 0) ret = main_phase(argc-1, argv+1); + else if (strcmp(argv[1], "depth") == 0) ret = main_depth(argc-1, argv+1); + else if (strcmp(argv[1], "bam2fq") == 0 || + strcmp(argv[1], "fastq") == 0 || + strcmp(argv[1], "fasta") == 0) ret = main_bam2fq(argc-1, argv+1); + else if (strcmp(argv[1], "pad2unpad") == 0) ret = main_pad2unpad(argc-1, argv+1); + else if (strcmp(argv[1], "depad") == 0) ret = main_pad2unpad(argc-1, argv+1); + else if (strcmp(argv[1], "bedcov") == 0) ret = main_bedcov(argc-1, argv+1); + else if (strcmp(argv[1], "bamshuf") == 0) ret = main_bamshuf(argc-1, argv+1); + else if (strcmp(argv[1], "collate") == 0) ret = main_bamshuf(argc-1, argv+1); + else if (strcmp(argv[1], "stats") == 0) ret = main_stats(argc-1, argv+1); + else if (strcmp(argv[1], "flags") == 0) ret = main_flags(argc-1, argv+1); + else if (strcmp(argv[1], "split") == 0) ret = main_split(argc-1, argv+1); + else if (strcmp(argv[1], "quickcheck") == 0) ret = main_quickcheck(argc-1, argv+1); + else if (strcmp(argv[1], "addreplacerg") == 0) ret = main_addreplacerg(argc-1, argv+1); + else if (strcmp(argv[1], "pileup") == 0) { + fprintf(samtools_stderr, "[main] The `pileup' command has been removed. Please use `mpileup' instead.\n"); + return 1; + } + // else if (strcmp(argv[1], "tview") == 0) ret = bam_tview_main(argc-1, argv+1); + else if (strcmp(argv[1], "--version") == 0) { + fprintf(samtools_stdout, +"samtools %s\n" +"Using htslib %s\n" +"Copyright (C) 2018 Genome Research Ltd.\n", + samtools_version(), hts_version()); + } + else if (strcmp(argv[1], "--version-only") == 0) { + fprintf(samtools_stdout, "%s+htslib-%s\n", samtools_version(), hts_version()); + } + else { + fprintf(samtools_stderr, "[main] unrecognized command '%s'\n", argv[1]); + return 1; + } + return ret; +} diff --git a/samtools/bedcov.c b/samtools/bedcov.c new file mode 100644 index 0000000..1098309 --- /dev/null +++ b/samtools/bedcov.c @@ -0,0 +1,187 @@ +/* bedcov.c -- bedcov subcommand. + + Copyright (C) 2012 Broad Institute. + Copyright (C) 2013-2014 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include +#include "htslib/kstring.h" +#include "htslib/sam.h" +#include "htslib/thread_pool.h" +#include "sam_opts.h" + +#include "htslib/kseq.h" +KSTREAM_INIT(gzFile, gzread, 16384) + +typedef struct { + htsFile *fp; + bam_hdr_t *header; + hts_itr_t *iter; + int min_mapQ; +} aux_t; + +static int read_bam(void *data, bam1_t *b) +{ + aux_t *aux = (aux_t*)data; // data in fact is a pointer to an auxiliary structure + int ret; + while (1) + { + ret = aux->iter? sam_itr_next(aux->fp, aux->iter, b) : sam_read1(aux->fp, aux->header, b); + if ( ret<0 ) break; + if ( b->core.flag & (BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP) ) continue; + if ( (int)b->core.qual < aux->min_mapQ ) continue; + break; + } + return ret; +} + +int main_bedcov(int argc, char *argv[]) +{ + gzFile fp; + kstring_t str; + kstream_t *ks; + hts_idx_t **idx; + aux_t **aux; + int *n_plp, dret, i, n, c, min_mapQ = 0; + int64_t *cnt; + const bam_pileup1_t **plp; + int usage = 0; + + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, '-', '-', 0, '-'), + { NULL, 0, NULL, 0 } + }; + + while ((c = getopt_long(argc, argv, "Q:", lopts, NULL)) >= 0) { + switch (c) { + case 'Q': min_mapQ = atoi(optarg); break; + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + /* else fall-through */ + case '?': usage = 1; break; + } + if (usage) break; + } + if (usage || optind + 2 > argc) { + fprintf(stderr, "Usage: samtools bedcov [options] [...]\n\n"); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " -Q mapping quality threshold [0]\n"); + sam_global_opt_help(stderr, "-.--.-"); + return 1; + } + memset(&str, 0, sizeof(kstring_t)); + n = argc - optind - 1; + aux = calloc(n, sizeof(aux_t*)); + idx = calloc(n, sizeof(hts_idx_t*)); + for (i = 0; i < n; ++i) { + aux[i] = calloc(1, sizeof(aux_t)); + aux[i]->min_mapQ = min_mapQ; + aux[i]->fp = sam_open_format(argv[i+optind+1], "r", &ga.in); + if (aux[i]->fp) + idx[i] = sam_index_load(aux[i]->fp, argv[i+optind+1]); + if (aux[i]->fp == 0 || idx[i] == 0) { + fprintf(stderr, "ERROR: fail to open index BAM file '%s'\n", argv[i+optind+1]); + return 2; + } + // TODO bgzf_set_cache_size(aux[i]->fp, 20); + aux[i]->header = sam_hdr_read(aux[i]->fp); + if (aux[i]->header == NULL) { + fprintf(stderr, "ERROR: failed to read header for '%s'\n", + argv[i+optind+1]); + return 2; + } + } + cnt = calloc(n, 8); + + fp = gzopen(argv[optind], "rb"); + ks = ks_init(fp); + n_plp = calloc(n, sizeof(int)); + plp = calloc(n, sizeof(bam_pileup1_t*)); + while (ks_getuntil(ks, KS_SEP_LINE, &str, &dret) >= 0) { + char *p, *q; + int tid, beg, end, pos; + bam_mplp_t mplp; + + if (str.l == 0 || *str.s == '#') continue; /* empty or comment line */ + /* Track and browser lines. Also look for a trailing *space* in + case someone has badly-chosen a chromosome name (it would + be followed by a tab in that case). */ + if (strncmp(str.s, "track ", 6) == 0) continue; + if (strncmp(str.s, "browser ", 8) == 0) continue; + for (p = q = str.s; *p && *p != '\t'; ++p); + if (*p != '\t') goto bed_error; + *p = 0; tid = bam_name2id(aux[0]->header, q); *p = '\t'; + if (tid < 0) goto bed_error; + for (q = p = p + 1; isdigit(*p); ++p); + if (*p != '\t') goto bed_error; + *p = 0; beg = atoi(q); *p = '\t'; + for (q = p = p + 1; isdigit(*p); ++p); + if (*p == '\t' || *p == 0) { + int c = *p; + *p = 0; end = atoi(q); *p = c; + } else goto bed_error; + + for (i = 0; i < n; ++i) { + if (aux[i]->iter) hts_itr_destroy(aux[i]->iter); + aux[i]->iter = sam_itr_queryi(idx[i], tid, beg, end); + } + mplp = bam_mplp_init(n, read_bam, (void**)aux); + bam_mplp_set_maxcnt(mplp, 64000); + memset(cnt, 0, 8 * n); + while (bam_mplp_auto(mplp, &tid, &pos, n_plp, plp) > 0) + if (pos >= beg && pos < end) + for (i = 0; i < n; ++i) cnt[i] += n_plp[i]; + for (i = 0; i < n; ++i) { + kputc('\t', &str); + kputl(cnt[i], &str); + } + puts(str.s); + bam_mplp_destroy(mplp); + continue; + +bed_error: + fprintf(stderr, "Errors in BED line '%s'\n", str.s); + } + free(n_plp); free(plp); + ks_destroy(ks); + gzclose(fp); + + free(cnt); + for (i = 0; i < n; ++i) { + if (aux[i]->iter) hts_itr_destroy(aux[i]->iter); + hts_idx_destroy(idx[i]); + bam_hdr_destroy(aux[i]->header); + sam_close(aux[i]->fp); + free(aux[i]); + } + free(aux); free(idx); + free(str.s); + sam_global_args_free(&ga); + return 0; +} diff --git a/samtools/bedcov.c.pysam.c b/samtools/bedcov.c.pysam.c new file mode 100644 index 0000000..fa7c9a2 --- /dev/null +++ b/samtools/bedcov.c.pysam.c @@ -0,0 +1,189 @@ +#include "samtools.pysam.h" + +/* bedcov.c -- bedcov subcommand. + + Copyright (C) 2012 Broad Institute. + Copyright (C) 2013-2014 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include +#include "htslib/kstring.h" +#include "htslib/sam.h" +#include "htslib/thread_pool.h" +#include "sam_opts.h" + +#include "htslib/kseq.h" +KSTREAM_INIT(gzFile, gzread, 16384) + +typedef struct { + htsFile *fp; + bam_hdr_t *header; + hts_itr_t *iter; + int min_mapQ; +} aux_t; + +static int read_bam(void *data, bam1_t *b) +{ + aux_t *aux = (aux_t*)data; // data in fact is a pointer to an auxiliary structure + int ret; + while (1) + { + ret = aux->iter? sam_itr_next(aux->fp, aux->iter, b) : sam_read1(aux->fp, aux->header, b); + if ( ret<0 ) break; + if ( b->core.flag & (BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP) ) continue; + if ( (int)b->core.qual < aux->min_mapQ ) continue; + break; + } + return ret; +} + +int main_bedcov(int argc, char *argv[]) +{ + gzFile fp; + kstring_t str; + kstream_t *ks; + hts_idx_t **idx; + aux_t **aux; + int *n_plp, dret, i, n, c, min_mapQ = 0; + int64_t *cnt; + const bam_pileup1_t **plp; + int usage = 0; + + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, '-', '-', 0, '-'), + { NULL, 0, NULL, 0 } + }; + + while ((c = getopt_long(argc, argv, "Q:", lopts, NULL)) >= 0) { + switch (c) { + case 'Q': min_mapQ = atoi(optarg); break; + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + /* else fall-through */ + case '?': usage = 1; break; + } + if (usage) break; + } + if (usage || optind + 2 > argc) { + fprintf(samtools_stderr, "Usage: samtools bedcov [options] [...]\n\n"); + fprintf(samtools_stderr, "Options:\n"); + fprintf(samtools_stderr, " -Q mapping quality threshold [0]\n"); + sam_global_opt_help(samtools_stderr, "-.--.-"); + return 1; + } + memset(&str, 0, sizeof(kstring_t)); + n = argc - optind - 1; + aux = calloc(n, sizeof(aux_t*)); + idx = calloc(n, sizeof(hts_idx_t*)); + for (i = 0; i < n; ++i) { + aux[i] = calloc(1, sizeof(aux_t)); + aux[i]->min_mapQ = min_mapQ; + aux[i]->fp = sam_open_format(argv[i+optind+1], "r", &ga.in); + if (aux[i]->fp) + idx[i] = sam_index_load(aux[i]->fp, argv[i+optind+1]); + if (aux[i]->fp == 0 || idx[i] == 0) { + fprintf(samtools_stderr, "ERROR: fail to open index BAM file '%s'\n", argv[i+optind+1]); + return 2; + } + // TODO bgzf_set_cache_size(aux[i]->fp, 20); + aux[i]->header = sam_hdr_read(aux[i]->fp); + if (aux[i]->header == NULL) { + fprintf(samtools_stderr, "ERROR: failed to read header for '%s'\n", + argv[i+optind+1]); + return 2; + } + } + cnt = calloc(n, 8); + + fp = gzopen(argv[optind], "rb"); + ks = ks_init(fp); + n_plp = calloc(n, sizeof(int)); + plp = calloc(n, sizeof(bam_pileup1_t*)); + while (ks_getuntil(ks, KS_SEP_LINE, &str, &dret) >= 0) { + char *p, *q; + int tid, beg, end, pos; + bam_mplp_t mplp; + + if (str.l == 0 || *str.s == '#') continue; /* empty or comment line */ + /* Track and browser lines. Also look for a trailing *space* in + case someone has badly-chosen a chromosome name (it would + be followed by a tab in that case). */ + if (strncmp(str.s, "track ", 6) == 0) continue; + if (strncmp(str.s, "browser ", 8) == 0) continue; + for (p = q = str.s; *p && *p != '\t'; ++p); + if (*p != '\t') goto bed_error; + *p = 0; tid = bam_name2id(aux[0]->header, q); *p = '\t'; + if (tid < 0) goto bed_error; + for (q = p = p + 1; isdigit(*p); ++p); + if (*p != '\t') goto bed_error; + *p = 0; beg = atoi(q); *p = '\t'; + for (q = p = p + 1; isdigit(*p); ++p); + if (*p == '\t' || *p == 0) { + int c = *p; + *p = 0; end = atoi(q); *p = c; + } else goto bed_error; + + for (i = 0; i < n; ++i) { + if (aux[i]->iter) hts_itr_destroy(aux[i]->iter); + aux[i]->iter = sam_itr_queryi(idx[i], tid, beg, end); + } + mplp = bam_mplp_init(n, read_bam, (void**)aux); + bam_mplp_set_maxcnt(mplp, 64000); + memset(cnt, 0, 8 * n); + while (bam_mplp_auto(mplp, &tid, &pos, n_plp, plp) > 0) + if (pos >= beg && pos < end) + for (i = 0; i < n; ++i) cnt[i] += n_plp[i]; + for (i = 0; i < n; ++i) { + kputc('\t', &str); + kputl(cnt[i], &str); + } + fputs(str.s, samtools_stdout) & fputc('\n', samtools_stdout); + bam_mplp_destroy(mplp); + continue; + +bed_error: + fprintf(samtools_stderr, "Errors in BED line '%s'\n", str.s); + } + free(n_plp); free(plp); + ks_destroy(ks); + gzclose(fp); + + free(cnt); + for (i = 0; i < n; ++i) { + if (aux[i]->iter) hts_itr_destroy(aux[i]->iter); + hts_idx_destroy(idx[i]); + bam_hdr_destroy(aux[i]->header); + sam_close(aux[i]->fp); + free(aux[i]); + } + free(aux); free(idx); + free(str.s); + sam_global_args_free(&ga); + return 0; +} diff --git a/samtools/bedidx.c b/samtools/bedidx.c new file mode 100644 index 0000000..3489c27 --- /dev/null +++ b/samtools/bedidx.c @@ -0,0 +1,600 @@ +/* bedidx.c -- BED file indexing. + + Copyright (C) 2011 Broad Institute. + Copyright (C) 2014 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include +#include "bedidx.h" + +#include "htslib/ksort.h" +KSORT_INIT_GENERIC(uint64_t) + +#include "htslib/kseq.h" +KSTREAM_INIT(gzFile, gzread, 8192) + +/*! @typedef + * @abstract bed_reglist_t - value type of the BED hash table + * This structure encodes the list of intervals (ranges) for the regions provided via BED file or + * command line arguments. + * @field *a pointer to the array of intervals (kept as 64 bit integers). The upper 32 bits + * encode the beginning of the interval, while the lower 32 bits encode the end, for easy sorting. + * |-- 32 bits --|-- 32 bits --| + * |---- beg ----|---- end ----| + * @field n actual number of elements contained by a + * @field m number of allocated elements to a (n <= m) + * @field *idx index array for computing the minimum offset + */ +typedef struct { + int n, m; + uint64_t *a; + int *idx; + int filter; +} bed_reglist_t; + +#include "htslib/khash.h" +KHASH_MAP_INIT_STR(reg, bed_reglist_t) + +typedef kh_reg_t reghash_t; + +#if 0 +// Debug function +static void bed_print(void *reg_hash) { + reghash_t *h = (reghash_t *)reg_hash; + bed_reglist_t *p; + khint_t k; + int i; + const char *reg; + uint32_t beg, end; + + if (!h) { + printf("Hash table is empty!\n"); + return; + } + for (k = kh_begin(h); k < kh_end(h); k++) { + if (kh_exist(h,k)) { + reg = kh_key(h,k); + printf("Region: '%s'\n", reg); + if ((p = &kh_val(h,k)) != NULL && p->n > 0) { + printf("Filter: %d\n", p->filter); + for (i=0; in; i++) { + beg = (uint32_t)(p->a[i]>>32); + end = (uint32_t)(p->a[i]); + + printf("\tinterval[%d]: %d-%d\n",i,beg,end); + } + } else { + printf("Region '%s' has no intervals!\n", reg); + } + } + } +} +#endif + +static int *bed_index_core(int n, uint64_t *a) +{ + int i, j, l, *idx; + l = 0; idx = 0; + for (i = 0; i < n; ++i) { + int beg, end; + beg = a[i]>>32 >> LIDX_SHIFT; end = ((uint32_t)a[i]) >> LIDX_SHIFT; + if (l < end + 1) { + int old_l = l; + l = end + 1; + kroundup32(l); + idx = realloc(idx, l * sizeof(int)); + if (!idx) + return NULL; + + for (j = old_l; j < l; ++j) + idx[j] = -1; + } + + for (j = beg; j < end+1; ++j) + if (idx[j] < 0) + idx[j] = i; + } + return idx; +} + +static void bed_index(void *_h) +{ + reghash_t *h = (reghash_t*)_h; + khint_t k; + for (k = 0; k < kh_end(h); ++k) { + if (kh_exist(h, k)) { + bed_reglist_t *p = &kh_val(h, k); + if (p->idx) free(p->idx); + ks_introsort(uint64_t, p->n, p->a); + p->idx = bed_index_core(p->n, p->a); + } + } +} + +static int bed_minoff(const bed_reglist_t *p, unsigned int beg, unsigned int end) { + int i, min_off=0; + + if (p && p->idx) { + min_off = (beg>>LIDX_SHIFT >= p->n)? p->idx[p->n-1] : p->idx[beg>>LIDX_SHIFT]; + if (min_off < 0) { // TODO: this block can be improved, but speed should not matter too much here + int n = beg>>LIDX_SHIFT; + if (n > p->n) + n = p->n; + for (i = n - 1; i >= 0; --i) + if (p->idx[i] >= 0) + break; + min_off = i >= 0? p->idx[i] : 0; + } + } + + return min_off; +} + +static int bed_overlap_core(const bed_reglist_t *p, int beg, int end) +{ + int i, min_off; + if (p->n == 0) return 0; + min_off = bed_minoff(p, beg, end); + + for (i = min_off; i < p->n; ++i) { + if ((int)(p->a[i]>>32) >= end) break; // out of range; no need to proceed + if ((int32_t)p->a[i] > beg && (int32_t)(p->a[i]>>32) < end) + return 1; // find the overlap; return + } + return 0; +} + +int bed_overlap(const void *_h, const char *chr, int beg, int end) +{ + const reghash_t *h = (const reghash_t*)_h; + khint_t k; + if (!h) return 0; + k = kh_get(reg, h, chr); + if (k == kh_end(h)) return 0; + return bed_overlap_core(&kh_val(h, k), beg, end); +} + +/** @brief Trim a sorted interval list, inside a region hash table, + * by removing completely contained intervals and merging adjacent or + * overlapping intervals. + * @param reg_hash the region hash table with interval lists as values + */ + +static void bed_unify(void *reg_hash) { + + int i, j, new_n; + reghash_t *h; + bed_reglist_t *p; + + if (!reg_hash) + return; + + h = (reghash_t *)reg_hash; + + for (i = kh_begin(h); i < kh_end(h); i++) { + if (!kh_exist(h,i) || !(p = &kh_val(h,i)) || !(p->n)) + continue; + + for (new_n = 0, j = 1; j < p->n; j++) { + if ((uint32_t)p->a[new_n] < (uint32_t)(p->a[j]>>32)) { + p->a[++new_n] = p->a[j]; + } else { + if ((uint32_t)p->a[new_n] < (uint32_t)p->a[j]) + p->a[new_n] = (p->a[new_n] & 0xFFFFFFFF00000000) | (uint32_t)(p->a[j]); + } + } + + p->n = ++new_n; + } +} + +/* "BED" file reader, which actually reads two different formats. + + BED files contain between three and nine fields per line, of which + only the first three (reference, start, end) are of interest to us. + BED counts positions from base 0, and the end is the base after the + region of interest. While not properly documented in the specification, + it is also possible to have 'browser' and 'track' lines in BED files that + do not follow the standard format and should be ignored. Examination + of the BED file reading code in + http://genome-source.cse.ucsc.edu/gitweb/?p=kent.git shows that BED + files can also have comment lines starting with '#', leading whitespace + is stripped, and that fields are separated by one or more consecutive + whitespace characters. + + The alternative format was originally for reading positions in VCF + format. This expects two columns, which indicate the reference and + a position. The position corresponds to a single base, and unlike + BED counts from 1. + + Which format is in use is determined based on whether one or two + numbers can be decoded on the line. As this choice is made line-by-line + in this implementation, it is possible (but probably a bad idea) to mix + both formats in the same file. If trying to read a VCF file by this + method, it would be important to ensure that the third column (ID) does + not contain any entries that start with a digit, to avoid the line + erroneously being parsed as a BED file entry. + + The BED specification is at http://www.genome.ucsc.edu/FAQ/FAQformat.html + The VCF specification is at https://github.com/samtools/hts-specs + */ + +void *bed_read(const char *fn) +{ + reghash_t *h = kh_init(reg); + gzFile fp; + kstream_t *ks = NULL; + int dret; + unsigned int line = 0; + kstring_t str = { 0, 0, NULL }; + + if (NULL == h) return NULL; + // read the list + fp = strcmp(fn, "-")? gzopen(fn, "r") : gzdopen(fileno(stdin), "r"); + if (fp == 0) return 0; + ks = ks_init(fp); + if (NULL == ks) goto fail; // In case ks_init ever gets error checking... + while (ks_getuntil(ks, KS_SEP_LINE, &str, &dret) > 0) { // read a line + char *ref = str.s, *ref_end; + unsigned int beg = 0, end = 0; + int num = 0; + khint_t k; + bed_reglist_t *p; + + line++; + while (*ref && isspace(*ref)) ref++; + if ('\0' == *ref) continue; // Skip blank lines + if ('#' == *ref) continue; // Skip BED file comments + ref_end = ref; // look for the end of the reference name + while (*ref_end && !isspace(*ref_end)) ref_end++; + if ('\0' != *ref_end) { + *ref_end = '\0'; // terminate ref and look for start, end + num = sscanf(ref_end + 1, "%u %u", &beg, &end); + } + if (1 == num) { // VCF-style format + end = beg--; // Counts from 1 instead of 0 for BED files + } + if (num < 1 || end < beg) { + // These two are special lines that can occur in BED files. + // Check for them here instead of earlier in case someone really + // has called their reference "browser" or "track". + if (0 == strcmp(ref, "browser")) continue; + if (0 == strcmp(ref, "track")) continue; + fprintf(stderr, "[bed_read] Parse error reading %s at line %u\n", + fn, line); + goto fail_no_msg; + } + + // Put reg in the hash table if not already there + k = kh_get(reg, h, ref); + if (k == kh_end(h)) { // absent from the hash table + int ret; + char *s = strdup(ref); + if (NULL == s) goto fail; + k = kh_put(reg, h, s, &ret); + if (-1 == ret) { + free(s); + goto fail; + } + memset(&kh_val(h, k), 0, sizeof(bed_reglist_t)); + } + p = &kh_val(h, k); + + // Add begin,end to the list + if (p->n == p->m) { + p->m = p->m ? p->m<<1 : 4; + p->a = realloc(p->a, p->m * sizeof(uint64_t)); + if (NULL == p->a) goto fail; + } + p->a[p->n++] = (uint64_t)beg<<32 | end; + } + // FIXME: Need to check for errors in ks_getuntil. At the moment it + // doesn't look like it can return one. Possibly use gzgets instead? + + ks_destroy(ks); + gzclose(fp); + free(str.s); + bed_index(h); + //bed_unify(h); + return h; + fail: + fprintf(stderr, "[bed_read] Error reading %s : %s\n", fn, strerror(errno)); + fail_no_msg: + if (ks) ks_destroy(ks); + if (fp) gzclose(fp); + free(str.s); + bed_destroy(h); + return NULL; +} + +void bed_destroy(void *_h) +{ + reghash_t *h; + khint_t k; + + if (!_h) + return; + + h = (reghash_t*)_h; + for (k = 0; k < kh_end(h); ++k) { + if (kh_exist(h, k)) { + free(kh_val(h, k).a); + free(kh_val(h, k).idx); + free((char*)kh_key(h, k)); + } + } + kh_destroy(reg, h); +} + +static void *bed_insert(void *reg_hash, char *reg, unsigned int beg, unsigned int end) { + + reghash_t *h; + khint_t k; + bed_reglist_t *p; + + if (!reg_hash) + return NULL; + + h = (reghash_t *)reg_hash; + + // Put reg in the hash table if not already there + k = kh_get(reg, h, reg); //looks strange, but only the second reg is the actual region name. + if (k == kh_end(h)) { // absent from the hash table + int ret; + char *s = strdup(reg); + if (NULL == s) goto fail; + k = kh_put(reg, h, s, &ret); + if (-1 == ret) { + free(s); + goto fail; + } + memset(&kh_val(h, k), 0, sizeof(bed_reglist_t)); + } + p = &kh_val(h, k); + + // Add beg and end to the list + if (p->n == p->m) { + p->m = p->m ? p->m<<1 : 4; + p->a = realloc(p->a, p->m * sizeof(uint64_t)); + if (NULL == p->a) goto fail; + } + p->a[p->n++] = (uint64_t)beg<<32 | end; + +fail: + return h; +} + +/* @brief Filter a region hash table (coming from the BED file) by another + * region hash table (coming from CLI), so that only intervals contained in + * both hash tables are kept. + * @param reg_hash the target region hash table + * @param tmp_hash the filter region hash table + * @return pointer to the filtered hash table + */ + +static void *bed_filter(void *reg_hash, void *tmp_hash) { + + reghash_t *h; + reghash_t *t; + bed_reglist_t *p, *q; + khint_t l, k; + uint64_t *new_a; + int i, j, new_n, min_off; + const char *reg; + uint32_t beg, end; + + h = (reghash_t *)reg_hash; + t = (reghash_t *)tmp_hash; + if (!h) + return NULL; + if (!t) + return h; + + for (l = kh_begin(t); l < kh_end(t); l++) { + if (!kh_exist(t,l) || !(q = &kh_val(t,l)) || !(q->n)) + continue; + + reg = kh_key(t,l); + k = kh_get(reg, h, reg); //looks strange, but only the second reg is a proper argument. + if (k == kh_end(h) || !(p = &kh_val(h, k)) || !(p->n)) + continue; + + new_a = (uint64_t *)calloc(q->n + p->n, sizeof(uint64_t)); + if (!new_a) + return NULL; + new_n = 0; + + for (i = 0; i < q->n; i++) { + beg = (uint32_t)(q->a[i]>>32); + end = (uint32_t)(q->a[i]); + + min_off = bed_minoff(p, beg, end); + for (j = min_off; j < p->n; ++j) { + if ((uint32_t)(p->a[j]>>32) >= end) break; // out of range; no need to proceed + if ((uint32_t)(p->a[j]) > beg && (uint32_t)(p->a[j]>>32) < end) { + new_a[new_n++] = ((uint64_t)MAX((uint32_t)(p->a[j]>>32), beg) << 32) | MIN((uint32_t)p->a[j], end); + } + } + } + + if (new_n > 0) { + free(p->a); + p->a = new_a; + p->n = new_n; + p->m = new_n; + p->filter = FILTERED; + } else { + free(new_a); + p->filter = ALL; + } + } + + return h; +} + +void *bed_hash_regions(void *reg_hash, char **regs, int first, int last, int *op) { + + reghash_t *h = (reghash_t *)reg_hash; + reghash_t *t = NULL; + + int i; + char reg[1024]; + const char *q; + int beg, end; + + if (h) { + t = kh_init(reg); + if (!t) { + fprintf(stderr, "Error when creating the temporary region hash table!\n"); + return NULL; + } + } else { + h = kh_init(reg); + if (!h) { + fprintf(stderr, "Error when creating the region hash table!\n"); + return NULL; + } + *op = 1; + } + + for (i=first; i 1024) { + fprintf(stderr, "Region name '%s' is too long (bigger than %d).\n", regs[i], 1024); + continue; + } + strncpy(reg, regs[i], q - regs[i]); + reg[q - regs[i]] = 0; + } else { + // not parsable as a region, but possibly a sequence named "foo:a" + if (strlen(regs[i]) + 1 > 1024) { + fprintf(stderr, "Region name '%s' is too long (bigger than %d).\n", regs[i], 1024); + continue; + } + strcpy(reg, regs[i]); + beg = 0; end = INT_MAX; + } + + //if op==1 insert reg to the bed hash table + if (*op && !(bed_insert(h, reg, beg, end))) { + fprintf(stderr, "Error when inserting region='%s' in the bed hash table at address=%p!\n", regs[i], h); + } + //if op==0, first insert the regions in the temporary hash table, + //then filter the bed hash table using it + if (!(*op) && !(bed_insert(t, reg, beg, end))) { + fprintf(stderr, "Error when inserting region='%s' in the temporary hash table at address=%p!\n", regs[i], t); + } + } + + if (!(*op)) { + bed_index(t); + bed_unify(t); + h = bed_filter(h, t); + bed_destroy(t); + } + + if (h) { + bed_index(h); + bed_unify(h); + } + + return h; +} + +const char* bed_get(void *reg_hash, int i, int filter) { + + reghash_t *h; + bed_reglist_t *p; + + if (!reg_hash) + return NULL; + + h = (reghash_t *)reg_hash; + if (!kh_exist(h,i) || !(p = &kh_val(h,i)) || (p->filter < filter)) + return NULL; + + return kh_key(h, i); +} + +hts_reglist_t *bed_reglist(void *reg_hash, int filter, int *n_reg) { + + reghash_t *h; + bed_reglist_t *p; + khint_t i; + hts_reglist_t *reglist = NULL; + int count = 0; + int j; + + if (!reg_hash) + return NULL; + + h = (reghash_t *)reg_hash; + + for (i = kh_begin(h); i < kh_end(h); i++) { + if (!kh_exist(h,i) || !(p = &kh_val(h,i)) || (p->filter < filter)) + continue; + count++; + } + if (!count) + return NULL; + + reglist = (hts_reglist_t *)calloc(count, sizeof(hts_reglist_t)); + if (!reglist) + return NULL; + + *n_reg = count; + count = 0; + + for (i = kh_begin(h); i < kh_end(h) && count < *n_reg; i++) { + if (!kh_exist(h,i) || !(p = &kh_val(h,i)) || (p->filter < filter)) + continue; + + reglist[count].reg = kh_key(h,i); + reglist[count].intervals = (hts_pair32_t *)calloc(p->n, sizeof(hts_pair32_t)); + if(!(reglist[count].intervals)) { + hts_reglist_free(reglist, count); + return NULL; + } + reglist[count].count = p->n; + reglist[count].max_end = 0; + + for (j = 0; j < p->n; j++) { + reglist[count].intervals[j].beg = (uint32_t)(p->a[j]>>32); + reglist[count].intervals[j].end = (uint32_t)(p->a[j]); + + if (reglist[count].intervals[j].end > reglist[count].max_end) + reglist[count].max_end = reglist[count].intervals[j].end; + } + count++; + } + + return reglist; +} diff --git a/samtools/bedidx.c.pysam.c b/samtools/bedidx.c.pysam.c new file mode 100644 index 0000000..fa92fa0 --- /dev/null +++ b/samtools/bedidx.c.pysam.c @@ -0,0 +1,602 @@ +#include "samtools.pysam.h" + +/* bedidx.c -- BED file indexing. + + Copyright (C) 2011 Broad Institute. + Copyright (C) 2014 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include +#include "bedidx.h" + +#include "htslib/ksort.h" +KSORT_INIT_GENERIC(uint64_t) + +#include "htslib/kseq.h" +KSTREAM_INIT(gzFile, gzread, 8192) + +/*! @typedef + * @abstract bed_reglist_t - value type of the BED hash table + * This structure encodes the list of intervals (ranges) for the regions provided via BED file or + * command line arguments. + * @field *a pointer to the array of intervals (kept as 64 bit integers). The upper 32 bits + * encode the beginning of the interval, while the lower 32 bits encode the end, for easy sorting. + * |-- 32 bits --|-- 32 bits --| + * |---- beg ----|---- end ----| + * @field n actual number of elements contained by a + * @field m number of allocated elements to a (n <= m) + * @field *idx index array for computing the minimum offset + */ +typedef struct { + int n, m; + uint64_t *a; + int *idx; + int filter; +} bed_reglist_t; + +#include "htslib/khash.h" +KHASH_MAP_INIT_STR(reg, bed_reglist_t) + +typedef kh_reg_t reghash_t; + +#if 0 +// Debug function +static void bed_print(void *reg_hash) { + reghash_t *h = (reghash_t *)reg_hash; + bed_reglist_t *p; + khint_t k; + int i; + const char *reg; + uint32_t beg, end; + + if (!h) { + fprintf(samtools_stdout, "Hash table is empty!\n"); + return; + } + for (k = kh_begin(h); k < kh_end(h); k++) { + if (kh_exist(h,k)) { + reg = kh_key(h,k); + fprintf(samtools_stdout, "Region: '%s'\n", reg); + if ((p = &kh_val(h,k)) != NULL && p->n > 0) { + fprintf(samtools_stdout, "Filter: %d\n", p->filter); + for (i=0; in; i++) { + beg = (uint32_t)(p->a[i]>>32); + end = (uint32_t)(p->a[i]); + + fprintf(samtools_stdout, "\tinterval[%d]: %d-%d\n",i,beg,end); + } + } else { + fprintf(samtools_stdout, "Region '%s' has no intervals!\n", reg); + } + } + } +} +#endif + +static int *bed_index_core(int n, uint64_t *a) +{ + int i, j, l, *idx; + l = 0; idx = 0; + for (i = 0; i < n; ++i) { + int beg, end; + beg = a[i]>>32 >> LIDX_SHIFT; end = ((uint32_t)a[i]) >> LIDX_SHIFT; + if (l < end + 1) { + int old_l = l; + l = end + 1; + kroundup32(l); + idx = realloc(idx, l * sizeof(int)); + if (!idx) + return NULL; + + for (j = old_l; j < l; ++j) + idx[j] = -1; + } + + for (j = beg; j < end+1; ++j) + if (idx[j] < 0) + idx[j] = i; + } + return idx; +} + +static void bed_index(void *_h) +{ + reghash_t *h = (reghash_t*)_h; + khint_t k; + for (k = 0; k < kh_end(h); ++k) { + if (kh_exist(h, k)) { + bed_reglist_t *p = &kh_val(h, k); + if (p->idx) free(p->idx); + ks_introsort(uint64_t, p->n, p->a); + p->idx = bed_index_core(p->n, p->a); + } + } +} + +static int bed_minoff(const bed_reglist_t *p, unsigned int beg, unsigned int end) { + int i, min_off=0; + + if (p && p->idx) { + min_off = (beg>>LIDX_SHIFT >= p->n)? p->idx[p->n-1] : p->idx[beg>>LIDX_SHIFT]; + if (min_off < 0) { // TODO: this block can be improved, but speed should not matter too much here + int n = beg>>LIDX_SHIFT; + if (n > p->n) + n = p->n; + for (i = n - 1; i >= 0; --i) + if (p->idx[i] >= 0) + break; + min_off = i >= 0? p->idx[i] : 0; + } + } + + return min_off; +} + +static int bed_overlap_core(const bed_reglist_t *p, int beg, int end) +{ + int i, min_off; + if (p->n == 0) return 0; + min_off = bed_minoff(p, beg, end); + + for (i = min_off; i < p->n; ++i) { + if ((int)(p->a[i]>>32) >= end) break; // out of range; no need to proceed + if ((int32_t)p->a[i] > beg && (int32_t)(p->a[i]>>32) < end) + return 1; // find the overlap; return + } + return 0; +} + +int bed_overlap(const void *_h, const char *chr, int beg, int end) +{ + const reghash_t *h = (const reghash_t*)_h; + khint_t k; + if (!h) return 0; + k = kh_get(reg, h, chr); + if (k == kh_end(h)) return 0; + return bed_overlap_core(&kh_val(h, k), beg, end); +} + +/** @brief Trim a sorted interval list, inside a region hash table, + * by removing completely contained intervals and merging adjacent or + * overlapping intervals. + * @param reg_hash the region hash table with interval lists as values + */ + +static void bed_unify(void *reg_hash) { + + int i, j, new_n; + reghash_t *h; + bed_reglist_t *p; + + if (!reg_hash) + return; + + h = (reghash_t *)reg_hash; + + for (i = kh_begin(h); i < kh_end(h); i++) { + if (!kh_exist(h,i) || !(p = &kh_val(h,i)) || !(p->n)) + continue; + + for (new_n = 0, j = 1; j < p->n; j++) { + if ((uint32_t)p->a[new_n] < (uint32_t)(p->a[j]>>32)) { + p->a[++new_n] = p->a[j]; + } else { + if ((uint32_t)p->a[new_n] < (uint32_t)p->a[j]) + p->a[new_n] = (p->a[new_n] & 0xFFFFFFFF00000000) | (uint32_t)(p->a[j]); + } + } + + p->n = ++new_n; + } +} + +/* "BED" file reader, which actually reads two different formats. + + BED files contain between three and nine fields per line, of which + only the first three (reference, start, end) are of interest to us. + BED counts positions from base 0, and the end is the base after the + region of interest. While not properly documented in the specification, + it is also possible to have 'browser' and 'track' lines in BED files that + do not follow the standard format and should be ignored. Examination + of the BED file reading code in + http://genome-source.cse.ucsc.edu/gitweb/?p=kent.git shows that BED + files can also have comment lines starting with '#', leading whitespace + is stripped, and that fields are separated by one or more consecutive + whitespace characters. + + The alternative format was originally for reading positions in VCF + format. This expects two columns, which indicate the reference and + a position. The position corresponds to a single base, and unlike + BED counts from 1. + + Which format is in use is determined based on whether one or two + numbers can be decoded on the line. As this choice is made line-by-line + in this implementation, it is possible (but probably a bad idea) to mix + both formats in the same file. If trying to read a VCF file by this + method, it would be important to ensure that the third column (ID) does + not contain any entries that start with a digit, to avoid the line + erroneously being parsed as a BED file entry. + + The BED specification is at http://www.genome.ucsc.edu/FAQ/FAQformat.html + The VCF specification is at https://github.com/samtools/hts-specs + */ + +void *bed_read(const char *fn) +{ + reghash_t *h = kh_init(reg); + gzFile fp; + kstream_t *ks = NULL; + int dret; + unsigned int line = 0; + kstring_t str = { 0, 0, NULL }; + + if (NULL == h) return NULL; + // read the list + fp = strcmp(fn, "-")? gzopen(fn, "r") : gzdopen(fileno(stdin), "r"); + if (fp == 0) return 0; + ks = ks_init(fp); + if (NULL == ks) goto fail; // In case ks_init ever gets error checking... + while (ks_getuntil(ks, KS_SEP_LINE, &str, &dret) > 0) { // read a line + char *ref = str.s, *ref_end; + unsigned int beg = 0, end = 0; + int num = 0; + khint_t k; + bed_reglist_t *p; + + line++; + while (*ref && isspace(*ref)) ref++; + if ('\0' == *ref) continue; // Skip blank lines + if ('#' == *ref) continue; // Skip BED file comments + ref_end = ref; // look for the end of the reference name + while (*ref_end && !isspace(*ref_end)) ref_end++; + if ('\0' != *ref_end) { + *ref_end = '\0'; // terminate ref and look for start, end + num = sscanf(ref_end + 1, "%u %u", &beg, &end); + } + if (1 == num) { // VCF-style format + end = beg--; // Counts from 1 instead of 0 for BED files + } + if (num < 1 || end < beg) { + // These two are special lines that can occur in BED files. + // Check for them here instead of earlier in case someone really + // has called their reference "browser" or "track". + if (0 == strcmp(ref, "browser")) continue; + if (0 == strcmp(ref, "track")) continue; + fprintf(samtools_stderr, "[bed_read] Parse error reading %s at line %u\n", + fn, line); + goto fail_no_msg; + } + + // Put reg in the hash table if not already there + k = kh_get(reg, h, ref); + if (k == kh_end(h)) { // absent from the hash table + int ret; + char *s = strdup(ref); + if (NULL == s) goto fail; + k = kh_put(reg, h, s, &ret); + if (-1 == ret) { + free(s); + goto fail; + } + memset(&kh_val(h, k), 0, sizeof(bed_reglist_t)); + } + p = &kh_val(h, k); + + // Add begin,end to the list + if (p->n == p->m) { + p->m = p->m ? p->m<<1 : 4; + p->a = realloc(p->a, p->m * sizeof(uint64_t)); + if (NULL == p->a) goto fail; + } + p->a[p->n++] = (uint64_t)beg<<32 | end; + } + // FIXME: Need to check for errors in ks_getuntil. At the moment it + // doesn't look like it can return one. Possibly use gzgets instead? + + ks_destroy(ks); + gzclose(fp); + free(str.s); + bed_index(h); + //bed_unify(h); + return h; + fail: + fprintf(samtools_stderr, "[bed_read] Error reading %s : %s\n", fn, strerror(errno)); + fail_no_msg: + if (ks) ks_destroy(ks); + if (fp) gzclose(fp); + free(str.s); + bed_destroy(h); + return NULL; +} + +void bed_destroy(void *_h) +{ + reghash_t *h; + khint_t k; + + if (!_h) + return; + + h = (reghash_t*)_h; + for (k = 0; k < kh_end(h); ++k) { + if (kh_exist(h, k)) { + free(kh_val(h, k).a); + free(kh_val(h, k).idx); + free((char*)kh_key(h, k)); + } + } + kh_destroy(reg, h); +} + +static void *bed_insert(void *reg_hash, char *reg, unsigned int beg, unsigned int end) { + + reghash_t *h; + khint_t k; + bed_reglist_t *p; + + if (!reg_hash) + return NULL; + + h = (reghash_t *)reg_hash; + + // Put reg in the hash table if not already there + k = kh_get(reg, h, reg); //looks strange, but only the second reg is the actual region name. + if (k == kh_end(h)) { // absent from the hash table + int ret; + char *s = strdup(reg); + if (NULL == s) goto fail; + k = kh_put(reg, h, s, &ret); + if (-1 == ret) { + free(s); + goto fail; + } + memset(&kh_val(h, k), 0, sizeof(bed_reglist_t)); + } + p = &kh_val(h, k); + + // Add beg and end to the list + if (p->n == p->m) { + p->m = p->m ? p->m<<1 : 4; + p->a = realloc(p->a, p->m * sizeof(uint64_t)); + if (NULL == p->a) goto fail; + } + p->a[p->n++] = (uint64_t)beg<<32 | end; + +fail: + return h; +} + +/* @brief Filter a region hash table (coming from the BED file) by another + * region hash table (coming from CLI), so that only intervals contained in + * both hash tables are kept. + * @param reg_hash the target region hash table + * @param tmp_hash the filter region hash table + * @return pointer to the filtered hash table + */ + +static void *bed_filter(void *reg_hash, void *tmp_hash) { + + reghash_t *h; + reghash_t *t; + bed_reglist_t *p, *q; + khint_t l, k; + uint64_t *new_a; + int i, j, new_n, min_off; + const char *reg; + uint32_t beg, end; + + h = (reghash_t *)reg_hash; + t = (reghash_t *)tmp_hash; + if (!h) + return NULL; + if (!t) + return h; + + for (l = kh_begin(t); l < kh_end(t); l++) { + if (!kh_exist(t,l) || !(q = &kh_val(t,l)) || !(q->n)) + continue; + + reg = kh_key(t,l); + k = kh_get(reg, h, reg); //looks strange, but only the second reg is a proper argument. + if (k == kh_end(h) || !(p = &kh_val(h, k)) || !(p->n)) + continue; + + new_a = (uint64_t *)calloc(q->n + p->n, sizeof(uint64_t)); + if (!new_a) + return NULL; + new_n = 0; + + for (i = 0; i < q->n; i++) { + beg = (uint32_t)(q->a[i]>>32); + end = (uint32_t)(q->a[i]); + + min_off = bed_minoff(p, beg, end); + for (j = min_off; j < p->n; ++j) { + if ((uint32_t)(p->a[j]>>32) >= end) break; // out of range; no need to proceed + if ((uint32_t)(p->a[j]) > beg && (uint32_t)(p->a[j]>>32) < end) { + new_a[new_n++] = ((uint64_t)MAX((uint32_t)(p->a[j]>>32), beg) << 32) | MIN((uint32_t)p->a[j], end); + } + } + } + + if (new_n > 0) { + free(p->a); + p->a = new_a; + p->n = new_n; + p->m = new_n; + p->filter = FILTERED; + } else { + free(new_a); + p->filter = ALL; + } + } + + return h; +} + +void *bed_hash_regions(void *reg_hash, char **regs, int first, int last, int *op) { + + reghash_t *h = (reghash_t *)reg_hash; + reghash_t *t = NULL; + + int i; + char reg[1024]; + const char *q; + int beg, end; + + if (h) { + t = kh_init(reg); + if (!t) { + fprintf(samtools_stderr, "Error when creating the temporary region hash table!\n"); + return NULL; + } + } else { + h = kh_init(reg); + if (!h) { + fprintf(samtools_stderr, "Error when creating the region hash table!\n"); + return NULL; + } + *op = 1; + } + + for (i=first; i 1024) { + fprintf(samtools_stderr, "Region name '%s' is too long (bigger than %d).\n", regs[i], 1024); + continue; + } + strncpy(reg, regs[i], q - regs[i]); + reg[q - regs[i]] = 0; + } else { + // not parsable as a region, but possibly a sequence named "foo:a" + if (strlen(regs[i]) + 1 > 1024) { + fprintf(samtools_stderr, "Region name '%s' is too long (bigger than %d).\n", regs[i], 1024); + continue; + } + strcpy(reg, regs[i]); + beg = 0; end = INT_MAX; + } + + //if op==1 insert reg to the bed hash table + if (*op && !(bed_insert(h, reg, beg, end))) { + fprintf(samtools_stderr, "Error when inserting region='%s' in the bed hash table at address=%p!\n", regs[i], h); + } + //if op==0, first insert the regions in the temporary hash table, + //then filter the bed hash table using it + if (!(*op) && !(bed_insert(t, reg, beg, end))) { + fprintf(samtools_stderr, "Error when inserting region='%s' in the temporary hash table at address=%p!\n", regs[i], t); + } + } + + if (!(*op)) { + bed_index(t); + bed_unify(t); + h = bed_filter(h, t); + bed_destroy(t); + } + + if (h) { + bed_index(h); + bed_unify(h); + } + + return h; +} + +const char* bed_get(void *reg_hash, int i, int filter) { + + reghash_t *h; + bed_reglist_t *p; + + if (!reg_hash) + return NULL; + + h = (reghash_t *)reg_hash; + if (!kh_exist(h,i) || !(p = &kh_val(h,i)) || (p->filter < filter)) + return NULL; + + return kh_key(h, i); +} + +hts_reglist_t *bed_reglist(void *reg_hash, int filter, int *n_reg) { + + reghash_t *h; + bed_reglist_t *p; + khint_t i; + hts_reglist_t *reglist = NULL; + int count = 0; + int j; + + if (!reg_hash) + return NULL; + + h = (reghash_t *)reg_hash; + + for (i = kh_begin(h); i < kh_end(h); i++) { + if (!kh_exist(h,i) || !(p = &kh_val(h,i)) || (p->filter < filter)) + continue; + count++; + } + if (!count) + return NULL; + + reglist = (hts_reglist_t *)calloc(count, sizeof(hts_reglist_t)); + if (!reglist) + return NULL; + + *n_reg = count; + count = 0; + + for (i = kh_begin(h); i < kh_end(h) && count < *n_reg; i++) { + if (!kh_exist(h,i) || !(p = &kh_val(h,i)) || (p->filter < filter)) + continue; + + reglist[count].reg = kh_key(h,i); + reglist[count].intervals = (hts_pair32_t *)calloc(p->n, sizeof(hts_pair32_t)); + if(!(reglist[count].intervals)) { + hts_reglist_free(reglist, count); + return NULL; + } + reglist[count].count = p->n; + reglist[count].max_end = 0; + + for (j = 0; j < p->n; j++) { + reglist[count].intervals[j].beg = (uint32_t)(p->a[j]>>32); + reglist[count].intervals[j].end = (uint32_t)(p->a[j]); + + if (reglist[count].intervals[j].end > reglist[count].max_end) + reglist[count].max_end = reglist[count].intervals[j].end; + } + count++; + } + + return reglist; +} diff --git a/samtools/bedidx.h b/samtools/bedidx.h new file mode 100644 index 0000000..a33a65f --- /dev/null +++ b/samtools/bedidx.h @@ -0,0 +1,20 @@ +#ifndef BEDIDX_H +#define BEDIDX_H + +#include "htslib/hts.h" + +#define LIDX_SHIFT 13 +#define ALL 0 +#define FILTERED 1 + +#define MIN(A,B) ( ( (A) < (B) ) ? (A) : (B) ) +#define MAX(A,B) ( ( (A) > (B) ) ? (A) : (B) ) + +void *bed_read(const char *fn); +void bed_destroy(void *_h); +int bed_overlap(const void *_h, const char *chr, int beg, int end); +void *bed_hash_regions(void *reg_hash, char **regs, int first, int last, int *op); +const char* bed_get(void *reg_hash, int index, int filter); +hts_reglist_t *bed_reglist(void *reg_hash, int filter, int *count_regs); + +#endif diff --git a/samtools/cut_target.c b/samtools/cut_target.c new file mode 100644 index 0000000..6348a0a --- /dev/null +++ b/samtools/cut_target.c @@ -0,0 +1,249 @@ +/* cut_target.c -- targetcut subcommand. + + Copyright (C) 2011 Broad Institute. + Copyright (C) 2012-2013, 2015, 2016 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include "htslib/hts.h" +#include "htslib/sam.h" +#include "htslib/faidx.h" +#include "samtools.h" +#include "sam_opts.h" + +#define ERR_DEP 0.83 + +typedef struct { + int e[2][3], p[2][2]; +} score_param_t; + +/* Note that although the two matrics have 10 parameters in total, only 4 + * (probably 3) are free. Changing the scoring matrices in a sort of symmetric + * way will not change the result. */ +static score_param_t g_param = { {{0,0,0},{-4,1,6}}, {{0,-14000}, {0,0}} }; + +typedef struct { + int min_baseQ, tid, max_bases; + uint16_t *bases; + samFile *fp; + bam_hdr_t *h; + char *ref; + int len; + faidx_t *fai; + errmod_t *em; +} ct_t; + +static uint16_t gencns(ct_t *g, int n, const bam_pileup1_t *plp) +{ + int i, j, ret, tmp, k, sum[4], qual; + float q[16]; + if (n > g->max_bases) { // enlarge g->bases + g->max_bases = n; + kroundup32(g->max_bases); + g->bases = realloc(g->bases, g->max_bases * 2); + } + for (i = k = 0; i < n; ++i) { + const bam_pileup1_t *p = plp + i; + uint8_t *seq; + int q, baseQ, b; + if (p->is_refskip || p->is_del) continue; + baseQ = bam_get_qual(p->b)[p->qpos]; + if (baseQ < g->min_baseQ) continue; + seq = bam_get_seq(p->b); + b = seq_nt16_int[bam_seqi(seq, p->qpos)]; + if (b > 3) continue; + q = baseQ < p->b->core.qual? baseQ : p->b->core.qual; + if (q < 4) q = 4; + if (q > 63) q = 63; + g->bases[k++] = q<<5 | bam_is_rev(p->b)<<4 | b; + } + if (k == 0) return 0; + errmod_cal(g->em, k, 4, g->bases, q); + for (i = 0; i < 4; ++i) sum[i] = (int)(q[i<<2|i] + .499) << 2 | i; + for (i = 1; i < 4; ++i) // insertion sort + for (j = i; j > 0 && sum[j] < sum[j-1]; --j) + tmp = sum[j], sum[j] = sum[j-1], sum[j-1] = tmp; + qual = (sum[1]>>2) - (sum[0]>>2); + k = k < 256? k : 255; + ret = (qual < 63? qual : 63) << 2 | (sum[0]&3); + return ret<<8|k; +} + +static void process_cns(bam_hdr_t *h, int tid, int l, uint16_t *cns) +{ + int i, f[2][2], *prev, *curr, *swap_tmp, s; + uint8_t *b; // backtrack array + b = calloc(l, 1); + f[0][0] = f[0][1] = 0; + prev = f[0]; curr = f[1]; + // fill the backtrack matrix + for (i = 0; i < l; ++i) { + int c = (cns[i] == 0)? 0 : (cns[i]>>8 == 0)? 1 : 2; + int tmp0, tmp1; + // compute f[0] + tmp0 = prev[0] + g_param.e[0][c] + g_param.p[0][0]; // (s[i+1],s[i])=(0,0) + tmp1 = prev[1] + g_param.e[0][c] + g_param.p[1][0]; // (0,1) + if (tmp0 > tmp1) curr[0] = tmp0, b[i] = 0; + else curr[0] = tmp1, b[i] = 1; + // compute f[1] + tmp0 = prev[0] + g_param.e[1][c] + g_param.p[0][1]; // (s[i+1],s[i])=(1,0) + tmp1 = prev[1] + g_param.e[1][c] + g_param.p[1][1]; // (1,1) + if (tmp0 > tmp1) curr[1] = tmp0, b[i] |= 0<<1; + else curr[1] = tmp1, b[i] |= 1<<1; + // swap + swap_tmp = prev; prev = curr; curr = swap_tmp; + } + // backtrack + s = prev[0] > prev[1]? 0 : 1; + for (i = l - 1; i > 0; --i) { + b[i] |= s<<2; + s = b[i]>>s&1; + } + // print + for (i = 0, s = -1; i < INT_MAX && i <= l; ++i) { + if (i == l || ((b[i]>>2&3) == 0 && s >= 0)) { + if (s >= 0) { + int j; + printf("%s:%d-%d\t0\t%s\t%d\t60\t%dM\t*\t0\t0\t", h->target_name[tid], s+1, i, h->target_name[tid], s+1, i-s); + for (j = s; j < i; ++j) { + int c = cns[j]>>8; + if (c == 0) putchar('N'); + else putchar("ACGT"[c&3]); + } + putchar('\t'); + for (j = s; j < i; ++j) + putchar(33 + (cns[j]>>8>>2)); + putchar('\n'); + } + //if (s >= 0) printf("%s\t%d\t%d\t%d\n", h->target_name[tid], s, i, i - s); + s = -1; + } else if ((b[i]>>2&3) && s < 0) s = i; + } + free(b); +} + +static int read_aln(void *data, bam1_t *b) +{ + ct_t *g = (ct_t*)data; + int ret; + while (1) + { + ret = sam_read1(g->fp, g->h, b); + if ( ret<0 ) break; + if ( b->core.flag & (BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP) ) continue; + if ( g->fai && b->core.tid >= 0 ) { + if (b->core.tid != g->tid) { // then load the sequence + free(g->ref); + g->ref = fai_fetch(g->fai, g->h->target_name[b->core.tid], &g->len); + g->tid = b->core.tid; + } + sam_prob_realn(b, g->ref, g->len, 1<<1|1); + } + break; + } + return ret; +} + +int main_cut_target(int argc, char *argv[]) +{ + int c, tid, pos, n, lasttid = -1, l, max_l, usage = 0; + const bam_pileup1_t *p; + bam_plp_t plp; + uint16_t *cns; + ct_t g; + + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, '-', '-', 'f', '-'), + { NULL, 0, NULL, 0 } + }; + + memset(&g, 0, sizeof(ct_t)); + g.min_baseQ = 13; g.tid = -1; + while ((c = getopt_long(argc, argv, "f:Q:i:o:0:1:2:", lopts, NULL)) >= 0) { + switch (c) { + case 'Q': g.min_baseQ = atoi(optarg); break; // quality cutoff + case 'i': g_param.p[0][1] = -atoi(optarg); break; // 0->1 transition (in) PENALTY + case '0': g_param.e[1][0] = atoi(optarg); break; // emission SCORE + case '1': g_param.e[1][1] = atoi(optarg); break; + case '2': g_param.e[1][2] = atoi(optarg); break; + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + /* else fall-through */ + case '?': usage=1; break; + } + } + if (ga.reference) { + g.fai = fai_load(ga.reference); + if (g.fai == 0) fprintf(stderr, "[%s] fail to load the fasta index.\n", __func__); + } + if (usage || argc == optind) { + fprintf(stderr, "Usage: samtools targetcut [-Q minQ] [-i inPen] [-0 em0] [-1 em1] [-2 em2] \n"); + sam_global_opt_help(stderr, "-.--f-"); + return 1; + } + l = max_l = 0; cns = 0; + g.fp = sam_open_format(argv[optind], "r", &ga.in); + if (g.fp == NULL) { + print_error_errno("targetcut", "can't open \"%s\"", argv[optind]); + return 1; + } + + g.h = sam_hdr_read(g.fp); + if (g.h == NULL) { + print_error("targetcut", "couldn't read header for \"%s\"", argv[optind]); + sam_close(g.fp); + return 1; + } + g.em = errmod_init(1. - ERR_DEP); + plp = bam_plp_init(read_aln, &g); + while ((p = bam_plp_auto(plp, &tid, &pos, &n)) != 0) { + if (tid < 0) break; + if (tid != lasttid) { // change of chromosome + if (cns) process_cns(g.h, lasttid, l, cns); + if (max_l < g.h->target_len[tid]) { + max_l = g.h->target_len[tid]; + kroundup32(max_l); + cns = realloc(cns, max_l * 2); + } + l = g.h->target_len[tid]; + memset(cns, 0, max_l * 2); + lasttid = tid; + } + cns[pos] = gencns(&g, n, p); + } + process_cns(g.h, lasttid, l, cns); + free(cns); + bam_hdr_destroy(g.h); + bam_plp_destroy(plp); + sam_close(g.fp); + if (g.fai) { + fai_destroy(g.fai); free(g.ref); + } + errmod_destroy(g.em); + free(g.bases); + sam_global_args_free(&ga); + return 0; +} diff --git a/samtools/cut_target.c.pysam.c b/samtools/cut_target.c.pysam.c new file mode 100644 index 0000000..a156773 --- /dev/null +++ b/samtools/cut_target.c.pysam.c @@ -0,0 +1,251 @@ +#include "samtools.pysam.h" + +/* cut_target.c -- targetcut subcommand. + + Copyright (C) 2011 Broad Institute. + Copyright (C) 2012-2013, 2015, 2016 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include "htslib/hts.h" +#include "htslib/sam.h" +#include "htslib/faidx.h" +#include "samtools.h" +#include "sam_opts.h" + +#define ERR_DEP 0.83 + +typedef struct { + int e[2][3], p[2][2]; +} score_param_t; + +/* Note that although the two matrics have 10 parameters in total, only 4 + * (probably 3) are free. Changing the scoring matrices in a sort of symmetric + * way will not change the result. */ +static score_param_t g_param = { {{0,0,0},{-4,1,6}}, {{0,-14000}, {0,0}} }; + +typedef struct { + int min_baseQ, tid, max_bases; + uint16_t *bases; + samFile *fp; + bam_hdr_t *h; + char *ref; + int len; + faidx_t *fai; + errmod_t *em; +} ct_t; + +static uint16_t gencns(ct_t *g, int n, const bam_pileup1_t *plp) +{ + int i, j, ret, tmp, k, sum[4], qual; + float q[16]; + if (n > g->max_bases) { // enlarge g->bases + g->max_bases = n; + kroundup32(g->max_bases); + g->bases = realloc(g->bases, g->max_bases * 2); + } + for (i = k = 0; i < n; ++i) { + const bam_pileup1_t *p = plp + i; + uint8_t *seq; + int q, baseQ, b; + if (p->is_refskip || p->is_del) continue; + baseQ = bam_get_qual(p->b)[p->qpos]; + if (baseQ < g->min_baseQ) continue; + seq = bam_get_seq(p->b); + b = seq_nt16_int[bam_seqi(seq, p->qpos)]; + if (b > 3) continue; + q = baseQ < p->b->core.qual? baseQ : p->b->core.qual; + if (q < 4) q = 4; + if (q > 63) q = 63; + g->bases[k++] = q<<5 | bam_is_rev(p->b)<<4 | b; + } + if (k == 0) return 0; + errmod_cal(g->em, k, 4, g->bases, q); + for (i = 0; i < 4; ++i) sum[i] = (int)(q[i<<2|i] + .499) << 2 | i; + for (i = 1; i < 4; ++i) // insertion sort + for (j = i; j > 0 && sum[j] < sum[j-1]; --j) + tmp = sum[j], sum[j] = sum[j-1], sum[j-1] = tmp; + qual = (sum[1]>>2) - (sum[0]>>2); + k = k < 256? k : 255; + ret = (qual < 63? qual : 63) << 2 | (sum[0]&3); + return ret<<8|k; +} + +static void process_cns(bam_hdr_t *h, int tid, int l, uint16_t *cns) +{ + int i, f[2][2], *prev, *curr, *swap_tmp, s; + uint8_t *b; // backtrack array + b = calloc(l, 1); + f[0][0] = f[0][1] = 0; + prev = f[0]; curr = f[1]; + // fill the backtrack matrix + for (i = 0; i < l; ++i) { + int c = (cns[i] == 0)? 0 : (cns[i]>>8 == 0)? 1 : 2; + int tmp0, tmp1; + // compute f[0] + tmp0 = prev[0] + g_param.e[0][c] + g_param.p[0][0]; // (s[i+1],s[i])=(0,0) + tmp1 = prev[1] + g_param.e[0][c] + g_param.p[1][0]; // (0,1) + if (tmp0 > tmp1) curr[0] = tmp0, b[i] = 0; + else curr[0] = tmp1, b[i] = 1; + // compute f[1] + tmp0 = prev[0] + g_param.e[1][c] + g_param.p[0][1]; // (s[i+1],s[i])=(1,0) + tmp1 = prev[1] + g_param.e[1][c] + g_param.p[1][1]; // (1,1) + if (tmp0 > tmp1) curr[1] = tmp0, b[i] |= 0<<1; + else curr[1] = tmp1, b[i] |= 1<<1; + // swap + swap_tmp = prev; prev = curr; curr = swap_tmp; + } + // backtrack + s = prev[0] > prev[1]? 0 : 1; + for (i = l - 1; i > 0; --i) { + b[i] |= s<<2; + s = b[i]>>s&1; + } + // print + for (i = 0, s = -1; i < INT_MAX && i <= l; ++i) { + if (i == l || ((b[i]>>2&3) == 0 && s >= 0)) { + if (s >= 0) { + int j; + fprintf(samtools_stdout, "%s:%d-%d\t0\t%s\t%d\t60\t%dM\t*\t0\t0\t", h->target_name[tid], s+1, i, h->target_name[tid], s+1, i-s); + for (j = s; j < i; ++j) { + int c = cns[j]>>8; + if (c == 0) fputc('N', samtools_stdout); + else fputc("ACGT"[c&3], samtools_stdout); + } + fputc('\t', samtools_stdout); + for (j = s; j < i; ++j) + fputc(33 + (cns[j]>>8>>2), samtools_stdout); + fputc('\n', samtools_stdout); + } + //if (s >= 0) fprintf(samtools_stdout, "%s\t%d\t%d\t%d\n", h->target_name[tid], s, i, i - s); + s = -1; + } else if ((b[i]>>2&3) && s < 0) s = i; + } + free(b); +} + +static int read_aln(void *data, bam1_t *b) +{ + ct_t *g = (ct_t*)data; + int ret; + while (1) + { + ret = sam_read1(g->fp, g->h, b); + if ( ret<0 ) break; + if ( b->core.flag & (BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP) ) continue; + if ( g->fai && b->core.tid >= 0 ) { + if (b->core.tid != g->tid) { // then load the sequence + free(g->ref); + g->ref = fai_fetch(g->fai, g->h->target_name[b->core.tid], &g->len); + g->tid = b->core.tid; + } + sam_prob_realn(b, g->ref, g->len, 1<<1|1); + } + break; + } + return ret; +} + +int main_cut_target(int argc, char *argv[]) +{ + int c, tid, pos, n, lasttid = -1, l, max_l, usage = 0; + const bam_pileup1_t *p; + bam_plp_t plp; + uint16_t *cns; + ct_t g; + + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, '-', '-', 'f', '-'), + { NULL, 0, NULL, 0 } + }; + + memset(&g, 0, sizeof(ct_t)); + g.min_baseQ = 13; g.tid = -1; + while ((c = getopt_long(argc, argv, "f:Q:i:o:0:1:2:", lopts, NULL)) >= 0) { + switch (c) { + case 'Q': g.min_baseQ = atoi(optarg); break; // quality cutoff + case 'i': g_param.p[0][1] = -atoi(optarg); break; // 0->1 transition (in) PENALTY + case '0': g_param.e[1][0] = atoi(optarg); break; // emission SCORE + case '1': g_param.e[1][1] = atoi(optarg); break; + case '2': g_param.e[1][2] = atoi(optarg); break; + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + /* else fall-through */ + case '?': usage=1; break; + } + } + if (ga.reference) { + g.fai = fai_load(ga.reference); + if (g.fai == 0) fprintf(samtools_stderr, "[%s] fail to load the fasta index.\n", __func__); + } + if (usage || argc == optind) { + fprintf(samtools_stderr, "Usage: samtools targetcut [-Q minQ] [-i inPen] [-0 em0] [-1 em1] [-2 em2] \n"); + sam_global_opt_help(samtools_stderr, "-.--f-"); + return 1; + } + l = max_l = 0; cns = 0; + g.fp = sam_open_format(argv[optind], "r", &ga.in); + if (g.fp == NULL) { + print_error_errno("targetcut", "can't open \"%s\"", argv[optind]); + return 1; + } + + g.h = sam_hdr_read(g.fp); + if (g.h == NULL) { + print_error("targetcut", "couldn't read header for \"%s\"", argv[optind]); + sam_close(g.fp); + return 1; + } + g.em = errmod_init(1. - ERR_DEP); + plp = bam_plp_init(read_aln, &g); + while ((p = bam_plp_auto(plp, &tid, &pos, &n)) != 0) { + if (tid < 0) break; + if (tid != lasttid) { // change of chromosome + if (cns) process_cns(g.h, lasttid, l, cns); + if (max_l < g.h->target_len[tid]) { + max_l = g.h->target_len[tid]; + kroundup32(max_l); + cns = realloc(cns, max_l * 2); + } + l = g.h->target_len[tid]; + memset(cns, 0, max_l * 2); + lasttid = tid; + } + cns[pos] = gencns(&g, n, p); + } + process_cns(g.h, lasttid, l, cns); + free(cns); + bam_hdr_destroy(g.h); + bam_plp_destroy(plp); + sam_close(g.fp); + if (g.fai) { + fai_destroy(g.fai); free(g.ref); + } + errmod_destroy(g.em); + free(g.bases); + sam_global_args_free(&ga); + return 0; +} diff --git a/samtools/dict.c b/samtools/dict.c new file mode 100644 index 0000000..7321a77 --- /dev/null +++ b/samtools/dict.c @@ -0,0 +1,158 @@ +/* dict.c -- create a sequence dictionary file. + + Copyright (C) 2015 Genome Research Ltd. + + Author: Shane McCarthy + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include "htslib/kseq.h" +#include "htslib/hts.h" + +KSEQ_INIT(gzFile, gzread) + +typedef struct _args_t +{ + char *output_fname, *fname; + char *assembly, *species, *uri; + int header; +} +args_t; + +static void write_dict(const char *fn, args_t *args) +{ + hts_md5_context *md5; + int l, i, k; + gzFile fp; + kseq_t *seq; + unsigned char digest[16]; + char hex[33]; + + fp = strcmp(fn, "-") ? gzopen(fn, "r") : gzdopen(fileno(stdin), "r"); + if (fp == 0) { + fprintf(stderr, "dict: %s: No such file or directory\n", fn); + exit(1); + } + FILE *out = stdout; + if (args->output_fname) { + out = fopen(args->output_fname, "w"); + if (out == NULL) { + fprintf(stderr, "dict: %s: Cannot open file for writing\n", args->output_fname); + exit(1); + } + } + + if (!(md5 = hts_md5_init())) + exit(1); + + seq = kseq_init(fp); + if (args->header) fprintf(out, "@HD\tVN:1.0\tSO:unsorted\n"); + while ((l = kseq_read(seq)) >= 0) { + for (i = k = 0; i < seq->seq.l; ++i) { + if (seq->seq.s[i] >= '!' && seq->seq.s[i] <= '~') + seq->seq.s[k++] = toupper(seq->seq.s[i]); + } + hts_md5_reset(md5); + hts_md5_update(md5, (unsigned char*)seq->seq.s, k); + hts_md5_final(digest, md5); + hts_md5_hex(hex, digest); + fprintf(out, "@SQ\tSN:%s\tLN:%d\tM5:%s", seq->name.s, k, hex); + if (args->uri) + fprintf(out, "\tUR:%s", args->uri); + else if (strcmp(fn, "-") != 0) { +#ifdef _WIN32 + char *real_path = _fullpath(NULL, fn, PATH_MAX); +#else + char *real_path = realpath(fn, NULL); +#endif + fprintf(out, "\tUR:file://%s", real_path); + free(real_path); + } + if (args->assembly) fprintf(out, "\tAS:%s", args->assembly); + if (args->species) fprintf(out, "\tSP:%s", args->species); + fprintf(out, "\n"); + } + kseq_destroy(seq); + hts_md5_destroy(md5); + + if (args->output_fname) fclose(out); +} + +static int dict_usage(void) +{ + fprintf(stderr, "\n"); + fprintf(stderr, "About: Create a sequence dictionary file from a fasta file\n"); + fprintf(stderr, "Usage: samtools dict [options] \n\n"); + fprintf(stderr, "Options: -a, --assembly STR assembly\n"); + fprintf(stderr, " -H, --no-header do not print @HD line\n"); + fprintf(stderr, " -o, --output STR file to write out dict file [stdout]\n"); + fprintf(stderr, " -s, --species STR species\n"); + fprintf(stderr, " -u, --uri STR URI [file:///abs/path/to/file.fa]\n"); + fprintf(stderr, "\n"); + return 1; +} + +int dict_main(int argc, char *argv[]) +{ + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->header = 1; + + static const struct option loptions[] = + { + {"help", no_argument, NULL, 'h'}, + {"no-header", no_argument, NULL, 'H'}, + {"assembly", required_argument, NULL, 'a'}, + {"species", required_argument, NULL, 's'}, + {"uri", required_argument, NULL, 'u'}, + {"output", required_argument, NULL, 'o'}, + {NULL, 0, NULL, 0} + }; + int c; + while ( (c=getopt_long(argc,argv,"?hHa:s:u:o:",loptions,NULL))>0 ) + { + switch (c) + { + case 'a': args->assembly = optarg; break; + case 's': args->species = optarg; break; + case 'u': args->uri = optarg; break; + case 'o': args->output_fname = optarg; break; + case 'H': args->header = 0; break; + case 'h': return dict_usage(); + default: return dict_usage(); + } + } + + char *fname = NULL; + if ( optind>=argc ) + { + if ( !isatty(STDIN_FILENO) ) fname = "-"; // reading from stdin + else return dict_usage(); + } + else fname = argv[optind]; + + write_dict(fname, args); + free(args); + return 0; +} diff --git a/samtools/dict.c.pysam.c b/samtools/dict.c.pysam.c new file mode 100644 index 0000000..f42e416 --- /dev/null +++ b/samtools/dict.c.pysam.c @@ -0,0 +1,160 @@ +#include "samtools.pysam.h" + +/* dict.c -- create a sequence dictionary file. + + Copyright (C) 2015 Genome Research Ltd. + + Author: Shane McCarthy + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include "htslib/kseq.h" +#include "htslib/hts.h" + +KSEQ_INIT(gzFile, gzread) + +typedef struct _args_t +{ + char *output_fname, *fname; + char *assembly, *species, *uri; + int header; +} +args_t; + +static void write_dict(const char *fn, args_t *args) +{ + hts_md5_context *md5; + int l, i, k; + gzFile fp; + kseq_t *seq; + unsigned char digest[16]; + char hex[33]; + + fp = strcmp(fn, "-") ? gzopen(fn, "r") : gzdopen(fileno(stdin), "r"); + if (fp == 0) { + fprintf(samtools_stderr, "dict: %s: No such file or directory\n", fn); + exit(1); + } + FILE *out = samtools_stdout; + if (args->output_fname) { + out = fopen(args->output_fname, "w"); + if (out == NULL) { + fprintf(samtools_stderr, "dict: %s: Cannot open file for writing\n", args->output_fname); + exit(1); + } + } + + if (!(md5 = hts_md5_init())) + exit(1); + + seq = kseq_init(fp); + if (args->header) fprintf(out, "@HD\tVN:1.0\tSO:unsorted\n"); + while ((l = kseq_read(seq)) >= 0) { + for (i = k = 0; i < seq->seq.l; ++i) { + if (seq->seq.s[i] >= '!' && seq->seq.s[i] <= '~') + seq->seq.s[k++] = toupper(seq->seq.s[i]); + } + hts_md5_reset(md5); + hts_md5_update(md5, (unsigned char*)seq->seq.s, k); + hts_md5_final(digest, md5); + hts_md5_hex(hex, digest); + fprintf(out, "@SQ\tSN:%s\tLN:%d\tM5:%s", seq->name.s, k, hex); + if (args->uri) + fprintf(out, "\tUR:%s", args->uri); + else if (strcmp(fn, "-") != 0) { +#ifdef _WIN32 + char *real_path = _fullpath(NULL, fn, PATH_MAX); +#else + char *real_path = realpath(fn, NULL); +#endif + fprintf(out, "\tUR:file://%s", real_path); + free(real_path); + } + if (args->assembly) fprintf(out, "\tAS:%s", args->assembly); + if (args->species) fprintf(out, "\tSP:%s", args->species); + fprintf(out, "\n"); + } + kseq_destroy(seq); + hts_md5_destroy(md5); + + if (args->output_fname) fclose(out); +} + +static int dict_usage(void) +{ + fprintf(samtools_stderr, "\n"); + fprintf(samtools_stderr, "About: Create a sequence dictionary file from a fasta file\n"); + fprintf(samtools_stderr, "Usage: samtools dict [options] \n\n"); + fprintf(samtools_stderr, "Options: -a, --assembly STR assembly\n"); + fprintf(samtools_stderr, " -H, --no-header do not print @HD line\n"); + fprintf(samtools_stderr, " -o, --output STR file to write out dict file [samtools_stdout]\n"); + fprintf(samtools_stderr, " -s, --species STR species\n"); + fprintf(samtools_stderr, " -u, --uri STR URI [file:///abs/path/to/file.fa]\n"); + fprintf(samtools_stderr, "\n"); + return 1; +} + +int dict_main(int argc, char *argv[]) +{ + args_t *args = (args_t*) calloc(1,sizeof(args_t)); + args->header = 1; + + static const struct option loptions[] = + { + {"help", no_argument, NULL, 'h'}, + {"no-header", no_argument, NULL, 'H'}, + {"assembly", required_argument, NULL, 'a'}, + {"species", required_argument, NULL, 's'}, + {"uri", required_argument, NULL, 'u'}, + {"output", required_argument, NULL, 'o'}, + {NULL, 0, NULL, 0} + }; + int c; + while ( (c=getopt_long(argc,argv,"?hHa:s:u:o:",loptions,NULL))>0 ) + { + switch (c) + { + case 'a': args->assembly = optarg; break; + case 's': args->species = optarg; break; + case 'u': args->uri = optarg; break; + case 'o': args->output_fname = optarg; break; + case 'H': args->header = 0; break; + case 'h': return dict_usage(); + default: return dict_usage(); + } + } + + char *fname = NULL; + if ( optind>=argc ) + { + if ( !isatty(STDIN_FILENO) ) fname = "-"; // reading from stdin + else return dict_usage(); + } + else fname = argv[optind]; + + write_dict(fname, args); + free(args); + return 0; +} diff --git a/samtools/faidx.c b/samtools/faidx.c new file mode 100644 index 0000000..c5c9ed6 --- /dev/null +++ b/samtools/faidx.c @@ -0,0 +1,105 @@ +/* faidx.c -- faidx subcommand. + + Copyright (C) 2008, 2009, 2013, 2016 Genome Research Ltd. + Portions copyright (C) 2011 Broad Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include + +#include +#include "samtools.h" + +static int usage(FILE *fp, int exit_status) +{ + fprintf(fp, "Usage: samtools faidx [ [...]]\n"); + return exit_status; +} + +int faidx_main(int argc, char *argv[]) +{ + int c; + while((c = getopt(argc, argv, "h")) >= 0) + { + switch(c) + { + case 'h': + return usage(stdout, EXIT_SUCCESS); + + default: + return usage(stderr, EXIT_FAILURE); + } + } + if ( argc==optind ) + return usage(stdout, EXIT_SUCCESS); + if ( argc==2 ) + { + if (fai_build(argv[optind]) != 0) { + fprintf(stderr, "Could not build fai index %s.fai\n", argv[optind]); + return EXIT_FAILURE; + } + return 0; + } + + faidx_t *fai = fai_load(argv[optind]); + if ( !fai ) { + fprintf(stderr, "Could not load fai index of %s\n", argv[optind]); + return EXIT_FAILURE; + } + + int exit_status = EXIT_SUCCESS; + + while ( ++optind%s\n", argv[optind]); + int seq_len; + char *seq = fai_fetch(fai, argv[optind], &seq_len); + if ( seq_len < 0 ) { + fprintf(stderr, "Failed to fetch sequence in %s\n", argv[optind]); + exit_status = EXIT_FAILURE; + break; + } + size_t i, seq_sz = seq_len; + for (i=0; i + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include + +#include +#include "samtools.h" + +static int usage(FILE *fp, int exit_status) +{ + fprintf(fp, "Usage: samtools faidx [ [...]]\n"); + return exit_status; +} + +int faidx_main(int argc, char *argv[]) +{ + int c; + while((c = getopt(argc, argv, "h")) >= 0) + { + switch(c) + { + case 'h': + return usage(samtools_stdout, EXIT_SUCCESS); + + default: + return usage(samtools_stderr, EXIT_FAILURE); + } + } + if ( argc==optind ) + return usage(samtools_stdout, EXIT_SUCCESS); + if ( argc==2 ) + { + if (fai_build(argv[optind]) != 0) { + fprintf(samtools_stderr, "Could not build fai index %s.fai\n", argv[optind]); + return EXIT_FAILURE; + } + return 0; + } + + faidx_t *fai = fai_load(argv[optind]); + if ( !fai ) { + fprintf(samtools_stderr, "Could not load fai index of %s\n", argv[optind]); + return EXIT_FAILURE; + } + + int exit_status = EXIT_SUCCESS; + + while ( ++optind%s\n", argv[optind]); + int seq_len; + char *seq = fai_fetch(fai, argv[optind], &seq_len); + if ( seq_len < 0 ) { + fprintf(samtools_stderr, "Failed to fetch sequence in %s\n", argv[optind]); + exit_status = EXIT_FAILURE; + break; + } + size_t i, seq_sz = seq_len; + for (i=0; i 1 > 2) + */ +#ifndef LZ4_FORCE_MEMORY_ACCESS /* can be defined externally */ +# if defined(__GNUC__) && ( defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) ) +# define LZ4_FORCE_MEMORY_ACCESS 2 +# elif defined(__INTEL_COMPILER) || defined(__GNUC__) +# define LZ4_FORCE_MEMORY_ACCESS 1 +# endif +#endif + +/* + * LZ4_FORCE_SW_BITCOUNT + * Define this parameter if your target system or compiler does not support hardware bit count + */ +#if defined(_MSC_VER) && defined(_WIN32_WCE) /* Visual Studio for Windows CE does not support Hardware bit count */ +# define LZ4_FORCE_SW_BITCOUNT +#endif + + +/*-************************************ +* Dependency +**************************************/ +#include "lz4.h" +/* see also "memory routines" below */ + + +/*-************************************ +* Compiler Options +**************************************/ +#ifdef _MSC_VER /* Visual Studio */ +# include +# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */ +# pragma warning(disable : 4293) /* disable: C4293: too large shift (32-bits) */ +#endif /* _MSC_VER */ + +#ifndef FORCE_INLINE +# ifdef _MSC_VER /* Visual Studio */ +# define FORCE_INLINE static __forceinline +# else +# if defined (__cplusplus) || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */ +# ifdef __GNUC__ +# define FORCE_INLINE static inline __attribute__((always_inline)) +# else +# define FORCE_INLINE static inline +# endif +# else +# define FORCE_INLINE static +# endif /* __STDC_VERSION__ */ +# endif /* _MSC_VER */ +#endif /* FORCE_INLINE */ + +#if (defined(__GNUC__) && (__GNUC__ >= 3)) || (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 800)) || defined(__clang__) +# define expect(expr,value) (__builtin_expect ((expr),(value)) ) +#else +# define expect(expr,value) (expr) +#endif + +#define likely(expr) expect((expr) != 0, 1) +#define unlikely(expr) expect((expr) != 0, 0) + + +/*-************************************ +* Memory routines +**************************************/ +#include /* malloc, calloc, free */ +#define ALLOCATOR(n,s) calloc(n,s) +#define FREEMEM free +#include /* memset, memcpy */ +#define MEM_INIT memset + + +/*-************************************ +* Basic Types +**************************************/ +#if defined(__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) +# include + typedef uint8_t BYTE; + typedef uint16_t U16; + typedef uint32_t U32; + typedef int32_t S32; + typedef uint64_t U64; + typedef uintptr_t uptrval; +#else + typedef unsigned char BYTE; + typedef unsigned short U16; + typedef unsigned int U32; + typedef signed int S32; + typedef unsigned long long U64; + typedef size_t uptrval; /* generally true, except OpenVMS-64 */ +#endif + +#if defined(__x86_64__) + typedef U64 reg_t; /* 64-bits in x32 mode */ +#else + typedef size_t reg_t; /* 32-bits in x32 mode */ +#endif + +/*-************************************ +* Reading and writing into memory +**************************************/ +static unsigned LZ4_isLittleEndian(void) +{ + const union { U32 u; BYTE c[4]; } one = { 1 }; /* don't use static : performance detrimental */ + return one.c[0]; +} + + +#if defined(LZ4_FORCE_MEMORY_ACCESS) && (LZ4_FORCE_MEMORY_ACCESS==2) +/* lie to the compiler about data alignment; use with caution */ + +static U16 LZ4_read16(const void* memPtr) { return *(const U16*) memPtr; } +static U32 LZ4_read32(const void* memPtr) { return *(const U32*) memPtr; } +static reg_t LZ4_read_ARCH(const void* memPtr) { return *(const reg_t*) memPtr; } + +static void LZ4_write16(void* memPtr, U16 value) { *(U16*)memPtr = value; } +static void LZ4_write32(void* memPtr, U32 value) { *(U32*)memPtr = value; } + +#elif defined(LZ4_FORCE_MEMORY_ACCESS) && (LZ4_FORCE_MEMORY_ACCESS==1) + +/* __pack instructions are safer, but compiler specific, hence potentially problematic for some compilers */ +/* currently only defined for gcc and icc */ +typedef union { U16 u16; U32 u32; reg_t uArch; } __attribute__((packed)) unalign; + +static U16 LZ4_read16(const void* ptr) { return ((const unalign*)ptr)->u16; } +static U32 LZ4_read32(const void* ptr) { return ((const unalign*)ptr)->u32; } +static reg_t LZ4_read_ARCH(const void* ptr) { return ((const unalign*)ptr)->uArch; } + +static void LZ4_write16(void* memPtr, U16 value) { ((unalign*)memPtr)->u16 = value; } +static void LZ4_write32(void* memPtr, U32 value) { ((unalign*)memPtr)->u32 = value; } + +#else /* safe and portable access through memcpy() */ + +static U16 LZ4_read16(const void* memPtr) +{ + U16 val; memcpy(&val, memPtr, sizeof(val)); return val; +} + +static U32 LZ4_read32(const void* memPtr) +{ + U32 val; memcpy(&val, memPtr, sizeof(val)); return val; +} + +static reg_t LZ4_read_ARCH(const void* memPtr) +{ + reg_t val; memcpy(&val, memPtr, sizeof(val)); return val; +} + +static void LZ4_write16(void* memPtr, U16 value) +{ + memcpy(memPtr, &value, sizeof(value)); +} + +static void LZ4_write32(void* memPtr, U32 value) +{ + memcpy(memPtr, &value, sizeof(value)); +} + +#endif /* LZ4_FORCE_MEMORY_ACCESS */ + + +static U16 LZ4_readLE16(const void* memPtr) +{ + if (LZ4_isLittleEndian()) { + return LZ4_read16(memPtr); + } else { + const BYTE* p = (const BYTE*)memPtr; + return (U16)((U16)p[0] + (p[1]<<8)); + } +} + +static void LZ4_writeLE16(void* memPtr, U16 value) +{ + if (LZ4_isLittleEndian()) { + LZ4_write16(memPtr, value); + } else { + BYTE* p = (BYTE*)memPtr; + p[0] = (BYTE) value; + p[1] = (BYTE)(value>>8); + } +} + +static void LZ4_copy8(void* dst, const void* src) +{ + memcpy(dst,src,8); +} + +/* customized variant of memcpy, which can overwrite up to 8 bytes beyond dstEnd */ +static void LZ4_wildCopy(void* dstPtr, const void* srcPtr, void* dstEnd) +{ + BYTE* d = (BYTE*)dstPtr; + const BYTE* s = (const BYTE*)srcPtr; + BYTE* const e = (BYTE*)dstEnd; + + do { LZ4_copy8(d,s); d+=8; s+=8; } while (d=2) +# include +# define DEBUGLOG(l, ...) { \ + if (l<=LZ4_DEBUG) { \ + fprintf(stderr, __FILE__ ": "); \ + fprintf(stderr, __VA_ARGS__); \ + fprintf(stderr, " \n"); \ + } } +#else +# define DEBUGLOG(l, ...) {} /* disabled */ +#endif + + +/*-************************************ +* Common functions +**************************************/ +static unsigned LZ4_NbCommonBytes (register reg_t val) +{ + if (LZ4_isLittleEndian()) { + if (sizeof(val)==8) { +# if defined(_MSC_VER) && defined(_WIN64) && !defined(LZ4_FORCE_SW_BITCOUNT) + unsigned long r = 0; + _BitScanForward64( &r, (U64)val ); + return (int)(r>>3); +# elif (defined(__clang__) || (defined(__GNUC__) && (__GNUC__>=3))) && !defined(LZ4_FORCE_SW_BITCOUNT) + return (__builtin_ctzll((U64)val) >> 3); +# else + static const int DeBruijnBytePos[64] = { 0, 0, 0, 0, 0, 1, 1, 2, 0, 3, 1, 3, 1, 4, 2, 7, 0, 2, 3, 6, 1, 5, 3, 5, 1, 3, 4, 4, 2, 5, 6, 7, 7, 0, 1, 2, 3, 3, 4, 6, 2, 6, 5, 5, 3, 4, 5, 6, 7, 1, 2, 4, 6, 4, 4, 5, 7, 2, 6, 5, 7, 6, 7, 7 }; + return DeBruijnBytePos[((U64)((val & -(long long)val) * 0x0218A392CDABBD3FULL)) >> 58]; +# endif + } else /* 32 bits */ { +# if defined(_MSC_VER) && !defined(LZ4_FORCE_SW_BITCOUNT) + unsigned long r; + _BitScanForward( &r, (U32)val ); + return (int)(r>>3); +# elif (defined(__clang__) || (defined(__GNUC__) && (__GNUC__>=3))) && !defined(LZ4_FORCE_SW_BITCOUNT) + return (__builtin_ctz((U32)val) >> 3); +# else + static const int DeBruijnBytePos[32] = { 0, 0, 3, 0, 3, 1, 3, 0, 3, 2, 2, 1, 3, 2, 0, 1, 3, 3, 1, 2, 2, 2, 2, 0, 3, 1, 2, 0, 1, 0, 1, 1 }; + return DeBruijnBytePos[((U32)((val & -(S32)val) * 0x077CB531U)) >> 27]; +# endif + } + } else /* Big Endian CPU */ { + if (sizeof(val)==8) { +# if defined(_MSC_VER) && defined(_WIN64) && !defined(LZ4_FORCE_SW_BITCOUNT) + unsigned long r = 0; + _BitScanReverse64( &r, val ); + return (unsigned)(r>>3); +# elif (defined(__clang__) || (defined(__GNUC__) && (__GNUC__>=3))) && !defined(LZ4_FORCE_SW_BITCOUNT) + return (__builtin_clzll((U64)val) >> 3); +# else + unsigned r; + if (!(val>>32)) { r=4; } else { r=0; val>>=32; } + if (!(val>>16)) { r+=2; val>>=8; } else { val>>=24; } + r += (!val); + return r; +# endif + } else /* 32 bits */ { +# if defined(_MSC_VER) && !defined(LZ4_FORCE_SW_BITCOUNT) + unsigned long r = 0; + _BitScanReverse( &r, (unsigned long)val ); + return (unsigned)(r>>3); +# elif (defined(__clang__) || (defined(__GNUC__) && (__GNUC__>=3))) && !defined(LZ4_FORCE_SW_BITCOUNT) + return (__builtin_clz((U32)val) >> 3); +# else + unsigned r; + if (!(val>>16)) { r=2; val>>=8; } else { r=0; val>>=24; } + r += (!val); + return r; +# endif + } + } +} + +#define STEPSIZE sizeof(reg_t) +static unsigned LZ4_count(const BYTE* pIn, const BYTE* pMatch, const BYTE* pInLimit) +{ + const BYTE* const pStart = pIn; + + while (likely(pIn compression run slower on incompressible data */ + + +/*-************************************ +* Local Structures and types +**************************************/ +typedef enum { notLimited = 0, limitedOutput = 1 } limitedOutput_directive; +typedef enum { byPtr, byU32, byU16 } tableType_t; + +typedef enum { noDict = 0, withPrefix64k, usingExtDict } dict_directive; +typedef enum { noDictIssue = 0, dictSmall } dictIssue_directive; + +typedef enum { endOnOutputSize = 0, endOnInputSize = 1 } endCondition_directive; +typedef enum { full = 0, partial = 1 } earlyEnd_directive; + + +/*-************************************ +* Local Utils +**************************************/ +int LZ4_versionNumber (void) { return LZ4_VERSION_NUMBER; } +const char* LZ4_versionString(void) { return LZ4_VERSION_STRING; } +int LZ4_compressBound(int isize) { return LZ4_COMPRESSBOUND(isize); } +int LZ4_sizeofState() { return LZ4_STREAMSIZE; } + + +/*-****************************** +* Compression functions +********************************/ +static U32 LZ4_hash4(U32 sequence, tableType_t const tableType) +{ + if (tableType == byU16) + return ((sequence * 2654435761U) >> ((MINMATCH*8)-(LZ4_HASHLOG+1))); + else + return ((sequence * 2654435761U) >> ((MINMATCH*8)-LZ4_HASHLOG)); +} + +static U32 LZ4_hash5(U64 sequence, tableType_t const tableType) +{ + static const U64 prime5bytes = 889523592379ULL; + static const U64 prime8bytes = 11400714785074694791ULL; + const U32 hashLog = (tableType == byU16) ? LZ4_HASHLOG+1 : LZ4_HASHLOG; + if (LZ4_isLittleEndian()) + return (U32)(((sequence << 24) * prime5bytes) >> (64 - hashLog)); + else + return (U32)(((sequence >> 24) * prime8bytes) >> (64 - hashLog)); +} + +FORCE_INLINE U32 LZ4_hashPosition(const void* const p, tableType_t const tableType) +{ + if ((sizeof(reg_t)==8) && (tableType != byU16)) return LZ4_hash5(LZ4_read_ARCH(p), tableType); + return LZ4_hash4(LZ4_read32(p), tableType); +} + +static void LZ4_putPositionOnHash(const BYTE* p, U32 h, void* tableBase, tableType_t const tableType, const BYTE* srcBase) +{ + switch (tableType) + { + case byPtr: { const BYTE** hashTable = (const BYTE**)tableBase; hashTable[h] = p; return; } + case byU32: { U32* hashTable = (U32*) tableBase; hashTable[h] = (U32)(p-srcBase); return; } + case byU16: { U16* hashTable = (U16*) tableBase; hashTable[h] = (U16)(p-srcBase); return; } + } +} + +FORCE_INLINE void LZ4_putPosition(const BYTE* p, void* tableBase, tableType_t tableType, const BYTE* srcBase) +{ + U32 const h = LZ4_hashPosition(p, tableType); + LZ4_putPositionOnHash(p, h, tableBase, tableType, srcBase); +} + +static const BYTE* LZ4_getPositionOnHash(U32 h, void* tableBase, tableType_t tableType, const BYTE* srcBase) +{ + if (tableType == byPtr) { const BYTE** hashTable = (const BYTE**) tableBase; return hashTable[h]; } + if (tableType == byU32) { const U32* const hashTable = (U32*) tableBase; return hashTable[h] + srcBase; } + { const U16* const hashTable = (U16*) tableBase; return hashTable[h] + srcBase; } /* default, to ensure a return */ +} + +FORCE_INLINE const BYTE* LZ4_getPosition(const BYTE* p, void* tableBase, tableType_t tableType, const BYTE* srcBase) +{ + U32 const h = LZ4_hashPosition(p, tableType); + return LZ4_getPositionOnHash(h, tableBase, tableType, srcBase); +} + + +/** LZ4_compress_generic() : + inlined, to ensure branches are decided at compilation time */ +FORCE_INLINE int LZ4_compress_generic( + LZ4_stream_t_internal* const cctx, + const char* const source, + char* const dest, + const int inputSize, + const int maxOutputSize, + const limitedOutput_directive outputLimited, + const tableType_t tableType, + const dict_directive dict, + const dictIssue_directive dictIssue, + const U32 acceleration) +{ + const BYTE* ip = (const BYTE*) source; + const BYTE* base; + const BYTE* lowLimit; + const BYTE* const lowRefLimit = ip - cctx->dictSize; + const BYTE* const dictionary = cctx->dictionary; + const BYTE* const dictEnd = dictionary + cctx->dictSize; + const ptrdiff_t dictDelta = dictEnd - (const BYTE*)source; + const BYTE* anchor = (const BYTE*) source; + const BYTE* const iend = ip + inputSize; + const BYTE* const mflimit = iend - MFLIMIT; + const BYTE* const matchlimit = iend - LASTLITERALS; + + BYTE* op = (BYTE*) dest; + BYTE* const olimit = op + maxOutputSize; + + U32 forwardH; + + /* Init conditions */ + if ((U32)inputSize > (U32)LZ4_MAX_INPUT_SIZE) return 0; /* Unsupported inputSize, too large (or negative) */ + switch(dict) + { + case noDict: + default: + base = (const BYTE*)source; + lowLimit = (const BYTE*)source; + break; + case withPrefix64k: + base = (const BYTE*)source - cctx->currentOffset; + lowLimit = (const BYTE*)source - cctx->dictSize; + break; + case usingExtDict: + base = (const BYTE*)source - cctx->currentOffset; + lowLimit = (const BYTE*)source; + break; + } + if ((tableType == byU16) && (inputSize>=LZ4_64Klimit)) return 0; /* Size too large (not within 64K limit) */ + if (inputSizehashTable, tableType, base); + ip++; forwardH = LZ4_hashPosition(ip, tableType); + + /* Main Loop */ + for ( ; ; ) { + ptrdiff_t refDelta = 0; + const BYTE* match; + BYTE* token; + + /* Find a match */ + { const BYTE* forwardIp = ip; + unsigned step = 1; + unsigned searchMatchNb = acceleration << LZ4_skipTrigger; + do { + U32 const h = forwardH; + ip = forwardIp; + forwardIp += step; + step = (searchMatchNb++ >> LZ4_skipTrigger); + + if (unlikely(forwardIp > mflimit)) goto _last_literals; + + match = LZ4_getPositionOnHash(h, cctx->hashTable, tableType, base); + if (dict==usingExtDict) { + if (match < (const BYTE*)source) { + refDelta = dictDelta; + lowLimit = dictionary; + } else { + refDelta = 0; + lowLimit = (const BYTE*)source; + } } + forwardH = LZ4_hashPosition(forwardIp, tableType); + LZ4_putPositionOnHash(ip, h, cctx->hashTable, tableType, base); + + } while ( ((dictIssue==dictSmall) ? (match < lowRefLimit) : 0) + || ((tableType==byU16) ? 0 : (match + MAX_DISTANCE < ip)) + || (LZ4_read32(match+refDelta) != LZ4_read32(ip)) ); + } + + /* Catch up */ + while (((ip>anchor) & (match+refDelta > lowLimit)) && (unlikely(ip[-1]==match[refDelta-1]))) { ip--; match--; } + + /* Encode Literals */ + { unsigned const litLength = (unsigned)(ip - anchor); + token = op++; + if ((outputLimited) && /* Check output buffer overflow */ + (unlikely(op + litLength + (2 + 1 + LASTLITERALS) + (litLength/255) > olimit))) + return 0; + if (litLength >= RUN_MASK) { + int len = (int)litLength-RUN_MASK; + *token = (RUN_MASK<= 255 ; len-=255) *op++ = 255; + *op++ = (BYTE)len; + } + else *token = (BYTE)(litLength< matchlimit) limit = matchlimit; + matchCode = LZ4_count(ip+MINMATCH, match+MINMATCH, limit); + ip += MINMATCH + matchCode; + if (ip==limit) { + unsigned const more = LZ4_count(ip, (const BYTE*)source, matchlimit); + matchCode += more; + ip += more; + } + } else { + matchCode = LZ4_count(ip+MINMATCH, match+MINMATCH, matchlimit); + ip += MINMATCH + matchCode; + } + + if ( outputLimited && /* Check output buffer overflow */ + (unlikely(op + (1 + LASTLITERALS) + (matchCode>>8) > olimit)) ) + return 0; + if (matchCode >= ML_MASK) { + *token += ML_MASK; + matchCode -= ML_MASK; + LZ4_write32(op, 0xFFFFFFFF); + while (matchCode >= 4*255) op+=4, LZ4_write32(op, 0xFFFFFFFF), matchCode -= 4*255; + op += matchCode / 255; + *op++ = (BYTE)(matchCode % 255); + } else + *token += (BYTE)(matchCode); + } + + anchor = ip; + + /* Test end of chunk */ + if (ip > mflimit) break; + + /* Fill table */ + LZ4_putPosition(ip-2, cctx->hashTable, tableType, base); + + /* Test next position */ + match = LZ4_getPosition(ip, cctx->hashTable, tableType, base); + if (dict==usingExtDict) { + if (match < (const BYTE*)source) { + refDelta = dictDelta; + lowLimit = dictionary; + } else { + refDelta = 0; + lowLimit = (const BYTE*)source; + } } + LZ4_putPosition(ip, cctx->hashTable, tableType, base); + if ( ((dictIssue==dictSmall) ? (match>=lowRefLimit) : 1) + && (match+MAX_DISTANCE>=ip) + && (LZ4_read32(match+refDelta)==LZ4_read32(ip)) ) + { token=op++; *token=0; goto _next_match; } + + /* Prepare next loop */ + forwardH = LZ4_hashPosition(++ip, tableType); + } + +_last_literals: + /* Encode Last Literals */ + { size_t const lastRun = (size_t)(iend - anchor); + if ( (outputLimited) && /* Check output buffer overflow */ + ((op - (BYTE*)dest) + lastRun + 1 + ((lastRun+255-RUN_MASK)/255) > (U32)maxOutputSize) ) + return 0; + if (lastRun >= RUN_MASK) { + size_t accumulator = lastRun - RUN_MASK; + *op++ = RUN_MASK << ML_BITS; + for(; accumulator >= 255 ; accumulator-=255) *op++ = 255; + *op++ = (BYTE) accumulator; + } else { + *op++ = (BYTE)(lastRun<internal_donotuse; + LZ4_resetStream((LZ4_stream_t*)state); + if (acceleration < 1) acceleration = ACCELERATION_DEFAULT; + + if (maxOutputSize >= LZ4_compressBound(inputSize)) { + if (inputSize < LZ4_64Klimit) + return LZ4_compress_generic(ctx, source, dest, inputSize, 0, notLimited, byU16, noDict, noDictIssue, acceleration); + else + return LZ4_compress_generic(ctx, source, dest, inputSize, 0, notLimited, (sizeof(void*)==8) ? byU32 : byPtr, noDict, noDictIssue, acceleration); + } else { + if (inputSize < LZ4_64Klimit) + return LZ4_compress_generic(ctx, source, dest, inputSize, maxOutputSize, limitedOutput, byU16, noDict, noDictIssue, acceleration); + else + return LZ4_compress_generic(ctx, source, dest, inputSize, maxOutputSize, limitedOutput, (sizeof(void*)==8) ? byU32 : byPtr, noDict, noDictIssue, acceleration); + } +} + + +int LZ4_compress_fast(const char* source, char* dest, int inputSize, int maxOutputSize, int acceleration) +{ +#if (LZ4_HEAPMODE) + void* ctxPtr = ALLOCATOR(1, sizeof(LZ4_stream_t)); /* malloc-calloc always properly aligned */ +#else + LZ4_stream_t ctx; + void* const ctxPtr = &ctx; +#endif + + int const result = LZ4_compress_fast_extState(ctxPtr, source, dest, inputSize, maxOutputSize, acceleration); + +#if (LZ4_HEAPMODE) + FREEMEM(ctxPtr); +#endif + return result; +} + + +int LZ4_compress_default(const char* source, char* dest, int inputSize, int maxOutputSize) +{ + return LZ4_compress_fast(source, dest, inputSize, maxOutputSize, 1); +} + + +/* hidden debug function */ +/* strangely enough, gcc generates faster code when this function is uncommented, even if unused */ +int LZ4_compress_fast_force(const char* source, char* dest, int inputSize, int maxOutputSize, int acceleration) +{ + LZ4_stream_t ctx; + LZ4_resetStream(&ctx); + + if (inputSize < LZ4_64Klimit) + return LZ4_compress_generic(&ctx.internal_donotuse, source, dest, inputSize, maxOutputSize, limitedOutput, byU16, noDict, noDictIssue, acceleration); + else + return LZ4_compress_generic(&ctx.internal_donotuse, source, dest, inputSize, maxOutputSize, limitedOutput, sizeof(void*)==8 ? byU32 : byPtr, noDict, noDictIssue, acceleration); +} + + +/*-****************************** +* *_destSize() variant +********************************/ + +static int LZ4_compress_destSize_generic( + LZ4_stream_t_internal* const ctx, + const char* const src, + char* const dst, + int* const srcSizePtr, + const int targetDstSize, + const tableType_t tableType) +{ + const BYTE* ip = (const BYTE*) src; + const BYTE* base = (const BYTE*) src; + const BYTE* lowLimit = (const BYTE*) src; + const BYTE* anchor = ip; + const BYTE* const iend = ip + *srcSizePtr; + const BYTE* const mflimit = iend - MFLIMIT; + const BYTE* const matchlimit = iend - LASTLITERALS; + + BYTE* op = (BYTE*) dst; + BYTE* const oend = op + targetDstSize; + BYTE* const oMaxLit = op + targetDstSize - 2 /* offset */ - 8 /* because 8+MINMATCH==MFLIMIT */ - 1 /* token */; + BYTE* const oMaxMatch = op + targetDstSize - (LASTLITERALS + 1 /* token */); + BYTE* const oMaxSeq = oMaxLit - 1 /* token */; + + U32 forwardH; + + + /* Init conditions */ + if (targetDstSize < 1) return 0; /* Impossible to store anything */ + if ((U32)*srcSizePtr > (U32)LZ4_MAX_INPUT_SIZE) return 0; /* Unsupported input size, too large (or negative) */ + if ((tableType == byU16) && (*srcSizePtr>=LZ4_64Klimit)) return 0; /* Size too large (not within 64K limit) */ + if (*srcSizePtrhashTable, tableType, base); + ip++; forwardH = LZ4_hashPosition(ip, tableType); + + /* Main Loop */ + for ( ; ; ) { + const BYTE* match; + BYTE* token; + + /* Find a match */ + { const BYTE* forwardIp = ip; + unsigned step = 1; + unsigned searchMatchNb = 1 << LZ4_skipTrigger; + + do { + U32 h = forwardH; + ip = forwardIp; + forwardIp += step; + step = (searchMatchNb++ >> LZ4_skipTrigger); + + if (unlikely(forwardIp > mflimit)) goto _last_literals; + + match = LZ4_getPositionOnHash(h, ctx->hashTable, tableType, base); + forwardH = LZ4_hashPosition(forwardIp, tableType); + LZ4_putPositionOnHash(ip, h, ctx->hashTable, tableType, base); + + } while ( ((tableType==byU16) ? 0 : (match + MAX_DISTANCE < ip)) + || (LZ4_read32(match) != LZ4_read32(ip)) ); + } + + /* Catch up */ + while ((ip>anchor) && (match > lowLimit) && (unlikely(ip[-1]==match[-1]))) { ip--; match--; } + + /* Encode Literal length */ + { unsigned litLength = (unsigned)(ip - anchor); + token = op++; + if (op + ((litLength+240)/255) + litLength > oMaxLit) { + /* Not enough space for a last match */ + op--; + goto _last_literals; + } + if (litLength>=RUN_MASK) { + unsigned len = litLength - RUN_MASK; + *token=(RUN_MASK<= 255 ; len-=255) *op++ = 255; + *op++ = (BYTE)len; + } + else *token = (BYTE)(litLength< oMaxMatch) { + /* Match description too long : reduce it */ + matchLength = (15-1) + (oMaxMatch-op) * 255; + } + ip += MINMATCH + matchLength; + + if (matchLength>=ML_MASK) { + *token += ML_MASK; + matchLength -= ML_MASK; + while (matchLength >= 255) { matchLength-=255; *op++ = 255; } + *op++ = (BYTE)matchLength; + } + else *token += (BYTE)(matchLength); + } + + anchor = ip; + + /* Test end of block */ + if (ip > mflimit) break; + if (op > oMaxSeq) break; + + /* Fill table */ + LZ4_putPosition(ip-2, ctx->hashTable, tableType, base); + + /* Test next position */ + match = LZ4_getPosition(ip, ctx->hashTable, tableType, base); + LZ4_putPosition(ip, ctx->hashTable, tableType, base); + if ( (match+MAX_DISTANCE>=ip) + && (LZ4_read32(match)==LZ4_read32(ip)) ) + { token=op++; *token=0; goto _next_match; } + + /* Prepare next loop */ + forwardH = LZ4_hashPosition(++ip, tableType); + } + +_last_literals: + /* Encode Last Literals */ + { size_t lastRunSize = (size_t)(iend - anchor); + if (op + 1 /* token */ + ((lastRunSize+240)/255) /* litLength */ + lastRunSize /* literals */ > oend) { + /* adapt lastRunSize to fill 'dst' */ + lastRunSize = (oend-op) - 1; + lastRunSize -= (lastRunSize+240)/255; + } + ip = anchor + lastRunSize; + + if (lastRunSize >= RUN_MASK) { + size_t accumulator = lastRunSize - RUN_MASK; + *op++ = RUN_MASK << ML_BITS; + for(; accumulator >= 255 ; accumulator-=255) *op++ = 255; + *op++ = (BYTE) accumulator; + } else { + *op++ = (BYTE)(lastRunSize<= LZ4_compressBound(*srcSizePtr)) { /* compression success is guaranteed */ + return LZ4_compress_fast_extState(state, src, dst, *srcSizePtr, targetDstSize, 1); + } else { + if (*srcSizePtr < LZ4_64Klimit) + return LZ4_compress_destSize_generic(&state->internal_donotuse, src, dst, srcSizePtr, targetDstSize, byU16); + else + return LZ4_compress_destSize_generic(&state->internal_donotuse, src, dst, srcSizePtr, targetDstSize, sizeof(void*)==8 ? byU32 : byPtr); + } +} + + +int LZ4_compress_destSize(const char* src, char* dst, int* srcSizePtr, int targetDstSize) +{ +#if (LZ4_HEAPMODE) + LZ4_stream_t* ctx = (LZ4_stream_t*)ALLOCATOR(1, sizeof(LZ4_stream_t)); /* malloc-calloc always properly aligned */ +#else + LZ4_stream_t ctxBody; + LZ4_stream_t* ctx = &ctxBody; +#endif + + int result = LZ4_compress_destSize_extState(ctx, src, dst, srcSizePtr, targetDstSize); + +#if (LZ4_HEAPMODE) + FREEMEM(ctx); +#endif + return result; +} + + + +/*-****************************** +* Streaming functions +********************************/ + +LZ4_stream_t* LZ4_createStream(void) +{ + LZ4_stream_t* lz4s = (LZ4_stream_t*)ALLOCATOR(8, LZ4_STREAMSIZE_U64); + LZ4_STATIC_ASSERT(LZ4_STREAMSIZE >= sizeof(LZ4_stream_t_internal)); /* A compilation error here means LZ4_STREAMSIZE is not large enough */ + LZ4_resetStream(lz4s); + return lz4s; +} + +void LZ4_resetStream (LZ4_stream_t* LZ4_stream) +{ + MEM_INIT(LZ4_stream, 0, sizeof(LZ4_stream_t)); +} + +int LZ4_freeStream (LZ4_stream_t* LZ4_stream) +{ + if (!LZ4_stream) return 0; /* support free on NULL */ + FREEMEM(LZ4_stream); + return (0); +} + + +#define HASH_UNIT sizeof(reg_t) +int LZ4_loadDict (LZ4_stream_t* LZ4_dict, const char* dictionary, int dictSize) +{ + LZ4_stream_t_internal* dict = &LZ4_dict->internal_donotuse; + const BYTE* p = (const BYTE*)dictionary; + const BYTE* const dictEnd = p + dictSize; + const BYTE* base; + + if ((dict->initCheck) || (dict->currentOffset > 1 GB)) /* Uninitialized structure, or reuse overflow */ + LZ4_resetStream(LZ4_dict); + + if (dictSize < (int)HASH_UNIT) { + dict->dictionary = NULL; + dict->dictSize = 0; + return 0; + } + + if ((dictEnd - p) > 64 KB) p = dictEnd - 64 KB; + dict->currentOffset += 64 KB; + base = p - dict->currentOffset; + dict->dictionary = p; + dict->dictSize = (U32)(dictEnd - p); + dict->currentOffset += dict->dictSize; + + while (p <= dictEnd-HASH_UNIT) { + LZ4_putPosition(p, dict->hashTable, byU32, base); + p+=3; + } + + return dict->dictSize; +} + + +static void LZ4_renormDictT(LZ4_stream_t_internal* LZ4_dict, const BYTE* src) +{ + if ((LZ4_dict->currentOffset > 0x80000000) || + ((uptrval)LZ4_dict->currentOffset > (uptrval)src)) { /* address space overflow */ + /* rescale hash table */ + U32 const delta = LZ4_dict->currentOffset - 64 KB; + const BYTE* dictEnd = LZ4_dict->dictionary + LZ4_dict->dictSize; + int i; + for (i=0; ihashTable[i] < delta) LZ4_dict->hashTable[i]=0; + else LZ4_dict->hashTable[i] -= delta; + } + LZ4_dict->currentOffset = 64 KB; + if (LZ4_dict->dictSize > 64 KB) LZ4_dict->dictSize = 64 KB; + LZ4_dict->dictionary = dictEnd - LZ4_dict->dictSize; + } +} + + +int LZ4_compress_fast_continue (LZ4_stream_t* LZ4_stream, const char* source, char* dest, int inputSize, int maxOutputSize, int acceleration) +{ + LZ4_stream_t_internal* streamPtr = &LZ4_stream->internal_donotuse; + const BYTE* const dictEnd = streamPtr->dictionary + streamPtr->dictSize; + + const BYTE* smallest = (const BYTE*) source; + if (streamPtr->initCheck) return 0; /* Uninitialized structure detected */ + if ((streamPtr->dictSize>0) && (smallest>dictEnd)) smallest = dictEnd; + LZ4_renormDictT(streamPtr, smallest); + if (acceleration < 1) acceleration = ACCELERATION_DEFAULT; + + /* Check overlapping input/dictionary space */ + { const BYTE* sourceEnd = (const BYTE*) source + inputSize; + if ((sourceEnd > streamPtr->dictionary) && (sourceEnd < dictEnd)) { + streamPtr->dictSize = (U32)(dictEnd - sourceEnd); + if (streamPtr->dictSize > 64 KB) streamPtr->dictSize = 64 KB; + if (streamPtr->dictSize < 4) streamPtr->dictSize = 0; + streamPtr->dictionary = dictEnd - streamPtr->dictSize; + } + } + + /* prefix mode : source data follows dictionary */ + if (dictEnd == (const BYTE*)source) { + int result; + if ((streamPtr->dictSize < 64 KB) && (streamPtr->dictSize < streamPtr->currentOffset)) + result = LZ4_compress_generic(streamPtr, source, dest, inputSize, maxOutputSize, limitedOutput, byU32, withPrefix64k, dictSmall, acceleration); + else + result = LZ4_compress_generic(streamPtr, source, dest, inputSize, maxOutputSize, limitedOutput, byU32, withPrefix64k, noDictIssue, acceleration); + streamPtr->dictSize += (U32)inputSize; + streamPtr->currentOffset += (U32)inputSize; + return result; + } + + /* external dictionary mode */ + { int result; + if ((streamPtr->dictSize < 64 KB) && (streamPtr->dictSize < streamPtr->currentOffset)) + result = LZ4_compress_generic(streamPtr, source, dest, inputSize, maxOutputSize, limitedOutput, byU32, usingExtDict, dictSmall, acceleration); + else + result = LZ4_compress_generic(streamPtr, source, dest, inputSize, maxOutputSize, limitedOutput, byU32, usingExtDict, noDictIssue, acceleration); + streamPtr->dictionary = (const BYTE*)source; + streamPtr->dictSize = (U32)inputSize; + streamPtr->currentOffset += (U32)inputSize; + return result; + } +} + + +/* Hidden debug function, to force external dictionary mode */ +int LZ4_compress_forceExtDict (LZ4_stream_t* LZ4_dict, const char* source, char* dest, int inputSize) +{ + LZ4_stream_t_internal* streamPtr = &LZ4_dict->internal_donotuse; + int result; + const BYTE* const dictEnd = streamPtr->dictionary + streamPtr->dictSize; + + const BYTE* smallest = dictEnd; + if (smallest > (const BYTE*) source) smallest = (const BYTE*) source; + LZ4_renormDictT(streamPtr, smallest); + + result = LZ4_compress_generic(streamPtr, source, dest, inputSize, 0, notLimited, byU32, usingExtDict, noDictIssue, 1); + + streamPtr->dictionary = (const BYTE*)source; + streamPtr->dictSize = (U32)inputSize; + streamPtr->currentOffset += (U32)inputSize; + + return result; +} + + +/*! LZ4_saveDict() : + * If previously compressed data block is not guaranteed to remain available at its memory location, + * save it into a safer place (char* safeBuffer). + * Note : you don't need to call LZ4_loadDict() afterwards, + * dictionary is immediately usable, you can therefore call LZ4_compress_fast_continue(). + * Return : saved dictionary size in bytes (necessarily <= dictSize), or 0 if error. + */ +int LZ4_saveDict (LZ4_stream_t* LZ4_dict, char* safeBuffer, int dictSize) +{ + LZ4_stream_t_internal* const dict = &LZ4_dict->internal_donotuse; + const BYTE* const previousDictEnd = dict->dictionary + dict->dictSize; + + if ((U32)dictSize > 64 KB) dictSize = 64 KB; /* useless to define a dictionary > 64 KB */ + if ((U32)dictSize > dict->dictSize) dictSize = dict->dictSize; + + memmove(safeBuffer, previousDictEnd - dictSize, dictSize); + + dict->dictionary = (const BYTE*)safeBuffer; + dict->dictSize = (U32)dictSize; + + return dictSize; +} + + + +/*-***************************** +* Decompression functions +*******************************/ +/*! LZ4_decompress_generic() : + * This generic decompression function cover all use cases. + * It shall be instantiated several times, using different sets of directives + * Note that it is important this generic function is really inlined, + * in order to remove useless branches during compilation optimization. + */ +FORCE_INLINE int LZ4_decompress_generic( + const char* const source, + char* const dest, + int inputSize, + int outputSize, /* If endOnInput==endOnInputSize, this value is the max size of Output Buffer. */ + + int endOnInput, /* endOnOutputSize, endOnInputSize */ + int partialDecoding, /* full, partial */ + int targetOutputSize, /* only used if partialDecoding==partial */ + int dict, /* noDict, withPrefix64k, usingExtDict */ + const BYTE* const lowPrefix, /* == dest when no prefix */ + const BYTE* const dictStart, /* only if dict==usingExtDict */ + const size_t dictSize /* note : = 0 if noDict */ + ) +{ + /* Local Variables */ + const BYTE* ip = (const BYTE*) source; + const BYTE* const iend = ip + inputSize; + + BYTE* op = (BYTE*) dest; + BYTE* const oend = op + outputSize; + BYTE* cpy; + BYTE* oexit = op + targetOutputSize; + const BYTE* const lowLimit = lowPrefix - dictSize; + + const BYTE* const dictEnd = (const BYTE*)dictStart + dictSize; + const unsigned dec32table[] = {0, 1, 2, 1, 4, 4, 4, 4}; + const int dec64table[] = {0, 0, 0, -1, 0, 1, 2, 3}; + + const int safeDecode = (endOnInput==endOnInputSize); + const int checkOffset = ((safeDecode) && (dictSize < (int)(64 KB))); + + + /* Special cases */ + if ((partialDecoding) && (oexit > oend-MFLIMIT)) oexit = oend-MFLIMIT; /* targetOutputSize too high => decode everything */ + if ((endOnInput) && (unlikely(outputSize==0))) return ((inputSize==1) && (*ip==0)) ? 0 : -1; /* Empty output buffer */ + if ((!endOnInput) && (unlikely(outputSize==0))) return (*ip==0?1:-1); + + /* Main Loop : decode sequences */ + while (1) { + size_t length; + const BYTE* match; + size_t offset; + + /* get literal length */ + unsigned const token = *ip++; + if ((length=(token>>ML_BITS)) == RUN_MASK) { + unsigned s; + do { + s = *ip++; + length += s; + } while ( likely(endOnInput ? ip(partialDecoding?oexit:oend-MFLIMIT)) || (ip+length>iend-(2+1+LASTLITERALS))) ) + || ((!endOnInput) && (cpy>oend-WILDCOPYLENGTH)) ) + { + if (partialDecoding) { + if (cpy > oend) goto _output_error; /* Error : write attempt beyond end of output buffer */ + if ((endOnInput) && (ip+length > iend)) goto _output_error; /* Error : read attempt beyond end of input buffer */ + } else { + if ((!endOnInput) && (cpy != oend)) goto _output_error; /* Error : block decoding must stop exactly there */ + if ((endOnInput) && ((ip+length != iend) || (cpy > oend))) goto _output_error; /* Error : input must be consumed */ + } + memcpy(op, ip, length); + ip += length; + op += length; + break; /* Necessarily EOF, due to parsing restrictions */ + } + LZ4_wildCopy(op, ip, cpy); + ip += length; op = cpy; + + /* get offset */ + offset = LZ4_readLE16(ip); ip+=2; + match = op - offset; + if ((checkOffset) && (unlikely(match < lowLimit))) goto _output_error; /* Error : offset outside buffers */ + LZ4_write32(op, (U32)offset); /* costs ~1%; silence an msan warning when offset==0 */ + + /* get matchlength */ + length = token & ML_MASK; + if (length == ML_MASK) { + unsigned s; + do { + s = *ip++; + if ((endOnInput) && (ip > iend-LASTLITERALS)) goto _output_error; + length += s; + } while (s==255); + if ((safeDecode) && unlikely((uptrval)(op)+length<(uptrval)op)) goto _output_error; /* overflow detection */ + } + length += MINMATCH; + + /* check external dictionary */ + if ((dict==usingExtDict) && (match < lowPrefix)) { + if (unlikely(op+length > oend-LASTLITERALS)) goto _output_error; /* doesn't respect parsing restriction */ + + if (length <= (size_t)(lowPrefix-match)) { + /* match can be copied as a single segment from external dictionary */ + memmove(op, dictEnd - (lowPrefix-match), length); + op += length; + } else { + /* match encompass external dictionary and current block */ + size_t const copySize = (size_t)(lowPrefix-match); + size_t const restSize = length - copySize; + memcpy(op, dictEnd - copySize, copySize); + op += copySize; + if (restSize > (size_t)(op-lowPrefix)) { /* overlap copy */ + BYTE* const endOfMatch = op + restSize; + const BYTE* copyFrom = lowPrefix; + while (op < endOfMatch) *op++ = *copyFrom++; + } else { + memcpy(op, lowPrefix, restSize); + op += restSize; + } } + continue; + } + + /* copy match within block */ + cpy = op + length; + if (unlikely(offset<8)) { + const int dec64 = dec64table[offset]; + op[0] = match[0]; + op[1] = match[1]; + op[2] = match[2]; + op[3] = match[3]; + match += dec32table[offset]; + memcpy(op+4, match, 4); + match -= dec64; + } else { LZ4_copy8(op, match); match+=8; } + op += 8; + + if (unlikely(cpy>oend-12)) { + BYTE* const oCopyLimit = oend-(WILDCOPYLENGTH-1); + if (cpy > oend-LASTLITERALS) goto _output_error; /* Error : last LASTLITERALS bytes must be literals (uncompressed) */ + if (op < oCopyLimit) { + LZ4_wildCopy(op, match, oCopyLimit); + match += oCopyLimit - op; + op = oCopyLimit; + } + while (op16) LZ4_wildCopy(op+8, match+8, cpy); + } + op=cpy; /* correction */ + } + + /* end of decoding */ + if (endOnInput) + return (int) (((char*)op)-dest); /* Nb of output bytes decoded */ + else + return (int) (((const char*)ip)-source); /* Nb of input bytes read */ + + /* Overflow error detected */ +_output_error: + return (int) (-(((const char*)ip)-source))-1; +} + + +int LZ4_decompress_safe(const char* source, char* dest, int compressedSize, int maxDecompressedSize) +{ + return LZ4_decompress_generic(source, dest, compressedSize, maxDecompressedSize, endOnInputSize, full, 0, noDict, (BYTE*)dest, NULL, 0); +} + +int LZ4_decompress_safe_partial(const char* source, char* dest, int compressedSize, int targetOutputSize, int maxDecompressedSize) +{ + return LZ4_decompress_generic(source, dest, compressedSize, maxDecompressedSize, endOnInputSize, partial, targetOutputSize, noDict, (BYTE*)dest, NULL, 0); +} + +int LZ4_decompress_fast(const char* source, char* dest, int originalSize) +{ + return LZ4_decompress_generic(source, dest, 0, originalSize, endOnOutputSize, full, 0, withPrefix64k, (BYTE*)(dest - 64 KB), NULL, 64 KB); +} + + +/*===== streaming decompression functions =====*/ + +LZ4_streamDecode_t* LZ4_createStreamDecode(void) +{ + LZ4_streamDecode_t* lz4s = (LZ4_streamDecode_t*) ALLOCATOR(1, sizeof(LZ4_streamDecode_t)); + return lz4s; +} + +int LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_stream) +{ + if (!LZ4_stream) return 0; /* support free on NULL */ + FREEMEM(LZ4_stream); + return 0; +} + +/*! + * LZ4_setStreamDecode() : + * Use this function to instruct where to find the dictionary. + * This function is not necessary if previous data is still available where it was decoded. + * Loading a size of 0 is allowed (same effect as no dictionary). + * Return : 1 if OK, 0 if error + */ +int LZ4_setStreamDecode (LZ4_streamDecode_t* LZ4_streamDecode, const char* dictionary, int dictSize) +{ + LZ4_streamDecode_t_internal* lz4sd = &LZ4_streamDecode->internal_donotuse; + lz4sd->prefixSize = (size_t) dictSize; + lz4sd->prefixEnd = (const BYTE*) dictionary + dictSize; + lz4sd->externalDict = NULL; + lz4sd->extDictSize = 0; + return 1; +} + +/* +*_continue() : + These decoding functions allow decompression of multiple blocks in "streaming" mode. + Previously decoded blocks must still be available at the memory position where they were decoded. + If it's not possible, save the relevant part of decoded data into a safe buffer, + and indicate where it stands using LZ4_setStreamDecode() +*/ +int LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* source, char* dest, int compressedSize, int maxOutputSize) +{ + LZ4_streamDecode_t_internal* lz4sd = &LZ4_streamDecode->internal_donotuse; + int result; + + if (lz4sd->prefixEnd == (BYTE*)dest) { + result = LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, + endOnInputSize, full, 0, + usingExtDict, lz4sd->prefixEnd - lz4sd->prefixSize, lz4sd->externalDict, lz4sd->extDictSize); + if (result <= 0) return result; + lz4sd->prefixSize += result; + lz4sd->prefixEnd += result; + } else { + lz4sd->extDictSize = lz4sd->prefixSize; + lz4sd->externalDict = lz4sd->prefixEnd - lz4sd->extDictSize; + result = LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, + endOnInputSize, full, 0, + usingExtDict, (BYTE*)dest, lz4sd->externalDict, lz4sd->extDictSize); + if (result <= 0) return result; + lz4sd->prefixSize = result; + lz4sd->prefixEnd = (BYTE*)dest + result; + } + + return result; +} + +int LZ4_decompress_fast_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* source, char* dest, int originalSize) +{ + LZ4_streamDecode_t_internal* lz4sd = &LZ4_streamDecode->internal_donotuse; + int result; + + if (lz4sd->prefixEnd == (BYTE*)dest) { + result = LZ4_decompress_generic(source, dest, 0, originalSize, + endOnOutputSize, full, 0, + usingExtDict, lz4sd->prefixEnd - lz4sd->prefixSize, lz4sd->externalDict, lz4sd->extDictSize); + if (result <= 0) return result; + lz4sd->prefixSize += originalSize; + lz4sd->prefixEnd += originalSize; + } else { + lz4sd->extDictSize = lz4sd->prefixSize; + lz4sd->externalDict = lz4sd->prefixEnd - lz4sd->extDictSize; + result = LZ4_decompress_generic(source, dest, 0, originalSize, + endOnOutputSize, full, 0, + usingExtDict, (BYTE*)dest, lz4sd->externalDict, lz4sd->extDictSize); + if (result <= 0) return result; + lz4sd->prefixSize = originalSize; + lz4sd->prefixEnd = (BYTE*)dest + originalSize; + } + + return result; +} + + +/* +Advanced decoding functions : +*_usingDict() : + These decoding functions work the same as "_continue" ones, + the dictionary must be explicitly provided within parameters +*/ + +FORCE_INLINE int LZ4_decompress_usingDict_generic(const char* source, char* dest, int compressedSize, int maxOutputSize, int safe, const char* dictStart, int dictSize) +{ + if (dictSize==0) + return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, safe, full, 0, noDict, (BYTE*)dest, NULL, 0); + if (dictStart+dictSize == dest) { + if (dictSize >= (int)(64 KB - 1)) + return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, safe, full, 0, withPrefix64k, (BYTE*)dest-64 KB, NULL, 0); + return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, safe, full, 0, noDict, (BYTE*)dest-dictSize, NULL, 0); + } + return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, safe, full, 0, usingExtDict, (BYTE*)dest, (const BYTE*)dictStart, dictSize); +} + +int LZ4_decompress_safe_usingDict(const char* source, char* dest, int compressedSize, int maxOutputSize, const char* dictStart, int dictSize) +{ + return LZ4_decompress_usingDict_generic(source, dest, compressedSize, maxOutputSize, 1, dictStart, dictSize); +} + +int LZ4_decompress_fast_usingDict(const char* source, char* dest, int originalSize, const char* dictStart, int dictSize) +{ + return LZ4_decompress_usingDict_generic(source, dest, 0, originalSize, 0, dictStart, dictSize); +} + +/* debug function */ +int LZ4_decompress_safe_forceExtDict(const char* source, char* dest, int compressedSize, int maxOutputSize, const char* dictStart, int dictSize) +{ + return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, endOnInputSize, full, 0, usingExtDict, (BYTE*)dest, (const BYTE*)dictStart, dictSize); +} + + +/*=************************************************* +* Obsolete Functions +***************************************************/ +/* obsolete compression functions */ +int LZ4_compress_limitedOutput(const char* source, char* dest, int inputSize, int maxOutputSize) { return LZ4_compress_default(source, dest, inputSize, maxOutputSize); } +int LZ4_compress(const char* source, char* dest, int inputSize) { return LZ4_compress_default(source, dest, inputSize, LZ4_compressBound(inputSize)); } +int LZ4_compress_limitedOutput_withState (void* state, const char* src, char* dst, int srcSize, int dstSize) { return LZ4_compress_fast_extState(state, src, dst, srcSize, dstSize, 1); } +int LZ4_compress_withState (void* state, const char* src, char* dst, int srcSize) { return LZ4_compress_fast_extState(state, src, dst, srcSize, LZ4_compressBound(srcSize), 1); } +int LZ4_compress_limitedOutput_continue (LZ4_stream_t* LZ4_stream, const char* src, char* dst, int srcSize, int maxDstSize) { return LZ4_compress_fast_continue(LZ4_stream, src, dst, srcSize, maxDstSize, 1); } +int LZ4_compress_continue (LZ4_stream_t* LZ4_stream, const char* source, char* dest, int inputSize) { return LZ4_compress_fast_continue(LZ4_stream, source, dest, inputSize, LZ4_compressBound(inputSize), 1); } + +/* +These function names are deprecated and should no longer be used. +They are only provided here for compatibility with older user programs. +- LZ4_uncompress is totally equivalent to LZ4_decompress_fast +- LZ4_uncompress_unknownOutputSize is totally equivalent to LZ4_decompress_safe +*/ +int LZ4_uncompress (const char* source, char* dest, int outputSize) { return LZ4_decompress_fast(source, dest, outputSize); } +int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, int isize, int maxOutputSize) { return LZ4_decompress_safe(source, dest, isize, maxOutputSize); } + + +/* Obsolete Streaming functions */ + +int LZ4_sizeofStreamState() { return LZ4_STREAMSIZE; } + +static void LZ4_init(LZ4_stream_t* lz4ds, BYTE* base) +{ + MEM_INIT(lz4ds, 0, sizeof(LZ4_stream_t)); + lz4ds->internal_donotuse.bufferStart = base; +} + +int LZ4_resetStreamState(void* state, char* inputBuffer) +{ + if ((((uptrval)state) & 3) != 0) return 1; /* Error : pointer is not aligned on 4-bytes boundary */ + LZ4_init((LZ4_stream_t*)state, (BYTE*)inputBuffer); + return 0; +} + +void* LZ4_create (char* inputBuffer) +{ + LZ4_stream_t* lz4ds = (LZ4_stream_t*)ALLOCATOR(8, sizeof(LZ4_stream_t)); + LZ4_init (lz4ds, (BYTE*)inputBuffer); + return lz4ds; +} + +char* LZ4_slideInputBuffer (void* LZ4_Data) +{ + LZ4_stream_t_internal* ctx = &((LZ4_stream_t*)LZ4_Data)->internal_donotuse; + int dictSize = LZ4_saveDict((LZ4_stream_t*)LZ4_Data, (char*)ctx->bufferStart, 64 KB); + return (char*)(ctx->bufferStart + dictSize); +} + +/* Obsolete streaming decompression functions */ + +int LZ4_decompress_safe_withPrefix64k(const char* source, char* dest, int compressedSize, int maxOutputSize) +{ + return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, endOnInputSize, full, 0, withPrefix64k, (BYTE*)dest - 64 KB, NULL, 64 KB); +} + +int LZ4_decompress_fast_withPrefix64k(const char* source, char* dest, int originalSize) +{ + return LZ4_decompress_generic(source, dest, 0, originalSize, endOnOutputSize, full, 0, withPrefix64k, (BYTE*)dest - 64 KB, NULL, 64 KB); +} + +#endif /* LZ4_COMMONDEFS_ONLY */ diff --git a/samtools/lz4/lz4.c.pysam.c b/samtools/lz4/lz4.c.pysam.c new file mode 100644 index 0000000..a4a8ab4 --- /dev/null +++ b/samtools/lz4/lz4.c.pysam.c @@ -0,0 +1,1480 @@ +#include "samtools.pysam.h" + +/* + LZ4 - Fast LZ compression algorithm + Copyright (C) 2011-2017, Yann Collet. + + BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + You can contact the author at : + - LZ4 homepage : http://www.lz4.org + - LZ4 source repository : https://github.com/lz4/lz4 +*/ + + +/*-************************************ +* Tuning parameters +**************************************/ +/* + * LZ4_HEAPMODE : + * Select how default compression functions will allocate memory for their hash table, + * in memory stack (0:default, fastest), or in memory heap (1:requires malloc()). + */ +#ifndef LZ4_HEAPMODE +# define LZ4_HEAPMODE 0 +#endif + +/* + * ACCELERATION_DEFAULT : + * Select "acceleration" for LZ4_compress_fast() when parameter value <= 0 + */ +#define ACCELERATION_DEFAULT 1 + + +/*-************************************ +* CPU Feature Detection +**************************************/ +/* LZ4_FORCE_MEMORY_ACCESS + * By default, access to unaligned memory is controlled by `memcpy()`, which is safe and portable. + * Unfortunately, on some target/compiler combinations, the generated assembly is sub-optimal. + * The below switch allow to select different access method for improved performance. + * Method 0 (default) : use `memcpy()`. Safe and portable. + * Method 1 : `__packed` statement. It depends on compiler extension (ie, not portable). + * This method is safe if your compiler supports it, and *generally* as fast or faster than `memcpy`. + * Method 2 : direct access. This method is portable but violate C standard. + * It can generate buggy code on targets which assembly generation depends on alignment. + * But in some circumstances, it's the only known way to get the most performance (ie GCC + ARMv6) + * See https://fastcompression.blogspot.fr/2015/08/accessing-unaligned-memory.html for details. + * Prefer these methods in priority order (0 > 1 > 2) + */ +#ifndef LZ4_FORCE_MEMORY_ACCESS /* can be defined externally */ +# if defined(__GNUC__) && ( defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) ) +# define LZ4_FORCE_MEMORY_ACCESS 2 +# elif defined(__INTEL_COMPILER) || defined(__GNUC__) +# define LZ4_FORCE_MEMORY_ACCESS 1 +# endif +#endif + +/* + * LZ4_FORCE_SW_BITCOUNT + * Define this parameter if your target system or compiler does not support hardware bit count + */ +#if defined(_MSC_VER) && defined(_WIN32_WCE) /* Visual Studio for Windows CE does not support Hardware bit count */ +# define LZ4_FORCE_SW_BITCOUNT +#endif + + +/*-************************************ +* Dependency +**************************************/ +#include "lz4.h" +/* see also "memory routines" below */ + + +/*-************************************ +* Compiler Options +**************************************/ +#ifdef _MSC_VER /* Visual Studio */ +# include +# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */ +# pragma warning(disable : 4293) /* disable: C4293: too large shift (32-bits) */ +#endif /* _MSC_VER */ + +#ifndef FORCE_INLINE +# ifdef _MSC_VER /* Visual Studio */ +# define FORCE_INLINE static __forceinline +# else +# if defined (__cplusplus) || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */ +# ifdef __GNUC__ +# define FORCE_INLINE static inline __attribute__((always_inline)) +# else +# define FORCE_INLINE static inline +# endif +# else +# define FORCE_INLINE static +# endif /* __STDC_VERSION__ */ +# endif /* _MSC_VER */ +#endif /* FORCE_INLINE */ + +#if (defined(__GNUC__) && (__GNUC__ >= 3)) || (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 800)) || defined(__clang__) +# define expect(expr,value) (__builtin_expect ((expr),(value)) ) +#else +# define expect(expr,value) (expr) +#endif + +#define likely(expr) expect((expr) != 0, 1) +#define unlikely(expr) expect((expr) != 0, 0) + + +/*-************************************ +* Memory routines +**************************************/ +#include /* malloc, calloc, free */ +#define ALLOCATOR(n,s) calloc(n,s) +#define FREEMEM free +#include /* memset, memcpy */ +#define MEM_INIT memset + + +/*-************************************ +* Basic Types +**************************************/ +#if defined(__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) +# include + typedef uint8_t BYTE; + typedef uint16_t U16; + typedef uint32_t U32; + typedef int32_t S32; + typedef uint64_t U64; + typedef uintptr_t uptrval; +#else + typedef unsigned char BYTE; + typedef unsigned short U16; + typedef unsigned int U32; + typedef signed int S32; + typedef unsigned long long U64; + typedef size_t uptrval; /* generally true, except OpenVMS-64 */ +#endif + +#if defined(__x86_64__) + typedef U64 reg_t; /* 64-bits in x32 mode */ +#else + typedef size_t reg_t; /* 32-bits in x32 mode */ +#endif + +/*-************************************ +* Reading and writing into memory +**************************************/ +static unsigned LZ4_isLittleEndian(void) +{ + const union { U32 u; BYTE c[4]; } one = { 1 }; /* don't use static : performance detrimental */ + return one.c[0]; +} + + +#if defined(LZ4_FORCE_MEMORY_ACCESS) && (LZ4_FORCE_MEMORY_ACCESS==2) +/* lie to the compiler about data alignment; use with caution */ + +static U16 LZ4_read16(const void* memPtr) { return *(const U16*) memPtr; } +static U32 LZ4_read32(const void* memPtr) { return *(const U32*) memPtr; } +static reg_t LZ4_read_ARCH(const void* memPtr) { return *(const reg_t*) memPtr; } + +static void LZ4_write16(void* memPtr, U16 value) { *(U16*)memPtr = value; } +static void LZ4_write32(void* memPtr, U32 value) { *(U32*)memPtr = value; } + +#elif defined(LZ4_FORCE_MEMORY_ACCESS) && (LZ4_FORCE_MEMORY_ACCESS==1) + +/* __pack instructions are safer, but compiler specific, hence potentially problematic for some compilers */ +/* currently only defined for gcc and icc */ +typedef union { U16 u16; U32 u32; reg_t uArch; } __attribute__((packed)) unalign; + +static U16 LZ4_read16(const void* ptr) { return ((const unalign*)ptr)->u16; } +static U32 LZ4_read32(const void* ptr) { return ((const unalign*)ptr)->u32; } +static reg_t LZ4_read_ARCH(const void* ptr) { return ((const unalign*)ptr)->uArch; } + +static void LZ4_write16(void* memPtr, U16 value) { ((unalign*)memPtr)->u16 = value; } +static void LZ4_write32(void* memPtr, U32 value) { ((unalign*)memPtr)->u32 = value; } + +#else /* safe and portable access through memcpy() */ + +static U16 LZ4_read16(const void* memPtr) +{ + U16 val; memcpy(&val, memPtr, sizeof(val)); return val; +} + +static U32 LZ4_read32(const void* memPtr) +{ + U32 val; memcpy(&val, memPtr, sizeof(val)); return val; +} + +static reg_t LZ4_read_ARCH(const void* memPtr) +{ + reg_t val; memcpy(&val, memPtr, sizeof(val)); return val; +} + +static void LZ4_write16(void* memPtr, U16 value) +{ + memcpy(memPtr, &value, sizeof(value)); +} + +static void LZ4_write32(void* memPtr, U32 value) +{ + memcpy(memPtr, &value, sizeof(value)); +} + +#endif /* LZ4_FORCE_MEMORY_ACCESS */ + + +static U16 LZ4_readLE16(const void* memPtr) +{ + if (LZ4_isLittleEndian()) { + return LZ4_read16(memPtr); + } else { + const BYTE* p = (const BYTE*)memPtr; + return (U16)((U16)p[0] + (p[1]<<8)); + } +} + +static void LZ4_writeLE16(void* memPtr, U16 value) +{ + if (LZ4_isLittleEndian()) { + LZ4_write16(memPtr, value); + } else { + BYTE* p = (BYTE*)memPtr; + p[0] = (BYTE) value; + p[1] = (BYTE)(value>>8); + } +} + +static void LZ4_copy8(void* dst, const void* src) +{ + memcpy(dst,src,8); +} + +/* customized variant of memcpy, which can overwrite up to 8 bytes beyond dstEnd */ +static void LZ4_wildCopy(void* dstPtr, const void* srcPtr, void* dstEnd) +{ + BYTE* d = (BYTE*)dstPtr; + const BYTE* s = (const BYTE*)srcPtr; + BYTE* const e = (BYTE*)dstEnd; + + do { LZ4_copy8(d,s); d+=8; s+=8; } while (d=2) +# include +# define DEBUGLOG(l, ...) { \ + if (l<=LZ4_DEBUG) { \ + fprintf(samtools_stderr, __FILE__ ": "); \ + fprintf(samtools_stderr, __VA_ARGS__); \ + fprintf(samtools_stderr, " \n"); \ + } } +#else +# define DEBUGLOG(l, ...) {} /* disabled */ +#endif + + +/*-************************************ +* Common functions +**************************************/ +static unsigned LZ4_NbCommonBytes (register reg_t val) +{ + if (LZ4_isLittleEndian()) { + if (sizeof(val)==8) { +# if defined(_MSC_VER) && defined(_WIN64) && !defined(LZ4_FORCE_SW_BITCOUNT) + unsigned long r = 0; + _BitScanForward64( &r, (U64)val ); + return (int)(r>>3); +# elif (defined(__clang__) || (defined(__GNUC__) && (__GNUC__>=3))) && !defined(LZ4_FORCE_SW_BITCOUNT) + return (__builtin_ctzll((U64)val) >> 3); +# else + static const int DeBruijnBytePos[64] = { 0, 0, 0, 0, 0, 1, 1, 2, 0, 3, 1, 3, 1, 4, 2, 7, 0, 2, 3, 6, 1, 5, 3, 5, 1, 3, 4, 4, 2, 5, 6, 7, 7, 0, 1, 2, 3, 3, 4, 6, 2, 6, 5, 5, 3, 4, 5, 6, 7, 1, 2, 4, 6, 4, 4, 5, 7, 2, 6, 5, 7, 6, 7, 7 }; + return DeBruijnBytePos[((U64)((val & -(long long)val) * 0x0218A392CDABBD3FULL)) >> 58]; +# endif + } else /* 32 bits */ { +# if defined(_MSC_VER) && !defined(LZ4_FORCE_SW_BITCOUNT) + unsigned long r; + _BitScanForward( &r, (U32)val ); + return (int)(r>>3); +# elif (defined(__clang__) || (defined(__GNUC__) && (__GNUC__>=3))) && !defined(LZ4_FORCE_SW_BITCOUNT) + return (__builtin_ctz((U32)val) >> 3); +# else + static const int DeBruijnBytePos[32] = { 0, 0, 3, 0, 3, 1, 3, 0, 3, 2, 2, 1, 3, 2, 0, 1, 3, 3, 1, 2, 2, 2, 2, 0, 3, 1, 2, 0, 1, 0, 1, 1 }; + return DeBruijnBytePos[((U32)((val & -(S32)val) * 0x077CB531U)) >> 27]; +# endif + } + } else /* Big Endian CPU */ { + if (sizeof(val)==8) { +# if defined(_MSC_VER) && defined(_WIN64) && !defined(LZ4_FORCE_SW_BITCOUNT) + unsigned long r = 0; + _BitScanReverse64( &r, val ); + return (unsigned)(r>>3); +# elif (defined(__clang__) || (defined(__GNUC__) && (__GNUC__>=3))) && !defined(LZ4_FORCE_SW_BITCOUNT) + return (__builtin_clzll((U64)val) >> 3); +# else + unsigned r; + if (!(val>>32)) { r=4; } else { r=0; val>>=32; } + if (!(val>>16)) { r+=2; val>>=8; } else { val>>=24; } + r += (!val); + return r; +# endif + } else /* 32 bits */ { +# if defined(_MSC_VER) && !defined(LZ4_FORCE_SW_BITCOUNT) + unsigned long r = 0; + _BitScanReverse( &r, (unsigned long)val ); + return (unsigned)(r>>3); +# elif (defined(__clang__) || (defined(__GNUC__) && (__GNUC__>=3))) && !defined(LZ4_FORCE_SW_BITCOUNT) + return (__builtin_clz((U32)val) >> 3); +# else + unsigned r; + if (!(val>>16)) { r=2; val>>=8; } else { r=0; val>>=24; } + r += (!val); + return r; +# endif + } + } +} + +#define STEPSIZE sizeof(reg_t) +static unsigned LZ4_count(const BYTE* pIn, const BYTE* pMatch, const BYTE* pInLimit) +{ + const BYTE* const pStart = pIn; + + while (likely(pIn compression run slower on incompressible data */ + + +/*-************************************ +* Local Structures and types +**************************************/ +typedef enum { notLimited = 0, limitedOutput = 1 } limitedOutput_directive; +typedef enum { byPtr, byU32, byU16 } tableType_t; + +typedef enum { noDict = 0, withPrefix64k, usingExtDict } dict_directive; +typedef enum { noDictIssue = 0, dictSmall } dictIssue_directive; + +typedef enum { endOnOutputSize = 0, endOnInputSize = 1 } endCondition_directive; +typedef enum { full = 0, partial = 1 } earlyEnd_directive; + + +/*-************************************ +* Local Utils +**************************************/ +int LZ4_versionNumber (void) { return LZ4_VERSION_NUMBER; } +const char* LZ4_versionString(void) { return LZ4_VERSION_STRING; } +int LZ4_compressBound(int isize) { return LZ4_COMPRESSBOUND(isize); } +int LZ4_sizeofState() { return LZ4_STREAMSIZE; } + + +/*-****************************** +* Compression functions +********************************/ +static U32 LZ4_hash4(U32 sequence, tableType_t const tableType) +{ + if (tableType == byU16) + return ((sequence * 2654435761U) >> ((MINMATCH*8)-(LZ4_HASHLOG+1))); + else + return ((sequence * 2654435761U) >> ((MINMATCH*8)-LZ4_HASHLOG)); +} + +static U32 LZ4_hash5(U64 sequence, tableType_t const tableType) +{ + static const U64 prime5bytes = 889523592379ULL; + static const U64 prime8bytes = 11400714785074694791ULL; + const U32 hashLog = (tableType == byU16) ? LZ4_HASHLOG+1 : LZ4_HASHLOG; + if (LZ4_isLittleEndian()) + return (U32)(((sequence << 24) * prime5bytes) >> (64 - hashLog)); + else + return (U32)(((sequence >> 24) * prime8bytes) >> (64 - hashLog)); +} + +FORCE_INLINE U32 LZ4_hashPosition(const void* const p, tableType_t const tableType) +{ + if ((sizeof(reg_t)==8) && (tableType != byU16)) return LZ4_hash5(LZ4_read_ARCH(p), tableType); + return LZ4_hash4(LZ4_read32(p), tableType); +} + +static void LZ4_putPositionOnHash(const BYTE* p, U32 h, void* tableBase, tableType_t const tableType, const BYTE* srcBase) +{ + switch (tableType) + { + case byPtr: { const BYTE** hashTable = (const BYTE**)tableBase; hashTable[h] = p; return; } + case byU32: { U32* hashTable = (U32*) tableBase; hashTable[h] = (U32)(p-srcBase); return; } + case byU16: { U16* hashTable = (U16*) tableBase; hashTable[h] = (U16)(p-srcBase); return; } + } +} + +FORCE_INLINE void LZ4_putPosition(const BYTE* p, void* tableBase, tableType_t tableType, const BYTE* srcBase) +{ + U32 const h = LZ4_hashPosition(p, tableType); + LZ4_putPositionOnHash(p, h, tableBase, tableType, srcBase); +} + +static const BYTE* LZ4_getPositionOnHash(U32 h, void* tableBase, tableType_t tableType, const BYTE* srcBase) +{ + if (tableType == byPtr) { const BYTE** hashTable = (const BYTE**) tableBase; return hashTable[h]; } + if (tableType == byU32) { const U32* const hashTable = (U32*) tableBase; return hashTable[h] + srcBase; } + { const U16* const hashTable = (U16*) tableBase; return hashTable[h] + srcBase; } /* default, to ensure a return */ +} + +FORCE_INLINE const BYTE* LZ4_getPosition(const BYTE* p, void* tableBase, tableType_t tableType, const BYTE* srcBase) +{ + U32 const h = LZ4_hashPosition(p, tableType); + return LZ4_getPositionOnHash(h, tableBase, tableType, srcBase); +} + + +/** LZ4_compress_generic() : + inlined, to ensure branches are decided at compilation time */ +FORCE_INLINE int LZ4_compress_generic( + LZ4_stream_t_internal* const cctx, + const char* const source, + char* const dest, + const int inputSize, + const int maxOutputSize, + const limitedOutput_directive outputLimited, + const tableType_t tableType, + const dict_directive dict, + const dictIssue_directive dictIssue, + const U32 acceleration) +{ + const BYTE* ip = (const BYTE*) source; + const BYTE* base; + const BYTE* lowLimit; + const BYTE* const lowRefLimit = ip - cctx->dictSize; + const BYTE* const dictionary = cctx->dictionary; + const BYTE* const dictEnd = dictionary + cctx->dictSize; + const ptrdiff_t dictDelta = dictEnd - (const BYTE*)source; + const BYTE* anchor = (const BYTE*) source; + const BYTE* const iend = ip + inputSize; + const BYTE* const mflimit = iend - MFLIMIT; + const BYTE* const matchlimit = iend - LASTLITERALS; + + BYTE* op = (BYTE*) dest; + BYTE* const olimit = op + maxOutputSize; + + U32 forwardH; + + /* Init conditions */ + if ((U32)inputSize > (U32)LZ4_MAX_INPUT_SIZE) return 0; /* Unsupported inputSize, too large (or negative) */ + switch(dict) + { + case noDict: + default: + base = (const BYTE*)source; + lowLimit = (const BYTE*)source; + break; + case withPrefix64k: + base = (const BYTE*)source - cctx->currentOffset; + lowLimit = (const BYTE*)source - cctx->dictSize; + break; + case usingExtDict: + base = (const BYTE*)source - cctx->currentOffset; + lowLimit = (const BYTE*)source; + break; + } + if ((tableType == byU16) && (inputSize>=LZ4_64Klimit)) return 0; /* Size too large (not within 64K limit) */ + if (inputSizehashTable, tableType, base); + ip++; forwardH = LZ4_hashPosition(ip, tableType); + + /* Main Loop */ + for ( ; ; ) { + ptrdiff_t refDelta = 0; + const BYTE* match; + BYTE* token; + + /* Find a match */ + { const BYTE* forwardIp = ip; + unsigned step = 1; + unsigned searchMatchNb = acceleration << LZ4_skipTrigger; + do { + U32 const h = forwardH; + ip = forwardIp; + forwardIp += step; + step = (searchMatchNb++ >> LZ4_skipTrigger); + + if (unlikely(forwardIp > mflimit)) goto _last_literals; + + match = LZ4_getPositionOnHash(h, cctx->hashTable, tableType, base); + if (dict==usingExtDict) { + if (match < (const BYTE*)source) { + refDelta = dictDelta; + lowLimit = dictionary; + } else { + refDelta = 0; + lowLimit = (const BYTE*)source; + } } + forwardH = LZ4_hashPosition(forwardIp, tableType); + LZ4_putPositionOnHash(ip, h, cctx->hashTable, tableType, base); + + } while ( ((dictIssue==dictSmall) ? (match < lowRefLimit) : 0) + || ((tableType==byU16) ? 0 : (match + MAX_DISTANCE < ip)) + || (LZ4_read32(match+refDelta) != LZ4_read32(ip)) ); + } + + /* Catch up */ + while (((ip>anchor) & (match+refDelta > lowLimit)) && (unlikely(ip[-1]==match[refDelta-1]))) { ip--; match--; } + + /* Encode Literals */ + { unsigned const litLength = (unsigned)(ip - anchor); + token = op++; + if ((outputLimited) && /* Check output buffer overflow */ + (unlikely(op + litLength + (2 + 1 + LASTLITERALS) + (litLength/255) > olimit))) + return 0; + if (litLength >= RUN_MASK) { + int len = (int)litLength-RUN_MASK; + *token = (RUN_MASK<= 255 ; len-=255) *op++ = 255; + *op++ = (BYTE)len; + } + else *token = (BYTE)(litLength< matchlimit) limit = matchlimit; + matchCode = LZ4_count(ip+MINMATCH, match+MINMATCH, limit); + ip += MINMATCH + matchCode; + if (ip==limit) { + unsigned const more = LZ4_count(ip, (const BYTE*)source, matchlimit); + matchCode += more; + ip += more; + } + } else { + matchCode = LZ4_count(ip+MINMATCH, match+MINMATCH, matchlimit); + ip += MINMATCH + matchCode; + } + + if ( outputLimited && /* Check output buffer overflow */ + (unlikely(op + (1 + LASTLITERALS) + (matchCode>>8) > olimit)) ) + return 0; + if (matchCode >= ML_MASK) { + *token += ML_MASK; + matchCode -= ML_MASK; + LZ4_write32(op, 0xFFFFFFFF); + while (matchCode >= 4*255) op+=4, LZ4_write32(op, 0xFFFFFFFF), matchCode -= 4*255; + op += matchCode / 255; + *op++ = (BYTE)(matchCode % 255); + } else + *token += (BYTE)(matchCode); + } + + anchor = ip; + + /* Test end of chunk */ + if (ip > mflimit) break; + + /* Fill table */ + LZ4_putPosition(ip-2, cctx->hashTable, tableType, base); + + /* Test next position */ + match = LZ4_getPosition(ip, cctx->hashTable, tableType, base); + if (dict==usingExtDict) { + if (match < (const BYTE*)source) { + refDelta = dictDelta; + lowLimit = dictionary; + } else { + refDelta = 0; + lowLimit = (const BYTE*)source; + } } + LZ4_putPosition(ip, cctx->hashTable, tableType, base); + if ( ((dictIssue==dictSmall) ? (match>=lowRefLimit) : 1) + && (match+MAX_DISTANCE>=ip) + && (LZ4_read32(match+refDelta)==LZ4_read32(ip)) ) + { token=op++; *token=0; goto _next_match; } + + /* Prepare next loop */ + forwardH = LZ4_hashPosition(++ip, tableType); + } + +_last_literals: + /* Encode Last Literals */ + { size_t const lastRun = (size_t)(iend - anchor); + if ( (outputLimited) && /* Check output buffer overflow */ + ((op - (BYTE*)dest) + lastRun + 1 + ((lastRun+255-RUN_MASK)/255) > (U32)maxOutputSize) ) + return 0; + if (lastRun >= RUN_MASK) { + size_t accumulator = lastRun - RUN_MASK; + *op++ = RUN_MASK << ML_BITS; + for(; accumulator >= 255 ; accumulator-=255) *op++ = 255; + *op++ = (BYTE) accumulator; + } else { + *op++ = (BYTE)(lastRun<internal_donotuse; + LZ4_resetStream((LZ4_stream_t*)state); + if (acceleration < 1) acceleration = ACCELERATION_DEFAULT; + + if (maxOutputSize >= LZ4_compressBound(inputSize)) { + if (inputSize < LZ4_64Klimit) + return LZ4_compress_generic(ctx, source, dest, inputSize, 0, notLimited, byU16, noDict, noDictIssue, acceleration); + else + return LZ4_compress_generic(ctx, source, dest, inputSize, 0, notLimited, (sizeof(void*)==8) ? byU32 : byPtr, noDict, noDictIssue, acceleration); + } else { + if (inputSize < LZ4_64Klimit) + return LZ4_compress_generic(ctx, source, dest, inputSize, maxOutputSize, limitedOutput, byU16, noDict, noDictIssue, acceleration); + else + return LZ4_compress_generic(ctx, source, dest, inputSize, maxOutputSize, limitedOutput, (sizeof(void*)==8) ? byU32 : byPtr, noDict, noDictIssue, acceleration); + } +} + + +int LZ4_compress_fast(const char* source, char* dest, int inputSize, int maxOutputSize, int acceleration) +{ +#if (LZ4_HEAPMODE) + void* ctxPtr = ALLOCATOR(1, sizeof(LZ4_stream_t)); /* malloc-calloc always properly aligned */ +#else + LZ4_stream_t ctx; + void* const ctxPtr = &ctx; +#endif + + int const result = LZ4_compress_fast_extState(ctxPtr, source, dest, inputSize, maxOutputSize, acceleration); + +#if (LZ4_HEAPMODE) + FREEMEM(ctxPtr); +#endif + return result; +} + + +int LZ4_compress_default(const char* source, char* dest, int inputSize, int maxOutputSize) +{ + return LZ4_compress_fast(source, dest, inputSize, maxOutputSize, 1); +} + + +/* hidden debug function */ +/* strangely enough, gcc generates faster code when this function is uncommented, even if unused */ +int LZ4_compress_fast_force(const char* source, char* dest, int inputSize, int maxOutputSize, int acceleration) +{ + LZ4_stream_t ctx; + LZ4_resetStream(&ctx); + + if (inputSize < LZ4_64Klimit) + return LZ4_compress_generic(&ctx.internal_donotuse, source, dest, inputSize, maxOutputSize, limitedOutput, byU16, noDict, noDictIssue, acceleration); + else + return LZ4_compress_generic(&ctx.internal_donotuse, source, dest, inputSize, maxOutputSize, limitedOutput, sizeof(void*)==8 ? byU32 : byPtr, noDict, noDictIssue, acceleration); +} + + +/*-****************************** +* *_destSize() variant +********************************/ + +static int LZ4_compress_destSize_generic( + LZ4_stream_t_internal* const ctx, + const char* const src, + char* const dst, + int* const srcSizePtr, + const int targetDstSize, + const tableType_t tableType) +{ + const BYTE* ip = (const BYTE*) src; + const BYTE* base = (const BYTE*) src; + const BYTE* lowLimit = (const BYTE*) src; + const BYTE* anchor = ip; + const BYTE* const iend = ip + *srcSizePtr; + const BYTE* const mflimit = iend - MFLIMIT; + const BYTE* const matchlimit = iend - LASTLITERALS; + + BYTE* op = (BYTE*) dst; + BYTE* const oend = op + targetDstSize; + BYTE* const oMaxLit = op + targetDstSize - 2 /* offset */ - 8 /* because 8+MINMATCH==MFLIMIT */ - 1 /* token */; + BYTE* const oMaxMatch = op + targetDstSize - (LASTLITERALS + 1 /* token */); + BYTE* const oMaxSeq = oMaxLit - 1 /* token */; + + U32 forwardH; + + + /* Init conditions */ + if (targetDstSize < 1) return 0; /* Impossible to store anything */ + if ((U32)*srcSizePtr > (U32)LZ4_MAX_INPUT_SIZE) return 0; /* Unsupported input size, too large (or negative) */ + if ((tableType == byU16) && (*srcSizePtr>=LZ4_64Klimit)) return 0; /* Size too large (not within 64K limit) */ + if (*srcSizePtrhashTable, tableType, base); + ip++; forwardH = LZ4_hashPosition(ip, tableType); + + /* Main Loop */ + for ( ; ; ) { + const BYTE* match; + BYTE* token; + + /* Find a match */ + { const BYTE* forwardIp = ip; + unsigned step = 1; + unsigned searchMatchNb = 1 << LZ4_skipTrigger; + + do { + U32 h = forwardH; + ip = forwardIp; + forwardIp += step; + step = (searchMatchNb++ >> LZ4_skipTrigger); + + if (unlikely(forwardIp > mflimit)) goto _last_literals; + + match = LZ4_getPositionOnHash(h, ctx->hashTable, tableType, base); + forwardH = LZ4_hashPosition(forwardIp, tableType); + LZ4_putPositionOnHash(ip, h, ctx->hashTable, tableType, base); + + } while ( ((tableType==byU16) ? 0 : (match + MAX_DISTANCE < ip)) + || (LZ4_read32(match) != LZ4_read32(ip)) ); + } + + /* Catch up */ + while ((ip>anchor) && (match > lowLimit) && (unlikely(ip[-1]==match[-1]))) { ip--; match--; } + + /* Encode Literal length */ + { unsigned litLength = (unsigned)(ip - anchor); + token = op++; + if (op + ((litLength+240)/255) + litLength > oMaxLit) { + /* Not enough space for a last match */ + op--; + goto _last_literals; + } + if (litLength>=RUN_MASK) { + unsigned len = litLength - RUN_MASK; + *token=(RUN_MASK<= 255 ; len-=255) *op++ = 255; + *op++ = (BYTE)len; + } + else *token = (BYTE)(litLength< oMaxMatch) { + /* Match description too long : reduce it */ + matchLength = (15-1) + (oMaxMatch-op) * 255; + } + ip += MINMATCH + matchLength; + + if (matchLength>=ML_MASK) { + *token += ML_MASK; + matchLength -= ML_MASK; + while (matchLength >= 255) { matchLength-=255; *op++ = 255; } + *op++ = (BYTE)matchLength; + } + else *token += (BYTE)(matchLength); + } + + anchor = ip; + + /* Test end of block */ + if (ip > mflimit) break; + if (op > oMaxSeq) break; + + /* Fill table */ + LZ4_putPosition(ip-2, ctx->hashTable, tableType, base); + + /* Test next position */ + match = LZ4_getPosition(ip, ctx->hashTable, tableType, base); + LZ4_putPosition(ip, ctx->hashTable, tableType, base); + if ( (match+MAX_DISTANCE>=ip) + && (LZ4_read32(match)==LZ4_read32(ip)) ) + { token=op++; *token=0; goto _next_match; } + + /* Prepare next loop */ + forwardH = LZ4_hashPosition(++ip, tableType); + } + +_last_literals: + /* Encode Last Literals */ + { size_t lastRunSize = (size_t)(iend - anchor); + if (op + 1 /* token */ + ((lastRunSize+240)/255) /* litLength */ + lastRunSize /* literals */ > oend) { + /* adapt lastRunSize to fill 'dst' */ + lastRunSize = (oend-op) - 1; + lastRunSize -= (lastRunSize+240)/255; + } + ip = anchor + lastRunSize; + + if (lastRunSize >= RUN_MASK) { + size_t accumulator = lastRunSize - RUN_MASK; + *op++ = RUN_MASK << ML_BITS; + for(; accumulator >= 255 ; accumulator-=255) *op++ = 255; + *op++ = (BYTE) accumulator; + } else { + *op++ = (BYTE)(lastRunSize<= LZ4_compressBound(*srcSizePtr)) { /* compression success is guaranteed */ + return LZ4_compress_fast_extState(state, src, dst, *srcSizePtr, targetDstSize, 1); + } else { + if (*srcSizePtr < LZ4_64Klimit) + return LZ4_compress_destSize_generic(&state->internal_donotuse, src, dst, srcSizePtr, targetDstSize, byU16); + else + return LZ4_compress_destSize_generic(&state->internal_donotuse, src, dst, srcSizePtr, targetDstSize, sizeof(void*)==8 ? byU32 : byPtr); + } +} + + +int LZ4_compress_destSize(const char* src, char* dst, int* srcSizePtr, int targetDstSize) +{ +#if (LZ4_HEAPMODE) + LZ4_stream_t* ctx = (LZ4_stream_t*)ALLOCATOR(1, sizeof(LZ4_stream_t)); /* malloc-calloc always properly aligned */ +#else + LZ4_stream_t ctxBody; + LZ4_stream_t* ctx = &ctxBody; +#endif + + int result = LZ4_compress_destSize_extState(ctx, src, dst, srcSizePtr, targetDstSize); + +#if (LZ4_HEAPMODE) + FREEMEM(ctx); +#endif + return result; +} + + + +/*-****************************** +* Streaming functions +********************************/ + +LZ4_stream_t* LZ4_createStream(void) +{ + LZ4_stream_t* lz4s = (LZ4_stream_t*)ALLOCATOR(8, LZ4_STREAMSIZE_U64); + LZ4_STATIC_ASSERT(LZ4_STREAMSIZE >= sizeof(LZ4_stream_t_internal)); /* A compilation error here means LZ4_STREAMSIZE is not large enough */ + LZ4_resetStream(lz4s); + return lz4s; +} + +void LZ4_resetStream (LZ4_stream_t* LZ4_stream) +{ + MEM_INIT(LZ4_stream, 0, sizeof(LZ4_stream_t)); +} + +int LZ4_freeStream (LZ4_stream_t* LZ4_stream) +{ + if (!LZ4_stream) return 0; /* support free on NULL */ + FREEMEM(LZ4_stream); + return (0); +} + + +#define HASH_UNIT sizeof(reg_t) +int LZ4_loadDict (LZ4_stream_t* LZ4_dict, const char* dictionary, int dictSize) +{ + LZ4_stream_t_internal* dict = &LZ4_dict->internal_donotuse; + const BYTE* p = (const BYTE*)dictionary; + const BYTE* const dictEnd = p + dictSize; + const BYTE* base; + + if ((dict->initCheck) || (dict->currentOffset > 1 GB)) /* Uninitialized structure, or reuse overflow */ + LZ4_resetStream(LZ4_dict); + + if (dictSize < (int)HASH_UNIT) { + dict->dictionary = NULL; + dict->dictSize = 0; + return 0; + } + + if ((dictEnd - p) > 64 KB) p = dictEnd - 64 KB; + dict->currentOffset += 64 KB; + base = p - dict->currentOffset; + dict->dictionary = p; + dict->dictSize = (U32)(dictEnd - p); + dict->currentOffset += dict->dictSize; + + while (p <= dictEnd-HASH_UNIT) { + LZ4_putPosition(p, dict->hashTable, byU32, base); + p+=3; + } + + return dict->dictSize; +} + + +static void LZ4_renormDictT(LZ4_stream_t_internal* LZ4_dict, const BYTE* src) +{ + if ((LZ4_dict->currentOffset > 0x80000000) || + ((uptrval)LZ4_dict->currentOffset > (uptrval)src)) { /* address space overflow */ + /* rescale hash table */ + U32 const delta = LZ4_dict->currentOffset - 64 KB; + const BYTE* dictEnd = LZ4_dict->dictionary + LZ4_dict->dictSize; + int i; + for (i=0; ihashTable[i] < delta) LZ4_dict->hashTable[i]=0; + else LZ4_dict->hashTable[i] -= delta; + } + LZ4_dict->currentOffset = 64 KB; + if (LZ4_dict->dictSize > 64 KB) LZ4_dict->dictSize = 64 KB; + LZ4_dict->dictionary = dictEnd - LZ4_dict->dictSize; + } +} + + +int LZ4_compress_fast_continue (LZ4_stream_t* LZ4_stream, const char* source, char* dest, int inputSize, int maxOutputSize, int acceleration) +{ + LZ4_stream_t_internal* streamPtr = &LZ4_stream->internal_donotuse; + const BYTE* const dictEnd = streamPtr->dictionary + streamPtr->dictSize; + + const BYTE* smallest = (const BYTE*) source; + if (streamPtr->initCheck) return 0; /* Uninitialized structure detected */ + if ((streamPtr->dictSize>0) && (smallest>dictEnd)) smallest = dictEnd; + LZ4_renormDictT(streamPtr, smallest); + if (acceleration < 1) acceleration = ACCELERATION_DEFAULT; + + /* Check overlapping input/dictionary space */ + { const BYTE* sourceEnd = (const BYTE*) source + inputSize; + if ((sourceEnd > streamPtr->dictionary) && (sourceEnd < dictEnd)) { + streamPtr->dictSize = (U32)(dictEnd - sourceEnd); + if (streamPtr->dictSize > 64 KB) streamPtr->dictSize = 64 KB; + if (streamPtr->dictSize < 4) streamPtr->dictSize = 0; + streamPtr->dictionary = dictEnd - streamPtr->dictSize; + } + } + + /* prefix mode : source data follows dictionary */ + if (dictEnd == (const BYTE*)source) { + int result; + if ((streamPtr->dictSize < 64 KB) && (streamPtr->dictSize < streamPtr->currentOffset)) + result = LZ4_compress_generic(streamPtr, source, dest, inputSize, maxOutputSize, limitedOutput, byU32, withPrefix64k, dictSmall, acceleration); + else + result = LZ4_compress_generic(streamPtr, source, dest, inputSize, maxOutputSize, limitedOutput, byU32, withPrefix64k, noDictIssue, acceleration); + streamPtr->dictSize += (U32)inputSize; + streamPtr->currentOffset += (U32)inputSize; + return result; + } + + /* external dictionary mode */ + { int result; + if ((streamPtr->dictSize < 64 KB) && (streamPtr->dictSize < streamPtr->currentOffset)) + result = LZ4_compress_generic(streamPtr, source, dest, inputSize, maxOutputSize, limitedOutput, byU32, usingExtDict, dictSmall, acceleration); + else + result = LZ4_compress_generic(streamPtr, source, dest, inputSize, maxOutputSize, limitedOutput, byU32, usingExtDict, noDictIssue, acceleration); + streamPtr->dictionary = (const BYTE*)source; + streamPtr->dictSize = (U32)inputSize; + streamPtr->currentOffset += (U32)inputSize; + return result; + } +} + + +/* Hidden debug function, to force external dictionary mode */ +int LZ4_compress_forceExtDict (LZ4_stream_t* LZ4_dict, const char* source, char* dest, int inputSize) +{ + LZ4_stream_t_internal* streamPtr = &LZ4_dict->internal_donotuse; + int result; + const BYTE* const dictEnd = streamPtr->dictionary + streamPtr->dictSize; + + const BYTE* smallest = dictEnd; + if (smallest > (const BYTE*) source) smallest = (const BYTE*) source; + LZ4_renormDictT(streamPtr, smallest); + + result = LZ4_compress_generic(streamPtr, source, dest, inputSize, 0, notLimited, byU32, usingExtDict, noDictIssue, 1); + + streamPtr->dictionary = (const BYTE*)source; + streamPtr->dictSize = (U32)inputSize; + streamPtr->currentOffset += (U32)inputSize; + + return result; +} + + +/*! LZ4_saveDict() : + * If previously compressed data block is not guaranteed to remain available at its memory location, + * save it into a safer place (char* safeBuffer). + * Note : you don't need to call LZ4_loadDict() afterwards, + * dictionary is immediately usable, you can therefore call LZ4_compress_fast_continue(). + * Return : saved dictionary size in bytes (necessarily <= dictSize), or 0 if error. + */ +int LZ4_saveDict (LZ4_stream_t* LZ4_dict, char* safeBuffer, int dictSize) +{ + LZ4_stream_t_internal* const dict = &LZ4_dict->internal_donotuse; + const BYTE* const previousDictEnd = dict->dictionary + dict->dictSize; + + if ((U32)dictSize > 64 KB) dictSize = 64 KB; /* useless to define a dictionary > 64 KB */ + if ((U32)dictSize > dict->dictSize) dictSize = dict->dictSize; + + memmove(safeBuffer, previousDictEnd - dictSize, dictSize); + + dict->dictionary = (const BYTE*)safeBuffer; + dict->dictSize = (U32)dictSize; + + return dictSize; +} + + + +/*-***************************** +* Decompression functions +*******************************/ +/*! LZ4_decompress_generic() : + * This generic decompression function cover all use cases. + * It shall be instantiated several times, using different sets of directives + * Note that it is important this generic function is really inlined, + * in order to remove useless branches during compilation optimization. + */ +FORCE_INLINE int LZ4_decompress_generic( + const char* const source, + char* const dest, + int inputSize, + int outputSize, /* If endOnInput==endOnInputSize, this value is the max size of Output Buffer. */ + + int endOnInput, /* endOnOutputSize, endOnInputSize */ + int partialDecoding, /* full, partial */ + int targetOutputSize, /* only used if partialDecoding==partial */ + int dict, /* noDict, withPrefix64k, usingExtDict */ + const BYTE* const lowPrefix, /* == dest when no prefix */ + const BYTE* const dictStart, /* only if dict==usingExtDict */ + const size_t dictSize /* note : = 0 if noDict */ + ) +{ + /* Local Variables */ + const BYTE* ip = (const BYTE*) source; + const BYTE* const iend = ip + inputSize; + + BYTE* op = (BYTE*) dest; + BYTE* const oend = op + outputSize; + BYTE* cpy; + BYTE* oexit = op + targetOutputSize; + const BYTE* const lowLimit = lowPrefix - dictSize; + + const BYTE* const dictEnd = (const BYTE*)dictStart + dictSize; + const unsigned dec32table[] = {0, 1, 2, 1, 4, 4, 4, 4}; + const int dec64table[] = {0, 0, 0, -1, 0, 1, 2, 3}; + + const int safeDecode = (endOnInput==endOnInputSize); + const int checkOffset = ((safeDecode) && (dictSize < (int)(64 KB))); + + + /* Special cases */ + if ((partialDecoding) && (oexit > oend-MFLIMIT)) oexit = oend-MFLIMIT; /* targetOutputSize too high => decode everything */ + if ((endOnInput) && (unlikely(outputSize==0))) return ((inputSize==1) && (*ip==0)) ? 0 : -1; /* Empty output buffer */ + if ((!endOnInput) && (unlikely(outputSize==0))) return (*ip==0?1:-1); + + /* Main Loop : decode sequences */ + while (1) { + size_t length; + const BYTE* match; + size_t offset; + + /* get literal length */ + unsigned const token = *ip++; + if ((length=(token>>ML_BITS)) == RUN_MASK) { + unsigned s; + do { + s = *ip++; + length += s; + } while ( likely(endOnInput ? ip(partialDecoding?oexit:oend-MFLIMIT)) || (ip+length>iend-(2+1+LASTLITERALS))) ) + || ((!endOnInput) && (cpy>oend-WILDCOPYLENGTH)) ) + { + if (partialDecoding) { + if (cpy > oend) goto _output_error; /* Error : write attempt beyond end of output buffer */ + if ((endOnInput) && (ip+length > iend)) goto _output_error; /* Error : read attempt beyond end of input buffer */ + } else { + if ((!endOnInput) && (cpy != oend)) goto _output_error; /* Error : block decoding must stop exactly there */ + if ((endOnInput) && ((ip+length != iend) || (cpy > oend))) goto _output_error; /* Error : input must be consumed */ + } + memcpy(op, ip, length); + ip += length; + op += length; + break; /* Necessarily EOF, due to parsing restrictions */ + } + LZ4_wildCopy(op, ip, cpy); + ip += length; op = cpy; + + /* get offset */ + offset = LZ4_readLE16(ip); ip+=2; + match = op - offset; + if ((checkOffset) && (unlikely(match < lowLimit))) goto _output_error; /* Error : offset outside buffers */ + LZ4_write32(op, (U32)offset); /* costs ~1%; silence an msan warning when offset==0 */ + + /* get matchlength */ + length = token & ML_MASK; + if (length == ML_MASK) { + unsigned s; + do { + s = *ip++; + if ((endOnInput) && (ip > iend-LASTLITERALS)) goto _output_error; + length += s; + } while (s==255); + if ((safeDecode) && unlikely((uptrval)(op)+length<(uptrval)op)) goto _output_error; /* overflow detection */ + } + length += MINMATCH; + + /* check external dictionary */ + if ((dict==usingExtDict) && (match < lowPrefix)) { + if (unlikely(op+length > oend-LASTLITERALS)) goto _output_error; /* doesn't respect parsing restriction */ + + if (length <= (size_t)(lowPrefix-match)) { + /* match can be copied as a single segment from external dictionary */ + memmove(op, dictEnd - (lowPrefix-match), length); + op += length; + } else { + /* match encompass external dictionary and current block */ + size_t const copySize = (size_t)(lowPrefix-match); + size_t const restSize = length - copySize; + memcpy(op, dictEnd - copySize, copySize); + op += copySize; + if (restSize > (size_t)(op-lowPrefix)) { /* overlap copy */ + BYTE* const endOfMatch = op + restSize; + const BYTE* copyFrom = lowPrefix; + while (op < endOfMatch) *op++ = *copyFrom++; + } else { + memcpy(op, lowPrefix, restSize); + op += restSize; + } } + continue; + } + + /* copy match within block */ + cpy = op + length; + if (unlikely(offset<8)) { + const int dec64 = dec64table[offset]; + op[0] = match[0]; + op[1] = match[1]; + op[2] = match[2]; + op[3] = match[3]; + match += dec32table[offset]; + memcpy(op+4, match, 4); + match -= dec64; + } else { LZ4_copy8(op, match); match+=8; } + op += 8; + + if (unlikely(cpy>oend-12)) { + BYTE* const oCopyLimit = oend-(WILDCOPYLENGTH-1); + if (cpy > oend-LASTLITERALS) goto _output_error; /* Error : last LASTLITERALS bytes must be literals (uncompressed) */ + if (op < oCopyLimit) { + LZ4_wildCopy(op, match, oCopyLimit); + match += oCopyLimit - op; + op = oCopyLimit; + } + while (op16) LZ4_wildCopy(op+8, match+8, cpy); + } + op=cpy; /* correction */ + } + + /* end of decoding */ + if (endOnInput) + return (int) (((char*)op)-dest); /* Nb of output bytes decoded */ + else + return (int) (((const char*)ip)-source); /* Nb of input bytes read */ + + /* Overflow error detected */ +_output_error: + return (int) (-(((const char*)ip)-source))-1; +} + + +int LZ4_decompress_safe(const char* source, char* dest, int compressedSize, int maxDecompressedSize) +{ + return LZ4_decompress_generic(source, dest, compressedSize, maxDecompressedSize, endOnInputSize, full, 0, noDict, (BYTE*)dest, NULL, 0); +} + +int LZ4_decompress_safe_partial(const char* source, char* dest, int compressedSize, int targetOutputSize, int maxDecompressedSize) +{ + return LZ4_decompress_generic(source, dest, compressedSize, maxDecompressedSize, endOnInputSize, partial, targetOutputSize, noDict, (BYTE*)dest, NULL, 0); +} + +int LZ4_decompress_fast(const char* source, char* dest, int originalSize) +{ + return LZ4_decompress_generic(source, dest, 0, originalSize, endOnOutputSize, full, 0, withPrefix64k, (BYTE*)(dest - 64 KB), NULL, 64 KB); +} + + +/*===== streaming decompression functions =====*/ + +LZ4_streamDecode_t* LZ4_createStreamDecode(void) +{ + LZ4_streamDecode_t* lz4s = (LZ4_streamDecode_t*) ALLOCATOR(1, sizeof(LZ4_streamDecode_t)); + return lz4s; +} + +int LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_stream) +{ + if (!LZ4_stream) return 0; /* support free on NULL */ + FREEMEM(LZ4_stream); + return 0; +} + +/*! + * LZ4_setStreamDecode() : + * Use this function to instruct where to find the dictionary. + * This function is not necessary if previous data is still available where it was decoded. + * Loading a size of 0 is allowed (same effect as no dictionary). + * Return : 1 if OK, 0 if error + */ +int LZ4_setStreamDecode (LZ4_streamDecode_t* LZ4_streamDecode, const char* dictionary, int dictSize) +{ + LZ4_streamDecode_t_internal* lz4sd = &LZ4_streamDecode->internal_donotuse; + lz4sd->prefixSize = (size_t) dictSize; + lz4sd->prefixEnd = (const BYTE*) dictionary + dictSize; + lz4sd->externalDict = NULL; + lz4sd->extDictSize = 0; + return 1; +} + +/* +*_continue() : + These decoding functions allow decompression of multiple blocks in "streaming" mode. + Previously decoded blocks must still be available at the memory position where they were decoded. + If it's not possible, save the relevant part of decoded data into a safe buffer, + and indicate where it stands using LZ4_setStreamDecode() +*/ +int LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* source, char* dest, int compressedSize, int maxOutputSize) +{ + LZ4_streamDecode_t_internal* lz4sd = &LZ4_streamDecode->internal_donotuse; + int result; + + if (lz4sd->prefixEnd == (BYTE*)dest) { + result = LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, + endOnInputSize, full, 0, + usingExtDict, lz4sd->prefixEnd - lz4sd->prefixSize, lz4sd->externalDict, lz4sd->extDictSize); + if (result <= 0) return result; + lz4sd->prefixSize += result; + lz4sd->prefixEnd += result; + } else { + lz4sd->extDictSize = lz4sd->prefixSize; + lz4sd->externalDict = lz4sd->prefixEnd - lz4sd->extDictSize; + result = LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, + endOnInputSize, full, 0, + usingExtDict, (BYTE*)dest, lz4sd->externalDict, lz4sd->extDictSize); + if (result <= 0) return result; + lz4sd->prefixSize = result; + lz4sd->prefixEnd = (BYTE*)dest + result; + } + + return result; +} + +int LZ4_decompress_fast_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* source, char* dest, int originalSize) +{ + LZ4_streamDecode_t_internal* lz4sd = &LZ4_streamDecode->internal_donotuse; + int result; + + if (lz4sd->prefixEnd == (BYTE*)dest) { + result = LZ4_decompress_generic(source, dest, 0, originalSize, + endOnOutputSize, full, 0, + usingExtDict, lz4sd->prefixEnd - lz4sd->prefixSize, lz4sd->externalDict, lz4sd->extDictSize); + if (result <= 0) return result; + lz4sd->prefixSize += originalSize; + lz4sd->prefixEnd += originalSize; + } else { + lz4sd->extDictSize = lz4sd->prefixSize; + lz4sd->externalDict = lz4sd->prefixEnd - lz4sd->extDictSize; + result = LZ4_decompress_generic(source, dest, 0, originalSize, + endOnOutputSize, full, 0, + usingExtDict, (BYTE*)dest, lz4sd->externalDict, lz4sd->extDictSize); + if (result <= 0) return result; + lz4sd->prefixSize = originalSize; + lz4sd->prefixEnd = (BYTE*)dest + originalSize; + } + + return result; +} + + +/* +Advanced decoding functions : +*_usingDict() : + These decoding functions work the same as "_continue" ones, + the dictionary must be explicitly provided within parameters +*/ + +FORCE_INLINE int LZ4_decompress_usingDict_generic(const char* source, char* dest, int compressedSize, int maxOutputSize, int safe, const char* dictStart, int dictSize) +{ + if (dictSize==0) + return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, safe, full, 0, noDict, (BYTE*)dest, NULL, 0); + if (dictStart+dictSize == dest) { + if (dictSize >= (int)(64 KB - 1)) + return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, safe, full, 0, withPrefix64k, (BYTE*)dest-64 KB, NULL, 0); + return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, safe, full, 0, noDict, (BYTE*)dest-dictSize, NULL, 0); + } + return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, safe, full, 0, usingExtDict, (BYTE*)dest, (const BYTE*)dictStart, dictSize); +} + +int LZ4_decompress_safe_usingDict(const char* source, char* dest, int compressedSize, int maxOutputSize, const char* dictStart, int dictSize) +{ + return LZ4_decompress_usingDict_generic(source, dest, compressedSize, maxOutputSize, 1, dictStart, dictSize); +} + +int LZ4_decompress_fast_usingDict(const char* source, char* dest, int originalSize, const char* dictStart, int dictSize) +{ + return LZ4_decompress_usingDict_generic(source, dest, 0, originalSize, 0, dictStart, dictSize); +} + +/* debug function */ +int LZ4_decompress_safe_forceExtDict(const char* source, char* dest, int compressedSize, int maxOutputSize, const char* dictStart, int dictSize) +{ + return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, endOnInputSize, full, 0, usingExtDict, (BYTE*)dest, (const BYTE*)dictStart, dictSize); +} + + +/*=************************************************* +* Obsolete Functions +***************************************************/ +/* obsolete compression functions */ +int LZ4_compress_limitedOutput(const char* source, char* dest, int inputSize, int maxOutputSize) { return LZ4_compress_default(source, dest, inputSize, maxOutputSize); } +int LZ4_compress(const char* source, char* dest, int inputSize) { return LZ4_compress_default(source, dest, inputSize, LZ4_compressBound(inputSize)); } +int LZ4_compress_limitedOutput_withState (void* state, const char* src, char* dst, int srcSize, int dstSize) { return LZ4_compress_fast_extState(state, src, dst, srcSize, dstSize, 1); } +int LZ4_compress_withState (void* state, const char* src, char* dst, int srcSize) { return LZ4_compress_fast_extState(state, src, dst, srcSize, LZ4_compressBound(srcSize), 1); } +int LZ4_compress_limitedOutput_continue (LZ4_stream_t* LZ4_stream, const char* src, char* dst, int srcSize, int maxDstSize) { return LZ4_compress_fast_continue(LZ4_stream, src, dst, srcSize, maxDstSize, 1); } +int LZ4_compress_continue (LZ4_stream_t* LZ4_stream, const char* source, char* dest, int inputSize) { return LZ4_compress_fast_continue(LZ4_stream, source, dest, inputSize, LZ4_compressBound(inputSize), 1); } + +/* +These function names are deprecated and should no longer be used. +They are only provided here for compatibility with older user programs. +- LZ4_uncompress is totally equivalent to LZ4_decompress_fast +- LZ4_uncompress_unknownOutputSize is totally equivalent to LZ4_decompress_safe +*/ +int LZ4_uncompress (const char* source, char* dest, int outputSize) { return LZ4_decompress_fast(source, dest, outputSize); } +int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, int isize, int maxOutputSize) { return LZ4_decompress_safe(source, dest, isize, maxOutputSize); } + + +/* Obsolete Streaming functions */ + +int LZ4_sizeofStreamState() { return LZ4_STREAMSIZE; } + +static void LZ4_init(LZ4_stream_t* lz4ds, BYTE* base) +{ + MEM_INIT(lz4ds, 0, sizeof(LZ4_stream_t)); + lz4ds->internal_donotuse.bufferStart = base; +} + +int LZ4_resetStreamState(void* state, char* inputBuffer) +{ + if ((((uptrval)state) & 3) != 0) return 1; /* Error : pointer is not aligned on 4-bytes boundary */ + LZ4_init((LZ4_stream_t*)state, (BYTE*)inputBuffer); + return 0; +} + +void* LZ4_create (char* inputBuffer) +{ + LZ4_stream_t* lz4ds = (LZ4_stream_t*)ALLOCATOR(8, sizeof(LZ4_stream_t)); + LZ4_init (lz4ds, (BYTE*)inputBuffer); + return lz4ds; +} + +char* LZ4_slideInputBuffer (void* LZ4_Data) +{ + LZ4_stream_t_internal* ctx = &((LZ4_stream_t*)LZ4_Data)->internal_donotuse; + int dictSize = LZ4_saveDict((LZ4_stream_t*)LZ4_Data, (char*)ctx->bufferStart, 64 KB); + return (char*)(ctx->bufferStart + dictSize); +} + +/* Obsolete streaming decompression functions */ + +int LZ4_decompress_safe_withPrefix64k(const char* source, char* dest, int compressedSize, int maxOutputSize) +{ + return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, endOnInputSize, full, 0, withPrefix64k, (BYTE*)dest - 64 KB, NULL, 64 KB); +} + +int LZ4_decompress_fast_withPrefix64k(const char* source, char* dest, int originalSize) +{ + return LZ4_decompress_generic(source, dest, 0, originalSize, endOnOutputSize, full, 0, withPrefix64k, (BYTE*)dest - 64 KB, NULL, 64 KB); +} + +#endif /* LZ4_COMMONDEFS_ONLY */ diff --git a/samtools/lz4/lz4.h b/samtools/lz4/lz4.h new file mode 100644 index 0000000..86ca0d5 --- /dev/null +++ b/samtools/lz4/lz4.h @@ -0,0 +1,463 @@ +/* + * LZ4 - Fast LZ compression algorithm + * Header File + * Copyright (C) 2011-2017, Yann Collet. + + BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + You can contact the author at : + - LZ4 homepage : http://www.lz4.org + - LZ4 source repository : https://github.com/lz4/lz4 +*/ +#if defined (__cplusplus) +extern "C" { +#endif + +#ifndef LZ4_H_2983827168210 +#define LZ4_H_2983827168210 + +/* --- Dependency --- */ +#include /* size_t */ + + +/** + Introduction + + LZ4 is lossless compression algorithm, providing compression speed at 400 MB/s per core, + scalable with multi-cores CPU. It features an extremely fast decoder, with speed in + multiple GB/s per core, typically reaching RAM speed limits on multi-core systems. + + The LZ4 compression library provides in-memory compression and decompression functions. + Compression can be done in: + - a single step (described as Simple Functions) + - a single step, reusing a context (described in Advanced Functions) + - unbounded multiple steps (described as Streaming compression) + + lz4.h provides block compression functions. It gives full buffer control to user. + Decompressing an lz4-compressed block also requires metadata (such as compressed size). + Each application is free to encode such metadata in whichever way it wants. + + An additional format, called LZ4 frame specification (doc/lz4_Frame_format.md), + take care of encoding standard metadata alongside LZ4-compressed blocks. + If your application requires interoperability, it's recommended to use it. + A library is provided to take care of it, see lz4frame.h. +*/ + +/*^*************************************************************** +* Export parameters +*****************************************************************/ +/* +* LZ4_DLL_EXPORT : +* Enable exporting of functions when building a Windows DLL +* LZ4LIB_API : +* Control library symbols visibility. +*/ +#if defined(LZ4_DLL_EXPORT) && (LZ4_DLL_EXPORT==1) +# define LZ4LIB_API __declspec(dllexport) +#elif defined(LZ4_DLL_IMPORT) && (LZ4_DLL_IMPORT==1) +# define LZ4LIB_API __declspec(dllimport) /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/ +#elif defined(__GNUC__) && (__GNUC__ >= 4) +# define LZ4LIB_API __attribute__ ((__visibility__ ("default"))) +#else +# define LZ4LIB_API +#endif + + +/*------ Version ------*/ +#define LZ4_VERSION_MAJOR 1 /* for breaking interface changes */ +#define LZ4_VERSION_MINOR 8 /* for new (non-breaking) interface capabilities */ +#define LZ4_VERSION_RELEASE 0 /* for tweaks, bug-fixes, or development */ + +#define LZ4_VERSION_NUMBER (LZ4_VERSION_MAJOR *100*100 + LZ4_VERSION_MINOR *100 + LZ4_VERSION_RELEASE) + +#define LZ4_LIB_VERSION LZ4_VERSION_MAJOR.LZ4_VERSION_MINOR.LZ4_VERSION_RELEASE +#define LZ4_QUOTE(str) #str +#define LZ4_EXPAND_AND_QUOTE(str) LZ4_QUOTE(str) +#define LZ4_VERSION_STRING LZ4_EXPAND_AND_QUOTE(LZ4_LIB_VERSION) + +LZ4LIB_API int LZ4_versionNumber (void); /**< library version number; to be used when checking dll version */ +LZ4LIB_API const char* LZ4_versionString (void); /**< library version string; to be used when checking dll version */ + + +/*-************************************ +* Tuning parameter +**************************************/ +/*! + * LZ4_MEMORY_USAGE : + * Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.) + * Increasing memory usage improves compression ratio + * Reduced memory usage can improve speed, due to cache effect + * Default value is 14, for 16KB, which nicely fits into Intel x86 L1 cache + */ +#ifndef LZ4_MEMORY_USAGE +# define LZ4_MEMORY_USAGE 14 +#endif + +/*-************************************ +* Simple Functions +**************************************/ +/*! LZ4_compress_default() : + Compresses 'sourceSize' bytes from buffer 'source' + into already allocated 'dest' buffer of size 'maxDestSize'. + Compression is guaranteed to succeed if 'maxDestSize' >= LZ4_compressBound(sourceSize). + It also runs faster, so it's a recommended setting. + If the function cannot compress 'source' into a more limited 'dest' budget, + compression stops *immediately*, and the function result is zero. + As a consequence, 'dest' content is not valid. + This function never writes outside 'dest' buffer, nor read outside 'source' buffer. + sourceSize : Max supported value is LZ4_MAX_INPUT_VALUE + maxDestSize : full or partial size of buffer 'dest' (which must be already allocated) + return : the number of bytes written into buffer 'dest' (necessarily <= maxOutputSize) + or 0 if compression fails */ +LZ4LIB_API int LZ4_compress_default(const char* source, char* dest, int sourceSize, int maxDestSize); + +/*! LZ4_decompress_safe() : + compressedSize : is the precise full size of the compressed block. + maxDecompressedSize : is the size of destination buffer, which must be already allocated. + return : the number of bytes decompressed into destination buffer (necessarily <= maxDecompressedSize) + If destination buffer is not large enough, decoding will stop and output an error code (<0). + If the source stream is detected malformed, the function will stop decoding and return a negative result. + This function is protected against buffer overflow exploits, including malicious data packets. + It never writes outside output buffer, nor reads outside input buffer. +*/ +LZ4LIB_API int LZ4_decompress_safe (const char* source, char* dest, int compressedSize, int maxDecompressedSize); + + +/*-************************************ +* Advanced Functions +**************************************/ +#define LZ4_MAX_INPUT_SIZE 0x7E000000 /* 2 113 929 216 bytes */ +#define LZ4_COMPRESSBOUND(isize) ((unsigned)(isize) > (unsigned)LZ4_MAX_INPUT_SIZE ? 0 : (isize) + ((isize)/255) + 16) + +/*! +LZ4_compressBound() : + Provides the maximum size that LZ4 compression may output in a "worst case" scenario (input data not compressible) + This function is primarily useful for memory allocation purposes (destination buffer size). + Macro LZ4_COMPRESSBOUND() is also provided for compilation-time evaluation (stack memory allocation for example). + Note that LZ4_compress_default() compress faster when dest buffer size is >= LZ4_compressBound(srcSize) + inputSize : max supported value is LZ4_MAX_INPUT_SIZE + return : maximum output size in a "worst case" scenario + or 0, if input size is too large ( > LZ4_MAX_INPUT_SIZE) +*/ +LZ4LIB_API int LZ4_compressBound(int inputSize); + +/*! +LZ4_compress_fast() : + Same as LZ4_compress_default(), but allows to select an "acceleration" factor. + The larger the acceleration value, the faster the algorithm, but also the lesser the compression. + It's a trade-off. It can be fine tuned, with each successive value providing roughly +~3% to speed. + An acceleration value of "1" is the same as regular LZ4_compress_default() + Values <= 0 will be replaced by ACCELERATION_DEFAULT (see lz4.c), which is 1. +*/ +LZ4LIB_API int LZ4_compress_fast (const char* source, char* dest, int sourceSize, int maxDestSize, int acceleration); + + +/*! +LZ4_compress_fast_extState() : + Same compression function, just using an externally allocated memory space to store compression state. + Use LZ4_sizeofState() to know how much memory must be allocated, + and allocate it on 8-bytes boundaries (using malloc() typically). + Then, provide it as 'void* state' to compression function. +*/ +LZ4LIB_API int LZ4_sizeofState(void); +LZ4LIB_API int LZ4_compress_fast_extState (void* state, const char* source, char* dest, int inputSize, int maxDestSize, int acceleration); + + +/*! +LZ4_compress_destSize() : + Reverse the logic, by compressing as much data as possible from 'source' buffer + into already allocated buffer 'dest' of size 'targetDestSize'. + This function either compresses the entire 'source' content into 'dest' if it's large enough, + or fill 'dest' buffer completely with as much data as possible from 'source'. + *sourceSizePtr : will be modified to indicate how many bytes where read from 'source' to fill 'dest'. + New value is necessarily <= old value. + return : Nb bytes written into 'dest' (necessarily <= targetDestSize) + or 0 if compression fails +*/ +LZ4LIB_API int LZ4_compress_destSize (const char* source, char* dest, int* sourceSizePtr, int targetDestSize); + + +/*! +LZ4_decompress_fast() : + originalSize : is the original and therefore uncompressed size + return : the number of bytes read from the source buffer (in other words, the compressed size) + If the source stream is detected malformed, the function will stop decoding and return a negative result. + Destination buffer must be already allocated. Its size must be a minimum of 'originalSize' bytes. + note : This function fully respect memory boundaries for properly formed compressed data. + It is a bit faster than LZ4_decompress_safe(). + However, it does not provide any protection against intentionally modified data stream (malicious input). + Use this function in trusted environment only (data to decode comes from a trusted source). +*/ +LZ4LIB_API int LZ4_decompress_fast (const char* source, char* dest, int originalSize); + +/*! +LZ4_decompress_safe_partial() : + This function decompress a compressed block of size 'compressedSize' at position 'source' + into destination buffer 'dest' of size 'maxDecompressedSize'. + The function tries to stop decompressing operation as soon as 'targetOutputSize' has been reached, + reducing decompression time. + return : the number of bytes decoded in the destination buffer (necessarily <= maxDecompressedSize) + Note : this number can be < 'targetOutputSize' should the compressed block to decode be smaller. + Always control how many bytes were decoded. + If the source stream is detected malformed, the function will stop decoding and return a negative result. + This function never writes outside of output buffer, and never reads outside of input buffer. It is therefore protected against malicious data packets +*/ +LZ4LIB_API int LZ4_decompress_safe_partial (const char* source, char* dest, int compressedSize, int targetOutputSize, int maxDecompressedSize); + + +/*-********************************************* +* Streaming Compression Functions +***********************************************/ +typedef union LZ4_stream_u LZ4_stream_t; /* incomplete type (defined later) */ + +/*! LZ4_createStream() and LZ4_freeStream() : + * LZ4_createStream() will allocate and initialize an `LZ4_stream_t` structure. + * LZ4_freeStream() releases its memory. + */ +LZ4LIB_API LZ4_stream_t* LZ4_createStream(void); +LZ4LIB_API int LZ4_freeStream (LZ4_stream_t* streamPtr); + +/*! LZ4_resetStream() : + * An LZ4_stream_t structure can be allocated once and re-used multiple times. + * Use this function to init an allocated `LZ4_stream_t` structure and start a new compression. + */ +LZ4LIB_API void LZ4_resetStream (LZ4_stream_t* streamPtr); + +/*! LZ4_loadDict() : + * Use this function to load a static dictionary into LZ4_stream. + * Any previous data will be forgotten, only 'dictionary' will remain in memory. + * Loading a size of 0 is allowed. + * Return : dictionary size, in bytes (necessarily <= 64 KB) + */ +LZ4LIB_API int LZ4_loadDict (LZ4_stream_t* streamPtr, const char* dictionary, int dictSize); + +/*! LZ4_compress_fast_continue() : + * Compress buffer content 'src', using data from previously compressed blocks as dictionary to improve compression ratio. + * Important : Previous data blocks are assumed to remain present and unmodified ! + * 'dst' buffer must be already allocated. + * If dstCapacity >= LZ4_compressBound(srcSize), compression is guaranteed to succeed, and runs faster. + * If not, and if compressed data cannot fit into 'dst' buffer size, compression stops, and function @return==0. + * After an error, the stream status is invalid, it can only be reset or freed. + */ +LZ4LIB_API int LZ4_compress_fast_continue (LZ4_stream_t* streamPtr, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration); + +/*! LZ4_saveDict() : + * If previously compressed data block is not guaranteed to remain available at its current memory location, + * save it into a safer place (char* safeBuffer). + * Note : it's not necessary to call LZ4_loadDict() after LZ4_saveDict(), dictionary is immediately usable. + * @return : saved dictionary size in bytes (necessarily <= dictSize), or 0 if error. + */ +LZ4LIB_API int LZ4_saveDict (LZ4_stream_t* streamPtr, char* safeBuffer, int dictSize); + + +/*-********************************************** +* Streaming Decompression Functions +* Bufferless synchronous API +************************************************/ +typedef union LZ4_streamDecode_u LZ4_streamDecode_t; /* incomplete type (defined later) */ + +/*! LZ4_createStreamDecode() and LZ4_freeStreamDecode() : + * creation / destruction of streaming decompression tracking structure */ +LZ4LIB_API LZ4_streamDecode_t* LZ4_createStreamDecode(void); +LZ4LIB_API int LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_stream); + +/*! LZ4_setStreamDecode() : + * Use this function to instruct where to find the dictionary. + * Setting a size of 0 is allowed (same effect as reset). + * @return : 1 if OK, 0 if error + */ +LZ4LIB_API int LZ4_setStreamDecode (LZ4_streamDecode_t* LZ4_streamDecode, const char* dictionary, int dictSize); + +/*! LZ4_decompress_*_continue() : + * These decoding functions allow decompression of multiple blocks in "streaming" mode. + * Previously decoded blocks *must* remain available at the memory position where they were decoded (up to 64 KB) + * In the case of a ring buffers, decoding buffer must be either : + * - Exactly same size as encoding buffer, with same update rule (block boundaries at same positions) + * In which case, the decoding & encoding ring buffer can have any size, including very small ones ( < 64 KB). + * - Larger than encoding buffer, by a minimum of maxBlockSize more bytes. + * maxBlockSize is implementation dependent. It's the maximum size you intend to compress into a single block. + * In which case, encoding and decoding buffers do not need to be synchronized, + * and encoding ring buffer can have any size, including small ones ( < 64 KB). + * - _At least_ 64 KB + 8 bytes + maxBlockSize. + * In which case, encoding and decoding buffers do not need to be synchronized, + * and encoding ring buffer can have any size, including larger than decoding buffer. + * Whenever these conditions are not possible, save the last 64KB of decoded data into a safe buffer, + * and indicate where it is saved using LZ4_setStreamDecode() +*/ +LZ4LIB_API int LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* source, char* dest, int compressedSize, int maxDecompressedSize); +LZ4LIB_API int LZ4_decompress_fast_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* source, char* dest, int originalSize); + + +/*! LZ4_decompress_*_usingDict() : + * These decoding functions work the same as + * a combination of LZ4_setStreamDecode() followed by LZ4_decompress_*_continue() + * They are stand-alone, and don't need an LZ4_streamDecode_t structure. + */ +LZ4LIB_API int LZ4_decompress_safe_usingDict (const char* source, char* dest, int compressedSize, int maxDecompressedSize, const char* dictStart, int dictSize); +LZ4LIB_API int LZ4_decompress_fast_usingDict (const char* source, char* dest, int originalSize, const char* dictStart, int dictSize); + + +/*^********************************************** + * !!!!!! STATIC LINKING ONLY !!!!!! + ***********************************************/ +/*-************************************ + * Private definitions + ************************************** + * Do not use these definitions. + * They are exposed to allow static allocation of `LZ4_stream_t` and `LZ4_streamDecode_t`. + * Using these definitions will expose code to API and/or ABI break in future versions of the library. + **************************************/ +#define LZ4_HASHLOG (LZ4_MEMORY_USAGE-2) +#define LZ4_HASHTABLESIZE (1 << LZ4_MEMORY_USAGE) +#define LZ4_HASH_SIZE_U32 (1 << LZ4_HASHLOG) /* required as macro for static allocation */ + +#if defined(__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) +#include + +typedef struct { + uint32_t hashTable[LZ4_HASH_SIZE_U32]; + uint32_t currentOffset; + uint32_t initCheck; + const uint8_t* dictionary; + uint8_t* bufferStart; /* obsolete, used for slideInputBuffer */ + uint32_t dictSize; +} LZ4_stream_t_internal; + +typedef struct { + const uint8_t* externalDict; + size_t extDictSize; + const uint8_t* prefixEnd; + size_t prefixSize; +} LZ4_streamDecode_t_internal; + +#else + +typedef struct { + unsigned int hashTable[LZ4_HASH_SIZE_U32]; + unsigned int currentOffset; + unsigned int initCheck; + const unsigned char* dictionary; + unsigned char* bufferStart; /* obsolete, used for slideInputBuffer */ + unsigned int dictSize; +} LZ4_stream_t_internal; + +typedef struct { + const unsigned char* externalDict; + size_t extDictSize; + const unsigned char* prefixEnd; + size_t prefixSize; +} LZ4_streamDecode_t_internal; + +#endif + +/*! + * LZ4_stream_t : + * information structure to track an LZ4 stream. + * init this structure before first use. + * note : only use in association with static linking ! + * this definition is not API/ABI safe, + * it may change in a future version ! + */ +#define LZ4_STREAMSIZE_U64 ((1 << (LZ4_MEMORY_USAGE-3)) + 4) +#define LZ4_STREAMSIZE (LZ4_STREAMSIZE_U64 * sizeof(unsigned long long)) +union LZ4_stream_u { + unsigned long long table[LZ4_STREAMSIZE_U64]; + LZ4_stream_t_internal internal_donotuse; +} ; /* previously typedef'd to LZ4_stream_t */ + + +/*! + * LZ4_streamDecode_t : + * information structure to track an LZ4 stream during decompression. + * init this structure using LZ4_setStreamDecode (or memset()) before first use + * note : only use in association with static linking ! + * this definition is not API/ABI safe, + * and may change in a future version ! + */ +#define LZ4_STREAMDECODESIZE_U64 4 +#define LZ4_STREAMDECODESIZE (LZ4_STREAMDECODESIZE_U64 * sizeof(unsigned long long)) +union LZ4_streamDecode_u { + unsigned long long table[LZ4_STREAMDECODESIZE_U64]; + LZ4_streamDecode_t_internal internal_donotuse; +} ; /* previously typedef'd to LZ4_streamDecode_t */ + + +/*-************************************ +* Obsolete Functions +**************************************/ + +/*! Deprecation warnings + Should deprecation warnings be a problem, + it is generally possible to disable them, + typically with -Wno-deprecated-declarations for gcc + or _CRT_SECURE_NO_WARNINGS in Visual. + Otherwise, it's also possible to define LZ4_DISABLE_DEPRECATE_WARNINGS */ +#ifdef LZ4_DISABLE_DEPRECATE_WARNINGS +# define LZ4_DEPRECATED(message) /* disable deprecation warnings */ +#else +# define LZ4_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) +# if defined (__cplusplus) && (__cplusplus >= 201402) /* C++14 or greater */ +# define LZ4_DEPRECATED(message) [[deprecated(message)]] +# elif (LZ4_GCC_VERSION >= 405) || defined(__clang__) +# define LZ4_DEPRECATED(message) __attribute__((deprecated(message))) +# elif (LZ4_GCC_VERSION >= 301) +# define LZ4_DEPRECATED(message) __attribute__((deprecated)) +# elif defined(_MSC_VER) +# define LZ4_DEPRECATED(message) __declspec(deprecated(message)) +# else +# pragma message("WARNING: You need to implement LZ4_DEPRECATED for this compiler") +# define LZ4_DEPRECATED(message) +# endif +#endif /* LZ4_DISABLE_DEPRECATE_WARNINGS */ + +/* Obsolete compression functions */ +LZ4LIB_API LZ4_DEPRECATED("use LZ4_compress_default() instead") int LZ4_compress (const char* source, char* dest, int sourceSize); +LZ4LIB_API LZ4_DEPRECATED("use LZ4_compress_default() instead") int LZ4_compress_limitedOutput (const char* source, char* dest, int sourceSize, int maxOutputSize); +LZ4LIB_API LZ4_DEPRECATED("use LZ4_compress_fast_extState() instead") int LZ4_compress_withState (void* state, const char* source, char* dest, int inputSize); +LZ4LIB_API LZ4_DEPRECATED("use LZ4_compress_fast_extState() instead") int LZ4_compress_limitedOutput_withState (void* state, const char* source, char* dest, int inputSize, int maxOutputSize); +LZ4LIB_API LZ4_DEPRECATED("use LZ4_compress_fast_continue() instead") int LZ4_compress_continue (LZ4_stream_t* LZ4_streamPtr, const char* source, char* dest, int inputSize); +LZ4LIB_API LZ4_DEPRECATED("use LZ4_compress_fast_continue() instead") int LZ4_compress_limitedOutput_continue (LZ4_stream_t* LZ4_streamPtr, const char* source, char* dest, int inputSize, int maxOutputSize); + +/* Obsolete decompression functions */ +LZ4LIB_API LZ4_DEPRECATED("use LZ4_decompress_fast() instead") int LZ4_uncompress (const char* source, char* dest, int outputSize); +LZ4LIB_API LZ4_DEPRECATED("use LZ4_decompress_safe() instead") int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, int isize, int maxOutputSize); + +/* Obsolete streaming functions; use new streaming interface whenever possible */ +LZ4LIB_API LZ4_DEPRECATED("use LZ4_createStream() instead") void* LZ4_create (char* inputBuffer); +LZ4LIB_API LZ4_DEPRECATED("use LZ4_createStream() instead") int LZ4_sizeofStreamState(void); +LZ4LIB_API LZ4_DEPRECATED("use LZ4_resetStream() instead") int LZ4_resetStreamState(void* state, char* inputBuffer); +LZ4LIB_API LZ4_DEPRECATED("use LZ4_saveDict() instead") char* LZ4_slideInputBuffer (void* state); + +/* Obsolete streaming decoding functions */ +LZ4LIB_API LZ4_DEPRECATED("use LZ4_decompress_safe_usingDict() instead") int LZ4_decompress_safe_withPrefix64k (const char* src, char* dst, int compressedSize, int maxDstSize); +LZ4LIB_API LZ4_DEPRECATED("use LZ4_decompress_fast_usingDict() instead") int LZ4_decompress_fast_withPrefix64k (const char* src, char* dst, int originalSize); + +#endif /* LZ4_H_2983827168210 */ + + +#if defined (__cplusplus) +} +#endif diff --git a/samtools/misc/ace2sam.c b/samtools/misc/ace2sam.c new file mode 100644 index 0000000..19727eb --- /dev/null +++ b/samtools/misc/ace2sam.c @@ -0,0 +1,254 @@ +/* The MIT License + + Copyright (c) 2011 Heng Li + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ + +#include + +#include +#include +#include +#include +#include +#include "htslib/kstring.h" +#include "htslib/kseq.h" +KSTREAM_INIT(gzFile, gzread, 16384) + +#define N_TMPSTR 5 +#define LINE_LEN 60 + +// append a CIGAR operation plus length +#define write_cigar(_c, _n, _m, _v) do { \ + if (_n == _m) { \ + _m = _m? _m<<1 : 4; \ + _c = realloc(_c, _m * sizeof(unsigned)); \ + } \ + _c[_n++] = (_v); \ + } while (0) + +// a fatal error +static void fatal(const char *msg) +{ + fprintf(stderr, "E %s\n", msg); + exit(1); +} +// remove pads +static void remove_pads(const kstring_t *src, kstring_t *dst) +{ + int i, j; + dst->l = 0; + kputsn(src->s, src->l, dst); + for (i = j = 0; i < dst->l; ++i) + if (dst->s[i] != '*') dst->s[j++] = dst->s[i]; + dst->s[j] = 0; + dst->l = j; +} + +int main(int argc, char *argv[]) +{ + gzFile fp; + kstream_t *ks; + kstring_t s, t[N_TMPSTR]; + int dret, i, k, af_n, af_max, af_i, c, is_padded = 0, write_cns = 0, *p2u = 0; + long m_cigar = 0, n_cigar = 0; + unsigned *af, *cigar = 0; + + while ((c = getopt(argc, argv, "pc")) >= 0) { + switch (c) { + case 'p': is_padded = 1; break; + case 'c': write_cns = 1; break; + } + } + if (argc == optind) { + fprintf(stderr, "\nUsage: ace2sam [-pc] \n\n"); + fprintf(stderr, "Options: -p output padded SAM\n"); + fprintf(stderr, " -c write the contig sequence in SAM\n\n"); + fprintf(stderr, "Notes: 1. Fields must appear in the following order: (CO->[BQ]->(AF)->(RD->QA))\n"); + fprintf(stderr, " 2. The order of reads in AF and in RD must be identical\n"); + fprintf(stderr, " 3. Except in BQ, words and numbers must be separated by a single SPACE or TAB\n"); + fprintf(stderr, " 4. This program writes the headerless SAM to stdout and header to stderr\n\n"); + return 1; + } + + s.l = s.m = 0; s.s = 0; + af_n = af_max = af_i = 0; af = 0; + for (i = 0; i < N_TMPSTR; ++i) t[i].l = t[i].m = 0, t[i].s = 0; + fp = strcmp(argv[1], "-")? gzopen(argv[optind], "r") : gzdopen(fileno(stdin), "r"); + ks = ks_init(fp); + while (ks_getuntil(ks, 0, &s, &dret) >= 0) { + if (strcmp(s.s, "CO") == 0) { // contig sequence + kstring_t *cns; + t[0].l = t[1].l = t[2].l = t[3].l = t[4].l = 0; // 0: name; 1: padded ctg; 2: unpadded ctg/padded read; 3: unpadded read; 4: SAM line + af_n = af_i = 0; // reset the af array + ks_getuntil(ks, 0, &s, &dret); kputs(s.s, &t[0]); // contig name + ks_getuntil(ks, '\n', &s, &dret); // read the whole line + while (ks_getuntil(ks, '\n', &s, &dret) >= 0 && s.l > 0) kputsn(s.s, s.l, &t[1]); // read the padded consensus sequence + remove_pads(&t[1], &t[2]); // construct the unpadded sequence + // compute the array for mapping padded positions to unpadded positions + p2u = realloc(p2u, t[1].m * sizeof(int)); + for (i = k = 0; i < t[1].l; ++i) { + p2u[i] = k; + if (t[1].s[i] != '*') ++k; + } + // write out the SAM header and contig sequences + fprintf(stderr, "H @SQ\tSN:%s\tLN:%llu\n", t[0].s, (unsigned long long)(t[is_padded?1:2].l)); // The SAM header line + cns = &t[is_padded?1:2]; + fprintf(stderr, "S >%s\n", t[0].s); + for (i = 0; i < cns->l; i += LINE_LEN) { + fputs("S ", stderr); + for (k = 0; k < LINE_LEN && i + k < cns->l; ++k) + fputc(cns->s[i + k], stderr); + fputc('\n', stderr); + } + +#define __padded2cigar(sp) do { \ + int i, l_M = 0, l_D = 0; \ + for (i = 0; i < sp.l; ++i) { \ + if (sp.s[i] == '*') { \ + if (l_M) write_cigar(cigar, n_cigar, m_cigar, l_M<<4); \ + ++l_D; l_M = 0; \ + } else { \ + if (l_D) write_cigar(cigar, n_cigar, m_cigar, l_D<<4 | 2); \ + ++l_M; l_D = 0; \ + } \ + } \ + if (l_M) write_cigar(cigar, n_cigar, m_cigar, l_M<<4); \ + else write_cigar(cigar, n_cigar, m_cigar, l_D<<4 | 2); \ + } while (0) + + if (write_cns) { // write the consensus SAM line (dummy read) + n_cigar = 0; + if (is_padded) __padded2cigar(t[1]); + else write_cigar(cigar, n_cigar, m_cigar, t[2].l<<4); + kputsn(t[0].s, t[0].l, &t[4]); kputs("\t516\t", &t[4]); kputsn(t[0].s, t[0].l, &t[4]); kputs("\t1\t60\t", &t[4]); + for (i = 0; i < n_cigar; ++i) { + kputw(cigar[i]>>4, &t[4]); kputc("MIDNSHP=X"[cigar[i]&0xf], &t[4]); + } + kputs("\t*\t0\t0\t", &t[4]); kputsn(t[2].s, t[2].l, &t[4]); kputs("\t*", &t[4]); + } + } else if (strcmp(s.s, "BQ") == 0) { // contig quality + if (t[0].l == 0) fatal("come to 'BQ' before reading 'CO'"); + if (dret != '\n') ks_getuntil(ks, '\n', &s, &dret); // read the entire "BQ" line + if (write_cns) t[4].s[--t[4].l] = 0; // remove the trailing "*" + for (i = 0; i < t[2].l; ++i) { // read the consensus quality + int q; + if (ks_getuntil(ks, 0, &s, &dret) < 0) fprintf(stderr, "E truncated contig quality\n"); + if (s.l) { + q = atoi(s.s) + 33; + if (q > 126) q = 126; + if (write_cns) kputc(q, &t[4]); + } else --i; + } + if (dret != '\n') ks_getuntil(ks, '\n', &s, &dret); + ks_getuntil(ks, '\n', &s, &dret); // skip the empty line + if (write_cns) { + if (t[4].l) puts(t[4].s); + t[4].l = 0; + } + } else if (strcmp(s.s, "AF") == 0) { // padded read position + int reversed, neg, pos; + if (t[0].l == 0) fatal("come to 'AF' before reading 'CO'"); + if (write_cns) { + if (t[4].l) puts(t[4].s); + t[4].l = 0; + } + ks_getuntil(ks, 0, &s, &dret); // read name + ks_getuntil(ks, 0, &s, &dret); reversed = s.s[0] == 'C'? 1 : 0; // strand + ks_getuntil(ks, 0, &s, &dret); pos = atoi(s.s); neg = pos < 0? 1 : 0; pos = pos < 0? -pos : pos; // position + if (af_n == af_max) { // double the af array + af_max = af_max? af_max<<1 : 4; + af = realloc(af, af_max * sizeof(unsigned)); + } + af[af_n++] = pos << 2 | neg << 1 | reversed; // keep the placement information + } else if (strcmp(s.s, "RD") == 0) { // read sequence + if (af_i >= af_n) fatal("more 'RD' records than 'AF'"); + t[2].l = t[3].l = t[4].l = 0; + ks_getuntil(ks, 0, &t[4], &dret); // QNAME + if (dret != '\n') ks_getuntil(ks, '\n', &s, &dret); // read the entire RD line + while (ks_getuntil(ks, '\n', &s, &dret) >= 0 && s.l > 0) kputs(s.s, &t[2]); // read the read sequence + } else if (strcmp(s.s, "QA") == 0) { // clipping + if (af_i >= af_n) fatal("more 'QA' records than 'AF'"); + int beg, end, pos, op; + ks_getuntil(ks, 0, &s, &dret); ks_getuntil(ks, 0, &s, &dret); // skip quality clipping + ks_getuntil(ks, 0, &s, &dret); beg = atoi(s.s) - 1; // align clipping start + ks_getuntil(ks, 0, &s, &dret); end = atoi(s.s); // clipping end + if (dret != '\n') ks_getuntil(ks, '\n', &s, &dret); + // compute 1-based POS + pos = af[af_i]>>2; // retrieve the position information + if (af[af_i]>>1&1) pos = -pos; + pos += beg; // now pos is the true padded position + // generate CIGAR + remove_pads(&t[2], &t[3]); // backup the unpadded read sequence + n_cigar = 0; + if (beg) write_cigar(cigar, n_cigar, m_cigar, beg<<4|4); + if (is_padded) { + __padded2cigar(t[2]); + if (beg && n_cigar > 1) cigar[1] -= beg<<4; // fix the left-hand CIGAR + if (end < t[2].l && n_cigar) cigar[n_cigar-1] -= (t[2].l - end)<<4; // fix the right-hand CIGAR + } else { + // generate flattened CIGAR string + for (i = beg, k = pos - 1; i < end; ++i, ++k) + t[2].s[i] = t[2].s[i] != '*'? (t[1].s[k] != '*'? 0 : 1) : (t[1].s[k] != '*'? 2 : 6); + // generate the proper CIGAR + for (i = beg + 1, k = 1, op = t[2].s[beg]; i < end; ++i) { + if (op != t[2].s[i]) { + write_cigar(cigar, n_cigar, m_cigar, k<<4|op); + op = t[2].s[i]; k = 1; + } else ++k; + } + write_cigar(cigar, n_cigar, m_cigar, k<<4|op); + // remove unnecessary "P" and possibly merge adjacent operations + for (i = 2; i < n_cigar; ++i) { + if ((cigar[i]&0xf) != 1 && (cigar[i-1]&0xf) == 6 && (cigar[i-2]&0xf) != 1) { + cigar[i-1] = 0; + if ((cigar[i]&0xf) == (cigar[i-2]&0xf)) // merge operations + cigar[i] += cigar[i-2], cigar[i-2] = 0; + } + } + for (i = k = 0; i < n_cigar; ++i) // squeeze out dumb operations + if (cigar[i]) cigar[k++] = cigar[i]; + n_cigar = k; + } + if (end < t[2].l) write_cigar(cigar, n_cigar, m_cigar, (t[2].l - end)<<4|4); + // write the SAM line for the read + kputc('\t', &t[4]); // QNAME has already been written + kputw((af[af_i]&1)? 16 : 0, &t[4]); kputc('\t', &t[4]); // FLAG + kputsn(t[0].s, t[0].l, &t[4]); kputc('\t', &t[4]); // RNAME + kputw(is_padded? pos : p2u[pos-1]+1, &t[4]); // POS + kputs("\t60\t", &t[4]); // MAPQ + for (i = 0; i < n_cigar; ++i) { // CIGAR + kputw(cigar[i]>>4, &t[4]); kputc("MIDNSHP=X"[cigar[i]&0xf], &t[4]); + } + kputs("\t*\t0\t0\t", &t[4]); // empty MRNM, MPOS and TLEN + kputsn(t[3].s, t[3].l, &t[4]); // unpadded SEQ + kputs("\t*", &t[4]); // QUAL + puts(t[4].s); // print to stdout + ++af_i; + } else if (dret != '\n') ks_getuntil(ks, '\n', &s, &dret); + } + ks_destroy(ks); + gzclose(fp); + free(af); free(s.s); free(cigar); free(p2u); + for (i = 0; i < N_TMPSTR; ++i) free(t[i].s); + return 0; +} diff --git a/samtools/misc/ace2sam.c.pysam.c b/samtools/misc/ace2sam.c.pysam.c new file mode 100644 index 0000000..1135967 --- /dev/null +++ b/samtools/misc/ace2sam.c.pysam.c @@ -0,0 +1,256 @@ +#include "samtools.pysam.h" + +/* The MIT License + + Copyright (c) 2011 Heng Li + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ + +#include + +#include +#include +#include +#include +#include +#include "htslib/kstring.h" +#include "htslib/kseq.h" +KSTREAM_INIT(gzFile, gzread, 16384) + +#define N_TMPSTR 5 +#define LINE_LEN 60 + +// append a CIGAR operation plus length +#define write_cigar(_c, _n, _m, _v) do { \ + if (_n == _m) { \ + _m = _m? _m<<1 : 4; \ + _c = realloc(_c, _m * sizeof(unsigned)); \ + } \ + _c[_n++] = (_v); \ + } while (0) + +// a fatal error +static void fatal(const char *msg) +{ + fprintf(samtools_stderr, "E %s\n", msg); + exit(1); +} +// remove pads +static void remove_pads(const kstring_t *src, kstring_t *dst) +{ + int i, j; + dst->l = 0; + kputsn(src->s, src->l, dst); + for (i = j = 0; i < dst->l; ++i) + if (dst->s[i] != '*') dst->s[j++] = dst->s[i]; + dst->s[j] = 0; + dst->l = j; +} + +int samtools_ace2sam_main(int argc, char *argv[]) +{ + gzFile fp; + kstream_t *ks; + kstring_t s, t[N_TMPSTR]; + int dret, i, k, af_n, af_max, af_i, c, is_padded = 0, write_cns = 0, *p2u = 0; + long m_cigar = 0, n_cigar = 0; + unsigned *af, *cigar = 0; + + while ((c = getopt(argc, argv, "pc")) >= 0) { + switch (c) { + case 'p': is_padded = 1; break; + case 'c': write_cns = 1; break; + } + } + if (argc == optind) { + fprintf(samtools_stderr, "\nUsage: ace2sam [-pc] \n\n"); + fprintf(samtools_stderr, "Options: -p output padded SAM\n"); + fprintf(samtools_stderr, " -c write the contig sequence in SAM\n\n"); + fprintf(samtools_stderr, "Notes: 1. Fields must appear in the following order: (CO->[BQ]->(AF)->(RD->QA))\n"); + fprintf(samtools_stderr, " 2. The order of reads in AF and in RD must be identical\n"); + fprintf(samtools_stderr, " 3. Except in BQ, words and numbers must be separated by a single SPACE or TAB\n"); + fprintf(samtools_stderr, " 4. This program writes the headerless SAM to samtools_stdout and header to samtools_stderr\n\n"); + return 1; + } + + s.l = s.m = 0; s.s = 0; + af_n = af_max = af_i = 0; af = 0; + for (i = 0; i < N_TMPSTR; ++i) t[i].l = t[i].m = 0, t[i].s = 0; + fp = strcmp(argv[1], "-")? gzopen(argv[optind], "r") : gzdopen(fileno(stdin), "r"); + ks = ks_init(fp); + while (ks_getuntil(ks, 0, &s, &dret) >= 0) { + if (strcmp(s.s, "CO") == 0) { // contig sequence + kstring_t *cns; + t[0].l = t[1].l = t[2].l = t[3].l = t[4].l = 0; // 0: name; 1: padded ctg; 2: unpadded ctg/padded read; 3: unpadded read; 4: SAM line + af_n = af_i = 0; // reset the af array + ks_getuntil(ks, 0, &s, &dret); kputs(s.s, &t[0]); // contig name + ks_getuntil(ks, '\n', &s, &dret); // read the whole line + while (ks_getuntil(ks, '\n', &s, &dret) >= 0 && s.l > 0) kputsn(s.s, s.l, &t[1]); // read the padded consensus sequence + remove_pads(&t[1], &t[2]); // construct the unpadded sequence + // compute the array for mapping padded positions to unpadded positions + p2u = realloc(p2u, t[1].m * sizeof(int)); + for (i = k = 0; i < t[1].l; ++i) { + p2u[i] = k; + if (t[1].s[i] != '*') ++k; + } + // write out the SAM header and contig sequences + fprintf(samtools_stderr, "H @SQ\tSN:%s\tLN:%llu\n", t[0].s, (unsigned long long)(t[is_padded?1:2].l)); // The SAM header line + cns = &t[is_padded?1:2]; + fprintf(samtools_stderr, "S >%s\n", t[0].s); + for (i = 0; i < cns->l; i += LINE_LEN) { + fputs("S ", samtools_stderr); + for (k = 0; k < LINE_LEN && i + k < cns->l; ++k) + fputc(cns->s[i + k], samtools_stderr); + fputc('\n', samtools_stderr); + } + +#define __padded2cigar(sp) do { \ + int i, l_M = 0, l_D = 0; \ + for (i = 0; i < sp.l; ++i) { \ + if (sp.s[i] == '*') { \ + if (l_M) write_cigar(cigar, n_cigar, m_cigar, l_M<<4); \ + ++l_D; l_M = 0; \ + } else { \ + if (l_D) write_cigar(cigar, n_cigar, m_cigar, l_D<<4 | 2); \ + ++l_M; l_D = 0; \ + } \ + } \ + if (l_M) write_cigar(cigar, n_cigar, m_cigar, l_M<<4); \ + else write_cigar(cigar, n_cigar, m_cigar, l_D<<4 | 2); \ + } while (0) + + if (write_cns) { // write the consensus SAM line (dummy read) + n_cigar = 0; + if (is_padded) __padded2cigar(t[1]); + else write_cigar(cigar, n_cigar, m_cigar, t[2].l<<4); + kputsn(t[0].s, t[0].l, &t[4]); kputs("\t516\t", &t[4]); kputsn(t[0].s, t[0].l, &t[4]); kputs("\t1\t60\t", &t[4]); + for (i = 0; i < n_cigar; ++i) { + kputw(cigar[i]>>4, &t[4]); kputc("MIDNSHP=X"[cigar[i]&0xf], &t[4]); + } + kputs("\t*\t0\t0\t", &t[4]); kputsn(t[2].s, t[2].l, &t[4]); kputs("\t*", &t[4]); + } + } else if (strcmp(s.s, "BQ") == 0) { // contig quality + if (t[0].l == 0) fatal("come to 'BQ' before reading 'CO'"); + if (dret != '\n') ks_getuntil(ks, '\n', &s, &dret); // read the entire "BQ" line + if (write_cns) t[4].s[--t[4].l] = 0; // remove the trailing "*" + for (i = 0; i < t[2].l; ++i) { // read the consensus quality + int q; + if (ks_getuntil(ks, 0, &s, &dret) < 0) fprintf(samtools_stderr, "E truncated contig quality\n"); + if (s.l) { + q = atoi(s.s) + 33; + if (q > 126) q = 126; + if (write_cns) kputc(q, &t[4]); + } else --i; + } + if (dret != '\n') ks_getuntil(ks, '\n', &s, &dret); + ks_getuntil(ks, '\n', &s, &dret); // skip the empty line + if (write_cns) { + if (t[4].l) fputs(t[4].s, samtools_stdout) & fputc('\n', samtools_stdout); + t[4].l = 0; + } + } else if (strcmp(s.s, "AF") == 0) { // padded read position + int reversed, neg, pos; + if (t[0].l == 0) fatal("come to 'AF' before reading 'CO'"); + if (write_cns) { + if (t[4].l) fputs(t[4].s, samtools_stdout) & fputc('\n', samtools_stdout); + t[4].l = 0; + } + ks_getuntil(ks, 0, &s, &dret); // read name + ks_getuntil(ks, 0, &s, &dret); reversed = s.s[0] == 'C'? 1 : 0; // strand + ks_getuntil(ks, 0, &s, &dret); pos = atoi(s.s); neg = pos < 0? 1 : 0; pos = pos < 0? -pos : pos; // position + if (af_n == af_max) { // double the af array + af_max = af_max? af_max<<1 : 4; + af = realloc(af, af_max * sizeof(unsigned)); + } + af[af_n++] = pos << 2 | neg << 1 | reversed; // keep the placement information + } else if (strcmp(s.s, "RD") == 0) { // read sequence + if (af_i >= af_n) fatal("more 'RD' records than 'AF'"); + t[2].l = t[3].l = t[4].l = 0; + ks_getuntil(ks, 0, &t[4], &dret); // QNAME + if (dret != '\n') ks_getuntil(ks, '\n', &s, &dret); // read the entire RD line + while (ks_getuntil(ks, '\n', &s, &dret) >= 0 && s.l > 0) kputs(s.s, &t[2]); // read the read sequence + } else if (strcmp(s.s, "QA") == 0) { // clipping + if (af_i >= af_n) fatal("more 'QA' records than 'AF'"); + int beg, end, pos, op; + ks_getuntil(ks, 0, &s, &dret); ks_getuntil(ks, 0, &s, &dret); // skip quality clipping + ks_getuntil(ks, 0, &s, &dret); beg = atoi(s.s) - 1; // align clipping start + ks_getuntil(ks, 0, &s, &dret); end = atoi(s.s); // clipping end + if (dret != '\n') ks_getuntil(ks, '\n', &s, &dret); + // compute 1-based POS + pos = af[af_i]>>2; // retrieve the position information + if (af[af_i]>>1&1) pos = -pos; + pos += beg; // now pos is the true padded position + // generate CIGAR + remove_pads(&t[2], &t[3]); // backup the unpadded read sequence + n_cigar = 0; + if (beg) write_cigar(cigar, n_cigar, m_cigar, beg<<4|4); + if (is_padded) { + __padded2cigar(t[2]); + if (beg && n_cigar > 1) cigar[1] -= beg<<4; // fix the left-hand CIGAR + if (end < t[2].l && n_cigar) cigar[n_cigar-1] -= (t[2].l - end)<<4; // fix the right-hand CIGAR + } else { + // generate flattened CIGAR string + for (i = beg, k = pos - 1; i < end; ++i, ++k) + t[2].s[i] = t[2].s[i] != '*'? (t[1].s[k] != '*'? 0 : 1) : (t[1].s[k] != '*'? 2 : 6); + // generate the proper CIGAR + for (i = beg + 1, k = 1, op = t[2].s[beg]; i < end; ++i) { + if (op != t[2].s[i]) { + write_cigar(cigar, n_cigar, m_cigar, k<<4|op); + op = t[2].s[i]; k = 1; + } else ++k; + } + write_cigar(cigar, n_cigar, m_cigar, k<<4|op); + // remove unnecessary "P" and possibly merge adjacent operations + for (i = 2; i < n_cigar; ++i) { + if ((cigar[i]&0xf) != 1 && (cigar[i-1]&0xf) == 6 && (cigar[i-2]&0xf) != 1) { + cigar[i-1] = 0; + if ((cigar[i]&0xf) == (cigar[i-2]&0xf)) // merge operations + cigar[i] += cigar[i-2], cigar[i-2] = 0; + } + } + for (i = k = 0; i < n_cigar; ++i) // squeeze out dumb operations + if (cigar[i]) cigar[k++] = cigar[i]; + n_cigar = k; + } + if (end < t[2].l) write_cigar(cigar, n_cigar, m_cigar, (t[2].l - end)<<4|4); + // write the SAM line for the read + kputc('\t', &t[4]); // QNAME has already been written + kputw((af[af_i]&1)? 16 : 0, &t[4]); kputc('\t', &t[4]); // FLAG + kputsn(t[0].s, t[0].l, &t[4]); kputc('\t', &t[4]); // RNAME + kputw(is_padded? pos : p2u[pos-1]+1, &t[4]); // POS + kputs("\t60\t", &t[4]); // MAPQ + for (i = 0; i < n_cigar; ++i) { // CIGAR + kputw(cigar[i]>>4, &t[4]); kputc("MIDNSHP=X"[cigar[i]&0xf], &t[4]); + } + kputs("\t*\t0\t0\t", &t[4]); // empty MRNM, MPOS and TLEN + kputsn(t[3].s, t[3].l, &t[4]); // unpadded SEQ + kputs("\t*", &t[4]); // QUAL + fputs(t[4].s, samtools_stdout) & fputc('\n', samtools_stdout); // print to samtools_stdout + ++af_i; + } else if (dret != '\n') ks_getuntil(ks, '\n', &s, &dret); + } + ks_destroy(ks); + gzclose(fp); + free(af); free(s.s); free(cigar); free(p2u); + for (i = 0; i < N_TMPSTR; ++i) free(t[i].s); + return 0; +} diff --git a/samtools/padding.c b/samtools/padding.c new file mode 100644 index 0000000..650aff8 --- /dev/null +++ b/samtools/padding.c @@ -0,0 +1,637 @@ +/* padding.c -- depad subcommand. + + Copyright (C) 2011, 2012 Broad Institute. + Copyright (C) 2014-2016 Genome Research Ltd. + Portions copyright (C) 2012, 2013 Peter Cock, The James Hutton Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include +#include "sam_header.h" +#include "sam_opts.h" +#include "samtools.h" + +#define bam_reg2bin(b,e) hts_reg2bin((b),(e), 14, 5) + +// The one and only function needed from sam.c. +// Explicitly here to avoid including bam.h translation layer. +extern char *samfaipath(const char *fn_ref); + +static void replace_cigar(bam1_t *b, int n, uint32_t *cigar) +{ + if (n != b->core.n_cigar) { + int o = b->core.l_qname + b->core.n_cigar * 4; + if (b->l_data + (n - b->core.n_cigar) * 4 > b->m_data) { + b->m_data = b->l_data + (n - b->core.n_cigar) * 4; + kroundup32(b->m_data); + b->data = (uint8_t*)realloc(b->data, b->m_data); + } + memmove(b->data + b->core.l_qname + n * 4, b->data + o, b->l_data - o); + memcpy(b->data + b->core.l_qname, cigar, n * 4); + b->l_data += (n - b->core.n_cigar) * 4; + b->core.n_cigar = n; + } else memcpy(b->data + b->core.l_qname, cigar, n * 4); +} + +#define write_cigar(_c, _n, _m, _v) do { \ + if (_n == _m) { \ + _m = _m? _m<<1 : 4; \ + _c = (uint32_t*)realloc(_c, _m * 4); \ + } \ + _c[_n++] = (_v); \ + } while (0) + +static int unpad_seq(bam1_t *b, kstring_t *s) +{ + // Returns 0 on success, -1 on an error + int k, j, i; + int length; + int cigar_n_warning = 0; /* Make this a global and limit to one CIGAR N warning? */ + uint32_t *cigar = bam_get_cigar(b); + uint8_t *seq = bam_get_seq(b); + + // b->core.l_qseq gives length of the SEQ entry (including soft clips, S) + // We need the padded length after alignment from the CIGAR (excluding + // soft clips S, but including pads from CIGAR D operations) + length = bam_cigar2rlen(b->core.n_cigar, cigar); + ks_resize(s, length); + for (k = 0, s->l = 0, j = 0; k < b->core.n_cigar; ++k) { + int op, ol; + op = bam_cigar_op(cigar[k]); + ol = bam_cigar_oplen(cigar[k]); + if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { + for (i = 0; i < ol; ++i, ++j) s->s[s->l++] = bam_seqi(seq, j); + } else if (op == BAM_CSOFT_CLIP) { + j += ol; + } else if (op == BAM_CHARD_CLIP) { + /* do nothing */ + } else if (op == BAM_CDEL) { + for (i = 0; i < ol; ++i) s->s[s->l++] = 0; + } else if (op == BAM_CREF_SKIP) { + /* Treat CIGAR N as D (not ideal, but better than ignoring it) */ + for (i = 0; i < ol; ++i) s->s[s->l++] = 0; + if (0 == cigar_n_warning) { + cigar_n_warning = -1; + fprintf(stderr, "[depad] WARNING: CIGAR op N treated as op D in read %s\n", bam_get_qname(b)); + } + } else { + fprintf(stderr, "[depad] ERROR: Didn't expect CIGAR op %c in read %s\n", BAM_CIGAR_STR[op], bam_get_qname(b)); + return -1; + } + } + return length != s->l; +} + +int load_unpadded_ref(faidx_t *fai, char *ref_name, int ref_len, kstring_t *seq) +{ + char base; + char *fai_ref = 0; + int fai_ref_len = 0, k; + + fai_ref = fai_fetch(fai, ref_name, &fai_ref_len); + if (fai_ref_len != ref_len) { + fprintf(stderr, "[depad] ERROR: FASTA sequence %s length %i, expected %i\n", ref_name, fai_ref_len, ref_len); + free(fai_ref); + return -1; + } + ks_resize(seq, ref_len); + seq->l = 0; + for (k = 0; k < ref_len; ++k) { + base = fai_ref[k]; + if (base == '-' || base == '*') { + // Map gaps to null to match unpad_seq function + seq->s[seq->l++] = 0; + } else { + int i = seq_nt16_table[(int)base]; + if (i == 0 || i==16) { // Equals maps to 0, anything unexpected to 16 + fprintf(stderr, "[depad] ERROR: Invalid character %c (ASCII %i) in FASTA sequence %s\n", base, (int)base, ref_name); + free(fai_ref); + return -1; + } + seq->s[seq->l++] = i; + } + } + assert(ref_len == seq->l); + free(fai_ref); + return 0; +} + +int get_unpadded_len(faidx_t *fai, char *ref_name, int padded_len) +{ + char base; + char *fai_ref = 0; + int fai_ref_len = 0, k; + int bases=0, gaps=0; + + fai_ref = fai_fetch(fai, ref_name, &fai_ref_len); + if (fai_ref_len != padded_len) { + fprintf(stderr, "[depad] ERROR: FASTA sequence '%s' length %i, expected %i\n", ref_name, fai_ref_len, padded_len); + free(fai_ref); + return -1; + } + for (k = 0; k < padded_len; ++k) { + //fprintf(stderr, "[depad] checking base %i of %i or %i\n", k+1, ref_len, strlen(fai_ref)); + base = fai_ref[k]; + if (base == '-' || base == '*') { + gaps += 1; + } else { + int i = seq_nt16_table[(int)base]; + if (i == 0 || i==16) { // Equals maps to 0, anything unexpected to 16 + fprintf(stderr, "[depad] ERROR: Invalid character %c (ASCII %i) in FASTA sequence '%s'\n", base, (int)base, ref_name); + free(fai_ref); + return -1; + } + bases += 1; + } + } + free(fai_ref); + assert (padded_len == bases + gaps); + return bases; +} + +static inline int * update_posmap(int *posmap, kstring_t ref) +{ + int i, k; + posmap = realloc(posmap, ref.m * sizeof(int)); + for (i = k = 0; i < ref.l; ++i) { + posmap[i] = k; + if (ref.s[i]) ++k; + } + return posmap; +} + +int bam_pad2unpad(samFile *in, samFile *out, bam_hdr_t *h, faidx_t *fai) +{ + bam1_t *b = 0; + kstring_t r, q; + int r_tid = -1; + uint32_t *cigar2 = 0; + int ret = 0, n2 = 0, m2 = 0, *posmap = 0; + + b = bam_init1(); + if (!b) { + fprintf(stderr, "[depad] Couldn't allocate bam struct\n"); + return -1; + } + r.l = r.m = q.l = q.m = 0; r.s = q.s = 0; + int read_ret; + while ((read_ret = sam_read1(in, h, b)) >= 0) { // read one alignment from `in' + // Cannot depad unmapped CRAM data + if (b->core.flag & BAM_FUNMAP) + goto next_seq; + + uint32_t *cigar = bam_get_cigar(b); + n2 = 0; + if (b->core.pos == 0 && b->core.tid >= 0 && strcmp(bam_get_qname(b), h->target_name[b->core.tid]) == 0) { + // fprintf(stderr, "[depad] Found embedded reference '%s'\n", bam_get_qname(b)); + r_tid = b->core.tid; + if (0!=unpad_seq(b, &r)) { + fprintf(stderr, "[depad] ERROR: Problem parsing SEQ and/or CIGAR in reference %s\n", bam_get_qname(b)); + return -1; + }; + if (h->target_len[r_tid] != r.l) { + fprintf(stderr, "[depad] ERROR: (Padded) length of '%s' is %u in BAM header, but %llu in embedded reference\n", bam_get_qname(b), h->target_len[r_tid], (unsigned long long)(r.l)); + return -1; + } + if (fai) { + // Check the embedded reference matches the FASTA file + if (load_unpadded_ref(fai, h->target_name[b->core.tid], h->target_len[b->core.tid], &q)) { + fprintf(stderr, "[depad] ERROR: Failed to load embedded reference '%s' from FASTA\n", h->target_name[b->core.tid]); + return -1; + } + assert(r.l == q.l); + int i; + for (i = 0; i < r.l; ++i) { + if (r.s[i] != q.s[i]) { + // Show gaps as ASCII 45 + fprintf(stderr, "[depad] ERROR: Embedded sequence and reference FASTA don't match for %s base %i, '%c' vs '%c'\n", + h->target_name[b->core.tid], i+1, + r.s[i] ? seq_nt16_str[(int)r.s[i]] : 45, + q.s[i] ? seq_nt16_str[(int)q.s[i]] : 45); + return -1; + } + } + } + write_cigar(cigar2, n2, m2, bam_cigar_gen(b->core.l_qseq, BAM_CMATCH)); + replace_cigar(b, n2, cigar2); + posmap = update_posmap(posmap, r); + } else if (b->core.n_cigar > 0) { + int i, k, op; + if (b->core.tid < 0) { + fprintf(stderr, "[depad] ERROR: Read '%s' has CIGAR but no RNAME\n", bam_get_qname(b)); + return -1; + } else if (b->core.tid == r_tid) { + ; // good case, reference available + //fprintf(stderr, "[depad] Have ref '%s' for read '%s'\n", h->target_name[b->core.tid], bam_get_qname(b)); + } else if (fai) { + if (load_unpadded_ref(fai, h->target_name[b->core.tid], h->target_len[b->core.tid], &r)) { + fprintf(stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", h->target_name[b->core.tid]); + return -1; + } + posmap = update_posmap(posmap, r); + r_tid = b->core.tid; + // fprintf(stderr, "[depad] Loaded %s from FASTA file\n", h->target_name[b->core.tid]); + } else { + fprintf(stderr, "[depad] ERROR: Missing %s embedded reference sequence (and no FASTA file)\n", h->target_name[b->core.tid]); + return -1; + } + if (0!=unpad_seq(b, &q)) { + fprintf(stderr, "[depad] ERROR: Problem parsing SEQ and/or CIGAR in read %s\n", bam_get_qname(b)); + return -1; + }; + if (bam_cigar_op(cigar[0]) == BAM_CSOFT_CLIP) { + write_cigar(cigar2, n2, m2, cigar[0]); + } else if (bam_cigar_op(cigar[0]) == BAM_CHARD_CLIP) { + write_cigar(cigar2, n2, m2, cigar[0]); + if (b->core.n_cigar > 2 && bam_cigar_op(cigar[1]) == BAM_CSOFT_CLIP) { + write_cigar(cigar2, n2, m2, cigar[1]); + } + } + /* Determine CIGAR operator for each base in the aligned read */ + for (i = 0, k = b->core.pos; i < q.l; ++i, ++k) + q.s[i] = q.s[i]? (r.s[k]? BAM_CMATCH : BAM_CINS) : (r.s[k]? BAM_CDEL : BAM_CPAD); + /* Include any pads if starts with an insert */ + if (q.s[0] == BAM_CINS) { + for (k = 0; k+1 < b->core.pos && !r.s[b->core.pos - k - 1]; ++k); + if (k) write_cigar(cigar2, n2, m2, bam_cigar_gen(k, BAM_CPAD)); + k = 0; + } else if (q.s[0] == BAM_CPAD) { + // Join 'k' CPAD to our first cigar op CPAD too. + for (k = 0; k+1 < b->core.pos && !r.s[b->core.pos - k - 1]; ++k); + } else { + k = 0; + } + /* Count consecutive CIGAR operators to turn into a CIGAR string */ + for (i = 1, k++, op = q.s[0]; i < q.l; ++i) { + if (op != q.s[i]) { + write_cigar(cigar2, n2, m2, bam_cigar_gen(k, op)); + op = q.s[i]; k = 1; + } else ++k; + } + write_cigar(cigar2, n2, m2, bam_cigar_gen(k, op)); + if (bam_cigar_op(cigar[b->core.n_cigar-1]) == BAM_CSOFT_CLIP) { + write_cigar(cigar2, n2, m2, cigar[b->core.n_cigar-1]); + } else if (bam_cigar_op(cigar[b->core.n_cigar-1]) == BAM_CHARD_CLIP) { + if (b->core.n_cigar > 2 && bam_cigar_op(cigar[b->core.n_cigar-2]) == BAM_CSOFT_CLIP) { + write_cigar(cigar2, n2, m2, cigar[b->core.n_cigar-2]); + } + write_cigar(cigar2, n2, m2, cigar[b->core.n_cigar-1]); + } + /* Remove redundant P operators between M/X/=/D operators, e.g. 5M2P10M -> 15M */ + int pre_op, post_op; + for (i = 2; i < n2; ++i) + if (bam_cigar_op(cigar2[i-1]) == BAM_CPAD) { + pre_op = bam_cigar_op(cigar2[i-2]); + post_op = bam_cigar_op(cigar2[i]); + /* Note don't need to check for X/= as code above will use M only */ + if ((pre_op == BAM_CMATCH || pre_op == BAM_CDEL) && (post_op == BAM_CMATCH || post_op == BAM_CDEL)) { + /* This is a redundant P operator */ + cigar2[i-1] = 0; // i.e. 0M + /* If had same operator either side, combine them in post_op */ + if (pre_op == post_op) { + /* If CIGAR M, could treat as simple integers since BAM_CMATCH is zero*/ + cigar2[i] = bam_cigar_gen(bam_cigar_oplen(cigar2[i-2]) + bam_cigar_oplen(cigar2[i]), post_op); + cigar2[i-2] = 0; // i.e. 0M + } + } + } + /* Remove the zero'd operators (0M) */ + for (i = k = 0; i < n2; ++i) + if (cigar2[i]) cigar2[k++] = cigar2[i]; + n2 = k; + replace_cigar(b, n2, cigar2); + } + /* Even unmapped reads can have a POS value, e.g. if their mate was mapped */ + if (b->core.pos != -1) b->core.pos = posmap[b->core.pos]; + if (b->core.mtid < 0 || b->core.mpos < 0) { + /* Nice case, no mate to worry about*/ + // fprintf(stderr, "[depad] Read '%s' mate not mapped\n", bam_get_qname(b)); + /* TODO - Warning if FLAG says mate should be mapped? */ + /* Clean up funny input where mate position is given but mate reference is missing: */ + b->core.mtid = -1; + b->core.mpos = -1; + } else if (b->core.mtid == b->core.tid) { + /* Nice case, same reference */ + // fprintf(stderr, "[depad] Read '%s' mate mapped to same ref\n", bam_get_qname(b)); + b->core.mpos = posmap[b->core.mpos]; + } else { + /* Nasty case, Must load alternative posmap */ + // fprintf(stderr, "[depad] Loading reference '%s' temporarily\n", h->target_name[b->core.mtid]); + if (!fai) { + fprintf(stderr, "[depad] ERROR: Needed reference %s sequence for mate (and no FASTA file)\n", h->target_name[b->core.mtid]); + return -1; + } + /* Temporarily load the other reference sequence */ + if (load_unpadded_ref(fai, h->target_name[b->core.mtid], h->target_len[b->core.mtid], &r)) { + fprintf(stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", h->target_name[b->core.mtid]); + return -1; + } + posmap = update_posmap(posmap, r); + b->core.mpos = posmap[b->core.mpos]; + /* Restore the reference and posmap*/ + if (load_unpadded_ref(fai, h->target_name[b->core.tid], h->target_len[b->core.tid], &r)) { + fprintf(stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", h->target_name[b->core.tid]); + return -1; + } + posmap = update_posmap(posmap, r); + } + /* Most reads will have been moved so safest to always recalculate the BIN value */ + b->core.bin = bam_reg2bin(b->core.pos, bam_endpos(b)); + + next_seq: + if (sam_write1(out, h, b) < 0) { + print_error_errno("depad", "error writing to output"); + return -1; + } + } + if (read_ret < -1) { + fprintf(stderr, "[depad] truncated file.\n"); + ret = 1; + } + free(r.s); free(q.s); free(posmap); + bam_destroy1(b); + return ret; +} + +bam_hdr_t * fix_header(bam_hdr_t *old, faidx_t *fai) +{ + int i = 0, unpadded_len = 0; + bam_hdr_t *header = 0 ; + unsigned short ln_found; + + header = bam_hdr_dup(old); + for (i = 0; i < old->n_targets; ++i) { + unpadded_len = get_unpadded_len(fai, old->target_name[i], old->target_len[i]); + if (unpadded_len < 0) { + fprintf(stderr, "[depad] ERROR getting unpadded length of '%s', padded length %i\n", old->target_name[i], old->target_len[i]); + } else { + header->target_len[i] = unpadded_len; + //fprintf(stderr, "[depad] Recalculating '%s' length %i -> %i\n", old->target_name[i], old->target_len[i], header->target_len[i]); + } + } + /* Duplicating the header allocated new buffer for header string */ + /* After modifying the @SQ lines it will only get smaller, since */ + /* the LN entries will be the same or shorter, and we'll remove */ + /* any MD entries (MD5 checksums). */ + assert(strlen(old->text) == strlen(header->text)); + assert (0==strcmp(old->text, header->text)); + const char *text; + text = old->text; + header->text[0] = '\0'; /* Resuse the allocated buffer */ + char * newtext = header->text; + char * end=NULL; + while (text[0]=='@') { + end = strchr(text, '\n'); + assert(end != 0); + if (text[1]=='S' && text[2]=='Q' && text[3]=='\t') { + const char *cp = text+3; + char *name = strstr(text, "\tSN:"); + char *name_end; + if (!name) { + fprintf(stderr, "Unable to find SN: header field\n"); + return NULL; + } + name += 4; + for (name_end = name; name_end != end && *name_end != '\t'; name_end++); + strcat(newtext, "@SQ"); + ln_found = 0; + + /* Parse the @SQ lines */ + while (cp != end) { + if (!ln_found && end-cp >= 2 && strncmp(cp, "LN", 2) == 0) { + // Rewrite the length + char len_buf[100]; + int tid; + unsigned int old_length, new_length; + const char *old_cp = cp; + + ln_found = 1; + + while (cp != end && *cp++ != '\t'); + old_length = (int)(cp - old_cp); + + for (tid = 0; tid < header->n_targets; tid++) { + // may want to hash this, but new header API incoming. + if (strncmp(name, header->target_name[tid], name_end - name) == 0) { + new_length = sprintf(len_buf, "LN:%d", header->target_len[tid]); + if (new_length <= old_length) { + strcat(newtext, len_buf); + } + else { + fprintf(stderr, "LN value of the reference is larger than the original!\n"); + exit(1); + } + break; + } + } + + if (cp != end) + strcat(newtext, "\t"); + } else if (end-cp >= 2 && + ((ln_found && strncmp(cp, "LN", 2) == 0) || + strncmp(cp, "M5", 2) == 0 || + strncmp(cp, "UR", 2) == 0)) + { + // skip secondary LNs + // MD5 changed during depadding; ditch it. + // URLs are also invalid. + while (cp != end && *cp++ != '\t'); + } else { + // Otherwise copy this sub-field verbatim + const char *cp_start = cp; + while (cp != end && *cp++ != '\t'); + strncat(newtext, cp_start, cp-cp_start); + } + } + + // Add newline, replacing trailing '\t' if last on line was the LN: + char *text_end = newtext + strlen(newtext); + if (text_end[-1] == '\t') + text_end[-1] = '\n'; + else + *text_end++ = '\n', *text_end = '\0'; + } else { + /* Copy this line to the new header */ + strncat(newtext, text, end - text + 1); + } + text = end + 1; + } + assert (text[0]=='\0'); + /* Check we didn't overflow the buffer */ + assert (strlen(header->text) <= strlen(old->text)); + if (strlen(header->text) < header->l_text) { + //fprintf(stderr, "[depad] Reallocating header buffer\n"); + assert (newtext == header->text); + newtext = malloc(strlen(header->text) + 1); + strcpy(newtext, header->text); + free(header->text); + header->text = newtext; + header->l_text = strlen(newtext); + } + //fprintf(stderr, "[depad] Here is the new header (pending @SQ lines),\n\n%s\n(end)\n", header->text); + return header; +} + +static int usage(int is_long_help); + +int main_pad2unpad(int argc, char *argv[]) +{ + samFile *in = 0, *out = 0; + bam_hdr_t *h = 0, *h_fix = 0; + faidx_t *fai = 0; + int c, compress_level = -1, is_long_help = 0; + char in_mode[5], out_mode[6], *fn_out = 0, *fn_list = 0; + int ret=0; + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, 0, 0, 'T', '-'), + { NULL, 0, NULL, 0 } + }; + + /* parse command-line options */ + strcpy(in_mode, "r"); strcpy(out_mode, "w"); + while ((c = getopt_long(argc, argv, "SCso:u1T:?", lopts, NULL)) >= 0) { + switch (c) { + case 'S': break; + case 'C': hts_parse_format(&ga.out, "cram"); break; + case 's': assert(compress_level == -1); hts_parse_format(&ga.out, "sam"); break; + case 'o': fn_out = strdup(optarg); break; + case 'u': + compress_level = 0; + if (ga.out.format == unknown_format) + hts_parse_format(&ga.out, "bam"); + break; + case '1': + compress_level = 1; + if (ga.out.format == unknown_format) + hts_parse_format(&ga.out, "bam"); + break; + case '?': is_long_help = 1; break; + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + fprintf(stderr, "[bam_fillmd] unrecognized option '-%c'\n\n", c); + return usage(is_long_help); + } + } + if (argc == optind) return usage(is_long_help); + + strcat(out_mode, "h"); + if (compress_level >= 0) { + char tmp[2]; + tmp[0] = compress_level + '0'; tmp[1] = '\0'; + strcat(out_mode, tmp); + } + + // Load FASTA reference (also needed for SAM -> BAM if missing header) + if (ga.reference) { + fn_list = samfaipath(ga.reference); + fai = fai_load(ga.reference); + } + // open file handlers + if ((in = sam_open_format(argv[optind], in_mode, &ga.in)) == 0) { + print_error_errno("depad", "failed to open \"%s\" for reading", argv[optind]); + ret = 1; + goto depad_end; + } + if (fn_list && hts_set_fai_filename(in, fn_list) != 0) { + fprintf(stderr, "[depad] failed to load reference file \"%s\".\n", fn_list); + ret = 1; + goto depad_end; + } + if ((h = sam_hdr_read(in)) == 0) { + fprintf(stderr, "[depad] failed to read the header from \"%s\".\n", argv[optind]); + ret = 1; + goto depad_end; + } + if (fai) { + h_fix = fix_header(h, fai); + } else { + fprintf(stderr, "[depad] Warning - reference lengths will not be corrected without FASTA reference\n"); + h_fix = h; + } + char wmode[2]; + strcat(out_mode, sam_open_mode(wmode, fn_out, NULL)==0 ? wmode : "b"); + if ((out = sam_open_format(fn_out? fn_out : "-", out_mode, &ga.out)) == 0) { + print_error_errno("depad", "failed to open \"%s\" for writing", fn_out? fn_out : "standard output"); + ret = 1; + goto depad_end; + } + + // Reference-based CRAM won't work unless we also create a new reference. + // We could embed this, but for now we take the easy option. + if (ga.out.format == cram) + hts_set_opt(out, CRAM_OPT_NO_REF, 1); + + if (sam_hdr_write(out, h_fix) != 0) { + fprintf(stderr, "[depad] failed to write header.\n"); + ret = 1; + goto depad_end; + } + + // Do the depad + if (bam_pad2unpad(in, out, h, fai) != 0) ret = 1; + +depad_end: + // close files, free and return + if (fai) fai_destroy(fai); + if (h) bam_hdr_destroy(h); + if (in) sam_close(in); + if (out && sam_close(out) < 0) { + fprintf(stderr, "[depad] error on closing output file.\n"); + ret = 1; + } + free(fn_list); free(fn_out); + return ret; +} + +static int usage(int is_long_help) +{ + fprintf(stderr, "\n"); + fprintf(stderr, "Usage: samtools depad \n\n"); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " -s Output is SAM (default is BAM)\n"); + fprintf(stderr, " -S Input is SAM (default is BAM)\n"); + fprintf(stderr, " -u Uncompressed BAM output (can't use with -s)\n"); + fprintf(stderr, " -1 Fast compression BAM output (can't use with -s)\n"); + fprintf(stderr, " -T, --reference FILE\n"); + fprintf(stderr, " Padded reference sequence file [null]\n"); + fprintf(stderr, " -o FILE Output file name [stdout]\n"); + fprintf(stderr, " -? Longer help\n"); + sam_global_opt_help(stderr, "-...--"); + + if (is_long_help) + fprintf(stderr, +"Notes:\n" +"\n" +"1. Requires embedded reference sequences (before the reads for that reference),\n" +" or ideally a FASTA file of the padded reference sequences (via a -T option).\n" +"\n" +"2. Input padded alignment reads' CIGAR strings must not use P or I operators.\n" +"\n"); + return 1; +} diff --git a/samtools/padding.c.pysam.c b/samtools/padding.c.pysam.c new file mode 100644 index 0000000..dfaedb7 --- /dev/null +++ b/samtools/padding.c.pysam.c @@ -0,0 +1,639 @@ +#include "samtools.pysam.h" + +/* padding.c -- depad subcommand. + + Copyright (C) 2011, 2012 Broad Institute. + Copyright (C) 2014-2016 Genome Research Ltd. + Portions copyright (C) 2012, 2013 Peter Cock, The James Hutton Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include +#include "sam_header.h" +#include "sam_opts.h" +#include "samtools.h" + +#define bam_reg2bin(b,e) hts_reg2bin((b),(e), 14, 5) + +// The one and only function needed from sam.c. +// Explicitly here to avoid including bam.h translation layer. +extern char *samfaipath(const char *fn_ref); + +static void replace_cigar(bam1_t *b, int n, uint32_t *cigar) +{ + if (n != b->core.n_cigar) { + int o = b->core.l_qname + b->core.n_cigar * 4; + if (b->l_data + (n - b->core.n_cigar) * 4 > b->m_data) { + b->m_data = b->l_data + (n - b->core.n_cigar) * 4; + kroundup32(b->m_data); + b->data = (uint8_t*)realloc(b->data, b->m_data); + } + memmove(b->data + b->core.l_qname + n * 4, b->data + o, b->l_data - o); + memcpy(b->data + b->core.l_qname, cigar, n * 4); + b->l_data += (n - b->core.n_cigar) * 4; + b->core.n_cigar = n; + } else memcpy(b->data + b->core.l_qname, cigar, n * 4); +} + +#define write_cigar(_c, _n, _m, _v) do { \ + if (_n == _m) { \ + _m = _m? _m<<1 : 4; \ + _c = (uint32_t*)realloc(_c, _m * 4); \ + } \ + _c[_n++] = (_v); \ + } while (0) + +static int unpad_seq(bam1_t *b, kstring_t *s) +{ + // Returns 0 on success, -1 on an error + int k, j, i; + int length; + int cigar_n_warning = 0; /* Make this a global and limit to one CIGAR N warning? */ + uint32_t *cigar = bam_get_cigar(b); + uint8_t *seq = bam_get_seq(b); + + // b->core.l_qseq gives length of the SEQ entry (including soft clips, S) + // We need the padded length after alignment from the CIGAR (excluding + // soft clips S, but including pads from CIGAR D operations) + length = bam_cigar2rlen(b->core.n_cigar, cigar); + ks_resize(s, length); + for (k = 0, s->l = 0, j = 0; k < b->core.n_cigar; ++k) { + int op, ol; + op = bam_cigar_op(cigar[k]); + ol = bam_cigar_oplen(cigar[k]); + if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { + for (i = 0; i < ol; ++i, ++j) s->s[s->l++] = bam_seqi(seq, j); + } else if (op == BAM_CSOFT_CLIP) { + j += ol; + } else if (op == BAM_CHARD_CLIP) { + /* do nothing */ + } else if (op == BAM_CDEL) { + for (i = 0; i < ol; ++i) s->s[s->l++] = 0; + } else if (op == BAM_CREF_SKIP) { + /* Treat CIGAR N as D (not ideal, but better than ignoring it) */ + for (i = 0; i < ol; ++i) s->s[s->l++] = 0; + if (0 == cigar_n_warning) { + cigar_n_warning = -1; + fprintf(samtools_stderr, "[depad] WARNING: CIGAR op N treated as op D in read %s\n", bam_get_qname(b)); + } + } else { + fprintf(samtools_stderr, "[depad] ERROR: Didn't expect CIGAR op %c in read %s\n", BAM_CIGAR_STR[op], bam_get_qname(b)); + return -1; + } + } + return length != s->l; +} + +int load_unpadded_ref(faidx_t *fai, char *ref_name, int ref_len, kstring_t *seq) +{ + char base; + char *fai_ref = 0; + int fai_ref_len = 0, k; + + fai_ref = fai_fetch(fai, ref_name, &fai_ref_len); + if (fai_ref_len != ref_len) { + fprintf(samtools_stderr, "[depad] ERROR: FASTA sequence %s length %i, expected %i\n", ref_name, fai_ref_len, ref_len); + free(fai_ref); + return -1; + } + ks_resize(seq, ref_len); + seq->l = 0; + for (k = 0; k < ref_len; ++k) { + base = fai_ref[k]; + if (base == '-' || base == '*') { + // Map gaps to null to match unpad_seq function + seq->s[seq->l++] = 0; + } else { + int i = seq_nt16_table[(int)base]; + if (i == 0 || i==16) { // Equals maps to 0, anything unexpected to 16 + fprintf(samtools_stderr, "[depad] ERROR: Invalid character %c (ASCII %i) in FASTA sequence %s\n", base, (int)base, ref_name); + free(fai_ref); + return -1; + } + seq->s[seq->l++] = i; + } + } + assert(ref_len == seq->l); + free(fai_ref); + return 0; +} + +int get_unpadded_len(faidx_t *fai, char *ref_name, int padded_len) +{ + char base; + char *fai_ref = 0; + int fai_ref_len = 0, k; + int bases=0, gaps=0; + + fai_ref = fai_fetch(fai, ref_name, &fai_ref_len); + if (fai_ref_len != padded_len) { + fprintf(samtools_stderr, "[depad] ERROR: FASTA sequence '%s' length %i, expected %i\n", ref_name, fai_ref_len, padded_len); + free(fai_ref); + return -1; + } + for (k = 0; k < padded_len; ++k) { + //fprintf(samtools_stderr, "[depad] checking base %i of %i or %i\n", k+1, ref_len, strlen(fai_ref)); + base = fai_ref[k]; + if (base == '-' || base == '*') { + gaps += 1; + } else { + int i = seq_nt16_table[(int)base]; + if (i == 0 || i==16) { // Equals maps to 0, anything unexpected to 16 + fprintf(samtools_stderr, "[depad] ERROR: Invalid character %c (ASCII %i) in FASTA sequence '%s'\n", base, (int)base, ref_name); + free(fai_ref); + return -1; + } + bases += 1; + } + } + free(fai_ref); + assert (padded_len == bases + gaps); + return bases; +} + +static inline int * update_posmap(int *posmap, kstring_t ref) +{ + int i, k; + posmap = realloc(posmap, ref.m * sizeof(int)); + for (i = k = 0; i < ref.l; ++i) { + posmap[i] = k; + if (ref.s[i]) ++k; + } + return posmap; +} + +int bam_pad2unpad(samFile *in, samFile *out, bam_hdr_t *h, faidx_t *fai) +{ + bam1_t *b = 0; + kstring_t r, q; + int r_tid = -1; + uint32_t *cigar2 = 0; + int ret = 0, n2 = 0, m2 = 0, *posmap = 0; + + b = bam_init1(); + if (!b) { + fprintf(samtools_stderr, "[depad] Couldn't allocate bam struct\n"); + return -1; + } + r.l = r.m = q.l = q.m = 0; r.s = q.s = 0; + int read_ret; + while ((read_ret = sam_read1(in, h, b)) >= 0) { // read one alignment from `in' + // Cannot depad unmapped CRAM data + if (b->core.flag & BAM_FUNMAP) + goto next_seq; + + uint32_t *cigar = bam_get_cigar(b); + n2 = 0; + if (b->core.pos == 0 && b->core.tid >= 0 && strcmp(bam_get_qname(b), h->target_name[b->core.tid]) == 0) { + // fprintf(samtools_stderr, "[depad] Found embedded reference '%s'\n", bam_get_qname(b)); + r_tid = b->core.tid; + if (0!=unpad_seq(b, &r)) { + fprintf(samtools_stderr, "[depad] ERROR: Problem parsing SEQ and/or CIGAR in reference %s\n", bam_get_qname(b)); + return -1; + }; + if (h->target_len[r_tid] != r.l) { + fprintf(samtools_stderr, "[depad] ERROR: (Padded) length of '%s' is %u in BAM header, but %llu in embedded reference\n", bam_get_qname(b), h->target_len[r_tid], (unsigned long long)(r.l)); + return -1; + } + if (fai) { + // Check the embedded reference matches the FASTA file + if (load_unpadded_ref(fai, h->target_name[b->core.tid], h->target_len[b->core.tid], &q)) { + fprintf(samtools_stderr, "[depad] ERROR: Failed to load embedded reference '%s' from FASTA\n", h->target_name[b->core.tid]); + return -1; + } + assert(r.l == q.l); + int i; + for (i = 0; i < r.l; ++i) { + if (r.s[i] != q.s[i]) { + // Show gaps as ASCII 45 + fprintf(samtools_stderr, "[depad] ERROR: Embedded sequence and reference FASTA don't match for %s base %i, '%c' vs '%c'\n", + h->target_name[b->core.tid], i+1, + r.s[i] ? seq_nt16_str[(int)r.s[i]] : 45, + q.s[i] ? seq_nt16_str[(int)q.s[i]] : 45); + return -1; + } + } + } + write_cigar(cigar2, n2, m2, bam_cigar_gen(b->core.l_qseq, BAM_CMATCH)); + replace_cigar(b, n2, cigar2); + posmap = update_posmap(posmap, r); + } else if (b->core.n_cigar > 0) { + int i, k, op; + if (b->core.tid < 0) { + fprintf(samtools_stderr, "[depad] ERROR: Read '%s' has CIGAR but no RNAME\n", bam_get_qname(b)); + return -1; + } else if (b->core.tid == r_tid) { + ; // good case, reference available + //fprintf(samtools_stderr, "[depad] Have ref '%s' for read '%s'\n", h->target_name[b->core.tid], bam_get_qname(b)); + } else if (fai) { + if (load_unpadded_ref(fai, h->target_name[b->core.tid], h->target_len[b->core.tid], &r)) { + fprintf(samtools_stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", h->target_name[b->core.tid]); + return -1; + } + posmap = update_posmap(posmap, r); + r_tid = b->core.tid; + // fprintf(samtools_stderr, "[depad] Loaded %s from FASTA file\n", h->target_name[b->core.tid]); + } else { + fprintf(samtools_stderr, "[depad] ERROR: Missing %s embedded reference sequence (and no FASTA file)\n", h->target_name[b->core.tid]); + return -1; + } + if (0!=unpad_seq(b, &q)) { + fprintf(samtools_stderr, "[depad] ERROR: Problem parsing SEQ and/or CIGAR in read %s\n", bam_get_qname(b)); + return -1; + }; + if (bam_cigar_op(cigar[0]) == BAM_CSOFT_CLIP) { + write_cigar(cigar2, n2, m2, cigar[0]); + } else if (bam_cigar_op(cigar[0]) == BAM_CHARD_CLIP) { + write_cigar(cigar2, n2, m2, cigar[0]); + if (b->core.n_cigar > 2 && bam_cigar_op(cigar[1]) == BAM_CSOFT_CLIP) { + write_cigar(cigar2, n2, m2, cigar[1]); + } + } + /* Determine CIGAR operator for each base in the aligned read */ + for (i = 0, k = b->core.pos; i < q.l; ++i, ++k) + q.s[i] = q.s[i]? (r.s[k]? BAM_CMATCH : BAM_CINS) : (r.s[k]? BAM_CDEL : BAM_CPAD); + /* Include any pads if starts with an insert */ + if (q.s[0] == BAM_CINS) { + for (k = 0; k+1 < b->core.pos && !r.s[b->core.pos - k - 1]; ++k); + if (k) write_cigar(cigar2, n2, m2, bam_cigar_gen(k, BAM_CPAD)); + k = 0; + } else if (q.s[0] == BAM_CPAD) { + // Join 'k' CPAD to our first cigar op CPAD too. + for (k = 0; k+1 < b->core.pos && !r.s[b->core.pos - k - 1]; ++k); + } else { + k = 0; + } + /* Count consecutive CIGAR operators to turn into a CIGAR string */ + for (i = 1, k++, op = q.s[0]; i < q.l; ++i) { + if (op != q.s[i]) { + write_cigar(cigar2, n2, m2, bam_cigar_gen(k, op)); + op = q.s[i]; k = 1; + } else ++k; + } + write_cigar(cigar2, n2, m2, bam_cigar_gen(k, op)); + if (bam_cigar_op(cigar[b->core.n_cigar-1]) == BAM_CSOFT_CLIP) { + write_cigar(cigar2, n2, m2, cigar[b->core.n_cigar-1]); + } else if (bam_cigar_op(cigar[b->core.n_cigar-1]) == BAM_CHARD_CLIP) { + if (b->core.n_cigar > 2 && bam_cigar_op(cigar[b->core.n_cigar-2]) == BAM_CSOFT_CLIP) { + write_cigar(cigar2, n2, m2, cigar[b->core.n_cigar-2]); + } + write_cigar(cigar2, n2, m2, cigar[b->core.n_cigar-1]); + } + /* Remove redundant P operators between M/X/=/D operators, e.g. 5M2P10M -> 15M */ + int pre_op, post_op; + for (i = 2; i < n2; ++i) + if (bam_cigar_op(cigar2[i-1]) == BAM_CPAD) { + pre_op = bam_cigar_op(cigar2[i-2]); + post_op = bam_cigar_op(cigar2[i]); + /* Note don't need to check for X/= as code above will use M only */ + if ((pre_op == BAM_CMATCH || pre_op == BAM_CDEL) && (post_op == BAM_CMATCH || post_op == BAM_CDEL)) { + /* This is a redundant P operator */ + cigar2[i-1] = 0; // i.e. 0M + /* If had same operator either side, combine them in post_op */ + if (pre_op == post_op) { + /* If CIGAR M, could treat as simple integers since BAM_CMATCH is zero*/ + cigar2[i] = bam_cigar_gen(bam_cigar_oplen(cigar2[i-2]) + bam_cigar_oplen(cigar2[i]), post_op); + cigar2[i-2] = 0; // i.e. 0M + } + } + } + /* Remove the zero'd operators (0M) */ + for (i = k = 0; i < n2; ++i) + if (cigar2[i]) cigar2[k++] = cigar2[i]; + n2 = k; + replace_cigar(b, n2, cigar2); + } + /* Even unmapped reads can have a POS value, e.g. if their mate was mapped */ + if (b->core.pos != -1) b->core.pos = posmap[b->core.pos]; + if (b->core.mtid < 0 || b->core.mpos < 0) { + /* Nice case, no mate to worry about*/ + // fprintf(samtools_stderr, "[depad] Read '%s' mate not mapped\n", bam_get_qname(b)); + /* TODO - Warning if FLAG says mate should be mapped? */ + /* Clean up funny input where mate position is given but mate reference is missing: */ + b->core.mtid = -1; + b->core.mpos = -1; + } else if (b->core.mtid == b->core.tid) { + /* Nice case, same reference */ + // fprintf(samtools_stderr, "[depad] Read '%s' mate mapped to same ref\n", bam_get_qname(b)); + b->core.mpos = posmap[b->core.mpos]; + } else { + /* Nasty case, Must load alternative posmap */ + // fprintf(samtools_stderr, "[depad] Loading reference '%s' temporarily\n", h->target_name[b->core.mtid]); + if (!fai) { + fprintf(samtools_stderr, "[depad] ERROR: Needed reference %s sequence for mate (and no FASTA file)\n", h->target_name[b->core.mtid]); + return -1; + } + /* Temporarily load the other reference sequence */ + if (load_unpadded_ref(fai, h->target_name[b->core.mtid], h->target_len[b->core.mtid], &r)) { + fprintf(samtools_stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", h->target_name[b->core.mtid]); + return -1; + } + posmap = update_posmap(posmap, r); + b->core.mpos = posmap[b->core.mpos]; + /* Restore the reference and posmap*/ + if (load_unpadded_ref(fai, h->target_name[b->core.tid], h->target_len[b->core.tid], &r)) { + fprintf(samtools_stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", h->target_name[b->core.tid]); + return -1; + } + posmap = update_posmap(posmap, r); + } + /* Most reads will have been moved so safest to always recalculate the BIN value */ + b->core.bin = bam_reg2bin(b->core.pos, bam_endpos(b)); + + next_seq: + if (sam_write1(out, h, b) < 0) { + print_error_errno("depad", "error writing to output"); + return -1; + } + } + if (read_ret < -1) { + fprintf(samtools_stderr, "[depad] truncated file.\n"); + ret = 1; + } + free(r.s); free(q.s); free(posmap); + bam_destroy1(b); + return ret; +} + +bam_hdr_t * fix_header(bam_hdr_t *old, faidx_t *fai) +{ + int i = 0, unpadded_len = 0; + bam_hdr_t *header = 0 ; + unsigned short ln_found; + + header = bam_hdr_dup(old); + for (i = 0; i < old->n_targets; ++i) { + unpadded_len = get_unpadded_len(fai, old->target_name[i], old->target_len[i]); + if (unpadded_len < 0) { + fprintf(samtools_stderr, "[depad] ERROR getting unpadded length of '%s', padded length %i\n", old->target_name[i], old->target_len[i]); + } else { + header->target_len[i] = unpadded_len; + //fprintf(samtools_stderr, "[depad] Recalculating '%s' length %i -> %i\n", old->target_name[i], old->target_len[i], header->target_len[i]); + } + } + /* Duplicating the header allocated new buffer for header string */ + /* After modifying the @SQ lines it will only get smaller, since */ + /* the LN entries will be the same or shorter, and we'll remove */ + /* any MD entries (MD5 checksums). */ + assert(strlen(old->text) == strlen(header->text)); + assert (0==strcmp(old->text, header->text)); + const char *text; + text = old->text; + header->text[0] = '\0'; /* Resuse the allocated buffer */ + char * newtext = header->text; + char * end=NULL; + while (text[0]=='@') { + end = strchr(text, '\n'); + assert(end != 0); + if (text[1]=='S' && text[2]=='Q' && text[3]=='\t') { + const char *cp = text+3; + char *name = strstr(text, "\tSN:"); + char *name_end; + if (!name) { + fprintf(samtools_stderr, "Unable to find SN: header field\n"); + return NULL; + } + name += 4; + for (name_end = name; name_end != end && *name_end != '\t'; name_end++); + strcat(newtext, "@SQ"); + ln_found = 0; + + /* Parse the @SQ lines */ + while (cp != end) { + if (!ln_found && end-cp >= 2 && strncmp(cp, "LN", 2) == 0) { + // Rewrite the length + char len_buf[100]; + int tid; + unsigned int old_length, new_length; + const char *old_cp = cp; + + ln_found = 1; + + while (cp != end && *cp++ != '\t'); + old_length = (int)(cp - old_cp); + + for (tid = 0; tid < header->n_targets; tid++) { + // may want to hash this, but new header API incoming. + if (strncmp(name, header->target_name[tid], name_end - name) == 0) { + new_length = sprintf(len_buf, "LN:%d", header->target_len[tid]); + if (new_length <= old_length) { + strcat(newtext, len_buf); + } + else { + fprintf(samtools_stderr, "LN value of the reference is larger than the original!\n"); + exit(1); + } + break; + } + } + + if (cp != end) + strcat(newtext, "\t"); + } else if (end-cp >= 2 && + ((ln_found && strncmp(cp, "LN", 2) == 0) || + strncmp(cp, "M5", 2) == 0 || + strncmp(cp, "UR", 2) == 0)) + { + // skip secondary LNs + // MD5 changed during depadding; ditch it. + // URLs are also invalid. + while (cp != end && *cp++ != '\t'); + } else { + // Otherwise copy this sub-field verbatim + const char *cp_start = cp; + while (cp != end && *cp++ != '\t'); + strncat(newtext, cp_start, cp-cp_start); + } + } + + // Add newline, replacing trailing '\t' if last on line was the LN: + char *text_end = newtext + strlen(newtext); + if (text_end[-1] == '\t') + text_end[-1] = '\n'; + else + *text_end++ = '\n', *text_end = '\0'; + } else { + /* Copy this line to the new header */ + strncat(newtext, text, end - text + 1); + } + text = end + 1; + } + assert (text[0]=='\0'); + /* Check we didn't overflow the buffer */ + assert (strlen(header->text) <= strlen(old->text)); + if (strlen(header->text) < header->l_text) { + //fprintf(samtools_stderr, "[depad] Reallocating header buffer\n"); + assert (newtext == header->text); + newtext = malloc(strlen(header->text) + 1); + strcpy(newtext, header->text); + free(header->text); + header->text = newtext; + header->l_text = strlen(newtext); + } + //fprintf(samtools_stderr, "[depad] Here is the new header (pending @SQ lines),\n\n%s\n(end)\n", header->text); + return header; +} + +static int usage(int is_long_help); + +int main_pad2unpad(int argc, char *argv[]) +{ + samFile *in = 0, *out = 0; + bam_hdr_t *h = 0, *h_fix = 0; + faidx_t *fai = 0; + int c, compress_level = -1, is_long_help = 0; + char in_mode[5], out_mode[6], *fn_out = 0, *fn_list = 0; + int ret=0; + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, 0, 0, 'T', '-'), + { NULL, 0, NULL, 0 } + }; + + /* parse command-line options */ + strcpy(in_mode, "r"); strcpy(out_mode, "w"); + while ((c = getopt_long(argc, argv, "SCso:u1T:?", lopts, NULL)) >= 0) { + switch (c) { + case 'S': break; + case 'C': hts_parse_format(&ga.out, "cram"); break; + case 's': assert(compress_level == -1); hts_parse_format(&ga.out, "sam"); break; + case 'o': fn_out = strdup(optarg); break; + case 'u': + compress_level = 0; + if (ga.out.format == unknown_format) + hts_parse_format(&ga.out, "bam"); + break; + case '1': + compress_level = 1; + if (ga.out.format == unknown_format) + hts_parse_format(&ga.out, "bam"); + break; + case '?': is_long_help = 1; break; + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + fprintf(samtools_stderr, "[bam_fillmd] unrecognized option '-%c'\n\n", c); + return usage(is_long_help); + } + } + if (argc == optind) return usage(is_long_help); + + strcat(out_mode, "h"); + if (compress_level >= 0) { + char tmp[2]; + tmp[0] = compress_level + '0'; tmp[1] = '\0'; + strcat(out_mode, tmp); + } + + // Load FASTA reference (also needed for SAM -> BAM if missing header) + if (ga.reference) { + fn_list = samfaipath(ga.reference); + fai = fai_load(ga.reference); + } + // open file handlers + if ((in = sam_open_format(argv[optind], in_mode, &ga.in)) == 0) { + print_error_errno("depad", "failed to open \"%s\" for reading", argv[optind]); + ret = 1; + goto depad_end; + } + if (fn_list && hts_set_fai_filename(in, fn_list) != 0) { + fprintf(samtools_stderr, "[depad] failed to load reference file \"%s\".\n", fn_list); + ret = 1; + goto depad_end; + } + if ((h = sam_hdr_read(in)) == 0) { + fprintf(samtools_stderr, "[depad] failed to read the header from \"%s\".\n", argv[optind]); + ret = 1; + goto depad_end; + } + if (fai) { + h_fix = fix_header(h, fai); + } else { + fprintf(samtools_stderr, "[depad] Warning - reference lengths will not be corrected without FASTA reference\n"); + h_fix = h; + } + char wmode[2]; + strcat(out_mode, sam_open_mode(wmode, fn_out, NULL)==0 ? wmode : "b"); + if ((out = sam_open_format(fn_out? fn_out : "-", out_mode, &ga.out)) == 0) { + print_error_errno("depad", "failed to open \"%s\" for writing", fn_out? fn_out : "standard output"); + ret = 1; + goto depad_end; + } + + // Reference-based CRAM won't work unless we also create a new reference. + // We could embed this, but for now we take the easy option. + if (ga.out.format == cram) + hts_set_opt(out, CRAM_OPT_NO_REF, 1); + + if (sam_hdr_write(out, h_fix) != 0) { + fprintf(samtools_stderr, "[depad] failed to write header.\n"); + ret = 1; + goto depad_end; + } + + // Do the depad + if (bam_pad2unpad(in, out, h, fai) != 0) ret = 1; + +depad_end: + // close files, free and return + if (fai) fai_destroy(fai); + if (h) bam_hdr_destroy(h); + if (in) sam_close(in); + if (out && sam_close(out) < 0) { + fprintf(samtools_stderr, "[depad] error on closing output file.\n"); + ret = 1; + } + free(fn_list); free(fn_out); + return ret; +} + +static int usage(int is_long_help) +{ + fprintf(samtools_stderr, "\n"); + fprintf(samtools_stderr, "Usage: samtools depad \n\n"); + fprintf(samtools_stderr, "Options:\n"); + fprintf(samtools_stderr, " -s Output is SAM (default is BAM)\n"); + fprintf(samtools_stderr, " -S Input is SAM (default is BAM)\n"); + fprintf(samtools_stderr, " -u Uncompressed BAM output (can't use with -s)\n"); + fprintf(samtools_stderr, " -1 Fast compression BAM output (can't use with -s)\n"); + fprintf(samtools_stderr, " -T, --reference FILE\n"); + fprintf(samtools_stderr, " Padded reference sequence file [null]\n"); + fprintf(samtools_stderr, " -o FILE Output file name [samtools_stdout]\n"); + fprintf(samtools_stderr, " -? Longer help\n"); + sam_global_opt_help(samtools_stderr, "-...--"); + + if (is_long_help) + fprintf(samtools_stderr, +"Notes:\n" +"\n" +"1. Requires embedded reference sequences (before the reads for that reference),\n" +" or ideally a FASTA file of the padded reference sequences (via a -T option).\n" +"\n" +"2. Input padded alignment reads' CIGAR strings must not use P or I operators.\n" +"\n"); + return 1; +} diff --git a/samtools/phase.c b/samtools/phase.c new file mode 100644 index 0000000..0e00d9b --- /dev/null +++ b/samtools/phase.c @@ -0,0 +1,790 @@ +/* phase.c -- phase subcommand. + + Copyright (C) 2011 Broad Institute. + Copyright (C) 2013-2016 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include +#include "htslib/hts.h" +#include "htslib/sam.h" +#include "htslib/kstring.h" +#include "sam_opts.h" +#include "samtools.h" +#include "htslib/hts_os.h" + +#include "htslib/kseq.h" +KSTREAM_INIT(gzFile, gzread, 16384) + +#define MAX_VARS 256 +#define FLIP_PENALTY 2 +#define FLIP_THRES 4 +#define MASK_THRES 3 + +#define FLAG_FIX_CHIMERA 0x1 +#define FLAG_LIST_EXCL 0x4 +#define FLAG_DROP_AMBI 0x8 + +typedef struct { + // configurations, initialized in the main function + int flag, k, min_baseQ, min_varLOD, max_depth; + // other global variables + int vpos_shift; + samFile* fp; + bam_hdr_t* fp_hdr; + char *pre; + char *out_name[3]; + samFile* out[3]; + bam_hdr_t* out_hdr[3]; + // alignment queue + int n, m; + bam1_t **b; +} phaseg_t; + +typedef struct { + int8_t seq[MAX_VARS]; // TODO: change to dynamic memory allocation! + int vpos, beg, end; + uint32_t vlen:16, single:1, flip:1, phase:1, phased:1, ambig:1; + uint32_t in:16, out:16; // in-phase and out-phase +} frag_t, *frag_p; + +#define rseq_lt(a,b) ((a)->vpos < (b)->vpos) + +#include "htslib/khash.h" +KHASH_SET_INIT_INT64(set64) +KHASH_MAP_INIT_INT64(64, frag_t) + +typedef khash_t(64) nseq_t; + +#include "htslib/ksort.h" +KSORT_INIT(rseq, frag_p, rseq_lt) + +static inline uint64_t X31_hash_string(const char *s) +{ + uint64_t h = *s; + if (h) for (++s ; *s; ++s) h = (h << 5) - h + *s; + return h; +} + +static void count1(int l, const uint8_t *seq, int *cnt) +{ + int i, j, n_ambi; + uint32_t z, x; + if (seq[l-1] == 0) return; // do nothing is the last base is ambiguous + for (i = n_ambi = 0; i < l; ++i) // collect ambiguous bases + if (seq[i] == 0) ++n_ambi; + if (l - n_ambi <= 1) return; // only one SNP + for (x = 0; x < 1u<>j&1; + ++j; + } + z = z<<1 | c; + } + ++cnt[z]; + } +} + +static int **count_all(int l, int vpos, nseq_t *hash) +{ + khint_t k; + int i, j, **cnt; + uint8_t *seq; + seq = calloc(l, 1); + cnt = calloc(vpos, sizeof(int*)); + for (i = 0; i < vpos; ++i) cnt[i] = calloc(1<vpos >= vpos || f->single) continue; // out of region; or singleton + if (f->vlen == 1) { // such reads should be flagged as deleted previously if everything is right + f->single = 1; + continue; + } + for (j = 1; j < f->vlen; ++j) { + for (i = 0; i < l; ++i) + seq[i] = j < l - 1 - i? 0 : f->seq[j - (l - 1 - i)]; + count1(l, seq, cnt[f->vpos + j]); + } + } + } + free(seq); + return cnt; +} + +// phasing +static int8_t *dynaprog(int l, int vpos, int **w) +{ + int *f[2], *curr, *prev, max, i; + int8_t **b, *h = 0; + uint32_t x, z = 1u<<(l-1), mask = (1u<>1; y1 = xc>>1; + c0 = prev[y0] + wi[x] + wi[xc]; + c1 = prev[y1] + wi[x] + wi[xc]; + if (c0 > c1) bi[x] = 0, curr[x] = c0; + else bi[x] = 1, curr[x] = c1; + } + tmp = prev; prev = curr; curr = tmp; // swap + } + { // backtrack + uint32_t max_x = 0; + int which = 0; + h = calloc(vpos, 1); + for (x = 0, max = 0, max_x = 0; x < z; ++x) + if (prev[x] > max) max = prev[x], max_x = x; + for (i = vpos - 1, x = max_x; i >= 0; --i) { + h[i] = which? (~x&1) : (x&1); + which = b[i][x]? !which : which; + x = b[i][x]? (~x&mask)>>1 : x>>1; + } + } + // free + for (i = 0; i < vpos; ++i) free(b[i]); + free(f[0]); free(f[1]); free(b); + return h; +} + +// phase each fragment +static uint64_t *fragphase(int vpos, const int8_t *path, nseq_t *hash, int flip) +{ + khint_t k; + uint64_t *pcnt; + uint32_t *left, *rght, max; + left = rght = 0; max = 0; + pcnt = calloc(vpos, 8); + for (k = 0; k < kh_end(hash); ++k) { + if (kh_exist(hash, k)) { + int i, c[2]; + frag_t *f = &kh_val(hash, k); + if (f->vpos >= vpos) continue; + // get the phase + c[0] = c[1] = 0; + for (i = 0; i < f->vlen; ++i) { + if (f->seq[i] == 0) continue; + ++c[f->seq[i] == path[f->vpos + i] + 1? 0 : 1]; + } + f->phase = c[0] > c[1]? 0 : 1; + f->in = c[f->phase]; f->out = c[1 - f->phase]; + f->phased = f->in == f->out? 0 : 1; + f->ambig = (f->in && f->out && f->out < 3 && f->in <= f->out + 1)? 1 : 0; + // fix chimera + f->flip = 0; + if (flip && c[0] >= 3 && c[1] >= 3) { + int sum[2], m, mi, md; + if (f->vlen > max) { // enlarge the array + max = f->vlen; + kroundup32(max); + left = realloc(left, max * 4); + rght = realloc(rght, max * 4); + } + for (i = 0, sum[0] = sum[1] = 0; i < f->vlen; ++i) { // get left counts + if (f->seq[i]) { + int c = f->phase? 2 - f->seq[i] : f->seq[i] - 1; + ++sum[c == path[f->vpos + i]? 0 : 1]; + } + left[i] = sum[1]<<16 | sum[0]; + } + for (i = f->vlen - 1, sum[0] = sum[1] = 0; i >= 0; --i) { // get right counts + if (f->seq[i]) { + int c = f->phase? 2 - f->seq[i] : f->seq[i] - 1; + ++sum[c == path[f->vpos + i]? 0 : 1]; + } + rght[i] = sum[1]<<16 | sum[0]; + } + // find the best flip point + for (i = m = 0, mi = -1, md = -1; i < f->vlen - 1; ++i) { + int a[2]; + a[0] = (left[i]&0xffff) + (rght[i+1]>>16&0xffff) - (rght[i+1]&0xffff) * FLIP_PENALTY; + a[1] = (left[i]>>16&0xffff) + (rght[i+1]&0xffff) - (rght[i+1]>>16&0xffff) * FLIP_PENALTY; + if (a[0] > a[1]) { + if (a[0] > m) m = a[0], md = 0, mi = i; + } else { + if (a[1] > m) m = a[1], md = 1, mi = i; + } + } + if (m - c[0] >= FLIP_THRES && m - c[1] >= FLIP_THRES) { // then flip + f->flip = 1; + if (md == 0) { // flip the tail + for (i = mi + 1; i < f->vlen; ++i) + if (f->seq[i] == 1) f->seq[i] = 2; + else if (f->seq[i] == 2) f->seq[i] = 1; + } else { // flip the head + for (i = 0; i <= mi; ++i) + if (f->seq[i] == 1) f->seq[i] = 2; + else if (f->seq[i] == 2) f->seq[i] = 1; + } + } + } + // update pcnt[] + if (!f->single) { + for (i = 0; i < f->vlen; ++i) { + int c; + if (f->seq[i] == 0) continue; + c = f->phase? 2 - f->seq[i] : f->seq[i] - 1; + if (c == path[f->vpos + i]) { + if (f->phase == 0) ++pcnt[f->vpos + i]; + else pcnt[f->vpos + i] += 1ull<<32; + } else { + if (f->phase == 0) pcnt[f->vpos + i] += 1<<16; + else pcnt[f->vpos + i] += 1ull<<48; + } + } + } + } + } + free(left); free(rght); + return pcnt; +} + +static uint64_t *genmask(int vpos, const uint64_t *pcnt, int *_n) +{ + int i, max = 0, max_i = -1, m = 0, n = 0, beg = 0, score = 0; + uint64_t *list = 0; + for (i = 0; i < vpos; ++i) { + uint64_t x = pcnt[i]; + int c[4], pre = score, s; + c[0] = x&0xffff; c[1] = x>>16&0xffff; c[2] = x>>32&0xffff; c[3] = x>>48&0xffff; + s = (c[1] + c[3] == 0)? -(c[0] + c[2]) : (c[1] + c[3] - 1); + if (c[3] > c[2]) s += c[3] - c[2]; + if (c[1] > c[0]) s += c[1] - c[0]; + score += s; + if (score < 0) score = 0; + if (pre == 0 && score > 0) beg = i; // change from zero to non-zero + if ((i == vpos - 1 || score == 0) && max >= MASK_THRES) { + if (n == m) { + m = m? m<<1 : 4; + list = realloc(list, m * 8); + } + list[n++] = (uint64_t)beg<<32 | max_i; + i = max_i; // reset i to max_i + score = 0; + } else if (score > max) max = score, max_i = i; + if (score == 0) max = 0; + } + *_n = n; + return list; +} + +// trim heading and tailing ambiguous bases; mark deleted and remove sequence +static int clean_seqs(int vpos, nseq_t *hash) +{ + khint_t k; + int ret = 0; + for (k = 0; k < kh_end(hash); ++k) { + if (kh_exist(hash, k)) { + frag_t *f = &kh_val(hash, k); + int beg, end, i; + if (f->vpos >= vpos) { + ret = 1; + continue; + } + for (i = 0; i < f->vlen; ++i) + if (f->seq[i] != 0) break; + beg = i; + for (i = f->vlen - 1; i >= 0; --i) + if (f->seq[i] != 0) break; + end = i + 1; + if (end - beg <= 0) kh_del(64, hash, k); + else { + if (beg != 0) memmove(f->seq, f->seq + beg, end - beg); + f->vpos += beg; f->vlen = end - beg; + f->single = f->vlen == 1? 1 : 0; + } + } + } + return ret; +} + +static int dump_aln(phaseg_t *g, int min_pos, const nseq_t *hash) +{ + int i, is_flip, drop_ambi; + drop_ambi = g->flag & FLAG_DROP_AMBI; + is_flip = (drand48() < 0.5); + for (i = 0; i < g->n; ++i) { + int end, which; + uint64_t key; + khint_t k; + bam1_t *b = g->b[i]; + key = X31_hash_string(bam_get_qname(b)); + end = bam_endpos(b); + if (end > min_pos) break; + k = kh_get(64, hash, key); + if (k == kh_end(hash)) which = 3; + else { + frag_t *f = &kh_val(hash, k); + if (f->ambig) which = drop_ambi? 2 : 3; + else if (f->phased && f->flip) which = 2; + else if (f->phased == 0) which = 3; + else { // phased and not flipped + char c = 'Y'; + which = f->phase; + bam_aux_append(b, "ZP", 'A', 1, (uint8_t*)&c); + } + if (which < 2 && is_flip) which = 1 - which; // increase the randomness + } + if (which == 3) which = (drand48() < 0.5); + if (sam_write1(g->out[which], g->out_hdr[which], b) < 0) { + print_error_errno("phase", "error writing to '%s'", g->out_name[which]); + return -1; + } + bam_destroy1(b); + g->b[i] = 0; + } + memmove(g->b, g->b + i, (g->n - i) * sizeof(void*)); + g->n -= i; + return 0; +} + +static int phase(phaseg_t *g, const char *chr, int vpos, uint64_t *cns, nseq_t *hash) +{ + int i, j, n_seqs = kh_size(hash), n_masked = 0, min_pos; + khint_t k; + frag_t **seqs; + int8_t *path, *sitemask; + uint64_t *pcnt, *regmask; + + if (vpos == 0) return 0; + i = clean_seqs(vpos, hash); // i is true if hash has an element with its vpos >= vpos + min_pos = i? cns[vpos]>>32 : 0x7fffffff; + if (vpos == 1) { + printf("PS\t%s\t%d\t%d\n", chr, (int)(cns[0]>>32) + 1, (int)(cns[0]>>32) + 1); + printf("M0\t%s\t%d\t%d\t%c\t%c\t%d\t0\t0\t0\t0\n//\n", chr, (int)(cns[0]>>32) + 1, (int)(cns[0]>>32) + 1, + "ACGTX"[cns[0]&3], "ACGTX"[cns[0]>>16&3], g->vpos_shift + 1); + for (k = 0; k < kh_end(hash); ++k) { + if (kh_exist(hash, k)) { + frag_t *f = &kh_val(hash, k); + if (f->vpos) continue; + f->flip = 0; + if (f->seq[0] == 0) f->phased = 0; + else f->phased = 1, f->phase = f->seq[0] - 1; + } + } + if (dump_aln(g, min_pos, hash) < 0) return -1; + ++g->vpos_shift; + return 1; + } + { // phase + int **cnt; + uint64_t *mask; + printf("PS\t%s\t%d\t%d\n", chr, (int)(cns[0]>>32) + 1, (int)(cns[vpos-1]>>32) + 1); + sitemask = calloc(vpos, 1); + cnt = count_all(g->k, vpos, hash); + path = dynaprog(g->k, vpos, cnt); + for (i = 0; i < vpos; ++i) free(cnt[i]); + free(cnt); + pcnt = fragphase(vpos, path, hash, 0); // do not fix chimeras when masking + mask = genmask(vpos, pcnt, &n_masked); + regmask = calloc(n_masked, 8); + for (i = 0; i < n_masked; ++i) { + regmask[i] = cns[mask[i]>>32]>>32<<32 | cns[(uint32_t)mask[i]]>>32; + for (j = mask[i]>>32; j <= (int32_t)mask[i]; ++j) + sitemask[j] = 1; + } + free(mask); + if (g->flag & FLAG_FIX_CHIMERA) { + free(pcnt); + pcnt = fragphase(vpos, path, hash, 1); + } + } + for (i = 0; i < n_masked; ++i) + printf("FL\t%s\t%d\t%d\n", chr, (int)(regmask[i]>>32) + 1, (int)regmask[i] + 1); + for (i = 0; i < vpos; ++i) { + uint64_t x = pcnt[i]; + int8_t c[2]; + c[0] = (cns[i]&0xffff)>>2 == 0? 4 : (cns[i]&3); + c[1] = (cns[i]>>16&0xffff)>>2 == 0? 4 : (cns[i]>>16&3); + printf("M%d\t%s\t%d\t%d\t%c\t%c\t%d\t%d\t%d\t%d\t%d\n", sitemask[i]+1, chr, (int)(cns[0]>>32) + 1, (int)(cns[i]>>32) + 1, "ACGTX"[c[path[i]]], "ACGTX"[c[1-path[i]]], + i + g->vpos_shift + 1, (int)(x&0xffff), (int)(x>>16&0xffff), (int)(x>>32&0xffff), (int)(x>>48&0xffff)); + } + free(path); free(pcnt); free(regmask); free(sitemask); + seqs = calloc(n_seqs, sizeof(frag_t*)); + for (k = 0, i = 0; k < kh_end(hash); ++k) + if (kh_exist(hash, k) && kh_val(hash, k).vpos < vpos && !kh_val(hash, k).single) + seqs[i++] = &kh_val(hash, k); + n_seqs = i; + ks_introsort_rseq(n_seqs, seqs); + for (i = 0; i < n_seqs; ++i) { + frag_t *f = seqs[i]; + printf("EV\t0\t%s\t%d\t40\t%dM\t*\t0\t0\t", chr, f->vpos + 1 + g->vpos_shift, f->vlen); + for (j = 0; j < f->vlen; ++j) { + uint32_t c = cns[f->vpos + j]; + if (f->seq[j] == 0) putchar('N'); + else putchar("ACGT"[f->seq[j] == 1? (c&3) : (c>>16&3)]); + } + printf("\t*\tYP:i:%d\tYF:i:%d\tYI:i:%d\tYO:i:%d\tYS:i:%d\n", f->phase, f->flip, f->in, f->out, f->beg+1); + } + free(seqs); + printf("//\n"); + fflush(stdout); + g->vpos_shift += vpos; + if (dump_aln(g, min_pos, hash) < 0) return -1; + return vpos; +} + +static void update_vpos(int vpos, nseq_t *hash) +{ + khint_t k; + for (k = 0; k < kh_end(hash); ++k) { + if (kh_exist(hash, k)) { + frag_t *f = &kh_val(hash, k); + if (f->vpos < vpos) kh_del(64, hash, k); // TODO: if frag_t::seq is allocated dynamically, free it + else f->vpos -= vpos; + } + } +} + +static nseq_t *shrink_hash(nseq_t *hash) // TODO: to implement +{ + return hash; +} + +static int readaln(void *data, bam1_t *b) +{ + phaseg_t *g = (phaseg_t*)data; + int ret; + while (1) + { + ret = sam_read1(g->fp, g->fp_hdr, b); + if (ret < 0) break; + if ( b->core.flag & (BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP) ) continue; + if ( g->pre ) { + if (g->n == g->m) { + g->m = g->m? g->m<<1 : 16; + g->b = realloc(g->b, g->m * sizeof(bam1_t*)); + } + g->b[g->n++] = bam_dup1(b); + } + break; + } + return ret; +} + +static khash_t(set64) *loadpos(const char *fn, bam_hdr_t *h) +{ + gzFile fp; + kstream_t *ks; + int ret, dret; + kstring_t *str; + khash_t(set64) *hash; + + hash = kh_init(set64); + str = calloc(1, sizeof(kstring_t)); + fp = strcmp(fn, "-")? gzopen(fn, "r") : gzdopen(fileno(stdin), "r"); + ks = ks_init(fp); + while (ks_getuntil(ks, 0, str, &dret) >= 0) { + int tid = bam_name2id(h, str->s); + if (tid >= 0 && dret != '\n') { + if (ks_getuntil(ks, 0, str, &dret) >= 0) { + uint64_t x = (uint64_t)tid<<32 | (atoi(str->s) - 1); + kh_put(set64, hash, x, &ret); + } else break; + } + if (dret != '\n') while ((dret = ks_getc(ks)) > 0 && dret != '\n'); + if (dret < 0) break; + } + ks_destroy(ks); + gzclose(fp); + free(str->s); free(str); + return hash; +} + +static int gl2cns(float q[16]) +{ + int i, j, min_ij; + float min, min2; + min = min2 = 1e30; min_ij = -1; + for (i = 0; i < 4; ++i) { + for (j = i; j < 4; ++j) { + if (q[i<<2|j] < min) min_ij = i<<2|j, min2 = min, min = q[i<<2|j]; + else if (q[i<<2|j] < min2) min2 = q[i<<2|j]; + } + } + return (min_ij>>2&3) == (min_ij&3)? 0 : 1<<18 | (min_ij>>2&3)<<16 | (min_ij&3) | (int)(min2 - min + .499) << 2; +} + +static int start_output(phaseg_t *g, int c, const char *middle, const htsFormat *fmt) +{ + kstring_t s = { 0, 0, NULL }; + ksprintf(&s, "%s.%s.%s", g->pre, middle, hts_format_file_extension(fmt)); + g->out_name[c] = ks_release(&s); + g->out[c] = sam_open_format(g->out_name[c], "wb", fmt); + if (! g->out[c]) { + print_error_errno("phase", "Failed to open output file '%s'", g->out_name[c]); + return -1; + } + + g->out_hdr[c] = bam_hdr_dup(g->fp_hdr); + if (sam_hdr_write(g->out[c], g->out_hdr[c]) < 0) { + print_error_errno("phase", "Failed to write header for '%s'", g->out_name[c]); + return -1; + } + + return 0; +} + +int main_phase(int argc, char *argv[]) +{ + int c, tid, pos, vpos = 0, n, lasttid = -1, max_vpos = 0, usage = 0; + const bam_pileup1_t *plp; + bam_plp_t iter; + nseq_t *seqs; + uint64_t *cns = 0; + phaseg_t g; + char *fn_list = 0; + khash_t(set64) *set = 0; + errmod_t *em; + uint16_t *bases; + + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, 0, 0, 0, '-'), + { NULL, 0, NULL, 0 } + }; + + // FIXME Leaks galore in the case of error returns + + memset(&g, 0, sizeof(phaseg_t)); + g.flag = FLAG_FIX_CHIMERA; + g.min_varLOD = 37; g.k = 13; g.min_baseQ = 13; g.max_depth = 256; + while ((c = getopt_long(argc, argv, "Q:eFq:k:b:l:D:A:", lopts, NULL)) >= 0) { + switch (c) { + case 'D': g.max_depth = atoi(optarg); break; + case 'q': g.min_varLOD = atoi(optarg); break; + case 'Q': g.min_baseQ = atoi(optarg); break; + case 'k': g.k = atoi(optarg); break; + case 'F': g.flag &= ~FLAG_FIX_CHIMERA; break; + case 'e': g.flag |= FLAG_LIST_EXCL; break; + case 'A': g.flag |= FLAG_DROP_AMBI; break; + case 'b': g.pre = strdup(optarg); break; + case 'l': fn_list = strdup(optarg); break; + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + /* else fall-through */ + case '?': usage=1; break; + } + if (usage) break; + } + if (usage || argc == optind) { + fprintf(stderr, "\n"); + fprintf(stderr, "Usage: samtools phase [options] \n\n"); + fprintf(stderr, "Options: -k INT block length [%d]\n", g.k); + fprintf(stderr, " -b STR prefix of BAMs to output [null]\n"); + fprintf(stderr, " -q INT min het phred-LOD [%d]\n", g.min_varLOD); + fprintf(stderr, " -Q INT min base quality in het calling [%d]\n", g.min_baseQ); + fprintf(stderr, " -D INT max read depth [%d]\n", g.max_depth); +// fprintf(stderr, " -l FILE list of sites to phase [null]\n"); + fprintf(stderr, " -F do not attempt to fix chimeras\n"); + fprintf(stderr, " -A drop reads with ambiguous phase\n"); +// fprintf(stderr, " -e do not discover SNPs (effective with -l)\n"); + fprintf(stderr, "\n"); + + sam_global_opt_help(stderr, "-....-"); + + return 1; + } + g.fp = sam_open_format(argv[optind], "r", &ga.in); + if (!g.fp) { + print_error_errno("phase", "Couldn't open '%s'", argv[optind]); + return 1; + } + g.fp_hdr = sam_hdr_read(g.fp); + if (g.fp_hdr == NULL) { + fprintf(stderr, "[%s] Failed to read header for '%s'\n", + __func__, argv[optind]); + return 1; + } + if (fn_list) { // read the list of sites to phase + set = loadpos(fn_list, g.fp_hdr); + free(fn_list); + } else g.flag &= ~FLAG_LIST_EXCL; + if (g.pre) { // open BAMs to write + if (ga.out.format == unknown_format) + ga.out.format = bam; // default via "wb". + + // Open each output file g.out[0..2], dupping and writing the header + if (start_output(&g, 0, "0", &ga.out) < 0 || + start_output(&g, 1, "1", &ga.out) < 0 || + start_output(&g, 2, "chimera", &ga.out) < 0) return 1; + } + + iter = bam_plp_init(readaln, &g); + g.vpos_shift = 0; + seqs = kh_init(64); + em = errmod_init(1. - 0.83); + bases = calloc(g.max_depth, 2); + printf("CC\n"); + printf("CC\tDescriptions:\nCC\n"); + printf("CC\t CC comments\n"); + printf("CC\t PS start of a phase set\n"); + printf("CC\t FL filtered region\n"); + printf("CC\t M[012] markers; 0 for singletons, 1 for phased and 2 for filtered\n"); + printf("CC\t EV supporting reads; SAM format\n"); + printf("CC\t // end of a phase set\nCC\n"); + printf("CC\tFormats of PS, FL and M[012] lines (1-based coordinates):\nCC\n"); + printf("CC\t PS chr phaseSetStart phaseSetEnd\n"); + printf("CC\t FL chr filterStart filterEnd\n"); + printf("CC\t M? chr PS pos allele0 allele1 hetIndex #supports0 #errors0 #supp1 #err1\n"); + printf("CC\nCC\n"); + fflush(stdout); + while ((plp = bam_plp_auto(iter, &tid, &pos, &n)) != 0) { + int i, k, c, tmp, dophase = 1, in_set = 0; + float q[16]; + if (tid < 0) break; + if (tid != lasttid) { // change of chromosome + g.vpos_shift = 0; + if (lasttid >= 0) { + seqs = shrink_hash(seqs); + if (phase(&g, g.fp_hdr->target_name[lasttid], + vpos, cns, seqs) < 0) { + return 1; + } + update_vpos(0x7fffffff, seqs); + } + lasttid = tid; + vpos = 0; + } + if (set && kh_get(set64, set, (uint64_t)tid<<32 | pos) != kh_end(set)) in_set = 1; + if (n > g.max_depth) continue; // do not proceed if the depth is too high + // fill the bases array and check if there is a variant + for (i = k = 0; i < n; ++i) { + const bam_pileup1_t *p = plp + i; + uint8_t *seq; + int q, baseQ, b; + if (p->is_del || p->is_refskip) continue; + baseQ = bam_get_qual(p->b)[p->qpos]; + if (baseQ < g.min_baseQ) continue; + seq = bam_get_seq(p->b); + b = seq_nt16_int[bam_seqi(seq, p->qpos)]; + if (b > 3) continue; + q = baseQ < p->b->core.qual? baseQ : p->b->core.qual; + if (q < 4) q = 4; + if (q > 63) q = 63; + bases[k++] = q<<5 | (int)bam_is_rev(p->b)<<4 | b; + } + if (k == 0) continue; + errmod_cal(em, k, 4, bases, q); // compute genotype likelihood + c = gl2cns(q); // get the consensus + // tell if to proceed + if (set && (g.flag&FLAG_LIST_EXCL) && !in_set) continue; // not in the list + if (!in_set && (c&0xffff)>>2 < g.min_varLOD) continue; // not a variant + // add the variant + if (vpos == max_vpos) { + max_vpos = max_vpos? max_vpos<<1 : 128; + cns = realloc(cns, max_vpos * 8); + } + cns[vpos] = (uint64_t)pos<<32 | c; + for (i = 0; i < n; ++i) { + const bam_pileup1_t *p = plp + i; + uint64_t key; + khint_t k; + uint8_t *seq = bam_get_seq(p->b); + frag_t *f; + if (p->is_del || p->is_refskip) continue; + if (p->b->core.qual == 0) continue; + // get the base code + c = seq_nt16_int[bam_seqi(seq, p->qpos)]; + if (c == (cns[vpos]&3)) c = 1; + else if (c == (cns[vpos]>>16&3)) c = 2; + else c = 0; + // write to seqs + key = X31_hash_string(bam_get_qname(p->b)); + k = kh_put(64, seqs, key, &tmp); + f = &kh_val(seqs, k); + if (tmp == 0) { // present in the hash table + if (vpos - f->vpos + 1 < MAX_VARS) { + f->vlen = vpos - f->vpos + 1; + f->seq[f->vlen-1] = c; + f->end = bam_endpos(p->b); + } + dophase = 0; + } else { // absent + memset(f->seq, 0, MAX_VARS); + f->beg = p->b->core.pos; + f->end = bam_endpos(p->b); + f->vpos = vpos, f->vlen = 1, f->seq[0] = c, f->single = f->phased = f->flip = f->ambig = 0; + } + } + if (dophase) { + seqs = shrink_hash(seqs); + if (phase(&g, g.fp_hdr->target_name[tid], vpos, cns, seqs) < 0) { + return 1; + } + update_vpos(vpos, seqs); + cns[0] = cns[vpos]; + vpos = 0; + } + ++vpos; + } + if (tid >= 0) { + if (phase(&g, g.fp_hdr->target_name[tid], vpos, cns, seqs) < 0) { + return 1; + } + } + bam_hdr_destroy(g.fp_hdr); + bam_plp_destroy(iter); + sam_close(g.fp); + kh_destroy(64, seqs); + kh_destroy(set64, set); + free(cns); + errmod_destroy(em); + free(bases); + if (g.pre) { + int res = 0; + for (c = 0; c <= 2; ++c) { + if (sam_close(g.out[c]) < 0) { + fprintf(stderr, "[%s] error on closing '%s'\n", + __func__, g.out_name[c]); + res = 1; + } + bam_hdr_destroy(g.out_hdr[c]); + free(g.out_name[c]); + } + free(g.pre); free(g.b); + if (res) return 1; + } + sam_global_args_free(&ga); + return 0; +} diff --git a/samtools/phase.c.pysam.c b/samtools/phase.c.pysam.c new file mode 100644 index 0000000..f74ba48 --- /dev/null +++ b/samtools/phase.c.pysam.c @@ -0,0 +1,792 @@ +#include "samtools.pysam.h" + +/* phase.c -- phase subcommand. + + Copyright (C) 2011 Broad Institute. + Copyright (C) 2013-2016 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include +#include "htslib/hts.h" +#include "htslib/sam.h" +#include "htslib/kstring.h" +#include "sam_opts.h" +#include "samtools.h" +#include "htslib/hts_os.h" + +#include "htslib/kseq.h" +KSTREAM_INIT(gzFile, gzread, 16384) + +#define MAX_VARS 256 +#define FLIP_PENALTY 2 +#define FLIP_THRES 4 +#define MASK_THRES 3 + +#define FLAG_FIX_CHIMERA 0x1 +#define FLAG_LIST_EXCL 0x4 +#define FLAG_DROP_AMBI 0x8 + +typedef struct { + // configurations, initialized in the main function + int flag, k, min_baseQ, min_varLOD, max_depth; + // other global variables + int vpos_shift; + samFile* fp; + bam_hdr_t* fp_hdr; + char *pre; + char *out_name[3]; + samFile* out[3]; + bam_hdr_t* out_hdr[3]; + // alignment queue + int n, m; + bam1_t **b; +} phaseg_t; + +typedef struct { + int8_t seq[MAX_VARS]; // TODO: change to dynamic memory allocation! + int vpos, beg, end; + uint32_t vlen:16, single:1, flip:1, phase:1, phased:1, ambig:1; + uint32_t in:16, out:16; // in-phase and out-phase +} frag_t, *frag_p; + +#define rseq_lt(a,b) ((a)->vpos < (b)->vpos) + +#include "htslib/khash.h" +KHASH_SET_INIT_INT64(set64) +KHASH_MAP_INIT_INT64(64, frag_t) + +typedef khash_t(64) nseq_t; + +#include "htslib/ksort.h" +KSORT_INIT(rseq, frag_p, rseq_lt) + +static inline uint64_t X31_hash_string(const char *s) +{ + uint64_t h = *s; + if (h) for (++s ; *s; ++s) h = (h << 5) - h + *s; + return h; +} + +static void count1(int l, const uint8_t *seq, int *cnt) +{ + int i, j, n_ambi; + uint32_t z, x; + if (seq[l-1] == 0) return; // do nothing is the last base is ambiguous + for (i = n_ambi = 0; i < l; ++i) // collect ambiguous bases + if (seq[i] == 0) ++n_ambi; + if (l - n_ambi <= 1) return; // only one SNP + for (x = 0; x < 1u<>j&1; + ++j; + } + z = z<<1 | c; + } + ++cnt[z]; + } +} + +static int **count_all(int l, int vpos, nseq_t *hash) +{ + khint_t k; + int i, j, **cnt; + uint8_t *seq; + seq = calloc(l, 1); + cnt = calloc(vpos, sizeof(int*)); + for (i = 0; i < vpos; ++i) cnt[i] = calloc(1<vpos >= vpos || f->single) continue; // out of region; or singleton + if (f->vlen == 1) { // such reads should be flagged as deleted previously if everything is right + f->single = 1; + continue; + } + for (j = 1; j < f->vlen; ++j) { + for (i = 0; i < l; ++i) + seq[i] = j < l - 1 - i? 0 : f->seq[j - (l - 1 - i)]; + count1(l, seq, cnt[f->vpos + j]); + } + } + } + free(seq); + return cnt; +} + +// phasing +static int8_t *dynaprog(int l, int vpos, int **w) +{ + int *f[2], *curr, *prev, max, i; + int8_t **b, *h = 0; + uint32_t x, z = 1u<<(l-1), mask = (1u<>1; y1 = xc>>1; + c0 = prev[y0] + wi[x] + wi[xc]; + c1 = prev[y1] + wi[x] + wi[xc]; + if (c0 > c1) bi[x] = 0, curr[x] = c0; + else bi[x] = 1, curr[x] = c1; + } + tmp = prev; prev = curr; curr = tmp; // swap + } + { // backtrack + uint32_t max_x = 0; + int which = 0; + h = calloc(vpos, 1); + for (x = 0, max = 0, max_x = 0; x < z; ++x) + if (prev[x] > max) max = prev[x], max_x = x; + for (i = vpos - 1, x = max_x; i >= 0; --i) { + h[i] = which? (~x&1) : (x&1); + which = b[i][x]? !which : which; + x = b[i][x]? (~x&mask)>>1 : x>>1; + } + } + // free + for (i = 0; i < vpos; ++i) free(b[i]); + free(f[0]); free(f[1]); free(b); + return h; +} + +// phase each fragment +static uint64_t *fragphase(int vpos, const int8_t *path, nseq_t *hash, int flip) +{ + khint_t k; + uint64_t *pcnt; + uint32_t *left, *rght, max; + left = rght = 0; max = 0; + pcnt = calloc(vpos, 8); + for (k = 0; k < kh_end(hash); ++k) { + if (kh_exist(hash, k)) { + int i, c[2]; + frag_t *f = &kh_val(hash, k); + if (f->vpos >= vpos) continue; + // get the phase + c[0] = c[1] = 0; + for (i = 0; i < f->vlen; ++i) { + if (f->seq[i] == 0) continue; + ++c[f->seq[i] == path[f->vpos + i] + 1? 0 : 1]; + } + f->phase = c[0] > c[1]? 0 : 1; + f->in = c[f->phase]; f->out = c[1 - f->phase]; + f->phased = f->in == f->out? 0 : 1; + f->ambig = (f->in && f->out && f->out < 3 && f->in <= f->out + 1)? 1 : 0; + // fix chimera + f->flip = 0; + if (flip && c[0] >= 3 && c[1] >= 3) { + int sum[2], m, mi, md; + if (f->vlen > max) { // enlarge the array + max = f->vlen; + kroundup32(max); + left = realloc(left, max * 4); + rght = realloc(rght, max * 4); + } + for (i = 0, sum[0] = sum[1] = 0; i < f->vlen; ++i) { // get left counts + if (f->seq[i]) { + int c = f->phase? 2 - f->seq[i] : f->seq[i] - 1; + ++sum[c == path[f->vpos + i]? 0 : 1]; + } + left[i] = sum[1]<<16 | sum[0]; + } + for (i = f->vlen - 1, sum[0] = sum[1] = 0; i >= 0; --i) { // get right counts + if (f->seq[i]) { + int c = f->phase? 2 - f->seq[i] : f->seq[i] - 1; + ++sum[c == path[f->vpos + i]? 0 : 1]; + } + rght[i] = sum[1]<<16 | sum[0]; + } + // find the best flip point + for (i = m = 0, mi = -1, md = -1; i < f->vlen - 1; ++i) { + int a[2]; + a[0] = (left[i]&0xffff) + (rght[i+1]>>16&0xffff) - (rght[i+1]&0xffff) * FLIP_PENALTY; + a[1] = (left[i]>>16&0xffff) + (rght[i+1]&0xffff) - (rght[i+1]>>16&0xffff) * FLIP_PENALTY; + if (a[0] > a[1]) { + if (a[0] > m) m = a[0], md = 0, mi = i; + } else { + if (a[1] > m) m = a[1], md = 1, mi = i; + } + } + if (m - c[0] >= FLIP_THRES && m - c[1] >= FLIP_THRES) { // then flip + f->flip = 1; + if (md == 0) { // flip the tail + for (i = mi + 1; i < f->vlen; ++i) + if (f->seq[i] == 1) f->seq[i] = 2; + else if (f->seq[i] == 2) f->seq[i] = 1; + } else { // flip the head + for (i = 0; i <= mi; ++i) + if (f->seq[i] == 1) f->seq[i] = 2; + else if (f->seq[i] == 2) f->seq[i] = 1; + } + } + } + // update pcnt[] + if (!f->single) { + for (i = 0; i < f->vlen; ++i) { + int c; + if (f->seq[i] == 0) continue; + c = f->phase? 2 - f->seq[i] : f->seq[i] - 1; + if (c == path[f->vpos + i]) { + if (f->phase == 0) ++pcnt[f->vpos + i]; + else pcnt[f->vpos + i] += 1ull<<32; + } else { + if (f->phase == 0) pcnt[f->vpos + i] += 1<<16; + else pcnt[f->vpos + i] += 1ull<<48; + } + } + } + } + } + free(left); free(rght); + return pcnt; +} + +static uint64_t *genmask(int vpos, const uint64_t *pcnt, int *_n) +{ + int i, max = 0, max_i = -1, m = 0, n = 0, beg = 0, score = 0; + uint64_t *list = 0; + for (i = 0; i < vpos; ++i) { + uint64_t x = pcnt[i]; + int c[4], pre = score, s; + c[0] = x&0xffff; c[1] = x>>16&0xffff; c[2] = x>>32&0xffff; c[3] = x>>48&0xffff; + s = (c[1] + c[3] == 0)? -(c[0] + c[2]) : (c[1] + c[3] - 1); + if (c[3] > c[2]) s += c[3] - c[2]; + if (c[1] > c[0]) s += c[1] - c[0]; + score += s; + if (score < 0) score = 0; + if (pre == 0 && score > 0) beg = i; // change from zero to non-zero + if ((i == vpos - 1 || score == 0) && max >= MASK_THRES) { + if (n == m) { + m = m? m<<1 : 4; + list = realloc(list, m * 8); + } + list[n++] = (uint64_t)beg<<32 | max_i; + i = max_i; // reset i to max_i + score = 0; + } else if (score > max) max = score, max_i = i; + if (score == 0) max = 0; + } + *_n = n; + return list; +} + +// trim heading and tailing ambiguous bases; mark deleted and remove sequence +static int clean_seqs(int vpos, nseq_t *hash) +{ + khint_t k; + int ret = 0; + for (k = 0; k < kh_end(hash); ++k) { + if (kh_exist(hash, k)) { + frag_t *f = &kh_val(hash, k); + int beg, end, i; + if (f->vpos >= vpos) { + ret = 1; + continue; + } + for (i = 0; i < f->vlen; ++i) + if (f->seq[i] != 0) break; + beg = i; + for (i = f->vlen - 1; i >= 0; --i) + if (f->seq[i] != 0) break; + end = i + 1; + if (end - beg <= 0) kh_del(64, hash, k); + else { + if (beg != 0) memmove(f->seq, f->seq + beg, end - beg); + f->vpos += beg; f->vlen = end - beg; + f->single = f->vlen == 1? 1 : 0; + } + } + } + return ret; +} + +static int dump_aln(phaseg_t *g, int min_pos, const nseq_t *hash) +{ + int i, is_flip, drop_ambi; + drop_ambi = g->flag & FLAG_DROP_AMBI; + is_flip = (drand48() < 0.5); + for (i = 0; i < g->n; ++i) { + int end, which; + uint64_t key; + khint_t k; + bam1_t *b = g->b[i]; + key = X31_hash_string(bam_get_qname(b)); + end = bam_endpos(b); + if (end > min_pos) break; + k = kh_get(64, hash, key); + if (k == kh_end(hash)) which = 3; + else { + frag_t *f = &kh_val(hash, k); + if (f->ambig) which = drop_ambi? 2 : 3; + else if (f->phased && f->flip) which = 2; + else if (f->phased == 0) which = 3; + else { // phased and not flipped + char c = 'Y'; + which = f->phase; + bam_aux_append(b, "ZP", 'A', 1, (uint8_t*)&c); + } + if (which < 2 && is_flip) which = 1 - which; // increase the randomness + } + if (which == 3) which = (drand48() < 0.5); + if (sam_write1(g->out[which], g->out_hdr[which], b) < 0) { + print_error_errno("phase", "error writing to '%s'", g->out_name[which]); + return -1; + } + bam_destroy1(b); + g->b[i] = 0; + } + memmove(g->b, g->b + i, (g->n - i) * sizeof(void*)); + g->n -= i; + return 0; +} + +static int phase(phaseg_t *g, const char *chr, int vpos, uint64_t *cns, nseq_t *hash) +{ + int i, j, n_seqs = kh_size(hash), n_masked = 0, min_pos; + khint_t k; + frag_t **seqs; + int8_t *path, *sitemask; + uint64_t *pcnt, *regmask; + + if (vpos == 0) return 0; + i = clean_seqs(vpos, hash); // i is true if hash has an element with its vpos >= vpos + min_pos = i? cns[vpos]>>32 : 0x7fffffff; + if (vpos == 1) { + fprintf(samtools_stdout, "PS\t%s\t%d\t%d\n", chr, (int)(cns[0]>>32) + 1, (int)(cns[0]>>32) + 1); + fprintf(samtools_stdout, "M0\t%s\t%d\t%d\t%c\t%c\t%d\t0\t0\t0\t0\n//\n", chr, (int)(cns[0]>>32) + 1, (int)(cns[0]>>32) + 1, + "ACGTX"[cns[0]&3], "ACGTX"[cns[0]>>16&3], g->vpos_shift + 1); + for (k = 0; k < kh_end(hash); ++k) { + if (kh_exist(hash, k)) { + frag_t *f = &kh_val(hash, k); + if (f->vpos) continue; + f->flip = 0; + if (f->seq[0] == 0) f->phased = 0; + else f->phased = 1, f->phase = f->seq[0] - 1; + } + } + if (dump_aln(g, min_pos, hash) < 0) return -1; + ++g->vpos_shift; + return 1; + } + { // phase + int **cnt; + uint64_t *mask; + fprintf(samtools_stdout, "PS\t%s\t%d\t%d\n", chr, (int)(cns[0]>>32) + 1, (int)(cns[vpos-1]>>32) + 1); + sitemask = calloc(vpos, 1); + cnt = count_all(g->k, vpos, hash); + path = dynaprog(g->k, vpos, cnt); + for (i = 0; i < vpos; ++i) free(cnt[i]); + free(cnt); + pcnt = fragphase(vpos, path, hash, 0); // do not fix chimeras when masking + mask = genmask(vpos, pcnt, &n_masked); + regmask = calloc(n_masked, 8); + for (i = 0; i < n_masked; ++i) { + regmask[i] = cns[mask[i]>>32]>>32<<32 | cns[(uint32_t)mask[i]]>>32; + for (j = mask[i]>>32; j <= (int32_t)mask[i]; ++j) + sitemask[j] = 1; + } + free(mask); + if (g->flag & FLAG_FIX_CHIMERA) { + free(pcnt); + pcnt = fragphase(vpos, path, hash, 1); + } + } + for (i = 0; i < n_masked; ++i) + fprintf(samtools_stdout, "FL\t%s\t%d\t%d\n", chr, (int)(regmask[i]>>32) + 1, (int)regmask[i] + 1); + for (i = 0; i < vpos; ++i) { + uint64_t x = pcnt[i]; + int8_t c[2]; + c[0] = (cns[i]&0xffff)>>2 == 0? 4 : (cns[i]&3); + c[1] = (cns[i]>>16&0xffff)>>2 == 0? 4 : (cns[i]>>16&3); + fprintf(samtools_stdout, "M%d\t%s\t%d\t%d\t%c\t%c\t%d\t%d\t%d\t%d\t%d\n", sitemask[i]+1, chr, (int)(cns[0]>>32) + 1, (int)(cns[i]>>32) + 1, "ACGTX"[c[path[i]]], "ACGTX"[c[1-path[i]]], + i + g->vpos_shift + 1, (int)(x&0xffff), (int)(x>>16&0xffff), (int)(x>>32&0xffff), (int)(x>>48&0xffff)); + } + free(path); free(pcnt); free(regmask); free(sitemask); + seqs = calloc(n_seqs, sizeof(frag_t*)); + for (k = 0, i = 0; k < kh_end(hash); ++k) + if (kh_exist(hash, k) && kh_val(hash, k).vpos < vpos && !kh_val(hash, k).single) + seqs[i++] = &kh_val(hash, k); + n_seqs = i; + ks_introsort_rseq(n_seqs, seqs); + for (i = 0; i < n_seqs; ++i) { + frag_t *f = seqs[i]; + fprintf(samtools_stdout, "EV\t0\t%s\t%d\t40\t%dM\t*\t0\t0\t", chr, f->vpos + 1 + g->vpos_shift, f->vlen); + for (j = 0; j < f->vlen; ++j) { + uint32_t c = cns[f->vpos + j]; + if (f->seq[j] == 0) fputc('N', samtools_stdout); + else fputc("ACGT"[f->seq[j] == 1? (c&3) : (c>>16&3)], samtools_stdout); + } + fprintf(samtools_stdout, "\t*\tYP:i:%d\tYF:i:%d\tYI:i:%d\tYO:i:%d\tYS:i:%d\n", f->phase, f->flip, f->in, f->out, f->beg+1); + } + free(seqs); + fprintf(samtools_stdout, "//\n"); + fflush(samtools_stdout); + g->vpos_shift += vpos; + if (dump_aln(g, min_pos, hash) < 0) return -1; + return vpos; +} + +static void update_vpos(int vpos, nseq_t *hash) +{ + khint_t k; + for (k = 0; k < kh_end(hash); ++k) { + if (kh_exist(hash, k)) { + frag_t *f = &kh_val(hash, k); + if (f->vpos < vpos) kh_del(64, hash, k); // TODO: if frag_t::seq is allocated dynamically, free it + else f->vpos -= vpos; + } + } +} + +static nseq_t *shrink_hash(nseq_t *hash) // TODO: to implement +{ + return hash; +} + +static int readaln(void *data, bam1_t *b) +{ + phaseg_t *g = (phaseg_t*)data; + int ret; + while (1) + { + ret = sam_read1(g->fp, g->fp_hdr, b); + if (ret < 0) break; + if ( b->core.flag & (BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP) ) continue; + if ( g->pre ) { + if (g->n == g->m) { + g->m = g->m? g->m<<1 : 16; + g->b = realloc(g->b, g->m * sizeof(bam1_t*)); + } + g->b[g->n++] = bam_dup1(b); + } + break; + } + return ret; +} + +static khash_t(set64) *loadpos(const char *fn, bam_hdr_t *h) +{ + gzFile fp; + kstream_t *ks; + int ret, dret; + kstring_t *str; + khash_t(set64) *hash; + + hash = kh_init(set64); + str = calloc(1, sizeof(kstring_t)); + fp = strcmp(fn, "-")? gzopen(fn, "r") : gzdopen(fileno(stdin), "r"); + ks = ks_init(fp); + while (ks_getuntil(ks, 0, str, &dret) >= 0) { + int tid = bam_name2id(h, str->s); + if (tid >= 0 && dret != '\n') { + if (ks_getuntil(ks, 0, str, &dret) >= 0) { + uint64_t x = (uint64_t)tid<<32 | (atoi(str->s) - 1); + kh_put(set64, hash, x, &ret); + } else break; + } + if (dret != '\n') while ((dret = ks_getc(ks)) > 0 && dret != '\n'); + if (dret < 0) break; + } + ks_destroy(ks); + gzclose(fp); + free(str->s); free(str); + return hash; +} + +static int gl2cns(float q[16]) +{ + int i, j, min_ij; + float min, min2; + min = min2 = 1e30; min_ij = -1; + for (i = 0; i < 4; ++i) { + for (j = i; j < 4; ++j) { + if (q[i<<2|j] < min) min_ij = i<<2|j, min2 = min, min = q[i<<2|j]; + else if (q[i<<2|j] < min2) min2 = q[i<<2|j]; + } + } + return (min_ij>>2&3) == (min_ij&3)? 0 : 1<<18 | (min_ij>>2&3)<<16 | (min_ij&3) | (int)(min2 - min + .499) << 2; +} + +static int start_output(phaseg_t *g, int c, const char *middle, const htsFormat *fmt) +{ + kstring_t s = { 0, 0, NULL }; + ksprintf(&s, "%s.%s.%s", g->pre, middle, hts_format_file_extension(fmt)); + g->out_name[c] = ks_release(&s); + g->out[c] = sam_open_format(g->out_name[c], "wb", fmt); + if (! g->out[c]) { + print_error_errno("phase", "Failed to open output file '%s'", g->out_name[c]); + return -1; + } + + g->out_hdr[c] = bam_hdr_dup(g->fp_hdr); + if (sam_hdr_write(g->out[c], g->out_hdr[c]) < 0) { + print_error_errno("phase", "Failed to write header for '%s'", g->out_name[c]); + return -1; + } + + return 0; +} + +int main_phase(int argc, char *argv[]) +{ + int c, tid, pos, vpos = 0, n, lasttid = -1, max_vpos = 0, usage = 0; + const bam_pileup1_t *plp; + bam_plp_t iter; + nseq_t *seqs; + uint64_t *cns = 0; + phaseg_t g; + char *fn_list = 0; + khash_t(set64) *set = 0; + errmod_t *em; + uint16_t *bases; + + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, 0, 0, 0, '-'), + { NULL, 0, NULL, 0 } + }; + + // FIXME Leaks galore in the case of error returns + + memset(&g, 0, sizeof(phaseg_t)); + g.flag = FLAG_FIX_CHIMERA; + g.min_varLOD = 37; g.k = 13; g.min_baseQ = 13; g.max_depth = 256; + while ((c = getopt_long(argc, argv, "Q:eFq:k:b:l:D:A:", lopts, NULL)) >= 0) { + switch (c) { + case 'D': g.max_depth = atoi(optarg); break; + case 'q': g.min_varLOD = atoi(optarg); break; + case 'Q': g.min_baseQ = atoi(optarg); break; + case 'k': g.k = atoi(optarg); break; + case 'F': g.flag &= ~FLAG_FIX_CHIMERA; break; + case 'e': g.flag |= FLAG_LIST_EXCL; break; + case 'A': g.flag |= FLAG_DROP_AMBI; break; + case 'b': g.pre = strdup(optarg); break; + case 'l': fn_list = strdup(optarg); break; + default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break; + /* else fall-through */ + case '?': usage=1; break; + } + if (usage) break; + } + if (usage || argc == optind) { + fprintf(samtools_stderr, "\n"); + fprintf(samtools_stderr, "Usage: samtools phase [options] \n\n"); + fprintf(samtools_stderr, "Options: -k INT block length [%d]\n", g.k); + fprintf(samtools_stderr, " -b STR prefix of BAMs to output [null]\n"); + fprintf(samtools_stderr, " -q INT min het phred-LOD [%d]\n", g.min_varLOD); + fprintf(samtools_stderr, " -Q INT min base quality in het calling [%d]\n", g.min_baseQ); + fprintf(samtools_stderr, " -D INT max read depth [%d]\n", g.max_depth); +// fprintf(samtools_stderr, " -l FILE list of sites to phase [null]\n"); + fprintf(samtools_stderr, " -F do not attempt to fix chimeras\n"); + fprintf(samtools_stderr, " -A drop reads with ambiguous phase\n"); +// fprintf(samtools_stderr, " -e do not discover SNPs (effective with -l)\n"); + fprintf(samtools_stderr, "\n"); + + sam_global_opt_help(samtools_stderr, "-....-"); + + return 1; + } + g.fp = sam_open_format(argv[optind], "r", &ga.in); + if (!g.fp) { + print_error_errno("phase", "Couldn't open '%s'", argv[optind]); + return 1; + } + g.fp_hdr = sam_hdr_read(g.fp); + if (g.fp_hdr == NULL) { + fprintf(samtools_stderr, "[%s] Failed to read header for '%s'\n", + __func__, argv[optind]); + return 1; + } + if (fn_list) { // read the list of sites to phase + set = loadpos(fn_list, g.fp_hdr); + free(fn_list); + } else g.flag &= ~FLAG_LIST_EXCL; + if (g.pre) { // open BAMs to write + if (ga.out.format == unknown_format) + ga.out.format = bam; // default via "wb". + + // Open each output file g.out[0..2], dupping and writing the header + if (start_output(&g, 0, "0", &ga.out) < 0 || + start_output(&g, 1, "1", &ga.out) < 0 || + start_output(&g, 2, "chimera", &ga.out) < 0) return 1; + } + + iter = bam_plp_init(readaln, &g); + g.vpos_shift = 0; + seqs = kh_init(64); + em = errmod_init(1. - 0.83); + bases = calloc(g.max_depth, 2); + fprintf(samtools_stdout, "CC\n"); + fprintf(samtools_stdout, "CC\tDescriptions:\nCC\n"); + fprintf(samtools_stdout, "CC\t CC comments\n"); + fprintf(samtools_stdout, "CC\t PS start of a phase set\n"); + fprintf(samtools_stdout, "CC\t FL filtered region\n"); + fprintf(samtools_stdout, "CC\t M[012] markers; 0 for singletons, 1 for phased and 2 for filtered\n"); + fprintf(samtools_stdout, "CC\t EV supporting reads; SAM format\n"); + fprintf(samtools_stdout, "CC\t // end of a phase set\nCC\n"); + fprintf(samtools_stdout, "CC\tFormats of PS, FL and M[012] lines (1-based coordinates):\nCC\n"); + fprintf(samtools_stdout, "CC\t PS chr phaseSetStart phaseSetEnd\n"); + fprintf(samtools_stdout, "CC\t FL chr filterStart filterEnd\n"); + fprintf(samtools_stdout, "CC\t M? chr PS pos allele0 allele1 hetIndex #supports0 #errors0 #supp1 #err1\n"); + fprintf(samtools_stdout, "CC\nCC\n"); + fflush(samtools_stdout); + while ((plp = bam_plp_auto(iter, &tid, &pos, &n)) != 0) { + int i, k, c, tmp, dophase = 1, in_set = 0; + float q[16]; + if (tid < 0) break; + if (tid != lasttid) { // change of chromosome + g.vpos_shift = 0; + if (lasttid >= 0) { + seqs = shrink_hash(seqs); + if (phase(&g, g.fp_hdr->target_name[lasttid], + vpos, cns, seqs) < 0) { + return 1; + } + update_vpos(0x7fffffff, seqs); + } + lasttid = tid; + vpos = 0; + } + if (set && kh_get(set64, set, (uint64_t)tid<<32 | pos) != kh_end(set)) in_set = 1; + if (n > g.max_depth) continue; // do not proceed if the depth is too high + // fill the bases array and check if there is a variant + for (i = k = 0; i < n; ++i) { + const bam_pileup1_t *p = plp + i; + uint8_t *seq; + int q, baseQ, b; + if (p->is_del || p->is_refskip) continue; + baseQ = bam_get_qual(p->b)[p->qpos]; + if (baseQ < g.min_baseQ) continue; + seq = bam_get_seq(p->b); + b = seq_nt16_int[bam_seqi(seq, p->qpos)]; + if (b > 3) continue; + q = baseQ < p->b->core.qual? baseQ : p->b->core.qual; + if (q < 4) q = 4; + if (q > 63) q = 63; + bases[k++] = q<<5 | (int)bam_is_rev(p->b)<<4 | b; + } + if (k == 0) continue; + errmod_cal(em, k, 4, bases, q); // compute genotype likelihood + c = gl2cns(q); // get the consensus + // tell if to proceed + if (set && (g.flag&FLAG_LIST_EXCL) && !in_set) continue; // not in the list + if (!in_set && (c&0xffff)>>2 < g.min_varLOD) continue; // not a variant + // add the variant + if (vpos == max_vpos) { + max_vpos = max_vpos? max_vpos<<1 : 128; + cns = realloc(cns, max_vpos * 8); + } + cns[vpos] = (uint64_t)pos<<32 | c; + for (i = 0; i < n; ++i) { + const bam_pileup1_t *p = plp + i; + uint64_t key; + khint_t k; + uint8_t *seq = bam_get_seq(p->b); + frag_t *f; + if (p->is_del || p->is_refskip) continue; + if (p->b->core.qual == 0) continue; + // get the base code + c = seq_nt16_int[bam_seqi(seq, p->qpos)]; + if (c == (cns[vpos]&3)) c = 1; + else if (c == (cns[vpos]>>16&3)) c = 2; + else c = 0; + // write to seqs + key = X31_hash_string(bam_get_qname(p->b)); + k = kh_put(64, seqs, key, &tmp); + f = &kh_val(seqs, k); + if (tmp == 0) { // present in the hash table + if (vpos - f->vpos + 1 < MAX_VARS) { + f->vlen = vpos - f->vpos + 1; + f->seq[f->vlen-1] = c; + f->end = bam_endpos(p->b); + } + dophase = 0; + } else { // absent + memset(f->seq, 0, MAX_VARS); + f->beg = p->b->core.pos; + f->end = bam_endpos(p->b); + f->vpos = vpos, f->vlen = 1, f->seq[0] = c, f->single = f->phased = f->flip = f->ambig = 0; + } + } + if (dophase) { + seqs = shrink_hash(seqs); + if (phase(&g, g.fp_hdr->target_name[tid], vpos, cns, seqs) < 0) { + return 1; + } + update_vpos(vpos, seqs); + cns[0] = cns[vpos]; + vpos = 0; + } + ++vpos; + } + if (tid >= 0) { + if (phase(&g, g.fp_hdr->target_name[tid], vpos, cns, seqs) < 0) { + return 1; + } + } + bam_hdr_destroy(g.fp_hdr); + bam_plp_destroy(iter); + sam_close(g.fp); + kh_destroy(64, seqs); + kh_destroy(set64, set); + free(cns); + errmod_destroy(em); + free(bases); + if (g.pre) { + int res = 0; + for (c = 0; c <= 2; ++c) { + if (sam_close(g.out[c]) < 0) { + fprintf(samtools_stderr, "[%s] error on closing '%s'\n", + __func__, g.out_name[c]); + res = 1; + } + bam_hdr_destroy(g.out_hdr[c]); + free(g.out_name[c]); + } + free(g.pre); free(g.b); + if (res) return 1; + } + sam_global_args_free(&ga); + return 0; +} diff --git a/samtools/sam.c b/samtools/sam.c new file mode 100644 index 0000000..237c3e8 --- /dev/null +++ b/samtools/sam.c @@ -0,0 +1,147 @@ +/* sam.c -- format-neutral SAM/BAM API. + + Copyright (C) 2009, 2012-2015 Genome Research Ltd. + Portions copyright (C) 2011 Broad Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include "htslib/faidx.h" +#include "sam.h" + +int samthreads(samfile_t *fp, int n_threads, int n_sub_blks) +{ + if (hts_get_format(fp->file)->format != bam || !fp->is_write) return -1; + if (bgzf_mt(fp->x.bam, n_threads, n_sub_blks) < 0) return -1; + return 0; +} + +samfile_t *samopen(const char *fn, const char *mode, const void *aux) +{ + // hts_open() is really sam_open(), except for #define games + samFile *hts_fp = hts_open(fn, mode); + if (hts_fp == NULL) return NULL; + + samfile_t *fp = malloc(sizeof (samfile_t)); + if (!fp) { + sam_close(hts_fp); + return NULL; + } + fp->file = hts_fp; + fp->x.bam = hts_fp->fp.bgzf; + if (strchr(mode, 'r')) { + if (aux) { + if (hts_set_fai_filename(fp->file, aux) != 0) { + sam_close(hts_fp); + free(fp); + return NULL; + } + } + fp->header = sam_hdr_read(fp->file); // samclose() will free this + if (fp->header == NULL) { + sam_close(hts_fp); + free(fp); + return NULL; + } + fp->is_write = 0; + if (fp->header->n_targets == 0 && bam_verbose >= 1) + fprintf(stderr, "[samopen] no @SQ lines in the header.\n"); + } + else { + enum htsExactFormat fmt = hts_get_format(fp->file)->format; + fp->header = (bam_hdr_t *)aux; // For writing, we won't free it + fp->is_write = 1; + if (!(fmt == text_format || fmt == sam) || strchr(mode, 'h')) { + if (sam_hdr_write(fp->file, fp->header) < 0) { + if (bam_verbose >= 1) + fprintf(stderr, "[samopen] Couldn't write header\n"); + sam_close(hts_fp); + free(fp); + return NULL; + } + } + } + + return fp; +} + +void samclose(samfile_t *fp) +{ + if (fp) { + if (!fp->is_write && fp->header) bam_hdr_destroy(fp->header); + sam_close(fp->file); + free(fp); + } +} + +int samfetch(samfile_t *fp, const bam_index_t *idx, int tid, int beg, int end, void *data, bam_fetch_f func) +{ + bam1_t *b = bam_init1(); + hts_itr_t *iter = sam_itr_queryi(idx, tid, beg, end); + int ret; + while ((ret = sam_itr_next(fp->file, iter, b)) >= 0) func(b, data); + hts_itr_destroy(iter); + bam_destroy1(b); + return (ret == -1)? 0 : ret; +} + +int sampileup(samfile_t *fp, int mask, bam_pileup_f func, void *func_data) +{ + bam_plbuf_t *buf; + int ret; + bam1_t *b; + b = bam_init1(); + buf = bam_plbuf_init(func, func_data); + if (mask < 0) mask = BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP; + else mask |= BAM_FUNMAP; + while ((ret = samread(fp, b)) >= 0) { + // bam_plp_push() itself now filters out unmapped reads only + if (b->core.flag & mask) b->core.flag |= BAM_FUNMAP; + bam_plbuf_push(b, buf); + } + bam_plbuf_push(0, buf); + bam_plbuf_destroy(buf); + bam_destroy1(b); + return 0; +} + +char *samfaipath(const char *fn_ref) +{ + char *fn_list = 0; + if (fn_ref == 0) return 0; + fn_list = calloc(strlen(fn_ref) + 5, 1); + strcat(strcpy(fn_list, fn_ref), ".fai"); + if (access(fn_list, R_OK) == -1) { // fn_list is unreadable + if (access(fn_ref, R_OK) == -1) { + fprintf(stderr, "[samfaipath] fail to read file %s.\n", fn_ref); + } else { + if (bam_verbose >= 3) fprintf(stderr, "[samfaipath] build FASTA index...\n"); + if (fai_build(fn_ref) == -1) { + fprintf(stderr, "[samfaipath] fail to build FASTA index.\n"); + free(fn_list); fn_list = 0; + } + } + } + return fn_list; +} diff --git a/samtools/sam.c.pysam.c b/samtools/sam.c.pysam.c new file mode 100644 index 0000000..457769d --- /dev/null +++ b/samtools/sam.c.pysam.c @@ -0,0 +1,149 @@ +#include "samtools.pysam.h" + +/* sam.c -- format-neutral SAM/BAM API. + + Copyright (C) 2009, 2012-2015 Genome Research Ltd. + Portions copyright (C) 2011 Broad Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include "htslib/faidx.h" +#include "sam.h" + +int samthreads(samfile_t *fp, int n_threads, int n_sub_blks) +{ + if (hts_get_format(fp->file)->format != bam || !fp->is_write) return -1; + if (bgzf_mt(fp->x.bam, n_threads, n_sub_blks) < 0) return -1; + return 0; +} + +samfile_t *samopen(const char *fn, const char *mode, const void *aux) +{ + // hts_open() is really sam_open(), except for #define games + samFile *hts_fp = hts_open(fn, mode); + if (hts_fp == NULL) return NULL; + + samfile_t *fp = malloc(sizeof (samfile_t)); + if (!fp) { + sam_close(hts_fp); + return NULL; + } + fp->file = hts_fp; + fp->x.bam = hts_fp->fp.bgzf; + if (strchr(mode, 'r')) { + if (aux) { + if (hts_set_fai_filename(fp->file, aux) != 0) { + sam_close(hts_fp); + free(fp); + return NULL; + } + } + fp->header = sam_hdr_read(fp->file); // samclose() will free this + if (fp->header == NULL) { + sam_close(hts_fp); + free(fp); + return NULL; + } + fp->is_write = 0; + if (fp->header->n_targets == 0 && bam_verbose >= 1) + fprintf(samtools_stderr, "[samopen] no @SQ lines in the header.\n"); + } + else { + enum htsExactFormat fmt = hts_get_format(fp->file)->format; + fp->header = (bam_hdr_t *)aux; // For writing, we won't free it + fp->is_write = 1; + if (!(fmt == text_format || fmt == sam) || strchr(mode, 'h')) { + if (sam_hdr_write(fp->file, fp->header) < 0) { + if (bam_verbose >= 1) + fprintf(samtools_stderr, "[samopen] Couldn't write header\n"); + sam_close(hts_fp); + free(fp); + return NULL; + } + } + } + + return fp; +} + +void samclose(samfile_t *fp) +{ + if (fp) { + if (!fp->is_write && fp->header) bam_hdr_destroy(fp->header); + sam_close(fp->file); + free(fp); + } +} + +int samfetch(samfile_t *fp, const bam_index_t *idx, int tid, int beg, int end, void *data, bam_fetch_f func) +{ + bam1_t *b = bam_init1(); + hts_itr_t *iter = sam_itr_queryi(idx, tid, beg, end); + int ret; + while ((ret = sam_itr_next(fp->file, iter, b)) >= 0) func(b, data); + hts_itr_destroy(iter); + bam_destroy1(b); + return (ret == -1)? 0 : ret; +} + +int sampileup(samfile_t *fp, int mask, bam_pileup_f func, void *func_data) +{ + bam_plbuf_t *buf; + int ret; + bam1_t *b; + b = bam_init1(); + buf = bam_plbuf_init(func, func_data); + if (mask < 0) mask = BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP; + else mask |= BAM_FUNMAP; + while ((ret = samread(fp, b)) >= 0) { + // bam_plp_push() itself now filters out unmapped reads only + if (b->core.flag & mask) b->core.flag |= BAM_FUNMAP; + bam_plbuf_push(b, buf); + } + bam_plbuf_push(0, buf); + bam_plbuf_destroy(buf); + bam_destroy1(b); + return 0; +} + +char *samfaipath(const char *fn_ref) +{ + char *fn_list = 0; + if (fn_ref == 0) return 0; + fn_list = calloc(strlen(fn_ref) + 5, 1); + strcat(strcpy(fn_list, fn_ref), ".fai"); + if (access(fn_list, R_OK) == -1) { // fn_list is unreadable + if (access(fn_ref, R_OK) == -1) { + fprintf(samtools_stderr, "[samfaipath] fail to read file %s.\n", fn_ref); + } else { + if (bam_verbose >= 3) fprintf(samtools_stderr, "[samfaipath] build FASTA index...\n"); + if (fai_build(fn_ref) == -1) { + fprintf(samtools_stderr, "[samfaipath] fail to build FASTA index.\n"); + free(fn_list); fn_list = 0; + } + } + } + return fn_list; +} diff --git a/samtools/sam.h b/samtools/sam.h new file mode 100644 index 0000000..6545e64 --- /dev/null +++ b/samtools/sam.h @@ -0,0 +1,145 @@ +/* sam.h -- format-neutral SAM/BAM API. + + Copyright (C) 2009, 2013-2015 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#ifndef BAM_SAM_H +#define BAM_SAM_H + +#include "htslib/sam.h" +#include "bam.h" + +/*! + @header + + This file provides higher level of I/O routines and unifies the APIs + for SAM and BAM formats. These APIs are more convenient and + recommended. + + @copyright Genome Research Ltd. + */ + +/*! @typedef + @abstract SAM/BAM file handler + @field type type of the handler; bit 1 for BAM, 2 for reading and bit 3-4 for flag format + @field bam BAM file handler; valid if (type&1) == 1 + @field tamr SAM file handler for reading; valid if type == 2 + @field tamw SAM file handler for writing; valid if type == 0 + @field header header struct + */ +typedef struct { + samFile *file; + struct { BGZF *bam; } x; // Hack so that fp->x.bam still works + bam_hdr_t *header; + unsigned short is_write:1; +} samfile_t; + +#ifdef __cplusplus +extern "C" { +#endif + + /*! + @abstract Open a SAM/BAM file + + @param fn SAM/BAM file name; "-" is recognized as stdin (for + reading) or stdout (for writing). + + @param mode open mode /[rw](b?)(u?)(h?)([xX]?)/: 'r' for reading, + 'w' for writing, 'b' for BAM I/O, 'u' for uncompressed BAM output, + 'h' for outputing header in SAM, 'x' for HEX flag and 'X' for + string flag. If 'b' present, it must immediately follow 'r' or + 'w'. Valid modes are "r", "w", "wh", "wx", "whx", "wX", "whX", + "rb", "wb" and "wbu" exclusively. + + @param aux auxiliary data; if mode[0]=='w', aux points to + bam_header_t; if strcmp(mode, "rb")!=0 and @SQ header lines in SAM + are absent, aux points the file name of the list of the reference; + aux is not used otherwise. If @SQ header lines are present in SAM, + aux is not used, either. + + @return SAM/BAM file handler + */ + samfile_t *samopen(const char *fn, const char *mode, const void *aux); + + /*! + @abstract Close a SAM/BAM handler + @param fp file handler to be closed + */ + void samclose(samfile_t *fp); + + /*! + @abstract Read one alignment + @param fp file handler + @param b alignment + @return bytes read + */ + static inline int samread(samfile_t *fp, bam1_t *b) { return sam_read1(fp->file, fp->header, b); } + + /*! + @abstract Write one alignment + @param fp file handler + @param b alignment + @return bytes written + */ + static inline int samwrite(samfile_t *fp, const bam1_t *b) { return sam_write1(fp->file, fp->header, b); } + + /*! + @abstract Load BAM/CRAM index for use with samfetch() + @param fp file handler + @param fn name of the BAM or CRAM file (NOT the index file) + @return pointer to the index structure + */ + static inline bam_index_t *samtools_sam_index_load(samfile_t *fp, const char *fn) { return sam_index_load(fp->file, fn); } + #undef sam_index_load + #define sam_index_load(fp,fn) (samtools_sam_index_load((fp), (fn))) + + /*! + @abstract Retrieve the alignments overlapping the specified region. + @discussion A user defined function will be called for each + retrieved alignment ordered by its start position. + @param fp file handler + @param idx index returned by sam_index_load() + @param tid chromosome ID as is defined in the header + @param beg start coordinate, 0-based + @param end end coordinate, 0-based + @param data user provided data (will be transferred to func) + @param func user defined function + */ + int samfetch(samfile_t *fp, const bam_index_t *idx, int tid, int beg, int end, void *data, bam_fetch_f func); + + /*! + @abstract Get the pileup for a whole alignment file + @param fp file handler + @param mask mask transferred to bam_plbuf_set_mask() + @param func user defined function called in the pileup process + #param data user provided data for func() + */ + int sampileup(samfile_t *fp, int mask, bam_pileup_f func, void *data); + + char *samfaipath(const char *fn_ref); + int samthreads(samfile_t *fp, int n_threads, int n_sub_blks); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/samtools/sam_header.c b/samtools/sam_header.c new file mode 100644 index 0000000..defa5c3 --- /dev/null +++ b/samtools/sam_header.c @@ -0,0 +1,836 @@ +/* sam_header.c -- basic SAM/BAM header API. + + Copyright (C) 2009-2013 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include "sam_header.h" +#include +#include +#include +#include +#include + +#include "htslib/khash.h" +KHASH_MAP_INIT_STR(str, const char *) + +struct _HeaderList +{ + struct _HeaderList *last; // Hack: Used and maintained only by list_append_to_end. Maintained in the root node only. + struct _HeaderList *next; + void *data; +}; +typedef struct _HeaderList list_t; +typedef list_t HeaderDict; + +typedef struct +{ + char key[2]; + char *value; +} +HeaderTag; + +typedef struct +{ + char type[2]; + list_t *tags; +} +HeaderLine; + +const char *o_hd_tags[] = {"SO","GO",NULL}; +const char *r_hd_tags[] = {"VN",NULL}; + +const char *o_sq_tags[] = {"AS","M5","UR","SP",NULL}; +const char *r_sq_tags[] = {"SN","LN",NULL}; +const char *u_sq_tags[] = {"SN",NULL}; + +const char *o_rg_tags[] = {"CN","DS","DT","FO","KS","LB","PG","PI","PL","PU","SM",NULL}; +const char *r_rg_tags[] = {"ID",NULL}; +const char *u_rg_tags[] = {"ID",NULL}; + +const char *o_pg_tags[] = {"VN","CL",NULL}; +const char *r_pg_tags[] = {"ID",NULL}; + +const char *types[] = {"HD","SQ","RG","PG","CO",NULL}; +const char **optional_tags[] = {o_hd_tags,o_sq_tags,o_rg_tags,o_pg_tags,NULL,NULL}; +const char **required_tags[] = {r_hd_tags,r_sq_tags,r_rg_tags,r_pg_tags,NULL,NULL}; +const char **unique_tags[] = {NULL, u_sq_tags,u_rg_tags,NULL,NULL,NULL}; + + +static void debug(const char *format, ...) +{ + va_list ap; + va_start(ap, format); + vfprintf(stderr, format, ap); + va_end(ap); +} + +#if 0 +// Replaced by list_append_to_end +static list_t *list_prepend(list_t *root, void *data) +{ + list_t *l = malloc(sizeof(list_t)); + l->next = root; + l->data = data; + return l; +} +#endif + +// Relies on the root->last being correct. Do not use with the other list_* +// routines unless they are fixed to modify root->last as well. +static list_t *list_append_to_end(list_t *root, void *data) +{ + list_t *l = malloc(sizeof(list_t)); + l->last = l; + l->next = NULL; + l->data = data; + + if ( !root ) + return l; + + root->last->next = l; + root->last = l; + return root; +} + +static list_t *list_append(list_t *root, void *data) +{ + list_t *l = root; + while (l && l->next) + l = l->next; + if ( l ) + { + l->next = malloc(sizeof(list_t)); + l = l->next; + } + else + { + l = malloc(sizeof(list_t)); + root = l; + } + l->data = data; + l->next = NULL; + return root; +} + +static void list_free(list_t *root) +{ + list_t *l = root; + while (root) + { + l = root; + root = root->next; + free(l); + } +} + + + +// Look for a tag "XY" in a predefined const char *[] array. +static int tag_exists(const char *tag, const char **tags) +{ + int itag=0; + if ( !tags ) return -1; + while ( tags[itag] ) + { + if ( tags[itag][0]==tag[0] && tags[itag][1]==tag[1] ) return itag; + itag++; + } + return -1; +} + + + +// Mimics the behaviour of getline, except it returns pointer to the next chunk of the text +// or NULL if everything has been read. The lineptr should be freed by the caller. The +// newline character is stripped. +static const char *nextline(char **lineptr, size_t *n, const char *text) +{ + int len; + const char *to = text; + + if ( !*to ) return NULL; + + while ( *to && *to!='\n' && *to!='\r' ) to++; + len = to - text + 1; + + if ( *to ) + { + // Advance the pointer for the next call + if ( *to=='\n' ) to++; + else if ( *to=='\r' && *(to+1)=='\n' ) to+=2; + } + if ( !len ) + return to; + + if ( !*lineptr ) + { + *lineptr = malloc(len); + *n = len; + } + else if ( *nkey[0] = name[0]; + tag->key[1] = name[1]; + tag->value = malloc(len+1); + memcpy(tag->value,value_from,len+1); + tag->value[len] = 0; + return tag; +} + +static HeaderTag *header_line_has_tag(HeaderLine *hline, const char *key) +{ + list_t *tags = hline->tags; + while (tags) + { + HeaderTag *tag = tags->data; + if ( tag->key[0]==key[0] && tag->key[1]==key[1] ) return tag; + tags = tags->next; + } + return NULL; +} + + +// Return codes: +// 0 .. different types or unique tags differ or conflicting tags, cannot be merged +// 1 .. all tags identical -> no need to merge, drop one +// 2 .. the unique tags match and there are some conflicting tags (same tag, different value) -> error, cannot be merged nor duplicated +// 3 .. there are some missing complementary tags and no unique conflict -> can be merged into a single line +static int sam_header_compare_lines(HeaderLine *hline1, HeaderLine *hline2) +{ + HeaderTag *t1, *t2; + + if ( hline1->type[0]!=hline2->type[0] || hline1->type[1]!=hline2->type[1] ) + return 0; + + int itype = tag_exists(hline1->type,types); + if ( itype==-1 ) { + debug("[sam_header_compare_lines] Unknown type [%c%c]\n", hline1->type[0],hline1->type[1]); + return -1; // FIXME (lh3): error; I do not know how this will be handled in Petr's code + } + + if ( unique_tags[itype] ) + { + t1 = header_line_has_tag(hline1,unique_tags[itype][0]); + t2 = header_line_has_tag(hline2,unique_tags[itype][0]); + if ( !t1 || !t2 ) // this should never happen, the unique tags are required + return 2; + + if ( strcmp(t1->value,t2->value) ) + return 0; // the unique tags differ, cannot be merged + } + if ( !required_tags[itype] && !optional_tags[itype] ) + { + t1 = hline1->tags->data; + t2 = hline2->tags->data; + if ( !strcmp(t1->value,t2->value) ) return 1; // identical comments + return 0; + } + + int missing=0, itag=0; + while ( required_tags[itype] && required_tags[itype][itag] ) + { + t1 = header_line_has_tag(hline1,required_tags[itype][itag]); + t2 = header_line_has_tag(hline2,required_tags[itype][itag]); + if ( !t1 && !t2 ) + return 2; // this should never happen + else if ( !t1 || !t2 ) + missing = 1; // there is some tag missing in one of the hlines + else if ( strcmp(t1->value,t2->value) ) + { + if ( unique_tags[itype] ) + return 2; // the lines have a matching unique tag but have a conflicting tag + + return 0; // the lines contain conflicting tags, cannot be merged + } + itag++; + } + itag = 0; + while ( optional_tags[itype] && optional_tags[itype][itag] ) + { + t1 = header_line_has_tag(hline1,optional_tags[itype][itag]); + t2 = header_line_has_tag(hline2,optional_tags[itype][itag]); + if ( !t1 && !t2 ) + { + itag++; + continue; + } + if ( !t1 || !t2 ) + missing = 1; // there is some tag missing in one of the hlines + else if ( strcmp(t1->value,t2->value) ) + { + if ( unique_tags[itype] ) + return 2; // the lines have a matching unique tag but have a conflicting tag + + return 0; // the lines contain conflicting tags, cannot be merged + } + itag++; + } + if ( missing ) return 3; // there are some missing complementary tags with no conflicts, can be merged + return 1; +} + + +static HeaderLine *sam_header_line_clone(const HeaderLine *hline) +{ + list_t *tags; + HeaderLine *out = malloc(sizeof(HeaderLine)); + out->type[0] = hline->type[0]; + out->type[1] = hline->type[1]; + out->tags = NULL; + + tags = hline->tags; + while (tags) + { + HeaderTag *old = tags->data; + + HeaderTag *new = malloc(sizeof(HeaderTag)); + new->key[0] = old->key[0]; + new->key[1] = old->key[1]; + new->value = strdup(old->value); + out->tags = list_append(out->tags, new); + + tags = tags->next; + } + return out; +} + +static int sam_header_line_merge_with(HeaderLine *out_hline, const HeaderLine *tmpl_hline) +{ + list_t *tmpl_tags; + + if ( out_hline->type[0]!=tmpl_hline->type[0] || out_hline->type[1]!=tmpl_hline->type[1] ) + return 0; + + tmpl_tags = tmpl_hline->tags; + while (tmpl_tags) + { + HeaderTag *tmpl_tag = tmpl_tags->data; + HeaderTag *out_tag = header_line_has_tag(out_hline, tmpl_tag->key); + if ( !out_tag ) + { + HeaderTag *tag = malloc(sizeof(HeaderTag)); + tag->key[0] = tmpl_tag->key[0]; + tag->key[1] = tmpl_tag->key[1]; + tag->value = strdup(tmpl_tag->value); + out_hline->tags = list_append(out_hline->tags,tag); + } + tmpl_tags = tmpl_tags->next; + } + return 1; +} + + +static HeaderLine *sam_header_line_parse(const char *headerLine) +{ + HeaderLine *hline; + HeaderTag *tag; + const char *from, *to; + from = headerLine; + + if ( *from != '@' ) { + debug("[sam_header_line_parse] expected '@', got [%s]\n", headerLine); + return 0; + } + to = ++from; + + while (*to && *to!='\t') to++; + if ( to-from != 2 ) { + debug("[sam_header_line_parse] expected '@XY', got [%s]\nHint: The header tags must be tab-separated.\n", headerLine); + return 0; + } + + hline = malloc(sizeof(HeaderLine)); + hline->type[0] = from[0]; + hline->type[1] = from[1]; + hline->tags = NULL; + + int itype = tag_exists(hline->type, types); + + from = to; + while (*to && *to=='\t') to++; + if ( to-from != 1 ) { + debug("[sam_header_line_parse] multiple tabs on line [%s] (%d)\n", headerLine,(int)(to-from)); + free(hline); + return 0; + } + from = to; + while (*from) + { + while (*to && *to!='\t') to++; + + if ( !required_tags[itype] && !optional_tags[itype] ) + { + // CO is a special case, it can contain anything, including tabs + if ( *to ) { to++; continue; } + tag = new_tag(" ",from,to-1); + } + else + tag = new_tag(from,from+3,to-1); + + if ( header_line_has_tag(hline,tag->key) ) + debug("The tag '%c%c' present (at least) twice on line [%s]\n", tag->key[0],tag->key[1], headerLine); + hline->tags = list_append(hline->tags, tag); + + from = to; + while (*to && *to=='\t') to++; + if ( *to && to-from != 1 ) { + debug("[sam_header_line_parse] multiple tabs on line [%s] (%d)\n", headerLine,(int)(to-from)); + return 0; + } + + from = to; + } + return hline; +} + + +// Must be of an existing type, all tags must be recognised and all required tags must be present +static int sam_header_line_validate(HeaderLine *hline) +{ + list_t *tags; + HeaderTag *tag; + int itype, itag; + + // Is the type correct? + itype = tag_exists(hline->type, types); + if ( itype==-1 ) + { + debug("The type [%c%c] not recognised.\n", hline->type[0],hline->type[1]); + return 0; + } + + // Has all required tags? + itag = 0; + while ( required_tags[itype] && required_tags[itype][itag] ) + { + if ( !header_line_has_tag(hline,required_tags[itype][itag]) ) + { + debug("The tag [%c%c] required for [%c%c] not present.\n", required_tags[itype][itag][0],required_tags[itype][itag][1], + hline->type[0],hline->type[1]); + return 0; + } + itag++; + } + + // Are all tags recognised? + tags = hline->tags; + while ( tags ) + { + tag = tags->data; + if ( !tag_exists(tag->key,required_tags[itype]) && !tag_exists(tag->key,optional_tags[itype]) ) + { + // Lower case tags are user-defined values. + if( !(islower(tag->key[0]) || islower(tag->key[1])) ) + { + // Neither is lower case, but tag was not recognized. + debug("Unknown tag [%c%c] for [%c%c].\n", tag->key[0],tag->key[1], hline->type[0],hline->type[1]); + // return 0; // Even unknown tags are allowed - for forward compatibility with new attributes + } + // else - allow user defined tag + } + tags = tags->next; + } + + return 1; +} + + +static void print_header_line(FILE *fp, HeaderLine *hline) +{ + list_t *tags = hline->tags; + HeaderTag *tag; + + fprintf(fp, "@%c%c", hline->type[0],hline->type[1]); + while (tags) + { + tag = tags->data; + + fprintf(fp, "\t"); + if ( tag->key[0]!=' ' || tag->key[1]!=' ' ) + fprintf(fp, "%c%c:", tag->key[0],tag->key[1]); + fprintf(fp, "%s", tag->value); + + tags = tags->next; + } + fprintf(fp,"\n"); +} + + +static void sam_header_line_free(HeaderLine *hline) +{ + list_t *tags = hline->tags; + while (tags) + { + HeaderTag *tag = tags->data; + free(tag->value); + free(tag); + tags = tags->next; + } + list_free(hline->tags); + free(hline); +} + +void sam_header_free(void *_header) +{ + HeaderDict *header = (HeaderDict*)_header; + list_t *hlines = header; + while (hlines) + { + sam_header_line_free(hlines->data); + hlines = hlines->next; + } + list_free(header); +} + +HeaderDict *sam_header_clone(const HeaderDict *dict) +{ + HeaderDict *out = NULL; + while (dict) + { + HeaderLine *hline = dict->data; + out = list_append(out, sam_header_line_clone(hline)); + dict = dict->next; + } + return out; +} + +// Returns a newly allocated string +char *sam_header_write(const void *_header) +{ + const HeaderDict *header = (const HeaderDict*)_header; + char *out = NULL; + int len=0, nout=0; + const list_t *hlines; + + // Calculate the length of the string to allocate + hlines = header; + while (hlines) + { + len += 4; // @XY and \n + + HeaderLine *hline = hlines->data; + list_t *tags = hline->tags; + while (tags) + { + HeaderTag *tag = tags->data; + len += strlen(tag->value) + 1; // \t + if ( tag->key[0]!=' ' || tag->key[1]!=' ' ) + len += strlen(tag->value) + 3; // XY: + tags = tags->next; + } + hlines = hlines->next; + } + + nout = 0; + out = malloc(len+1); + hlines = header; + while (hlines) + { + HeaderLine *hline = hlines->data; + + nout += sprintf(out+nout,"@%c%c",hline->type[0],hline->type[1]); + + list_t *tags = hline->tags; + while (tags) + { + HeaderTag *tag = tags->data; + nout += sprintf(out+nout,"\t"); + if ( tag->key[0]!=' ' || tag->key[1]!=' ' ) + nout += sprintf(out+nout,"%c%c:", tag->key[0],tag->key[1]); + nout += sprintf(out+nout,"%s", tag->value); + tags = tags->next; + } + hlines = hlines->next; + nout += sprintf(out+nout,"\n"); + } + out[len] = 0; + return out; +} + +void *sam_header_parse2(const char *headerText) +{ + list_t *hlines = NULL; + HeaderLine *hline; + const char *text; + char *buf=NULL; + size_t nbuf = 0; + int tovalidate = 0; + + if ( !headerText ) + return 0; + + text = headerText; + while ( (text=nextline(&buf, &nbuf, text)) ) + { + hline = sam_header_line_parse(buf); + if ( hline && (!tovalidate || sam_header_line_validate(hline)) ) + // With too many (~250,000) reference sequences the header parsing was too slow with list_append. + hlines = list_append_to_end(hlines, hline); + else + { + if (hline) sam_header_line_free(hline); + sam_header_free(hlines); + if ( buf ) free(buf); + return NULL; + } + } + if ( buf ) free(buf); + + return hlines; +} + +void *sam_header2tbl(const void *_dict, char type[2], char key_tag[2], char value_tag[2]) +{ + const HeaderDict *dict = (const HeaderDict*)_dict; + const list_t *l = dict; + khash_t(str) *tbl = kh_init(str); + khiter_t k; + int ret; + + if (_dict == 0) return tbl; // return an empty (not null) hash table + while (l) + { + HeaderLine *hline = l->data; + if ( hline->type[0]!=type[0] || hline->type[1]!=type[1] ) + { + l = l->next; + continue; + } + + HeaderTag *key, *value; + key = header_line_has_tag(hline,key_tag); + value = header_line_has_tag(hline,value_tag); + if ( !key || !value ) + { + l = l->next; + continue; + } + + k = kh_get(str, tbl, key->value); + if ( k != kh_end(tbl) ) + debug("[sam_header_lookup_table] They key %s not unique.\n", key->value); + k = kh_put(str, tbl, key->value, &ret); + kh_value(tbl, k) = value->value; + + l = l->next; + } + return tbl; +} + +char **sam_header2list(const void *_dict, char type[2], char key_tag[2], int *_n) +{ + const HeaderDict *dict = (const HeaderDict*)_dict; + const list_t *l = dict; + int max, n; + char **ret; + + ret = 0; *_n = max = n = 0; + while (l) + { + HeaderLine *hline = l->data; + if ( hline->type[0]!=type[0] || hline->type[1]!=type[1] ) + { + l = l->next; + continue; + } + + HeaderTag *key; + key = header_line_has_tag(hline,key_tag); + if ( !key ) + { + l = l->next; + continue; + } + + if (n == max) { + max = max? max<<1 : 4; + ret = realloc(ret, max * sizeof(char*)); + } + ret[n++] = key->value; + + l = l->next; + } + *_n = n; + return ret; +} + +void *sam_header2key_val(void *iter, const char type[2], const char key_tag[2], const char value_tag[2], const char **_key, const char **_value) +{ + list_t *l = iter; + if ( !l ) return NULL; + + while (l) + { + HeaderLine *hline = l->data; + if ( hline->type[0]!=type[0] || hline->type[1]!=type[1] ) + { + l = l->next; + continue; + } + + HeaderTag *key, *value; + key = header_line_has_tag(hline,key_tag); + value = header_line_has_tag(hline,value_tag); + if ( !key || !value ) + { + l = l->next; + continue; + } + + *_key = key->value; + *_value = value->value; + return l->next; + } + return l; +} + +const char *sam_tbl_get(void *h, const char *key) +{ + khash_t(str) *tbl = (khash_t(str)*)h; + khint_t k; + k = kh_get(str, tbl, key); + return k == kh_end(tbl)? 0 : kh_val(tbl, k); +} + +int sam_tbl_size(void *h) +{ + khash_t(str) *tbl = (khash_t(str)*)h; + return h? kh_size(tbl) : 0; +} + +void sam_tbl_destroy(void *h) +{ + khash_t(str) *tbl = (khash_t(str)*)h; + kh_destroy(str, tbl); +} + +void *sam_header_merge(int n, const void **_dicts) +{ + const HeaderDict **dicts = (const HeaderDict**)_dicts; + HeaderDict *out_dict; + int idict, status; + + if ( n<2 ) return NULL; + + out_dict = sam_header_clone(dicts[0]); + + for (idict=1; idictdata, out_hlines->data); + if ( status==0 ) + { + out_hlines = out_hlines->next; + continue; + } + + if ( status==2 ) + { + print_header_line(stderr,tmpl_hlines->data); + print_header_line(stderr,out_hlines->data); + debug("Conflicting lines, cannot merge the headers.\n"); + return 0; + } + if ( status==3 ) + sam_header_line_merge_with(out_hlines->data, tmpl_hlines->data); + + inserted = 1; + break; + } + if ( !inserted ) + out_dict = list_append(out_dict, sam_header_line_clone(tmpl_hlines->data)); + + tmpl_hlines = tmpl_hlines->next; + } + } + + return out_dict; +} + +char **sam_header2tbl_n(const void *dict, const char type[2], const char *tags[], int *n) +{ + int nout = 0; + char **out = NULL; + + *n = 0; + list_t *l = (list_t *)dict; + if ( !l ) return NULL; + + int i, ntags = 0; + while ( tags[ntags] ) ntags++; + + while (l) + { + HeaderLine *hline = l->data; + if ( hline->type[0]!=type[0] || hline->type[1]!=type[1] ) + { + l = l->next; + continue; + } + out = (char**) realloc(out, sizeof(char*)*(nout+1)*ntags); + for (i=0; ivalue; + } + nout++; + l = l->next; + } + *n = nout; + return out; +} + diff --git a/samtools/sam_header.c.pysam.c b/samtools/sam_header.c.pysam.c new file mode 100644 index 0000000..32332bd --- /dev/null +++ b/samtools/sam_header.c.pysam.c @@ -0,0 +1,838 @@ +#include "samtools.pysam.h" + +/* sam_header.c -- basic SAM/BAM header API. + + Copyright (C) 2009-2013 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include "sam_header.h" +#include +#include +#include +#include +#include + +#include "htslib/khash.h" +KHASH_MAP_INIT_STR(str, const char *) + +struct _HeaderList +{ + struct _HeaderList *last; // Hack: Used and maintained only by list_append_to_end. Maintained in the root node only. + struct _HeaderList *next; + void *data; +}; +typedef struct _HeaderList list_t; +typedef list_t HeaderDict; + +typedef struct +{ + char key[2]; + char *value; +} +HeaderTag; + +typedef struct +{ + char type[2]; + list_t *tags; +} +HeaderLine; + +const char *o_hd_tags[] = {"SO","GO",NULL}; +const char *r_hd_tags[] = {"VN",NULL}; + +const char *o_sq_tags[] = {"AS","M5","UR","SP",NULL}; +const char *r_sq_tags[] = {"SN","LN",NULL}; +const char *u_sq_tags[] = {"SN",NULL}; + +const char *o_rg_tags[] = {"CN","DS","DT","FO","KS","LB","PG","PI","PL","PU","SM",NULL}; +const char *r_rg_tags[] = {"ID",NULL}; +const char *u_rg_tags[] = {"ID",NULL}; + +const char *o_pg_tags[] = {"VN","CL",NULL}; +const char *r_pg_tags[] = {"ID",NULL}; + +const char *types[] = {"HD","SQ","RG","PG","CO",NULL}; +const char **optional_tags[] = {o_hd_tags,o_sq_tags,o_rg_tags,o_pg_tags,NULL,NULL}; +const char **required_tags[] = {r_hd_tags,r_sq_tags,r_rg_tags,r_pg_tags,NULL,NULL}; +const char **unique_tags[] = {NULL, u_sq_tags,u_rg_tags,NULL,NULL,NULL}; + + +static void debug(const char *format, ...) +{ + va_list ap; + va_start(ap, format); + vfprintf(samtools_stderr, format, ap); + va_end(ap); +} + +#if 0 +// Replaced by list_append_to_end +static list_t *list_prepend(list_t *root, void *data) +{ + list_t *l = malloc(sizeof(list_t)); + l->next = root; + l->data = data; + return l; +} +#endif + +// Relies on the root->last being correct. Do not use with the other list_* +// routines unless they are fixed to modify root->last as well. +static list_t *list_append_to_end(list_t *root, void *data) +{ + list_t *l = malloc(sizeof(list_t)); + l->last = l; + l->next = NULL; + l->data = data; + + if ( !root ) + return l; + + root->last->next = l; + root->last = l; + return root; +} + +static list_t *list_append(list_t *root, void *data) +{ + list_t *l = root; + while (l && l->next) + l = l->next; + if ( l ) + { + l->next = malloc(sizeof(list_t)); + l = l->next; + } + else + { + l = malloc(sizeof(list_t)); + root = l; + } + l->data = data; + l->next = NULL; + return root; +} + +static void list_free(list_t *root) +{ + list_t *l = root; + while (root) + { + l = root; + root = root->next; + free(l); + } +} + + + +// Look for a tag "XY" in a predefined const char *[] array. +static int tag_exists(const char *tag, const char **tags) +{ + int itag=0; + if ( !tags ) return -1; + while ( tags[itag] ) + { + if ( tags[itag][0]==tag[0] && tags[itag][1]==tag[1] ) return itag; + itag++; + } + return -1; +} + + + +// Mimics the behaviour of getline, except it returns pointer to the next chunk of the text +// or NULL if everything has been read. The lineptr should be freed by the caller. The +// newline character is stripped. +static const char *nextline(char **lineptr, size_t *n, const char *text) +{ + int len; + const char *to = text; + + if ( !*to ) return NULL; + + while ( *to && *to!='\n' && *to!='\r' ) to++; + len = to - text + 1; + + if ( *to ) + { + // Advance the pointer for the next call + if ( *to=='\n' ) to++; + else if ( *to=='\r' && *(to+1)=='\n' ) to+=2; + } + if ( !len ) + return to; + + if ( !*lineptr ) + { + *lineptr = malloc(len); + *n = len; + } + else if ( *nkey[0] = name[0]; + tag->key[1] = name[1]; + tag->value = malloc(len+1); + memcpy(tag->value,value_from,len+1); + tag->value[len] = 0; + return tag; +} + +static HeaderTag *header_line_has_tag(HeaderLine *hline, const char *key) +{ + list_t *tags = hline->tags; + while (tags) + { + HeaderTag *tag = tags->data; + if ( tag->key[0]==key[0] && tag->key[1]==key[1] ) return tag; + tags = tags->next; + } + return NULL; +} + + +// Return codes: +// 0 .. different types or unique tags differ or conflicting tags, cannot be merged +// 1 .. all tags identical -> no need to merge, drop one +// 2 .. the unique tags match and there are some conflicting tags (same tag, different value) -> error, cannot be merged nor duplicated +// 3 .. there are some missing complementary tags and no unique conflict -> can be merged into a single line +static int sam_header_compare_lines(HeaderLine *hline1, HeaderLine *hline2) +{ + HeaderTag *t1, *t2; + + if ( hline1->type[0]!=hline2->type[0] || hline1->type[1]!=hline2->type[1] ) + return 0; + + int itype = tag_exists(hline1->type,types); + if ( itype==-1 ) { + debug("[sam_header_compare_lines] Unknown type [%c%c]\n", hline1->type[0],hline1->type[1]); + return -1; // FIXME (lh3): error; I do not know how this will be handled in Petr's code + } + + if ( unique_tags[itype] ) + { + t1 = header_line_has_tag(hline1,unique_tags[itype][0]); + t2 = header_line_has_tag(hline2,unique_tags[itype][0]); + if ( !t1 || !t2 ) // this should never happen, the unique tags are required + return 2; + + if ( strcmp(t1->value,t2->value) ) + return 0; // the unique tags differ, cannot be merged + } + if ( !required_tags[itype] && !optional_tags[itype] ) + { + t1 = hline1->tags->data; + t2 = hline2->tags->data; + if ( !strcmp(t1->value,t2->value) ) return 1; // identical comments + return 0; + } + + int missing=0, itag=0; + while ( required_tags[itype] && required_tags[itype][itag] ) + { + t1 = header_line_has_tag(hline1,required_tags[itype][itag]); + t2 = header_line_has_tag(hline2,required_tags[itype][itag]); + if ( !t1 && !t2 ) + return 2; // this should never happen + else if ( !t1 || !t2 ) + missing = 1; // there is some tag missing in one of the hlines + else if ( strcmp(t1->value,t2->value) ) + { + if ( unique_tags[itype] ) + return 2; // the lines have a matching unique tag but have a conflicting tag + + return 0; // the lines contain conflicting tags, cannot be merged + } + itag++; + } + itag = 0; + while ( optional_tags[itype] && optional_tags[itype][itag] ) + { + t1 = header_line_has_tag(hline1,optional_tags[itype][itag]); + t2 = header_line_has_tag(hline2,optional_tags[itype][itag]); + if ( !t1 && !t2 ) + { + itag++; + continue; + } + if ( !t1 || !t2 ) + missing = 1; // there is some tag missing in one of the hlines + else if ( strcmp(t1->value,t2->value) ) + { + if ( unique_tags[itype] ) + return 2; // the lines have a matching unique tag but have a conflicting tag + + return 0; // the lines contain conflicting tags, cannot be merged + } + itag++; + } + if ( missing ) return 3; // there are some missing complementary tags with no conflicts, can be merged + return 1; +} + + +static HeaderLine *sam_header_line_clone(const HeaderLine *hline) +{ + list_t *tags; + HeaderLine *out = malloc(sizeof(HeaderLine)); + out->type[0] = hline->type[0]; + out->type[1] = hline->type[1]; + out->tags = NULL; + + tags = hline->tags; + while (tags) + { + HeaderTag *old = tags->data; + + HeaderTag *new = malloc(sizeof(HeaderTag)); + new->key[0] = old->key[0]; + new->key[1] = old->key[1]; + new->value = strdup(old->value); + out->tags = list_append(out->tags, new); + + tags = tags->next; + } + return out; +} + +static int sam_header_line_merge_with(HeaderLine *out_hline, const HeaderLine *tmpl_hline) +{ + list_t *tmpl_tags; + + if ( out_hline->type[0]!=tmpl_hline->type[0] || out_hline->type[1]!=tmpl_hline->type[1] ) + return 0; + + tmpl_tags = tmpl_hline->tags; + while (tmpl_tags) + { + HeaderTag *tmpl_tag = tmpl_tags->data; + HeaderTag *out_tag = header_line_has_tag(out_hline, tmpl_tag->key); + if ( !out_tag ) + { + HeaderTag *tag = malloc(sizeof(HeaderTag)); + tag->key[0] = tmpl_tag->key[0]; + tag->key[1] = tmpl_tag->key[1]; + tag->value = strdup(tmpl_tag->value); + out_hline->tags = list_append(out_hline->tags,tag); + } + tmpl_tags = tmpl_tags->next; + } + return 1; +} + + +static HeaderLine *sam_header_line_parse(const char *headerLine) +{ + HeaderLine *hline; + HeaderTag *tag; + const char *from, *to; + from = headerLine; + + if ( *from != '@' ) { + debug("[sam_header_line_parse] expected '@', got [%s]\n", headerLine); + return 0; + } + to = ++from; + + while (*to && *to!='\t') to++; + if ( to-from != 2 ) { + debug("[sam_header_line_parse] expected '@XY', got [%s]\nHint: The header tags must be tab-separated.\n", headerLine); + return 0; + } + + hline = malloc(sizeof(HeaderLine)); + hline->type[0] = from[0]; + hline->type[1] = from[1]; + hline->tags = NULL; + + int itype = tag_exists(hline->type, types); + + from = to; + while (*to && *to=='\t') to++; + if ( to-from != 1 ) { + debug("[sam_header_line_parse] multiple tabs on line [%s] (%d)\n", headerLine,(int)(to-from)); + free(hline); + return 0; + } + from = to; + while (*from) + { + while (*to && *to!='\t') to++; + + if ( !required_tags[itype] && !optional_tags[itype] ) + { + // CO is a special case, it can contain anything, including tabs + if ( *to ) { to++; continue; } + tag = new_tag(" ",from,to-1); + } + else + tag = new_tag(from,from+3,to-1); + + if ( header_line_has_tag(hline,tag->key) ) + debug("The tag '%c%c' present (at least) twice on line [%s]\n", tag->key[0],tag->key[1], headerLine); + hline->tags = list_append(hline->tags, tag); + + from = to; + while (*to && *to=='\t') to++; + if ( *to && to-from != 1 ) { + debug("[sam_header_line_parse] multiple tabs on line [%s] (%d)\n", headerLine,(int)(to-from)); + return 0; + } + + from = to; + } + return hline; +} + + +// Must be of an existing type, all tags must be recognised and all required tags must be present +static int sam_header_line_validate(HeaderLine *hline) +{ + list_t *tags; + HeaderTag *tag; + int itype, itag; + + // Is the type correct? + itype = tag_exists(hline->type, types); + if ( itype==-1 ) + { + debug("The type [%c%c] not recognised.\n", hline->type[0],hline->type[1]); + return 0; + } + + // Has all required tags? + itag = 0; + while ( required_tags[itype] && required_tags[itype][itag] ) + { + if ( !header_line_has_tag(hline,required_tags[itype][itag]) ) + { + debug("The tag [%c%c] required for [%c%c] not present.\n", required_tags[itype][itag][0],required_tags[itype][itag][1], + hline->type[0],hline->type[1]); + return 0; + } + itag++; + } + + // Are all tags recognised? + tags = hline->tags; + while ( tags ) + { + tag = tags->data; + if ( !tag_exists(tag->key,required_tags[itype]) && !tag_exists(tag->key,optional_tags[itype]) ) + { + // Lower case tags are user-defined values. + if( !(islower(tag->key[0]) || islower(tag->key[1])) ) + { + // Neither is lower case, but tag was not recognized. + debug("Unknown tag [%c%c] for [%c%c].\n", tag->key[0],tag->key[1], hline->type[0],hline->type[1]); + // return 0; // Even unknown tags are allowed - for forward compatibility with new attributes + } + // else - allow user defined tag + } + tags = tags->next; + } + + return 1; +} + + +static void print_header_line(FILE *fp, HeaderLine *hline) +{ + list_t *tags = hline->tags; + HeaderTag *tag; + + fprintf(fp, "@%c%c", hline->type[0],hline->type[1]); + while (tags) + { + tag = tags->data; + + fprintf(fp, "\t"); + if ( tag->key[0]!=' ' || tag->key[1]!=' ' ) + fprintf(fp, "%c%c:", tag->key[0],tag->key[1]); + fprintf(fp, "%s", tag->value); + + tags = tags->next; + } + fprintf(fp,"\n"); +} + + +static void sam_header_line_free(HeaderLine *hline) +{ + list_t *tags = hline->tags; + while (tags) + { + HeaderTag *tag = tags->data; + free(tag->value); + free(tag); + tags = tags->next; + } + list_free(hline->tags); + free(hline); +} + +void sam_header_free(void *_header) +{ + HeaderDict *header = (HeaderDict*)_header; + list_t *hlines = header; + while (hlines) + { + sam_header_line_free(hlines->data); + hlines = hlines->next; + } + list_free(header); +} + +HeaderDict *sam_header_clone(const HeaderDict *dict) +{ + HeaderDict *out = NULL; + while (dict) + { + HeaderLine *hline = dict->data; + out = list_append(out, sam_header_line_clone(hline)); + dict = dict->next; + } + return out; +} + +// Returns a newly allocated string +char *sam_header_write(const void *_header) +{ + const HeaderDict *header = (const HeaderDict*)_header; + char *out = NULL; + int len=0, nout=0; + const list_t *hlines; + + // Calculate the length of the string to allocate + hlines = header; + while (hlines) + { + len += 4; // @XY and \n + + HeaderLine *hline = hlines->data; + list_t *tags = hline->tags; + while (tags) + { + HeaderTag *tag = tags->data; + len += strlen(tag->value) + 1; // \t + if ( tag->key[0]!=' ' || tag->key[1]!=' ' ) + len += strlen(tag->value) + 3; // XY: + tags = tags->next; + } + hlines = hlines->next; + } + + nout = 0; + out = malloc(len+1); + hlines = header; + while (hlines) + { + HeaderLine *hline = hlines->data; + + nout += sprintf(out+nout,"@%c%c",hline->type[0],hline->type[1]); + + list_t *tags = hline->tags; + while (tags) + { + HeaderTag *tag = tags->data; + nout += sprintf(out+nout,"\t"); + if ( tag->key[0]!=' ' || tag->key[1]!=' ' ) + nout += sprintf(out+nout,"%c%c:", tag->key[0],tag->key[1]); + nout += sprintf(out+nout,"%s", tag->value); + tags = tags->next; + } + hlines = hlines->next; + nout += sprintf(out+nout,"\n"); + } + out[len] = 0; + return out; +} + +void *sam_header_parse2(const char *headerText) +{ + list_t *hlines = NULL; + HeaderLine *hline; + const char *text; + char *buf=NULL; + size_t nbuf = 0; + int tovalidate = 0; + + if ( !headerText ) + return 0; + + text = headerText; + while ( (text=nextline(&buf, &nbuf, text)) ) + { + hline = sam_header_line_parse(buf); + if ( hline && (!tovalidate || sam_header_line_validate(hline)) ) + // With too many (~250,000) reference sequences the header parsing was too slow with list_append. + hlines = list_append_to_end(hlines, hline); + else + { + if (hline) sam_header_line_free(hline); + sam_header_free(hlines); + if ( buf ) free(buf); + return NULL; + } + } + if ( buf ) free(buf); + + return hlines; +} + +void *sam_header2tbl(const void *_dict, char type[2], char key_tag[2], char value_tag[2]) +{ + const HeaderDict *dict = (const HeaderDict*)_dict; + const list_t *l = dict; + khash_t(str) *tbl = kh_init(str); + khiter_t k; + int ret; + + if (_dict == 0) return tbl; // return an empty (not null) hash table + while (l) + { + HeaderLine *hline = l->data; + if ( hline->type[0]!=type[0] || hline->type[1]!=type[1] ) + { + l = l->next; + continue; + } + + HeaderTag *key, *value; + key = header_line_has_tag(hline,key_tag); + value = header_line_has_tag(hline,value_tag); + if ( !key || !value ) + { + l = l->next; + continue; + } + + k = kh_get(str, tbl, key->value); + if ( k != kh_end(tbl) ) + debug("[sam_header_lookup_table] They key %s not unique.\n", key->value); + k = kh_put(str, tbl, key->value, &ret); + kh_value(tbl, k) = value->value; + + l = l->next; + } + return tbl; +} + +char **sam_header2list(const void *_dict, char type[2], char key_tag[2], int *_n) +{ + const HeaderDict *dict = (const HeaderDict*)_dict; + const list_t *l = dict; + int max, n; + char **ret; + + ret = 0; *_n = max = n = 0; + while (l) + { + HeaderLine *hline = l->data; + if ( hline->type[0]!=type[0] || hline->type[1]!=type[1] ) + { + l = l->next; + continue; + } + + HeaderTag *key; + key = header_line_has_tag(hline,key_tag); + if ( !key ) + { + l = l->next; + continue; + } + + if (n == max) { + max = max? max<<1 : 4; + ret = realloc(ret, max * sizeof(char*)); + } + ret[n++] = key->value; + + l = l->next; + } + *_n = n; + return ret; +} + +void *sam_header2key_val(void *iter, const char type[2], const char key_tag[2], const char value_tag[2], const char **_key, const char **_value) +{ + list_t *l = iter; + if ( !l ) return NULL; + + while (l) + { + HeaderLine *hline = l->data; + if ( hline->type[0]!=type[0] || hline->type[1]!=type[1] ) + { + l = l->next; + continue; + } + + HeaderTag *key, *value; + key = header_line_has_tag(hline,key_tag); + value = header_line_has_tag(hline,value_tag); + if ( !key || !value ) + { + l = l->next; + continue; + } + + *_key = key->value; + *_value = value->value; + return l->next; + } + return l; +} + +const char *sam_tbl_get(void *h, const char *key) +{ + khash_t(str) *tbl = (khash_t(str)*)h; + khint_t k; + k = kh_get(str, tbl, key); + return k == kh_end(tbl)? 0 : kh_val(tbl, k); +} + +int sam_tbl_size(void *h) +{ + khash_t(str) *tbl = (khash_t(str)*)h; + return h? kh_size(tbl) : 0; +} + +void sam_tbl_destroy(void *h) +{ + khash_t(str) *tbl = (khash_t(str)*)h; + kh_destroy(str, tbl); +} + +void *sam_header_merge(int n, const void **_dicts) +{ + const HeaderDict **dicts = (const HeaderDict**)_dicts; + HeaderDict *out_dict; + int idict, status; + + if ( n<2 ) return NULL; + + out_dict = sam_header_clone(dicts[0]); + + for (idict=1; idictdata, out_hlines->data); + if ( status==0 ) + { + out_hlines = out_hlines->next; + continue; + } + + if ( status==2 ) + { + print_header_line(samtools_stderr,tmpl_hlines->data); + print_header_line(samtools_stderr,out_hlines->data); + debug("Conflicting lines, cannot merge the headers.\n"); + return 0; + } + if ( status==3 ) + sam_header_line_merge_with(out_hlines->data, tmpl_hlines->data); + + inserted = 1; + break; + } + if ( !inserted ) + out_dict = list_append(out_dict, sam_header_line_clone(tmpl_hlines->data)); + + tmpl_hlines = tmpl_hlines->next; + } + } + + return out_dict; +} + +char **sam_header2tbl_n(const void *dict, const char type[2], const char *tags[], int *n) +{ + int nout = 0; + char **out = NULL; + + *n = 0; + list_t *l = (list_t *)dict; + if ( !l ) return NULL; + + int i, ntags = 0; + while ( tags[ntags] ) ntags++; + + while (l) + { + HeaderLine *hline = l->data; + if ( hline->type[0]!=type[0] || hline->type[1]!=type[1] ) + { + l = l->next; + continue; + } + out = (char**) realloc(out, sizeof(char*)*(nout+1)*ntags); + for (i=0; ivalue; + } + nout++; + l = l->next; + } + *n = nout; + return out; +} + diff --git a/samtools/sam_header.h b/samtools/sam_header.h new file mode 100644 index 0000000..8266885 --- /dev/null +++ b/samtools/sam_header.h @@ -0,0 +1,72 @@ +/* sam_header.h -- basic SAM/BAM header API. + + Copyright (C) 2009, 2012, 2013 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#ifndef __SAM_HEADER_H__ +#define __SAM_HEADER_H__ + +#ifdef __cplusplus +extern "C" { +#endif + + void *sam_header_parse2(const char *headerText); + void *sam_header_merge(int n, const void **dicts); + void sam_header_free(void *header); + char *sam_header_write(const void *headerDict); // returns a newly allocated string + + /* + // Usage example + const char *key, *val; + void *iter = sam_header_parse2(bam->header->text); + while ( iter = sam_header_key_val(iter, "RG","ID","SM" &key,&val) ) printf("%s\t%s\n", key,val); + */ + void *sam_header2key_val(void *iter, const char type[2], const char key_tag[2], const char value_tag[2], const char **key, const char **value); + char **sam_header2list(const void *_dict, char type[2], char key_tag[2], int *_n); + + /* + // Usage example + int i, j, n; + const char *tags[] = {"SN","LN","UR","M5",NULL}; + void *dict = sam_header_parse2(bam->header->text); + char **tbl = sam_header2tbl_n(h->dict, "SQ", tags, &n); + for (i=0; i + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include "sam_opts.h" + +/* + * Processes a standard "global" samtools long option. + * + * The 'c' value is the return value from a getopt_long() call. It is checked + * against the lopt[] array to find the corresponding value as this may have + * been reassigned by the individual subcommand. + * + * Having found the entry, the corresponding long form is used to apply the + * option, storing the setting in sam_global_args *ga. + * + * Returns 0 on success, + * -1 on failure. + */ +int parse_sam_global_opt(int c, const char *optarg, const struct option *lopt, + sam_global_args *ga) { + int r = 0; + + while (lopt->name) { + if (c != lopt->val) { + lopt++; + continue; + } + + if (strcmp(lopt->name, "input-fmt") == 0) { + r = hts_parse_format(&ga->in, optarg); + break; + } else if (strcmp(lopt->name, "input-fmt-option") == 0) { + r = hts_opt_add((hts_opt **)&ga->in.specific, optarg); + break; + } else if (strcmp(lopt->name, "output-fmt") == 0) { + r = hts_parse_format(&ga->out, optarg); + break; + } else if (strcmp(lopt->name, "output-fmt-option") == 0) { + r = hts_opt_add((hts_opt **)&ga->out.specific, optarg); + break; + } else if (strcmp(lopt->name, "reference") == 0) { + char *ref = malloc(10 + strlen(optarg) + 1); + sprintf(ref, "reference=%s", optarg); + ga->reference = strdup(optarg); + r = hts_opt_add((hts_opt **)&ga->in.specific, ref); + r |= hts_opt_add((hts_opt **)&ga->out.specific, ref); + free(ref); + break; + } else if (strcmp(lopt->name, "threads") == 0) { + ga->nthreads = atoi(optarg); + break; +// } else if (strcmp(lopt->name, "verbose") == 0) { +// ga->verbosity++; +// break; + } + } + + if (!lopt->name) { + fprintf(stderr, "Unexpected global option: %s\n", lopt->name); + return -1; + } + + return r; +} + +/* + * Report the usage for global options. + * + * This accepts a string with one character per SAM_OPT_GLOBAL_OPTIONS option + * to determine which options need to be printed and how. + * Each character should be one of: + * '.' No short option has been assigned. Use --long-opt only. + * '-' The long (and short) option has been disabled. + * Otherwise the short option is character . + */ +void sam_global_opt_help(FILE *fp, const char *shortopts) { + int i = 0; + + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS(0,0,0,0,0,0), + { NULL, 0, NULL, 0 } + }; + + for (i = 0; shortopts && shortopts[i] && lopts[i].name; i++) { + if (shortopts[i] == '-') + continue; + + if (shortopts[i] == '.') + fprintf(fp, " --"); + else + fprintf(fp, " -%c, --", shortopts[i]); + + if (strcmp(lopts[i].name, "input-fmt") == 0) + fprintf(fp,"input-fmt FORMAT[,OPT[=VAL]]...\n" + " Specify input format (SAM, BAM, CRAM)\n"); + else if (strcmp(lopts[i].name, "input-fmt-option") == 0) + fprintf(fp,"input-fmt-option OPT[=VAL]\n" + " Specify a single input file format option in the form\n" + " of OPTION or OPTION=VALUE\n"); + else if (strcmp(lopts[i].name, "output-fmt") == 0) + fprintf(fp,"output-fmt FORMAT[,OPT[=VAL]]...\n" + " Specify output format (SAM, BAM, CRAM)\n"); + else if (strcmp(lopts[i].name, "output-fmt-option") == 0) + fprintf(fp,"output-fmt-option OPT[=VAL]\n" + " Specify a single output file format option in the form\n" + " of OPTION or OPTION=VALUE\n"); + else if (strcmp(lopts[i].name, "reference") == 0) + fprintf(fp,"reference FILE\n" + " Reference sequence FASTA FILE [null]\n"); + else if (strcmp(lopts[i].name, "threads") == 0) + fprintf(fp,"threads INT\n" + " Number of additional threads to use [0]\n"); +// else if (strcmp(lopts[i].name, "verbose") == 0) +// fprintf(fp,"verbose\n" +// " Increment level of verbosity\n"); + } +} + +void sam_global_args_init(sam_global_args *ga) { + if (!ga) + return; + + memset(ga, 0, sizeof(*ga)); +} + +void sam_global_args_free(sam_global_args *ga) { + if (ga->in.specific) + hts_opt_free(ga->in.specific); + + if (ga->out.specific) + hts_opt_free(ga->out.specific); + + if (ga->reference) + free(ga->reference); +} diff --git a/samtools/sam_opts.c.pysam.c b/samtools/sam_opts.c.pysam.c new file mode 100644 index 0000000..d965208 --- /dev/null +++ b/samtools/sam_opts.c.pysam.c @@ -0,0 +1,163 @@ +#include "samtools.pysam.h" + +/* sam_opts.c -- utilities to aid parsing common command line options. + + Copyright (C) 2015 Genome Research Ltd. + + Author: James Bonfield + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include "sam_opts.h" + +/* + * Processes a standard "global" samtools long option. + * + * The 'c' value is the return value from a getopt_long() call. It is checked + * against the lopt[] array to find the corresponding value as this may have + * been reassigned by the individual subcommand. + * + * Having found the entry, the corresponding long form is used to apply the + * option, storing the setting in sam_global_args *ga. + * + * Returns 0 on success, + * -1 on failure. + */ +int parse_sam_global_opt(int c, const char *optarg, const struct option *lopt, + sam_global_args *ga) { + int r = 0; + + while (lopt->name) { + if (c != lopt->val) { + lopt++; + continue; + } + + if (strcmp(lopt->name, "input-fmt") == 0) { + r = hts_parse_format(&ga->in, optarg); + break; + } else if (strcmp(lopt->name, "input-fmt-option") == 0) { + r = hts_opt_add((hts_opt **)&ga->in.specific, optarg); + break; + } else if (strcmp(lopt->name, "output-fmt") == 0) { + r = hts_parse_format(&ga->out, optarg); + break; + } else if (strcmp(lopt->name, "output-fmt-option") == 0) { + r = hts_opt_add((hts_opt **)&ga->out.specific, optarg); + break; + } else if (strcmp(lopt->name, "reference") == 0) { + char *ref = malloc(10 + strlen(optarg) + 1); + sprintf(ref, "reference=%s", optarg); + ga->reference = strdup(optarg); + r = hts_opt_add((hts_opt **)&ga->in.specific, ref); + r |= hts_opt_add((hts_opt **)&ga->out.specific, ref); + free(ref); + break; + } else if (strcmp(lopt->name, "threads") == 0) { + ga->nthreads = atoi(optarg); + break; +// } else if (strcmp(lopt->name, "verbose") == 0) { +// ga->verbosity++; +// break; + } + } + + if (!lopt->name) { + fprintf(samtools_stderr, "Unexpected global option: %s\n", lopt->name); + return -1; + } + + return r; +} + +/* + * Report the usage for global options. + * + * This accepts a string with one character per SAM_OPT_GLOBAL_OPTIONS option + * to determine which options need to be printed and how. + * Each character should be one of: + * '.' No short option has been assigned. Use --long-opt only. + * '-' The long (and short) option has been disabled. + * Otherwise the short option is character . + */ +void sam_global_opt_help(FILE *fp, const char *shortopts) { + int i = 0; + + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS(0,0,0,0,0,0), + { NULL, 0, NULL, 0 } + }; + + for (i = 0; shortopts && shortopts[i] && lopts[i].name; i++) { + if (shortopts[i] == '-') + continue; + + if (shortopts[i] == '.') + fprintf(fp, " --"); + else + fprintf(fp, " -%c, --", shortopts[i]); + + if (strcmp(lopts[i].name, "input-fmt") == 0) + fprintf(fp,"input-fmt FORMAT[,OPT[=VAL]]...\n" + " Specify input format (SAM, BAM, CRAM)\n"); + else if (strcmp(lopts[i].name, "input-fmt-option") == 0) + fprintf(fp,"input-fmt-option OPT[=VAL]\n" + " Specify a single input file format option in the form\n" + " of OPTION or OPTION=VALUE\n"); + else if (strcmp(lopts[i].name, "output-fmt") == 0) + fprintf(fp,"output-fmt FORMAT[,OPT[=VAL]]...\n" + " Specify output format (SAM, BAM, CRAM)\n"); + else if (strcmp(lopts[i].name, "output-fmt-option") == 0) + fprintf(fp,"output-fmt-option OPT[=VAL]\n" + " Specify a single output file format option in the form\n" + " of OPTION or OPTION=VALUE\n"); + else if (strcmp(lopts[i].name, "reference") == 0) + fprintf(fp,"reference FILE\n" + " Reference sequence FASTA FILE [null]\n"); + else if (strcmp(lopts[i].name, "threads") == 0) + fprintf(fp,"threads INT\n" + " Number of additional threads to use [0]\n"); +// else if (strcmp(lopts[i].name, "verbose") == 0) +// fprintf(fp,"verbose\n" +// " Increment level of verbosity\n"); + } +} + +void sam_global_args_init(sam_global_args *ga) { + if (!ga) + return; + + memset(ga, 0, sizeof(*ga)); +} + +void sam_global_args_free(sam_global_args *ga) { + if (ga->in.specific) + hts_opt_free(ga->in.specific); + + if (ga->out.specific) + hts_opt_free(ga->out.specific); + + if (ga->reference) + free(ga->reference); +} diff --git a/samtools/sam_opts.h b/samtools/sam_opts.h new file mode 100644 index 0000000..6edbf64 --- /dev/null +++ b/samtools/sam_opts.h @@ -0,0 +1,102 @@ +/* sam_opts.h -- utilities to aid parsing common command line options. + + Copyright (C) 2015 Genome Research Ltd. + + Author: James Bonfield + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#ifndef SAM_OPTS_H +#define SAM_OPTS_H + +#include +#include +#include +#include + +typedef struct sam_global_args { + htsFormat in; + htsFormat out; + char *reference; + int nthreads; + //int verbosity; +} sam_global_args; + +#define SAM_GLOBAL_ARGS_INIT {{0},{0}} + +enum { + SAM_OPT_INPUT_FMT = CHAR_MAX+1, + SAM_OPT_INPUT_FMT_OPTION, + SAM_OPT_OUTPUT_FMT, + SAM_OPT_OUTPUT_FMT_OPTION, + SAM_OPT_REFERENCE, + SAM_OPT_NTHREADS, + //SAM_OPT_VERBOSE +}; + +#define SAM_OPT_VAL(val, defval) ((val) == '-')? '?' : (val)? (val) : (defval) + +// Use this within struct option lopts[] = {...} to add the standard global +// options. The arguments determine whether the corresponding option is +// enabled and, if so, whether it has a short option equivalent: +// 0 No short option has been assigned. Use --long-opt only. +// '-' Both long and short options are disabled. +// Otherwise the equivalent short option is character . +#define SAM_OPT_GLOBAL_OPTIONS(o1, o2, o3, o4, o5, o6) \ + {"input-fmt", required_argument, NULL, SAM_OPT_VAL(o1, SAM_OPT_INPUT_FMT)}, \ + {"input-fmt-option", required_argument, NULL, SAM_OPT_VAL(o2, SAM_OPT_INPUT_FMT_OPTION)}, \ + {"output-fmt", required_argument, NULL, SAM_OPT_VAL(o3, SAM_OPT_OUTPUT_FMT)}, \ + {"output-fmt-option", required_argument, NULL, SAM_OPT_VAL(o4, SAM_OPT_OUTPUT_FMT_OPTION)}, \ + {"reference", required_argument, NULL, SAM_OPT_VAL(o5, SAM_OPT_REFERENCE)}, \ + {"threads", required_argument, NULL, SAM_OPT_VAL(o6, SAM_OPT_NTHREADS)} + //{"verbose", no_argument, NULL, SAM_OPT_VERBOSE} + +/* + * Processes a standard "global" samtools long option. + * + * The 'c' value is the return value from a getopt_long() call. It is checked + * against the lopt[] array to find the corresponding value as this may have + * been reassigned by the individual subcommand. + * + * Having found the entry, the corresponding long form is used to apply the + * option, storing the setting in sam_global_args *ga. + * + * Returns 0 on success, + * -1 on failure. + */ +int parse_sam_global_opt(int c, const char *optarg, const struct option *lopt, + sam_global_args *ga); + +/* + * Report the usage for global options. + * + * This accepts a string with one character per SAM_OPT_GLOBAL_OPTIONS option + * to determine which options need to be printed and how. + * Each character should be one of: + * '.' No short option has been assigned. Use --long-opt only. + * '-' The long (and short) option has been disabled. + * Otherwise the short option is character . + */ +void sam_global_opt_help(FILE *fp, const char *shortopts); + + +void sam_global_args_init(sam_global_args *ga); +void sam_global_args_free(sam_global_args *ga); + +#endif diff --git a/samtools/sam_utils.c b/samtools/sam_utils.c new file mode 100644 index 0000000..efa6e2f --- /dev/null +++ b/samtools/sam_utils.c @@ -0,0 +1,88 @@ +/* sam_utils.c -- various utilities internal to samtools. + + Copyright (C) 2014-2016 Genome Research Ltd. + + Author: John Marshall + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include + +#include "samtools.h" +#include "version.h" + +static void vprint_error_core(const char *subcommand, const char *format, va_list args, const char *extra) +{ + fflush(stdout); + if (subcommand && *subcommand) fprintf(stderr, "samtools %s: ", subcommand); + else fprintf(stderr, "samtools: "); + vfprintf(stderr, format, args); + if (extra) fprintf(stderr, ": %s\n", extra); + else fprintf(stderr, "\n"); + fflush(stderr); +} + +void print_error(const char *subcommand, const char *format, ...) +{ + va_list args; + va_start(args, format); + vprint_error_core(subcommand, format, args, NULL); + va_end(args); +} + +void print_error_errno(const char *subcommand, const char *format, ...) +{ + int err = errno; + va_list args; + va_start(args, format); + vprint_error_core(subcommand, format, args, err? strerror(err) : NULL); + va_end(args); +} + +const char *samtools_version() +{ + return SAMTOOLS_VERSION; +} + +const char *samtools_version_short() +{ + char *sv, *hyph, *v; + int len; + + v = SAMTOOLS_VERSION; + hyph = strchr(v, '-'); + if (!hyph) + return strdup(v); + + len = hyph - v; + sv = (char *)malloc(len+1); + if (!sv) + return NULL; + + strncpy(sv, v, len); + sv[len] = '\0'; + + return (const char*)sv; +} diff --git a/samtools/sam_utils.c.pysam.c b/samtools/sam_utils.c.pysam.c new file mode 100644 index 0000000..53f1763 --- /dev/null +++ b/samtools/sam_utils.c.pysam.c @@ -0,0 +1,90 @@ +#include "samtools.pysam.h" + +/* sam_utils.c -- various utilities internal to samtools. + + Copyright (C) 2014-2016 Genome Research Ltd. + + Author: John Marshall + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include + +#include "samtools.h" +#include "version.h" + +static void vprint_error_core(const char *subcommand, const char *format, va_list args, const char *extra) +{ + fflush(samtools_stdout); + if (subcommand && *subcommand) fprintf(samtools_stderr, "samtools %s: ", subcommand); + else fprintf(samtools_stderr, "samtools: "); + vfprintf(samtools_stderr, format, args); + if (extra) fprintf(samtools_stderr, ": %s\n", extra); + else fprintf(samtools_stderr, "\n"); + fflush(samtools_stderr); +} + +void print_error(const char *subcommand, const char *format, ...) +{ + va_list args; + va_start(args, format); + vprint_error_core(subcommand, format, args, NULL); + va_end(args); +} + +void print_error_errno(const char *subcommand, const char *format, ...) +{ + int err = errno; + va_list args; + va_start(args, format); + vprint_error_core(subcommand, format, args, err? strerror(err) : NULL); + va_end(args); +} + +const char *samtools_version() +{ + return SAMTOOLS_VERSION; +} + +const char *samtools_version_short() +{ + char *sv, *hyph, *v; + int len; + + v = SAMTOOLS_VERSION; + hyph = strchr(v, '-'); + if (!hyph) + return strdup(v); + + len = hyph - v; + sv = (char *)malloc(len+1); + if (!sv) + return NULL; + + strncpy(sv, v, len); + sv[len] = '\0'; + + return (const char*)sv; +} diff --git a/samtools/sam_view.c b/samtools/sam_view.c new file mode 100644 index 0000000..bce2c06 --- /dev/null +++ b/samtools/sam_view.c @@ -0,0 +1,1582 @@ +/* sam_view.c -- SAM<->BAM<->CRAM conversion. + + Copyright (C) 2009-2017 Genome Research Ltd. + Portions copyright (C) 2009, 2011, 2012 Broad Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notices and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "htslib/sam.h" +#include "htslib/faidx.h" +#include "htslib/kstring.h" +#include "htslib/khash.h" +#include "htslib/klist.h" +#include "htslib/thread_pool.h" +#include "htslib/bgzf.h" +#include "samtools.h" +#include "sam_opts.h" +#include "bedidx.h" + +#define DEFAULT_BARCODE_TAG "BC" +#define DEFAULT_QUALITY_TAG "QT" + +KHASH_SET_INIT_STR(rg) +#define taglist_free(p) +KLIST_INIT(ktaglist, char*, taglist_free) + +typedef khash_t(rg) *rghash_t; + +// This structure contains the settings for a samview run +typedef struct samview_settings { + rghash_t rghash; + int min_mapQ; + int flag_on; + int flag_off; + int flag_alloff; + int min_qlen; + int remove_B; + uint32_t subsam_seed; + double subsam_frac; + char* library; + void* bed; + size_t remove_aux_len; + char** remove_aux; + int multi_region; +} samview_settings_t; + + +// TODO Add declarations of these to a viable htslib or samtools header +extern const char *bam_get_library(bam_hdr_t *header, const bam1_t *b); +extern int bam_remove_B(bam1_t *b); +extern char *samfaipath(const char *fn_ref); + +// Returns 0 to indicate read should be output 1 otherwise +static int process_aln(const bam_hdr_t *h, bam1_t *b, samview_settings_t* settings) +{ + if (settings->remove_B) bam_remove_B(b); + if (settings->min_qlen > 0) { + int k, qlen = 0; + uint32_t *cigar = bam_get_cigar(b); + for (k = 0; k < b->core.n_cigar; ++k) + if ((bam_cigar_type(bam_cigar_op(cigar[k]))&1) || bam_cigar_op(cigar[k]) == BAM_CHARD_CLIP) + qlen += bam_cigar_oplen(cigar[k]); + if (qlen < settings->min_qlen) return 1; + } + if (b->core.qual < settings->min_mapQ || ((b->core.flag & settings->flag_on) != settings->flag_on) || (b->core.flag & settings->flag_off)) + return 1; + if (settings->flag_alloff && ((b->core.flag & settings->flag_alloff) == settings->flag_alloff)) + return 1; + if (!settings->multi_region && settings->bed && (b->core.tid < 0 || !bed_overlap(settings->bed, h->target_name[b->core.tid], b->core.pos, bam_endpos(b)))) + return 1; + if (settings->subsam_frac > 0.) { + uint32_t k = __ac_Wang_hash(__ac_X31_hash_string(bam_get_qname(b)) ^ settings->subsam_seed); + if ((double)(k&0xffffff) / 0x1000000 >= settings->subsam_frac) return 1; + } + if (settings->rghash) { + uint8_t *s = bam_aux_get(b, "RG"); + if (s) { + khint_t k = kh_get(rg, settings->rghash, (char*)(s + 1)); + if (k == kh_end(settings->rghash)) return 1; + } + } + if (settings->library) { + const char *p = bam_get_library((bam_hdr_t*)h, b); + if (!p || strcmp(p, settings->library) != 0) return 1; + } + if (settings->remove_aux_len) { + size_t i; + for (i = 0; i < settings->remove_aux_len; ++i) { + uint8_t *s = bam_aux_get(b, settings->remove_aux[i]); + if (s) { + bam_aux_del(b, s); + } + } + } + return 0; +} + +static char *drop_rg(char *hdtxt, rghash_t h, int *len) +{ + char *p = hdtxt, *q, *r, *s; + kstring_t str; + memset(&str, 0, sizeof(kstring_t)); + while (1) { + int toprint = 0; + q = strchr(p, '\n'); + if (q == 0) q = p + strlen(p); + if (q - p < 3) break; // the line is too short; then stop + if (strncmp(p, "@RG\t", 4) == 0) { + int c; + khint_t k; + if ((r = strstr(p, "\tID:")) != 0) { + r += 4; + for (s = r; *s != '\0' && *s != '\n' && *s != '\t'; ++s); + c = *s; *s = '\0'; + k = kh_get(rg, h, r); + *s = c; + if (k != kh_end(h)) toprint = 1; + } + } else toprint = 1; + if (toprint) { + kputsn(p, q - p, &str); kputc('\n', &str); + } + p = q + 1; + } + *len = str.l; + return str.s; +} + +static int usage(FILE *fp, int exit_status, int is_long_help); + +static int add_read_group_single(const char *subcmd, samview_settings_t *settings, char *name) +{ + char *d = strdup(name); + int ret = 0; + + if (d == NULL) goto err; + + if (settings->rghash == NULL) { + settings->rghash = kh_init(rg); + if (settings->rghash == NULL) goto err; + } + + kh_put(rg, settings->rghash, d, &ret); + if (ret == -1) goto err; + if (ret == 0) free(d); /* Duplicate */ + return 0; + + err: + print_error(subcmd, "Couldn't add \"%s\" to read group list: memory exhausted?", name); + free(d); + return -1; +} + +static int add_read_groups_file(const char *subcmd, samview_settings_t *settings, char *fn) +{ + FILE *fp; + char buf[1024]; + int ret = 0; + if (settings->rghash == NULL) { + settings->rghash = kh_init(rg); + if (settings->rghash == NULL) { + perror(NULL); + return -1; + } + } + + fp = fopen(fn, "r"); + if (fp == NULL) { + print_error_errno(subcmd, "failed to open \"%s\" for reading", fn); + return -1; + } + + while (ret != -1 && !feof(fp) && fscanf(fp, "%1023s", buf) > 0) { + char *d = strdup(buf); + if (d != NULL) { + kh_put(rg, settings->rghash, d, &ret); + if (ret == 0) free(d); /* Duplicate */ + } else { + ret = -1; + } + } + if (ferror(fp)) ret = -1; + if (ret == -1) { + print_error_errno(subcmd, "failed to read \"%s\"", fn); + } + fclose(fp); + return (ret != -1) ? 0 : -1; +} + +static inline int check_sam_write1(samFile *fp, const bam_hdr_t *h, const bam1_t *b, const char *fname, int *retp) +{ + int r = sam_write1(fp, h, b); + if (r >= 0) return r; + + if (fname) print_error_errno("view", "writing to \"%s\" failed", fname); + else print_error_errno("view", "writing to standard output failed"); + + *retp = EXIT_FAILURE; + return r; +} + +static void check_sam_close(const char *subcmd, samFile *fp, const char *fname, const char *null_fname, int *retp) +{ + int r = sam_close(fp); + if (r >= 0) return; + + // TODO Need error infrastructure so we can print a message instead of r + if (fname) print_error(subcmd, "error closing \"%s\": %d", fname, r); + else print_error(subcmd, "error closing %s: %d", null_fname, r); + + *retp = EXIT_FAILURE; +} + +int main_samview(int argc, char *argv[]) +{ + int c, is_header = 0, is_header_only = 0, ret = 0, compress_level = -1, is_count = 0; + int is_long_help = 0; + int64_t count = 0; + samFile *in = 0, *out = 0, *un_out=0; + FILE *fp_out = NULL; + bam_hdr_t *header = NULL; + char out_mode[5], out_un_mode[5], *out_format = ""; + char *fn_in = 0, *fn_out = 0, *fn_list = 0, *q, *fn_un_out = 0; + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + htsThreadPool p = {NULL, 0}; + int filter_state = ALL, filter_op = 0; + int result; + + samview_settings_t settings = { + .rghash = NULL, + .min_mapQ = 0, + .flag_on = 0, + .flag_off = 0, + .flag_alloff = 0, + .min_qlen = 0, + .remove_B = 0, + .subsam_seed = 0, + .subsam_frac = -1., + .library = NULL, + .bed = NULL, + .multi_region = 0 + }; + + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, 'O', 0, 'T', '@'), + { NULL, 0, NULL, 0 } + }; + + /* parse command-line options */ + strcpy(out_mode, "w"); + strcpy(out_un_mode, "w"); + while ((c = getopt_long(argc, argv, + "SbBcCt:h1Ho:O:q:f:F:G:ul:r:?T:R:L:s:@:m:x:U:M", + lopts, NULL)) >= 0) { + switch (c) { + case 's': + if ((settings.subsam_seed = strtol(optarg, &q, 10)) != 0) { + // Convert likely user input 0,1,2,... to pseudo-random + // values with more entropy and more bits set + srand(settings.subsam_seed); + settings.subsam_seed = rand(); + } + settings.subsam_frac = strtod(q, &q); + break; + case 'm': settings.min_qlen = atoi(optarg); break; + case 'c': is_count = 1; break; + case 'S': break; + case 'b': out_format = "b"; break; + case 'C': out_format = "c"; break; + case 't': fn_list = strdup(optarg); break; + case 'h': is_header = 1; break; + case 'H': is_header_only = 1; break; + case 'o': fn_out = strdup(optarg); break; + case 'U': fn_un_out = strdup(optarg); break; + case 'f': settings.flag_on |= strtol(optarg, 0, 0); break; + case 'F': settings.flag_off |= strtol(optarg, 0, 0); break; + case 'G': settings.flag_alloff |= strtol(optarg, 0, 0); break; + case 'q': settings.min_mapQ = atoi(optarg); break; + case 'u': compress_level = 0; break; + case '1': compress_level = 1; break; + case 'l': settings.library = strdup(optarg); break; + case 'L': + if ((settings.bed = bed_read(optarg)) == NULL) { + print_error_errno("view", "Could not read file \"%s\"", optarg); + ret = 1; + goto view_end; + } + break; + case 'r': + if (add_read_group_single("view", &settings, optarg) != 0) { + ret = 1; + goto view_end; + } + break; + case 'R': + if (add_read_groups_file("view", &settings, optarg) != 0) { + ret = 1; + goto view_end; + } + break; + /* REMOVED as htslib doesn't support this + //case 'x': out_format = "x"; break; + //case 'X': out_format = "X"; break; + */ + case '?': is_long_help = 1; break; + case 'B': settings.remove_B = 1; break; + case 'x': + { + if (strlen(optarg) != 2) { + fprintf(stderr, "main_samview: Error parsing -x auxiliary tags should be exactly two characters long.\n"); + return usage(stderr, EXIT_FAILURE, is_long_help); + } + settings.remove_aux = (char**)realloc(settings.remove_aux, sizeof(char*) * (++settings.remove_aux_len)); + settings.remove_aux[settings.remove_aux_len-1] = optarg; + } + break; + case 'M': settings.multi_region = 1; break; + default: + if (parse_sam_global_opt(c, optarg, lopts, &ga) != 0) + return usage(stderr, EXIT_FAILURE, is_long_help); + break; + } + } + if (compress_level >= 0 && !*out_format) out_format = "b"; + if (is_header_only) is_header = 1; + // File format auto-detection first + if (fn_out) sam_open_mode(out_mode+1, fn_out, NULL); + if (fn_un_out) sam_open_mode(out_un_mode+1, fn_un_out, NULL); + // Overridden by manual -b, -C + if (*out_format) + out_mode[1] = out_un_mode[1] = *out_format; + out_mode[2] = out_un_mode[2] = '\0'; + // out_(un_)mode now 1 or 2 bytes long, followed by nul. + if (compress_level >= 0) { + char tmp[2]; + tmp[0] = compress_level + '0'; tmp[1] = '\0'; + strcat(out_mode, tmp); + strcat(out_un_mode, tmp); + } + if (argc == optind && isatty(STDIN_FILENO)) return usage(stdout, EXIT_SUCCESS, is_long_help); // potential memory leak... + + fn_in = (optind < argc)? argv[optind] : "-"; + // generate the fn_list if necessary + if (fn_list == 0 && ga.reference) fn_list = samfaipath(ga.reference); + // open file handlers + if ((in = sam_open_format(fn_in, "r", &ga.in)) == 0) { + print_error_errno("view", "failed to open \"%s\" for reading", fn_in); + ret = 1; + goto view_end; + } + + if (fn_list) { + if (hts_set_fai_filename(in, fn_list) != 0) { + fprintf(stderr, "[main_samview] failed to use reference \"%s\".\n", fn_list); + ret = 1; + goto view_end; + } + } + if ((header = sam_hdr_read(in)) == 0) { + fprintf(stderr, "[main_samview] fail to read the header from \"%s\".\n", fn_in); + ret = 1; + goto view_end; + } + if (settings.rghash) { // FIXME: I do not know what "bam_header_t::n_text" is for... + char *tmp; + int l; + tmp = drop_rg(header->text, settings.rghash, &l); + free(header->text); + header->text = tmp; + header->l_text = l; + } + if (!is_count) { + if ((out = sam_open_format(fn_out? fn_out : "-", out_mode, &ga.out)) == 0) { + print_error_errno("view", "failed to open \"%s\" for writing", fn_out? fn_out : "standard output"); + ret = 1; + goto view_end; + } + if (fn_list) { + if (hts_set_fai_filename(out, fn_list) != 0) { + fprintf(stderr, "[main_samview] failed to use reference \"%s\".\n", fn_list); + ret = 1; + goto view_end; + } + } + if (*out_format || is_header || + out_mode[1] == 'b' || out_mode[1] == 'c' || + (ga.out.format != sam && ga.out.format != unknown_format)) { + if (sam_hdr_write(out, header) != 0) { + fprintf(stderr, "[main_samview] failed to write the SAM header\n"); + ret = 1; + goto view_end; + } + } + if (fn_un_out) { + if ((un_out = sam_open_format(fn_un_out, out_un_mode, &ga.out)) == 0) { + print_error_errno("view", "failed to open \"%s\" for writing", fn_un_out); + ret = 1; + goto view_end; + } + if (fn_list) { + if (hts_set_fai_filename(un_out, fn_list) != 0) { + fprintf(stderr, "[main_samview] failed to use reference \"%s\".\n", fn_list); + ret = 1; + goto view_end; + } + } + if (*out_format || is_header || + out_un_mode[1] == 'b' || out_un_mode[1] == 'c' || + (ga.out.format != sam && ga.out.format != unknown_format)) { + if (sam_hdr_write(un_out, header) != 0) { + fprintf(stderr, "[main_samview] failed to write the SAM header\n"); + ret = 1; + goto view_end; + } + } + } + } + else { + if (fn_out) { + fp_out = fopen(fn_out, "w"); + if (fp_out == NULL) { + print_error_errno("view", "can't create \"%s\"", fn_out); + ret = EXIT_FAILURE; + goto view_end; + } + } + } + + if (ga.nthreads > 1) { + if (!(p.pool = hts_tpool_init(ga.nthreads))) { + fprintf(stderr, "Error creating thread pool\n"); + ret = 1; + goto view_end; + } + hts_set_opt(in, HTS_OPT_THREAD_POOL, &p); + if (out) hts_set_opt(out, HTS_OPT_THREAD_POOL, &p); + } + if (is_header_only) goto view_end; // no need to print alignments + + if (settings.multi_region) { + if (optind < argc - 1) { //regions have been specified in the command line + settings.bed = bed_hash_regions(settings.bed, argv, optind+1, argc, &filter_op); //insert(1) or filter out(0) the regions from the command line in the same hash table as the bed file + if (!filter_op) + filter_state = FILTERED; + } + + bam1_t *b = bam_init1(); + if (settings.bed == NULL) { // index is unavailable or no regions have been specified + while ((result = sam_read1(in, header, b)) >= 0) { // read one alignment from `in' + if (!process_aln(header, b, &settings)) { + if (!is_count) { if (check_sam_write1(out, header, b, fn_out, &ret) < 0) break; } + count++; + } else { + if (un_out) { if (check_sam_write1(un_out, header, b, fn_un_out, &ret) < 0) break; } + } + } + if (result < -1) { + fprintf(stderr, "[main_samview] truncated file.\n"); + ret = 1; + } + } else { + hts_idx_t *idx = sam_index_load(in, fn_in); // load index + if (idx != NULL) { + + int regcount = 0; + + hts_reglist_t *reglist = bed_reglist(settings.bed, filter_state, ®count); + if(reglist) { + hts_itr_multi_t *iter = sam_itr_regions(idx, header, reglist, regcount); + if (iter) { + // fetch alignments + while ((result = sam_itr_multi_next(in, iter, b)) >= 0) { + if (!process_aln(header, b, &settings)) { + if (!is_count) { if (check_sam_write1(out, header, b, fn_out, &ret) < 0) break; } + count++; + } else { + if (un_out) { if (check_sam_write1(un_out, header, b, fn_un_out, &ret) < 0) break; } + } + } + if (result < -1) { + fprintf(stderr, "[main_samview] retrieval of region %d failed due to truncated file or corrupt BAM index file\n", iter->curr_tid); + ret = 1; + } + + hts_itr_multi_destroy(iter); + } else { + fprintf(stderr, "[main_samview] iterator could not be created. Aborting.\n"); + } + } else { + fprintf(stderr, "[main_samview] region list is empty or could not be created. Aborting.\n"); + } + hts_idx_destroy(idx); // destroy the BAM index + } else { + fprintf(stderr, "[main_samview] random alignment retrieval only works for indexed BAM or CRAM files.\n"); + } + } + bam_destroy1(b); + } else { + if (optind + 1 >= argc) { // convert/print the entire file + bam1_t *b = bam_init1(); + int r; + while ((r = sam_read1(in, header, b)) >= 0) { // read one alignment from `in' + if (!process_aln(header, b, &settings)) { + if (!is_count) { if (check_sam_write1(out, header, b, fn_out, &ret) < 0) break; } + count++; + } else { + if (un_out) { if (check_sam_write1(un_out, header, b, fn_un_out, &ret) < 0) break; } + } + } + if (r < -1) { + fprintf(stderr, "[main_samview] truncated file.\n"); + ret = 1; + } + bam_destroy1(b); + } else { // retrieve alignments in specified regions + int i; + bam1_t *b; + hts_idx_t *idx = sam_index_load(in, fn_in); // load index + if (idx == 0) { // index is unavailable + fprintf(stderr, "[main_samview] random alignment retrieval only works for indexed BAM or CRAM files.\n"); + ret = 1; + goto view_end; + } + b = bam_init1(); + for (i = optind + 1; i < argc; ++i) { + int result; + hts_itr_t *iter = sam_itr_querys(idx, header, argv[i]); // parse a region in the format like `chr2:100-200' + if (iter == NULL) { // region invalid or reference name not found + int beg, end; + if (hts_parse_reg(argv[i], &beg, &end)) + fprintf(stderr, "[main_samview] region \"%s\" specifies an unknown reference name. Continue anyway.\n", argv[i]); + else + fprintf(stderr, "[main_samview] region \"%s\" could not be parsed. Continue anyway.\n", argv[i]); + continue; + } + // fetch alignments + while ((result = sam_itr_next(in, iter, b)) >= 0) { + if (!process_aln(header, b, &settings)) { + if (!is_count) { if (check_sam_write1(out, header, b, fn_out, &ret) < 0) break; } + count++; + } else { + if (un_out) { if (check_sam_write1(un_out, header, b, fn_un_out, &ret) < 0) break; } + } + } + hts_itr_destroy(iter); + if (result < -1) { + fprintf(stderr, "[main_samview] retrieval of region \"%s\" failed due to truncated file or corrupt BAM index file\n", argv[i]); + ret = 1; + break; + } + } + bam_destroy1(b); + hts_idx_destroy(idx); // destroy the BAM index + } + } + +view_end: + if (is_count && ret == 0) { + if (fprintf(fn_out? fp_out : stdout, "%" PRId64 "\n", count) < 0) { + if (fn_out) print_error_errno("view", "writing to \"%s\" failed", fn_out); + else print_error_errno("view", "writing to standard output failed"); + ret = EXIT_FAILURE; + } + } + + // close files, free and return + if (in) check_sam_close("view", in, fn_in, "standard input", &ret); + if (out) check_sam_close("view", out, fn_out, "standard output", &ret); + if (un_out) check_sam_close("view", un_out, fn_un_out, "file", &ret); + if (fp_out) fclose(fp_out); + + free(fn_list); free(fn_out); free(settings.library); free(fn_un_out); + sam_global_args_free(&ga); + if ( header ) bam_hdr_destroy(header); + if (settings.bed) bed_destroy(settings.bed); + if (settings.rghash) { + khint_t k; + for (k = 0; k < kh_end(settings.rghash); ++k) + if (kh_exist(settings.rghash, k)) free((char*)kh_key(settings.rghash, k)); + kh_destroy(rg, settings.rghash); + } + if (settings.remove_aux_len) { + free(settings.remove_aux); + } + + if (p.pool) + hts_tpool_destroy(p.pool); + + return ret; +} + +static int usage(FILE *fp, int exit_status, int is_long_help) +{ + fprintf(fp, +"\n" +"Usage: samtools view [options] || [region ...]\n" +"\n" +"Options:\n" +// output options +" -b output BAM\n" +" -C output CRAM (requires -T)\n" +" -1 use fast BAM compression (implies -b)\n" +" -u uncompressed BAM output (implies -b)\n" +" -h include header in SAM output\n" +" -H print SAM header only (no alignments)\n" +" -c print only the count of matching records\n" +" -o FILE output file name [stdout]\n" +" -U FILE output reads not selected by filters to FILE [null]\n" +// extra input +" -t FILE FILE listing reference names and lengths (see long help) [null]\n" +// read filters +" -L FILE only include reads overlapping this BED FILE [null]\n" +" -r STR only include reads in read group STR [null]\n" +" -R FILE only include reads with read group listed in FILE [null]\n" +" -q INT only include reads with mapping quality >= INT [0]\n" +" -l STR only include reads in library STR [null]\n" +" -m INT only include reads with number of CIGAR operations consuming\n" +" query sequence >= INT [0]\n" +" -f INT only include reads with all of the FLAGs in INT present [0]\n" // F&x == x +" -F INT only include reads with none of the FLAGS in INT present [0]\n" // F&x == 0 +" -G INT only EXCLUDE reads with all of the FLAGs in INT present [0]\n" // !(F&x == x) +" -s FLOAT subsample reads (given INT.FRAC option value, 0.FRAC is the\n" +" fraction of templates/read pairs to keep; INT part sets seed)\n" +" -M use the multi-region iterator (increases the speed, removes\n" +" duplicates and outputs the reads as they are ordered in the file)\n" +// read processing +" -x STR read tag to strip (repeatable) [null]\n" +" -B collapse the backward CIGAR operation\n" +// general options +" -? print long help, including note about region specification\n" +" -S ignored (input format is auto-detected)\n"); + + sam_global_opt_help(fp, "-.O.T@"); + fprintf(fp, "\n"); + + if (is_long_help) + fprintf(fp, +"Notes:\n" +"\n" +"1. This command now auto-detects the input format (BAM/CRAM/SAM).\n" +" Further control over the CRAM format can be specified by using the\n" +" --output-fmt-option, e.g. to specify the number of sequences per slice\n" +" and to use avoid reference based compression:\n" +"\n" +"\tsamtools view -C --output-fmt-option seqs_per_slice=5000 \\\n" +"\t --output-fmt-option no_ref -o out.cram in.bam\n" +"\n" +" Options can also be specified as a comma separated list within the\n" +" --output-fmt value too. For example this is equivalent to the above\n" +"\n" +"\tsamtools view --output-fmt cram,seqs_per_slice=5000,no_ref \\\n" +"\t -o out.cram in.bam\n" +"\n" +"2. The file supplied with `-t' is SPACE/TAB delimited with the first\n" +" two fields of each line consisting of the reference name and the\n" +" corresponding sequence length. The `.fai' file generated by \n" +" `samtools faidx' is suitable for use as this file. This may be an\n" +" empty file if reads are unaligned.\n" +"\n" +"3. SAM->BAM conversion: samtools view -bT ref.fa in.sam.gz\n" +"\n" +"4. BAM->SAM conversion: samtools view -h in.bam\n" +"\n" +"5. A region should be presented in one of the following formats:\n" +" `chr1', `chr2:1,000' and `chr3:1000-2,000'. When a region is\n" +" specified, the input alignment file must be a sorted and indexed\n" +" alignment (BAM/CRAM) file.\n" +"\n" +"6. Option `-u' is preferred over `-b' when the output is piped to\n" +" another samtools command.\n" +"\n"); + + return exit_status; +} + +int main_import(int argc, char *argv[]) +{ + int argc2, ret; + char **argv2; + if (argc != 4) { + fprintf(stderr, "Usage: samtools import \n"); + return 1; + } + argc2 = 6; + argv2 = calloc(6, sizeof(char*)); + argv2[0] = "import", argv2[1] = "-o", argv2[2] = argv[3], argv2[3] = "-bt", argv2[4] = argv[1], argv2[5] = argv[2]; + ret = main_samview(argc2, argv2); + free(argv2); + return ret; +} + +int8_t seq_comp_table[16] = { 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15 }; +static const char *copied_tags[] = { "RG", "BC", "QT", NULL }; + +static void bam2fq_usage(FILE *to, const char *command) +{ + int fq = strcasecmp("fastq", command) == 0 || strcasecmp("bam2fq", command) == 0; + fprintf(to, +"Usage: samtools %s [options...] \n", command); + fprintf(to, +"Options:\n" +" -0 FILE write paired reads flagged both or neither READ1 and READ2 to FILE\n" +" -1 FILE write paired reads flagged READ1 to FILE\n" +" -2 FILE write paired reads flagged READ2 to FILE\n" +" -f INT only include reads with all of the FLAGs in INT present [0]\n" // F&x == x +" -F INT only include reads with none of the FLAGS in INT present [0]\n" // F&x == 0 +" -G INT only EXCLUDE reads with all of the FLAGs in INT present [0]\n" // !(F&x == x) +" -n don't append /1 and /2 to the read name\n" +" -N always append /1 and /2 to the read name\n"); + if (fq) fprintf(to, +" -O output quality in the OQ tag if present\n"); + fprintf(to, +" -s FILE write singleton reads to FILE [assume single-end]\n" +" -t copy RG, BC and QT tags to the %s header line\n", + fq ? "FASTQ" : "FASTA"); + fprintf(to, +" -T TAGLIST copy arbitrary tags to the %s header line\n", + fq ? "FASTQ" : "FASTA"); + if (fq) fprintf(to, +" -v INT default quality score if not given in file [1]\n" +" -i add Illumina Casava 1.8 format entry to header (eg 1:N:0:ATCACG)\n" +" -c compression level [0..9] to use when creating gz or bgzf fastq files\n" +" --i1 FILE write first index reads to FILE\n" +" --i2 FILE write second index reads to FILE\n" +" --barcode-tag TAG Barcode tag [default: " DEFAULT_BARCODE_TAG "]\n" +" --quality-tag TAG Quality tag [default: " DEFAULT_QUALITY_TAG "]\n" +" --index-format STR How to parse barcode and quality tags\n\n"); + sam_global_opt_help(to, "-.--.@"); + fprintf(to, +" \n" +" The index-format string describes how to parse the barcode and quality tags, for example:\n" +" i14i8 the first 14 characters are index 1, the next 8 characters are index 2\n" +" n8i14 ignore the first 8 characters, and use the next 14 characters for index 1\n" +" If the tag contains a separator, then the numeric part can be replaced with '*' to mean\n" +" 'read until the separator or end of tag', for example:\n" +" n*i* ignore the left part of the tag until the separator, then use the second part\n" +" of the tag as index 1\n"); +} + +typedef enum { READ_UNKNOWN = 0, READ_1 = 1, READ_2 = 2 } readpart; +typedef enum { FASTA, FASTQ } fastfile; +typedef struct bam2fq_opts { + char *fnse; + char *fnr[3]; + char *fn_input; // pointer to input filename in argv do not free + bool has12, has12always, use_oq, copy_tags, illumina_tag; + int flag_on, flag_off, flag_alloff; + sam_global_args ga; + fastfile filetype; + int def_qual; + char *barcode_tag; + char *quality_tag; + char *index_file[2]; + char *index_format; + char *extra_tags; + char compression_level; +} bam2fq_opts_t; + +typedef struct bam2fq_state { + samFile *fp; + BGZF *fpse; + BGZF *fpr[3]; + BGZF *fpi[2]; + BGZF *hstdout; + bam_hdr_t *h; + bool has12, use_oq, copy_tags, illumina_tag; + int flag_on, flag_off, flag_alloff; + fastfile filetype; + int def_qual; + klist_t(ktaglist) *taglist; + char *index_sequence; + char compression_level; +} bam2fq_state_t; + +/* + * Get and decode the read from a BAM record. + * + * TODO: htslib really needs an interface for this. Consider this or perhaps + * bam_get_seq_str (current vs original orientation) and bam_get_qual_str + * functions as string formatted equivalents to bam_get_{seq,qual}? + */ + +/* + * Reverse a string in place. + * From http://stackoverflow.com/questions/8534274/is-the-strrev-function-not-available-in-linux. + * Author Sumit-naik: http://stackoverflow.com/users/4590926/sumit-naik + */ +static char *reverse(char *str) +{ + int i = strlen(str)-1,j=0; + char ch; + while (i>j) { + ch = str[i]; + str[i]= str[j]; + str[j] = ch; + i--; + j++; + } + return str; +} + +/* return the read, reverse complemented if necessary */ +static char *get_read(const bam1_t *rec) +{ + int len = rec->core.l_qseq + 1; + char *read = calloc(1, len); + char *seq = (char *)bam_get_seq(rec); + int n; + + if (!read) return NULL; + + for (n=0; n < rec->core.l_qseq; n++) { + if (rec->core.flag & BAM_FREVERSE) read[n] = seq_nt16_str[seq_comp_table[bam_seqi(seq,n)]]; + else read[n] = seq_nt16_str[bam_seqi(seq,n)]; + } + if (rec->core.flag & BAM_FREVERSE) reverse(read); + return read; +} + +/* + * get and decode the quality from a BAM record + */ +static int get_quality(const bam1_t *rec, char **qual_out) +{ + char *quality = calloc(1, rec->core.l_qseq + 1); + char *q = (char *)bam_get_qual(rec); + int n; + + if (!quality) return -1; + + if (*q == '\xff') { + free(quality); + *qual_out = NULL; + return 0; + } + + for (n=0; n < rec->core.l_qseq; n++) { + quality[n] = q[n]+33; + } + if (rec->core.flag & BAM_FREVERSE) reverse(quality); + *qual_out = quality; + return 0; +} + +// +// End of htslib complaints +// + + +static readpart which_readpart(const bam1_t *b) +{ + if ((b->core.flag & BAM_FREAD1) && !(b->core.flag & BAM_FREAD2)) { + return READ_1; + } else if ((b->core.flag & BAM_FREAD2) && !(b->core.flag & BAM_FREAD1)) { + return READ_2; + } else { + return READ_UNKNOWN; + } +} + +/* + * parse the length part from the index-format string + */ +static int getLength(char **s) +{ + int n = 0; + while (**s) { + if (**s == '*') { n=-1; (*s)++; break; } + if ( !isdigit(**s)) break; + n = n*10 + ((**s)-'0'); + (*s)++; + } + return n; +} + +static bool copy_tag(const char *tag, const bam1_t *rec, kstring_t *linebuf) +{ + uint8_t *s = bam_aux_get(rec, tag); + if (s) { + char aux_type = *s; + switch (aux_type) { + case 'C': + case 'S': aux_type = 'I'; break; + case 'c': + case 's': aux_type = 'i'; break; + case 'd': aux_type = 'f'; break; + } + + // Ensure space. Need 6 chars + length of tag. Max length of + // i is 16, A is 21, B currently 26, Z is unknown, so + // have to check that one later. + if (ks_resize(linebuf, ks_len(linebuf) + 64) < 0) return false; + + kputc('\t', linebuf); + kputsn(tag, 2, linebuf); + kputc(':', linebuf); + kputc(aux_type=='I'? 'i': aux_type, linebuf); + kputc(':', linebuf); + switch (aux_type) { + case 'H': + case 'Z': + if (kputs(bam_aux2Z(s), linebuf) < 0) return false; + break; + case 'i': kputw(bam_aux2i(s), linebuf); break; + case 'I': kputuw(bam_aux2i(s), linebuf); break; + case 'A': kputc(bam_aux2A(s), linebuf); break; + case 'f': kputd(bam_aux2f(s), linebuf); break; + case 'B': kputs("*** Unhandled aux type ***", linebuf); return false; + default: kputs("*** Unknown aux type ***", linebuf); return false; + } + } + return true; +} + +static int insert_index_sequence_into_linebuf(char *index_sequence, kstring_t *linebuf, bam1_t *rec) +{ + if (!index_sequence) return 0; + + kstring_t new = {0,0,NULL}; + if (linebuf->s) { + char *s = strchr(linebuf->s, '\n'); + if (s) { + if (ks_resize(&new, linebuf->l + strlen(index_sequence) + 16) < 0) + return -1; + *s = 0; + kputs(linebuf->s, &new); + kputc(' ', &new); + readpart readpart = which_readpart(rec); + if (readpart == READ_1) kputc('1', &new); + else if (readpart == READ_2) kputc('2', &new); + else kputc('0', &new); + + kputc(':', &new); + if (rec->core.flag & BAM_FQCFAIL) kputc('Y', &new); + else kputc('N', &new); + + kputs(":0:", &new); + kputs(index_sequence, &new); + kputc('\n', &new); + kputs(s+1, &new); + free(ks_release(linebuf)); + linebuf->s = new.s; linebuf->l = new.l; linebuf->m = new.m; + } + } + return 0; +} + +static bool make_fq_line(const bam1_t *rec, char *seq, char *qual, kstring_t *linebuf, const bam2fq_state_t *state) +{ + int i; + + linebuf->l = 0; + // Write read name + if (kputc(state->filetype == FASTA? '>' : '@', linebuf) < 0) return false; + if (kputs(bam_get_qname(rec), linebuf) < 0) return false; + // Add the /1 /2 if requested + if (state->has12) { + readpart readpart = which_readpart(rec); + if (readpart == READ_1) { + if (kputs("/1", linebuf) < 0) return false; + } else if (readpart == READ_2) { + if (kputs("/2", linebuf) < 0) return false; + } + } + if (state->copy_tags) { + for (i = 0; copied_tags[i]; ++i) { + if (!copy_tag(copied_tags[i], rec, linebuf)) { + fprintf(stderr, "Problem copying aux tags: [%s]\n", linebuf->s); + return false; + } + } + } + + if (state->taglist->size) { + kliter_t(ktaglist) *p; + for (p = kl_begin(state->taglist); p != kl_end(state->taglist); p = kl_next(p)) { + if (!copy_tag(kl_val(p), rec, linebuf)) { + fprintf(stderr, "Problem copying aux tags: [%s]\n", linebuf->s); + return false; + } + } + } + + if (kputc('\n', linebuf) < 0) return false; + if (kputs(seq, linebuf) < 0) return false; + if (kputc('\n', linebuf) < 0) return false; + + if (state->filetype == FASTQ) { + // Write quality + if (kputs("+\n", linebuf) < 0) return false; + if (qual && *qual) { + if (kputs(qual, linebuf) < 0) return false; + } else { + int len = strlen(seq); + if (ks_resize(linebuf, ks_len(linebuf) + len + 1) < 0) return false; + for (i = 0; i < len; ++i) { + kputc(33 + state->def_qual, linebuf); + } + } + if (kputc('\n', linebuf) < 0) return false; + } + return true; +} + +/* + * Create FASTQ lines from the barcode tag using the index-format + */ +static bool tags2fq(bam1_t *rec, bam2fq_state_t *state, const bam2fq_opts_t* opts) +{ + uint8_t *p; + char *ifmt = opts->index_format; + char *tag = NULL; + char *qual = NULL; + char *sub_tag = NULL; + char *sub_qual = NULL; + size_t tag_len; + int file_number = 0; + kstring_t linebuf = { 0, 0, NULL }; // Buffer + + + // read barcode tag + p = bam_aux_get(rec,opts->barcode_tag); + if (p) tag = bam_aux2Z(p); + + if (!tag) return true; // there is no tag + + tag_len = strlen(tag); + sub_tag = calloc(1, tag_len + 1); + if (!sub_tag) goto fail; + sub_qual = calloc(1, tag_len + 1); + if (!sub_qual) goto fail; + + // read quality tag + p = bam_aux_get(rec, opts->quality_tag); + if (p) qual = bam_aux2Z(p); + + // Parse the index-format string + while (*ifmt) { + if (file_number > 1) break; // shouldn't happen if we've validated paramaters correctly + char action = *ifmt; // should be 'i' or 'n' + ifmt++; // skip over action + int index_len = getLength(&ifmt); + int n = 0; + + if (index_len < 0) { + // read until separator + while (isalpha(*tag)) { + sub_tag[n] = *tag++; + if (qual) sub_qual[n] = *qual++; + n++; + } + if (*tag) { // skip separator + tag++; + if (qual) qual++; + } + } else { + // read index_len characters + while (index_len-- && *tag) { + sub_tag[n] = *tag++; + if (qual) sub_qual[n] = *qual++; + n++; + } + } + sub_tag[n] = '\0'; + sub_qual[n] = '\0'; + + if (action=='i' && *sub_tag && state->fpi[file_number]) { + //if (file_number==0) state->index_sequence = strdup(sub_tag); // we're going to need this later... + state->index_sequence = strdup(sub_tag); // we're going to need this later... + if (!state->index_sequence) goto fail; + if (!make_fq_line(rec, sub_tag, sub_qual, &linebuf, state)) goto fail; + if (state->illumina_tag) { + if (insert_index_sequence_into_linebuf(state->index_sequence, &linebuf, rec) < 0) { + goto fail; + } + } + if (bgzf_write(state->fpi[file_number++], linebuf.s, linebuf.l) < 0) + goto fail; + } + + } + + free(sub_qual); free(sub_tag); + free(linebuf.s); + return true; + + fail: + perror(__func__); + free(sub_qual); free(sub_tag); + free(linebuf.s); + return true; +} + +// Transform a bam1_t record into a string with the FASTQ representation of it +// @returns false for error, true for success +static bool bam1_to_fq(const bam1_t *b, kstring_t *linebuf, const bam2fq_state_t *state) +{ + int32_t qlen = b->core.l_qseq; + assert(qlen >= 0); + const uint8_t *oq = NULL; + char *qual = NULL; + + char *seq = get_read(b); + if (!seq) return false; + + if (state->use_oq) oq = bam_aux_get(b, "OQ"); + if (oq && *oq=='Z') { + qual = strdup(bam_aux2Z(oq)); + if (!qual) goto fail; + if (b->core.flag & BAM_FREVERSE) { // read is reverse complemented + reverse(qual); + } + } else { + if (get_quality(b, &qual) < 0) goto fail; + } + + if (!make_fq_line(b, seq, qual, linebuf, state)) goto fail; + + free(qual); + free(seq); + return true; + + fail: + free(seq); + free(qual); + return false; +} + +static void free_opts(bam2fq_opts_t *opts) +{ + free(opts->barcode_tag); + free(opts->quality_tag); + free(opts->index_format); + free(opts->extra_tags); + free(opts); +} + +// return true if valid +static bool parse_opts(int argc, char *argv[], bam2fq_opts_t** opts_out) +{ + // Parse args + bam2fq_opts_t* opts = calloc(1, sizeof(bam2fq_opts_t)); + opts->has12 = true; + opts->has12always = false; + opts->filetype = FASTQ; + opts->def_qual = 1; + opts->barcode_tag = NULL; + opts->quality_tag = NULL; + opts->index_format = NULL; + opts->index_file[0] = NULL; + opts->index_file[1] = NULL; + opts->extra_tags = NULL; + opts->compression_level = 1; + + int c; + sam_global_args_init(&opts->ga); + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, '-', '-', 0, '@'), + {"i1", required_argument, NULL, 1}, + {"I1", required_argument, NULL, 1}, + {"i2", required_argument, NULL, 2}, + {"I2", required_argument, NULL, 2}, + {"if", required_argument, NULL, 3}, + {"IF", required_argument, NULL, 3}, + {"index-format", required_argument, NULL, 3}, + {"barcode-tag", required_argument, NULL, 'b'}, + {"quality-tag", required_argument, NULL, 'q'}, + { NULL, 0, NULL, 0 } + }; + while ((c = getopt_long(argc, argv, "0:1:2:f:F:G:niNOs:c:tT:v:@:", lopts, NULL)) > 0) { + switch (c) { + case 'b': opts->barcode_tag = strdup(optarg); break; + case 'q': opts->quality_tag = strdup(optarg); break; + case 1 : opts->index_file[0] = optarg; break; + case 2 : opts->index_file[1] = optarg; break; + case 3 : opts->index_format = strdup(optarg); break; + case '0': opts->fnr[0] = optarg; break; + case '1': opts->fnr[1] = optarg; break; + case '2': opts->fnr[2] = optarg; break; + case 'f': opts->flag_on |= strtol(optarg, 0, 0); break; + case 'F': opts->flag_off |= strtol(optarg, 0, 0); break; + case 'G': opts->flag_alloff |= strtol(optarg, 0, 0); break; + case 'n': opts->has12 = false; break; + case 'N': opts->has12always = true; break; + case 'O': opts->use_oq = true; break; + case 's': opts->fnse = optarg; break; + case 't': opts->copy_tags = true; break; + case 'i': opts->illumina_tag = true; break; + case 'c': opts->compression_level = atoi(optarg); break; + case 'T': opts->extra_tags = strdup(optarg); break; + case 'v': opts->def_qual = atoi(optarg); break; + case '?': bam2fq_usage(stderr, argv[0]); free_opts(opts); return false; + default: + if (parse_sam_global_opt(c, optarg, lopts, &opts->ga) != 0) { + bam2fq_usage(stderr, argv[0]); free_opts(opts); return false; + } + break; + } + } + + if (opts->fnr[1] || opts->fnr[2]) opts->has12 = false; + if (opts->has12always) opts->has12 = true; + + if (!opts->barcode_tag) opts->barcode_tag = strdup(DEFAULT_BARCODE_TAG); + if (!opts->quality_tag) opts->quality_tag = strdup(DEFAULT_QUALITY_TAG); + + int nIndex = 0; + if (opts->index_format) { + char *s; + for (s = opts->index_format; *s; s++) { + if (*s == 'i') nIndex++; + } + } + if (nIndex>2) { + fprintf(stderr,"Invalid index format: more than 2 indexes\n"); + bam2fq_usage(stderr, argv[0]); + free_opts(opts); + return false; + } + + if (opts->index_file[1] && !opts->index_file[0]) { + fprintf(stderr, "Index one specified, but index two not given\n"); + bam2fq_usage(stderr, argv[0]); + free_opts(opts); + return false; + } + + if (nIndex==2 && !opts->index_file[1]) { + fprintf(stderr, "index_format specifies two indexes, but only one index file given\n"); + bam2fq_usage(stderr, argv[0]); + free_opts(opts); + return false; + } + + if (nIndex==1 && !opts->index_file[0]) { + fprintf(stderr, "index_format specifies an index, but no index file given\n"); + bam2fq_usage(stderr, argv[0]); + free_opts(opts); + return false; + } + + if (nIndex==0 && opts->index_file[0]) { + fprintf(stderr, "index_format not specified, but index file given\n"); + bam2fq_usage(stderr, argv[0]); + free_opts(opts); + return false; + } + + if (opts->def_qual < 0 || 93 < opts->def_qual) { + fprintf(stderr, "Invalid -v default quality %i, allowed range 0 to 93\n", opts->def_qual); + bam2fq_usage(stderr, argv[0]); + free_opts(opts); + return false; + } + + const char* type_str = argv[0]; + if (strcasecmp("fastq", type_str) == 0 || strcasecmp("bam2fq", type_str) == 0) { + opts->filetype = FASTQ; + } else if (strcasecmp("fasta", type_str) == 0) { + opts->filetype = FASTA; + } else { + print_error("bam2fq", "Unrecognised type call \"%s\", this should be impossible... but you managed it!", type_str); + bam2fq_usage(stderr, argv[0]); + free_opts(opts); + return false; + } + + if ((argc - (optind)) == 0) { + fprintf(stderr, "No input file specified.\n"); + bam2fq_usage(stdout, argv[0]); + free_opts(opts); + return false; + } + + if ((argc - (optind)) != 1) { + fprintf(stderr, "Too many arguments.\n"); + bam2fq_usage(stderr, argv[0]); + free_opts(opts); + return false; + } + opts->fn_input = argv[optind]; + *opts_out = opts; + return true; +} + +static BGZF *open_fqfile(char *filename, int c) +{ + char mode[4] = "w"; + size_t len = strlen(filename); + + mode[2] = 0; mode[3] = 0; + if (len > 3 && strstr(filename + (len - 3),".gz")) { + mode[1] = 'g'; mode[2] = c+'0'; + } else if ((len > 4 && strstr(filename + (len - 4),".bgz")) + || (len > 5 && strstr(filename + (len - 5),".bgzf"))) { + mode[1] = c+'0'; + } else { + mode[1] = 'u'; + } + + return bgzf_open(filename,mode); +} + +static bool init_state(const bam2fq_opts_t* opts, bam2fq_state_t** state_out) +{ + bam2fq_state_t* state = calloc(1, sizeof(bam2fq_state_t)); + state->flag_on = opts->flag_on; + state->flag_off = opts->flag_off; + state->flag_alloff = opts->flag_alloff; + state->has12 = opts->has12; + state->use_oq = opts->use_oq; + state->illumina_tag = opts->illumina_tag; + state->copy_tags = opts->copy_tags; + state->filetype = opts->filetype; + state->def_qual = opts->def_qual; + state->index_sequence = NULL; + state->hstdout = bgzf_dopen(fileno(stdout), "wu"); + state->compression_level = opts->compression_level; + + state->taglist = kl_init(ktaglist); + if (opts->extra_tags) { + char *save_p; + char *s = strtok_r(opts->extra_tags, ",", &save_p); + while (s) { + if (strlen(s) != 2) { + fprintf(stderr, "Parsing extra tags - '%s' is not two characters\n", s); + free(state); + return false; + } + char **et = kl_pushp(ktaglist, state->taglist); + *et = s; + s = strtok_r(NULL, ",", &save_p); + } + } + + state->fp = sam_open(opts->fn_input, "r"); + if (state->fp == NULL) { + print_error_errno("bam2fq","Cannot read file \"%s\"", opts->fn_input); + free(state); + return false; + } + if (opts->ga.nthreads > 0) + hts_set_threads(state->fp, opts->ga.nthreads); + uint32_t rf = SAM_QNAME | SAM_FLAG | SAM_SEQ | SAM_QUAL; + if (opts->use_oq || opts->extra_tags || opts->index_file[0]) rf |= SAM_AUX; + if (hts_set_opt(state->fp, CRAM_OPT_REQUIRED_FIELDS, rf)) { + fprintf(stderr, "Failed to set CRAM_OPT_REQUIRED_FIELDS value\n"); + free(state); + return false; + } + if (hts_set_opt(state->fp, CRAM_OPT_DECODE_MD, 0)) { + fprintf(stderr, "Failed to set CRAM_OPT_DECODE_MD value\n"); + free(state); + return false; + } + if (opts->fnse) { + state->fpse = open_fqfile(opts->fnse, state->compression_level); + if (state->fpse == NULL) { + print_error_errno("bam2fq", "Cannot write to singleton file \"%s\"", opts->fnse); + free(state); + return false; + } + } + + int i; + for (i = 0; i < 3; ++i) { + if (opts->fnr[i]) { + state->fpr[i] = open_fqfile(opts->fnr[i], state->compression_level); + if (state->fpr[i] == NULL) { + print_error_errno("bam2fq", "Cannot write to r%d file \"%s\"", i, opts->fnr[i]); + free(state); + return false; + } + } else { + state->fpr[i] = state->hstdout; + } + } + for (i = 0; i < 2; i++) { + state->fpi[i] = NULL; + if (opts->index_file[i]) { + state->fpi[i] = open_fqfile(opts->index_file[i], state->compression_level); + if (state->fpi[i] == NULL) { + print_error_errno("bam2fq", "Cannot write to i%d file \"%s\"", i+1, opts->index_file[i]); + free(state); + return false; + } + } + } + + state->h = sam_hdr_read(state->fp); + if (state->h == NULL) { + fprintf(stderr, "Failed to read header for \"%s\"\n", opts->fn_input); + free(state); + return false; + } + + *state_out = state; + return true; +} + +static bool destroy_state(const bam2fq_opts_t *opts, bam2fq_state_t *state, int* status) +{ + bool valid = true; + bam_hdr_destroy(state->h); + check_sam_close("bam2fq", state->fp, opts->fn_input, "file", status); + if (state->fpse && bgzf_close(state->fpse)) { print_error_errno("bam2fq", "Error closing singleton file \"%s\"", opts->fnse); valid = false; } + int i; + for (i = 0; i < 3; ++i) { + if (state->fpr[i] == state->hstdout) { + if (i==0 && bgzf_close(state->fpr[i])) { print_error_errno("bam2fq", "Error closing STDOUT"); valid = false; } + } else { + if (bgzf_close(state->fpr[i])) { print_error_errno("bam2fq", "Error closing r%d file \"%s\"", i, opts->fnr[i]); valid = false; } + } + } + for (i = 0; i < 2; i++) { + if (state->fpi[i] && bgzf_close(state->fpi[i])) { + print_error_errno("bam2fq", "Error closing i%d file \"%s\"", i+1, opts->index_file[i]); + valid = false; + } + } + kl_destroy(ktaglist,state->taglist); + free(state->index_sequence); + free(state); + return valid; +} + +static inline bool filter_it_out(const bam1_t *b, const bam2fq_state_t *state) +{ + return (b->core.flag&(BAM_FSECONDARY|BAM_FSUPPLEMENTARY) // skip secondary and supplementary alignments + || (b->core.flag&(state->flag_on)) != state->flag_on // or reads indicated by filter flags + || (b->core.flag&(state->flag_off)) != 0 + || (b->core.flag&(state->flag_alloff) && (b->core.flag&(state->flag_alloff)) == state->flag_alloff)); + +} + +static bool bam2fq_mainloop(bam2fq_state_t *state, bam2fq_opts_t* opts) +{ + int n; + bam1_t *records[3]; + bam1_t* b = bam_init1(); + char *current_qname = NULL; + int64_t n_reads = 0, n_singletons = 0; // Statistics + kstring_t linebuf[3] = {{0,0,NULL},{0,0,NULL},{0,0,NULL}}; + int score[3]; + int at_eof; + if (b == NULL ) { + perror("[bam2fq_mainloop] Malloc error for bam record buffer."); + return false; + } + + bool valid = true; + while (true) { + int res = sam_read1(state->fp, state->h, b); + if (res < -1) { + fprintf(stderr, "[bam2fq_mainloop] Failed to read bam record.\n"); + return false; + } + at_eof = res < 0; + + if (!at_eof && filter_it_out(b, state)) continue; + if (!at_eof) ++n_reads; + + if (at_eof || !current_qname || (strcmp(current_qname, bam_get_qname(b)) != 0)) { + if (current_qname) { + if (state->illumina_tag) { + for (n=0; valid && n<3; n++) { + if (insert_index_sequence_into_linebuf(state->index_sequence, &linebuf[n], records[n]) < 0) valid = false; + } + if (!valid) break; + } + free(state->index_sequence); state->index_sequence = NULL; + if (score[1] > 0 && score[2] > 0) { + // print linebuf[1] to fpr[1], linebuf[2] to fpr[2] + if (bgzf_write(state->fpr[1], linebuf[1].s, linebuf[1].l) < 0) { valid = false; break; } + if (bgzf_write(state->fpr[2], linebuf[2].s, linebuf[2].l) < 0) { valid = false; break; } + } else if (score[1] > 0 || score[2] > 0) { + if (state->fpse) { + // print whichever one exists to fpse + if (score[1] > 0) { + if (bgzf_write(state->fpse, linebuf[1].s, linebuf[1].l) < 0) { valid = false; break; } + } else { + if (bgzf_write(state->fpse, linebuf[2].s, linebuf[2].l) < 0) { valid = false; break; } + } + ++n_singletons; + } else { + if (score[1] > 0) { + if (bgzf_write(state->fpr[1], linebuf[1].s, linebuf[1].l) < 0) { valid = false; break; } + } else { + if (bgzf_write(state->fpr[2], linebuf[2].s, linebuf[2].l) < 0) { valid = false; break; } + } + } + } + if (score[0]) { // TODO: check this + // print linebuf[0] to fpr[0] + if (bgzf_write(state->fpr[0], linebuf[0].s, linebuf[0].l) < 0) { valid = false; break; } + } + } + + if (at_eof) break; + + free(current_qname); + current_qname = strdup(bam_get_qname(b)); + if (!current_qname) { valid = false; break; } + score[0] = score[1] = score[2] = 0; + } + + // Prefer a copy of the read that has base qualities + int b_score = bam_get_qual(b)[0] != 0xff? 2 : 1; + if (b_score > score[which_readpart(b)]) { + if (state->fpi[0]) if (!tags2fq(b, state, opts)) return false; + records[which_readpart(b)] = b; + if(!bam1_to_fq(b, &linebuf[which_readpart(b)], state)) { + fprintf(stderr, "[%s] Error converting read to FASTA/Q\n", __func__); + return false; + } + score[which_readpart(b)] = b_score; + } + } + if (!valid) + { + perror("[bam2fq_mainloop] Error writing to FASTx files."); + } + bam_destroy1(b); + free(current_qname); + free(linebuf[0].s); + free(linebuf[1].s); + free(linebuf[2].s); + fprintf(stderr, "[M::%s] discarded %" PRId64 " singletons\n", __func__, n_singletons); + fprintf(stderr, "[M::%s] processed %" PRId64 " reads\n", __func__, n_reads); + + return valid; +} + +int main_bam2fq(int argc, char *argv[]) +{ + int status = EXIT_SUCCESS; + bam2fq_opts_t* opts = NULL; + bam2fq_state_t* state = NULL; + + bool valid = parse_opts(argc, argv, &opts); + if (!valid || opts == NULL) return valid ? EXIT_SUCCESS : EXIT_FAILURE; + + if (!init_state(opts, &state)) return EXIT_FAILURE; + + if (!bam2fq_mainloop(state,opts)) status = EXIT_FAILURE; + + if (!destroy_state(opts, state, &status)) return EXIT_FAILURE; + sam_global_args_free(&opts->ga); + free_opts(opts); + + return status; +} diff --git a/samtools/sam_view.c.pysam.c b/samtools/sam_view.c.pysam.c new file mode 100644 index 0000000..4e3f8ab --- /dev/null +++ b/samtools/sam_view.c.pysam.c @@ -0,0 +1,1584 @@ +#include "samtools.pysam.h" + +/* sam_view.c -- SAM<->BAM<->CRAM conversion. + + Copyright (C) 2009-2017 Genome Research Ltd. + Portions copyright (C) 2009, 2011, 2012 Broad Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notices and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "htslib/sam.h" +#include "htslib/faidx.h" +#include "htslib/kstring.h" +#include "htslib/khash.h" +#include "htslib/klist.h" +#include "htslib/thread_pool.h" +#include "htslib/bgzf.h" +#include "samtools.h" +#include "sam_opts.h" +#include "bedidx.h" + +#define DEFAULT_BARCODE_TAG "BC" +#define DEFAULT_QUALITY_TAG "QT" + +KHASH_SET_INIT_STR(rg) +#define taglist_free(p) +KLIST_INIT(ktaglist, char*, taglist_free) + +typedef khash_t(rg) *rghash_t; + +// This structure contains the settings for a samview run +typedef struct samview_settings { + rghash_t rghash; + int min_mapQ; + int flag_on; + int flag_off; + int flag_alloff; + int min_qlen; + int remove_B; + uint32_t subsam_seed; + double subsam_frac; + char* library; + void* bed; + size_t remove_aux_len; + char** remove_aux; + int multi_region; +} samview_settings_t; + + +// TODO Add declarations of these to a viable htslib or samtools header +extern const char *bam_get_library(bam_hdr_t *header, const bam1_t *b); +extern int bam_remove_B(bam1_t *b); +extern char *samfaipath(const char *fn_ref); + +// Returns 0 to indicate read should be output 1 otherwise +static int process_aln(const bam_hdr_t *h, bam1_t *b, samview_settings_t* settings) +{ + if (settings->remove_B) bam_remove_B(b); + if (settings->min_qlen > 0) { + int k, qlen = 0; + uint32_t *cigar = bam_get_cigar(b); + for (k = 0; k < b->core.n_cigar; ++k) + if ((bam_cigar_type(bam_cigar_op(cigar[k]))&1) || bam_cigar_op(cigar[k]) == BAM_CHARD_CLIP) + qlen += bam_cigar_oplen(cigar[k]); + if (qlen < settings->min_qlen) return 1; + } + if (b->core.qual < settings->min_mapQ || ((b->core.flag & settings->flag_on) != settings->flag_on) || (b->core.flag & settings->flag_off)) + return 1; + if (settings->flag_alloff && ((b->core.flag & settings->flag_alloff) == settings->flag_alloff)) + return 1; + if (!settings->multi_region && settings->bed && (b->core.tid < 0 || !bed_overlap(settings->bed, h->target_name[b->core.tid], b->core.pos, bam_endpos(b)))) + return 1; + if (settings->subsam_frac > 0.) { + uint32_t k = __ac_Wang_hash(__ac_X31_hash_string(bam_get_qname(b)) ^ settings->subsam_seed); + if ((double)(k&0xffffff) / 0x1000000 >= settings->subsam_frac) return 1; + } + if (settings->rghash) { + uint8_t *s = bam_aux_get(b, "RG"); + if (s) { + khint_t k = kh_get(rg, settings->rghash, (char*)(s + 1)); + if (k == kh_end(settings->rghash)) return 1; + } + } + if (settings->library) { + const char *p = bam_get_library((bam_hdr_t*)h, b); + if (!p || strcmp(p, settings->library) != 0) return 1; + } + if (settings->remove_aux_len) { + size_t i; + for (i = 0; i < settings->remove_aux_len; ++i) { + uint8_t *s = bam_aux_get(b, settings->remove_aux[i]); + if (s) { + bam_aux_del(b, s); + } + } + } + return 0; +} + +static char *drop_rg(char *hdtxt, rghash_t h, int *len) +{ + char *p = hdtxt, *q, *r, *s; + kstring_t str; + memset(&str, 0, sizeof(kstring_t)); + while (1) { + int toprint = 0; + q = strchr(p, '\n'); + if (q == 0) q = p + strlen(p); + if (q - p < 3) break; // the line is too short; then stop + if (strncmp(p, "@RG\t", 4) == 0) { + int c; + khint_t k; + if ((r = strstr(p, "\tID:")) != 0) { + r += 4; + for (s = r; *s != '\0' && *s != '\n' && *s != '\t'; ++s); + c = *s; *s = '\0'; + k = kh_get(rg, h, r); + *s = c; + if (k != kh_end(h)) toprint = 1; + } + } else toprint = 1; + if (toprint) { + kputsn(p, q - p, &str); kputc('\n', &str); + } + p = q + 1; + } + *len = str.l; + return str.s; +} + +static int usage(FILE *fp, int exit_status, int is_long_help); + +static int add_read_group_single(const char *subcmd, samview_settings_t *settings, char *name) +{ + char *d = strdup(name); + int ret = 0; + + if (d == NULL) goto err; + + if (settings->rghash == NULL) { + settings->rghash = kh_init(rg); + if (settings->rghash == NULL) goto err; + } + + kh_put(rg, settings->rghash, d, &ret); + if (ret == -1) goto err; + if (ret == 0) free(d); /* Duplicate */ + return 0; + + err: + print_error(subcmd, "Couldn't add \"%s\" to read group list: memory exhausted?", name); + free(d); + return -1; +} + +static int add_read_groups_file(const char *subcmd, samview_settings_t *settings, char *fn) +{ + FILE *fp; + char buf[1024]; + int ret = 0; + if (settings->rghash == NULL) { + settings->rghash = kh_init(rg); + if (settings->rghash == NULL) { + perror(NULL); + return -1; + } + } + + fp = fopen(fn, "r"); + if (fp == NULL) { + print_error_errno(subcmd, "failed to open \"%s\" for reading", fn); + return -1; + } + + while (ret != -1 && !feof(fp) && fscanf(fp, "%1023s", buf) > 0) { + char *d = strdup(buf); + if (d != NULL) { + kh_put(rg, settings->rghash, d, &ret); + if (ret == 0) free(d); /* Duplicate */ + } else { + ret = -1; + } + } + if (ferror(fp)) ret = -1; + if (ret == -1) { + print_error_errno(subcmd, "failed to read \"%s\"", fn); + } + fclose(fp); + return (ret != -1) ? 0 : -1; +} + +static inline int check_sam_write1(samFile *fp, const bam_hdr_t *h, const bam1_t *b, const char *fname, int *retp) +{ + int r = sam_write1(fp, h, b); + if (r >= 0) return r; + + if (fname) print_error_errno("view", "writing to \"%s\" failed", fname); + else print_error_errno("view", "writing to standard output failed"); + + *retp = EXIT_FAILURE; + return r; +} + +static void check_sam_close(const char *subcmd, samFile *fp, const char *fname, const char *null_fname, int *retp) +{ + int r = sam_close(fp); + if (r >= 0) return; + + // TODO Need error infrastructure so we can print a message instead of r + if (fname) print_error(subcmd, "error closing \"%s\": %d", fname, r); + else print_error(subcmd, "error closing %s: %d", null_fname, r); + + *retp = EXIT_FAILURE; +} + +int main_samview(int argc, char *argv[]) +{ + int c, is_header = 0, is_header_only = 0, ret = 0, compress_level = -1, is_count = 0; + int is_long_help = 0; + int64_t count = 0; + samFile *in = 0, *out = 0, *un_out=0; + FILE *fp_out = NULL; + bam_hdr_t *header = NULL; + char out_mode[5], out_un_mode[5], *out_format = ""; + char *fn_in = 0, *fn_out = 0, *fn_list = 0, *q, *fn_un_out = 0; + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + htsThreadPool p = {NULL, 0}; + int filter_state = ALL, filter_op = 0; + int result; + + samview_settings_t settings = { + .rghash = NULL, + .min_mapQ = 0, + .flag_on = 0, + .flag_off = 0, + .flag_alloff = 0, + .min_qlen = 0, + .remove_B = 0, + .subsam_seed = 0, + .subsam_frac = -1., + .library = NULL, + .bed = NULL, + .multi_region = 0 + }; + + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, 'O', 0, 'T', '@'), + { NULL, 0, NULL, 0 } + }; + + /* parse command-line options */ + strcpy(out_mode, "w"); + strcpy(out_un_mode, "w"); + while ((c = getopt_long(argc, argv, + "SbBcCt:h1Ho:O:q:f:F:G:ul:r:?T:R:L:s:@:m:x:U:M", + lopts, NULL)) >= 0) { + switch (c) { + case 's': + if ((settings.subsam_seed = strtol(optarg, &q, 10)) != 0) { + // Convert likely user input 0,1,2,... to pseudo-random + // values with more entropy and more bits set + srand(settings.subsam_seed); + settings.subsam_seed = rand(); + } + settings.subsam_frac = strtod(q, &q); + break; + case 'm': settings.min_qlen = atoi(optarg); break; + case 'c': is_count = 1; break; + case 'S': break; + case 'b': out_format = "b"; break; + case 'C': out_format = "c"; break; + case 't': fn_list = strdup(optarg); break; + case 'h': is_header = 1; break; + case 'H': is_header_only = 1; break; + case 'o': fn_out = strdup(optarg); break; + case 'U': fn_un_out = strdup(optarg); break; + case 'f': settings.flag_on |= strtol(optarg, 0, 0); break; + case 'F': settings.flag_off |= strtol(optarg, 0, 0); break; + case 'G': settings.flag_alloff |= strtol(optarg, 0, 0); break; + case 'q': settings.min_mapQ = atoi(optarg); break; + case 'u': compress_level = 0; break; + case '1': compress_level = 1; break; + case 'l': settings.library = strdup(optarg); break; + case 'L': + if ((settings.bed = bed_read(optarg)) == NULL) { + print_error_errno("view", "Could not read file \"%s\"", optarg); + ret = 1; + goto view_end; + } + break; + case 'r': + if (add_read_group_single("view", &settings, optarg) != 0) { + ret = 1; + goto view_end; + } + break; + case 'R': + if (add_read_groups_file("view", &settings, optarg) != 0) { + ret = 1; + goto view_end; + } + break; + /* REMOVED as htslib doesn't support this + //case 'x': out_format = "x"; break; + //case 'X': out_format = "X"; break; + */ + case '?': is_long_help = 1; break; + case 'B': settings.remove_B = 1; break; + case 'x': + { + if (strlen(optarg) != 2) { + fprintf(samtools_stderr, "main_samview: Error parsing -x auxiliary tags should be exactly two characters long.\n"); + return usage(samtools_stderr, EXIT_FAILURE, is_long_help); + } + settings.remove_aux = (char**)realloc(settings.remove_aux, sizeof(char*) * (++settings.remove_aux_len)); + settings.remove_aux[settings.remove_aux_len-1] = optarg; + } + break; + case 'M': settings.multi_region = 1; break; + default: + if (parse_sam_global_opt(c, optarg, lopts, &ga) != 0) + return usage(samtools_stderr, EXIT_FAILURE, is_long_help); + break; + } + } + if (compress_level >= 0 && !*out_format) out_format = "b"; + if (is_header_only) is_header = 1; + // File format auto-detection first + if (fn_out) sam_open_mode(out_mode+1, fn_out, NULL); + if (fn_un_out) sam_open_mode(out_un_mode+1, fn_un_out, NULL); + // Overridden by manual -b, -C + if (*out_format) + out_mode[1] = out_un_mode[1] = *out_format; + out_mode[2] = out_un_mode[2] = '\0'; + // out_(un_)mode now 1 or 2 bytes long, followed by nul. + if (compress_level >= 0) { + char tmp[2]; + tmp[0] = compress_level + '0'; tmp[1] = '\0'; + strcat(out_mode, tmp); + strcat(out_un_mode, tmp); + } + if (argc == optind && isatty(STDIN_FILENO)) return usage(samtools_stdout, EXIT_SUCCESS, is_long_help); // potential memory leak... + + fn_in = (optind < argc)? argv[optind] : "-"; + // generate the fn_list if necessary + if (fn_list == 0 && ga.reference) fn_list = samfaipath(ga.reference); + // open file handlers + if ((in = sam_open_format(fn_in, "r", &ga.in)) == 0) { + print_error_errno("view", "failed to open \"%s\" for reading", fn_in); + ret = 1; + goto view_end; + } + + if (fn_list) { + if (hts_set_fai_filename(in, fn_list) != 0) { + fprintf(samtools_stderr, "[main_samview] failed to use reference \"%s\".\n", fn_list); + ret = 1; + goto view_end; + } + } + if ((header = sam_hdr_read(in)) == 0) { + fprintf(samtools_stderr, "[main_samview] fail to read the header from \"%s\".\n", fn_in); + ret = 1; + goto view_end; + } + if (settings.rghash) { // FIXME: I do not know what "bam_header_t::n_text" is for... + char *tmp; + int l; + tmp = drop_rg(header->text, settings.rghash, &l); + free(header->text); + header->text = tmp; + header->l_text = l; + } + if (!is_count) { + if ((out = sam_open_format(fn_out? fn_out : "-", out_mode, &ga.out)) == 0) { + print_error_errno("view", "failed to open \"%s\" for writing", fn_out? fn_out : "standard output"); + ret = 1; + goto view_end; + } + if (fn_list) { + if (hts_set_fai_filename(out, fn_list) != 0) { + fprintf(samtools_stderr, "[main_samview] failed to use reference \"%s\".\n", fn_list); + ret = 1; + goto view_end; + } + } + if (*out_format || is_header || + out_mode[1] == 'b' || out_mode[1] == 'c' || + (ga.out.format != sam && ga.out.format != unknown_format)) { + if (sam_hdr_write(out, header) != 0) { + fprintf(samtools_stderr, "[main_samview] failed to write the SAM header\n"); + ret = 1; + goto view_end; + } + } + if (fn_un_out) { + if ((un_out = sam_open_format(fn_un_out, out_un_mode, &ga.out)) == 0) { + print_error_errno("view", "failed to open \"%s\" for writing", fn_un_out); + ret = 1; + goto view_end; + } + if (fn_list) { + if (hts_set_fai_filename(un_out, fn_list) != 0) { + fprintf(samtools_stderr, "[main_samview] failed to use reference \"%s\".\n", fn_list); + ret = 1; + goto view_end; + } + } + if (*out_format || is_header || + out_un_mode[1] == 'b' || out_un_mode[1] == 'c' || + (ga.out.format != sam && ga.out.format != unknown_format)) { + if (sam_hdr_write(un_out, header) != 0) { + fprintf(samtools_stderr, "[main_samview] failed to write the SAM header\n"); + ret = 1; + goto view_end; + } + } + } + } + else { + if (fn_out) { + fp_out = fopen(fn_out, "w"); + if (fp_out == NULL) { + print_error_errno("view", "can't create \"%s\"", fn_out); + ret = EXIT_FAILURE; + goto view_end; + } + } + } + + if (ga.nthreads > 1) { + if (!(p.pool = hts_tpool_init(ga.nthreads))) { + fprintf(samtools_stderr, "Error creating thread pool\n"); + ret = 1; + goto view_end; + } + hts_set_opt(in, HTS_OPT_THREAD_POOL, &p); + if (out) hts_set_opt(out, HTS_OPT_THREAD_POOL, &p); + } + if (is_header_only) goto view_end; // no need to print alignments + + if (settings.multi_region) { + if (optind < argc - 1) { //regions have been specified in the command line + settings.bed = bed_hash_regions(settings.bed, argv, optind+1, argc, &filter_op); //insert(1) or filter out(0) the regions from the command line in the same hash table as the bed file + if (!filter_op) + filter_state = FILTERED; + } + + bam1_t *b = bam_init1(); + if (settings.bed == NULL) { // index is unavailable or no regions have been specified + while ((result = sam_read1(in, header, b)) >= 0) { // read one alignment from `in' + if (!process_aln(header, b, &settings)) { + if (!is_count) { if (check_sam_write1(out, header, b, fn_out, &ret) < 0) break; } + count++; + } else { + if (un_out) { if (check_sam_write1(un_out, header, b, fn_un_out, &ret) < 0) break; } + } + } + if (result < -1) { + fprintf(samtools_stderr, "[main_samview] truncated file.\n"); + ret = 1; + } + } else { + hts_idx_t *idx = sam_index_load(in, fn_in); // load index + if (idx != NULL) { + + int regcount = 0; + + hts_reglist_t *reglist = bed_reglist(settings.bed, filter_state, ®count); + if(reglist) { + hts_itr_multi_t *iter = sam_itr_regions(idx, header, reglist, regcount); + if (iter) { + // fetch alignments + while ((result = sam_itr_multi_next(in, iter, b)) >= 0) { + if (!process_aln(header, b, &settings)) { + if (!is_count) { if (check_sam_write1(out, header, b, fn_out, &ret) < 0) break; } + count++; + } else { + if (un_out) { if (check_sam_write1(un_out, header, b, fn_un_out, &ret) < 0) break; } + } + } + if (result < -1) { + fprintf(samtools_stderr, "[main_samview] retrieval of region %d failed due to truncated file or corrupt BAM index file\n", iter->curr_tid); + ret = 1; + } + + hts_itr_multi_destroy(iter); + } else { + fprintf(samtools_stderr, "[main_samview] iterator could not be created. Aborting.\n"); + } + } else { + fprintf(samtools_stderr, "[main_samview] region list is empty or could not be created. Aborting.\n"); + } + hts_idx_destroy(idx); // destroy the BAM index + } else { + fprintf(samtools_stderr, "[main_samview] random alignment retrieval only works for indexed BAM or CRAM files.\n"); + } + } + bam_destroy1(b); + } else { + if (optind + 1 >= argc) { // convert/print the entire file + bam1_t *b = bam_init1(); + int r; + while ((r = sam_read1(in, header, b)) >= 0) { // read one alignment from `in' + if (!process_aln(header, b, &settings)) { + if (!is_count) { if (check_sam_write1(out, header, b, fn_out, &ret) < 0) break; } + count++; + } else { + if (un_out) { if (check_sam_write1(un_out, header, b, fn_un_out, &ret) < 0) break; } + } + } + if (r < -1) { + fprintf(samtools_stderr, "[main_samview] truncated file.\n"); + ret = 1; + } + bam_destroy1(b); + } else { // retrieve alignments in specified regions + int i; + bam1_t *b; + hts_idx_t *idx = sam_index_load(in, fn_in); // load index + if (idx == 0) { // index is unavailable + fprintf(samtools_stderr, "[main_samview] random alignment retrieval only works for indexed BAM or CRAM files.\n"); + ret = 1; + goto view_end; + } + b = bam_init1(); + for (i = optind + 1; i < argc; ++i) { + int result; + hts_itr_t *iter = sam_itr_querys(idx, header, argv[i]); // parse a region in the format like `chr2:100-200' + if (iter == NULL) { // region invalid or reference name not found + int beg, end; + if (hts_parse_reg(argv[i], &beg, &end)) + fprintf(samtools_stderr, "[main_samview] region \"%s\" specifies an unknown reference name. Continue anyway.\n", argv[i]); + else + fprintf(samtools_stderr, "[main_samview] region \"%s\" could not be parsed. Continue anyway.\n", argv[i]); + continue; + } + // fetch alignments + while ((result = sam_itr_next(in, iter, b)) >= 0) { + if (!process_aln(header, b, &settings)) { + if (!is_count) { if (check_sam_write1(out, header, b, fn_out, &ret) < 0) break; } + count++; + } else { + if (un_out) { if (check_sam_write1(un_out, header, b, fn_un_out, &ret) < 0) break; } + } + } + hts_itr_destroy(iter); + if (result < -1) { + fprintf(samtools_stderr, "[main_samview] retrieval of region \"%s\" failed due to truncated file or corrupt BAM index file\n", argv[i]); + ret = 1; + break; + } + } + bam_destroy1(b); + hts_idx_destroy(idx); // destroy the BAM index + } + } + +view_end: + if (is_count && ret == 0) { + if (fprintf(fn_out? fp_out : samtools_stdout, "%" PRId64 "\n", count) < 0) { + if (fn_out) print_error_errno("view", "writing to \"%s\" failed", fn_out); + else print_error_errno("view", "writing to standard output failed"); + ret = EXIT_FAILURE; + } + } + + // close files, free and return + if (in) check_sam_close("view", in, fn_in, "standard input", &ret); + if (out) check_sam_close("view", out, fn_out, "standard output", &ret); + if (un_out) check_sam_close("view", un_out, fn_un_out, "file", &ret); + if (fp_out) fclose(fp_out); + + free(fn_list); free(fn_out); free(settings.library); free(fn_un_out); + sam_global_args_free(&ga); + if ( header ) bam_hdr_destroy(header); + if (settings.bed) bed_destroy(settings.bed); + if (settings.rghash) { + khint_t k; + for (k = 0; k < kh_end(settings.rghash); ++k) + if (kh_exist(settings.rghash, k)) free((char*)kh_key(settings.rghash, k)); + kh_destroy(rg, settings.rghash); + } + if (settings.remove_aux_len) { + free(settings.remove_aux); + } + + if (p.pool) + hts_tpool_destroy(p.pool); + + return ret; +} + +static int usage(FILE *fp, int exit_status, int is_long_help) +{ + fprintf(fp, +"\n" +"Usage: samtools view [options] || [region ...]\n" +"\n" +"Options:\n" +// output options +" -b output BAM\n" +" -C output CRAM (requires -T)\n" +" -1 use fast BAM compression (implies -b)\n" +" -u uncompressed BAM output (implies -b)\n" +" -h include header in SAM output\n" +" -H print SAM header only (no alignments)\n" +" -c print only the count of matching records\n" +" -o FILE output file name [samtools_stdout]\n" +" -U FILE output reads not selected by filters to FILE [null]\n" +// extra input +" -t FILE FILE listing reference names and lengths (see long help) [null]\n" +// read filters +" -L FILE only include reads overlapping this BED FILE [null]\n" +" -r STR only include reads in read group STR [null]\n" +" -R FILE only include reads with read group listed in FILE [null]\n" +" -q INT only include reads with mapping quality >= INT [0]\n" +" -l STR only include reads in library STR [null]\n" +" -m INT only include reads with number of CIGAR operations consuming\n" +" query sequence >= INT [0]\n" +" -f INT only include reads with all of the FLAGs in INT present [0]\n" // F&x == x +" -F INT only include reads with none of the FLAGS in INT present [0]\n" // F&x == 0 +" -G INT only EXCLUDE reads with all of the FLAGs in INT present [0]\n" // !(F&x == x) +" -s FLOAT subsample reads (given INT.FRAC option value, 0.FRAC is the\n" +" fraction of templates/read pairs to keep; INT part sets seed)\n" +" -M use the multi-region iterator (increases the speed, removes\n" +" duplicates and outputs the reads as they are ordered in the file)\n" +// read processing +" -x STR read tag to strip (repeatable) [null]\n" +" -B collapse the backward CIGAR operation\n" +// general options +" -? print long help, including note about region specification\n" +" -S ignored (input format is auto-detected)\n"); + + sam_global_opt_help(fp, "-.O.T@"); + fprintf(fp, "\n"); + + if (is_long_help) + fprintf(fp, +"Notes:\n" +"\n" +"1. This command now auto-detects the input format (BAM/CRAM/SAM).\n" +" Further control over the CRAM format can be specified by using the\n" +" --output-fmt-option, e.g. to specify the number of sequences per slice\n" +" and to use avoid reference based compression:\n" +"\n" +"\tsamtools view -C --output-fmt-option seqs_per_slice=5000 \\\n" +"\t --output-fmt-option no_ref -o out.cram in.bam\n" +"\n" +" Options can also be specified as a comma separated list within the\n" +" --output-fmt value too. For example this is equivalent to the above\n" +"\n" +"\tsamtools view --output-fmt cram,seqs_per_slice=5000,no_ref \\\n" +"\t -o out.cram in.bam\n" +"\n" +"2. The file supplied with `-t' is SPACE/TAB delimited with the first\n" +" two fields of each line consisting of the reference name and the\n" +" corresponding sequence length. The `.fai' file generated by \n" +" `samtools faidx' is suitable for use as this file. This may be an\n" +" empty file if reads are unaligned.\n" +"\n" +"3. SAM->BAM conversion: samtools view -bT ref.fa in.sam.gz\n" +"\n" +"4. BAM->SAM conversion: samtools view -h in.bam\n" +"\n" +"5. A region should be presented in one of the following formats:\n" +" `chr1', `chr2:1,000' and `chr3:1000-2,000'. When a region is\n" +" specified, the input alignment file must be a sorted and indexed\n" +" alignment (BAM/CRAM) file.\n" +"\n" +"6. Option `-u' is preferred over `-b' when the output is piped to\n" +" another samtools command.\n" +"\n"); + + return exit_status; +} + +int main_import(int argc, char *argv[]) +{ + int argc2, ret; + char **argv2; + if (argc != 4) { + fprintf(samtools_stderr, "Usage: samtools import \n"); + return 1; + } + argc2 = 6; + argv2 = calloc(6, sizeof(char*)); + argv2[0] = "import", argv2[1] = "-o", argv2[2] = argv[3], argv2[3] = "-bt", argv2[4] = argv[1], argv2[5] = argv[2]; + ret = main_samview(argc2, argv2); + free(argv2); + return ret; +} + +int8_t seq_comp_table[16] = { 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15 }; +static const char *copied_tags[] = { "RG", "BC", "QT", NULL }; + +static void bam2fq_usage(FILE *to, const char *command) +{ + int fq = strcasecmp("fastq", command) == 0 || strcasecmp("bam2fq", command) == 0; + fprintf(to, +"Usage: samtools %s [options...] \n", command); + fprintf(to, +"Options:\n" +" -0 FILE write paired reads flagged both or neither READ1 and READ2 to FILE\n" +" -1 FILE write paired reads flagged READ1 to FILE\n" +" -2 FILE write paired reads flagged READ2 to FILE\n" +" -f INT only include reads with all of the FLAGs in INT present [0]\n" // F&x == x +" -F INT only include reads with none of the FLAGS in INT present [0]\n" // F&x == 0 +" -G INT only EXCLUDE reads with all of the FLAGs in INT present [0]\n" // !(F&x == x) +" -n don't append /1 and /2 to the read name\n" +" -N always append /1 and /2 to the read name\n"); + if (fq) fprintf(to, +" -O output quality in the OQ tag if present\n"); + fprintf(to, +" -s FILE write singleton reads to FILE [assume single-end]\n" +" -t copy RG, BC and QT tags to the %s header line\n", + fq ? "FASTQ" : "FASTA"); + fprintf(to, +" -T TAGLIST copy arbitrary tags to the %s header line\n", + fq ? "FASTQ" : "FASTA"); + if (fq) fprintf(to, +" -v INT default quality score if not given in file [1]\n" +" -i add Illumina Casava 1.8 format entry to header (eg 1:N:0:ATCACG)\n" +" -c compression level [0..9] to use when creating gz or bgzf fastq files\n" +" --i1 FILE write first index reads to FILE\n" +" --i2 FILE write second index reads to FILE\n" +" --barcode-tag TAG Barcode tag [default: " DEFAULT_BARCODE_TAG "]\n" +" --quality-tag TAG Quality tag [default: " DEFAULT_QUALITY_TAG "]\n" +" --index-format STR How to parse barcode and quality tags\n\n"); + sam_global_opt_help(to, "-.--.@"); + fprintf(to, +" \n" +" The index-format string describes how to parse the barcode and quality tags, for example:\n" +" i14i8 the first 14 characters are index 1, the next 8 characters are index 2\n" +" n8i14 ignore the first 8 characters, and use the next 14 characters for index 1\n" +" If the tag contains a separator, then the numeric part can be replaced with '*' to mean\n" +" 'read until the separator or end of tag', for example:\n" +" n*i* ignore the left part of the tag until the separator, then use the second part\n" +" of the tag as index 1\n"); +} + +typedef enum { READ_UNKNOWN = 0, READ_1 = 1, READ_2 = 2 } readpart; +typedef enum { FASTA, FASTQ } fastfile; +typedef struct bam2fq_opts { + char *fnse; + char *fnr[3]; + char *fn_input; // pointer to input filename in argv do not free + bool has12, has12always, use_oq, copy_tags, illumina_tag; + int flag_on, flag_off, flag_alloff; + sam_global_args ga; + fastfile filetype; + int def_qual; + char *barcode_tag; + char *quality_tag; + char *index_file[2]; + char *index_format; + char *extra_tags; + char compression_level; +} bam2fq_opts_t; + +typedef struct bam2fq_state { + samFile *fp; + BGZF *fpse; + BGZF *fpr[3]; + BGZF *fpi[2]; + BGZF *hsamtools_stdout; + bam_hdr_t *h; + bool has12, use_oq, copy_tags, illumina_tag; + int flag_on, flag_off, flag_alloff; + fastfile filetype; + int def_qual; + klist_t(ktaglist) *taglist; + char *index_sequence; + char compression_level; +} bam2fq_state_t; + +/* + * Get and decode the read from a BAM record. + * + * TODO: htslib really needs an interface for this. Consider this or perhaps + * bam_get_seq_str (current vs original orientation) and bam_get_qual_str + * functions as string formatted equivalents to bam_get_{seq,qual}? + */ + +/* + * Reverse a string in place. + * From http://stackoverflow.com/questions/8534274/is-the-strrev-function-not-available-in-linux. + * Author Sumit-naik: http://stackoverflow.com/users/4590926/sumit-naik + */ +static char *reverse(char *str) +{ + int i = strlen(str)-1,j=0; + char ch; + while (i>j) { + ch = str[i]; + str[i]= str[j]; + str[j] = ch; + i--; + j++; + } + return str; +} + +/* return the read, reverse complemented if necessary */ +static char *get_read(const bam1_t *rec) +{ + int len = rec->core.l_qseq + 1; + char *read = calloc(1, len); + char *seq = (char *)bam_get_seq(rec); + int n; + + if (!read) return NULL; + + for (n=0; n < rec->core.l_qseq; n++) { + if (rec->core.flag & BAM_FREVERSE) read[n] = seq_nt16_str[seq_comp_table[bam_seqi(seq,n)]]; + else read[n] = seq_nt16_str[bam_seqi(seq,n)]; + } + if (rec->core.flag & BAM_FREVERSE) reverse(read); + return read; +} + +/* + * get and decode the quality from a BAM record + */ +static int get_quality(const bam1_t *rec, char **qual_out) +{ + char *quality = calloc(1, rec->core.l_qseq + 1); + char *q = (char *)bam_get_qual(rec); + int n; + + if (!quality) return -1; + + if (*q == '\xff') { + free(quality); + *qual_out = NULL; + return 0; + } + + for (n=0; n < rec->core.l_qseq; n++) { + quality[n] = q[n]+33; + } + if (rec->core.flag & BAM_FREVERSE) reverse(quality); + *qual_out = quality; + return 0; +} + +// +// End of htslib complaints +// + + +static readpart which_readpart(const bam1_t *b) +{ + if ((b->core.flag & BAM_FREAD1) && !(b->core.flag & BAM_FREAD2)) { + return READ_1; + } else if ((b->core.flag & BAM_FREAD2) && !(b->core.flag & BAM_FREAD1)) { + return READ_2; + } else { + return READ_UNKNOWN; + } +} + +/* + * parse the length part from the index-format string + */ +static int getLength(char **s) +{ + int n = 0; + while (**s) { + if (**s == '*') { n=-1; (*s)++; break; } + if ( !isdigit(**s)) break; + n = n*10 + ((**s)-'0'); + (*s)++; + } + return n; +} + +static bool copy_tag(const char *tag, const bam1_t *rec, kstring_t *linebuf) +{ + uint8_t *s = bam_aux_get(rec, tag); + if (s) { + char aux_type = *s; + switch (aux_type) { + case 'C': + case 'S': aux_type = 'I'; break; + case 'c': + case 's': aux_type = 'i'; break; + case 'd': aux_type = 'f'; break; + } + + // Ensure space. Need 6 chars + length of tag. Max length of + // i is 16, A is 21, B currently 26, Z is unknown, so + // have to check that one later. + if (ks_resize(linebuf, ks_len(linebuf) + 64) < 0) return false; + + kputc('\t', linebuf); + kputsn(tag, 2, linebuf); + kputc(':', linebuf); + kputc(aux_type=='I'? 'i': aux_type, linebuf); + kputc(':', linebuf); + switch (aux_type) { + case 'H': + case 'Z': + if (kputs(bam_aux2Z(s), linebuf) < 0) return false; + break; + case 'i': kputw(bam_aux2i(s), linebuf); break; + case 'I': kputuw(bam_aux2i(s), linebuf); break; + case 'A': kputc(bam_aux2A(s), linebuf); break; + case 'f': kputd(bam_aux2f(s), linebuf); break; + case 'B': kputs("*** Unhandled aux type ***", linebuf); return false; + default: kputs("*** Unknown aux type ***", linebuf); return false; + } + } + return true; +} + +static int insert_index_sequence_into_linebuf(char *index_sequence, kstring_t *linebuf, bam1_t *rec) +{ + if (!index_sequence) return 0; + + kstring_t new = {0,0,NULL}; + if (linebuf->s) { + char *s = strchr(linebuf->s, '\n'); + if (s) { + if (ks_resize(&new, linebuf->l + strlen(index_sequence) + 16) < 0) + return -1; + *s = 0; + kputs(linebuf->s, &new); + kputc(' ', &new); + readpart readpart = which_readpart(rec); + if (readpart == READ_1) kputc('1', &new); + else if (readpart == READ_2) kputc('2', &new); + else kputc('0', &new); + + kputc(':', &new); + if (rec->core.flag & BAM_FQCFAIL) kputc('Y', &new); + else kputc('N', &new); + + kputs(":0:", &new); + kputs(index_sequence, &new); + kputc('\n', &new); + kputs(s+1, &new); + free(ks_release(linebuf)); + linebuf->s = new.s; linebuf->l = new.l; linebuf->m = new.m; + } + } + return 0; +} + +static bool make_fq_line(const bam1_t *rec, char *seq, char *qual, kstring_t *linebuf, const bam2fq_state_t *state) +{ + int i; + + linebuf->l = 0; + // Write read name + if (kputc(state->filetype == FASTA? '>' : '@', linebuf) < 0) return false; + if (kputs(bam_get_qname(rec), linebuf) < 0) return false; + // Add the /1 /2 if requested + if (state->has12) { + readpart readpart = which_readpart(rec); + if (readpart == READ_1) { + if (kputs("/1", linebuf) < 0) return false; + } else if (readpart == READ_2) { + if (kputs("/2", linebuf) < 0) return false; + } + } + if (state->copy_tags) { + for (i = 0; copied_tags[i]; ++i) { + if (!copy_tag(copied_tags[i], rec, linebuf)) { + fprintf(samtools_stderr, "Problem copying aux tags: [%s]\n", linebuf->s); + return false; + } + } + } + + if (state->taglist->size) { + kliter_t(ktaglist) *p; + for (p = kl_begin(state->taglist); p != kl_end(state->taglist); p = kl_next(p)) { + if (!copy_tag(kl_val(p), rec, linebuf)) { + fprintf(samtools_stderr, "Problem copying aux tags: [%s]\n", linebuf->s); + return false; + } + } + } + + if (kputc('\n', linebuf) < 0) return false; + if (kputs(seq, linebuf) < 0) return false; + if (kputc('\n', linebuf) < 0) return false; + + if (state->filetype == FASTQ) { + // Write quality + if (kputs("+\n", linebuf) < 0) return false; + if (qual && *qual) { + if (kputs(qual, linebuf) < 0) return false; + } else { + int len = strlen(seq); + if (ks_resize(linebuf, ks_len(linebuf) + len + 1) < 0) return false; + for (i = 0; i < len; ++i) { + kputc(33 + state->def_qual, linebuf); + } + } + if (kputc('\n', linebuf) < 0) return false; + } + return true; +} + +/* + * Create FASTQ lines from the barcode tag using the index-format + */ +static bool tags2fq(bam1_t *rec, bam2fq_state_t *state, const bam2fq_opts_t* opts) +{ + uint8_t *p; + char *ifmt = opts->index_format; + char *tag = NULL; + char *qual = NULL; + char *sub_tag = NULL; + char *sub_qual = NULL; + size_t tag_len; + int file_number = 0; + kstring_t linebuf = { 0, 0, NULL }; // Buffer + + + // read barcode tag + p = bam_aux_get(rec,opts->barcode_tag); + if (p) tag = bam_aux2Z(p); + + if (!tag) return true; // there is no tag + + tag_len = strlen(tag); + sub_tag = calloc(1, tag_len + 1); + if (!sub_tag) goto fail; + sub_qual = calloc(1, tag_len + 1); + if (!sub_qual) goto fail; + + // read quality tag + p = bam_aux_get(rec, opts->quality_tag); + if (p) qual = bam_aux2Z(p); + + // Parse the index-format string + while (*ifmt) { + if (file_number > 1) break; // shouldn't happen if we've validated paramaters correctly + char action = *ifmt; // should be 'i' or 'n' + ifmt++; // skip over action + int index_len = getLength(&ifmt); + int n = 0; + + if (index_len < 0) { + // read until separator + while (isalpha(*tag)) { + sub_tag[n] = *tag++; + if (qual) sub_qual[n] = *qual++; + n++; + } + if (*tag) { // skip separator + tag++; + if (qual) qual++; + } + } else { + // read index_len characters + while (index_len-- && *tag) { + sub_tag[n] = *tag++; + if (qual) sub_qual[n] = *qual++; + n++; + } + } + sub_tag[n] = '\0'; + sub_qual[n] = '\0'; + + if (action=='i' && *sub_tag && state->fpi[file_number]) { + //if (file_number==0) state->index_sequence = strdup(sub_tag); // we're going to need this later... + state->index_sequence = strdup(sub_tag); // we're going to need this later... + if (!state->index_sequence) goto fail; + if (!make_fq_line(rec, sub_tag, sub_qual, &linebuf, state)) goto fail; + if (state->illumina_tag) { + if (insert_index_sequence_into_linebuf(state->index_sequence, &linebuf, rec) < 0) { + goto fail; + } + } + if (bgzf_write(state->fpi[file_number++], linebuf.s, linebuf.l) < 0) + goto fail; + } + + } + + free(sub_qual); free(sub_tag); + free(linebuf.s); + return true; + + fail: + perror(__func__); + free(sub_qual); free(sub_tag); + free(linebuf.s); + return true; +} + +// Transform a bam1_t record into a string with the FASTQ representation of it +// @returns false for error, true for success +static bool bam1_to_fq(const bam1_t *b, kstring_t *linebuf, const bam2fq_state_t *state) +{ + int32_t qlen = b->core.l_qseq; + assert(qlen >= 0); + const uint8_t *oq = NULL; + char *qual = NULL; + + char *seq = get_read(b); + if (!seq) return false; + + if (state->use_oq) oq = bam_aux_get(b, "OQ"); + if (oq && *oq=='Z') { + qual = strdup(bam_aux2Z(oq)); + if (!qual) goto fail; + if (b->core.flag & BAM_FREVERSE) { // read is reverse complemented + reverse(qual); + } + } else { + if (get_quality(b, &qual) < 0) goto fail; + } + + if (!make_fq_line(b, seq, qual, linebuf, state)) goto fail; + + free(qual); + free(seq); + return true; + + fail: + free(seq); + free(qual); + return false; +} + +static void free_opts(bam2fq_opts_t *opts) +{ + free(opts->barcode_tag); + free(opts->quality_tag); + free(opts->index_format); + free(opts->extra_tags); + free(opts); +} + +// return true if valid +static bool parse_opts(int argc, char *argv[], bam2fq_opts_t** opts_out) +{ + // Parse args + bam2fq_opts_t* opts = calloc(1, sizeof(bam2fq_opts_t)); + opts->has12 = true; + opts->has12always = false; + opts->filetype = FASTQ; + opts->def_qual = 1; + opts->barcode_tag = NULL; + opts->quality_tag = NULL; + opts->index_format = NULL; + opts->index_file[0] = NULL; + opts->index_file[1] = NULL; + opts->extra_tags = NULL; + opts->compression_level = 1; + + int c; + sam_global_args_init(&opts->ga); + static const struct option lopts[] = { + SAM_OPT_GLOBAL_OPTIONS('-', 0, '-', '-', 0, '@'), + {"i1", required_argument, NULL, 1}, + {"I1", required_argument, NULL, 1}, + {"i2", required_argument, NULL, 2}, + {"I2", required_argument, NULL, 2}, + {"if", required_argument, NULL, 3}, + {"IF", required_argument, NULL, 3}, + {"index-format", required_argument, NULL, 3}, + {"barcode-tag", required_argument, NULL, 'b'}, + {"quality-tag", required_argument, NULL, 'q'}, + { NULL, 0, NULL, 0 } + }; + while ((c = getopt_long(argc, argv, "0:1:2:f:F:G:niNOs:c:tT:v:@:", lopts, NULL)) > 0) { + switch (c) { + case 'b': opts->barcode_tag = strdup(optarg); break; + case 'q': opts->quality_tag = strdup(optarg); break; + case 1 : opts->index_file[0] = optarg; break; + case 2 : opts->index_file[1] = optarg; break; + case 3 : opts->index_format = strdup(optarg); break; + case '0': opts->fnr[0] = optarg; break; + case '1': opts->fnr[1] = optarg; break; + case '2': opts->fnr[2] = optarg; break; + case 'f': opts->flag_on |= strtol(optarg, 0, 0); break; + case 'F': opts->flag_off |= strtol(optarg, 0, 0); break; + case 'G': opts->flag_alloff |= strtol(optarg, 0, 0); break; + case 'n': opts->has12 = false; break; + case 'N': opts->has12always = true; break; + case 'O': opts->use_oq = true; break; + case 's': opts->fnse = optarg; break; + case 't': opts->copy_tags = true; break; + case 'i': opts->illumina_tag = true; break; + case 'c': opts->compression_level = atoi(optarg); break; + case 'T': opts->extra_tags = strdup(optarg); break; + case 'v': opts->def_qual = atoi(optarg); break; + case '?': bam2fq_usage(samtools_stderr, argv[0]); free_opts(opts); return false; + default: + if (parse_sam_global_opt(c, optarg, lopts, &opts->ga) != 0) { + bam2fq_usage(samtools_stderr, argv[0]); free_opts(opts); return false; + } + break; + } + } + + if (opts->fnr[1] || opts->fnr[2]) opts->has12 = false; + if (opts->has12always) opts->has12 = true; + + if (!opts->barcode_tag) opts->barcode_tag = strdup(DEFAULT_BARCODE_TAG); + if (!opts->quality_tag) opts->quality_tag = strdup(DEFAULT_QUALITY_TAG); + + int nIndex = 0; + if (opts->index_format) { + char *s; + for (s = opts->index_format; *s; s++) { + if (*s == 'i') nIndex++; + } + } + if (nIndex>2) { + fprintf(samtools_stderr,"Invalid index format: more than 2 indexes\n"); + bam2fq_usage(samtools_stderr, argv[0]); + free_opts(opts); + return false; + } + + if (opts->index_file[1] && !opts->index_file[0]) { + fprintf(samtools_stderr, "Index one specified, but index two not given\n"); + bam2fq_usage(samtools_stderr, argv[0]); + free_opts(opts); + return false; + } + + if (nIndex==2 && !opts->index_file[1]) { + fprintf(samtools_stderr, "index_format specifies two indexes, but only one index file given\n"); + bam2fq_usage(samtools_stderr, argv[0]); + free_opts(opts); + return false; + } + + if (nIndex==1 && !opts->index_file[0]) { + fprintf(samtools_stderr, "index_format specifies an index, but no index file given\n"); + bam2fq_usage(samtools_stderr, argv[0]); + free_opts(opts); + return false; + } + + if (nIndex==0 && opts->index_file[0]) { + fprintf(samtools_stderr, "index_format not specified, but index file given\n"); + bam2fq_usage(samtools_stderr, argv[0]); + free_opts(opts); + return false; + } + + if (opts->def_qual < 0 || 93 < opts->def_qual) { + fprintf(samtools_stderr, "Invalid -v default quality %i, allowed range 0 to 93\n", opts->def_qual); + bam2fq_usage(samtools_stderr, argv[0]); + free_opts(opts); + return false; + } + + const char* type_str = argv[0]; + if (strcasecmp("fastq", type_str) == 0 || strcasecmp("bam2fq", type_str) == 0) { + opts->filetype = FASTQ; + } else if (strcasecmp("fasta", type_str) == 0) { + opts->filetype = FASTA; + } else { + print_error("bam2fq", "Unrecognised type call \"%s\", this should be impossible... but you managed it!", type_str); + bam2fq_usage(samtools_stderr, argv[0]); + free_opts(opts); + return false; + } + + if ((argc - (optind)) == 0) { + fprintf(samtools_stderr, "No input file specified.\n"); + bam2fq_usage(samtools_stdout, argv[0]); + free_opts(opts); + return false; + } + + if ((argc - (optind)) != 1) { + fprintf(samtools_stderr, "Too many arguments.\n"); + bam2fq_usage(samtools_stderr, argv[0]); + free_opts(opts); + return false; + } + opts->fn_input = argv[optind]; + *opts_out = opts; + return true; +} + +static BGZF *open_fqfile(char *filename, int c) +{ + char mode[4] = "w"; + size_t len = strlen(filename); + + mode[2] = 0; mode[3] = 0; + if (len > 3 && strstr(filename + (len - 3),".gz")) { + mode[1] = 'g'; mode[2] = c+'0'; + } else if ((len > 4 && strstr(filename + (len - 4),".bgz")) + || (len > 5 && strstr(filename + (len - 5),".bgzf"))) { + mode[1] = c+'0'; + } else { + mode[1] = 'u'; + } + + return bgzf_open(filename,mode); +} + +static bool init_state(const bam2fq_opts_t* opts, bam2fq_state_t** state_out) +{ + bam2fq_state_t* state = calloc(1, sizeof(bam2fq_state_t)); + state->flag_on = opts->flag_on; + state->flag_off = opts->flag_off; + state->flag_alloff = opts->flag_alloff; + state->has12 = opts->has12; + state->use_oq = opts->use_oq; + state->illumina_tag = opts->illumina_tag; + state->copy_tags = opts->copy_tags; + state->filetype = opts->filetype; + state->def_qual = opts->def_qual; + state->index_sequence = NULL; + state->hsamtools_stdout = bgzf_dopen(fileno(samtools_stdout), "wu"); + state->compression_level = opts->compression_level; + + state->taglist = kl_init(ktaglist); + if (opts->extra_tags) { + char *save_p; + char *s = strtok_r(opts->extra_tags, ",", &save_p); + while (s) { + if (strlen(s) != 2) { + fprintf(samtools_stderr, "Parsing extra tags - '%s' is not two characters\n", s); + free(state); + return false; + } + char **et = kl_pushp(ktaglist, state->taglist); + *et = s; + s = strtok_r(NULL, ",", &save_p); + } + } + + state->fp = sam_open(opts->fn_input, "r"); + if (state->fp == NULL) { + print_error_errno("bam2fq","Cannot read file \"%s\"", opts->fn_input); + free(state); + return false; + } + if (opts->ga.nthreads > 0) + hts_set_threads(state->fp, opts->ga.nthreads); + uint32_t rf = SAM_QNAME | SAM_FLAG | SAM_SEQ | SAM_QUAL; + if (opts->use_oq || opts->extra_tags || opts->index_file[0]) rf |= SAM_AUX; + if (hts_set_opt(state->fp, CRAM_OPT_REQUIRED_FIELDS, rf)) { + fprintf(samtools_stderr, "Failed to set CRAM_OPT_REQUIRED_FIELDS value\n"); + free(state); + return false; + } + if (hts_set_opt(state->fp, CRAM_OPT_DECODE_MD, 0)) { + fprintf(samtools_stderr, "Failed to set CRAM_OPT_DECODE_MD value\n"); + free(state); + return false; + } + if (opts->fnse) { + state->fpse = open_fqfile(opts->fnse, state->compression_level); + if (state->fpse == NULL) { + print_error_errno("bam2fq", "Cannot write to singleton file \"%s\"", opts->fnse); + free(state); + return false; + } + } + + int i; + for (i = 0; i < 3; ++i) { + if (opts->fnr[i]) { + state->fpr[i] = open_fqfile(opts->fnr[i], state->compression_level); + if (state->fpr[i] == NULL) { + print_error_errno("bam2fq", "Cannot write to r%d file \"%s\"", i, opts->fnr[i]); + free(state); + return false; + } + } else { + state->fpr[i] = state->hsamtools_stdout; + } + } + for (i = 0; i < 2; i++) { + state->fpi[i] = NULL; + if (opts->index_file[i]) { + state->fpi[i] = open_fqfile(opts->index_file[i], state->compression_level); + if (state->fpi[i] == NULL) { + print_error_errno("bam2fq", "Cannot write to i%d file \"%s\"", i+1, opts->index_file[i]); + free(state); + return false; + } + } + } + + state->h = sam_hdr_read(state->fp); + if (state->h == NULL) { + fprintf(samtools_stderr, "Failed to read header for \"%s\"\n", opts->fn_input); + free(state); + return false; + } + + *state_out = state; + return true; +} + +static bool destroy_state(const bam2fq_opts_t *opts, bam2fq_state_t *state, int* status) +{ + bool valid = true; + bam_hdr_destroy(state->h); + check_sam_close("bam2fq", state->fp, opts->fn_input, "file", status); + if (state->fpse && bgzf_close(state->fpse)) { print_error_errno("bam2fq", "Error closing singleton file \"%s\"", opts->fnse); valid = false; } + int i; + for (i = 0; i < 3; ++i) { + if (state->fpr[i] == state->hsamtools_stdout) { + if (i==0 && bgzf_close(state->fpr[i])) { print_error_errno("bam2fq", "Error closing STDOUT"); valid = false; } + } else { + if (bgzf_close(state->fpr[i])) { print_error_errno("bam2fq", "Error closing r%d file \"%s\"", i, opts->fnr[i]); valid = false; } + } + } + for (i = 0; i < 2; i++) { + if (state->fpi[i] && bgzf_close(state->fpi[i])) { + print_error_errno("bam2fq", "Error closing i%d file \"%s\"", i+1, opts->index_file[i]); + valid = false; + } + } + kl_destroy(ktaglist,state->taglist); + free(state->index_sequence); + free(state); + return valid; +} + +static inline bool filter_it_out(const bam1_t *b, const bam2fq_state_t *state) +{ + return (b->core.flag&(BAM_FSECONDARY|BAM_FSUPPLEMENTARY) // skip secondary and supplementary alignments + || (b->core.flag&(state->flag_on)) != state->flag_on // or reads indicated by filter flags + || (b->core.flag&(state->flag_off)) != 0 + || (b->core.flag&(state->flag_alloff) && (b->core.flag&(state->flag_alloff)) == state->flag_alloff)); + +} + +static bool bam2fq_mainloop(bam2fq_state_t *state, bam2fq_opts_t* opts) +{ + int n; + bam1_t *records[3]; + bam1_t* b = bam_init1(); + char *current_qname = NULL; + int64_t n_reads = 0, n_singletons = 0; // Statistics + kstring_t linebuf[3] = {{0,0,NULL},{0,0,NULL},{0,0,NULL}}; + int score[3]; + int at_eof; + if (b == NULL ) { + perror("[bam2fq_mainloop] Malloc error for bam record buffer."); + return false; + } + + bool valid = true; + while (true) { + int res = sam_read1(state->fp, state->h, b); + if (res < -1) { + fprintf(samtools_stderr, "[bam2fq_mainloop] Failed to read bam record.\n"); + return false; + } + at_eof = res < 0; + + if (!at_eof && filter_it_out(b, state)) continue; + if (!at_eof) ++n_reads; + + if (at_eof || !current_qname || (strcmp(current_qname, bam_get_qname(b)) != 0)) { + if (current_qname) { + if (state->illumina_tag) { + for (n=0; valid && n<3; n++) { + if (insert_index_sequence_into_linebuf(state->index_sequence, &linebuf[n], records[n]) < 0) valid = false; + } + if (!valid) break; + } + free(state->index_sequence); state->index_sequence = NULL; + if (score[1] > 0 && score[2] > 0) { + // print linebuf[1] to fpr[1], linebuf[2] to fpr[2] + if (bgzf_write(state->fpr[1], linebuf[1].s, linebuf[1].l) < 0) { valid = false; break; } + if (bgzf_write(state->fpr[2], linebuf[2].s, linebuf[2].l) < 0) { valid = false; break; } + } else if (score[1] > 0 || score[2] > 0) { + if (state->fpse) { + // print whichever one exists to fpse + if (score[1] > 0) { + if (bgzf_write(state->fpse, linebuf[1].s, linebuf[1].l) < 0) { valid = false; break; } + } else { + if (bgzf_write(state->fpse, linebuf[2].s, linebuf[2].l) < 0) { valid = false; break; } + } + ++n_singletons; + } else { + if (score[1] > 0) { + if (bgzf_write(state->fpr[1], linebuf[1].s, linebuf[1].l) < 0) { valid = false; break; } + } else { + if (bgzf_write(state->fpr[2], linebuf[2].s, linebuf[2].l) < 0) { valid = false; break; } + } + } + } + if (score[0]) { // TODO: check this + // print linebuf[0] to fpr[0] + if (bgzf_write(state->fpr[0], linebuf[0].s, linebuf[0].l) < 0) { valid = false; break; } + } + } + + if (at_eof) break; + + free(current_qname); + current_qname = strdup(bam_get_qname(b)); + if (!current_qname) { valid = false; break; } + score[0] = score[1] = score[2] = 0; + } + + // Prefer a copy of the read that has base qualities + int b_score = bam_get_qual(b)[0] != 0xff? 2 : 1; + if (b_score > score[which_readpart(b)]) { + if (state->fpi[0]) if (!tags2fq(b, state, opts)) return false; + records[which_readpart(b)] = b; + if(!bam1_to_fq(b, &linebuf[which_readpart(b)], state)) { + fprintf(samtools_stderr, "[%s] Error converting read to FASTA/Q\n", __func__); + return false; + } + score[which_readpart(b)] = b_score; + } + } + if (!valid) + { + perror("[bam2fq_mainloop] Error writing to FASTx files."); + } + bam_destroy1(b); + free(current_qname); + free(linebuf[0].s); + free(linebuf[1].s); + free(linebuf[2].s); + fprintf(samtools_stderr, "[M::%s] discarded %" PRId64 " singletons\n", __func__, n_singletons); + fprintf(samtools_stderr, "[M::%s] processed %" PRId64 " reads\n", __func__, n_reads); + + return valid; +} + +int main_bam2fq(int argc, char *argv[]) +{ + int status = EXIT_SUCCESS; + bam2fq_opts_t* opts = NULL; + bam2fq_state_t* state = NULL; + + bool valid = parse_opts(argc, argv, &opts); + if (!valid || opts == NULL) return valid ? EXIT_SUCCESS : EXIT_FAILURE; + + if (!init_state(opts, &state)) return EXIT_FAILURE; + + if (!bam2fq_mainloop(state,opts)) status = EXIT_FAILURE; + + if (!destroy_state(opts, state, &status)) return EXIT_FAILURE; + sam_global_args_free(&opts->ga); + free_opts(opts); + + return status; +} diff --git a/samtools/sample.c b/samtools/sample.c new file mode 100644 index 0000000..4cc89ce --- /dev/null +++ b/samtools/sample.c @@ -0,0 +1,134 @@ +/* sample.c -- group data by sample. + + Copyright (C) 2010, 2011 Broad Institute. + Copyright (C) 2013 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include "sample.h" +#include "htslib/khash.h" +KHASH_MAP_INIT_STR(sm, int) + +bam_sample_t *bam_smpl_init(void) +{ + bam_sample_t *s; + s = calloc(1, sizeof(bam_sample_t)); + s->rg2smid = kh_init(sm); + s->sm2id = kh_init(sm); + return s; +} + +void bam_smpl_destroy(bam_sample_t *sm) +{ + int i; + khint_t k; + khash_t(sm) *rg2smid = (khash_t(sm)*)sm->rg2smid; + if (sm == 0) return; + for (i = 0; i < sm->n; ++i) free(sm->smpl[i]); + free(sm->smpl); + for (k = kh_begin(rg2smid); k != kh_end(rg2smid); ++k) + if (kh_exist(rg2smid, k)) free((char*)kh_key(rg2smid, k)); + kh_destroy(sm, sm->rg2smid); + kh_destroy(sm, sm->sm2id); + free(sm); +} + +static void add_pair(bam_sample_t *sm, khash_t(sm) *sm2id, const char *key, const char *val) +{ + khint_t k_rg, k_sm; + int ret; + khash_t(sm) *rg2smid = (khash_t(sm)*)sm->rg2smid; + k_rg = kh_get(sm, rg2smid, key); + if (k_rg != kh_end(rg2smid)) return; // duplicated @RG-ID + k_rg = kh_put(sm, rg2smid, strdup(key), &ret); + k_sm = kh_get(sm, sm2id, val); + if (k_sm == kh_end(sm2id)) { // absent + if (sm->n == sm->m) { + sm->m = sm->m? sm->m<<1 : 1; + sm->smpl = realloc(sm->smpl, sizeof(char*) * sm->m); + } + sm->smpl[sm->n] = strdup(val); + k_sm = kh_put(sm, sm2id, sm->smpl[sm->n], &ret); + kh_val(sm2id, k_sm) = sm->n++; + } + kh_val(rg2smid, k_rg) = kh_val(sm2id, k_sm); +} + +int bam_smpl_add(bam_sample_t *sm, const char *fn, const char *txt) +{ + const char *p = txt, *q, *r; + kstring_t buf, first_sm; + int n = 0; + khash_t(sm) *sm2id = (khash_t(sm)*)sm->sm2id; + if (txt == 0) { + add_pair(sm, sm2id, fn, fn); + return 0; + } + memset(&buf, 0, sizeof(kstring_t)); + memset(&first_sm, 0, sizeof(kstring_t)); + while ((q = strstr(p, "@RG")) != 0) { + p = q + 3; + r = q = 0; + if ((q = strstr(p, "\tID:")) != 0) q += 4; + if ((r = strstr(p, "\tSM:")) != 0) r += 4; + if (r && q) { + char *u, *v; + int oq, or; + for (u = (char*)q; *u && *u != '\t' && *u != '\n'; ++u); + for (v = (char*)r; *v && *v != '\t' && *v != '\n'; ++v); + oq = *u; or = *v; *u = *v = '\0'; + buf.l = 0; kputs(fn, &buf); kputc('/', &buf); kputs(q, &buf); + add_pair(sm, sm2id, buf.s, r); + if ( !first_sm.s ) + kputs(r,&first_sm); + *u = oq; *v = or; + } else break; + p = q > r? q : r; + ++n; + } + if (n == 0) add_pair(sm, sm2id, fn, fn); + // If there is only one RG tag present in the header and reads are not annotated, don't refuse to work but + // use the tag instead. + else if ( n==1 && first_sm.s ) + add_pair(sm,sm2id,fn,first_sm.s); + if ( first_sm.s ) + free(first_sm.s); + +// add_pair(sm, sm2id, fn, fn); + free(buf.s); + return 0; +} + +int bam_smpl_rg2smid(const bam_sample_t *sm, const char *fn, const char *rg, kstring_t *str) +{ + khint_t k; + khash_t(sm) *rg2smid = (khash_t(sm)*)sm->rg2smid; + if (rg) { + str->l = 0; + kputs(fn, str); kputc('/', str); kputs(rg, str); + k = kh_get(sm, rg2smid, str->s); + } else k = kh_get(sm, rg2smid, fn); + return k == kh_end(rg2smid)? -1 : kh_val(rg2smid, k); +} diff --git a/samtools/sample.c.pysam.c b/samtools/sample.c.pysam.c new file mode 100644 index 0000000..8b39a90 --- /dev/null +++ b/samtools/sample.c.pysam.c @@ -0,0 +1,136 @@ +#include "samtools.pysam.h" + +/* sample.c -- group data by sample. + + Copyright (C) 2010, 2011 Broad Institute. + Copyright (C) 2013 Genome Research Ltd. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include "sample.h" +#include "htslib/khash.h" +KHASH_MAP_INIT_STR(sm, int) + +bam_sample_t *bam_smpl_init(void) +{ + bam_sample_t *s; + s = calloc(1, sizeof(bam_sample_t)); + s->rg2smid = kh_init(sm); + s->sm2id = kh_init(sm); + return s; +} + +void bam_smpl_destroy(bam_sample_t *sm) +{ + int i; + khint_t k; + khash_t(sm) *rg2smid = (khash_t(sm)*)sm->rg2smid; + if (sm == 0) return; + for (i = 0; i < sm->n; ++i) free(sm->smpl[i]); + free(sm->smpl); + for (k = kh_begin(rg2smid); k != kh_end(rg2smid); ++k) + if (kh_exist(rg2smid, k)) free((char*)kh_key(rg2smid, k)); + kh_destroy(sm, sm->rg2smid); + kh_destroy(sm, sm->sm2id); + free(sm); +} + +static void add_pair(bam_sample_t *sm, khash_t(sm) *sm2id, const char *key, const char *val) +{ + khint_t k_rg, k_sm; + int ret; + khash_t(sm) *rg2smid = (khash_t(sm)*)sm->rg2smid; + k_rg = kh_get(sm, rg2smid, key); + if (k_rg != kh_end(rg2smid)) return; // duplicated @RG-ID + k_rg = kh_put(sm, rg2smid, strdup(key), &ret); + k_sm = kh_get(sm, sm2id, val); + if (k_sm == kh_end(sm2id)) { // absent + if (sm->n == sm->m) { + sm->m = sm->m? sm->m<<1 : 1; + sm->smpl = realloc(sm->smpl, sizeof(char*) * sm->m); + } + sm->smpl[sm->n] = strdup(val); + k_sm = kh_put(sm, sm2id, sm->smpl[sm->n], &ret); + kh_val(sm2id, k_sm) = sm->n++; + } + kh_val(rg2smid, k_rg) = kh_val(sm2id, k_sm); +} + +int bam_smpl_add(bam_sample_t *sm, const char *fn, const char *txt) +{ + const char *p = txt, *q, *r; + kstring_t buf, first_sm; + int n = 0; + khash_t(sm) *sm2id = (khash_t(sm)*)sm->sm2id; + if (txt == 0) { + add_pair(sm, sm2id, fn, fn); + return 0; + } + memset(&buf, 0, sizeof(kstring_t)); + memset(&first_sm, 0, sizeof(kstring_t)); + while ((q = strstr(p, "@RG")) != 0) { + p = q + 3; + r = q = 0; + if ((q = strstr(p, "\tID:")) != 0) q += 4; + if ((r = strstr(p, "\tSM:")) != 0) r += 4; + if (r && q) { + char *u, *v; + int oq, or; + for (u = (char*)q; *u && *u != '\t' && *u != '\n'; ++u); + for (v = (char*)r; *v && *v != '\t' && *v != '\n'; ++v); + oq = *u; or = *v; *u = *v = '\0'; + buf.l = 0; kputs(fn, &buf); kputc('/', &buf); kputs(q, &buf); + add_pair(sm, sm2id, buf.s, r); + if ( !first_sm.s ) + kputs(r,&first_sm); + *u = oq; *v = or; + } else break; + p = q > r? q : r; + ++n; + } + if (n == 0) add_pair(sm, sm2id, fn, fn); + // If there is only one RG tag present in the header and reads are not annotated, don't refuse to work but + // use the tag instead. + else if ( n==1 && first_sm.s ) + add_pair(sm,sm2id,fn,first_sm.s); + if ( first_sm.s ) + free(first_sm.s); + +// add_pair(sm, sm2id, fn, fn); + free(buf.s); + return 0; +} + +int bam_smpl_rg2smid(const bam_sample_t *sm, const char *fn, const char *rg, kstring_t *str) +{ + khint_t k; + khash_t(sm) *rg2smid = (khash_t(sm)*)sm->rg2smid; + if (rg) { + str->l = 0; + kputs(fn, str); kputc('/', str); kputs(rg, str); + k = kh_get(sm, rg2smid, str->s); + } else k = kh_get(sm, rg2smid, fn); + return k == kh_end(rg2smid)? -1 : kh_val(rg2smid, k); +} diff --git a/samtools/sample.h b/samtools/sample.h new file mode 100644 index 0000000..8e8efa5 --- /dev/null +++ b/samtools/sample.h @@ -0,0 +1,41 @@ +/* sample.h -- group data by sample. + + Copyright (C) 2010 Broad Institute. + + Author: Heng Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#ifndef BAM_SAMPLE_H +#define BAM_SAMPLE_H + +#include "htslib/kstring.h" + +typedef struct { + int n, m; + char **smpl; + void *rg2smid, *sm2id; +} bam_sample_t; + +bam_sample_t *bam_smpl_init(void); +int bam_smpl_add(bam_sample_t *sm, const char *abs, const char *txt); +int bam_smpl_rg2smid(const bam_sample_t *sm, const char *fn, const char *rg, kstring_t *str); +void bam_smpl_destroy(bam_sample_t *sm); + +#endif diff --git a/samtools/samtools.h b/samtools/samtools.h new file mode 100644 index 0000000..7a406a2 --- /dev/null +++ b/samtools/samtools.h @@ -0,0 +1,40 @@ +/* samtools.h -- utility routines. + + Copyright (C) 2013-2015 Genome Research Ltd. + + Author: Petr Danecek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#ifndef SAMTOOLS_H +#define SAMTOOLS_H + +const char *samtools_version(void); +const char *samtools_version_short(void); + +#if defined __GNUC__ && __GNUC__ >= 2 +#define CHECK_PRINTF(fmt,args) __attribute__ ((format (printf, fmt, args))) +#else +#define CHECK_PRINTF(fmt,args) +#endif + +void print_error(const char *subcommand, const char *format, ...) CHECK_PRINTF(2, 3); +void print_error_errno(const char *subcommand, const char *format, ...) CHECK_PRINTF(2, 3); + +#endif diff --git a/samtools/samtools.pysam.c b/samtools/samtools.pysam.c new file mode 100644 index 0000000..c276a8a --- /dev/null +++ b/samtools/samtools.pysam.c @@ -0,0 +1,68 @@ +#include +#include +#include +#include +#include +#include + +#include "samtools.pysam.h" + +FILE * samtools_stderr = NULL; +FILE * samtools_stdout = NULL; +const char * samtools_stdout_fn = NULL; +int samtools_stdout_fileno = STDOUT_FILENO; + + +FILE * samtools_set_stderr(int fd) +{ + if (samtools_stderr != NULL) + fclose(samtools_stderr); + samtools_stderr = fdopen(fd, "w"); + return samtools_stderr; +} + +void samtools_unset_stderr(void) +{ + if (samtools_stderr != NULL) + fclose(samtools_stderr); + samtools_stderr = fopen("/dev/null", "w"); +} + +FILE * samtools_set_stdout(int fd) +{ + if (samtools_stdout != NULL) + fclose(samtools_stdout); + samtools_stdout = fdopen(fd, "w"); + if (samtools_stdout == NULL) + { + fprintf(samtools_stderr, "could not set stdout to fd %i", fd); + } + samtools_stdout_fileno = fd; + return samtools_stdout; +} + +void samtools_set_stdout_fn(const char *fn) +{ + samtools_stdout_fn = fn; +} + +void samtools_unset_stdout(void) +{ + if (samtools_stdout != NULL) + fclose(samtools_stdout); + samtools_stdout = fopen("/dev/null", "w"); + samtools_stdout_fileno = STDOUT_FILENO; +} + +void samtools_set_optind(int val) +{ + // setting this in cython via + // "from posix.unistd cimport optind" + // did not work. + // + // setting to 0 forces a complete re-initialization + optind = val; +} + + + diff --git a/samtools/samtools.pysam.h b/samtools/samtools.pysam.h new file mode 100644 index 0000000..e2bfd85 --- /dev/null +++ b/samtools/samtools.pysam.h @@ -0,0 +1,47 @@ +#ifndef PYSAM_H +#define PYSAM_H + +#include "stdio.h" + +extern FILE * samtools_stderr; + +extern FILE * samtools_stdout; + +extern const char * samtools_stdout_fn; + +/*! set pysam standard error to point to file descriptor + + Setting the stderr will close the previous stderr. + */ +FILE * samtools_set_stderr(int fd); + +/*! set pysam standard output to point to file descriptor + + Setting the stderr will close the previous stdout. + */ +FILE * samtools_set_stdout(int fd); + +/*! set pysam standard output to point to filename + + */ +void samtools_set_stdout_fn(const char * fn); + +/*! set pysam standard error to /dev/null. + + Unsetting the stderr will close the previous stderr. + */ +void samtools_unset_stderr(void); + +/*! set pysam standard error to /dev/null. + + Unsetting the stderr will close the previous stderr. + */ +void samtools_unset_stdout(void); + +int samtools_dispatch(int argc, char *argv[]); + +void samtools_set_optind(int); + +extern int samtools_main(int argc, char *argv[]); + +#endif diff --git a/samtools/stats.c b/samtools/stats.c new file mode 100644 index 0000000..35574ed --- /dev/null +++ b/samtools/stats.c @@ -0,0 +1,1732 @@ +/* stats.c -- This is the former bamcheck integrated into samtools/htslib. + + Copyright (C) 2012-2015 Genome Research Ltd. + + Author: Petr Danecek + Author: Sam Nicholls + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +/* Assumptions, approximations and other issues: + - GC-depth graph does not split reads, the starting position determines which bin is incremented. + There are small overlaps between bins (max readlen-1). However, the bins are big (20k). + - coverage distribution ignores softclips and deletions + - some stats require sorted BAMs + - GC content graph can have an untidy, step-like pattern when BAM contains multiple read lengths. + - 'bases mapped' (stats->nbases_mapped) is calculated from read lengths given by BAM (core.l_qseq) + - With the -t option, the whole reads are used. Except for the number of mapped bases (cigar) + counts, no splicing is done, no indels or soft clips are considered, even small overlap is + good enough to include the read in the stats. + - GC content of reads not calculated for "=" sequences + +*/ + +#include + +#include // for isatty() +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // for crc32 +#include +#include +#include +#include "sam_header.h" +#include +#include "samtools.h" +#include +#include +#include "stats_isize.h" +#include "sam_opts.h" + +#define BWA_MIN_RDLEN 35 +// From the spec +// If 0x4 is set, no assumptions can be made about RNAME, POS, CIGAR, MAPQ, bits 0x2, 0x10, 0x100 and 0x800, and the bit 0x20 of the previous read in the template. +#define IS_PAIRED_AND_MAPPED(bam) (((bam)->core.flag&BAM_FPAIRED) && !((bam)->core.flag&BAM_FUNMAP) && !((bam)->core.flag&BAM_FMUNMAP)) +#define IS_PROPERLYPAIRED(bam) (((bam)->core.flag&(BAM_FPAIRED|BAM_FPROPER_PAIR)) == (BAM_FPAIRED|BAM_FPROPER_PAIR) && !((bam)->core.flag&BAM_FUNMAP)) +#define IS_UNMAPPED(bam) ((bam)->core.flag&BAM_FUNMAP) +#define IS_REVERSE(bam) ((bam)->core.flag&BAM_FREVERSE) +#define IS_MATE_REVERSE(bam) ((bam)->core.flag&BAM_FMREVERSE) +#define IS_READ1(bam) ((bam)->core.flag&BAM_FREAD1) +#define IS_READ2(bam) ((bam)->core.flag&BAM_FREAD2) +#define IS_DUP(bam) ((bam)->core.flag&BAM_FDUP) +#define IS_ORIGINAL(bam) (((bam)->core.flag&(BAM_FSECONDARY|BAM_FSUPPLEMENTARY)) == 0) + +// The GC-depth graph works as follows: split the reference sequence into +// segments and calculate GC content and depth in each bin. Then sort +// these segments by their GC and plot the depth distribution by means +// of 10th, 25th, etc. depth percentiles. +typedef struct +{ + float gc; + uint32_t depth; +} +gc_depth_t; + +// For coverage distribution, a simple pileup +typedef struct +{ + int64_t pos; + int size, start; + int *buffer; +} +round_buffer_t; + +typedef struct { uint32_t from, to; } pos_t; +typedef struct +{ + int npos,mpos,cpos; + pos_t *pos; +} +regions_t; + +typedef struct +{ + uint64_t a; + uint64_t c; + uint64_t g; + uint64_t t; + uint64_t n; + uint64_t other; +} +acgtno_count_t; + +typedef struct +{ + // Auxiliary data + int flag_require, flag_filter; + faidx_t *fai; // Reference sequence for GC-depth graph + int argc; // Command line arguments to be printed on the output + char **argv; + int gcd_bin_size; // The size of GC-depth bin + int nisize; // The maximum insert size that the allocated array can hold - 0 indicates no limit + int trim_qual; // bwa trim quality + float isize_main_bulk; // There are always some unrealistically big insert sizes, report only the main part + int cov_min,cov_max,cov_step; // Minimum, maximum coverage and size of the coverage bins + samFile* sam; + bam_hdr_t* sam_header; + + // Filters + int filter_readlen; + + // Misc + char *split_tag; // Tag on which to perform stats splitting + char *split_prefix; // Path or string prefix for filenames created when splitting +} +stats_info_t; + +typedef struct +{ + // Dimensions of the quality histogram holder (quals_1st,quals_2nd), GC content holder (gc_1st,gc_2nd), + // insert size histogram holder + int nquals; // The number of quality bins + int nbases; // The maximum sequence length the allocated array can hold + int ngc; // The size of gc_1st and gc_2nd + int nindels; // The maximum indel length for indel distribution + + // Arrays for the histogram data + uint64_t *quals_1st, *quals_2nd; + uint64_t *gc_1st, *gc_2nd; + acgtno_count_t *acgtno_cycles; + uint64_t *read_lengths; + uint64_t *insertions, *deletions; + uint64_t *ins_cycles_1st, *ins_cycles_2nd, *del_cycles_1st, *del_cycles_2nd; + isize_t *isize; + + // The extremes encountered + int max_len; // Maximum read length + int max_qual; // Maximum quality + int is_sorted; + + // Summary numbers + uint64_t total_len; + uint64_t total_len_dup; + uint64_t nreads_1st; + uint64_t nreads_2nd; + uint64_t nreads_filtered; + uint64_t nreads_dup; + uint64_t nreads_unmapped; + uint64_t nreads_single_mapped; + uint64_t nreads_paired_and_mapped; + uint64_t nreads_properly_paired; + uint64_t nreads_paired_tech; + uint64_t nreads_anomalous; + uint64_t nreads_mq0; + uint64_t nbases_mapped; + uint64_t nbases_mapped_cigar; + uint64_t nbases_trimmed; // bwa trimmed bases + uint64_t nmismatches; + uint64_t nreads_QCfailed, nreads_secondary; + struct { + uint32_t names, reads, quals; + } checksum; + + // GC-depth related data + uint32_t ngcd, igcd; // The maximum number of GC depth bins and index of the current bin + gc_depth_t *gcd; // The GC-depth bins holder + int32_t tid, gcd_pos; // Position of the current bin + int32_t pos; // Position of the last read + + // Coverage distribution related data + int ncov; // The number of coverage bins + uint64_t *cov; // The coverage frequencies + round_buffer_t cov_rbuf; // Pileup round buffer + + // Mismatches by read cycle + uint8_t *rseq_buf; // A buffer for reference sequence to check the mismatches against + int mrseq_buf; // The size of the buffer + int32_t rseq_pos; // The coordinate of the first base in the buffer + int32_t nrseq_buf; // The used part of the buffer + uint64_t *mpc_buf; // Mismatches per cycle + + // Target regions + int nregions, reg_from,reg_to; + regions_t *regions; + + // Auxiliary data + double sum_qual; // For calculating average quality value + void *rg_hash; // Read groups to include, the array is null-terminated + + // Split + char* split_name; + + stats_info_t* info; // Pointer to options and settings struct + +} +stats_t; +KHASH_MAP_INIT_STR(c2stats, stats_t*) + +static void error(const char *format, ...); +int is_in_regions(bam1_t *bam_line, stats_t *stats); +void realloc_buffers(stats_t *stats, int seq_len); + + +// Coverage distribution methods +static inline int coverage_idx(int min, int max, int n, int step, int depth) +{ + if ( depth < min ) + return 0; + + if ( depth > max ) + return n-1; + + return 1 + (depth - min) / step; +} + +static inline int round_buffer_lidx2ridx(int offset, int size, int64_t refpos, int64_t pos) +{ + return (offset + (pos-refpos) % size) % size; +} + +void round_buffer_flush(stats_t *stats, int64_t pos) +{ + int ibuf,idp; + + if ( pos==stats->cov_rbuf.pos ) + return; + + int64_t new_pos = pos; + if ( pos==-1 || pos - stats->cov_rbuf.pos >= stats->cov_rbuf.size ) + { + // Flush the whole buffer, but in sequential order, + pos = stats->cov_rbuf.pos + stats->cov_rbuf.size - 1; + } + + if ( pos < stats->cov_rbuf.pos ) + error("Expected coordinates in ascending order, got %ld after %ld\n", pos,stats->cov_rbuf.pos); + + int ifrom = stats->cov_rbuf.start; + int ito = round_buffer_lidx2ridx(stats->cov_rbuf.start,stats->cov_rbuf.size,stats->cov_rbuf.pos,pos-1); + if ( ifrom>ito ) + { + for (ibuf=ifrom; ibufcov_rbuf.size; ibuf++) + { + if ( !stats->cov_rbuf.buffer[ibuf] ) + continue; + idp = coverage_idx(stats->info->cov_min,stats->info->cov_max,stats->ncov,stats->info->cov_step,stats->cov_rbuf.buffer[ibuf]); + stats->cov[idp]++; + stats->cov_rbuf.buffer[ibuf] = 0; + } + ifrom = 0; + } + for (ibuf=ifrom; ibuf<=ito; ibuf++) + { + if ( !stats->cov_rbuf.buffer[ibuf] ) + continue; + idp = coverage_idx(stats->info->cov_min,stats->info->cov_max,stats->ncov,stats->info->cov_step,stats->cov_rbuf.buffer[ibuf]); + stats->cov[idp]++; + stats->cov_rbuf.buffer[ibuf] = 0; + } + stats->cov_rbuf.start = (new_pos==-1) ? 0 : round_buffer_lidx2ridx(stats->cov_rbuf.start,stats->cov_rbuf.size,stats->cov_rbuf.pos,pos); + stats->cov_rbuf.pos = new_pos; +} + +void round_buffer_insert_read(round_buffer_t *rbuf, int64_t from, int64_t to) +{ + if ( to-from >= rbuf->size ) + error("The read length too big (%d), please increase the buffer length (currently %d)\n", to-from+1,rbuf->size); + if ( from < rbuf->pos ) + error("The reads are not sorted (%ld comes after %ld).\n", from,rbuf->pos); + + int ifrom,ito,ibuf; + ifrom = round_buffer_lidx2ridx(rbuf->start,rbuf->size,rbuf->pos,from); + ito = round_buffer_lidx2ridx(rbuf->start,rbuf->size,rbuf->pos,to); + if ( ifrom>ito ) + { + for (ibuf=ifrom; ibufsize; ibuf++) + rbuf->buffer[ibuf]++; + ifrom = 0; + } + for (ibuf=ifrom; ibuf<=ito; ibuf++) + rbuf->buffer[ibuf]++; +} + +// Calculate the number of bases in the read trimmed by BWA +int bwa_trim_read(int trim_qual, uint8_t *quals, int len, int reverse) +{ + if ( lenmax_sum ) + { + max_sum = sum; + // This is the correct way, but bwa clips from some reason one base less + // max_l = l+1; + max_l = l; + } + } + return max_l; +} + + +void count_indels(stats_t *stats,bam1_t *bam_line) +{ + int is_fwd = IS_REVERSE(bam_line) ? 0 : 1; + int is_1st = IS_READ1(bam_line) ? 1 : 0; + int icig; + int icycle = 0; + int read_len = bam_line->core.l_qseq; + for (icig=0; icigcore.n_cigar; icig++) + { + int cig = bam_cigar_op(bam_get_cigar(bam_line)[icig]); + int ncig = bam_cigar_oplen(bam_get_cigar(bam_line)[icig]); + if ( !ncig ) continue; // curiously, this can happen: 0D + + if ( cig==BAM_CINS ) + { + int idx = is_fwd ? icycle : read_len-icycle-ncig; + if ( idx<0 ) + error("FIXME: read_len=%d vs icycle=%d\n", read_len,icycle); + if ( idx >= stats->nbases || idx<0 ) error("FIXME: %d vs %d, %s:%d %s\n", idx,stats->nbases, stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1,bam_get_qname(bam_line)); + if ( is_1st ) + stats->ins_cycles_1st[idx]++; + else + stats->ins_cycles_2nd[idx]++; + icycle += ncig; + if ( ncig<=stats->nindels ) + stats->insertions[ncig-1]++; + continue; + } + if ( cig==BAM_CDEL ) + { + int idx = is_fwd ? icycle-1 : read_len-icycle-1; + if ( idx<0 ) continue; // discard meaningless deletions + if ( idx >= stats->nbases ) error("FIXME: %d vs %d\n", idx,stats->nbases); + if ( is_1st ) + stats->del_cycles_1st[idx]++; + else + stats->del_cycles_2nd[idx]++; + if ( ncig<=stats->nindels ) + stats->deletions[ncig-1]++; + continue; + } + if ( cig!=BAM_CREF_SKIP && cig!=BAM_CHARD_CLIP && cig!=BAM_CPAD ) + icycle += ncig; + } +} + +int unclipped_length(bam1_t *bam_line) +{ + int icig, read_len = bam_line->core.l_qseq; + for (icig=0; icigcore.n_cigar; icig++) + { + int cig = bam_cigar_op(bam_get_cigar(bam_line)[icig]); + if ( cig==BAM_CHARD_CLIP ) + read_len += bam_cigar_oplen(bam_get_cigar(bam_line)[icig]); + } + return read_len; +} + +void count_mismatches_per_cycle(stats_t *stats, bam1_t *bam_line, int read_len) +{ + int is_fwd = IS_REVERSE(bam_line) ? 0 : 1; + int icig,iread=0,icycle=0; + int iref = bam_line->core.pos - stats->rseq_pos; + uint8_t *read = bam_get_seq(bam_line); + uint8_t *quals = bam_get_qual(bam_line); + uint64_t *mpc_buf = stats->mpc_buf; + for (icig=0; icigcore.n_cigar; icig++) + { + int cig = bam_cigar_op(bam_get_cigar(bam_line)[icig]); + int ncig = bam_cigar_oplen(bam_get_cigar(bam_line)[icig]); + if ( cig==BAM_CINS ) + { + iread += ncig; + icycle += ncig; + continue; + } + if ( cig==BAM_CDEL ) + { + iref += ncig; + continue; + } + if ( cig==BAM_CSOFT_CLIP ) + { + icycle += ncig; + // Soft-clips are present in the sequence, but the position of the read marks a start of the sequence after clipping + // iref += ncig; + iread += ncig; + continue; + } + if ( cig==BAM_CHARD_CLIP ) + { + icycle += ncig; + continue; + } + // Ignore H and N CIGARs. The letter are inserted e.g. by TopHat and often require very large + // chunk of refseq in memory. Not very frequent and not noticable in the stats. + if ( cig==BAM_CREF_SKIP || cig==BAM_CHARD_CLIP || cig==BAM_CPAD ) continue; + if ( cig!=BAM_CMATCH && cig!=BAM_CEQUAL && cig!=BAM_CDIFF ) // not relying on precalculated diffs + error("TODO: cigar %d, %s:%d %s\n", cig,stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1,bam_get_qname(bam_line)); + + if ( ncig+iref > stats->nrseq_buf ) + error("FIXME: %d+%d > %d, %s, %s:%d\n",ncig,iref,stats->nrseq_buf, bam_get_qname(bam_line),stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1); + + int im; + for (im=0; imrseq_buf[iref]; + + // ---------------15 + // =ACMGRSVTWYHKDBN + if ( cread==15 ) + { + int idx = is_fwd ? icycle : read_len-icycle-1; + if ( idx>stats->max_len ) + error("mpc: %d>%d\n",idx,stats->max_len); + idx = idx*stats->nquals; + if ( idx>=stats->nquals*stats->nbases ) + error("FIXME: mpc_buf overflow\n"); + mpc_buf[idx]++; + } + else if ( cref && cread && cref!=cread ) + { + uint8_t qual = quals[iread] + 1; + if ( qual>=stats->nquals ) + error("TODO: quality too high %d>=%d (%s %d %s)\n", qual,stats->nquals, stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1,bam_get_qname(bam_line)); + + int idx = is_fwd ? icycle : read_len-icycle-1; + if ( idx>stats->max_len ) + error("mpc: %d>%d (%s %d %s)\n",idx,stats->max_len,stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1,bam_get_qname(bam_line)); + + idx = idx*stats->nquals + qual; + if ( idx>=stats->nquals*stats->nbases ) + error("FIXME: mpc_buf overflow\n"); + mpc_buf[idx]++; + } + + iref++; + iread++; + icycle++; + } + } +} + +void read_ref_seq(stats_t *stats, int32_t tid, int32_t pos) +{ + int i, fai_ref_len; + char *fai_ref = faidx_fetch_seq(stats->info->fai, stats->info->sam_header->target_name[tid], pos, pos+stats->mrseq_buf-1, &fai_ref_len); + if ( fai_ref_len<0 ) error("Failed to fetch the sequence \"%s\"\n", stats->info->sam_header->target_name[tid]); + + uint8_t *ptr = stats->rseq_buf; + for (i=0; imrseq_buf ) memset(ptr,0, stats->mrseq_buf - fai_ref_len); + stats->nrseq_buf = fai_ref_len; + stats->rseq_pos = pos; + stats->tid = tid; +} + +float fai_gc_content(stats_t *stats, int pos, int len) +{ + uint32_t gc,count,c; + int i = pos - stats->rseq_pos, ito = i + len; + assert( i>=0 ); + + if ( ito > stats->nrseq_buf ) ito = stats->nrseq_buf; + + // Count GC content + gc = count = 0; + for (; irseq_buf[i]; + if ( c==2 || c==4 ) + { + gc++; + count++; + } + else if ( c==1 || c==8 ) + count++; + } + return count ? (float)gc/count : 0; +} + +void realloc_rseq_buffer(stats_t *stats) +{ + int n = stats->nbases*10; + if ( stats->info->gcd_bin_size > n ) n = stats->info->gcd_bin_size; + if ( stats->mrseq_bufrseq_buf = realloc(stats->rseq_buf,sizeof(uint8_t)*n); + stats->mrseq_buf = n; + } +} + +void realloc_gcd_buffer(stats_t *stats, int seq_len) +{ + hts_expand0(gc_depth_t,stats->igcd+1,stats->ngcd,stats->gcd); + realloc_rseq_buffer(stats); +} + +void realloc_buffers(stats_t *stats, int seq_len) +{ + int n = 2*(1 + seq_len - stats->nbases) + stats->nbases; + + stats->quals_1st = realloc(stats->quals_1st, n*stats->nquals*sizeof(uint64_t)); + if ( !stats->quals_1st ) + error("Could not realloc buffers, the sequence too long: %d (%ld)\n", seq_len,n*stats->nquals*sizeof(uint64_t)); + memset(stats->quals_1st + stats->nbases*stats->nquals, 0, (n-stats->nbases)*stats->nquals*sizeof(uint64_t)); + + stats->quals_2nd = realloc(stats->quals_2nd, n*stats->nquals*sizeof(uint64_t)); + if ( !stats->quals_2nd ) + error("Could not realloc buffers, the sequence too long: %d (2x%ld)\n", seq_len,n*stats->nquals*sizeof(uint64_t)); + memset(stats->quals_2nd + stats->nbases*stats->nquals, 0, (n-stats->nbases)*stats->nquals*sizeof(uint64_t)); + + if ( stats->mpc_buf ) + { + stats->mpc_buf = realloc(stats->mpc_buf, n*stats->nquals*sizeof(uint64_t)); + if ( !stats->mpc_buf ) + error("Could not realloc buffers, the sequence too long: %d (%ld)\n", seq_len,n*stats->nquals*sizeof(uint64_t)); + memset(stats->mpc_buf + stats->nbases*stats->nquals, 0, (n-stats->nbases)*stats->nquals*sizeof(uint64_t)); + } + + stats->acgtno_cycles = realloc(stats->acgtno_cycles, n*sizeof(acgtno_count_t)); + if ( !stats->acgtno_cycles ) + error("Could not realloc buffers, the sequence too long: %d (%ld)\n", seq_len, n*sizeof(acgtno_count_t)); + memset(stats->acgtno_cycles + stats->nbases, 0, (n-stats->nbases)*sizeof(acgtno_count_t)); + + stats->read_lengths = realloc(stats->read_lengths, n*sizeof(uint64_t)); + if ( !stats->read_lengths ) + error("Could not realloc buffers, the sequence too long: %d (%ld)\n", seq_len,n*sizeof(uint64_t)); + memset(stats->read_lengths + stats->nbases, 0, (n-stats->nbases)*sizeof(uint64_t)); + + stats->insertions = realloc(stats->insertions, n*sizeof(uint64_t)); + if ( !stats->insertions ) + error("Could not realloc buffers, the sequence too long: %d (%ld)\n", seq_len,n*sizeof(uint64_t)); + memset(stats->insertions + stats->nbases, 0, (n-stats->nbases)*sizeof(uint64_t)); + + stats->deletions = realloc(stats->deletions, n*sizeof(uint64_t)); + if ( !stats->deletions ) + error("Could not realloc buffers, the sequence too long: %d (%ld)\n", seq_len,n*sizeof(uint64_t)); + memset(stats->deletions + stats->nbases, 0, (n-stats->nbases)*sizeof(uint64_t)); + + stats->ins_cycles_1st = realloc(stats->ins_cycles_1st, (n+1)*sizeof(uint64_t)); + if ( !stats->ins_cycles_1st ) + error("Could not realloc buffers, the sequence too long: %d (%ld)\n", seq_len,(n+1)*sizeof(uint64_t)); + memset(stats->ins_cycles_1st + stats->nbases + 1, 0, (n-stats->nbases)*sizeof(uint64_t)); + + stats->ins_cycles_2nd = realloc(stats->ins_cycles_2nd, (n+1)*sizeof(uint64_t)); + if ( !stats->ins_cycles_2nd ) + error("Could not realloc buffers, the sequence too long: %d (%ld)\n", seq_len,(n+1)*sizeof(uint64_t)); + memset(stats->ins_cycles_2nd + stats->nbases + 1, 0, (n-stats->nbases)*sizeof(uint64_t)); + + stats->del_cycles_1st = realloc(stats->del_cycles_1st, (n+1)*sizeof(uint64_t)); + if ( !stats->del_cycles_1st ) + error("Could not realloc buffers, the sequence too long: %d (%ld)\n", seq_len,(n+1)*sizeof(uint64_t)); + memset(stats->del_cycles_1st + stats->nbases + 1, 0, (n-stats->nbases)*sizeof(uint64_t)); + + stats->del_cycles_2nd = realloc(stats->del_cycles_2nd, (n+1)*sizeof(uint64_t)); + if ( !stats->del_cycles_2nd ) + error("Could not realloc buffers, the sequence too long: %d (%ld)\n", seq_len,(n+1)*sizeof(uint64_t)); + memset(stats->del_cycles_2nd + stats->nbases + 1, 0, (n-stats->nbases)*sizeof(uint64_t)); + + stats->nbases = n; + + // Realloc the coverage distribution buffer + int *rbuffer = calloc(sizeof(int),seq_len*5); + n = stats->cov_rbuf.size-stats->cov_rbuf.start; + memcpy(rbuffer,stats->cov_rbuf.buffer+stats->cov_rbuf.start,n); + if ( stats->cov_rbuf.start>1 ) + memcpy(rbuffer+n,stats->cov_rbuf.buffer,stats->cov_rbuf.start); + stats->cov_rbuf.start = 0; + free(stats->cov_rbuf.buffer); + stats->cov_rbuf.buffer = rbuffer; + stats->cov_rbuf.size = seq_len*5; + + realloc_rseq_buffer(stats); +} + +void update_checksum(bam1_t *bam_line, stats_t *stats) +{ + uint8_t *name = (uint8_t*) bam_get_qname(bam_line); + int len = 0; + while ( name[len] ) len++; + stats->checksum.names += crc32(0L, name, len); + + int seq_len = bam_line->core.l_qseq; + if ( !seq_len ) return; + + uint8_t *seq = bam_get_seq(bam_line); + stats->checksum.reads += crc32(0L, seq, (seq_len+1)/2); + + uint8_t *qual = bam_get_qual(bam_line); + stats->checksum.quals += crc32(0L, qual, (seq_len+1)/2); +} + +// These stats should only be calculated for the original reads ignoring +// supplementary artificial reads otherwise we'll accidentally double count +void collect_orig_read_stats(bam1_t *bam_line, stats_t *stats, int* gc_count_out) +{ + int seq_len = bam_line->core.l_qseq; + stats->total_len += seq_len; // This ignores clipping so only count primary + + if ( bam_line->core.flag & BAM_FQCFAIL ) stats->nreads_QCfailed++; + if ( bam_line->core.flag & BAM_FPAIRED ) stats->nreads_paired_tech++; + + // Count GC and ACGT per cycle. Note that cycle is approximate, clipping is ignored + uint8_t *seq = bam_get_seq(bam_line); + int i, read_cycle, gc_count = 0, reverse = IS_REVERSE(bam_line); + for (i=0; iacgtno_cycles[ read_cycle ].a++; + break; + case 2: + stats->acgtno_cycles[ read_cycle ].c++; + gc_count++; + break; + case 4: + stats->acgtno_cycles[ read_cycle ].g++; + gc_count++; + break; + case 8: + stats->acgtno_cycles[ read_cycle ].t++; + break; + case 15: + stats->acgtno_cycles[ read_cycle ].n++; + break; + default: + /* + * count "=" sequences in "other" along + * with MRSVWYHKDB ambiguity codes + */ + stats->acgtno_cycles[ read_cycle ].other++; + break; + } + } + int gc_idx_min = gc_count*(stats->ngc-1)/seq_len; + int gc_idx_max = (gc_count+1)*(stats->ngc-1)/seq_len; + if ( gc_idx_max >= stats->ngc ) gc_idx_max = stats->ngc - 1; + + // Determine which array (1st or 2nd read) will these stats go to, + // trim low quality bases from end the same way BWA does, + // fill GC histogram + uint64_t *quals; + uint8_t *bam_quals = bam_get_qual(bam_line); + if ( bam_line->core.flag&BAM_FREAD2 ) + { + quals = stats->quals_2nd; + stats->nreads_2nd++; + for (i=gc_idx_min; igc_2nd[i]++; + } + else + { + quals = stats->quals_1st; + stats->nreads_1st++; + for (i=gc_idx_min; igc_1st[i]++; + } + if ( stats->info->trim_qual>0 ) + stats->nbases_trimmed += bwa_trim_read(stats->info->trim_qual, bam_quals, seq_len, reverse); + + // Quality histogram and average quality. Clipping is neglected. + for (i=0; i=stats->nquals ) + error("TODO: quality too high %d>=%d (%s %d %s)\n", qual,stats->nquals,stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1,bam_get_qname(bam_line)); + if ( qual>stats->max_qual ) + stats->max_qual = qual; + + quals[ i*stats->nquals+qual ]++; + stats->sum_qual += qual; + } + + // Look at the flags and increment appropriate counters (mapped, paired, etc) + if ( IS_UNMAPPED(bam_line) ) + { + stats->nreads_unmapped++; + } + else + { + stats->nbases_mapped += seq_len; // This ignores clipping so only count primary + + if ( !bam_line->core.qual ) + stats->nreads_mq0++; + if ( !IS_PAIRED_AND_MAPPED(bam_line) ) + stats->nreads_single_mapped++; + else + { + stats->nreads_paired_and_mapped++; + + if (IS_PROPERLYPAIRED(bam_line)) stats->nreads_properly_paired++; + + if ( bam_line->core.tid!=bam_line->core.mtid ) + stats->nreads_anomalous++; + } + } + *gc_count_out = gc_count; +} + +void collect_stats(bam1_t *bam_line, stats_t *stats) +{ + if ( stats->rg_hash ) + { + const uint8_t *rg = bam_aux_get(bam_line, "RG"); + if ( !rg ) return; // certain read groups were requested but this record has none + if ( !khash_str2int_has_key(stats->rg_hash, (const char*)(rg + 1)) ) return; + } + if ( stats->info->flag_require && (bam_line->core.flag & stats->info->flag_require)!=stats->info->flag_require ) + { + stats->nreads_filtered++; + return; + } + if ( stats->info->flag_filter && (bam_line->core.flag & stats->info->flag_filter) ) + { + stats->nreads_filtered++; + return; + } + if ( !is_in_regions(bam_line,stats) ) + return; + if ( stats->info->filter_readlen!=-1 && bam_line->core.l_qseq!=stats->info->filter_readlen ) + return; + + update_checksum(bam_line, stats); + + // Secondary reads don't count for most stats purposes + if ( bam_line->core.flag & BAM_FSECONDARY ) + { + stats->nreads_secondary++; + return; + } + + // If line has no sequence cannot continue + int seq_len = bam_line->core.l_qseq; + if ( !seq_len ) return; + + if ( IS_DUP(bam_line) ) + { + stats->total_len_dup += seq_len; + stats->nreads_dup++; + } + + int read_len = unclipped_length(bam_line); + if ( read_len >= stats->nbases ) + realloc_buffers(stats,read_len); + // Update max_len observed + if ( stats->max_lenmax_len = read_len; + int i; + int gc_count = 0; + + // These stats should only be calculated for the original reads ignoring supplementary artificial reads + // otherwise we'll accidentally double count + if ( IS_ORIGINAL(bam_line) ) + { + stats->read_lengths[read_len]++; + collect_orig_read_stats(bam_line, stats, &gc_count); + } + + // Look at the flags and increment appropriate counters (mapped, paired, etc) + if ( IS_UNMAPPED(bam_line) ) return; + + count_indels(stats, bam_line); + + if ( IS_PAIRED_AND_MAPPED(bam_line) ) + { + // The insert size is tricky, because for long inserts the libraries are + // prepared differently and the pairs point in other direction. BWA does + // not set the paired flag for them. Similar thing is true also for 454 + // reads. Mates mapped to different chromosomes have isize==0. + int32_t isize = bam_line->core.isize; + if ( isize<0 ) isize = -isize; + if ( stats->info->nisize > 0 && isize > stats->info->nisize ) + isize = stats->info->nisize; + if ( isize>0 || bam_line->core.tid==bam_line->core.mtid ) + { + int pos_fst = bam_line->core.mpos - bam_line->core.pos; + int is_fst = IS_READ1(bam_line) ? 1 : -1; + int is_fwd = IS_REVERSE(bam_line) ? -1 : 1; + int is_mfwd = IS_MATE_REVERSE(bam_line) ? -1 : 1; + + if ( is_fwd*is_mfwd>0 ) + stats->isize->inc_other(stats->isize->data, isize); + else if ( is_fst*pos_fst>0 ) + { + if ( is_fst*is_fwd>0 ) + stats->isize->inc_inward(stats->isize->data, isize); + else + stats->isize->inc_outward(stats->isize->data, isize); + } + else if ( is_fst*pos_fst<0 ) + { + if ( is_fst*is_fwd>0 ) + stats->isize->inc_outward(stats->isize->data, isize); + else + stats->isize->inc_inward(stats->isize->data, isize); + } + } + } + + // Number of mismatches + uint8_t *nm = bam_aux_get(bam_line,"NM"); + if (nm) + stats->nmismatches += bam_aux2i(nm); + + // Number of mapped bases from cigar + if ( bam_line->core.n_cigar == 0) + error("FIXME: mapped read with no cigar?\n"); + int readlen=seq_len; + if ( stats->regions ) + { + // Count only on-target bases + int iref = bam_line->core.pos + 1; + for (i=0; icore.n_cigar; i++) + { + int cig = bam_cigar_op(bam_get_cigar(bam_line)[i]); + int ncig = bam_cigar_oplen(bam_get_cigar(bam_line)[i]); + if ( !ncig ) continue; // curiously, this can happen: 0D + if ( cig==BAM_CDEL ) readlen += ncig; + else if ( cig==BAM_CMATCH ) + { + if ( iref < stats->reg_from ) ncig -= stats->reg_from-iref; + else if ( iref+ncig-1 > stats->reg_to ) ncig -= iref+ncig-1 - stats->reg_to; + if ( ncig<0 ) ncig = 0; + stats->nbases_mapped_cigar += ncig; + iref += bam_cigar_oplen(bam_get_cigar(bam_line)[i]); + } + else if ( cig==BAM_CINS ) + { + iref += ncig; + if ( iref>=stats->reg_from && iref<=stats->reg_to ) + stats->nbases_mapped_cigar += ncig; + } + } + } + else + { + // Count the whole read + for (i=0; icore.n_cigar; i++) + { + if ( bam_cigar_op(bam_get_cigar(bam_line)[i])==BAM_CMATCH || bam_cigar_op(bam_get_cigar(bam_line)[i])==BAM_CINS ) + stats->nbases_mapped_cigar += bam_cigar_oplen(bam_get_cigar(bam_line)[i]); + if ( bam_cigar_op(bam_get_cigar(bam_line)[i])==BAM_CDEL ) + readlen += bam_cigar_oplen(bam_get_cigar(bam_line)[i]); + } + } + + if ( stats->tid==bam_line->core.tid && bam_line->core.pospos ) + stats->is_sorted = 0; + stats->pos = bam_line->core.pos; + + if ( stats->is_sorted ) + { + if ( stats->tid==-1 || stats->tid!=bam_line->core.tid ) + round_buffer_flush(stats, -1); + + // Mismatches per cycle and GC-depth graph. For simplicity, reads overlapping GCD bins + // are not splitted which results in up to seq_len-1 overlaps. The default bin size is + // 20kbp, so the effect is negligible. + if ( stats->info->fai ) + { + int inc_ref = 0, inc_gcd = 0; + // First pass or new chromosome + if ( stats->rseq_pos==-1 || stats->tid != bam_line->core.tid ) { inc_ref=1; inc_gcd=1; } + // Read goes beyond the end of the rseq buffer + else if ( stats->rseq_pos+stats->nrseq_buf < bam_line->core.pos+readlen ) { inc_ref=1; inc_gcd=1; } + // Read overlaps the next gcd bin + else if ( stats->gcd_pos+stats->info->gcd_bin_size < bam_line->core.pos+readlen ) + { + inc_gcd = 1; + if ( stats->rseq_pos+stats->nrseq_buf < bam_line->core.pos+stats->info->gcd_bin_size ) inc_ref = 1; + } + if ( inc_gcd ) + { + stats->igcd++; + if ( stats->igcd >= stats->ngcd ) + realloc_gcd_buffer(stats, readlen); + if ( inc_ref ) + read_ref_seq(stats,bam_line->core.tid,bam_line->core.pos); + stats->gcd_pos = bam_line->core.pos; + stats->gcd[ stats->igcd ].gc = fai_gc_content(stats, stats->gcd_pos, stats->info->gcd_bin_size); + } + + count_mismatches_per_cycle(stats,bam_line,read_len); + } + // No reference and first pass, new chromosome or sequence going beyond the end of the gcd bin + else if ( stats->gcd_pos==-1 || stats->tid != bam_line->core.tid || bam_line->core.pos - stats->gcd_pos > stats->info->gcd_bin_size ) + { + // First pass or a new chromosome + stats->tid = bam_line->core.tid; + stats->gcd_pos = bam_line->core.pos; + stats->igcd++; + if ( stats->igcd >= stats->ngcd ) + realloc_gcd_buffer(stats, readlen); + } + stats->gcd[ stats->igcd ].depth++; + // When no reference sequence is given, approximate the GC from the read (much shorter window, but otherwise OK) + if ( !stats->info->fai ) + stats->gcd[ stats->igcd ].gc += (float) gc_count / seq_len; + + // Coverage distribution graph + round_buffer_flush(stats,bam_line->core.pos); + round_buffer_insert_read(&(stats->cov_rbuf),bam_line->core.pos,bam_line->core.pos+seq_len-1); + } +} + +// Sort by GC and depth +#define GCD_t(x) ((gc_depth_t *)x) +static int gcd_cmp(const void *a, const void *b) +{ + if ( GCD_t(a)->gc < GCD_t(b)->gc ) return -1; + if ( GCD_t(a)->gc > GCD_t(b)->gc ) return 1; + if ( GCD_t(a)->depth < GCD_t(b)->depth ) return -1; + if ( GCD_t(a)->depth > GCD_t(b)->depth ) return 1; + return 0; +} +#undef GCD_t + +float gcd_percentile(gc_depth_t *gcd, int N, int p) +{ + float n,d; + int k; + + n = p*(N+1)/100; + k = n; + if ( k<=0 ) + return gcd[0].depth; + if ( k>=N ) + return gcd[N-1].depth; + + d = n - k; + return gcd[k-1].depth + d*(gcd[k].depth - gcd[k-1].depth); +} + +void output_stats(FILE *to, stats_t *stats, int sparse) +{ + // Calculate average insert size and standard deviation (from the main bulk data only) + int isize, ibulk=0; + uint64_t nisize=0, nisize_inward=0, nisize_outward=0, nisize_other=0; + for (isize=0; isizeisize->nitems(stats->isize->data); isize++) + { + // Each pair was counted twice + stats->isize->set_inward(stats->isize->data, isize, stats->isize->inward(stats->isize->data, isize) * 0.5); + stats->isize->set_outward(stats->isize->data, isize, stats->isize->outward(stats->isize->data, isize) * 0.5); + stats->isize->set_other(stats->isize->data, isize, stats->isize->other(stats->isize->data, isize) * 0.5); + + nisize_inward += stats->isize->inward(stats->isize->data, isize); + nisize_outward += stats->isize->outward(stats->isize->data, isize); + nisize_other += stats->isize->other(stats->isize->data, isize); + nisize += stats->isize->inward(stats->isize->data, isize) + stats->isize->outward(stats->isize->data, isize) + stats->isize->other(stats->isize->data, isize); + } + + double bulk=0, avg_isize=0, sd_isize=0; + for (isize=0; isizeisize->nitems(stats->isize->data); isize++) + { + bulk += stats->isize->inward(stats->isize->data, isize) + stats->isize->outward(stats->isize->data, isize) + stats->isize->other(stats->isize->data, isize); + avg_isize += isize * (stats->isize->inward(stats->isize->data, isize) + stats->isize->outward(stats->isize->data, isize) + stats->isize->other(stats->isize->data, isize)); + + if ( bulk/nisize > stats->info->isize_main_bulk ) + { + ibulk = isize+1; + nisize = bulk; + break; + } + } + avg_isize /= nisize ? nisize : 1; + for (isize=1; isizeisize->inward(stats->isize->data, isize) + stats->isize->outward(stats->isize->data, isize) +stats->isize->other(stats->isize->data, isize)) * (isize-avg_isize)*(isize-avg_isize) / nisize; + sd_isize = sqrt(sd_isize); + + + fprintf(to, "# This file was produced by samtools stats (%s+htslib-%s) and can be plotted using plot-bamstats\n", samtools_version(), hts_version()); + if( stats->split_name != NULL ){ + fprintf(to, "# This file contains statistics only for reads with tag: %s=%s\n", stats->info->split_tag, stats->split_name); + } + else{ + fprintf(to, "# This file contains statistics for all reads.\n"); + } + fprintf(to, "# The command line was: %s",stats->info->argv[0]); + int i; + for (i=1; iinfo->argc; i++) + fprintf(to, " %s", stats->info->argv[i]); + fprintf(to, "\n"); + fprintf(to, "# CHK, Checksum\t[2]Read Names\t[3]Sequences\t[4]Qualities\n"); + fprintf(to, "# CHK, CRC32 of reads which passed filtering followed by addition (32bit overflow)\n"); + fprintf(to, "CHK\t%08x\t%08x\t%08x\n", stats->checksum.names,stats->checksum.reads,stats->checksum.quals); + fprintf(to, "# Summary Numbers. Use `grep ^SN | cut -f 2-` to extract this part.\n"); + fprintf(to, "SN\traw total sequences:\t%ld\n", (long)(stats->nreads_filtered+stats->nreads_1st+stats->nreads_2nd)); // not counting excluded seqs (and none of the below) + fprintf(to, "SN\tfiltered sequences:\t%ld\n", (long)stats->nreads_filtered); + fprintf(to, "SN\tsequences:\t%ld\n", (long)(stats->nreads_1st+stats->nreads_2nd)); + fprintf(to, "SN\tis sorted:\t%d\n", stats->is_sorted ? 1 : 0); + fprintf(to, "SN\t1st fragments:\t%ld\n", (long)stats->nreads_1st); + fprintf(to, "SN\tlast fragments:\t%ld\n", (long)stats->nreads_2nd); + fprintf(to, "SN\treads mapped:\t%ld\n", (long)(stats->nreads_paired_and_mapped+stats->nreads_single_mapped)); + fprintf(to, "SN\treads mapped and paired:\t%ld\t# paired-end technology bit set + both mates mapped\n", (long)stats->nreads_paired_and_mapped); + fprintf(to, "SN\treads unmapped:\t%ld\n", (long)stats->nreads_unmapped); + fprintf(to, "SN\treads properly paired:\t%ld\t# proper-pair bit set\n", (long)stats->nreads_properly_paired); + fprintf(to, "SN\treads paired:\t%ld\t# paired-end technology bit set\n", (long)stats->nreads_paired_tech); + fprintf(to, "SN\treads duplicated:\t%ld\t# PCR or optical duplicate bit set\n", (long)stats->nreads_dup); + fprintf(to, "SN\treads MQ0:\t%ld\t# mapped and MQ=0\n", (long)stats->nreads_mq0); + fprintf(to, "SN\treads QC failed:\t%ld\n", (long)stats->nreads_QCfailed); + fprintf(to, "SN\tnon-primary alignments:\t%ld\n", (long)stats->nreads_secondary); + fprintf(to, "SN\ttotal length:\t%ld\t# ignores clipping\n", (long)stats->total_len); + fprintf(to, "SN\tbases mapped:\t%ld\t# ignores clipping\n", (long)stats->nbases_mapped); // the length of the whole read goes here, including soft-clips etc. + fprintf(to, "SN\tbases mapped (cigar):\t%ld\t# more accurate\n", (long)stats->nbases_mapped_cigar); // only matched and inserted bases are counted here + fprintf(to, "SN\tbases trimmed:\t%ld\n", (long)stats->nbases_trimmed); + fprintf(to, "SN\tbases duplicated:\t%ld\n", (long)stats->total_len_dup); + fprintf(to, "SN\tmismatches:\t%ld\t# from NM fields\n", (long)stats->nmismatches); + fprintf(to, "SN\terror rate:\t%e\t# mismatches / bases mapped (cigar)\n", stats->nbases_mapped_cigar ? (float)stats->nmismatches/stats->nbases_mapped_cigar : 0); + float avg_read_length = (stats->nreads_1st+stats->nreads_2nd)?stats->total_len/(stats->nreads_1st+stats->nreads_2nd):0; + fprintf(to, "SN\taverage length:\t%.0f\n", avg_read_length); + fprintf(to, "SN\tmaximum length:\t%d\n", stats->max_len); + fprintf(to, "SN\taverage quality:\t%.1f\n", stats->total_len?stats->sum_qual/stats->total_len:0); + fprintf(to, "SN\tinsert size average:\t%.1f\n", avg_isize); + fprintf(to, "SN\tinsert size standard deviation:\t%.1f\n", sd_isize); + fprintf(to, "SN\tinward oriented pairs:\t%ld\n", (long)nisize_inward); + fprintf(to, "SN\toutward oriented pairs:\t%ld\n", (long)nisize_outward); + fprintf(to, "SN\tpairs with other orientation:\t%ld\n", (long)nisize_other); + fprintf(to, "SN\tpairs on different chromosomes:\t%ld\n", (long)stats->nreads_anomalous/2); + + int ibase,iqual; + if ( stats->max_lennbases ) stats->max_len++; + if ( stats->max_qual+1nquals ) stats->max_qual++; + fprintf(to, "# First Fragment Qualitites. Use `grep ^FFQ | cut -f 2-` to extract this part.\n"); + fprintf(to, "# Columns correspond to qualities and rows to cycles. First column is the cycle number.\n"); + for (ibase=0; ibasemax_len; ibase++) + { + fprintf(to, "FFQ\t%d",ibase+1); + for (iqual=0; iqual<=stats->max_qual; iqual++) + { + fprintf(to, "\t%ld", (long)stats->quals_1st[ibase*stats->nquals+iqual]); + } + fprintf(to, "\n"); + } + fprintf(to, "# Last Fragment Qualitites. Use `grep ^LFQ | cut -f 2-` to extract this part.\n"); + fprintf(to, "# Columns correspond to qualities and rows to cycles. First column is the cycle number.\n"); + for (ibase=0; ibasemax_len; ibase++) + { + fprintf(to, "LFQ\t%d",ibase+1); + for (iqual=0; iqual<=stats->max_qual; iqual++) + { + fprintf(to, "\t%ld", (long)stats->quals_2nd[ibase*stats->nquals+iqual]); + } + fprintf(to, "\n"); + } + if ( stats->mpc_buf ) + { + fprintf(to, "# Mismatches per cycle and quality. Use `grep ^MPC | cut -f 2-` to extract this part.\n"); + fprintf(to, "# Columns correspond to qualities, rows to cycles. First column is the cycle number, second\n"); + fprintf(to, "# is the number of N's and the rest is the number of mismatches\n"); + for (ibase=0; ibasemax_len; ibase++) + { + fprintf(to, "MPC\t%d",ibase+1); + for (iqual=0; iqual<=stats->max_qual; iqual++) + { + fprintf(to, "\t%ld", (long)stats->mpc_buf[ibase*stats->nquals+iqual]); + } + fprintf(to, "\n"); + } + } + fprintf(to, "# GC Content of first fragments. Use `grep ^GCF | cut -f 2-` to extract this part.\n"); + int ibase_prev = 0; + for (ibase=0; ibasengc; ibase++) + { + if ( stats->gc_1st[ibase]==stats->gc_1st[ibase_prev] ) continue; + fprintf(to, "GCF\t%.2f\t%ld\n", (ibase+ibase_prev)*0.5*100./(stats->ngc-1), (long)stats->gc_1st[ibase_prev]); + ibase_prev = ibase; + } + fprintf(to, "# GC Content of last fragments. Use `grep ^GCL | cut -f 2-` to extract this part.\n"); + ibase_prev = 0; + for (ibase=0; ibasengc; ibase++) + { + if ( stats->gc_2nd[ibase]==stats->gc_2nd[ibase_prev] ) continue; + fprintf(to, "GCL\t%.2f\t%ld\n", (ibase+ibase_prev)*0.5*100./(stats->ngc-1), (long)stats->gc_2nd[ibase_prev]); + ibase_prev = ibase; + } + fprintf(to, "# ACGT content per cycle. Use `grep ^GCC | cut -f 2-` to extract this part. The columns are: cycle; A,C,G,T base counts as a percentage of all A/C/G/T bases [%%]; and N and O counts as a percentage of all A/C/G/T bases [%%]\n"); + for (ibase=0; ibasemax_len; ibase++) + { + acgtno_count_t *acgtno_count = &(stats->acgtno_cycles[ibase]); + uint64_t acgt_sum = acgtno_count->a + acgtno_count->c + acgtno_count->g + acgtno_count->t; + if ( ! acgt_sum ) continue; + fprintf(to, "GCC\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", ibase+1, 100.*acgtno_count->a/acgt_sum, 100.*acgtno_count->c/acgt_sum, 100.*acgtno_count->g/acgt_sum, 100.*acgtno_count->t/acgt_sum, 100.*acgtno_count->n/acgt_sum, 100.*acgtno_count->other/acgt_sum); + } + fprintf(to, "# Insert sizes. Use `grep ^IS | cut -f 2-` to extract this part. The columns are: insert size, pairs total, inward oriented pairs, outward oriented pairs, other pairs\n"); + for (isize=0; isizeisize->inward(stats->isize->data, isize)); + long out = (long)(stats->isize->outward(stats->isize->data, isize)); + long other = (long)(stats->isize->other(stats->isize->data, isize)); + if (!sparse || in + out + other > 0) { + fprintf(to, "IS\t%d\t%ld\t%ld\t%ld\t%ld\n", isize, in+out+other, + in , out, other); + } + } + + fprintf(to, "# Read lengths. Use `grep ^RL | cut -f 2-` to extract this part. The columns are: read length, count\n"); + int ilen; + for (ilen=0; ilenmax_len; ilen++) + { + if ( stats->read_lengths[ilen]>0 ) + fprintf(to, "RL\t%d\t%ld\n", ilen, (long)stats->read_lengths[ilen]); + } + + fprintf(to, "# Indel distribution. Use `grep ^ID | cut -f 2-` to extract this part. The columns are: length, number of insertions, number of deletions\n"); + for (ilen=0; ilennindels; ilen++) + { + if ( stats->insertions[ilen]>0 || stats->deletions[ilen]>0 ) + fprintf(to, "ID\t%d\t%ld\t%ld\n", ilen+1, (long)stats->insertions[ilen], (long)stats->deletions[ilen]); + } + + fprintf(to, "# Indels per cycle. Use `grep ^IC | cut -f 2-` to extract this part. The columns are: cycle, number of insertions (fwd), .. (rev) , number of deletions (fwd), .. (rev)\n"); + for (ilen=0; ilen<=stats->nbases; ilen++) + { + // For deletions we print the index of the cycle before the deleted base (1-based) and for insertions + // the index of the cycle of the first inserted base (also 1-based) + if ( stats->ins_cycles_1st[ilen]>0 || stats->ins_cycles_2nd[ilen]>0 || stats->del_cycles_1st[ilen]>0 || stats->del_cycles_2nd[ilen]>0 ) + fprintf(to, "IC\t%d\t%ld\t%ld\t%ld\t%ld\n", ilen+1, (long)stats->ins_cycles_1st[ilen], (long)stats->ins_cycles_2nd[ilen], (long)stats->del_cycles_1st[ilen], (long)stats->del_cycles_2nd[ilen]); + } + + fprintf(to, "# Coverage distribution. Use `grep ^COV | cut -f 2-` to extract this part.\n"); + if ( stats->cov[0] ) + fprintf(to, "COV\t[<%d]\t%d\t%ld\n",stats->info->cov_min,stats->info->cov_min-1, (long)stats->cov[0]); + int icov; + for (icov=1; icovncov-1; icov++) + if ( stats->cov[icov] ) + fprintf(to, "COV\t[%d-%d]\t%d\t%ld\n",stats->info->cov_min + (icov-1)*stats->info->cov_step, stats->info->cov_min + icov*stats->info->cov_step-1,stats->info->cov_min + icov*stats->info->cov_step-1, (long)stats->cov[icov]); + if ( stats->cov[stats->ncov-1] ) + fprintf(to, "COV\t[%d<]\t%d\t%ld\n",stats->info->cov_min + (stats->ncov-2)*stats->info->cov_step-1,stats->info->cov_min + (stats->ncov-2)*stats->info->cov_step-1, (long)stats->cov[stats->ncov-1]); + + // Calculate average GC content, then sort by GC and depth + fprintf(to, "# GC-depth. Use `grep ^GCD | cut -f 2-` to extract this part. The columns are: GC%%, unique sequence percentiles, 10th, 25th, 50th, 75th and 90th depth percentile\n"); + uint32_t igcd; + for (igcd=0; igcdigcd; igcd++) + { + if ( stats->info->fai ) + stats->gcd[igcd].gc = rint(100. * stats->gcd[igcd].gc); + else + if ( stats->gcd[igcd].depth ) + stats->gcd[igcd].gc = rint(100. * stats->gcd[igcd].gc / stats->gcd[igcd].depth); + } + qsort(stats->gcd, stats->igcd+1, sizeof(gc_depth_t), gcd_cmp); + igcd = 0; + while ( igcd < stats->igcd ) + { + // Calculate percentiles (10,25,50,75,90th) for the current GC content and print + uint32_t nbins=0, itmp=igcd; + float gc = stats->gcd[igcd].gc; + while ( itmpigcd && fabs(stats->gcd[itmp].gc-gc)<0.1 ) + { + nbins++; + itmp++; + } + fprintf(to, "GCD\t%.1f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\n", gc, (igcd+nbins+1)*100./(stats->igcd+1), + gcd_percentile(&(stats->gcd[igcd]),nbins,10) *avg_read_length/stats->info->gcd_bin_size, + gcd_percentile(&(stats->gcd[igcd]),nbins,25) *avg_read_length/stats->info->gcd_bin_size, + gcd_percentile(&(stats->gcd[igcd]),nbins,50) *avg_read_length/stats->info->gcd_bin_size, + gcd_percentile(&(stats->gcd[igcd]),nbins,75) *avg_read_length/stats->info->gcd_bin_size, + gcd_percentile(&(stats->gcd[igcd]),nbins,90) *avg_read_length/stats->info->gcd_bin_size + ); + igcd += nbins; + } +} + +void init_regions(stats_t *stats, const char *file) +{ + FILE *fp = fopen(file,"r"); + if ( !fp ) error("%s: %s\n",file,strerror(errno)); + + kstring_t line = { 0, 0, NULL }; + int warned = 0; + int prev_tid=-1, prev_pos=-1; + while (line.l = 0, kgetline(&line, (kgets_func *)fgets, fp) >= 0) + { + if ( line.s[0] == '#' ) continue; + + int i = 0; + while ( i=line.l ) error("Could not parse the file: %s [%s]\n", file, line.s); + line.s[i] = '\0'; + + int tid = bam_name2id(stats->info->sam_header, line.s); + if ( tid < 0 ) + { + if ( !warned ) + fprintf(stderr,"Warning: Some sequences not present in the BAM, e.g. \"%s\". This message is printed only once.\n", line.s); + warned = 1; + continue; + } + + if ( tid >= stats->nregions ) + { + stats->regions = realloc(stats->regions,sizeof(regions_t)*(stats->nregions+100)); + int j; + for (j=stats->nregions; jnregions+100; j++) + { + stats->regions[j].npos = stats->regions[j].mpos = stats->regions[j].cpos = 0; + stats->regions[j].pos = NULL; + } + stats->nregions += 100; + } + int npos = stats->regions[tid].npos; + if ( npos >= stats->regions[tid].mpos ) + { + stats->regions[tid].mpos += 1000; + stats->regions[tid].pos = realloc(stats->regions[tid].pos,sizeof(pos_t)*stats->regions[tid].mpos); + } + + if ( (sscanf(&line.s[i+1],"%u %u",&stats->regions[tid].pos[npos].from,&stats->regions[tid].pos[npos].to))!=2 ) error("Could not parse the region [%s]\n", &line.s[i+1]); + if ( prev_tid==-1 || prev_tid!=tid ) + { + prev_tid = tid; + prev_pos = stats->regions[tid].pos[npos].from; + } + if ( prev_pos>stats->regions[tid].pos[npos].from ) + error("The positions are not in chromosomal order (%s:%d comes after %d)\n", line.s,stats->regions[tid].pos[npos].from,prev_pos); + stats->regions[tid].npos++; + } + free(line.s); + if ( !stats->regions ) error("Unable to map the -t sequences to the BAM sequences.\n"); + fclose(fp); +} + +void destroy_regions(stats_t *stats) +{ + int i; + for (i=0; inregions; i++) + { + if ( !stats->regions[i].mpos ) continue; + free(stats->regions[i].pos); + } + if ( stats->regions ) free(stats->regions); +} + +void reset_regions(stats_t *stats) +{ + int i; + for (i=0; inregions; i++) + stats->regions[i].cpos = 0; +} + +int is_in_regions(bam1_t *bam_line, stats_t *stats) +{ + if ( !stats->regions ) return 1; + + if ( bam_line->core.tid >= stats->nregions || bam_line->core.tid<0 ) return 0; + if ( !stats->is_sorted ) error("The BAM must be sorted in order for -t to work.\n"); + + regions_t *reg = &stats->regions[bam_line->core.tid]; + if ( reg->cpos==reg->npos ) return 0; // done for this chr + + // Find a matching interval or skip this read. No splicing of reads is done, no indels or soft clips considered, + // even small overlap is enough to include the read in the stats. + int i = reg->cpos; + while ( inpos && reg->pos[i].to<=bam_line->core.pos ) i++; + if ( i>=reg->npos ) { reg->cpos = reg->npos; return 0; } + if ( bam_line->core.pos + bam_line->core.l_qseq + 1 < reg->pos[i].from ) return 0; + reg->cpos = i; + stats->reg_from = reg->pos[i].from; + stats->reg_to = reg->pos[i].to; + + return 1; +} + +void init_group_id(stats_t *stats, const char *id) +{ +#if 0 + if ( !stats->sam_header->dict ) + stats->sam_header->dict = sam_header_parse2(stats->sam_header->text); + void *iter = stats->sam_header->dict; + const char *key, *val; + int n = 0; + stats->rg_hash = khash_str2int_init(); + while ( (iter = sam_header2key_val(iter, "RG","ID","SM", &key, &val)) ) + { + if ( !strcmp(id,key) || (val && !strcmp(id,val)) ) + { + khiter_t k = kh_get(kh_rg, stats->rg_hash, key); + if ( k != kh_end(stats->rg_hash) ) + fprintf(stderr, "[init_group_id] The group ID not unique: \"%s\"\n", key); + int ret; + k = kh_put(kh_rg, stats->rg_hash, key, &ret); + kh_value(stats->rg_hash, k) = val; + n++; + } + } + if ( !n ) + error("The sample or read group \"%s\" not present.\n", id); +#else + fprintf(stderr, "Samtools-htslib: init_group_id() header parsing not yet implemented\n"); + abort(); +#endif +} + + +static void error(const char *format, ...) +{ + if ( !format ) + { + printf("About: The program collects statistics from BAM files. The output can be visualized using plot-bamstats.\n"); + printf("Usage: samtools stats [OPTIONS] file.bam\n"); + printf(" samtools stats [OPTIONS] file.bam chr:from-to\n"); + printf("Options:\n"); + printf(" -c, --coverage ,, Coverage distribution min,max,step [1,1000,1]\n"); + printf(" -d, --remove-dups Exclude from statistics reads marked as duplicates\n"); + printf(" -f, --required-flag Required flag, 0 for unset. See also `samtools flags` [0]\n"); + printf(" -F, --filtering-flag Filtering flag, 0 for unset. See also `samtools flags` [0]\n"); + printf(" --GC-depth the size of GC-depth bins (decreasing bin size increases memory requirement) [2e4]\n"); + printf(" -h, --help This help message\n"); + printf(" -i, --insert-size Maximum insert size [8000]\n"); + printf(" -I, --id Include only listed read group or sample name\n"); + printf(" -l, --read-length Include in the statistics only reads with the given read length []\n"); + printf(" -m, --most-inserts Report only the main part of inserts [0.99]\n"); + printf(" -P, --split-prefix Path or string prefix for filepaths output by -S (default is input filename)\n"); + printf(" -q, --trim-quality The BWA trimming parameter [0]\n"); + printf(" -r, --ref-seq Reference sequence (required for GC-depth and mismatches-per-cycle calculation).\n"); + printf(" -s, --sam Ignored (input format is auto-detected).\n"); + printf(" -S, --split Also write statistics to separate files split by tagged field.\n"); + printf(" -t, --target-regions Do stats in these regions only. Tab-delimited file chr,from,to, 1-based, inclusive.\n"); + printf(" -x, --sparse Suppress outputting IS rows where there are no insertions.\n"); + sam_global_opt_help(stdout, "-.--.@"); + printf("\n"); + } + else + { + va_list ap; + va_start(ap, format); + vfprintf(stderr, format, ap); + va_end(ap); + } + exit(1); +} + +void cleanup_stats_info(stats_info_t* info){ + if (info->fai) fai_destroy(info->fai); + sam_close(info->sam); + free(info); +} + +void cleanup_stats(stats_t* stats) +{ + free(stats->cov_rbuf.buffer); free(stats->cov); + free(stats->quals_1st); free(stats->quals_2nd); + free(stats->gc_1st); free(stats->gc_2nd); + stats->isize->isize_free(stats->isize->data); + free(stats->isize); + free(stats->gcd); + free(stats->rseq_buf); + free(stats->mpc_buf); + free(stats->acgtno_cycles); + free(stats->read_lengths); + free(stats->insertions); + free(stats->deletions); + free(stats->ins_cycles_1st); + free(stats->ins_cycles_2nd); + free(stats->del_cycles_1st); + free(stats->del_cycles_2nd); + destroy_regions(stats); + if ( stats->rg_hash ) khash_str2int_destroy(stats->rg_hash); + free(stats->split_name); + free(stats); +} + +void output_split_stats(khash_t(c2stats) *split_hash, char* bam_fname, int sparse) +{ + int i = 0; + kstring_t output_filename = { 0, 0, NULL }; + stats_t *curr_stats = NULL; + for(i = kh_begin(split_hash); i != kh_end(split_hash); ++i){ + if(!kh_exist(split_hash, i)) continue; + curr_stats = kh_value(split_hash, i); + round_buffer_flush(curr_stats, -1); + + output_filename.l = 0; + if (curr_stats->info->split_prefix) + kputs(curr_stats->info->split_prefix, &output_filename); + else + kputs(bam_fname, &output_filename); + kputc('_', &output_filename); + kputs(curr_stats->split_name, &output_filename); + kputs(".bamstat", &output_filename); + + FILE *to = fopen(output_filename.s, "w"); + if(to == NULL){ + error("Could not open '%s' for writing.\n", output_filename.s); + } + output_stats(to, curr_stats, sparse); + fclose(to); + } + + free(output_filename.s); +} + +void destroy_split_stats(khash_t(c2stats) *split_hash) +{ + int i = 0; + stats_t *curr_stats = NULL; + for(i = kh_begin(split_hash); i != kh_end(split_hash); ++i){ + if(!kh_exist(split_hash, i)) continue; + curr_stats = kh_value(split_hash, i); + cleanup_stats(curr_stats); + } + kh_destroy(c2stats, split_hash); +} + +stats_info_t* stats_info_init(int argc, char *argv[]) +{ + stats_info_t* info = calloc(1, sizeof(stats_info_t)); + info->nisize = 8000; + info->isize_main_bulk = 0.99; // There are always outliers at the far end + info->gcd_bin_size = 20e3; + info->cov_min = 1; + info->cov_max = 1000; + info->cov_step = 1; + info->filter_readlen = -1; + info->argc = argc; + info->argv = argv; + + return info; +} + +int init_stat_info_fname(stats_info_t* info, const char* bam_fname, const htsFormat* in_fmt) +{ + // .. bam + samFile* sam; + if ((sam = sam_open_format(bam_fname, "r", in_fmt)) == 0) { + print_error_errno("stats", "failed to open \"%s\"", bam_fname); + return 1; + } + info->sam = sam; + info->sam_header = sam_hdr_read(sam); + if (info->sam_header == NULL) { + print_error("stats", "failed to read header for \"%s\"", bam_fname); + return 1; + } + return 0; +} + +stats_t* stats_init() +{ + stats_t *stats = calloc(1,sizeof(stats_t)); + stats->ngc = 200; + stats->nquals = 256; + stats->nbases = 300; + stats->max_len = 30; + stats->max_qual = 40; + stats->rseq_pos = -1; + stats->tid = stats->gcd_pos = -1; + stats->igcd = 0; + stats->is_sorted = 1; + stats->nindels = stats->nbases; + stats->split_name = NULL; + + return stats; +} + +static void init_stat_structs(stats_t* stats, stats_info_t* info, const char* group_id, const char* targets) +{ + // Give stats_t a pointer to the info struct + // This saves us having to pass the stats_info_t to every function + stats->info = info; + + // Init structures + // .. coverage bins and round buffer + if ( info->cov_step > info->cov_max - info->cov_min + 1 ) + { + info->cov_step = info->cov_max - info->cov_min; + if ( info->cov_step <= 0 ) + info->cov_step = 1; + } + stats->ncov = 3 + (info->cov_max-info->cov_min) / info->cov_step; + info->cov_max = info->cov_min + ((info->cov_max-info->cov_min)/info->cov_step +1)*info->cov_step - 1; + stats->cov = calloc(sizeof(uint64_t),stats->ncov); + stats->cov_rbuf.size = stats->nbases*5; + stats->cov_rbuf.buffer = calloc(sizeof(int32_t),stats->cov_rbuf.size); + + if ( group_id ) init_group_id(stats, group_id); + // .. arrays + stats->quals_1st = calloc(stats->nquals*stats->nbases,sizeof(uint64_t)); + stats->quals_2nd = calloc(stats->nquals*stats->nbases,sizeof(uint64_t)); + stats->gc_1st = calloc(stats->ngc,sizeof(uint64_t)); + stats->gc_2nd = calloc(stats->ngc,sizeof(uint64_t)); + stats->isize = init_isize_t(info->nisize ?info->nisize+1 :0); + stats->gcd = calloc(stats->ngcd,sizeof(gc_depth_t)); + stats->mpc_buf = info->fai ? calloc(stats->nquals*stats->nbases,sizeof(uint64_t)) : NULL; + stats->acgtno_cycles = calloc(stats->nbases,sizeof(acgtno_count_t)); + stats->read_lengths = calloc(stats->nbases,sizeof(uint64_t)); + stats->insertions = calloc(stats->nbases,sizeof(uint64_t)); + stats->deletions = calloc(stats->nbases,sizeof(uint64_t)); + stats->ins_cycles_1st = calloc(stats->nbases+1,sizeof(uint64_t)); + stats->ins_cycles_2nd = calloc(stats->nbases+1,sizeof(uint64_t)); + stats->del_cycles_1st = calloc(stats->nbases+1,sizeof(uint64_t)); + stats->del_cycles_2nd = calloc(stats->nbases+1,sizeof(uint64_t)); + realloc_rseq_buffer(stats); + if ( targets ) + init_regions(stats, targets); +} + +static stats_t* get_curr_split_stats(bam1_t* bam_line, khash_t(c2stats)* split_hash, stats_info_t* info, char* targets) +{ + stats_t *curr_stats = NULL; + const uint8_t *tag_val = bam_aux_get(bam_line, info->split_tag); + if(tag_val == 0){ + error("Tag '%s' not found in bam_line.\n", info->split_tag); + } + char* split_name = strdup(bam_aux2Z(tag_val)); + + // New stats object, under split + khiter_t k = kh_get(c2stats, split_hash, split_name); + if(k == kh_end(split_hash)){ + curr_stats = stats_init(); // mallocs new instance + init_stat_structs(curr_stats, info, NULL, targets); + curr_stats->split_name = split_name; + + // Record index in hash + int ret = 0; + khiter_t iter = kh_put(c2stats, split_hash, split_name, &ret); + if( ret < 0 ){ + error("Failed to insert key '%s' into split_hash", split_name); + } + kh_val(split_hash, iter) = curr_stats; // store pointer to stats + } + else{ + curr_stats = kh_value(split_hash, k); + free(split_name); // don't need to hold on to this if it wasn't new + } + return curr_stats; +} + +int main_stats(int argc, char *argv[]) +{ + char *targets = NULL; + char *bam_fname = NULL; + char *group_id = NULL; + int sparse = 0; + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + + stats_info_t *info = stats_info_init(argc, argv); + + static const struct option loptions[] = + { + SAM_OPT_GLOBAL_OPTIONS('-', 0, '-', '-', 0, '@'), + {"help", no_argument, NULL, 'h'}, + {"remove-dups", no_argument, NULL, 'd'}, + {"sam", no_argument, NULL, 's'}, + {"ref-seq", required_argument, NULL, 'r'}, + {"coverage", required_argument, NULL, 'c'}, + {"read-length", required_argument, NULL, 'l'}, + {"insert-size", required_argument, NULL, 'i'}, + {"most-inserts", required_argument, NULL, 'm'}, + {"trim-quality", required_argument, NULL, 'q'}, + {"target-regions", required_argument, NULL, 't'}, + {"required-flag", required_argument, NULL, 'f'}, + {"filtering-flag", required_argument, NULL, 'F'}, + {"id", required_argument, NULL, 'I'}, + {"GC-depth", required_argument, NULL, 1}, + {"sparse", no_argument, NULL, 'x'}, + {"split", required_argument, NULL, 'S'}, + {"split-prefix", required_argument, NULL, 'P'}, + {NULL, 0, NULL, 0} + }; + int opt; + + while ( (opt=getopt_long(argc,argv,"?hdsxr:c:l:i:t:m:q:f:F:I:1:S:P:@:",loptions,NULL))>0 ) + { + switch (opt) + { + case 'f': info->flag_require = bam_str2flag(optarg); break; + case 'F': info->flag_filter = bam_str2flag(optarg); break; + case 'd': info->flag_filter |= BAM_FDUP; break; + case 's': break; + case 'r': info->fai = fai_load(optarg); + if (info->fai==NULL) + error("Could not load faidx: %s\n", optarg); + break; + case 1 : info->gcd_bin_size = atof(optarg); break; + case 'c': if ( sscanf(optarg,"%d,%d,%d",&info->cov_min,&info->cov_max,&info->cov_step)!= 3 ) + error("Unable to parse -c %s\n", optarg); + break; + case 'l': info->filter_readlen = atoi(optarg); break; + case 'i': info->nisize = atoi(optarg); break; + case 'm': info->isize_main_bulk = atof(optarg); break; + case 'q': info->trim_qual = atoi(optarg); break; + case 't': targets = optarg; break; + case 'I': group_id = optarg; break; + case 'x': sparse = 1; break; + case 'S': info->split_tag = optarg; break; + case 'P': info->split_prefix = optarg; break; + case '?': + case 'h': error(NULL); + default: + if (parse_sam_global_opt(opt, optarg, loptions, &ga) != 0) + error("Unknown argument: %s\n", optarg); + break; + } + } + if ( optind 0) + hts_set_threads(info->sam, ga.nthreads); + + stats_t *all_stats = stats_init(); + stats_t *curr_stats = NULL; + init_stat_structs(all_stats, info, group_id, targets); + // Init + // .. hash + khash_t(c2stats)* split_hash = kh_init(c2stats); + + // Collect statistics + bam1_t *bam_line = bam_init1(); + if ( optindsam,bam_fname); + if (bam_idx == 0) + error("Random alignment retrieval only works for indexed BAM files.\n"); + + int i; + for (i=optind; isam_header, argv[i]); + while (sam_itr_next(info->sam, iter, bam_line) >= 0) { + if (info->split_tag) { + curr_stats = get_curr_split_stats(bam_line, split_hash, info, targets); + collect_stats(bam_line, curr_stats); + } + collect_stats(bam_line, all_stats); + } + reset_regions(all_stats); + bam_itr_destroy(iter); + } + hts_idx_destroy(bam_idx); + } + else + { + // Stream through the entire BAM ignoring off-target regions if -t is given + int ret; + while ((ret = sam_read1(info->sam, info->sam_header, bam_line)) >= 0) { + if (info->split_tag) { + curr_stats = get_curr_split_stats(bam_line, split_hash, info, targets); + collect_stats(bam_line, curr_stats); + } + collect_stats(bam_line, all_stats); + } + + if (ret < -1) { + fprintf(stderr, "Failure while decoding file\n"); + return 1; + } + } + + round_buffer_flush(all_stats, -1); + output_stats(stdout, all_stats, sparse); + if (info->split_tag) + output_split_stats(split_hash, bam_fname, sparse); + + bam_destroy1(bam_line); + bam_hdr_destroy(info->sam_header); + sam_global_args_free(&ga); + + cleanup_stats(all_stats); + cleanup_stats_info(info); + destroy_split_stats(split_hash); + + return 0; +} diff --git a/samtools/stats.c.pysam.c b/samtools/stats.c.pysam.c new file mode 100644 index 0000000..1c94a10 --- /dev/null +++ b/samtools/stats.c.pysam.c @@ -0,0 +1,1734 @@ +#include "samtools.pysam.h" + +/* stats.c -- This is the former bamcheck integrated into samtools/htslib. + + Copyright (C) 2012-2015 Genome Research Ltd. + + Author: Petr Danecek + Author: Sam Nicholls + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +/* Assumptions, approximations and other issues: + - GC-depth graph does not split reads, the starting position determines which bin is incremented. + There are small overlaps between bins (max readlen-1). However, the bins are big (20k). + - coverage distribution ignores softclips and deletions + - some stats require sorted BAMs + - GC content graph can have an untidy, step-like pattern when BAM contains multiple read lengths. + - 'bases mapped' (stats->nbases_mapped) is calculated from read lengths given by BAM (core.l_qseq) + - With the -t option, the whole reads are used. Except for the number of mapped bases (cigar) + counts, no splicing is done, no indels or soft clips are considered, even small overlap is + good enough to include the read in the stats. + - GC content of reads not calculated for "=" sequences + +*/ + +#include + +#include // for isatty() +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // for crc32 +#include +#include +#include +#include "sam_header.h" +#include +#include "samtools.h" +#include +#include +#include "stats_isize.h" +#include "sam_opts.h" + +#define BWA_MIN_RDLEN 35 +// From the spec +// If 0x4 is set, no assumptions can be made about RNAME, POS, CIGAR, MAPQ, bits 0x2, 0x10, 0x100 and 0x800, and the bit 0x20 of the previous read in the template. +#define IS_PAIRED_AND_MAPPED(bam) (((bam)->core.flag&BAM_FPAIRED) && !((bam)->core.flag&BAM_FUNMAP) && !((bam)->core.flag&BAM_FMUNMAP)) +#define IS_PROPERLYPAIRED(bam) (((bam)->core.flag&(BAM_FPAIRED|BAM_FPROPER_PAIR)) == (BAM_FPAIRED|BAM_FPROPER_PAIR) && !((bam)->core.flag&BAM_FUNMAP)) +#define IS_UNMAPPED(bam) ((bam)->core.flag&BAM_FUNMAP) +#define IS_REVERSE(bam) ((bam)->core.flag&BAM_FREVERSE) +#define IS_MATE_REVERSE(bam) ((bam)->core.flag&BAM_FMREVERSE) +#define IS_READ1(bam) ((bam)->core.flag&BAM_FREAD1) +#define IS_READ2(bam) ((bam)->core.flag&BAM_FREAD2) +#define IS_DUP(bam) ((bam)->core.flag&BAM_FDUP) +#define IS_ORIGINAL(bam) (((bam)->core.flag&(BAM_FSECONDARY|BAM_FSUPPLEMENTARY)) == 0) + +// The GC-depth graph works as follows: split the reference sequence into +// segments and calculate GC content and depth in each bin. Then sort +// these segments by their GC and plot the depth distribution by means +// of 10th, 25th, etc. depth percentiles. +typedef struct +{ + float gc; + uint32_t depth; +} +gc_depth_t; + +// For coverage distribution, a simple pileup +typedef struct +{ + int64_t pos; + int size, start; + int *buffer; +} +round_buffer_t; + +typedef struct { uint32_t from, to; } pos_t; +typedef struct +{ + int npos,mpos,cpos; + pos_t *pos; +} +regions_t; + +typedef struct +{ + uint64_t a; + uint64_t c; + uint64_t g; + uint64_t t; + uint64_t n; + uint64_t other; +} +acgtno_count_t; + +typedef struct +{ + // Auxiliary data + int flag_require, flag_filter; + faidx_t *fai; // Reference sequence for GC-depth graph + int argc; // Command line arguments to be printed on the output + char **argv; + int gcd_bin_size; // The size of GC-depth bin + int nisize; // The maximum insert size that the allocated array can hold - 0 indicates no limit + int trim_qual; // bwa trim quality + float isize_main_bulk; // There are always some unrealistically big insert sizes, report only the main part + int cov_min,cov_max,cov_step; // Minimum, maximum coverage and size of the coverage bins + samFile* sam; + bam_hdr_t* sam_header; + + // Filters + int filter_readlen; + + // Misc + char *split_tag; // Tag on which to perform stats splitting + char *split_prefix; // Path or string prefix for filenames created when splitting +} +stats_info_t; + +typedef struct +{ + // Dimensions of the quality histogram holder (quals_1st,quals_2nd), GC content holder (gc_1st,gc_2nd), + // insert size histogram holder + int nquals; // The number of quality bins + int nbases; // The maximum sequence length the allocated array can hold + int ngc; // The size of gc_1st and gc_2nd + int nindels; // The maximum indel length for indel distribution + + // Arrays for the histogram data + uint64_t *quals_1st, *quals_2nd; + uint64_t *gc_1st, *gc_2nd; + acgtno_count_t *acgtno_cycles; + uint64_t *read_lengths; + uint64_t *insertions, *deletions; + uint64_t *ins_cycles_1st, *ins_cycles_2nd, *del_cycles_1st, *del_cycles_2nd; + isize_t *isize; + + // The extremes encountered + int max_len; // Maximum read length + int max_qual; // Maximum quality + int is_sorted; + + // Summary numbers + uint64_t total_len; + uint64_t total_len_dup; + uint64_t nreads_1st; + uint64_t nreads_2nd; + uint64_t nreads_filtered; + uint64_t nreads_dup; + uint64_t nreads_unmapped; + uint64_t nreads_single_mapped; + uint64_t nreads_paired_and_mapped; + uint64_t nreads_properly_paired; + uint64_t nreads_paired_tech; + uint64_t nreads_anomalous; + uint64_t nreads_mq0; + uint64_t nbases_mapped; + uint64_t nbases_mapped_cigar; + uint64_t nbases_trimmed; // bwa trimmed bases + uint64_t nmismatches; + uint64_t nreads_QCfailed, nreads_secondary; + struct { + uint32_t names, reads, quals; + } checksum; + + // GC-depth related data + uint32_t ngcd, igcd; // The maximum number of GC depth bins and index of the current bin + gc_depth_t *gcd; // The GC-depth bins holder + int32_t tid, gcd_pos; // Position of the current bin + int32_t pos; // Position of the last read + + // Coverage distribution related data + int ncov; // The number of coverage bins + uint64_t *cov; // The coverage frequencies + round_buffer_t cov_rbuf; // Pileup round buffer + + // Mismatches by read cycle + uint8_t *rseq_buf; // A buffer for reference sequence to check the mismatches against + int mrseq_buf; // The size of the buffer + int32_t rseq_pos; // The coordinate of the first base in the buffer + int32_t nrseq_buf; // The used part of the buffer + uint64_t *mpc_buf; // Mismatches per cycle + + // Target regions + int nregions, reg_from,reg_to; + regions_t *regions; + + // Auxiliary data + double sum_qual; // For calculating average quality value + void *rg_hash; // Read groups to include, the array is null-terminated + + // Split + char* split_name; + + stats_info_t* info; // Pointer to options and settings struct + +} +stats_t; +KHASH_MAP_INIT_STR(c2stats, stats_t*) + +static void error(const char *format, ...); +int is_in_regions(bam1_t *bam_line, stats_t *stats); +void realloc_buffers(stats_t *stats, int seq_len); + + +// Coverage distribution methods +static inline int coverage_idx(int min, int max, int n, int step, int depth) +{ + if ( depth < min ) + return 0; + + if ( depth > max ) + return n-1; + + return 1 + (depth - min) / step; +} + +static inline int round_buffer_lidx2ridx(int offset, int size, int64_t refpos, int64_t pos) +{ + return (offset + (pos-refpos) % size) % size; +} + +void round_buffer_flush(stats_t *stats, int64_t pos) +{ + int ibuf,idp; + + if ( pos==stats->cov_rbuf.pos ) + return; + + int64_t new_pos = pos; + if ( pos==-1 || pos - stats->cov_rbuf.pos >= stats->cov_rbuf.size ) + { + // Flush the whole buffer, but in sequential order, + pos = stats->cov_rbuf.pos + stats->cov_rbuf.size - 1; + } + + if ( pos < stats->cov_rbuf.pos ) + error("Expected coordinates in ascending order, got %ld after %ld\n", pos,stats->cov_rbuf.pos); + + int ifrom = stats->cov_rbuf.start; + int ito = round_buffer_lidx2ridx(stats->cov_rbuf.start,stats->cov_rbuf.size,stats->cov_rbuf.pos,pos-1); + if ( ifrom>ito ) + { + for (ibuf=ifrom; ibufcov_rbuf.size; ibuf++) + { + if ( !stats->cov_rbuf.buffer[ibuf] ) + continue; + idp = coverage_idx(stats->info->cov_min,stats->info->cov_max,stats->ncov,stats->info->cov_step,stats->cov_rbuf.buffer[ibuf]); + stats->cov[idp]++; + stats->cov_rbuf.buffer[ibuf] = 0; + } + ifrom = 0; + } + for (ibuf=ifrom; ibuf<=ito; ibuf++) + { + if ( !stats->cov_rbuf.buffer[ibuf] ) + continue; + idp = coverage_idx(stats->info->cov_min,stats->info->cov_max,stats->ncov,stats->info->cov_step,stats->cov_rbuf.buffer[ibuf]); + stats->cov[idp]++; + stats->cov_rbuf.buffer[ibuf] = 0; + } + stats->cov_rbuf.start = (new_pos==-1) ? 0 : round_buffer_lidx2ridx(stats->cov_rbuf.start,stats->cov_rbuf.size,stats->cov_rbuf.pos,pos); + stats->cov_rbuf.pos = new_pos; +} + +void round_buffer_insert_read(round_buffer_t *rbuf, int64_t from, int64_t to) +{ + if ( to-from >= rbuf->size ) + error("The read length too big (%d), please increase the buffer length (currently %d)\n", to-from+1,rbuf->size); + if ( from < rbuf->pos ) + error("The reads are not sorted (%ld comes after %ld).\n", from,rbuf->pos); + + int ifrom,ito,ibuf; + ifrom = round_buffer_lidx2ridx(rbuf->start,rbuf->size,rbuf->pos,from); + ito = round_buffer_lidx2ridx(rbuf->start,rbuf->size,rbuf->pos,to); + if ( ifrom>ito ) + { + for (ibuf=ifrom; ibufsize; ibuf++) + rbuf->buffer[ibuf]++; + ifrom = 0; + } + for (ibuf=ifrom; ibuf<=ito; ibuf++) + rbuf->buffer[ibuf]++; +} + +// Calculate the number of bases in the read trimmed by BWA +int bwa_trim_read(int trim_qual, uint8_t *quals, int len, int reverse) +{ + if ( lenmax_sum ) + { + max_sum = sum; + // This is the correct way, but bwa clips from some reason one base less + // max_l = l+1; + max_l = l; + } + } + return max_l; +} + + +void count_indels(stats_t *stats,bam1_t *bam_line) +{ + int is_fwd = IS_REVERSE(bam_line) ? 0 : 1; + int is_1st = IS_READ1(bam_line) ? 1 : 0; + int icig; + int icycle = 0; + int read_len = bam_line->core.l_qseq; + for (icig=0; icigcore.n_cigar; icig++) + { + int cig = bam_cigar_op(bam_get_cigar(bam_line)[icig]); + int ncig = bam_cigar_oplen(bam_get_cigar(bam_line)[icig]); + if ( !ncig ) continue; // curiously, this can happen: 0D + + if ( cig==BAM_CINS ) + { + int idx = is_fwd ? icycle : read_len-icycle-ncig; + if ( idx<0 ) + error("FIXME: read_len=%d vs icycle=%d\n", read_len,icycle); + if ( idx >= stats->nbases || idx<0 ) error("FIXME: %d vs %d, %s:%d %s\n", idx,stats->nbases, stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1,bam_get_qname(bam_line)); + if ( is_1st ) + stats->ins_cycles_1st[idx]++; + else + stats->ins_cycles_2nd[idx]++; + icycle += ncig; + if ( ncig<=stats->nindels ) + stats->insertions[ncig-1]++; + continue; + } + if ( cig==BAM_CDEL ) + { + int idx = is_fwd ? icycle-1 : read_len-icycle-1; + if ( idx<0 ) continue; // discard meaningless deletions + if ( idx >= stats->nbases ) error("FIXME: %d vs %d\n", idx,stats->nbases); + if ( is_1st ) + stats->del_cycles_1st[idx]++; + else + stats->del_cycles_2nd[idx]++; + if ( ncig<=stats->nindels ) + stats->deletions[ncig-1]++; + continue; + } + if ( cig!=BAM_CREF_SKIP && cig!=BAM_CHARD_CLIP && cig!=BAM_CPAD ) + icycle += ncig; + } +} + +int unclipped_length(bam1_t *bam_line) +{ + int icig, read_len = bam_line->core.l_qseq; + for (icig=0; icigcore.n_cigar; icig++) + { + int cig = bam_cigar_op(bam_get_cigar(bam_line)[icig]); + if ( cig==BAM_CHARD_CLIP ) + read_len += bam_cigar_oplen(bam_get_cigar(bam_line)[icig]); + } + return read_len; +} + +void count_mismatches_per_cycle(stats_t *stats, bam1_t *bam_line, int read_len) +{ + int is_fwd = IS_REVERSE(bam_line) ? 0 : 1; + int icig,iread=0,icycle=0; + int iref = bam_line->core.pos - stats->rseq_pos; + uint8_t *read = bam_get_seq(bam_line); + uint8_t *quals = bam_get_qual(bam_line); + uint64_t *mpc_buf = stats->mpc_buf; + for (icig=0; icigcore.n_cigar; icig++) + { + int cig = bam_cigar_op(bam_get_cigar(bam_line)[icig]); + int ncig = bam_cigar_oplen(bam_get_cigar(bam_line)[icig]); + if ( cig==BAM_CINS ) + { + iread += ncig; + icycle += ncig; + continue; + } + if ( cig==BAM_CDEL ) + { + iref += ncig; + continue; + } + if ( cig==BAM_CSOFT_CLIP ) + { + icycle += ncig; + // Soft-clips are present in the sequence, but the position of the read marks a start of the sequence after clipping + // iref += ncig; + iread += ncig; + continue; + } + if ( cig==BAM_CHARD_CLIP ) + { + icycle += ncig; + continue; + } + // Ignore H and N CIGARs. The letter are inserted e.g. by TopHat and often require very large + // chunk of refseq in memory. Not very frequent and not noticable in the stats. + if ( cig==BAM_CREF_SKIP || cig==BAM_CHARD_CLIP || cig==BAM_CPAD ) continue; + if ( cig!=BAM_CMATCH && cig!=BAM_CEQUAL && cig!=BAM_CDIFF ) // not relying on precalculated diffs + error("TODO: cigar %d, %s:%d %s\n", cig,stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1,bam_get_qname(bam_line)); + + if ( ncig+iref > stats->nrseq_buf ) + error("FIXME: %d+%d > %d, %s, %s:%d\n",ncig,iref,stats->nrseq_buf, bam_get_qname(bam_line),stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1); + + int im; + for (im=0; imrseq_buf[iref]; + + // ---------------15 + // =ACMGRSVTWYHKDBN + if ( cread==15 ) + { + int idx = is_fwd ? icycle : read_len-icycle-1; + if ( idx>stats->max_len ) + error("mpc: %d>%d\n",idx,stats->max_len); + idx = idx*stats->nquals; + if ( idx>=stats->nquals*stats->nbases ) + error("FIXME: mpc_buf overflow\n"); + mpc_buf[idx]++; + } + else if ( cref && cread && cref!=cread ) + { + uint8_t qual = quals[iread] + 1; + if ( qual>=stats->nquals ) + error("TODO: quality too high %d>=%d (%s %d %s)\n", qual,stats->nquals, stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1,bam_get_qname(bam_line)); + + int idx = is_fwd ? icycle : read_len-icycle-1; + if ( idx>stats->max_len ) + error("mpc: %d>%d (%s %d %s)\n",idx,stats->max_len,stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1,bam_get_qname(bam_line)); + + idx = idx*stats->nquals + qual; + if ( idx>=stats->nquals*stats->nbases ) + error("FIXME: mpc_buf overflow\n"); + mpc_buf[idx]++; + } + + iref++; + iread++; + icycle++; + } + } +} + +void read_ref_seq(stats_t *stats, int32_t tid, int32_t pos) +{ + int i, fai_ref_len; + char *fai_ref = faidx_fetch_seq(stats->info->fai, stats->info->sam_header->target_name[tid], pos, pos+stats->mrseq_buf-1, &fai_ref_len); + if ( fai_ref_len<0 ) error("Failed to fetch the sequence \"%s\"\n", stats->info->sam_header->target_name[tid]); + + uint8_t *ptr = stats->rseq_buf; + for (i=0; imrseq_buf ) memset(ptr,0, stats->mrseq_buf - fai_ref_len); + stats->nrseq_buf = fai_ref_len; + stats->rseq_pos = pos; + stats->tid = tid; +} + +float fai_gc_content(stats_t *stats, int pos, int len) +{ + uint32_t gc,count,c; + int i = pos - stats->rseq_pos, ito = i + len; + assert( i>=0 ); + + if ( ito > stats->nrseq_buf ) ito = stats->nrseq_buf; + + // Count GC content + gc = count = 0; + for (; irseq_buf[i]; + if ( c==2 || c==4 ) + { + gc++; + count++; + } + else if ( c==1 || c==8 ) + count++; + } + return count ? (float)gc/count : 0; +} + +void realloc_rseq_buffer(stats_t *stats) +{ + int n = stats->nbases*10; + if ( stats->info->gcd_bin_size > n ) n = stats->info->gcd_bin_size; + if ( stats->mrseq_bufrseq_buf = realloc(stats->rseq_buf,sizeof(uint8_t)*n); + stats->mrseq_buf = n; + } +} + +void realloc_gcd_buffer(stats_t *stats, int seq_len) +{ + hts_expand0(gc_depth_t,stats->igcd+1,stats->ngcd,stats->gcd); + realloc_rseq_buffer(stats); +} + +void realloc_buffers(stats_t *stats, int seq_len) +{ + int n = 2*(1 + seq_len - stats->nbases) + stats->nbases; + + stats->quals_1st = realloc(stats->quals_1st, n*stats->nquals*sizeof(uint64_t)); + if ( !stats->quals_1st ) + error("Could not realloc buffers, the sequence too long: %d (%ld)\n", seq_len,n*stats->nquals*sizeof(uint64_t)); + memset(stats->quals_1st + stats->nbases*stats->nquals, 0, (n-stats->nbases)*stats->nquals*sizeof(uint64_t)); + + stats->quals_2nd = realloc(stats->quals_2nd, n*stats->nquals*sizeof(uint64_t)); + if ( !stats->quals_2nd ) + error("Could not realloc buffers, the sequence too long: %d (2x%ld)\n", seq_len,n*stats->nquals*sizeof(uint64_t)); + memset(stats->quals_2nd + stats->nbases*stats->nquals, 0, (n-stats->nbases)*stats->nquals*sizeof(uint64_t)); + + if ( stats->mpc_buf ) + { + stats->mpc_buf = realloc(stats->mpc_buf, n*stats->nquals*sizeof(uint64_t)); + if ( !stats->mpc_buf ) + error("Could not realloc buffers, the sequence too long: %d (%ld)\n", seq_len,n*stats->nquals*sizeof(uint64_t)); + memset(stats->mpc_buf + stats->nbases*stats->nquals, 0, (n-stats->nbases)*stats->nquals*sizeof(uint64_t)); + } + + stats->acgtno_cycles = realloc(stats->acgtno_cycles, n*sizeof(acgtno_count_t)); + if ( !stats->acgtno_cycles ) + error("Could not realloc buffers, the sequence too long: %d (%ld)\n", seq_len, n*sizeof(acgtno_count_t)); + memset(stats->acgtno_cycles + stats->nbases, 0, (n-stats->nbases)*sizeof(acgtno_count_t)); + + stats->read_lengths = realloc(stats->read_lengths, n*sizeof(uint64_t)); + if ( !stats->read_lengths ) + error("Could not realloc buffers, the sequence too long: %d (%ld)\n", seq_len,n*sizeof(uint64_t)); + memset(stats->read_lengths + stats->nbases, 0, (n-stats->nbases)*sizeof(uint64_t)); + + stats->insertions = realloc(stats->insertions, n*sizeof(uint64_t)); + if ( !stats->insertions ) + error("Could not realloc buffers, the sequence too long: %d (%ld)\n", seq_len,n*sizeof(uint64_t)); + memset(stats->insertions + stats->nbases, 0, (n-stats->nbases)*sizeof(uint64_t)); + + stats->deletions = realloc(stats->deletions, n*sizeof(uint64_t)); + if ( !stats->deletions ) + error("Could not realloc buffers, the sequence too long: %d (%ld)\n", seq_len,n*sizeof(uint64_t)); + memset(stats->deletions + stats->nbases, 0, (n-stats->nbases)*sizeof(uint64_t)); + + stats->ins_cycles_1st = realloc(stats->ins_cycles_1st, (n+1)*sizeof(uint64_t)); + if ( !stats->ins_cycles_1st ) + error("Could not realloc buffers, the sequence too long: %d (%ld)\n", seq_len,(n+1)*sizeof(uint64_t)); + memset(stats->ins_cycles_1st + stats->nbases + 1, 0, (n-stats->nbases)*sizeof(uint64_t)); + + stats->ins_cycles_2nd = realloc(stats->ins_cycles_2nd, (n+1)*sizeof(uint64_t)); + if ( !stats->ins_cycles_2nd ) + error("Could not realloc buffers, the sequence too long: %d (%ld)\n", seq_len,(n+1)*sizeof(uint64_t)); + memset(stats->ins_cycles_2nd + stats->nbases + 1, 0, (n-stats->nbases)*sizeof(uint64_t)); + + stats->del_cycles_1st = realloc(stats->del_cycles_1st, (n+1)*sizeof(uint64_t)); + if ( !stats->del_cycles_1st ) + error("Could not realloc buffers, the sequence too long: %d (%ld)\n", seq_len,(n+1)*sizeof(uint64_t)); + memset(stats->del_cycles_1st + stats->nbases + 1, 0, (n-stats->nbases)*sizeof(uint64_t)); + + stats->del_cycles_2nd = realloc(stats->del_cycles_2nd, (n+1)*sizeof(uint64_t)); + if ( !stats->del_cycles_2nd ) + error("Could not realloc buffers, the sequence too long: %d (%ld)\n", seq_len,(n+1)*sizeof(uint64_t)); + memset(stats->del_cycles_2nd + stats->nbases + 1, 0, (n-stats->nbases)*sizeof(uint64_t)); + + stats->nbases = n; + + // Realloc the coverage distribution buffer + int *rbuffer = calloc(sizeof(int),seq_len*5); + n = stats->cov_rbuf.size-stats->cov_rbuf.start; + memcpy(rbuffer,stats->cov_rbuf.buffer+stats->cov_rbuf.start,n); + if ( stats->cov_rbuf.start>1 ) + memcpy(rbuffer+n,stats->cov_rbuf.buffer,stats->cov_rbuf.start); + stats->cov_rbuf.start = 0; + free(stats->cov_rbuf.buffer); + stats->cov_rbuf.buffer = rbuffer; + stats->cov_rbuf.size = seq_len*5; + + realloc_rseq_buffer(stats); +} + +void update_checksum(bam1_t *bam_line, stats_t *stats) +{ + uint8_t *name = (uint8_t*) bam_get_qname(bam_line); + int len = 0; + while ( name[len] ) len++; + stats->checksum.names += crc32(0L, name, len); + + int seq_len = bam_line->core.l_qseq; + if ( !seq_len ) return; + + uint8_t *seq = bam_get_seq(bam_line); + stats->checksum.reads += crc32(0L, seq, (seq_len+1)/2); + + uint8_t *qual = bam_get_qual(bam_line); + stats->checksum.quals += crc32(0L, qual, (seq_len+1)/2); +} + +// These stats should only be calculated for the original reads ignoring +// supplementary artificial reads otherwise we'll accidentally double count +void collect_orig_read_stats(bam1_t *bam_line, stats_t *stats, int* gc_count_out) +{ + int seq_len = bam_line->core.l_qseq; + stats->total_len += seq_len; // This ignores clipping so only count primary + + if ( bam_line->core.flag & BAM_FQCFAIL ) stats->nreads_QCfailed++; + if ( bam_line->core.flag & BAM_FPAIRED ) stats->nreads_paired_tech++; + + // Count GC and ACGT per cycle. Note that cycle is approximate, clipping is ignored + uint8_t *seq = bam_get_seq(bam_line); + int i, read_cycle, gc_count = 0, reverse = IS_REVERSE(bam_line); + for (i=0; iacgtno_cycles[ read_cycle ].a++; + break; + case 2: + stats->acgtno_cycles[ read_cycle ].c++; + gc_count++; + break; + case 4: + stats->acgtno_cycles[ read_cycle ].g++; + gc_count++; + break; + case 8: + stats->acgtno_cycles[ read_cycle ].t++; + break; + case 15: + stats->acgtno_cycles[ read_cycle ].n++; + break; + default: + /* + * count "=" sequences in "other" along + * with MRSVWYHKDB ambiguity codes + */ + stats->acgtno_cycles[ read_cycle ].other++; + break; + } + } + int gc_idx_min = gc_count*(stats->ngc-1)/seq_len; + int gc_idx_max = (gc_count+1)*(stats->ngc-1)/seq_len; + if ( gc_idx_max >= stats->ngc ) gc_idx_max = stats->ngc - 1; + + // Determine which array (1st or 2nd read) will these stats go to, + // trim low quality bases from end the same way BWA does, + // fill GC histogram + uint64_t *quals; + uint8_t *bam_quals = bam_get_qual(bam_line); + if ( bam_line->core.flag&BAM_FREAD2 ) + { + quals = stats->quals_2nd; + stats->nreads_2nd++; + for (i=gc_idx_min; igc_2nd[i]++; + } + else + { + quals = stats->quals_1st; + stats->nreads_1st++; + for (i=gc_idx_min; igc_1st[i]++; + } + if ( stats->info->trim_qual>0 ) + stats->nbases_trimmed += bwa_trim_read(stats->info->trim_qual, bam_quals, seq_len, reverse); + + // Quality histogram and average quality. Clipping is neglected. + for (i=0; i=stats->nquals ) + error("TODO: quality too high %d>=%d (%s %d %s)\n", qual,stats->nquals,stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1,bam_get_qname(bam_line)); + if ( qual>stats->max_qual ) + stats->max_qual = qual; + + quals[ i*stats->nquals+qual ]++; + stats->sum_qual += qual; + } + + // Look at the flags and increment appropriate counters (mapped, paired, etc) + if ( IS_UNMAPPED(bam_line) ) + { + stats->nreads_unmapped++; + } + else + { + stats->nbases_mapped += seq_len; // This ignores clipping so only count primary + + if ( !bam_line->core.qual ) + stats->nreads_mq0++; + if ( !IS_PAIRED_AND_MAPPED(bam_line) ) + stats->nreads_single_mapped++; + else + { + stats->nreads_paired_and_mapped++; + + if (IS_PROPERLYPAIRED(bam_line)) stats->nreads_properly_paired++; + + if ( bam_line->core.tid!=bam_line->core.mtid ) + stats->nreads_anomalous++; + } + } + *gc_count_out = gc_count; +} + +void collect_stats(bam1_t *bam_line, stats_t *stats) +{ + if ( stats->rg_hash ) + { + const uint8_t *rg = bam_aux_get(bam_line, "RG"); + if ( !rg ) return; // certain read groups were requested but this record has none + if ( !khash_str2int_has_key(stats->rg_hash, (const char*)(rg + 1)) ) return; + } + if ( stats->info->flag_require && (bam_line->core.flag & stats->info->flag_require)!=stats->info->flag_require ) + { + stats->nreads_filtered++; + return; + } + if ( stats->info->flag_filter && (bam_line->core.flag & stats->info->flag_filter) ) + { + stats->nreads_filtered++; + return; + } + if ( !is_in_regions(bam_line,stats) ) + return; + if ( stats->info->filter_readlen!=-1 && bam_line->core.l_qseq!=stats->info->filter_readlen ) + return; + + update_checksum(bam_line, stats); + + // Secondary reads don't count for most stats purposes + if ( bam_line->core.flag & BAM_FSECONDARY ) + { + stats->nreads_secondary++; + return; + } + + // If line has no sequence cannot continue + int seq_len = bam_line->core.l_qseq; + if ( !seq_len ) return; + + if ( IS_DUP(bam_line) ) + { + stats->total_len_dup += seq_len; + stats->nreads_dup++; + } + + int read_len = unclipped_length(bam_line); + if ( read_len >= stats->nbases ) + realloc_buffers(stats,read_len); + // Update max_len observed + if ( stats->max_lenmax_len = read_len; + int i; + int gc_count = 0; + + // These stats should only be calculated for the original reads ignoring supplementary artificial reads + // otherwise we'll accidentally double count + if ( IS_ORIGINAL(bam_line) ) + { + stats->read_lengths[read_len]++; + collect_orig_read_stats(bam_line, stats, &gc_count); + } + + // Look at the flags and increment appropriate counters (mapped, paired, etc) + if ( IS_UNMAPPED(bam_line) ) return; + + count_indels(stats, bam_line); + + if ( IS_PAIRED_AND_MAPPED(bam_line) ) + { + // The insert size is tricky, because for long inserts the libraries are + // prepared differently and the pairs point in other direction. BWA does + // not set the paired flag for them. Similar thing is true also for 454 + // reads. Mates mapped to different chromosomes have isize==0. + int32_t isize = bam_line->core.isize; + if ( isize<0 ) isize = -isize; + if ( stats->info->nisize > 0 && isize > stats->info->nisize ) + isize = stats->info->nisize; + if ( isize>0 || bam_line->core.tid==bam_line->core.mtid ) + { + int pos_fst = bam_line->core.mpos - bam_line->core.pos; + int is_fst = IS_READ1(bam_line) ? 1 : -1; + int is_fwd = IS_REVERSE(bam_line) ? -1 : 1; + int is_mfwd = IS_MATE_REVERSE(bam_line) ? -1 : 1; + + if ( is_fwd*is_mfwd>0 ) + stats->isize->inc_other(stats->isize->data, isize); + else if ( is_fst*pos_fst>0 ) + { + if ( is_fst*is_fwd>0 ) + stats->isize->inc_inward(stats->isize->data, isize); + else + stats->isize->inc_outward(stats->isize->data, isize); + } + else if ( is_fst*pos_fst<0 ) + { + if ( is_fst*is_fwd>0 ) + stats->isize->inc_outward(stats->isize->data, isize); + else + stats->isize->inc_inward(stats->isize->data, isize); + } + } + } + + // Number of mismatches + uint8_t *nm = bam_aux_get(bam_line,"NM"); + if (nm) + stats->nmismatches += bam_aux2i(nm); + + // Number of mapped bases from cigar + if ( bam_line->core.n_cigar == 0) + error("FIXME: mapped read with no cigar?\n"); + int readlen=seq_len; + if ( stats->regions ) + { + // Count only on-target bases + int iref = bam_line->core.pos + 1; + for (i=0; icore.n_cigar; i++) + { + int cig = bam_cigar_op(bam_get_cigar(bam_line)[i]); + int ncig = bam_cigar_oplen(bam_get_cigar(bam_line)[i]); + if ( !ncig ) continue; // curiously, this can happen: 0D + if ( cig==BAM_CDEL ) readlen += ncig; + else if ( cig==BAM_CMATCH ) + { + if ( iref < stats->reg_from ) ncig -= stats->reg_from-iref; + else if ( iref+ncig-1 > stats->reg_to ) ncig -= iref+ncig-1 - stats->reg_to; + if ( ncig<0 ) ncig = 0; + stats->nbases_mapped_cigar += ncig; + iref += bam_cigar_oplen(bam_get_cigar(bam_line)[i]); + } + else if ( cig==BAM_CINS ) + { + iref += ncig; + if ( iref>=stats->reg_from && iref<=stats->reg_to ) + stats->nbases_mapped_cigar += ncig; + } + } + } + else + { + // Count the whole read + for (i=0; icore.n_cigar; i++) + { + if ( bam_cigar_op(bam_get_cigar(bam_line)[i])==BAM_CMATCH || bam_cigar_op(bam_get_cigar(bam_line)[i])==BAM_CINS ) + stats->nbases_mapped_cigar += bam_cigar_oplen(bam_get_cigar(bam_line)[i]); + if ( bam_cigar_op(bam_get_cigar(bam_line)[i])==BAM_CDEL ) + readlen += bam_cigar_oplen(bam_get_cigar(bam_line)[i]); + } + } + + if ( stats->tid==bam_line->core.tid && bam_line->core.pospos ) + stats->is_sorted = 0; + stats->pos = bam_line->core.pos; + + if ( stats->is_sorted ) + { + if ( stats->tid==-1 || stats->tid!=bam_line->core.tid ) + round_buffer_flush(stats, -1); + + // Mismatches per cycle and GC-depth graph. For simplicity, reads overlapping GCD bins + // are not splitted which results in up to seq_len-1 overlaps. The default bin size is + // 20kbp, so the effect is negligible. + if ( stats->info->fai ) + { + int inc_ref = 0, inc_gcd = 0; + // First pass or new chromosome + if ( stats->rseq_pos==-1 || stats->tid != bam_line->core.tid ) { inc_ref=1; inc_gcd=1; } + // Read goes beyond the end of the rseq buffer + else if ( stats->rseq_pos+stats->nrseq_buf < bam_line->core.pos+readlen ) { inc_ref=1; inc_gcd=1; } + // Read overlaps the next gcd bin + else if ( stats->gcd_pos+stats->info->gcd_bin_size < bam_line->core.pos+readlen ) + { + inc_gcd = 1; + if ( stats->rseq_pos+stats->nrseq_buf < bam_line->core.pos+stats->info->gcd_bin_size ) inc_ref = 1; + } + if ( inc_gcd ) + { + stats->igcd++; + if ( stats->igcd >= stats->ngcd ) + realloc_gcd_buffer(stats, readlen); + if ( inc_ref ) + read_ref_seq(stats,bam_line->core.tid,bam_line->core.pos); + stats->gcd_pos = bam_line->core.pos; + stats->gcd[ stats->igcd ].gc = fai_gc_content(stats, stats->gcd_pos, stats->info->gcd_bin_size); + } + + count_mismatches_per_cycle(stats,bam_line,read_len); + } + // No reference and first pass, new chromosome or sequence going beyond the end of the gcd bin + else if ( stats->gcd_pos==-1 || stats->tid != bam_line->core.tid || bam_line->core.pos - stats->gcd_pos > stats->info->gcd_bin_size ) + { + // First pass or a new chromosome + stats->tid = bam_line->core.tid; + stats->gcd_pos = bam_line->core.pos; + stats->igcd++; + if ( stats->igcd >= stats->ngcd ) + realloc_gcd_buffer(stats, readlen); + } + stats->gcd[ stats->igcd ].depth++; + // When no reference sequence is given, approximate the GC from the read (much shorter window, but otherwise OK) + if ( !stats->info->fai ) + stats->gcd[ stats->igcd ].gc += (float) gc_count / seq_len; + + // Coverage distribution graph + round_buffer_flush(stats,bam_line->core.pos); + round_buffer_insert_read(&(stats->cov_rbuf),bam_line->core.pos,bam_line->core.pos+seq_len-1); + } +} + +// Sort by GC and depth +#define GCD_t(x) ((gc_depth_t *)x) +static int gcd_cmp(const void *a, const void *b) +{ + if ( GCD_t(a)->gc < GCD_t(b)->gc ) return -1; + if ( GCD_t(a)->gc > GCD_t(b)->gc ) return 1; + if ( GCD_t(a)->depth < GCD_t(b)->depth ) return -1; + if ( GCD_t(a)->depth > GCD_t(b)->depth ) return 1; + return 0; +} +#undef GCD_t + +float gcd_percentile(gc_depth_t *gcd, int N, int p) +{ + float n,d; + int k; + + n = p*(N+1)/100; + k = n; + if ( k<=0 ) + return gcd[0].depth; + if ( k>=N ) + return gcd[N-1].depth; + + d = n - k; + return gcd[k-1].depth + d*(gcd[k].depth - gcd[k-1].depth); +} + +void output_stats(FILE *to, stats_t *stats, int sparse) +{ + // Calculate average insert size and standard deviation (from the main bulk data only) + int isize, ibulk=0; + uint64_t nisize=0, nisize_inward=0, nisize_outward=0, nisize_other=0; + for (isize=0; isizeisize->nitems(stats->isize->data); isize++) + { + // Each pair was counted twice + stats->isize->set_inward(stats->isize->data, isize, stats->isize->inward(stats->isize->data, isize) * 0.5); + stats->isize->set_outward(stats->isize->data, isize, stats->isize->outward(stats->isize->data, isize) * 0.5); + stats->isize->set_other(stats->isize->data, isize, stats->isize->other(stats->isize->data, isize) * 0.5); + + nisize_inward += stats->isize->inward(stats->isize->data, isize); + nisize_outward += stats->isize->outward(stats->isize->data, isize); + nisize_other += stats->isize->other(stats->isize->data, isize); + nisize += stats->isize->inward(stats->isize->data, isize) + stats->isize->outward(stats->isize->data, isize) + stats->isize->other(stats->isize->data, isize); + } + + double bulk=0, avg_isize=0, sd_isize=0; + for (isize=0; isizeisize->nitems(stats->isize->data); isize++) + { + bulk += stats->isize->inward(stats->isize->data, isize) + stats->isize->outward(stats->isize->data, isize) + stats->isize->other(stats->isize->data, isize); + avg_isize += isize * (stats->isize->inward(stats->isize->data, isize) + stats->isize->outward(stats->isize->data, isize) + stats->isize->other(stats->isize->data, isize)); + + if ( bulk/nisize > stats->info->isize_main_bulk ) + { + ibulk = isize+1; + nisize = bulk; + break; + } + } + avg_isize /= nisize ? nisize : 1; + for (isize=1; isizeisize->inward(stats->isize->data, isize) + stats->isize->outward(stats->isize->data, isize) +stats->isize->other(stats->isize->data, isize)) * (isize-avg_isize)*(isize-avg_isize) / nisize; + sd_isize = sqrt(sd_isize); + + + fprintf(to, "# This file was produced by samtools stats (%s+htslib-%s) and can be plotted using plot-bamstats\n", samtools_version(), hts_version()); + if( stats->split_name != NULL ){ + fprintf(to, "# This file contains statistics only for reads with tag: %s=%s\n", stats->info->split_tag, stats->split_name); + } + else{ + fprintf(to, "# This file contains statistics for all reads.\n"); + } + fprintf(to, "# The command line was: %s",stats->info->argv[0]); + int i; + for (i=1; iinfo->argc; i++) + fprintf(to, " %s", stats->info->argv[i]); + fprintf(to, "\n"); + fprintf(to, "# CHK, Checksum\t[2]Read Names\t[3]Sequences\t[4]Qualities\n"); + fprintf(to, "# CHK, CRC32 of reads which passed filtering followed by addition (32bit overflow)\n"); + fprintf(to, "CHK\t%08x\t%08x\t%08x\n", stats->checksum.names,stats->checksum.reads,stats->checksum.quals); + fprintf(to, "# Summary Numbers. Use `grep ^SN | cut -f 2-` to extract this part.\n"); + fprintf(to, "SN\traw total sequences:\t%ld\n", (long)(stats->nreads_filtered+stats->nreads_1st+stats->nreads_2nd)); // not counting excluded seqs (and none of the below) + fprintf(to, "SN\tfiltered sequences:\t%ld\n", (long)stats->nreads_filtered); + fprintf(to, "SN\tsequences:\t%ld\n", (long)(stats->nreads_1st+stats->nreads_2nd)); + fprintf(to, "SN\tis sorted:\t%d\n", stats->is_sorted ? 1 : 0); + fprintf(to, "SN\t1st fragments:\t%ld\n", (long)stats->nreads_1st); + fprintf(to, "SN\tlast fragments:\t%ld\n", (long)stats->nreads_2nd); + fprintf(to, "SN\treads mapped:\t%ld\n", (long)(stats->nreads_paired_and_mapped+stats->nreads_single_mapped)); + fprintf(to, "SN\treads mapped and paired:\t%ld\t# paired-end technology bit set + both mates mapped\n", (long)stats->nreads_paired_and_mapped); + fprintf(to, "SN\treads unmapped:\t%ld\n", (long)stats->nreads_unmapped); + fprintf(to, "SN\treads properly paired:\t%ld\t# proper-pair bit set\n", (long)stats->nreads_properly_paired); + fprintf(to, "SN\treads paired:\t%ld\t# paired-end technology bit set\n", (long)stats->nreads_paired_tech); + fprintf(to, "SN\treads duplicated:\t%ld\t# PCR or optical duplicate bit set\n", (long)stats->nreads_dup); + fprintf(to, "SN\treads MQ0:\t%ld\t# mapped and MQ=0\n", (long)stats->nreads_mq0); + fprintf(to, "SN\treads QC failed:\t%ld\n", (long)stats->nreads_QCfailed); + fprintf(to, "SN\tnon-primary alignments:\t%ld\n", (long)stats->nreads_secondary); + fprintf(to, "SN\ttotal length:\t%ld\t# ignores clipping\n", (long)stats->total_len); + fprintf(to, "SN\tbases mapped:\t%ld\t# ignores clipping\n", (long)stats->nbases_mapped); // the length of the whole read goes here, including soft-clips etc. + fprintf(to, "SN\tbases mapped (cigar):\t%ld\t# more accurate\n", (long)stats->nbases_mapped_cigar); // only matched and inserted bases are counted here + fprintf(to, "SN\tbases trimmed:\t%ld\n", (long)stats->nbases_trimmed); + fprintf(to, "SN\tbases duplicated:\t%ld\n", (long)stats->total_len_dup); + fprintf(to, "SN\tmismatches:\t%ld\t# from NM fields\n", (long)stats->nmismatches); + fprintf(to, "SN\terror rate:\t%e\t# mismatches / bases mapped (cigar)\n", stats->nbases_mapped_cigar ? (float)stats->nmismatches/stats->nbases_mapped_cigar : 0); + float avg_read_length = (stats->nreads_1st+stats->nreads_2nd)?stats->total_len/(stats->nreads_1st+stats->nreads_2nd):0; + fprintf(to, "SN\taverage length:\t%.0f\n", avg_read_length); + fprintf(to, "SN\tmaximum length:\t%d\n", stats->max_len); + fprintf(to, "SN\taverage quality:\t%.1f\n", stats->total_len?stats->sum_qual/stats->total_len:0); + fprintf(to, "SN\tinsert size average:\t%.1f\n", avg_isize); + fprintf(to, "SN\tinsert size standard deviation:\t%.1f\n", sd_isize); + fprintf(to, "SN\tinward oriented pairs:\t%ld\n", (long)nisize_inward); + fprintf(to, "SN\toutward oriented pairs:\t%ld\n", (long)nisize_outward); + fprintf(to, "SN\tpairs with other orientation:\t%ld\n", (long)nisize_other); + fprintf(to, "SN\tpairs on different chromosomes:\t%ld\n", (long)stats->nreads_anomalous/2); + + int ibase,iqual; + if ( stats->max_lennbases ) stats->max_len++; + if ( stats->max_qual+1nquals ) stats->max_qual++; + fprintf(to, "# First Fragment Qualitites. Use `grep ^FFQ | cut -f 2-` to extract this part.\n"); + fprintf(to, "# Columns correspond to qualities and rows to cycles. First column is the cycle number.\n"); + for (ibase=0; ibasemax_len; ibase++) + { + fprintf(to, "FFQ\t%d",ibase+1); + for (iqual=0; iqual<=stats->max_qual; iqual++) + { + fprintf(to, "\t%ld", (long)stats->quals_1st[ibase*stats->nquals+iqual]); + } + fprintf(to, "\n"); + } + fprintf(to, "# Last Fragment Qualitites. Use `grep ^LFQ | cut -f 2-` to extract this part.\n"); + fprintf(to, "# Columns correspond to qualities and rows to cycles. First column is the cycle number.\n"); + for (ibase=0; ibasemax_len; ibase++) + { + fprintf(to, "LFQ\t%d",ibase+1); + for (iqual=0; iqual<=stats->max_qual; iqual++) + { + fprintf(to, "\t%ld", (long)stats->quals_2nd[ibase*stats->nquals+iqual]); + } + fprintf(to, "\n"); + } + if ( stats->mpc_buf ) + { + fprintf(to, "# Mismatches per cycle and quality. Use `grep ^MPC | cut -f 2-` to extract this part.\n"); + fprintf(to, "# Columns correspond to qualities, rows to cycles. First column is the cycle number, second\n"); + fprintf(to, "# is the number of N's and the rest is the number of mismatches\n"); + for (ibase=0; ibasemax_len; ibase++) + { + fprintf(to, "MPC\t%d",ibase+1); + for (iqual=0; iqual<=stats->max_qual; iqual++) + { + fprintf(to, "\t%ld", (long)stats->mpc_buf[ibase*stats->nquals+iqual]); + } + fprintf(to, "\n"); + } + } + fprintf(to, "# GC Content of first fragments. Use `grep ^GCF | cut -f 2-` to extract this part.\n"); + int ibase_prev = 0; + for (ibase=0; ibasengc; ibase++) + { + if ( stats->gc_1st[ibase]==stats->gc_1st[ibase_prev] ) continue; + fprintf(to, "GCF\t%.2f\t%ld\n", (ibase+ibase_prev)*0.5*100./(stats->ngc-1), (long)stats->gc_1st[ibase_prev]); + ibase_prev = ibase; + } + fprintf(to, "# GC Content of last fragments. Use `grep ^GCL | cut -f 2-` to extract this part.\n"); + ibase_prev = 0; + for (ibase=0; ibasengc; ibase++) + { + if ( stats->gc_2nd[ibase]==stats->gc_2nd[ibase_prev] ) continue; + fprintf(to, "GCL\t%.2f\t%ld\n", (ibase+ibase_prev)*0.5*100./(stats->ngc-1), (long)stats->gc_2nd[ibase_prev]); + ibase_prev = ibase; + } + fprintf(to, "# ACGT content per cycle. Use `grep ^GCC | cut -f 2-` to extract this part. The columns are: cycle; A,C,G,T base counts as a percentage of all A/C/G/T bases [%%]; and N and O counts as a percentage of all A/C/G/T bases [%%]\n"); + for (ibase=0; ibasemax_len; ibase++) + { + acgtno_count_t *acgtno_count = &(stats->acgtno_cycles[ibase]); + uint64_t acgt_sum = acgtno_count->a + acgtno_count->c + acgtno_count->g + acgtno_count->t; + if ( ! acgt_sum ) continue; + fprintf(to, "GCC\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", ibase+1, 100.*acgtno_count->a/acgt_sum, 100.*acgtno_count->c/acgt_sum, 100.*acgtno_count->g/acgt_sum, 100.*acgtno_count->t/acgt_sum, 100.*acgtno_count->n/acgt_sum, 100.*acgtno_count->other/acgt_sum); + } + fprintf(to, "# Insert sizes. Use `grep ^IS | cut -f 2-` to extract this part. The columns are: insert size, pairs total, inward oriented pairs, outward oriented pairs, other pairs\n"); + for (isize=0; isizeisize->inward(stats->isize->data, isize)); + long out = (long)(stats->isize->outward(stats->isize->data, isize)); + long other = (long)(stats->isize->other(stats->isize->data, isize)); + if (!sparse || in + out + other > 0) { + fprintf(to, "IS\t%d\t%ld\t%ld\t%ld\t%ld\n", isize, in+out+other, + in , out, other); + } + } + + fprintf(to, "# Read lengths. Use `grep ^RL | cut -f 2-` to extract this part. The columns are: read length, count\n"); + int ilen; + for (ilen=0; ilenmax_len; ilen++) + { + if ( stats->read_lengths[ilen]>0 ) + fprintf(to, "RL\t%d\t%ld\n", ilen, (long)stats->read_lengths[ilen]); + } + + fprintf(to, "# Indel distribution. Use `grep ^ID | cut -f 2-` to extract this part. The columns are: length, number of insertions, number of deletions\n"); + for (ilen=0; ilennindels; ilen++) + { + if ( stats->insertions[ilen]>0 || stats->deletions[ilen]>0 ) + fprintf(to, "ID\t%d\t%ld\t%ld\n", ilen+1, (long)stats->insertions[ilen], (long)stats->deletions[ilen]); + } + + fprintf(to, "# Indels per cycle. Use `grep ^IC | cut -f 2-` to extract this part. The columns are: cycle, number of insertions (fwd), .. (rev) , number of deletions (fwd), .. (rev)\n"); + for (ilen=0; ilen<=stats->nbases; ilen++) + { + // For deletions we print the index of the cycle before the deleted base (1-based) and for insertions + // the index of the cycle of the first inserted base (also 1-based) + if ( stats->ins_cycles_1st[ilen]>0 || stats->ins_cycles_2nd[ilen]>0 || stats->del_cycles_1st[ilen]>0 || stats->del_cycles_2nd[ilen]>0 ) + fprintf(to, "IC\t%d\t%ld\t%ld\t%ld\t%ld\n", ilen+1, (long)stats->ins_cycles_1st[ilen], (long)stats->ins_cycles_2nd[ilen], (long)stats->del_cycles_1st[ilen], (long)stats->del_cycles_2nd[ilen]); + } + + fprintf(to, "# Coverage distribution. Use `grep ^COV | cut -f 2-` to extract this part.\n"); + if ( stats->cov[0] ) + fprintf(to, "COV\t[<%d]\t%d\t%ld\n",stats->info->cov_min,stats->info->cov_min-1, (long)stats->cov[0]); + int icov; + for (icov=1; icovncov-1; icov++) + if ( stats->cov[icov] ) + fprintf(to, "COV\t[%d-%d]\t%d\t%ld\n",stats->info->cov_min + (icov-1)*stats->info->cov_step, stats->info->cov_min + icov*stats->info->cov_step-1,stats->info->cov_min + icov*stats->info->cov_step-1, (long)stats->cov[icov]); + if ( stats->cov[stats->ncov-1] ) + fprintf(to, "COV\t[%d<]\t%d\t%ld\n",stats->info->cov_min + (stats->ncov-2)*stats->info->cov_step-1,stats->info->cov_min + (stats->ncov-2)*stats->info->cov_step-1, (long)stats->cov[stats->ncov-1]); + + // Calculate average GC content, then sort by GC and depth + fprintf(to, "# GC-depth. Use `grep ^GCD | cut -f 2-` to extract this part. The columns are: GC%%, unique sequence percentiles, 10th, 25th, 50th, 75th and 90th depth percentile\n"); + uint32_t igcd; + for (igcd=0; igcdigcd; igcd++) + { + if ( stats->info->fai ) + stats->gcd[igcd].gc = rint(100. * stats->gcd[igcd].gc); + else + if ( stats->gcd[igcd].depth ) + stats->gcd[igcd].gc = rint(100. * stats->gcd[igcd].gc / stats->gcd[igcd].depth); + } + qsort(stats->gcd, stats->igcd+1, sizeof(gc_depth_t), gcd_cmp); + igcd = 0; + while ( igcd < stats->igcd ) + { + // Calculate percentiles (10,25,50,75,90th) for the current GC content and print + uint32_t nbins=0, itmp=igcd; + float gc = stats->gcd[igcd].gc; + while ( itmpigcd && fabs(stats->gcd[itmp].gc-gc)<0.1 ) + { + nbins++; + itmp++; + } + fprintf(to, "GCD\t%.1f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\n", gc, (igcd+nbins+1)*100./(stats->igcd+1), + gcd_percentile(&(stats->gcd[igcd]),nbins,10) *avg_read_length/stats->info->gcd_bin_size, + gcd_percentile(&(stats->gcd[igcd]),nbins,25) *avg_read_length/stats->info->gcd_bin_size, + gcd_percentile(&(stats->gcd[igcd]),nbins,50) *avg_read_length/stats->info->gcd_bin_size, + gcd_percentile(&(stats->gcd[igcd]),nbins,75) *avg_read_length/stats->info->gcd_bin_size, + gcd_percentile(&(stats->gcd[igcd]),nbins,90) *avg_read_length/stats->info->gcd_bin_size + ); + igcd += nbins; + } +} + +void init_regions(stats_t *stats, const char *file) +{ + FILE *fp = fopen(file,"r"); + if ( !fp ) error("%s: %s\n",file,strerror(errno)); + + kstring_t line = { 0, 0, NULL }; + int warned = 0; + int prev_tid=-1, prev_pos=-1; + while (line.l = 0, kgetline(&line, (kgets_func *)fgets, fp) >= 0) + { + if ( line.s[0] == '#' ) continue; + + int i = 0; + while ( i=line.l ) error("Could not parse the file: %s [%s]\n", file, line.s); + line.s[i] = '\0'; + + int tid = bam_name2id(stats->info->sam_header, line.s); + if ( tid < 0 ) + { + if ( !warned ) + fprintf(samtools_stderr,"Warning: Some sequences not present in the BAM, e.g. \"%s\". This message is printed only once.\n", line.s); + warned = 1; + continue; + } + + if ( tid >= stats->nregions ) + { + stats->regions = realloc(stats->regions,sizeof(regions_t)*(stats->nregions+100)); + int j; + for (j=stats->nregions; jnregions+100; j++) + { + stats->regions[j].npos = stats->regions[j].mpos = stats->regions[j].cpos = 0; + stats->regions[j].pos = NULL; + } + stats->nregions += 100; + } + int npos = stats->regions[tid].npos; + if ( npos >= stats->regions[tid].mpos ) + { + stats->regions[tid].mpos += 1000; + stats->regions[tid].pos = realloc(stats->regions[tid].pos,sizeof(pos_t)*stats->regions[tid].mpos); + } + + if ( (sscanf(&line.s[i+1],"%u %u",&stats->regions[tid].pos[npos].from,&stats->regions[tid].pos[npos].to))!=2 ) error("Could not parse the region [%s]\n", &line.s[i+1]); + if ( prev_tid==-1 || prev_tid!=tid ) + { + prev_tid = tid; + prev_pos = stats->regions[tid].pos[npos].from; + } + if ( prev_pos>stats->regions[tid].pos[npos].from ) + error("The positions are not in chromosomal order (%s:%d comes after %d)\n", line.s,stats->regions[tid].pos[npos].from,prev_pos); + stats->regions[tid].npos++; + } + free(line.s); + if ( !stats->regions ) error("Unable to map the -t sequences to the BAM sequences.\n"); + fclose(fp); +} + +void destroy_regions(stats_t *stats) +{ + int i; + for (i=0; inregions; i++) + { + if ( !stats->regions[i].mpos ) continue; + free(stats->regions[i].pos); + } + if ( stats->regions ) free(stats->regions); +} + +void reset_regions(stats_t *stats) +{ + int i; + for (i=0; inregions; i++) + stats->regions[i].cpos = 0; +} + +int is_in_regions(bam1_t *bam_line, stats_t *stats) +{ + if ( !stats->regions ) return 1; + + if ( bam_line->core.tid >= stats->nregions || bam_line->core.tid<0 ) return 0; + if ( !stats->is_sorted ) error("The BAM must be sorted in order for -t to work.\n"); + + regions_t *reg = &stats->regions[bam_line->core.tid]; + if ( reg->cpos==reg->npos ) return 0; // done for this chr + + // Find a matching interval or skip this read. No splicing of reads is done, no indels or soft clips considered, + // even small overlap is enough to include the read in the stats. + int i = reg->cpos; + while ( inpos && reg->pos[i].to<=bam_line->core.pos ) i++; + if ( i>=reg->npos ) { reg->cpos = reg->npos; return 0; } + if ( bam_line->core.pos + bam_line->core.l_qseq + 1 < reg->pos[i].from ) return 0; + reg->cpos = i; + stats->reg_from = reg->pos[i].from; + stats->reg_to = reg->pos[i].to; + + return 1; +} + +void init_group_id(stats_t *stats, const char *id) +{ +#if 0 + if ( !stats->sam_header->dict ) + stats->sam_header->dict = sam_header_parse2(stats->sam_header->text); + void *iter = stats->sam_header->dict; + const char *key, *val; + int n = 0; + stats->rg_hash = khash_str2int_init(); + while ( (iter = sam_header2key_val(iter, "RG","ID","SM", &key, &val)) ) + { + if ( !strcmp(id,key) || (val && !strcmp(id,val)) ) + { + khiter_t k = kh_get(kh_rg, stats->rg_hash, key); + if ( k != kh_end(stats->rg_hash) ) + fprintf(samtools_stderr, "[init_group_id] The group ID not unique: \"%s\"\n", key); + int ret; + k = kh_put(kh_rg, stats->rg_hash, key, &ret); + kh_value(stats->rg_hash, k) = val; + n++; + } + } + if ( !n ) + error("The sample or read group \"%s\" not present.\n", id); +#else + fprintf(samtools_stderr, "Samtools-htslib: init_group_id() header parsing not yet implemented\n"); + abort(); +#endif +} + + +static void error(const char *format, ...) +{ + if ( !format ) + { + fprintf(samtools_stdout, "About: The program collects statistics from BAM files. The output can be visualized using plot-bamstats.\n"); + fprintf(samtools_stdout, "Usage: samtools stats [OPTIONS] file.bam\n"); + fprintf(samtools_stdout, " samtools stats [OPTIONS] file.bam chr:from-to\n"); + fprintf(samtools_stdout, "Options:\n"); + fprintf(samtools_stdout, " -c, --coverage ,, Coverage distribution min,max,step [1,1000,1]\n"); + fprintf(samtools_stdout, " -d, --remove-dups Exclude from statistics reads marked as duplicates\n"); + fprintf(samtools_stdout, " -f, --required-flag Required flag, 0 for unset. See also `samtools flags` [0]\n"); + fprintf(samtools_stdout, " -F, --filtering-flag Filtering flag, 0 for unset. See also `samtools flags` [0]\n"); + fprintf(samtools_stdout, " --GC-depth the size of GC-depth bins (decreasing bin size increases memory requirement) [2e4]\n"); + fprintf(samtools_stdout, " -h, --help This help message\n"); + fprintf(samtools_stdout, " -i, --insert-size Maximum insert size [8000]\n"); + fprintf(samtools_stdout, " -I, --id Include only listed read group or sample name\n"); + fprintf(samtools_stdout, " -l, --read-length Include in the statistics only reads with the given read length []\n"); + fprintf(samtools_stdout, " -m, --most-inserts Report only the main part of inserts [0.99]\n"); + fprintf(samtools_stdout, " -P, --split-prefix Path or string prefix for filepaths output by -S (default is input filename)\n"); + fprintf(samtools_stdout, " -q, --trim-quality The BWA trimming parameter [0]\n"); + fprintf(samtools_stdout, " -r, --ref-seq Reference sequence (required for GC-depth and mismatches-per-cycle calculation).\n"); + fprintf(samtools_stdout, " -s, --sam Ignored (input format is auto-detected).\n"); + fprintf(samtools_stdout, " -S, --split Also write statistics to separate files split by tagged field.\n"); + fprintf(samtools_stdout, " -t, --target-regions Do stats in these regions only. Tab-delimited file chr,from,to, 1-based, inclusive.\n"); + fprintf(samtools_stdout, " -x, --sparse Suppress outputting IS rows where there are no insertions.\n"); + sam_global_opt_help(samtools_stdout, "-.--.@"); + fprintf(samtools_stdout, "\n"); + } + else + { + va_list ap; + va_start(ap, format); + vfprintf(samtools_stderr, format, ap); + va_end(ap); + } + exit(1); +} + +void cleanup_stats_info(stats_info_t* info){ + if (info->fai) fai_destroy(info->fai); + sam_close(info->sam); + free(info); +} + +void cleanup_stats(stats_t* stats) +{ + free(stats->cov_rbuf.buffer); free(stats->cov); + free(stats->quals_1st); free(stats->quals_2nd); + free(stats->gc_1st); free(stats->gc_2nd); + stats->isize->isize_free(stats->isize->data); + free(stats->isize); + free(stats->gcd); + free(stats->rseq_buf); + free(stats->mpc_buf); + free(stats->acgtno_cycles); + free(stats->read_lengths); + free(stats->insertions); + free(stats->deletions); + free(stats->ins_cycles_1st); + free(stats->ins_cycles_2nd); + free(stats->del_cycles_1st); + free(stats->del_cycles_2nd); + destroy_regions(stats); + if ( stats->rg_hash ) khash_str2int_destroy(stats->rg_hash); + free(stats->split_name); + free(stats); +} + +void output_split_stats(khash_t(c2stats) *split_hash, char* bam_fname, int sparse) +{ + int i = 0; + kstring_t output_filename = { 0, 0, NULL }; + stats_t *curr_stats = NULL; + for(i = kh_begin(split_hash); i != kh_end(split_hash); ++i){ + if(!kh_exist(split_hash, i)) continue; + curr_stats = kh_value(split_hash, i); + round_buffer_flush(curr_stats, -1); + + output_filename.l = 0; + if (curr_stats->info->split_prefix) + kputs(curr_stats->info->split_prefix, &output_filename); + else + kputs(bam_fname, &output_filename); + kputc('_', &output_filename); + kputs(curr_stats->split_name, &output_filename); + kputs(".bamstat", &output_filename); + + FILE *to = fopen(output_filename.s, "w"); + if(to == NULL){ + error("Could not open '%s' for writing.\n", output_filename.s); + } + output_stats(to, curr_stats, sparse); + fclose(to); + } + + free(output_filename.s); +} + +void destroy_split_stats(khash_t(c2stats) *split_hash) +{ + int i = 0; + stats_t *curr_stats = NULL; + for(i = kh_begin(split_hash); i != kh_end(split_hash); ++i){ + if(!kh_exist(split_hash, i)) continue; + curr_stats = kh_value(split_hash, i); + cleanup_stats(curr_stats); + } + kh_destroy(c2stats, split_hash); +} + +stats_info_t* stats_info_init(int argc, char *argv[]) +{ + stats_info_t* info = calloc(1, sizeof(stats_info_t)); + info->nisize = 8000; + info->isize_main_bulk = 0.99; // There are always outliers at the far end + info->gcd_bin_size = 20e3; + info->cov_min = 1; + info->cov_max = 1000; + info->cov_step = 1; + info->filter_readlen = -1; + info->argc = argc; + info->argv = argv; + + return info; +} + +int init_stat_info_fname(stats_info_t* info, const char* bam_fname, const htsFormat* in_fmt) +{ + // .. bam + samFile* sam; + if ((sam = sam_open_format(bam_fname, "r", in_fmt)) == 0) { + print_error_errno("stats", "failed to open \"%s\"", bam_fname); + return 1; + } + info->sam = sam; + info->sam_header = sam_hdr_read(sam); + if (info->sam_header == NULL) { + print_error("stats", "failed to read header for \"%s\"", bam_fname); + return 1; + } + return 0; +} + +stats_t* stats_init() +{ + stats_t *stats = calloc(1,sizeof(stats_t)); + stats->ngc = 200; + stats->nquals = 256; + stats->nbases = 300; + stats->max_len = 30; + stats->max_qual = 40; + stats->rseq_pos = -1; + stats->tid = stats->gcd_pos = -1; + stats->igcd = 0; + stats->is_sorted = 1; + stats->nindels = stats->nbases; + stats->split_name = NULL; + + return stats; +} + +static void init_stat_structs(stats_t* stats, stats_info_t* info, const char* group_id, const char* targets) +{ + // Give stats_t a pointer to the info struct + // This saves us having to pass the stats_info_t to every function + stats->info = info; + + // Init structures + // .. coverage bins and round buffer + if ( info->cov_step > info->cov_max - info->cov_min + 1 ) + { + info->cov_step = info->cov_max - info->cov_min; + if ( info->cov_step <= 0 ) + info->cov_step = 1; + } + stats->ncov = 3 + (info->cov_max-info->cov_min) / info->cov_step; + info->cov_max = info->cov_min + ((info->cov_max-info->cov_min)/info->cov_step +1)*info->cov_step - 1; + stats->cov = calloc(sizeof(uint64_t),stats->ncov); + stats->cov_rbuf.size = stats->nbases*5; + stats->cov_rbuf.buffer = calloc(sizeof(int32_t),stats->cov_rbuf.size); + + if ( group_id ) init_group_id(stats, group_id); + // .. arrays + stats->quals_1st = calloc(stats->nquals*stats->nbases,sizeof(uint64_t)); + stats->quals_2nd = calloc(stats->nquals*stats->nbases,sizeof(uint64_t)); + stats->gc_1st = calloc(stats->ngc,sizeof(uint64_t)); + stats->gc_2nd = calloc(stats->ngc,sizeof(uint64_t)); + stats->isize = init_isize_t(info->nisize ?info->nisize+1 :0); + stats->gcd = calloc(stats->ngcd,sizeof(gc_depth_t)); + stats->mpc_buf = info->fai ? calloc(stats->nquals*stats->nbases,sizeof(uint64_t)) : NULL; + stats->acgtno_cycles = calloc(stats->nbases,sizeof(acgtno_count_t)); + stats->read_lengths = calloc(stats->nbases,sizeof(uint64_t)); + stats->insertions = calloc(stats->nbases,sizeof(uint64_t)); + stats->deletions = calloc(stats->nbases,sizeof(uint64_t)); + stats->ins_cycles_1st = calloc(stats->nbases+1,sizeof(uint64_t)); + stats->ins_cycles_2nd = calloc(stats->nbases+1,sizeof(uint64_t)); + stats->del_cycles_1st = calloc(stats->nbases+1,sizeof(uint64_t)); + stats->del_cycles_2nd = calloc(stats->nbases+1,sizeof(uint64_t)); + realloc_rseq_buffer(stats); + if ( targets ) + init_regions(stats, targets); +} + +static stats_t* get_curr_split_stats(bam1_t* bam_line, khash_t(c2stats)* split_hash, stats_info_t* info, char* targets) +{ + stats_t *curr_stats = NULL; + const uint8_t *tag_val = bam_aux_get(bam_line, info->split_tag); + if(tag_val == 0){ + error("Tag '%s' not found in bam_line.\n", info->split_tag); + } + char* split_name = strdup(bam_aux2Z(tag_val)); + + // New stats object, under split + khiter_t k = kh_get(c2stats, split_hash, split_name); + if(k == kh_end(split_hash)){ + curr_stats = stats_init(); // mallocs new instance + init_stat_structs(curr_stats, info, NULL, targets); + curr_stats->split_name = split_name; + + // Record index in hash + int ret = 0; + khiter_t iter = kh_put(c2stats, split_hash, split_name, &ret); + if( ret < 0 ){ + error("Failed to insert key '%s' into split_hash", split_name); + } + kh_val(split_hash, iter) = curr_stats; // store pointer to stats + } + else{ + curr_stats = kh_value(split_hash, k); + free(split_name); // don't need to hold on to this if it wasn't new + } + return curr_stats; +} + +int main_stats(int argc, char *argv[]) +{ + char *targets = NULL; + char *bam_fname = NULL; + char *group_id = NULL; + int sparse = 0; + sam_global_args ga = SAM_GLOBAL_ARGS_INIT; + + stats_info_t *info = stats_info_init(argc, argv); + + static const struct option loptions[] = + { + SAM_OPT_GLOBAL_OPTIONS('-', 0, '-', '-', 0, '@'), + {"help", no_argument, NULL, 'h'}, + {"remove-dups", no_argument, NULL, 'd'}, + {"sam", no_argument, NULL, 's'}, + {"ref-seq", required_argument, NULL, 'r'}, + {"coverage", required_argument, NULL, 'c'}, + {"read-length", required_argument, NULL, 'l'}, + {"insert-size", required_argument, NULL, 'i'}, + {"most-inserts", required_argument, NULL, 'm'}, + {"trim-quality", required_argument, NULL, 'q'}, + {"target-regions", required_argument, NULL, 't'}, + {"required-flag", required_argument, NULL, 'f'}, + {"filtering-flag", required_argument, NULL, 'F'}, + {"id", required_argument, NULL, 'I'}, + {"GC-depth", required_argument, NULL, 1}, + {"sparse", no_argument, NULL, 'x'}, + {"split", required_argument, NULL, 'S'}, + {"split-prefix", required_argument, NULL, 'P'}, + {NULL, 0, NULL, 0} + }; + int opt; + + while ( (opt=getopt_long(argc,argv,"?hdsxr:c:l:i:t:m:q:f:F:I:1:S:P:@:",loptions,NULL))>0 ) + { + switch (opt) + { + case 'f': info->flag_require = bam_str2flag(optarg); break; + case 'F': info->flag_filter = bam_str2flag(optarg); break; + case 'd': info->flag_filter |= BAM_FDUP; break; + case 's': break; + case 'r': info->fai = fai_load(optarg); + if (info->fai==NULL) + error("Could not load faidx: %s\n", optarg); + break; + case 1 : info->gcd_bin_size = atof(optarg); break; + case 'c': if ( sscanf(optarg,"%d,%d,%d",&info->cov_min,&info->cov_max,&info->cov_step)!= 3 ) + error("Unable to parse -c %s\n", optarg); + break; + case 'l': info->filter_readlen = atoi(optarg); break; + case 'i': info->nisize = atoi(optarg); break; + case 'm': info->isize_main_bulk = atof(optarg); break; + case 'q': info->trim_qual = atoi(optarg); break; + case 't': targets = optarg; break; + case 'I': group_id = optarg; break; + case 'x': sparse = 1; break; + case 'S': info->split_tag = optarg; break; + case 'P': info->split_prefix = optarg; break; + case '?': + case 'h': error(NULL); + default: + if (parse_sam_global_opt(opt, optarg, loptions, &ga) != 0) + error("Unknown argument: %s\n", optarg); + break; + } + } + if ( optind 0) + hts_set_threads(info->sam, ga.nthreads); + + stats_t *all_stats = stats_init(); + stats_t *curr_stats = NULL; + init_stat_structs(all_stats, info, group_id, targets); + // Init + // .. hash + khash_t(c2stats)* split_hash = kh_init(c2stats); + + // Collect statistics + bam1_t *bam_line = bam_init1(); + if ( optindsam,bam_fname); + if (bam_idx == 0) + error("Random alignment retrieval only works for indexed BAM files.\n"); + + int i; + for (i=optind; isam_header, argv[i]); + while (sam_itr_next(info->sam, iter, bam_line) >= 0) { + if (info->split_tag) { + curr_stats = get_curr_split_stats(bam_line, split_hash, info, targets); + collect_stats(bam_line, curr_stats); + } + collect_stats(bam_line, all_stats); + } + reset_regions(all_stats); + bam_itr_destroy(iter); + } + hts_idx_destroy(bam_idx); + } + else + { + // Stream through the entire BAM ignoring off-target regions if -t is given + int ret; + while ((ret = sam_read1(info->sam, info->sam_header, bam_line)) >= 0) { + if (info->split_tag) { + curr_stats = get_curr_split_stats(bam_line, split_hash, info, targets); + collect_stats(bam_line, curr_stats); + } + collect_stats(bam_line, all_stats); + } + + if (ret < -1) { + fprintf(samtools_stderr, "Failure while decoding file\n"); + return 1; + } + } + + round_buffer_flush(all_stats, -1); + output_stats(samtools_stdout, all_stats, sparse); + if (info->split_tag) + output_split_stats(split_hash, bam_fname, sparse); + + bam_destroy1(bam_line); + bam_hdr_destroy(info->sam_header); + sam_global_args_free(&ga); + + cleanup_stats(all_stats); + cleanup_stats_info(info); + destroy_split_stats(split_hash); + + return 0; +} diff --git a/samtools/stats_isize.c b/samtools/stats_isize.c new file mode 100644 index 0000000..3aa9c20 --- /dev/null +++ b/samtools/stats_isize.c @@ -0,0 +1,221 @@ +/* stats_isize.c -- generalised insert size calculation for samtools stats. + + Copyright (C) 2014 Genome Research Ltd. + + Author: Nicholas Clarke + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include "stats_isize.h" +#include + +typedef enum {IN,OUT,OTHER} isize_insert_t; + +static int max(int a, int b) { + if (a < b) { + return b; + } else { + return a; + } +} + +static isize_sparse_record_t * sparse_get_f(isize_data_t data, int at) { + isize_sparse_data_t *a = data.sparse; + khash_t(m32) *h = a->array; + + khint_t k = kh_get(m32, h, at); + if (k != kh_end(h)) { + return kh_value(h, k); + } else { + return NULL; + } +} + +static uint64_t sparse_in_f(isize_data_t data, int at) { + isize_sparse_record_t* a = sparse_get_f(data, at); + if (a != NULL) { + return a->isize_inward; + } else { + return 0; + } +} +static uint64_t sparse_out_f(isize_data_t data, int at) { + isize_sparse_record_t* a = sparse_get_f(data, at); + if (a != NULL) { + return a->isize_outward; + } else { + return 0; + } +} +static uint64_t sparse_other_f(isize_data_t data, int at) { + isize_sparse_record_t* a = sparse_get_f(data, at); + if (a != NULL) { + return a->isize_other; + } else { + return 0; + } +} + +static void sparse_set_f(isize_data_t data, int at, isize_insert_t field, uint64_t value) { + isize_sparse_data_t *a = data.sparse; + khash_t(m32) *h = a->array; + + khint_t k = kh_get(m32, h, at); + isize_sparse_record_t *rec; + if (k != kh_end(h)) { + rec = kh_value(h, k); + } else if (value != 0) { + rec = malloc(sizeof(isize_sparse_record_t)); + if (rec != NULL) { + rec->isize_inward = 0; + rec->isize_outward = 0; + rec->isize_other = 0; + int stupid = 0; + khint_t it = kh_put(m32, h, at, & stupid); + kh_value(h, it) = rec; + a->max = max(at, a->max); + } else { + fprintf(stderr, "%s\n", "Failed to allocate memory for isize_sparse_record_t"); + exit(11); + } + } else { + return; + } + if (field == IN) { + rec->isize_inward = value; + } else if (field == OUT) { + rec->isize_outward = value; + } else { + rec->isize_other = value; + } + +} + +static void sparse_set_in_f(isize_data_t data, int at, uint64_t value) { sparse_set_f(data, at, IN, value); } +static void sparse_set_out_f(isize_data_t data, int at, uint64_t value) { sparse_set_f(data, at, OUT, value); } +static void sparse_set_other_f(isize_data_t data, int at, uint64_t value) { sparse_set_f(data, at, OTHER, value); } + +static void sparse_inc_in_f(isize_data_t data, int at) { sparse_set_in_f(data, at, sparse_in_f(data, at) + 1); } +static void sparse_inc_out_f(isize_data_t data, int at) { sparse_set_out_f(data, at, sparse_out_f(data, at) + 1); } +static void sparse_inc_other_f(isize_data_t data, int at) { sparse_set_other_f(data, at, sparse_other_f(data, at) + 1); } + +static void sparse_isize_free(isize_data_t data) { + isize_sparse_data_t *a = data.sparse; + khint_t k; + for (k = 0; k < kh_end(a->array); ++k) + if (kh_exist(a->array, k)) free(kh_val(a->array, k)); + kh_destroy(m32, a->array); + free(a); +} + +static int sparse_nitems(isize_data_t data) { + isize_sparse_data_t *a = data.sparse; + return a->max + 1; +} + +static uint64_t dense_in_f(isize_data_t data, int at) { return data.dense->isize_inward[at]; } +static uint64_t dense_out_f(isize_data_t data, int at) { return data.dense->isize_outward[at]; } +static uint64_t dense_other_f(isize_data_t data, int at) { return data.dense->isize_other[at]; } + +static void dense_set_in_f(isize_data_t data, int at, uint64_t value) { data.dense->isize_inward[at] = value; } +static void dense_set_out_f(isize_data_t data, int at, uint64_t value) { data.dense->isize_outward[at] = value; } +static void dense_set_other_f(isize_data_t data, int at, uint64_t value) { data.dense->isize_other[at] = value; } + +static void dense_inc_in_f(isize_data_t data, int at) { data.dense->isize_inward[at] += 1; } +static void dense_inc_out_f(isize_data_t data, int at) { data.dense->isize_outward[at] += 1; } +static void dense_inc_other_f(isize_data_t data, int at) { data.dense->isize_other[at] += 1; } + +static void dense_isize_free(isize_data_t data) { + isize_dense_data_t *a = data.dense; + free(a->isize_inward); + free(a->isize_outward); + free(a->isize_other); + free(a); +} + +static int dense_nitems(isize_data_t data) { + isize_dense_data_t *a = data.dense; + return a->total; +} + +// Construct a relevant isize_t given the bound. +isize_t *init_isize_t(int bound) { + if (bound <= 0) { + // Use sparse data structure. + isize_sparse_data_t *data = (isize_sparse_data_t *) malloc(sizeof(isize_sparse_data_t)); + + // Initialise + data->max = 0; + data->array = kh_init(m32); + + isize_t *isize = (isize_t *)malloc(sizeof(isize_t)); + + isize->data.sparse = data; + isize->nitems = & sparse_nitems; + + isize->inward = & sparse_in_f; + isize->outward = & sparse_out_f; + isize->other = & sparse_other_f; + + isize->set_inward = & sparse_set_in_f; + isize->set_outward = & sparse_set_out_f; + isize->set_other = & sparse_set_other_f; + + isize->inc_inward = & sparse_inc_in_f; + isize->inc_outward = & sparse_inc_out_f; + isize->inc_other = & sparse_inc_other_f; + + isize->isize_free = & sparse_isize_free; + + return isize; + } else { + uint64_t* in = calloc(bound,sizeof(uint64_t)); + uint64_t* out = calloc(bound,sizeof(uint64_t)); + uint64_t* other = calloc(bound,sizeof(uint64_t)); + isize_dense_data_t *rec = (isize_dense_data_t *)malloc(sizeof(isize_dense_data_t)); + rec->isize_inward = in; + rec->isize_outward = out; + rec->isize_other = other; + rec->total=bound; + + isize_t *isize = (isize_t *)malloc(sizeof(isize_t)); + + isize->data.dense = rec; + isize->nitems = & dense_nitems; + + isize->inward = & dense_in_f; + isize->outward = & dense_out_f; + isize->other = & dense_other_f; + + isize->set_inward = & dense_set_in_f; + isize->set_outward = & dense_set_out_f; + isize->set_other = & dense_set_other_f; + + isize->inc_inward = & dense_inc_in_f; + isize->inc_outward = & dense_inc_out_f; + isize->inc_other = & dense_inc_other_f; + + isize->isize_free = & dense_isize_free; + + return isize; + } +} diff --git a/samtools/stats_isize.c.pysam.c b/samtools/stats_isize.c.pysam.c new file mode 100644 index 0000000..492780b --- /dev/null +++ b/samtools/stats_isize.c.pysam.c @@ -0,0 +1,223 @@ +#include "samtools.pysam.h" + +/* stats_isize.c -- generalised insert size calculation for samtools stats. + + Copyright (C) 2014 Genome Research Ltd. + + Author: Nicholas Clarke + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include "stats_isize.h" +#include + +typedef enum {IN,OUT,OTHER} isize_insert_t; + +static int max(int a, int b) { + if (a < b) { + return b; + } else { + return a; + } +} + +static isize_sparse_record_t * sparse_get_f(isize_data_t data, int at) { + isize_sparse_data_t *a = data.sparse; + khash_t(m32) *h = a->array; + + khint_t k = kh_get(m32, h, at); + if (k != kh_end(h)) { + return kh_value(h, k); + } else { + return NULL; + } +} + +static uint64_t sparse_in_f(isize_data_t data, int at) { + isize_sparse_record_t* a = sparse_get_f(data, at); + if (a != NULL) { + return a->isize_inward; + } else { + return 0; + } +} +static uint64_t sparse_out_f(isize_data_t data, int at) { + isize_sparse_record_t* a = sparse_get_f(data, at); + if (a != NULL) { + return a->isize_outward; + } else { + return 0; + } +} +static uint64_t sparse_other_f(isize_data_t data, int at) { + isize_sparse_record_t* a = sparse_get_f(data, at); + if (a != NULL) { + return a->isize_other; + } else { + return 0; + } +} + +static void sparse_set_f(isize_data_t data, int at, isize_insert_t field, uint64_t value) { + isize_sparse_data_t *a = data.sparse; + khash_t(m32) *h = a->array; + + khint_t k = kh_get(m32, h, at); + isize_sparse_record_t *rec; + if (k != kh_end(h)) { + rec = kh_value(h, k); + } else if (value != 0) { + rec = malloc(sizeof(isize_sparse_record_t)); + if (rec != NULL) { + rec->isize_inward = 0; + rec->isize_outward = 0; + rec->isize_other = 0; + int stupid = 0; + khint_t it = kh_put(m32, h, at, & stupid); + kh_value(h, it) = rec; + a->max = max(at, a->max); + } else { + fprintf(samtools_stderr, "%s\n", "Failed to allocate memory for isize_sparse_record_t"); + exit(11); + } + } else { + return; + } + if (field == IN) { + rec->isize_inward = value; + } else if (field == OUT) { + rec->isize_outward = value; + } else { + rec->isize_other = value; + } + +} + +static void sparse_set_in_f(isize_data_t data, int at, uint64_t value) { sparse_set_f(data, at, IN, value); } +static void sparse_set_out_f(isize_data_t data, int at, uint64_t value) { sparse_set_f(data, at, OUT, value); } +static void sparse_set_other_f(isize_data_t data, int at, uint64_t value) { sparse_set_f(data, at, OTHER, value); } + +static void sparse_inc_in_f(isize_data_t data, int at) { sparse_set_in_f(data, at, sparse_in_f(data, at) + 1); } +static void sparse_inc_out_f(isize_data_t data, int at) { sparse_set_out_f(data, at, sparse_out_f(data, at) + 1); } +static void sparse_inc_other_f(isize_data_t data, int at) { sparse_set_other_f(data, at, sparse_other_f(data, at) + 1); } + +static void sparse_isize_free(isize_data_t data) { + isize_sparse_data_t *a = data.sparse; + khint_t k; + for (k = 0; k < kh_end(a->array); ++k) + if (kh_exist(a->array, k)) free(kh_val(a->array, k)); + kh_destroy(m32, a->array); + free(a); +} + +static int sparse_nitems(isize_data_t data) { + isize_sparse_data_t *a = data.sparse; + return a->max + 1; +} + +static uint64_t dense_in_f(isize_data_t data, int at) { return data.dense->isize_inward[at]; } +static uint64_t dense_out_f(isize_data_t data, int at) { return data.dense->isize_outward[at]; } +static uint64_t dense_other_f(isize_data_t data, int at) { return data.dense->isize_other[at]; } + +static void dense_set_in_f(isize_data_t data, int at, uint64_t value) { data.dense->isize_inward[at] = value; } +static void dense_set_out_f(isize_data_t data, int at, uint64_t value) { data.dense->isize_outward[at] = value; } +static void dense_set_other_f(isize_data_t data, int at, uint64_t value) { data.dense->isize_other[at] = value; } + +static void dense_inc_in_f(isize_data_t data, int at) { data.dense->isize_inward[at] += 1; } +static void dense_inc_out_f(isize_data_t data, int at) { data.dense->isize_outward[at] += 1; } +static void dense_inc_other_f(isize_data_t data, int at) { data.dense->isize_other[at] += 1; } + +static void dense_isize_free(isize_data_t data) { + isize_dense_data_t *a = data.dense; + free(a->isize_inward); + free(a->isize_outward); + free(a->isize_other); + free(a); +} + +static int dense_nitems(isize_data_t data) { + isize_dense_data_t *a = data.dense; + return a->total; +} + +// Construct a relevant isize_t given the bound. +isize_t *init_isize_t(int bound) { + if (bound <= 0) { + // Use sparse data structure. + isize_sparse_data_t *data = (isize_sparse_data_t *) malloc(sizeof(isize_sparse_data_t)); + + // Initialise + data->max = 0; + data->array = kh_init(m32); + + isize_t *isize = (isize_t *)malloc(sizeof(isize_t)); + + isize->data.sparse = data; + isize->nitems = & sparse_nitems; + + isize->inward = & sparse_in_f; + isize->outward = & sparse_out_f; + isize->other = & sparse_other_f; + + isize->set_inward = & sparse_set_in_f; + isize->set_outward = & sparse_set_out_f; + isize->set_other = & sparse_set_other_f; + + isize->inc_inward = & sparse_inc_in_f; + isize->inc_outward = & sparse_inc_out_f; + isize->inc_other = & sparse_inc_other_f; + + isize->isize_free = & sparse_isize_free; + + return isize; + } else { + uint64_t* in = calloc(bound,sizeof(uint64_t)); + uint64_t* out = calloc(bound,sizeof(uint64_t)); + uint64_t* other = calloc(bound,sizeof(uint64_t)); + isize_dense_data_t *rec = (isize_dense_data_t *)malloc(sizeof(isize_dense_data_t)); + rec->isize_inward = in; + rec->isize_outward = out; + rec->isize_other = other; + rec->total=bound; + + isize_t *isize = (isize_t *)malloc(sizeof(isize_t)); + + isize->data.dense = rec; + isize->nitems = & dense_nitems; + + isize->inward = & dense_in_f; + isize->outward = & dense_out_f; + isize->other = & dense_other_f; + + isize->set_inward = & dense_set_in_f; + isize->set_outward = & dense_set_out_f; + isize->set_other = & dense_set_other_f; + + isize->inc_inward = & dense_inc_in_f; + isize->inc_outward = & dense_inc_out_f; + isize->inc_other = & dense_inc_other_f; + + isize->isize_free = & dense_isize_free; + + return isize; + } +} diff --git a/samtools/stats_isize.h b/samtools/stats_isize.h new file mode 100644 index 0000000..3243222 --- /dev/null +++ b/samtools/stats_isize.h @@ -0,0 +1,83 @@ +/* stats_isize.h -- generalised insert size calculation for samtools stats. + + Copyright (C) 2014 Genome Research Ltd. + + Author: Nicholas Clarke + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include +#include + +typedef struct +{ + int total; + uint64_t *isize_inward, *isize_outward, *isize_other; +} +isize_dense_data_t; + +typedef struct +{ + uint64_t isize_inward, isize_outward, isize_other; +} +isize_sparse_record_t; + +KHASH_MAP_INIT_INT(m32, isize_sparse_record_t *) + +typedef struct +{ + int max; + khash_t(m32) *array; +} +isize_sparse_data_t; + +typedef union { + isize_sparse_data_t *sparse; + isize_dense_data_t *dense; +} isize_data_t; + +// Insert size structure +typedef struct +{ + isize_data_t data; + + // Maximum + int (*nitems)(isize_data_t); + + // Fetch the number of inserts of a given size + uint64_t (*inward)(isize_data_t, int); + uint64_t (*outward)(isize_data_t, int); + uint64_t (*other)(isize_data_t, int); + + // Set the number of inserts of a given size + void (*set_inward)(isize_data_t, int, uint64_t); + void (*set_outward)(isize_data_t, int, uint64_t); + void (*set_other)(isize_data_t, int, uint64_t); + + // Increment the number of inserts of a given size + void (*inc_inward)(isize_data_t, int); + void (*inc_outward)(isize_data_t, int); + void (*inc_other)(isize_data_t, int); + + // Free this structure + void (*isize_free)(isize_data_t); +} +isize_t; + +isize_t *init_isize_t(int bound); diff --git a/samtools/test/merge/test_bam_translate.c b/samtools/test/merge/test_bam_translate.c new file mode 100644 index 0000000..6ed561e --- /dev/null +++ b/samtools/test/merge/test_bam_translate.c @@ -0,0 +1,598 @@ +/* test/merge/test_bam_translate.c -- header merging test harness. + + Copyright (C) 2013, 2014 Genome Research Ltd. + + Author: Martin O. Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include "../../bam_sort.c" +#include "../test.h" +#include +#include +#include +#include +#include + +void dump_read(bam1_t* b) { + printf("->core.tid:(%d)\n", b->core.tid); + printf("->core.pos:(%d)\n", b->core.pos); + printf("->core.bin:(%d)\n", b->core.bin); + printf("->core.qual:(%d)\n", b->core.qual); + printf("->core.l_qname:(%d)\n", b->core.l_qname); + printf("->core.flag:(%d)\n", b->core.flag); + printf("->core.n_cigar:(%d)\n", b->core.n_cigar); + printf("->core.l_qseq:(%d)\n", b->core.l_qseq); + printf("->core.mtid:(%d)\n", b->core.mtid); + printf("->core.mpos:(%d)\n", b->core.mpos); + printf("->core.isize:(%d)\n", b->core.isize); + if (b->data) { + printf("->data:"); + int i; + for (i = 0; i < b->l_data; ++i) { + printf("%x ", b->data[i]); + } + printf("\n"); + } + if (b->core.l_qname) { + printf("qname: %s\n",bam_get_qname(b)); + } + if (b->core.l_qseq) { + printf("qseq:"); + int i; + for (i = 0; i < b->core.l_qseq; ++i) { + printf("%c",seq_nt16_str[seq_nt16_table[bam_seqi(bam_get_seq(b),i)]]); + } + printf("\n"); + printf("qual:"); + for (i = 0; i < b->core.l_qseq; ++i) { + printf("%c",bam_get_qual(b)[i]); + } + printf("\n"); + + } + + if (bam_get_l_aux(b)) { + int i = 0; + uint8_t* aux = bam_get_aux(b); + + while (i < bam_get_l_aux(b)) { + printf("%.2s:%c:",aux+i,*(aux+i+2)); + i += 2; + switch (*(aux+i)) { + case 'Z': + while (*(aux+1+i) != '\0') { putc(*(aux+1+i), stdout); ++i; } + break; + } + putc('\n',stdout); + ++i;++i; + } + } + printf("\n"); +} + +void trans_tbl_test_init(trans_tbl_t* tbl, int32_t n_targets) +{ + tbl->tid_trans = (int*)calloc(n_targets, sizeof(int32_t)); + tbl->rg_trans = kh_init(c2c); + tbl->pg_trans = kh_init(c2c); +} + +void setup_test_1(bam1_t** b_in, trans_tbl_t* tbl) { + bam1_t* b; + + b = bam_init1(); + trans_tbl_test_init(tbl, 4); + + tbl->tid_trans[0] = 5; + tbl->tid_trans[1] = 6; + tbl->tid_trans[2] = 7; + tbl->tid_trans[3] = 8; + + + b->core.tid = 0; + b->core.pos = 1334; + b->core.bin = 0; + b->core.qual = 10; + b->core.l_qname = 10; + b->core.flag = 0; + b->core.n_cigar = 1; + b->core.l_qseq = 10; + b->core.mtid = -1; + b->core.mpos = 0; + b->core.isize = -1; + size_t data_len = 10 + 4 + 5 + 10 + 0; + b->data = (uint8_t*)malloc(data_len); + memcpy(b->data, + "123456789\0" // q_name + "\x00\x00\x00\xA0" // cigar + "\x00\x00\x00\x00\x00" // qseq + "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" // qual + "" // aux + , data_len + ); + b->m_data = b->l_data = data_len; + + *b_in = b; +} + +void setup_test_2(bam1_t** b_in, trans_tbl_t* tbl) { + bam1_t* b; + + b = bam_init1(); + trans_tbl_test_init(tbl, 4); + + tbl->tid_trans[0] = 5; + tbl->tid_trans[1] = 6; + tbl->tid_trans[2] = 7; + tbl->tid_trans[3] = 8; + int in_there = 0; + khiter_t iter = kh_put(c2c, tbl->rg_trans, strdup("hello"), &in_there); + kh_value(tbl->rg_trans, iter) = strdup("goodbye"); + + b->core.tid = 0; + b->core.pos = 1334; + b->core.bin = 0; + b->core.qual = 10; + b->core.l_qname = 10; + b->core.flag = 0; + b->core.n_cigar = 1; + b->core.l_qseq = 10; + b->core.mtid = -1; + b->core.mpos = 0; + b->core.isize = -1; + size_t data_len = 10 + 4 + 5 + 10 + 9; + b->data = (uint8_t*)malloc(data_len); + memcpy(b->data, + "123456789\0" // q_name + "\x00\x00\x00\xA0" // cigar + "\x00\x00\x00\x00\x00" // qseq + "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" // qual + "RGZhello\0" // aux + , data_len + ); + b->m_data = b->l_data = data_len; + + *b_in = b; +} + +void setup_test_3(bam1_t** b_in, trans_tbl_t* tbl) { + bam1_t* b; + + b = bam_init1(); + trans_tbl_test_init(tbl, 4); + + tbl->tid_trans[0] = 5; + tbl->tid_trans[1] = 6; + tbl->tid_trans[2] = 7; + tbl->tid_trans[3] = 8; + int in_there = 0; + khiter_t iter = kh_put(c2c, tbl->pg_trans, strdup("hello"), &in_there); + kh_value(tbl->pg_trans,iter) = strdup("goodbye"); + + + b->core.tid = 0; + b->core.pos = 1334; + b->core.bin = 0; + b->core.qual = 10; + b->core.l_qname = 10; + b->core.flag = 0; + b->core.n_cigar = 1; + b->core.l_qseq = 10; + b->core.mtid = -1; + b->core.mpos = 0; + b->core.isize = -1; + size_t data_len = 10 + 4 + 5 + 10 + 9; + b->data = (uint8_t*)malloc(data_len); + memcpy(b->data, + "123456789\0" // q_name + "\x00\x00\x00\xA0" // cigar + "\x00\x00\x00\x00\x00" // qseq + "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" // qual + "PGZhello\0" // aux + , data_len + ); + b->m_data = b->l_data = data_len; + + *b_in = b; +} + +void setup_test_4(bam1_t** b_in, trans_tbl_t* tbl) { + bam1_t* b; + + b = bam_init1(); + trans_tbl_test_init(tbl, 4); + + tbl->tid_trans[0] = 5; + tbl->tid_trans[1] = 6; + tbl->tid_trans[2] = 7; + tbl->tid_trans[3] = 8; + + b->core.tid = 0; + b->core.pos = 1334; + b->core.bin = 0; + b->core.qual = 10; + b->core.l_qname = 10; + b->core.flag = 0; + b->core.n_cigar = 1; + b->core.l_qseq = 10; + b->core.mtid = -1; + b->core.mpos = 0; + b->core.isize = -1; + size_t data_len = 10 + 4 + 5 + 10 + 12; + b->data = (uint8_t*)malloc(data_len); + memcpy(b->data, + "123456789\0" // q_name + "\x00\x00\x00\xA0" // cigar + "\x00\x00\x00\x00\x00" // qseq + "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" // qual + "RGZrg4hello\0" // aux + , data_len + ); + b->m_data = b->l_data = data_len; + + *b_in = b; +} + +void setup_test_5(bam1_t** b_in, trans_tbl_t* tbl) { + bam1_t* b; + + b = bam_init1(); + trans_tbl_test_init(tbl, 4); + + tbl->tid_trans[0] = 5; + tbl->tid_trans[1] = 6; + tbl->tid_trans[2] = 7; + tbl->tid_trans[3] = 8; + + + b->core.tid = 0; + b->core.pos = 1334; + b->core.bin = 0; + b->core.qual = 10; + b->core.l_qname = 10; + b->core.flag = 0; + b->core.n_cigar = 1; + b->core.l_qseq = 10; + b->core.mtid = -1; + b->core.mpos = 0; + b->core.isize = -1; + size_t data_len = 10 + 4 + 5 + 10 + 12; + b->data = (uint8_t*)malloc(data_len); + memcpy(b->data, + "123456789\0" // q_name + "\x00\x00\x00\xA0" // cigar + "\x00\x00\x00\x00\x00" // qseq + "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" // qual + "PGZpg5hello\0" // aux + , data_len + ); + b->m_data = b->l_data = data_len; + + *b_in = b; +} + +void setup_test_6(bam1_t** b_in, trans_tbl_t* tbl) { + bam1_t* b; + + b = bam_init1(); + trans_tbl_test_init(tbl, 4); + + tbl->tid_trans[0] = 5; + tbl->tid_trans[1] = 6; + tbl->tid_trans[2] = 7; + tbl->tid_trans[3] = 8; + int in_there = 0; + khiter_t iter_rg = kh_put(c2c, tbl->rg_trans, strdup("hello"), &in_there); + kh_value(tbl->rg_trans, iter_rg) = strdup("goodbye"); + khiter_t iter_pg = kh_put(c2c, tbl->pg_trans, strdup("quail"), &in_there); + kh_value(tbl->pg_trans, iter_pg) = strdup("bird"); + + + b->core.tid = 0; + b->core.pos = 1334; + b->core.bin = 0; + b->core.qual = 10; + b->core.l_qname = 10; + b->core.flag = 0; + b->core.n_cigar = 1; + b->core.l_qseq = 10; + b->core.mtid = -1; + b->core.mpos = 0; + b->core.isize = -1; + size_t data_len = 10 + 4 + 5 + 10 + 18; + b->data = (uint8_t*)malloc(data_len); + memcpy(b->data, + "123456789\0" // q_name + "\x00\x00\x00\xA0" // cigar + "\x00\x00\x00\x00\x00" // qseq + "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" // qual + "RGZhello\0PGZquail\0" // aux + , data_len + ); + b->m_data = b->l_data = data_len; + + *b_in = b; +} + + +int main(int argc, char**argv) +{ + // test state + const int NUM_TESTS = 6; + int verbose = 0; + int success = 0; + int failure = 0; + + int getopt_char; + while ((getopt_char = getopt(argc, argv, "v")) != -1) { + switch (getopt_char) { + case 'v': + ++verbose; + break; + default: + break; + } + } + + bam1_t* b; + + // Setup stderr redirect + kstring_t res = { 0, 0, NULL }; + FILE* orig_stderr = fdopen(dup(STDERR_FILENO), "a"); // Save stderr + char* tempfname = (optind < argc)? argv[optind] : "test_bam_translate.tmp"; + FILE* check = NULL; + + // setup + if (verbose) printf("BEGIN test 1\n"); // TID test + trans_tbl_t tbl1; + setup_test_1(&b,&tbl1); + if (verbose > 1) { + printf("b\n"); + dump_read(b); + } + if (verbose) printf("RUN test 1\n"); + + // test + xfreopen(tempfname, "w", stderr); // Redirect stderr to pipe + bam_translate(b, &tbl1); + fclose(stderr); + + if (verbose) printf("END RUN test 1\n"); + if (verbose > 1) { + printf("b\n"); + dump_read(b); + } + + // check result + check = fopen(tempfname, "r"); + res.l = 0; + if (kgetline(&res, (kgets_func *)fgets, check) < 0 && + (feof(check) || res.l == 0) ) { + ++success; + } else { + ++failure; + if (verbose) printf("FAIL test 1\n"); + } + fclose(check); + + // teardown + bam_destroy1(b); + trans_tbl_destroy(&tbl1); + if (verbose) printf("END test 1\n"); + + // setup + if (verbose) printf("BEGIN test 2\n"); // RG exists and translate test + trans_tbl_t tbl2; + setup_test_2(&b,&tbl2); + if (verbose > 1) { + printf("b\n"); + dump_read(b); + } + if (verbose) printf("RUN test 2\n"); + + // test + xfreopen(tempfname, "w", stderr); // Redirect stderr to pipe + bam_translate(b, &tbl2); + fclose(stderr); + + if (verbose) printf("END RUN test 2\n"); + if (verbose > 1) { + printf("b\n"); + dump_read(b); + } + + // check result + check = fopen(tempfname, "r"); + res.l = 0; + if (kgetline(&res, (kgets_func *)fgets, check) < 0 && + (feof(check) || res.l == 0) ) { + ++success; + } else { + ++failure; + if (verbose) printf("FAIL test 2\n"); + } + fclose(check); + + // teardown + bam_destroy1(b); + trans_tbl_destroy(&tbl2); + if (verbose) printf("END test 2\n"); + + if (verbose) printf("BEGIN test 3\n"); // PG exists and translate test + // setup + trans_tbl_t tbl3; + setup_test_3(&b,&tbl3); + if (verbose > 1) { + printf("b\n"); + dump_read(b); + } + if (verbose) printf("RUN test 3\n"); + + // test + xfreopen(tempfname, "w", stderr); // Redirect stderr to pipe + bam_translate(b, &tbl3); + fclose(stderr); + + if (verbose) printf("END RUN test 3\n"); + if (verbose > 1) { + printf("b\n"); + dump_read(b); + } + + // check result + check = fopen(tempfname, "r"); + res.l = 0; + if (kgetline(&res, (kgets_func *)fgets, check) < 0 && + (feof(check) || res.l == 0)) { + ++success; + } else { + ++failure; + if (verbose) printf("FAIL test 3\n"); + } + fclose(check); + + // teardown + bam_destroy1(b); + trans_tbl_destroy(&tbl3); + if (verbose) printf("END test 3\n"); + + if (verbose) printf("BEGIN test 4\n"); // RG test non-existent + // setup + trans_tbl_t tbl4; + setup_test_4(&b,&tbl4); + if (verbose > 1) { + printf("b\n"); + dump_read(b); + } + if (verbose) printf("RUN test 4\n"); + + // test + xfreopen(tempfname, "w", stderr); // Redirect stderr to pipe + bam_translate(b, &tbl4); + fclose(stderr); + + if (verbose) printf("END RUN test 4\n"); + if (verbose > 1) { + printf("b\n"); + dump_read(b); + } + // check result + check = fopen(tempfname, "r"); + res.l = 0; + if (kgetline(&res, (kgets_func *)fgets, check) >= 0 && + strcmp("[bam_translate] RG tag \"rg4hello\" on read \"123456789\" encountered with no corresponding entry in header, tag lost. Unknown tags are only reported once per input file for each tag ID.",res.s) == 0) { + ++success; + } else { + ++failure; + if (verbose) printf("FAIL test 4\n"); + } + fclose(check); + + // teardown + bam_destroy1(b); + trans_tbl_destroy(&tbl4); + if (verbose) printf("END test 4\n"); + + if (verbose) printf("BEGIN test 5\n"); // PG test non-existent + // setup + trans_tbl_t tbl5; + setup_test_5(&b,&tbl5); + if (verbose > 1) { + printf("b\n"); + dump_read(b); + printf("RUN test 5\n"); + } + // test + xfreopen(tempfname, "w", stderr); // Redirect stderr to pipe + bam_translate(b, &tbl5); + fclose(stderr); + + if (verbose) printf("END RUN test 5\n"); + if (verbose > 1) { + printf("b\n"); + dump_read(b); + } + + // check result + check = fopen(tempfname, "r"); + res.l = 0; + if (kgetline(&res, (kgets_func *)fgets, check) >= 0 && + strcmp("[bam_translate] PG tag \"pg5hello\" on read \"123456789\" encountered with no corresponding entry in header, tag lost. Unknown tags are only reported once per input file for each tag ID.",res.s) == 0) { + ++success; + } else { + ++failure; + if (verbose) printf("FAIL test 5\n"); + } + fclose(check); + + // teardown + bam_destroy1(b); + trans_tbl_destroy(&tbl5); + if (verbose) printf("END test 5\n"); + + if (verbose) printf("BEGIN test 6\n"); // RG and PG exists and translate test + // setup + trans_tbl_t tbl6; + setup_test_6(&b,&tbl6); + if (verbose > 1) { + printf("b\n"); + dump_read(b); + } + if (verbose) printf("RUN test 6\n"); + + // test + xfreopen(tempfname, "w", stderr); // Redirect stderr to pipe + bam_translate(b, &tbl6); + fclose(stderr); + + if (verbose) printf("END RUN test 6\n"); + if (verbose > 1) { + printf("b\n"); + dump_read(b); + } + + // check result + check = fopen(tempfname, "r"); + res.l = 0; + if (kgetline(&res, (kgets_func *)fgets, check) < 0 && + (feof(check) || res.l == 0) ) { + ++success; + } else { + ++failure; + if (verbose) printf("FAIL test 6\n"); + } + fclose(check); + + // teardown + bam_destroy1(b); + trans_tbl_destroy(&tbl6); + if (verbose) printf("END test 6\n"); + + // Cleanup + free(res.s); + remove(tempfname); + if (failure > 0) + fprintf(orig_stderr, "%d failures %d successes\n", failure, success); + fclose(orig_stderr); + + return (success == NUM_TESTS)? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/samtools/test/merge/test_bam_translate.c.pysam.c b/samtools/test/merge/test_bam_translate.c.pysam.c new file mode 100644 index 0000000..21db13c --- /dev/null +++ b/samtools/test/merge/test_bam_translate.c.pysam.c @@ -0,0 +1,600 @@ +#include "samtools.pysam.h" + +/* test/merge/test_bam_translate.c -- header merging test harness. + + Copyright (C) 2013, 2014 Genome Research Ltd. + + Author: Martin O. Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include "../../bam_sort.c" +#include "../test.h" +#include +#include +#include +#include +#include + +void dump_read(bam1_t* b) { + fprintf(samtools_stdout, "->core.tid:(%d)\n", b->core.tid); + fprintf(samtools_stdout, "->core.pos:(%d)\n", b->core.pos); + fprintf(samtools_stdout, "->core.bin:(%d)\n", b->core.bin); + fprintf(samtools_stdout, "->core.qual:(%d)\n", b->core.qual); + fprintf(samtools_stdout, "->core.l_qname:(%d)\n", b->core.l_qname); + fprintf(samtools_stdout, "->core.flag:(%d)\n", b->core.flag); + fprintf(samtools_stdout, "->core.n_cigar:(%d)\n", b->core.n_cigar); + fprintf(samtools_stdout, "->core.l_qseq:(%d)\n", b->core.l_qseq); + fprintf(samtools_stdout, "->core.mtid:(%d)\n", b->core.mtid); + fprintf(samtools_stdout, "->core.mpos:(%d)\n", b->core.mpos); + fprintf(samtools_stdout, "->core.isize:(%d)\n", b->core.isize); + if (b->data) { + fprintf(samtools_stdout, "->data:"); + int i; + for (i = 0; i < b->l_data; ++i) { + fprintf(samtools_stdout, "%x ", b->data[i]); + } + fprintf(samtools_stdout, "\n"); + } + if (b->core.l_qname) { + fprintf(samtools_stdout, "qname: %s\n",bam_get_qname(b)); + } + if (b->core.l_qseq) { + fprintf(samtools_stdout, "qseq:"); + int i; + for (i = 0; i < b->core.l_qseq; ++i) { + fprintf(samtools_stdout, "%c",seq_nt16_str[seq_nt16_table[bam_seqi(bam_get_seq(b),i)]]); + } + fprintf(samtools_stdout, "\n"); + fprintf(samtools_stdout, "qual:"); + for (i = 0; i < b->core.l_qseq; ++i) { + fprintf(samtools_stdout, "%c",bam_get_qual(b)[i]); + } + fprintf(samtools_stdout, "\n"); + + } + + if (bam_get_l_aux(b)) { + int i = 0; + uint8_t* aux = bam_get_aux(b); + + while (i < bam_get_l_aux(b)) { + fprintf(samtools_stdout, "%.2s:%c:",aux+i,*(aux+i+2)); + i += 2; + switch (*(aux+i)) { + case 'Z': + while (*(aux+1+i) != '\0') { putc(*(aux+1+i), samtools_stdout); ++i; } + break; + } + putc('\n',samtools_stdout); + ++i;++i; + } + } + fprintf(samtools_stdout, "\n"); +} + +void trans_tbl_test_init(trans_tbl_t* tbl, int32_t n_targets) +{ + tbl->tid_trans = (int*)calloc(n_targets, sizeof(int32_t)); + tbl->rg_trans = kh_init(c2c); + tbl->pg_trans = kh_init(c2c); +} + +void setup_test_1(bam1_t** b_in, trans_tbl_t* tbl) { + bam1_t* b; + + b = bam_init1(); + trans_tbl_test_init(tbl, 4); + + tbl->tid_trans[0] = 5; + tbl->tid_trans[1] = 6; + tbl->tid_trans[2] = 7; + tbl->tid_trans[3] = 8; + + + b->core.tid = 0; + b->core.pos = 1334; + b->core.bin = 0; + b->core.qual = 10; + b->core.l_qname = 10; + b->core.flag = 0; + b->core.n_cigar = 1; + b->core.l_qseq = 10; + b->core.mtid = -1; + b->core.mpos = 0; + b->core.isize = -1; + size_t data_len = 10 + 4 + 5 + 10 + 0; + b->data = (uint8_t*)malloc(data_len); + memcpy(b->data, + "123456789\0" // q_name + "\x00\x00\x00\xA0" // cigar + "\x00\x00\x00\x00\x00" // qseq + "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" // qual + "" // aux + , data_len + ); + b->m_data = b->l_data = data_len; + + *b_in = b; +} + +void setup_test_2(bam1_t** b_in, trans_tbl_t* tbl) { + bam1_t* b; + + b = bam_init1(); + trans_tbl_test_init(tbl, 4); + + tbl->tid_trans[0] = 5; + tbl->tid_trans[1] = 6; + tbl->tid_trans[2] = 7; + tbl->tid_trans[3] = 8; + int in_there = 0; + khiter_t iter = kh_put(c2c, tbl->rg_trans, strdup("hello"), &in_there); + kh_value(tbl->rg_trans, iter) = strdup("goodbye"); + + b->core.tid = 0; + b->core.pos = 1334; + b->core.bin = 0; + b->core.qual = 10; + b->core.l_qname = 10; + b->core.flag = 0; + b->core.n_cigar = 1; + b->core.l_qseq = 10; + b->core.mtid = -1; + b->core.mpos = 0; + b->core.isize = -1; + size_t data_len = 10 + 4 + 5 + 10 + 9; + b->data = (uint8_t*)malloc(data_len); + memcpy(b->data, + "123456789\0" // q_name + "\x00\x00\x00\xA0" // cigar + "\x00\x00\x00\x00\x00" // qseq + "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" // qual + "RGZhello\0" // aux + , data_len + ); + b->m_data = b->l_data = data_len; + + *b_in = b; +} + +void setup_test_3(bam1_t** b_in, trans_tbl_t* tbl) { + bam1_t* b; + + b = bam_init1(); + trans_tbl_test_init(tbl, 4); + + tbl->tid_trans[0] = 5; + tbl->tid_trans[1] = 6; + tbl->tid_trans[2] = 7; + tbl->tid_trans[3] = 8; + int in_there = 0; + khiter_t iter = kh_put(c2c, tbl->pg_trans, strdup("hello"), &in_there); + kh_value(tbl->pg_trans,iter) = strdup("goodbye"); + + + b->core.tid = 0; + b->core.pos = 1334; + b->core.bin = 0; + b->core.qual = 10; + b->core.l_qname = 10; + b->core.flag = 0; + b->core.n_cigar = 1; + b->core.l_qseq = 10; + b->core.mtid = -1; + b->core.mpos = 0; + b->core.isize = -1; + size_t data_len = 10 + 4 + 5 + 10 + 9; + b->data = (uint8_t*)malloc(data_len); + memcpy(b->data, + "123456789\0" // q_name + "\x00\x00\x00\xA0" // cigar + "\x00\x00\x00\x00\x00" // qseq + "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" // qual + "PGZhello\0" // aux + , data_len + ); + b->m_data = b->l_data = data_len; + + *b_in = b; +} + +void setup_test_4(bam1_t** b_in, trans_tbl_t* tbl) { + bam1_t* b; + + b = bam_init1(); + trans_tbl_test_init(tbl, 4); + + tbl->tid_trans[0] = 5; + tbl->tid_trans[1] = 6; + tbl->tid_trans[2] = 7; + tbl->tid_trans[3] = 8; + + b->core.tid = 0; + b->core.pos = 1334; + b->core.bin = 0; + b->core.qual = 10; + b->core.l_qname = 10; + b->core.flag = 0; + b->core.n_cigar = 1; + b->core.l_qseq = 10; + b->core.mtid = -1; + b->core.mpos = 0; + b->core.isize = -1; + size_t data_len = 10 + 4 + 5 + 10 + 12; + b->data = (uint8_t*)malloc(data_len); + memcpy(b->data, + "123456789\0" // q_name + "\x00\x00\x00\xA0" // cigar + "\x00\x00\x00\x00\x00" // qseq + "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" // qual + "RGZrg4hello\0" // aux + , data_len + ); + b->m_data = b->l_data = data_len; + + *b_in = b; +} + +void setup_test_5(bam1_t** b_in, trans_tbl_t* tbl) { + bam1_t* b; + + b = bam_init1(); + trans_tbl_test_init(tbl, 4); + + tbl->tid_trans[0] = 5; + tbl->tid_trans[1] = 6; + tbl->tid_trans[2] = 7; + tbl->tid_trans[3] = 8; + + + b->core.tid = 0; + b->core.pos = 1334; + b->core.bin = 0; + b->core.qual = 10; + b->core.l_qname = 10; + b->core.flag = 0; + b->core.n_cigar = 1; + b->core.l_qseq = 10; + b->core.mtid = -1; + b->core.mpos = 0; + b->core.isize = -1; + size_t data_len = 10 + 4 + 5 + 10 + 12; + b->data = (uint8_t*)malloc(data_len); + memcpy(b->data, + "123456789\0" // q_name + "\x00\x00\x00\xA0" // cigar + "\x00\x00\x00\x00\x00" // qseq + "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" // qual + "PGZpg5hello\0" // aux + , data_len + ); + b->m_data = b->l_data = data_len; + + *b_in = b; +} + +void setup_test_6(bam1_t** b_in, trans_tbl_t* tbl) { + bam1_t* b; + + b = bam_init1(); + trans_tbl_test_init(tbl, 4); + + tbl->tid_trans[0] = 5; + tbl->tid_trans[1] = 6; + tbl->tid_trans[2] = 7; + tbl->tid_trans[3] = 8; + int in_there = 0; + khiter_t iter_rg = kh_put(c2c, tbl->rg_trans, strdup("hello"), &in_there); + kh_value(tbl->rg_trans, iter_rg) = strdup("goodbye"); + khiter_t iter_pg = kh_put(c2c, tbl->pg_trans, strdup("quail"), &in_there); + kh_value(tbl->pg_trans, iter_pg) = strdup("bird"); + + + b->core.tid = 0; + b->core.pos = 1334; + b->core.bin = 0; + b->core.qual = 10; + b->core.l_qname = 10; + b->core.flag = 0; + b->core.n_cigar = 1; + b->core.l_qseq = 10; + b->core.mtid = -1; + b->core.mpos = 0; + b->core.isize = -1; + size_t data_len = 10 + 4 + 5 + 10 + 18; + b->data = (uint8_t*)malloc(data_len); + memcpy(b->data, + "123456789\0" // q_name + "\x00\x00\x00\xA0" // cigar + "\x00\x00\x00\x00\x00" // qseq + "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" // qual + "RGZhello\0PGZquail\0" // aux + , data_len + ); + b->m_data = b->l_data = data_len; + + *b_in = b; +} + + +int samtools_test_bam_translate_main(int argc, char**argv) +{ + // test state + const int NUM_TESTS = 6; + int verbose = 0; + int success = 0; + int failure = 0; + + int getopt_char; + while ((getopt_char = getopt(argc, argv, "v")) != -1) { + switch (getopt_char) { + case 'v': + ++verbose; + break; + default: + break; + } + } + + bam1_t* b; + + // Setup samtools_stderr redirect + kstring_t res = { 0, 0, NULL }; + FILE* orig_samtools_stderr = fdopen(dup(STDERR_FILENO), "a"); // Save samtools_stderr + char* tempfname = (optind < argc)? argv[optind] : "test_bam_translate.tmp"; + FILE* check = NULL; + + // setup + if (verbose) fprintf(samtools_stdout, "BEGIN test 1\n"); // TID test + trans_tbl_t tbl1; + setup_test_1(&b,&tbl1); + if (verbose > 1) { + fprintf(samtools_stdout, "b\n"); + dump_read(b); + } + if (verbose) fprintf(samtools_stdout, "RUN test 1\n"); + + // test + xfreopen(tempfname, "w", samtools_stderr); // Redirect samtools_stderr to pipe + bam_translate(b, &tbl1); + fclose(samtools_stderr); + + if (verbose) fprintf(samtools_stdout, "END RUN test 1\n"); + if (verbose > 1) { + fprintf(samtools_stdout, "b\n"); + dump_read(b); + } + + // check result + check = fopen(tempfname, "r"); + res.l = 0; + if (kgetline(&res, (kgets_func *)fgets, check) < 0 && + (feof(check) || res.l == 0) ) { + ++success; + } else { + ++failure; + if (verbose) fprintf(samtools_stdout, "FAIL test 1\n"); + } + fclose(check); + + // teardown + bam_destroy1(b); + trans_tbl_destroy(&tbl1); + if (verbose) fprintf(samtools_stdout, "END test 1\n"); + + // setup + if (verbose) fprintf(samtools_stdout, "BEGIN test 2\n"); // RG exists and translate test + trans_tbl_t tbl2; + setup_test_2(&b,&tbl2); + if (verbose > 1) { + fprintf(samtools_stdout, "b\n"); + dump_read(b); + } + if (verbose) fprintf(samtools_stdout, "RUN test 2\n"); + + // test + xfreopen(tempfname, "w", samtools_stderr); // Redirect samtools_stderr to pipe + bam_translate(b, &tbl2); + fclose(samtools_stderr); + + if (verbose) fprintf(samtools_stdout, "END RUN test 2\n"); + if (verbose > 1) { + fprintf(samtools_stdout, "b\n"); + dump_read(b); + } + + // check result + check = fopen(tempfname, "r"); + res.l = 0; + if (kgetline(&res, (kgets_func *)fgets, check) < 0 && + (feof(check) || res.l == 0) ) { + ++success; + } else { + ++failure; + if (verbose) fprintf(samtools_stdout, "FAIL test 2\n"); + } + fclose(check); + + // teardown + bam_destroy1(b); + trans_tbl_destroy(&tbl2); + if (verbose) fprintf(samtools_stdout, "END test 2\n"); + + if (verbose) fprintf(samtools_stdout, "BEGIN test 3\n"); // PG exists and translate test + // setup + trans_tbl_t tbl3; + setup_test_3(&b,&tbl3); + if (verbose > 1) { + fprintf(samtools_stdout, "b\n"); + dump_read(b); + } + if (verbose) fprintf(samtools_stdout, "RUN test 3\n"); + + // test + xfreopen(tempfname, "w", samtools_stderr); // Redirect samtools_stderr to pipe + bam_translate(b, &tbl3); + fclose(samtools_stderr); + + if (verbose) fprintf(samtools_stdout, "END RUN test 3\n"); + if (verbose > 1) { + fprintf(samtools_stdout, "b\n"); + dump_read(b); + } + + // check result + check = fopen(tempfname, "r"); + res.l = 0; + if (kgetline(&res, (kgets_func *)fgets, check) < 0 && + (feof(check) || res.l == 0)) { + ++success; + } else { + ++failure; + if (verbose) fprintf(samtools_stdout, "FAIL test 3\n"); + } + fclose(check); + + // teardown + bam_destroy1(b); + trans_tbl_destroy(&tbl3); + if (verbose) fprintf(samtools_stdout, "END test 3\n"); + + if (verbose) fprintf(samtools_stdout, "BEGIN test 4\n"); // RG test non-existent + // setup + trans_tbl_t tbl4; + setup_test_4(&b,&tbl4); + if (verbose > 1) { + fprintf(samtools_stdout, "b\n"); + dump_read(b); + } + if (verbose) fprintf(samtools_stdout, "RUN test 4\n"); + + // test + xfreopen(tempfname, "w", samtools_stderr); // Redirect samtools_stderr to pipe + bam_translate(b, &tbl4); + fclose(samtools_stderr); + + if (verbose) fprintf(samtools_stdout, "END RUN test 4\n"); + if (verbose > 1) { + fprintf(samtools_stdout, "b\n"); + dump_read(b); + } + // check result + check = fopen(tempfname, "r"); + res.l = 0; + if (kgetline(&res, (kgets_func *)fgets, check) >= 0 && + strcmp("[bam_translate] RG tag \"rg4hello\" on read \"123456789\" encountered with no corresponding entry in header, tag lost. Unknown tags are only reported once per input file for each tag ID.",res.s) == 0) { + ++success; + } else { + ++failure; + if (verbose) fprintf(samtools_stdout, "FAIL test 4\n"); + } + fclose(check); + + // teardown + bam_destroy1(b); + trans_tbl_destroy(&tbl4); + if (verbose) fprintf(samtools_stdout, "END test 4\n"); + + if (verbose) fprintf(samtools_stdout, "BEGIN test 5\n"); // PG test non-existent + // setup + trans_tbl_t tbl5; + setup_test_5(&b,&tbl5); + if (verbose > 1) { + fprintf(samtools_stdout, "b\n"); + dump_read(b); + fprintf(samtools_stdout, "RUN test 5\n"); + } + // test + xfreopen(tempfname, "w", samtools_stderr); // Redirect samtools_stderr to pipe + bam_translate(b, &tbl5); + fclose(samtools_stderr); + + if (verbose) fprintf(samtools_stdout, "END RUN test 5\n"); + if (verbose > 1) { + fprintf(samtools_stdout, "b\n"); + dump_read(b); + } + + // check result + check = fopen(tempfname, "r"); + res.l = 0; + if (kgetline(&res, (kgets_func *)fgets, check) >= 0 && + strcmp("[bam_translate] PG tag \"pg5hello\" on read \"123456789\" encountered with no corresponding entry in header, tag lost. Unknown tags are only reported once per input file for each tag ID.",res.s) == 0) { + ++success; + } else { + ++failure; + if (verbose) fprintf(samtools_stdout, "FAIL test 5\n"); + } + fclose(check); + + // teardown + bam_destroy1(b); + trans_tbl_destroy(&tbl5); + if (verbose) fprintf(samtools_stdout, "END test 5\n"); + + if (verbose) fprintf(samtools_stdout, "BEGIN test 6\n"); // RG and PG exists and translate test + // setup + trans_tbl_t tbl6; + setup_test_6(&b,&tbl6); + if (verbose > 1) { + fprintf(samtools_stdout, "b\n"); + dump_read(b); + } + if (verbose) fprintf(samtools_stdout, "RUN test 6\n"); + + // test + xfreopen(tempfname, "w", samtools_stderr); // Redirect samtools_stderr to pipe + bam_translate(b, &tbl6); + fclose(samtools_stderr); + + if (verbose) fprintf(samtools_stdout, "END RUN test 6\n"); + if (verbose > 1) { + fprintf(samtools_stdout, "b\n"); + dump_read(b); + } + + // check result + check = fopen(tempfname, "r"); + res.l = 0; + if (kgetline(&res, (kgets_func *)fgets, check) < 0 && + (feof(check) || res.l == 0) ) { + ++success; + } else { + ++failure; + if (verbose) fprintf(samtools_stdout, "FAIL test 6\n"); + } + fclose(check); + + // teardown + bam_destroy1(b); + trans_tbl_destroy(&tbl6); + if (verbose) fprintf(samtools_stdout, "END test 6\n"); + + // Cleanup + free(res.s); + remove(tempfname); + if (failure > 0) + fprintf(orig_samtools_stderr, "%d failures %d successes\n", failure, success); + fclose(orig_samtools_stderr); + + return (success == NUM_TESTS)? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/samtools/test/merge/test_rtrans_build.c b/samtools/test/merge/test_rtrans_build.c new file mode 100644 index 0000000..0f23b48 --- /dev/null +++ b/samtools/test/merge/test_rtrans_build.c @@ -0,0 +1,120 @@ +/* test/merge/test_rtrans_build.c -- header translation test harness. + + Copyright (C) 2013, 2014 Genome Research Ltd. + + Author: Martin O. Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include "../../bam_sort.c" + +void dump_rtrans(int* rtrans, int n, int n_targets) { + printf("->n_targets:(%d)\n", n_targets); + int i, j; + for (i = 0; i < n; ++i) { + fprintf(stderr, "%d",rtrans[i*n_targets+0]); + for (j = 1; j < n_targets; ++j) + fprintf(stderr, "\t%d",rtrans[i*n_targets+j]); + fprintf(stderr, "\n"); + } +} + +void setup_test_1(trans_tbl_t* tbl) { + tbl[0].n_targets = 2; + tbl[0].tid_trans = calloc(sizeof(int), 2); + tbl[0].tid_trans[0] = 0; + tbl[0].tid_trans[1] = 1; + tbl[0].rg_trans = kh_init(c2c); + tbl[0].pg_trans = kh_init(c2c); + + tbl[1].n_targets = 2; + tbl[1].tid_trans = calloc(sizeof(int), 2); + tbl[1].tid_trans[0] = 1; + tbl[1].tid_trans[1] = 2; + tbl[1].rg_trans = kh_init(c2c); + tbl[1].pg_trans = kh_init(c2c); +} + +bool check_test_1(trans_tbl_t* tbl, int* rtrans) { + // Check input is unchanged + + // Check output + + return true; +} + + +int main(int argc, char**argv) +{ + const int NUM_TESTS = 1; + int verbose = 0; + int success = 0; + int failure = 0; + int getopt_char; + while ((getopt_char = getopt(argc, argv, "v")) != -1) { + switch (getopt_char) { + case 'v': + ++verbose; + break; + default: + break; + } + } + const long GIMMICK_SEED = 0x1234330e; + srand48(GIMMICK_SEED); + + if (verbose) printf("BEGIN test 1\n"); + // setup + trans_tbl_t tbl_1[2]; + int n_targets_1 = 3; + int n_1 = 2; + int* rtrans_1 = NULL; + setup_test_1(&tbl_1[0]); + // test + if (verbose > 1) { + // dump_trans_tid + } + if (verbose) printf("RUN test 1\n"); + rtrans_1 = rtrans_build(n_1, n_targets_1, &tbl_1[0]); + if (verbose) printf("END RUN test 1\n"); + if (verbose > 1) { + printf("rtrans\n"); + dump_rtrans(rtrans_1, n_1, n_targets_1); + } + if (check_test_1(&tbl_1[0], rtrans_1)) { + ++success; + } else { + ++failure; + if (verbose) printf("FAIL test 1\n"); + } + // teardown + trans_tbl_destroy(&tbl_1[0]); + trans_tbl_destroy(&tbl_1[1]); + free(rtrans_1); + if (verbose) printf("END test 1\n"); + + if (success == NUM_TESTS) { + return 0; + } else { + fprintf(stderr, "%d failures %d successes\n", failure, success); + return 1; + } +} diff --git a/samtools/test/merge/test_rtrans_build.c.pysam.c b/samtools/test/merge/test_rtrans_build.c.pysam.c new file mode 100644 index 0000000..5ba47e7 --- /dev/null +++ b/samtools/test/merge/test_rtrans_build.c.pysam.c @@ -0,0 +1,122 @@ +#include "samtools.pysam.h" + +/* test/merge/test_rtrans_build.c -- header translation test harness. + + Copyright (C) 2013, 2014 Genome Research Ltd. + + Author: Martin O. Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include "../../bam_sort.c" + +void dump_rtrans(int* rtrans, int n, int n_targets) { + fprintf(samtools_stdout, "->n_targets:(%d)\n", n_targets); + int i, j; + for (i = 0; i < n; ++i) { + fprintf(samtools_stderr, "%d",rtrans[i*n_targets+0]); + for (j = 1; j < n_targets; ++j) + fprintf(samtools_stderr, "\t%d",rtrans[i*n_targets+j]); + fprintf(samtools_stderr, "\n"); + } +} + +void setup_test_1(trans_tbl_t* tbl) { + tbl[0].n_targets = 2; + tbl[0].tid_trans = calloc(sizeof(int), 2); + tbl[0].tid_trans[0] = 0; + tbl[0].tid_trans[1] = 1; + tbl[0].rg_trans = kh_init(c2c); + tbl[0].pg_trans = kh_init(c2c); + + tbl[1].n_targets = 2; + tbl[1].tid_trans = calloc(sizeof(int), 2); + tbl[1].tid_trans[0] = 1; + tbl[1].tid_trans[1] = 2; + tbl[1].rg_trans = kh_init(c2c); + tbl[1].pg_trans = kh_init(c2c); +} + +bool check_test_1(trans_tbl_t* tbl, int* rtrans) { + // Check input is unchanged + + // Check output + + return true; +} + + +int samtools_test_rtrans_build_main(int argc, char**argv) +{ + const int NUM_TESTS = 1; + int verbose = 0; + int success = 0; + int failure = 0; + int getopt_char; + while ((getopt_char = getopt(argc, argv, "v")) != -1) { + switch (getopt_char) { + case 'v': + ++verbose; + break; + default: + break; + } + } + const long GIMMICK_SEED = 0x1234330e; + srand48(GIMMICK_SEED); + + if (verbose) fprintf(samtools_stdout, "BEGIN test 1\n"); + // setup + trans_tbl_t tbl_1[2]; + int n_targets_1 = 3; + int n_1 = 2; + int* rtrans_1 = NULL; + setup_test_1(&tbl_1[0]); + // test + if (verbose > 1) { + // dump_trans_tid + } + if (verbose) fprintf(samtools_stdout, "RUN test 1\n"); + rtrans_1 = rtrans_build(n_1, n_targets_1, &tbl_1[0]); + if (verbose) fprintf(samtools_stdout, "END RUN test 1\n"); + if (verbose > 1) { + fprintf(samtools_stdout, "rtrans\n"); + dump_rtrans(rtrans_1, n_1, n_targets_1); + } + if (check_test_1(&tbl_1[0], rtrans_1)) { + ++success; + } else { + ++failure; + if (verbose) fprintf(samtools_stdout, "FAIL test 1\n"); + } + // teardown + trans_tbl_destroy(&tbl_1[0]); + trans_tbl_destroy(&tbl_1[1]); + free(rtrans_1); + if (verbose) fprintf(samtools_stdout, "END test 1\n"); + + if (success == NUM_TESTS) { + return 0; + } else { + fprintf(samtools_stderr, "%d failures %d successes\n", failure, success); + return 1; + } +} diff --git a/samtools/test/merge/test_trans_tbl_init.c b/samtools/test/merge/test_trans_tbl_init.c new file mode 100644 index 0000000..d557932 --- /dev/null +++ b/samtools/test/merge/test_trans_tbl_init.c @@ -0,0 +1,576 @@ +/* test/merge/test_trans_tbl_init.c -- merge test harness. + + Copyright (C) 2013, 2014 Genome Research Ltd. + + Author: Martin O. Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include "../../bam_sort.c" +#include +#include + +typedef struct refseq_info { + const char *name; + uint32_t len; +} refseq_info_t; + +void dump_header(bam_hdr_t* hdr) { + printf("->n_targets:(%d)\n", hdr->n_targets); + int i; + for (i = 0; i < hdr->n_targets; ++i) { + printf("->target_name[%d]:(%s)\n",i,hdr->target_name[i]); + printf("->target_len[%d]:(%d)\n",i,hdr->target_len[i]); + } + + printf("->text:("); + fwrite((void*)hdr->text, (size_t) hdr->l_text, 1, stdout); + printf(")\n"); +} + +static int populate_merged_header(bam_hdr_t *hdr, merged_header_t *merged_hdr) { + trans_tbl_t dummy; + int res; + res = trans_tbl_init(merged_hdr, hdr, &dummy, 0, 0, 1, NULL); + trans_tbl_destroy(&dummy); + return res; +} + +/* + * Populate merged_hdr with data from bam0_header_text and bam0_refseqs. + * Return bam_hdr_t based on the content in bam1_header_text and bam1_refseqs. + */ + +bam_hdr_t * setup_test(const char *bam0_header_text, + const refseq_info_t *bam0_refseqs, + int32_t bam0_n_refseqs, + const char *bam1_header_text, + const refseq_info_t *bam1_refseqs, + int32_t bam1_n_refseqs, + merged_header_t *merged_hdr) { + bam_hdr_t* bam0 = NULL; + bam_hdr_t* bam1 = NULL; + int32_t i; + + bam0 = bam_hdr_init(); + bam0->text = strdup(bam0_header_text); + if (!bam0->text) goto fail; + bam0->l_text = strlen(bam0_header_text); + bam0->n_targets = 1; + bam0->target_name = (char**)calloc(bam0_n_refseqs, sizeof(char*)); + bam0->target_len = (uint32_t*)calloc(bam0_n_refseqs, sizeof(uint32_t)); + for (i = 0; i < bam0_n_refseqs; i++) { + bam0->target_name[i] = strdup(bam0_refseqs[i].name); + if (!bam0->target_name[i]) goto fail; + bam0->target_len[i] = bam0_refseqs[i].len; + } + + if (populate_merged_header(bam0, merged_hdr)) goto fail; + + bam1 = bam_hdr_init(); + if (!bam1) goto fail; + bam1->text = strdup(bam1_header_text); + if (!bam1->text) goto fail; + bam1->l_text = strlen(bam1_header_text); + bam1->n_targets = bam1_n_refseqs; + bam1->target_name = (char**)calloc(bam1_n_refseqs, sizeof(char*)); + bam1->target_len = (uint32_t*)calloc(bam1_n_refseqs, sizeof(uint32_t)); + for (i = 0; i < bam1_n_refseqs; i++) { + bam1->target_name[i] = strdup(bam1_refseqs[i].name); + if (!bam1->target_name[i]) goto fail; + bam1->target_len[i] = bam1_refseqs[i].len; + } + + bam_hdr_destroy(bam0); + return bam1; + + fail: + bam_hdr_destroy(bam1); + bam_hdr_destroy(bam0); + return NULL; +} + +#define NELE(x) (sizeof((x)) / sizeof((x)[0])) + +static const char init_text[] = + "@HD\tVN:1.4\tSO:unknown\n" + "@SQ\tSN:fish\tLN:133\tSP:frog"; + +static const refseq_info_t init_refs[1] = { + { "fish", 133 } +}; + +static const char test_1_trans_text[] = +"@HD\tVN:1.4\tSO:unknown\n" +"@SQ\tSN:fish\tLN:133\n"; + +static const refseq_info_t test_1_refs[1] = { + { "fish", 133 } +}; + +bam_hdr_t * setup_test_1(merged_header_t *merged_hdr) { + return setup_test(init_text, init_refs, NELE(init_refs), + test_1_trans_text, test_1_refs, NELE(test_1_refs), + merged_hdr); +} + +bool check_test_1(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) { + // Check input is unchanged + if ( + strncmp(test_1_trans_text, translate->text, translate->l_text) + || translate->l_text != strlen( test_1_trans_text) + || translate->n_targets != 1 + ) return false; + + // Check output header + const char out_regex[] = + "^@HD\tVN:1.4\tSO:unknown\n" + "@SQ\tSN:fish\tLN:133\tSP:frog\n$"; + + regex_t check_regex; + regcomp(&check_regex, out_regex, REG_EXTENDED|REG_NOSUB); + + if ( regexec(&check_regex, out->text, 0, NULL, 0) != 0 || out->n_targets != 1 ) return false; + + regfree(&check_regex); + + // Check output tbl + if (tbl[0].n_targets != 1 || tbl[0].tid_trans[0] != 0 || tbl[0].lost_coord_sort) return false; + + return true; +} + +static const char test_2_trans_text[] = +"@HD\tVN:1.4\tSO:unknown\n" +"@SQ\tSN:donkey\tLN:133\n" +"@SQ\tSN:fish\tLN:133"; + +static const refseq_info_t test_2_refs[2] = { + { "donkey", 133 }, + { "fish", 133 } +}; + +bam_hdr_t * setup_test_2(merged_header_t *merged_hdr) { + return setup_test(init_text, init_refs, NELE(init_refs), + test_2_trans_text, test_2_refs, NELE(test_2_refs), + merged_hdr); +} + +bool check_test_2(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) { + // Check input is unchanged + if ( + strncmp(test_2_trans_text, translate->text, translate->l_text) + || translate->l_text != strlen(test_2_trans_text) + || translate->n_targets != 2 + ) return false; + + // Check output header + const char out_regex[] = + "^@HD\tVN:1.4\tSO:unknown\n" + "@SQ\tSN:fish\tLN:133\tSP:frog\n" + "@SQ\tSN:donkey\tLN:133\n$"; + + regex_t check_regex; + regcomp(&check_regex, out_regex, REG_EXTENDED|REG_NOSUB); + + if ( regexec(&check_regex, out->text, 0, NULL, 0) != 0 || out->n_targets != 2 ) return false; + + regfree(&check_regex); + + // Check output tbl + if (tbl[0].n_targets != 2 || tbl[0].tid_trans[0] != 1 || tbl[0].tid_trans[1] != 0) return false; + + return true; +} + +static const char test_3_trans_text[] = +"@HD\tVN:1.4\tSO:unknown\n" +"@SQ\tSN:donkey\tLN:133\n" +"@SQ\tSN:fish\tLN:133\n" +"@RG\tID:fish\tPU:trans\n"; + +static const refseq_info_t test_3_refs[2] = { + { "donkey", 133 }, + { "fish", 133 } +}; + +bam_hdr_t * setup_test_3(merged_header_t *merged_hdr) { + return setup_test(init_text, init_refs, NELE(init_refs), + test_3_trans_text, test_3_refs, NELE(test_3_refs), + merged_hdr); +} + +bool check_test_3(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) { + // Check input is unchanged + if ( + strncmp(test_3_trans_text, translate->text, translate->l_text) + || translate->l_text != strlen(test_3_trans_text) + || translate->n_targets != 2 + ) return false; + return true; +} + +static const char test_4_trans_text[] = +"@HD\tVN:1.4\tSO:unknown\n" +"@SQ\tSN:donkey\tLN:133\n" +"@SQ\tSN:fish\tLN:133\n" +"@RG\tID:fish\tPU:trans\n"; + +static const refseq_info_t test_4_refs[2] = { + { "donkey", 133 }, + { "fish", 133 } +}; + +bam_hdr_t * setup_test_4(merged_header_t *merged_hdr) { + const char* t4_init_text = + "@HD\tVN:1.4\tSO:unknown\n" + "@SQ\tSN:fish\tLN:133\tSP:frog\n" + "@RG\tID:fish\tPU:out\n"; + + return setup_test(t4_init_text, init_refs, NELE(init_refs), + test_4_trans_text, test_4_refs, NELE(test_4_refs), + merged_hdr); +} + +bool check_test_4(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) { + // Check input is unchanged + if ( + strncmp(test_4_trans_text, translate->text, translate->l_text) + || translate->l_text != strlen(test_4_trans_text) + || translate->n_targets != 2 + ) return false; + return true; +} + +static const char test_5_trans_text[] = +"@HD\tVN:1.4\tSO:unknown\n" +"@SQ\tSN:donkey\tLN:133\n" +"@SQ\tSN:fish\tLN:133\n" +"@RG\tID:fish\tPU:trans\n" +"@PG\tXX:dummy\tID:fish\tDS:trans\n" +"@PG\tPP:fish\tID:hook\tDS:trans\n"; + +static const refseq_info_t test_5_refs[2] = { + { "donkey", 133 }, + { "fish", 133 } +}; + +bam_hdr_t * setup_test_5(merged_header_t *merged_hdr) { + const char* t5_init_text = + "@HD\tVN:1.4\tSO:unknown\n" + "@SQ\tSN:fish\tLN:133\tSP:frog\n" + "@RG\tID:fish\tPU:out\n" + "@PG\tXX:dummyx\tID:fish\tDS:out\n" + "@PG\tPP:fish\tID:hook\tDS:out\n"; + + return setup_test(t5_init_text, init_refs, NELE(init_refs), + test_5_trans_text, test_5_refs, NELE(test_5_refs), + merged_hdr); +} + +bool check_test_5(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) { + // Check input is unchanged + if ( + strncmp(test_5_trans_text, translate->text, translate->l_text) + || translate->l_text != strlen(test_5_trans_text) + || translate->n_targets != 2 + ) return false; + return true; +} + +static const char test_6_trans_text[] = +"@HD\tVN:1.4\tSO:unknown\n" +"@SQ\tSN:donkey\tLN:133\n" +"@SQ\tSN:fish\tLN:133\n" +"@RG\tID:fish\tPU:trans\n" +"@PG\tXX:dummy\tID:fish\tDS:trans\n" +"@PG\tPP:fish\tID:hook\tDS:trans\n"; + +static const refseq_info_t test_6_refs[2] = { + { "donkey", 133 }, + { "fish", 133 } +}; + +bam_hdr_t * setup_test_6(merged_header_t *merged_hdr) { + return setup_test(init_text, init_refs, NELE(init_refs), + test_6_trans_text, test_6_refs, NELE(test_6_refs), + merged_hdr); +} + +bool check_test_6(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) { + // Check input is unchanged + if ( + strncmp(test_6_trans_text, translate->text, translate->l_text) + || translate->l_text != strlen(test_5_trans_text) + || translate->n_targets != 2 + ) return false; + return true; +} + +int main(int argc, char**argv) +{ + const int NUM_TESTS = 6; + int verbose = 0; + int success = 0; + int failure = 0; + int getopt_char; + while ((getopt_char = getopt(argc, argv, "v")) != -1) { + switch (getopt_char) { + case 'v': + ++verbose; + break; + default: + break; + } + } + + // Set the seed to a fixed value so that calls to lrand48 within functions return predictable values + const long GIMMICK_SEED = 0x1234330e; + srand48(GIMMICK_SEED); + + bam_hdr_t* out; + bam_hdr_t* translate; + + if (verbose) printf("BEGIN test 1\n"); + // setup + trans_tbl_t tbl_1; + merged_header_t *merged_hdr = init_merged_header(); + translate = setup_test_1(merged_hdr); + assert(translate); + // test + if (verbose > 1) { + printf("translate\n"); + dump_header(translate); + } + if (verbose) printf("RUN test 1\n"); + trans_tbl_init(merged_hdr, translate, &tbl_1, false, false, true, NULL); + out = finish_merged_header(merged_hdr); + free_merged_header(merged_hdr); + if (verbose) printf("END RUN test 1\n"); + if (verbose > 1) { + printf("translate\n"); + dump_header(translate); + printf("out\n"); + dump_header(out); + } + if (check_test_1(translate, out, &tbl_1)) { + if (verbose) printf("Test 1 : PASS\n"); + ++success; + } else { + if (verbose) printf("Test 1 : FAIL\n"); + fprintf(stderr, "Test 1 : FAIL\n"); + ++failure; + } + // teardown + bam_hdr_destroy(translate); + bam_hdr_destroy(out); + trans_tbl_destroy(&tbl_1); + if (verbose) printf("END test 1\n"); + + // test + if (verbose) printf("BEGIN test 2\n"); + // reinit + trans_tbl_t tbl_2; + + merged_hdr = init_merged_header(); + translate = setup_test_2(merged_hdr); + assert(translate); + if (verbose > 1) { + printf("translate\n"); + dump_header(translate); + } + if (verbose) printf("RUN test 2\n"); + trans_tbl_init(merged_hdr, translate, &tbl_2, false, false, true, NULL); + out = finish_merged_header(merged_hdr); + free_merged_header(merged_hdr); + if (verbose) printf("END RUN test 2\n"); + if (verbose > 1) { + printf("translate\n"); + dump_header(translate); + printf("out\n"); + dump_header(out); + } + if (check_test_2(translate, out, &tbl_2)) { + if (verbose) printf("Test 2 : PASS\n"); + ++success; + } else { + if (verbose) printf("Test 2 : FAIL\n"); + fprintf(stderr, "Test 2 : FAIL\n"); + ++failure; + } + // teardown + bam_hdr_destroy(translate); + bam_hdr_destroy(out); + trans_tbl_destroy(&tbl_2); + if (verbose) printf("END test 2\n"); + + // test + if (verbose) printf("BEGIN test 3\n"); + // reinit + trans_tbl_t tbl_3; + merged_hdr = init_merged_header(); + translate = setup_test_3(merged_hdr); + assert(translate); + if (verbose > 1) { + printf("translate\n"); + dump_header(translate); + } + if (verbose) printf("RUN test 3\n"); + trans_tbl_init(merged_hdr, translate, &tbl_3, false, false, true, NULL); + out = finish_merged_header(merged_hdr); + free_merged_header(merged_hdr); + if (verbose) printf("END RUN test 3\n"); + if (verbose > 1) { + printf("translate\n"); + dump_header(translate); + printf("out\n"); + dump_header(out); + } + if (check_test_3(translate, out, &tbl_3)) { + if (verbose) printf("Test 3 : PASS\n"); + ++success; + } else { + if (verbose) printf("Test 3 : FAIL\n"); + fprintf(stderr, "Test 3 : FAIL\n"); + ++failure; + } + // teardown + bam_hdr_destroy(translate); + bam_hdr_destroy(out); + trans_tbl_destroy(&tbl_3); + if (verbose) printf("END test 3\n"); + + // test + if (verbose) printf("BEGIN test 4\n"); + // reinit + trans_tbl_t tbl_4; + merged_hdr = init_merged_header(); + translate = setup_test_4(merged_hdr); + assert(translate); + if (verbose > 1) { + printf("translate\n"); + dump_header(translate); + } + if (verbose) printf("RUN test 4\n"); + trans_tbl_init(merged_hdr, translate, &tbl_4, false, false, true, NULL); + out = finish_merged_header(merged_hdr); + free_merged_header(merged_hdr); + if (verbose) printf("END RUN test 4\n"); + if (verbose > 1) { + printf("translate\n"); + dump_header(translate); + printf("out\n"); + dump_header(out); + } + if (check_test_4(translate, out, &tbl_4)) { + if (verbose) printf("Test 4 : PASS\n"); + ++success; + } else { + if (verbose) printf("Test 4 : FAIL\n"); + fprintf(stderr, "Test 4 : FAIL\n"); + ++failure; + } + // teardown + bam_hdr_destroy(translate); + bam_hdr_destroy(out); + trans_tbl_destroy(&tbl_4); + if (verbose) printf("END test 4\n"); + + // test + if (verbose) printf("BEGIN test 5\n"); + // reinit + trans_tbl_t tbl_5; + merged_hdr = init_merged_header(); + translate = setup_test_5(merged_hdr); + assert(translate); + if (verbose > 1) { + + printf("translate\n"); + dump_header(translate); + } + if (verbose) printf("RUN test 5\n"); + trans_tbl_init(merged_hdr, translate, &tbl_5, false, false, true, NULL); + out = finish_merged_header(merged_hdr); + free_merged_header(merged_hdr); + if (verbose) printf("END RUN test 5\n"); + if (verbose > 1) { + printf("translate\n"); + dump_header(translate); + printf("out\n"); + dump_header(out); + } + if (check_test_5(translate, out, &tbl_5)) { + if (verbose) printf("Test 5 : PASS\n"); + ++success; + } else { + if (verbose) printf("Test 5 : FAIL\n"); + fprintf(stderr, "Test 5 : FAIL\n"); + ++failure; + } + // teardown + bam_hdr_destroy(translate); + bam_hdr_destroy(out); + trans_tbl_destroy(&tbl_5); + if (verbose) printf("END test 5\n"); + + // test + if (verbose) printf("BEGIN test 6\n"); + // reinit + trans_tbl_t tbl_6; + merged_hdr = init_merged_header(); + translate = setup_test_6(merged_hdr); + assert(translate); + if (verbose > 1) { + printf("translate\n"); + dump_header(translate); + } + if (verbose) printf("RUN test 6\n"); + trans_tbl_init(merged_hdr, translate, &tbl_6, false, false, true, "filename"); + out = finish_merged_header(merged_hdr); + free_merged_header(merged_hdr); + if (verbose) printf("END RUN test 6\n"); + if (verbose > 1) { + printf("translate\n"); + dump_header(translate); + printf("out\n"); + dump_header(out); + } + if (check_test_6(translate, out, &tbl_6)) { + if (verbose) printf("Test 6 : PASS\n"); + ++success; + } else { + if (verbose) printf("Test 6 : FAIL\n"); + fprintf(stderr, "Test 6 : FAIL\n"); + ++failure; + } + // teardown + bam_hdr_destroy(translate); + bam_hdr_destroy(out); + trans_tbl_destroy(&tbl_6); + if (verbose) printf("END test 6\n"); + + if (success == NUM_TESTS) { + return 0; + } else { + fprintf(stderr, "%d failures %d successes\n", failure, success); + return 1; + } +} diff --git a/samtools/test/merge/test_trans_tbl_init.c.pysam.c b/samtools/test/merge/test_trans_tbl_init.c.pysam.c new file mode 100644 index 0000000..f3abf71 --- /dev/null +++ b/samtools/test/merge/test_trans_tbl_init.c.pysam.c @@ -0,0 +1,578 @@ +#include "samtools.pysam.h" + +/* test/merge/test_trans_tbl_init.c -- merge test harness. + + Copyright (C) 2013, 2014 Genome Research Ltd. + + Author: Martin O. Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include "../../bam_sort.c" +#include +#include + +typedef struct refseq_info { + const char *name; + uint32_t len; +} refseq_info_t; + +void dump_header(bam_hdr_t* hdr) { + fprintf(samtools_stdout, "->n_targets:(%d)\n", hdr->n_targets); + int i; + for (i = 0; i < hdr->n_targets; ++i) { + fprintf(samtools_stdout, "->target_name[%d]:(%s)\n",i,hdr->target_name[i]); + fprintf(samtools_stdout, "->target_len[%d]:(%d)\n",i,hdr->target_len[i]); + } + + fprintf(samtools_stdout, "->text:("); + fwrite((void*)hdr->text, (size_t) hdr->l_text, 1, samtools_stdout); + fprintf(samtools_stdout, ")\n"); +} + +static int populate_merged_header(bam_hdr_t *hdr, merged_header_t *merged_hdr) { + trans_tbl_t dummy; + int res; + res = trans_tbl_init(merged_hdr, hdr, &dummy, 0, 0, 1, NULL); + trans_tbl_destroy(&dummy); + return res; +} + +/* + * Populate merged_hdr with data from bam0_header_text and bam0_refseqs. + * Return bam_hdr_t based on the content in bam1_header_text and bam1_refseqs. + */ + +bam_hdr_t * setup_test(const char *bam0_header_text, + const refseq_info_t *bam0_refseqs, + int32_t bam0_n_refseqs, + const char *bam1_header_text, + const refseq_info_t *bam1_refseqs, + int32_t bam1_n_refseqs, + merged_header_t *merged_hdr) { + bam_hdr_t* bam0 = NULL; + bam_hdr_t* bam1 = NULL; + int32_t i; + + bam0 = bam_hdr_init(); + bam0->text = strdup(bam0_header_text); + if (!bam0->text) goto fail; + bam0->l_text = strlen(bam0_header_text); + bam0->n_targets = 1; + bam0->target_name = (char**)calloc(bam0_n_refseqs, sizeof(char*)); + bam0->target_len = (uint32_t*)calloc(bam0_n_refseqs, sizeof(uint32_t)); + for (i = 0; i < bam0_n_refseqs; i++) { + bam0->target_name[i] = strdup(bam0_refseqs[i].name); + if (!bam0->target_name[i]) goto fail; + bam0->target_len[i] = bam0_refseqs[i].len; + } + + if (populate_merged_header(bam0, merged_hdr)) goto fail; + + bam1 = bam_hdr_init(); + if (!bam1) goto fail; + bam1->text = strdup(bam1_header_text); + if (!bam1->text) goto fail; + bam1->l_text = strlen(bam1_header_text); + bam1->n_targets = bam1_n_refseqs; + bam1->target_name = (char**)calloc(bam1_n_refseqs, sizeof(char*)); + bam1->target_len = (uint32_t*)calloc(bam1_n_refseqs, sizeof(uint32_t)); + for (i = 0; i < bam1_n_refseqs; i++) { + bam1->target_name[i] = strdup(bam1_refseqs[i].name); + if (!bam1->target_name[i]) goto fail; + bam1->target_len[i] = bam1_refseqs[i].len; + } + + bam_hdr_destroy(bam0); + return bam1; + + fail: + bam_hdr_destroy(bam1); + bam_hdr_destroy(bam0); + return NULL; +} + +#define NELE(x) (sizeof((x)) / sizeof((x)[0])) + +static const char init_text[] = + "@HD\tVN:1.4\tSO:unknown\n" + "@SQ\tSN:fish\tLN:133\tSP:frog"; + +static const refseq_info_t init_refs[1] = { + { "fish", 133 } +}; + +static const char test_1_trans_text[] = +"@HD\tVN:1.4\tSO:unknown\n" +"@SQ\tSN:fish\tLN:133\n"; + +static const refseq_info_t test_1_refs[1] = { + { "fish", 133 } +}; + +bam_hdr_t * setup_test_1(merged_header_t *merged_hdr) { + return setup_test(init_text, init_refs, NELE(init_refs), + test_1_trans_text, test_1_refs, NELE(test_1_refs), + merged_hdr); +} + +bool check_test_1(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) { + // Check input is unchanged + if ( + strncmp(test_1_trans_text, translate->text, translate->l_text) + || translate->l_text != strlen( test_1_trans_text) + || translate->n_targets != 1 + ) return false; + + // Check output header + const char out_regex[] = + "^@HD\tVN:1.4\tSO:unknown\n" + "@SQ\tSN:fish\tLN:133\tSP:frog\n$"; + + regex_t check_regex; + regcomp(&check_regex, out_regex, REG_EXTENDED|REG_NOSUB); + + if ( regexec(&check_regex, out->text, 0, NULL, 0) != 0 || out->n_targets != 1 ) return false; + + regfree(&check_regex); + + // Check output tbl + if (tbl[0].n_targets != 1 || tbl[0].tid_trans[0] != 0 || tbl[0].lost_coord_sort) return false; + + return true; +} + +static const char test_2_trans_text[] = +"@HD\tVN:1.4\tSO:unknown\n" +"@SQ\tSN:donkey\tLN:133\n" +"@SQ\tSN:fish\tLN:133"; + +static const refseq_info_t test_2_refs[2] = { + { "donkey", 133 }, + { "fish", 133 } +}; + +bam_hdr_t * setup_test_2(merged_header_t *merged_hdr) { + return setup_test(init_text, init_refs, NELE(init_refs), + test_2_trans_text, test_2_refs, NELE(test_2_refs), + merged_hdr); +} + +bool check_test_2(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) { + // Check input is unchanged + if ( + strncmp(test_2_trans_text, translate->text, translate->l_text) + || translate->l_text != strlen(test_2_trans_text) + || translate->n_targets != 2 + ) return false; + + // Check output header + const char out_regex[] = + "^@HD\tVN:1.4\tSO:unknown\n" + "@SQ\tSN:fish\tLN:133\tSP:frog\n" + "@SQ\tSN:donkey\tLN:133\n$"; + + regex_t check_regex; + regcomp(&check_regex, out_regex, REG_EXTENDED|REG_NOSUB); + + if ( regexec(&check_regex, out->text, 0, NULL, 0) != 0 || out->n_targets != 2 ) return false; + + regfree(&check_regex); + + // Check output tbl + if (tbl[0].n_targets != 2 || tbl[0].tid_trans[0] != 1 || tbl[0].tid_trans[1] != 0) return false; + + return true; +} + +static const char test_3_trans_text[] = +"@HD\tVN:1.4\tSO:unknown\n" +"@SQ\tSN:donkey\tLN:133\n" +"@SQ\tSN:fish\tLN:133\n" +"@RG\tID:fish\tPU:trans\n"; + +static const refseq_info_t test_3_refs[2] = { + { "donkey", 133 }, + { "fish", 133 } +}; + +bam_hdr_t * setup_test_3(merged_header_t *merged_hdr) { + return setup_test(init_text, init_refs, NELE(init_refs), + test_3_trans_text, test_3_refs, NELE(test_3_refs), + merged_hdr); +} + +bool check_test_3(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) { + // Check input is unchanged + if ( + strncmp(test_3_trans_text, translate->text, translate->l_text) + || translate->l_text != strlen(test_3_trans_text) + || translate->n_targets != 2 + ) return false; + return true; +} + +static const char test_4_trans_text[] = +"@HD\tVN:1.4\tSO:unknown\n" +"@SQ\tSN:donkey\tLN:133\n" +"@SQ\tSN:fish\tLN:133\n" +"@RG\tID:fish\tPU:trans\n"; + +static const refseq_info_t test_4_refs[2] = { + { "donkey", 133 }, + { "fish", 133 } +}; + +bam_hdr_t * setup_test_4(merged_header_t *merged_hdr) { + const char* t4_init_text = + "@HD\tVN:1.4\tSO:unknown\n" + "@SQ\tSN:fish\tLN:133\tSP:frog\n" + "@RG\tID:fish\tPU:out\n"; + + return setup_test(t4_init_text, init_refs, NELE(init_refs), + test_4_trans_text, test_4_refs, NELE(test_4_refs), + merged_hdr); +} + +bool check_test_4(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) { + // Check input is unchanged + if ( + strncmp(test_4_trans_text, translate->text, translate->l_text) + || translate->l_text != strlen(test_4_trans_text) + || translate->n_targets != 2 + ) return false; + return true; +} + +static const char test_5_trans_text[] = +"@HD\tVN:1.4\tSO:unknown\n" +"@SQ\tSN:donkey\tLN:133\n" +"@SQ\tSN:fish\tLN:133\n" +"@RG\tID:fish\tPU:trans\n" +"@PG\tXX:dummy\tID:fish\tDS:trans\n" +"@PG\tPP:fish\tID:hook\tDS:trans\n"; + +static const refseq_info_t test_5_refs[2] = { + { "donkey", 133 }, + { "fish", 133 } +}; + +bam_hdr_t * setup_test_5(merged_header_t *merged_hdr) { + const char* t5_init_text = + "@HD\tVN:1.4\tSO:unknown\n" + "@SQ\tSN:fish\tLN:133\tSP:frog\n" + "@RG\tID:fish\tPU:out\n" + "@PG\tXX:dummyx\tID:fish\tDS:out\n" + "@PG\tPP:fish\tID:hook\tDS:out\n"; + + return setup_test(t5_init_text, init_refs, NELE(init_refs), + test_5_trans_text, test_5_refs, NELE(test_5_refs), + merged_hdr); +} + +bool check_test_5(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) { + // Check input is unchanged + if ( + strncmp(test_5_trans_text, translate->text, translate->l_text) + || translate->l_text != strlen(test_5_trans_text) + || translate->n_targets != 2 + ) return false; + return true; +} + +static const char test_6_trans_text[] = +"@HD\tVN:1.4\tSO:unknown\n" +"@SQ\tSN:donkey\tLN:133\n" +"@SQ\tSN:fish\tLN:133\n" +"@RG\tID:fish\tPU:trans\n" +"@PG\tXX:dummy\tID:fish\tDS:trans\n" +"@PG\tPP:fish\tID:hook\tDS:trans\n"; + +static const refseq_info_t test_6_refs[2] = { + { "donkey", 133 }, + { "fish", 133 } +}; + +bam_hdr_t * setup_test_6(merged_header_t *merged_hdr) { + return setup_test(init_text, init_refs, NELE(init_refs), + test_6_trans_text, test_6_refs, NELE(test_6_refs), + merged_hdr); +} + +bool check_test_6(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) { + // Check input is unchanged + if ( + strncmp(test_6_trans_text, translate->text, translate->l_text) + || translate->l_text != strlen(test_5_trans_text) + || translate->n_targets != 2 + ) return false; + return true; +} + +int samtools_test_trans_tbl_init_main(int argc, char**argv) +{ + const int NUM_TESTS = 6; + int verbose = 0; + int success = 0; + int failure = 0; + int getopt_char; + while ((getopt_char = getopt(argc, argv, "v")) != -1) { + switch (getopt_char) { + case 'v': + ++verbose; + break; + default: + break; + } + } + + // Set the seed to a fixed value so that calls to lrand48 within functions return predictable values + const long GIMMICK_SEED = 0x1234330e; + srand48(GIMMICK_SEED); + + bam_hdr_t* out; + bam_hdr_t* translate; + + if (verbose) fprintf(samtools_stdout, "BEGIN test 1\n"); + // setup + trans_tbl_t tbl_1; + merged_header_t *merged_hdr = init_merged_header(); + translate = setup_test_1(merged_hdr); + assert(translate); + // test + if (verbose > 1) { + fprintf(samtools_stdout, "translate\n"); + dump_header(translate); + } + if (verbose) fprintf(samtools_stdout, "RUN test 1\n"); + trans_tbl_init(merged_hdr, translate, &tbl_1, false, false, true, NULL); + out = finish_merged_header(merged_hdr); + free_merged_header(merged_hdr); + if (verbose) fprintf(samtools_stdout, "END RUN test 1\n"); + if (verbose > 1) { + fprintf(samtools_stdout, "translate\n"); + dump_header(translate); + fprintf(samtools_stdout, "out\n"); + dump_header(out); + } + if (check_test_1(translate, out, &tbl_1)) { + if (verbose) fprintf(samtools_stdout, "Test 1 : PASS\n"); + ++success; + } else { + if (verbose) fprintf(samtools_stdout, "Test 1 : FAIL\n"); + fprintf(samtools_stderr, "Test 1 : FAIL\n"); + ++failure; + } + // teardown + bam_hdr_destroy(translate); + bam_hdr_destroy(out); + trans_tbl_destroy(&tbl_1); + if (verbose) fprintf(samtools_stdout, "END test 1\n"); + + // test + if (verbose) fprintf(samtools_stdout, "BEGIN test 2\n"); + // reinit + trans_tbl_t tbl_2; + + merged_hdr = init_merged_header(); + translate = setup_test_2(merged_hdr); + assert(translate); + if (verbose > 1) { + fprintf(samtools_stdout, "translate\n"); + dump_header(translate); + } + if (verbose) fprintf(samtools_stdout, "RUN test 2\n"); + trans_tbl_init(merged_hdr, translate, &tbl_2, false, false, true, NULL); + out = finish_merged_header(merged_hdr); + free_merged_header(merged_hdr); + if (verbose) fprintf(samtools_stdout, "END RUN test 2\n"); + if (verbose > 1) { + fprintf(samtools_stdout, "translate\n"); + dump_header(translate); + fprintf(samtools_stdout, "out\n"); + dump_header(out); + } + if (check_test_2(translate, out, &tbl_2)) { + if (verbose) fprintf(samtools_stdout, "Test 2 : PASS\n"); + ++success; + } else { + if (verbose) fprintf(samtools_stdout, "Test 2 : FAIL\n"); + fprintf(samtools_stderr, "Test 2 : FAIL\n"); + ++failure; + } + // teardown + bam_hdr_destroy(translate); + bam_hdr_destroy(out); + trans_tbl_destroy(&tbl_2); + if (verbose) fprintf(samtools_stdout, "END test 2\n"); + + // test + if (verbose) fprintf(samtools_stdout, "BEGIN test 3\n"); + // reinit + trans_tbl_t tbl_3; + merged_hdr = init_merged_header(); + translate = setup_test_3(merged_hdr); + assert(translate); + if (verbose > 1) { + fprintf(samtools_stdout, "translate\n"); + dump_header(translate); + } + if (verbose) fprintf(samtools_stdout, "RUN test 3\n"); + trans_tbl_init(merged_hdr, translate, &tbl_3, false, false, true, NULL); + out = finish_merged_header(merged_hdr); + free_merged_header(merged_hdr); + if (verbose) fprintf(samtools_stdout, "END RUN test 3\n"); + if (verbose > 1) { + fprintf(samtools_stdout, "translate\n"); + dump_header(translate); + fprintf(samtools_stdout, "out\n"); + dump_header(out); + } + if (check_test_3(translate, out, &tbl_3)) { + if (verbose) fprintf(samtools_stdout, "Test 3 : PASS\n"); + ++success; + } else { + if (verbose) fprintf(samtools_stdout, "Test 3 : FAIL\n"); + fprintf(samtools_stderr, "Test 3 : FAIL\n"); + ++failure; + } + // teardown + bam_hdr_destroy(translate); + bam_hdr_destroy(out); + trans_tbl_destroy(&tbl_3); + if (verbose) fprintf(samtools_stdout, "END test 3\n"); + + // test + if (verbose) fprintf(samtools_stdout, "BEGIN test 4\n"); + // reinit + trans_tbl_t tbl_4; + merged_hdr = init_merged_header(); + translate = setup_test_4(merged_hdr); + assert(translate); + if (verbose > 1) { + fprintf(samtools_stdout, "translate\n"); + dump_header(translate); + } + if (verbose) fprintf(samtools_stdout, "RUN test 4\n"); + trans_tbl_init(merged_hdr, translate, &tbl_4, false, false, true, NULL); + out = finish_merged_header(merged_hdr); + free_merged_header(merged_hdr); + if (verbose) fprintf(samtools_stdout, "END RUN test 4\n"); + if (verbose > 1) { + fprintf(samtools_stdout, "translate\n"); + dump_header(translate); + fprintf(samtools_stdout, "out\n"); + dump_header(out); + } + if (check_test_4(translate, out, &tbl_4)) { + if (verbose) fprintf(samtools_stdout, "Test 4 : PASS\n"); + ++success; + } else { + if (verbose) fprintf(samtools_stdout, "Test 4 : FAIL\n"); + fprintf(samtools_stderr, "Test 4 : FAIL\n"); + ++failure; + } + // teardown + bam_hdr_destroy(translate); + bam_hdr_destroy(out); + trans_tbl_destroy(&tbl_4); + if (verbose) fprintf(samtools_stdout, "END test 4\n"); + + // test + if (verbose) fprintf(samtools_stdout, "BEGIN test 5\n"); + // reinit + trans_tbl_t tbl_5; + merged_hdr = init_merged_header(); + translate = setup_test_5(merged_hdr); + assert(translate); + if (verbose > 1) { + + fprintf(samtools_stdout, "translate\n"); + dump_header(translate); + } + if (verbose) fprintf(samtools_stdout, "RUN test 5\n"); + trans_tbl_init(merged_hdr, translate, &tbl_5, false, false, true, NULL); + out = finish_merged_header(merged_hdr); + free_merged_header(merged_hdr); + if (verbose) fprintf(samtools_stdout, "END RUN test 5\n"); + if (verbose > 1) { + fprintf(samtools_stdout, "translate\n"); + dump_header(translate); + fprintf(samtools_stdout, "out\n"); + dump_header(out); + } + if (check_test_5(translate, out, &tbl_5)) { + if (verbose) fprintf(samtools_stdout, "Test 5 : PASS\n"); + ++success; + } else { + if (verbose) fprintf(samtools_stdout, "Test 5 : FAIL\n"); + fprintf(samtools_stderr, "Test 5 : FAIL\n"); + ++failure; + } + // teardown + bam_hdr_destroy(translate); + bam_hdr_destroy(out); + trans_tbl_destroy(&tbl_5); + if (verbose) fprintf(samtools_stdout, "END test 5\n"); + + // test + if (verbose) fprintf(samtools_stdout, "BEGIN test 6\n"); + // reinit + trans_tbl_t tbl_6; + merged_hdr = init_merged_header(); + translate = setup_test_6(merged_hdr); + assert(translate); + if (verbose > 1) { + fprintf(samtools_stdout, "translate\n"); + dump_header(translate); + } + if (verbose) fprintf(samtools_stdout, "RUN test 6\n"); + trans_tbl_init(merged_hdr, translate, &tbl_6, false, false, true, "filename"); + out = finish_merged_header(merged_hdr); + free_merged_header(merged_hdr); + if (verbose) fprintf(samtools_stdout, "END RUN test 6\n"); + if (verbose > 1) { + fprintf(samtools_stdout, "translate\n"); + dump_header(translate); + fprintf(samtools_stdout, "out\n"); + dump_header(out); + } + if (check_test_6(translate, out, &tbl_6)) { + if (verbose) fprintf(samtools_stdout, "Test 6 : PASS\n"); + ++success; + } else { + if (verbose) fprintf(samtools_stdout, "Test 6 : FAIL\n"); + fprintf(samtools_stderr, "Test 6 : FAIL\n"); + ++failure; + } + // teardown + bam_hdr_destroy(translate); + bam_hdr_destroy(out); + trans_tbl_destroy(&tbl_6); + if (verbose) fprintf(samtools_stdout, "END test 6\n"); + + if (success == NUM_TESTS) { + return 0; + } else { + fprintf(samtools_stderr, "%d failures %d successes\n", failure, success); + return 1; + } +} diff --git a/samtools/test/split/test_count_rg.c b/samtools/test/split/test_count_rg.c new file mode 100644 index 0000000..4038f97 --- /dev/null +++ b/samtools/test/split/test_count_rg.c @@ -0,0 +1,125 @@ +/* test/split/test_count_rg.c -- split test cases. + + Copyright (C) 2014 Genome Research Ltd. + + Author: Martin O. Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include "../../bam_split.c" +#include "../test.h" +#include +#include + +void setup_test_1(bam_hdr_t** hdr_in) +{ + *hdr_in = bam_hdr_init(); + const char *test1 = + "@HD\tVN:1.4\n" + "@SQ\tSN:blah\n" + "@RG\tID:fish\n"; + (*hdr_in)->text = strdup(test1); + (*hdr_in)->l_text = strlen(test1); +} + +int main(int argc, char**argv) +{ + // test state + const int NUM_TESTS = 1; + int verbose = 0; + int success = 0; + int failure = 0; + + int getopt_char; + while ((getopt_char = getopt(argc, argv, "v")) != -1) { + switch (getopt_char) { + case 'v': + ++verbose; + break; + default: + printf( + "usage: test_count_rg [-v]\n\n" + " -v verbose output\n" + ); + break; + } + } + + + // Setup stderr redirect + kstring_t res = { 0, 0, NULL }; + FILE* orig_stderr = fdopen(dup(STDERR_FILENO), "a"); // Save stderr + char* tempfname = (optind < argc)? argv[optind] : "test_count_rg.tmp"; + FILE* check = NULL; + + // setup + if (verbose) printf("BEGIN test 1\n"); // TID test + bam_hdr_t* hdr1; + size_t count; + char** output; + setup_test_1(&hdr1); + if (verbose > 1) { + printf("hdr1\n"); + dump_hdr(hdr1); + } + if (verbose) printf("RUN test 1\n"); + + // test + xfreopen(tempfname, "w", stderr); // Redirect stderr to pipe + bool result_1 = count_RG(hdr1, &count, &output); + fclose(stderr); + + if (verbose) printf("END RUN test 1\n"); + if (verbose > 1) { + printf("b\n"); + dump_hdr(hdr1); + } + + // check result + check = fopen(tempfname, "r"); + if (result_1 && count == 1 && !strcmp(output[0], "fish") + && kgetline(&res, (kgets_func *)fgets, check) < 0 + && (feof(check) || res.l == 0)) { + ++success; + } else { + ++failure; + if (verbose) printf("FAIL test 1\n"); + } + fclose(check); + + // teardown + int i; + for (i = 0; i < count; i++){ + free(output[i]); + } + free(output); + bam_hdr_destroy(hdr1); + if (verbose) printf("END test 1\n"); + + // Cleanup + free(res.s); + remove(tempfname); + if (failure > 0) + fprintf(orig_stderr, "%d failures %d successes\n", failure, success); + fclose(orig_stderr); + + return (success == NUM_TESTS)? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/samtools/test/split/test_count_rg.c.pysam.c b/samtools/test/split/test_count_rg.c.pysam.c new file mode 100644 index 0000000..c6f7fef --- /dev/null +++ b/samtools/test/split/test_count_rg.c.pysam.c @@ -0,0 +1,127 @@ +#include "samtools.pysam.h" + +/* test/split/test_count_rg.c -- split test cases. + + Copyright (C) 2014 Genome Research Ltd. + + Author: Martin O. Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include "../../bam_split.c" +#include "../test.h" +#include +#include + +void setup_test_1(bam_hdr_t** hdr_in) +{ + *hdr_in = bam_hdr_init(); + const char *test1 = + "@HD\tVN:1.4\n" + "@SQ\tSN:blah\n" + "@RG\tID:fish\n"; + (*hdr_in)->text = strdup(test1); + (*hdr_in)->l_text = strlen(test1); +} + +int samtools_test_count_rg_main(int argc, char**argv) +{ + // test state + const int NUM_TESTS = 1; + int verbose = 0; + int success = 0; + int failure = 0; + + int getopt_char; + while ((getopt_char = getopt(argc, argv, "v")) != -1) { + switch (getopt_char) { + case 'v': + ++verbose; + break; + default: + fprintf(samtools_stdout, + "usage: test_count_rg [-v]\n\n" + " -v verbose output\n" + ); + break; + } + } + + + // Setup samtools_stderr redirect + kstring_t res = { 0, 0, NULL }; + FILE* orig_samtools_stderr = fdopen(dup(STDERR_FILENO), "a"); // Save samtools_stderr + char* tempfname = (optind < argc)? argv[optind] : "test_count_rg.tmp"; + FILE* check = NULL; + + // setup + if (verbose) fprintf(samtools_stdout, "BEGIN test 1\n"); // TID test + bam_hdr_t* hdr1; + size_t count; + char** output; + setup_test_1(&hdr1); + if (verbose > 1) { + fprintf(samtools_stdout, "hdr1\n"); + dump_hdr(hdr1); + } + if (verbose) fprintf(samtools_stdout, "RUN test 1\n"); + + // test + xfreopen(tempfname, "w", samtools_stderr); // Redirect samtools_stderr to pipe + bool result_1 = count_RG(hdr1, &count, &output); + fclose(samtools_stderr); + + if (verbose) fprintf(samtools_stdout, "END RUN test 1\n"); + if (verbose > 1) { + fprintf(samtools_stdout, "b\n"); + dump_hdr(hdr1); + } + + // check result + check = fopen(tempfname, "r"); + if (result_1 && count == 1 && !strcmp(output[0], "fish") + && kgetline(&res, (kgets_func *)fgets, check) < 0 + && (feof(check) || res.l == 0)) { + ++success; + } else { + ++failure; + if (verbose) fprintf(samtools_stdout, "FAIL test 1\n"); + } + fclose(check); + + // teardown + int i; + for (i = 0; i < count; i++){ + free(output[i]); + } + free(output); + bam_hdr_destroy(hdr1); + if (verbose) fprintf(samtools_stdout, "END test 1\n"); + + // Cleanup + free(res.s); + remove(tempfname); + if (failure > 0) + fprintf(orig_samtools_stderr, "%d failures %d successes\n", failure, success); + fclose(orig_samtools_stderr); + + return (success == NUM_TESTS)? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/samtools/test/split/test_expand_format_string.c b/samtools/test/split/test_expand_format_string.c new file mode 100644 index 0000000..7c90b62 --- /dev/null +++ b/samtools/test/split/test_expand_format_string.c @@ -0,0 +1,125 @@ +/* test/split/test_expand_format_string.c -- split format string test cases. + + Copyright (C) 2014 Genome Research Ltd. + + Author: Martin O. Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include "../../bam_split.c" +#include "../test.h" +#include +#include + +void setup_test_1(bam_hdr_t** hdr_in) +{ + *hdr_in = bam_hdr_init(); + const char *test1 = + "@HD\tVN:1.4\n" + "@SQ\tSN:blah\n" + "@RG\tID:fish\n"; + (*hdr_in)->text = strdup(test1); + (*hdr_in)->l_text = strlen(test1); +} + +int main(int argc, char**argv) +{ + // test state + const int NUM_TESTS = 1; + int verbose = 0; + int success = 0; + int failure = 0; + + int getopt_char; + while ((getopt_char = getopt(argc, argv, "v")) != -1) { + switch (getopt_char) { + case 'v': + ++verbose; + break; + default: + printf( + "usage: test_expand_format_string [-v]\n\n" + " -v verbose output\n" + ); + break; + } + } + + + // Setup stderr redirect + kstring_t res = { 0, 0, NULL }; + FILE* orig_stderr = fdopen(dup(STDERR_FILENO), "a"); // Save stderr + char* tempfname = (optind < argc)? argv[optind] : "test_expand_format_string.tmp"; + FILE* check = NULL; + + // setup + if (verbose) printf("BEGIN test 1\n"); // default format string test + const char* format_string_1 = "%*_%#.bam"; + const char* basename_1 = "basename"; + const char* rg_id_1 = "1#2.3"; + const int rg_idx_1 = 4; + if (verbose > 1) { + printf("format_string:%s\n" + "basename:%s\n" + "rg_id:%s\n" + "rg_idx:%d\n", format_string_1, basename_1, rg_id_1, rg_idx_1); + } + if (verbose) printf("RUN test 1\n"); + + // test + xfreopen(tempfname, "w", stderr); // Redirect stderr to pipe + char* output_1 = expand_format_string(format_string_1, basename_1, rg_id_1, rg_idx_1, NULL); + fclose(stderr); + + if (verbose) printf("END RUN test 1\n"); + if (verbose > 1) { + printf("format_string:%s\n" + "basename:%s\n" + "rg_id:%s\n" + "rg_idx:%d\n", format_string_1, basename_1, rg_id_1, rg_idx_1); + } + + // check result + res.l = 0; + check = fopen(tempfname, "r"); + if (output_1 != NULL && !strcmp(output_1, "basename_4.bam") + && kgetline(&res, (kgets_func *)fgets, check) < 0 + && (feof(check) || res.l == 0)) { + ++success; + } else { + ++failure; + if (verbose) printf("FAIL test 1\n"); + } + fclose(check); + + // teardown + free(output_1); + if (verbose) printf("END test 1\n"); + + // Cleanup test harness + free(res.s); + remove(tempfname); + if (failure > 0) + fprintf(orig_stderr, "%d failures %d successes\n", failure, success); + fclose(orig_stderr); + + return (success == NUM_TESTS)? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/samtools/test/split/test_expand_format_string.c.pysam.c b/samtools/test/split/test_expand_format_string.c.pysam.c new file mode 100644 index 0000000..1583818 --- /dev/null +++ b/samtools/test/split/test_expand_format_string.c.pysam.c @@ -0,0 +1,127 @@ +#include "samtools.pysam.h" + +/* test/split/test_expand_format_string.c -- split format string test cases. + + Copyright (C) 2014 Genome Research Ltd. + + Author: Martin O. Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include "../../bam_split.c" +#include "../test.h" +#include +#include + +void setup_test_1(bam_hdr_t** hdr_in) +{ + *hdr_in = bam_hdr_init(); + const char *test1 = + "@HD\tVN:1.4\n" + "@SQ\tSN:blah\n" + "@RG\tID:fish\n"; + (*hdr_in)->text = strdup(test1); + (*hdr_in)->l_text = strlen(test1); +} + +int samtools_test_expand_format_string_main(int argc, char**argv) +{ + // test state + const int NUM_TESTS = 1; + int verbose = 0; + int success = 0; + int failure = 0; + + int getopt_char; + while ((getopt_char = getopt(argc, argv, "v")) != -1) { + switch (getopt_char) { + case 'v': + ++verbose; + break; + default: + fprintf(samtools_stdout, + "usage: test_expand_format_string [-v]\n\n" + " -v verbose output\n" + ); + break; + } + } + + + // Setup samtools_stderr redirect + kstring_t res = { 0, 0, NULL }; + FILE* orig_samtools_stderr = fdopen(dup(STDERR_FILENO), "a"); // Save samtools_stderr + char* tempfname = (optind < argc)? argv[optind] : "test_expand_format_string.tmp"; + FILE* check = NULL; + + // setup + if (verbose) fprintf(samtools_stdout, "BEGIN test 1\n"); // default format string test + const char* format_string_1 = "%*_%#.bam"; + const char* basename_1 = "basename"; + const char* rg_id_1 = "1#2.3"; + const int rg_idx_1 = 4; + if (verbose > 1) { + fprintf(samtools_stdout, "format_string:%s\n" + "basename:%s\n" + "rg_id:%s\n" + "rg_idx:%d\n", format_string_1, basename_1, rg_id_1, rg_idx_1); + } + if (verbose) fprintf(samtools_stdout, "RUN test 1\n"); + + // test + xfreopen(tempfname, "w", samtools_stderr); // Redirect samtools_stderr to pipe + char* output_1 = expand_format_string(format_string_1, basename_1, rg_id_1, rg_idx_1, NULL); + fclose(samtools_stderr); + + if (verbose) fprintf(samtools_stdout, "END RUN test 1\n"); + if (verbose > 1) { + fprintf(samtools_stdout, "format_string:%s\n" + "basename:%s\n" + "rg_id:%s\n" + "rg_idx:%d\n", format_string_1, basename_1, rg_id_1, rg_idx_1); + } + + // check result + res.l = 0; + check = fopen(tempfname, "r"); + if (output_1 != NULL && !strcmp(output_1, "basename_4.bam") + && kgetline(&res, (kgets_func *)fgets, check) < 0 + && (feof(check) || res.l == 0)) { + ++success; + } else { + ++failure; + if (verbose) fprintf(samtools_stdout, "FAIL test 1\n"); + } + fclose(check); + + // teardown + free(output_1); + if (verbose) fprintf(samtools_stdout, "END test 1\n"); + + // Cleanup test harness + free(res.s); + remove(tempfname); + if (failure > 0) + fprintf(orig_samtools_stderr, "%d failures %d successes\n", failure, success); + fclose(orig_samtools_stderr); + + return (success == NUM_TESTS)? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/samtools/test/split/test_filter_header_rg.c b/samtools/test/split/test_filter_header_rg.c new file mode 100644 index 0000000..3792ab5 --- /dev/null +++ b/samtools/test/split/test_filter_header_rg.c @@ -0,0 +1,201 @@ +/* test/split/test_filter_header_rg.c -- split test cases. + + Copyright (C) 2014 Genome Research Ltd. + + Author: Martin O. Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include "../../bam_split.c" +#include "../test.h" +#include + +void setup_test_1(bam_hdr_t** hdr_in) +{ + *hdr_in = bam_hdr_init(); + const char *test1 = + "@HD\tVN:1.4\n" + "@SQ\tSN:blah\n" + "@RG\tID:fish\n"; + (*hdr_in)->text = strdup(test1); + (*hdr_in)->l_text = strlen(test1); +} + +bool check_test_1(const bam_hdr_t* hdr) { + char test1_res[200]; + snprintf(test1_res, 199, + "@HD\tVN:1.4\n" + "@SQ\tSN:blah\n" + "@PG\tID:samtools\tPN:samtools\tVN:%s\tCL:test_filter_header_rg foo bar baz\n", samtools_version()); + + if (strcmp(hdr->text, test1_res)) { + return false; + } + return true; +} + +void setup_test_2(bam_hdr_t** hdr_in) +{ + *hdr_in = bam_hdr_init(); + const char *test2 = + "@HD\tVN:1.4\n" + "@SQ\tSN:blah\n" + "@RG\tID:fish\n"; + (*hdr_in)->text = strdup(test2); + (*hdr_in)->l_text = strlen(test2); +} + +bool check_test_2(const bam_hdr_t* hdr) { + char test2_res[200]; + snprintf(test2_res, 199, + "@HD\tVN:1.4\n" + "@SQ\tSN:blah\n" + "@RG\tID:fish\n" + "@PG\tID:samtools\tPN:samtools\tVN:%s\tCL:test_filter_header_rg foo bar baz\n", samtools_version()); + + if (strcmp(hdr->text, test2_res)) { + return false; + } + return true; +} + +int main(int argc, char *argv[]) +{ + // test state + const int NUM_TESTS = 2; + int verbose = 0; + int success = 0; + int failure = 0; + + int getopt_char; + char *test_argv[] = { "test_filter_header_rg", "foo\tbar", "baz" }; + char *arg_list = stringify_argv(3, test_argv); + while ((getopt_char = getopt(argc, argv, "v")) != -1) { + switch (getopt_char) { + case 'v': + ++verbose; + break; + default: + printf( + "usage: test_filter_header_rg [-v]\n\n" + " -v verbose output\n" + ); + break; + } + } + + + // Setup stderr redirect + kstring_t res = { 0, 0, NULL }; + FILE* orig_stderr = fdopen(dup(STDERR_FILENO), "a"); // Save stderr + char* tempfname = (optind < argc)? argv[optind] : "test_count_rg.tmp"; + FILE* check = NULL; + + // setup + if (verbose) printf("BEGIN test 1\n"); // test eliminating a tag that isn't there + bam_hdr_t* hdr1; + const char* id_to_keep_1 = "1#2.3"; + setup_test_1(&hdr1); + if (verbose > 0) { + printf("hdr1\n"); + dump_hdr(hdr1); + } + if (verbose) printf("RUN test 1\n"); + + // test + xfreopen(tempfname, "w", stderr); // Redirect stderr to pipe + bool result_1 = filter_header_rg(hdr1, id_to_keep_1, arg_list); + fclose(stderr); + + if (verbose) printf("END RUN test 1\n"); + if (verbose > 0) { + printf("hdr1\n"); + dump_hdr(hdr1); + } + + // check result + res.l = 0; + check = fopen(tempfname, "r"); + if ( result_1 + && check_test_1(hdr1) + && kgetline(&res, (kgets_func *)fgets, check) < 0 + && (feof(check) || res.l == 0)) { + ++success; + } else { + ++failure; + if (verbose) printf("FAIL test 1\n"); + } + fclose(check); + + // teardown + bam_hdr_destroy(hdr1); + if (verbose) printf("END test 1\n"); + + if (verbose) printf("BEGIN test 2\n"); // test eliminating a tag that is there + bam_hdr_t* hdr2; + const char* id_to_keep_2 = "fish"; + setup_test_2(&hdr2); + if (verbose > 0) { + printf("hdr2\n"); + dump_hdr(hdr2); + } + if (verbose) printf("RUN test 2\n"); + + // test + xfreopen(tempfname, "w", stderr); // Redirect stderr to pipe + bool result_2 = filter_header_rg(hdr2, id_to_keep_2, arg_list); + fclose(stderr); + + if (verbose) printf("END RUN test 2\n"); + if (verbose > 0) { + printf("hdr2\n"); + dump_hdr(hdr2); + } + + // check result + res.l = 0; + check = fopen(tempfname, "r"); + if ( result_2 + && check_test_2(hdr2) + && kgetline(&res, (kgets_func *)fgets, check) < 0 + && (feof(check) || res.l == 0)) { + ++success; + } else { + ++failure; + if (verbose) printf("FAIL test 2\n"); + } + fclose(check); + + // teardown + bam_hdr_destroy(hdr2); + if (verbose) printf("END test 2\n"); + + + // Cleanup + free(res.s); + free(arg_list); + remove(tempfname); + if (failure > 0) + fprintf(orig_stderr, "%d failures %d successes\n", failure, success); + fclose(orig_stderr); + + return (success == NUM_TESTS)? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/samtools/test/split/test_filter_header_rg.c.pysam.c b/samtools/test/split/test_filter_header_rg.c.pysam.c new file mode 100644 index 0000000..54227fc --- /dev/null +++ b/samtools/test/split/test_filter_header_rg.c.pysam.c @@ -0,0 +1,203 @@ +#include "samtools.pysam.h" + +/* test/split/test_filter_header_rg.c -- split test cases. + + Copyright (C) 2014 Genome Research Ltd. + + Author: Martin O. Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include "../../bam_split.c" +#include "../test.h" +#include + +void setup_test_1(bam_hdr_t** hdr_in) +{ + *hdr_in = bam_hdr_init(); + const char *test1 = + "@HD\tVN:1.4\n" + "@SQ\tSN:blah\n" + "@RG\tID:fish\n"; + (*hdr_in)->text = strdup(test1); + (*hdr_in)->l_text = strlen(test1); +} + +bool check_test_1(const bam_hdr_t* hdr) { + char test1_res[200]; + snprintf(test1_res, 199, + "@HD\tVN:1.4\n" + "@SQ\tSN:blah\n" + "@PG\tID:samtools\tPN:samtools\tVN:%s\tCL:test_filter_header_rg foo bar baz\n", samtools_version()); + + if (strcmp(hdr->text, test1_res)) { + return false; + } + return true; +} + +void setup_test_2(bam_hdr_t** hdr_in) +{ + *hdr_in = bam_hdr_init(); + const char *test2 = + "@HD\tVN:1.4\n" + "@SQ\tSN:blah\n" + "@RG\tID:fish\n"; + (*hdr_in)->text = strdup(test2); + (*hdr_in)->l_text = strlen(test2); +} + +bool check_test_2(const bam_hdr_t* hdr) { + char test2_res[200]; + snprintf(test2_res, 199, + "@HD\tVN:1.4\n" + "@SQ\tSN:blah\n" + "@RG\tID:fish\n" + "@PG\tID:samtools\tPN:samtools\tVN:%s\tCL:test_filter_header_rg foo bar baz\n", samtools_version()); + + if (strcmp(hdr->text, test2_res)) { + return false; + } + return true; +} + +int samtools_test_filter_header_rg_main(int argc, char *argv[]) +{ + // test state + const int NUM_TESTS = 2; + int verbose = 0; + int success = 0; + int failure = 0; + + int getopt_char; + char *test_argv[] = { "test_filter_header_rg", "foo\tbar", "baz" }; + char *arg_list = stringify_argv(3, test_argv); + while ((getopt_char = getopt(argc, argv, "v")) != -1) { + switch (getopt_char) { + case 'v': + ++verbose; + break; + default: + fprintf(samtools_stdout, + "usage: test_filter_header_rg [-v]\n\n" + " -v verbose output\n" + ); + break; + } + } + + + // Setup samtools_stderr redirect + kstring_t res = { 0, 0, NULL }; + FILE* orig_samtools_stderr = fdopen(dup(STDERR_FILENO), "a"); // Save samtools_stderr + char* tempfname = (optind < argc)? argv[optind] : "test_count_rg.tmp"; + FILE* check = NULL; + + // setup + if (verbose) fprintf(samtools_stdout, "BEGIN test 1\n"); // test eliminating a tag that isn't there + bam_hdr_t* hdr1; + const char* id_to_keep_1 = "1#2.3"; + setup_test_1(&hdr1); + if (verbose > 0) { + fprintf(samtools_stdout, "hdr1\n"); + dump_hdr(hdr1); + } + if (verbose) fprintf(samtools_stdout, "RUN test 1\n"); + + // test + xfreopen(tempfname, "w", samtools_stderr); // Redirect samtools_stderr to pipe + bool result_1 = filter_header_rg(hdr1, id_to_keep_1, arg_list); + fclose(samtools_stderr); + + if (verbose) fprintf(samtools_stdout, "END RUN test 1\n"); + if (verbose > 0) { + fprintf(samtools_stdout, "hdr1\n"); + dump_hdr(hdr1); + } + + // check result + res.l = 0; + check = fopen(tempfname, "r"); + if ( result_1 + && check_test_1(hdr1) + && kgetline(&res, (kgets_func *)fgets, check) < 0 + && (feof(check) || res.l == 0)) { + ++success; + } else { + ++failure; + if (verbose) fprintf(samtools_stdout, "FAIL test 1\n"); + } + fclose(check); + + // teardown + bam_hdr_destroy(hdr1); + if (verbose) fprintf(samtools_stdout, "END test 1\n"); + + if (verbose) fprintf(samtools_stdout, "BEGIN test 2\n"); // test eliminating a tag that is there + bam_hdr_t* hdr2; + const char* id_to_keep_2 = "fish"; + setup_test_2(&hdr2); + if (verbose > 0) { + fprintf(samtools_stdout, "hdr2\n"); + dump_hdr(hdr2); + } + if (verbose) fprintf(samtools_stdout, "RUN test 2\n"); + + // test + xfreopen(tempfname, "w", samtools_stderr); // Redirect samtools_stderr to pipe + bool result_2 = filter_header_rg(hdr2, id_to_keep_2, arg_list); + fclose(samtools_stderr); + + if (verbose) fprintf(samtools_stdout, "END RUN test 2\n"); + if (verbose > 0) { + fprintf(samtools_stdout, "hdr2\n"); + dump_hdr(hdr2); + } + + // check result + res.l = 0; + check = fopen(tempfname, "r"); + if ( result_2 + && check_test_2(hdr2) + && kgetline(&res, (kgets_func *)fgets, check) < 0 + && (feof(check) || res.l == 0)) { + ++success; + } else { + ++failure; + if (verbose) fprintf(samtools_stdout, "FAIL test 2\n"); + } + fclose(check); + + // teardown + bam_hdr_destroy(hdr2); + if (verbose) fprintf(samtools_stdout, "END test 2\n"); + + + // Cleanup + free(res.s); + free(arg_list); + remove(tempfname); + if (failure > 0) + fprintf(orig_samtools_stderr, "%d failures %d successes\n", failure, success); + fclose(orig_samtools_stderr); + + return (success == NUM_TESTS)? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/samtools/test/split/test_parse_args.c b/samtools/test/split/test_parse_args.c new file mode 100644 index 0000000..85a196a --- /dev/null +++ b/samtools/test/split/test_parse_args.c @@ -0,0 +1,217 @@ +/* test/split/test_parse_args.c -- split test cases. + + Copyright (C) 2014 Genome Research Ltd. + + Author: Martin O. Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include "../../bam_split.c" +#include "../test.h" +#include +#include + +void setup_test_1(int* argc, char*** argv) +{ + *argc = 1; + *argv = (char**)calloc(sizeof(char*), 1); + (*argv)[0] = strdup("prog_name"); +} + +bool check_test_1(const parsed_opts_t* opts) { + if ( opts->merged_input_name != NULL + || opts->unaccounted_header_name != NULL + || opts->unaccounted_name != NULL + || strcmp(opts->output_format_string,"%*_%#.%.") + || opts->verbose == true ) + return false; + return true; +} + +void setup_test_2(int* argc, char*** argv) +{ + *argc = 2; + *argv = (char**)calloc(sizeof(char*), 2); + (*argv)[0] = strdup("prog_name"); + (*argv)[1] = strdup("merged.bam"); +} + +bool check_test_2(const parsed_opts_t* opts) { + if ( opts->merged_input_name == NULL + || strcmp(opts->merged_input_name, "merged.bam") + || opts->unaccounted_header_name != NULL + || opts->unaccounted_name != NULL + || strcmp(opts->output_format_string,"%*_%#.%.") + || opts->verbose == true ) + return false; + return true; +} + +int main(int argc, char**argv) +{ + // test state + const int NUM_TESTS = 2; + int verbose = 0; + int success = 0; + int failure = 0; + + int getopt_char; + while ((getopt_char = getopt(argc, argv, "v")) != -1) { + switch (getopt_char) { + case 'v': + ++verbose; + break; + default: + printf( + "usage: test_parse_args [-v]\n\n" + " -v verbose output\n" + ); + break; + } + } + + // Setup stdout and stderr redirect + kstring_t res_stdout = { 0, 0, NULL }; + kstring_t res_stderr = { 0, 0, NULL }; + FILE* orig_stdout = fdopen(dup(STDOUT_FILENO), "a"); // Save stderr + FILE* orig_stderr = fdopen(dup(STDERR_FILENO), "a"); // Save stderr + char* tempfname_stdout = (optind < argc)? argv[optind] : "test_parse_args.tmp.o"; + char* tempfname_stderr = (optind < argc)? argv[optind] : "test_parse_args.tmp.e"; + FILE* check_stdout = NULL; + FILE* check_stderr = NULL; + + // Cleanup getopt + optind = 1; + + // setup + if (verbose) fprintf(orig_stdout,"BEGIN test 1\n"); // test eliminating a tag that isn't there + int argc_1; + char** argv_1; + setup_test_1(&argc_1, &argv_1); + if (verbose > 1) { + fprintf(orig_stdout, "argc: %d\n", argc_1); + } + if (verbose) fprintf(orig_stdout,"RUN test 1\n"); + + // test + xfreopen(tempfname_stdout, "w", stdout); // Redirect stdout to pipe + xfreopen(tempfname_stderr, "w", stderr); // Redirect stderr to pipe + parsed_opts_t* result_1 = parse_args(argc_1, argv_1); + fclose(stdout); + fclose(stderr); + + if (verbose) fprintf(orig_stdout, "END RUN test 1\n"); + if (verbose > 1) { + fprintf(orig_stdout, "argc: %d\n", argc_1); + } + + // check result + res_stdout.l = res_stderr.l = 0; + check_stdout = fopen(tempfname_stdout, "r"); + check_stderr = fopen(tempfname_stderr, "r"); + if ( !result_1 + && kgetline(&res_stdout, (kgets_func *)fgets, check_stdout) >= 0 + && !feof(check_stdout) + && res_stdout.l > 0 + && kgetline(&res_stderr, (kgets_func *)fgets, check_stderr) < 0 + && (feof(check_stderr) || res_stderr.l == 0)) { + ++success; + } else { + ++failure; + if (verbose) fprintf(orig_stdout, "FAIL test 1\n"); + } + fclose(check_stderr); + fclose(check_stdout); + + // teardown + cleanup_opts(result_1); + int i = 0; + for (i = 0; i < argc_1; ++i) { + free(argv_1[i]); + } + free(argv_1); + if (verbose) fprintf(orig_stdout, "END test 1\n"); + + // Cleanup getopt + optind = 1; + + if (verbose) fprintf(orig_stdout, "BEGIN test 2\n"); // test eliminating a tag that is there + int argc_2; + char** argv_2; + setup_test_2(&argc_2, &argv_2); + if (verbose > 1) { + fprintf(orig_stdout, "argc: %d\n", argc_2); + } + if (verbose) fprintf(orig_stdout, "RUN test 2\n"); + + // test + xfreopen(tempfname_stdout, "w", stdout); // Redirect stdout to pipe + xfreopen(tempfname_stderr, "w", stderr); // Redirect stderr to pipe + parsed_opts_t* result_2 = parse_args(argc_2, argv_2); + fclose(stdout); + fclose(stderr); + + if (verbose) fprintf(orig_stdout, "END RUN test 2\n"); + if (verbose > 1) { + fprintf(orig_stdout, "argc: %d\n", argc_2); + } + + // check result + res_stdout.l = res_stderr.l = 0; + check_stdout = fopen(tempfname_stdout, "r"); + check_stderr = fopen(tempfname_stderr, "r"); + if ( result_2 + && check_test_2(result_2) + && kgetline(&res_stdout, (kgets_func *)fgets, check_stdout) < 0 + && (feof(check_stdout) || res_stdout.l == 0) + && kgetline(&res_stderr, (kgets_func *)fgets, check_stderr) < 0 + && (feof(check_stderr) || res_stderr.l == 0)) { + ++success; + } else { + ++failure; + if (verbose) fprintf(orig_stdout, "FAIL test 2\n"); + } + fclose(check_stdout); + fclose(check_stderr); + + // teardown + cleanup_opts(result_2); + int j = 0; + for (j = 0; j < argc_2; ++j) { + free(argv_2[j]); + } + free(argv_2); + + if (verbose) fprintf(orig_stdout, "END test 2\n"); + + + // Cleanup + free(res_stdout.s); + free(res_stderr.s); + remove(tempfname_stdout); + remove(tempfname_stderr); + fclose(orig_stdout); + if (failure > 0) + fprintf(orig_stderr, "%d failures %d successes\n", failure, success); + fclose(orig_stderr); + + return (success == NUM_TESTS)? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/samtools/test/split/test_parse_args.c.pysam.c b/samtools/test/split/test_parse_args.c.pysam.c new file mode 100644 index 0000000..01d9bcb --- /dev/null +++ b/samtools/test/split/test_parse_args.c.pysam.c @@ -0,0 +1,219 @@ +#include "samtools.pysam.h" + +/* test/split/test_parse_args.c -- split test cases. + + Copyright (C) 2014 Genome Research Ltd. + + Author: Martin O. Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include "../../bam_split.c" +#include "../test.h" +#include +#include + +void setup_test_1(int* argc, char*** argv) +{ + *argc = 1; + *argv = (char**)calloc(sizeof(char*), 1); + (*argv)[0] = strdup("prog_name"); +} + +bool check_test_1(const parsed_opts_t* opts) { + if ( opts->merged_input_name != NULL + || opts->unaccounted_header_name != NULL + || opts->unaccounted_name != NULL + || strcmp(opts->output_format_string,"%*_%#.%.") + || opts->verbose == true ) + return false; + return true; +} + +void setup_test_2(int* argc, char*** argv) +{ + *argc = 2; + *argv = (char**)calloc(sizeof(char*), 2); + (*argv)[0] = strdup("prog_name"); + (*argv)[1] = strdup("merged.bam"); +} + +bool check_test_2(const parsed_opts_t* opts) { + if ( opts->merged_input_name == NULL + || strcmp(opts->merged_input_name, "merged.bam") + || opts->unaccounted_header_name != NULL + || opts->unaccounted_name != NULL + || strcmp(opts->output_format_string,"%*_%#.%.") + || opts->verbose == true ) + return false; + return true; +} + +int samtools_test_parse_args_main(int argc, char**argv) +{ + // test state + const int NUM_TESTS = 2; + int verbose = 0; + int success = 0; + int failure = 0; + + int getopt_char; + while ((getopt_char = getopt(argc, argv, "v")) != -1) { + switch (getopt_char) { + case 'v': + ++verbose; + break; + default: + fprintf(samtools_stdout, + "usage: test_parse_args [-v]\n\n" + " -v verbose output\n" + ); + break; + } + } + + // Setup samtools_stdout and samtools_stderr redirect + kstring_t res_samtools_stdout = { 0, 0, NULL }; + kstring_t res_samtools_stderr = { 0, 0, NULL }; + FILE* orig_samtools_stdout = fdopen(dup(STDOUT_FILENO), "a"); // Save samtools_stderr + FILE* orig_samtools_stderr = fdopen(dup(STDERR_FILENO), "a"); // Save samtools_stderr + char* tempfname_samtools_stdout = (optind < argc)? argv[optind] : "test_parse_args.tmp.o"; + char* tempfname_samtools_stderr = (optind < argc)? argv[optind] : "test_parse_args.tmp.e"; + FILE* check_samtools_stdout = NULL; + FILE* check_samtools_stderr = NULL; + + // Cleanup getopt + optind = 1; + + // setup + if (verbose) fprintf(orig_samtools_stdout,"BEGIN test 1\n"); // test eliminating a tag that isn't there + int argc_1; + char** argv_1; + setup_test_1(&argc_1, &argv_1); + if (verbose > 1) { + fprintf(orig_samtools_stdout, "argc: %d\n", argc_1); + } + if (verbose) fprintf(orig_samtools_stdout,"RUN test 1\n"); + + // test + xfreopen(tempfname_samtools_stdout, "w", samtools_stdout); // Redirect samtools_stdout to pipe + xfreopen(tempfname_samtools_stderr, "w", samtools_stderr); // Redirect samtools_stderr to pipe + parsed_opts_t* result_1 = parse_args(argc_1, argv_1); + fclose(samtools_stdout); + fclose(samtools_stderr); + + if (verbose) fprintf(orig_samtools_stdout, "END RUN test 1\n"); + if (verbose > 1) { + fprintf(orig_samtools_stdout, "argc: %d\n", argc_1); + } + + // check result + res_samtools_stdout.l = res_samtools_stderr.l = 0; + check_samtools_stdout = fopen(tempfname_samtools_stdout, "r"); + check_samtools_stderr = fopen(tempfname_samtools_stderr, "r"); + if ( !result_1 + && kgetline(&res_samtools_stdout, (kgets_func *)fgets, check_samtools_stdout) >= 0 + && !feof(check_samtools_stdout) + && res_samtools_stdout.l > 0 + && kgetline(&res_samtools_stderr, (kgets_func *)fgets, check_samtools_stderr) < 0 + && (feof(check_samtools_stderr) || res_samtools_stderr.l == 0)) { + ++success; + } else { + ++failure; + if (verbose) fprintf(orig_samtools_stdout, "FAIL test 1\n"); + } + fclose(check_samtools_stderr); + fclose(check_samtools_stdout); + + // teardown + cleanup_opts(result_1); + int i = 0; + for (i = 0; i < argc_1; ++i) { + free(argv_1[i]); + } + free(argv_1); + if (verbose) fprintf(orig_samtools_stdout, "END test 1\n"); + + // Cleanup getopt + optind = 1; + + if (verbose) fprintf(orig_samtools_stdout, "BEGIN test 2\n"); // test eliminating a tag that is there + int argc_2; + char** argv_2; + setup_test_2(&argc_2, &argv_2); + if (verbose > 1) { + fprintf(orig_samtools_stdout, "argc: %d\n", argc_2); + } + if (verbose) fprintf(orig_samtools_stdout, "RUN test 2\n"); + + // test + xfreopen(tempfname_samtools_stdout, "w", samtools_stdout); // Redirect samtools_stdout to pipe + xfreopen(tempfname_samtools_stderr, "w", samtools_stderr); // Redirect samtools_stderr to pipe + parsed_opts_t* result_2 = parse_args(argc_2, argv_2); + fclose(samtools_stdout); + fclose(samtools_stderr); + + if (verbose) fprintf(orig_samtools_stdout, "END RUN test 2\n"); + if (verbose > 1) { + fprintf(orig_samtools_stdout, "argc: %d\n", argc_2); + } + + // check result + res_samtools_stdout.l = res_samtools_stderr.l = 0; + check_samtools_stdout = fopen(tempfname_samtools_stdout, "r"); + check_samtools_stderr = fopen(tempfname_samtools_stderr, "r"); + if ( result_2 + && check_test_2(result_2) + && kgetline(&res_samtools_stdout, (kgets_func *)fgets, check_samtools_stdout) < 0 + && (feof(check_samtools_stdout) || res_samtools_stdout.l == 0) + && kgetline(&res_samtools_stderr, (kgets_func *)fgets, check_samtools_stderr) < 0 + && (feof(check_samtools_stderr) || res_samtools_stderr.l == 0)) { + ++success; + } else { + ++failure; + if (verbose) fprintf(orig_samtools_stdout, "FAIL test 2\n"); + } + fclose(check_samtools_stdout); + fclose(check_samtools_stderr); + + // teardown + cleanup_opts(result_2); + int j = 0; + for (j = 0; j < argc_2; ++j) { + free(argv_2[j]); + } + free(argv_2); + + if (verbose) fprintf(orig_samtools_stdout, "END test 2\n"); + + + // Cleanup + free(res_samtools_stdout.s); + free(res_samtools_stderr.s); + remove(tempfname_samtools_stdout); + remove(tempfname_samtools_stderr); + fclose(orig_samtools_stdout); + if (failure > 0) + fprintf(orig_samtools_stderr, "%d failures %d successes\n", failure, success); + fclose(orig_samtools_stderr); + + return (success == NUM_TESTS)? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/samtools/test/test.c b/samtools/test/test.c new file mode 100644 index 0000000..0b4d585 --- /dev/null +++ b/samtools/test/test.c @@ -0,0 +1,55 @@ +/* test/test.c -- test harness utility routines. + + Copyright (C) 2014, 2016 Genome Research Ltd. + + Author: Martin O. Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include + +#include "test.h" + +void xfreopen(const char *path, const char *mode, FILE *stream) +{ + if (freopen(path, mode, stream) == NULL) { + fprintf(stderr, __FILE__": error reopening %s: %s\n", + path, strerror(errno)); + exit(2); + } +} + +void dump_hdr(const bam_hdr_t* hdr) +{ + printf("n_targets: %d\n", hdr->n_targets); + printf("ignore_sam_err: %d\n", hdr->ignore_sam_err); + printf("l_text: %u\n", hdr->l_text); + printf("idx\ttarget_len\ttarget_name:\n"); + int32_t target; + for (target = 0; target < hdr->n_targets; ++target) { + printf("%d\t%u\t\"%s\"\n", target, hdr->target_len[target], hdr->target_name[target]); + } + printf("text: \"%s\"\n", hdr->text); +} diff --git a/samtools/test/test.c.pysam.c b/samtools/test/test.c.pysam.c new file mode 100644 index 0000000..df87fbb --- /dev/null +++ b/samtools/test/test.c.pysam.c @@ -0,0 +1,57 @@ +#include "samtools.pysam.h" + +/* test/test.c -- test harness utility routines. + + Copyright (C) 2014, 2016 Genome Research Ltd. + + Author: Martin O. Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include +#include +#include +#include +#include + +#include "test.h" + +void xfreopen(const char *path, const char *mode, FILE *stream) +{ + if (freopen(path, mode, stream) == NULL) { + fprintf(samtools_stderr, __FILE__": error reopening %s: %s\n", + path, strerror(errno)); + exit(2); + } +} + +void dump_hdr(const bam_hdr_t* hdr) +{ + fprintf(samtools_stdout, "n_targets: %d\n", hdr->n_targets); + fprintf(samtools_stdout, "ignore_sam_err: %d\n", hdr->ignore_sam_err); + fprintf(samtools_stdout, "l_text: %u\n", hdr->l_text); + fprintf(samtools_stdout, "idx\ttarget_len\ttarget_name:\n"); + int32_t target; + for (target = 0; target < hdr->n_targets; ++target) { + fprintf(samtools_stdout, "%d\t%u\t\"%s\"\n", target, hdr->target_len[target], hdr->target_name[target]); + } + fprintf(samtools_stdout, "text: \"%s\"\n", hdr->text); +} diff --git a/samtools/test/test.h b/samtools/test/test.h new file mode 100644 index 0000000..610b155 --- /dev/null +++ b/samtools/test/test.h @@ -0,0 +1,35 @@ +/* test/test.h -- test harness utility routines. + + Copyright (C) 2014 Genome Research Ltd. + + Author: Martin O. Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#ifndef TEST_H +#define TEST_H + +#include +#include + +void xfreopen(const char *path, const char *mode, FILE *stream); + +void dump_hdr(const bam_hdr_t* hdr); + +#endif diff --git a/samtools/test/tview/test_get_rg_sample.c b/samtools/test/tview/test_get_rg_sample.c new file mode 100644 index 0000000..3db9da2 --- /dev/null +++ b/samtools/test/tview/test_get_rg_sample.c @@ -0,0 +1,83 @@ +/* test/tview/test_get_rg_sample.c -- tview test cases. + + Copyright (C) 2013, 2014 Genome Research Ltd. + + Author: Martin O. Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include "../../bam_tview.c" +#include + +const char header_1[] = +"@HD VN:1.4 SO:undefined\n" +"@SQ SN:dummy\n" +"@RG ID:blah SM:po\n"; + +void setup_test_1(char** header) +{ + *header = strdup(header_1); +} + +khash_t(kh_rg)* run_test_1(char* header) +{ + khash_t(kh_rg)* test_result = get_rg_sample(header,"po"); + return test_result; +} + +bool check_test_1(khash_t(kh_rg)* test_result, char* header) +{ + if (strcmp(header_1, header)) return false; + // test blah is in there + if (kh_get(kh_rg, test_result, "blah") == kh_end(test_result)) + { + return false; + } + return true; +} + +void teardown_1(khash_t(kh_rg)* test_result, char* header) +{ + free(header); +} + +int main(int argc, char** argv) +{ + const int NUM_TESTS = 1; + int success = 0; + int failure = 0; + + char* test_header_1; + setup_test_1(&test_header_1); + khash_t(kh_rg)* test_result_1 = run_test_1(test_header_1); + if (!check_test_1(test_result_1, test_header_1)) + failure++; + else + success++; + teardown_1(test_result_1, test_header_1); + + if (success == NUM_TESTS) { + return 0; + } else { + fprintf(stderr, "%d failures %d successes\n", failure, success); + return 1; + } +} diff --git a/samtools/test/tview/test_get_rg_sample.c.pysam.c b/samtools/test/tview/test_get_rg_sample.c.pysam.c new file mode 100644 index 0000000..0256876 --- /dev/null +++ b/samtools/test/tview/test_get_rg_sample.c.pysam.c @@ -0,0 +1,85 @@ +#include "samtools.pysam.h" + +/* test/tview/test_get_rg_sample.c -- tview test cases. + + Copyright (C) 2013, 2014 Genome Research Ltd. + + Author: Martin O. Pollard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. */ + +#include + +#include "../../bam_tview.c" +#include + +const char header_1[] = +"@HD VN:1.4 SO:undefined\n" +"@SQ SN:dummy\n" +"@RG ID:blah SM:po\n"; + +void setup_test_1(char** header) +{ + *header = strdup(header_1); +} + +khash_t(kh_rg)* run_test_1(char* header) +{ + khash_t(kh_rg)* test_result = get_rg_sample(header,"po"); + return test_result; +} + +bool check_test_1(khash_t(kh_rg)* test_result, char* header) +{ + if (strcmp(header_1, header)) return false; + // test blah is in there + if (kh_get(kh_rg, test_result, "blah") == kh_end(test_result)) + { + return false; + } + return true; +} + +void teardown_1(khash_t(kh_rg)* test_result, char* header) +{ + free(header); +} + +int samtools_test_get_rg_sample_main(int argc, char** argv) +{ + const int NUM_TESTS = 1; + int success = 0; + int failure = 0; + + char* test_header_1; + setup_test_1(&test_header_1); + khash_t(kh_rg)* test_result_1 = run_test_1(test_header_1); + if (!check_test_1(test_result_1, test_header_1)) + failure++; + else + success++; + teardown_1(test_result_1, test_header_1); + + if (success == NUM_TESTS) { + return 0; + } else { + fprintf(samtools_stderr, "%d failures %d successes\n", failure, success); + return 1; + } +} diff --git a/samtools/tmp_file.c b/samtools/tmp_file.c new file mode 100644 index 0000000..85d2822 --- /dev/null +++ b/samtools/tmp_file.c @@ -0,0 +1,507 @@ +/* + tmp_file.c - write to and read from a temporary binary file + for fast storage plus added compression. + + Copyright (C) 2017 Genome Research Ltd. + + Author: Andrew Whitwham + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE +*/ + +#include + +#include +#include +#include +#include +#include +#include +#include + +#ifdef _WIN32 +#include +#endif /* _WIN32 */ + +#include "tmp_file.h" +#include "htslib/sam.h" + + +static void tmp_print_error(tmp_file_t *tmp, const char *fmt, ...) { + va_list argp; + + if (tmp->verbose) { + va_start(argp, fmt); + vfprintf(stderr, fmt, argp); + va_end(argp); + } +} + + +static int tmp_file_init(tmp_file_t *tmp, int verbose) { + tmp->stream = LZ4_createStream(); + tmp->data_size = 0; + tmp->group_size = TMP_SAM_GROUP_SIZE; + tmp->input_size = 0; + tmp->read_size = 0; + tmp->output_size = 0; + tmp->entry_number = 0; + tmp->offset = 0; + tmp->max_data_size = TMP_SAM_MAX_DATA + sizeof(bam1_t); // arbitrary but growable + tmp->ring_buffer_size = TMP_SAM_RING_SIZE; // arbitrary (min 64K) but growable + tmp->comp_buffer_size = LZ4_COMPRESSBOUND(tmp->max_data_size * tmp->group_size); + tmp->data = NULL; + tmp->ring_buffer = malloc(sizeof(uint8_t) * tmp->ring_buffer_size); + tmp->ring_index = tmp->ring_buffer; + tmp->comp_buffer = malloc(tmp->comp_buffer_size); + tmp->verbose = verbose; + tmp->dict = NULL; + tmp->groups_written = 0; + + if (!tmp->ring_buffer || !tmp->comp_buffer || !tmp->stream) { + tmp_print_error(tmp, "[tmp_file] Error: unable to allocate compression buffers.\n"); + return TMP_SAM_MEM_ERROR; + } + + return TMP_SAM_OK; +} + + +/* + * Opens the temp file and initialises memory. + * Verbose mode prints out error messages to stderr. + * Returns 0 on success, a negative number on failure. + */ +int tmp_file_open_write(tmp_file_t *tmp, char *tmp_name, int verbose) { + int ret; + unsigned int count = 1; + const unsigned int max_count = 100000; // more tries than this then something else is wrong + int fd; + + if ((ret = tmp_file_init(tmp, verbose))) { + return ret; + } + + // make space to write extended file name + if ((tmp->name = malloc(strlen(tmp_name) + 7)) == NULL) { + tmp_print_error(tmp, "[tmp_file] Error: unable to allocate memory for %s.\n", tmp_name); + return TMP_SAM_MEM_ERROR; + } + + // make sure temp file has a unique name + while (count < max_count) { + sprintf(tmp->name, "%s.%d", tmp_name, count); + + + #ifdef _WIN32 + if ((fd = _open(tmp->name, O_RDWR|O_CREAT|O_EXCL|O_BINARY|O_TEMPORARY, 0600)) == -1) { + #else + if ((fd = open(tmp->name, O_RDWR|O_CREAT|O_EXCL, 0600)) == -1) { + #endif /* _WIN32 */ + + if (errno != EEXIST) { + tmp_print_error(tmp, "[tmp_file] Error: unable to create tmp file %s.\n", tmp->name); + return TMP_SAM_FILE_ERROR; + } + + count++; + continue; + } + + break; + } + + if (count >= max_count) { + tmp_print_error(tmp, "[tmp_file] Error: unable to create unique temp file.\n"); + return TMP_SAM_FILE_ERROR; + } + + if ((tmp->fp = fdopen(fd, "w+b")) == NULL) { + tmp_print_error(tmp, "[tmp_file] Error: unable to open write file %s.\n", tmp->name); + return TMP_SAM_FILE_ERROR; + } + + #ifndef _WIN32 + unlink(tmp->name); // should auto delete when closed on linux + #endif + + return TMP_SAM_OK; +} + + +/* + * The ring buffer stores precompressionn/post decompression data. LZ4 requires that + * previous data (64K worth) be available for efficient compression. This function grows + * the ring buffer when needed. + * Returns 0 on success, a negative number on failure. + */ +static int tmp_file_grow_ring_buffer(tmp_file_t *tmp, size_t new_size) { + // save the dictionary so lz4 can continue to function + int dict_size = 64 * 1024; // 64K max size + + if (tmp->groups_written) { + // if compression has been done then there is a dictionary to save + + if (tmp->dict == NULL) { + + if ((tmp->dict = malloc(sizeof(char) * dict_size)) == NULL) { + tmp_print_error(tmp, "[tmp_file] Error: unable to allocate memory for compression dictionary.\n"); + return TMP_SAM_MEM_ERROR; + } + } + + if (LZ4_saveDict(tmp->stream, tmp->dict, dict_size) == 0) { + tmp_print_error(tmp, "[tmp_file] Error: unable to save compression dictionary.\n"); + return TMP_SAM_LZ4_ERROR; + } + } + + if ((tmp->ring_buffer = realloc(tmp->ring_buffer, sizeof(char) * new_size)) == NULL) { + tmp_print_error(tmp, "[tmp_file] Error: unable to reallocate ring buffer.\n"); + return TMP_SAM_MEM_ERROR; + } + + tmp->ring_buffer_size = new_size; + + return TMP_SAM_OK; +} + + +/* + * This does the actual compression and writing to disk. On disk format consists of a + * single size_t for the size of the compressed data followed by the data itself. + * Returns 0 on success, a negative number on failure. + */ +static int tmp_file_write_to_file(tmp_file_t *tmp) { + size_t comp_size; + + if (tmp->input_size > tmp->max_data_size) { + tmp->max_data_size += tmp->input_size + sizeof(bam1_t); + tmp->comp_buffer_size = LZ4_COMPRESSBOUND(tmp->max_data_size); + + if ((tmp->comp_buffer = realloc(tmp->comp_buffer, sizeof(char) * tmp->comp_buffer_size)) == NULL) { + tmp_print_error(tmp, "[tmp_file] Error: unable to reallocate compression buffer.\n"); + return TMP_SAM_MEM_ERROR; + } + + // make sure the ring buffer is big enough to accommodate the new max_data_size + if (tmp->ring_buffer_size < tmp->max_data_size * 5) { + int ret; + if ((ret = tmp_file_grow_ring_buffer(tmp, tmp->max_data_size * 5))) { + return ret; + } + } + } + + tmp->ring_index = tmp->ring_buffer + tmp->offset; + + comp_size = LZ4_compress_fast_continue(tmp->stream, (const char *)tmp->ring_index, + tmp->comp_buffer, tmp->input_size, tmp->comp_buffer_size, 1); + + if (comp_size == 0) { + tmp_print_error(tmp, "[tmp_file] Error: compression failed.\n"); + return TMP_SAM_LZ4_ERROR; + } + + if (fwrite(&comp_size, sizeof(size_t), 1, tmp->fp) < 1) { + tmp_print_error(tmp, "[tmp_file] Error: tmp file write size failed.\n"); + return TMP_SAM_FILE_ERROR; + } + + if (fwrite(tmp->comp_buffer, sizeof(char), comp_size, tmp->fp) < comp_size) { + tmp_print_error(tmp, "[tmp_file] Error: tmp file write data failed.\n"); + return TMP_SAM_FILE_ERROR; + } + + tmp->offset += tmp->input_size; + + if (tmp->offset >= tmp->ring_buffer_size - tmp->max_data_size) + tmp->offset = 0; + + tmp->input_size = 0; + tmp->entry_number = 0; + tmp->groups_written++; + + return TMP_SAM_OK; +} + + +/* + * Stores an in memory bam structure for writing and if enough are gathered together writes + * it to disk. Mulitiple alignments compress better that single ones though after a certain number + * there is a law of diminishing returns. + * Returns 0 on success, a negative number on failure. + */ +int tmp_file_write(tmp_file_t *tmp, bam1_t *inbam) { + + if ((tmp->input_size + sizeof(bam1_t) + inbam->l_data) >= tmp->ring_buffer_size) { + int ret; + + if ((ret = tmp_file_grow_ring_buffer(tmp, (tmp->input_size + sizeof(bam1_t) + inbam->l_data) * 5))) { + tmp_print_error(tmp, "[tmp_file] Error: input line too big. (%ld).\n", + (tmp->input_size + inbam->l_data)); + + return ret; + } + } + + tmp->ring_index = tmp->ring_buffer + tmp->offset + tmp->input_size; + + // copy data into the ring buffer + memcpy(tmp->ring_index, inbam, sizeof(bam1_t)); + memcpy(tmp->ring_index + sizeof(bam1_t) , inbam->data, inbam->l_data); + tmp->input_size += sizeof(bam1_t) + inbam->l_data; + tmp->entry_number++; + + if (tmp->entry_number == tmp->group_size) { + // actually write out the data + int ret; + + if ((ret = tmp_file_write_to_file(tmp))) { + return ret; + } + } + + return TMP_SAM_OK; +} + + +/* + * Closes the file after writing out any remaining alignments. Adds a size_t 0 to + * mark the end of the file. Companion function to tmp_file_open_read below. + * Returns 0 on success, a negative number on failure. + */ +int tmp_file_close_write(tmp_file_t *tmp) { + size_t terminator = 0; + + if (tmp->entry_number) { + int ret; + + if ((ret = tmp_file_write_to_file(tmp))) { + return ret; + } + } + + if (fwrite(&terminator, sizeof(size_t), 1, tmp->fp) < 1) { + tmp_print_error(tmp, "[tmp_file] Error: tmp file write terminator failed.\n"); + return TMP_SAM_FILE_ERROR; + } + + if (fclose(tmp->fp)) { + tmp_print_error(tmp, "[tmp_file] Error: closing tmp file %s failed.\n", tmp->name); + return TMP_SAM_FILE_ERROR; + } + + LZ4_freeStream(tmp->stream); + + return TMP_SAM_OK; +} + + +/* + * Opens the file for reading. Optionally, if given a pointer to an existing + * bam1_t structure, it will free the data entry to prevent memory leaks. + * Companion function to tmp_file_close_write above. + * Returns 0 on success, a negative number on failure. + */ +int tmp_file_open_read(tmp_file_t *tmp, bam1_t *inbam) { + + if ((tmp->fp = fopen(tmp->name, "rb")) == NULL) { + tmp_print_error(tmp, "[tmp_file] Error: unable to open read file %s.\n", tmp->name); + return TMP_SAM_FILE_ERROR; + } + + tmp->dstream = LZ4_createStreamDecode(); + tmp->offset = 0; + + if (inbam) { + free(inbam->data); + } + + if (!tmp->dstream) { + tmp_print_error(tmp, "[tmp_file] Error: unable to allocate compression stream.\n"); + return TMP_SAM_MEM_ERROR; + } + + + return TMP_SAM_OK; +} + + +/* + * An alternative to tmp_file_close_write that does the same job without actually + * closing the file. Companion function to tmp_file_begin_read below. + * Returns 0 on success, a negative number on failure. + */ +int tmp_file_end_write(tmp_file_t *tmp) { + size_t terminator = 0; + + if (tmp->entry_number) { + int ret; + + if ((ret = tmp_file_write_to_file(tmp))) { + return ret; + } + } + + if (fwrite(&terminator, sizeof(size_t), 1, tmp->fp) < 1) { + tmp_print_error(tmp, "[tmp_file] Error: tmp file write terminator failed.\n"); + return TMP_SAM_FILE_ERROR; + } + + fflush(tmp->fp); + + LZ4_freeStream(tmp->stream); + + return TMP_SAM_OK; +} + + +/* + * An alternative to tmp_file_open_read but works on an open file. + * Companion function to tmp_file_end_write above. + * Returns 0 on success, a negative number on failure. + */ +int tmp_file_begin_read(tmp_file_t *tmp, bam1_t *inbam) { + + rewind(tmp->fp); + + tmp->dstream = LZ4_createStreamDecode(); + tmp->offset = 0; + tmp->entry_number = tmp->group_size; + + if (inbam) { + free(inbam->data); + } + + if (!tmp->dstream) { + tmp_print_error(tmp, "[tmp_file] Error: unable to allocate compression stream.\n"); + return TMP_SAM_MEM_ERROR; + } + + return TMP_SAM_OK; +} + + +/* + * Read the next alignment, either from memory or from disk. + * Returns size of entry on success, 0 on end of file or a negative on error. + */ +int tmp_file_read(tmp_file_t *tmp, bam1_t *inbam) { + int entry_size; + + if (tmp->entry_number == tmp->group_size) { + // read more data + size_t comp_size; + + if (fread(&comp_size, sizeof(size_t), 1, tmp->fp) == 0 || comp_size == 0) { + return TMP_SAM_OK; + } + + if (tmp->offset >= tmp->ring_buffer_size - tmp->max_data_size) + tmp->offset = 0; + + tmp->ring_index = tmp->ring_buffer + tmp->offset; + + if (fread(tmp->comp_buffer, sizeof(char), comp_size, tmp->fp) > comp_size) { + tmp_print_error(tmp, "[tmp_file] Error: error reading compressed data.\n"); + return TMP_SAM_FILE_ERROR; + } + + tmp->output_size = LZ4_decompress_safe_continue(tmp->dstream, tmp->comp_buffer, + (char *)tmp->ring_index, comp_size, tmp->max_data_size); + + if (tmp->output_size == 0) { + tmp_print_error(tmp, "[tmp_file] Error: decompression failed.\n"); + return TMP_SAM_LZ4_ERROR; + } + + tmp->entry_number = 0; + tmp->read_size = 0; + } + + tmp->ring_index = tmp->ring_buffer + tmp->offset; + memcpy(inbam, tmp->ring_index, sizeof(bam1_t)); + + if ((unsigned int)inbam->l_data > tmp->data_size) { + if ((tmp->data = realloc(tmp->data, sizeof(uint8_t) * inbam->l_data)) == NULL) { + tmp_print_error(tmp, "[tmp_file] Error: unable to allocate tmp data memory.\n"); + return TMP_SAM_MEM_ERROR; + } + + tmp->data_size = inbam->l_data; + } + + inbam->data = tmp->data; + entry_size = sizeof(bam1_t); + + memcpy(inbam->data, tmp->ring_index + entry_size, inbam->l_data); + entry_size += inbam->l_data; + + tmp->offset += entry_size; + tmp->read_size += entry_size; + tmp->entry_number++; + + if (tmp->read_size > tmp->output_size) { + tmp_print_error(tmp, "[tmp_file] Error: wrong size of data returned RS:%ld OS:%ld EN:%ld GS:%ld.\n", + tmp->read_size, tmp->output_size, tmp->entry_number, tmp->group_size); + return TMP_SAM_LZ4_ERROR; + } + + if (tmp->read_size == tmp->output_size && tmp->entry_number != tmp->group_size) { + // hopefully the last entries in the read file + tmp->entry_number = tmp->group_size; + } + + return entry_size; +} + + +/* + * Frees up memory, closes the file and optionally deletes it. Giving this function + * pointer to the bam1_t structure used for reading will set its data value to null, + * preventing bam_destroy1() from trying to free already freed memory. + * Returns 0 on success, a negative number or EOF on failure. + */ +int tmp_file_destroy(tmp_file_t *tmp, bam1_t *inbam, int delete) { + int ret = 0; + + ret = fclose(tmp->fp); + + if (delete && ret == 0) { + if (unlink(tmp->name)) { + tmp_print_error(tmp, "[tmp_file] Error: unable to delete file %s.\n", tmp->name); + ret = TMP_SAM_FILE_ERROR; + } + } + + LZ4_freeStreamDecode(tmp->dstream); + free(tmp->ring_buffer); + free(tmp->comp_buffer); + free(tmp->name); + free(tmp->data); + free(tmp->dict); + + + if (inbam) { + inbam->data = NULL; + } + + return ret; +} diff --git a/samtools/tmp_file.c.pysam.c b/samtools/tmp_file.c.pysam.c new file mode 100644 index 0000000..3a00b38 --- /dev/null +++ b/samtools/tmp_file.c.pysam.c @@ -0,0 +1,509 @@ +#include "samtools.pysam.h" + +/* + tmp_file.c - write to and read from a temporary binary file + for fast storage plus added compression. + + Copyright (C) 2017 Genome Research Ltd. + + Author: Andrew Whitwham + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE +*/ + +#include + +#include +#include +#include +#include +#include +#include +#include + +#ifdef _WIN32 +#include +#endif /* _WIN32 */ + +#include "tmp_file.h" +#include "htslib/sam.h" + + +static void tmp_print_error(tmp_file_t *tmp, const char *fmt, ...) { + va_list argp; + + if (tmp->verbose) { + va_start(argp, fmt); + vfprintf(samtools_stderr, fmt, argp); + va_end(argp); + } +} + + +static int tmp_file_init(tmp_file_t *tmp, int verbose) { + tmp->stream = LZ4_createStream(); + tmp->data_size = 0; + tmp->group_size = TMP_SAM_GROUP_SIZE; + tmp->input_size = 0; + tmp->read_size = 0; + tmp->output_size = 0; + tmp->entry_number = 0; + tmp->offset = 0; + tmp->max_data_size = TMP_SAM_MAX_DATA + sizeof(bam1_t); // arbitrary but growable + tmp->ring_buffer_size = TMP_SAM_RING_SIZE; // arbitrary (min 64K) but growable + tmp->comp_buffer_size = LZ4_COMPRESSBOUND(tmp->max_data_size * tmp->group_size); + tmp->data = NULL; + tmp->ring_buffer = malloc(sizeof(uint8_t) * tmp->ring_buffer_size); + tmp->ring_index = tmp->ring_buffer; + tmp->comp_buffer = malloc(tmp->comp_buffer_size); + tmp->verbose = verbose; + tmp->dict = NULL; + tmp->groups_written = 0; + + if (!tmp->ring_buffer || !tmp->comp_buffer || !tmp->stream) { + tmp_print_error(tmp, "[tmp_file] Error: unable to allocate compression buffers.\n"); + return TMP_SAM_MEM_ERROR; + } + + return TMP_SAM_OK; +} + + +/* + * Opens the temp file and initialises memory. + * Verbose mode prints out error messages to samtools_stderr. + * Returns 0 on success, a negative number on failure. + */ +int tmp_file_open_write(tmp_file_t *tmp, char *tmp_name, int verbose) { + int ret; + unsigned int count = 1; + const unsigned int max_count = 100000; // more tries than this then something else is wrong + int fd; + + if ((ret = tmp_file_init(tmp, verbose))) { + return ret; + } + + // make space to write extended file name + if ((tmp->name = malloc(strlen(tmp_name) + 7)) == NULL) { + tmp_print_error(tmp, "[tmp_file] Error: unable to allocate memory for %s.\n", tmp_name); + return TMP_SAM_MEM_ERROR; + } + + // make sure temp file has a unique name + while (count < max_count) { + sprintf(tmp->name, "%s.%d", tmp_name, count); + + + #ifdef _WIN32 + if ((fd = _open(tmp->name, O_RDWR|O_CREAT|O_EXCL|O_BINARY|O_TEMPORARY, 0600)) == -1) { + #else + if ((fd = open(tmp->name, O_RDWR|O_CREAT|O_EXCL, 0600)) == -1) { + #endif /* _WIN32 */ + + if (errno != EEXIST) { + tmp_print_error(tmp, "[tmp_file] Error: unable to create tmp file %s.\n", tmp->name); + return TMP_SAM_FILE_ERROR; + } + + count++; + continue; + } + + break; + } + + if (count >= max_count) { + tmp_print_error(tmp, "[tmp_file] Error: unable to create unique temp file.\n"); + return TMP_SAM_FILE_ERROR; + } + + if ((tmp->fp = fdopen(fd, "w+b")) == NULL) { + tmp_print_error(tmp, "[tmp_file] Error: unable to open write file %s.\n", tmp->name); + return TMP_SAM_FILE_ERROR; + } + + #ifndef _WIN32 + unlink(tmp->name); // should auto delete when closed on linux + #endif + + return TMP_SAM_OK; +} + + +/* + * The ring buffer stores precompressionn/post decompression data. LZ4 requires that + * previous data (64K worth) be available for efficient compression. This function grows + * the ring buffer when needed. + * Returns 0 on success, a negative number on failure. + */ +static int tmp_file_grow_ring_buffer(tmp_file_t *tmp, size_t new_size) { + // save the dictionary so lz4 can continue to function + int dict_size = 64 * 1024; // 64K max size + + if (tmp->groups_written) { + // if compression has been done then there is a dictionary to save + + if (tmp->dict == NULL) { + + if ((tmp->dict = malloc(sizeof(char) * dict_size)) == NULL) { + tmp_print_error(tmp, "[tmp_file] Error: unable to allocate memory for compression dictionary.\n"); + return TMP_SAM_MEM_ERROR; + } + } + + if (LZ4_saveDict(tmp->stream, tmp->dict, dict_size) == 0) { + tmp_print_error(tmp, "[tmp_file] Error: unable to save compression dictionary.\n"); + return TMP_SAM_LZ4_ERROR; + } + } + + if ((tmp->ring_buffer = realloc(tmp->ring_buffer, sizeof(char) * new_size)) == NULL) { + tmp_print_error(tmp, "[tmp_file] Error: unable to reallocate ring buffer.\n"); + return TMP_SAM_MEM_ERROR; + } + + tmp->ring_buffer_size = new_size; + + return TMP_SAM_OK; +} + + +/* + * This does the actual compression and writing to disk. On disk format consists of a + * single size_t for the size of the compressed data followed by the data itself. + * Returns 0 on success, a negative number on failure. + */ +static int tmp_file_write_to_file(tmp_file_t *tmp) { + size_t comp_size; + + if (tmp->input_size > tmp->max_data_size) { + tmp->max_data_size += tmp->input_size + sizeof(bam1_t); + tmp->comp_buffer_size = LZ4_COMPRESSBOUND(tmp->max_data_size); + + if ((tmp->comp_buffer = realloc(tmp->comp_buffer, sizeof(char) * tmp->comp_buffer_size)) == NULL) { + tmp_print_error(tmp, "[tmp_file] Error: unable to reallocate compression buffer.\n"); + return TMP_SAM_MEM_ERROR; + } + + // make sure the ring buffer is big enough to accommodate the new max_data_size + if (tmp->ring_buffer_size < tmp->max_data_size * 5) { + int ret; + if ((ret = tmp_file_grow_ring_buffer(tmp, tmp->max_data_size * 5))) { + return ret; + } + } + } + + tmp->ring_index = tmp->ring_buffer + tmp->offset; + + comp_size = LZ4_compress_fast_continue(tmp->stream, (const char *)tmp->ring_index, + tmp->comp_buffer, tmp->input_size, tmp->comp_buffer_size, 1); + + if (comp_size == 0) { + tmp_print_error(tmp, "[tmp_file] Error: compression failed.\n"); + return TMP_SAM_LZ4_ERROR; + } + + if (fwrite(&comp_size, sizeof(size_t), 1, tmp->fp) < 1) { + tmp_print_error(tmp, "[tmp_file] Error: tmp file write size failed.\n"); + return TMP_SAM_FILE_ERROR; + } + + if (fwrite(tmp->comp_buffer, sizeof(char), comp_size, tmp->fp) < comp_size) { + tmp_print_error(tmp, "[tmp_file] Error: tmp file write data failed.\n"); + return TMP_SAM_FILE_ERROR; + } + + tmp->offset += tmp->input_size; + + if (tmp->offset >= tmp->ring_buffer_size - tmp->max_data_size) + tmp->offset = 0; + + tmp->input_size = 0; + tmp->entry_number = 0; + tmp->groups_written++; + + return TMP_SAM_OK; +} + + +/* + * Stores an in memory bam structure for writing and if enough are gathered together writes + * it to disk. Mulitiple alignments compress better that single ones though after a certain number + * there is a law of diminishing returns. + * Returns 0 on success, a negative number on failure. + */ +int tmp_file_write(tmp_file_t *tmp, bam1_t *inbam) { + + if ((tmp->input_size + sizeof(bam1_t) + inbam->l_data) >= tmp->ring_buffer_size) { + int ret; + + if ((ret = tmp_file_grow_ring_buffer(tmp, (tmp->input_size + sizeof(bam1_t) + inbam->l_data) * 5))) { + tmp_print_error(tmp, "[tmp_file] Error: input line too big. (%ld).\n", + (tmp->input_size + inbam->l_data)); + + return ret; + } + } + + tmp->ring_index = tmp->ring_buffer + tmp->offset + tmp->input_size; + + // copy data into the ring buffer + memcpy(tmp->ring_index, inbam, sizeof(bam1_t)); + memcpy(tmp->ring_index + sizeof(bam1_t) , inbam->data, inbam->l_data); + tmp->input_size += sizeof(bam1_t) + inbam->l_data; + tmp->entry_number++; + + if (tmp->entry_number == tmp->group_size) { + // actually write out the data + int ret; + + if ((ret = tmp_file_write_to_file(tmp))) { + return ret; + } + } + + return TMP_SAM_OK; +} + + +/* + * Closes the file after writing out any remaining alignments. Adds a size_t 0 to + * mark the end of the file. Companion function to tmp_file_open_read below. + * Returns 0 on success, a negative number on failure. + */ +int tmp_file_close_write(tmp_file_t *tmp) { + size_t terminator = 0; + + if (tmp->entry_number) { + int ret; + + if ((ret = tmp_file_write_to_file(tmp))) { + return ret; + } + } + + if (fwrite(&terminator, sizeof(size_t), 1, tmp->fp) < 1) { + tmp_print_error(tmp, "[tmp_file] Error: tmp file write terminator failed.\n"); + return TMP_SAM_FILE_ERROR; + } + + if (fclose(tmp->fp)) { + tmp_print_error(tmp, "[tmp_file] Error: closing tmp file %s failed.\n", tmp->name); + return TMP_SAM_FILE_ERROR; + } + + LZ4_freeStream(tmp->stream); + + return TMP_SAM_OK; +} + + +/* + * Opens the file for reading. Optionally, if given a pointer to an existing + * bam1_t structure, it will free the data entry to prevent memory leaks. + * Companion function to tmp_file_close_write above. + * Returns 0 on success, a negative number on failure. + */ +int tmp_file_open_read(tmp_file_t *tmp, bam1_t *inbam) { + + if ((tmp->fp = fopen(tmp->name, "rb")) == NULL) { + tmp_print_error(tmp, "[tmp_file] Error: unable to open read file %s.\n", tmp->name); + return TMP_SAM_FILE_ERROR; + } + + tmp->dstream = LZ4_createStreamDecode(); + tmp->offset = 0; + + if (inbam) { + free(inbam->data); + } + + if (!tmp->dstream) { + tmp_print_error(tmp, "[tmp_file] Error: unable to allocate compression stream.\n"); + return TMP_SAM_MEM_ERROR; + } + + + return TMP_SAM_OK; +} + + +/* + * An alternative to tmp_file_close_write that does the same job without actually + * closing the file. Companion function to tmp_file_begin_read below. + * Returns 0 on success, a negative number on failure. + */ +int tmp_file_end_write(tmp_file_t *tmp) { + size_t terminator = 0; + + if (tmp->entry_number) { + int ret; + + if ((ret = tmp_file_write_to_file(tmp))) { + return ret; + } + } + + if (fwrite(&terminator, sizeof(size_t), 1, tmp->fp) < 1) { + tmp_print_error(tmp, "[tmp_file] Error: tmp file write terminator failed.\n"); + return TMP_SAM_FILE_ERROR; + } + + fflush(tmp->fp); + + LZ4_freeStream(tmp->stream); + + return TMP_SAM_OK; +} + + +/* + * An alternative to tmp_file_open_read but works on an open file. + * Companion function to tmp_file_end_write above. + * Returns 0 on success, a negative number on failure. + */ +int tmp_file_begin_read(tmp_file_t *tmp, bam1_t *inbam) { + + rewind(tmp->fp); + + tmp->dstream = LZ4_createStreamDecode(); + tmp->offset = 0; + tmp->entry_number = tmp->group_size; + + if (inbam) { + free(inbam->data); + } + + if (!tmp->dstream) { + tmp_print_error(tmp, "[tmp_file] Error: unable to allocate compression stream.\n"); + return TMP_SAM_MEM_ERROR; + } + + return TMP_SAM_OK; +} + + +/* + * Read the next alignment, either from memory or from disk. + * Returns size of entry on success, 0 on end of file or a negative on error. + */ +int tmp_file_read(tmp_file_t *tmp, bam1_t *inbam) { + int entry_size; + + if (tmp->entry_number == tmp->group_size) { + // read more data + size_t comp_size; + + if (fread(&comp_size, sizeof(size_t), 1, tmp->fp) == 0 || comp_size == 0) { + return TMP_SAM_OK; + } + + if (tmp->offset >= tmp->ring_buffer_size - tmp->max_data_size) + tmp->offset = 0; + + tmp->ring_index = tmp->ring_buffer + tmp->offset; + + if (fread(tmp->comp_buffer, sizeof(char), comp_size, tmp->fp) > comp_size) { + tmp_print_error(tmp, "[tmp_file] Error: error reading compressed data.\n"); + return TMP_SAM_FILE_ERROR; + } + + tmp->output_size = LZ4_decompress_safe_continue(tmp->dstream, tmp->comp_buffer, + (char *)tmp->ring_index, comp_size, tmp->max_data_size); + + if (tmp->output_size == 0) { + tmp_print_error(tmp, "[tmp_file] Error: decompression failed.\n"); + return TMP_SAM_LZ4_ERROR; + } + + tmp->entry_number = 0; + tmp->read_size = 0; + } + + tmp->ring_index = tmp->ring_buffer + tmp->offset; + memcpy(inbam, tmp->ring_index, sizeof(bam1_t)); + + if ((unsigned int)inbam->l_data > tmp->data_size) { + if ((tmp->data = realloc(tmp->data, sizeof(uint8_t) * inbam->l_data)) == NULL) { + tmp_print_error(tmp, "[tmp_file] Error: unable to allocate tmp data memory.\n"); + return TMP_SAM_MEM_ERROR; + } + + tmp->data_size = inbam->l_data; + } + + inbam->data = tmp->data; + entry_size = sizeof(bam1_t); + + memcpy(inbam->data, tmp->ring_index + entry_size, inbam->l_data); + entry_size += inbam->l_data; + + tmp->offset += entry_size; + tmp->read_size += entry_size; + tmp->entry_number++; + + if (tmp->read_size > tmp->output_size) { + tmp_print_error(tmp, "[tmp_file] Error: wrong size of data returned RS:%ld OS:%ld EN:%ld GS:%ld.\n", + tmp->read_size, tmp->output_size, tmp->entry_number, tmp->group_size); + return TMP_SAM_LZ4_ERROR; + } + + if (tmp->read_size == tmp->output_size && tmp->entry_number != tmp->group_size) { + // hopefully the last entries in the read file + tmp->entry_number = tmp->group_size; + } + + return entry_size; +} + + +/* + * Frees up memory, closes the file and optionally deletes it. Giving this function + * pointer to the bam1_t structure used for reading will set its data value to null, + * preventing bam_destroy1() from trying to free already freed memory. + * Returns 0 on success, a negative number or EOF on failure. + */ +int tmp_file_destroy(tmp_file_t *tmp, bam1_t *inbam, int delete) { + int ret = 0; + + ret = fclose(tmp->fp); + + if (delete && ret == 0) { + if (unlink(tmp->name)) { + tmp_print_error(tmp, "[tmp_file] Error: unable to delete file %s.\n", tmp->name); + ret = TMP_SAM_FILE_ERROR; + } + } + + LZ4_freeStreamDecode(tmp->dstream); + free(tmp->ring_buffer); + free(tmp->comp_buffer); + free(tmp->name); + free(tmp->data); + free(tmp->dict); + + + if (inbam) { + inbam->data = NULL; + } + + return ret; +} diff --git a/samtools/tmp_file.h b/samtools/tmp_file.h new file mode 100644 index 0000000..74e4126 --- /dev/null +++ b/samtools/tmp_file.h @@ -0,0 +1,144 @@ +/* + tmp_file.h - write to and read from a temporary binary file + for fast storage plus added compression. + + Copyright (C) 2017 Genome Research Ltd. + + Author: Andrew Whitwham + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE +*/ + +#ifndef _TMP_SAM_FILE_H_ +#define _TMP_SAM_FILE_H_ + +#include +#include "htslib/sam.h" + +#ifdef _cplusplus +extern "C" { +#endif + +// Group size that seems to give reasonable compression. +#define TMP_SAM_GROUP_SIZE 100 + +// Arbitrary initial size values but growable. +#define TMP_SAM_MAX_DATA 1024 +#define TMP_SAM_RING_SIZE 1048576 + +// Error numbers. +#define TMP_SAM_OK 0 +#define TMP_SAM_MEM_ERROR -1 +#define TMP_SAM_FILE_ERROR -2 +#define TMP_SAM_LZ4_ERROR -3 +#define TMP_SAM_INPUT_ERROR -4 + +typedef struct { + FILE *fp; + LZ4_stream_t *stream; + LZ4_streamDecode_t *dstream; + size_t data_size; + size_t max_data_size; + size_t ring_buffer_size; + size_t comp_buffer_size; + size_t offset; + uint8_t *data; + uint8_t *ring_buffer; + uint8_t *ring_index; + char *comp_buffer; + char *name; + size_t group_size; + size_t input_size; + size_t read_size; + size_t output_size; + size_t entry_number; + int verbose; + char *dict; + size_t groups_written; +} tmp_file_t; + + +/* + * Opens the temp file and initialises memory. + * Verbose mode prints out error messages to stderr. + * Returns 0 on success, a negative number on failure. + */ +int tmp_file_open_write(tmp_file_t *tmp, char *tmp_name, int verbose); + + +/* + * Stores an in memory bam structure for writing and if enough are gathered together writes + * it to disk. Mulitiple alignments compress better that single ones though after a certain number + * there is a law of diminishing returns. + * Returns 0 on success, a negative number on failure. + */ +int tmp_file_write(tmp_file_t *tmp, bam1_t *inbam); + + +/* + * Closes the file after writing out any remaining alignments. Adds a size_t 0 to + * mark the end of the file. Companion function to tmp_file_open_read below. + * Returns 0 on success, a negative number on failure. + */ +int tmp_file_close_write(tmp_file_t *tmp); + + +/* + * Opens the file for reading. Optionally, if given a pointer to an existing + * bam1_t structure, it will free the data entry to prevent memory leaks. + * Companion function to tmp_file_close_write above. + * Returns 0 on success, a negative number on failure. + */ +int tmp_file_open_read(tmp_file_t *tmp, bam1_t *inbam); + + +/* + * An alternative to tmp_file_close_write that does the same job without actually + * closing the file. Companion function to tmp_file_begin_read below. + * Returns 0 on success, a negative number on failure. + */ +int tmp_file_end_write(tmp_file_t *tmp); + +/* + * An alternative to tmp_file_open_read but works on an open file. + * Companion function to tmp_file_end_write above. + * Returns 0 on success, a negative number on failure. + */ +int tmp_file_begin_read(tmp_file_t *tmp, bam1_t *inbam); + +/* + * Read the next alignment, either from memory or from disk. + * Returns size of entry on success, 0 on end of file or a negative on error. + */ +int tmp_file_read(tmp_file_t *tmp, bam1_t *inbam); + + +/* + * Frees up memory, closes the file and optionally deletes it. Giving this function + * pointer to the bam1_t structure used for reading will set its data value to null, + * preventing bam_destroy1() from trying to free already freed memory. + * Returns 0 on success, a negative number or EOF on failure. + */ +int tmp_file_destroy(tmp_file_t *tmp, bam1_t *inbam, int delete); + +#ifdef __cplusplus +} +#endif + +#endif /* _TMP_SAM_FILE_H_ */ diff --git a/samtools/version.h b/samtools/version.h new file mode 100644 index 0000000..9dcb73f --- /dev/null +++ b/samtools/version.h @@ -0,0 +1 @@ +#define SAMTOOLS_VERSION "1.7" diff --git a/samtools/win32/xcurses.h b/samtools/win32/xcurses.h new file mode 100644 index 0000000..6f3ce19 --- /dev/null +++ b/samtools/win32/xcurses.h @@ -0,0 +1,1377 @@ +/* Public Domain Curses */ + +/* $Id: curses.h,v 1.295 2008/07/15 17:13:25 wmcbrine Exp $ */ + +/*----------------------------------------------------------------------* + * PDCurses * + *----------------------------------------------------------------------*/ + +#ifndef __PDCURSES__ +#define __PDCURSES__ 1 + +/*man-start************************************************************** + +PDCurses definitions list: (Only define those needed) + + XCURSES True if compiling for X11. + PDC_RGB True if you want to use RGB color definitions + (Red = 1, Green = 2, Blue = 4) instead of BGR. + PDC_WIDE True if building wide-character support. + PDC_DLL_BUILD True if building a Win32 DLL. + NCURSES_MOUSE_VERSION Use the ncurses mouse API instead + of PDCurses' traditional mouse API. + +PDCurses portable platform definitions list: + + PDC_BUILD Defines API build version. + PDCURSES Enables access to PDCurses-only routines. + XOPEN Always true. + SYSVcurses True if you are compiling for SYSV portability. + BSDcurses True if you are compiling for BSD portability. + +**man-end****************************************************************/ + +#define PDC_BUILD 3401 +#define PDCURSES 1 /* PDCurses-only routines */ +#define XOPEN 1 /* X/Open Curses routines */ +#define SYSVcurses 1 /* System V Curses routines */ +#define BSDcurses 1 /* BSD Curses routines */ +#define CHTYPE_LONG 1 /* size of chtype; long */ + +/*----------------------------------------------------------------------*/ + +#include +#include +#include /* Required by X/Open usage below */ + +#ifdef PDC_WIDE +# include +#endif + +#if defined(__cplusplus) || defined(__cplusplus__) || defined(__CPLUSPLUS) +extern "C" +{ +# define bool _bool +#endif + +/*---------------------------------------------------------------------- + * + * PDCurses Manifest Constants + * + */ + +#ifndef FALSE +# define FALSE 0 +#endif +#ifndef TRUE +# define TRUE 1 +#endif +#ifndef NULL +# define NULL (void *)0 +#endif +#ifndef ERR +# define ERR (-1) +#endif +#ifndef OK +# define OK 0 +#endif + +/*---------------------------------------------------------------------- + * + * PDCurses Type Declarations + * + */ + +typedef unsigned char bool; /* PDCurses Boolean type */ + +#ifdef CHTYPE_LONG +# if _LP64 +typedef unsigned int chtype; +# else +typedef unsigned long chtype; /* 16-bit attr + 16-bit char */ +# endif +#else +typedef unsigned short chtype; /* 8-bit attr + 8-bit char */ +#endif + +#ifdef PDC_WIDE +typedef chtype cchar_t; +#endif + +typedef chtype attr_t; + +/*---------------------------------------------------------------------- + * + * PDCurses Mouse Interface -- SYSVR4, with extensions + * + */ + +typedef struct +{ + int x; /* absolute column, 0 based, measured in characters */ + int y; /* absolute row, 0 based, measured in characters */ + short button[3]; /* state of each button */ + int changes; /* flags indicating what has changed with the mouse */ +} MOUSE_STATUS; + +#define BUTTON_RELEASED 0x0000 +#define BUTTON_PRESSED 0x0001 +#define BUTTON_CLICKED 0x0002 +#define BUTTON_DOUBLE_CLICKED 0x0003 +#define BUTTON_TRIPLE_CLICKED 0x0004 +#define BUTTON_MOVED 0x0005 /* PDCurses */ +#define WHEEL_SCROLLED 0x0006 /* PDCurses */ +#define BUTTON_ACTION_MASK 0x0007 /* PDCurses */ + +#define PDC_BUTTON_SHIFT 0x0008 /* PDCurses */ +#define PDC_BUTTON_CONTROL 0x0010 /* PDCurses */ +#define PDC_BUTTON_ALT 0x0020 /* PDCurses */ +#define BUTTON_MODIFIER_MASK 0x0038 /* PDCurses */ + +#define MOUSE_X_POS (Mouse_status.x) +#define MOUSE_Y_POS (Mouse_status.y) + +/* + * Bits associated with the .changes field: + * 3 2 1 0 + * 210987654321098765432109876543210 + * 1 <- button 1 has changed + * 10 <- button 2 has changed + * 100 <- button 3 has changed + * 1000 <- mouse has moved + * 10000 <- mouse position report + * 100000 <- mouse wheel up + * 1000000 <- mouse wheel down + */ + +#define PDC_MOUSE_MOVED 0x0008 +#define PDC_MOUSE_POSITION 0x0010 +#define PDC_MOUSE_WHEEL_UP 0x0020 +#define PDC_MOUSE_WHEEL_DOWN 0x0040 + +#define A_BUTTON_CHANGED (Mouse_status.changes & 7) +#define MOUSE_MOVED (Mouse_status.changes & PDC_MOUSE_MOVED) +#define MOUSE_POS_REPORT (Mouse_status.changes & PDC_MOUSE_POSITION) +#define BUTTON_CHANGED(x) (Mouse_status.changes & (1 << ((x) - 1))) +#define BUTTON_STATUS(x) (Mouse_status.button[(x) - 1]) +#define MOUSE_WHEEL_UP (Mouse_status.changes & PDC_MOUSE_WHEEL_UP) +#define MOUSE_WHEEL_DOWN (Mouse_status.changes & PDC_MOUSE_WHEEL_DOWN) + +/* mouse bit-masks */ + +#define BUTTON1_RELEASED 0x00000001L +#define BUTTON1_PRESSED 0x00000002L +#define BUTTON1_CLICKED 0x00000004L +#define BUTTON1_DOUBLE_CLICKED 0x00000008L +#define BUTTON1_TRIPLE_CLICKED 0x00000010L +#define BUTTON1_MOVED 0x00000010L /* PDCurses */ + +#define BUTTON2_RELEASED 0x00000020L +#define BUTTON2_PRESSED 0x00000040L +#define BUTTON2_CLICKED 0x00000080L +#define BUTTON2_DOUBLE_CLICKED 0x00000100L +#define BUTTON2_TRIPLE_CLICKED 0x00000200L +#define BUTTON2_MOVED 0x00000200L /* PDCurses */ + +#define BUTTON3_RELEASED 0x00000400L +#define BUTTON3_PRESSED 0x00000800L +#define BUTTON3_CLICKED 0x00001000L +#define BUTTON3_DOUBLE_CLICKED 0x00002000L +#define BUTTON3_TRIPLE_CLICKED 0x00004000L +#define BUTTON3_MOVED 0x00004000L /* PDCurses */ + +/* For the ncurses-compatible functions only, BUTTON4_PRESSED and + BUTTON5_PRESSED are returned for mouse scroll wheel up and down; + otherwise PDCurses doesn't support buttons 4 and 5 */ + +#define BUTTON4_RELEASED 0x00008000L +#define BUTTON4_PRESSED 0x00010000L +#define BUTTON4_CLICKED 0x00020000L +#define BUTTON4_DOUBLE_CLICKED 0x00040000L +#define BUTTON4_TRIPLE_CLICKED 0x00080000L + +#define BUTTON5_RELEASED 0x00100000L +#define BUTTON5_PRESSED 0x00200000L +#define BUTTON5_CLICKED 0x00400000L +#define BUTTON5_DOUBLE_CLICKED 0x00800000L +#define BUTTON5_TRIPLE_CLICKED 0x01000000L + +#define MOUSE_WHEEL_SCROLL 0x02000000L /* PDCurses */ +#define BUTTON_MODIFIER_SHIFT 0x04000000L /* PDCurses */ +#define BUTTON_MODIFIER_CONTROL 0x08000000L /* PDCurses */ +#define BUTTON_MODIFIER_ALT 0x10000000L /* PDCurses */ + +#define ALL_MOUSE_EVENTS 0x1fffffffL +#define REPORT_MOUSE_POSITION 0x20000000L + +/* ncurses mouse interface */ + +typedef unsigned long mmask_t; + +typedef struct +{ + short id; /* unused, always 0 */ + int x, y, z; /* x, y same as MOUSE_STATUS; z unused */ + mmask_t bstate; /* equivalent to changes + button[], but + in the same format as used for mousemask() */ +} MEVENT; + +#ifdef NCURSES_MOUSE_VERSION +# define BUTTON_SHIFT BUTTON_MODIFIER_SHIFT +# define BUTTON_CONTROL BUTTON_MODIFIER_CONTROL +# define BUTTON_CTRL BUTTON_MODIFIER_CONTROL +# define BUTTON_ALT BUTTON_MODIFIER_ALT +#else +# define BUTTON_SHIFT PDC_BUTTON_SHIFT +# define BUTTON_CONTROL PDC_BUTTON_CONTROL +# define BUTTON_ALT PDC_BUTTON_ALT +#endif + +/*---------------------------------------------------------------------- + * + * PDCurses Structure Definitions + * + */ + +typedef struct _win /* definition of a window */ +{ + int _cury; /* current pseudo-cursor */ + int _curx; + int _maxy; /* max window coordinates */ + int _maxx; + int _begy; /* origin on screen */ + int _begx; + int _flags; /* window properties */ + chtype _attrs; /* standard attributes and colors */ + chtype _bkgd; /* background, normally blank */ + bool _clear; /* causes clear at next refresh */ + bool _leaveit; /* leaves cursor where it is */ + bool _scroll; /* allows window scrolling */ + bool _nodelay; /* input character wait flag */ + bool _immed; /* immediate update flag */ + bool _sync; /* synchronise window ancestors */ + bool _use_keypad; /* flags keypad key mode active */ + chtype **_y; /* pointer to line pointer array */ + int *_firstch; /* first changed character in line */ + int *_lastch; /* last changed character in line */ + int _tmarg; /* top of scrolling region */ + int _bmarg; /* bottom of scrolling region */ + int _delayms; /* milliseconds of delay for getch() */ + int _parx, _pary; /* coords relative to parent (0,0) */ + struct _win *_parent; /* subwin's pointer to parent win */ +} WINDOW; + +/* Avoid using the SCREEN struct directly -- use the corresponding + functions if possible. This struct may eventually be made private. */ + +typedef struct +{ + bool alive; /* if initscr() called, and not endwin() */ + bool autocr; /* if cr -> lf */ + bool cbreak; /* if terminal unbuffered */ + bool echo; /* if terminal echo */ + bool raw_inp; /* raw input mode (v. cooked input) */ + bool raw_out; /* raw output mode (7 v. 8 bits) */ + bool audible; /* FALSE if the bell is visual */ + bool mono; /* TRUE if current screen is mono */ + bool resized; /* TRUE if TERM has been resized */ + bool orig_attr; /* TRUE if we have the original colors */ + short orig_fore; /* original screen foreground color */ + short orig_back; /* original screen foreground color */ + int cursrow; /* position of physical cursor */ + int curscol; /* position of physical cursor */ + int visibility; /* visibility of cursor */ + int orig_cursor; /* original cursor size */ + int lines; /* new value for LINES */ + int cols; /* new value for COLS */ + unsigned long _trap_mbe; /* trap these mouse button events */ + unsigned long _map_mbe_to_key; /* map mouse buttons to slk */ + int mouse_wait; /* time to wait (in ms) for a + button release after a press, in + order to count it as a click */ + int slklines; /* lines in use by slk_init() */ + WINDOW *slk_winptr; /* window for slk */ + int linesrippedoff; /* lines ripped off via ripoffline() */ + int linesrippedoffontop; /* lines ripped off on + top via ripoffline() */ + int delaytenths; /* 1/10ths second to wait block + getch() for */ + bool _preserve; /* TRUE if screen background + to be preserved */ + int _restore; /* specifies if screen background + to be restored, and how */ + bool save_key_modifiers; /* TRUE if each key modifiers saved + with each key press */ + bool return_key_modifiers; /* TRUE if modifier keys are + returned as "real" keys */ + bool key_code; /* TRUE if last key is a special key; + used internally by get_wch() */ +#ifdef XCURSES + int XcurscrSize; /* size of Xcurscr shared memory block */ + bool sb_on; + int sb_viewport_y; + int sb_viewport_x; + int sb_total_y; + int sb_total_x; + int sb_cur_y; + int sb_cur_x; +#endif + short line_color; /* color of line attributes - default -1 */ +} SCREEN; + +/*---------------------------------------------------------------------- + * + * PDCurses External Variables + * + */ + +#ifdef PDC_DLL_BUILD +# ifdef CURSES_LIBRARY +# define PDCEX __declspec(dllexport) extern +# else +# define PDCEX __declspec(dllimport) +# endif +#else +# define PDCEX extern +#endif + +PDCEX int LINES; /* terminal height */ +PDCEX int COLS; /* terminal width */ +PDCEX WINDOW *stdscr; /* the default screen window */ +PDCEX WINDOW *curscr; /* the current screen image */ +PDCEX SCREEN *SP; /* curses variables */ +PDCEX MOUSE_STATUS Mouse_status; +PDCEX int COLORS; +PDCEX int COLOR_PAIRS; +PDCEX int TABSIZE; +PDCEX chtype acs_map[]; /* alternate character set map */ +PDCEX char ttytype[]; /* terminal name/description */ + +/*man-start************************************************************** + +PDCurses Text Attributes +======================== + +Originally, PDCurses used a short (16 bits) for its chtype. To include +color, a number of things had to be sacrificed from the strict Unix and +System V support. The main problem was fitting all character attributes +and color into an unsigned char (all 8 bits!). + +Today, PDCurses by default uses a long (32 bits) for its chtype, as in +System V. The short chtype is still available, by undefining CHTYPE_LONG +and rebuilding the library. + +The following is the structure of a win->_attrs chtype: + +short form: + +------------------------------------------------- +|15|14|13|12|11|10| 9| 8| 7| 6| 5| 4| 3| 2| 1| 0| +------------------------------------------------- + color number | attrs | character eg 'a' + +The available non-color attributes are bold, reverse and blink. Others +have no effect. The high order char is an index into an array of +physical colors (defined in color.c) -- 32 foreground/background color +pairs (5 bits) plus 3 bits for other attributes. + +long form: + +---------------------------------------------------------------------------- +|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|..| 3| 2| 1| 0| +---------------------------------------------------------------------------- + color number | modifiers | character eg 'a' + +The available non-color attributes are bold, underline, invisible, +right-line, left-line, protect, reverse and blink. 256 color pairs (8 +bits), 8 bits for other attributes, and 16 bits for character data. + +**man-end****************************************************************/ + +/*** Video attribute macros ***/ + +#define A_NORMAL (chtype)0 + +#ifdef CHTYPE_LONG +# define A_ALTCHARSET (chtype)0x00010000 +# define A_RIGHTLINE (chtype)0x00020000 +# define A_LEFTLINE (chtype)0x00040000 +# define A_INVIS (chtype)0x00080000 +# define A_UNDERLINE (chtype)0x00100000 +# define A_REVERSE (chtype)0x00200000 +# define A_BLINK (chtype)0x00400000 +# define A_BOLD (chtype)0x00800000 + +# define A_ATTRIBUTES (chtype)0xffff0000 +# define A_CHARTEXT (chtype)0x0000ffff +# define A_COLOR (chtype)0xff000000 + +# define A_ITALIC A_INVIS +# define A_PROTECT (A_UNDERLINE | A_LEFTLINE | A_RIGHTLINE) + +# define PDC_ATTR_SHIFT 19 +# define PDC_COLOR_SHIFT 24 +#else +# define A_BOLD (chtype)0x0100 /* X/Open */ +# define A_REVERSE (chtype)0x0200 /* X/Open */ +# define A_BLINK (chtype)0x0400 /* X/Open */ + +# define A_ATTRIBUTES (chtype)0xff00 /* X/Open */ +# define A_CHARTEXT (chtype)0x00ff /* X/Open */ +# define A_COLOR (chtype)0xf800 /* System V */ + +# define A_ALTCHARSET A_NORMAL /* X/Open */ +# define A_PROTECT A_NORMAL /* X/Open */ +# define A_UNDERLINE A_NORMAL /* X/Open */ + +# define A_LEFTLINE A_NORMAL +# define A_RIGHTLINE A_NORMAL +# define A_ITALIC A_NORMAL +# define A_INVIS A_NORMAL + +# define PDC_ATTR_SHIFT 8 +# define PDC_COLOR_SHIFT 11 +#endif + +#define A_STANDOUT (A_REVERSE | A_BOLD) /* X/Open */ +#define A_DIM A_NORMAL + +#define CHR_MSK A_CHARTEXT /* Obsolete */ +#define ATR_MSK A_ATTRIBUTES /* Obsolete */ +#define ATR_NRM A_NORMAL /* Obsolete */ + +/* For use with attr_t -- X/Open says, "these shall be distinct", so + this is a non-conforming implementation. */ + +#define WA_ALTCHARSET A_ALTCHARSET +#define WA_BLINK A_BLINK +#define WA_BOLD A_BOLD +#define WA_DIM A_DIM +#define WA_INVIS A_INVIS +#define WA_LEFT A_LEFTLINE +#define WA_PROTECT A_PROTECT +#define WA_REVERSE A_REVERSE +#define WA_RIGHT A_RIGHTLINE +#define WA_STANDOUT A_STANDOUT +#define WA_UNDERLINE A_UNDERLINE + +#define WA_HORIZONTAL A_NORMAL +#define WA_LOW A_NORMAL +#define WA_TOP A_NORMAL +#define WA_VERTICAL A_NORMAL + +/*** Alternate character set macros ***/ + +/* 'w' = 32-bit chtype; acs_map[] index | A_ALTCHARSET + 'n' = 16-bit chtype; it gets the fallback set because no bit is + available for A_ALTCHARSET */ + +#ifdef CHTYPE_LONG +# define ACS_PICK(w, n) ((chtype)w | A_ALTCHARSET) +#else +# define ACS_PICK(w, n) ((chtype)n) +#endif + +/* VT100-compatible symbols -- box chars */ + +#define ACS_ULCORNER ACS_PICK('l', '+') +#define ACS_LLCORNER ACS_PICK('m', '+') +#define ACS_URCORNER ACS_PICK('k', '+') +#define ACS_LRCORNER ACS_PICK('j', '+') +#define ACS_RTEE ACS_PICK('u', '+') +#define ACS_LTEE ACS_PICK('t', '+') +#define ACS_BTEE ACS_PICK('v', '+') +#define ACS_TTEE ACS_PICK('w', '+') +#define ACS_HLINE ACS_PICK('q', '-') +#define ACS_VLINE ACS_PICK('x', '|') +#define ACS_PLUS ACS_PICK('n', '+') + +/* VT100-compatible symbols -- other */ + +#define ACS_S1 ACS_PICK('o', '-') +#define ACS_S9 ACS_PICK('s', '_') +#define ACS_DIAMOND ACS_PICK('`', '+') +#define ACS_CKBOARD ACS_PICK('a', ':') +#define ACS_DEGREE ACS_PICK('f', '\'') +#define ACS_PLMINUS ACS_PICK('g', '#') +#define ACS_BULLET ACS_PICK('~', 'o') + +/* Teletype 5410v1 symbols -- these are defined in SysV curses, but + are not well-supported by most terminals. Stick to VT100 characters + for optimum portability. */ + +#define ACS_LARROW ACS_PICK(',', '<') +#define ACS_RARROW ACS_PICK('+', '>') +#define ACS_DARROW ACS_PICK('.', 'v') +#define ACS_UARROW ACS_PICK('-', '^') +#define ACS_BOARD ACS_PICK('h', '#') +#define ACS_LANTERN ACS_PICK('i', '*') +#define ACS_BLOCK ACS_PICK('0', '#') + +/* That goes double for these -- undocumented SysV symbols. Don't use + them. */ + +#define ACS_S3 ACS_PICK('p', '-') +#define ACS_S7 ACS_PICK('r', '-') +#define ACS_LEQUAL ACS_PICK('y', '<') +#define ACS_GEQUAL ACS_PICK('z', '>') +#define ACS_PI ACS_PICK('{', 'n') +#define ACS_NEQUAL ACS_PICK('|', '+') +#define ACS_STERLING ACS_PICK('}', 'L') + +/* Box char aliases */ + +#define ACS_BSSB ACS_ULCORNER +#define ACS_SSBB ACS_LLCORNER +#define ACS_BBSS ACS_URCORNER +#define ACS_SBBS ACS_LRCORNER +#define ACS_SBSS ACS_RTEE +#define ACS_SSSB ACS_LTEE +#define ACS_SSBS ACS_BTEE +#define ACS_BSSS ACS_TTEE +#define ACS_BSBS ACS_HLINE +#define ACS_SBSB ACS_VLINE +#define ACS_SSSS ACS_PLUS + +/* cchar_t aliases */ + +#ifdef PDC_WIDE +# define WACS_ULCORNER (&(acs_map['l'])) +# define WACS_LLCORNER (&(acs_map['m'])) +# define WACS_URCORNER (&(acs_map['k'])) +# define WACS_LRCORNER (&(acs_map['j'])) +# define WACS_RTEE (&(acs_map['u'])) +# define WACS_LTEE (&(acs_map['t'])) +# define WACS_BTEE (&(acs_map['v'])) +# define WACS_TTEE (&(acs_map['w'])) +# define WACS_HLINE (&(acs_map['q'])) +# define WACS_VLINE (&(acs_map['x'])) +# define WACS_PLUS (&(acs_map['n'])) + +# define WACS_S1 (&(acs_map['o'])) +# define WACS_S9 (&(acs_map['s'])) +# define WACS_DIAMOND (&(acs_map['`'])) +# define WACS_CKBOARD (&(acs_map['a'])) +# define WACS_DEGREE (&(acs_map['f'])) +# define WACS_PLMINUS (&(acs_map['g'])) +# define WACS_BULLET (&(acs_map['~'])) + +# define WACS_LARROW (&(acs_map[','])) +# define WACS_RARROW (&(acs_map['+'])) +# define WACS_DARROW (&(acs_map['.'])) +# define WACS_UARROW (&(acs_map['-'])) +# define WACS_BOARD (&(acs_map['h'])) +# define WACS_LANTERN (&(acs_map['i'])) +# define WACS_BLOCK (&(acs_map['0'])) + +# define WACS_S3 (&(acs_map['p'])) +# define WACS_S7 (&(acs_map['r'])) +# define WACS_LEQUAL (&(acs_map['y'])) +# define WACS_GEQUAL (&(acs_map['z'])) +# define WACS_PI (&(acs_map['{'])) +# define WACS_NEQUAL (&(acs_map['|'])) +# define WACS_STERLING (&(acs_map['}'])) + +# define WACS_BSSB WACS_ULCORNER +# define WACS_SSBB WACS_LLCORNER +# define WACS_BBSS WACS_URCORNER +# define WACS_SBBS WACS_LRCORNER +# define WACS_SBSS WACS_RTEE +# define WACS_SSSB WACS_LTEE +# define WACS_SSBS WACS_BTEE +# define WACS_BSSS WACS_TTEE +# define WACS_BSBS WACS_HLINE +# define WACS_SBSB WACS_VLINE +# define WACS_SSSS WACS_PLUS +#endif + +/*** Color macros ***/ + +#define COLOR_BLACK 0 + +#ifdef PDC_RGB /* RGB */ +# define COLOR_RED 1 +# define COLOR_GREEN 2 +# define COLOR_BLUE 4 +#else /* BGR */ +# define COLOR_BLUE 1 +# define COLOR_GREEN 2 +# define COLOR_RED 4 +#endif + +#define COLOR_CYAN (COLOR_BLUE | COLOR_GREEN) +#define COLOR_MAGENTA (COLOR_RED | COLOR_BLUE) +#define COLOR_YELLOW (COLOR_RED | COLOR_GREEN) + +#define COLOR_WHITE 7 + +/*---------------------------------------------------------------------- + * + * Function and Keypad Key Definitions. + * Many are just for compatibility. + * + */ + +#define KEY_CODE_YES 0x100 /* If get_wch() gives a key code */ + +#define KEY_BREAK 0x101 /* Not on PC KBD */ +#define KEY_DOWN 0x102 /* Down arrow key */ +#define KEY_UP 0x103 /* Up arrow key */ +#define KEY_LEFT 0x104 /* Left arrow key */ +#define KEY_RIGHT 0x105 /* Right arrow key */ +#define KEY_HOME 0x106 /* home key */ +#define KEY_BACKSPACE 0x107 /* not on pc */ +#define KEY_F0 0x108 /* function keys; 64 reserved */ + +#define KEY_DL 0x148 /* delete line */ +#define KEY_IL 0x149 /* insert line */ +#define KEY_DC 0x14a /* delete character */ +#define KEY_IC 0x14b /* insert char or enter ins mode */ +#define KEY_EIC 0x14c /* exit insert char mode */ +#define KEY_CLEAR 0x14d /* clear screen */ +#define KEY_EOS 0x14e /* clear to end of screen */ +#define KEY_EOL 0x14f /* clear to end of line */ +#define KEY_SF 0x150 /* scroll 1 line forward */ +#define KEY_SR 0x151 /* scroll 1 line back (reverse) */ +#define KEY_NPAGE 0x152 /* next page */ +#define KEY_PPAGE 0x153 /* previous page */ +#define KEY_STAB 0x154 /* set tab */ +#define KEY_CTAB 0x155 /* clear tab */ +#define KEY_CATAB 0x156 /* clear all tabs */ +#define KEY_ENTER 0x157 /* enter or send (unreliable) */ +#define KEY_SRESET 0x158 /* soft/reset (partial/unreliable) */ +#define KEY_RESET 0x159 /* reset/hard reset (unreliable) */ +#define KEY_PRINT 0x15a /* print/copy */ +#define KEY_LL 0x15b /* home down/bottom (lower left) */ +#define KEY_ABORT 0x15c /* abort/terminate key (any) */ +#define KEY_SHELP 0x15d /* short help */ +#define KEY_LHELP 0x15e /* long help */ +#define KEY_BTAB 0x15f /* Back tab key */ +#define KEY_BEG 0x160 /* beg(inning) key */ +#define KEY_CANCEL 0x161 /* cancel key */ +#define KEY_CLOSE 0x162 /* close key */ +#define KEY_COMMAND 0x163 /* cmd (command) key */ +#define KEY_COPY 0x164 /* copy key */ +#define KEY_CREATE 0x165 /* create key */ +#define KEY_END 0x166 /* end key */ +#define KEY_EXIT 0x167 /* exit key */ +#define KEY_FIND 0x168 /* find key */ +#define KEY_HELP 0x169 /* help key */ +#define KEY_MARK 0x16a /* mark key */ +#define KEY_MESSAGE 0x16b /* message key */ +#define KEY_MOVE 0x16c /* move key */ +#define KEY_NEXT 0x16d /* next object key */ +#define KEY_OPEN 0x16e /* open key */ +#define KEY_OPTIONS 0x16f /* options key */ +#define KEY_PREVIOUS 0x170 /* previous object key */ +#define KEY_REDO 0x171 /* redo key */ +#define KEY_REFERENCE 0x172 /* ref(erence) key */ +#define KEY_REFRESH 0x173 /* refresh key */ +#define KEY_REPLACE 0x174 /* replace key */ +#define KEY_RESTART 0x175 /* restart key */ +#define KEY_RESUME 0x176 /* resume key */ +#define KEY_SAVE 0x177 /* save key */ +#define KEY_SBEG 0x178 /* shifted beginning key */ +#define KEY_SCANCEL 0x179 /* shifted cancel key */ +#define KEY_SCOMMAND 0x17a /* shifted command key */ +#define KEY_SCOPY 0x17b /* shifted copy key */ +#define KEY_SCREATE 0x17c /* shifted create key */ +#define KEY_SDC 0x17d /* shifted delete char key */ +#define KEY_SDL 0x17e /* shifted delete line key */ +#define KEY_SELECT 0x17f /* select key */ +#define KEY_SEND 0x180 /* shifted end key */ +#define KEY_SEOL 0x181 /* shifted clear line key */ +#define KEY_SEXIT 0x182 /* shifted exit key */ +#define KEY_SFIND 0x183 /* shifted find key */ +#define KEY_SHOME 0x184 /* shifted home key */ +#define KEY_SIC 0x185 /* shifted input key */ + +#define KEY_SLEFT 0x187 /* shifted left arrow key */ +#define KEY_SMESSAGE 0x188 /* shifted message key */ +#define KEY_SMOVE 0x189 /* shifted move key */ +#define KEY_SNEXT 0x18a /* shifted next key */ +#define KEY_SOPTIONS 0x18b /* shifted options key */ +#define KEY_SPREVIOUS 0x18c /* shifted prev key */ +#define KEY_SPRINT 0x18d /* shifted print key */ +#define KEY_SREDO 0x18e /* shifted redo key */ +#define KEY_SREPLACE 0x18f /* shifted replace key */ +#define KEY_SRIGHT 0x190 /* shifted right arrow */ +#define KEY_SRSUME 0x191 /* shifted resume key */ +#define KEY_SSAVE 0x192 /* shifted save key */ +#define KEY_SSUSPEND 0x193 /* shifted suspend key */ +#define KEY_SUNDO 0x194 /* shifted undo key */ +#define KEY_SUSPEND 0x195 /* suspend key */ +#define KEY_UNDO 0x196 /* undo key */ + +/* PDCurses-specific key definitions -- PC only */ + +#define ALT_0 0x197 +#define ALT_1 0x198 +#define ALT_2 0x199 +#define ALT_3 0x19a +#define ALT_4 0x19b +#define ALT_5 0x19c +#define ALT_6 0x19d +#define ALT_7 0x19e +#define ALT_8 0x19f +#define ALT_9 0x1a0 +#define ALT_A 0x1a1 +#define ALT_B 0x1a2 +#define ALT_C 0x1a3 +#define ALT_D 0x1a4 +#define ALT_E 0x1a5 +#define ALT_F 0x1a6 +#define ALT_G 0x1a7 +#define ALT_H 0x1a8 +#define ALT_I 0x1a9 +#define ALT_J 0x1aa +#define ALT_K 0x1ab +#define ALT_L 0x1ac +#define ALT_M 0x1ad +#define ALT_N 0x1ae +#define ALT_O 0x1af +#define ALT_P 0x1b0 +#define ALT_Q 0x1b1 +#define ALT_R 0x1b2 +#define ALT_S 0x1b3 +#define ALT_T 0x1b4 +#define ALT_U 0x1b5 +#define ALT_V 0x1b6 +#define ALT_W 0x1b7 +#define ALT_X 0x1b8 +#define ALT_Y 0x1b9 +#define ALT_Z 0x1ba + +#define CTL_LEFT 0x1bb /* Control-Left-Arrow */ +#define CTL_RIGHT 0x1bc +#define CTL_PGUP 0x1bd +#define CTL_PGDN 0x1be +#define CTL_HOME 0x1bf +#define CTL_END 0x1c0 + +#define KEY_A1 0x1c1 /* upper left on Virtual keypad */ +#define KEY_A2 0x1c2 /* upper middle on Virt. keypad */ +#define KEY_A3 0x1c3 /* upper right on Vir. keypad */ +#define KEY_B1 0x1c4 /* middle left on Virt. keypad */ +#define KEY_B2 0x1c5 /* center on Virt. keypad */ +#define KEY_B3 0x1c6 /* middle right on Vir. keypad */ +#define KEY_C1 0x1c7 /* lower left on Virt. keypad */ +#define KEY_C2 0x1c8 /* lower middle on Virt. keypad */ +#define KEY_C3 0x1c9 /* lower right on Vir. keypad */ + +#define PADSLASH 0x1ca /* slash on keypad */ +#define PADENTER 0x1cb /* enter on keypad */ +#define CTL_PADENTER 0x1cc /* ctl-enter on keypad */ +#define ALT_PADENTER 0x1cd /* alt-enter on keypad */ +#define PADSTOP 0x1ce /* stop on keypad */ +#define PADSTAR 0x1cf /* star on keypad */ +#define PADMINUS 0x1d0 /* minus on keypad */ +#define PADPLUS 0x1d1 /* plus on keypad */ +#define CTL_PADSTOP 0x1d2 /* ctl-stop on keypad */ +#define CTL_PADCENTER 0x1d3 /* ctl-enter on keypad */ +#define CTL_PADPLUS 0x1d4 /* ctl-plus on keypad */ +#define CTL_PADMINUS 0x1d5 /* ctl-minus on keypad */ +#define CTL_PADSLASH 0x1d6 /* ctl-slash on keypad */ +#define CTL_PADSTAR 0x1d7 /* ctl-star on keypad */ +#define ALT_PADPLUS 0x1d8 /* alt-plus on keypad */ +#define ALT_PADMINUS 0x1d9 /* alt-minus on keypad */ +#define ALT_PADSLASH 0x1da /* alt-slash on keypad */ +#define ALT_PADSTAR 0x1db /* alt-star on keypad */ +#define ALT_PADSTOP 0x1dc /* alt-stop on keypad */ +#define CTL_INS 0x1dd /* ctl-insert */ +#define ALT_DEL 0x1de /* alt-delete */ +#define ALT_INS 0x1df /* alt-insert */ +#define CTL_UP 0x1e0 /* ctl-up arrow */ +#define CTL_DOWN 0x1e1 /* ctl-down arrow */ +#define CTL_TAB 0x1e2 /* ctl-tab */ +#define ALT_TAB 0x1e3 +#define ALT_MINUS 0x1e4 +#define ALT_EQUAL 0x1e5 +#define ALT_HOME 0x1e6 +#define ALT_PGUP 0x1e7 +#define ALT_PGDN 0x1e8 +#define ALT_END 0x1e9 +#define ALT_UP 0x1ea /* alt-up arrow */ +#define ALT_DOWN 0x1eb /* alt-down arrow */ +#define ALT_RIGHT 0x1ec /* alt-right arrow */ +#define ALT_LEFT 0x1ed /* alt-left arrow */ +#define ALT_ENTER 0x1ee /* alt-enter */ +#define ALT_ESC 0x1ef /* alt-escape */ +#define ALT_BQUOTE 0x1f0 /* alt-back quote */ +#define ALT_LBRACKET 0x1f1 /* alt-left bracket */ +#define ALT_RBRACKET 0x1f2 /* alt-right bracket */ +#define ALT_SEMICOLON 0x1f3 /* alt-semi-colon */ +#define ALT_FQUOTE 0x1f4 /* alt-forward quote */ +#define ALT_COMMA 0x1f5 /* alt-comma */ +#define ALT_STOP 0x1f6 /* alt-stop */ +#define ALT_FSLASH 0x1f7 /* alt-forward slash */ +#define ALT_BKSP 0x1f8 /* alt-backspace */ +#define CTL_BKSP 0x1f9 /* ctl-backspace */ +#define PAD0 0x1fa /* keypad 0 */ + +#define CTL_PAD0 0x1fb /* ctl-keypad 0 */ +#define CTL_PAD1 0x1fc +#define CTL_PAD2 0x1fd +#define CTL_PAD3 0x1fe +#define CTL_PAD4 0x1ff +#define CTL_PAD5 0x200 +#define CTL_PAD6 0x201 +#define CTL_PAD7 0x202 +#define CTL_PAD8 0x203 +#define CTL_PAD9 0x204 + +#define ALT_PAD0 0x205 /* alt-keypad 0 */ +#define ALT_PAD1 0x206 +#define ALT_PAD2 0x207 +#define ALT_PAD3 0x208 +#define ALT_PAD4 0x209 +#define ALT_PAD5 0x20a +#define ALT_PAD6 0x20b +#define ALT_PAD7 0x20c +#define ALT_PAD8 0x20d +#define ALT_PAD9 0x20e + +#define CTL_DEL 0x20f /* clt-delete */ +#define ALT_BSLASH 0x210 /* alt-back slash */ +#define CTL_ENTER 0x211 /* ctl-enter */ + +#define SHF_PADENTER 0x212 /* shift-enter on keypad */ +#define SHF_PADSLASH 0x213 /* shift-slash on keypad */ +#define SHF_PADSTAR 0x214 /* shift-star on keypad */ +#define SHF_PADPLUS 0x215 /* shift-plus on keypad */ +#define SHF_PADMINUS 0x216 /* shift-minus on keypad */ +#define SHF_UP 0x217 /* shift-up on keypad */ +#define SHF_DOWN 0x218 /* shift-down on keypad */ +#define SHF_IC 0x219 /* shift-insert on keypad */ +#define SHF_DC 0x21a /* shift-delete on keypad */ + +#define KEY_MOUSE 0x21b /* "mouse" key */ +#define KEY_SHIFT_L 0x21c /* Left-shift */ +#define KEY_SHIFT_R 0x21d /* Right-shift */ +#define KEY_CONTROL_L 0x21e /* Left-control */ +#define KEY_CONTROL_R 0x21f /* Right-control */ +#define KEY_ALT_L 0x220 /* Left-alt */ +#define KEY_ALT_R 0x221 /* Right-alt */ +#define KEY_RESIZE 0x222 /* Window resize */ +#define KEY_SUP 0x223 /* Shifted up arrow */ +#define KEY_SDOWN 0x224 /* Shifted down arrow */ + +#define KEY_MIN KEY_BREAK /* Minimum curses key value */ +#define KEY_MAX KEY_SDOWN /* Maximum curses key */ + +#define KEY_F(n) (KEY_F0 + (n)) + +/*---------------------------------------------------------------------- + * + * PDCurses Function Declarations + * + */ + +/* Standard */ + +int addch(const chtype); +int addchnstr(const chtype *, int); +int addchstr(const chtype *); +int addnstr(const char *, int); +int addstr(const char *); +int attroff(chtype); +int attron(chtype); +int attrset(chtype); +int attr_get(attr_t *, short *, void *); +int attr_off(attr_t, void *); +int attr_on(attr_t, void *); +int attr_set(attr_t, short, void *); +int baudrate(void); +int beep(void); +int bkgd(chtype); +void bkgdset(chtype); +int border(chtype, chtype, chtype, chtype, chtype, chtype, chtype, chtype); +int box(WINDOW *, chtype, chtype); +bool can_change_color(void); +int cbreak(void); +int chgat(int, attr_t, short, const void *); +int clearok(WINDOW *, bool); +int clear(void); +int clrtobot(void); +int clrtoeol(void); +int color_content(short, short *, short *, short *); +int color_set(short, void *); +int copywin(const WINDOW *, WINDOW *, int, int, int, int, int, int, int); +int curs_set(int); +int def_prog_mode(void); +int def_shell_mode(void); +int delay_output(int); +int delch(void); +int deleteln(void); +void delscreen(SCREEN *); +int delwin(WINDOW *); +WINDOW *derwin(WINDOW *, int, int, int, int); +int doupdate(void); +WINDOW *dupwin(WINDOW *); +int echochar(const chtype); +int echo(void); +int endwin(void); +char erasechar(void); +int erase(void); +void filter(void); +int flash(void); +int flushinp(void); +chtype getbkgd(WINDOW *); +int getnstr(char *, int); +int getstr(char *); +WINDOW *getwin(FILE *); +int halfdelay(int); +bool has_colors(void); +bool has_ic(void); +bool has_il(void); +int hline(chtype, int); +void idcok(WINDOW *, bool); +int idlok(WINDOW *, bool); +void immedok(WINDOW *, bool); +int inchnstr(chtype *, int); +int inchstr(chtype *); +chtype inch(void); +int init_color(short, short, short, short); +int init_pair(short, short, short); +WINDOW *initscr(void); +int innstr(char *, int); +int insch(chtype); +int insdelln(int); +int insertln(void); +int insnstr(const char *, int); +int insstr(const char *); +int instr(char *); +int intrflush(WINDOW *, bool); +bool isendwin(void); +bool is_linetouched(WINDOW *, int); +bool is_wintouched(WINDOW *); +char *keyname(int); +int keypad(WINDOW *, bool); +char killchar(void); +int leaveok(WINDOW *, bool); +char *longname(void); +int meta(WINDOW *, bool); +int move(int, int); +int mvaddch(int, int, const chtype); +int mvaddchnstr(int, int, const chtype *, int); +int mvaddchstr(int, int, const chtype *); +int mvaddnstr(int, int, const char *, int); +int mvaddstr(int, int, const char *); +int mvchgat(int, int, int, attr_t, short, const void *); +int mvcur(int, int, int, int); +int mvdelch(int, int); +int mvderwin(WINDOW *, int, int); +int mvgetch(int, int); +int mvgetnstr(int, int, char *, int); +int mvgetstr(int, int, char *); +int mvhline(int, int, chtype, int); +chtype mvinch(int, int); +int mvinchnstr(int, int, chtype *, int); +int mvinchstr(int, int, chtype *); +int mvinnstr(int, int, char *, int); +int mvinsch(int, int, chtype); +int mvinsnstr(int, int, const char *, int); +int mvinsstr(int, int, const char *); +int mvinstr(int, int, char *); +int mvprintw(int, int, const char *, ...); +int mvscanw(int, int, const char *, ...); +int mvvline(int, int, chtype, int); +int mvwaddchnstr(WINDOW *, int, int, const chtype *, int); +int mvwaddchstr(WINDOW *, int, int, const chtype *); +int mvwaddch(WINDOW *, int, int, const chtype); +int mvwaddnstr(WINDOW *, int, int, const char *, int); +int mvwaddstr(WINDOW *, int, int, const char *); +int mvwchgat(WINDOW *, int, int, int, attr_t, short, const void *); +int mvwdelch(WINDOW *, int, int); +int mvwgetch(WINDOW *, int, int); +int mvwgetnstr(WINDOW *, int, int, char *, int); +int mvwgetstr(WINDOW *, int, int, char *); +int mvwhline(WINDOW *, int, int, chtype, int); +int mvwinchnstr(WINDOW *, int, int, chtype *, int); +int mvwinchstr(WINDOW *, int, int, chtype *); +chtype mvwinch(WINDOW *, int, int); +int mvwinnstr(WINDOW *, int, int, char *, int); +int mvwinsch(WINDOW *, int, int, chtype); +int mvwinsnstr(WINDOW *, int, int, const char *, int); +int mvwinsstr(WINDOW *, int, int, const char *); +int mvwinstr(WINDOW *, int, int, char *); +int mvwin(WINDOW *, int, int); +int mvwprintw(WINDOW *, int, int, const char *, ...); +int mvwscanw(WINDOW *, int, int, const char *, ...); +int mvwvline(WINDOW *, int, int, chtype, int); +int napms(int); +WINDOW *newpad(int, int); +SCREEN *newterm(const char *, FILE *, FILE *); +WINDOW *newwin(int, int, int, int); +int nl(void); +int nocbreak(void); +int nodelay(WINDOW *, bool); +int noecho(void); +int nonl(void); +void noqiflush(void); +int noraw(void); +int notimeout(WINDOW *, bool); +int overlay(const WINDOW *, WINDOW *); +int overwrite(const WINDOW *, WINDOW *); +int pair_content(short, short *, short *); +int pechochar(WINDOW *, chtype); +int pnoutrefresh(WINDOW *, int, int, int, int, int, int); +int prefresh(WINDOW *, int, int, int, int, int, int); +int printw(const char *, ...); +int putwin(WINDOW *, FILE *); +void qiflush(void); +int raw(void); +int redrawwin(WINDOW *); +int refresh(void); +int reset_prog_mode(void); +int reset_shell_mode(void); +int resetty(void); +int ripoffline(int, int (*)(WINDOW *, int)); +int savetty(void); +int scanw(const char *, ...); +int scr_dump(const char *); +int scr_init(const char *); +int scr_restore(const char *); +int scr_set(const char *); +int scrl(int); +int scroll(WINDOW *); +int scrollok(WINDOW *, bool); +SCREEN *set_term(SCREEN *); +int setscrreg(int, int); +int slk_attroff(const chtype); +int slk_attr_off(const attr_t, void *); +int slk_attron(const chtype); +int slk_attr_on(const attr_t, void *); +int slk_attrset(const chtype); +int slk_attr_set(const attr_t, short, void *); +int slk_clear(void); +int slk_color(short); +int slk_init(int); +char *slk_label(int); +int slk_noutrefresh(void); +int slk_refresh(void); +int slk_restore(void); +int slk_set(int, const char *, int); +int slk_touch(void); +int standend(void); +int standout(void); +int start_color(void); +WINDOW *subpad(WINDOW *, int, int, int, int); +WINDOW *subwin(WINDOW *, int, int, int, int); +int syncok(WINDOW *, bool); +chtype termattrs(void); +attr_t term_attrs(void); +char *termname(void); +void timeout(int); +int touchline(WINDOW *, int, int); +int touchwin(WINDOW *); +int typeahead(int); +int untouchwin(WINDOW *); +void use_env(bool); +int vidattr(chtype); +int vid_attr(attr_t, short, void *); +int vidputs(chtype, int (*)(int)); +int vid_puts(attr_t, short, void *, int (*)(int)); +int vline(chtype, int); +int vw_printw(WINDOW *, const char *, va_list); +int vwprintw(WINDOW *, const char *, va_list); +int vw_scanw(WINDOW *, const char *, va_list); +int vwscanw(WINDOW *, const char *, va_list); +int waddchnstr(WINDOW *, const chtype *, int); +int waddchstr(WINDOW *, const chtype *); +int waddch(WINDOW *, const chtype); +int waddnstr(WINDOW *, const char *, int); +int waddstr(WINDOW *, const char *); +int wattroff(WINDOW *, chtype); +int wattron(WINDOW *, chtype); +int wattrset(WINDOW *, chtype); +int wattr_get(WINDOW *, attr_t *, short *, void *); +int wattr_off(WINDOW *, attr_t, void *); +int wattr_on(WINDOW *, attr_t, void *); +int wattr_set(WINDOW *, attr_t, short, void *); +void wbkgdset(WINDOW *, chtype); +int wbkgd(WINDOW *, chtype); +int wborder(WINDOW *, chtype, chtype, chtype, chtype, + chtype, chtype, chtype, chtype); +int wchgat(WINDOW *, int, attr_t, short, const void *); +int wclear(WINDOW *); +int wclrtobot(WINDOW *); +int wclrtoeol(WINDOW *); +int wcolor_set(WINDOW *, short, void *); +void wcursyncup(WINDOW *); +int wdelch(WINDOW *); +int wdeleteln(WINDOW *); +int wechochar(WINDOW *, const chtype); +int werase(WINDOW *); +int wgetch(WINDOW *); +int wgetnstr(WINDOW *, char *, int); +int wgetstr(WINDOW *, char *); +int whline(WINDOW *, chtype, int); +int winchnstr(WINDOW *, chtype *, int); +int winchstr(WINDOW *, chtype *); +chtype winch(WINDOW *); +int winnstr(WINDOW *, char *, int); +int winsch(WINDOW *, chtype); +int winsdelln(WINDOW *, int); +int winsertln(WINDOW *); +int winsnstr(WINDOW *, const char *, int); +int winsstr(WINDOW *, const char *); +int winstr(WINDOW *, char *); +int wmove(WINDOW *, int, int); +int wnoutrefresh(WINDOW *); +int wprintw(WINDOW *, const char *, ...); +int wredrawln(WINDOW *, int, int); +int wrefresh(WINDOW *); +int wscanw(WINDOW *, const char *, ...); +int wscrl(WINDOW *, int); +int wsetscrreg(WINDOW *, int, int); +int wstandend(WINDOW *); +int wstandout(WINDOW *); +void wsyncdown(WINDOW *); +void wsyncup(WINDOW *); +void wtimeout(WINDOW *, int); +int wtouchln(WINDOW *, int, int, int); +int wvline(WINDOW *, chtype, int); + +/* Wide-character functions */ + +#ifdef PDC_WIDE +int addnwstr(const wchar_t *, int); +int addwstr(const wchar_t *); +int add_wch(const cchar_t *); +int add_wchnstr(const cchar_t *, int); +int add_wchstr(const cchar_t *); +int border_set(const cchar_t *, const cchar_t *, const cchar_t *, + const cchar_t *, const cchar_t *, const cchar_t *, + const cchar_t *, const cchar_t *); +int box_set(WINDOW *, const cchar_t *, const cchar_t *); +int echo_wchar(const cchar_t *); +int erasewchar(wchar_t *); +int getbkgrnd(cchar_t *); +int getcchar(const cchar_t *, wchar_t *, attr_t *, short *, void *); +int getn_wstr(wint_t *, int); +int get_wch(wint_t *); +int get_wstr(wint_t *); +int hline_set(const cchar_t *, int); +int innwstr(wchar_t *, int); +int ins_nwstr(const wchar_t *, int); +int ins_wch(const cchar_t *); +int ins_wstr(const wchar_t *); +int inwstr(wchar_t *); +int in_wch(cchar_t *); +int in_wchnstr(cchar_t *, int); +int in_wchstr(cchar_t *); +char *key_name(wchar_t); +int killwchar(wchar_t *); +int mvaddnwstr(int, int, const wchar_t *, int); +int mvaddwstr(int, int, const wchar_t *); +int mvadd_wch(int, int, const cchar_t *); +int mvadd_wchnstr(int, int, const cchar_t *, int); +int mvadd_wchstr(int, int, const cchar_t *); +int mvgetn_wstr(int, int, wint_t *, int); +int mvget_wch(int, int, wint_t *); +int mvget_wstr(int, int, wint_t *); +int mvhline_set(int, int, const cchar_t *, int); +int mvinnwstr(int, int, wchar_t *, int); +int mvins_nwstr(int, int, const wchar_t *, int); +int mvins_wch(int, int, const cchar_t *); +int mvins_wstr(int, int, const wchar_t *); +int mvinwstr(int, int, wchar_t *); +int mvin_wch(int, int, cchar_t *); +int mvin_wchnstr(int, int, cchar_t *, int); +int mvin_wchstr(int, int, cchar_t *); +int mvvline_set(int, int, const cchar_t *, int); +int mvwaddnwstr(WINDOW *, int, int, const wchar_t *, int); +int mvwaddwstr(WINDOW *, int, int, const wchar_t *); +int mvwadd_wch(WINDOW *, int, int, const cchar_t *); +int mvwadd_wchnstr(WINDOW *, int, int, const cchar_t *, int); +int mvwadd_wchstr(WINDOW *, int, int, const cchar_t *); +int mvwgetn_wstr(WINDOW *, int, int, wint_t *, int); +int mvwget_wch(WINDOW *, int, int, wint_t *); +int mvwget_wstr(WINDOW *, int, int, wint_t *); +int mvwhline_set(WINDOW *, int, int, const cchar_t *, int); +int mvwinnwstr(WINDOW *, int, int, wchar_t *, int); +int mvwins_nwstr(WINDOW *, int, int, const wchar_t *, int); +int mvwins_wch(WINDOW *, int, int, const cchar_t *); +int mvwins_wstr(WINDOW *, int, int, const wchar_t *); +int mvwin_wch(WINDOW *, int, int, cchar_t *); +int mvwin_wchnstr(WINDOW *, int, int, cchar_t *, int); +int mvwin_wchstr(WINDOW *, int, int, cchar_t *); +int mvwinwstr(WINDOW *, int, int, wchar_t *); +int mvwvline_set(WINDOW *, int, int, const cchar_t *, int); +int pecho_wchar(WINDOW *, const cchar_t*); +int setcchar(cchar_t*, const wchar_t*, const attr_t, short, const void*); +int slk_wset(int, const wchar_t *, int); +int unget_wch(const wchar_t); +int vline_set(const cchar_t *, int); +int waddnwstr(WINDOW *, const wchar_t *, int); +int waddwstr(WINDOW *, const wchar_t *); +int wadd_wch(WINDOW *, const cchar_t *); +int wadd_wchnstr(WINDOW *, const cchar_t *, int); +int wadd_wchstr(WINDOW *, const cchar_t *); +int wbkgrnd(WINDOW *, const cchar_t *); +void wbkgrndset(WINDOW *, const cchar_t *); +int wborder_set(WINDOW *, const cchar_t *, const cchar_t *, + const cchar_t *, const cchar_t *, const cchar_t *, + const cchar_t *, const cchar_t *, const cchar_t *); +int wecho_wchar(WINDOW *, const cchar_t *); +int wgetbkgrnd(WINDOW *, cchar_t *); +int wgetn_wstr(WINDOW *, wint_t *, int); +int wget_wch(WINDOW *, wint_t *); +int wget_wstr(WINDOW *, wint_t *); +int whline_set(WINDOW *, const cchar_t *, int); +int winnwstr(WINDOW *, wchar_t *, int); +int wins_nwstr(WINDOW *, const wchar_t *, int); +int wins_wch(WINDOW *, const cchar_t *); +int wins_wstr(WINDOW *, const wchar_t *); +int winwstr(WINDOW *, wchar_t *); +int win_wch(WINDOW *, cchar_t *); +int win_wchnstr(WINDOW *, cchar_t *, int); +int win_wchstr(WINDOW *, cchar_t *); +wchar_t *wunctrl(cchar_t *); +int wvline_set(WINDOW *, const cchar_t *, int); +#endif + +/* Quasi-standard */ + +chtype getattrs(WINDOW *); +int getbegx(WINDOW *); +int getbegy(WINDOW *); +int getmaxx(WINDOW *); +int getmaxy(WINDOW *); +int getparx(WINDOW *); +int getpary(WINDOW *); +int getcurx(WINDOW *); +int getcury(WINDOW *); +void traceoff(void); +void traceon(void); +char *unctrl(chtype); + +int crmode(void); +int nocrmode(void); +int draino(int); +int resetterm(void); +int fixterm(void); +int saveterm(void); +int setsyx(int, int); + +int mouse_set(unsigned long); +int mouse_on(unsigned long); +int mouse_off(unsigned long); +int request_mouse_pos(void); +int map_button(unsigned long); +void wmouse_position(WINDOW *, int *, int *); +unsigned long getmouse(void); +unsigned long getbmap(void); + +/* ncurses */ + +int assume_default_colors(int, int); +const char *curses_version(void); +bool has_key(int); +int use_default_colors(void); +int wresize(WINDOW *, int, int); + +int mouseinterval(int); +mmask_t mousemask(mmask_t, mmask_t *); +bool mouse_trafo(int *, int *, bool); +int nc_getmouse(MEVENT *); +int ungetmouse(MEVENT *); +bool wenclose(const WINDOW *, int, int); +bool wmouse_trafo(const WINDOW *, int *, int *, bool); + +/* PDCurses */ + +int addrawch(chtype); +int insrawch(chtype); +bool is_termresized(void); +int mvaddrawch(int, int, chtype); +int mvdeleteln(int, int); +int mvinsertln(int, int); +int mvinsrawch(int, int, chtype); +int mvwaddrawch(WINDOW *, int, int, chtype); +int mvwdeleteln(WINDOW *, int, int); +int mvwinsertln(WINDOW *, int, int); +int mvwinsrawch(WINDOW *, int, int, chtype); +int raw_output(bool); +int resize_term(int, int); +WINDOW *resize_window(WINDOW *, int, int); +int waddrawch(WINDOW *, chtype); +int winsrawch(WINDOW *, chtype); +char wordchar(void); + +#ifdef PDC_WIDE +wchar_t *slk_wlabel(int); +#endif + +void PDC_debug(const char *, ...); +int PDC_ungetch(int); +int PDC_set_blink(bool); +int PDC_set_line_color(short); +void PDC_set_title(const char *); + +int PDC_clearclipboard(void); +int PDC_freeclipboard(char *); +int PDC_getclipboard(char **, long *); +int PDC_setclipboard(const char *, long); + +unsigned long PDC_get_input_fd(void); +unsigned long PDC_get_key_modifiers(void); +int PDC_return_key_modifiers(bool); +int PDC_save_key_modifiers(bool); + +#ifdef XCURSES +WINDOW *Xinitscr(int, char **); +void XCursesExit(void); +int sb_init(void); +int sb_set_horz(int, int, int); +int sb_set_vert(int, int, int); +int sb_get_horz(int *, int *, int *); +int sb_get_vert(int *, int *, int *); +int sb_refresh(void); +#endif + +/*** Functions defined as macros ***/ + +/* getch() and ungetch() conflict with some DOS libraries */ + +#define getch() wgetch(stdscr) +#define ungetch(ch) PDC_ungetch(ch) + +#define COLOR_PAIR(n) (((chtype)(n) << PDC_COLOR_SHIFT) & A_COLOR) +#define PAIR_NUMBER(n) (((n) & A_COLOR) >> PDC_COLOR_SHIFT) + +/* These will _only_ work as macros */ + +#define getbegyx(w, y, x) (y = getbegy(w), x = getbegx(w)) +#define getmaxyx(w, y, x) (y = getmaxy(w), x = getmaxx(w)) +#define getparyx(w, y, x) (y = getpary(w), x = getparx(w)) +#define getyx(w, y, x) (y = getcury(w), x = getcurx(w)) + +#define getsyx(y, x) { if (curscr->_leaveit) (y)=(x)=-1; \ + else getyx(curscr,(y),(x)); } + +#ifdef NCURSES_MOUSE_VERSION +# define getmouse(x) nc_getmouse(x) +#endif + +/* return codes from PDC_getclipboard() and PDC_setclipboard() calls */ + +#define PDC_CLIP_SUCCESS 0 +#define PDC_CLIP_ACCESS_ERROR 1 +#define PDC_CLIP_EMPTY 2 +#define PDC_CLIP_MEMORY_ERROR 3 + +/* PDCurses key modifier masks */ + +#define PDC_KEY_MODIFIER_SHIFT 1 +#define PDC_KEY_MODIFIER_CONTROL 2 +#define PDC_KEY_MODIFIER_ALT 4 +#define PDC_KEY_MODIFIER_NUMLOCK 8 + +#if defined(__cplusplus) || defined(__cplusplus__) || defined(__CPLUSPLUS) +# undef bool +} +#endif + +#endif /* __PDCURSES__ */ diff --git a/samtools/win32/zconf.h b/samtools/win32/zconf.h new file mode 100644 index 0000000..03a9431 --- /dev/null +++ b/samtools/win32/zconf.h @@ -0,0 +1,332 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2005 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + */ +#ifdef Z_PREFIX +# define deflateInit_ z_deflateInit_ +# define deflate z_deflate +# define deflateEnd z_deflateEnd +# define inflateInit_ z_inflateInit_ +# define inflate z_inflate +# define inflateEnd z_inflateEnd +# define deflateInit2_ z_deflateInit2_ +# define deflateSetDictionary z_deflateSetDictionary +# define deflateCopy z_deflateCopy +# define deflateReset z_deflateReset +# define deflateParams z_deflateParams +# define deflateBound z_deflateBound +# define deflatePrime z_deflatePrime +# define inflateInit2_ z_inflateInit2_ +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateCopy z_inflateCopy +# define inflateReset z_inflateReset +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# define uncompress z_uncompress +# define adler32 z_adler32 +# define crc32 z_crc32 +# define get_crc_table z_get_crc_table +# define zError z_zError + +# define alloc_func z_alloc_func +# define free_func z_free_func +# define in_func z_in_func +# define out_func z_out_func +# define Byte z_Byte +# define uInt z_uInt +# define uLong z_uLong +# define Bytef z_Bytef +# define charf z_charf +# define intf z_intf +# define uIntf z_uIntf +# define uLongf z_uLongf +# define voidpf z_voidpf +# define voidp z_voidp +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +/* Some Mac compilers merge all .h files incorrectly: */ +#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) +# define NO_DUMMY_DECL +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus a few kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if 0 /* HAVE_UNISTD_H -- this line is updated by ./configure */ +# include /* for off_t */ +# include /* for SEEK_* and off_t */ +# ifdef VMS +# include /* for off_t */ +# endif +# define z_off_t off_t +#endif +#ifndef SEEK_SET +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif +#ifndef z_off_t +# define z_off_t long +#endif + +#if defined(__OS400__) +# define NO_vsnprintf +#endif + +#if defined(__MVS__) +# define NO_vsnprintf +# ifdef FAR +# undef FAR +# endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) +# pragma map(deflateInit_,"DEIN") +# pragma map(deflateInit2_,"DEIN2") +# pragma map(deflateEnd,"DEEND") +# pragma map(deflateBound,"DEBND") +# pragma map(inflateInit_,"ININ") +# pragma map(inflateInit2_,"ININ2") +# pragma map(inflateEnd,"INEND") +# pragma map(inflateSync,"INSY") +# pragma map(inflateSetDictionary,"INSEDI") +# pragma map(compressBound,"CMBND") +# pragma map(inflate_table,"INTABL") +# pragma map(inflate_fast,"INFA") +# pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/samtools/win32/zlib.h b/samtools/win32/zlib.h new file mode 100644 index 0000000..0228179 --- /dev/null +++ b/samtools/win32/zlib.h @@ -0,0 +1,1357 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.3, July 18th, 2005 + + Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt + (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). +*/ + +#ifndef ZLIB_H +#define ZLIB_H + +#include "zconf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZLIB_VERSION "1.2.3" +#define ZLIB_VERNUM 0x1230 + +/* + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed + data. This version of the library supports only one compression method + (deflation) but other algorithms will be added later and will have the same + stream interface. + + Compression can be done in a single step if the buffers are large + enough (for example if an input file is mmap'ed), or can be done by + repeated calls of the compression function. In the latter case, the + application must provide more input and/or consume the output + (providing more output space) before each call. + + The compressed data format used by default by the in-memory functions is + the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped + around a deflate stream, which is itself documented in RFC 1951. + + The library also supports reading and writing files in gzip (.gz) format + with an interface similar to that of stdio using the functions that start + with "gz". The gzip format is different from the zlib format. gzip is a + gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. + + This library can optionally read and write gzip streams in memory as well. + + The zlib format was designed to be compact and fast for use in memory + and on communications channels. The gzip format was designed for single- + file compression on file systems, has a larger header than zlib to maintain + directory information, and uses a different, slower check method than zlib. + + The library does not install any signal handler. The decoder checks + the consistency of the compressed data, so the library should never + crash even in case of corrupted input. +*/ + +typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); +typedef void (*free_func) OF((voidpf opaque, voidpf address)); + +struct internal_state; + +typedef struct z_stream_s { + Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total nb of input bytes read so far */ + + Bytef *next_out; /* next output byte should be put there */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total nb of bytes output so far */ + + char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: binary or text */ + uLong adler; /* adler32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + gzip header information passed to and from zlib routines. See RFC 1952 + for more details on the meanings of these fields. +*/ +typedef struct gz_header_s { + int text; /* true if compressed data believed to be text */ + uLong time; /* modification time */ + int xflags; /* extra flags (not used when writing a gzip file) */ + int os; /* operating system */ + Bytef *extra; /* pointer to extra field or Z_NULL if none */ + uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ + uInt extra_max; /* space at extra (only when reading header) */ + Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ + uInt name_max; /* space at name (only when reading header) */ + Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ + uInt comm_max; /* space at comment (only when reading header) */ + int hcrc; /* true if there was or will be a header crc */ + int done; /* true when done reading gzip header (not used + when writing a gzip file) */ +} gz_header; + +typedef gz_header FAR *gz_headerp; + +/* + The application must update next_in and avail_in when avail_in has + dropped to zero. It must update next_out and avail_out when avail_out + has dropped to zero. The application must initialize zalloc, zfree and + opaque before calling the init function. All other fields are set by the + compression library and must not be updated by the application. + + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the + opaque value. + + zalloc must return Z_NULL if there is not enough memory for the object. + If zlib is used in a multi-threaded application, zalloc and zfree must be + thread safe. + + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this + if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, + pointers returned by zalloc for objects of exactly 65536 bytes *must* + have their offset normalized to zero. The default allocation function + provided by this library ensures this (see zutil.c). To reduce memory + requirements and avoid any allocation of 64K objects, at the expense of + compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). + + The fields total_in and total_out can be used for statistics or + progress reports. After compression, total_in holds the total size of + the uncompressed data and may be saved for use in the decompressor + (particularly if the decompressor wants to decompress everything in + a single step). +*/ + + /* constants */ + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +#define Z_BLOCK 5 +/* Allowed flush values; see deflate() and inflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative + * values are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_RLE 3 +#define Z_FIXED 4 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_TEXT 1 +#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ +#define Z_UNKNOWN 2 +/* Possible values of the data_type field (though see inflate()) */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define zlib_version zlibVersion() +/* for compatibility with versions < 1.0.2 */ + + /* basic functions */ + +ZEXTERN const char * ZEXPORT zlibVersion OF((void)); +/* The application can compare zlibVersion and ZLIB_VERSION for consistency. + If the first character differs, the library code actually used is + not compatible with the zlib.h header file used by the application. + This check is automatically made by deflateInit and inflateInit. + */ + +/* +ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); + + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. + If zalloc and zfree are set to Z_NULL, deflateInit updates them to + use default allocation functions. + + The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: + 1 gives best speed, 9 gives best compression, 0 gives no compression at + all (the input data is simply copied a block at a time). + Z_DEFAULT_COMPRESSION requests a default compromise between speed and + compression (currently equivalent to level 6). + + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if level is not a valid compression level, + Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible + with the version assumed by the caller (ZLIB_VERSION). + msg is set to null if there is no error message. deflateInit does not + perform any compression: this will be done by deflate(). +*/ + + +ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); +/* + deflate compresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce some + output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. deflate performs one or both of the + following actions: + + - Compress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in and avail_in are updated and + processing will resume at this point for the next call of deflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. This action is forced if the parameter flush is non zero. + Forcing flush frequently degrades the compression ratio, so this parameter + should be set only when necessary (in interactive applications). + Some output may be provided even if flush is not set. + + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating avail_in or avail_out accordingly; avail_out + should never be zero before the call. The application can consume the + compressed output when it wants, for example when the output buffer is full + (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK + and with zero avail_out, it must be called again after making room in the + output buffer because there might be more output pending. + + Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to + decide how much data to accumualte before producing output, in order to + maximize compression. + + If the parameter flush is set to Z_SYNC_FLUSH, all pending output is + flushed to the output buffer and the output is aligned on a byte boundary, so + that the decompressor can get all input data available so far. (In particular + avail_in is zero after the call if enough output space has been provided + before the call.) Flushing may degrade compression for some compression + algorithms and so it should be used only when necessary. + + If flush is set to Z_FULL_FLUSH, all output is flushed as with + Z_SYNC_FLUSH, and the compression state is reset so that decompression can + restart from this point if previous compressed data has been damaged or if + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + compression. + + If deflate returns with avail_out == 0, this function must be called again + with the same value of the flush parameter and more output space (updated + avail_out), until the flush is complete (deflate returns with non-zero + avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that + avail_out is greater than six to avoid repeated flush markers due to + avail_out == 0 on return. + + If the parameter flush is set to Z_FINISH, pending input is processed, + pending output is flushed and deflate returns with Z_STREAM_END if there + was enough output space; if deflate returns with Z_OK, this function must be + called again with Z_FINISH and more output space (updated avail_out) but no + more input data, until it returns with Z_STREAM_END or an error. After + deflate has returned Z_STREAM_END, the only possible operations on the + stream are deflateReset or deflateEnd. + + Z_FINISH can be used immediately after deflateInit if all the compression + is to be done in a single step. In this case, avail_out must be at least + the value returned by deflateBound (see below). If deflate does not return + Z_STREAM_END, then it must be called again as described above. + + deflate() sets strm->adler to the adler32 checksum of all input read + so far (that is, total_in bytes). + + deflate() may update strm->data_type if it can make a good guess about + the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered + binary. This field is only for information purposes and does not affect + the compression algorithm in any manner. + + deflate() returns Z_OK if some progress has been made (more input + processed or more output produced), Z_STREAM_END if all input has been + consumed and all output has been produced (only when flush is set to + Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example + if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible + (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not + fatal, and deflate() can be called again with more input and more output + space to continue compressing. +*/ + + +ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the + stream state was inconsistent, Z_DATA_ERROR if the stream was freed + prematurely (some input or output was discarded). In the error case, + msg may be set but then points to a static string (which must not be + deallocated). +*/ + + +/* +ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); + + Initializes the internal stream state for decompression. The fields + next_in, avail_in, zalloc, zfree and opaque must be initialized before by + the caller. If next_in is not Z_NULL and avail_in is large enough (the exact + value depends on the compression method), inflateInit determines the + compression method from the zlib header and allocates all data structures + accordingly; otherwise the allocation will be deferred to the first call of + inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to + use default allocation functions. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller. msg is set to null if there is no error + message. inflateInit does not perform any decompression apart from reading + the zlib header if present: this will be done by inflate(). (So next_in and + avail_in may be modified, but next_out and avail_out are unchanged.) +*/ + + +ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); +/* + inflate decompresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. inflate performs one or both of the + following actions: + + - Decompress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in is updated and processing + will resume at this point for the next call of inflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. inflate() provides as much output as possible, until there + is no more input data or no more space in the output buffer (see below + about the flush parameter). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating the next_* and avail_* values accordingly. + The application can consume the uncompressed output when it wants, for + example when the output buffer is full (avail_out == 0), or after each + call of inflate(). If inflate returns Z_OK and with zero avail_out, it + must be called again after making room in the output buffer because there + might be more output pending. + + The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, + Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much + output as possible to the output buffer. Z_BLOCK requests that inflate() stop + if and when it gets to the next deflate block boundary. When decoding the + zlib or gzip format, this will cause inflate() to return immediately after + the header and before the first block. When doing a raw inflate, inflate() + will go ahead and process the first block, and will return when it gets to + the end of that block, or when it runs out of data. + + The Z_BLOCK option assists in appending to or combining deflate streams. + Also to assist in this, on return inflate() will set strm->data_type to the + number of unused bits in the last byte taken from strm->next_in, plus 64 + if inflate() is currently decoding the last block in the deflate stream, + plus 128 if inflate() returned immediately after decoding an end-of-block + code or decoding the complete header up to just before the first byte of the + deflate stream. The end-of-block will not be indicated until all of the + uncompressed data from that block has been written to strm->next_out. The + number of unused bits may in general be greater than seven, except when + bit 7 of data_type is set, in which case the number of unused bits will be + less than eight. + + inflate() should normally be called until it returns Z_STREAM_END or an + error. However if all decompression is to be performed in a single step + (a single call of inflate), the parameter flush should be set to + Z_FINISH. In this case all pending input is processed and all pending + output is flushed; avail_out must be large enough to hold all the + uncompressed data. (The size of the uncompressed data may have been saved + by the compressor for this purpose.) The next operation on this stream must + be inflateEnd to deallocate the decompression state. The use of Z_FINISH + is never required, but can be used to inform inflate that a faster approach + may be used for the single inflate() call. + + In this implementation, inflate() always flushes as much output as + possible to the output buffer, and always uses the faster approach on the + first call. So the only effect of the flush parameter in this implementation + is on the return value of inflate(), as noted below, or when it returns early + because Z_BLOCK is used. + + If a preset dictionary is needed after this call (see inflateSetDictionary + below), inflate sets strm->adler to the adler32 checksum of the dictionary + chosen by the compressor and returns Z_NEED_DICT; otherwise it sets + strm->adler to the adler32 checksum of all output produced so far (that is, + total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described + below. At the end of the stream, inflate() checks that its computed adler32 + checksum is equal to that saved by the compressor and returns Z_STREAM_END + only if the checksum is correct. + + inflate() will decompress and check either zlib-wrapped or gzip-wrapped + deflate data. The header type is detected automatically. Any information + contained in the gzip header is not retained, so applications that need that + information should instead use raw inflate, see inflateInit2() below, or + inflateBack() and perform their own processing of the gzip header and + trailer. + + inflate() returns Z_OK if some progress has been made (more input processed + or more output produced), Z_STREAM_END if the end of the compressed data has + been reached and all uncompressed output has been produced, Z_NEED_DICT if a + preset dictionary is needed at this point, Z_DATA_ERROR if the input data was + corrupted (input stream not conforming to the zlib format or incorrect check + value), Z_STREAM_ERROR if the stream structure was inconsistent (for example + if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory, + Z_BUF_ERROR if no progress is possible or if there was not enough room in the + output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and + inflate() can be called again with more input and more output space to + continue decompressing. If Z_DATA_ERROR is returned, the application may then + call inflateSync() to look for a good compression block if a partial recovery + of the data is desired. +*/ + + +ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state + was inconsistent. In the error case, msg may be set but then points to a + static string (which must not be deallocated). +*/ + + /* Advanced functions */ + +/* + The following functions are needed only in some special applications. +*/ + +/* +ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy)); + + This is another version of deflateInit with more compression options. The + fields next_in, zalloc, zfree and opaque must be initialized before by + the caller. + + The method parameter is the compression method. It must be Z_DEFLATED in + this version of the library. + + The windowBits parameter is the base two logarithm of the window size + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if + deflateInit is used instead. + + windowBits can also be -8..-15 for raw deflate. In this case, -windowBits + determines the window size. deflate() will then generate raw deflate data + with no zlib header or trailer, and will not compute an adler32 check value. + + windowBits can also be greater than 15 for optional gzip encoding. Add + 16 to windowBits to write a simple gzip header and trailer around the + compressed data instead of a zlib wrapper. The gzip header will have no + file name, no extra data, no comment, no modification time (set to zero), + no header crc, and the operating system will be set to 255 (unknown). If a + gzip stream is being written, strm->adler is a crc32 instead of an adler32. + + The memLevel parameter specifies how much memory should be allocated + for the internal compression state. memLevel=1 uses minimum memory but + is slow and reduces compression ratio; memLevel=9 uses maximum memory + for optimal speed. The default value is 8. See zconf.h for total memory + usage as a function of windowBits and memLevel. + + The strategy parameter is used to tune the compression algorithm. Use the + value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a + filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no + string match), or Z_RLE to limit match distances to one (run-length + encoding). Filtered data consists mostly of small values with a somewhat + random distribution. In this case, the compression algorithm is tuned to + compress them better. The effect of Z_FILTERED is to force more Huffman + coding and less string matching; it is somewhat intermediate between + Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as + Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy + parameter only affects the compression ratio but not the correctness of the + compressed output even if it is not set appropriately. Z_FIXED prevents the + use of dynamic Huffman codes, allowing for a simpler decoder for special + applications. + + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid + method). msg is set to null if there is no error message. deflateInit2 does + not perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the compression dictionary from the given byte sequence + without producing any compressed output. This function must be called + immediately after deflateInit, deflateInit2 or deflateReset, before any + call of deflate. The compressor and decompressor must use exactly the same + dictionary (see inflateSetDictionary). + + The dictionary should consist of strings (byte sequences) that are likely + to be encountered later in the data to be compressed, with the most commonly + used strings preferably put towards the end of the dictionary. Using a + dictionary is most useful when the data to be compressed is short and can be + predicted with good accuracy; the data can then be compressed better than + with the default empty dictionary. + + Depending on the size of the compression data structures selected by + deflateInit or deflateInit2, a part of the dictionary may in effect be + discarded, for example if the dictionary is larger than the window size in + deflate or deflate2. Thus the strings most likely to be useful should be + put at the end of the dictionary, not at the front. In addition, the + current implementation of deflate will use at most the window size minus + 262 bytes of the provided dictionary. + + Upon return of this function, strm->adler is set to the adler32 value + of the dictionary; the decompressor may later use this value to determine + which dictionary has been used by the compressor. (The adler32 value + applies to the whole dictionary even if only a subset of the dictionary is + actually used by the compressor.) If a raw deflate was requested, then the + adler32 value is not computed and strm->adler is not set. + + deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent (for example if deflate has already been called for this stream + or if the compression method is bsort). deflateSetDictionary does not + perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when several compression strategies will be + tried, for example when there are several ways of pre-processing the input + data with a filter. The streams that will be discarded should then be freed + by calling deflateEnd. Note that deflateCopy duplicates the internal + compression state which can be quite large, so this strategy is slow and + can consume lots of memory. + + deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); +/* + This function is equivalent to deflateEnd followed by deflateInit, + but does not free and reallocate all the internal compression state. + The stream will keep the same compression level and any other attributes + that may have been set by deflateInit2. + + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + +ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, + int level, + int strategy)); +/* + Dynamically update the compression level and compression strategy. The + interpretation of level and strategy is as in deflateInit2. This can be + used to switch between compression and straight copy of the input data, or + to switch to a different kind of input data requiring a different + strategy. If the compression level is changed, the input available so far + is compressed with the old level (and may be flushed); the new level will + take effect only at the next call of deflate(). + + Before the call of deflateParams, the stream state must be set as for + a call of deflate(), since the currently available input may have to + be compressed and flushed. In particular, strm->avail_out must be non-zero. + + deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source + stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR + if strm->avail_out was zero. +*/ + +ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, + int good_length, + int max_lazy, + int nice_length, + int max_chain)); +/* + Fine tune deflate's internal compression parameters. This should only be + used by someone who understands the algorithm used by zlib's deflate for + searching for the best matching string, and even then only by the most + fanatic optimizer trying to squeeze out the last compressed bit for their + specific input data. Read the deflate.c source code for the meaning of the + max_lazy, good_length, nice_length, and max_chain parameters. + + deflateTune() can be called after deflateInit() or deflateInit2(), and + returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. + */ + +ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, + uLong sourceLen)); +/* + deflateBound() returns an upper bound on the compressed size after + deflation of sourceLen bytes. It must be called after deflateInit() + or deflateInit2(). This would be used to allocate an output buffer + for deflation in a single pass, and so would be called before deflate(). +*/ + +ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + deflatePrime() inserts bits in the deflate output stream. The intent + is that this function is used to start off the deflate output with the + bits leftover from a previous deflate stream when appending to it. As such, + this function can only be used for raw deflate, and must be used before the + first deflate() call after a deflateInit2() or deflateReset(). bits must be + less than or equal to 16, and that many of the least significant bits of + value will be inserted in the output. + + deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, + gz_headerp head)); +/* + deflateSetHeader() provides gzip header information for when a gzip + stream is requested by deflateInit2(). deflateSetHeader() may be called + after deflateInit2() or deflateReset() and before the first call of + deflate(). The text, time, os, extra field, name, and comment information + in the provided gz_header structure are written to the gzip header (xflag is + ignored -- the extra flags are set according to the compression level). The + caller must assure that, if not Z_NULL, name and comment are terminated with + a zero byte, and that if extra is not Z_NULL, that extra_len bytes are + available there. If hcrc is true, a gzip header crc is included. Note that + the current versions of the command-line version of gzip (up through version + 1.3.x) do not support header crc's, and will report that it is a "multi-part + gzip file" and give up. + + If deflateSetHeader is not used, the default gzip header has text false, + the time set to zero, and os set to 255, with no extra, name, or comment + fields. The gzip header is returned to the default state by deflateReset(). + + deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, + int windowBits)); + + This is another version of inflateInit with an extra parameter. The + fields next_in, avail_in, zalloc, zfree and opaque must be initialized + before by the caller. + + The windowBits parameter is the base two logarithm of the maximum window + size (the size of the history buffer). It should be in the range 8..15 for + this version of the library. The default value is 15 if inflateInit is used + instead. windowBits must be greater than or equal to the windowBits value + provided to deflateInit2() while compressing, or it must be equal to 15 if + deflateInit2() was not used. If a compressed stream with a larger window + size is given as input, inflate() will return with the error code + Z_DATA_ERROR instead of trying to allocate a larger window. + + windowBits can also be -8..-15 for raw inflate. In this case, -windowBits + determines the window size. inflate() will then process raw deflate data, + not looking for a zlib or gzip header, not generating a check value, and not + looking for any check values for comparison at the end of the stream. This + is for use with other formats that use the deflate compressed data format + such as zip. Those formats provide their own check values. If a custom + format is developed using the raw deflate format for compressed data, it is + recommended that a check value such as an adler32 or a crc32 be applied to + the uncompressed data as is done in the zlib, gzip, and zip formats. For + most applications, the zlib format should be used as is. Note that comments + above on the use in deflateInit2() applies to the magnitude of windowBits. + + windowBits can also be greater than 15 for optional gzip decoding. Add + 32 to windowBits to enable zlib and gzip decoding with automatic header + detection, or add 16 to decode only the gzip format (the zlib format will + return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is + a crc32 instead of an adler32. + + inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as a null strm). msg + is set to null if there is no error message. inflateInit2 does not perform + any decompression apart from reading the zlib header if present: this will + be done by inflate(). (So next_in and avail_in may be modified, but next_out + and avail_out are unchanged.) +*/ + +ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the decompression dictionary from the given uncompressed byte + sequence. This function must be called immediately after a call of inflate, + if that call returned Z_NEED_DICT. The dictionary chosen by the compressor + can be determined from the adler32 value returned by that call of inflate. + The compressor and decompressor must use exactly the same dictionary (see + deflateSetDictionary). For raw inflate, this function can be called + immediately after inflateInit2() or inflateReset() and before any call of + inflate() to set the dictionary. The application must insure that the + dictionary that was used for compression is provided. + + inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the + expected one (incorrect adler32 value). inflateSetDictionary does not + perform any decompression: this will be done by subsequent calls of + inflate(). +*/ + +ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); +/* + Skips invalid compressed data until a full flush point (see above the + description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. + + inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR + if no more input was provided, Z_DATA_ERROR if no flush point has been found, + or Z_STREAM_ERROR if the stream structure was inconsistent. In the success + case, the application may save the current current value of total_in which + indicates where valid compressed data was found. In the error case, the + application may repeatedly call inflateSync, providing more input each time, + until success or end of the input data. +*/ + +ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when randomly accessing a large stream. The + first pass through the stream can periodically record the inflate state, + allowing restarting inflate at those points when randomly accessing the + stream. + + inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); +/* + This function is equivalent to inflateEnd followed by inflateInit, + but does not free and reallocate all the internal decompression state. + The stream will keep attributes that may have been set by inflateInit2. + + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + +ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + This function inserts bits in the inflate input stream. The intent is + that this function is used to start inflating at a bit position in the + middle of a byte. The provided bits will be used before any bytes are used + from next_in. This function should only be used with raw inflate, and + should be used before the first inflate() call after inflateInit2() or + inflateReset(). bits must be less than or equal to 16, and that many of the + least significant bits of value will be inserted in the input. + + inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, + gz_headerp head)); +/* + inflateGetHeader() requests that gzip header information be stored in the + provided gz_header structure. inflateGetHeader() may be called after + inflateInit2() or inflateReset(), and before the first call of inflate(). + As inflate() processes the gzip stream, head->done is zero until the header + is completed, at which time head->done is set to one. If a zlib stream is + being decoded, then head->done is set to -1 to indicate that there will be + no gzip header information forthcoming. Note that Z_BLOCK can be used to + force inflate() to return immediately after header processing is complete + and before any actual data is decompressed. + + The text, time, xflags, and os fields are filled in with the gzip header + contents. hcrc is set to true if there is a header CRC. (The header CRC + was valid if done is set to one.) If extra is not Z_NULL, then extra_max + contains the maximum number of bytes to write to extra. Once done is true, + extra_len contains the actual extra field length, and extra contains the + extra field, or that field truncated if extra_max is less than extra_len. + If name is not Z_NULL, then up to name_max characters are written there, + terminated with a zero unless the length is greater than name_max. If + comment is not Z_NULL, then up to comm_max characters are written there, + terminated with a zero unless the length is greater than comm_max. When + any of extra, name, or comment are not Z_NULL and the respective field is + not present in the header, then that field is set to Z_NULL to signal its + absence. This allows the use of deflateSetHeader() with the returned + structure to duplicate the header. However if those fields are set to + allocated memory, then the application will need to save those pointers + elsewhere so that they can be eventually freed. + + If inflateGetHeader is not used, then the header information is simply + discarded. The header is always checked for validity, including the header + CRC if present. inflateReset() will reset the process to discard the header + information. The application would need to call inflateGetHeader() again to + retrieve the header from the next gzip stream. + + inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, + unsigned char FAR *window)); + + Initialize the internal stream state for decompression using inflateBack() + calls. The fields zalloc, zfree and opaque in strm must be initialized + before the call. If zalloc and zfree are Z_NULL, then the default library- + derived memory allocation routines are used. windowBits is the base two + logarithm of the window size, in the range 8..15. window is a caller + supplied buffer of that size. Except for special applications where it is + assured that deflate was used with small window sizes, windowBits must be 15 + and a 32K byte window must be supplied to be able to decompress general + deflate streams. + + See inflateBack() for the usage of these routines. + + inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of + the paramaters are invalid, Z_MEM_ERROR if the internal state could not + be allocated, or Z_VERSION_ERROR if the version of the library does not + match the version of the header file. +*/ + +typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *)); +typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); + +ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc)); +/* + inflateBack() does a raw inflate with a single call using a call-back + interface for input and output. This is more efficient than inflate() for + file i/o applications in that it avoids copying between the output and the + sliding window by simply making the window itself the output buffer. This + function trusts the application to not change the output buffer passed by + the output function, at least until inflateBack() returns. + + inflateBackInit() must be called first to allocate the internal state + and to initialize the state with the user-provided window buffer. + inflateBack() may then be used multiple times to inflate a complete, raw + deflate stream with each call. inflateBackEnd() is then called to free + the allocated state. + + A raw deflate stream is one with no zlib or gzip header or trailer. + This routine would normally be used in a utility that reads zip or gzip + files and writes out uncompressed files. The utility would decode the + header and process the trailer on its own, hence this routine expects + only the raw deflate stream to decompress. This is different from the + normal behavior of inflate(), which expects either a zlib or gzip header and + trailer around the deflate stream. + + inflateBack() uses two subroutines supplied by the caller that are then + called by inflateBack() for input and output. inflateBack() calls those + routines until it reads a complete deflate stream and writes out all of the + uncompressed data, or until it encounters an error. The function's + parameters and return types are defined above in the in_func and out_func + typedefs. inflateBack() will call in(in_desc, &buf) which should return the + number of bytes of provided input, and a pointer to that input in buf. If + there is no input available, in() must return zero--buf is ignored in that + case--and inflateBack() will return a buffer error. inflateBack() will call + out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out() + should return zero on success, or non-zero on failure. If out() returns + non-zero, inflateBack() will return with an error. Neither in() nor out() + are permitted to change the contents of the window provided to + inflateBackInit(), which is also the buffer that out() uses to write from. + The length written by out() will be at most the window size. Any non-zero + amount of input may be provided by in(). + + For convenience, inflateBack() can be provided input on the first call by + setting strm->next_in and strm->avail_in. If that input is exhausted, then + in() will be called. Therefore strm->next_in must be initialized before + calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called + immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in + must also be initialized, and then if strm->avail_in is not zero, input will + initially be taken from strm->next_in[0 .. strm->avail_in - 1]. + + The in_desc and out_desc parameters of inflateBack() is passed as the + first parameter of in() and out() respectively when they are called. These + descriptors can be optionally used to pass any information that the caller- + supplied in() and out() functions need to do their job. + + On return, inflateBack() will set strm->next_in and strm->avail_in to + pass back any unused input that was provided by the last in() call. The + return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR + if in() or out() returned an error, Z_DATA_ERROR if there was a format + error in the deflate stream (in which case strm->msg is set to indicate the + nature of the error), or Z_STREAM_ERROR if the stream was not properly + initialized. In the case of Z_BUF_ERROR, an input or output error can be + distinguished using strm->next_in which will be Z_NULL only if in() returned + an error. If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to + out() returning non-zero. (in() will always be called before out(), so + strm->next_in is assured to be defined if out() returns non-zero.) Note + that inflateBack() cannot return Z_OK. +*/ + +ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); +/* + All memory allocated by inflateBackInit() is freed. + + inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream + state was inconsistent. +*/ + +ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); +/* Return flags indicating compile-time options. + + Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: + 1.0: size of uInt + 3.2: size of uLong + 5.4: size of voidpf (pointer) + 7.6: size of z_off_t + + Compiler, assembler, and debug options: + 8: DEBUG + 9: ASMV or ASMINF -- use ASM code + 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention + 11: 0 (reserved) + + One-time table building (smaller code, but not thread-safe if true): + 12: BUILDFIXED -- build static block decoding tables when needed + 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed + 14,15: 0 (reserved) + + Library content (indicates missing functionality): + 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking + deflate code when not needed) + 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect + and decode gzip streams (to avoid linking crc code) + 18-19: 0 (reserved) + + Operation variations (changes in library functionality): + 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate + 21: FASTEST -- deflate algorithm with only one, lowest compression level + 22,23: 0 (reserved) + + The sprintf variant used by gzprintf (zero is best): + 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format + 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! + 26: 0 = returns value, 1 = void -- 1 means inferred string length returned + + Remainder: + 27-31: 0 (reserved) + */ + + + /* utility functions */ + +/* + The following utility functions are implemented on top of the + basic stream-oriented functions. To simplify the interface, some + default options are assumed (compression level and memory usage, + standard memory allocation functions). The source code of these + utility functions can easily be modified if you need special options. +*/ + +ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Compresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be at least the value returned + by compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + This function can be used to compress a whole file at once if the + input file is mmap'ed. + compress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer. +*/ + +ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level)); +/* + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ + +ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); +/* + compressBound() returns an upper bound on the compressed size after + compress() or compress2() on sourceLen bytes. It would be used before + a compress() or compress2() call to allocate the destination buffer. +*/ + +ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be large enough to hold the + entire uncompressed data. (The size of the uncompressed data must have + been saved previously by the compressor and transmitted to the decompressor + by some mechanism outside the scope of this compression library.) + Upon exit, destLen is the actual size of the compressed buffer. + This function can be used to decompress a whole file at once if the + input file is mmap'ed. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. +*/ + + +typedef voidp gzFile; + +ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); +/* + Opens a gzip (.gz) file for reading or writing. The mode parameter + is as in fopen ("rb" or "wb") but can also include a compression level + ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for + Huffman only compression as in "wb1h", or 'R' for run-length encoding + as in "wb1R". (See the description of deflateInit2 for more information + about the strategy parameter.) + + gzopen can be used to read a file which is not in gzip format; in this + case gzread will directly read from the file without decompression. + + gzopen returns NULL if the file could not be opened or if there was + insufficient memory to allocate the (de)compression state; errno + can be checked to distinguish the two cases (if errno is zero, the + zlib error is Z_MEM_ERROR). */ + +ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +/* + gzdopen() associates a gzFile with the file descriptor fd. File + descriptors are obtained from calls like open, dup, creat, pipe or + fileno (in the file has been previously opened with fopen). + The mode parameter is as in gzopen. + The next call of gzclose on the returned gzFile will also close the + file descriptor fd, just like fclose(fdopen(fd), mode) closes the file + descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). + gzdopen returns NULL if there was insufficient memory to allocate + the (de)compression state. +*/ + +ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); +/* + Dynamically update the compression level or strategy. See the description + of deflateInit2 for the meaning of these parameters. + gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not + opened for writing. +*/ + +ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +/* + Reads the given number of uncompressed bytes from the compressed file. + If the input file was not in gzip format, gzread copies the given number + of bytes into the buffer. + gzread returns the number of uncompressed bytes actually read (0 for + end of file, -1 for error). */ + +ZEXTERN int ZEXPORT gzwrite OF((gzFile file, + voidpc buf, unsigned len)); +/* + Writes the given number of uncompressed bytes into the compressed file. + gzwrite returns the number of uncompressed bytes actually written + (0 in case of error). +*/ + +ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); +/* + Converts, formats, and writes the args to the compressed file under + control of the format string, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written (0 in case of error). The number of + uncompressed bytes written is limited to 4095. The caller should assure that + this limit is not exceeded. If it is exceeded, then gzprintf() will return + return an error (0) with nothing written. In this case, there may also be a + buffer overflow with unpredictable consequences, which is possible only if + zlib was compiled with the insecure functions sprintf() or vsprintf() + because the secure snprintf() or vsnprintf() functions were not available. +*/ + +ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); +/* + Writes the given null-terminated string to the compressed file, excluding + the terminating null character. + gzputs returns the number of characters written, or -1 in case of error. +*/ + +ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); +/* + Reads bytes from the compressed file until len-1 characters are read, or + a newline character is read and transferred to buf, or an end-of-file + condition is encountered. The string is then terminated with a null + character. + gzgets returns buf, or Z_NULL in case of error. +*/ + +ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); +/* + Writes c, converted to an unsigned char, into the compressed file. + gzputc returns the value that was written, or -1 in case of error. +*/ + +ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); +/* + Reads one byte from the compressed file. gzgetc returns this byte + or -1 in case of end of file or error. +*/ + +ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); +/* + Push one character back onto the stream to be read again later. + Only one character of push-back is allowed. gzungetc() returns the + character pushed, or -1 on failure. gzungetc() will fail if a + character has been pushed but not read yet, or if c is -1. The pushed + character will be discarded if the stream is repositioned with gzseek() + or gzrewind(). +*/ + +ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); +/* + Flushes all pending output into the compressed file. The parameter + flush is as in the deflate() function. The return value is the zlib + error number (see function gzerror below). gzflush returns Z_OK if + the flush parameter is Z_FINISH and all output could be flushed. + gzflush should be called only when strictly necessary because it can + degrade compression. +*/ + +ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, + z_off_t offset, int whence)); +/* + Sets the starting position for the next gzread or gzwrite on the + given compressed file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); + the value SEEK_END is not supported. + If the file is opened for reading, this function is emulated but can be + extremely slow. If the file is opened for writing, only forward seeks are + supported; gzseek then compresses a sequence of zeroes up to the new + starting position. + + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error, in + particular if the file is opened for writing and the new starting position + would be before the current position. +*/ + +ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); +/* + Rewinds the given file. This function is supported only for reading. + + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) +*/ + +ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); +/* + Returns the starting position for the next gzread or gzwrite on the + given compressed file. This position represents a number of bytes in the + uncompressed data stream. + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + +ZEXTERN int ZEXPORT gzeof OF((gzFile file)); +/* + Returns 1 when EOF has previously been detected reading the given + input stream, otherwise zero. +*/ + +ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); +/* + Returns 1 if file is being read directly without decompression, otherwise + zero. +*/ + +ZEXTERN int ZEXPORT gzclose OF((gzFile file)); +/* + Flushes all pending output if necessary, closes the compressed file + and deallocates all the (de)compression state. The return value is the zlib + error number (see function gzerror below). +*/ + +ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); +/* + Returns the error message for the last error which occurred on the + given compressed file. errnum is set to zlib error number. If an + error occurred in the file system and not in the compression library, + errnum is set to Z_ERRNO and the application may consult errno + to get the exact error code. +*/ + +ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); +/* + Clears the error and end-of-file flags for file. This is analogous to the + clearerr() function in stdio. This is useful for continuing to read a gzip + file that is being written concurrently. +*/ + + /* checksum functions */ + +/* + These functions are not related to compression but are exported + anyway because they might be useful in applications using the + compression library. +*/ + +ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); +/* + Update a running Adler-32 checksum with the bytes buf[0..len-1] and + return the updated checksum. If buf is NULL, this function returns + the required initial value for the checksum. + An Adler-32 checksum is almost as reliable as a CRC32 but can be computed + much faster. Usage example: + + uLong adler = adler32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + adler = adler32(adler, buffer, length); + } + if (adler != original_adler) error(); +*/ + +ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, + z_off_t len2)); +/* + Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 + and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for + each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of + seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. +*/ + +ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); +/* + Update a running CRC-32 with the bytes buf[0..len-1] and return the + updated CRC-32. If buf is NULL, this function returns the required initial + value for the for the crc. Pre- and post-conditioning (one's complement) is + performed within this function so it shouldn't be done by the application. + Usage example: + + uLong crc = crc32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + crc = crc32(crc, buffer, length); + } + if (crc != original_crc) error(); +*/ + +ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); + +/* + Combine two CRC-32 check values into one. For two sequences of bytes, + seq1 and seq2 with lengths len1 and len2, CRC-32 check values were + calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 + check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and + len2. +*/ + + + /* various hacks, don't look :) */ + +/* deflateInit and inflateInit are macros to allow checking the zlib version + * and the compiler's view of z_stream: + */ +ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size)); +ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, + unsigned char FAR *window, + const char *version, + int stream_size)); +#define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) +#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) +#define inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, sizeof(z_stream)) + + +#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) + struct internal_state {int dummy;}; /* hack for buggy compilers */ +#endif + +ZEXTERN const char * ZEXPORT zError OF((int)); +ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); +ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); + +#ifdef __cplusplus +} +#endif + +#endif /* ZLIB_H */ diff --git a/save/example.py b/save/example.py new file mode 100644 index 0000000..473158e --- /dev/null +++ b/save/example.py @@ -0,0 +1,79 @@ +## This script contains some example code +## illustrating ways to to use the pysam +## interface to samtools. +## +## The unit tests in the script pysam_test.py +## contain more examples. +## + +import pysam + +samfile = pysam.Samfile( "ex1.bam", "rb" ) + +print "###################" +# check different ways to iterate +print len(list(samfile.fetch())) +print len(list(samfile.fetch( "chr1", 10, 200 ))) +print len(list(samfile.fetch( region="chr1:10-200" ))) +print len(list(samfile.fetch( "chr1" ))) +print len(list(samfile.fetch( region="chr1"))) +print len(list(samfile.fetch( "chr2" ))) +print len(list(samfile.fetch( region="chr2"))) +print len(list(samfile.fetch())) +print len(list(samfile.fetch( "chr1" ))) +print len(list(samfile.fetch( region="chr1"))) +print len(list(samfile.fetch())) + +print len(list(samfile.pileup( "chr1", 10, 200 ))) +print len(list(samfile.pileup( region="chr1:10-200" ))) +print len(list(samfile.pileup( "chr1" ))) +print len(list(samfile.pileup( region="chr1"))) +print len(list(samfile.pileup( "chr2" ))) +print len(list(samfile.pileup( region="chr2"))) +print len(list(samfile.pileup())) +print len(list(samfile.pileup())) + +print "########### fetch with callback ################" +def my_fetch_callback( alignment ): print str(alignment) +samfile.fetch( region="chr1:10-200", callback=my_fetch_callback ) + +print "########## pileup with callback ################" +def my_pileup_callback( column ): print str(column) +samfile.pileup( region="chr1:10-200", callback=my_pileup_callback ) + + +print "########### Using a callback object ###### " + +class Counter: + mCounts = 0 + def __call__(self, alignment): + self.mCounts += 1 + +c = Counter() +samfile.fetch( region = "chr1:10-200", callback = c ) +print "counts=", c.mCounts + +print "########### Calling a samtools command line function ############" + +for p in pysam.mpileup( "-c", "ex1.bam" ): + print str(p) + +print pysam.mpileup.getMessages() + +print "########### Investigating headers #######################" + +# playing arount with headers +samfile = pysam.Samfile( "ex3.sam", "r" ) +print samfile.references +print samfile.lengths +print samfile.text +print samfile.header +header = samfile.header +samfile.close() + +header["HD"]["SO"] = "unsorted" +outfile = pysam.Samfile( "out.sam", "wh", + header = header ) + +outfile.close() + diff --git a/save/pysam_bench.py b/save/pysam_bench.py new file mode 100644 index 0000000..03503ec --- /dev/null +++ b/save/pysam_bench.py @@ -0,0 +1,63 @@ +'''benchmark pysam BAM/SAM access with the samtools commandline tools. + +samtools functions are called via the pysam interface to avoid the over-head +of starting additional processes. +''' + +import pysam +import timeit + +iterations = 10 + +def runBenchmark( test, + pysam_way, + samtools_way = None): + print test + print timeit.repeat( pysam_way, number = iterations, setup="from __main__ import pysam" ) + if samtools_way: + print timeit.repeat( samtools_way, number = iterations, setup="from __main__ import pysam" ) + +runBenchmark( "Samfile.fetch", +''' +f = pysam.Samfile( "ex1.bam", "rb" ) +results = list(f.fetch()) +''', +''' +f = pysam.view( "ex1.bam" ) +''' +) + +runBenchmark( "Samfile.pileup", +''' +f = pysam.Samfile( "ex1.bam", "rb" ) +results = list(f.pileup()) +''', +''' +f = pysam.pileup( "ex1.bam" ) +''') + +runBenchmark( "Samfile.pileup with coverage retrieval", +''' +f = pysam.Samfile( "ex1.bam", "rb" ) +results = [ x.n for x in f.pileup() ] +''' ) + +runBenchmark( "Samfile.pileup with full retrieval", +''' +f = pysam.Samfile( "ex1.bam", "rb" ) +results = [ x.pileups for x in f.pileup() ] +''' ) + +runBenchmark( "Samfile.pileup - many references", +''' +f = pysam.Samfile( "manyrefs.bam", "rb" ) +results = [ x.pileups for x in f.pileup() ] +''', +''' +f = pysam.pileup( "manyrefs.bam" ) +''' + ) + + + + diff --git a/save/pysam_test2.6.py b/save/pysam_test2.6.py new file mode 100755 index 0000000..eb4848a --- /dev/null +++ b/save/pysam_test2.6.py @@ -0,0 +1,1607 @@ +#!/usr/bin/env python +'''unit testing code for pysam. + +Execute in the :file:`tests` directory as it requires the Makefile +and data files located there. +''' + +import pysam +import unittest +import os, re, sys +import itertools +import collections +import subprocess +import shutil +import logging + + +if sys.version_info[0] < 3: + from itertools import izip as zip_longest +else: + from itertools import zip_longest + + +SAMTOOLS="samtools" +WORKDIR="pysam_test_work" + +def checkBinaryEqual( filename1, filename2 ): + '''return true if the two files are binary equal.''' + if os.path.getsize( filename1 ) != os.path.getsize( filename2 ): + return False + + infile1 = open(filename1, "rb") + infile2 = open(filename2, "rb") + + def chariter( infile ): + while 1: + c = infile.read(1) + if c == b"": break + yield c + + found = False + for c1,c2 in zip_longest( chariter( infile1), chariter( infile2) ): + if c1 != c2: break + else: + found = True + + infile1.close() + infile2.close() + return found + +def runSamtools( cmd ): + '''run a samtools command''' + + try: + retcode = subprocess.call(cmd, shell=True) + if retcode < 0: + print >>sys.stderr, "Child was terminated by signal", -retcode + except OSError as e: + print >>sys.stderr, "Execution failed:", e + +def getSamtoolsVersion(): + '''return samtools version''' + + pipe = subprocess.Popen(SAMTOOLS, shell=True, stderr=subprocess.PIPE).stderr + lines = b"".join(pipe.readlines()) + if sys.version_info[0] >= 3: + lines = lines.decode('ascii') + return re.search( "Version:\s+(\S+)", lines).groups()[0] + +class BinaryTest(unittest.TestCase): + '''test samtools command line commands and compare + against pysam commands. + + Tests fail, if the output is not binary identical. + ''' + + first_time = True + + # a list of commands to test + commands = \ + { + "view" : + ( + ("ex1.view", "view ex1.bam > ex1.view"), + ("pysam_ex1.view", (pysam.view, "ex1.bam" ) ), + ), + "view2" : + ( + ("ex1.view", "view -bT ex1.fa -o ex1.view2 ex1.sam"), + # note that -o ex1.view2 throws exception. + ("pysam_ex1.view", (pysam.view, "-bT ex1.fa -oex1.view2 ex1.sam" ) ), + ), + "sort" : + ( + ( "ex1.sort.bam", "sort ex1.bam ex1.sort" ), + ( "pysam_ex1.sort.bam", (pysam.sort, "ex1.bam pysam_ex1.sort" ) ), + ), + "mpileup" : + ( + ("ex1.pileup", "mpileup ex1.bam > ex1.pileup" ), + ("pysam_ex1.mpileup", (pysam.mpileup, "ex1.bam" ) ), + ), + "depth" : + ( + ("ex1.depth", "depth ex1.bam > ex1.depth" ), + ("pysam_ex1.depth", (pysam.depth, "ex1.bam" ) ), + ), + "faidx" : + ( + ("ex1.fa.fai", "faidx ex1.fa"), + ("pysam_ex1.fa.fai", (pysam.faidx, "ex1.fa") ), + ), + "index": + ( + ("ex1.bam.bai", "index ex1.bam" ), + ("pysam_ex1.bam.bai", (pysam.index, "pysam_ex1.bam" ) ), + ), + "idxstats" : + ( + ("ex1.idxstats", "idxstats ex1.bam > ex1.idxstats" ), + ("pysam_ex1.idxstats", (pysam.idxstats, "pysam_ex1.bam" ) ), + ), + "fixmate" : + ( + ("ex1.fixmate", "fixmate ex1.bam ex1.fixmate" ), + ("pysam_ex1.fixmate", (pysam.fixmate, "pysam_ex1.bam pysam_ex1.fixmate") ), + ), + "flagstat" : + ( + ("ex1.flagstat", "flagstat ex1.bam > ex1.flagstat" ), + ("pysam_ex1.flagstat", (pysam.flagstat, "pysam_ex1.bam") ), + ), + "calmd" : + ( + ("ex1.calmd", "calmd ex1.bam ex1.fa > ex1.calmd" ), + ("pysam_ex1.calmd", (pysam.calmd, "pysam_ex1.bam ex1.fa") ), + ), + "merge" : + ( + ("ex1.merge", "merge -f ex1.merge ex1.bam ex1.bam" ), + # -f option does not work - following command will cause the subsequent + # command to fail + ("pysam_ex1.merge", (pysam.merge, "pysam_ex1.merge pysam_ex1.bam pysam_ex1.bam") ), + ), + "rmdup" : + ( + ("ex1.rmdup", "rmdup ex1.bam ex1.rmdup" ), + ("pysam_ex1.rmdup", (pysam.rmdup, "pysam_ex1.bam pysam_ex1.rmdup" )), + ), + "reheader" : + ( + ( "ex1.reheader", "reheader ex1.bam ex1.bam > ex1.reheader"), + ( "pysam_ex1.reheader", (pysam.reheader, "ex1.bam ex1.bam" ) ), + ), + "cat": + ( + ( "ex1.cat", "cat ex1.bam ex1.bam > ex1.cat"), + ( "pysam_ex1.cat", (pysam.cat, "ex1.bam ex1.bam" ) ), + ), + "targetcut": + ( + ("ex1.targetcut", "targetcut ex1.bam > ex1.targetcut" ), + ("pysam_ex1.targetcut", (pysam.targetcut, "pysam_ex1.bam") ), + ), + "phase": + ( + ("ex1.phase", "phase ex1.bam > ex1.phase" ), + ("pysam_ex1.phase", (pysam.phase, "pysam_ex1.bam") ), + ), + "import" : + ( + ("ex1.bam", "import ex1.fa.fai ex1.sam.gz ex1.bam" ), + ("pysam_ex1.bam", (pysam.samimport, "ex1.fa.fai ex1.sam.gz pysam_ex1.bam") ), + ), + "bam2fq": + ( + ("ex1.bam2fq", "bam2fq ex1.bam > ex1.bam2fq" ), + ("pysam_ex1.bam2fq", (pysam.bam2fq, "pysam_ex1.bam") ), + ), + } + + # some tests depend on others. The order specifies in which order + # the samtools commands are executed. + # The first three (faidx, import, index) need to be in that order, + # the rest is arbitrary. + order = ('faidx', 'import', 'index', + # 'pileup1', 'pileup2', deprecated + # 'glfview', deprecated + 'view', 'view2', + 'sort', + 'mpileup', + 'depth', + 'idxstats', + 'fixmate', + 'flagstat', + # 'calmd', + 'merge', + 'rmdup', + 'reheader', + 'cat', + 'targetcut', + 'phase', + 'bam2fq', + ) + + def setUp( self ): + '''setup tests. + + For setup, all commands will be run before the first test is + executed. Individual tests will then just compare the output + files. + ''' + if BinaryTest.first_time: + + # remove previous files + if os.path.exists( WORKDIR ): + shutil.rmtree( WORKDIR ) + + # copy the source files to WORKDIR + os.makedirs( WORKDIR ) + + shutil.copy( "ex1.fa", os.path.join( WORKDIR, "pysam_ex1.fa" ) ) + shutil.copy( "ex1.fa", os.path.join( WORKDIR, "ex1.fa" ) ) + shutil.copy( "ex1.sam.gz", os.path.join( WORKDIR, "ex1.sam.gz" ) ) + shutil.copy( "ex1.sam", os.path.join( WORKDIR, "ex1.sam" ) ) + + # cd to workdir + savedir = os.getcwd() + os.chdir( WORKDIR ) + + for label in self.order: + command = self.commands[label] + samtools_target, samtools_command = command[0] + try: + pysam_target, pysam_command = command[1] + except ValueError as msg: + raise ValueError( "error while setting up %s=%s: %s" %\ + (label, command, msg) ) + runSamtools( " ".join( (SAMTOOLS, samtools_command ))) + pysam_method, pysam_options = pysam_command + try: + output = pysam_method( *pysam_options.split(" "), raw=True) + except pysam.SamtoolsError as msg: + raise pysam.SamtoolsError( "error while executing %s: options=%s: msg=%s" %\ + (label, pysam_options, msg) ) + if ">" in samtools_command: + outfile = open( pysam_target, "wb" ) + if sys.version_info[0] < 3: + for line in output: outfile.write( line ) + else: + for line in output: outfile.write(line.encode('ascii')) + outfile.close() + + os.chdir( savedir ) + BinaryTest.first_time = False + + + + samtools_version = getSamtoolsVersion() + + + def _r( s ): + # patch - remove any of the alpha/beta suffixes, i.e., 0.1.12a -> 0.1.12 + if s.count('-') > 0: s = s[0:s.find('-')] + return re.sub( "[^0-9.]", "", s ) + + if _r(samtools_version) != _r( pysam.__samtools_version__): + raise ValueError("versions of pysam/samtools and samtools differ: %s != %s" % \ + (pysam.__samtools_version__, + samtools_version )) + + def checkCommand( self, command ): + if command: + samtools_target, pysam_target = self.commands[command][0][0], self.commands[command][1][0] + samtools_target = os.path.join( WORKDIR, samtools_target ) + pysam_target = os.path.join( WORKDIR, pysam_target ) + self.assertTrue( checkBinaryEqual( samtools_target, pysam_target ), + "%s failed: files %s and %s are not the same" % (command, samtools_target, pysam_target) ) + + def testImport( self ): + self.checkCommand( "import" ) + + def testIndex( self ): + self.checkCommand( "index" ) + + def testSort( self ): + self.checkCommand( "sort" ) + + def testMpileup( self ): + self.checkCommand( "mpileup" ) + + def testDepth( self ): + self.checkCommand( "depth" ) + + def testIdxstats( self ): + self.checkCommand( "idxstats" ) + + def testFixmate( self ): + self.checkCommand( "fixmate" ) + + def testFlagstat( self ): + self.checkCommand( "flagstat" ) + + def testMerge( self ): + self.checkCommand( "merge" ) + + def testRmdup( self ): + self.checkCommand( "rmdup" ) + + def testReheader( self ): + self.checkCommand( "reheader" ) + + def testCat( self ): + self.checkCommand( "cat" ) + + def testTargetcut( self ): + self.checkCommand( "targetcut" ) + + def testPhase( self ): + self.checkCommand( "phase" ) + + def testBam2fq( self ): + self.checkCommand( "bam2fq" ) + + # def testPileup1( self ): + # self.checkCommand( "pileup1" ) + + # def testPileup2( self ): + # self.checkCommand( "pileup2" ) + + # deprecated + # def testGLFView( self ): + # self.checkCommand( "glfview" ) + + def testView( self ): + self.checkCommand( "view" ) + + def testEmptyIndex( self ): + self.assertRaises( IOError, pysam.index, "exdoesntexist.bam" ) + + def __del__(self): + if os.path.exists( WORKDIR ): + shutil.rmtree( WORKDIR ) + +class IOTest(unittest.TestCase): + '''check if reading samfile and writing a samfile are consistent.''' + + def checkEcho( self, input_filename, reference_filename, + output_filename, + input_mode, output_mode, use_template = True ): + '''iterate through *input_filename* writing to *output_filename* and + comparing the output to *reference_filename*. + + The files are opened according to the *input_mode* and *output_mode*. + + If *use_template* is set, the header is copied from infile using the + template mechanism, otherwise target names and lengths are passed + explicitly. + + ''' + + infile = pysam.Samfile( input_filename, input_mode ) + if use_template: + outfile = pysam.Samfile( output_filename, output_mode, template = infile ) + else: + outfile = pysam.Samfile( output_filename, output_mode, + referencenames = infile.references, + referencelengths = infile.lengths, + add_sq_text = False ) + + iter = infile.fetch() + for x in iter: outfile.write( x ) + infile.close() + outfile.close() + + self.assertTrue( checkBinaryEqual( reference_filename, output_filename), + "files %s and %s are not the same" % (reference_filename, output_filename) ) + + + def testReadWriteBam( self ): + + input_filename = "ex1.bam" + output_filename = "pysam_ex1.bam" + reference_filename = "ex1.bam" + + self.checkEcho( input_filename, reference_filename, output_filename, + "rb", "wb" ) + + + def testReadWriteBamWithTargetNames( self ): + + input_filename = "ex1.bam" + output_filename = "pysam_ex1.bam" + reference_filename = "ex1.bam" + + self.checkEcho( input_filename, reference_filename, output_filename, + "rb", "wb", use_template = False ) + + def testReadWriteSamWithHeader( self ): + + input_filename = "ex2.sam" + output_filename = "pysam_ex2.sam" + reference_filename = "ex2.sam" + + self.checkEcho( input_filename, reference_filename, output_filename, + "r", "wh" ) + + def testReadWriteSamWithoutHeader( self ): + + input_filename = "ex2.sam" + output_filename = "pysam_ex2.sam" + reference_filename = "ex1.sam" + + self.checkEcho( input_filename, reference_filename, output_filename, + "r", "w" ) + + def testReadSamWithoutHeaderWriteSamWithoutHeader( self ): + + input_filename = "ex1.sam" + output_filename = "pysam_ex1.sam" + reference_filename = "ex1.sam" + + # disabled - reading from a samfile without header + # is not implemented. + + # self.checkEcho( input_filename, reference_filename, output_filename, + # "r", "w" ) + + def testFetchFromClosedFile( self ): + + samfile = pysam.Samfile( "ex1.bam", "rb" ) + samfile.close() + self.assertRaises( ValueError, samfile.fetch, 'chr1', 100, 120) + + def testClosedFile( self ): + '''test that access to a closed samfile raises ValueError.''' + + samfile = pysam.Samfile( "ex1.bam", "rb" ) + samfile.close() + self.assertRaises( ValueError, samfile.fetch, 'chr1', 100, 120) + self.assertRaises( ValueError, samfile.pileup, 'chr1', 100, 120) + self.assertRaises( ValueError, samfile.getrname, 0 ) + self.assertRaises( ValueError, samfile.tell ) + self.assertRaises( ValueError, samfile.seek, 0 ) + self.assertRaises( ValueError, getattr, samfile, "nreferences" ) + self.assertRaises( ValueError, getattr, samfile, "references" ) + self.assertRaises( ValueError, getattr, samfile, "lengths" ) + self.assertRaises( ValueError, getattr, samfile, "text" ) + self.assertRaises( ValueError, getattr, samfile, "header" ) + + # write on closed file + self.assertEqual( 0, samfile.write(None) ) + + def testAutoDetection( self ): + '''test if autodetection works.''' + + samfile = pysam.Samfile( "ex3.sam" ) + self.assertRaises( ValueError, samfile.fetch, 'chr1' ) + samfile.close() + + samfile = pysam.Samfile( "ex3.bam" ) + samfile.fetch('chr1') + samfile.close() + + def testReadingFromSamFileWithoutHeader( self ): + '''read from samfile without header. + ''' + samfile = pysam.Samfile( "ex7.sam" ) + self.assertRaises( NotImplementedError, samfile.__iter__ ) + + def testReadingFromFileWithoutIndex( self ): + '''read from bam file without index.''' + + assert not os.path.exists( "ex2.bam.bai" ) + samfile = pysam.Samfile( "ex2.bam", "rb" ) + self.assertRaises( ValueError, samfile.fetch ) + self.assertEqual( len(list( samfile.fetch(until_eof = True) )), 3270 ) + + def testReadingUniversalFileMode( self ): + '''read from samfile without header. + ''' + + input_filename = "ex2.sam" + output_filename = "pysam_ex2.sam" + reference_filename = "ex1.sam" + + self.checkEcho( input_filename, reference_filename, output_filename, + "rU", "w" ) + +class TestFloatTagBug( unittest.TestCase ): + '''see issue 71''' + + def testFloatTagBug( self ): + '''a float tag before another exposed a parsing bug in bam_aux_get - expected to fail + + This test is expected to fail until samtools is fixed. + ''' + samfile = pysam.Samfile("tag_bug.bam") + read = samfile.fetch(until_eof=True).next() + self.assertTrue( ('XC',1) in read.tags ) + self.assertEqual(read.opt('XC'), 1) + +class TestTagParsing( unittest.TestCase ): + '''tests checking the accuracy of tag setting and retrieval.''' + + def makeRead( self ): + a = pysam.AlignedRead() + a.qname = "read_12345" + a.tid = 0 + a.seq="ACGT" * 3 + a.flag = 0 + a.rname = 0 + a.pos = 1 + a.mapq = 20 + a.cigar = ( (0,10), (2,1), (0,25) ) + a.mrnm = 0 + a.mpos=200 + a.isize = 0 + a.qual ="1234" * 3 + # todo: create tags + return a + + def testNegativeIntegers( self ): + x = -2 + aligned_read = self.makeRead() + aligned_read.tags = [("XD", int(x) ) ] + # print (aligned_read.tags) + + def testNegativeIntegers2( self ): + x = -2 + r = self.makeRead() + r.tags = [("XD", int(x) ) ] + outfile = pysam.Samfile( "test.bam", + "wb", + referencenames = ("chr1",), + referencelengths = (1000,) ) + outfile.write (r ) + outfile.close() + + +class TestIteratorRow(unittest.TestCase): + + def setUp(self): + self.samfile=pysam.Samfile( "ex1.bam","rb" ) + + def checkRange( self, rnge ): + '''compare results from iterator with those from samtools.''' + ps = list(self.samfile.fetch(region=rnge)) + sa = list(pysam.view( "ex1.bam", rnge, raw = True) ) + self.assertEqual( len(ps), len(sa), "unequal number of results for range %s: %i != %i" % (rnge, len(ps), len(sa) )) + # check if the same reads are returned and in the same order + for line, (a, b) in enumerate( zip( ps, sa ) ): + d = b.split("\t") + self.assertEqual( a.qname, d[0], "line %i: read id mismatch: %s != %s" % (line, a.rname, d[0]) ) + self.assertEqual( a.pos, int(d[3])-1, "line %i: read position mismatch: %s != %s, \n%s\n%s\n" % \ + (line, a.pos, int(d[3])-1, + str(a), str(d) ) ) + if sys.version_info[0] < 3: + qual = d[10] + else: + qual = d[10].encode('ascii') + self.assertEqual( a.qual, qual, "line %i: quality mismatch: %s != %s, \n%s\n%s\n" % \ + (line, a.qual, qual, + str(a), str(d) ) ) + + def testIteratePerContig(self): + '''check random access per contig''' + for contig in self.samfile.references: + self.checkRange( contig ) + + def testIterateRanges(self): + '''check random access per range''' + for contig, length in zip(self.samfile.references, self.samfile.lengths): + for start in range( 1, length, 90): + self.checkRange( "%s:%i-%i" % (contig, start, start + 90) ) # this includes empty ranges + + def tearDown(self): + self.samfile.close() + +class TestIteratorRowAll(unittest.TestCase): + + def setUp(self): + self.samfile=pysam.Samfile( "ex1.bam","rb" ) + + def testIterate(self): + '''compare results from iterator with those from samtools.''' + ps = list(self.samfile.fetch()) + sa = list(pysam.view( "ex1.bam", raw = True) ) + self.assertEqual( len(ps), len(sa), "unequal number of results: %i != %i" % (len(ps), len(sa) )) + # check if the same reads are returned + for line, pair in enumerate( zip( ps, sa ) ): + data = pair[1].split("\t") + self.assertEqual( pair[0].qname, data[0], "read id mismatch in line %i: %s != %s" % (line, pair[0].rname, data[0]) ) + + def tearDown(self): + self.samfile.close() + +class TestIteratorColumn(unittest.TestCase): + '''test iterator column against contents of ex3.bam.''' + + # note that samfile contains 1-based coordinates + # 1D means deletion with respect to reference sequence + # + mCoverages = { 'chr1' : [ 0 ] * 20 + [1] * 36 + [0] * (100 - 20 -35 ), + 'chr2' : [ 0 ] * 20 + [1] * 35 + [0] * (100 - 20 -35 ), + } + + def setUp(self): + self.samfile=pysam.Samfile( "ex4.bam","rb" ) + + def checkRange( self, rnge ): + '''compare results from iterator with those from samtools.''' + # check if the same reads are returned and in the same order + for column in self.samfile.pileup(region=rnge): + thiscov = len(column.pileups) + refcov = self.mCoverages[self.samfile.getrname(column.tid)][column.pos] + self.assertEqual( thiscov, refcov, "wrong coverage at pos %s:%i %i should be %i" % (self.samfile.getrname(column.tid), column.pos, thiscov, refcov)) + + def testIterateAll(self): + '''check random access per contig''' + self.checkRange( None ) + + def testIteratePerContig(self): + '''check random access per contig''' + for contig in self.samfile.references: + self.checkRange( contig ) + + def testIterateRanges(self): + '''check random access per range''' + for contig, length in zip(self.samfile.references, self.samfile.lengths): + for start in range( 1, length, 90): + self.checkRange( "%s:%i-%i" % (contig, start, start + 90) ) # this includes empty ranges + + def testInverse( self ): + '''test the inverse, is point-wise pileup accurate.''' + for contig, refseq in self.mCoverages.items(): + refcolumns = sum(refseq) + for pos, refcov in enumerate( refseq ): + columns = list(self.samfile.pileup( contig, pos, pos+1) ) + if refcov == 0: + # if no read, no coverage + self.assertEqual( len(columns), refcov, "wrong number of pileup columns returned for position %s:%i, %i should be %i" %(contig,pos,len(columns), refcov) ) + elif refcov == 1: + # one read, all columns of the read are returned + self.assertEqual( len(columns), refcolumns, "pileup incomplete at position %i: got %i, expected %i " %\ + (pos, len(columns), refcolumns)) + + + + def tearDown(self): + self.samfile.close() + +class TestAlignedReadFromBam(unittest.TestCase): + + def setUp(self): + self.samfile=pysam.Samfile( "ex3.bam","rb" ) + self.reads=list(self.samfile.fetch()) + + def testARqname(self): + self.assertEqual( self.reads[0].qname, "read_28833_29006_6945", "read name mismatch in read 1: %s != %s" % (self.reads[0].qname, "read_28833_29006_6945") ) + self.assertEqual( self.reads[1].qname, "read_28701_28881_323b", "read name mismatch in read 2: %s != %s" % (self.reads[1].qname, "read_28701_28881_323b") ) + + def testARflag(self): + self.assertEqual( self.reads[0].flag, 99, "flag mismatch in read 1: %s != %s" % (self.reads[0].flag, 99) ) + self.assertEqual( self.reads[1].flag, 147, "flag mismatch in read 2: %s != %s" % (self.reads[1].flag, 147) ) + + def testARrname(self): + self.assertEqual( self.reads[0].rname, 0, "chromosome/target id mismatch in read 1: %s != %s" % (self.reads[0].rname, 0) ) + self.assertEqual( self.reads[1].rname, 1, "chromosome/target id mismatch in read 2: %s != %s" % (self.reads[1].rname, 1) ) + + def testARpos(self): + self.assertEqual( self.reads[0].pos, 33-1, "mapping position mismatch in read 1: %s != %s" % (self.reads[0].pos, 33-1) ) + self.assertEqual( self.reads[1].pos, 88-1, "mapping position mismatch in read 2: %s != %s" % (self.reads[1].pos, 88-1) ) + + def testARmapq(self): + self.assertEqual( self.reads[0].mapq, 20, "mapping quality mismatch in read 1: %s != %s" % (self.reads[0].mapq, 20) ) + self.assertEqual( self.reads[1].mapq, 30, "mapping quality mismatch in read 2: %s != %s" % (self.reads[1].mapq, 30) ) + + def testARcigar(self): + self.assertEqual( self.reads[0].cigar, [(0, 10), (2, 1), (0, 25)], "read name length mismatch in read 1: %s != %s" % (self.reads[0].cigar, [(0, 10), (2, 1), (0, 25)]) ) + self.assertEqual( self.reads[1].cigar, [(0, 35)], "read name length mismatch in read 2: %s != %s" % (self.reads[1].cigar, [(0, 35)]) ) + + def testARmrnm(self): + self.assertEqual( self.reads[0].mrnm, 0, "mate reference sequence name mismatch in read 1: %s != %s" % (self.reads[0].mrnm, 0) ) + self.assertEqual( self.reads[1].mrnm, 1, "mate reference sequence name mismatch in read 2: %s != %s" % (self.reads[1].mrnm, 1) ) + self.assertEqual( self.reads[0].rnext, 0, "mate reference sequence name mismatch in read 1: %s != %s" % (self.reads[0].rnext, 0) ) + self.assertEqual( self.reads[1].rnext, 1, "mate reference sequence name mismatch in read 2: %s != %s" % (self.reads[1].rnext, 1) ) + + def testARmpos(self): + self.assertEqual( self.reads[0].mpos, 200-1, "mate mapping position mismatch in read 1: %s != %s" % (self.reads[0].mpos, 200-1) ) + self.assertEqual( self.reads[1].mpos, 500-1, "mate mapping position mismatch in read 2: %s != %s" % (self.reads[1].mpos, 500-1) ) + self.assertEqual( self.reads[0].pnext, 200-1, "mate mapping position mismatch in read 1: %s != %s" % (self.reads[0].pnext, 200-1) ) + self.assertEqual( self.reads[1].pnext, 500-1, "mate mapping position mismatch in read 2: %s != %s" % (self.reads[1].pnext, 500-1) ) + + def testARisize(self): + self.assertEqual( self.reads[0].isize, 167, "insert size mismatch in read 1: %s != %s" % (self.reads[0].isize, 167) ) + self.assertEqual( self.reads[1].isize, 412, "insert size mismatch in read 2: %s != %s" % (self.reads[1].isize, 412) ) + self.assertEqual( self.reads[0].tlen, 167, "insert size mismatch in read 1: %s != %s" % (self.reads[0].tlen, 167) ) + self.assertEqual( self.reads[1].tlen, 412, "insert size mismatch in read 2: %s != %s" % (self.reads[1].tlen, 412) ) + + def testARseq(self): + self.assertEqual( self.reads[0].seq, b"AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG", "sequence mismatch in read 1: %s != %s" % (self.reads[0].seq, b"AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG") ) + self.assertEqual( self.reads[1].seq, b"ACCTATATCTTGGCCTTGGCCGATGCGGCCTTGCA", "sequence size mismatch in read 2: %s != %s" % (self.reads[1].seq, b"ACCTATATCTTGGCCTTGGCCGATGCGGCCTTGCA") ) + self.assertEqual( self.reads[3].seq, b"AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG", "sequence mismatch in read 4: %s != %s" % (self.reads[3].seq, b"AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG") ) + + def testARqual(self): + self.assertEqual( self.reads[0].qual, b"<<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<<", "quality string mismatch in read 1: %s != %s" % (self.reads[0].qual, b"<<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<<") ) + self.assertEqual( self.reads[1].qual, b"<<<<<;<<<<7;:<<<6;<<<<<<<<<<<<7<<<<", "quality string mismatch in read 2: %s != %s" % (self.reads[1].qual, b"<<<<<;<<<<7;:<<<6;<<<<<<<<<<<<7<<<<") ) + self.assertEqual( self.reads[3].qual, b"<<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<<", "quality string mismatch in read 3: %s != %s" % (self.reads[3].qual, b"<<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<<") ) + + def testARquery(self): + self.assertEqual( self.reads[0].query, b"AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG", "query mismatch in read 1: %s != %s" % (self.reads[0].query, b"AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG") ) + self.assertEqual( self.reads[1].query, b"ACCTATATCTTGGCCTTGGCCGATGCGGCCTTGCA", "query size mismatch in read 2: %s != %s" % (self.reads[1].query, b"ACCTATATCTTGGCCTTGGCCGATGCGGCCTTGCA") ) + self.assertEqual( self.reads[3].query, b"TAGCTAGCTACCTATATCTTGGTCTT", "query mismatch in read 4: %s != %s" % (self.reads[3].query, b"TAGCTAGCTACCTATATCTTGGTCTT") ) + + def testARqqual(self): + self.assertEqual( self.reads[0].qqual, b"<<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<<", "qquality string mismatch in read 1: %s != %s" % (self.reads[0].qqual, b"<<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<<") ) + self.assertEqual( self.reads[1].qqual, b"<<<<<;<<<<7;:<<<6;<<<<<<<<<<<<7<<<<", "qquality string mismatch in read 2: %s != %s" % (self.reads[1].qqual, b"<<<<<;<<<<7;:<<<6;<<<<<<<<<<<<7<<<<") ) + self.assertEqual( self.reads[3].qqual, b"<<<<<<<<<<<<<<<<<:<9/,&,22", "qquality string mismatch in read 3: %s != %s" % (self.reads[3].qqual, b"<<<<<<<<<<<<<<<<<:<9/,&,22") ) + + def testPresentOptionalFields(self): + self.assertEqual( self.reads[0].opt('NM'), 1, "optional field mismatch in read 1, NM: %s != %s" % (self.reads[0].opt('NM'), 1) ) + self.assertEqual( self.reads[0].opt('RG'), 'L1', "optional field mismatch in read 1, RG: %s != %s" % (self.reads[0].opt('RG'), 'L1') ) + self.assertEqual( self.reads[1].opt('RG'), 'L2', "optional field mismatch in read 2, RG: %s != %s" % (self.reads[1].opt('RG'), 'L2') ) + self.assertEqual( self.reads[1].opt('MF'), 18, "optional field mismatch in read 2, MF: %s != %s" % (self.reads[1].opt('MF'), 18) ) + + def testPairedBools(self): + self.assertEqual( self.reads[0].is_paired, True, "is paired mismatch in read 1: %s != %s" % (self.reads[0].is_paired, True) ) + self.assertEqual( self.reads[1].is_paired, True, "is paired mismatch in read 2: %s != %s" % (self.reads[1].is_paired, True) ) + self.assertEqual( self.reads[0].is_proper_pair, True, "is proper pair mismatch in read 1: %s != %s" % (self.reads[0].is_proper_pair, True) ) + self.assertEqual( self.reads[1].is_proper_pair, True, "is proper pair mismatch in read 2: %s != %s" % (self.reads[1].is_proper_pair, True) ) + + def testTags( self ): + self.assertEqual( self.reads[0].tags, + [('NM', 1), ('RG', 'L1'), + ('PG', 'P1'), ('XT', 'U')] ) + self.assertEqual( self.reads[1].tags, + [('MF', 18), ('RG', 'L2'), + ('PG', 'P2'),('XT', 'R') ] ) + + def testOpt( self ): + self.assertEqual( self.reads[0].opt("XT"), "U" ) + self.assertEqual( self.reads[1].opt("XT"), "R" ) + + def testMissingOpt( self ): + self.assertRaises( KeyError, self.reads[0].opt, "XP" ) + + def testEmptyOpt( self ): + self.assertRaises( KeyError, self.reads[2].opt, "XT" ) + + def tearDown(self): + self.samfile.close() + +class TestAlignedReadFromSam(TestAlignedReadFromBam): + + def setUp(self): + self.samfile=pysam.Samfile( "ex3.sam","r" ) + self.reads=list(self.samfile.fetch()) + +# needs to be implemented +# class TestAlignedReadFromSamWithoutHeader(TestAlignedReadFromBam): +# +# def setUp(self): +# self.samfile=pysam.Samfile( "ex7.sam","r" ) +# self.reads=list(self.samfile.fetch()) + +class TestHeaderSam(unittest.TestCase): + + header = {'SQ': [{'LN': 1575, 'SN': 'chr1'}, + {'LN': 1584, 'SN': 'chr2'}], + 'RG': [{'LB': 'SC_1', 'ID': 'L1', 'SM': 'NA12891', 'PU': 'SC_1_10', "CN":"name:with:colon"}, + {'LB': 'SC_2', 'ID': 'L2', 'SM': 'NA12891', 'PU': 'SC_2_12', "CN":"name:with:colon"}], + 'PG': [{'ID': 'P1', 'VN': '1.0'}, {'ID': 'P2', 'VN': '1.1'}], + 'HD': {'VN': '1.0'}, + 'CO' : [ 'this is a comment', 'this is another comment'], + } + + def compareHeaders( self, a, b ): + '''compare two headers a and b.''' + for ak,av in a.iteritems(): + self.assertTrue( ak in b, "key '%s' not in '%s' " % (ak,b) ) + self.assertEqual( av, b[ak] ) + + def setUp(self): + self.samfile=pysam.Samfile( "ex3.sam","r" ) + + def testHeaders(self): + self.compareHeaders( self.header, self.samfile.header ) + self.compareHeaders( self.samfile.header, self.header ) + + def testNameMapping( self ): + for x, y in enumerate( ("chr1", "chr2")): + tid = self.samfile.gettid( y ) + ref = self.samfile.getrname( x ) + self.assertEqual( tid, x ) + self.assertEqual( ref, y ) + + self.assertEqual( self.samfile.gettid("chr?"), -1 ) + self.assertRaises( ValueError, self.samfile.getrname, 2 ) + + def tearDown(self): + self.samfile.close() + +class TestHeaderBam(TestHeaderSam): + + def setUp(self): + self.samfile=pysam.Samfile( "ex3.bam","rb" ) + +class TestUnmappedReads(unittest.TestCase): + + def testSAM(self): + samfile=pysam.Samfile( "ex5.sam","r" ) + self.assertEqual( len(list(samfile.fetch( until_eof = True))), 2 ) + samfile.close() + + def testBAM(self): + samfile=pysam.Samfile( "ex5.bam","rb" ) + self.assertEqual( len(list(samfile.fetch( until_eof = True))), 2 ) + samfile.close() + +class TestPileupObjects(unittest.TestCase): + + def setUp(self): + self.samfile=pysam.Samfile( "ex1.bam","rb" ) + + def testPileupColumn(self): + for pcolumn1 in self.samfile.pileup( region="chr1:105" ): + if pcolumn1.pos == 104: + self.assertEqual( pcolumn1.tid, 0, "chromosome/target id mismatch in position 1: %s != %s" % (pcolumn1.tid, 0) ) + self.assertEqual( pcolumn1.pos, 105-1, "position mismatch in position 1: %s != %s" % (pcolumn1.pos, 105-1) ) + self.assertEqual( pcolumn1.n, 2, "# reads mismatch in position 1: %s != %s" % (pcolumn1.n, 2) ) + for pcolumn2 in self.samfile.pileup( region="chr2:1480" ): + if pcolumn2.pos == 1479: + self.assertEqual( pcolumn2.tid, 1, "chromosome/target id mismatch in position 1: %s != %s" % (pcolumn2.tid, 1) ) + self.assertEqual( pcolumn2.pos, 1480-1, "position mismatch in position 1: %s != %s" % (pcolumn2.pos, 1480-1) ) + self.assertEqual( pcolumn2.n, 12, "# reads mismatch in position 1: %s != %s" % (pcolumn2.n, 12) ) + + def testPileupRead(self): + for pcolumn1 in self.samfile.pileup( region="chr1:105" ): + if pcolumn1.pos == 104: + self.assertEqual( len(pcolumn1.pileups), 2, "# reads aligned to column mismatch in position 1: %s != %s" % (len(pcolumn1.pileups), 2) ) +# self.assertEqual( pcolumn1.pileups[0] # need to test additional properties here + + def tearDown(self): + self.samfile.close() + +class TestContextManager(unittest.TestCase): + + def testManager( self ): + with pysam.Samfile('ex1.bam', 'rb') as samfile: + samfile.fetch() + self.assertEqual( samfile._isOpen(), False ) + +class TestExceptions(unittest.TestCase): + + def setUp(self): + self.samfile=pysam.Samfile( "ex1.bam","rb" ) + + def testMissingFile(self): + + self.assertRaises( IOError, pysam.Samfile, "exdoesntexist.bam", "rb" ) + self.assertRaises( IOError, pysam.Samfile, "exdoesntexist.sam", "r" ) + self.assertRaises( IOError, pysam.Samfile, "exdoesntexist.bam", "r" ) + self.assertRaises( IOError, pysam.Samfile, "exdoesntexist.sam", "rb" ) + + def testBadContig(self): + self.assertRaises( ValueError, self.samfile.fetch, "chr88" ) + + def testMeaninglessCrap(self): + self.assertRaises( ValueError, self.samfile.fetch, "skljf" ) + + def testBackwardsOrderNewFormat(self): + self.assertRaises( ValueError, self.samfile.fetch, 'chr1', 100, 10 ) + + def testBackwardsOrderOldFormat(self): + self.assertRaises( ValueError, self.samfile.fetch, region="chr1:100-10") + + def testOutOfRangeNegativeNewFormat(self): + self.assertRaises( ValueError, self.samfile.fetch, "chr1", 5, -10 ) + self.assertRaises( ValueError, self.samfile.fetch, "chr1", 5, 0 ) + self.assertRaises( ValueError, self.samfile.fetch, "chr1", -5, -10 ) + + self.assertRaises( ValueError, self.samfile.count, "chr1", 5, -10 ) + self.assertRaises( ValueError, self.samfile.count, "chr1", 5, 0 ) + self.assertRaises( ValueError, self.samfile.count, "chr1", -5, -10 ) + + def testOutOfRangeNegativeOldFormat(self): + self.assertRaises( ValueError, self.samfile.fetch, region="chr1:-5-10" ) + self.assertRaises( ValueError, self.samfile.fetch, region="chr1:-5-0" ) + self.assertRaises( ValueError, self.samfile.fetch, region="chr1:-5--10" ) + + self.assertRaises( ValueError, self.samfile.count, region="chr1:-5-10" ) + self.assertRaises( ValueError, self.samfile.count, region="chr1:-5-0" ) + self.assertRaises( ValueError, self.samfile.count, region="chr1:-5--10" ) + + def testOutOfRangNewFormat(self): + self.assertRaises( ValueError, self.samfile.fetch, "chr1", 9999999999, 99999999999 ) + self.assertRaises( ValueError, self.samfile.count, "chr1", 9999999999, 99999999999 ) + + def testOutOfRangeLargeNewFormat(self): + self.assertRaises( ValueError, self.samfile.fetch, "chr1", 9999999999999999999999999999999, 9999999999999999999999999999999999999999 ) + self.assertRaises( ValueError, self.samfile.count, "chr1", 9999999999999999999999999999999, 9999999999999999999999999999999999999999 ) + + def testOutOfRangeLargeOldFormat(self): + self.assertRaises( ValueError, self.samfile.fetch, "chr1:99999999999999999-999999999999999999" ) + self.assertRaises( ValueError, self.samfile.count, "chr1:99999999999999999-999999999999999999" ) + + def testZeroToZero(self): + '''see issue 44''' + self.assertEqual( len(list(self.samfile.fetch('chr1', 0, 0))), 0) + + def tearDown(self): + self.samfile.close() + +class TestWrongFormat(unittest.TestCase): + '''test cases for opening files not in bam/sam format.''' + + def testOpenSamAsBam( self ): + self.assertRaises( ValueError, pysam.Samfile, 'ex1.sam', 'rb' ) + + def testOpenBamAsSam( self ): + # test fails, needs to be implemented. + # sam.fetch() fails on reading, not on opening + # self.assertRaises( ValueError, pysam.Samfile, 'ex1.bam', 'r' ) + pass + + def testOpenFastaAsSam( self ): + # test fails, needs to be implemented. + # sam.fetch() fails on reading, not on opening + # self.assertRaises( ValueError, pysam.Samfile, 'ex1.fa', 'r' ) + pass + + def testOpenFastaAsBam( self ): + self.assertRaises( ValueError, pysam.Samfile, 'ex1.fa', 'rb' ) + +class TestFastaFile(unittest.TestCase): + + mSequences = { 'chr1' : + b"CACTAGTGGCTCATTGTAAATGTGTGGTTTAACTCGTCCATGGCCCAGCATTAGGGAGCTGTGGACCCTGCAGCCTGGCTGTGGGGGCCGCAGTGGCTGAGGGGTGCAGAGCCGAGTCACGGGGTTGCCAGCACAGGGGCTTAACCTCTGGTGACTGCCAGAGCTGCTGGCAAGCTAGAGTCCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGTAATGAAAACTATATTTATGCTATTCAGTTCTAAATATAGAAATTGAAACAGCTGTGTTTAGTGCCTTTGTTCAACCCCCTTGCAACAACCTTGAGAACCCCAGGGAATTTGTCAATGTCAGGGAAGGAGCATTTTGTCAGTTACCAAATGTGTTTATTACCAGAGGGATGGAGGGAAGAGGGACGCTGAAGAACTTTGATGCCCTCTTCTTCCAAAGATGAAACGCGTAACTGCGCTCTCATTCACTCCAGCTCCCTGTCACCCAATGGACCTGTGATATCTGGATTCTGGGAAATTCTTCATCCTGGACCCTGAGAGATTCTGCAGCCCAGCTCCAGATTGCTTGTGGTCTGACAGGCTGCAACTGTGAGCCATCACAATGAACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATGTGTGTTCTCATCAACCTCATACACACACATGGTTTAGGGGTATAATACCTCTACATGGCTGATTATGAAAACAATGTTCCCCAGATACCATCCCTGTCTTACTTCCAGCTCCCCAGAGGGAAAGCTTTCAACGCTTCTAGCCATTTCTTTTGGCATTTGCCTTCAGACCCTACACGAATGCGTCTCTACCACAGGGGGCTGCGCGGTTTCCCATCATGAAGCACTGAACTTCCACGTCTCATCTAGGGGAACAGGGAGGTGCACTAATGCGCTCCACGCCCAAGCCCTTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTGGGCAATACATGAGATTATTAGGAAATGCTTTACTGTCATAACTATGAAGAGACTATTGCCAGATGAACCACACATTAATACTATGTTTCTTATCTGCACATTACTACCCTGCAATTAATATAATTGTGTCCATGTACACACGCTGTCCTATGTACTTATCATGACTCTATCCCAAATTCCCAATTACGTCCTATCTTCTTCTTAGGGAAGAACAGCTTAGGTATCAATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCGTCCACACTGGTTCTCTTGAAAGCTTGGGCTGTAATGATGCCCCTTGGCCATCACCCAGTCCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGACATAATCCCACGCTTCCTATGGAAAGGTTGTTGGGAGATTTTTAATGATTCCTCAATGTTAAAATGTCTATTTTTGTCTTGACACCCAACTAATATTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAACTTCCCTGGAGGTCTGATGGCGTTTCTCCCTCGTCTTCTTA", + 'chr2' : + b"TTCAAATGAACTTCTGTAATTGAAAAATTCATTTAAGAAATTACAAAATATAGTTGAAAGCTCTAACAATAGACTAAACCAAGCAGAAGAAAGAGGTTCAGAACTTGAAGACAAGTCTCTTATGAATTAACCCAGTCAGACAAAAATAAAGAAAAAAATTTTAAAAATGAACAGAGCTTTCAAGAAGTATGAGATTATGTAAAGTAACTGAACCTATGAGTCACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATTTAGACATCTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGATACATTGCAAGACAGACTTCATCAAGATATGTAGTCATCAGACTATCTAAAGTCAACATGAAGGAAAAAAATTCTAAAATCAGCAAGAGAAAAGCATACAGTCATCTATAAAGGAAATCCCATCAGAATAACAATGGGCTTCTCAGCAGAAACCTTACAAGCCAGAAGAGATTGGATCTAATTTTTGGACTTCTTAAAGAAAAAAAAACCTGTCAAACACGAATGTTATGCCCTGCTAAACTAAGCATCATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGATAATTCATCATCACTAAACCAGTCCTATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAATTAAAGTTCAATACTCACCATCATAAATACACACAAAAGTACAAAACTCACAGGTTTTATAAAACAATTGAGACTACAGAGCAACTAGGTAAAAAATTAACATTACAACAGGAACAAAACCTCATATATCAATATTAACTTTGAATAAAAAGGGATTAAATTCCCCCACTTAAGAGATATAGATTGGCAGAACAGATTTAAAAACATGAACTAACTATATGCTGTTTACAAGAAACTCATTAATAAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAACAGAAACCAAATGAGAGAAGGAGTAGCTATACTTATATCAGATAAAGCACACTTTAAATCAACAACAGTAAAATAAAACAAAGGAGGTCATCATACAATGATAAAAAGATCAATTCAGCAAGAAGATATAACCATCCTACTAAATACATATGCACCTAACACAAGACTACCCAGATTCATAAAACAAATACTACTAGACCTAAGAGGGATGAGAAATTACCTAATTGGTACAATGTACAATATTCTGATGATGGTTACACTAAAAGCCCATACTTTACTGCTACTCAATATATCCATGTAACAAATCTGCGCTTGTACTTCTAAATCTATAAAAAAATTAAAATTTAACAAAAGTAAATAAAACACATAGCTAAAACTAAAAAAGCAAAAACAAAAACTATGCTAAGTATTGGTAAAGATGTGGGGAAAAAAGTAAACTCTCAAATATTGCTAGTGGGAGTATAAATTGTTTTCCACTTTGGAAAACAATTTGGTAATTTCGTTTTTTTTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTTTTGCATGCCAGAAAAAAATATTTACAGTAACT", + } + + def setUp(self): + self.file=pysam.Fastafile( "ex1.fa" ) + + def testFetch(self): + for id, seq in self.mSequences.items(): + self.assertEqual( seq, self.file.fetch( id ) ) + for x in range( 0, len(seq), 10): + self.assertEqual( seq[x:x+10], self.file.fetch( id, x, x+10) ) + # test x:end + self.assertEqual( seq[x:], self.file.fetch( id, x) ) + # test 0:x + self.assertEqual( seq[:x], self.file.fetch( id, None, x) ) + + + # unknown sequence returns "" + self.assertEqual( b"", self.file.fetch("chr12") ) + + def testOutOfRangeAccess( self ): + '''test out of range access.''' + # out of range access returns an empty string + for contig, s in self.mSequences.iteritems(): + self.assertEqual( self.file.fetch( contig, len(s), len(s)+1), b"" ) + + self.assertEqual( self.file.fetch( "chr3", 0 , 100), b"" ) + + def testFetchErrors( self ): + self.assertRaises( ValueError, self.file.fetch ) + self.assertRaises( ValueError, self.file.fetch, "chr1", -1, 10 ) + self.assertRaises( ValueError, self.file.fetch, "chr1", 20, 10 ) + + def testLength( self ): + self.assertEqual( len(self.file), 2 ) + + def tearDown(self): + self.file.close() + +class TestAlignedRead(unittest.TestCase): + '''tests to check if aligned read can be constructed + and manipulated. + ''' + + def checkFieldEqual( self, read1, read2, exclude = []): + '''check if two reads are equal by comparing each field.''' + + for x in ("qname", "seq", "flag", + "rname", "pos", "mapq", "cigar", + "mrnm", "mpos", "isize", "qual", + "is_paired", "is_proper_pair", + "is_unmapped", "mate_is_unmapped", + "is_reverse", "mate_is_reverse", + "is_read1", "is_read2", + "is_secondary", "is_qcfail", + "is_duplicate", "bin"): + if x in exclude: continue + self.assertEqual( getattr(read1, x), getattr(read2,x), "attribute mismatch for %s: %s != %s" % + (x, getattr(read1, x), getattr(read2,x))) + + def testEmpty( self ): + a = pysam.AlignedRead() + self.assertEqual( a.qname, None ) + self.assertEqual( a.seq, None ) + self.assertEqual( a.qual, None ) + self.assertEqual( a.flag, 0 ) + self.assertEqual( a.rname, 0 ) + self.assertEqual( a.mapq, 0 ) + self.assertEqual( a.cigar, None ) + self.assertEqual( a.tags, [] ) + self.assertEqual( a.mrnm, 0 ) + self.assertEqual( a.mpos, 0 ) + self.assertEqual( a.isize, 0 ) + + def buildRead( self ): + '''build an example read.''' + + a = pysam.AlignedRead() + a.qname = "read_12345" + a.seq="ACGT" * 10 + a.flag = 0 + a.rname = 0 + a.pos = 20 + a.mapq = 20 + a.cigar = ( (0,10), (2,1), (0,9), (1,1), (0,20) ) + a.mrnm = 0 + a.mpos=200 + a.isize=167 + a.qual="1234" * 10 + # todo: create tags + return a + + def testUpdate( self ): + '''check if updating fields affects other variable length data + ''' + a = self.buildRead() + b = self.buildRead() + + # check qname + b.qname = "read_123" + self.checkFieldEqual( a, b, "qname" ) + b.qname = "read_12345678" + self.checkFieldEqual( a, b, "qname" ) + b.qname = "read_12345" + self.checkFieldEqual( a, b) + + # check cigar + b.cigar = ( (0,10), ) + self.checkFieldEqual( a, b, "cigar" ) + b.cigar = ( (0,10), (2,1), (0,10) ) + self.checkFieldEqual( a, b, "cigar" ) + b.cigar = ( (0,10), (2,1), (0,9), (1,1), (0,20) ) + self.checkFieldEqual( a, b) + + # check seq + b.seq = "ACGT" + self.checkFieldEqual( a, b, ("seq", "qual") ) + b.seq = "ACGT" * 3 + self.checkFieldEqual( a, b, ("seq", "qual") ) + b.seq = "ACGT" * 10 + self.checkFieldEqual( a, b, ("qual",)) + + # reset qual + b = self.buildRead() + + # check flags: + for x in ( + "is_paired", "is_proper_pair", + "is_unmapped", "mate_is_unmapped", + "is_reverse", "mate_is_reverse", + "is_read1", "is_read2", + "is_secondary", "is_qcfail", + "is_duplicate"): + setattr( b, x, True ) + self.assertEqual( getattr(b, x), True ) + self.checkFieldEqual( a, b, ("flag", x,) ) + setattr( b, x, False ) + self.assertEqual( getattr(b, x), False ) + self.checkFieldEqual( a, b ) + + def testLargeRead( self ): + '''build an example read.''' + + a = pysam.AlignedRead() + a.qname = "read_12345" + a.seq="ACGT" * 200 + a.flag = 0 + a.rname = 0 + a.pos = 20 + a.mapq = 20 + a.cigar = ( (0, 4 * 200), ) + a.mrnm = 0 + a.mpos=200 + a.isize=167 + a.qual="1234" * 200 + + return a + + def testTagParsing( self ): + '''test for tag parsing + + see http://groups.google.com/group/pysam-user-group/browse_thread/thread/67ca204059ea465a + ''' + samfile=pysam.Samfile( "ex8.bam","rb" ) + + for entry in samfile: + before = entry.tags + entry.tags = entry.tags + after = entry.tags + self.assertEqual( after, before ) + + def testUpdateTlen( self ): + '''check if updating tlen works''' + a = self.buildRead() + oldlen = a.tlen + oldlen *= 2 + a.tlen = oldlen + self.assertEqual( a.tlen, oldlen ) + + def testPositions( self ): + a = self.buildRead() + self.assertEqual( a.positions, + [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59] ) + + self.assertEqual( a.aligned_pairs, + [(0, 20), (1, 21), (2, 22), (3, 23), (4, 24), + (5, 25), (6, 26), (7, 27), (8, 28), (9, 29), + (None, 30), + (10, 31), (11, 32), (12, 33), (13, 34), (14, 35), + (15, 36), (16, 37), (17, 38), (18, 39), (19, None), + (20, 40), (21, 41), (22, 42), (23, 43), (24, 44), + (25, 45), (26, 46), (27, 47), (28, 48), (29, 49), + (30, 50), (31, 51), (32, 52), (33, 53), (34, 54), + (35, 55), (36, 56), (37, 57), (38, 58), (39, 59)] ) + + self.assertEqual( a.positions, [x[1] for x in a.aligned_pairs if x[0] != None and x[1] != None] ) + # alen is the length of the aligned read in genome + self.assertEqual( a.alen, a.aligned_pairs[-1][0] + 1 ) + # aend points to one beyond last aligned base in ref + self.assertEqual( a.positions[-1], a.aend - 1 ) + +class TestDeNovoConstruction(unittest.TestCase): + '''check BAM/SAM file construction using ex3.sam + + (note these are +1 coordinates): + + read_28833_29006_6945 99 chr1 33 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 RG:Z:L1 + read_28701_28881_323b 147 chr2 88 30 35M = 500 412 ACCTATATCTTGGCCTTGGCCGATGCGGCCTTGCA <<<<<;<<<<7;:<<<6;<<<<<<<<<<<<7<<<< MF:i:18 RG:Z:L2 + ''' + + header = { 'HD': {'VN': '1.0'}, + 'SQ': [{'LN': 1575, 'SN': 'chr1'}, + {'LN': 1584, 'SN': 'chr2'}], } + + bamfile = "ex6.bam" + samfile = "ex6.sam" + + def checkFieldEqual( self, read1, read2, exclude = []): + '''check if two reads are equal by comparing each field.''' + + for x in ("qname", "seq", "flag", + "rname", "pos", "mapq", "cigar", + "mrnm", "mpos", "isize", "qual", + "bin", + "is_paired", "is_proper_pair", + "is_unmapped", "mate_is_unmapped", + "is_reverse", "mate_is_reverse", + "is_read1", "is_read2", + "is_secondary", "is_qcfail", + "is_duplicate"): + if x in exclude: continue + self.assertEqual( getattr(read1, x), getattr(read2,x), "attribute mismatch for %s: %s != %s" % + (x, getattr(read1, x), getattr(read2,x))) + + def setUp( self ): + + + a = pysam.AlignedRead() + a.qname = "read_28833_29006_6945" + a.seq="AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG" + a.flag = 99 + a.rname = 0 + a.pos = 32 + a.mapq = 20 + a.cigar = ( (0,10), (2,1), (0,25) ) + a.mrnm = 0 + a.mpos=199 + a.isize=167 + a.qual="<<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<<" + a.tags = ( ("NM", 1), + ("RG", "L1") ) + + b = pysam.AlignedRead() + b.qname = "read_28701_28881_323b" + b.seq="ACCTATATCTTGGCCTTGGCCGATGCGGCCTTGCA" + b.flag = 147 + b.rname = 1 + b.pos = 87 + b.mapq = 30 + b.cigar = ( (0,35), ) + b.mrnm = 1 + b.mpos=499 + b.isize=412 + b.qual="<<<<<;<<<<7;:<<<6;<<<<<<<<<<<<7<<<<" + b.tags = ( ("MF", 18), + ("RG", "L2") ) + + self.reads = (a,b) + + def testSAMWholeFile( self ): + + tmpfilename = "tmp_%i.sam" % id(self) + + outfile = pysam.Samfile( tmpfilename, "wh", header = self.header ) + + for x in self.reads: outfile.write( x ) + outfile.close() + + self.assertTrue( checkBinaryEqual( tmpfilename, self.samfile ), + "mismatch when construction SAM file, see %s %s" % (tmpfilename, self.samfile)) + + os.unlink( tmpfilename ) + + def testBAMPerRead( self ): + '''check if individual reads are binary equal.''' + infile = pysam.Samfile( self.bamfile, "rb") + + others = list(infile) + for denovo, other in zip( others, self.reads): + self.checkFieldEqual( other, denovo ) + self.assertEqual( other.compare( denovo ), 0 ) + + def testSAMPerRead( self ): + '''check if individual reads are binary equal.''' + infile = pysam.Samfile( self.samfile, "r") + + others = list(infile) + for denovo, other in zip( others, self.reads): + self.checkFieldEqual( other, denovo ) + self.assertEqual( other.compare( denovo), 0 ) + + def testBAMWholeFile( self ): + + tmpfilename = "tmp_%i.bam" % id(self) + + outfile = pysam.Samfile( tmpfilename, "wb", header = self.header ) + + for x in self.reads: outfile.write( x ) + outfile.close() + + self.assertTrue( checkBinaryEqual( tmpfilename, self.bamfile ), + "mismatch when construction BAM file, see %s %s" % (tmpfilename, self.bamfile)) + + os.unlink( tmpfilename ) + + +class TestDoubleFetch(unittest.TestCase): + '''check if two iterators on the same bamfile are independent.''' + + def testDoubleFetch( self ): + + samfile1 = pysam.Samfile('ex1.bam', 'rb') + + for a,b in zip(samfile1.fetch(), samfile1.fetch()): + self.assertEqual( a.compare( b ), 0 ) + + def testDoubleFetchWithRegion( self ): + + samfile1 = pysam.Samfile('ex1.bam', 'rb') + chr, start, stop = 'chr1', 200, 3000000 + self.assertTrue(len(list(samfile1.fetch ( chr, start, stop))) > 0) #just making sure the test has something to catch + + for a,b in zip(samfile1.fetch( chr, start, stop), samfile1.fetch( chr, start, stop)): + self.assertEqual( a.compare( b ), 0 ) + + def testDoubleFetchUntilEOF( self ): + + samfile1 = pysam.Samfile('ex1.bam', 'rb') + + for a,b in zip(samfile1.fetch( until_eof = True), + samfile1.fetch( until_eof = True )): + self.assertEqual( a.compare( b), 0 ) + +class TestRemoteFileFTP(unittest.TestCase): + '''test remote access. + + ''' + + # Need to find an ftp server without password on standard + # port. + + url = "ftp://ftp.sanger.ac.uk/pub/rd/humanSequences/CV.bam" + region = "1:1-1000" + + def testFTPView( self ): + return + result = pysam.view( self.url, self.region ) + self.assertEqual( len(result), 36 ) + + def testFTPFetch( self ): + return + samfile = pysam.Samfile(self.url, "rb") + result = list(samfile.fetch( region = self.region )) + self.assertEqual( len(result), 36 ) + +class TestRemoteFileHTTP( unittest.TestCase): + + url = "http://genserv.anat.ox.ac.uk/downloads/pysam/test/ex1.bam" + region = "chr1:1-1000" + local = "ex1.bam" + + def testView( self ): + samfile_local = pysam.Samfile(self.local, "rb") + ref = list(samfile_local.fetch( region = self.region )) + + result = pysam.view( self.url, self.region ) + self.assertEqual( len(result), len(ref) ) + + def testFetch( self ): + samfile = pysam.Samfile(self.url, "rb") + result = list(samfile.fetch( region = self.region )) + samfile_local = pysam.Samfile(self.local, "rb") + ref = list(samfile_local.fetch( region = self.region )) + + self.assertEqual( len(ref), len(result) ) + for x, y in zip(result, ref): + self.assertEqual( x.compare( y ), 0 ) + + def testFetchAll( self ): + samfile = pysam.Samfile(self.url, "rb") + result = list(samfile.fetch()) + samfile_local = pysam.Samfile(self.local, "rb") + ref = list(samfile_local.fetch() ) + + self.assertEqual( len(ref), len(result) ) + for x, y in zip(result, ref): + self.assertEqual( x.compare( y ), 0 ) + +class TestLargeOptValues( unittest.TestCase ): + + ints = ( 65536, 214748, 2147484, 2147483647 ) + floats = ( 65536.0, 214748.0, 2147484.0 ) + + def check( self, samfile ): + + i = samfile.fetch() + for exp in self.ints: + rr = i.next() + obs = rr.opt("ZP") + self.assertEqual( exp, obs, "expected %s, got %s\n%s" % (str(exp), str(obs), str(rr))) + + for exp in [ -x for x in self.ints ]: + rr = i.next() + obs = rr.opt("ZP") + self.assertEqual( exp, obs, "expected %s, got %s\n%s" % (str(exp), str(obs), str(rr))) + + for exp in self.floats: + rr = i.next() + obs = rr.opt("ZP") + self.assertEqual( exp, obs, "expected %s, got %s\n%s" % (str(exp), str(obs), str(rr))) + + for exp in [ -x for x in self.floats ]: + rr = i.next() + obs = rr.opt("ZP") + self.assertEqual( exp, obs, "expected %s, got %s\n%s" % (str(exp), str(obs), str(rr))) + + def testSAM( self ): + samfile = pysam.Samfile("ex10.sam", "r") + self.check( samfile ) + + def testBAM( self ): + samfile = pysam.Samfile("ex10.bam", "rb") + self.check( samfile ) + +# class TestSNPCalls( unittest.TestCase ): +# '''test pysam SNP calling ability.''' + +# def checkEqual( self, a, b ): +# for x in ("reference_base", +# "pos", +# "genotype", +# "consensus_quality", +# "snp_quality", +# "mapping_quality", +# "coverage" ): +# self.assertEqual( getattr(a, x), getattr(b,x), "%s mismatch: %s != %s\n%s\n%s" % +# (x, getattr(a, x), getattr(b,x), str(a), str(b))) + +# def testAllPositionsViaIterator( self ): +# samfile = pysam.Samfile( "ex1.bam", "rb") +# fastafile = pysam.Fastafile( "ex1.fa" ) +# try: +# refs = [ x for x in pysam.pileup( "-c", "-f", "ex1.fa", "ex1.bam" ) if x.reference_base != "*"] +# except pysam.SamtoolsError: +# pass + +# i = samfile.pileup( stepper = "samtools", fastafile = fastafile ) +# calls = list(pysam.IteratorSNPCalls(i)) +# for x,y in zip( refs, calls ): +# self.checkEqual( x, y ) + +# def testPerPositionViaIterator( self ): +# # test pileup for each position. This is a slow operation +# # so this test is disabled +# return +# samfile = pysam.Samfile( "ex1.bam", "rb") +# fastafile = pysam.Fastafile( "ex1.fa" ) +# for x in pysam.pileup( "-c", "-f", "ex1.fa", "ex1.bam" ): +# if x.reference_base == "*": continue +# i = samfile.pileup( x.chromosome, x.pos, x.pos+1, +# fastafile = fastafile, +# stepper = "samtools" ) +# z = [ zz for zz in pysam.IteratorSamtools(i) if zz.pos == x.pos ] +# self.assertEqual( len(z), 1 ) +# self.checkEqual( x, z[0] ) + +# def testPerPositionViaCaller( self ): +# # test pileup for each position. This is a fast operation +# samfile = pysam.Samfile( "ex1.bam", "rb") +# fastafile = pysam.Fastafile( "ex1.fa" ) +# i = samfile.pileup( stepper = "samtools", fastafile = fastafile ) +# caller = pysam.SNPCaller( i ) + +# for x in pysam.pileup( "-c", "-f", "ex1.fa", "ex1.bam" ): +# if x.reference_base == "*": continue +# call = caller.call( x.chromosome, x.pos ) +# self.checkEqual( x, call ) + +# class TestIndelCalls( unittest.TestCase ): +# '''test pysam indel calling.''' + +# def checkEqual( self, a, b ): + +# for x in ("pos", +# "genotype", +# "consensus_quality", +# "snp_quality", +# "mapping_quality", +# "coverage", +# "first_allele", +# "second_allele", +# "reads_first", +# "reads_second", +# "reads_diff"): +# if b.genotype == "*/*" and x == "second_allele": +# # ignore test for second allele (positions chr2:439 and chr2:1512) +# continue +# self.assertEqual( getattr(a, x), getattr(b,x), "%s mismatch: %s != %s\n%s\n%s" % +# (x, getattr(a, x), getattr(b,x), str(a), str(b))) + +# def testAllPositionsViaIterator( self ): + +# samfile = pysam.Samfile( "ex1.bam", "rb") +# fastafile = pysam.Fastafile( "ex1.fa" ) +# try: +# refs = [ x for x in pysam.pileup( "-c", "-f", "ex1.fa", "ex1.bam" ) if x.reference_base == "*"] +# except pysam.SamtoolsError: +# pass + +# i = samfile.pileup( stepper = "samtools", fastafile = fastafile ) +# calls = [ x for x in list(pysam.IteratorIndelCalls(i)) if x != None ] +# for x,y in zip( refs, calls ): +# self.checkEqual( x, y ) + +# def testPerPositionViaCaller( self ): +# # test pileup for each position. This is a fast operation +# samfile = pysam.Samfile( "ex1.bam", "rb") +# fastafile = pysam.Fastafile( "ex1.fa" ) +# i = samfile.pileup( stepper = "samtools", fastafile = fastafile ) +# caller = pysam.IndelCaller( i ) + +# for x in pysam.pileup( "-c", "-f", "ex1.fa", "ex1.bam" ): +# if x.reference_base != "*": continue +# call = caller.call( x.chromosome, x.pos ) +# self.checkEqual( x, call ) + +class TestLogging( unittest.TestCase ): + '''test around bug issue 42, + + failed in versions < 0.4 + ''' + + def check( self, bamfile, log ): + + if log: + logger = logging.getLogger('franklin') + logger.setLevel(logging.INFO) + formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') + log_hand = logging.FileHandler('log.txt') + log_hand.setFormatter(formatter) + logger.addHandler(log_hand) + + bam = pysam.Samfile(bamfile, 'rb') + cols = bam.pileup() + self.assert_( True ) + + def testFail1( self ): + self.check( "ex9_fail.bam", False ) + self.check( "ex9_fail.bam", True ) + + def testNoFail1( self ): + self.check( "ex9_nofail.bam", False ) + self.check( "ex9_nofail.bam", True ) + + def testNoFail2( self ): + self.check( "ex9_nofail.bam", True ) + self.check( "ex9_nofail.bam", True ) + +# TODOS +# 1. finish testing all properties within pileup objects +# 2. check exceptions and bad input problems (missing files, optional fields that aren't present, etc...) +# 3. check: presence of sequence + +class TestSamfileUtilityFunctions( unittest.TestCase ): + + def testCount( self ): + + samfile = pysam.Samfile( "ex1.bam", "rb" ) + + for contig in ("chr1", "chr2" ): + for start in xrange( 0, 2000, 100 ): + end = start + 1 + self.assertEqual( len( list( samfile.fetch( contig, start, end ) ) ), + samfile.count( contig, start, end ) ) + + # test empty intervals + self.assertEqual( len( list( samfile.fetch( contig, start, start ) ) ), + samfile.count( contig, start, start ) ) + + # test half empty intervals + self.assertEqual( len( list( samfile.fetch( contig, start ) ) ), + samfile.count( contig, start ) ) + + def testMate( self ): + '''test mate access.''' + + readnames = [ x.split(b"\t")[0] for x in open( "ex1.sam", "rb" ).readlines() ] + if sys.version_info[0] >= 3: + readnames = [ name.decode('ascii') for name in readnames ] + + counts = collections.defaultdict( int ) + for x in readnames: counts[x] += 1 + + samfile = pysam.Samfile( "ex1.bam", "rb" ) + for read in samfile.fetch(): + if not read.is_paired: + self.assertRaises( ValueError, samfile.mate, read ) + elif read.mate_is_unmapped: + self.assertRaises( ValueError, samfile.mate, read ) + else: + if counts[read.qname] == 1: + self.assertRaises( ValueError, samfile.mate, read ) + else: + mate = samfile.mate( read ) + self.assertEqual( read.qname, mate.qname ) + self.assertEqual( read.is_read1, mate.is_read2 ) + self.assertEqual( read.is_read2, mate.is_read1 ) + self.assertEqual( read.pos, mate.mpos ) + self.assertEqual( read.mpos, mate.pos ) + + def testIndexStats( self ): + '''test if total number of mapped/unmapped reads is correct.''' + + samfile = pysam.Samfile( "ex1.bam", "rb" ) + self.assertEqual( samfile.mapped, 3235 ) + self.assertEqual( samfile.unmapped, 35 ) + +class TestSamtoolsProxy( unittest.TestCase ): + '''tests for sanity checking access to samtools functions.''' + + def testIndex( self ): + self.assertRaises( IOError, pysam.index, "missing_file" ) + + def testView( self ): + # note that view still echos "open: No such file or directory" + self.assertRaises( pysam.SamtoolsError, pysam.view, "missing_file" ) + + def testSort( self ): + self.assertRaises( pysam.SamtoolsError, pysam.sort, "missing_file" ) + +class TestSamfileIndex( unittest.TestCase): + + def testIndex( self ): + samfile = pysam.Samfile( "ex1.bam", "rb" ) + index = pysam.IndexedReads( samfile ) + index.build() + + reads = collections.defaultdict( int ) + + for read in samfile: reads[read.qname] += 1 + + for qname, counts in reads.iteritems(): + found = list(index.find( qname )) + self.assertEqual( len(found), counts ) + for x in found: self.assertEqual( x.qname, qname ) + + +if __name__ == "__main__": + # build data files + print ("building data files") + subprocess.call( "make", shell=True) + print ("starting tests") + unittest.main() + print ("completed tests") diff --git a/save/pysam_test_stdin.py b/save/pysam_test_stdin.py new file mode 100644 index 0000000..84e7366 --- /dev/null +++ b/save/pysam_test_stdin.py @@ -0,0 +1,10 @@ +# usage: cat pysam_ex1.bam | python pysam_test_stdin.pyx + +import pysam + +samfile = pysam.Samfile( "-", "rb" ) + +# set up the modifying iterators +l = list(samfile.fetch( until_eof = True )) +assert len(l) == 3270 + diff --git a/save/pysam_testpp.py b/save/pysam_testpp.py new file mode 100644 index 0000000..4e4da2e --- /dev/null +++ b/save/pysam_testpp.py @@ -0,0 +1,13 @@ +import pp +import pysam + +def sortBam(bam_filepath, out_prefix): + pysam.sort(bam_filepath, out_prefix) + +job_server = pp.Server(ncpus=2, ppservers = (), secret='secret') + +job1 = job_server.submit(sortBam, ('ex1.bam', 'tmp1_'), modules=('pysam',)) +job2 = job_server.submit(sortBam, ('ex2.bam', 'tmp2_'), modules=('pysam',)) + +result1 = job1() +result2 = job2() diff --git a/save/segfault_tests.py b/save/segfault_tests.py new file mode 100755 index 0000000..ff32fec --- /dev/null +++ b/save/segfault_tests.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python +'''unit testing code for pysam.''' + +import pysam +import unittest +import os +import itertools +import subprocess +import shutil + +class TestExceptions(unittest.TestCase): + + def setUp(self): + self.samfile=pysam.Samfile( "ex1.bam","rb" ) + + def testOutOfRangeNegativeNewFormat(self): + self.assertRaises( ValueError, self.samfile.fetch, "chr1", 5, -10 ) + self.assertRaises( ValueError, self.samfile.fetch, "chr1", 5, 0 ) + self.assertRaises( ValueError, self.samfile.fetch, "chr1", -5, -10 ) + + def testOutOfRangeNegativeOldFormat(self): + self.assertRaises( ValueError, self.samfile.fetch, "chr1:-5-10" ) + self.assertRaises( ValueError, self.samfile.fetch, "chr1:-5-0" ) + self.assertRaises( ValueError, self.samfile.fetch, "chr1:-5--10" ) + + def testOutOfRangeLargeNewFormat(self): + self.assertRaises( ValueError, self.samfile.fetch, "chr1", 99999999999999999, 999999999999999999 ) + + def testOutOfRangeLargeOldFormat(self): + self.assertRaises( ValueError, self.samfile.fetch, "chr1:99999999999999999-999999999999999999" ) + + def tearDown(self): + self.samfile.close() + +if __name__ == "__main__": + unittest.main() + diff --git a/save/vcf_test.py b/save/vcf_test.py new file mode 100644 index 0000000..396edc1 --- /dev/null +++ b/save/vcf_test.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python +'''unit testing code for pysam. + +Execute in the :file:`tests` directory as it requires the Makefile +and data files located there. +''' + +import sys, os, shutil, gzip +import pysam +import unittest +import itertools +import subprocess + +class TestVCFIterator( unittest.TestCase ): + + filename = "example.vcf40.gz" + columns = ("contig", "pos", "id", + "ref", "alt", "qual", + "filter", "info", "format" ) + + def testRead( self ): + self.vcf = pysam.VCF() + self.vcf.connect( self.filename ) + + for x in self.vcf.fetch(): + print str(x) + print x.pos + print x.alt + print x.id + print x.qual + print x.filter + print x.info + print x.format + + for s in x.samples: + print s, x[s] + +if __name__ == "__main__": + + unittest.main() + + +def Test(): + + vcf33 = """##fileformat=VCFv3.3 +##fileDate=20090805 +##source=myImputationProgramV3.1 +##reference=1000GenomesPilot-NCBI36 +##phasing=partial +##INFO=NS,1,Integer,"Number of Samples With Data" +##INFO=DP,1,Integer,"Total Depth" +##INFO=AF,-1,Float,"Allele Frequency" +##INFO=AA,1,String,"Ancestral Allele" +##INFO=DB,0,Flag,"dbSNP membership, build 129" +##INFO=H2,0,Flag,"HapMap2 membership" +##FILTER=q10,"Quality below 10" +##FILTER=s50,"Less than 50% of samples have data" +##FORMAT=GT,1,String,"Genotype" +##FORMAT=GQ,1,Integer,"Genotype Quality" +##FORMAT=DP,1,Integer,"Read Depth" +##FORMAT=HQ,2,Integer,"Haplotype Quality" +#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\tFORMAT\tNA00001\tNA00002\tNA00003 +20\t14370\trs6054257\tG\tA\t29\t0\tNS=3;DP=14;AF=0.5;DB;H2\tGT:GQ:DP:HQ\t0|0:48:1:51,51\t1|0:48:8:51,51\t1/1:43:5:-1,-1 +17\t17330\t.\tT\tA\t3\tq10\tNS=3;DP=11;AF=0.017\tGT:GQ:DP:HQ\t0|0:49:3:58,50\t0|1:3:5:65,3\t0/0:41:3:-1,-1 +20\t1110696\trs6040355\tA\tG,T\t67\t0\tNS=2;DP=10;AF=0.333,0.667;AA=T;DB\tGT:GQ:DP:HQ\t1|2:21:6:23,27\t2|1:2:0:18,2\t2/2:35:4:-1,-1 +17\t1230237\t.\tT\t.\t47\t0\tNS=3;DP=13;AA=T\tGT:GQ:DP:HQ\t0|0:54:7:56,60\t0|0:48:4:51,51\t0/0:61:2:-1,-1 +20\t1234567\tmicrosat1\tG\tD4,IGA\t50\t0\tNS=3;DP=9;AA=G\tGT:GQ:DP\t0/1:35:4\t0/2:17:2\t1/1:40:3""" + + vcf40 = """##fileformat=VCFv4.0 +##fileDate=20090805 +##source=myImputationProgramV3.1 +##reference=1000GenomesPilot-NCBI36 +##phasing=partial +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\tFORMAT\tNA00001\tNA00002\tNA00003 +M\t1230237\t.\tT\t.\t47\tPASS\tNS=3;DP=13;AA=T\tGT:GQ:DP:HQ\t0|0:54:7:56,60\t0|0:48:4:51,51\t0/0:61:2 +20\t1234567\tmicrosat1\tGTCT\tG,GTACT\t50\tPASS\tNS=3;DP=9;AA=G\tGT:GQ:DP\t0/1:35:4\t0/2:17:2\t1/1:40:3 +17\t14370\trs6054257\tG\tA\t29\tPASS\tNS=3;DP=14;AF=0.5;DB;H2\tGT:GQ:DP:HQ\t0|0:48:1:51,51\t1|0:48:8:51,51\t1/1:43:5:.,. +20\t17330\t.\tT\tA\t3\tq10\tNS=3;DP=11;AF=0.017\tGT:GQ:DP:HQ\t0|0:49:3:58,50\t0|1:3:5:65,3\t0/0:41:3 +20\t1110696\trs6040355\tA\tG,T\t67\tPASS\tNS=2;DP=10;AF=0.333,0.667;AA=T;DB\tGT:GQ:DP:HQ\t1|2:21:6:23,27\t2|1:2:0:18,2\t2/2:35:4""" + + if False: + print "Parsing v3.3 file:" + print vcf33 + vcf = VCFFile() + lines = [data for data in vcf.parse( (line+"\n" for line in vcf33.split('\n') ) )] + print "Writing v3.3 file:" + vcf.write( sys.stdout, lines ) + + if False: + print "Parsing v4.0 file:" + print vcf40 + vcf = VCFFile() + lines = [data for data in vcf.parse( (line+"\n" for line in vcf40.split('\n') ) )] + print "Writing v4.0 file:" + vcf.write( sys.stdout, lines ) + + if True: + print "Parsing v3.3 file:" + print vcf33 + vcf = sortedVCFFile() + lines = [data for data in vcf.parse( (line+"\n" for line in vcf33.split('\n') ) )] + print "Writing v3.3 file:" + vcf.write( sys.stdout, lines ) + + if True: + print "Parsing v4.0 file:" + print vcf40 + vcf = sortedVCFFile() + lines = [data for data in vcf.parse( (line+"\n" for line in vcf40.split('\n') ) )] + print "Writing v4.0 file:" + vcf.write( sys.stdout, lines ) diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..1f061e5 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,10 @@ +[bdist_wheel] +universal = 0 + +[tool:pytest] +# -s: do not capture stdout, conflicts with pysam.dispatch +# -v: verbose output +addopts = -s -v +testpaths = pysam tests +pep8maxlinelength = 120 +pep8ignore = E402 diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..49261f9 --- /dev/null +++ b/setup.py @@ -0,0 +1,439 @@ +#! /usr/bin/python + +'''pysam - a python module for reading, manipulating and writing +genomic data sets. + +pysam is a lightweight wrapper of the htslib C-API and provides +facilities to read and write SAM/BAM/VCF/BCF/BED/GFF/GTF/FASTA/FASTQ +files as well as access to the command line functionality of the +samtools and bcftools packages. The module supports compression and +random access through indexing. + +This module provides a low-level wrapper around the htslib C-API as +using cython and a high-level API for convenient access to the data +within standard genomic file formats. + +The current version wraps htslib-1.7, samtools-1.7 and bcftools-1.6. + +See: +http://www.htslib.org +https://github.com/pysam-developers/pysam +http://pysam.readthedocs.org/en/stable + +''' + +import collections +import glob +import os +import platform +import re +import subprocess +import sys +import sysconfig +from contextlib import contextmanager +from setuptools import Extension, setup +from cy_build import CyExtension as Extension, cy_build_ext as build_ext +try: + import cython + HAVE_CYTHON = True +except ImportError: + HAVE_CYTHON = False + +IS_PYTHON3 = sys.version_info.major >= 3 + + +@contextmanager +def changedir(path): + save_dir = os.getcwd() + os.chdir(path) + try: + yield + finally: + os.chdir(save_dir) + + +def run_configure(option): + try: + retcode = subprocess.call( + " ".join(("./configure", option)), + shell=True) + if retcode != 0: + return False + else: + return True + except OSError as e: + return False + + +def run_make_print_config(): + stdout = subprocess.check_output(["make", "-s", "print-config"]) + if IS_PYTHON3: + stdout = stdout.decode("ascii") + + make_print_config = {} + for line in stdout.splitlines(): + if "=" in line: + row = line.split("=") + if len(row) == 2: + make_print_config.update( + {row[0].strip(): row[1].strip()}) + return make_print_config + + +def configure_library(library_dir, env_options=None, options=[]): + + configure_script = os.path.join(library_dir, "configure") + + on_rtd = os.environ.get("READTHEDOCS") == "True" + # RTD has no bzip2 development libraries installed: + if on_rtd: + env_options = "--disable-bz2" + + if not os.path.exists(configure_script): + raise ValueError( + "configure script {} does not exist".format(configure_script)) + + with changedir(library_dir): + if env_options is not None: + if run_configure(env_options): + return env_options + + for option in options: + if run_configure(option): + return option + + return None + + +def distutils_dir_name(dname): + """Returns the name of a distutils build directory + see: http://stackoverflow.com/questions/14320220/ + testing-python-c-libraries-get-build-path + """ + f = "{dirname}.{platform}-{version[0]}.{version[1]}" + return f.format(dirname=dname, + platform=sysconfig.get_platform(), + version=sys.version_info) + + +def get_pysam_version(): + sys.path.insert(0, "pysam") + import version + return version.__version__ + + +# How to link against HTSLIB +# shared: build shared chtslib from builtin htslib code. +# external: use shared libhts.so compiled outside of +# pysam +# separate: use included htslib and include in each extension +# module. No dependencies between modules and works with +# setup.py install, but wasteful in terms of memory and +# compilation time. Fallback if shared module compilation +# fails. + +HTSLIB_MODE = os.environ.get("HTSLIB_MODE", "shared") +HTSLIB_LIBRARY_DIR = os.environ.get("HTSLIB_LIBRARY_DIR", None) +HTSLIB_INCLUDE_DIR = os.environ.get("HTSLIB_INCLUDE_DIR", None) +HTSLIB_CONFIGURE_OPTIONS = os.environ.get("HTSLIB_CONFIGURE_OPTIONS", None) +HTSLIB_SOURCE = None + +package_list = ['pysam', + 'pysam.include', + 'pysam.include.samtools', + 'pysam.include.bcftools', + 'pysam.include.samtools.win32'] +package_dirs = {'pysam': 'pysam', + 'pysam.include.samtools': 'samtools', + 'pysam.include.bcftools': 'bcftools'} + +# list of config files that will be automatically generated should +# they not already exist or be created by configure scripts in the +# subpackages. +config_headers = ["samtools/config.h", + "bcftools/config.h"] + +cmdclass = {'build_ext': build_ext} + +# If cython is available, the pysam will be built using cython from +# the .pyx files. If no cython is available, the C-files included in the +# distribution will be used. +if HAVE_CYTHON: + print ("# pysam: cython is available - using cythonize if necessary") + source_pattern = "pysam/libc%s.pyx" +else: + print ("# pysam: no cython available - using pre-compiled C") + source_pattern = "pysam/libc%s.c" + +# Exit if there are no pre-compiled files and no cython available +fn = source_pattern % "htslib" +if not os.path.exists(fn): + raise ValueError( + "no cython installed, but can not find {}." + "Make sure that cython is installed when building " + "from the repository" + .format(fn)) + +# exclude sources that contain a main function +EXCLUDE = { + "samtools": ( + ), + "bcftools": ( + "test", "plugins", "peakfit.c", + "peakfit.h", + # needs to renamed, name conflict with samtools reheader + "reheader.c", + "polysomy.c"), + "htslib": ( + 'htslib/tabix.c', + 'htslib/bgzip.c', + 'htslib/htsfile.c'), +} + +print ("# pysam: htslib mode is {}".format(HTSLIB_MODE)) +print ("# pysam: HTSLIB_CONFIGURE_OPTIONS={}".format( + HTSLIB_CONFIGURE_OPTIONS)) +htslib_configure_options = None + +if HTSLIB_MODE in ['shared', 'separate']: + package_list += ['pysam.include.htslib', + 'pysam.include.htslib.htslib'] + package_dirs.update({'pysam.include.htslib':'htslib'}) + + htslib_configure_options = configure_library( + "htslib", + HTSLIB_CONFIGURE_OPTIONS, + ["--enable-libcurl", + "--disable-libcurl"]) + + HTSLIB_SOURCE = "builtin" + print ("# pysam: htslib configure options: {}".format( + str(htslib_configure_options))) + + config_headers += ["htslib/config.h"] + if htslib_configure_options is None: + # create empty config.h file + with open("htslib/config.h", "w") as outf: + outf.write( + "/* empty config.h created by pysam */\n") + outf.write( + "/* conservative compilation options */\n") + + with changedir("htslib"): + htslib_make_options = run_make_print_config() + + for key, value in htslib_make_options.items(): + print ("# pysam: htslib_config {}={}".format(key, value)) + + external_htslib_libraries = ['z'] + if "LIBS" in htslib_make_options: + external_htslib_libraries.extend( + [re.sub("^-l", "", x) for x in htslib_make_options["LIBS"].split(" ") if x.strip()]) + + shared_htslib_sources = [re.sub("\.o", ".c", os.path.join("htslib", x)) + for x in + htslib_make_options["LIBHTS_OBJS"].split(" ")] + + htslib_sources = [] + +if HTSLIB_LIBRARY_DIR: + # linking against a shared, externally installed htslib version, no + # sources required for htslib + htslib_sources = [] + shared_htslib_sources = [] + chtslib_sources = [] + htslib_library_dirs = [HTSLIB_LIBRARY_DIR] + htslib_include_dirs = [HTSLIB_INCLUDE_DIR] + external_htslib_libraries = ['z', 'hts'] +elif HTSLIB_MODE == 'separate': + # add to each pysam component a separately compiled + # htslib + htslib_sources = shared_htslib_sources + shared_htslib_sources = htslib_sources + htslib_library_dirs = [] + htslib_include_dirs = ['htslib'] +elif HTSLIB_MODE == 'shared': + # link each pysam component against the same + # htslib built from sources included in the pysam + # package. + htslib_library_dirs = [ + "pysam", # when using setup.py develop? + ".", # when using setup.py develop? + os.path.join("build", distutils_dir_name("lib"), "pysam")] + + htslib_include_dirs = ['htslib'] +else: + raise ValueError("unknown HTSLIB value '%s'" % HTSLIB_MODE) + +# build config.py +with open(os.path.join("pysam", "config.py"), "w") as outf: + outf.write('HTSLIB = "{}"\n'.format(HTSLIB_SOURCE)) + config_values = collections.defaultdict(int) + + if HTSLIB_SOURCE == "builtin": + with open(os.path.join("htslib", "config.h")) as inf: + for line in inf: + if line.startswith("#define"): + key, value = re.match( + "#define (\S+)\s+(\S+)", line).groups() + config_values[key] = value + for key in ["ENABLE_PLUGINS", + "HAVE_COMMONCRYPTO", + "HAVE_GMTIME_R", + "HAVE_HMAC", + "HAVE_IRODS", + "HAVE_LIBCURL", + "HAVE_MMAP"]: + outf.write("{} = {}\n".format(key, config_values[key])) + print ("# pysam: config_option: {}={}".format(key, config_values[key])) + +# create empty config.h files if they have not been created automatically +# or created by the user: +for fn in config_headers: + if not os.path.exists(fn): + with open(fn, "w") as outf: + outf.write( + "/* empty config.h created by pysam */\n") + outf.write( + "/* conservative compilation options */\n") + +####################################################### +# Windows compatibility - untested +if platform.system() == 'Windows': + include_os = ['win32'] + os_c_files = ['win32/getopt.c'] + extra_compile_args = [] +else: + include_os = [] + os_c_files = [] + # for python 3.4, see for example + # http://stackoverflow.com/questions/25587039/ + # error-compiling-rpy2-on-python3-4-due-to-werror- + # declaration-after-statement + extra_compile_args = [ + "-Wno-unused", + "-Wno-strict-prototypes", + "-Wno-sign-compare", + "-Wno-error=declaration-after-statement"] + +define_macros = [] + +suffix = sysconfig.get_config_var('EXT_SUFFIX') +if not suffix: + suffix = sysconfig.get_config_var('SO') + +internal_htslib_libraries = [ + os.path.splitext("chtslib{}".format(suffix))[0]] +internal_samtools_libraries = [ + os.path.splitext("csamtools{}".format(suffix))[0], + os.path.splitext("cbcftools{}".format(suffix))[0], + ] +internal_pysamutil_libraries = [ + os.path.splitext("cutils{}".format(suffix))[0]] + +libraries_for_pysam_module = external_htslib_libraries + internal_htslib_libraries + internal_pysamutil_libraries + +# Order of modules matters in order to make sure that dependencies are resolved. +# The structures of dependencies is as follows: +# libchtslib: htslib utility functions and htslib itself if builtin is set. +# libcsamtools: samtools code (builtin) +# libcbcftools: bcftools code (builtin) +# libcutils: General utility functions, depends on all of the above +# libcXXX (pysam module): depends on libchtslib and libcutils + +# The list below uses the union of include_dirs and library_dirs for +# reasons of simplicity. + +modules = [ + dict(name="pysam.libchtslib", + sources=[source_pattern % "htslib", "pysam/htslib_util.c"] + shared_htslib_sources + os_c_files, + libraries=external_htslib_libraries), + dict(name="pysam.libcsamtools", + sources=[source_pattern % "samtools"] + glob.glob(os.path.join("samtools", "*.pysam.c")) + + [os.path.join("samtools", "lz4", "lz4.c")] + htslib_sources + os_c_files, + libraries=external_htslib_libraries + internal_htslib_libraries), + dict(name="pysam.libcbcftools", + sources=[source_pattern % "bcftools"] + glob.glob(os.path.join("bcftools", "*.pysam.c")) + htslib_sources + os_c_files, + libraries=external_htslib_libraries + internal_htslib_libraries), + dict(name="pysam.libcutils", + sources=[source_pattern % "utils", "pysam/pysam_util.c"] + htslib_sources + os_c_files, + libraries=external_htslib_libraries + internal_htslib_libraries + internal_samtools_libraries), + dict(name="pysam.libcalignmentfile", + sources=[source_pattern % "alignmentfile"] + htslib_sources + os_c_files, + libraries=libraries_for_pysam_module), + dict(name="pysam.libcsamfile", + sources=[source_pattern % "samfile"] + htslib_sources + os_c_files, + libraries=libraries_for_pysam_module), + dict(name="pysam.libcalignedsegment", + sources=[source_pattern % "alignedsegment"] + htslib_sources + os_c_files, + libraries=libraries_for_pysam_module), + dict(name="pysam.libctabix", + sources=[source_pattern % "tabix"] + htslib_sources + os_c_files, + libraries=libraries_for_pysam_module), + dict(name="pysam.libcfaidx", + sources=[source_pattern % "faidx"] + htslib_sources + os_c_files, + libraries=libraries_for_pysam_module), + dict(name="pysam.libcbcf", + sources=[source_pattern % "bcf"] + htslib_sources + os_c_files, + libraries=libraries_for_pysam_module), + dict(name="pysam.libcbgzf", + sources=[source_pattern % "bgzf"] + htslib_sources + os_c_files, + libraries=libraries_for_pysam_module), + dict(name="pysam.libctabixproxies", + sources=[source_pattern % "tabixproxies"] + htslib_sources + os_c_files, + libraries=libraries_for_pysam_module), + dict(name="pysam.libcvcf", + sources=[source_pattern % "vcf"] + htslib_sources + os_c_files, + libraries=libraries_for_pysam_module), +] + +common_options = dict( + language="c", + extra_compile_args=extra_compile_args, + define_macros=define_macros, + # for out-of-tree compilation, use absolute paths + library_dirs=[os.path.abspath(x) for x in ["pysam"] + htslib_library_dirs], + include_dirs=[os.path.abspath(x) for x in htslib_include_dirs + \ + ["samtools", "samtools/lz4", "bcftools", "pysam", "."] + include_os]) + +# add common options (in python >3.5, could use n = {**a, **b} +for module in modules: + module.update(**common_options) + +classifiers = """ +Development Status :: 4 - Beta +Intended Audience :: Science/Research +Intended Audience :: Developers +License :: OSI Approved +Programming Language :: Python +Topic :: Software Development +Topic :: Scientific/Engineering +Operating System :: POSIX +Operating System :: Unix +Operating System :: MacOS +""" + +metadata = { + 'name': "pysam", + 'version': get_pysam_version(), + 'description': "pysam", + 'long_description': __doc__, + 'author': "Andreas Heger", + 'author_email': "andreas.heger@gmail.com", + 'license': "MIT", + 'platforms': ["POSIX", "UNIX", "MacOS"], + 'classifiers': [_f for _f in classifiers.split("\n") if _f], + 'url': "https://github.com/pysam-developers/pysam", + 'packages': package_list, + 'requires': ['cython (>=0.21)'], + 'ext_modules': [Extension(**opts) for opts in modules], + 'cmdclass': cmdclass, + 'package_dir': package_dirs, + 'package_data': {'': ['*.pxd', '*.h'], }, + # do not pack in order to permit linking to csamtools.so + 'zip_safe': False, + 'use_2to3': True, +} + +if __name__ == '__main__': + dist = setup(**metadata) diff --git a/tests/00README.txt b/tests/00README.txt new file mode 100644 index 0000000..67b8689 --- /dev/null +++ b/tests/00README.txt @@ -0,0 +1,32 @@ +File ex1.fa contains two sequences cut from the human genome +build36. They were exatracted with command: + + samtools faidx human_b36.fa 2:2043966-2045540 20:67967-69550 + +Sequence names were changed manually for simplicity. File ex1.sam.gz +contains MAQ alignments exatracted with: + + (samtools view NA18507_maq.bam 2:2044001-2045500; + samtools view NA18507_maq.bam 20:68001-69500) + +and processed with `samtools fixmate' to make it self-consistent as a +standalone alignment. + +To try samtools, you may run the following commands: + + samtools faidx ex1.fa # index the reference FASTA + samtools import ex1.fa.fai ex1.sam.gz ex1.bam # SAM->BAM + samtools index ex1.bam # index BAM + samtools tview ex1.bam ex1.fa # view alignment + samtools pileup -cf ex1.fa ex1.bam # pileup and consensus + samtools pileup -cf ex1.fa -t ex1.fa.fai ex1.sam.gz + +In order for the script pysam_test.py to work, you will need pysam +in your PYTHONPATH. + +In order for the script example.py to work, you will need pysam +in your PYTHONPATH and run + + make all + +beforehand. diff --git a/tests/AlignedSegment_bench.py b/tests/AlignedSegment_bench.py new file mode 100644 index 0000000..f5bccd6 --- /dev/null +++ b/tests/AlignedSegment_bench.py @@ -0,0 +1,30 @@ +"""Benchmarking module for AlignedSegment functionality""" +import os +import array +import pysam + + +from TestUtils import BAM_DATADIR + + +def set_binary_tag(): + read = pysam.AlignedSegment() + read.set_tag('FZ', array.array('H', range(1000))) + return len(read.get_tag('FZ')) + + +def read_binary_tag(fn): + with pysam.AlignmentFile(fn) as inf: + read = next(inf.fetch()) + return len(read.get_tag('FZ')) + + +def test_set_binary_tag(benchmark): + result = benchmark(set_binary_tag) + assert result == 1000 + + +def test_read_binary_tag(benchmark): + result = benchmark(read_binary_tag, os.path.join( + BAM_DATADIR, "example_btag.bam")) + assert result == 260 diff --git a/tests/AlignedSegment_test.py b/tests/AlignedSegment_test.py new file mode 100644 index 0000000..3327279 --- /dev/null +++ b/tests/AlignedSegment_test.py @@ -0,0 +1,1348 @@ +import os +import pysam +import unittest +import json +import collections +import string +import copy +import array + +from TestUtils import checkFieldEqual, BAM_DATADIR, get_temp_filename, get_temp_context, IS_PYTHON3 + + +if IS_PYTHON3: + maketrans = str.maketrans +else: + maketrans = string.maketrans + +class ReadTest(unittest.TestCase): + + def build_read(self): + '''build an example read.''' + + header = pysam.AlignmentHeader.from_references( + ["chr1", "chr2"], + [10000000, 10000000]) + + a = pysam.AlignedSegment(header) + a.query_name = "read_12345" + a.query_sequence = "ATGC" * 10 + a.flag = 0 + a.reference_id = 0 + a.reference_start = 20 + a.mapping_quality = 20 + a.cigartuples = ((0, 10), (2, 1), (0, 9), (1, 1), (0, 20)) + a.next_reference_id = 0 + a.next_reference_start = 200 + a.template_length = 167 + a.query_qualities = pysam.qualitystring_to_array("1234") * 10 + return a + + +class TestAlignedSegment(ReadTest): + + '''tests to check if aligned read can be constructed + and manipulated. + ''' + + def testEmpty(self): + + a = pysam.AlignedSegment() + self.assertEqual(a.query_name, None) + self.assertEqual(a.query_sequence, None) + self.assertEqual(pysam.qualities_to_qualitystring( + a.query_qualities), None) + self.assertEqual(a.flag, 0) + self.assertEqual(a.reference_id, -1) + self.assertEqual(a.mapping_quality, 0) + self.assertEqual(a.cigartuples, None) + self.assertEqual(a.tags, []) + self.assertEqual(a.next_reference_id, -1) + self.assertEqual(a.next_reference_start, -1) + self.assertEqual(a.template_length, 0) + + def testStrOfEmptyRead(self): + a = pysam.AlignedSegment() + s = str(a) + self.assertEqual( + "None\t0\t-1\t-1\t0\tNone\t-1\t-1\t0\tNone\tNone\t[]", + s) + + def testSettingTagInEmptyRead(self): + '''see issue 62''' + a = pysam.AlignedSegment() + a.tags = (("NM", 1),) + a.query_qualities = None + self.assertEqual(a.tags, [("NM", 1), ]) + + def testCompare(self): + '''check comparison functions.''' + a = self.build_read() + b = self.build_read() + + self.assertEqual(0, a.compare(b)) + self.assertEqual(0, b.compare(a)) + self.assertTrue(a == b) + self.assertTrue(b == a) + self.assertFalse(a != b) + self.assertFalse(b != a) + + b.tid = 1 + self.assertFalse(a == b) + self.assertFalse(b == a) + self.assertTrue(a != b) + self.assertTrue(b != a) + + def testHashing(self): + a = self.build_read() + b = self.build_read() + self.assertEqual(hash(a), hash(b)) + b.tid = 1 + self.assertNotEqual(hash(a), hash(b)) + + def testUpdate(self): + '''check if updating fields affects other variable length data + ''' + a = self.build_read() + b = self.build_read() + + # check qname + b.query_name = "read_123" + checkFieldEqual(self, a, b, "query_name") + b.query_name = "read_12345678" + checkFieldEqual(self, a, b, "query_name") + b.query_name = "read_12345" + checkFieldEqual(self, a, b) + + # check cigar + b.cigartuples = ((0, 10), ) + checkFieldEqual(self, a, b, "cigartuples") + b.cigartuples = ((0, 10), (2, 1), (0, 10)) + checkFieldEqual(self, a, b, "cigartuples") + b.cigartuples = ((0, 10), (2, 1), (0, 9), (1, 1), (0, 20)) + checkFieldEqual(self, a, b) + + # check seq + b.query_sequence = "ATGC" + checkFieldEqual(self, + a, b, + ("query_sequence", "query_qualities", "query_length")) + b.query_sequence = "ATGC" * 3 + checkFieldEqual(self, + a, b, + ("query_sequence", "query_qualities", "query_length")) + b.query_sequence = "ATGC" * 10 + checkFieldEqual(self, a, b, ("query_qualities",)) + + # reset qual + b = self.build_read() + + # check flags: + for x in ( + "is_paired", "is_proper_pair", + "is_unmapped", "mate_is_unmapped", + "is_reverse", "mate_is_reverse", + "is_read1", "is_read2", + "is_secondary", "is_qcfail", + "is_duplicate", "is_supplementary"): + setattr(b, x, True) + self.assertEqual(getattr(b, x), True) + checkFieldEqual(self, a, b, ("flag", x,)) + setattr(b, x, False) + self.assertEqual(getattr(b, x), False) + checkFieldEqual(self, a, b) + + def testUpdate2(self): + '''issue 135: inplace update of sequence and quality score. + + This does not work as setting the sequence will erase + the quality scores. + ''' + a = self.build_read() + a.query_sequence = a.query_sequence[5:10] + self.assertEqual(pysam.qualities_to_qualitystring( + a.query_qualities), None) + + a = self.build_read() + s = pysam.qualities_to_qualitystring(a.query_qualities) + a.query_sequence = a.query_sequence[5:10] + a.query_qualities = pysam.qualitystring_to_array(s[5:10]) + + self.assertEqual(pysam.qualities_to_qualitystring( + a.query_qualities), s[5:10]) + + def testLargeRead(self): + '''build an example read.''' + + a = pysam.AlignedSegment() + a.query_name = "read_12345" + a.query_sequence = "ATGC" * 200 + a.flag = 0 + a.reference_id = -1 + a.reference_start = 20 + a.mapping_quality = 20 + a.cigartuples = ((0, 4 * 200), ) + a.next_reference_id = 0 + a.next_reference_start = 200 + a.template_length = 167 + a.query_qualities = pysam.qualitystring_to_array("1234") * 200 + + return a + + def testUpdateTlen(self): + '''check if updating tlen works''' + a = self.build_read() + oldlen = a.template_length + oldlen *= 2 + a.template_length = oldlen + self.assertEqual(a.template_length, oldlen) + + def testPositions(self): + a = self.build_read() + self.assertEqual(a.get_reference_positions(), + [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59]) + + self.assertEqual(a.get_aligned_pairs(), + [(0, 20), (1, 21), (2, 22), (3, 23), (4, 24), + (5, 25), (6, 26), (7, 27), (8, 28), (9, 29), + (None, 30), + (10, 31), (11, 32), (12, 33), (13, 34), (14, 35), + (15, 36), (16, 37), (17, 38), (18, 39), (19, None), + (20, 40), (21, 41), (22, 42), (23, 43), (24, 44), + (25, 45), (26, 46), (27, 47), (28, 48), (29, 49), + (30, 50), (31, 51), (32, 52), (33, 53), (34, 54), + (35, 55), (36, 56), (37, 57), (38, 58), (39, 59)]) + + self.assertEqual( + a.get_reference_positions(), + [x[1] for x in a.get_aligned_pairs() + if x[0] is not None and x[1] is not None]) + # alen is the length of the aligned read in genome + self.assertEqual(a.reference_length, + a.get_aligned_pairs()[-1][0] + 1) + # aend points to one beyond last aligned base in ref + self.assertEqual(a.get_reference_positions()[-1], + a.reference_end - 1) + + def testFullReferencePositions(self): + '''see issue 26''' + a = self.build_read() + a.cigar = [(4, 30), (0, 20), (1, 3), (0, 47)] + + self.assertEqual(100, + len(a.get_reference_positions(full_length=True))) + + def testBlocks(self): + a = self.build_read() + self.assertEqual(a.get_blocks(), + [(20, 30), (31, 40), (40, 60)]) + + def test_infer_query_length(self): + '''Test infer_query_length on M|=|X|I|D|H|S cigar ops''' + a = self.build_read() + a.cigarstring = '40M' + self.assertEqual(a.infer_query_length(), 40) + a.cigarstring = '40=' + self.assertEqual(a.infer_query_length(), 40) + a.cigarstring = '40X' + self.assertEqual(a.infer_query_length(), 40) + a.cigarstring = '20M5I20M' + self.assertEqual(a.infer_query_length(), 45) + a.cigarstring = '20M5D20M' + self.assertEqual(a.infer_query_length(), 40) + a.cigarstring = '5H35M' + self.assertEqual(a.infer_query_length(), 35) + a.cigarstring = '5S35M' + self.assertEqual(a.infer_query_length(), 40) + a.cigarstring = '35M5H' + self.assertEqual(a.infer_query_length(), 35) + a.cigarstring = '35M5S' + self.assertEqual(a.infer_query_length(), 40) + a.cigarstring = None + self.assertEqual(a.infer_query_length(), None) + + def test_infer_read_length(self): + '''Test infer_read_length on M|=|X|I|D|H|S cigar ops''' + a = self.build_read() + a.cigarstring = '40M' + self.assertEqual(a.infer_read_length(), 40) + a.cigarstring = '40=' + self.assertEqual(a.infer_read_length(), 40) + a.cigarstring = '40X' + self.assertEqual(a.infer_read_length(), 40) + a.cigarstring = '20M5I20M' + self.assertEqual(a.infer_read_length(), 45) + a.cigarstring = '20M5D20M' + self.assertEqual(a.infer_read_length(), 40) + a.cigarstring = '5H35M' + self.assertEqual(a.infer_read_length(), 40) + a.cigarstring = '5S35M' + self.assertEqual(a.infer_read_length(), 40) + a.cigarstring = '35M5H' + self.assertEqual(a.infer_read_length(), 40) + a.cigarstring = '35M5S' + self.assertEqual(a.infer_read_length(), 40) + a.cigarstring = None + self.assertEqual(a.infer_read_length(), None) + + def test_get_aligned_pairs_soft_clipping(self): + a = self.build_read() + a.cigartuples = ((4, 2), (0, 35), (4, 3)) + self.assertEqual(a.get_aligned_pairs(), + [(0, None), (1, None)] + + [(qpos, refpos) for (qpos, refpos) in zip( + range(2, 2 + 35), range(20, 20 + 35))] + + [(37, None), (38, None), (39, None)] + ) + self.assertEqual(a.get_aligned_pairs(True), + # [(0, None), (1, None)] + + [(qpos, refpos) for (qpos, refpos) in zip( + range(2, 2 + 35), range(20, 20 + 35))] + # [(37, None), (38, None), (39, None)] + ) + + def test_get_aligned_pairs_hard_clipping(self): + a = self.build_read() + a.cigartuples = ((5, 2), (0, 35), (5, 3)) + self.assertEqual(a.get_aligned_pairs(), + # No seq, no seq pos + [(qpos, refpos) for (qpos, refpos) in zip( + range(0, 0 + 35), range(20, 20 + 35))]) + self.assertEqual(a.get_aligned_pairs(True), + [(qpos, refpos) for (qpos, refpos) in zip( + range(0, 0 + 35), range(20, 20 + 35))]) + + def test_get_aligned_pairs_skip(self): + a = self.build_read() + a.cigarstring = "2M100D38M" + self.assertEqual(a.get_aligned_pairs(), + [(0, 20), (1, 21)] + + [(None, refpos) for refpos in range(22, 22 + 100)] + + [(qpos, refpos) for (qpos, refpos) in zip( + range(2, 2 + 38), + range(20 + 2 + 100, 20 + 2 + 100 + 38))]) + self.assertEqual(a.get_aligned_pairs(True), + [(0, 20), (1, 21)] + + # [(None, refpos) for refpos in range(21, 21+100)] + + [(qpos, refpos) for (qpos, refpos) in zip( + range(2, 2 + 38), + range(20 + 2 + 100, 20 + 2 + 100 + 38))]) + + def test_get_aligned_pairs_match_mismatch(self): + a = self.build_read() + a.cigartuples = ((7, 20), (8, 20)) + self.assertEqual(a.get_aligned_pairs(), + [(qpos, refpos) for (qpos, refpos) in zip( + range(0, 0 + 40), range(20, 20 + 40))]) + self.assertEqual(a.get_aligned_pairs(True), + [(qpos, refpos) for (qpos, refpos) in zip( + range(0, 0 + 40), range(20, 20 + 40))]) + + def test_get_aligned_pairs_padding(self): + a = self.build_read() + a.cigartuples = ((7, 20), (6, 1), (8, 19)) + + def inner(): + a.get_aligned_pairs() + # padding is not bein handled right now + self.assertRaises(NotImplementedError, inner) + + def test_get_aligned_pairs(self): + a = self.build_read() + a.query_sequence = "A" * 9 + a.cigarstring = "9M" + a.set_tag("MD", "9") + self.assertEqual( + a.get_aligned_pairs(with_seq=True), + [(0, 20, 'A'), (1, 21, 'A'), (2, 22, 'A'), + (3, 23, 'A'), (4, 24, 'A'), (5, 25, 'A'), + (6, 26, 'A'), (7, 27, 'A'), (8, 28, 'A')]) + + a.set_tag("MD", "4C4") + self.assertEqual( + a.get_aligned_pairs(with_seq=True), + [(0, 20, 'A'), (1, 21, 'A'), (2, 22, 'A'), + (3, 23, 'A'), (4, 24, 'c'), (5, 25, 'A'), + (6, 26, 'A'), (7, 27, 'A'), (8, 28, 'A')]) + + a.cigarstring = "5M2D4M" + a.set_tag("MD", "4C^TT4") + self.assertEqual( + a.get_aligned_pairs(with_seq=True), + [(0, 20, 'A'), (1, 21, 'A'), (2, 22, 'A'), + (3, 23, 'A'), (4, 24, 'c'), + (None, 25, 'T'), (None, 26, 'T'), + (5, 27, 'A'), (6, 28, 'A'), (7, 29, 'A'), (8, 30, 'A')] + ) + + a.cigarstring = "5M2D2I2M" + a.set_tag("MD", "4C^TT2") + self.assertEqual( + a.get_aligned_pairs(with_seq=True), + [(0, 20, 'A'), (1, 21, 'A'), (2, 22, 'A'), + (3, 23, 'A'), (4, 24, 'c'), + (None, 25, 'T'), (None, 26, 'T'), + (5, None, None), (6, None, None), + (7, 27, 'A'), (8, 28, 'A')] + ) + + def test_get_aligned_pairs_with_malformed_MD_tag(self): + + a = self.build_read() + a.query_sequence = "A" * 9 + + # out of range issue, see issue #560 + a.cigarstring = "64M2D85M2S" + a.set_tag("MD", "64^TG86A0") + self.assertRaises( + AssertionError, + a.get_aligned_pairs, + with_seq=True) + + def test_get_aligned_pairs_skip_reference(self): + a = self.build_read() + a.query_sequence = "A" * 10 + a.cigarstring = "5M1N5M" + a.set_tag("MD", "10") + + self.assertEqual( + a.get_aligned_pairs(with_seq=True), + [(0, 20, 'A'), (1, 21, 'A'), (2, 22, 'A'), + (3, 23, 'A'), (4, 24, 'A'), (None, 25, None), + (5, 26, 'A'), (6, 27, 'A'), (7, 28, 'A'), + (8, 29, 'A'), (9, 30, 'A')]) + + self.assertEqual( + a.get_aligned_pairs(with_seq=False), + [(0, 20), (1, 21), (2, 22), + (3, 23), (4, 24), (None, 25), + (5, 26), (6, 27), (7, 28), + (8, 29), (9, 30)]) + + self.assertEqual( + a.get_aligned_pairs(matches_only=True, with_seq=False), + [(0, 20), (1, 21), + (2, 22), (3, 23), + (4, 24), (5, 26), + (6, 27), (7, 28), + (8, 29), (9, 30)]) + + def testNoSequence(self): + '''issue 176: retrieving length without query sequence + with soft-clipping. + ''' + a = self.build_read() + a.query_sequence = None + a.cigarstring = "20M" + self.assertEqual(a.query_alignment_length, 20) + a.cigarstring = "20M1S" + self.assertEqual(a.query_alignment_length, 20) + a.cigarstring = "20M1H" + self.assertEqual(a.query_alignment_length, 20) + a.cigarstring = "1S20M" + self.assertEqual(a.query_alignment_length, 20) + a.cigarstring = "1H20M" + self.assertEqual(a.query_alignment_length, 20) + a.cigarstring = "1S20M1S" + self.assertEqual(a.query_alignment_length, 20) + a.cigarstring = "1H20M1H" + self.assertEqual(a.query_alignment_length, 20) + + def test_query_length_is_limited(self): + a = self.build_read() + a.query_name = "A" * 1 + a.query_name = "A" * 251 + self.assertRaises( + ValueError, + setattr, + a, + "query_name", + "A" * 252) + + def test_header_accessible(self): + a = self.build_read() + self.assertTrue(isinstance(a.header, pysam.AlignmentHeader)) + + def test_bin_values_for_unmapped_reads_ignore_length(self): + a = self.build_read() + # use a long read + a.cigarstring="2000000M" + self.assertEqual(a.bin, 9) + # changing unmapped flag changes bin because length is 0 + a.is_unmapped = True + self.assertTrue(a.is_unmapped) + self.assertEqual(a.bin, 4681) + + # unmapped read without chromosomal location + a.reference_start = -1 + self.assertEqual(a.reference_start, -1) + self.assertEqual(a.bin, 4680) + + def test_bin_values_for_mapped_reads_are_updated(self): + a = self.build_read() + a.pos = 20000 + self.assertFalse(a.is_unmapped) + self.assertEqual(a.bin, 4682) + + # updating length updates bin + a.cigarstring="2000000M" + self.assertEqual(a.bin, 9) + + # updating length updates bin + a.cigarstring="20M" + self.assertEqual(a.bin, 4682) + + # updating length updates bin + a.reference_start = 2000000 + self.assertEqual(a.bin, 4803) + + +class TestTidMapping(ReadTest): + + def test_reference_name_can_be_set_to_none(self): + a = self.build_read() + a.reference_name = None + self.assertEqual(a.reference_name, None) + self.assertEqual(a.reference_id, -1) + + def test_reference_name_can_be_set_to_asterisk(self): + a = self.build_read() + a.reference_name = "*" + self.assertEqual(a.reference_name, None) + self.assertEqual(a.reference_id, -1) + + def test_reference_name_can_be_set_to_chromosome(self): + a = self.build_read() + a.reference_name = "chr1" + self.assertEqual(a.reference_name, "chr1") + self.assertEqual(a.reference_id, 0) + + def test_reference_name_can_not_be_set_to_unknown_chromosome(self): + a = self.build_read() + self.assertRaises(ValueError, + setattr, + a, + "reference_name", + "chrX") + + def test_tid_can_be_set_to_missing(self): + a = self.build_read() + a.reference_id = -1 + self.assertEqual(a.reference_id, -1) + self.assertEqual(a.reference_name, None) + + def test_tid_can_be_set_to_missing_without_header(self): + a = pysam.AlignedSegment() + a.reference_id = -1 + self.assertEqual(a.reference_id, -1) + self.assertEqual(a.reference_name, None) + + def test_tid_can_be_set_without_header(self): + a = pysam.AlignedSegment() + a.reference_id = 1 + self.assertRaises(ValueError, getattr, a, "reference_name") + + def test_tid_can_be_set_to_chromosome(self): + a = self.build_read() + a.reference_id = 0 + self.assertEqual(a.reference_id, 0) + self.assertEqual(a.reference_name, "chr1") + + def test_tid_can_not_be_set_to_unknown_chromosome(self): + a = self.build_read() + self.assertRaises(ValueError, + setattr, + a, + "reference_id", + 2) + + def test_unmapped_tid_is_asterisk_in_output(self): + a = self.build_read() + a.reference_id = -1 + self.assertEqual(a.to_string().split("\t")[2], "*") + + +class TestNextTidMapping(ReadTest): + + def test_next_reference_name_can_be_set_to_none(self): + a = self.build_read() + a.next_reference_name = None + self.assertEqual(a.next_reference_name, None) + self.assertEqual(a.next_reference_id, -1) + + def test_next_reference_name_can_be_set_to_asterisk(self): + a = self.build_read() + a.next_reference_name = "*" + self.assertEqual(a.next_reference_name, None) + self.assertEqual(a.next_reference_id, -1) + + def test_next_reference_name_can_be_set_to_chromosome(self): + a = self.build_read() + a.next_reference_name = "chr1" + self.assertEqual(a.next_reference_name, "chr1") + self.assertEqual(a.next_reference_id, 0) + + def test_next_reference_name_can_not_be_set_to_unknown_chromosome(self): + a = self.build_read() + self.assertRaises(ValueError, + setattr, + a, + "next_reference_name", + "chrX") + + def test_next_tid_can_be_set_to_missing(self): + a = self.build_read() + a.next_reference_id = -1 + self.assertEqual(a.next_reference_id, -1) + self.assertEqual(a.next_reference_name, None) + + def test_next_tid_can_be_set_to_equal(self): + a = self.build_read() + a.reference_name = "chr1" + a.next_reference_name = "=" + self.assertEqual(a.next_reference_id, a.reference_id) + self.assertEqual(a.next_reference_name, a.reference_name) + self.assertEqual(a.to_string().split("\t")[6], "=") + + def test_next_tid_can_be_set_to_missing_without_header(self): + a = pysam.AlignedSegment() + a.next_reference_id = -1 + self.assertEqual(a.next_reference_id, -1) + self.assertEqual(a.next_reference_name, None) + + def test_next_tid_can_be_set_without_header(self): + a = pysam.AlignedSegment() + a.next_reference_id = 1 + self.assertRaises(ValueError, getattr, a, "next_reference_name") + + def test_next_tid_can_be_set_to_chromosome(self): + a = self.build_read() + a.next_reference_id = 0 + self.assertEqual(a.next_reference_id, 0) + self.assertEqual(a.next_reference_name, "chr1") + + def test_next_tid_can_not_be_set_to_unknown_chromosome(self): + a = self.build_read() + self.assertRaises(ValueError, + setattr, + a, + "next_reference_id", + 2) + + def test_next_unmapped_tid_is_asterisk_in_output(self): + a = self.build_read() + a.next_reference_id = -1 + self.assertEqual(a.to_string().split("\t")[6], "*") + + +class TestCigar(ReadTest): + + def testCigarString(self): + r = self.build_read() + self.assertEqual(r.cigarstring, "10M1D9M1I20M") + r.cigarstring = "20M10D20M" + self.assertEqual(r.cigartuples, [(0, 20), (2, 10), (0, 20)]) + # unsetting cigar string + r.cigarstring = None + self.assertEqual(r.cigarstring, None) + + def testCigar(self): + r = self.build_read() + self.assertEqual( + r.cigartuples, [(0, 10), (2, 1), (0, 9), (1, 1), (0, 20)]) + # unsetting cigar string + r.cigartuples = None + self.assertEqual(r.cigartuples, None) + + +class TestCigarStats(ReadTest): + + def testStats(self): + a = self.build_read() + + a.cigarstring = None + self.assertEqual( + [list(x) for x in a.get_cigar_stats()], + [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]) + + a.cigarstring = "10M" + self.assertEqual( + [list(x) for x in a.get_cigar_stats()], + [[10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]) + + a.cigarstring = "10M2I2M" + self.assertEqual( + [list(x) for x in a.get_cigar_stats()], + [[12, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]]) + + for i, x in enumerate("MIDNSHP=X"): + a.cigarstring = "2{}".format(x) + expected = [[0] * 11, [0] * 11] + expected[0][i] = 2 + expected[1][i] = 1 + self.assertEqual( + [list(x) for x in a.get_cigar_stats()], + expected) + + a.cigarstring = "10M" + a.set_tag("NM", 5) + self.assertEqual( + [list(x) for x in a.get_cigar_stats()], + [[10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5], + [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]) + + a.cigarstring = None + self.assertEqual( + [list(x) for x in a.get_cigar_stats()], + [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]) + + +class TestAlignedPairs(unittest.TestCase): + filename = os.path.join(BAM_DATADIR, "example_aligned_pairs.bam") + + def testReferenceBases(self): + """reference bases should always be the same nucleotide + """ + reference_bases = collections.defaultdict(list) + with pysam.AlignmentFile(self.filename) as inf: + for c in inf.pileup(): + for r in c.pileups: + for read, ref, base in r.alignment.get_aligned_pairs( + with_seq=True): + if ref is None: + continue + reference_bases[ref].append(base.upper()) + + for x, y in reference_bases.items(): + self.assertEqual(len(set(y)), 1) + + +class TestTags(ReadTest): + + def testMissingTag(self): + a = self.build_read() + self.assertRaises(KeyError, a.get_tag, "XP") + + def testEmptyTag(self): + a = self.build_read() + self.assertRaises(KeyError, a.get_tag, "XT") + + def testSetTag(self): + a = self.build_read() + self.assertEqual(False, a.has_tag("NM")) + a.set_tag("NM", 2) + self.assertEqual(True, a.has_tag("NM")) + self.assertEqual(a.get_tag("NM"), 2) + a.set_tag("NM", 3) + self.assertEqual(a.get_tag("NM"), 3) + a.set_tag("NM", None) + self.assertEqual(False, a.has_tag("NM")) + # check if deleting a non-existing tag is fine + a.set_tag("NM", None) + a.set_tag("NM", None) + + def testArrayTags(self): + read = self.build_read() + supported_dtypes = "bhBHf" + unsupported_dtypes = "lLd" + + for dtype in supported_dtypes: + key = "F" + dtype + read.set_tag(key, array.array(dtype, range(10))) + ary = read.get_tag(key) + + for dtype in unsupported_dtypes: + key = "F" + dtype + self.assertRaises(ValueError, + read.set_tag, + key, + array.array(dtype, range(10))) + + def testAddTagsType(self): + a = self.build_read() + a.tags = None + self.assertEqual(a.tags, []) + + a.setTag('X1', 5.0) + a.setTag('X2', "5.0") + a.setTag('X3', 5) + + self.assertEqual(sorted(a.tags), + sorted([('X1', 5.0), + ('X2', "5.0"), + ('X3', 5)])) + + # test setting float for int value + a.setTag('X4', 5, value_type='d') + self.assertEqual(sorted(a.tags), + sorted([('X1', 5.0), + ('X2', "5.0"), + ('X3', 5), + ('X4', 5.0)])) + + # test setting int for float value - the + # value will be rounded. + a.setTag('X5', 5.2, value_type='i') + self.assertEqual(sorted(a.tags), + sorted([('X1', 5.0), + ('X2', "5.0"), + ('X3', 5), + ('X4', 5.0), + ('X5', 5)])) + + # test setting invalid type code + self.assertRaises(ValueError, a.set_tag, 'X6', 5.2, 'g') + + def testTagsUpdatingFloat(self): + a = self.build_read() + a.tags = [('NM', 1), ('RG', 'L1'), + ('PG', 'P1'), ('XT', 'U')] + + self.assertEqual(a.tags, + [('NM', 1), ('RG', 'L1'), + ('PG', 'P1'), ('XT', 'U')]) + a.tags += [('XC', 5.0)] + self.assertEqual(a.tags, + [('NM', 1), ('RG', 'L1'), + ('PG', 'P1'), ('XT', 'U'), ('XC', 5.0)]) + + def testAddTags(self): + a = self.build_read() + a.tags = [('NM', 1), ('RG', 'L1'), + ('PG', 'P1'), ('XT', 'U')] + + self.assertEqual(sorted(a.tags), + sorted([('NM', 1), ('RG', 'L1'), + ('PG', 'P1'), ('XT', 'U')])) + + a.setTag('X1', 'C') + self.assertEqual(sorted(a.tags), + sorted([('X1', 'C'), ('NM', 1), ('RG', 'L1'), + ('PG', 'P1'), ('XT', 'U'), ])) + a.setTag('X2', 5) + self.assertEqual(sorted(a.tags), + sorted([('X2', 5), ('X1', 'C'), + ('NM', 1), ('RG', 'L1'), + ('PG', 'P1'), ('XT', 'U'), ])) + # add with replacement + a.setTag('X2', 10) + self.assertEqual(sorted(a.tags), + sorted([('X2', 10), ('X1', 'C'), + ('NM', 1), ('RG', 'L1'), + ('PG', 'P1'), ('XT', 'U'), ])) + + # add without replacement + a.setTag('X2', 5, replace=False) + self.assertEqual(sorted(a.tags), + sorted([('X2', 10), ('X1', 'C'), + ('X2', 5), + ('NM', 1), ('RG', 'L1'), + ('PG', 'P1'), ('XT', 'U'), ])) + + def testTagParsing(self): + '''test for tag parsing + + see http://groups.google.com/group/pysam-user-group/browse_thread/thread/67ca204059ea465a + ''' + samfile = pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "ex8.bam"), + "rb") + + for entry in samfile: + before = entry.get_tags() + entry.set_tags(before) + after = entry.get_tags() + self.assertEqual(after, before) + + def testMDTagMatchOnly(self): + a = self.build_read() + + # Substitutions only + a.cigarstring = "21M" + a.query_sequence = "A" * 21 + a.set_tag('MD', "5C0T0G05C0G0T5") + self.assertEqual( + "AAAAActgAAAAAcgtAAAAA", + a.get_reference_sequence()) + + a.cigarstring = "21M" + a.query_sequence = "A" * 21 + a.set_tag('MD', "5CTG5CGT5") + self.assertEqual( + "AAAAActgAAAAAcgtAAAAA", + a.get_reference_sequence()) + + a.cigarstring = "11M" + a.query_sequence = "A" * 11 + a.set_tag('MD', "CTG5CGT") + self.assertEqual( + "ctgAAAAAcgt", + a.get_reference_sequence()) + + def testMDTagInsertions(self): + a = self.build_read() + + # insertions are silent in the reference sequence + a.cigarstring = "5M1I5M" + a.query_sequence = "A" * 5 + "C" + "A" * 5 + a.set_tag('MD', "10") + self.assertEqual( + a.get_reference_sequence(), + "A" * 10) + + a.cigarstring = "1I10M" + a.query_sequence = "C" * 1 + "A" * 10 + self.assertEqual( + a.get_reference_sequence(), + "A" * 10) + + a.cigarstring = "10M1I" + a.query_sequence = "A" * 10 + "C" * 1 + self.assertEqual( + a.get_reference_sequence(), + "A" * 10) + + def testMDTagDeletions(self): + a = self.build_read() + + a.cigarstring = "5M1D5M" + a.query_sequence = "A" * 10 + a.set_tag('MD', "5^C5") + self.assertEqual( + "A" * 5 + "C" + "A" * 5, + a.get_reference_sequence()) + + a.cigarstring = "5M3D5M" + a.query_sequence = "A" * 10 + a.set_tag('MD', "5^CCC5") + self.assertEqual( + "A" * 5 + "C" * 3 + "A" * 5, + a.get_reference_sequence()) + + def testMDTagRefSkipping(self): + a = self.build_read() + + a.cigarstring = "5M1N5M" + a.query_sequence = "A" * 10 + a.set_tag('MD', "10") + self.assertEqual( + "A" * 10, + a.get_reference_sequence()) + + a.cigarstring = "5M3N5M" + a.query_sequence = "A" * 10 + a.set_tag('MD', "10") + self.assertEqual( + "A" * 10, + a.get_reference_sequence()) + + def testMDTagSoftClipping(self): + a = self.build_read() + + # softclipping + a.cigarstring = "5S5M1D5M5S" + a.query_sequence = "G" * 5 + "A" * 10 + "G" * 5 + a.set_tag('MD', "5^C5") + self.assertEqual( + "A" * 5 + "C" + "A" * 5, + a.get_reference_sequence()) + + # all together + a.cigarstring = "5S5M1D5M1I5M5S" + a.query_sequence = "G" * 5 + "A" * 16 + "G" * 5 + a.set_tag('MD', "2C2^T10") + self.assertEqual( + "AAcAATAAAAAAAAAA", + a.get_reference_sequence()) + + def testMDTagComplex(self): + a = self.build_read() + + a.cigarstring = "5S5M1I2D5M5S" + a.query_sequence = "G" * 5 + "A" * 11 + "G" * 5 + a.set_tag('MD', "2C2^TC5") + self.assertEqual( + "AAcAATCAAAAA", + a.get_reference_sequence()) + + a.cigarstring = "5S5M2D1I5M5S" + a.query_sequence = "G" * 5 + "A" * 11 + "G" * 5 + a.set_tag('MD', "2C2^TC5") + self.assertEqual( + "AAcAATCAAAAA", + a.get_reference_sequence()) + + # insertion in reference overlapping deletion in reference + # read: AACCCCA---AAA + # ref: AA----AGGGAAA + a.cigarstring = "2M4I1M3D3M" + a.set_tag("MD", "3^GGG3") + a.query_sequence = "AACCCCAAAA" + self.assertEqual( + "AAAGGGAAA", + a.get_reference_sequence()) + + a.cigarstring = "5M2D2I2M" + a.set_tag("MD", "4C^TT2") + a.query_sequence = "A" * 9 + self.assertEqual( + "AAAAcTTAA", + a.get_reference_sequence()) + + def testArrayTags(self): + + r = self.build_read() + + def c(r, l): + r.tags = [('ZM', l)] + self.assertEqual(list(r.opt("ZM")), list(l)) + + # signed integers + c(r, (-1, 1)) + c(r, (-1, 100)) + c(r, (-1, 200)) + c(r, (-1, 1000)) + c(r, (-1, 30000)) + c(r, (-1, 50000)) + c(r, (1, -1)) + c(r, (1, -100)) + c(r, (1, -200)) + c(r, (1, -1000)) + c(r, (1, -30000)) + c(r, (1, -50000)) + + # unsigned integers + c(r, (1, 100)) + c(r, (1, 1000)) + c(r, (1, 10000)) + c(r, (1, 100000)) + + # floats + c(r, (1.0, 100.0)) + + def testLongTags(self): + '''see issue 115''' + + r = self.build_read() + rg = 'HS2000-899_199.L3' + tags = [('XC', 85), ('XT', 'M'), ('NM', 5), + ('SM', 29), ('AM', 29), ('XM', 1), + ('XO', 1), ('XG', 4), ('MD', '37^ACCC29T18'), + ('XA', '5,+11707,36M1I48M,2;21,-48119779,46M1I38M,2;hs37d5,-10060835,40M1D45M,3;5,+11508,36M1I48M,3;hs37d5,+6743812,36M1I48M,3;19,-59118894,46M1I38M,3;4,-191044002,6M1I78M,3;')] # noqa + + r.tags = tags + r.tags += [("RG", rg)] * 100 + tags += [("RG", rg)] * 100 + + self.assertEqual(tags, r.tags) + + def testNegativeIntegers(self): + x = -2 + aligned_read = self.build_read() + aligned_read.tags = [("XD", int(x))] + self.assertEqual(aligned_read.opt('XD'), x) + # print (aligned_read.tags) + + def testNegativeIntegersWrittenToFile(self): + r = self.build_read() + x = -2 + r.tags = [("XD", x)] + with get_temp_context("negative_integers.bam") as fn: + with pysam.AlignmentFile(fn, + "wb", + referencenames=("chr1",), + referencelengths=(1000,)) as outf: + outf.write(r) + with pysam.AlignmentFile(fn) as inf: + r = next(inf) + self.assertEqual(r.tags, [("XD", x)]) + + +class TestCopy(ReadTest): + + def testCopy(self): + a = self.build_read() + b = copy.copy(a) + # check if a and be are the same + self.assertEqual(a, b) + + # check if they map to different objects + a.query_name = 'ReadA' + b.query_name = 'ReadB' + self.assertEqual(a.query_name, 'ReadA') + self.assertEqual(b.query_name, 'ReadB') + + def testDeepCopy(self): + a = self.build_read() + b = copy.deepcopy(a) + # check if a and be are the same + self.assertEqual(a, b) + + # check if they map to different objects + a.query_name = 'ReadA' + b.query_name = 'ReadB' + self.assertEqual(a.query_name, 'ReadA') + self.assertEqual(b.query_name, 'ReadB') + + +class TestSetTagGetTag(ReadTest): + + def check_tag(self, tag, value, value_type, alt_value_type=None): + a = self.build_read() + a.set_tag(tag, value, value_type=value_type) + v, t = a.get_tag(tag, with_value_type=True) + self.assertEqual(v, value) + + if alt_value_type: + self.assertEqual(t, alt_value_type) + else: + self.assertEqual(t, value_type) + + def test_set_tag_with_A(self): + self.check_tag('TT', "x", value_type="A") + + def test_set_tag_with_a(self): + self.check_tag('TT', "x", value_type="a", alt_value_type="A") + + def test_set_tag_with_C(self): + self.check_tag('TT', 12, value_type="C") + + def test_set_tag_with_c(self): + self.check_tag('TT', 12, value_type="c") + + def test_set_tag_with_S(self): + self.check_tag('TT', 12, value_type="S") + + def test_set_tag_with_s(self): + self.check_tag('TT', 12, value_type="s") + + def test_set_tag_with_I(self): + self.check_tag('TT', 12, value_type="I") + + def test_set_tag_with_i(self): + self.check_tag('TT', 12, value_type="i") + + def test_set_tag_with_f(self): + self.check_tag('TT', 2.5, value_type="f") + + def test_set_tag_with_d(self): + self.check_tag('TT', 2.5, value_type="d") + + def test_set_tag_with_H(self): + self.check_tag('TT', "AE12", value_type="H") + + def test_set_tag_with_automated_type_detection(self): + self.check_tag('TT', -(1 << 7), value_type=None, alt_value_type="c") + self.check_tag('TT', -(1 << 7) - 1, + value_type=None, alt_value_type="s") + self.check_tag('TT', -(1 << 15), value_type=None, alt_value_type="s") + self.check_tag('TT', -(1 << 15) - 1, + value_type=None, alt_value_type="i") + self.check_tag('TT', -(1 << 31), value_type=None, alt_value_type="i") + self.assertRaises( + ValueError, + self.check_tag, + 'TT', + -(1 << 31) - 1, + value_type=None, + alt_value_type="i") + + self.check_tag('TT', (1 << 8) - 1, value_type=None, alt_value_type="C") + self.check_tag('TT', (1 << 8), value_type=None, alt_value_type="S") + self.check_tag('TT', (1 << 16) - 1, + value_type=None, alt_value_type="S") + self.check_tag('TT', (1 << 16), value_type=None, alt_value_type="I") + self.check_tag('TT', (1 << 32) - 1, + value_type=None, alt_value_type="I") + self.assertRaises( + ValueError, + self.check_tag, + 'TT', + (1 << 32), + value_type=None, + alt_value_type="I") + + +class TestSetTagsGetTag(TestSetTagGetTag): + + def check_tag(self, tag, value, value_type, alt_value_type=None): + a = self.build_read() + a.set_tags([(tag, value, value_type)]) + v, t = a.get_tag(tag, with_value_type=True) + if alt_value_type: + self.assertEqual(t, alt_value_type) + else: + self.assertEqual(t, value_type) + self.assertEqual(v, value) + + +class TestEnums(unittest.TestCase): + + def test_cigar_enums_are_defined(self): + self.assertEqual(pysam.CMATCH, 0) + self.assertEqual(pysam.CINS, 1) + self.assertEqual(pysam.CDEL, 2) + self.assertEqual(pysam.CREF_SKIP, 3) + self.assertEqual(pysam.CSOFT_CLIP, 4) + self.assertEqual(pysam.CHARD_CLIP, 5) + self.assertEqual(pysam.CPAD, 6) + self.assertEqual(pysam.CEQUAL, 7) + self.assertEqual(pysam.CDIFF, 8) + self.assertEqual(pysam.CBACK, 9) + + def test_sam_flags_are_defined(self): + self.assertEqual(pysam.FPAIRED, 1) + self.assertEqual(pysam.FPROPER_PAIR, 2) + self.assertEqual(pysam.FUNMAP, 4) + self.assertEqual(pysam.FMUNMAP, 8) + self.assertEqual(pysam.FREVERSE, 16) + self.assertEqual(pysam.FMREVERSE, 32) + self.assertEqual(pysam.FREAD1, 64) + self.assertEqual(pysam.FREAD2, 128) + self.assertEqual(pysam.FSECONDARY, 256) + self.assertEqual(pysam.FQCFAIL, 512) + self.assertEqual(pysam.FDUP, 1024) + self.assertEqual(pysam.FSUPPLEMENTARY, 2048) + + +class TestBuildingReadsWithoutHeader(unittest.TestCase): + + def build_read(self): + '''build an example read, but without header information.''' + + a = pysam.AlignedSegment() + a.query_name = "read_12345" + a.query_sequence = "ATGC" * 10 + a.flag = 0 + a.reference_id = -1 + a.reference_start = 20 + a.mapping_quality = 20 + a.cigartuples = ((0, 10), (2, 1), (0, 9), (1, 1), (0, 20)) + a.next_reference_id = 0 + a.next_reference_start = 200 + a.template_length = 167 + a.query_qualities = pysam.qualitystring_to_array("1234") * 10 + # todo: create tags + return a + + def test_read_can_be_constructed_without_header(self): + read = self.build_read() + self.assertEqual(read.query_name, "read_12345") + + def test_reference_id_can_be_set(self): + read = self.build_read() + read.reference_id = 2 + self.assertEqual(read.reference_id, 2) + + def test_reference_name_is_not_available(self): + read = self.build_read() + self.assertRaises( + ValueError, + setattr, + read, + "reference_name", + "chr2") + + def test_read_can_be_written_to_file(self): + tmpfilename = get_temp_filename(".bam") + with pysam.AlignmentFile(tmpfilename, "wb", + reference_names=["chr1", "chr2", "chr3"], + reference_lengths=[1000, 2000, 3000]) as outf: + read = self.build_read() + read.reference_id = 2 + outf.write(read) + + stdout = pysam.samtools.view(tmpfilename) + chromosome = stdout.split("\t")[2] + self.assertEqual(chromosome, "chr3") + os.unlink(tmpfilename) + + +class TestForwardStrandValues(ReadTest): + + def test_sequence_is_complemented(self): + a = self.build_read() + a.is_reverse = False + fwd_seq = a.query_sequence + + rev_seq = fwd_seq.translate(maketrans("ACGTacgtNnXx", "TGCAtgcaNnXx"))[::-1] + self.assertEqual(fwd_seq, a.get_forward_sequence()) + a.is_reverse = True + self.assertEqual(fwd_seq, a.query_sequence) + self.assertEqual(rev_seq, a.get_forward_sequence()) + + def test_qualities_are_complemented(self): + a = self.build_read() + a.is_reverse = False + fwd_qual = a.query_qualities + rev_qual = fwd_qual[::-1] + self.assertEqual(fwd_qual, a.get_forward_qualities()) + a.is_reverse = True + self.assertEqual(fwd_qual, a.query_qualities) + self.assertEqual(rev_qual, a.get_forward_qualities()) + + +class TestExportImport(ReadTest): + + def test_string_export(self): + a = self.build_read() + self.assertEqual(a.to_string(), + "read_12345\t0\tchr1\t21\t20\t10M1D9M1I20M\t=\t201\t167\t" + "ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC\t1234123412341234123412341234123412341234") + + def test_string_export_import_without_tags(self): + a = self.build_read() + a.tags = [] + b = pysam.AlignedSegment.fromstring(a.to_string(), a.header) + self.assertEqual(a, b) + + def test_string_export_import_with_tags(self): + a = self.build_read() + a.tags = [("XD", 12), ("RF", "abc")] + b = pysam.AlignedSegment.fromstring(a.to_string(), a.header) + self.assertEqual(a, b) + + def test_to_string_without_alignment_file(self): + with open(os.path.join(BAM_DATADIR, "ex2.sam")) as samf: + reference = [x[:-1] for x in samf if not x.startswith("@")] + + with pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "ex2.bam"), "r") as pysamf: + for s, p in zip(reference, pysamf): + self.assertEqual(s, p.to_string()) + + def test_dict_export(self): + a = self.build_read() + a.tags = [("XD", 12), ("RF", "abc")] + + self.assertEqual( + a.to_dict(), + json.loads( + '{"name": "read_12345", "flag": "0", "ref_name": "chr1", "ref_pos": "21", ' + '"map_quality": "20", "cigar": "10M1D9M1I20M", "next_ref_name": "=", ' + '"next_ref_pos": "201", "length": "167", ' + '"seq": "ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC", ' + '"qual": "1234123412341234123412341234123412341234", "tags": ["XD:i:12", "RF:Z:abc"]}')) + + def test_string_export_import_without_tags(self): + a = self.build_read() + a.tags = [] + b = pysam.AlignedSegment.from_dict(a.to_dict(), a.header) + self.assertEqual(a, b) + + def test_string_export_import_with_tags(self): + a = self.build_read() + a.tags = [("XD", 12), ("RF", "abc")] + b = pysam.AlignedSegment.from_dict(a.to_dict(), a.header) + self.assertEqual(a, b) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/AlignmentFileFetchTestUtils.py b/tests/AlignmentFileFetchTestUtils.py new file mode 100644 index 0000000..100b405 --- /dev/null +++ b/tests/AlignmentFileFetchTestUtils.py @@ -0,0 +1,86 @@ +import os +import subprocess +import pysam + +from TestUtils import BAM_DATADIR, force_str + +def build_fetch_with_samtoolsshell(fn): + retval = os.popen("samtools view {} 2> /dev/null | wc -l".format(fn)).read() + return int(retval.strip()) + + +def build_fetch_with_samtoolspipe(fn): + FNULL = open(os.devnull, 'w') + with subprocess.Popen(["samtools", "view", fn], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=FNULL) as proc: + return len(proc.stdout.readlines()) + + +def build_fetch_with_pysam(*args, **kwargs): + with pysam.AlignmentFile(*args, **kwargs) as inf: + return len(list(inf.fetch())) + + +def build_query_sequences_with_samtoolsshell(fn): + retval = os.popen("samtools view {} 2> /dev/null | cut -f 11".format(fn)).read() + return force_str(retval).splitlines() + + +def build_query_sequences_with_samtoolspipe(fn): + FNULL = open(os.devnull, 'w') + with subprocess.Popen(["samtools", "view", fn], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=FNULL) as proc: + data = [force_str(x).split()[10] for x in proc.stdout.readlines()] + return data + + +def build_query_sequences_with_pysam(*args, **kwargs): + with pysam.AlignmentFile(*args, **kwargs) as inf: + data = [x.query_sequence for x in inf] + return data + + +def build_query_qualities_with_pysam(*args, **kwargs): + with pysam.AlignmentFile(*args, **kwargs) as inf: + data = [x.query_qualities for x in inf] + return data + + +def build_query_sequences_flagfilter_with_samtoolsshell(fn): + retval = os.popen("samtools view -f 2 {} 2> /dev/null | cut -f 11".format(fn)).read() + return force_str(retval).splitlines() + + +def build_query_sequences_flagfilter_with_samtoolspipe(fn): + FNULL = open(os.devnull, 'w') + with subprocess.Popen(["samtools", "view", "-f", "2", fn], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=FNULL) as proc: + data = [force_str(x).split()[10] for x in proc.stdout.readlines()] + return data + +def build_query_sequences_flagfilter_with_pysam(*args, **kwargs): + with pysam.AlignmentFile(*args, **kwargs) as inf: + data = [x.query_sequence for x in inf if x.is_proper_pair] + return data + + +def build_query_sequences_directflagfilter_with_pysam(*args, **kwargs): + with pysam.AlignmentFile(*args, **kwargs) as inf: + data = [x.query_sequence for x in inf if x.flag & 2] + return data + + +def build_aligned_pairs_with_pysam(*args, **kwargs): + matches_only = kwargs.pop("matches_only", False) + with_seq = kwargs.pop("with_seq", False) + with pysam.AlignmentFile(*args, **kwargs) as inf: + data = [x.get_aligned_pairs(matches_only=matches_only, with_seq=with_seq) + for x in inf if not x.is_unmapped] + return data + diff --git a/tests/AlignmentFileFetch_bench.py b/tests/AlignmentFileFetch_bench.py new file mode 100644 index 0000000..bb8ce43 --- /dev/null +++ b/tests/AlignmentFileFetch_bench.py @@ -0,0 +1,98 @@ +"""Benchmarking module for AlignmentFile functionality""" +import os +import pytest + + +from TestUtils import BAM_DATADIR, force_str, flatten_nested_list +from AlignmentFileFetchTestUtils import * + + +def test_build_fetch_from_bam_with_samtoolsshell(benchmark): + result = benchmark(build_fetch_with_samtoolsshell, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert result == 3270 + + +def test_build_fetch_from_bam_with_samtoolspipe(benchmark): + result = benchmark(build_fetch_with_samtoolspipe, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert result == 3270 + + +def test_build_fetch_from_bam_with_pysam(benchmark): + result = benchmark(build_fetch_with_pysam, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert result == 3270 + + +def test_build_query_sequences_from_bam_with_samtoolsshell(benchmark): + result = benchmark(build_query_sequences_with_samtoolsshell, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert len(result) == 3270 + + +def test_build_query_sequences_from_bam_with_samtoolspipe(benchmark): + result = benchmark(build_query_sequences_with_samtoolspipe, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert len(result) == 3270 + + +def test_build_query_sequences_from_bam_with_pysam(benchmark): + result = benchmark(build_query_sequences_with_pysam, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert len(result) == 3270 + + +def test_build_query_qualities_from_bam_with_pysam(benchmark): + result = benchmark(build_query_qualities_with_pysam, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert len(result) == 3270 + + +def test_build_query_sequences_from_bam_flagfilter_with_samtoolsshell(benchmark): + result = benchmark(build_query_sequences_flagfilter_with_samtoolsshell, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert len(result) == 3124 + + +def test_build_query_sequences_from_bam_flagfilter_with_samtoolspipe(benchmark): + result = benchmark(build_query_sequences_flagfilter_with_samtoolspipe, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert len(result) == 3124 + + +def test_build_query_sequences_from_bam_flagfilter_with_pysam(benchmark): + result = benchmark(build_query_sequences_flagfilter_with_pysam, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert len(result) == 3124 + + +def test_build_query_sequences_from_bam_directflagfilter_with_pysam(benchmark): + result = benchmark(build_query_sequences_flagfilter_with_pysam, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert len(result) == 3124 + + +@pytest.mark.aligned_pairs +def test_build_aligned_pairs_default_with_pysam(benchmark): + result = benchmark(build_aligned_pairs_with_pysam, + os.path.join(BAM_DATADIR, "with_md.bam")) + assert len(result) == 3235 + + +@pytest.mark.aligned_pairs +def test_build_aligned_pairs_matchesonly_with_pysam(benchmark): + result = benchmark(build_aligned_pairs_with_pysam, + os.path.join(BAM_DATADIR, "with_md.bam"), + matches_only=True) + assert len(result) == 3235 + + +@pytest.mark.aligned_pairs +def test_build_aligned_pairs_withseq_with_pysam(benchmark): + result = benchmark(build_aligned_pairs_with_pysam, + os.path.join(BAM_DATADIR, "with_md.bam"), + with_seq=True) + assert len(result) == 3235 + + diff --git a/tests/AlignmentFileHeader_test.py b/tests/AlignmentFileHeader_test.py new file mode 100644 index 0000000..1cdbb69 --- /dev/null +++ b/tests/AlignmentFileHeader_test.py @@ -0,0 +1,325 @@ +#!/usr/bin/env python +'''unit testing code for pysam. + +Execute in the :file:`tests` directory as it requires the Makefile +and data files located there. +''' + +import unittest +import os +import shutil +import sys +import re +import copy +import collections +from collections import OrderedDict as odict +import subprocess +import logging +import array +if sys.version_info.major >= 3: + from io import StringIO +else: + from StringIO import StringIO + +from functools import partial + +import pysam +import pysam.samtools +from TestUtils import checkBinaryEqual, checkURL, \ + check_samtools_view_equal, checkFieldEqual, force_str, \ + get_temp_filename, BAM_DATADIR + + +class TestHeaderConstruction(unittest.TestCase): + """testing header construction.""" + + header_dict = odict( + [('SQ', [odict([('LN', 1575), ('SN', 'chr1'), ('AH', 'chr1:5000000-5010000')]), + odict([('LN', 1584), ('SN', 'chr2'), ('AH', '*')])]), + ('RG', [odict([('LB', 'SC_1'), ('ID', 'L1'), ('SM', 'NA12891'), + ('PU', 'SC_1_10'), ("CN", "name:with:colon")]), + odict([('LB', 'SC_2'), ('ID', 'L2'), ('SM', 'NA12891'), + ('PU', 'SC_2_12'), ("CN", "name:with:colon")])]), + ('PG', [odict([('ID', 'P1'), ('VN', '1.0')]), + odict([('ID', 'P2'), ('VN', '1.1')])]), + ('HD', odict([('VN', '1.0')])), + ('CO', ['this is a comment', 'this is another comment']), + ]) + + header_text = ("@HD\tVN:1.0\n" + "@SQ\tSN:chr1\tLN:1575\tAH:chr1:5000000-5010000\n" + "@SQ\tSN:chr2\tLN:1584\tAH:*\n" + "@RG\tID:L1\tPU:SC_1_10\tLB:SC_1\tSM:NA12891\tCN:name:with:colon\n" + "@RG\tID:L2\tPU:SC_2_12\tLB:SC_2\tSM:NA12891\tCN:name:with:colon\n" + "@PG\tID:P1\tVN:1.0\n" + "@PG\tID:P2\tVN:1.1\n" + "@CO\tthis is a comment\n" + "@CO\tthis is another comment\n") + + + header_from_references = odict( + [('SQ', [odict([('LN', 1575), ('SN', 'chr1')]), + odict([('LN', 1584), ('SN', 'chr2')])]), + ('RG', [odict([('LB', 'SC_1'), ('ID', 'L1'), ('SM', 'NA12891'), + ('PU', 'SC_1_10'), ("CN", "name:with:colon")]), + odict([('LB', 'SC_2'), ('ID', 'L2'), ('SM', 'NA12891'), + ('PU', 'SC_2_12'), ("CN", "name:with:colon")])]), + ('PG', [odict([('ID', 'P1'), ('VN', '1.0')]), + odict([('ID', 'P2'), ('VN', '1.1')])]), + ('HD', odict([('VN', '1.0')])), + ('CO', ['this is a comment', 'this is another comment']), + ]) + + header_without_text = odict( + [('SQ', [odict([('LN', 1575), ('SN', 'chr1')]), + odict([('LN', 1584), ('SN', 'chr2')])]), + ]) + + def compare_headers(self, test_header, ref_header=None): + '''compare two headers a and b.''' + test_header_dict = test_header.as_dict() + if ref_header is None: + ref_header = self.header_dict + + for ak, av in test_header_dict.items(): + self.assertTrue(ak in self.header_dict, "key '%s' not in '%s' " % (ak, ref_header)) + self.assertEqual(av, ref_header[ak]) + for ak, av in ref_header.items(): + self.assertTrue(ak in test_header_dict, "key '%s' not in '%s' " % (ak, test_header_dict)) + self.assertEqual(av, test_header_dict[ak]) + + def check_name_mapping(self, test_header): + for x, y in enumerate(("chr1", "chr2")): + tid = test_header.get_tid(y) + ref = test_header.get_reference_name(x) + self.assertEqual(tid, x) + self.assertEqual(ref, y) + + self.assertEqual(test_header.get_tid("chr?"), -1) + self.assertRaises(ValueError, test_header.get_reference_name, 2) + + def test_header_constructed_from_dict(self): + header = pysam.AlignmentHeader.from_dict(self.header_dict) + self.compare_headers(header) + self.check_name_mapping(header) + + def test_header_constructed_from_text(self): + header = pysam.AlignmentHeader.from_text(self.header_text) + self.compare_headers(header) + self.check_name_mapping(header) + + def test_header_constructed_from_header(self): + header = pysam.AlignmentHeader.from_text(self.header_text) + self.compare_headers(header.copy()) + self.check_name_mapping(header) + + def test_header_constructed_from_references(self): + text = re.sub("@SQ[^\n]+\n", "", self.header_text) + assert "@SQ" not in text + header = pysam.AlignmentHeader.from_references( + reference_names=["chr1", "chr2"], + reference_lengths=[1575, 1584], + text=text) + self.compare_headers(header, self.header_from_references) + self.check_name_mapping(header) + + def test_header_constructed_from_references_without_text(self): + header = pysam.AlignmentHeader.from_references( + reference_names=["chr1", "chr2"], + reference_lengths=[1575, 1584]) + self.compare_headers(header, self.header_without_text) + self.check_name_mapping(header) + + +class TestHeaderSAM(unittest.TestCase): + """testing header manipulation""" + + header = {'SQ': [{'LN': 1575, 'SN': 'chr1', 'AH': 'chr1:5000000-5010000'}, + {'LN': 1584, 'SN': 'chr2', 'AH': '*'}], + 'RG': [{'LB': 'SC_1', 'ID': 'L1', 'SM': 'NA12891', + 'PU': 'SC_1_10', "CN": "name:with:colon"}, + {'LB': 'SC_2', 'ID': 'L2', 'SM': 'NA12891', + 'PU': 'SC_2_12', "CN": "name:with:colon"}], + 'PG': [{'ID': 'P1', 'VN': '1.0'}, {'ID': 'P2', 'VN': '1.1'}], + 'HD': {'VN': '1.0'}, + 'CO': ['this is a comment', 'this is another comment'], + } + + def compare_headers(self, a, b): + '''compare two headers a and b.''' + for ak, av in a.items(): + self.assertTrue(ak in b, "key '%s' not in '%s' " % (ak, b)) + self.assertEqual(av, b[ak]) + + def setUp(self): + self.samfile = pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "ex3.sam"), + "r") + + def test_header_content_is_as_expected(self): + self.compare_headers(self.header, self.samfile.header.to_dict()) + self.compare_headers(self.samfile.header.to_dict(), self.header) + + def test_text_access_works(self): + self.assertEqual(self.samfile.text, self.samfile.header.__str__()) + + def test_name_mapping(self): + for x, y in enumerate(("chr1", "chr2")): + tid = self.samfile.gettid(y) + ref = self.samfile.getrname(x) + self.assertEqual(tid, x) + self.assertEqual(ref, y) + + self.assertEqual(self.samfile.gettid("chr?"), -1) + self.assertRaises(ValueError, self.samfile.getrname, 2) + + def test_dictionary_access_works(self): + for key in self.header.keys(): + self.compare_headers({key: self.header[key]}, + {key: self.samfile.header[key]}) + + def test_dictionary_setting_raises_error(self): + self.assertRaises(TypeError, + self.samfile.header.__setitem__, + "CO", + ["This is a final comment"]) + + def test_dictionary_len_works(self): + self.assertEqual(len(self.header), len(self.samfile.header)) + + def test_dictionary_keys_works(self): + # sort for py2.7 + self.assertEqual(sorted(self.header.keys()), + sorted(self.samfile.header.keys())) + + def test_dictionary_values_works(self): + self.assertEqual(len(self.header.values()), len(self.samfile.header.values())) + + def test_dictionary_get_works(self): + self.assertEqual(self.header.get("HD"), {'VN': '1.0'}) + self.assertEqual(self.header.get("UK", "xyz"), "xyz") + self.assertEqual(self.header.get("UK"), None) + + def test_dictionary_contains_works(self): + self.assertTrue("HD" in self.header) + self.assertFalse("UK" in self.header) + + def tearDown(self): + self.samfile.close() + + +class TestHeaderBAM(TestHeaderSAM): + + def setUp(self): + self.samfile = pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "ex3.bam"), + "rb") + + +class TestHeaderCRAM(TestHeaderSAM): + + def setUp(self): + self.samfile = pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "ex3.cram"), + "rc") + + def compare_headers(self, a, b): + '''compare two headers a and b.''' + def _strip(dd): + for x in dd: + for y in ("M5", "UR"): + if y in x: + del x[y] + for ak, av in a.items(): + _strip(av) + self.assertTrue(ak in b, "key '%s' not in '%s' " % (ak, b)) + _strip(b[ak]) + + self.assertEqual(av, b[ak]) + + +class TestHeaderFromRefs(unittest.TestCase): + '''see issue 144 + + reference names need to be converted to string for python 3 + ''' + + # def testHeader( self ): + # refs = ['chr1', 'chr2'] + # tmpfile = "tmp_%i" % id(self) + # s = pysam.AlignmentFile(tmpfile, 'wb', + # referencenames=refs, + # referencelengths=[100]*len(refs)) + # s.close() + + # self.assertTrue( checkBinaryEqual( 'issue144.bam', tmpfile ), + # 'bam files differ') + # os.unlink( tmpfile ) + + + +class TestHeaderWriteRead(unittest.TestCase): + header = {'SQ': [{'LN': 1575, 'SN': 'chr1'}, + {'LN': 1584, 'SN': 'chr2'}], + 'RG': [{'LB': 'SC_1', 'ID': 'L1', 'SM': 'NA12891', + 'PU': 'SC_1_10', "CN": "name:with:colon"}, + {'LB': 'SC_2', 'ID': 'L2', 'SM': 'NA12891', + 'PU': 'SC_2_12', "CN": "name:with:colon"}], + 'PG': [{'ID': 'P1', 'VN': '1.0', 'CL': 'tool'}, + {'ID': 'P2', 'VN': '1.1', 'CL': 'tool with in option -R a\tb', + 'PP': 'P1'}], + 'HD': {'VN': '1.0'}, + 'CO': ['this is a comment', 'this is another comment'], + } + + def compare_headers(self, a, header_b): + '''compare two headers a and b. + + Ignore M5 and UR field as they are set application specific. + ''' + b = header_b.to_dict() + for ak, av in a.items(): + self.assertTrue(ak in b, "key '%s' not in '%s' " % (ak, b)) + self.assertEqual( + len(av), len(b[ak]), + "unequal number of entries for key {}: {} vs {}" + .format(ak, av, b[ak])) + + for row_a, row_b in zip(av, b[ak]): + if isinstance(row_b, dict): + for x in ["M5", "UR"]: + try: + del row_b[x] + except KeyError: + pass + self.assertEqual(row_a, row_b) + + def check_read_write(self, flag_write, header): + + fn = get_temp_filename() + with pysam.AlignmentFile( + fn, + flag_write, + header=header, + reference_filename=os.path.join(BAM_DATADIR, "ex1.fa")) as outf: + a = pysam.AlignedSegment() + a.query_name = "abc" + outf.write(a) + + with pysam.AlignmentFile(fn) as inf: + read_header = inf.header + + os.unlink(fn) + self.compare_headers(header, read_header) + + def test_SAM(self): + self.check_read_write("wh", self.header) + + def test_BAM(self): + self.check_read_write("wb", self.header) + + def test_CRAM(self): + header = copy.copy(self.header) + # for CRAM, \t needs to be quoted: + header['PG'][1]['CL'] = re.sub(r"\t", r"\\\\t", header['PG'][1]['CL']) + self.check_read_write("wc", header) diff --git a/tests/AlignmentFilePileup_bench.py b/tests/AlignmentFilePileup_bench.py new file mode 100644 index 0000000..24a06cb --- /dev/null +++ b/tests/AlignmentFilePileup_bench.py @@ -0,0 +1,147 @@ +"""Benchmarking module for AlignmentFile functionality""" +import os + +from TestUtils import BAM_DATADIR, force_str, flatten_nested_list +from PileupTestUtils import * + + +def test_build_pileup_from_bam_with_samtoolsshell(benchmark): + result = benchmark(build_pileup_with_samtoolsshell, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert result == 2998 + + +def test_build_pileup_from_bam_with_samtoolspipe(benchmark): + result = benchmark(build_pileup_with_samtoolspipe, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert result == 2998 + + +def test_build_pileup_from_bam_with_pysam(benchmark): + result = benchmark(build_pileup_with_pysam, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert result == 2998 + + +def test_build_depth_from_bam_with_samtoolsshell(benchmark): + result = benchmark(build_depth_with_samtoolsshell, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert result == 107241 + + +def test_build_depth_from_bam_with_samtoolspipe(benchmark): + result = benchmark(build_depth_with_samtoolspipe, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert sum(result) == 107241 + + +def test_build_depth_from_bam_with_pysam(benchmark): + result = benchmark(build_depth_with_pysam, + os.path.join(BAM_DATADIR, "ex2.bam")) + # different value, as samtools filters with a minimum + # base quality of 13 + assert sum(result) == 110015 + + +def test_build_depth_with_filter_from_bam_with_pysam(benchmark): + result = benchmark(build_depth_with_filter_with_pysam, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert sum(result) == 107241 + + +def test_build_query_bases_from_bam_with_samtoolsshell(benchmark): + result = benchmark(build_query_bases_with_samtoolsshell, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert result == 116308 + + +def test_build_query_bases_from_bam_with_samtoolspysam(benchmark): + result = benchmark(build_query_bases_with_samtoolspysam, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert len("".join(flatten_nested_list(result))) == 116308 + + +def test_build_query_bases_from_bam_with_samtoolspipe(benchmark): + result = benchmark(build_query_bases_with_samtoolspipe, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert len("".join(flatten_nested_list(result))) == 116308 + + +def test_build_query_bases_from_bam_with_pysam_pileups(benchmark): + # note that there is no overlap detection here + result = benchmark(build_query_bases_with_pysam_pileups, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert len("".join(flatten_nested_list(result))) == 107241 + + +def test_build_query_bases_from_bam_with_pysam(benchmark): + result = benchmark(build_query_bases_with_pysam, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert len("".join(flatten_nested_list(result))) == 116308 + + +# note that pileups with/without reference sequence will differ due to +# realignment. +def test_build_query_bases_with_reference_from_bam_with_samtoolspipe(benchmark): + result = benchmark(build_query_bases_with_samtoolspipe, + os.path.join(BAM_DATADIR, "ex2.bam"), + "-f", os.path.join(BAM_DATADIR, "ex1.fa")) + assert len("".join(flatten_nested_list(result))) == 115924 + + +def test_build_query_bases_with_reference_from_bam_with_pysam(benchmark): + with pysam.FastaFile(os.path.join(BAM_DATADIR, "ex1.fa")) as fasta: + result = benchmark(build_query_bases_with_pysam, + os.path.join(BAM_DATADIR, "ex2.bam"), + fastafile=fasta) + assert len("".join(flatten_nested_list(result))) == 115924 + + +def test_build_query_bases_with_reference_from_bam_with_samtoolspysam(benchmark): + result = benchmark(build_query_bases_with_samtoolspysam, + os.path.join(BAM_DATADIR, "ex2.bam"), + "-f", os.path.join(BAM_DATADIR, "ex1.fa")) + assert len("".join(flatten_nested_list(result))) == 115924 + + +def test_build_query_qualities_from_bam_with_samtoolspipe(benchmark): + result = benchmark(build_query_qualities_with_samtoolspipe, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert len("".join(result)) == 107241 + + +def test_build_query_qualities_from_bam_with_pysam(benchmark): + result = benchmark(build_query_qualities_with_pysam, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert sum([len(x) for x in result]) == 107241 + + +def test_build_query_names_from_bam_with_pysam(benchmark): + result = benchmark(build_query_names_with_pysam, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert len("".join([x for column in result for x in column])) == 2307343 + + +def test_build_mapping_qualities_from_bam_with_samtoolspipe(benchmark): + result = benchmark(build_mapping_qualities_with_samtoolspipe, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert len("".join(result)) == 107241 + + +def test_build_mapping_qualities_from_bam_with_pysam(benchmark): + result = benchmark(build_mapping_qualities_with_pysam, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert sum([len(x) for x in result]) == 107241 + + +def test_build_query_positions_from_bam_with_samtoolspipe(benchmark): + result = benchmark(build_query_positions_with_samtoolspipe, + os.path.join(BAM_DATADIR, "ex2.bam")) + # positions output by samtools are 1-based + assert sum([sum(x) - len(x) for x in result]) == 1841699 + + +def test_build_query_positions_from_bam_with_pysam(benchmark): + result = benchmark(build_query_positions_with_pysam, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert sum([sum(x) for x in result]) == 1841699 diff --git a/tests/AlignmentFilePileup_test.py b/tests/AlignmentFilePileup_test.py new file mode 100644 index 0000000..1851da8 --- /dev/null +++ b/tests/AlignmentFilePileup_test.py @@ -0,0 +1,384 @@ +"""Benchmarking module for AlignmentFile functionality""" +import os +import re +import unittest +from TestUtils import BAM_DATADIR, IS_PYTHON3, force_str, flatten_nested_list +from PileupTestUtils import * + + +class TestPileupReadSelection(unittest.TestCase): + '''test pileup functionality.''' + + samfilename = os.path.join(BAM_DATADIR, "ex1.bam") + fastafilename = os.path.join(BAM_DATADIR, "ex1.fa") + + def setUp(self): + + self.samfile = pysam.AlignmentFile(self.samfilename) + self.fastafile = pysam.FastaFile(self.fastafilename) + + def tearDown(self): + self.samfile.close() + self.fastafile.close() + + def check_equal(self, references, iterator): + + for x, column in enumerate(iterator): + v = references[x][:-1].split("\t") + self.assertEqual( + len(v), 6, + "expected 6 values, got {}".format(v)) + (contig, pos, reference_base, + read_bases, read_qualities, alignment_mapping_qualities) \ + = v + self.assertEqual(int(pos) - 1, column.reference_pos) + + def test_samtools_stepper(self): + refs = force_str( + pysam.samtools.mpileup( + "-f", self.fastafilename, + self.samfilename)).splitlines(True) + iterator = self.samfile.pileup( + stepper="samtools", + fastafile=self.fastafile) + self.check_equal(refs, iterator) + + def test_all_stepper(self): + refs = force_str( + pysam.samtools.mpileup( + "-f", self.fastafilename, + "-A", "-B", + self.samfilename)).splitlines(True) + + iterator = self.samfile.pileup( + stepper="all", + fastafile=self.fastafile) + self.check_equal(refs, iterator) + + def test_ignore_overlaps(self): + refs = force_str( + pysam.samtools.mpileup( + "-f", self.fastafilename, + "-A", "-B", "-x", + self.samfilename)).splitlines(True) + + iterator = self.samfile.pileup( + stepper="all", + fastafile=self.fastafile, + ignore_overlaps=False) + self.check_equal(refs, iterator) + + def test_samtools_stepper_mapping_quality_threshold(self): + refs = force_str( + pysam.samtools.mpileup( + "-f", self.fastafilename, + "--min-MQ", "15", + self.samfilename)).splitlines(True) + iterator = self.samfile.pileup( + stepper="samtools", + fastafile=self.fastafile, + min_mapping_quality=15) + self.check_equal(refs, iterator) + + def test_samtools_stepper_base_quality_threshold(self): + refs = force_str( + pysam.samtools.mpileup( + "-f", self.fastafilename, + "--min-BQ", "20", + self.samfilename)).splitlines(True) + iterator = self.samfile.pileup( + stepper="samtools", + fastafile=self.fastafile, + min_base_quality=20) + self.check_equal(refs, iterator) + + def test_samtools_stepper_ignore_orphans(self): + refs = force_str( + pysam.samtools.mpileup( + "-f", self.fastafilename, + "--count-orphans", + self.samfilename)).splitlines(True) + iterator = self.samfile.pileup( + stepper="samtools", + fastafile=self.fastafile, + ignore_orphans=False) + self.check_equal(refs, iterator) + + def test_samtools_stepper_redo_baq(self): + refs = force_str( + pysam.samtools.mpileup( + "-f", self.fastafilename, + "--redo-BAQ", + self.samfilename)).splitlines(True) + iterator = self.samfile.pileup( + stepper="samtools", + fastafile=self.fastafile, + redo_baq=True) + self.check_equal(refs, iterator) + + +class TestPileupReadSelectionFastafile(TestPileupReadSelection): + '''test pileup functionality - backwards compatibility''' + + samfilename = os.path.join(BAM_DATADIR, "ex1.bam") + fastafilename = os.path.join(BAM_DATADIR, "ex1.fa") + + def setUp(self): + + self.samfile = pysam.AlignmentFile(self.samfilename) + self.fastafile = pysam.Fastafile(self.fastafilename) + + +class TestPileupQueryPosition(unittest.TestCase): + + filename = "test_query_position.bam" + + def testPileup(self): + last = {} + with pysam.AlignmentFile(os.path.join(BAM_DATADIR, self.filename)) as inf: + for col in inf.pileup(): + for r in col.pileups: + # print r.alignment.query_name + # print r.query_position, r.query_position_or_next, r.is_del + if r.is_del: + self.assertEqual(r.query_position, None) + self.assertEqual(r.query_position_or_next, + last[r.alignment.query_name] + 1) + else: + self.assertNotEqual(r.query_position, None) + last[r.alignment.query_name] = r.query_position + + +class TestPileupObjects(unittest.TestCase): + + def setUp(self): + self.samfile = pysam.AlignmentFile(os.path.join(BAM_DATADIR, "ex1.bam"), + "rb") + + def testPileupColumn(self): + for pcolumn1 in self.samfile.pileup(region="chr1:105-106"): + if pcolumn1.reference_pos == 104: + self.assertEqual( + pcolumn1.reference_id, 0, + "chromosome/target id mismatch in position 1: %s != %s" % + (pcolumn1.reference_id, 0)) + self.assertEqual( + pcolumn1.reference_pos, 105 - 1, + "position mismatch in position 1: %s != %s" % + (pcolumn1.reference_pos, 105 - 1)) + self.assertEqual( + pcolumn1.nsegments, 1, + "# reads mismatch in position 1: %s != %s" % + (pcolumn1.nsegments, 1)) + self.assertEqual( + len(pcolumn1.pileups), 1, + "# reads aligned to column mismatch in position 1" + ": %s != %s" % + (len(pcolumn1.pileups), 1)) + + for pcolumn2 in self.samfile.pileup(region="chr2:1480-1481"): + if pcolumn2.reference_pos == 1479: + self.assertEqual( + pcolumn2.reference_id, 1, + "chromosome/target id mismatch in position 1: %s != %s" % + (pcolumn2.reference_id, 1)) + self.assertEqual( + pcolumn2.reference_pos, 1480 - 1, + "position mismatch in position 1: %s != %s" % + (pcolumn2.reference_pos, 1480 - 1)) + self.assertEqual( + pcolumn2.nsegments, 12, + "# reads mismatch in position 1: %s != %s" % + (pcolumn2.nsegments, 12)) + + def tearDown(self): + self.samfile.close() + + def testIteratorOutOfScope(self): + '''test if exception is raised if pileup col is accessed after + iterator is exhausted.''' + + for pileupcol in self.samfile.pileup(): + pass + + self.assertRaises(ValueError, getattr, pileupcol, "pileups") + + +class TestIteratorColumnBAM(unittest.TestCase): + + '''test iterator column against contents of ex4.bam.''' + + # note that samfile contains 1-based coordinates + # 1D means deletion with respect to reference sequence + # + mCoverages = {'chr1': [0] * 20 + [1] * 36 + [0] * (100 - 20 - 35), + 'chr2': [0] * 20 + [1] * 35 + [0] * (100 - 20 - 35), + } + + def setUp(self): + self.samfile = pysam.AlignmentFile(os.path.join(BAM_DATADIR, "ex4.bam"), + "rb") + + def checkRange(self, contig, start=None, end=None, truncate=False): + '''compare results from iterator with those from samtools.''' + # check if the same reads are returned and in the same order + for column in self.samfile.pileup( + contig, start, end, truncate=truncate, min_base_quality=0): + if truncate: + self.assertGreaterEqual(column.reference_pos, start) + self.assertLess(column.reference_pos, end) + thiscov = len(column.pileups) + refcov = self.mCoverages[ + self.samfile.getrname(column.reference_id)][column.reference_pos] + self.assertEqual(thiscov, refcov, + "wrong coverage at pos %s:%i %i should be %i" % ( + self.samfile.getrname(column.reference_id), + column.reference_pos, thiscov, refcov)) + + def testIterateAll(self): + '''check random access per contig''' + self.checkRange(None) + + def testIteratePerContig(self): + '''check random access per contig''' + for contig in self.samfile.references: + self.checkRange(contig) + + def testIterateRanges(self): + '''check random access per range''' + for contig, length in zip( + self.samfile.references, self.samfile.lengths): + for start in range(1, length, 90): + # this includes empty ranges + self.checkRange(contig, start, start + 90) + + def testInverse(self): + '''test the inverse, is point-wise pileup accurate.''' + for contig, refseq in list(self.mCoverages.items()): + refcolumns = sum(refseq) + for pos, refcov in enumerate(refseq): + columns = list(self.samfile.pileup(contig, pos, pos + 1)) + if refcov == 0: + # if no read, no coverage + self.assertEqual( + len(columns), + refcov, + "wrong number of pileup columns returned for position %s:%i, %i should be %i" % ( + contig, pos, + len(columns), refcov)) + elif refcov == 1: + # one read, all columns of the read are returned + self.assertEqual( + len(columns), + refcolumns, + "pileup incomplete at position %i: got %i, expected %i " % + (pos, len(columns), refcolumns)) + + def testIterateTruncate(self): + '''check random access per range''' + for contig, length in zip(self.samfile.references, + self.samfile.lengths): + for start in range(1, length, 90): + # this includes empty ranges + self.checkRange(contig, start, start + 90, truncate=True) + + def tearDown(self): + self.samfile.close() + + +class TestIteratorColumn2(unittest.TestCase): + + '''test iterator column against contents of ex1.bam.''' + + def setUp(self): + self.samfile = pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "ex1.bam"), + "rb") + + def testStart(self): + # print self.samfile.fetch().next().reference_start + # print self.samfile.pileup().next().reference_start + pass + + def testTruncate(self): + '''see issue 107.''' + # note that ranges in regions start from 1 + p = self.samfile.pileup(region='chr1:170:172', truncate=True) + columns = [x.reference_pos for x in p] + self.assertEqual(len(columns), 3) + self.assertEqual(columns, [169, 170, 171]) + + p = self.samfile.pileup('chr1', 169, 172, truncate=True) + columns = [x.reference_pos for x in p] + + self.assertEqual(len(columns), 3) + self.assertEqual(columns, [169, 170, 171]) + + def testAccessOnClosedIterator(self): + '''see issue 131 + + Accessing pileup data after iterator has closed. + ''' + pcolumn = self.samfile.pileup('chr1', 170, 180).__next__() + self.assertRaises(ValueError, getattr, pcolumn, "pileups") + + def testStr(self): + '''test if PileupRead can be printed.''' + iter = self.samfile.pileup('chr1', 170, 180) + pcolumn = iter.__next__() + s = str(pcolumn) + self.assertEqual(len(s.split("\n")), 2) + + +@unittest.skipIf(not IS_PYTHON3, + "tests requires at least python3 for subprocess context manager") +class PileUpColumnTests(unittest.TestCase): + + fn = os.path.join(BAM_DATADIR, "ex2.bam") + fn_fasta = os.path.join(BAM_DATADIR, "ex1.fa") + + def test_pileup_depths_are_equal(self): + samtools_result = build_depth_with_samtoolspipe(self.fn) + pysam_result = build_depth_with_filter_with_pysam(self.fn) + self.assertEqual(pysam_result, samtools_result) + + def test_pileup_query_bases_without_reference_are_equal(self): + samtools_result = build_query_bases_with_samtoolspipe(self.fn) + pysam_result = build_query_bases_with_pysam(self.fn) + self.assertEqual(["".join(x) for x in pysam_result], samtools_result) + + def test_pileup_query_bases_with_reference_are_equal(self): + samtools_result = build_query_bases_with_samtoolspipe(self.fn, "-f", self.fn_fasta) + with pysam.FastaFile(self.fn_fasta) as fasta: + pysam_result = build_query_bases_with_pysam(self.fn, fastafile=fasta, stepper="samtools") + self.assertEqual(["".join(x) for x in pysam_result], samtools_result) + + def test_pileup_query_qualities_are_equal(self): + samtools_result = build_query_qualities_with_samtoolspipe(self.fn) + pysam_result = build_query_qualities_with_pysam(self.fn) + pysam_result = [ + [chr(min(126, x + 33)) for x in l] for l in pysam_result] + self.assertEqual("".join(flatten_nested_list(pysam_result)), + "".join(flatten_nested_list(samtools_result))) + + def test_pileup_mapping_qualities_are_equal(self): + samtools_result = build_mapping_qualities_with_samtoolspipe(self.fn) + pysam_result = build_mapping_qualities_with_pysam(self.fn) + # convert to chars + pysam_result = [ + [chr(min(126, x + 33)) for x in l] for l in pysam_result] + + self.assertEqual("".join(flatten_nested_list(pysam_result)), + "".join(flatten_nested_list(samtools_result))) + + def test_pileup_query_qualities_from_pileups_are_equal(self): + samtools_result = build_query_qualities_with_samtoolspipe(self.fn) + pysam_result = build_query_qualities_with_pysam_pileups(self.fn) + pysam_result = [ + "".join([chr(min(126, x + 33)) for x in l]) for l in pysam_result] + + self.assertEqual(pysam_result, samtools_result) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/AlignmentFile_bench.py b/tests/AlignmentFile_bench.py new file mode 100644 index 0000000..275a5fb --- /dev/null +++ b/tests/AlignmentFile_bench.py @@ -0,0 +1,60 @@ +"""Benchmarking module for AlignmentFile functionality""" +import os +import subprocess +import pysam + + +from TestUtils import BAM_DATADIR + + +def count_number_lines_with_samtools(fn): + os.system("samtools view {} | wc -l > /dev/null".format(fn)) + return 3270 + + +def count_number_lines_with_samtoolspipe(fn): + with subprocess.Popen(["samtools", "view", fn], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE) as proc: + return len(proc.stdout.readlines()) + + +def count_number_lines_with_pysam(*args, **kwargs): + with pysam.AlignmentFile(*args, **kwargs) as inf: + return len(list(inf.fetch())) + + +def test_count_number_lines_from_sam_with_samtools(benchmark): + result = benchmark(count_number_lines_with_samtools, + os.path.join(BAM_DATADIR, "ex2.sam")) + assert result == 3270 + + +def test_count_number_lines_from_sam_with_samtoolspipe(benchmark): + result = benchmark(count_number_lines_with_samtoolspipe, + os.path.join(BAM_DATADIR, "ex2.sam")) + assert result == 3270 + + +def test_count_number_lines_from_sam_with_pysam(benchmark): + result = benchmark(count_number_lines_with_pysam, + os.path.join(BAM_DATADIR, "ex2.sam"), "r") + assert result == 3270 + + +def test_count_number_lines_from_bam_with_samtools(benchmark): + result = benchmark(count_number_lines_with_samtools, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert result == 3270 + + +def test_count_number_lines_from_bam_with_samtoolspipe(benchmark): + result = benchmark(count_number_lines_with_samtoolspipe, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert result == 3270 + + +def test_count_number_lines_from_bam_with_pysam(benchmark): + result = benchmark(count_number_lines_with_pysam, + os.path.join(BAM_DATADIR, "ex2.bam")) + assert result == 3270 diff --git a/tests/AlignmentFile_test.py b/tests/AlignmentFile_test.py new file mode 100644 index 0000000..700018c --- /dev/null +++ b/tests/AlignmentFile_test.py @@ -0,0 +1,2356 @@ +#!/usr/bin/env python +'''unit testing code for pysam. + +Execute in the :file:`tests` directory as it requires the Makefile +and data files located there. +''' + +import unittest +import os +import shutil +import sys +import re +import copy +import collections +import subprocess +import logging +import array +if sys.version_info.major >= 3: + from io import StringIO +else: + from StringIO import StringIO + +from functools import partial + +import pysam +import pysam.samtools +from TestUtils import checkBinaryEqual, checkURL, \ + check_samtools_view_equal, checkFieldEqual, force_str, \ + get_temp_filename, BAM_DATADIR + + +################################################## +# +# Detailed test of file contents +# +# Data are read either through file based iterator +# access (BasicTestBAMFromFile) or by calling fetch +# without coordinates (BasicTestBAMFromFetch) +################################################## +class BasicTestBAMFromFetch(unittest.TestCase): + + '''basic first test - detailed testing + if information in file is consistent + with information in AlignedSegment object.''' + + def setUp(self): + self.samfile = pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "ex3.bam"), + "rb") + self.reads = list(self.samfile.fetch()) + + def tearDown(self): + self.samfile.close() + + def testARqname(self): + self.assertEqual(self.reads[0].query_name, + "read_28833_29006_6945") + self.assertEqual(self.reads[1].query_name, + "read_28701_28881_323b") + + def testARflag(self): + self.assertEqual(self.reads[0].flag, 99) + self.assertEqual(self.reads[1].flag, 147) + + def testARrname(self): + self.assertEqual(self.reads[0].reference_id, 0) + self.assertEqual(self.reads[1].reference_id, 1) + + def testARpos(self): + self.assertEqual(self.reads[0].reference_start, 33 - 1) + self.assertEqual(self.reads[1].reference_start, 88 - 1) + + def testARmapq(self): + self.assertEqual(self.reads[0].mapping_quality, 20) + self.assertEqual(self.reads[1].mapping_quality, 30) + + def testARcigar(self): + self.assertEqual(self.reads[0].cigartuples, [(0, 10), (2, 1), (0, 25)]) + self.assertEqual(self.reads[1].cigartuples, [(0, 35)]) + + def testARcigarstring(self): + self.assertEqual(self.reads[0].cigarstring, '10M1D25M') + self.assertEqual(self.reads[1].cigarstring, '35M') + + def testARmrnm(self): + self.assertEqual(self.reads[0].next_reference_id, 0) + self.assertEqual(self.reads[1].next_reference_id, 1) + self.assertEqual(self.reads[0].next_reference_id, 0) + self.assertEqual(self.reads[1].next_reference_id, 1) + + def testARmpos(self): + self.assertEqual(self.reads[0].next_reference_start, 200 - 1) + self.assertEqual(self.reads[1].next_reference_start, 500 - 1) + self.assertEqual(self.reads[0].next_reference_start, 200 - 1) + self.assertEqual(self.reads[1].next_reference_start, 500 - 1) + + def testARQueryLength(self): + self.assertEqual( + self.reads[0].query_length, 35, + "insert size mismatch in read 1: %s != %s" % + (self.reads[0].query_length, 35)) + self.assertEqual( + self.reads[1].query_length, 35, + "insert size mismatch in read 2: %s != %s" % + (self.reads[1].query_length, 35)) + self.assertEqual( + self.reads[0].query_length, 35, + "insert size mismatch in read 1: %s != %s" % + (self.reads[0].query_length, 35)) + self.assertEqual( + self.reads[1].query_length, 35, + "insert size mismatch in read 2: %s != %s" % + (self.reads[1].query_length, 35)) + + def testARseq(self): + self.assertEqual( + self.reads[0].query_sequence, + "AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG") + self.assertEqual( + self.reads[1].query_sequence, + "ACCTATATCTTGGCCTTGGCCGATGCGGCCTTGCA") + self.assertEqual( + self.reads[3].query_sequence, + "AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG") + + def testARqual(self): + self.assertEqual( + pysam.qualities_to_qualitystring(self.reads[0].query_qualities), + "<<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<<") + self.assertEqual( + pysam.qualities_to_qualitystring(self.reads[1].query_qualities), + "<<<<<;<<<<7;:<<<6;<<<<<<<<<<<<7<<<<") + self.assertEqual( + pysam.qualities_to_qualitystring(self.reads[3].query_qualities), + "<<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<<") + + def testARquery(self): + self.assertEqual( + self.reads[0].query_alignment_sequence, + "AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG", + "query mismatch in read 1: %s != %s" % + (self.reads[0].query_alignment_sequence, + "AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG")) + self.assertEqual( + self.reads[1].query_alignment_sequence, + "ACCTATATCTTGGCCTTGGCCGATGCGGCCTTGCA", + "query size mismatch in read 2: %s != %s" % + (self.reads[1].query_alignment_sequence, + "ACCTATATCTTGGCCTTGGCCGATGCGGCCTTGCA")) + self.assertEqual( + self.reads[3].query_alignment_sequence, + "TAGCTAGCTACCTATATCTTGGTCTT", + "query mismatch in read 4: %s != %s" % + (self.reads[3].query_alignment_sequence, + "TAGCTAGCTACCTATATCTTGGTCTT")) + + def testARqqual(self): + self.assertEqual( + pysam.qualities_to_qualitystring( + self.reads[0].query_alignment_qualities), + "<<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<<", + "qquality string mismatch in read 1: %s != %s" % + (pysam.qualities_to_qualitystring(self.reads[0].query_alignment_qualities), + "<<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<<")) + self.assertEqual( + pysam.qualities_to_qualitystring( + self.reads[1].query_alignment_qualities), + "<<<<<;<<<<7;:<<<6;<<<<<<<<<<<<7<<<<", + "qquality string mismatch in read 2: %s != %s" % + (pysam.qualities_to_qualitystring(self.reads[1].query_alignment_qualities), + "<<<<<;<<<<7;:<<<6;<<<<<<<<<<<<7<<<<")) + self.assertEqual( + pysam.qualities_to_qualitystring( + self.reads[3].query_alignment_qualities), + "<<<<<<<<<<<<<<<<<:<9/,&,22", + "qquality string mismatch in read 3: %s != %s" % + (pysam.qualities_to_qualitystring(self.reads[3].query_alignment_qualities), + "<<<<<<<<<<<<<<<<<:<9/,&,22")) + + def testPresentOptionalFields(self): + self.assertEqual( + self.reads[0].opt('NM'), 1, + "optional field mismatch in read 1, NM: %s != %s" % + (self.reads[0].opt('NM'), 1)) + self.assertEqual( + self.reads[0].opt('RG'), 'L1', + "optional field mismatch in read 1, RG: %s != %s" % + (self.reads[0].opt('RG'), 'L1')) + self.assertEqual( + self.reads[1].opt('RG'), 'L2', + "optional field mismatch in read 2, RG: %s != %s" % + (self.reads[1].opt('RG'), 'L2')) + self.assertEqual( + self.reads[1].opt('MF'), 18, + "optional field mismatch in read 2, MF: %s != %s" % + (self.reads[1].opt('MF'), 18)) + + def testPairedBools(self): + self.assertEqual(self.reads[0].is_paired, True, "is paired mismatch in read 1: %s != %s" % ( + self.reads[0].is_paired, True)) + self.assertEqual(self.reads[1].is_paired, True, "is paired mismatch in read 2: %s != %s" % ( + self.reads[1].is_paired, True)) + self.assertEqual(self.reads[0].is_proper_pair, True, "is proper pair mismatch in read 1: %s != %s" % ( + self.reads[0].is_proper_pair, True)) + self.assertEqual(self.reads[1].is_proper_pair, True, "is proper pair mismatch in read 2: %s != %s" % ( + self.reads[1].is_proper_pair, True)) + + def testTags(self): + self.assertEqual(self.reads[0].tags, + [('NM', 1), ('RG', 'L1'), + ('PG', 'P1'), ('XT', 'U')]) + self.assertEqual(self.reads[1].tags, + [('MF', 18), ('RG', 'L2'), + ('PG', 'P2'), ('XT', 'R')]) + + def testOpt(self): + self.assertEqual(self.reads[0].opt("XT"), "U") + self.assertEqual(self.reads[1].opt("XT"), "R") + + +class BasicTestSAMFromFetch(BasicTestBAMFromFetch): + + def setUp(self): + self.samfile = pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "ex3.sam"), + "r") + self.reads = list(self.samfile.fetch()) + + +class BasicTestCRAMFromFetch(BasicTestBAMFromFetch): + + def setUp(self): + self.samfile = pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "ex3.cram"), + "rc") + self.reads = list(self.samfile.fetch()) + + def testTags(self): + self.assertEqual( + sorted(self.reads[0].tags), + sorted([('RG', 'L1'), + ('NM', 22), + ('MD', '0C0T1G1C0C0A1G0^G0C1C1G1A0T2G0G0G0A1C1G1G1A2C0'), + ('PG', 'P1'), + ('XT', 'U'), + ])) + self.assertEqual( + sorted(self.reads[1].tags), + sorted([('RG', 'L2'), + ('NM', 26), + ('MD', + '1G0A0A1G1G0G2C0A0G0A0A0C0T0T0G0A0A0G0A0C0A0A1T2C0T0T1'), + ('MF', 18), + ('PG', 'P2'), + ('XT', 'R')])) + + def testPresentOptionalFields(self): + self.assertEqual( + self.reads[0].opt('NM'), 22, + "optional field mismatch in read 1, NM: %s != %s" % + (self.reads[0].opt('NM'), 22)) + self.assertEqual( + self.reads[0].opt('RG'), 'L1', + "optional field mismatch in read 1, RG: %s != %s" % + (self.reads[0].opt('RG'), 'L1')) + self.assertEqual( + self.reads[1].opt('RG'), 'L2', + "optional field mismatch in read 2, RG: %s != %s" % + (self.reads[1].opt('RG'), 'L2')) + self.assertEqual( + self.reads[1].opt('MF'), 18, + "optional field mismatch in read 2, MF: %s != %s" % + (self.reads[1].opt('MF'), 18)) + + +class BasicTestSAMFromFilename(BasicTestBAMFromFetch): + + def setUp(self): + self.samfile = pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "ex3.sam"), + "r") + self.reads = [r for r in self.samfile] + + +class BasicTestCRAMFromFilename(BasicTestCRAMFromFetch): + + def setUp(self): + self.samfile = pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "ex3.cram"), + "rc") + self.reads = [r for r in self.samfile] + + +class BasicTestBAMFromFilename(BasicTestBAMFromFetch): + + def setUp(self): + self.samfile = pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "ex3.bam"), + "rb") + self.reads = [r for r in self.samfile] + + +class BasicTestBAMFromFile(BasicTestBAMFromFetch): + + def setUp(self): + with open(os.path.join(BAM_DATADIR, "ex3.bam")) as f: + self.samfile = pysam.AlignmentFile( + f, "rb") + self.reads = [r for r in self.samfile] + + +class BasicTestBAMFromFileNo(BasicTestBAMFromFetch): + + def setUp(self): + with open(os.path.join(BAM_DATADIR, "ex3.bam")) as f: + self.samfile = pysam.AlignmentFile( + f.fileno(), "rb") + self.reads = [r for r in self.samfile] + + +class BasicTestSAMFromFile(BasicTestBAMFromFetch): + + def setUp(self): + with open(os.path.join(BAM_DATADIR, "ex3.sam")) as f: + self.samfile = pysam.AlignmentFile( + f, "r") + self.reads = [r for r in self.samfile] + + +class BasicTestSAMFromFileNo(BasicTestBAMFromFetch): + + def setUp(self): + with open(os.path.join(BAM_DATADIR, "ex3.sam")) as f: + self.samfile = pysam.AlignmentFile( + f.fileno(), "r") + self.reads = [r for r in self.samfile] + + +class BasicTestCRAMFromFile(BasicTestCRAMFromFetch): + + def setUp(self): + with open(os.path.join(BAM_DATADIR, "ex3.cram")) as f: + self.samfile = pysam.AlignmentFile(f, "rc") + self.reads = [r for r in self.samfile] + + +class BasicTestCRAMFromFileNo(BasicTestCRAMFromFetch): + + def setUp(self): + with open(os.path.join(BAM_DATADIR, "ex3.cram")) as f: + self.samfile = pysam.AlignmentFile( + f.fileno(), "rc") + self.reads = [r for r in self.samfile] + + +class BasicTestSAMFromStringIO(BasicTestBAMFromFetch): + + def testRaises(self): + statement = "samtools view -h {}".format( + os.path.join(BAM_DATADIR, "ex3.bam")) + stdout = subprocess.check_output(statement.split(" ")) + bam = StringIO() + if sys.version_info.major >= 3: + bam.write(stdout.decode('ascii')) + else: + bam.write(stdout) + bam.seek(0) + self.assertRaises(NotImplementedError, + pysam.AlignmentFile, bam) + # self.reads = [r for r in samfile] + + +################################################## +# +# Test of basic File I/O +# +# * format conversions +# * reading with/without index +# * reading from closed files +# +################################################## +class TestIO(unittest.TestCase): + + '''check if reading samfile and writing a samfile + are consistent.''' + + def checkEcho(self, + input_filename, + reference_filename, + output_filename, + input_mode, + output_mode, + sequence_filename=None, + use_template=True, + checkf=checkBinaryEqual, + **kwargs): + '''iterate through *input_filename* writing to + *output_filename* and comparing the output to + *reference_filename*. + + The files are opened according to the *input_mode* and + *output_mode*. + + If *use_template* is set, the header is copied from infile + using the template mechanism, otherwise target names and + lengths are passed explicitly. + + The *checkf* is used to determine if the files are + equal. + ''' + + with pysam.AlignmentFile( + os.path.join(BAM_DATADIR, input_filename), + input_mode) as infile: + + if "b" in input_mode: + self.assertTrue(infile.is_bam) + self.assertFalse(infile.is_cram) + elif "c" in input_mode: + self.assertFalse(infile.is_bam) + self.assertTrue(infile.is_cram) + else: + self.assertFalse(infile.is_cram) + self.assertFalse(infile.is_bam) + + if use_template: + outfile = pysam.AlignmentFile( + output_filename, + output_mode, + reference_filename=sequence_filename, + template=infile, **kwargs) + else: + outfile = pysam.AlignmentFile( + output_filename, + output_mode, + reference_names=infile.references, + reference_lengths=infile.lengths, + reference_filename=sequence_filename, + add_sq_text=False, + **kwargs) + + iter = infile.fetch() + + for x in iter: + outfile.write(x) + + outfile.close() + + self.assertTrue(checkf( + os.path.join(BAM_DATADIR, reference_filename), + output_filename), + "files %s and %s are not the same" % + (reference_filename, + output_filename)) + + os.unlink(output_filename) + + def testSAM2SAM(self): + self.checkEcho("ex2.sam", + "ex2.sam", + "tmp_ex2.sam", + "r", "wh") + + def testSAM2SAMWithoutHeader(self): + self.checkEcho("ex2.sam", + "ex1.sam", + "tmp_ex2.sam", + "r", "w", + add_sam_header=False) + + def testBAM2BAM(self): + self.checkEcho("ex2.bam", + "ex2.bam", + "tmp_ex2.bam", + "rb", "wb") + + def testCRAM2CRAM(self): + # in some systems different reference sequence paths might be + # embedded in the CRAM files which will result in different headers + # see #542 + self.checkEcho("ex2.cram", + "ex2.cram", + "tmp_ex2.cram", + "rc", "wc", + sequence_filename=os.path.join(BAM_DATADIR, "ex1.fa"), + checkf=partial( + check_samtools_view_equal, + without_header=True)) + + def testSAM2BAM(self): + self.checkEcho("ex2.sam", + "ex2.bam", + "tmp_ex2.bam", + "r", "wb") + + def testBAM2SAM(self): + self.checkEcho("ex2.bam", + "ex2.sam", + "tmp_ex2.sam", + "rb", "wh") + + def testBAM2CRAM(self): + # ignore header (md5 sum) + self.checkEcho("ex2.bam", + "ex2.cram", + "tmp_ex2.cram", + "rb", "wc", + sequence_filename=os.path.join(BAM_DATADIR, "ex1.fa"), + checkf=partial( + check_samtools_view_equal, + without_header=True)) + + def testCRAM2BAM(self): + # ignore header (md5 sum) + self.checkEcho("ex2.cram", + "ex2.bam", + "tmp_ex2.bam", + "rc", "wb", + sequence_filename=os.path.join(BAM_DATADIR, "ex1.fa"), + checkf=partial( + check_samtools_view_equal, + without_header=True)) + + def testSAM2CRAM(self): + self.checkEcho("ex2.sam", + "ex2.cram", + "tmp_ex2.cram", + "r", "wc", + sequence_filename=os.path.join(BAM_DATADIR, "ex1.fa"), + checkf=partial( + check_samtools_view_equal, + without_header=True)) + + def testCRAM2SAM(self): + self.checkEcho("ex2.cram", + "ex2.sam", + "tmp_ex2.sam", + "rc", "wh", + sequence_filename=os.path.join(BAM_DATADIR, "ex1.fa"), + checkf=partial( + check_samtools_view_equal, + without_header=True)) + + # Disabled - should work, files are not binary equal, but are + # non-binary equal: + # diff <(samtools view pysam_ex1.bam) <(samtools view pysam_data/ex1.bam) + # def testReadWriteBamWithTargetNames(self): + # input_filename = "ex1.bam" + # output_filename = "pysam_ex1.bam" + # reference_filename = "ex1.bam" + + # self.checkEcho(input_filename, reference_filename, output_filename, + # "rb", "wb", use_template=False) + + def testReadSamWithoutTargetNames(self): + '''see issue 104.''' + input_filename = os.path.join( + BAM_DATADIR, + "example_unmapped_reads_no_sq.sam") + + # raise exception in default mode + self.assertRaises(ValueError, + pysam.AlignmentFile, + input_filename, + "r") + + # raise exception if no SQ files + self.assertRaises(ValueError, + pysam.AlignmentFile, + input_filename, "r", + check_header=True) + + with pysam.AlignmentFile( + input_filename, + check_header=False, + check_sq=False) as infile: + result = list(infile.fetch(until_eof=True)) + self.assertEqual(2, len(result)) + + def testReadBamWithoutTargetNames(self): + '''see issue 104.''' + input_filename = os.path.join( + BAM_DATADIR, "example_unmapped_reads_no_sq.bam") + + # raise exception in default mode + self.assertRaises(ValueError, + pysam.AlignmentFile, + input_filename, + "r") + + # raise exception if no SQ files + self.assertRaises(ValueError, + pysam.AlignmentFile, + input_filename, + "r", + check_header=True) + + with pysam.AlignmentFile( + input_filename, check_sq=False) as infile: + result = list(infile.fetch(until_eof=True)) + + def test_fail_read_sam_without_header(self): + input_filename = os.path.join(BAM_DATADIR, "ex1.sam") + + self.assertRaises(ValueError, + pysam.AlignmentFile, + input_filename, + "r") + + def test_pass_read_sam_without_header_with_refs(self): + with pysam.AlignmentFile(os.path.join(BAM_DATADIR, "ex1.sam"), + "r", + reference_names=["chr1", "chr2"], + reference_lengths=[1575, 1584]) as samfile: + self.assertEqual(len(list(samfile.fetch(until_eof=True))), 3270) + + def test_pass_read_sam_with_header_without_header_check(self): + with pysam.AlignmentFile(os.path.join(BAM_DATADIR, "ex2.sam"), + "r", check_header=False) as samfile: + self.assertEqual(len(list(samfile.fetch(until_eof=True))), 3270) + + def test_fail_when_reading_unformatted_files(self): + '''test reading from a file that is not bam/sam formatted''' + input_filename = os.path.join(BAM_DATADIR, 'Makefile') + + self.assertRaises(ValueError, + pysam.AlignmentFile, + input_filename, + "rb") + + self.assertRaises(ValueError, + pysam.AlignmentFile, + input_filename, + "r") + + def testBAMWithoutAlignedSegments(self): + '''see issue 117''' + input_filename = os.path.join(BAM_DATADIR, "test_unaligned.bam") + samfile = pysam.AlignmentFile(input_filename, + "rb", + check_sq=False) + samfile.fetch(until_eof=True) + + def testBAMWithShortBAI(self): + '''see issue 116''' + input_filename = os.path.join(BAM_DATADIR, "example_bai.bam") + samfile = pysam.AlignmentFile(input_filename, + "rb", + check_sq=False) + samfile.fetch('chr2') + + def testFetchFromClosedFile(self): + + samfile = pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "ex1.bam"), + "rb") + samfile.close() + self.assertRaises(ValueError, samfile.fetch, 'chr1', 100, 120) + + def testFetchFromClosedFileObject(self): + + f = open(os.path.join(BAM_DATADIR, "ex1.bam")) + samfile = pysam.AlignmentFile(f, "rb") + f.close() + self.assertTrue(f.closed) + # access to Samfile still works + self.checkEcho("ex1.bam", + "ex1.bam", + "tmp_ex1.bam", + "rb", "wb") + + f = open(os.path.join(BAM_DATADIR, "ex1.bam")) + samfile = pysam.AlignmentFile(f, "rb") + self.assertFalse(f.closed) + samfile.close() + # python file needs to be closed separately + self.assertFalse(f.closed) + + def test_accessing_attributes_in_closed_file_raises_errors(self): + '''test that access to a closed samfile raises ValueError.''' + + samfile = pysam.AlignmentFile(os.path.join(BAM_DATADIR, "ex1.bam"), + "rb") + samfile.close() + + self.assertRaises(ValueError, samfile.fetch, 'chr1', 100, 120) + self.assertRaises(ValueError, samfile.pileup, 'chr1', 100, 120) + self.assertRaises(ValueError, samfile.getrname, 0) + # TODO + self.assertRaises(ValueError, samfile.tell) + self.assertRaises(ValueError, samfile.seek, 0) + self.assertRaises(ValueError, getattr, samfile, "nreferences") + self.assertRaises(ValueError, getattr, samfile, "references") + self.assertRaises(ValueError, getattr, samfile, "lengths") + + self.assertEqual(samfile.header, None) + # write on closed file + self.assertEqual(0, samfile.write(None)) + + def test_header_available_after_closing_file(self): + + def load_bam(): + with pysam.AlignmentFile(os.path.join(BAM_DATADIR, "ex1.bam"), "rb") as inf: + header = inf.header + return header + + header = load_bam() + self.assertTrue(header) + self.assertEqual(header.nreferences, 2) + self.assertEqual(header.references, ("chr1", "chr2")) + + def test_reference_name_available_after_closing_file(self): + """read tids can be mapped to references after AlignmentFile has been closed. + + see issue #517""" + + def load_bam(): + with pysam.AlignmentFile(os.path.join(BAM_DATADIR, "ex1.bam"), "rb") as inf: + read = next(inf) + return read + + read = load_bam() + self.assertEqual(read.reference_name, "chr1") + + # TOOD + # def testReadingFromSamFileWithoutHeader(self): + # '''read from samfile without header. + # ''' + # samfile = pysam.AlignmentFile(os.path.join(BAM_DATADIR, "ex7.sam"), + # check_header=False, + # check_sq=False) + # self.assertRaises(NotImplementedError, samfile.__iter__) + + def testReadingFromFileWithoutIndex(self): + '''read from bam file without index.''' + + dest = get_temp_filename("tmp_ex2.bam") + shutil.copyfile(os.path.join(BAM_DATADIR, "ex2.bam"), + dest) + samfile = pysam.AlignmentFile(dest, + "rb") + self.assertRaises(ValueError, samfile.fetch) + self.assertEqual( + len(list(samfile.fetch(until_eof=True))), + 3270) + os.unlink(dest) + + # def testReadingUniversalFileMode(self): + # '''read from samfile without header. + # ''' + + # input_filename = "ex2.sam" + # output_filename = "pysam_ex2.sam" + # reference_filename = "ex1.sam" + + # self.checkEcho(input_filename, + # reference_filename, + # output_filename, + # "rU", "w") + + def testHead(self): + '''test IteratorRowHead''' + samfile = pysam.AlignmentFile(os.path.join(BAM_DATADIR, "ex1.bam"), + "rb") + l10 = list(samfile.head(10)) + l100 = list(samfile.head(100)) + self.assertEqual(len(l10), 10) + self.assertEqual(len(l100), 100) + self.assertEqual(list(map(str, l10)), + list(map(str, l100[:10]))) + + def testWriteUncompressedBAMFile(self): + '''read from uncompressed BAM file, see issue #43''' + + input_filename = "ex2.sam" + output_filename = "pysam_uncompressed.bam" + reference_filename = "uncompressed.bam" + + self.checkEcho(input_filename, + reference_filename, + output_filename, + "r", "wb0") + + self.checkEcho(input_filename, + reference_filename, + output_filename, + "r", "wbu") + + def testEmptyBAM(self): + samfile = pysam.Samfile(os.path.join(BAM_DATADIR, "empty.bam"), + "rb") + self.assertEqual(samfile.mapped, 0) + self.assertEqual(samfile.unmapped, 0) + self.assertEqual(samfile.nocoordinate, 0) + + def testEmptyWithHeaderBAM(self): + self.assertRaises( + ValueError, + pysam.Samfile, + os.path.join(BAM_DATADIR, "example_empty_with_header.bam"), + "rb") + + samfile = pysam.Samfile( + os.path.join(BAM_DATADIR, "example_empty_with_header.bam"), + "rb", + check_sq=False) + self.assertEqual(samfile.mapped, 0) + self.assertEqual(samfile.unmapped, 0) + self.assertEqual(samfile.nocoordinate, 0) + self.assertEqual([], list(samfile.fetch())) + + def testOpenFromFilename(self): + + samfile = pysam.AlignmentFile( + filename=os.path.join(BAM_DATADIR, "ex1.bam"), + mode="rb") + self.assertEqual(len(list(samfile.fetch())), 3270) + + def testBAMWithCSIIndex(self): + '''see issue 116''' + input_filename = os.path.join(BAM_DATADIR, "ex1_csi.bam") + samfile = pysam.AlignmentFile(input_filename, + "rb", + check_sq=False) + samfile.fetch('chr2') + + def test_fetch_by_tid(self): + with pysam.AlignmentFile(os.path.join(BAM_DATADIR, "ex1.bam"), "rb") as samfile: + self.assertEqual(len(list(samfile.fetch('chr1'))), + len(list(samfile.fetch(tid=0)))) + self.assertEqual(len(list(samfile.fetch('chr2'))), + len(list(samfile.fetch(tid=1)))) + self.assertRaises( + IndexError, + samfile.fetch, + tid=2) + self.assertRaises( + IndexError, + samfile.fetch, + tid=-1) + self.assertEqual(len(list(samfile.fetch('chr1', start=1000, end=2000))), + len(list(samfile.fetch(tid=0, start=1000, end=2000)))) + + def test_write_bam_to_unknown_path_fails(self): + '''see issue 116''' + input_filename = os.path.join(BAM_DATADIR, "ex1.bam") + with pysam.AlignmentFile(input_filename) as inf: + self.assertRaises(IOError, + pysam.AlignmentFile, + "missing_directory/new_file.bam", + "wb", + template=inf) + + +class TestAutoDetect(unittest.TestCase): + + def testSAM(self): + """test SAM autodetection.""" + + with pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "ex3.sam")) as inf: + self.assertFalse(inf.is_bam) + self.assertFalse(inf.is_cram) + + self.assertRaises(ValueError, inf.fetch, 'chr1') + + def testBAM(self): + """test BAM autodetection.""" + + with pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "ex3.bam")) as inf: + self.assertTrue(inf.is_bam) + self.assertFalse(inf.is_cram) + self.assertEqual(len(list(inf.fetch('chr1'))), 1) + self.assertEqual(len(list(inf.fetch('chr2'))), 3) + + def testCRAM(self): + """test CRAM autodetection.""" + + with pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "ex3.cram")) as inf: + self.assertFalse(inf.is_bam) + self.assertTrue(inf.is_cram) + self.assertEqual(len(list(inf.fetch('chr1'))), 1) + self.assertEqual(len(list(inf.fetch('chr2'))), 3) + + +################################################## +# +# Random access iterator tests +# +################################################## +class TestIteratorRowBAM(unittest.TestCase): + + filename = os.path.join(BAM_DATADIR, "ex2.bam") + mode = "rb" + reference_filename = None + + def setUp(self): + self.samfile = pysam.AlignmentFile( + self.filename, + self.mode, + reference_filename=self.reference_filename, + ) + + def tearDown(self): + self.samfile.close() + + def checkRange(self, rnge): + '''compare results from iterator with those from samtools.''' + ps = list(self.samfile.fetch(region=rnge)) + sa = force_str( + pysam.samtools.view( + self.filename, + rnge, + raw=True)).splitlines(True) + self.assertEqual( + len(ps), len(sa), + "unequal number of results for range %s: %i != %i" % + (rnge, len(ps), len(sa))) + # check if the same reads are returned and in the same order + for line, (a, b) in enumerate(list(zip(ps, sa))): + d = b.split("\t") + self.assertEqual( + a.query_name, d[0], + "line %i: read id mismatch: %s != %s" % + (line, a.reference_id, d[0])) + self.assertEqual( + a.reference_start, + int(d[3]) - 1, + "line %i: read position mismatch: %s != %s, \n%s\n%s\n" % + (line, a.reference_start, int(d[3]) - 1, + str(a), str(d))) + qual = d[10] + self.assertEqual( + pysam.qualities_to_qualitystring(a.query_qualities), + qual, + "line %i: quality mismatch: %s != %s, \n%s\n%s\n" % + (line, pysam.qualities_to_qualitystring(a.query_qualities), qual, + str(a), str(d))) + + def testIteratePerContig(self): + '''check random access per contig''' + for contig in self.samfile.references: + self.checkRange(contig) + + def testIterateRanges(self): + '''check random access per range''' + for contig, length in zip(self.samfile.references, + self.samfile.lengths): + for start in range(1, length, 90): + # this includes empty ranges + self.checkRange("%s:%i-%i" % + (contig, start, start + 90)) + + +class TestIteratorRowAllBAM(unittest.TestCase): + + filename = os.path.join(BAM_DATADIR, "ex2.bam") + mode = "rb" + + def setUp(self): + self.samfile = pysam.AlignmentFile( + self.filename, + self.mode) + + def testIterate(self): + '''compare results from iterator with those from samtools.''' + ps = list(self.samfile.fetch()) + sa = pysam.samtools.view(self.filename, + raw=True).splitlines() + self.assertEqual( + len(ps), len(sa), + "unequal number of results: %i != %i" % + (len(ps), len(sa))) + # check if the same reads are returned + for line, pair in enumerate(list(zip(ps, sa))): + data = force_str(pair[1]).split("\t") + self.assertEqual( + pair[0].query_name, + data[0], + "read id mismatch in line %i: %s != %s" % + (line, pair[0].reference_id, data[0])) + + def tearDown(self): + self.samfile.close() + + +class TestIteratorRowCRAM(TestIteratorRowBAM): + filename = os.path.join(BAM_DATADIR, "ex2.cram") + mode = "rc" + + +class TestIteratorRowCRAMWithReferenceFilename(TestIteratorRowCRAM): + reference_filename = os.path.join(BAM_DATADIR, "ex1.fa") + + +# needs to be implemented +# class TestAlignedSegmentFromSamWithoutHeader(TestAlignedSegmentFromBam): +# +# def setUp(self): +# self.samfile=pysam.AlignmentFile( "ex7.sam","r" ) +# self.reads=list(self.samfile.fetch()) + + +class TestFloatTagBug(unittest.TestCase): + + '''see issue 71''' + + def testFloatTagBug(self): + '''a float tag before another exposed a parsing bug in bam_aux_get. + + Fixed in 0.1.19 + ''' + samfile = pysam.AlignmentFile(os.path.join(BAM_DATADIR, "tag_bug.bam")) + read = next(samfile.fetch(until_eof=True)) + self.assertTrue(('XC', 1) in read.tags) + self.assertEqual(read.opt('XC'), 1) + + +class TestLargeFieldBug(unittest.TestCase): + + '''see issue 100''' + + def testLargeFileBug(self): + '''when creating a read with a large entry in the tag field + causes an error: + NotImplementedError: tags field too large + ''' + samfile = pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "issue100.bam")) + read = next(samfile.fetch(until_eof=True)) + new_read = pysam.AlignedSegment() + new_read.tags = read.tags + self.assertEqual(new_read.tags, read.tags) + + +class TestClipping(unittest.TestCase): + + def testClipping(self): + + self.samfile = pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "softclip.bam"), + "rb") + + for read in self.samfile: + + if read.query_name == "r001": + self.assertEqual(read.query_sequence, 'AAAAGATAAGGATA') + self.assertEqual(read.query_alignment_sequence, 'AGATAAGGATA') + self.assertEqual(pysam.qualities_to_qualitystring(read.query_qualities), + None) + self.assertEqual( + pysam.qualities_to_qualitystring( + read.query_alignment_qualities), + None) + + elif read.query_name == "r002": + + self.assertEqual(read.query_sequence, 'GCCTAAGCTAA') + self.assertEqual(read.query_alignment_sequence, 'AGCTAA') + self.assertEqual( + pysam.qualities_to_qualitystring(read.query_qualities), + '01234567890') + self.assertEqual( + pysam.qualities_to_qualitystring( + read.query_alignment_qualities), + '567890') + + elif read.query_name == "r003": + + self.assertEqual(read.query_sequence, 'GCCTAAGCTAA') + self.assertEqual(read.query_alignment_sequence, 'GCCTAA') + self.assertEqual( + pysam.qualities_to_qualitystring(read.query_qualities), + '01234567890') + self.assertEqual( + pysam.qualities_to_qualitystring( + read.query_alignment_qualities), + '012345') + + elif read.query_name == "r004": + + self.assertEqual(read.query_sequence, 'TAGGC') + self.assertEqual(read.query_alignment_sequence, 'TAGGC') + self.assertEqual( + pysam.qualities_to_qualitystring(read.query_qualities), + '01234') + self.assertEqual( + pysam.qualities_to_qualitystring( + read.query_alignment_qualities), + '01234') + + +class TestUnmappedReadsRetrieval(unittest.TestCase): + + def test_fetch_from_sam_with_until_eof_reads_unmapped_reads(self): + with pysam.AlignmentFile(os.path.join(BAM_DATADIR, "ex5.sam"), + "rb") as samfile: + self.assertEqual(len(list(samfile.fetch(until_eof=True))), 2) + + def test_fetch_from_bam_with_until_eof_reads_unmapped_reads(self): + with pysam.AlignmentFile(os.path.join(BAM_DATADIR, "ex5.bam"), + "rb") as samfile: + self.assertEqual(len(list(samfile.fetch(until_eof=True))), 2) + + def test_fetch_with_asterisk_only_returns_unmapped_reads(self): + with pysam.AlignmentFile(os.path.join(BAM_DATADIR, "test_mapped_unmapped.bam"), + "rb") as samfile: + self.assertEqual(len(list(samfile.fetch(region="*"))), 4) + + def test_fetch_with_asterisk_only_returns_unmapped_reads_by_contig(self): + with pysam.AlignmentFile(os.path.join(BAM_DATADIR, "test_mapped_unmapped.bam"), + "rb") as samfile: + self.assertEqual(len(list(samfile.fetch(contig="*"))), 4) + + +class TestContextManager(unittest.TestCase): + + def testManager(self): + with pysam.AlignmentFile(os.path.join(BAM_DATADIR, 'ex1.bam'), + 'rb') as samfile: + samfile.fetch() + self.assertEqual(samfile.closed, True) + + +class TestExceptions(unittest.TestCase): + + def setUp(self): + self.samfile = pysam.AlignmentFile(os.path.join(BAM_DATADIR, "ex1.bam"), + "rb") + + def testMissingFile(self): + + self.assertRaises( + IOError, pysam.AlignmentFile, "exdoesntexist.bam", "rb") + self.assertRaises( + IOError, pysam.AlignmentFile, "exdoesntexist.sam", "r") + self.assertRaises( + IOError, pysam.AlignmentFile, "exdoesntexist.bam", "r") + self.assertRaises( + IOError, pysam.AlignmentFile, "exdoesntexist.sam", "rb") + + def testBadContig(self): + self.assertRaises(ValueError, self.samfile.fetch, "chr88") + + def testMeaninglessCrap(self): + self.assertRaises(ValueError, self.samfile.fetch, "skljf") + + def testBackwardsOrderNewFormat(self): + self.assertRaises(ValueError, self.samfile.fetch, 'chr1', 100, 10) + + def testBackwardsOrderOldFormat(self): + self.assertRaises(ValueError, self.samfile.fetch, region="chr1:100-10") + + def testOutOfRangeNegativeNewFormat(self): + self.assertRaises(ValueError, self.samfile.fetch, "chr1", 5, -10) + self.assertRaises(ValueError, self.samfile.fetch, "chr1", 5, 0) + self.assertRaises(ValueError, self.samfile.fetch, "chr1", -5, -10) + + self.assertRaises(ValueError, self.samfile.count, "chr1", 5, -10) + self.assertRaises(ValueError, self.samfile.count, "chr1", 5, 0) + self.assertRaises(ValueError, self.samfile.count, "chr1", -5, -10) + + def testOutOfRangeNegativeOldFormat(self): + self.assertRaises(ValueError, self.samfile.fetch, region="chr1:-5-10") + self.assertRaises(ValueError, self.samfile.fetch, region="chr1:-5-0") + self.assertRaises(ValueError, self.samfile.fetch, region="chr1:-5--10") + + self.assertRaises(ValueError, self.samfile.count, region="chr1:-5-10") + self.assertRaises(ValueError, self.samfile.count, region="chr1:-5-0") + self.assertRaises(ValueError, self.samfile.count, region="chr1:-5--10") + + def testOutOfRangNewFormat(self): + self.assertRaises( + ValueError, self.samfile.fetch, "chr1", 9999999999, 99999999999) + self.assertRaises( + ValueError, self.samfile.count, "chr1", 9999999999, 99999999999) + + def testOutOfRangeLargeNewFormat(self): + self.assertRaises(ValueError, self.samfile.fetch, "chr1", + 9999999999999999999999999999999, 9999999999999999999999999999999999999999) + self.assertRaises(ValueError, self.samfile.count, "chr1", + 9999999999999999999999999999999, 9999999999999999999999999999999999999999) + + def testOutOfRangeLargeOldFormat(self): + self.assertRaises( + ValueError, self.samfile.fetch, "chr1:99999999999999999-999999999999999999") + self.assertRaises( + ValueError, self.samfile.count, "chr1:99999999999999999-999999999999999999") + + def testZeroToZero(self): + '''see issue 44''' + self.assertEqual(len(list(self.samfile.fetch('chr1', 0, 0))), 0) + + def tearDown(self): + self.samfile.close() + + +class TestWrongFormat(unittest.TestCase): + + '''test cases for opening files not in bam/sam format.''' + + def testOpenSamAsBam(self): + self.assertRaises(ValueError, + pysam.AlignmentFile, + os.path.join(BAM_DATADIR, 'ex1.sam'), + 'rb') + + def testOpenBamAsSam(self): + # test fails, needs to be implemented. + # sam.fetch() fails on reading, not on opening + # self.assertRaises(ValueError, pysam.AlignmentFile, + # os.path.join(BAM_DATADIR, 'ex1.bam'), + # 'r') + pass + + def testOpenFastaAsSam(self): + # test fails, needs to be implemented. + # sam.fetch() fails on reading, not on opening + # self.assertRaises( ValueError, pysam.AlignmentFile, 'ex1.fa', 'r' ) + pass + + def testOpenFastaAsBam(self): + self.assertRaises(ValueError, + pysam.AlignmentFile, + os.path.join(BAM_DATADIR, 'ex1.fa'), + 'rb') + + +class TestDeNovoConstruction(unittest.TestCase): + + '''check BAM/SAM file construction using ex6.sam + + (note these are +1 coordinates): + + read_28833_29006_6945 99 chr1 33 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 RG:Z:L1 + read_28701_28881_323b 147 chr2 88 30 35M = 500 412 ACCTATATCTTGGCCTTGGCCGATGCGGCCTTGCA <<<<<;<<<<7;:<<<6;<<<<<<<<<<<<7<<<< MF:i:18 RG:Z:L2 + ''' # noqa + + header = {'HD': {'VN': '1.0'}, + 'SQ': [{'LN': 1575, 'SN': 'chr1'}, + {'LN': 1584, 'SN': 'chr2'}], } + + bamfile = os.path.join(BAM_DATADIR, "ex6.bam") + samfile = os.path.join(BAM_DATADIR, "ex6.sam") + + def setUp(self): + + header = pysam.AlignmentHeader.from_dict(self.header) + + a = pysam.AlignedSegment(header) + a.query_name = "read_28833_29006_6945" + a.query_sequence = "AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG" + a.flag = 99 + a.reference_id = 0 + a.reference_start = 32 + a.mapping_quality = 20 + a.cigartuples = ((0, 10), (2, 1), (0, 25)) + a.next_reference_id = 0 + a.next_reference_start = 199 + a.template_length = 167 + a.query_qualities = pysam.qualitystring_to_array( + "<<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<<") + a.tags = (("NM", 1), + ("RG", "L1")) + + b = pysam.AlignedSegment(header) + b.query_name = "read_28701_28881_323b" + b.query_sequence = "ACCTATATCTTGGCCTTGGCCGATGCGGCCTTGCA" + b.flag = 147 + b.reference_id = 1 + b.reference_start = 87 + b.mapping_quality = 30 + b.cigartuples = ((0, 35), ) + b.next_reference_id = 1 + b.next_reference_start = 499 + b.template_length = 412 + b.query_qualities = pysam.qualitystring_to_array( + "<<<<<;<<<<7;:<<<6;<<<<<<<<<<<<7<<<<") + b.tags = (("MF", 18), + ("RG", "L2")) + + self.reads = (a, b) + + # TODO + # def testSAMWholeFile(self): + + # tmpfilename = "tmp_%i.sam" % id(self) + + # outfile = pysam.AlignmentFile(tmpfilename, + # "wh", + # header=self.header) + + # for x in self.reads: + # outfile.write(x) + # outfile.close() + # self.assertTrue(checkBinaryEqual(tmpfilename, self.samfile), + # "mismatch when construction SAM file, see %s %s" % (tmpfilename, self.samfile)) + + # os.unlink(tmpfilename) + + def test_pass_if_reads_binary_equal(self): + '''check if individual reads are binary equal.''' + infile = pysam.AlignmentFile(self.bamfile, "rb") + + references = list(infile) + for denovo, reference in zip(references, self.reads): + checkFieldEqual(self, reference, denovo) + self.assertEqual(reference.compare(denovo), 0) + + # TODO + # def testSAMPerRead(self): + # '''check if individual reads are binary equal.''' + # infile = pysam.AlignmentFile(self.samfile, "r") + + # others = list(infile) + # for denovo, other in zip(others, self.reads): + # checkFieldEqual(self, other, denovo) + # self.assertEqual(other.compare(denovo), 0) + + def testBAMWholeFile(self): + + tmpfilename = "tmp_%i.bam" % id(self) + + outfile = pysam.AlignmentFile(tmpfilename, "wb", header=self.header) + + for x in self.reads: + outfile.write(x) + outfile.close() + + self.assertTrue( + checkBinaryEqual(tmpfilename, self.bamfile), + "mismatch when construction BAM file, see %s %s" % + (tmpfilename, self.bamfile)) + + os.unlink(tmpfilename) + + +class TestDeNovoConstructionUserTags(TestDeNovoConstruction): + + '''test de novo construction with a header that contains lower-case tags.''' + + header = {'HD': {'VN': '1.0'}, + 'SQ': [{'LN': 1575, 'SN': 'chr1'}, + {'LN': 1584, 'SN': 'chr2'}], + 'x1': {'A': 2, 'B': 5}, + 'x3': {'A': 6, 'B': 5}, + 'x2': {'A': 4, 'B': 5}} + + bamfile = os.path.join(BAM_DATADIR, "example_user_header.bam") + samfile = os.path.join(BAM_DATADIR, "example_user_header.sam") + + +class TestEmptyHeader(unittest.TestCase): + '''see issue 84.''' + + def testEmptyHeader(self): + s = pysam.AlignmentFile(os.path.join(BAM_DATADIR, + 'example_empty_header.bam')) + self.assertEqual(s.header.to_dict(), {'SQ': [{'LN': 1000, 'SN': 'chr1'}]}) + + def test_bam_without_seq_in_header(self): + s = pysam.AlignmentFile(os.path.join(BAM_DATADIR, "example_no_seq_in_header.bam")) + self.assertTrue("SQ" in s.header.to_dict()) + self.assertTrue("@SQ" in str(s.header)) + + +class TestHeaderWithProgramOptions(unittest.TestCase): + + '''see issue 39.''' + + def testHeader(self): + s = pysam.AlignmentFile(os.path.join(BAM_DATADIR, + 'rg_with_tab.bam')) + self.assertEqual( + s.header.to_dict(), + {'SQ': [{'LN': 1575, 'SN': 'chr1'}, + {'LN': 1584, 'SN': 'chr2'}], + 'PG': [{'PN': 'bwa', + 'ID': 'bwa', + 'VN': '0.7.9a-r786', + 'CL': 'bwa mem -p -t 8 -M -R ' + '@RG\tID:None\tSM:None\t/mnt/data/hg19.fa\t' + '/mnt/analysis/default-0.fastq'}]}) + + +class TestTruncatedBAM(unittest.TestCase): + + '''see pull request 50.''' + + def testTruncatedBam2(self): + self.assertRaises(IOError, + pysam.AlignmentFile, + os.path.join(BAM_DATADIR, 'ex2_truncated.bam')) + + def testTruncatedBam2(self): + s = pysam.AlignmentFile(os.path.join(BAM_DATADIR, 'ex2_truncated.bam'), + ignore_truncation=True) + + def iterall(x): + return len([a for a in x]) + self.assertRaises(IOError, iterall, s) + + +COMPARE_BTAG = [100, 1, 91, 0, 7, 101, 0, 201, 96, 204, + 0, 0, 87, 109, 0, 7, 97, 112, 1, 12, 78, + 197, 0, 7, 100, 95, 101, 202, 0, 6, 0, 1, + 186, 0, 84, 0, 244, 0, 0, 324, 0, 107, 195, + 101, 113, 0, 102, 0, 104, 3, 0, 101, 1, 0, + 212, 6, 0, 0, 1, 0, 74, 1, 11, 0, 196, 2, + 197, 103, 0, 108, 98, 2, 7, 0, 1, 2, 194, + 0, 180, 0, 108, 0, 203, 104, 16, 5, 205, + 0, 0, 0, 1, 1, 100, 98, 0, 0, 204, 6, 0, + 79, 0, 0, 101, 7, 109, 90, 265, 1, 27, 10, + 109, 102, 9, 0, 292, 0, 110, 0, 0, 102, + 112, 0, 0, 84, 100, 103, 2, 81, 126, 0, 2, + 90, 0, 15, 96, 15, 1, 0, 2, 0, 107, 92, 0, + 0, 101, 3, 98, 15, 102, 13, 116, 116, 90, 93, + 198, 0, 0, 0, 199, 92, 26, 495, 100, 5, 0, + 100, 5, 209, 0, 92, 107, 90, 0, 0, 0, 0, 109, + 194, 7, 94, 200, 0, 40, 197, 0, 11, 0, 0, 112, + 110, 6, 4, 200, 28, 0, 196, 0, 203, 1, 129, + 0, 0, 1, 0, 94, 0, 1, 0, 107, 5, 201, 3, 3, 100, + 0, 121, 0, 7, 0, 1, 105, 306, 3, 86, 8, 183, 0, + 12, 163, 17, 83, 22, 0, 0, 1, 8, 109, 103, 0, 0, + 295, 0, 200, 16, 172, 3, 16, 182, 3, 11, 0, 0, + 223, 111, 103, 0, 5, 225, 0, 95] + + +class TestBTagSam(unittest.TestCase): + + '''see issue 81.''' + + compare = [COMPARE_BTAG, + [-100, 200, -300, -400], + [-100, 12], + [12, 15], + [-1.0, 5.0, 2.5]] + + filename = os.path.join(BAM_DATADIR, 'example_btag.sam') + + read0 = [('RG', 'QW85I'), + ('PG', 'tmap'), + ('MD', '140'), + ('NM', 0), + ('AS', 140), + ('FZ', array.array('H', COMPARE_BTAG)), + ('XA', 'map2-1'), + ('XS', 53), + ('XT', 38), + ('XF', 1), + ('XE', 0)] + + def testReadTags(self): + + s = pysam.AlignmentFile(self.filename) + for x, read in enumerate(s): + tags = read.tags + if x == 0: + self.assertEqual(tags, self.read0) + + fz = list(dict(tags)["FZ"]) + self.assertEqual(fz, self.compare[x]) + self.assertEqual(list(read.opt("FZ")), self.compare[x]) + self.assertEqual(tags, read.get_tags()) + for tag, value in tags: + self.assertEqual(value, read.get_tag(tag)) + + def testReadWriteTags(self): + + s = pysam.AlignmentFile(self.filename) + for read in s: + before = read.tags + read.tags = before + self.assertEqual(read.tags, before) + + read.set_tags(before) + self.assertEqual(read.tags, before) + + for tag, value in before: + read.set_tag(tag, value) + self.assertEqual(value, read.get_tag(tag)) + + +class TestBTagBam(TestBTagSam): + filename = os.path.join(BAM_DATADIR, 'example_btag.bam') + + +class TestDoubleFetchBAM(unittest.TestCase): + '''check if two iterators on the same bamfile are independent.''' + + filename = os.path.join(BAM_DATADIR, 'ex1.bam') + mode = "rb" + + def testDoubleFetch(self): + + with pysam.AlignmentFile(self.filename, self.mode) as samfile1: + for a, b in zip(samfile1.fetch(multiple_iterators=True), + samfile1.fetch(multiple_iterators=True)): + self.assertEqual(a.compare(b), 0) + + def testDoubleFetchWithRegionTrueTrue(self): + + with pysam.AlignmentFile(self.filename, self.mode) as samfile1: + contig, start, stop = 'chr2', 200, 3000000 + # just making sure the test has something to catch + self.assertTrue(len(list(samfile1.fetch(contig, start, stop))) > 0) + + for a, b in zip(samfile1.fetch(contig, start, stop, + multiple_iterators=True), + samfile1.fetch(contig, start, stop, + multiple_iterators=True)): + self.assertEqual(a.compare(b), 0) + + def testDoubleFetchWithRegionFalseTrue(self): + with pysam.AlignmentFile(self.filename, self.mode) as samfile1: + contig, start, stop = 'chr2', 200, 3000000 + # just making sure the test has something to catch + self.assertTrue(len(list(samfile1.fetch(contig, start, stop))) > 0) + + for a, b in zip(samfile1.fetch(contig, start, stop, + multiple_iterators=False), + samfile1.fetch(contig, start, stop, + multiple_iterators=True)): + self.assertEqual(a.compare(b), 0) + + def testDoubleFetchWithRegionTrueFalse(self): + with pysam.AlignmentFile(self.filename, self.mode) as samfile1: + contig, start, stop = 'chr2', 200, 3000000 + # just making sure the test has something to catch + self.assertTrue(len(list(samfile1.fetch(contig, start, stop))) > 0) + + for a, b in zip(samfile1.fetch(contig, start, stop, + multiple_iterators=True), + samfile1.fetch(contig, start, stop, + multiple_iterators=False)): + self.assertEqual(a.compare(b), 0) + + def testDoubleFetchUntilEOF(self): + + with pysam.AlignmentFile(self.filename, self.mode) as samfile1: + + for a, b in zip(samfile1.fetch(until_eof=True), + samfile1.fetch(until_eof=True, + multiple_iterators=True)): + self.assertEqual(a.compare(b), 0) + + +class TestDoubleFetchCRAM(TestDoubleFetchBAM): + filename = os.path.join(BAM_DATADIR, 'ex2.cram') + mode = "rc" + + +class TestDoubleFetchCRAMWithReference(TestDoubleFetchBAM): + filename = os.path.join(BAM_DATADIR, 'ex2.cram') + mode = "rc" + reference_filename = os.path.join(BAM_DATADIR, 'ex1.fa') + + +class TestRemoteFileFTP(unittest.TestCase): + + '''test remote access. + + ''' + + # Need to find an ftp server without password on standard + # port. + + url = "ftp://ftp.sanger.ac.uk/pub/rd/humanSequences/CV.bam" + region = "1:1-1000" + + def testFTPView(self): + return + if not checkURL(self.url): + return + + result = pysam.samtools.view(self.url, self.region) + self.assertEqual(len(result), 36) + + def testFTPFetch(self): + return + if not checkURL(self.url): + return + + samfile = pysam.AlignmentFile(self.url, "rb") + result = list(samfile.fetch(region=self.region)) + self.assertEqual(len(result), 36) + + +class TestRemoteFileHTTP(unittest.TestCase): + + url = "http://genserv.anat.ox.ac.uk/downloads/pysam/test/ex1.bam" + region = "chr1:1-1000" + local = os.path.join(BAM_DATADIR, "ex1.bam") + + def testView(self): + if not checkURL(self.url): + return + + samfile_local = pysam.AlignmentFile(self.local, "rb") + ref = list(samfile_local.fetch(region=self.region)) + + result = pysam.samtools.view(self.url, self.region) + self.assertEqual(len(result.splitlines()), len(ref)) + + def testFetch(self): + if not checkURL(self.url): + return + + with pysam.AlignmentFile(self.url, "rb") as samfile: + result = list(samfile.fetch(region=self.region)) + + with pysam.AlignmentFile(self.local, "rb") as samfile_local: + ref = list(samfile_local.fetch(region=self.region)) + + self.assertEqual(len(ref), len(result)) + for x, y in zip(result, ref): + self.assertEqual(x.compare(y), 0) + + def testFetchAll(self): + if not checkURL(self.url): + return + + with pysam.AlignmentFile(self.url, "rb") as samfile: + result = list(samfile.fetch()) + + with pysam.AlignmentFile(self.local, "rb") as samfile_local: + ref = list(samfile_local.fetch()) + + self.assertEqual(len(ref), len(result)) + for x, y in zip(result, ref): + self.assertEqual(x.compare(y), 0) + + +class TestLargeOptValues(unittest.TestCase): + + ints = (65536, 214748, 2147484, 2147483647) + floats = (65536.0, 214748.0, 2147484.0) + + def check(self, samfile): + + i = samfile.fetch() + for exp in self.ints: + rr = next(i) + obs = rr.opt("ZP") + self.assertEqual(exp, obs, + "expected %s, got %s\n%s" % + (str(exp), str(obs), str(rr))) + + for exp in [-x for x in self.ints]: + rr = next(i) + obs = rr.opt("ZP") + self.assertEqual(exp, obs, + "expected %s, got %s\n%s" % + (str(exp), str(obs), str(rr))) + + for exp in self.floats: + rr = next(i) + obs = rr.opt("ZP") + self.assertEqual(exp, obs, + "expected %s, got %s\n%s" % + (str(exp), str(obs), str(rr))) + + for exp in [-x for x in self.floats]: + rr = next(i) + obs = rr.opt("ZP") + self.assertEqual(exp, obs, "expected %s, got %s\n%s" % + (str(exp), str(obs), str(rr))) + + def testSAM(self): + samfile = pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "ex10.sam"), + "r") + self.check(samfile) + + def testBAM(self): + samfile = pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "ex10.bam"), + "rb") + self.check(samfile) + + +class TestCountCoverage(unittest.TestCase): + + samfilename = os.path.join(BAM_DATADIR, "ex1.bam") + fastafilename = os.path.join(BAM_DATADIR, "ex1.fa") + + def setUp(self): + + self.fastafile = pysam.Fastafile(self.fastafilename) + self.tmpfilename = get_temp_filename(".bam") + + with pysam.AlignmentFile(self.samfilename) as inf: + with pysam.AlignmentFile( + self.tmpfilename, + 'wb', + template=inf) as outf: + for ii, read in enumerate(inf.fetch()): + # if ii % 2 == 0: # setting BFUNMAP makes no sense... + #read.flag = read.flag | 0x4 + if ii % 3 == 0: + read.flag = read.flag | 0x100 + if ii % 5 == 0: + read.flag = read.flag | 0x200 + if ii % 7 == 0: + read.flag = read.flag | 0x400 + outf.write(read) + pysam.samtools.index(self.tmpfilename) + + def tearDown(self): + self.fastafile.close() + os.unlink(self.tmpfilename) + os.unlink(self.tmpfilename + ".bai") + + def count_coverage_python(self, + bam, chrom, start, stop, + read_callback, + quality_threshold=15): + stop = min(stop, bam.get_reference_length(chrom)) + l = stop - start + count_a = array.array('L', [0] * l) + count_c = array.array('L', [0] * l) + count_g = array.array('L', [0] * l) + count_t = array.array('L', [0] * l) + for p in bam.pileup(chrom, start, stop, + truncate=True, + stepper='nofilter', + min_base_quality=quality_threshold, + ignore_overlaps=False): + rpos = p.reference_pos - start + for read in p.pileups: + if not read.is_del and not read.is_refskip and \ + read_callback(read.alignment): + try: + if read.alignment.query_qualities[read.query_position] \ + >= quality_threshold: + letter = read.alignment.query[read.query_position] + if letter == 'A': + count_a[rpos] += 1 + elif letter == 'C': + count_c[rpos] += 1 + elif letter == 'G': + count_g[rpos] += 1 + elif letter == 'T': + count_t[rpos] += 1 + except IndexError: + pass + return count_a, count_c, count_g, count_t + + def test_count_coverage_with_coordinates_works(self): + + with pysam.AlignmentFile(self.samfilename) as inf: + c = inf.count_coverage("chr1") + self.assertEqual(len(c[0]), inf.get_reference_length("chr1")) + self.assertEqual(len(c[0]), 1575) + + c = inf.count_coverage("chr1", 100) + self.assertEqual(len(c[0]), inf.get_reference_length("chr1") - 100) + + c = inf.count_coverage("chr1", 100, 200) + self.assertEqual(len(c[0]), 200 - 100) + + c = inf.count_coverage("chr1", None, 200) + self.assertEqual(len(c[0]), 200) + + c = inf.count_coverage("chr1", None, inf.get_reference_length("chr1") + 10000) + self.assertEqual(len(c[0]), inf.get_reference_length("chr1")) + + def test_count_coverage_without_coordinates_fails(self): + with pysam.AlignmentFile(self.samfilename) as inf: + self.assertRaises(TypeError, inf.count_coverage) + + def test_count_coverage_wrong_coordinates_fails(self): + with pysam.AlignmentFile(self.samfilename) as inf: + self.assertRaises(ValueError, inf.count_coverage, "chr1", 200, 100) + self.assertRaises(KeyError, inf.count_coverage, "chrUnknown", 100, 200) + + def test_counting_the_same_region_works(self): + + with pysam.AlignmentFile(self.samfilename) as inf: + c1 = inf.count_coverage("chr1") + c2 = inf.count_coverage("chr1") + self.assertEqual(c1, c2) + + def test_count_coverage_counts_as_expected(self): + chrom = 'chr1' + start = 0 + stop = 1000 + + with pysam.AlignmentFile(self.samfilename) as inf: + manual_counts = self.count_coverage_python( + inf, chrom, start, stop, + lambda read: True, + quality_threshold=0) + + fast_counts = inf.count_coverage( + chrom, start, stop, + read_callback=lambda read: True, + quality_threshold=0) + + self.assertEqual(list(fast_counts[0]), list(manual_counts[0])) + self.assertEqual(list(fast_counts[1]), list(manual_counts[1])) + self.assertEqual(list(fast_counts[2]), list(manual_counts[2])) + self.assertEqual(list(fast_counts[3]), list(manual_counts[3])) + + def test_count_coverage_quality_filter(self): + chrom = 'chr1' + start = 0 + stop = 1000 + with pysam.AlignmentFile(self.samfilename) as inf: + manual_counts = self.count_coverage_python( + inf, chrom, start, stop, + lambda read: True, + quality_threshold=0) + fast_counts = inf.count_coverage( + chrom, start, stop, + read_callback=lambda read: True, + quality_threshold=15) + + # we filtered harder, should be less + for i in range(4): + for r in range(start, stop): + self.assertTrue(fast_counts[i][r] <= manual_counts[i][r]) + + def test_count_coverage_read_callback(self): + chrom = 'chr1' + start = 0 + stop = 1000 + with pysam.AlignmentFile(self.samfilename) as inf: + manual_counts = self.count_coverage_python( + inf, chrom, start, stop, + lambda read: read.flag & 0x10, + quality_threshold=0) + fast_counts = inf.count_coverage( + chrom, start, stop, + read_callback=lambda read: True, + quality_threshold=0) + + for i in range(4): + for r in range(start, stop): + self.assertTrue(fast_counts[i][r] >= manual_counts[i][r]) + + fast_counts = inf.count_coverage( + chrom, start, stop, + read_callback=lambda read: read.flag & 0x10, + quality_threshold=0) + + self.assertEqual(fast_counts[0], manual_counts[0]) + self.assertEqual(fast_counts[1], manual_counts[1]) + self.assertEqual(fast_counts[2], manual_counts[2]) + self.assertEqual(fast_counts[3], manual_counts[3]) + + def test_count_coverage_read_all(self): + + chrom = 'chr1' + start = 0 + stop = 1000 + + def filter(read): + return not (read.flag & (0x4 | 0x100 | 0x200 | 0x400)) + + with pysam.AlignmentFile(self.tmpfilename) as samfile: + fast_counts = samfile.count_coverage( + chrom, start, stop, + read_callback='all', + # read_callback = lambda read: ~(read.flag & (0x4 | 0x100 | 0x200 | 0x400)), + quality_threshold=0) + manual_counts = samfile.count_coverage( + chrom, start, stop, + read_callback=lambda read: not( + read.flag & (0x4 | 0x100 | 0x200 | 0x400)), + quality_threshold=0) + + self.assertEqual(fast_counts[0], manual_counts[0]) + self.assertEqual(fast_counts[1], manual_counts[1]) + self.assertEqual(fast_counts[2], manual_counts[2]) + self.assertEqual(fast_counts[3], manual_counts[3]) + + def test_count_coverage_nofilter(self): + + with pysam.AlignmentFile(self.samfilename) as inf: + with pysam.AlignmentFile( + self.tmpfilename, 'wb', template=inf) as outf: + + for ii, read in enumerate(inf.fetch()): + # if ii % 2 == 0: # setting BFUNMAP makes no sense... + # read.flag = read.flag | 0x4 + if ii % 3 == 0: + read.flag = read.flag | 0x100 + if ii % 5 == 0: + read.flag = read.flag | 0x200 + if ii % 7 == 0: + read.flag = read.flag | 0x400 + outf.write(read) + + pysam.samtools.index(self.tmpfilename) + chr = 'chr1' + start = 0 + stop = 1000 + + with pysam.AlignmentFile(self.tmpfilename) as inf: + fast_counts = inf.count_coverage(chr, start, stop, + read_callback='nofilter', + quality_threshold=0) + + manual_counts = self.count_coverage_python(inf, chr, start, stop, + read_callback=lambda x: True, + quality_threshold=0) + + self.assertEqual(fast_counts[0], manual_counts[0]) + self.assertEqual(fast_counts[1], manual_counts[1]) + self.assertEqual(fast_counts[2], manual_counts[2]) + self.assertEqual(fast_counts[3], manual_counts[3]) + + +class TestFindIntrons(unittest.TestCase): + samfilename = os.path.join(BAM_DATADIR, "ex_spliced.bam") + + def setUp(self): + self.samfile = pysam.AlignmentFile(self.samfilename) + + def tearDown(self): + self.samfile.close() + + def test_total(self): + all_read_counts = self.samfile.count() + splice_sites = self.samfile.find_introns(self.samfile.fetch()) + # there is a single unspliced read in there + self.assertEqual(sum(splice_sites.values()), all_read_counts - 1) + + def test_first(self): + reads = list(self.samfile.fetch())[:10] + splice_sites = self.samfile.find_introns(reads) + starts = [14792 + 38 - 1] + stops = [14792 + 38 + 140 - 1] + self.assertEqual(len(splice_sites), 1) + self.assertTrue((starts[0], stops[0]) in splice_sites) + # first one is the unspliced read + self.assertEqual(splice_sites[(starts[0], stops[0])], 9) + + def test_all(self): + reads = list(self.samfile.fetch()) + splice_sites = self.samfile.find_introns(reads) + should = collections.Counter({ + (14829, 14969): 33, + (15038, 15795): 24, + (15947, 16606): 3, + (16765, 16857): 9, + (16765, 16875): 1, + (17055, 17232): 19, + (17055, 17605): 3, + (17055, 17914): 1, + (17368, 17605): 7, + }) + self.assertEqual(should, splice_sites) + + +class TestLogging(unittest.TestCase): + + '''test around bug issue 42, + + failed in versions < 0.4 + ''' + + def check(self, bamfile, log): + + if log: + logger = logging.getLogger('franklin') + logger.setLevel(logging.INFO) + formatter = logging.Formatter( + '%(asctime)s %(levelname)s %(message)s') + log_hand = logging.FileHandler('log.txt') + log_hand.setFormatter(formatter) + logger.addHandler(log_hand) + + with pysam.AlignmentFile(bamfile, 'rb') as bam: + cols = bam.pileup() + self.assertTrue(True) + + def testFail1(self): + self.check(os.path.join(BAM_DATADIR, "ex9_fail.bam"), + False) + self.check(os.path.join(BAM_DATADIR, "ex9_fail.bam"), + True) + + def testNoFail1(self): + self.check(os.path.join(BAM_DATADIR, "ex9_nofail.bam"), + False) + self.check(os.path.join(BAM_DATADIR, "ex9_nofail.bam"), + True) + + def testNoFail2(self): + self.check(os.path.join(BAM_DATADIR, "ex9_nofail.bam"), + True) + self.check(os.path.join(BAM_DATADIR, "ex9_nofail.bam"), + True) + +# TODOS +# 1. finish testing all properties within pileup objects +# 2. check exceptions and bad input problems (missing files, optional fields that aren't present, etc...) +# 3. check: presence of sequence + + +class TestAlignmentFileUtilityFunctions(unittest.TestCase): + + def testCount(self): + + with pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "ex1.bam"), + "rb") as samfile: + + for contig in ("chr1", "chr2"): + for start in range(0, 2000, 100): + end = start + 1 + self.assertEqual( + len(list(samfile.fetch(contig, start, end))), + samfile.count(contig, start, end), + 'number mismatch for %s:%i-%i %i != %i' % ( + contig, start, end, + len(list(samfile.fetch(contig, start, end))), + samfile.count(contig, start, end))) + + # test empty intervals + self.assertEqual( + len(list(samfile.fetch(contig, start, start))), + samfile.count(contig, start, start), + 'number mismatch for %s:%i-%i %i != %i' % ( + contig, start, start, + len(list(samfile.fetch(contig, start, start))), + samfile.count(contig, start, start))) + + # test half empty intervals + self.assertEqual(len(list(samfile.fetch(contig, start))), + samfile.count(contig, start)) + + self.assertEqual( + len(list(samfile.fetch(contig, start))), + samfile.count(contig, start), + 'number mismatch for %s:%i %i != %i' % ( + contig, start, + len(list(samfile.fetch(contig, start))), + samfile.count(contig, start))) + + def testMate(self): + '''test mate access.''' + + with open(os.path.join(BAM_DATADIR, "ex1.sam"), "rb") as inf: + readnames = [x.split(b"\t")[0] for x in inf.readlines()] + if sys.version_info[0] >= 3: + readnames = [name.decode('ascii') for name in readnames] + + counts = collections.defaultdict(int) + for x in readnames: + counts[x] += 1 + + with pysam.AlignmentFile(os.path.join(BAM_DATADIR, "ex1.bam"), + "rb") as samfile: + + for read in samfile.fetch(): + if not read.is_paired: + self.assertRaises(ValueError, samfile.mate, read) + elif read.mate_is_unmapped: + self.assertRaises(ValueError, samfile.mate, read) + else: + if counts[read.query_name] == 1: + self.assertRaises(ValueError, samfile.mate, read) + else: + mate = samfile.mate(read) + self.assertEqual(read.query_name, mate.query_name) + self.assertEqual(read.is_read1, mate.is_read2) + self.assertEqual(read.is_read2, mate.is_read1) + self.assertEqual( + read.reference_start, mate.next_reference_start) + self.assertEqual( + read.next_reference_start, mate.reference_start) + + def testIndexStats(self): + '''test if total number of mapped/unmapped reads is correct.''' + + with pysam.AlignmentFile(os.path.join(BAM_DATADIR, "ex1.bam"), + "rb") as samfile: + self.assertEqual(samfile.mapped, 3235) + self.assertEqual(samfile.unmapped, 35) + self.assertEqual(samfile.nocoordinate, 0) + + +class TestMappedUnmapped(unittest.TestCase): + filename = "test_mapped_unmapped.bam" + + def test_counts_of_mapped_and_unmapped_are_correct(self): + + with pysam.AlignmentFile(os.path.join(BAM_DATADIR, + self.filename)) as inf: + unmapped_flag = 0 + unmapped_nopos = 0 + mapped_flag = 0 + for x in inf.fetch(until_eof=True): + if x.is_unmapped: + if x.reference_id < 0: + unmapped_nopos += 1 + else: + unmapped_flag += 1 + else: + mapped_flag += 1 + + self.assertEqual(inf.mapped, mapped_flag) + self.assertEqual(inf.unmapped, unmapped_flag + unmapped_nopos) + + inf.reset() + self.assertEqual(inf.count(), + inf.mapped + unmapped_flag) + + inf.reset() + self.assertEqual(inf.count(until_eof=True), + inf.mapped + unmapped_flag + unmapped_nopos) + + inf.reset() + self.assertEqual(inf.count(read_callback="all"), + inf.mapped) + + inf.reset() + self.assertEqual(inf.count(until_eof=True, read_callback="all"), + inf.mapped) + + def test_counts_of_mapped_and_unmapped_are_correct_per_chromosome(self): + + with pysam.AlignmentFile(os.path.join(BAM_DATADIR, + self.filename)) as inf: + + counts = inf.get_index_statistics() + + counts_contigs = [x.contig for x in counts] + self.assertEqual(sorted(counts_contigs), + sorted(inf.references)) + + for contig in inf.references: + unmapped_flag = 0 + unmapped_nopos = 0 + mapped_flag = 0 + for x in inf.fetch(contig=contig): + if x.is_unmapped: + unmapped_flag += 1 + else: + mapped_flag += 1 + + cc = [c for c in counts if c.contig == contig][0] + self.assertEqual(cc.mapped, mapped_flag) + self.assertEqual(cc.unmapped, unmapped_flag) + self.assertEqual(cc.total, mapped_flag + unmapped_flag) + + +class TestSamtoolsProxy(unittest.TestCase): + + '''tests for sanity checking access to samtools functions.''' + + def testIndex(self): + self.assertRaises(IOError, pysam.samtools.index, "missing_file") + + def testView(self): + # note that view still echos "open: No such file or directory" + self.assertRaises(pysam.SamtoolsError, + pysam.samtools.view, + "missing_file") + + def testSort(self): + self.assertRaises(pysam.SamtoolsError, + pysam.samtools.sort, + "missing_file") + + +class TestAlignmentFileIndex(unittest.TestCase): + + def testIndex(self): + samfile = pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "ex1.bam"), + "rb") + index = pysam.IndexedReads(samfile) + index.build() + reads = collections.defaultdict(int) + + for read in samfile: + reads[read.query_name] += 1 + + for qname, counts in reads.items(): + found = list(index.find(qname)) + self.assertEqual(len(found), counts) + for x in found: + self.assertEqual(x.query_name, qname) + + +class TestExplicitIndex(unittest.TestCase): + + def testExplicitIndexBAM(self): + with pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "explicit_index.bam"), + "rb", + filepath_index=os.path.join(BAM_DATADIR, 'ex1.bam.bai')) as samfile: + samfile.fetch("chr1") + + def testExplicitIndexCRAM(self): + with pysam.AlignmentFile( + os.path.join(BAM_DATADIR, "explicit_index.cram"), + "rc", + filepath_index=os.path.join(BAM_DATADIR, 'ex1.cram.crai')) as samfile: + samfile.fetch("chr1") + + def testRemoteExplicitIndexBAM(self): + if not checkURL( + "http://genserv.anat.ox.ac.uk/downloads/pysam/test/noindex.bam"): + return + + with pysam.AlignmentFile( + "http://genserv.anat.ox.ac.uk/downloads/pysam/test/noindex.bam", + "rb", + filepath_index=os.path.join(BAM_DATADIR, 'ex1.bam.bai')) as samfile: + samfile.fetch("chr1") + + +class TestVerbosity(unittest.TestCase): + + '''test if setting/getting of verbosity works.''' + + def testVerbosity(self): + self.assertEqual(pysam.get_verbosity(), 3) + old = pysam.set_verbosity(0) + self.assertEqual(pysam.get_verbosity(), 0) + new = pysam.set_verbosity(old) + self.assertEqual(new, 0) + self.assertEqual(pysam.get_verbosity(), 3) + + +class TestSanityCheckingBAM(unittest.TestCase): + + mode = "wb" + + def check_write(self, read): + + fn = "tmp_test_sanity_check.bam" + names = ["chr1"] + lengths = [10000] + with pysam.AlignmentFile( + fn, + self.mode, + reference_names=names, + reference_lengths=lengths) as outf: + outf.write(read) + + if os.path.exists(fn): + os.unlink(fn) + + def test_empty_read_gives_value_error(self): + read = pysam.AlignedSegment() + self.check_write(read) + + +class TestHeader1000Genomes(unittest.TestCase): + + '''see issue 110''' + bamfile = "http://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/phase3_EX_or_LC_only_alignment/data/HG00104/alignment/HG00104.chrom11.ILLUMINA.bwa.GBR.low_coverage.20130415.bam" # noqa + + def testRead(self): + + if not checkURL(self.bamfile): + return + + f = pysam.AlignmentFile(self.bamfile, "rb") + data = f.header.copy() + self.assertTrue(data) + + +class TestLargeCigar(unittest.TestCase): + + def setUp(self): + self.read_length = 70000 + self.header = pysam.AlignmentHeader.from_references( + ["chr1", "chr2"], + [self.read_length * 2, self.read_length * 2]) + + def build_read(self): + '''build an example read.''' + + a = pysam.AlignedSegment(self.header) + l = self.read_length + a.query_name = "read_12345" + a.query_sequence = "A" * (l + 1) + a.flag = 0 + a.reference_id = 0 + a.reference_start = 20 + a.mapping_quality = 20 + a.cigarstring = "1M1D" * l + "1M" + self.assertEqual(len(a.cigartuples), 2 * l + 1) + a.next_reference_id = 0 + a.next_reference_start = 0 + a.template_length = l + a.query_qualities = pysam.qualitystring_to_array("1") * (l + 1) + return a + + def check_read(self, read, mode="bam"): + fn = get_temp_filename("tmp_largecigar.{}".format(mode)) + fn_reference = get_temp_filename("tmp_largecigar.fa") + + nrows = int(self.read_length * 2 / 80) + + s = "\n".join(["A" * 80 for x in range(nrows)]) + with open(fn_reference, "w") as outf: + outf.write(">chr1\n{seq}\n>chr2\n{seq}\n".format( + seq=s)) + + if mode == "bam": + write_mode = "wb" + elif mode == "sam": + write_mode = "w" + elif mode == "cram": + write_mode = "wc" + + with pysam.AlignmentFile(fn, write_mode, + header=self.header, + reference_filename=fn_reference) as outf: + outf.write(read) + + with pysam.AlignmentFile(fn) as inf: + ref_read = next(inf) + + if mode == "cram": + # in CRAM, the tag field is kept, while it is emptied by the BAM/SAM reader + self.assertEqual(read.cigarstring, ref_read.cigarstring) + else: + self.assertEqual(read, ref_read) + + os.unlink(fn) + os.unlink(fn_reference) + + def test_reading_writing_sam(self): + read = self.build_read() + self.check_read(read, mode="sam") + + def test_reading_writing_bam(self): + read = self.build_read() + self.check_read(read, mode="bam") + + def test_reading_writing_cram(self): + read = self.build_read() + self.check_read(read, mode="cram") + +# SAM writing fails, as query length is 0 +# class TestSanityCheckingSAM(TestSanityCheckingSAM): +# mode = "w" + +if __name__ == "__main__": + # build data files + print("building data files") + subprocess.call("make -C %s" % BAM_DATADIR, shell=True) + print("starting tests") + unittest.main() + print("completed tests") diff --git a/tests/PileupTestUtils.py b/tests/PileupTestUtils.py new file mode 100644 index 0000000..652bd5b --- /dev/null +++ b/tests/PileupTestUtils.py @@ -0,0 +1,160 @@ +import os +import subprocess +import pysam + +from TestUtils import BAM_DATADIR, force_str + +def build_pileup_with_samtoolsshell(fn): + os.system("samtools mpileup {} 2> /dev/null | wc -l > /dev/null".format(fn)) + return 2998 + + +def build_pileup_with_samtoolspipe(fn): + FNULL = open(os.devnull, 'w') + with subprocess.Popen(["samtools", "mpileup", fn], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=FNULL) as proc: + return len(proc.stdout.readlines()) + + +def build_pileup_with_pysam(*args, **kwargs): + with pysam.AlignmentFile(*args, **kwargs) as inf: + return len(list(inf.pileup(stepper="samtools"))) + + +def build_depth_with_samtoolsshell(fn): + os.system( + "samtools mpileup {} 2> /dev/null | awk '{{a += $4}} END {{print a}}' > /dev/null".format(fn)) + return 107241 + + +def build_depth_with_samtoolspipe(fn): + FNULL = open(os.devnull, 'w') + with subprocess.Popen(["samtools", "mpileup", fn], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=FNULL) as proc: + data = [x.split() for x in proc.stdout.readlines()] + return [int(x[3]) for x in data] + + +def build_depth_with_filter_with_pysam(*args, **kwargs): + with pysam.AlignmentFile(*args, **kwargs) as inf: + return [x.get_num_aligned() for x in inf.pileup(stepper="samtools")] + + +def build_depth_with_pysam(*args, **kwargs): + with pysam.AlignmentFile(*args, **kwargs) as inf: + return [x.nsegments for x in inf.pileup(stepper="samtools")] + + +def build_query_bases_with_samtoolsshell(fn): + os.system("samtools mpileup {} 2> /dev/null | awk '{{a = a $5}} END {{print a}}' | wc -c > /dev/null".format(fn)) + return 116308 + + +def build_query_bases_with_samtoolspipe(fn, *args, **kwargs): + FNULL = open(os.devnull, 'w') + with subprocess.Popen(["samtools", "mpileup", fn] + list(args), + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=FNULL) as proc: + stdout = proc.stdout.read().decode() + return [x.split()[4] for x in stdout.splitlines()] + + +def build_query_bases_with_samtoolspysam(fn, *args): + return [x.split()[4] for x in pysam.samtools.mpileup(fn, *args).splitlines()] + + +def build_query_bases_with_pysam_pileups(*args, **kwargs): + total_pileup = [] + with pysam.AlignmentFile(*args, **kwargs) as inf: + total_pileup = [ + [r.alignment.query_sequence[r.query_position_or_next] + for r in column.pileups if r.query_position_or_next is not None] + for column in inf.pileup(stepper="samtools")] + return total_pileup + + +def build_query_qualities_with_pysam_pileups(*args, **kwargs): + total_pileup = [] + with pysam.AlignmentFile(*args, **kwargs) as inf: + total_pileup = [ + [r.alignment.query_qualities[r.query_position_or_next] + for r in column.pileups if r.query_position_or_next is not None] + for column in inf.pileup(stepper="samtools")] + return total_pileup + + +def build_query_bases_with_pysam(fn, *args, **kwargs): + total_pileup = [] + with pysam.AlignmentFile(fn) as inf: + total_pileup = [column.get_query_sequences( + mark_ends=True, add_indels=True, mark_matches=True) for column in + inf.pileup(*args, **kwargs)] + return total_pileup + + +def build_query_names_with_pysam(*args, **kwargs): + total_pileup = [] + with pysam.AlignmentFile(*args, **kwargs) as inf: + total_pileup = [column.get_query_names() for column in + inf.pileup(stepper="samtools")] + return total_pileup + + +def build_query_qualities_with_samtoolspipe(fn): + FNULL = open(os.devnull, 'w') + with subprocess.Popen(["samtools", "mpileup", fn], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=FNULL) as proc: + data = [force_str(x).split()[5] for x in proc.stdout.readlines()] + return data + + +def build_query_qualities_with_pysam(*args, **kwargs): + total_pileup = [] + with pysam.AlignmentFile(*args, **kwargs) as inf: + total_pileup = [column.get_query_qualities() for column in + inf.pileup(stepper="samtools")] + return total_pileup + + +def build_mapping_qualities_with_samtoolspipe(fn): + FNULL = open(os.devnull, 'w') + with subprocess.Popen(["samtools", "mpileup", "-s", fn], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=FNULL) as proc: + data = [force_str(x).split()[6] for x in proc.stdout.readlines()] + return data + + +def build_mapping_qualities_with_pysam(*args, **kwargs): + total_pileup = [] + with pysam.AlignmentFile(*args, **kwargs) as inf: + total_pileup = [column.get_mapping_qualities() for column in + inf.pileup(stepper="samtools")] + return total_pileup + + +def build_query_positions_with_samtoolspipe(fn): + FNULL = open(os.devnull, 'w') + with subprocess.Popen(["samtools", "mpileup", "-O", fn], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=FNULL) as proc: + data = [list(map(int, force_str(x).split()[6].split(","))) + for x in proc.stdout.readlines()] + return data + + +def build_query_positions_with_pysam(*args, **kwargs): + total_pileup = [] + with pysam.AlignmentFile(*args, **kwargs) as inf: + total_pileup = [column.get_query_positions() for column in + inf.pileup(stepper="samtools")] + return total_pileup diff --git a/tests/StreamFiledescriptors_test.py b/tests/StreamFiledescriptors_test.py new file mode 100644 index 0000000..f09ef37 --- /dev/null +++ b/tests/StreamFiledescriptors_test.py @@ -0,0 +1,89 @@ +import os +import sys +import subprocess +import threading +import errno +import unittest +from pysam import AlignmentFile +from TestUtils import BAM_DATADIR + +IS_PYTHON2 = sys.version_info[0] == 2 + + +def alignmentfile_writer_thread(infile, outfile): + def _writer_thread(infile, outfile): + """read from infile and write to outfile""" + try: + i = 0 + for record in infile: + outfile.write(record) + i += 1 + except IOError as e: + if e.errno != errno.EPIPE: + pass + finally: + outfile.close() + + writer = threading.Thread(target=_writer_thread, args=(infile, outfile)) + writer.daemon = True + writer.start() + return writer + + +class StreamTest(unittest.TestCase): + + def stream_process(self, proc, in_stream, out_stream, writer): + + with AlignmentFile(proc.stdout) as infile: + read = 0 + for record in infile: + read += 1 + return 0, read + + @unittest.skipIf(IS_PYTHON2, "no context manager in py2") + def test_text_processing(self): + + with subprocess.Popen('head -n200', + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + shell=True) as proc: + + in_stream = AlignmentFile(os.path.join(BAM_DATADIR, 'ex1.bam')) + out_stream = AlignmentFile( + proc.stdin, 'wh', header=in_stream.header) + writer = alignmentfile_writer_thread(in_stream, + out_stream) + + written, read = self.stream_process(proc, + in_stream, + out_stream, + writer) + self.assertEqual(read, 198) + + @unittest.skip("test contains bug") + def test_samtools_processing(self): + + # The following test causes the suite to hang + # as the stream_processor raises: + # ValueError: file has no sequences defined (mode='r') - is it SAM/BAM format? + # The whole setup then hangs during exception handling. + with subprocess.Popen('samtools view -b -f 4', + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + shell=True) as proc: + + in_stream = AlignmentFile(os.path.join(BAM_DATADIR, 'ex1.bam')) + out_stream = AlignmentFile( + proc.stdin, 'wb', header=in_stream.header) + writer = alignmentfile_writer_thread(in_stream, + out_stream) + + written, read = self.stream_process(proc, + in_stream, + out_stream, + writer) + self.assertEqual(read, 35) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/TestUtils.py b/tests/TestUtils.py new file mode 100644 index 0000000..f4fe8e3 --- /dev/null +++ b/tests/TestUtils.py @@ -0,0 +1,267 @@ +import sys +import os +import glob +import difflib +import gzip +import contextlib +import inspect +import tempfile +import pysam + +WORKDIR = os.path.abspath(os.path.join(os.path.dirname(__file__), + "pysam_test_work")) + +BAM_DATADIR = os.path.abspath(os.path.join(os.path.dirname(__file__), + "pysam_data")) + +TABIX_DATADIR = os.path.abspath(os.path.join(os.path.dirname(__file__), + "tabix_data")) + +CBCF_DATADIR = os.path.abspath(os.path.join(os.path.dirname(__file__), + "cbcf_data")) + +LINKDIR = os.path.abspath(os.path.join( + os.path.dirname(__file__), "..", "linker_tests")) + + +TESTS_TEMPDIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "tmp")) + + +IS_PYTHON3 = sys.version_info[0] >= 3 + + +if IS_PYTHON3: + from itertools import zip_longest + from urllib.request import urlopen +else: + from itertools import izip as zip_longest + from urllib2 import urlopen + + +if IS_PYTHON3: + def force_str(s): + try: + return s.decode('ascii') + except AttributeError: + return s + + def force_bytes(s): + try: + return s.encode('ascii') + except AttributeError: + return s +else: + def force_str(s): + return s + + def force_bytes(s): + return s + + +def openfile(fn): + if fn.endswith(".gz"): + try: + return gzip.open(fn, "rt", encoding="utf-8") + except TypeError: + return gzip.open(fn, "r") + else: + return open(fn) + + +def checkBinaryEqual(filename1, filename2): + '''return true if the two files are binary equal. + ''' + if os.path.getsize(filename1) != os.path.getsize(filename2): + return False + + infile1 = open(filename1, "rb") + infile2 = open(filename2, "rb") + + def chariter(infile): + while 1: + c = infile.read(1) + if c == b"": + break + yield c + + found = False + for c1, c2 in zip_longest(chariter(infile1), chariter(infile2)): + if c1 != c2: + break + else: + found = True + + infile1.close() + infile2.close() + return found + + +def check_samtools_view_equal( + filename1, filename2, + without_header=False): + '''return true if the two files are equal in their + content through samtools view. + ''' + # strip MD and NM tags, as not preserved in CRAM files + args = ["-x", "MD", "-x", "NM"] + if not without_header: + args.append("-h") + + lines1 = pysam.samtools.view(*(args + [filename1])) + lines2 = pysam.samtools.view(*(args + [filename2])) + + if len(lines1) != len(lines2): + return False + + if lines1 != lines2: + # line by line comparison + # sort each line, as tags get rearranged between + # BAM/CRAM + for n, pair in enumerate(zip(lines1, lines2)): + l1, l2 = pair + l1 = sorted(l1[:-1].split("\t")) + l2 = sorted(l2[:-1].split("\t")) + if l1 != l2: + print("mismatch in line %i" % n) + print(l1) + print(l2) + return False + else: + return False + + return True + + +def checkURL(url): + '''return True if URL is available. + + A URL might not be available if it is the wrong URL + or there is no connection to the URL. + ''' + try: + urlopen(url, timeout=1) + return True + except: + return False + + +def checkFieldEqual(cls, read1, read2, exclude=[]): + '''check if two reads are equal by comparing each field.''' + + # add the . for refactoring purposes. + for x in (".query_name", + ".query_sequence", + ".flag", + ".reference_id", + ".reference_start", + ".mapping_quality", + ".cigartuples", + ".next_reference_id", + ".next_reference_start", + ".template_length", + ".query_length", + ".query_qualities", + ".bin", + ".is_paired", ".is_proper_pair", + ".is_unmapped", ".mate_is_unmapped", + ".is_reverse", ".mate_is_reverse", + ".is_read1", ".is_read2", + ".is_secondary", ".is_qcfail", + ".is_duplicate"): + n = x[1:] + if n in exclude: + continue + cls.assertEqual(getattr(read1, n), getattr(read2, n), + "attribute mismatch for %s: %s != %s" % + (n, getattr(read1, n), getattr(read2, n))) + + +def check_lines_equal(cls, a, b, sort=False, filter_f=None, msg=None): + """check if contents of two files are equal comparing line-wise. + + sort: bool + sort contents of both files before comparing. + filter_f: + remover lines in both a and b where expression is True + """ + with openfile(a) as inf: + aa = inf.readlines() + with openfile(b) as inf: + bb = inf.readlines() + + if filter_f is not None: + aa = [x for x in aa if not filter_f(x)] + bb = [x for x in bb if not filter_f(x)] + + if sort: + cls.assertEqual(sorted(aa), sorted(bb), msg) + else: + cls.assertEqual(aa, bb, msg) + + +def get_temp_filename(suffix=""): + caller_name = inspect.getouterframes(inspect.currentframe(), 2)[1][3] + try: + os.makedirs(TESTS_TEMPDIR) + except OSError: + pass + + f = tempfile.NamedTemporaryFile( + prefix="pysamtests_tmp_{}_".format(caller_name), + suffix=suffix, + delete=False, + dir=TESTS_TEMPDIR) + + f.close() + return f.name + +@contextlib.contextmanager +def get_temp_context(suffix="", keep=False): + caller_name = inspect.getouterframes(inspect.currentframe(), 3)[1][3] + try: + os.makedirs(TESTS_TEMPDIR) + except OSError: + pass + + f = tempfile.NamedTemporaryFile( + prefix="pysamtests_tmp_{}_".format(caller_name), + suffix=suffix, + delete=False, + dir=TESTS_TEMPDIR) + + f.close() + yield f.name + + if not keep: + # clear up any indices as well + for f in glob.glob(f.name + "*"): + os.unlink(f) + + +def load_and_convert(filename, encode=True): + '''load data from filename and convert all fields to string. + + Filename can be either plain or compressed (ending in .gz). + ''' + data = [] + if filename.endswith(".gz"): + with gzip.open(filename) as inf: + for line in inf: + line = line.decode("ascii") + if line.startswith("#"): + continue + d = line.strip().split("\t") + data.append(d) + else: + with open(filename) as f: + for line in f: + if line.startswith("#"): + continue + d = line.strip().split("\t") + data.append(d) + + return data + + +def flatten_nested_list(l): + return [i for ll in l for i in ll] diff --git a/tests/VariantFileFetchTestUtils.py b/tests/VariantFileFetchTestUtils.py new file mode 100644 index 0000000..1aaca37 --- /dev/null +++ b/tests/VariantFileFetchTestUtils.py @@ -0,0 +1,69 @@ +import os +import subprocess +import pysam + +try: + import cyvcf2 +except ImportError: + pass + + +from TestUtils import CBCF_DATADIR, force_str + +def build_filter_from_vcf_with_samtoolsshell(fn): + retval = os.popen( + "bcftools filter -e \"N_ALT != 1 || QUAL < 20 || maf[0]>0.05\" {} | grep -cv ^# ".format(fn)).read() + return int(retval.strip()) + + +def build_filter_from_vcf_with_bcftoolspipe(fn): + FNULL = open(os.devnull, 'w') + with subprocess.Popen([ + "bcftools", + "filter", + "-e", + "N_ALT != 1 || QUAL < 20 || maf[0]>0.05", + fn], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=FNULL) as proc: + data = [line for line in proc.stdout.readlines() if not line.startswith(b"#")] + return len(data) + + +def build_filter_from_vcf_with_cyvcf2(fn): + n = 0 + try: + for v in cyvcf2.VCF(fn): + if len(v.ALT) > 1: + continue + if v.QUAL < 20: + continue + if v.aaf > 0.05: + continue + n += 1 + except NameError: + n = 9120 + return n + + +def build_filter_from_vcf_with_pysam(fn): + n = 0 + with pysam.VariantFile(fn) as vcf: + for v in vcf: + # the two commands below take >1s out of 19s total + if len(v.alts) > 1: + continue + if v.qual < 20: + continue + # this takes 12s out of 19s total + gts = [s['GT'] for s in v.samples.values()] + # the lines below take 6s out of 19s total + an = sum(len(gt) for gt in gts) + ac = sum(sum(gt) for gt in gts) + aaf = (float(ac) / float(an)) + if aaf > 0.05: + continue + n += 1 + return n + diff --git a/tests/VariantFile_bench.py b/tests/VariantFile_bench.py new file mode 100644 index 0000000..d48760c --- /dev/null +++ b/tests/VariantFile_bench.py @@ -0,0 +1,59 @@ +"""Benchmarking module for AlignmentFile functionality""" +import os +import pytest + + +from TestUtils import BAM_DATADIR, force_str, flatten_nested_list +from VariantFileFetchTestUtils import * + + +GENOMES_URL = "ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr{chrom}.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz" + +CHROM = 22 + + +@pytest.fixture +def genomes_data(): + url = GENOMES_URL.format(chrom=CHROM) + fn = os.path.basename(url) + print(fn) + if not os.path.exists(fn): + os.system("wget {}".format(url)) + if not os.path.exists(fn + ".tbi"): + os.system("wget {}".format(url + ".tbi")) + + fn_small = "small.vcf.gz" + if not os.path.exists(fn_small): + os.system("bcftools view {} | head -n 10000 | bgzip > {}".format(fn, fn_small)) + os.system("tabix -p vcf {}".format(fn_small)) + + return fn_small + + +@pytest.mark.benchmark(min_rounds=1) +def test_build_filter_from_vcf_with_bcftoolsshell(benchmark, genomes_data): + result = benchmark(build_filter_from_vcf_with_samtoolsshell, genomes_data) + assert result == 9120 + + +@pytest.mark.benchmark(min_rounds=1) +def test_build_filter_from_vcf_with_bcftoolpipe(benchmark, genomes_data): + result = benchmark(build_filter_from_vcf_with_bcftoolspipe, genomes_data) + assert result == 9120 + + +@pytest.mark.benchmark(min_rounds=1) +def test_build_filter_from_vcf_with_cyvcf2(benchmark, genomes_data): + result = benchmark(build_filter_from_vcf_with_cyvcf2, genomes_data) + # note: inconsistent with bcftools + assert result == 9114 + + +@pytest.mark.benchmark(min_rounds=1) +def test_build_filter_from_vcf_with_pysam(benchmark, genomes_data): + result = benchmark(build_filter_from_vcf_with_pysam, genomes_data) + # note: inconsistent with bcftools + assert result == 9114 + + + diff --git a/tests/VariantFile_test.py b/tests/VariantFile_test.py new file mode 100644 index 0000000..eedcc9a --- /dev/null +++ b/tests/VariantFile_test.py @@ -0,0 +1,611 @@ +import os +import sys +import unittest +import pysam +import shutil +import gzip +import subprocess + +try: + from pathlib import Path +except ImportError: + Path = None + +from TestUtils import get_temp_filename, check_lines_equal, load_and_convert, CBCF_DATADIR, get_temp_context + + +def read_header(filename): + data = [] + if filename.endswith(".gz"): + for line in gzip.open(filename): + line = line.decode("ascii") + if line.startswith("#"): + data.append(line) + else: + with open(filename) as f: + for line in f: + if line.startswith("#"): + data.append(line) + + return data + + +class TestMissingGenotypes(unittest.TestCase): + + filename = "missing_genotypes.vcf" + + def setUp(self): + self.compare = load_and_convert( + os.path.join(CBCF_DATADIR, self.filename), + encode=False) + + def check(self, filename): + """see issue 203 - check for segmentation fault""" + fn = os.path.join(CBCF_DATADIR, filename) + self.assertEqual(True, os.path.exists(fn)) + v = pysam.VariantFile(fn) + for site in v: + for ss, rec in site.samples.items(): + a, b = ss, rec + + v = pysam.VariantFile(fn) + for x, site in enumerate(v): + for ss, rec in site.samples.items(): + a, b = ss, rec.alleles + a, b = ss, rec.allele_indices + + def testVCF(self): + self.check(self.filename) + + def testVCFGZ(self): + self.check(self.filename + ".gz") + + +class TestMissingSamples(unittest.TestCase): + + filename = "gnomad.vcf" + + def setUp(self): + self.compare = load_and_convert( + os.path.join(CBCF_DATADIR, self.filename), + encode=False) + + def check(self, filename): + """see issue #593""" + fn = os.path.join(CBCF_DATADIR, filename) + self.assertEqual(True, os.path.exists(fn)) + expect_fail = not "fixed" in self.filename + with pysam.VariantFile(fn) as inf: + rec = next(inf.fetch()) + if expect_fail: + self.assertRaises(ValueError, rec.info.__getitem__, "GC") + else: + self.assertEqual(rec.info["GC"], (27, 35, 16)) + + def testVCF(self): + self.check(self.filename) + + def testVCFGZ(self): + self.check(self.filename + ".gz") + + +class TestMissingSamplesFixed(TestMissingSamples): + # workaround for NUMBER=G in INFO records: + # perl 's/Number=G/Number=./ if (/INFO/)' + + filename = "gnomad_fixed.vcf" + + +class TestOpening(unittest.TestCase): + + def testMissingFile(self): + self.assertRaises(IOError, pysam.VariantFile, + "missing_file.vcf") + + def testMissingFileVCFGZ(self): + self.assertRaises(IOError, pysam.VariantFile, + "missing_file.vcf.gz") + + def testEmptyFileVCF(self): + with get_temp_context("tmp_testEmptyFile.vcf") as fn: + with open(fn, "w"): + pass + self.assertRaises(ValueError, pysam.VariantFile, fn) + + if Path and sys.version_info >= (3, 6): + def testEmptyFileVCFFromPath(self): + with get_temp_context("tmp_testEmptyFile.vcf") as fn: + with open(fn, "w"): + pass + self.assertRaises(ValueError, pysam.VariantFile, + Path(fn)) + + def testEmptyFileVCFGZWithIndex(self): + with get_temp_context("tmp_testEmptyFile.vcf") as fn: + with open(fn, "w"): + pass + # tabix_index will automatically compress + pysam.tabix_index(fn, + preset="vcf", + force=True) + + self.assertRaises(ValueError, pysam.VariantFile, fn + ".gz") + + def testEmptyFileVCFGZWithoutIndex(self): + with get_temp_context("tmp_testEmptyFileWithoutIndex.vcf") as fn: + with open(fn, "w"): + pass + + pysam.tabix_compress(fn, + fn + ".gz", + force=True) + + self.assertRaises(ValueError, pysam.VariantFile, fn + ".gz") + + def testEmptyFileVCFOnlyHeader(self): + with pysam.VariantFile(os.path.join( + CBCF_DATADIR, + "example_vcf42_only_header.vcf")) as inf: + self.assertEqual(len(list(inf.fetch())), 0) + + def testEmptyFileVCFGZOnlyHeader(self): + with pysam.VariantFile(os.path.join( + CBCF_DATADIR, + "example_vcf42_only_header.vcf")) as inf: + self.assertEqual(len(list(inf.fetch())), 0) + + def testDetectVCF(self): + with pysam.VariantFile(os.path.join(CBCF_DATADIR, + "example_vcf40.vcf")) as inf: + self.assertEqual(inf.category, 'VARIANTS') + self.assertEqual(inf.format, 'VCF') + self.assertEqual(inf.compression, 'NONE') + self.assertFalse(inf.is_remote) + self.assertFalse(inf.is_stream) + self.assertEqual(len(list(inf.fetch())), 5) + + def testDetectVCFGZ(self): + with pysam.VariantFile(os.path.join(CBCF_DATADIR, + "example_vcf40.vcf.gz")) as inf: + self.assertEqual(inf.category, 'VARIANTS') + self.assertEqual(inf.format, 'VCF') + self.assertEqual(inf.compression, 'BGZF') + self.assertFalse(inf.is_remote) + self.assertFalse(inf.is_stream) + self.assertEqual(len(list(inf.fetch())), 5) + + def testDetectBCF(self): + with pysam.VariantFile(os.path.join( + CBCF_DATADIR, + "example_vcf40.bcf")) as inf: + self.assertEqual(inf.category, 'VARIANTS') + self.assertEqual(inf.format, 'BCF') + self.assertEqual(inf.compression, 'BGZF') + self.assertFalse(inf.is_remote) + self.assertFalse(inf.is_stream) + self.assertEqual(len(list(inf.fetch())), 5) + + +class TestIndexFormatsVCF(unittest.TestCase): + + vcf_filename = os.path.join(CBCF_DATADIR, "example_vcf40.vcf") + bcf_filename = os.path.join(CBCF_DATADIR, "example_vcf40.bcf") + + def test_vcf_with_tbi_index(self): + with get_temp_context("tmp_fn.vcf") as fn: + shutil.copyfile(self.vcf_filename, fn) + pysam.tabix_index(fn, preset="vcf", force=True) + self.assertTrue(os.path.exists(fn + ".gz" + ".tbi")) + self.assertFalse(os.path.exists(fn + ".gz" + ".csi")) + + with pysam.VariantFile(fn + ".gz") as inf: + self.assertEqual(len(list(inf.fetch("20"))), 3) + + def test_vcf_with_csi_index(self): + with get_temp_context("tmp_fn.vcf") as fn: + shutil.copyfile(self.vcf_filename, fn) + + pysam.tabix_index(fn, preset="vcf", force=True, csi=True) + self.assertTrue(os.path.exists(fn + ".gz" + ".csi")) + self.assertFalse(os.path.exists(fn + ".gz" + ".tbi")) + + with pysam.VariantFile(fn + ".gz") as inf: + self.assertEqual(len(list(inf.fetch("20"))), 3) + + def test_bcf_with_prebuilt_csi(self): + with get_temp_context("tmp_fn.bcf") as fn: + shutil.copyfile(self.bcf_filename, fn) + shutil.copyfile(self.bcf_filename + ".csi", fn + ".csi") + + self.assertTrue(os.path.exists(fn + ".csi")) + self.assertFalse(os.path.exists(fn + ".tbi")) + + with pysam.VariantFile(fn) as inf: + self.assertEqual(len(list(inf.fetch("20"))), 3) + + def test_bcf_with_tbi_index_will_produce_csi(self): + with get_temp_context("tmp_fn.bcf") as fn: + shutil.copyfile(self.bcf_filename, fn) + + pysam.tabix_index(fn, preset="bcf", force=True, csi=False) + self.assertTrue(os.path.exists(fn + ".csi")) + self.assertFalse(os.path.exists(fn + ".tbi")) + + with pysam.VariantFile(fn) as inf: + self.assertEqual(len(list(inf.fetch("20"))), 3) + + def test_bcf_with_csi_index(self): + with get_temp_context("tmp_fn.bcf") as fn: + shutil.copyfile(self.bcf_filename, fn) + + pysam.tabix_index(fn, preset="vcf", force=True, csi=True) + + self.assertTrue(os.path.exists(fn + ".csi")) + self.assertFalse(os.path.exists(fn + ".tbi")) + + with pysam.VariantFile(fn) as inf: + self.assertEqual(len(list(inf.fetch("20"))), 3) + + +class TestHeader(unittest.TestCase): + + filename = "example_vcf40.vcf" + + def testStr(self): + + fn = os.path.join(CBCF_DATADIR, self.filename) + v = pysam.VariantFile(fn) + + ref = read_header(fn) + comp = str(v.header).splitlines(True) + + self.assertEqual(sorted(ref), + sorted(comp)) + + def testIterator(self): + + fn = os.path.join(CBCF_DATADIR, self.filename) + v = pysam.VariantFile(fn) + + ref = read_header(fn) + # remove last header line starting with #CHROM + ref.pop() + ref = sorted(ref) + comp = sorted(str(x) for x in v.header.records) + + self.assertEqual(len(ref), len(comp)) + + for x, y in zip(ref, comp): + self.assertEqual(x, y) + + +# These tests need to be separate and start from newly opened files. This +# is because htslib's parser is lazy and the pysam API needs to trigger +# appropriate parsing when accessing each time of data. Failure to do so +# will result in crashes or return of incorrect data. Thus this test suite +# is testing both the triggering of the lazy parser and the results of the +# parser. +class TestParsing(unittest.TestCase): + + filename = "example_vcf40.vcf.gz" + + def testChrom(self): + fn = os.path.join(CBCF_DATADIR, self.filename) + v = pysam.VariantFile(fn) + chrom = [rec.chrom for rec in v] + self.assertEqual(chrom, ['M', '17', '20', '20', '20']) + + if Path and sys.version_info >= (3, 6): + def testChromFromPath(self): + fn = os.path.join(CBCF_DATADIR, self.filename) + v = pysam.VariantFile(Path(fn)) + chrom = [rec.chrom for rec in v] + self.assertEqual(chrom, ['M', '17', '20', '20', '20']) + + def testPos(self): + fn = os.path.join(CBCF_DATADIR, self.filename) + v = pysam.VariantFile(fn) + pos = [rec.pos for rec in v] + self.assertEqual(pos, [1230237, 14370, 17330, 1110696, 1234567]) + + def testStart(self): + fn = os.path.join(CBCF_DATADIR, self.filename) + v = pysam.VariantFile(fn) + start = [rec.start for rec in v] + self.assertEqual(start, [1230236, 14369, 17329, 1110695, 1234566]) + + def testStop(self): + fn = os.path.join(CBCF_DATADIR, self.filename) + v = pysam.VariantFile(fn) + stop = [rec.stop for rec in v] + self.assertEqual(stop, [1230237, 14370, 17330, 1110696, 1234570]) + + def testId(self): + fn = os.path.join(CBCF_DATADIR, self.filename) + v = pysam.VariantFile(fn) + ids = [rec.id for rec in v] + self.assertEqual( + ids, [None, 'rs6054257', None, 'rs6040355', 'microsat1']) + + def testRef(self): + fn = os.path.join(CBCF_DATADIR, self.filename) + v = pysam.VariantFile(fn) + ref = [rec.ref for rec in v] + self.assertEqual(ref, ['T', 'G', 'T', 'A', 'GTCT']) + + def testAlt(self): + fn = os.path.join(CBCF_DATADIR, self.filename) + v = pysam.VariantFile(fn) + alts = [rec.alts for rec in v] + self.assertEqual(alts, [None, ('A',), ('A',), + ('G', 'T'), ('G', 'GTACT')]) + + def testAlleles(self): + fn = os.path.join(CBCF_DATADIR, self.filename) + v = pysam.VariantFile(fn) + alleles = [rec.alleles for rec in v] + self.assertEqual(alleles, [ + ('T',), ('G', 'A'), ('T', 'A'), ('A', 'G', 'T'), ('GTCT', 'G', 'GTACT')]) + + def testQual(self): + fn = os.path.join(CBCF_DATADIR, self.filename) + v = pysam.VariantFile(fn) + qual = [rec.qual for rec in v] + self.assertEqual(qual, [47.0, 29.0, 3.0, 67.0, 50.0]) + + def testFilter(self): + fn = os.path.join(CBCF_DATADIR, self.filename) + v = pysam.VariantFile(fn) + filter = [rec.filter.keys() for rec in v] + self.assertEqual(filter, [['PASS'], ['PASS'], + ['q10'], ['PASS'], ['PASS']]) + + def testInfo(self): + fn = os.path.join(CBCF_DATADIR, self.filename) + v = pysam.VariantFile(fn) + info = [rec.info.items() for rec in v] + self.assertEqual(info, [[('NS', 3), ('DP', 13), ('AA', 'T')], + [('NS', 3), ('DP', 14), ('AF', (0.5,)), + ('DB', True), ('H2', True)], + [('NS', 3), ('DP', 11), + ('AF', (0.017000000923871994,))], + [('NS', 2), ('DP', 10), ('AF', (0.3330000042915344, 0.6669999957084656)), + ('AA', 'T'), ('DB', True)], + [('NS', 3), ('DP', 9), ('AA', 'G')]]) + + def testFormat(self): + fn = os.path.join(CBCF_DATADIR, self.filename) + v = pysam.VariantFile(fn) + format = [rec.format.keys() for rec in v] + self.assertEqual(format, [['GT', 'GQ', 'DP', 'HQ'], + ['GT', 'GQ', 'DP', 'HQ'], + ['GT', 'GQ', 'DP', 'HQ'], + ['GT', 'GQ', 'DP', 'HQ'], + ['GT', 'GQ', 'DP']]) + + def testSampleAlleles(self): + fn = os.path.join(CBCF_DATADIR, self.filename) + v = pysam.VariantFile(fn) + alleles = [s.alleles for rec in v for s in rec.samples.values()] + self.assertEqual(alleles, [('T', 'T'), ('T', 'T'), ('T', 'T'), + ('G', 'G'), ('A', 'G'), ('A', 'A'), + ('T', 'T'), ('T', 'A'), ('T', 'T'), + ('G', 'T'), ('T', 'G'), ('T', 'T'), + ('GTCT', 'G'), ('GTCT', 'GTACT'), + ('G', 'G')]) + + def testSampleFormats(self): + fn = os.path.join(CBCF_DATADIR, self.filename) + v = pysam.VariantFile(fn) + format = [s.items() for rec in v for s in rec.samples.values()] + self.assertEqual(format, [[('GT', (0, 0)), ('GQ', 54), ('DP', 7), ('HQ', (56, 60))], + [('GT', (0, 0)), ('GQ', 48), + ('DP', 4), ('HQ', (51, 51))], + [('GT', (0, 0)), ('GQ', 61), + ('DP', 2), ('HQ', (None,))], + [('GT', (0, 0)), ('GQ', 48), + ('DP', 1), ('HQ', (51, 51))], + [('GT', (1, 0)), ('GQ', 48), + ('DP', 8), ('HQ', (51, 51))], + [('GT', (1, 1)), ('GQ', 43), + ('DP', 5), ('HQ', (None, None))], + [('GT', (0, 0)), ('GQ', 49), + ('DP', 3), ('HQ', (58, 50))], + [('GT', (0, 1)), ('GQ', 3), + ('DP', 5), ('HQ', (65, 3))], + [('GT', (0, 0)), ('GQ', 41), + ('DP', 3), ('HQ', (None,))], + [('GT', (1, 2)), ('GQ', 21), + ('DP', 6), ('HQ', (23, 27))], + [('GT', (2, 1)), ('GQ', 2), + ('DP', 0), ('HQ', (18, 2))], + [('GT', (2, 2)), ('GQ', 35), + ('DP', 4), ('HQ', (None,))], + [('GT', (0, 1)), ('GQ', 35), ('DP', 4)], + [('GT', (0, 2)), ('GQ', 17), ('DP', 2)], + [('GT', (1, 1)), ('GQ', 40), ('DP', 3)]]) + + def testSampleAlleleIndices(self): + fn = os.path.join(CBCF_DATADIR, self.filename) + v = pysam.VariantFile(fn) + indices = [s.allele_indices for rec in v for s in rec.samples.values()] + self.assertEqual(indices, [(0, 0), (0, 0), (0, 0), (0, 0), (1, 0), + (1, 1), (0, 0), (0, 1), (0, 0), (1, 2), + (2, 1), (2, 2), (0, 1), (0, 2), (1, 1)]) + + +class TestIndexFilename(unittest.TestCase): + + filenames = [('example_vcf40.vcf.gz', 'example_vcf40.vcf.gz.tbi'), + ('example_vcf40.vcf.gz', 'example_vcf40.vcf.gz.csi'), + ('example_vcf40.bcf', 'example_vcf40.bcf.csi')] + + def testOpen(self): + for fn, idx_fn in self.filenames: + fn = os.path.join(CBCF_DATADIR, fn) + idx_fn = os.path.join(CBCF_DATADIR, idx_fn) + + with pysam.VariantFile(fn, index_filename=idx_fn) as inf: + self.assertEqual(len(list(inf.fetch('20'))), 3) + + +class TestConstructionVCFWithContigs(unittest.TestCase): + """construct VariantFile from scratch.""" + + filename = "example_vcf42_withcontigs.vcf" + compression = 'NONE' + description = 'VCF version 4.2 variant calling text' + + def testBase(self): + with pysam.VariantFile(os.path.join(CBCF_DATADIR, self.filename)) as inf: + self.assertEqual(inf.category, 'VARIANTS') + self.assertEqual(inf.format, 'VCF') + self.assertEqual(inf.version, (4, 2)) + self.assertEqual(inf.compression, self.compression) + self.assertEqual(inf.description, self.description) + self.assertTrue(inf.is_open) + self.assertEqual(inf.is_read, True) + self.assertEqual(inf.is_write, False) + + def complete_check(self, fn_in, fn_out): + self.maxDiff = None + check_lines_equal( + self, fn_in, fn_out, sort=True, + filter_f=lambda x: x.startswith("##contig")) + os.unlink(fn_out) + + def testConstructionWithRecords(self): + + fn_in = os.path.join(CBCF_DATADIR, self.filename) + fn_out = get_temp_filename(suffix=".vcf") + vcf_in = pysam.VariantFile(fn_in) + + header = pysam.VariantHeader() + + for record in vcf_in.header.records: + header.add_record(record) + + for sample in vcf_in.header.samples: + header.add_sample(sample) + + vcf_out = pysam.VariantFile(fn_out, "w", header=header) + for record in vcf_in: + record.translate(header) + vcf_out.write(record) + + vcf_in.close() + vcf_out.close() + self.complete_check(fn_in, fn_out) + + def testConstructionFromCopy(self): + + fn_in = os.path.join(CBCF_DATADIR, self.filename) + fn_out = get_temp_filename(suffix=".vcf") + vcf_in = pysam.VariantFile(fn_in) + + vcf_out = pysam.VariantFile(fn_out, "w", header=vcf_in.header) + for record in vcf_in: + vcf_out.write(record) + + vcf_in.close() + vcf_out.close() + + self.complete_check(fn_in, fn_out) + + def testConstructionWithLines(self): + + fn_in = os.path.join(CBCF_DATADIR, self.filename) + fn_out = get_temp_filename(suffix=".vcf") + vcf_in = pysam.VariantFile(fn_in) + + header = pysam.VariantHeader() + for sample in vcf_in.header.samples: + header.add_sample(sample) + + for hr in vcf_in.header.records: + header.add_line(str(hr)) + + vcf_out = pysam.VariantFile(fn_out, "w", header=header) + + for record in vcf_in: + vcf_out.write(record) + + vcf_out.close() + vcf_in.close() + + self.complete_check(fn_in, fn_out) + + +# class TestConstructionVCFWithoutContigs(TestConstructionVCFWithContigs): +# """construct VariantFile from scratch.""" +# filename = "example_vcf40.vcf" + + +class TestConstructionVCFGZWithContigs(TestConstructionVCFWithContigs): + """construct VariantFile from scratch.""" + + filename = "example_vcf42_withcontigs.vcf.gz" + compression = 'BGZF' + description = 'VCF version 4.2 BGZF-compressed variant calling data' + + +class TestConstructionVCFGZWithoutContigs(TestConstructionVCFWithContigs): + """construct VariantFile from scratch.""" + + filename = "example_vcf42.vcf.gz" + compression = 'BGZF' + description = 'VCF version 4.2 BGZF-compressed variant calling data' + + +class TestSettingRecordValues(unittest.TestCase): + + filename = "example_vcf40.vcf" + + def testBase(self): + with pysam.VariantFile(os.path.join(CBCF_DATADIR, self.filename)) as inf: + self.assertEqual(inf.category, 'VARIANTS') + self.assertEqual(inf.format, 'VCF') + self.assertEqual(inf.version, (4, 0)) + self.assertEqual(inf.compression, 'NONE') + self.assertEqual( + inf.description, 'VCF version 4.0 variant calling text') + self.assertTrue(inf.is_open) + self.assertEqual(inf.is_read, True) + self.assertEqual(inf.is_write, False) + + def testSetQual(self): + with pysam.VariantFile(os.path.join(CBCF_DATADIR, self.filename)) as inf: + record = next(inf) + self.assertEqual(record.qual, 47) + record.qual = record.qual + self.assertEqual(record.qual, 47) + record.qual = 10 + self.assertEqual(record.qual, 10) + self.assertEqual(str(record).split("\t")[5], "10") + + def testGenotype(self): + with pysam.VariantFile(os.path.join(CBCF_DATADIR, self.filename)) as inf: + record = next(inf) + sample = record.samples["NA00001"] + print(sample["GT"]) + self.assertEqual(sample["GT"], (0, 0)) + sample["GT"] = sample["GT"] + + +class TestSubsetting(unittest.TestCase): + + filename = "example_vcf42.vcf.gz" + + def testSubsetting(self): + with pysam.VariantFile(os.path.join(CBCF_DATADIR, + self.filename)) as inf: + inf.subset_samples(["NA00001"]) + + +if __name__ == "__main__": + # build data files + print("building data files") + subprocess.call("make -C %s" % CBCF_DATADIR, shell=True) + print("starting tests") + unittest.main() + print("completed tests") diff --git a/tests/_compile_test.pyx b/tests/_compile_test.pyx new file mode 100644 index 0000000..dfe7937 --- /dev/null +++ b/tests/_compile_test.pyx @@ -0,0 +1,29 @@ +from pysam.libcalignmentfile cimport AlignmentFile, AlignedSegment +from pysam.libctabix cimport Tabixfile + +cdef AlignmentFile samfile +cdef Tabixfile tabixfile + + +def testCountBAM(AlignmentFile samfile): + '''test reading from a BAM file accessing + the flag field directly.''' + + cdef AlignedSegment read + cdef int n = 0 + + for read in samfile.fetch(): + flag = read._delegate.core.flag + n += 1 + + return n + +def testCountGTF(Tabixfile tabixfile): + '''test reading from a tabixfile.''' + + cdef int n = 0 + + for entry in tabixfile.fetch(): + n += 1 + + return n diff --git a/tests/_compile_test.pyxbld b/tests/_compile_test.pyxbld new file mode 100644 index 0000000..87dfb3e --- /dev/null +++ b/tests/_compile_test.pyxbld @@ -0,0 +1,8 @@ +# link against pysam +def make_ext(modname, pyxfilename): + from distutils.extension import Extension + import pysam + return Extension(name = modname, + sources = [pyxfilename], + include_dirs = pysam.get_include(), + define_macros = pysam.get_defines()) diff --git a/tests/_cython_flagstat.pyx b/tests/_cython_flagstat.pyx new file mode 100644 index 0000000..8e376b0 --- /dev/null +++ b/tests/_cython_flagstat.pyx @@ -0,0 +1,18 @@ +from pysam.libcalignmentfile cimport AlignmentFile, AlignedSegment +from pysam.libcalignmentfile cimport BAM_FPROPER_PAIR, BAM_FPAIRED +from pysam.libcalignedsegment cimport pysam_get_flag + +def count(AlignmentFile samfile): + cdef int is_proper = 0 + cdef int is_paired = 0 + cdef AlignedSegment read + cdef int f + + for read in samfile: + f = pysam_get_flag(read._delegate) + if f & BAM_FPAIRED: + is_paired += 1 + if f & BAM_FPROPER_PAIR: + is_proper += 1 + + return is_paired, is_proper diff --git a/tests/_cython_flagstat.pyxbld b/tests/_cython_flagstat.pyxbld new file mode 100644 index 0000000..0e05b76 --- /dev/null +++ b/tests/_cython_flagstat.pyxbld @@ -0,0 +1,8 @@ +def make_ext(modname, pyxfilename): + from distutils.extension import Extension + import pysam + return Extension(name=modname, + sources=[pyxfilename], + extra_link_args=pysam.get_libraries(), + include_dirs=pysam.get_include(), + define_macros=pysam.get_defines()) diff --git a/tests/cbcf_data/Makefile b/tests/cbcf_data/Makefile new file mode 100644 index 0000000..796c3a6 --- /dev/null +++ b/tests/cbcf_data/Makefile @@ -0,0 +1,23 @@ +ALL_VCF=$(wildcard *.vcf) +VCF=$(filter-out example_empty.vcf,$(ALL_VCF)) + +VCFGZ=$(VCF:%.vcf=%.vcf.gz) +BCF=$(VCF:%.vcf=%.bcf) + +all: $(VCFGZ) $(BCF) + +%.vcf.gz: %.vcf + bgzip < $< > $@ + tabix -p vcf $@ # create tbi index + bcftools index $@ # create csi index + +%.bcf: %.vcf.gz + bcftools view -O b $< -o $@ + bcftools index $@ + +example_empty.bcf: example_empty.vcf.gz + touch $@ + +clean: + rm -f *.gz *.tbi *.csi *.bcf + diff --git a/tests/cbcf_data/example_empty.vcf b/tests/cbcf_data/example_empty.vcf new file mode 100644 index 0000000..e69de29 diff --git a/tests/cbcf_data/example_vcf40.vcf b/tests/cbcf_data/example_vcf40.vcf new file mode 100644 index 0000000..8dd9f20 --- /dev/null +++ b/tests/cbcf_data/example_vcf40.vcf @@ -0,0 +1,24 @@ +##fileformat=VCFv4.0 +##fileDate=20090805 +##source=myImputationProgramV3.1 +##reference=1000GenomesPilot-NCBI36 +##phasing=partial +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FILTER= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003 +M 1230237 . T . 47 PASS NS=3;DP=13;AA=T GT:GQ:DP:HQ 0|0:54:7:56,60 0|0:48:4:51,51 0/0:61:2 +17 14370 rs6054257 G A 29 PASS NS=3;DP=14;AF=0.5;DB;H2 GT:GQ:DP:HQ 0|0:48:1:51,51 1|0:48:8:51,51 1/1:43:5:.,. +20 17330 . T A 3 q10 NS=3;DP=11;AF=0.017 GT:GQ:DP:HQ 0|0:49:3:58,50 0|1:3:5:65,3 0/0:41:3 +20 1110696 rs6040355 A G,T 67 PASS NS=2;DP=10;AF=0.333,0.667;AA=T;DB GT:GQ:DP:HQ 1|2:21:6:23,27 2|1:2:0:18,2 2/2:35:4 +20 1234567 microsat1 GTCT G,GTACT 50 PASS NS=3;DP=9;AA=G GT:GQ:DP 0/1:35:4 0/2:17:2 1/1:40:3 diff --git a/tests/cbcf_data/example_vcf42.vcf b/tests/cbcf_data/example_vcf42.vcf new file mode 100644 index 0000000..f103e1f --- /dev/null +++ b/tests/cbcf_data/example_vcf42.vcf @@ -0,0 +1,24 @@ +##fileformat=VCFv4.2 +##fileDate=20090805 +##source=myImputationProgramV3.1 +##reference=1000GenomesPilot-NCBI36 +##phasing=partial +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FILTER= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003 +M 1230237 . T . 47 PASS NS=3;DP=13;AA=T GT:GQ:DP:HQ 0|0:54:7:56,60 0|0:48:4:51,51 0/0:61:2:. +17 14370 rs6054257 G A 29 PASS NS=3;DP=14;AF=0.5;DB;H2 GT:GQ:DP:HQ 0|0:48:1:51,51 1|0:48:8:51,51 1/1:43:5:.,. +20 17330 . T A 3 q10 NS=3;DP=11;AF=0.017 GT:GQ:DP:HQ 0|0:49:3:58,50 0|1:3:5:65,3 0/0:41:3:. +20 1110696 rs6040355 A G,T 67 PASS NS=2;DP=10;AF=0.333,0.667;AA=T;DB GT:GQ:DP:HQ 1|2:21:6:23,27 2|1:2:0:18,2 2/2:35:4:. +20 1234567 microsat1 GTCT G,GTACT 50 PASS NS=3;DP=9;AA=G GT:GQ:DP 0/1:35:4 0/2:17:2 1/1:40:3 diff --git a/tests/cbcf_data/example_vcf42_only_header.vcf b/tests/cbcf_data/example_vcf42_only_header.vcf new file mode 100644 index 0000000..ee0f8fa --- /dev/null +++ b/tests/cbcf_data/example_vcf42_only_header.vcf @@ -0,0 +1,19 @@ +##fileformat=VCFv4.2 +##fileDate=20090805 +##source=myImputationProgramV3.1 +##reference=1000GenomesPilot-NCBI36 +##phasing=partial +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FILTER= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003 diff --git a/tests/cbcf_data/example_vcf42_withcontigs.vcf b/tests/cbcf_data/example_vcf42_withcontigs.vcf new file mode 100644 index 0000000..1d298eb --- /dev/null +++ b/tests/cbcf_data/example_vcf42_withcontigs.vcf @@ -0,0 +1,27 @@ +##fileformat=VCFv4.2 +##fileDate=20090805 +##source=myImputationProgramV3.1 +##reference=1000GenomesPilot-NCBI36 +##phasing=partial +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FILTER= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##contig= +##contig= +##contig= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003 +M 1230237 . T . 47 PASS NS=3;DP=13;AA=T GT:GQ:DP:HQ 0|0:54:7:56,60 0|0:48:4:51,51 0/0:61:2:. +17 14370 rs6054257 G A 29 PASS NS=3;DP=14;AF=0.5;DB;H2 GT:GQ:DP:HQ 0|0:48:1:51,51 1|0:48:8:51,51 1/1:43:5:.,. +20 17330 . T A 3 q10 NS=3;DP=11;AF=0.017 GT:GQ:DP:HQ 0|0:49:3:58,50 0|1:3:5:65,3 0/0:41:3:. +20 1110696 rs6040355 A G,T 67 PASS NS=2;DP=10;AF=0.333,0.667;AA=T;DB GT:GQ:DP:HQ 1|2:21:6:23,27 2|1:2:0:18,2 2/2:35:4:. +20 1234567 microsat1 GTCT G,GTACT 50 PASS NS=3;DP=9;AA=G GT:GQ:DP 0/1:35:4 0/2:17:2 1/1:40:3 diff --git a/tests/cbcf_data/gnomad.vcf b/tests/cbcf_data/gnomad.vcf new file mode 100644 index 0000000..9875c03 --- /dev/null +++ b/tests/cbcf_data/gnomad.vcf @@ -0,0 +1,200 @@ +##fileformat=VCFv4.2 +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FILTER= +##FILTER== 20, DP >= 10, AB => 0.2 for het calls))"> +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##reference=file:///seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta +#CHROM POS ID REF ALT QUAL FILTER INFO +22 16050036 rs374742143 A C 442156.34 RF AC=67;AF=4.29487e-01;AN=156;BaseQRankSum=7.36000e-01;ClippingRankSum=2.96000e-01;DB;DP=50165;FS=7.05600e+00;InbreedingCoeff=3.82000e-01;MQ=2.71500e+01;MQRankSum=-1.02600e+00;QD=2.47500e+01;ReadPosRankSum=-2.11000e-01;SOR=1.26750e+01;VQSLOD=-9.58600e+02;VQSR_culprit=MQ;GQ_HIST_ALT=16|1279|299|254|155|24|16|28|50|135|78|4|6|11|32|43|6|4|3|35;DP_HIST_ALT=1769|653|51|5|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALT=0|0|0|2|5|24|36|11|89|2|125|31|61|85|24|60|34|8|3|7;GQ_HIST_ALL=2359|2810|730|651|296|51|34|33|53|135|78|4|6|11|32|43|6|4|3|35;DP_HIST_ALL=5518|1756|94|6|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALL=0|0|0|2|5|24|36|11|89|2|125|31|61|85|24|60|34|8|3|7;AC_AFR=3;AC_AMR=7;AC_ASJ=0;AC_EAS=0;AC_FIN=50;AC_NFE=3;AC_OTH=4;AC_Male=32;AC_Female=35;AN_AFR=14;AN_AMR=10;AN_ASJ=0;AN_EAS=0;AN_FIN=84;AN_NFE=42;AN_OTH=6;AN_Male=80;AN_Female=76;AF_AFR=2.14286e-01;AF_AMR=7.00000e-01;AF_ASJ=.;AF_EAS=.;AF_FIN=5.95238e-01;AF_NFE=7.14286e-02;AF_OTH=6.66667e-01;AF_Male=4.00000e-01;AF_Female=4.60526e-01;GC_AFR=4,3,0;GC_AMR=0,3,2;GC_ASJ=0,0,0;GC_EAS=0,0,0;GC_FIN=4,26,12;GC_NFE=18,3,0;GC_OTH=1,0,2;GC_Male=16,16,8;GC_Female=11,19,8;AC_raw=4349;AN_raw=14748;AF_raw=2.94887e-01;GC_raw=4896,607,1871;GC=27,35,16;Hom_AFR=0;Hom_AMR=2;Hom_ASJ=0;Hom_EAS=0;Hom_FIN=12;Hom_NFE=0;Hom_OTH=2;Hom_Male=8;Hom_Female=8;Hom_raw=1871;Hom=16;POPMAX=AMR;AC_POPMAX=7;AN_POPMAX=10;AF_POPMAX=7.00000e-01;DP_MEDIAN=3;DREF_MEDIAN=5.60406e-10;GQ_MEDIAN=12;AB_MEDIAN=5.55556e-01;AS_RF=4.71609e-02;AS_FilterStatus=RF;CSQ=C|intergenic_variant|MODIFIER|||||||||||||||rs374742143|1||||SNV|1|||||||||||||||||||||||||||||||||||||||||||| +22 16050068 . A G 82.46 RF;AC0 AC=0;AF=0.00000e+00;AN=2708;DP=111486;FS=0.00000e+00;InbreedingCoeff=-3.63000e-02;MQ=3.20200e+01;QD=1.64900e+01;SOR=3.61100e+00;VQSLOD=-9.28900e+01;VQSR_culprit=MQ;GQ_HIST_ALT=0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;DP_HIST_ALT=0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALT=0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;GQ_HIST_ALL=1227|4189|2184|3537|2071|618|693|346|97|92|61|9|18|0|7|4|4|0|0|0;DP_HIST_ALL=7502|6289|1163|169|26|8|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALL=0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AC_AFR=0;AC_AMR=0;AC_ASJ=0;AC_EAS=0;AC_FIN=0;AC_NFE=0;AC_OTH=0;AC_Male=0;AC_Female=0;AN_AFR=280;AN_AMR=162;AN_ASJ=34;AN_EAS=74;AN_FIN=748;AN_NFE=1300;AN_OTH=110;AN_Male=1584;AN_Female=1124;AF_AFR=0.00000e+00;AF_AMR=0.00000e+00;AF_ASJ=0.00000e+00;AF_EAS=0.00000e+00;AF_FIN=0.00000e+00;AF_NFE=0.00000e+00;AF_OTH=0.00000e+00;AF_Male=0.00000e+00;AF_Female=0.00000e+00;GC_AFR=140,0,0;GC_AMR=81,0,0;GC_ASJ=17,0,0;GC_EAS=37,0,0;GC_FIN=374,0,0;GC_NFE=650,0,0;GC_OTH=55,0,0;GC_Male=792,0,0;GC_Female=562,0,0;AC_raw=2;AN_raw=30314;AF_raw=6.59761e-05;GC_raw=15156,0,1;GC=1354,0,0;Hom_AFR=0;Hom_AMR=0;Hom_ASJ=0;Hom_EAS=0;Hom_FIN=0;Hom_NFE=0;Hom_OTH=0;Hom_Male=0;Hom_Female=0;Hom_raw=1;Hom=0;POPMAX=.;AC_POPMAX=.;AN_POPMAX=.;AF_POPMAX=.;DP_MEDIAN=5;DREF_MEDIAN=1.22034e-16;GQ_MEDIAN=15;AB_MEDIAN=5.00000e-01;AS_RF=5.87186e-02;AS_FilterStatus=RF|AC0;CSQ=G|intergenic_variant|MODIFIER||||||||||||||||1||||SNV|1|||||||||||||||||||||||||||||||||||||||||||| +22 16050069 . C T 43.44 RF;AC0 AC=0;AF=0.00000e+00;AN=2802;BaseQRankSum=7.20000e-01;ClippingRankSum=-1.38000e+00;DP=112972;FS=0.00000e+00;InbreedingCoeff=-3.70000e-02;MQ=3.67700e+01;MQRankSum=7.20000e-01;QD=7.24000e+00;ReadPosRankSum=1.38000e+00;SOR=1.32900e+00;VQSLOD=-3.27400e+01;VQSR_culprit=MQ;GQ_HIST_ALT=0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0;DP_HIST_ALT=0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALT=0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0;GQ_HIST_ALL=1200|4098|2219|3540|2117|622|710|352|104|101|64|10|20|1|8|3|4|0|0|0;DP_HIST_ALL=7405|6348|1203|181|28|8|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALL=0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0;AC_AFR=0;AC_AMR=0;AC_ASJ=0;AC_EAS=0;AC_FIN=0;AC_NFE=0;AC_OTH=0;AC_Male=0;AC_Female=0;AN_AFR=296;AN_AMR=164;AN_ASJ=36;AN_EAS=70;AN_FIN=766;AN_NFE=1354;AN_OTH=116;AN_Male=1638;AN_Female=1164;AF_AFR=0.00000e+00;AF_AMR=0.00000e+00;AF_ASJ=0.00000e+00;AF_EAS=0.00000e+00;AF_FIN=0.00000e+00;AF_NFE=0.00000e+00;AF_OTH=0.00000e+00;AF_Male=0.00000e+00;AF_Female=0.00000e+00;GC_AFR=148,0,0;GC_AMR=82,0,0;GC_ASJ=18,0,0;GC_EAS=35,0,0;GC_FIN=383,0,0;GC_NFE=677,0,0;GC_OTH=58,0,0;GC_Male=819,0,0;GC_Female=582,0,0;AC_raw=1;AN_raw=30346;AF_raw=3.29533e-05;GC_raw=15172,1,0;GC=1401,0,0;Hom_AFR=0;Hom_AMR=0;Hom_ASJ=0;Hom_EAS=0;Hom_FIN=0;Hom_NFE=0;Hom_OTH=0;Hom_Male=0;Hom_Female=0;Hom_raw=0;Hom=0;POPMAX=.;AC_POPMAX=.;AN_POPMAX=.;AF_POPMAX=.;DP_MEDIAN=6;DREF_MEDIAN=3.16178e-11;GQ_MEDIAN=38;AB_MEDIAN=6.66667e-01;AS_RF=9.22976e-02;AS_FilterStatus=RF|AC0;CSQ=T|intergenic_variant|MODIFIER||||||||||||||||1||||SNV|1|||||||||||||||||||||||||||||||||||||||||||| +22 16050098 . G A 242.82 RF AC=2;AF=2.40964e-04;AN=8300;BaseQRankSum=2.45000e+00;ClippingRankSum=1.03000e-01;DP=167171;FS=0.00000e+00;InbreedingCoeff=-1.46000e-02;MQ=3.06100e+01;MQRankSum=-9.35000e-01;QD=1.05600e+01;ReadPosRankSum=6.60000e-01;SOR=3.84000e-01;VQSLOD=-4.11500e+01;VQSR_culprit=MQ;GQ_HIST_ALT=0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|2;DP_HIST_ALT=0|0|2|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALT=0|0|0|0|0|0|0|0|0|1|1|0|0|0|0|0|0|0|0|0;GQ_HIST_ALL=350|1697|1483|3462|3106|1262|1746|994|348|436|237|88|141|14|39|5|22|4|8|7;DP_HIST_ALL=3368|7876|3165|776|212|33|16|3|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALL=0|0|0|0|0|0|0|0|0|1|1|0|0|0|0|0|0|0|0|0;AC_AFR=0;AC_AMR=0;AC_ASJ=0;AC_EAS=0;AC_FIN=0;AC_NFE=2;AC_OTH=0;AC_Male=2;AC_Female=0;AN_AFR=1298;AN_AMR=334;AN_ASJ=84;AN_EAS=380;AN_FIN=1460;AN_NFE=4412;AN_OTH=332;AN_Male=4748;AN_Female=3552;AF_AFR=0.00000e+00;AF_AMR=0.00000e+00;AF_ASJ=0.00000e+00;AF_EAS=0.00000e+00;AF_FIN=0.00000e+00;AF_NFE=4.53309e-04;AF_OTH=0.00000e+00;AF_Male=4.21230e-04;AF_Female=0.00000e+00;GC_AFR=649,0,0;GC_AMR=167,0,0;GC_ASJ=42,0,0;GC_EAS=190,0,0;GC_FIN=730,0,0;GC_NFE=2204,2,0;GC_OTH=166,0,0;GC_Male=2372,2,0;GC_Female=1776,0,0;AC_raw=2;AN_raw=30898;AF_raw=6.47291e-05;GC_raw=15447,2,0;GC=4148,2,0;Hom_AFR=0;Hom_AMR=0;Hom_ASJ=0;Hom_EAS=0;Hom_FIN=0;Hom_NFE=0;Hom_OTH=0;Hom_Male=0;Hom_Female=0;Hom_raw=0;Hom=0;POPMAX=NFE;AC_POPMAX=2;AN_POPMAX=4412;AF_POPMAX=4.53309e-04;DP_MEDIAN=11;DREF_MEDIAN=6.29479e-16;GQ_MEDIAN=99;AB_MEDIAN=4.80769e-01;AS_RF=3.30908e-01;AS_FilterStatus=RF;CSQ=A|intergenic_variant|MODIFIER||||||||||||||||1||||SNV|1|||||||||||||||||||||||||||||||||||||||||||| +22 16050115 rs587755077 G A 10684.53 RF AC=31;AF=2.54057e-03;AN=12202;BaseQRankSum=1.59000e+00;ClippingRankSum=6.70000e-02;DP=196906;FS=0.00000e+00;InbreedingCoeff=1.40000e-02;MQ=3.37700e+01;MQRankSum=4.06000e-01;QD=8.23000e+00;ReadPosRankSum=3.22000e-01;SOR=4.23100e+00;VQSLOD=-1.16300e+02;VQSR_culprit=MQ;GQ_HIST_ALT=3|6|10|5|3|3|6|13|17|16|2|3|9|12|8|11|5|3|3|14;DP_HIST_ALT=22|95|32|3|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALT=0|0|0|4|6|16|20|8|21|1|28|5|7|7|7|7|8|0|0|0;GQ_HIST_ALL=237|959|984|2740|3098|1328|2215|1483|527|685|442|163|289|52|79|25|61|6|27|39;DP_HIST_ALL=1972|7287|4327|1314|407|79|44|9|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALL=0|0|0|4|6|16|20|8|21|1|28|5|7|7|7|7|8|0|0|0;AC_AFR=30;AC_AMR=1;AC_ASJ=0;AC_EAS=0;AC_FIN=0;AC_NFE=0;AC_OTH=0;AC_Male=16;AC_Female=15;AN_AFR=2236;AN_AMR=436;AN_ASJ=144;AN_EAS=640;AN_FIN=1862;AN_NFE=6410;AN_OTH=474;AN_Male=6874;AN_Female=5328;AF_AFR=1.34168e-02;AF_AMR=2.29358e-03;AF_ASJ=0.00000e+00;AF_EAS=0.00000e+00;AF_FIN=0.00000e+00;AF_NFE=0.00000e+00;AF_OTH=0.00000e+00;AF_Male=2.32761e-03;AF_Female=2.81532e-03;GC_AFR=1088,30,0;GC_AMR=217,1,0;GC_ASJ=72,0,0;GC_EAS=320,0,0;GC_FIN=931,0,0;GC_NFE=3205,0,0;GC_OTH=237,0,0;GC_Male=3421,16,0;GC_Female=2649,15,0;AC_raw=159;AN_raw=30878;AF_raw=5.14930e-03;GC_raw=15287,145,7;GC=6070,31,0;Hom_AFR=0;Hom_AMR=0;Hom_ASJ=0;Hom_EAS=0;Hom_FIN=0;Hom_NFE=0;Hom_OTH=0;Hom_Male=0;Hom_Female=0;Hom_raw=7;Hom=0;POPMAX=AFR;AC_POPMAX=30;AN_POPMAX=2236;AF_POPMAX=1.34168e-02;DP_MEDIAN=7;DREF_MEDIAN=1.74246e-08;GQ_MEDIAN=48;AB_MEDIAN=4.44444e-01;AS_RF=5.02621e-02;AS_FilterStatus=RF;CSQ=A|intergenic_variant|MODIFIER|||||||||||||||rs587755077|1||||SNV|1||||||||||||||||A:0.0064|||||||||||||||||||||||||||| +22 16050116 . G C 28395.88 RF AC=246;AF=2.51431e-02;AN=9784;BaseQRankSum=2.48000e-01;ClippingRankSum=0.00000e+00;DP=201089;FS=0.00000e+00;InbreedingCoeff=-7.09000e-02;MQ=3.23400e+01;MQRankSum=-1.23100e+00;QD=3.27000e+00;ReadPosRankSum=2.48000e-01;SOR=7.16400e+00;VQSLOD=-3.11400e+02;VQSR_culprit=MQ;GQ_HIST_ALT=0|3|6|9|32|41|110|119|73|75|49|48|27|32|38|16|4|9|19|27;DP_HIST_ALT=21|356|285|60|12|3|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALT=0|0|11|105|184|174|98|40|64|2|30|5|11|8|2|2|0|0|0|0;GQ_HIST_ALL=2616|992|935|2244|2407|1109|1723|1219|458|593|382|175|259|62|105|27|46|11|38|55;DP_HIST_ALL=1838|7215|4403|1404|443|92|50|11|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALL=0|0|11|105|184|174|98|40|64|2|30|5|11|8|2|2|0|0|0|0;AC_AFR=18;AC_AMR=5;AC_ASJ=4;AC_EAS=3;AC_FIN=5;AC_NFE=202;AC_OTH=9;AC_Male=141;AC_Female=105;AN_AFR=2166;AN_AMR=402;AN_ASJ=88;AN_EAS=650;AN_FIN=1722;AN_NFE=4390;AN_OTH=366;AN_Male=5450;AN_Female=4334;AF_AFR=8.31025e-03;AF_AMR=1.24378e-02;AF_ASJ=4.54545e-02;AF_EAS=4.61538e-03;AF_FIN=2.90360e-03;AF_NFE=4.60137e-02;AF_OTH=2.45902e-02;AF_Male=2.58716e-02;AF_Female=2.42270e-02;GC_AFR=1065,18,0;GC_AMR=196,5,0;GC_ASJ=40,4,0;GC_EAS=322,3,0;GC_FIN=856,5,0;GC_NFE=1993,202,0;GC_OTH=174,9,0;GC_Male=2584,141,0;GC_Female=2062,105,0;AC_raw=738;AN_raw=30912;AF_raw=2.38742e-02;GC_raw=14719,736,1;GC=4646,246,0;Hom_AFR=0;Hom_AMR=0;Hom_ASJ=0;Hom_EAS=0;Hom_FIN=0;Hom_NFE=0;Hom_OTH=0;Hom_Male=0;Hom_Female=0;Hom_raw=1;Hom=0;POPMAX=NFE;AC_POPMAX=202;AN_POPMAX=4390;AF_POPMAX=4.60137e-02;DP_MEDIAN=9;DREF_MEDIAN=6.30918e-05;GQ_MEDIAN=42;AB_MEDIAN=2.50000e-01;AS_RF=8.65786e-03;AS_FilterStatus=RF;CSQ=C|intergenic_variant|MODIFIER||||||||||||||||1||||SNV|1|||||||||||||||||||||||||||||||||||||||||||| +22 16050129 . G GACA,C 1164.92 PASS AC=3,0;AF=1.81378e-04,0.00000e+00;AN=16540;BaseQRankSum=-2.24000e-01;ClippingRankSum=-2.63000e-01;DP=230703;FS=8.86700e+00;InbreedingCoeff=5.80000e-03;MQ=3.46800e+01;MQRankSum=1.43000e-01;QD=1.01300e+01;ReadPosRankSum=-2.13000e-01;SOR=3.30000e-02;VQSLOD=-1.37800e+00;VQSR_culprit=SOR;VQSR_NEGATIVE_TRAIN_SITE;GQ_HIST_ALT=0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|1|0|0|4,0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0;DP_HIST_ALT=0|3|2|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0,0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALT=0|0|0|0|0|0|2|0|1|1|1|0|0|0|0|1|0|0|0|0,0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0;GQ_HIST_ALL=104|464|608|1985|2741|1441|2526|1859|721|1069|690|260|538|62|159|47|92|8|46|68;DP_HIST_ALL=1018|6123|5177|2097|791|161|97|24|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALL=0|0|0|0|0|0|2|0|1|1|1|0|1|0|0|1|0|0|0|0;AC_AFR=0,0;AC_AMR=0,0;AC_ASJ=0,0;AC_EAS=0,0;AC_FIN=0,0;AC_NFE=3,0;AC_OTH=0,0;AC_Male=3,0;AC_Female=0,0;AN_AFR=3614;AN_AMR=528;AN_ASJ=180;AN_EAS=892;AN_FIN=2256;AN_NFE=8466;AN_OTH=604;AN_Male=9308;AN_Female=7232;AF_AFR=0.00000e+00,0.00000e+00;AF_AMR=0.00000e+00,0.00000e+00;AF_ASJ=0.00000e+00,0.00000e+00;AF_EAS=0.00000e+00,0.00000e+00;AF_FIN=0.00000e+00,0.00000e+00;AF_NFE=3.54359e-04,0.00000e+00;AF_OTH=0.00000e+00,0.00000e+00;AF_Male=3.22303e-04,0.00000e+00;AF_Female=0.00000e+00,0.00000e+00;GC_AFR=1807,0,0,0,0,0;GC_AMR=264,0,0,0,0,0;GC_ASJ=90,0,0,0,0,0;GC_EAS=446,0,0,0,0,0;GC_FIN=1128,0,0,0,0,0;GC_NFE=4230,3,0,0,0,0;GC_OTH=302,0,0,0,0,0;GC_Male=4651,3,0,0,0,0;GC_Female=3616,0,0,0,0,0;AC_raw=6,1;AN_raw=30976;AF_raw=1.93698e-04,3.22831e-05;GC_raw=15481,6,0,1,0,0;GC=8267,3,0,0,0,0;Hom_AFR=0,0;Hom_AMR=0,0;Hom_ASJ=0,0;Hom_EAS=0,0;Hom_FIN=0,0;Hom_NFE=0,0;Hom_OTH=0,0;Hom_Male=0,0;Hom_Female=0,0;Hom_raw=0,0;Hom=0,0;POPMAX=NFE,.;AC_POPMAX=3,.;AN_POPMAX=8466,.;AF_POPMAX=3.54359e-04,.;DP_MEDIAN=10,8;DREF_MEDIAN=3.15558e-20,2.51189e-13;GQ_MEDIAN=99,72;AB_MEDIAN=4.41558e-01,6.25000e-01;AS_RF=5.16800e-01,3.29197e-01;AS_FilterStatus=PASS,RF|AC0;CSQ=C|intergenic_variant|MODIFIER||||||||||||||||2||||insertion|1|||||||||||||||||||||||||||||||||||||||||||| +22 16050141 . C A 108.57 PASS AC=1;AF=5.09632e-05;AN=19622;BaseQRankSum=-7.51000e-01;ClippingRankSum=-1.43000e-01;DP=255559;FS=0.00000e+00;InbreedingCoeff=-4.70000e-03;MQ=3.40100e+01;MQRankSum=-3.32000e-01;QD=9.87000e+00;ReadPosRankSum=6.60000e-02;SOR=9.90000e-02;VQSLOD=-3.45100e+01;VQSR_culprit=MQ;GQ_HIST_ALT=0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1;DP_HIST_ALT=0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALT=0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0;GQ_HIST_ALL=90|295|443|1443|2398|1347|2546|2110|845|1318|842|356|727|79|237|59|159|7|90|99;DP_HIST_ALL=626|4935|5582|2741|1103|289|169|45|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALL=0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0;AC_AFR=0;AC_AMR=0;AC_ASJ=0;AC_EAS=0;AC_FIN=0;AC_NFE=1;AC_OTH=0;AC_Male=1;AC_Female=0;AN_AFR=4696;AN_AMR=588;AN_ASJ=206;AN_EAS=1092;AN_FIN=2392;AN_NFE=9986;AN_OTH=662;AN_Male=10956;AN_Female=8666;AF_AFR=0.00000e+00;AF_AMR=0.00000e+00;AF_ASJ=0.00000e+00;AF_EAS=0.00000e+00;AF_FIN=0.00000e+00;AF_NFE=1.00140e-04;AF_OTH=0.00000e+00;AF_Male=9.12742e-05;AF_Female=0.00000e+00;GC_AFR=2348,0,0;GC_AMR=294,0,0;GC_ASJ=103,0,0;GC_EAS=546,0,0;GC_FIN=1196,0,0;GC_NFE=4992,1,0;GC_OTH=331,0,0;GC_Male=5477,1,0;GC_Female=4333,0,0;AC_raw=1;AN_raw=30980;AF_raw=3.22789e-05;GC_raw=15489,1,0;GC=9810,1,0;Hom_AFR=0;Hom_AMR=0;Hom_ASJ=0;Hom_EAS=0;Hom_FIN=0;Hom_NFE=0;Hom_OTH=0;Hom_Male=0;Hom_Female=0;Hom_raw=0;Hom=0;POPMAX=NFE;AC_POPMAX=1;AN_POPMAX=9986;AF_POPMAX=1.00140e-04;DP_MEDIAN=11;DREF_MEDIAN=7.94328e-18;GQ_MEDIAN=99;AB_MEDIAN=5.45455e-01;AS_RF=4.14273e-01;AS_FilterStatus=PASS;CSQ=A|intergenic_variant|MODIFIER||||||||||||||||1||||SNV|1|||||||||||||||||||||||||||||||||||||||||||| +22 16050146 . A T 48.32 RF;AC0 AC=0;AF=0.00000e+00;AN=20636;BaseQRankSum=-3.54000e-01;ClippingRankSum=5.50000e-01;DP=264413;FS=2.76200e+00;InbreedingCoeff=-4.10000e-03;MQ=3.73000e+01;MQRankSum=2.00000e+00;QD=6.90000e+00;ReadPosRankSum=2.00000e+00;SOR=1.53600e+00;VQSLOD=-3.42700e+01;VQSR_culprit=MQ;GQ_HIST_ALT=0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0;DP_HIST_ALT=0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALT=0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0;GQ_HIST_ALL=84|258|359|1323|2262|1285|2499|2192|869|1402|937|374|819|84|270|69|176|10|92|126;DP_HIST_ALL=524|4533|5628|2926|1267|363|187|58|4|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALL=0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0;AC_AFR=0;AC_AMR=0;AC_ASJ=0;AC_EAS=0;AC_FIN=0;AC_NFE=0;AC_OTH=0;AC_Male=0;AC_Female=0;AN_AFR=5074;AN_AMR=602;AN_ASJ=216;AN_EAS=1154;AN_FIN=2448;AN_NFE=10458;AN_OTH=684;AN_Male=11480;AN_Female=9156;AF_AFR=0.00000e+00;AF_AMR=0.00000e+00;AF_ASJ=0.00000e+00;AF_EAS=0.00000e+00;AF_FIN=0.00000e+00;AF_NFE=0.00000e+00;AF_OTH=0.00000e+00;AF_Male=0.00000e+00;AF_Female=0.00000e+00;GC_AFR=2537,0,0;GC_AMR=301,0,0;GC_ASJ=108,0,0;GC_EAS=577,0,0;GC_FIN=1224,0,0;GC_NFE=5229,0,0;GC_OTH=342,0,0;GC_Male=5740,0,0;GC_Female=4578,0,0;AC_raw=1;AN_raw=30980;AF_raw=3.22789e-05;GC_raw=15489,1,0;GC=10318,0,0;Hom_AFR=0;Hom_AMR=0;Hom_ASJ=0;Hom_EAS=0;Hom_FIN=0;Hom_NFE=0;Hom_OTH=0;Hom_Male=0;Hom_Female=0;Hom_raw=0;Hom=0;POPMAX=.;AC_POPMAX=.;AN_POPMAX=.;AF_POPMAX=.;DP_MEDIAN=7;DREF_MEDIAN=1.00000e-11;GQ_MEDIAN=78;AB_MEDIAN=5.71429e-01;AS_RF=2.11047e-01;AS_FilterStatus=RF|AC0;CSQ=T|intergenic_variant|MODIFIER||||||||||||||||1||||SNV|1|||||||||||||||||||||||||||||||||||||||||||| diff --git a/tests/cbcf_data/gnomad_fixed.vcf b/tests/cbcf_data/gnomad_fixed.vcf new file mode 100644 index 0000000..552a41a --- /dev/null +++ b/tests/cbcf_data/gnomad_fixed.vcf @@ -0,0 +1,200 @@ +##fileformat=VCFv4.2 +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FILTER= +##FILTER== 20, DP >= 10, AB => 0.2 for het calls))"> +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##reference=file:///seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta +#CHROM POS ID REF ALT QUAL FILTER INFO +22 16050036 rs374742143 A C 442156.34 RF AC=67;AF=4.29487e-01;AN=156;BaseQRankSum=7.36000e-01;ClippingRankSum=2.96000e-01;DB;DP=50165;FS=7.05600e+00;InbreedingCoeff=3.82000e-01;MQ=2.71500e+01;MQRankSum=-1.02600e+00;QD=2.47500e+01;ReadPosRankSum=-2.11000e-01;SOR=1.26750e+01;VQSLOD=-9.58600e+02;VQSR_culprit=MQ;GQ_HIST_ALT=16|1279|299|254|155|24|16|28|50|135|78|4|6|11|32|43|6|4|3|35;DP_HIST_ALT=1769|653|51|5|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALT=0|0|0|2|5|24|36|11|89|2|125|31|61|85|24|60|34|8|3|7;GQ_HIST_ALL=2359|2810|730|651|296|51|34|33|53|135|78|4|6|11|32|43|6|4|3|35;DP_HIST_ALL=5518|1756|94|6|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALL=0|0|0|2|5|24|36|11|89|2|125|31|61|85|24|60|34|8|3|7;AC_AFR=3;AC_AMR=7;AC_ASJ=0;AC_EAS=0;AC_FIN=50;AC_NFE=3;AC_OTH=4;AC_Male=32;AC_Female=35;AN_AFR=14;AN_AMR=10;AN_ASJ=0;AN_EAS=0;AN_FIN=84;AN_NFE=42;AN_OTH=6;AN_Male=80;AN_Female=76;AF_AFR=2.14286e-01;AF_AMR=7.00000e-01;AF_ASJ=.;AF_EAS=.;AF_FIN=5.95238e-01;AF_NFE=7.14286e-02;AF_OTH=6.66667e-01;AF_Male=4.00000e-01;AF_Female=4.60526e-01;GC_AFR=4,3,0;GC_AMR=0,3,2;GC_ASJ=0,0,0;GC_EAS=0,0,0;GC_FIN=4,26,12;GC_NFE=18,3,0;GC_OTH=1,0,2;GC_Male=16,16,8;GC_Female=11,19,8;AC_raw=4349;AN_raw=14748;AF_raw=2.94887e-01;GC_raw=4896,607,1871;GC=27,35,16;Hom_AFR=0;Hom_AMR=2;Hom_ASJ=0;Hom_EAS=0;Hom_FIN=12;Hom_NFE=0;Hom_OTH=2;Hom_Male=8;Hom_Female=8;Hom_raw=1871;Hom=16;POPMAX=AMR;AC_POPMAX=7;AN_POPMAX=10;AF_POPMAX=7.00000e-01;DP_MEDIAN=3;DREF_MEDIAN=5.60406e-10;GQ_MEDIAN=12;AB_MEDIAN=5.55556e-01;AS_RF=4.71609e-02;AS_FilterStatus=RF;CSQ=C|intergenic_variant|MODIFIER|||||||||||||||rs374742143|1||||SNV|1|||||||||||||||||||||||||||||||||||||||||||| +22 16050068 . A G 82.46 RF;AC0 AC=0;AF=0.00000e+00;AN=2708;DP=111486;FS=0.00000e+00;InbreedingCoeff=-3.63000e-02;MQ=3.20200e+01;QD=1.64900e+01;SOR=3.61100e+00;VQSLOD=-9.28900e+01;VQSR_culprit=MQ;GQ_HIST_ALT=0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;DP_HIST_ALT=0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALT=0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;GQ_HIST_ALL=1227|4189|2184|3537|2071|618|693|346|97|92|61|9|18|0|7|4|4|0|0|0;DP_HIST_ALL=7502|6289|1163|169|26|8|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALL=0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AC_AFR=0;AC_AMR=0;AC_ASJ=0;AC_EAS=0;AC_FIN=0;AC_NFE=0;AC_OTH=0;AC_Male=0;AC_Female=0;AN_AFR=280;AN_AMR=162;AN_ASJ=34;AN_EAS=74;AN_FIN=748;AN_NFE=1300;AN_OTH=110;AN_Male=1584;AN_Female=1124;AF_AFR=0.00000e+00;AF_AMR=0.00000e+00;AF_ASJ=0.00000e+00;AF_EAS=0.00000e+00;AF_FIN=0.00000e+00;AF_NFE=0.00000e+00;AF_OTH=0.00000e+00;AF_Male=0.00000e+00;AF_Female=0.00000e+00;GC_AFR=140,0,0;GC_AMR=81,0,0;GC_ASJ=17,0,0;GC_EAS=37,0,0;GC_FIN=374,0,0;GC_NFE=650,0,0;GC_OTH=55,0,0;GC_Male=792,0,0;GC_Female=562,0,0;AC_raw=2;AN_raw=30314;AF_raw=6.59761e-05;GC_raw=15156,0,1;GC=1354,0,0;Hom_AFR=0;Hom_AMR=0;Hom_ASJ=0;Hom_EAS=0;Hom_FIN=0;Hom_NFE=0;Hom_OTH=0;Hom_Male=0;Hom_Female=0;Hom_raw=1;Hom=0;POPMAX=.;AC_POPMAX=.;AN_POPMAX=.;AF_POPMAX=.;DP_MEDIAN=5;DREF_MEDIAN=1.22034e-16;GQ_MEDIAN=15;AB_MEDIAN=5.00000e-01;AS_RF=5.87186e-02;AS_FilterStatus=RF|AC0;CSQ=G|intergenic_variant|MODIFIER||||||||||||||||1||||SNV|1|||||||||||||||||||||||||||||||||||||||||||| +22 16050069 . C T 43.44 RF;AC0 AC=0;AF=0.00000e+00;AN=2802;BaseQRankSum=7.20000e-01;ClippingRankSum=-1.38000e+00;DP=112972;FS=0.00000e+00;InbreedingCoeff=-3.70000e-02;MQ=3.67700e+01;MQRankSum=7.20000e-01;QD=7.24000e+00;ReadPosRankSum=1.38000e+00;SOR=1.32900e+00;VQSLOD=-3.27400e+01;VQSR_culprit=MQ;GQ_HIST_ALT=0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0;DP_HIST_ALT=0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALT=0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0;GQ_HIST_ALL=1200|4098|2219|3540|2117|622|710|352|104|101|64|10|20|1|8|3|4|0|0|0;DP_HIST_ALL=7405|6348|1203|181|28|8|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALL=0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0;AC_AFR=0;AC_AMR=0;AC_ASJ=0;AC_EAS=0;AC_FIN=0;AC_NFE=0;AC_OTH=0;AC_Male=0;AC_Female=0;AN_AFR=296;AN_AMR=164;AN_ASJ=36;AN_EAS=70;AN_FIN=766;AN_NFE=1354;AN_OTH=116;AN_Male=1638;AN_Female=1164;AF_AFR=0.00000e+00;AF_AMR=0.00000e+00;AF_ASJ=0.00000e+00;AF_EAS=0.00000e+00;AF_FIN=0.00000e+00;AF_NFE=0.00000e+00;AF_OTH=0.00000e+00;AF_Male=0.00000e+00;AF_Female=0.00000e+00;GC_AFR=148,0,0;GC_AMR=82,0,0;GC_ASJ=18,0,0;GC_EAS=35,0,0;GC_FIN=383,0,0;GC_NFE=677,0,0;GC_OTH=58,0,0;GC_Male=819,0,0;GC_Female=582,0,0;AC_raw=1;AN_raw=30346;AF_raw=3.29533e-05;GC_raw=15172,1,0;GC=1401,0,0;Hom_AFR=0;Hom_AMR=0;Hom_ASJ=0;Hom_EAS=0;Hom_FIN=0;Hom_NFE=0;Hom_OTH=0;Hom_Male=0;Hom_Female=0;Hom_raw=0;Hom=0;POPMAX=.;AC_POPMAX=.;AN_POPMAX=.;AF_POPMAX=.;DP_MEDIAN=6;DREF_MEDIAN=3.16178e-11;GQ_MEDIAN=38;AB_MEDIAN=6.66667e-01;AS_RF=9.22976e-02;AS_FilterStatus=RF|AC0;CSQ=T|intergenic_variant|MODIFIER||||||||||||||||1||||SNV|1|||||||||||||||||||||||||||||||||||||||||||| +22 16050098 . G A 242.82 RF AC=2;AF=2.40964e-04;AN=8300;BaseQRankSum=2.45000e+00;ClippingRankSum=1.03000e-01;DP=167171;FS=0.00000e+00;InbreedingCoeff=-1.46000e-02;MQ=3.06100e+01;MQRankSum=-9.35000e-01;QD=1.05600e+01;ReadPosRankSum=6.60000e-01;SOR=3.84000e-01;VQSLOD=-4.11500e+01;VQSR_culprit=MQ;GQ_HIST_ALT=0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|2;DP_HIST_ALT=0|0|2|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALT=0|0|0|0|0|0|0|0|0|1|1|0|0|0|0|0|0|0|0|0;GQ_HIST_ALL=350|1697|1483|3462|3106|1262|1746|994|348|436|237|88|141|14|39|5|22|4|8|7;DP_HIST_ALL=3368|7876|3165|776|212|33|16|3|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALL=0|0|0|0|0|0|0|0|0|1|1|0|0|0|0|0|0|0|0|0;AC_AFR=0;AC_AMR=0;AC_ASJ=0;AC_EAS=0;AC_FIN=0;AC_NFE=2;AC_OTH=0;AC_Male=2;AC_Female=0;AN_AFR=1298;AN_AMR=334;AN_ASJ=84;AN_EAS=380;AN_FIN=1460;AN_NFE=4412;AN_OTH=332;AN_Male=4748;AN_Female=3552;AF_AFR=0.00000e+00;AF_AMR=0.00000e+00;AF_ASJ=0.00000e+00;AF_EAS=0.00000e+00;AF_FIN=0.00000e+00;AF_NFE=4.53309e-04;AF_OTH=0.00000e+00;AF_Male=4.21230e-04;AF_Female=0.00000e+00;GC_AFR=649,0,0;GC_AMR=167,0,0;GC_ASJ=42,0,0;GC_EAS=190,0,0;GC_FIN=730,0,0;GC_NFE=2204,2,0;GC_OTH=166,0,0;GC_Male=2372,2,0;GC_Female=1776,0,0;AC_raw=2;AN_raw=30898;AF_raw=6.47291e-05;GC_raw=15447,2,0;GC=4148,2,0;Hom_AFR=0;Hom_AMR=0;Hom_ASJ=0;Hom_EAS=0;Hom_FIN=0;Hom_NFE=0;Hom_OTH=0;Hom_Male=0;Hom_Female=0;Hom_raw=0;Hom=0;POPMAX=NFE;AC_POPMAX=2;AN_POPMAX=4412;AF_POPMAX=4.53309e-04;DP_MEDIAN=11;DREF_MEDIAN=6.29479e-16;GQ_MEDIAN=99;AB_MEDIAN=4.80769e-01;AS_RF=3.30908e-01;AS_FilterStatus=RF;CSQ=A|intergenic_variant|MODIFIER||||||||||||||||1||||SNV|1|||||||||||||||||||||||||||||||||||||||||||| +22 16050115 rs587755077 G A 10684.53 RF AC=31;AF=2.54057e-03;AN=12202;BaseQRankSum=1.59000e+00;ClippingRankSum=6.70000e-02;DP=196906;FS=0.00000e+00;InbreedingCoeff=1.40000e-02;MQ=3.37700e+01;MQRankSum=4.06000e-01;QD=8.23000e+00;ReadPosRankSum=3.22000e-01;SOR=4.23100e+00;VQSLOD=-1.16300e+02;VQSR_culprit=MQ;GQ_HIST_ALT=3|6|10|5|3|3|6|13|17|16|2|3|9|12|8|11|5|3|3|14;DP_HIST_ALT=22|95|32|3|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALT=0|0|0|4|6|16|20|8|21|1|28|5|7|7|7|7|8|0|0|0;GQ_HIST_ALL=237|959|984|2740|3098|1328|2215|1483|527|685|442|163|289|52|79|25|61|6|27|39;DP_HIST_ALL=1972|7287|4327|1314|407|79|44|9|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALL=0|0|0|4|6|16|20|8|21|1|28|5|7|7|7|7|8|0|0|0;AC_AFR=30;AC_AMR=1;AC_ASJ=0;AC_EAS=0;AC_FIN=0;AC_NFE=0;AC_OTH=0;AC_Male=16;AC_Female=15;AN_AFR=2236;AN_AMR=436;AN_ASJ=144;AN_EAS=640;AN_FIN=1862;AN_NFE=6410;AN_OTH=474;AN_Male=6874;AN_Female=5328;AF_AFR=1.34168e-02;AF_AMR=2.29358e-03;AF_ASJ=0.00000e+00;AF_EAS=0.00000e+00;AF_FIN=0.00000e+00;AF_NFE=0.00000e+00;AF_OTH=0.00000e+00;AF_Male=2.32761e-03;AF_Female=2.81532e-03;GC_AFR=1088,30,0;GC_AMR=217,1,0;GC_ASJ=72,0,0;GC_EAS=320,0,0;GC_FIN=931,0,0;GC_NFE=3205,0,0;GC_OTH=237,0,0;GC_Male=3421,16,0;GC_Female=2649,15,0;AC_raw=159;AN_raw=30878;AF_raw=5.14930e-03;GC_raw=15287,145,7;GC=6070,31,0;Hom_AFR=0;Hom_AMR=0;Hom_ASJ=0;Hom_EAS=0;Hom_FIN=0;Hom_NFE=0;Hom_OTH=0;Hom_Male=0;Hom_Female=0;Hom_raw=7;Hom=0;POPMAX=AFR;AC_POPMAX=30;AN_POPMAX=2236;AF_POPMAX=1.34168e-02;DP_MEDIAN=7;DREF_MEDIAN=1.74246e-08;GQ_MEDIAN=48;AB_MEDIAN=4.44444e-01;AS_RF=5.02621e-02;AS_FilterStatus=RF;CSQ=A|intergenic_variant|MODIFIER|||||||||||||||rs587755077|1||||SNV|1||||||||||||||||A:0.0064|||||||||||||||||||||||||||| +22 16050116 . G C 28395.88 RF AC=246;AF=2.51431e-02;AN=9784;BaseQRankSum=2.48000e-01;ClippingRankSum=0.00000e+00;DP=201089;FS=0.00000e+00;InbreedingCoeff=-7.09000e-02;MQ=3.23400e+01;MQRankSum=-1.23100e+00;QD=3.27000e+00;ReadPosRankSum=2.48000e-01;SOR=7.16400e+00;VQSLOD=-3.11400e+02;VQSR_culprit=MQ;GQ_HIST_ALT=0|3|6|9|32|41|110|119|73|75|49|48|27|32|38|16|4|9|19|27;DP_HIST_ALT=21|356|285|60|12|3|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALT=0|0|11|105|184|174|98|40|64|2|30|5|11|8|2|2|0|0|0|0;GQ_HIST_ALL=2616|992|935|2244|2407|1109|1723|1219|458|593|382|175|259|62|105|27|46|11|38|55;DP_HIST_ALL=1838|7215|4403|1404|443|92|50|11|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALL=0|0|11|105|184|174|98|40|64|2|30|5|11|8|2|2|0|0|0|0;AC_AFR=18;AC_AMR=5;AC_ASJ=4;AC_EAS=3;AC_FIN=5;AC_NFE=202;AC_OTH=9;AC_Male=141;AC_Female=105;AN_AFR=2166;AN_AMR=402;AN_ASJ=88;AN_EAS=650;AN_FIN=1722;AN_NFE=4390;AN_OTH=366;AN_Male=5450;AN_Female=4334;AF_AFR=8.31025e-03;AF_AMR=1.24378e-02;AF_ASJ=4.54545e-02;AF_EAS=4.61538e-03;AF_FIN=2.90360e-03;AF_NFE=4.60137e-02;AF_OTH=2.45902e-02;AF_Male=2.58716e-02;AF_Female=2.42270e-02;GC_AFR=1065,18,0;GC_AMR=196,5,0;GC_ASJ=40,4,0;GC_EAS=322,3,0;GC_FIN=856,5,0;GC_NFE=1993,202,0;GC_OTH=174,9,0;GC_Male=2584,141,0;GC_Female=2062,105,0;AC_raw=738;AN_raw=30912;AF_raw=2.38742e-02;GC_raw=14719,736,1;GC=4646,246,0;Hom_AFR=0;Hom_AMR=0;Hom_ASJ=0;Hom_EAS=0;Hom_FIN=0;Hom_NFE=0;Hom_OTH=0;Hom_Male=0;Hom_Female=0;Hom_raw=1;Hom=0;POPMAX=NFE;AC_POPMAX=202;AN_POPMAX=4390;AF_POPMAX=4.60137e-02;DP_MEDIAN=9;DREF_MEDIAN=6.30918e-05;GQ_MEDIAN=42;AB_MEDIAN=2.50000e-01;AS_RF=8.65786e-03;AS_FilterStatus=RF;CSQ=C|intergenic_variant|MODIFIER||||||||||||||||1||||SNV|1|||||||||||||||||||||||||||||||||||||||||||| +22 16050129 . G GACA,C 1164.92 PASS AC=3,0;AF=1.81378e-04,0.00000e+00;AN=16540;BaseQRankSum=-2.24000e-01;ClippingRankSum=-2.63000e-01;DP=230703;FS=8.86700e+00;InbreedingCoeff=5.80000e-03;MQ=3.46800e+01;MQRankSum=1.43000e-01;QD=1.01300e+01;ReadPosRankSum=-2.13000e-01;SOR=3.30000e-02;VQSLOD=-1.37800e+00;VQSR_culprit=SOR;VQSR_NEGATIVE_TRAIN_SITE;GQ_HIST_ALT=0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|1|0|0|4,0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0;DP_HIST_ALT=0|3|2|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0,0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALT=0|0|0|0|0|0|2|0|1|1|1|0|0|0|0|1|0|0|0|0,0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0;GQ_HIST_ALL=104|464|608|1985|2741|1441|2526|1859|721|1069|690|260|538|62|159|47|92|8|46|68;DP_HIST_ALL=1018|6123|5177|2097|791|161|97|24|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALL=0|0|0|0|0|0|2|0|1|1|1|0|1|0|0|1|0|0|0|0;AC_AFR=0,0;AC_AMR=0,0;AC_ASJ=0,0;AC_EAS=0,0;AC_FIN=0,0;AC_NFE=3,0;AC_OTH=0,0;AC_Male=3,0;AC_Female=0,0;AN_AFR=3614;AN_AMR=528;AN_ASJ=180;AN_EAS=892;AN_FIN=2256;AN_NFE=8466;AN_OTH=604;AN_Male=9308;AN_Female=7232;AF_AFR=0.00000e+00,0.00000e+00;AF_AMR=0.00000e+00,0.00000e+00;AF_ASJ=0.00000e+00,0.00000e+00;AF_EAS=0.00000e+00,0.00000e+00;AF_FIN=0.00000e+00,0.00000e+00;AF_NFE=3.54359e-04,0.00000e+00;AF_OTH=0.00000e+00,0.00000e+00;AF_Male=3.22303e-04,0.00000e+00;AF_Female=0.00000e+00,0.00000e+00;GC_AFR=1807,0,0,0,0,0;GC_AMR=264,0,0,0,0,0;GC_ASJ=90,0,0,0,0,0;GC_EAS=446,0,0,0,0,0;GC_FIN=1128,0,0,0,0,0;GC_NFE=4230,3,0,0,0,0;GC_OTH=302,0,0,0,0,0;GC_Male=4651,3,0,0,0,0;GC_Female=3616,0,0,0,0,0;AC_raw=6,1;AN_raw=30976;AF_raw=1.93698e-04,3.22831e-05;GC_raw=15481,6,0,1,0,0;GC=8267,3,0,0,0,0;Hom_AFR=0,0;Hom_AMR=0,0;Hom_ASJ=0,0;Hom_EAS=0,0;Hom_FIN=0,0;Hom_NFE=0,0;Hom_OTH=0,0;Hom_Male=0,0;Hom_Female=0,0;Hom_raw=0,0;Hom=0,0;POPMAX=NFE,.;AC_POPMAX=3,.;AN_POPMAX=8466,.;AF_POPMAX=3.54359e-04,.;DP_MEDIAN=10,8;DREF_MEDIAN=3.15558e-20,2.51189e-13;GQ_MEDIAN=99,72;AB_MEDIAN=4.41558e-01,6.25000e-01;AS_RF=5.16800e-01,3.29197e-01;AS_FilterStatus=PASS,RF|AC0;CSQ=C|intergenic_variant|MODIFIER||||||||||||||||2||||insertion|1|||||||||||||||||||||||||||||||||||||||||||| +22 16050141 . C A 108.57 PASS AC=1;AF=5.09632e-05;AN=19622;BaseQRankSum=-7.51000e-01;ClippingRankSum=-1.43000e-01;DP=255559;FS=0.00000e+00;InbreedingCoeff=-4.70000e-03;MQ=3.40100e+01;MQRankSum=-3.32000e-01;QD=9.87000e+00;ReadPosRankSum=6.60000e-02;SOR=9.90000e-02;VQSLOD=-3.45100e+01;VQSR_culprit=MQ;GQ_HIST_ALT=0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1;DP_HIST_ALT=0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALT=0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0;GQ_HIST_ALL=90|295|443|1443|2398|1347|2546|2110|845|1318|842|356|727|79|237|59|159|7|90|99;DP_HIST_ALL=626|4935|5582|2741|1103|289|169|45|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALL=0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0;AC_AFR=0;AC_AMR=0;AC_ASJ=0;AC_EAS=0;AC_FIN=0;AC_NFE=1;AC_OTH=0;AC_Male=1;AC_Female=0;AN_AFR=4696;AN_AMR=588;AN_ASJ=206;AN_EAS=1092;AN_FIN=2392;AN_NFE=9986;AN_OTH=662;AN_Male=10956;AN_Female=8666;AF_AFR=0.00000e+00;AF_AMR=0.00000e+00;AF_ASJ=0.00000e+00;AF_EAS=0.00000e+00;AF_FIN=0.00000e+00;AF_NFE=1.00140e-04;AF_OTH=0.00000e+00;AF_Male=9.12742e-05;AF_Female=0.00000e+00;GC_AFR=2348,0,0;GC_AMR=294,0,0;GC_ASJ=103,0,0;GC_EAS=546,0,0;GC_FIN=1196,0,0;GC_NFE=4992,1,0;GC_OTH=331,0,0;GC_Male=5477,1,0;GC_Female=4333,0,0;AC_raw=1;AN_raw=30980;AF_raw=3.22789e-05;GC_raw=15489,1,0;GC=9810,1,0;Hom_AFR=0;Hom_AMR=0;Hom_ASJ=0;Hom_EAS=0;Hom_FIN=0;Hom_NFE=0;Hom_OTH=0;Hom_Male=0;Hom_Female=0;Hom_raw=0;Hom=0;POPMAX=NFE;AC_POPMAX=1;AN_POPMAX=9986;AF_POPMAX=1.00140e-04;DP_MEDIAN=11;DREF_MEDIAN=7.94328e-18;GQ_MEDIAN=99;AB_MEDIAN=5.45455e-01;AS_RF=4.14273e-01;AS_FilterStatus=PASS;CSQ=A|intergenic_variant|MODIFIER||||||||||||||||1||||SNV|1|||||||||||||||||||||||||||||||||||||||||||| +22 16050146 . A T 48.32 RF;AC0 AC=0;AF=0.00000e+00;AN=20636;BaseQRankSum=-3.54000e-01;ClippingRankSum=5.50000e-01;DP=264413;FS=2.76200e+00;InbreedingCoeff=-4.10000e-03;MQ=3.73000e+01;MQRankSum=2.00000e+00;QD=6.90000e+00;ReadPosRankSum=2.00000e+00;SOR=1.53600e+00;VQSLOD=-3.42700e+01;VQSR_culprit=MQ;GQ_HIST_ALT=0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0;DP_HIST_ALT=0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALT=0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0;GQ_HIST_ALL=84|258|359|1323|2262|1285|2499|2192|869|1402|937|374|819|84|270|69|176|10|92|126;DP_HIST_ALL=524|4533|5628|2926|1267|363|187|58|4|0|0|0|0|0|0|0|0|0|0|0;AB_HIST_ALL=0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0;AC_AFR=0;AC_AMR=0;AC_ASJ=0;AC_EAS=0;AC_FIN=0;AC_NFE=0;AC_OTH=0;AC_Male=0;AC_Female=0;AN_AFR=5074;AN_AMR=602;AN_ASJ=216;AN_EAS=1154;AN_FIN=2448;AN_NFE=10458;AN_OTH=684;AN_Male=11480;AN_Female=9156;AF_AFR=0.00000e+00;AF_AMR=0.00000e+00;AF_ASJ=0.00000e+00;AF_EAS=0.00000e+00;AF_FIN=0.00000e+00;AF_NFE=0.00000e+00;AF_OTH=0.00000e+00;AF_Male=0.00000e+00;AF_Female=0.00000e+00;GC_AFR=2537,0,0;GC_AMR=301,0,0;GC_ASJ=108,0,0;GC_EAS=577,0,0;GC_FIN=1224,0,0;GC_NFE=5229,0,0;GC_OTH=342,0,0;GC_Male=5740,0,0;GC_Female=4578,0,0;AC_raw=1;AN_raw=30980;AF_raw=3.22789e-05;GC_raw=15489,1,0;GC=10318,0,0;Hom_AFR=0;Hom_AMR=0;Hom_ASJ=0;Hom_EAS=0;Hom_FIN=0;Hom_NFE=0;Hom_OTH=0;Hom_Male=0;Hom_Female=0;Hom_raw=0;Hom=0;POPMAX=.;AC_POPMAX=.;AN_POPMAX=.;AF_POPMAX=.;DP_MEDIAN=7;DREF_MEDIAN=1.00000e-11;GQ_MEDIAN=78;AB_MEDIAN=5.71429e-01;AS_RF=2.11047e-01;AS_FilterStatus=RF|AC0;CSQ=T|intergenic_variant|MODIFIER||||||||||||||||1||||SNV|1|||||||||||||||||||||||||||||||||||||||||||| diff --git a/tests/cbcf_data/missing_genotypes.vcf b/tests/cbcf_data/missing_genotypes.vcf new file mode 100644 index 0000000..a6f0dbc --- /dev/null +++ b/tests/cbcf_data/missing_genotypes.vcf @@ -0,0 +1,6 @@ +##fileformat=VCFv4.1 +##contig= +##FORMAT= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT sample1 sample2 +chr1 1 . A G 999 . . GT 0/0 1/1 +chr1 50 . T C 999 . . GT ./. 0/1 diff --git a/tests/compile_test.py b/tests/compile_test.py new file mode 100644 index 0000000..f56adb7 --- /dev/null +++ b/tests/compile_test.py @@ -0,0 +1,48 @@ +''' +compile_test.py - check pyximport functionality with pysam +========================================================== + +test script for checking if compilation against +pysam and tabix works. +''' + +# clean up previous compilation +import os +import unittest +import pysam +from TestUtils import BAM_DATADIR, TABIX_DATADIR + +try: + os.unlink('tests/_compile_test.c') + os.unlink('tests/_compile_test.pyxbldc') +except OSError: + pass + +import pyximport +pyximport.install(build_in_temp=False) +import _compile_test + + +class BAMTest(unittest.TestCase): + + input_filename = os.path.join(BAM_DATADIR, "ex1.bam") + + def testCount(self): + + nread = _compile_test.testCountBAM( + pysam.Samfile(self.input_filename)) + self.assertEqual(nread, 3270) + + +class GTFTest(unittest.TestCase): + + input_filename = os.path.join(TABIX_DATADIR, "example.gtf.gz") + + def testCount(self): + nread = _compile_test.testCountGTF( + pysam.Tabixfile(self.input_filename)) + self.assertEqual(nread, 237) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/faidx_bench.py b/tests/faidx_bench.py new file mode 100644 index 0000000..c167336 --- /dev/null +++ b/tests/faidx_bench.py @@ -0,0 +1,71 @@ +"""Benchmarking the cfaidx module. Usage:: + +pytest benchmark/faidx_bench.py +""" +import os +import pysam + + +from TestUtils import BAM_DATADIR + + +def iterate_over_fastx(fn, persist=True): + return len(list(pysam.FastxFile(fn, persist=persist))) + + +def iterate_over_fastx_as_file(fn): + with open(fn) as inf: + return len(inf.read()) + + +def test_fasta_iteration_short_sequences(benchmark): + result = benchmark(iterate_over_fastx, os.path.join( + BAM_DATADIR, "faidx_ex1.fa")) + assert result == 3270 + + +def test_fasta_iteration_long_sequences(benchmark): + result = benchmark(iterate_over_fastx, os.path.join(BAM_DATADIR, "ex1.fa")) + assert result == 2 + + +def test_fasta_iteration_short_sequences_without_persistence(benchmark): + result = benchmark(iterate_over_fastx, os.path.join( + BAM_DATADIR, "faidx_ex1.fa"), persist=False) + assert result == 3270 + + +def test_fasta_iteration_long_sequences_without_persistence(benchmark): + result = benchmark(iterate_over_fastx, os.path.join( + BAM_DATADIR, "ex1.fa"), persist=False) + assert result == 2 + + +def test_fasta_iteration_short_sequences_as_file(benchmark): + result = benchmark(iterate_over_fastx_as_file, + os.path.join(BAM_DATADIR, "faidx_ex1.fa")) + assert result == 195399 + + +def test_fasta_iteration_long_sequences_as_file(benchmark): + result = benchmark(iterate_over_fastx_as_file, + os.path.join(BAM_DATADIR, "ex1.fa")) + assert result == 3225 + + +def test_fastq_iteration_short_sequences(benchmark): + result = benchmark(iterate_over_fastx, os.path.join( + BAM_DATADIR, "faidx_ex1.fq")) + assert result == 3270 + + +def test_fastq_iteration_short_sequences_without_persistence(benchmark): + result = benchmark(iterate_over_fastx, os.path.join( + BAM_DATADIR, "faidx_ex1.fq"), persist=False) + assert result == 3270 + + +def test_fastq_iteration_short_sequences_as_file(benchmark): + result = benchmark(iterate_over_fastx_as_file, + os.path.join(BAM_DATADIR, "faidx_ex1.fq")) + assert result == 320458 diff --git a/tests/faidx_test.py b/tests/faidx_test.py new file mode 100644 index 0000000..c618a92 --- /dev/null +++ b/tests/faidx_test.py @@ -0,0 +1,320 @@ +import pysam +import unittest +import os +import gzip +import copy +import shutil + +from TestUtils import checkURL, BAM_DATADIR, get_temp_filename + + +class TestFastaFile(unittest.TestCase): + + sequences = { + 'chr1': + "CACTAGTGGCTCATTGTAAATGTGTGGTTTAACTCGTCCATGGCCCAGCATTAGGGAGCTGTGGACCCTGCAGCCTGGCTGTGGGGGCCGCAGTGGCTGAGGGGTGCAGAGCCGAGTCACGGGGTTGCCAGCACAGGGGCTTAACCTCTGGTGACTGCCAGAGCTGCTGGCAAGCTAGAGTCCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGTAATGAAAACTATATTTATGCTATTCAGTTCTAAATATAGAAATTGAAACAGCTGTGTTTAGTGCCTTTGTTCAACCCCCTTGCAACAACCTTGAGAACCCCAGGGAATTTGTCAATGTCAGGGAAGGAGCATTTTGTCAGTTACCAAATGTGTTTATTACCAGAGGGATGGAGGGAAGAGGGACGCTGAAGAACTTTGATGCCCTCTTCTTCCAAAGATGAAACGCGTAACTGCGCTCTCATTCACTCCAGCTCCCTGTCACCCAATGGACCTGTGATATCTGGATTCTGGGAAATTCTTCATCCTGGACCCTGAGAGATTCTGCAGCCCAGCTCCAGATTGCTTGTGGTCTGACAGGCTGCAACTGTGAGCCATCACAATGAACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATGTGTGTTCTCATCAACCTCATACACACACATGGTTTAGGGGTATAATACCTCTACATGGCTGATTATGAAAACAATGTTCCCCAGATACCATCCCTGTCTTACTTCCAGCTCCCCAGAGGGAAAGCTTTCAACGCTTCTAGCCATTTCTTTTGGCATTTGCCTTCAGACCCTACACGAATGCGTCTCTACCACAGGGGGCTGCGCGGTTTCCCATCATGAAGCACTGAACTTCCACGTCTCATCTAGGGGAACAGGGAGGTGCACTAATGCGCTCCACGCCCAAGCCCTTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTGGGCAATACATGAGATTATTAGGAAATGCTTTACTGTCATAACTATGAAGAGACTATTGCCAGATGAACCACACATTAATACTATGTTTCTTATCTGCACATTACTACCCTGCAATTAATATAATTGTGTCCATGTACACACGCTGTCCTATGTACTTATCATGACTCTATCCCAAATTCCCAATTACGTCCTATCTTCTTCTTAGGGAAGAACAGCTTAGGTATCAATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCGTCCACACTGGTTCTCTTGAAAGCTTGGGCTGTAATGATGCCCCTTGGCCATCACCCAGTCCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGACATAATCCCACGCTTCCTATGGAAAGGTTGTTGGGAGATTTTTAATGATTCCTCAATGTTAAAATGTCTATTTTTGTCTTGACACCCAACTAATATTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAACTTCCCTGGAGGTCTGATGGCGTTTCTCCCTCGTCTTCTTA", # noqa + 'chr2': + "TTCAAATGAACTTCTGTAATTGAAAAATTCATTTAAGAAATTACAAAATATAGTTGAAAGCTCTAACAATAGACTAAACCAAGCAGAAGAAAGAGGTTCAGAACTTGAAGACAAGTCTCTTATGAATTAACCCAGTCAGACAAAAATAAAGAAAAAAATTTTAAAAATGAACAGAGCTTTCAAGAAGTATGAGATTATGTAAAGTAACTGAACCTATGAGTCACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATTTAGACATCTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGATACATTGCAAGACAGACTTCATCAAGATATGTAGTCATCAGACTATCTAAAGTCAACATGAAGGAAAAAAATTCTAAAATCAGCAAGAGAAAAGCATACAGTCATCTATAAAGGAAATCCCATCAGAATAACAATGGGCTTCTCAGCAGAAACCTTACAAGCCAGAAGAGATTGGATCTAATTTTTGGACTTCTTAAAGAAAAAAAAACCTGTCAAACACGAATGTTATGCCCTGCTAAACTAAGCATCATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGATAATTCATCATCACTAAACCAGTCCTATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAATTAAAGTTCAATACTCACCATCATAAATACACACAAAAGTACAAAACTCACAGGTTTTATAAAACAATTGAGACTACAGAGCAACTAGGTAAAAAATTAACATTACAACAGGAACAAAACCTCATATATCAATATTAACTTTGAATAAAAAGGGATTAAATTCCCCCACTTAAGAGATATAGATTGGCAGAACAGATTTAAAAACATGAACTAACTATATGCTGTTTACAAGAAACTCATTAATAAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAACAGAAACCAAATGAGAGAAGGAGTAGCTATACTTATATCAGATAAAGCACACTTTAAATCAACAACAGTAAAATAAAACAAAGGAGGTCATCATACAATGATAAAAAGATCAATTCAGCAAGAAGATATAACCATCCTACTAAATACATATGCACCTAACACAAGACTACCCAGATTCATAAAACAAATACTACTAGACCTAAGAGGGATGAGAAATTACCTAATTGGTACAATGTACAATATTCTGATGATGGTTACACTAAAAGCCCATACTTTACTGCTACTCAATATATCCATGTAACAAATCTGCGCTTGTACTTCTAAATCTATAAAAAAATTAAAATTTAACAAAAGTAAATAAAACACATAGCTAAAACTAAAAAAGCAAAAACAAAAACTATGCTAAGTATTGGTAAAGATGTGGGGAAAAAAGTAAACTCTCAAATATTGCTAGTGGGAGTATAAATTGTTTTCCACTTTGGAAAACAATTTGGTAATTTCGTTTTTTTTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTTTTGCATGCCAGAAAAAAATATTTACAGTAACT", # noqa + } + + def setUp(self): + self.file = pysam.FastaFile(os.path.join(BAM_DATADIR, "ex1.fa")) + + def testFetch(self): + for id, seq in list(self.sequences.items()): + self.assertEqual(seq, self.file.fetch(id)) + for x in range(0, len(seq), 10): + self.assertEqual(seq[x:x + 10], self.file.fetch(id, x, x + 10)) + # test x:end + self.assertEqual(seq[x:], self.file.fetch(id, x)) + # test 0:x + self.assertEqual(seq[:x], self.file.fetch(id, None, x)) + + # unknown sequence raises IndexError + self.assertRaises(KeyError, self.file.fetch, "chr12") + + def testOutOfRangeAccess(self): + '''test out of range access.''' + # out of range access returns an empty string + for contig, s in self.sequences.items(): + self.assertEqual(self.file.fetch(contig, len(s), len(s) + 1), "") + + def testFetchErrors(self): + self.assertRaises(ValueError, self.file.fetch) + self.assertRaises(ValueError, self.file.fetch, "chr1", -1, 10) + self.assertRaises(ValueError, self.file.fetch, "chr1", 20, 10) + self.assertRaises(KeyError, self.file.fetch, "chr3", 0, 100) + + def testLength(self): + self.assertEqual(len(self.file), 2) + + def testSequenceLengths(self): + self.assertEqual(1575, self.file.get_reference_length("chr1")) + self.assertEqual(1584, self.file.get_reference_length("chr2")) + + def tearDown(self): + self.file.close() + + +class TestFastaFilePathIndex(unittest.TestCase): + + filename = os.path.join(BAM_DATADIR, "ex1.fa") + data_suffix = ".fa" + + def test_raise_exception_if_index_is_missing(self): + self.assertRaises(IOError, + pysam.FastaFile, + self.filename, + filepath_index="garbage" + self.data_suffix + ".fai") + + def test_open_file_without_index_succeeds(self): + with pysam.FastaFile(self.filename) as inf: + self.assertEqual(len(inf), 2) + + def test_open_file_with_explicit_index_succeeds(self): + with pysam.FastaFile(self.filename, + filepath_index=self.filename + ".fai") as inf: + self.assertEqual(len(inf), 2) + + def test_open_file_with_explicit_abritrarily_named_index_succeeds(self): + tmpfilename = get_temp_filename(self.data_suffix) + shutil.copyfile(self.filename, tmpfilename) + + filepath_index = self.filename + ".fai" + filepath_index_compressed = self.filename + ".gzi" + if not os.path.exists(filepath_index_compressed): + filepath_index_compressed = None + with pysam.FastaFile(tmpfilename, + filepath_index=filepath_index, + filepath_index_compressed=filepath_index_compressed) as inf: + self.assertEqual(len(inf), 2) + + # index should not be auto-generated + self.assertFalse(os.path.exists(tmpfilename + ".fai")) + os.unlink(tmpfilename) + + +class TestFastaFilePathIndexCompressed(TestFastaFilePathIndex): + + filename = os.path.join(BAM_DATADIR, "ex1.fa.gz") + data_suffix = ".fa.gz" + + +class TestFastxFileFastq(unittest.TestCase): + + filetype = pysam.FastxFile + filename = "faidx_ex1.fq" + persist = True + + def setUp(self): + self.file = self.filetype(os.path.join(BAM_DATADIR, self.filename), + persist=self.persist) + self.has_quality = self.filename.endswith('.fq') + + def tearDown(self): + self.file.close() + + def checkFirst(self, s): + # test first entry + self.assertEqual(s.sequence, "GGGAACAGGGGGGTGCACTAATGCGCTCCACGCCC") + self.assertEqual(s.name, "B7_589:1:101:825:28") + if self.has_quality: + self.assertEqual(s.quality, "<<86<<;<78<<<)<;4<67<;<;<74-7;,;8,;") + self.assertEqual(list(s.get_quality_array()), + [ord(x) - 33 for x in s.quality]) + self.assertEqual(str(s), + "@B7_589:1:101:825:28\n" + "GGGAACAGGGGGGTGCACTAATGCGCTCCACGCCC\n" + "+\n" + "<<86<<;<78<<<)<;4<67<;<;<74-7;,;8,;") + + else: + self.assertEqual(s.quality, None) + self.assertEqual(s.get_quality_array(), None) + self.assertEqual(str(s), + ">B7_589:1:101:825:28\n" + "GGGAACAGGGGGGTGCACTAATGCGCTCCACGCCC") + + def checkLast(self, s): + self.assertEqual(s.sequence, "TAATTGAAAAATTCATTTAAGAAATTACAAAATAT") + self.assertEqual(s.name, "EAS56_65:8:64:507:478") + if self.has_quality: + self.assertEqual(s.quality, "<<<<<;<<<<<<<<<<<<<<<;;;<<<;<<8;<;<") + self.assertEqual(list(s.get_quality_array()), + [ord(x) - 33 for x in s.quality]) + else: + self.assertEqual(s.quality, None) + self.assertEqual(s.get_quality_array(), None) + + def testCounts(self): + self.assertEqual(len([x for x in self.file]), 3270) + + def testMissingFile(self): + self.assertRaises(IOError, self.filetype, "nothere.fq") + + def testSequence(self): + first = self.file.__next__() + self.checkFirst(first) + for last in self.file: + pass + self.checkLast(last) + + # test for persistence + if self.persist: + self.checkFirst(first) + else: + self.checkLast(first) + + def testManager(self): + with self.filetype(os.path.join(BAM_DATADIR, self.filename), + persist=self.persist) as inf: + first = inf.__next__() + self.checkFirst(first) + for last in inf: + pass + self.checkLast(last) + + self.assertEqual(inf.closed, True) + + +# Test for backwards compatibility +class TestFastqFileFastq(TestFastxFileFastq): + filetype = pysam.FastqFile + + +# Test for backwards compatibility +class TestFastxFileFasta(TestFastxFileFastq): + filetype = pysam.FastqFile + filename = "faidx_ex1.fa" + + +class TestFastxFileFastqStream(TestFastxFileFastq): + persist = False + + +class TestFastxFileWithEmptySequence(unittest.TestCase): + """see issue 204: + + iteration over fastq file with empty sequence stops prematurely + """ + + filetype = pysam.FastxFile + filename = "faidx_empty_seq.fq.gz" + + def testIteration(self): + fn = os.path.join(BAM_DATADIR, self.filename) + + with gzip.open(fn) as inf: + ref_num = len(list(inf)) / 4 + + with self.filetype(fn) as f: + l = len(list(f)) + self.assertEqual(ref_num, l) + + +class TestRemoteFileFTP(unittest.TestCase): + '''test remote access. + ''' + + url = ("ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/technical/reference/" + "GRCh38_reference_genome/GRCh38_full_analysis_set_plus_decoy_hla.fa") + + def testFTPView(self): + if not checkURL(self.url): + return + + with pysam.Fastafile(self.url) as f: + self.assertEqual( + len(f.fetch("chr1", 0, 1000)), + 1000) + + def test_sequence_lengths_are_available(self): + if not checkURL(self.url): + return + + with pysam.Fastafile(self.url) as f: + self.assertEqual(len(f.references), 3366) + self.assertTrue("chr1" in f.references) + self.assertEqual(f.lengths[0], + 248956422) + self.assertEqual(f.get_reference_length("chr1"), + 248956422) + + +class TestFastqRecord(unittest.TestCase): + + filetype = pysam.FastxFile + filename = "faidx_ex1.fq" + + def setUp(self): + + with self.filetype(os.path.join(BAM_DATADIR, self.filename), persist=True) as inf: + self.record = next(inf) + + def test_fastx_record_sequence_can_be_modified(self): + old_sequence = self.record.sequence + new_record = copy.copy(self.record) + new_sequence = "AAAC" + new_record.set_sequence(new_sequence) + self.assertEqual(str(new_record), ">{}\n{}".format( + self.record.name, new_sequence)) + self.assertEqual(self.record.sequence, old_sequence) + self.assertEqual(new_record.sequence, new_sequence) + + def test_fastx_record_name_can_be_modified(self): + old_name = self.record.name + new_name = "new_name" + new_record = copy.copy(self.record) + new_record.set_name(new_name) + self.assertEqual(new_record.name, new_name) + self.assertEqual(self.record.name, old_name) + + def test_fastx_record_fail_if_name_is_None(self): + self.assertRaises(ValueError, + self.record.set_name, + None) + + def test_fastx_record_comment_can_be_modified(self): + old_comment = self.record.comment + new_comment = "this is a new comment" + new_record = copy.copy(self.record) + new_record.set_comment(new_comment) + self.assertEqual(new_record.comment, new_comment) + self.assertEqual(self.record.comment, old_comment) + + def test_fastx_record_comment_can_be_None(self): + old_comment = self.record.comment + new_comment = None + new_record = copy.copy(self.record) + new_record.set_comment(new_comment) + self.assertEqual(new_record.comment, new_comment) + self.assertEqual(self.record.comment, old_comment) + + def test_fastx_record_quality_can_be_modified(self): + old_quality = self.record.quality + new_quality = "A" * len(old_quality) + new_record = copy.copy(self.record) + new_record.set_sequence(self.record.sequence, new_quality) + self.assertEqual(new_record.quality, new_quality) + self.assertEqual(self.record.quality, old_quality) + + def test_fastx_record_fail_if_quality_is_wrong_length(self): + self.assertRaises(ValueError, + self.record.set_sequence, + self.record.sequence, self.record.quality * 2) + + def test_fastx_record_can_be_created_from_scratch(self): + fastx_record = pysam.FastxRecord() + self.assertRaises(ValueError, + str, + fastx_record) + fastx_record.set_name("name") + self.assertRaises(ValueError, + str, + fastx_record) + fastx_record.set_sequence("sequence") + self.assertEqual(str(fastx_record), ">name\nsequence") + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/linking_test.py b/tests/linking_test.py new file mode 100644 index 0000000..15fd91a --- /dev/null +++ b/tests/linking_test.py @@ -0,0 +1,92 @@ +"""test linking against pysam. +""" + +import unittest +import os +import subprocess +import pysam + +from TestUtils import LINKDIR + + +def check_import(statement): + try: + output = subprocess.check_output( + statement, stderr=subprocess.STDOUT, shell=True) + except subprocess.CalledProcessError as exc: + if b"ImportError" in exc.output: + raise ImportError( + "module could not be imported: {}".format(str(exc.output))) + else: + raise + + +def check_pass(statement): + try: + output = subprocess.check_output( + statement, stderr=subprocess.STDOUT, shell=True) + except subprocess.CalledProcessError as exc: + raise ValueError("{}: {}".format(exc, exc.output)) + if b"FAILED" in output: + raise ValueError("module tests failed") + return True + + +@unittest.skipUnless( + os.environ.get("PYSAM_LINKING_TESTS", None), + "enable linking tests by setting PYSAM_LINKING_TESTS environment variable") +class TestLinking(unittest.TestCase): + + package_name = "link_with_rpath" + + def setUp(self): + self.workdir = os.path.join(LINKDIR, self.package_name) + + def test_package_can_be_installed(self): + subprocess.check_output( + "cd {} && rm -rf build && python setup.py install".format( + self.workdir), + shell=True) + + +@unittest.skipUnless( + os.environ.get("PYSAM_LINKING_TESTS", None), + "enable linking tests by setting PYSAM_LINKING_TESTS environment variable") +class TestLinkWithRpath(TestLinking): + + package_name = "link_with_rpath" + + def test_package_tests_pass(self): + self.assertTrue(check_pass( + "cd {} && python test_module.py".format(os.path.join(self.workdir, "tests")))) + + +@unittest.skipUnless( + os.environ.get("PYSAM_LINKING_TESTS", None), + "enable linking tests by setting PYSAM_LINKING_TESTS environment variable") +class TestLinkWithoutRpath(TestLinking): + + package_name = "link_without_rpath" + + def test_package_tests_fail_on_import(self): + + self.assertRaises( + ImportError, + check_import, + "cd {} && python test_module.py".format(os.path.join(self.workdir, "tests"))) + + def test_package_tests_pass_if_ld_library_path_set(self): + + pysam_libraries = pysam.get_libraries() + pysam_libdirs, pysam_libs = zip( + *[os.path.split(x) for x in pysam_libraries]) + pysam_libdir = pysam_libdirs[0] + + self.assertTrue(check_pass( + "export LD_LIBRARY_PATH={}:$PATH && cd {} && python test_module.py".format( + pysam_libdir, + os.path.join(self.workdir, "tests")))) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/pysam_data/Makefile b/tests/pysam_data/Makefile new file mode 100644 index 0000000..b48a27c --- /dev/null +++ b/tests/pysam_data/Makefile @@ -0,0 +1,102 @@ +SAM=$(wildcard *.sam) +BAM=$(SAM:%.sam=%.bam) +BAI=$(BAM:%.bam=%.bam.bai) +CRAM=ex1.cram ex2.cram ex3.cram +CRAI=$(CRAM:%.cram=%.cram.crai) + +# ex2.bam - bam file without index + +all: ex1.pileup.gz \ + ex1.sam ex1.bam \ + ex2.sam.gz ex2.sam ex2.bam ex2.bam.bai \ + with_md.sam.gz with_md.bam with_md.bam.bai \ + uncompressed.bam \ + $(BAM) $(BAI) \ + $(CRAM) $(CRAI) \ + example_bai.bam \ + rg_with_tab.bam \ + ex2_truncated.bam \ + empty.bam empty.bam.bai \ + explicit_index.bam explicit_index.cram \ + faidx_empty_seq.fq.gz \ + ex1.fa.gz ex1.fa.gz.csi \ + ex1_csi.bam \ + example_reverse_complement.bam + +# ex2.sam - as ex1.sam, but with header +ex2.sam.gz: ex1.bam ex1.bam.bai + samtools view -h ex1.bam | gzip > ex2.sam.gz + +with_md.sam.gz: ex2.bam ex1.fa + samtools calmd --output-fmt BAM $^ > $@ + +#%.bam: %.sam ex1.fa.fai +# samtools import ex1.fa.fai $< $@ + +uncompressed.bam: ex2.sam + samtools view -buS $< > $@ + +%.bam: %.sam + samtools view -bS $< > $@ + +%.cram: %.sam + samtools view -bC -T ex1.fa $< > $@ + +%.cram.crai: %.cram + samtools index $< + +%.sam: %.sam.gz + gunzip < $< > $@ + +ex1.fa.fai:ex1.fa + samtools faidx ex1.fa + +ex1.bam:ex1.sam.gz ex1.fa.fai + samtools import ex1.fa.fai ex1.sam.gz ex1.bam + +%.bam.bai:%.bam + samtools index $< + +ex1.pileup.gz:ex1.bam ex1.fa + samtools mpileup -f ex1.fa ex1.bam | gzip > ex1.pileup.gz + +ex2_truncated.bam: ex2.bam + head -c 124000 ex2.bam > ex2_truncated.bam + +ex1_csi.bam: ex1.bam + cp ex1.bam ex1_csi.bam + samtools index -c ex1_csi.bam + +empty.bam: ex2.sam + grep "^@" $< | samtools view -Sb - > $@ + +example_unmapped_reads_no_sq.bam: example_unmapped_reads_no_sq.sam + touch tmp.list + samtools import tmp.list $< $@ + rm -f tmp.list + +example_bai.bam: ex1.bam + cp ex1.bam $@ + samtools index $@ + mv $@.bai example_bai.bai + +explicit_index.bam: ex1.bam + cp ex1.bam $@ + +explicit_index.cram: ex1.cram + cp ex1.cram $@ + +clean: + rm -fr *.bam *.bai *.fai *.pileup* *.cram \ + *~ calDepth *.dSYM pysam_*.sam \ + ex2.sam ex2.sam.gz ex1.sam \ + *.fq.gz + +%.fq.gz: %.fq + gzip < $< > $@ + +%.fa.gz: %.fa + bgzip < $< > $@ + +%.fa.gz.csi: %.fa.gz + samtools faidx $< diff --git a/tests/pysam_data/ex1.bed b/tests/pysam_data/ex1.bed new file mode 100644 index 0000000..0d0f498 --- /dev/null +++ b/tests/pysam_data/ex1.bed @@ -0,0 +1,2 @@ +chr1 10 100 +chr1 100 1000 diff --git a/tests/pysam_data/ex1.fa b/tests/pysam_data/ex1.fa new file mode 100644 index 0000000..b4ed0cf --- /dev/null +++ b/tests/pysam_data/ex1.fa @@ -0,0 +1,56 @@ +>chr1 +CACTAGTGGCTCATTGTAAATGTGTGGTTTAACTCGTCCATGGCCCAGCATTAGGGAGCT +GTGGACCCTGCAGCCTGGCTGTGGGGGCCGCAGTGGCTGAGGGGTGCAGAGCCGAGTCAC +GGGGTTGCCAGCACAGGGGCTTAACCTCTGGTGACTGCCAGAGCTGCTGGCAAGCTAGAG +TCCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGTAATGAAAACTATATTTATGCTATTC +AGTTCTAAATATAGAAATTGAAACAGCTGTGTTTAGTGCCTTTGTTCAACCCCCTTGCAA +CAACCTTGAGAACCCCAGGGAATTTGTCAATGTCAGGGAAGGAGCATTTTGTCAGTTACC +AAATGTGTTTATTACCAGAGGGATGGAGGGAAGAGGGACGCTGAAGAACTTTGATGCCCT +CTTCTTCCAAAGATGAAACGCGTAACTGCGCTCTCATTCACTCCAGCTCCCTGTCACCCA +ATGGACCTGTGATATCTGGATTCTGGGAAATTCTTCATCCTGGACCCTGAGAGATTCTGC +AGCCCAGCTCCAGATTGCTTGTGGTCTGACAGGCTGCAACTGTGAGCCATCACAATGAAC +AACAGGAAGAAAAGGTCTTTCAAAAGGTGATGTGTGTTCTCATCAACCTCATACACACAC +ATGGTTTAGGGGTATAATACCTCTACATGGCTGATTATGAAAACAATGTTCCCCAGATAC +CATCCCTGTCTTACTTCCAGCTCCCCAGAGGGAAAGCTTTCAACGCTTCTAGCCATTTCT +TTTGGCATTTGCCTTCAGACCCTACACGAATGCGTCTCTACCACAGGGGGCTGCGCGGTT +TCCCATCATGAAGCACTGAACTTCCACGTCTCATCTAGGGGAACAGGGAGGTGCACTAAT +GCGCTCCACGCCCAAGCCCTTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTGGGCAAT +ACATGAGATTATTAGGAAATGCTTTACTGTCATAACTATGAAGAGACTATTGCCAGATGA +ACCACACATTAATACTATGTTTCTTATCTGCACATTACTACCCTGCAATTAATATAATTG +TGTCCATGTACACACGCTGTCCTATGTACTTATCATGACTCTATCCCAAATTCCCAATTA +CGTCCTATCTTCTTCTTAGGGAAGAACAGCTTAGGTATCAATTTGGTGTTCTGTGTAAAG +TCTCAGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCGTCCACACTGGTTCTCTTGAAAGC +TTGGGCTGTAATGATGCCCCTTGGCCATCACCCAGTCCCTGCCCCATCTCTTGTAATCTC +TCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGGTTTTCTG +TTTCTTTGTTTGATTTGGTGGAAGACATAATCCCACGCTTCCTATGGAAAGGTTGTTGGG +AGATTTTTAATGATTCCTCAATGTTAAAATGTCTATTTTTGTCTTGACACCCAACTAATA +TTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAACTTCCCTGGAGGTCTGATGGCGTTTC +TCCCTCGTCTTCTTA +>chr2 +TTCAAATGAACTTCTGTAATTGAAAAATTCATTTAAGAAATTACAAAATATAGTTGAAAG +CTCTAACAATAGACTAAACCAAGCAGAAGAAAGAGGTTCAGAACTTGAAGACAAGTCTCT +TATGAATTAACCCAGTCAGACAAAAATAAAGAAAAAAATTTTAAAAATGAACAGAGCTTT +CAAGAAGTATGAGATTATGTAAAGTAACTGAACCTATGAGTCACAGGTATTCCTGAGGAA +AAAGAAAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAGTAATTGGGGAAAACCTCTTT +AGTCTTGCTAGAGATTTAGACATCTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGATAC +ATTGCAAGACAGACTTCATCAAGATATGTAGTCATCAGACTATCTAAAGTCAACATGAAG +GAAAAAAATTCTAAAATCAGCAAGAGAAAAGCATACAGTCATCTATAAAGGAAATCCCAT +CAGAATAACAATGGGCTTCTCAGCAGAAACCTTACAAGCCAGAAGAGATTGGATCTAATT +TTTGGACTTCTTAAAGAAAAAAAAACCTGTCAAACACGAATGTTATGCCCTGCTAAACTA +AGCATCATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGATA +ATTCATCATCACTAAACCAGTCCTATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAAT +TAAAGTTCAATACTCACCATCATAAATACACACAAAAGTACAAAACTCACAGGTTTTATA +AAACAATTGAGACTACAGAGCAACTAGGTAAAAAATTAACATTACAACAGGAACAAAACC +TCATATATCAATATTAACTTTGAATAAAAAGGGATTAAATTCCCCCACTTAAGAGATATA +GATTGGCAGAACAGATTTAAAAACATGAACTAACTATATGCTGTTTACAAGAAACTCATT +AATAAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAACAGAAACCA +AATGAGAGAAGGAGTAGCTATACTTATATCAGATAAAGCACACTTTAAATCAACAACAGT +AAAATAAAACAAAGGAGGTCATCATACAATGATAAAAAGATCAATTCAGCAAGAAGATAT +AACCATCCTACTAAATACATATGCACCTAACACAAGACTACCCAGATTCATAAAACAAAT +ACTACTAGACCTAAGAGGGATGAGAAATTACCTAATTGGTACAATGTACAATATTCTGAT +GATGGTTACACTAAAAGCCCATACTTTACTGCTACTCAATATATCCATGTAACAAATCTG +CGCTTGTACTTCTAAATCTATAAAAAAATTAAAATTTAACAAAAGTAAATAAAACACATA +GCTAAAACTAAAAAAGCAAAAACAAAAACTATGCTAAGTATTGGTAAAGATGTGGGGAAA +AAAGTAAACTCTCAAATATTGCTAGTGGGAGTATAAATTGTTTTCCACTTTGGAAAACAA +TTTGGTAATTTCGTTTTTTTTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTTTTGCATGC +CAGAAAAAAATATTTACAGTAACT diff --git a/tests/pysam_data/ex1.sam.gz b/tests/pysam_data/ex1.sam.gz new file mode 100644 index 0000000000000000000000000000000000000000..8dd2bc447cb504be23c29aa54d1a7b8ccfb8fa73 GIT binary patch literal 113194 zcmV(vK{E?NUCng zig)#1<5q;ja=RMt*iHNYH;j=0$prWTaMpQq?B~55lj%?3`Z-y&jTI&WD74@~}$hBtrD-G`&yZz`Wz9clRJ zY~(K4C|^czEHk#=muO?mYNOqMJF}2${7INC1O%tH`ToWE-5?l~AI8zzOBSN@ss1g! z3-O*#4#v5m*L=srVtU^37M{d3MVQf4cYLw)4}dtdX0)SGtxzgIp}L6Fc~3HQgAlzp za6j})uAW42kLQ09UDp&*?ie(FoQFFM(pu+ib}~hA&-p9EUml%zdj6N}3`40`l+q&< zqHRhL{XaeP%UJk+TyC%#WnZ=K&YRPCSEtNi6<>9`9$#VMmqk-V`LmC6z4XSXewr@d zAJ+bxPLcIry#uiR|CIrCeA)fRb-F3zJiX}rM*?&Pw7fn4?N7U3a}U#-HLP?1DLcOE zz2BRzDMIw_kOPVq^fv{tDdncO!I{gqTs-Z5TY6I(e~4nJ5P`BoBwNvl)_ai>%%5Gq znC*bawr7j@2Aj0=M%63`l>O|x>8DEHZFaGR{VB~TllyHK!0NvJzt_xuF@PwVDSDeR z`S%a=R~x=xb>BQ}!DZ~vhd(2|!ueg1num}UKL1@vvF)xc>+j)}+`Ye#0|KhiYODe=htzf7}9 zDZ+36`CV|14Cbh#bw`i*&!1`k7U=>`wR4n3_wUXhB8{*g!C1#~I)9>9oIZRM{vs*B z{Q6yS@^~S9AHJ6C;fui3bgX_H;N6f`6>VtXa_y3yoxU-sr^uew1P=#gbyiS%L zX{Yx~hn6IeSo_8X6WVSz=NJzE$Eba((7IM;K(#4HIbCc0iMPV%Gl+5pgPE+n57QhR zQwgPapX-wMnLo!#^2ukm@~SHycrs`2&FS5f&*NRs;xXNGoPwg;GR)uIJJHgyAL!2U zKU|J(y*Z`#^TMg2_e*b;V;fX+*W}&4Xl+x3c~~BC_i!IMe>?V9T~jcq89E#zf%}{L zCd2AD(%)4$^M@$E0?MDw?LE$JN{`Re;6|ZG>9UoV$w~52_Vy&Hf9oDMy!ZIVhvZJS z>(U#3k|dU1H8aYuJzJs}^}AX6;5nx?e0&{-{Tn_yQDJt0+75}glY{KBSGjXC{4n)! zPNq3q^Z=AhIxGh&@uj1}Kf7->>G@%bp@>hrTc6hUD2?$;-t_qvMNPJZ@)u{`p)er) zx7TshYOaR1?MpW)JKVFpyDwMpMC)%QF=&5tb{?#4c}i<|>fN_78Y$t-&eAZ4bU5>I zBaC@&Q}m%e8Zq#p5=Y-hcZif$pteizc~o4^G2$P1i`xBTKPf$FWykSv9yS%jJHJCs zH(2aUALk3yLymyY*9U*e=yvE8i_~4u98It3j`;?TGmKwp95imxh99#) z$kYTvM*3h~sX;j(tE)ai>YdGOPeWl)1=42ZklZw`_ckC7<0SJFT)??(PpSv{{b_kh z;aKHJ`gB4Fq&@{}vgjgt8D0`~dZ50vJ!#ny1WDoDp+}lzya>+Nx*OWAMUX%H6<(1b z_c`YN{+#V851$}V=op;#>6#T=tkINEzTu(F8rdlUci z54}ZP+@ZX`0$=^LjU?g#sEvX81)zJb{yF@E%k?A5&Uim;@-T|e~FdgrCNK{-%7?%HcWX-|fYIjnmCPf?dwp1%S3^WGu#@!quc zX^!24>w}ax1aUQRT~<7D>#?6dm&@DX4ambZs3%yDn8hT5cdsb_8{wnCGSJ_hSD?7^ zH~KoZngyVmzi~A8 zjU6vu`NR>IdD%!`O=$iZmo^~$#{Vqw2XCJg8a;3_C=B)yrt@dSB?maUyakml%P4o# zZ4(2_;2sBa*@e>!m8QlPsjLs54uSTP>X;XRj_lwr&IX0`!Ca0q!V#t_n>7wQkK^Qb zx6=f?46{%Ynkd%1dUwxt0qfHrAFVsXJ)%yxC&Kp{n4gEAWy4;DDLNa9mdMO~9Nd|% zV?b>dUE*!B1arrpbLYb_TXSR2^EylHYVz<j~w!$o+EEEBQiSu%0xl|p?l|HgS`M38TighBOjJiNoJ~77?RDtviYFK)G zHLHjlw4--(gN6jhO)4|DcHNA#3Z0QrkrNBMK9QEc6zy-$9;bK-#-huI6jw3lIy%NKhFv*12sjmw|+Ru8h% zaP$ZER6dbFAY27>O~u)Rk2wWe4nw5-cjx@l`(28M-Y&@`glUXzR2w#^q10lF^DD)P zuixnF={z_+-dmrLnZJ{1$2b266p8qZXz+QFKfizSkVK|k9=kmWlvYZ5{*gZYb?E}JXsCQGE8m&!hIZo$ugox9JO>f@gHf5M! zP5<$%<@?R2s^+Oz>Z$Gfr&jgqW=yMlt+mPDrfXsngUcQd=o)S{aZ>CW#TzS1OEoyR z!H9RC^v&;p&rdVvPt%oMqG;}qeO=12>)zuuY6+hFx(h=%zgL`JdpK|U=8RFdY1C#? z>h`AS!N)MSzh99R2Nl`4@YFD6JXW8nJH>!XcHjHx?+vx&vOPoIJKn>YANMo$%%D}> ztO}3lRv{=s<%^d(Wm4)?)HqXv^h1xK7l}RwKfj0H;ve{Zx@i!u4DXRu`t8~Kvm{wK z${U##^#@ZWsQ@#%?h}7cuJz`>y?1AHYw{=M6MUOSv|*^ z8ML-RQV+p>c1rTXF$ap**ias+0J`~D_7zi7xmzmdAt8M7calF$+Th6u(;iDv&O`OP zJOohqOtLzj0{UbF?>^JY7wQzM*4H1axWjd53cz1sAm!hdy#KI_BOZ;D`5ZJUUU z@gj(aR?CBV#h(RQG?dGxVke$HU`-L}|$@bQ~JJ8w>eVUp}rWs6_V;xWuF5YTo0@V9WLYF++5 zc@LCx*m(}~bk@qmSR|h$DeuxaHR)r@!5T9t%Mv4x)6OqgmI_UM6;5~{ON-7ternPb zXIH)@<7x6Cl5vC63?vIXjSJCS0U$1e=C5;3k59w+HjUJ^_qlx82Px}~iMfmp(|~-@ zd3cOw8z-u8=Kg(N@ZeBe+^Y|z?KFFgpi?RU!i(;C|mn8WVT5 z5r8Dm`1DClsF&I+L*M$O@+)zQk37x-bXV$eAaaMLn=3K(=yPn?}cb3yui=d+xrZY z(q|>_ezWBj(Q+U?`zya+ou$*ocL59gG%BL9Zz=#clX;P5t}ca$di{ire0A<^eXq0L zV>y8t=k*2%KgXa?IeG}MvFp+BJU$>(!aQj{Tv9=}gW2KEUk`&DRLfwR4#|9H|5yKi zbb_#IMehxJPX9LyZq0B{`xVm-yLi^!^4P|);&ss*)h|6dANVDJyQ`gdtn4Y_qj>6v z+w?2jtGLd7zM9)zPZ~8)f8lrj5PM5LJ0A#7AJ2YUh&O*5JbxJN_9Lr!8~BZpf{rhE zh^$%^0eqCh&zS#DCiegf8-m?;lus9|yB@OL58j-{o>$E3ZHycM^;{3qr~SwU62KPs zY}Wy>3tK`)&rm?S_S@0?+ZY=T?(|0=0!4E(z8_q+CtG5VHfQk&mi36CNcDzp+e3iZ z2lU5&_o_+bNTE6GPW_gf`z(XHKXR0Agp5gGy%wxmsRY0)@J3t$MVLR$ed?ySQM*vq z8|cNpfO9t}XtSUIl}L&7-)~#p^616-E!)k}i)lmjQUv;Q{5U>_9D6i6U;JG!n;@mh zO&`5lk5*&EG)KC`grE;|bx61EL}OAg@0Xz9;x7IE$E{lNH!{m>zP$>y=_1ZAe(Lq?n*3K04!!@pUT?7u*_HNp znO}8{44XYUCO|Q@AWRidZoTz1*^vfeC#9w#ulK|}9Zy`)ZbX!e!1#3nmoEL`?@`(7b#3nF%?w!H}LmB0KmQD)**B{0)0c8BOB+*ISEB-#}bn2WiO;?7Q zpLzBnf(HDdySnP3prY{DX#DM|I(3Ls&U_~qa3-J76E}d0F5jJ1yey8MPmoCa)L*nm zKryG^n#X`*z%!03y$;>@yva_>qd!}oFuMm6oMCUZ3vY}iOzwE2?z4!L42pQk5vQNi z{N2oF9c~Gl{pp8S`d1O>Z}X4W`^$a(%s;=pJo}$tUhYpXFIhgCb`$RKnPGUgrx+Bh z2R%>j9PfOyx(N?F1&lw$A+iq8;5+pdDhllEJ2ggKZY$d17+upP4it=|)KXf5lzJcT zZnQGca!59-1cdI{y?L2V#9@bRbfrhG#bs>jyo(e(G* z^(Qk*l)-G}f3>LhyCbC9P=HsDbmN%j^AEm`2Pr30Zp>xz!H3CCy$o{>Wu!g>9fpfl z>8fjq`pW#F3e-XC@Rj7`-xS=pC`y-L9zR1yYT-wCS$KrkVa&Tz{)=EU1hQo@NssOm zshTp_B0;5_HeDT6BQAy#CeeZ`kZ;o@B$;WBN+6dPDSX~JJU#i4$4u7dB!T6+>3oHP zbXzE#DaEXr;0zOObvREymygpf4f1-H_(&?Ka^J#R)Ct0`NWEuijBWdp{~w&CaP0eV zePTR=G3iUr_>P_wYSJv?JTT}8@MchE^ti5*9OVSV%%1#tM|SH&)EP!(Nl(v?`z9px z>pnvFd(a!9j(=DR@S(zPu;@n~kxWP?hInM=m}-4L*?xiU7xDD_TrR8^jwk(bUP zp5zmPpyzsn6D`98igU~ymLcc_x3xqpes_r z&%Do;-ojwpIn2=SJS>w}2d_|znV|vknzHa_X>HK6xkUuyt;N}Ta4De~b z-lxevejlXd0ZB4_MWYxcq+j1js=PLk)0fzAI8O4q-ho5;PN2)Iw>eDy;!OPfrrDtU z&QVfJB*d%wA<#Ofyfe5w{7bKXFeTFNZZ+U*!AdCCBX2^BnWhxhnn_?R@bw{r(3!(cc+>nPP&+e(O#+Im5U^Mq>CG*I*{K9P><*uq~UFGh=*NQ zVJ#QM!)@=6d@Ba8=$BFueqIaJ6xJ6SdOW0g}5RZO%kZE^noXdNhW z7?Wj+l-!ei3@LqLP-US_ln*mjk@###z?VP|vFRei)5l)JB2IsYYV)o!C^yiko!?vI z(4)#jl~D==@;=iFo?R+EdDqkATc|pdvd?xjYj2BIGxl+Hf_0B7p4rhvBlHQ1K))L|5;Z3c zW(0E%EVbWhfUKYcj;G$}@DSEpZqY8imGJgmgEJQIkS$pi6J`rm!Dl5L{@7lomYd7> z-aYzLk7g%*1l0eJhD)ggbkB>I8G4_2~Q>+6y7;Yb(%Su$jd&?o`$Xa zDxByN8kdsY&II%IHto6WgkEyI)OLw)O5!_1qfTX*yH$JInt~3#>8A~+WW^gpDC4;n zw)A)%+n*e!3=Izt!eq9DiSy*M__(m)wq6&VU-1r^k_G+4IYfG}nJH@i`->|%*n<$Mf#5^H0BHcoAI(_<;-j?q+fcU&GkKNZj*g-!J9D9T!OiH`E3IxTCbHx zpweC1o$HtjCL4To=P)tqQl!hMun(yMKhZJL?-?m)rMa8r z@AvWE_TT2g`|@ir}px7v`6G=_i%!-<_(pxDxeOr{6}g|F&(F!70-!bs70fj5iR#N zwWwOBuzFDY`TvZHwWk#Na09qtWapGqs?)h-Qu#=26b;rSB+iV6DxT{@h*yKR8EK`@ zKUe+fp0?Av3;5%r!An?I1+|%2R$K+NM%yV@3s_;YniJCb(B@XL0h%{A<6Q8D`U7Hs zw_TuRy5k)!q8zGR;`^ZPRDkOD2|-y-5!(gkp)(b-It+^X7_Zku;`Dj+1ZgTOYOJ~6 z>4YM=fs-;mpputh##j`Oo4E*{S~A##0gS+;?K^|>jQ=G9a8&c!8N<+vDQ?x zFXQ}bmg{}QJ+xwG;2$8*qQNz%JoXvZdI(07~5()JpGyEi`CuhDeq(_ zw@JvJ)XM6cxQcYE=Sbvi)rmZ_iEZ`sy6?3TJ<{B^5ysm^8m>(ts*oDvjL+H~=0D?e z*D%jhj^mDOQH3zxj@HT=-I5T^j?04v*5(0l`T1m{?}qr!%N{Vmcq+0 z{dxK@DfA2O8RD@x)e`18`YG_iuUe#ISX zKVBh(0I1^*@o084^*dv~Vc^>bdZ5$-)wJagONJ*Qn56D#lKRx3-+RyVYrL#c(>0rl zPWjn;o~N~fT8Mlkm+VrTMx7MBQ>#sMo-7h&7*>RcB4O@K2D>`a<`2Jab z?ZW(NBKPr*8(lv8x%{cbsLmu$j(}2BVw5w0Niqg+BOTHaPG@E z!_4=!Ih#s#7Vq!T-{gq)Z}m?cC<^;?=XD7uJ3!+=tpp*Ewo{mGkkk96tA0_Ha6YR? zOOE6(b(YDA^d!|wPss(4>1eVgxvEGvO%LAVveZ(9*0`GIg2pAkIAs(&(_#$6tuhQ zLF?}1HCxfeA&Vl)I+nj{Phj&gO68bxq+#VnTaC0KhW`1W=VL459?o*^IWy8(AA{;% z11&pAhCPLV{n2#^(BA`-{>H#*Rk-5!6LF@|$@h759zB(^rd>^1cB=SY-}Ye~th@)} zMD?b_1ej&P(P`}$9S@`uLlpjFjl zC^YzN)ZpW+6w)Qv=uGpOqx{Xc>JCmsrx56&0dR~AoL-}OGO{a}y)L}t^8pSEFI-bH z=3-CY^>9d$cCCVsEChVsGVLbeIC~ScEo)$IWqFqFhl2~Mign)Ny6^PhpeVv==To4N zc@?JKp7BGHe0B;~l#eAxOFv$3xu3a6{eka=&zv3advSSb+`FhU&_f!Uxmt$0!htA)x1A3iN(;f1gsiOUQPwU9;nG_>dG-6kW6rTZ=2BUxs!dAl=D$jP@S^Vx!#Q4#lnK8>y5>OM{+_1G3QID;pej-1qvcPd{>I|_Fz zP$qB(#}w(@H#mP&oL^LkZl1^CuHJ6M+Bx_yc+oLFE44$I3bmMWnDYB6Q@GnJJ;!Pp zx^M@l&CpxERg-rdM5sO?Et(dk=WOYBVyVlI;nY|F)uYxM7rg$0`ze>@Car49IQMvy zlAlMnAt|V;lx7llvq3R1vZSQA?MZl`0;cQdI+;ebgsNmVyoc_Zvx0&e7e2i-46?(; z&oVv5DQV#Ki6O59^7rRN9r$y!eLrr`R29!luEw@_eZ?7R$m`GYz~?}}8Z!dU>!)>u zPNJtEBAvfqCQjN>7-C3y-y4YrdLu7Dzm9-@H6U*s@y77A{)LHLun! zngG?Yx>K~MH>ty$=pq*9FH$*;!vC$uxmoj(G#}k=3ha2$W?O<%)p8A1u#ynlWC`TK z;Kh92XA!wezA0v+I77WRzQ6T*!*KGV2|9``iclq#hixVLhW9%U={1i@`$r_3)>Y@8 zUQsOqp1yz*IG6smAv}akB}Ln+Dile_bw*QI+OvBUf_Ln~Zv)qS5hupiS{hSb{romO zd6Z|A%c87Do>TllB!x&c%0O}C^)%=Ye?aj!rUdxK^w22FoY;dVttD|3wCad%g}PEp z``@%xIEnb)8ihGp>;tu_>t2M;!4c|uOwldOL3la$RbTG7Vd0rt`DqWpU z&o4#d;6;(Xfbl2Duf+p=MBQ_FKqw&H zK-p+TcpSG?D)ErC3A(>~HE1qnpt|Jc1Dn)G#ATCygR(13dCo(g|6SV@4T2Jr$eoAE z{V4BjupL!DYj947Od}RShw^`2&V%MBFQrhY!RrTWwoQ=|SzB9$bmkJ8qO=WqY$u0C z!NLD%{0*NG92b;oV=0-WA;G+@dv@qWn_Wvd^d*R;2d^M%difn`s|~qsP>wU6dP_m( z_t!bl+xYbM@%+}^NFzp2H=~%k=`XQP4A$n;=d(Iw*1)>&YY*Plg*`eu-+JK^G&cA(uwr5qdvkd1VTq1}I2X&-MpaN~SakeKP zQH#) z({=MEm2%G5=%*jjfTpw!GHVsWV5X1R{;8zttR4(x3{s?dK`((PJqVjK8Z058^-7}i`-QTH7ySwYrU#ol;b!>Rz*wcLQum_>S_;JGX-fG z$a&AGqfyIUGdH!~-=wS1Ht{XI;tcXo*bND2v@3sK(EBLu?15SqGqd%eD>onvepQ-p; zx1$5T%UXWVhV=Y9`teG`4X-B#J1)#}?W8SpiRP50`9q7!YG1Ahy z+N6OmMc>DWa^J=9LxE!AhAfg@-b`)%6} zKD8f+$Z2}n1^S>6G=s``xgiVvhES-+w9WW225G{liRKnH-vhf~tILomLy`WkYq`JT zq)xiiBoS1F^z>t_>$6F)x(U!!Q+e61J&9IFixLBB2kDjKR;Bn6p`(gblU+~n$lSO0 zRB8~|sg@ohxJi=?+QciMe5?vBt^ShDy+EbHp3m_i5rlAx`Tw3hwM1#)-a76aDP7?T>NnuG(`) z32@z`{JGKT@Frh|8KTm$qYe=?I7X6!Wc=cC_du9Y_Kpd2b%r>vS(4+Su5a?aq_nk+ zlY~r$IP$;$m~%CH-i2uy%$Q}+Puu#=Cedhy_}DbI8Ls=_z`jt#Ghk`-^)m+qW)C6ux(h`zb}(|^M9splTTnyD^Y5vv^W#jgS??7euS2T z<*y38ppMFdIk5#BwZ3?~gS-A|^jG@FD5+`fN#0tW@k#YnJ|`FNUSkb#N?9HjLDsVj z^tUm3{4*lQ@VkH%p3InUgv_Xw+~7zvt@N9~v7S0kfuyAh;-dwKU+mS3A@f)Vn)brj ztZ{j=QNzMYQ6^#`i}H$Kfrek6H5E2C2F694zi0;P!}iSOiH^=v)qJ!M-Unp|e{;7y z!t@^2^b1T%iSX)GLK#X6r@HMIqoHLy8l9BJM;TVKw@%G^F?1gog3BPwig|t$s9Z^> z?$ImP%3K$or5Di6Bqv%%N>X3zSi*mUMVHc7s^hx?wb`u{k5U1r2kORcm(Xwmv`|Ui z({x-=a!MiDM#+LA#?X5;%>7p@M00|&ifbDU$>8BsE!f~i0(1$5sP+{Od<9S+?utNP z9A6PjlXBJi%}lm?J@TCVNCYAjsw@?7{xrPidvMb~vO(#^$$te`6&82BJ57>Uv^3aN z#`)9C6>~GqJwqY=wHgv2K1SBp`C@nEJef(wW|N9Kq{|MqyYsx8e)O_QcZD4pRF+&w z;GKX*WSjdXxLBXG%K zw)n~2B%@wt5$JEDTkS@?k{vVKKGH!iED^K~1`d^%lnrYW)DXxGU4kW?=j~!+d^EaT z`=BnYo~|d9KLmSeHhD1-#Ah`YMZeuR9M2zaELx75ceKV=oGy<_g4TG!p5GuqddIn$ zf$sDNUnSGlx+n<)r z$Z3eryBeI$(mD`6>rXgV>cf3ppNyXQmMsSN2gyWyXOJ=k&6>)GmrhVr{24Sg4)t$+ z+oG6ym04zH5HtPYKpfagHWZyKc_=yvQ@Q5PYWg^!jnsO(Gb=76yvKn7#d{^ChCYd# zY!WxAK*L$aNqx3qUvfHx-3RN76Ni>`AQU7$1smt$K&j-=>MERDD+ZLqK>AOQ1S6r^ zB#3ESID=|hV(IeR&U_MN5Z+VJHO*_ z+#yDKFJAZJJ*;w@#iILDrgOWU-c6K($`dFsG-Sb zR^7F0oCIy$Kw?}(IX}Ko($NKiqh-10R-U|Vx%`^Br-HruPscO)z}6sYur_#N9rZxD zu~z(^Us|KGQfN)*7HMM|fk6e8Tu2RzyE&QJKrlT>Ei5zdYnMXuru79Hljc^~hSR8CzzNHdv;0FMM(gcS2koSQ`x!<7%~ ziZD~EqYb5qqX*)vbOPbPOK|H;G=OWSO_SpE|IJX+sKLpMDJDT(c5w5g=s4b-@P9o} zsqbk@0kj9g_&bTU)C1>IxN|0)_bQ-0?Zw{CxsgqF!S=j&wJjDTHVU;D>-vL*CyuK+ zoN>a765!rZ9R#LC0y-*bjIq}`EY=cuAFPSGeak~-$3~N6H;`fs-i&1!w|5ZFv2@BHaK1njIPn0Y_@w%}~HH1!l zTLW~_dr7_gh=-eDl+HUR)n4ABvp|Voeg^>vmK8gbW$#_r)WY0;63ad^kp|Tq??R~v zMj<_0dLG?@#1@21C7fTgmgD9#E=AGJaAyr?P%ec#yQZE~$3Vq3=qVIH(i4q8;wH%9 zuH&+L;sV&0o84)A$`Bim580DAGzBVbRCcNXs;0Db6K{HV1hi5yZKHX=IHwe=RP%61 z8LLuCT4^x?GFgKc?~lASvGDdnoCgD?#s-F-w zkG(hUUHBv~i<`QdIcXAkLJrcqHqawzxk60?CzKY;P-6#>A=vKa2cbB`@pi>E(Xp$ zWW|N%2cO@fI*g^1aqeYI$w9(6z~vSfQu)&8`xh8OZ&_T@b2=tWE}+g>hIvYfbFlK| z_qoW%)S>bKO3T(ToJmICN9E=c%p;tOUHk2uSCPnJD~r4OB~IKEH>hgLFuxk7oVCuW zchEyB5hHy}Rj2^CyB0m|3gd2YYKF6~!TA%Tl4s2HQt@_=6z74#DJnTh#Q9Jr(&EUb zGBR&6tiMM#Ra2l?e4ng+XAiV0M1N+3G^5_zo0bl4)Q5R3#-<=c$dSrCeClw0mW}%1 z#K-8v57HRbn}_5r(u%x(t1r%g@+4H*SZ^%BB&Heg2|4r+K}F-mO<|T|>L4{P@0-WO zs%JVHY4za~dd3uYPMpSrh*4}6%FKLJi3mUT@wwqZPvgvq1}QS>Jt^2mj65%J$7yxgB169Rxha-a$P{r)+DN!%_J|0aaIYUNecmo>TZxqDKr)1^Z8+P|qNUGP)gN zJv`tP{N3AzA)g{hp5WWi=SKEKtRm=|%C#M!QwiRtJqOBke}dn~sjAti;KNd&7>oCOA3}U*=c$h^)czdm(vN3DPY&+W z^&NDE8uzG)IeuyFzkZwd@%>$n_T5q`Vhp5BtClz3n=bp)_}~Dk3W=_)p2wwvzbm_t zJJ*>HJlyWycN5Wac%RBCM)Git(EH@UIC}_~wYY+D8F@CQ_!$ zTiq&ZrcV4@lB|*$G;$Ng!xW)59@QRV{$kek9tj5CZO7dA0Oey9tC5=eHMCRI>9}r$ zekE3spqHd+-y+gqBHPEf+-S@lGv2d}$3v*H40Z0->AEnH*mKtHJ|P{0E|}}9pq_8n zJ*Z_x(j7%_w*H#m0NvU*eh$?ZgHfUNDQJMQPi)Gd8W6crQ)cmOJ&>Lj zi@Zx3-O@C&?fKoWAr3HmRYl#{RWSK=`VM(l;+pjPR#EULj+k^x-8w!&kv;@~j%MGn zv_GbgP(Db+}N=F7;$n7 z-%#&WqjMW!kh)4r7hWKJP=$G%mQ~R>p_?QQZtrM|rX?ZGaY_|*6YM+2ExXkn>EzV` zfYNPg+cI6KQj~$l`)YlKTqoz(pDu5MFo9*D{n%N9cU_J&39MpcVHs%H0;4)r{k*$w-eJGhleeV*`^=)_c1A&HViamz@Smj0j^R#+T_H#K+lC`-*SaVKOj@KL@ zV@5Szn-;5Fd)cDz#NcJu=ctZ7MuLNKiC1+$i$IpKwls31;%w9VboZWBjp{f|k=1@R z)dFNkig{KUI6k@>tdKeRZuEy8h8OqoB47SuNO*8B)67x8_s6M$-4QzhqCkJZAg0av z5_|7WotY1p_g>VFPzIb4o2A|5O4$2k+shTec)EOUJ@h2Nk>Om<77-KK=KNFz!#4l? z=jT8FdH?iZr~zs6{@|Y=Nd54~>ZA9$=9{?O{~k5r1SHgbE@;`Pu(vStR-%oXaAlnP ztQq{1ze`q*kf0mE?^wL_^QYbfXBYdm%NzAnB?Odg_5l|#cXxE6L)~}KTn(^Syh^P_ z6tXH>)ZhN&(*9cKt*SY4Q(^MOStUp@eoeyU0qNHn(s;?Qw2D4FZFS5Bx;?*|o~BM5 z`c+Mn;!rZOjK{fGl865;)YOV5Wv@P)EOm%%S_kL8G>(ae1Vvkw_r>-;GSRF5SM%ai z$LWIeC&dYCH@7<)%YDi)-fzyqqN5UW5;|D<)u*lzC<-8S?lZ2^RQs9nLy)qr#xq*a z4BB%C75e0gPX9mxBca~#L7~1}{X@&XcTPR2(i_KfRFz~ZE-fP;{v-`! zn@A6FiZb`5^Yn1|SUZC2>nhAyC&uS~kUwFq+X+f+U5ZXFqf8I~K%_c(6|Ld|#lUDs z(>cP*0elGSUC&9q3^7oNri}BDcoNk3QP#v_VxB-O(9C#TB7dnJji z5zwzQpa}TeAfY=^$_zcQJgPn&f9a1ddlXUn0m&XnHkPI598^Z38(ud>d-5j~lNt0i zvJwtiUZTqzlqSW|$>)uU`h?Nq0I0BGdhiO+b%V0Ww_y}H&^k>KiQ*ZeJgD&R@dmuY+asX&hhC!!1VW?L9v$G2O)N>7(?l|m++GeIkfEWuYEth=JTT!ibuI{ z9Xs~SkwV7qjYbH6Bb(PD&hO^$U-S24{M-F$6)A$fP<7`e5bx-nW8bG?-pa#L}bSQHMSEo?x};S3G;MMq?3LJ^dh{REQ{}hFT3QS z-qNT>o#On()fINB=|cM{JkkwaJ^pu{_BZHF>ieHR*?EeWlR6$G+|_ztmtXT|Uh8IQ z&5}+1KDDn$tZoNJE%*13Q7wrn+a3eN?84Vw=JoyJmth{#7Y*p|F?%>=&5Uy{s=91a zPOb%k)zEKVgo(Ac!_N52i9M^>wI~-s`CJj;eV~#E{xMWm0rYNKBiqqm`XHGkV6lGc z_JKYoPQDM+&CTXj7VS%|9hpU|^%b>=5tL&TTM1GFa!gSR^zgGk1y$7*-5bQD;0M9j zPRE)gHBXmCNS9AxB9}%;x`^h|r^nyZYwxDd?sK}0w~b7X&h(jf0}~QBG?X#*!sjB6 zJw$P&k_Jg3q+GPezJ z;pphC-r3&Tmm5!M*coRDJ(4Xy^L^ueRVpi_8rSEl%vb^5-Sd3^i&rM03qo=1GVM#6_R(I9sisY+Bc~bA9 zl2jQd$WiS`f|2X)%q@C7#@}j%?gE8wD3$XGs9*oD6QDO~-sNqSe_ujO?|5II+W{&w zGW;EtoP`YEU=Yd-XxrL1snsFOt1+n}VQLemGZkG;K6V1zXULy6;o3{nlMDV>cdg*j!u2{ezV6C6DK!Nf{-Xi^nBry znvM&ZT?NkN#(Z|h-|T+9bUVnqG;h+}C)DI}e&;IjRcL#mAws7Toc?HWn0??5D1kgq zK$$1Vy?tdUN~Dke$ZK$dt)WwbQ+J`mqy}d?hq?ULqAwY6jwcBdOqhnO@XtxzHUe7z{0EIw$zXFR6)HX$!-r4(|I83dz zc(GXr3QvGm32^pd_RW$o2d41X9m>hTj1Ic>Wt?kqbbee0MxTpF4aq_O`Oq0HRGHQ! zJTPJO&2LVk{9HF^0#o&&G+GZcJ3Qe8VOW2h1_wcS%UX-9%EKn2)dS40 zW0>E+&C};ccmKQ%pSOi7CTEM;zmevUSsa!|Y0}+VpM`d;3(_W6rzS@CqCNN9ACkIL zKU_;f;-rSgf!FBNvb+U8@~efCIEs)?H${xU`*O=O%wdW;tXEy=j+8As^6W-}u_Tq=k5v!JL?l)K)MMyAY>hK91RNnH(6`uXq@CGf#*4IsX`>Hy{kJcK6b z*zP!Bo4Hd2q-DGetB$`$|JA*9xUQ(kBOa+eQQfhJ+owM0{s1Uw%s};91(b4R{Jo5n zMdG^Y{cW7?Ijd0xe;pkwG(UOA@4y7f6K2i`=mV^vK~UZRrv*}~oL#Ky#3ET>2h%N@ ziFp#rDFKn!cUCtw+jNiqa~hZ&o3%cqe_-yFauLiD3LkWFgK`2p%>UrVuK~K(k#~AS z)$#0sc8jRpJ2^yxpomlCUMi#_mySJq17Da<9!r_v_|0HJ7$aF-oYU7CB46s8GROnx zG%mj1-vW7HQe{mlI^reNht9T3HmFQf5l~jv0KLBKmF&q7od5-kA`iM=qyVay*tut% z*)!6w8R>6=)aRN{>eIXQ4>KSM4SJ>@^lcn>kcxDCxZCS2m;D8r-&#^va|`QP|>`GaV;#vX)5lN>XxxW1yV z080W)1bi6b>cwWlkAlG$cES}r&;xek9nP#LvgHjtvH zyGbRZ_%45BLOfE3bXn@yJGim$BekbY4SYRHyyr=}KxfoQyxKvC@DksePY@(3w{C-49MW0TSp zc|Iyqixk8rkS`q+mxR?Vf3@=&3C1tWIQc!lofg1YrrEH4SI)FZQt{|P7sGqo6QD}; zaj3llsV%vu2kuXcJ!&KdnFeLopjmT@J!2x5@;N|AhVHF<>>nDYY45eRmUcxGGnj=e zw%ou}VbwJ~GL&KNTuI}2U-{s+g{Si1^`h6MD52AQGAy;G6VyWVpf%Ia258NbG6>B4 z7lU9qg~^|6z_=t(a4dlQUUWPTK6={lLRI*A#@)BbuL9Gk} z_FA&rJ!%m|oVeXPqNyywJS~U?LFjHXY*TaIp_AZ&IsyHGwaBbF`(rrnvIghgAj7mg zEm~-aU8bj9Uy{L~ikEN44Vu)$M5NPvz@Bl^I=}^^ZVt3)PR^s-lSGC9Y9%>bmD#m( zO$lpIDd+YK%RV|zyzyAcL7;xu()^m_%inXWswS%U6i^;tN+tq-`VaIDm7@+K*RD;N zy5ku#(Uy?-b_wUVx4loRg5iR8AYptVlC7BSJup>`+4@fQL$A<~)iQe~LA?p0oCS$nS)F&KXtQ7Ur%29yXmBgze8k&V$=hm56;h~5FA;qa>WXMczYj-HD`YOAiUMou z7O%D3qGAKHYsx6U8&X@R#_-Sgr%(6Ur|IXoefX}WRl}Q7FQFN{_SmijQ==WN-w;~kQQ0~tku7O6if!Xy zow$d_?c`U6IMuk{=X6!7@4|kq*aeL!=E)Ce2V?m)_;fn~UIo$hY{&BOnFzo{70`2x z6!l*||4TXouj<`uYczNL$sL7e4G=1okJT#2`!WBZaiuDY<+u1;onAx@7j=6ufT0C@ zeGAc?_sO_E(ti~&mWoceS2v_z)jDI|S=qiH6yv8zVOp@Ko2xMWMtu*3QRuN!3~hFn zy}Cx?x1~Sz2%xs+RC9KRr=>E^!tQiVKV3o@m)s0Qn;yD|R*39wvS50FQz}}rSRg^w z`Eo0JxSD$OyODps0YM0UA8B}?x>02n5~%li~* zsL-L%6uF39&ZPGUC*4*jejlpQ^BZUxs#Gw80V+B&qnq?ITDpXTOIUjn%=)HW%9JsTc_U_ML z|Bsc*Qu+1O-E+JA3D**}xAqRbrVJ=Q z^Szi;rUFcFQp_&tg^9=*+)be?XCZpJ?4Iaek~C7SS|5-)Ud~fGi%swpR>XN!F2QuD z23d(3H_YDkv!MQ$B8J}soCf~|kQIFdCv}b9yfu5Y5t)r|s$-!Sal|V<}8ABUhP2*t2^G!!}N9F%-JA|X`$oEXrK@m?XH42wtqD(T7 zwqPuf^t<#Ampe3Qk5cC~^tcC%_OE-iPf}1DHF}Fs4|*}(=jSl_Up{Mgms9%Cd@To( zJceCaFv?-V*z~+u0h1s0@C$PS0}0@U&@X=wtD99u8;SqrLs99oCeh6>MPufMQT(QD zYF6F)%QE&290`X9kXi+h6@x(=jFw?+o0k>f$>*DzH3Hk;Owce(}a-nl$ZZH#|$-uS@Z`Ct`k0bvixx5(U6Yozuxg@qPxoK=Se|AY)XQ=o*2Bscb$L?%_4``Bsl84VjEykcMA%s=2jI^rF>OI&2n zcY&d9kqWq(i@as7(%bj5dtke6L^#>OVnERx{szXR8l+>K=Qo>YnWKYMS*Y`oyY~Y= zIFgb-Byk!%3f@uiuGj#L7(pBE_v-*j!!eQykH43XuZ|TdI&z_Wd0(H?c zhp>6jWhq1bZT>$0rBC?w^7r}W`LF-``T6<&>VLTZeR<7j5W7^KsXb!xNo7MBR+eQ# zM3ibvMWFjdu>3l>93FN5Mu~2a81^LsCw`=SuHyIle57n>2lq(60rLkizkfMQsI+37 zp?SLB|NOb%@6WII*Za%ee|ddYgg?XnnqpB{lQRH1AJAMVk*6<3%4RLxLZ`Pd+TcdZX4GmLbtPUkSRt4we zLl)z-81^q4c8~LXTpp5%*Ch|=YeOsIqmX{bf{1%PSSBfjl2~{hQelN%31^0ZzK+S~ zksfx{2WcKDF!$MWqP8ILLBkN?Wln$e)-RkV$e6}2tuHTyH&$C7;u9jjIJkcgEG7?u#1}i}&2mdXj z#LgGl>1STYFJ`1)GScsFbEnULJw4$PXP+DUISY=`dpwh@WlhRB!x)?5HABPLFf7pt zk@EZLcKb=#Fidpa;gP5(K3kt|-iIl_#%t8zEKTtmN;c4CwT2spY3f-;0TsclW9a%SHL?#721{v1P- zWU(gaJqjlYv)e_SU(GP=JHlh1Sk?a}@#N;SGE76mDXnKdVQ3<8#gJC`c+c#6I>Xzkof%%D3q_vMp;5i%nVU@tcW&WdEm-uY8Ct8oS^XVrhCtX6 z@R{X#>spc-FKy^*_&ti_#JYg|4iI|TpluTr)wUP`e8KpeFxOLI0oTp@bPI9&(>Ut) z1BzG~^Pp}g4~if1+gHr7d8fXlv(d3Gc9weB4?3 z6z8m^H1~h_?`HZN8iFQz8^jFyK`-qYQS6?S?&_gf*u+0K<+MZ~;d>z!?ot|;Q=(Md;} zK!rBIx5=oNr|H&rxm;1TM6smyy7Unwff>2EF2YPt(X{l`Uw%@c0e+|}pt}m=KCB&x zGhW#~jQSkH{90DOQD{dT9KyPRE_?JZ+38KaeZ1Okdh$VK=1fx}xjhZNIRQ4P(wPC> z0INYclTWfyoNPT&94AD;-XKp_12i_Lr9)Gv^|>l}vP|lm0aZ=c zE>22^4#2OU1C&4C-#_@xkB{}<`{DjR`W(F*M&rD}{N5VeUEhZ8b{p=)^K+Jl#*?JV zVU+CbAQj!CtKWCYH7a7tTyRbpjvsAwKx5=M8;zNNKkk{dFg>%BlF+&$q5iZUB$pg` z9cJbV0E-Imd-U}cg`~*RJ=LF}Iq48~MVCeQ$KKJ<;XF4Ih zSEZqBnRpv|6zGo)YQt<_g+UJ+fIgSzpv$8uA+KpyT>=3@tW!?YKfP6Kq#9GV?I@*|qwL0Y3+!I=g=~4{?r6jGgia2Apx})a2&ZYhr;PIJXC{{!*-KGm zUB;#QJ`F?PUOoDYJeAcx#`F8tNDh@Zd}EvwG9V{7gKYNUco(&~c%N_XI+v_S+c3l) zPjnEa^GS$7&Be15rQ?Sd)Jy@lV=AzeKwW5PjLMN=L{bD~*f zb9H1Yb_oiI(E3co^7%u<$tHq->QqyM^izLIBG}J61RsCV-b$l0ocwZ9edrP>!=z*X z_r#bFc+z$C)!_Ul1v}fi_Cj!=Z9Gh6oZn60yg6%WyDpzM^D(0R0wW(i>ky3(qw^)I zBIEWU&~E_!o{P?FzyGpX^=NN{ZAX(cFRN76_arhAKFW6}k_<|5r0m(&wPLQ5oZ9n9 z#2_B9Fr#EPHmw`y&6UU3<>$VX*l;>hp)DfS-mwEz)Fa$;0GA`^J)LZJq74j zBPi&7|9qXS{C9Kza~nSHPfC9(b2HrsHA94WN?3m=H}})*q*U5hvNwVXAs~U+lsAYP z&Nty&L&EdLE&9EUOV>eJ6r{S*xts>AmdacbnFE?`l|BGU(E!Af9{@T=P0DbrcGOGC zf$5GK>3ZxXZ)4Ub9Qz{7@88B~e=CpRS|39Sy&`_pLCw-ixSlZ98{2^+P+s0a4q#nV zhPhiN{pSjG*uhyz4$l=fmZPK??;+GS-f-UsfM5Fn(Je+D8~5A&<6{;5qJ-JbKkOM) z@9NOzKn;yrIS`$8+&OWiP8ec7JhkKubl-EX%WsW&yA+jj#sQ{An%gvNQPW1LDT9ww8Q#=*_9n3_w_KTwS-ZtU(+~CV0Z}NR7m3?-9~4dajRFv!M_6;+Wq5X1ymsYl~ zYG~9EA(C$SHtqRkFJlp^fHDN7;~aeQ-Ki(1<%l@2yIe8ZD!(y<@@gqjjrbd-2B;41 z(}#NY-NSoc&i?wj+5ojtDqD{di}9fa_J(Vz4AQUrs_8k-Uxq1*O0QP+!onlK_ou%1 znUmt4)cAa9IZJJvl#WQh7o@*iq|@~0@1JRUU*ga{ev+~e;c|AZbG>`#B7 zI$nf=aMAoA>O?z>)DhCHNx!}W(0DaH^&hTxSbRtBUQD;%-EKZgA8f9fJHLm0v?HBG5n>l| zk>R?4^v`IzPIgaEcn)#m>5fckoZjSQr^vsa)pJeBpgSVj>-JQ9d#Z&c{v0KZ{rEjN z_=seBUIk&!4pQNwk9~v^t_i}4QYp6VJQ_jm6vgo(#^0#qJqUKxJPrCeJ8T?-uV%Vi_xeRo! zb#+Q8EQ?WODaNIMw zTz1@f1F2P!>ab`~pU#g%V6Qj(XK1_h52~i-SYr#RHKG5d0;~Tc5BLq$L94n+jqw($ zLR~dIfS{D*vITef{HYO?O`UEkz@{Nd=+_uyzd=;8xb5FerRkPbk&@Y!m&Zxn8J#e{ zG$nG1^gbH%$EPE=fi$P_(b;C$kMmCM&|Qt+1FT^W^s80Bj(?mywRG#GU@v!W ztO^YMAo1|fGglRg&MNp+9a8)9PHk>aQvTKL`1beym*z%Z zK4{8YZioE~C5V_YOS(*z^f0+bozaRF$}rU?x~2&7>*t_Q#=GF!@p935Po8kuqdGbG z@i6@oBgF|$>e#tWTz{dw_M-T9PgxUGY~;{GyvVUIO0!onY+oXzD428ZEJ{iadhRC# z$_v0tf+&vuK{Y$Uzm3c`iP!4JM{@r8=~hLpm+ycGtY{M zuVOwl7gSqea>4}NMk<;jNQ^aMg++V`Z}(7MU-&uRGvH)(LvML?9Br<%cB<=T6Pld? zG-RA#zuy5U@Zo?FZKntNt|s@c?(g@%H*n5Q_er7MK(sH~-}+B(`jb(n%%1qj=BCoxR!W(4KpA(DXEFpQ1gjsrypG1iM;~>#~S|3AGwbPcpCtA#!TF7|6|DB#B9*ZXK(fBRT}ZmO}wOv+MwC@vATbr~lqE<|3&L;rMn`Yy5$ zbwUo#S%3OiG0!B)lM5y1B209Y4P#HdkuEO#f7qJWvc%+NhXBlbp>Hl}kXehZipJU*U^}oz`l-^g}^CVlP;6Y{D z^T>fZypkGOg>%|5;An;@r$@{_*Vi4jCyZKyRzvfa0>h&wWYVBVtXTGB9|ovz;rknY zcpG%i;ZrG=oT@sn%g#HA90emGQ$EKDirewy<*53ww>>M~?DjM?SJ%Y(6`-g|w`URP z&u?=u$aHezEBQtRX;XTzOl8Gzb_Iv7Ed!J#kgVDqC`vvDwf>15={#iytqGgLppXqT zV@|L#8D}j3foHFpGD?4p!f@TJS=27Uvu+Was1KdD4wo76wwg6;)fr5%y1fO}nlezk zy3Mdlhcz7uSLg#02APKDa*Qm?JHfd?d$SDE!)(W>u8`eBCw{)tf2LyIIaC&kh$^TJ zE==t+x1dZ&GlB)3jq2V(O|;fDy3XU}1S(}p#MyQX^=pQDr!7k25HlHoj=!k+xjlad z+X5n-iG&()!TDo1=p*f^jfj_9?44(tXVwN%hWrM_<8Qke8Ai1>eI}iI?w6Q z^HRi#HvISg-7othI<1mzI&L><6}{+2`D@*!9I2pzHc^Gt#|Mzn^qX{m@&Yz%sE>jf zkAl7Y0Yg0##`p zKU1*j*76fq&OWecYv$T`*`jz3vB`-q0IljI+{nHz7InP-Bw{CF87Ga6ls;Dzrx=+^ zTvT9;>p;uBi!_uWq^LuxVNo^NL%o3OWUV_=VC&*@+6oARkykAP{c7|CY4^z;wBqj| zt?ne$=+*#<0joK4oM@4t#*!k;8pYo~`!G-XAQpWsMM<;fvrSIq_bDjfisnR`_vTN$ z>%vju)tsZUPKA5gXzi>xc@PZ|Rg$eL!u;`W^zC^N2t}lvyW3CKy&~q@lO|R{)8bfmcnPw`Ygx^3*K?DLeQt22M0NNj6XJg{gu$Q;*ied`M|$A86l& zqf`TwPLDmkoUV2|;-3GX-?GJ9JrM&afqK4@2XH%z_+1rThZO3*E#uomxHa#gL8L`d zd8fB6^Z0yD3?$PI%yb2m>1;Tdq{n{x{IpbgH16~B{j>ku?`KeHrdO((Ea%C#%;lpv z@#fP#p!zwsSx+zaKHjF=+*lNq_B8$Ov_)^PyJ%0LWnTFRG{*ZqHMzG< zVby_@WD%O-J`6+uF*-ay+1XxyBcBDG&r;x|#K9+E(&g->#A}=Xm#T{ozgp zbZcMqsB^LB+JH~tQ1#H0aN-E4?ZT7zBS6U+aGIFQ>gjVK5*!A0u&rV!c~Qc~8R6pM zFNH|=nKkS6pQ8)fYq$NAf81aYxJwK*7AcEhkM)+MKwS{#so14d;nN@7nB-o)J$-Ot zC#xrUwJ0G(`)^uy2Tt*>>yPZ|BR@Pi9l-qNFb|x)ST?|v(QM?StVh$~M9AhaBRGIC zjTw{`Pr4T4;SzI##bdwec(!p11geeh^K;0XV6JOuudb9+!JwKNy4+9w5{90G?Qm+MJ_0VZ~fhb8)2!P^CjFL=8|<-e+YuiBFb(vlcV zh!(14X65g>VE>M6(*A_o#6GHJkMqWGqhq z$@Tc^3ep&B_L-E_G%U^`y8jAN+VI#<7YZe-qu%93)Ac6?a$mqUPP)kGWl(2|>nC~=TN*^UuC)?Jp! z6t9;PX9S@t4|Nt6aeg;wXpf4-V>)xa{Pai!ZD~%_ptLVn_FOAX;_D?*tegV;id`HT zrmUUZ%Het@x}%}KE2eNxvG)PupH>s?!bP@VW1S z{N*5_;6g~=teTB#C-aU+^3j;v@Mp@UY-Kvoy7!0|dY=8A*^59^Cyt>?zw%HDF50sc zkN|t0;uV|7HySSMIl}neBBX6)cyQtc^@8e|O#~Zlk-|6vzi_YY| z*(ozXXLpzZB3%)+MQFcOcwtZRBd3v+vYKR?txoQnTA}6%GGpIlN zP=A`i{*e`93h?mixNFm| z8R*ZF-1SrXh}+3nh@4)}M=&#Y+AURxRBe5AQoJpy@56guVeRR8bod;`B)Tg`dKEOP znFt#-ki$;8F}q=TSvUK3L}F|C&6+?5P#nbnrJS)&p;H)c`j1X1`EY{lt?tnBuQApnIXDXb#syY6eHW8!ELfP@zGJv^u9@%>bi9k z(aUw&BbPxq@?k(2#K|R;{>WQJ3>K6V52ObisNVVKkxodWdIf{7H)+o&2@1(h%yEExHMwNm^Y`cEBcecGTMDKEEm^#rQ2I#3jfS6|Xw# z%NMbOM-m=s_vaY*LqLQG~ zSHzhMZJmB*H-Tw^-fW32 z`52@R@ci<`U@mOUl0CELH?i0Kwxc(~49cN)7|XGJ6;uJX`M>>bqy%*AL)#86CX5u_ zanon*Z)v8ygOtJ%I8RHA$=0wAElyt1wa}H5q{V%{?DF@BVf&m*&(pB{D6xD~H63*}D z>CZGMWO3dhb#FfLFj`09kvk%jO`<%@2A|H2Xdvy7*#R)$p?wmMwBh-?XwRLCKBjk+ zcX|Um_fRp%qij2$clLweVUtO6Pl(FNzF8su>_Pkq)K8YwWDG9*=V?@vHU!eBH#5GD z_Vqx6{eD#<>r)t9q3oI7wz+4*^LG*D zSAHu^C_2ouj6Fu2$NS~hoVhs*GebR^p7_$INDb#oCEzn1R9;{Fm$)4ZWzv$B=GGCg{x&w&!;QU9 zp9n}lM~l2_*;DLUV<&4lQj7*$*A#K0t6++S(c|jqBXeyeh67rBzx>cTUQbg} z%mMdbXR3fEMbQMTAx>hSjy%vqMsEzHatt!kmWO%PWo0KkESG`S^gldQ&&gG;mtD%o zt)VhW&o)Jv{t}hL>+~Aq`^2NIfCtD&F*dLl ztR|J~ghMEm&=gJy=ofYG`Ts(+xu7;euQmgWYy8dhfiaC?7~FL0$MK%c4yc-~%yyKb*$l1w?jD_oSb2oL@5~%e?O|+Tq9#H5s2MO^CpwGjz8bYte zXo>Dw=bYJBBmQ};S;zpiPjXV%=g!JI+KNqZ67e53Y}7HW5E(t@oP>{54C~5Hk$Tq` zAMcAu_xva;M}L~pTu=6L1@U$1nS2w}#OL{z;-PA=($D@EvR!OSJ)jV!qlXR5|Cec@ zs2t(1RGcb^%CfZ7<kNu)K+FlGt`liI@4>bnHJ1d&gW%MU_!L@EwB-nVfGqj6C$ir2cgtu$G@W? zyaHvq%+M1K0@5XzR5Zb%`5QvvP-6jU=I!Ih zMQ2KZ!1b;oB&5CHpRL6I`QkxcoA@Pb0}pixqem%{_j)@7zx0I0_hGQ_!;qIE3b9E< ziC%03QoWPRlqpCZi{oXGxz7wtK$b|h5UJSB15PDeqLYiuQ&e{-?O|amE!K)(Z!jn+^)ySWPu(=FpB2%H@vo^kHrG(wB0}O zj}Vt=0*dOmH?CBCe@aZ&T9A$(r!Fl)3hI0+S@rwtk?g6QknU()FFT;)*%PP=qmXC;r@xqzWgqu4=u1y{ zj8u!sbFMg<7li~S70HVzecbfn^P~4ky)S%!!=_^XNR|h6>!@$;lBPGur^9{nFX;95 z80dEd`rC|-wGDT3-5H;5{G8gs$)h?OJ?3PSXG5|q(L?e2`r!3t2K_|ZWKt4uRq{s^vTSk+@X>< zt7&nZet*tT{(d!YANT(4{dODr`{2ZN_@& z78R`dyEk>Y`8-0m5Z*<7vLJ12%UxWlXtRuon01Ock4M6NMnCziWE7k8RKo$5$w{tD z&v6=>Y-(i{PQMj3X$gkX@#WO#tO9qYcGhUi8b4euk$%CZU!*G+N!`cDMm$nUXPP=>{cr6-<3_2!#Bb6bQO*kL0tUQ2=h!{>LH8SviTibJ5S338Gg=+`08RRBxBq8TQ9ZuAdc{f<3v zgz5GwWb`y99CbZ*UC*v1rZ!_#_XyH*ZV*+}@}0sm*|%TQr^~5}eTrqTK5iMp&=;jg*dRtHH7Vdp(Qcs5{;3VKLS?A&Nt`-!^%6H}<9|0k32*2pm#20$1fPgX zpwTG<<<|;RBrr8yOZy;ynLXE&6lF)^LBEYRs^yL!nanziH1i{L7JPe#4q4&|rN&OlA98KCDH|2&~ z9*=d@jV)DsfU|WnP`o8LzcY`tEboJj|Y%t5g0`{!iEzaW9x z48z~?%|6Ejxr-)EKBqle`x6)@Qt6<-U9nq}!|Wh2h~DAzjTvAjfG~84$FP=8k)z4r z{(34ukF*%vMCj0R2S5?kqbaivXi&o#ZI}}=cT0^#*%PN^^VDoy6%Re`&8e%Aq?+c-v5yobA*s`9Zq7T$2+8wiKHrBK-4wZSql22?H)*%h};p6A}vi0B+H+?FNzpB7l9sx zdc)#Lk>XwTQ9HVVb`K{s25C674ks}Y8X94Hk6EZ%J;5dT7VAO8fl|9N&aY+|`~F4*FI^;} z+&tZ0wPzs6^}!xp_ekv=OO^X1eD<4{W?L$d?rhJ2MOA()3oG7c(gjN?kY0 zAC_?bvZA=$V%{@pEm;MgzkyN=U?5s|scy5tggUZ|KsP2$SH7qHdc8CX4Wxl42HHV$ zwrQu6OB7yFM16dTP!evD6Pu1xsQ~3}Uhg(xjdvXTIqY(382Q zd82N|SSuUe(A_E!^6_qQr_OOI!K?A1%lahNm*;$E`8Xe^%E$CfsJNdt!-;Bsx-m>Y?onDeO7PSNLgHYRhH zWqQc$dg3g2A4RUzRnw!P={cnJ!IO_ngyyey2@ga^Y)@TN2FmL90y-6HtAM|C)Kxc=)yf*j` zx`(`jx=m0S(L>IUT`_t$H{~i7coSK%#3b%Xn{b5|VHQfcKHcBup_erJ5^0gu?Q=Q^ zv>63e)*{-kCiLQ6krb>fnV_2p8L8g@hSf?66|)TN_l{k$ z!ghMY4O+KRv%cItLXfQn5(6sui86sv>&&R%(WqT#|7Zg)_g94^a#H^s{5JEaavX0y zlltd--T+f1Puwc>9pI$F+fJO~oEM*8pr58@=&nkziyF10zfuwP8%DO^Y+Bp_zb7uK z6QCF>Ik=>jsn(H{oc58PaFoR()#KgXYCCAb4ph=nhV+SAGfNgdm>U@8v-M;!@Z%nM zdJ6PUwk2-YWQ;Y+Hu3uu9c3k`-}l<=V_E0h$Jx5(3?}IyFP#ue7X+VokT-W9$DHXg!@1M>7W#6*&I2@_bYlITVu=bFCXGn<(8?E=D z|DITB@A&#I$I(cWcWh)2PhGp?N%vH`mLjBO)jcS7ksx=`q^L*OiFg%G-XF4)Us*KE zRHY7(irMRzk@~fE^Tkv*dRfKx7+Reb8~~R+b8eGDwSl1S4CICeYWcYM)l6a&M%PWR zQyi_Kd}s!x*nvus_OWJGg>{X4Aw>o~sN|4#RhyK{erzxxMDoeZ~aRb=p;iP=n}$~gDZQXRQTFYaa5x|{{O z=F}-VQn~ZuyeD?dJSls7vc#}~a#YEnKGH7{`EN~Hc2F}544PsTYG}MQ+qvv^3T!}| zY-xiu!Q{8WYosNmV*iUbtjfl)vd-5|?c7dV3DI?za+8YKV^(9*=jh^xk=_`Wyy@7a zWeL%ZB5L|7L|R_L?7p&e=i^EZe21t*Mmv77grK16%#^`Ft|8(|Hlp1fS1NwV(P zb4LS>0p%qVsLD}GOv#*dH(8suii)P-)hprrX}ZXrx+r2y zOAp6G7ZfA-2H7u|3i(r6inQx&8`^g&ke+({afgq(jC5|_=|J(V(ZsdB?0BR}bmH2; z{8h?;!TuFq^)4c<0b21`Ld{10_~SV7M?KQ!<4fNMlkPwVWE73`X z`uRDB#ZHB1M^kV;_#7z&2H%2oQ^}ye4Fb~Ol_nA2NzU*5GQInJoCJpPz*{9Gx2ed} z62JCEoK>Qd*8;v>Rc3ZSajF%FGzU_k0#0;Ab@yeZA&?M$>Q8{yJd`Xvl`RUvJTf*MrU!>u$XpJ6mUIm_?T z8hJULtDo{6kl&_(O1S_O$A6fh;beyCP}}1XUKkY3&Otu^9I$PI1GOws5KE?VMP-bsCv_X?_|9!gUa-Ak6uR7oe z$z(;D&*uy=P#L9kuV_uojB9@>5985i*pzq+DfFt;i+3Hk(PV>)K1oe<5E4Jf_;rQpxu`7Pr3@*wTSG^51=87Vj>$KC>}Ra2T{mb) zLA1Z0e0u77e(Dpl2y{gu(Jx>mPCKSbkp48T4?MZHPbFCdVpELgTJKD|E!H_RRUtAd zV@+LD{3tO{2oS^SM_AT!&2zT=oG}6t=rrtJHYzBW%&4X)O|d9cP<`ScHz@~E@d?sj zl2nhDn%gwVOo-$_HD#P!F9~hYi&vX_Q;|OF?zQslC^cJ-H8-i*V$BWe?|eI;A8H)HzcH$D zxG!>9M{8dZ=VxM*3?^gFhe+aEXyYoO{GFG6>f@C(?5+M~uF@SzX@-?Q>(X>~m@O(o zo&Dzt3+w}R(_E~X`%*sqsC58(K!v~LtSkckY6fpkklZiCaP-B7AG+&{zl`T{am3Z4 zoaq2ci9rpwgc6(#RzRo`Q#$bi-5mc1-=Q@1ZY#`fNPhMcQU){}#irO(sA2KvyM2W4 zl`Z~gYTJBmMsTJ5jcyn&rX8HrdAkbS(Gqrl% z`6@Sdf%8OmVA{1uNOhE$uh;~QRWz>^Ex6l2^T@1OE}nLP)Vk0(QG;}x#*;gB4{6o( zUM8NyF4lDQZPco$Kq}u2RZONp5+;jv$qISoQ0YZKA3CPIBTzl}SvE;iTe`4neL((E z9=I|w$olZP)m83AJfRUisKbfUN!vu9T&=={$=xE(r7k%{=2aiK3hGA+ffhJW@(#o@ zndP1&9oqmN>mo`Ag*w`*3s&khCe98h|0P&QXuaKTR@_>3zulA_L%Za7%4uP;!@U8^g@rm?f4+8<|5l%ZZ(Ym*ERNc9>B;8jxQNWT}P z-z!q`qxYqM|4C2d$A>>j_6bDMqi$`^(GypH)~eZ=Hk>=U4c<;$sHch?D~nhy@q*V_ zb!WYkXXy>2Oic#Z1^V*d^gahqBI{mrM}-{K~&k^j__$ldMXFe#sI@Jf7X&-(Mh*+%0v<{=E+beb7w)9Qs^SrIIX` z-gkT9e|5aWBO$*LL@6Vyfaca?ooF^Df)6*Na5){e_?!d<>N;-_)F}bQ^rkUdcOh{a z@OOMnvqOA7^IxwPsldmnsN(Ol6df1@Q>fM^*FK&n_Mv`rs5AjTE_L&fXhr(z!yN6? zoCjsEUwTK`n{8E{AARE5FWA&asK)I#pd26lN@^K9xWW2JHNByP*Z_m0HxArR{afNLxbz#CF_r{=)&5`^tv)NX(S|z#*H?!ki?!~qFV|Fv1W!|*YI__leqWg`&!~m2MhcLjv|8~@ zSyiXnNP+Qv%Ai8X>J4IGRZy*El8-e|E3~WnFg2lwos~bS8Ihm-Fd$t(`O|n)V#2(O z!QbBLzn-I#=!S0nKB3i5HffSf6CGA1(B04L0{V4B(pjF8JGr{?yIP)UzL3nOkmXt_@xfA*0^?=QvC(4?W}*GdvDafCpux!9|7Of zB;76LNpY7$zquzF!K&3+PqIl`6T#mMMZm(@2hvaJ=KkZ6{&KOK4qx9s@1JkEtWELw z$AJWYtT5W`GZqprWEU0hQ*nI=t!uDO2?bh>t16c(D6{VA?Z+qXK3++WRbtjYFpO40 zofxegeg00LlRpXXKEHNT&gD{3S=owiv7M^KmXh=ePvpm2$u3qYBxt8@BbyBKI$KxQPM0DrOZhkY|?UT zY9K>wyTJ$u9yR?k+hzxHc zs%D25V3mu&*3R~5D*A%9(e_)U@zy6cJXeEs_rZ6d{fdeOcEK=S#v0b&P&19Qphn|e zN}LSQwIr(Sni{CDk@_0?^xf9B+nrh=8$=@>Aer(=rB6>4@Ai&JRkUgwl@=db{y9AH zF~BHa_oLHdjT%I#kOcLPp9$^-pgOsoFo;xPQeu}gBlRcvul@kNy>$MYcJ9OfZB#yv zQXWLwlTv5yloL!sSv^dl6_NhTJ!)s4>ugh$oobrrhlC8j@e|TU%>INYiW1JVA>^PS zq92o3rPnFQ#aWM7@ma|XsSYeo{{hlqW`F#py;?+>mG{t`(%~sJiJ}tXM)cB=_FfU_ zK{0)p?nHlmH`7aZO>=Q!?h~N#@xfkFK(RcAYWrmzp@8zY>E8eJy*1`;@7CJZ|1x)+ zE_COEy74w<2JK~KTGD}5R_Xk8!lpHU7hZZx=FG3sc{^HG-;aTP~(}GRZzJtH}x~M)aEq3q8lXXyWLlbi^Uq_gzW%-khZlNilNt{w8_jx+LP-Dwg8}7Fg7Rxd z`Gt3>NZ~Qv?rxOeI>wjj?$qdRsvBGTC(H8Z36HsMo~HSUCuJI@%&3lEqf!Sh`Ez>$ z=>zmAb;=yL@G*iWaGADAl`r9!ggzTp&WlL*uBUz)U#BL&+q(nuPH#Hj6l29YahS=$TqM$C{L+OgL6$s9%lgq#1^t8PvlL z`iJz&In<;kVWW6d5$RWRyGfz%LK4gDeV{rDQc{0$??ct?UiECptlp#@gqeKWClkl& z(k`#iJ5{#o*FpJwj59RIhMpeFqcDYxPLIGUzTQ?Y=|{%2hm1Mj8P4C|22bX3Dup}M zlPRw<(jDntz5)0ZAZ?uXsDP@*`^Vk*#LwPunD`OIJZC3yl=79ucY_N+(>!#}29Zus zxa3|nGElWwAU$`f&!f10uP%f>XiP%4Z>tWL-vw^GI;5kXS`p^w+)|iwjL3PT##hxs zMV-^snd0MB&AAbs<4F6E@c-@r{Yrp-H@DFlztT64?sXpfxw!xuB`SGTnwqcGy~)Xt zNu$7v(Ih+2k>@)g>7DS0ACD+yvwk;$v3+4}XCF|e8hjogAEHUWPHNH&m4XKWUEA_w z)yC1;BGT{Xy&qn+*3+{;N*MamjDsjVPF>fH3|l}4sTRKvgkyu#2~_V^b$FJjfO>eO z{C0Q=JNNp4Kj~k9;6WP_v0wIT7a1otJ5_yCM2Ty4rk5O6fSZu@`fG290Zlhpu(vCo z{B>>eF6}}?dIi=qU-hz&v|3OKaR9Y@>J+MM{D19|u9(P0P_`=cZT)>k@4J1>r3^?& z``7jrkG=WpX;&`!((E(@1Uqu8rZ*W>ZdDuGyvtBG+cW(=IzKO2HSScTE4_se5D82l zN6V$+YXVFe){u4i@|DyDug-skP z8%GEZ71KyXn4v(muW!0Mr|AcnDCqqRoCMUAvIjN#elb_ki%>B)cVFjaW9f&S*Func zwTd3x6p}xmRQKrf;vO}5>C>T@R%g;1>MH)+zmNU&*TZ}_dYT=;4$#8GRD3^EctLUg z2i+^aMU%h}{6jR|Q$o3E@^SndUMZ}-PB<6eqD2dWEWb;W77su*c6FvUw0Ims{mr4O z=;!gvyuT0Lo4yR@-Awn5>Q&k`vD=D*m*^hksOX?gT~rcDSxaOoXBPb?n7gNbY{Qbj z-JsN&3o};83C&zykYGmWC(}rZhp1A8V7k2cKA47T{bWNvJq8ic>~lHjBP}USJmWq` zwU#A)9Vc;heVjooG|w2q|CrnOU;ZbYNt`i?fVVtqp9>zrC4Ec!I`{G@^7Em=Zna`ww?25fGudZx`rKW>leGX;glI{~TlwnU2?BTJIG%J2lrr==R&t zP@f>FONqNbiTM)3VTwkhj%`XR%niXxNQ7hQ{;ikaq=l5yH*&ImLW>5L6V9t%f?DSoKlzIlS~ksR@z@Y+^P=s;RqA zS0SZ)^ZZ0z?(&$)ef+JD7j(s&ks{K_?IWCQf`)7n=`V!4nPKN4Py7Zit4lOE4(?CZ z;H_)==ZJCK`V0VJi*p>Z&jZ)CBpaM+1>z>?AuPZ`v9B}z*cnMfzHcAdjx9e?#i~yS z5&|emCnHl`N|lPLPfI;Cb%s6ppjdMKky?X?5D{QYV>3P9vD{nrF;ywSB%RJ_7*u2HxjDg|-N<{Gjy&m0dt|^T6BcBSRq_XFVxTgrDFclr zHJlv1gtTh3D{v)=7UcLm_?Nso6&NUOQ$+c*-c=`aXb;Z!L%9i(w;)WFtQ|SQ8tzqp zS=C@|r;t2Z9f${R)b=wz%h8OwS8vK>YQlYGD~@HHLXA#5) zk^U!6D&~AXN(Ga%&ge%wmE5Bso?2g|4?+H*j{4y@qJ3Tt&@{eV=d&p@y^oNXlQM6h zD!=m)?I2!xG1Y4aWqH7tA@xy|-y2m(^N+^DzbOh?JbGoXbI(%q3^C*P-nNnr%Op6R z?&o)&_#AzLb9^6_zwRZuC6G)_Gg&SbCU-bJGoBQ?SDSLEqIz$yEJ_m`XA+p0sC-&9 z=T|enz-~Tr62`cF_Mz*C9x6B(I#;2LW_XKF$5}j`(Xkz^i1fEH&tb?^?_W`J3$;={ zUf?+SgdfFzmqbyDx6bu8OrDpa`lJtRD3d>@K{&YL;8!VLQ#*nTGQHABz5#d~Wl5~j zHf5k+%@Q`b!%X@z(ojQ(7j=VEph@JJv@&@REilVlLi&Z~StOz3Qj?62D3RTL2Wnlp zU&IL{nnKixL*;LMvNa(uEh0TB_Qh$`jjC+jXh*Ji&bBJ&#|!~K29E>KpF^Pj+SlV7 zEc!(7?9^Fyx^}Iad8!@q;h7#$cu(c`tg|UnUP%dDZe1|y*Re%^e}9^%QQoJUKj$;s zR2uMqcsI7+k9OANDdPHT>vKLIrl@1AE>?X?tN$B^kYtLlke-wa6Epu1f@szE1L;bv zcWPkvi*+9fMpAT6m5}~~d#nk(2;tQ%zE8r@g3I~k&(u%y{%(ht{<8Q)tosn1Z#!r% z+T8X0D$qz%gl#GSH_E7&2$bwPBo-bY?MxIT=g|$;Zw4)reV|yshmArBHKuLwVm7X` z(xD7s&UQitQR>|8>#r>5Z-kD!*Iwr#i=gMU(jI7h;C$$|_P1<}zOW@JWK4NEp91#0 zg*t&sSrujzYM_Rf9lbvCjDe6~?8DFF16tVei4xtu4tmHUIa>)*(KSJXpp5j~p6#?D zpRFCA@;ems(!zfcNe^|$xiX#8(Px!?zysMzxlBRr-snp9@wLT_FW;#=QzfYk1Omr6 ze-~d>pmf*(ts%_E_#B8*1U05=ojg$XZgXe3rtDRJnrWPS=PLyhDn?V{p@PsTblj3= z{|srY`qm&F-8zagnpJve<@U%ay($^q(4J(xp8_4BIYMe=$XTk8!kv;bhDdgSIqLPV zdZIL_qzlNRI*fVq>`EuGm576BMWAs0%TB$Ar!;lG`ZZJ2M3ZaiMNPrH$p}q`)rHev zgB6Tk1Es0&$zDBX_N<`w=p$Q(!j5&kl&ke3bTAzm75iJOt33Y9W-A zWPu4()6Q?{WvDA9;(esu3hrS8%_K2b;9g~Sl+>X&r3A8ErP}t< z)Vxkp51qeDHJ*Gr-bAHYEamS~O_~E`n48Aw-A~@|RjjAMpka2>=hP}mR5c#amn~{T zq7s1q?gRZLpv|P!)VrI%e5WV>88&3RX<*rgo{WL`csk^Rv7Tb;$H2~n<$l)goq@+##lJT%Rc zgYkxXI-r~{y`aMFtDxGPbf)O!!AFJluR%%%Jol(qW4?L3UuqAwMWcUa)ugCG=U+Bu zs5|lLnEW(sN$0Duf*#-BsGuMAX>$@vbEu9cCtFtq^{^@B(5#h;Lxz;c44!^uQmRUr zd}XhRd$NplCqv=MwCxbGJkpmyXBs4+4MP9k{uGW0$JrAsCBI!xmJa!I_XVJ_(!DC!&JRQQHY#KC2kMHJ-+3k#kEz1?pehlb=@LrMwv%Dhw~Wq~!7g}&gRT$H)Y=iz&oR{2#h9f6Dhz6u zb6*3sA_&BL1!`#ylb%T45SY_~7n&97FKE{_e+pMWd z>fX>t)JXI0p9Fmbry%SSVn3%Nop-^YKNv|Jrc$zUx$B26EQHpW^FtDtJpOa2{#1#% zxL(E@VCtB!_G>LwA7L$D15wXO)5OQ1lQLz(?biklozR|kiW5xv@BJvI!TRMkA~0nc zQltGiLRu^6)l*_6J5qS$W=+9%I?9e$fSo?3v9q|g#?hK-o}U}7JOEp+{)WacIiR5q z53PMK4(-~-0zeH^%q9&JTkrqS127gH$hsnMHOZ)V!kQ@k-X{{3BG5b#O!+buy}N&0 z-K*hs72Rn*v_^!T94pR5=#6S48C?f`OQu)#ZCN(h+*QqGYuX6vGsM|C*QS zhFMRPt61abosO5?6awZ{FzS1BdllfBn7~4VRzTQ~o7Lr;72Qe&o6_6|&r(o>#4^Sm{u!MC(5<|2jtX;BitLNZS-q&IAfaQ=@%;y}pA|l@cKr3%C3QgKh&Qzc>NFcL zM%VZmxjSszPNPp*GWCH%<9D>F_x+BTDU$azXGwK7npF04kV<;9C|Mt%^f{H&H|;M| zGyLNp)9Wx|SV6Db)J$f~E7mhFq1t^>O{bKY1bKpX?N))bchGZQZTh{S{Y}wAJE3{D zw`bRy=eN<_Uj3oR5t~}-UWv80&=I~*{4lG0?KN4>)obeiw@^*x2TZhWUbmn^TVW?4 z!_wL){ptqN&7C#=mJj{@dXa@51JPwm(+Z@Uvg})t@cu}n!mLsW=y4~&CpCc!h1$@= zgY_u1DM78v%We<}mrkqN*uO}D;2F}NM&0k@)024eIiZ@~KRBz>Wa;Y7#;SBS1b))B z;6nm|I!oVkqpBpp>KhsaESYqltOB!is1P}236J=m!6)9+jbcX$(Vaw@J6pH^9{|c6fI8m+V%M zyKZamA%n|2v*VSNg?bTGG)mTmjH-OU(P#y9KkFKq>&O6dNqV+%BOgS($CM4epa>PT z+IKg+-KU{@BXK7P(ch_)aU7P4ab6oNw_VQjOQ5OudlQ^>eD8Ki6$1mI=n<~~n`hbR zUHcs7ZkrBzx{r*pP!FSRq4omu5^mU}iXr8!`ddQ!)962cPzlt2v%W;Nk8Cp>^o1VN zl?N&)f4rbcEui?!4q1YfvKSE67frf5WNRlAa&B#eG5Kgv;e}|?(2}65^Ou6_MPgFP z_o|FSx@DmLI_RIgTlN1_lkKJ#`}P*3{~TQHc#q1p8P@8VPz8B1w1^7Uax;VN*N_XB zSq0cezfmwX)RRIK3vTl(F`frNu`QD`#qU_vitvzCVbl$*kyQsB7%cN4>#7z;uvg%L z0Lh_AfTkChqiRbT=l1YVOP8G;)n2i!TKYqvnE^_&os^27sRXKb)2P4HKsCX7@BS3& zpa3#ZZ+q|V@9*!%pR2rpRZh2dRO$JtO0O#&qzOwv5xDyG3>sQP?c7ZbxgP1Mp!LT4 zfiP(mfeM-IQyJ(APa*z-zV@Wn8a^A}U%^{53+PcO2+Cp}wumHZb)pGVS0$i3b)lus z9$H$=CTpn_dsHL?&#8>}M6tp2ozKj|Dnw zlU<;bUC;;mx)R)n_jQhte?gbDcM?*4(frIaQIgvJ8`ELnx^h$4D;)flIj+ z)J34#=y@(E_^dUZe#Eb3n4vcmYd%anT^Hj%(#n`B6{cjqN+iAttyg#|s6gBF;={fL zZL&J6R-CLI#Ycu!CY?8?k7+>3tUo{VBZdy&z^JWBzaqetJDoShLRNgl@OP>OWx3^r zi-ZtFb%?3ErVR7+L}61P$a^1CC*Ed_3KN(CqQ}^gl&Gbq?-9Jq1YoGg@_p5AKg(c}`r3ofGxWTq0Rg^$w zn^c?7!cev-dKvq10CCkY4zVHZyw+Y>wW7rjjZ9t7HB?iqO8D?k)NWm~~kJn*dUrT^0VW}(N z63{V5)BcCyQ_?t?o=B|rYD^Vu3WaxiX|>IgIat z-MN5rfsJk{Dp?Y%dY4>M3DrhRla@iFu7LEXfrgf%s)YGujQ}iXxjbn%PY0vE*7{h5 z&x8rpGJ!&>R1sHw5hzWEYr6H3NH3ji@6oCj9YWVBR;j$Mh`G?TJ_k#Vl;TeT3Ii87 z{S{CT&y%5D3#<=iDXBauTYr^Y{I-kDmPMq$4W_}}+RYqyYBI(2KnG(_WouMfy=85N zRcxvhl6F7=s=uiWX??siZ0WdFds(q+N2QSM)dZ>SgSM8(_WfHxdjIokv<*EL2SN3| z1BlOU=7bJbLj1K;K2~9U0Yb@*S8bcJP50vz^)b^e`2gT0e+sJP0|kW%-UQJlo}8)# zX$OvFQAQfy0_NM41b_WzeKtam5QdnZZ{sb0Y)#{oy}nS&RH60mD5%2o8e9J)Q>6*U z7MzeJn|?RrYe-MVTg2O!*1txrNQ1VJgmqdFSRNv!n2Ic%NDu3v9njI^~Nu5%<-(Ixw|-|W*Wu)w-@ss`r5$Ou3b z4AblLWwko;{sIhZuCv5g$<{te`-u#$LrZwcroYW+`+2)bImc4?yk{5I18fkvNGU^_ zL@7Qj2xY$#PAdBkvAaSCpFeDxt}chuJA%*bmg02^n5%TPlq%}2qCC#tF=2xHc= zvqWAdEw^f)-2GHeflf^k=y%f(G+SrPAtzui_+57WdxG!WtZASU$AW9X-p6~3NAz*( z&8$-rJ_l+gbq|#rEo}~#i)qI_01YUH^>+{Jck^aU>$7kOfZdcB2QfE*_%9#fhto;M z-S*X}1p;?v3}nl=7wAP^`Uy8c$*zzr9o8xKs{L9u8@u?&Cb8QF(gn880xV1wj=M!&Y<-lW6H4%-#k$jj{=yrmQLyf=VV0BkgW)s2P7Ym#-dUwChND${01 zT;8vt!~)tq>6gK~*Q8}B!)j-NkTO;(|0GQy%Ww8yf-5+}X67}TxpM=`Dtx;pZ2-i- z)1N~9icn9_)E?B@d6raVm08tzW3Ex4WaBKq*t7}K@71V3&4+z{vmg4&*~w{x)8&i{ z{lQUjHG?{0pNg1i_1}2?vLgcnpS&$@%h!9BbK>i}R1^;4uA}#x4&7>R1A4{2rPs+WRe& zG_IK>xY9j|*Orm~pF$G2r?|ClfP^jt@>_2~aqE2bXQ&|ue6NFA<6Fa%5Y)isU@_R3 zJYFUY97=Z$+L?+*-I_Jb-A&S=%L)Xwqq(16S)Dkdv{ZDvTJNv4>JFjGo@ltrP!A>r zU-?^mceyM?mw+VlP2oKOpA-@)QwZ^Jfzq(F{CK?zSyVGg=&p^!cQeQ@ybJGv{Dt7&q>TKpztg=R z%?lbsZj+2EyMg9*$Q43nN$8ldbh#vS6WZ`IX?%_H&iLQs$F_ai{h)YK4+}%dRjRLsC1 zOgGgJf&C6P4eDDt*yi^9{4CyXO0*u<-?ulYTD*l`tHDgV-x{?$H!9BpR-JW@wNDCx z{VZj*>qr-)!UIe`O$#}ztrHBW&R9~_)zw|4SOckzZAu$}us%83rQ=%tGs(9HCWWab zNYIoxTCKabJA&F0W1PPLYM}o4{QNLC8{gH?aHBuZAKS{Wf=e+NgI1t7O!Mo6DTIO* zNN*N*zxt!IGzjDcarSkh~ zA&col2Mbs^9nS)6(!hoZ!6;_C*#KW0>24k<7kbXUwy->0$%}z|vg>TG+QbF8Fb-DQ zsIcj&j@_P3>!_l0iSQ$+bX}orSp^kQz^hM&50ye6d=D~IViTCOXn9X)f>rrcyVj~< znZrZSIDZeXLBrc5!$$>bes;4fB3Aa_4T+q zc3Sxez#`#MykL)O0Do|v^9vF?c4vVg^LbrWdcga_=xUPVOvi(-&@eYpuc=?=Vc?}oA}J#~|h|9M-!n|NqICzt2Mf(Laoo%Q9VU zXN$st3LO^?eRq8_806Bn02};k#mQ=3{Taem9o@5AxmTyPcoUMNnViR2q37eOp zj$=QJBhdp?k{nk<6>T?k5E1FkAyhnHp*a3<#AGxT?senZs*tb~rq37bpvh6l7V>S2;4%m)lyzZg|&>dU{CRgs&$A~1u?Nh-3lIRb^Z})3|D98e~$DQHvL)~ z7!E&w{5GE4Fl@Li(l(|Y(v?~50>;Jrb+QYR_aI}5k-NMJ3aTt0)Oquubu+2MHDHk; z<*Y+@~KcgEa_F{T&;htNq(xI*HP@82|X4gBo2SmSu$ zl$I~Y&ree5x;)!9PhocGxo|$#>XUuTL&6?&7&6Go7WTpMzSU7#_PUhxOwHYS)3&G$ z%QizQ()G7{NU1ECAr%?>LQ7n?-o*+;+s}EIU|Jdw?KZ;-{Q=tJgn&HY9@$i(eaP%0 zt+#2vlnEYs$;u>p?Yd8SDA)zEFx6CefpdwLy=rUOZH2H^lbVP^PotE{nM#5|AHy^Z72*jF4U};zJus(*CjZU%Agf9g>=cS9xZ>;H<&lFl-K{?^g7&=n3UhE zEWnZp_nNXMs7MrX&H)yzN5z$Q9Qn6dPdY@~*{opIK2>{=264U= z=y%}XNPsRImC{su4;1I~slPwHe&n^aR7tMe>9^Yxd`cQ{Y~#JzrSC*+q5;~-MC?#o)PTb z?M_$o{&l)f8=Q?a`Rv7C{nqe8pzQca)4WeBj?_*n$VS@RxLY4)it8ZDK}5&0&277G z0;%JBTZIb%2bUd|aW=pt>6R7uKf zz;EjBSexzxn*^&MHgru9MxD75Y(>#^)7DoSNOF4m;brNq|w{_cZ76+o`G}T56>V}0v_!*KwCV46vq@0sb6fsI4iB*~N)!f^cLav|L-Yw&NmR!*Skq0J zw}~m#vM+~LQS;pUd4IpjLGWq(45@bs%U-QV%6hH2kibK1p)ycLVA{gpvF#C3gjPgu zbqT51Z4+tb_0nZ1T|n@fWbZneCe|V;3=viet_x6qiR2;z=J(Z1#XHW#H-o)z*x4(e zu{tVTIOXtI%Mpob zs1>SGj%HhYGN^pSp;)V!6e77}>A{seL1`m2Bk`Lp45xcDS(kfSmdAH+vVf$&b%{|0 z+qFFr^0qZt5rHwwGA4m_FW|pp{9}isU3*;4422<$B37?3la<&vjbTI>%d0qM{sJR> zaum*ct-hSa6cn4dPy^aqyt5Ulb<-{Z)kJc>BGMJmwwlr7&+a*uNEs9qM*TcbrwBwQ=~F*mFjX=wVmGqT(Jk*=s}{R zd}(=y^JP!n$Tq&BZ0*3XYcK` z+>Sp>GpII5b)*%7gzy;cPBiOWwP8QUvHu+2BH>|0DWg`k5u-T%o<)y4e;N{L&oD-v zRTa`Lu+76uhP13N8k;XLk|zv$TxFVVnIwZTf%N>scHRG&ZEc{UI!LT%J@tthaP%b! zjLp+RNQ@P6<}aG*>6%^<9Xwx33s<(|7IPSQhEHx)ndXEYrP@W9haoEiym@-9xC3C% z&c`Vd&q6)xY?m?_#)0-YJ-?S=9=%`?&YnomFsXkzxDJ`NMnDDHcpp{uTd>inKK>&m z#B;FU-+Y^nQCk@IsX=Xc00qMPv@vSdB`S~dE5A=$ze#(XDRl_74bK=Ac0DocvIj2D zw-7rk=+5!ClS%TLuw91}Mbr3K)?Y_-qgDQ!f^f6;zw#4RMI&oM!?EQL#Iu^>-6|6u5RMG@e94TM{9wi!qUkB>=j1_?fOU?bH$(sAN5d-idrzG|497OEt*FD z{zmY>ia2SDE~gtdRUQSzrY_Rb0<({j#Pcu&U9BD0kxDQYj`ol3RrW(VMLIgR=T=?I$b-R>~jMm@~ z)^w8aQZ@XY%anSi4Ad&%tWlKS!1TwR;cS~14)Qx_$dXX=@6reO_4D;FeAc^Z0D1JQ z{yRa1^&l{5{!89wMiN@XnHOUGY4ho@fXes;%p(=)uy00%}fzI4tw)9`ccAcGz}SgUz_tdi20=;GQRTsaHOUoNt< ze%$Bh%ZSFW@$=Oj2p7h~?~V>XD2o;Kq~Xn$g~$oi5PGQY5bF=aIt)E}j%~2z$Tq<8 zd4&B#5&s*;Q$m-Q+=2SiM5lfNG7C8ue8gKg-D!jVfnz--{yLP_Rd~x)G?AR7ohpqu z<=lW!u;!sV4bk2Eo;fRedqJe(|AJzLza(wP&wbzKseHTK<_AFc9aQK>HGvqMIwG}-g2XlHb2m@V29^*c9{eGkUIyS4|C?FkqWtzh|+}2SgB;;6&v${-W~~RmaG|Yrn9GWiZMjs zmx~SYEksMAr|OdlUzt$9QS%+Ii+n?#EcuV0LO&&N<@>h8M(A4>Ba=WsHksOg>Uq#9Qt|3ow4~U9s1I9n#bxd(Qa2yG<#3QlwA{q9={^*wv4&Sm(R`eAyG2dAH%snVc9~FYzqdx{~=brNlu%Drv zu!s}>^YhdAU+$lu#{c|J{GEZVndP9xcOChCjCFIUJRw1; z^{e%e(6E7`-C%q4!tt9l;iT@-HEltaQo@;^C{CV-y*k})(`|n~=2%Q^9**shHluBW z3+YOoW=?%*+bjW%s~@LhhtJ9H0};1@7(#0Dk>90t?@O9EvrK0Okpi_@HoC0+DbBR3 zV9bqsd-Fk5#+zG~CyZ^INJo9FN5pv>q;u1z=t=VR+>_D|Uq4^p`*7)+qV<2BZZEd$ zx*=~c%tmDn?kWi`8imr73SGR(HIQT|LN1&3+`zk&=)*L>Io-!MH9TETqUTW=Z(Y?v zuUc~E9GUQFqY>tfs#8U*M4Mu)@we+R`URxhRMW3;uL`I0xt>aHN=!;Y{==o>FES<4 zc5>1FC?JLQ&$;fy)@xO%e;XP;wY?#6wRPVn%+w(aASS8;%#&fBK~IQV+~!TZroo6b ziaJDB%111To>B_6BdIE=6<1(Q2RL@se;#UxK|eIc4zLldIl&qm&TFtr>vyKK_HCkW z4IAHX5Uko=tmQW2SxUhWCmrDO(quyUjozI=q+0^IdH_c2LusnNawv1r-R1jrY2EGw z4a$)SC^xH0f&meTbIMqM8-MUMcyl_C(4bOPe8Mf?TvSIzCnV;2dx#Zr&zfNEWoR_7 zfx2^~<{xg85l%kvHWrEVr1z@Uo7TBx5|GnKmZh!4v{QcYA|LU&$d(-%%`}^(ge@f z71TR!%C|RCCRTxKM)j+ozi+KtN06wAW(0Z}C{gfZmC(4MWFEu_e@=1wfArJ1k09qZ z#{S$Lj_=d@{;mrMSxH9{1QL8BGBIodmZr(tt|=Imz`pj~6U}8tWIG&rkGw)roG(3G zL&ZsM*Tf6RSw^{tlr%GDNNK>oj_+J`SMxXtUQW=b#S#*gFpiZ?{J&PoQggc<1fAy5jOXzJx&tDdX&3+O3TcG84^YgS+o z%BGl;A{7xjdJ~sSi;4>Jq-ktd+8GQ!om#gh*xP8SuN$FDl4#XOt=ChOK3IXm58`}@ z;EuHuuAgB8wTi~Yc45@qfgh zkJKU3DrTfq=apgg23&<+Ay7(MbR^`EBaOwhfb`cVCAYg#FYWaAz83Q3D!0ot1{Ft($9REZ>?c>82)m?A6tAR9?v_p&DmrV*o_MiZBvFyL|&yW`&ct1 zTDIK~#mEk!h5<-jgo>lp&xF2YPeT$qGCI^KrgnO5?Mvs)5tbz0v932NL7T=c6lO!4 zykys(#!Miep2qRWz?-U16|HYBN3-tNWV`^{G;ffjIR%M7K#6(}U{d$V<~h%mQZgViBvai7kuS<93Smp)ibQzSxQTJJfy8%QP$glfYMC?oxC-pAqe;eUIy zDq24_Vy{O?wGR4eHAwfMWz;B_L)RTqQoaEaFF+j?t!j!$e~4&gOwBsvq4wo-wIiXo znpGtkfw4iDwg3}>LNg?Xf848LJkp$&%ab#+ChfBn48&CX9O*B`Enxt1oZ2*XJyInr zk8b1&dK@U{7ZCJDK^l4mn0_-iF3xBi-&>n$$Qo(l4PibH1Jr&xcVFxMmuf3@AwH+vHfGG;|6PHA5c?emu9To!+ep z5i7_&-Q*Z-myKj_IJ9y%-qR2@0?C}=gcmz>xGrmey{^^+uEJ>3U=54GQqB-Y*!2QNx|aKk270lojU)U8^; z`rBxbPfq*1SP%MvJyimZwND&D7xmN&KoJelQ~&15_2is>UzyAv~M z?zF1d{WGbrBdE~Rq9?5?sN0|=_Xv+nf93T48CH?T14Qs&#(JOnR=Ydpf%jGa&&}F18PeDaGKYlJ3PM95r!a{naW7;!w`&C%eXdQzp~~F1(uDL5(%%ee@KbgU zvhMg9!wM|qKAltScS;x=v7aNP(EfP~oO3lcwc{8hNDe~6yl<(h7ic3+wz^is`KZI~ zN(9d(s6X2#yZ;W7_gyue9BphH2z#Is?GI{%i>B(Eqs{tp-`9S)UMS4fbog$t$-WhF zDyWP%JQh@eH~DaHg&TyycSd$H*{FyOmT;MQqOo$Nr9nF)axa^979W?2==S7 z+NUxkQ)hx+-SV+xzkAo#>XxR2zw6!&Sm(Vf=Gd@|6}>r_VH}1?n&8g%!~jh|vcDry zVos=hXkq`)=%u5^!U2w4_{leK^Y=%h?|hD(*_S6Z7;1mR9D9X%8{$W#3&O&(vCu^% z%Cn`fl6~x|Dji`BjYM4)R^zdHRQ)tqogA(sna#SAQKA6DaPsf~axia;0!(4YHe(0^ zgGV^nu>T#rGz@GKAV{jki>3xE+O5$>fSlH@*5nNZkB}3kRIf)sMIWd$Yk*1$4Twe6 z%oVwFANvR)F+-{nq$-~NvcGCxUps&B&F#XPcV zO`l>+V5X^Yt={2_k+`VV_%&1x4y;-+kFiw)W>)PtsSM~yE09h*h4=sTOl`$#xKTB! z)yx-cq@^k&{SJd;MkH<@!0$&vcSXT)tFX#r0!ke-T#Pp zgZZIbAB?tK<9N-i%8r!@T4gm@&9*@FIjoH%J7uC8mE}xUiz79g0Ly=Yk z?Q1)Zx6ynW^NG0XY3zoXP&;pPsoAPIiymA51gV5m^?y`@^aC&4no3#n;8pg4gdkO} zW;oMl4ISC&i!i4!)MYT;+UR`5muKdEFIwt%A8JIV4QU;{IGg9ip zPm%sKy?yE5!@$L>KS?hylWSjI;tino4!=r!TvBSFL$!wlD?d_Q=prs#^{4U2S+05{ zQ#5E2tUfS;pHt_rNZsc4C#2^n@s!jI+2MD*HUMtgP#r7+1=M>) zI)=`Xy?4XQZ*Yh5Pg~6Mo{hu96_}gR_%KippeJ=&j$EK(KMSa-YHwvA*+xh_R%_#n zQN;OmWLs8wd0Y4ExpC)!W$q;v+ltl>^A z-UEl~w&%+=Wu#%P=qVGms%8EAc9U9DFL4p)S0JfV_m)SjZ)ZR&Xjrxc zg-1wLECMj3Uq?uNs?zyv6)68qdy8M_dfuam+wf8!0S(Rhvd*M;BZdL-s%|4NNAVy1 zuG=wb4KH<0NxyE>eD!T8XV%vRUaZ@a{9#>Aqvpz4b4)y6=frZtNQ4fO$Nl0;*3~ooPqq#z3>T8wp$&t=yBS zVrWHDXBG2kVG-6Np&)_*(cL4^uR471VGM# zV!F^c*SWVmT3I*n19sgJfLg7ZA`Qb&l}P6}fF9o`u>w8NS}!2o<*Vj4O=|7b^9%;~ z5>6r$nwGPF__@w_mWkIgn~LP>qQu43AZ^epglh1~_`_rTfhn!}2C9kXG z=reT3)?5G;&ny{*97CBne@wlALat`zXYHK&g)b+qThh=Yq{_vTKo!#B=OH4oTu+T* zP0AN^^eMkCK}8>i9UWeUSy^alCq5_!R1T7)8oT`Xt4#nvhpLD+kX>GS6sRj;CAumc zX}<{oI;yl5%}Q8!bW)twt*Hg%Y?p^ngND5dP=6Ar-#Ju&`MdG&$1ugwcOSdl`r$U& zS5nrwZJ^4OS-R&K;~Fq3s&TuxPvrIq+TNHf8H8F?rm_J>Q4NeIY- z>jV2%@Q7^)nwfDEq`g{ZNs35!Pt_^XTDihRVv9lTw?++V;5pLR9DwEDORjdI)~bOg zw32)Sa26*SG+<2)R*0N@H{CFBKEYbz^UK7-%(%(LrDY6X%W&6yFzhn)?HKpmBkVFC za?>VA!?12!iF8H>uf<9ihaF;7-E6yJC(N>&2O?D6D)vDGQt`K_2XFD^Ie=uyFF$K< zXMF(2|C1?C}EBj;|Rl3lT1OSABg@J!@#4IHZ6+_N7Mp#pY^%ddJ&i!)+#vnDY?&|H;G8R~cA7idK_%oWy? zdCi(S7WS$dtU}XB8ztBLfJGB-r&VNm zjpGCx2zZ?H@n_#HHq?!N9ARim=><;581%M=$^Sb(0>WzD#88LE7!9&dpM+SY7{W(v zh+ZT*5#$t&7URNYrAOV_OQolUBTS(q+4*?btZQsCXIO++Of@n1ab3xK=2#Gzr^6tq zSRJ;>j&d1e0ir;-adjUq&kg<1_ZX~4n?!2H|3-+k-dEol=F$TCqI$eDYW;sAL>m6S zbm_&{Iy}~3Y8Iqg%!Zj1-G96jhtY1_Otwe!YQ}28SCV6LWi4k{op!gMxoL} zeG2Y};HMB{24Lwg`u(Uzb@fn(^J4w~CEnW{O}{U(tdA9K3bBCjtFZyooTu1nhDYO~ z(8tRJ#>AQLUg!`7HHlNCLtVlP#5~X`BK%3Dwg)-I5)g!uWaw?QIaSlybI{y#tFh8j z4H6_sVl|>{GrxF_?)&#hj@N%AnRV}uu4=DS!7+je7pzBYGfJ6z#&d*dvs}i(cRv=N z3!AZH<@8WO1?w3~|0~Fa++cA$1&sK^pDaahjxq7`PPH|3cd$o&oi| z?yNv9NV48G6>!r;AxBL<^Zl|L3Vk3QbyZ0e|HCv8$EgEOsEMf>oIkspbSd@44yMP3 zEfp!q7~!`osG1jxI&M)%Nb8q>4{4yg@E7@oXsufudp{s`Fd}fE&nOjprWT}WP7U^3 zkY5}mubqdQBxwfS!p}WO@rPkQ$v!4w3AZ@9>jU)8tEs&h?yy!cZqWyz8!o+*C% z&6=wU#^Ypcsr7jnD1(Tbb1`ZH*Sq~rKLU5rIE&Yl_t-f*ZxwZ%AX+}WoLC9zR0NpZ4lB=*%RIWTNwj%69AO%iNr*3gyA7n`m6KS^aX}6Z&ZI z#7CtxBlIpxJVW~Y{0d6m^WO*2s26;7-IPU1s)|^H#Lav#EFDJd1zU5)t*PiNm0_L) zoHSxZ`}9(%6w_R^dmE^4wVGk%6>?`9n*A+8JbTeI!<&aG^GvrQoQqvvV2gEl)iY`z zC)Dc$vGrw~{BrN3pTCMT#B>;bA8>gJzT%p%xFL5`2Kk)@B5N==d!r1_)sxMAYDJ->jjMK0TPs(@g5&~ zEr*twGM7WpnR{JeV4{U!1T&`x-7ns~58k~VXwro`t_`#PkFSTyGs~g|d5-izrC2PA zi+&zV#|fhSSwe~Svrz=+L(P4&h_#JM*2XA#-JUZ&yrV%>@8H???0Kvt;W=FuPIijS zI^5I7vm~A#+MZA`26c+)TjC>GQ3~#p+7Qu|Fs1?WNE7Kk9qzl)_T#e;k8ST%UL`zx zHt7^aSYO|`c@9w3wf3GQw@I&NIrSW+|6dB-{FNxrKUdd(*{43&l$erZmuGLYaH%Ej ziqg`b7mLFL{R3BgPa_AQ)x_o5u>{_KH!Ds@IE%ZprXzC5%$fGTh?vNUZ32(cIKS)& zNV+vl){-Ug@LR3|XI<-N?x6PFs7NcGJt`uQ0>-!@$CZ9 zQpHv=Z=b+K4(i-BnA^S=NfTYUN_7oPl(^~X4{~5i%Y9?^E#>f!8j}OQ-{l3AYWABw z&BnWq=C&4$eVS!tt-1^S=ZL)^NoJ%(B&9*6nO!sCA7i1;)p83s++A(##S+b@EOqRXb{0RB~ z*&@h;+j7CI$6-`|vMjS|6boCD9$fMM@Bd(p<2dIjBytcNmvLeU-;I&!D%3tA*Lb)t zoim#>vySNm+Y^q-YACsIn8q#<5^^@Zh54_qfBoxU9_GJRm>WC(WBSKG{z2d8PlP#( zj4jDaF`V4XyN>S7BFaKbB=y)|?+BR{QB^xQ;qOi*4qzG-kn3QkGz)T^4AeSe zC2^RfczmFSn07$GYgw}HlDnv-C)YB}!tXP?Wu%V z2KmTfK$VM!1o{BYGcW}5)GfhjL@3Kv;4HjcgMayv8DMHxQXTk#VNrVk6tNNrwkm*L zZduZG1|?!hW6`ubXvgkMr@5bZbZ3@vp1!-ToAr_Anm`OGsbf;>H67+$tHOqa<3XJ1 ztkMQ%RqrVg7C6Y9wZvDoz|4yas38_n9-EW-s|We&dT^KeJhL5WWNumcj?=(FLJ%A< zryz;PBpiB$IrT2i`A+wVrqn)Y_SgTT=WLIbFL(++y+v`NETzUAXrEn4LC>aubHD#< z`H&RL<Zz=G9_=Dflsh>A#1R9^W zjHX+u0x0#2y8Yv{dL&*cV0dH<@w+x+8R{-i*= zG`Qd41)Zf1{q59gv;?(|nKtoLhF;+-EW28Demz{C572ou4coxv($Ig0_c#TvP1Pr7 zi~B1R8wM)udb(r7CV2R4DTs&poTSqnDDSOwn(Flx`!xXVrt5^=2TGQ_a6qp~yIj*!i)27#|RxdKV98w1cvt|}WRqwAE5T3iS~Oy-2%8CLQRhy5$5p>Zv@3_;vcMO^)9X^+WcoefFTx zC-plFH7W&_mEJINM53+_qRiGx5L{QAUQ-agkB{(VJoMN9vXtvnoPR=-Y z3Fq1p2u*9D2Guc;iYBaeaP)>6!wxY1>t74THP$m9oY_OYpnyv>wf&}Q-zKz#JH=Z% z^}=WN)=}XeEO~6%Rbw;{N?UP+lv(pT?9+@yd?yQrn$vifF&-pQY(uMoJjRD(J2na^$;-2}eH1`xwsl zp34M|at?frQWW|L!mMNga&bSn%^lzpPtfm3EQS4GX%GO-O?>b2?n{YQYkFBOne}|% zekS`iYim2Yt75K)IsATb8VXCRBhc+ykdoAVhdR#*zQ6&<+nd%>{y6W}@SE$>%k+$6 zh(lL`_nE(kcDm!?X?S|5LOKU2G1tr3{*?dY2OgK{DaT)>n#RhRLFGIn3m+ijvKKI( z1pCx+OZ^Y|YiO-lnWFNuzzx8y$twC19R>0~!a0x+pthXLR0nZ*uJhNG5BZV{fcIkI z5JC5|h;grvBs@Eb)uxvRlV&0TftE|90}IhUQ0ZdR*fG%GBcQ`TF%=Q7P(yR}e5d=} z)4omely_i~COm~=>613xeWJU~Hbr~Jbr0uzF{JF%dv=*P7|Btf7 zIlCMqE4Vok;)VD6Q;0b3E*(n?>5~ie9M99x<;|>RkaKRYu;w7k?)VnvT|`iHAbsx= zOgK<|r!h|Qo$Gh-&HEf*Pkx7GK&!-^aJBn&w?i+Dw<>d>T#Oif!?A>0!1=|(kj2%H z!K|@Xw&`&zzl>3%1`7Dd?)-WVNI_}s839ymoLjUaoHM$-BKWv^-A=W&$tkK&QiXxyC! zH!;SmPJclyxpTruG%3*SW4p75LXLkeirs6r}6VV zCas&WHxG=6oB!u`w>d}63qK5c>igmSBDdcjNPlszDBI>`f%p?jqSSBwLqta;-tir7 z{9kA}HShi1JhyIoe!jik{Qsou<@EOcal74~pPt6M|AW~ZIk7iLZkK;Ib2DldkuI7D z9LB+2@5?aI=dzm#truW2bwdvlNyBFLW~3q2#nZfzHAwx1{ZI4H>7V02@BjSg$N0~G ze&Vm;pZ<@?BaYA0r@b5o?a&-V{#rrrL#s`RzPM}3I3dE|t@cM!aog%F)7A9HSBVbx zC~fAo7hIAvs7FH8q68BPe8K;{;`_b~%OjLF-pN4C%;)4C-d@+G2T-%T8$hL7s4Ad4 zz?gdYxFsH}qSu1@mhkJYAa%buMZpCw=_ZWT!*h&34Hb$%?0i+fe16_W{dxPm4WHWo z8qlC z+?q+M>y~lNQ(GQ41;wrDd;pXeVroTVQ<|;C%g;#l>^)H_tU&tJ{QqnFlkLcHEo%@S z+hfF9=?Zt58lneCD*n<^eWg`{x+Bf={omrpJ^;xBb^t9hEh6NSZsxr^4!YCsO_>*C zhpn4FUjl3DvPPmUQ2xb#F?5Crw(ySX!>O!+UO*i9I?P>rPAnIHzqpt6DQaaA(4a69 zO2i$YyRN`Fw^=E))e7H$GZhZz{8sLpr;uz?D(GXFCP22|U!t%(WH4JE(DcwJ%Z9uK zs(5dAk^)QBcQqH`EqF82M_f+9PSpQsva!7}ftfY%`@SP5v%#p<7WMHlm5L45)@)5K zT}px~sq|V~{2QH{ozujAb%|?hnSq9GT|nzM^Fxu?@Y8*-K?$bP$YEuRZbv;PQ837A z$ieva4OJ&ONidD*L#KNc1V>3dz!@dAR)G?%?HuhaHO`V8?H=(`TXQ8Q69OH3`1gE3 zAMGma0ZknY6{M%BVw38bubT}zz4McZxjek0NC;MdJH+s551HgZ^A+VBRfpl9(?*((KeT$o{gx5CUHF$H(&@jqu}+35&N+5whYtekc+6fKTE&&R^e?~+Pg z<=F4G+|VA)UpIC3h6{C%K8Brnzc{9LN0Qe0ohxmo!@vK9>y8POZRf#f}n}Db;8P(p1o@fZW`me*Q|d-&DqafV5%FRJ-iY0w-weV>8EvxEbV zF%Nhl`Kq`1@ROPK7*74Wu=9Wt!>Y+LRb3yPD4{Zgs?@|#wdZ<7e#k7V4wRPtkhof| z9;jWCRlf_=V&!EU(B#mW{%+NJ$>n1we~+hl!O2SQq)ARZ#Wk2T)V-ymKii@8(#;M( z;4Vx<4zp;2IWboD$0epqFn1{-7nCggFj;W04)TYx;$U~)d61^-|0*S9VmtzCnCP92 zyHpmpJ&%(@nw4$=dfcrdrhLg`StrbP^&udcqnR^eS^hyd`b8aO;Vzf)QNE+py2?;@ zm-krMmUU-tJ!#Mfd#l6zrX=p`>n4Od-knY1+=`%j7iGGV8c~M$*Xw##ra1Z!IrN28 z!h+IscOHt!)MZft30sQ6Pl|-}C%z1RZem)~DYxhmZWtkVVOpIev0Gq9Ab++u`@dT9 zeO}!a(v)s8`6Z&x({rTso7?L!sHbA->4*39{rdrCcV4_XAX!}yhlOO-s&v`cO&fjD zVX!C4&D$Jq%RXH*moC02*KWoZNW248tKK?jkDh-Xaqc(7-zCzi^liFy@>`JFKgzk> zONo!z@?%^=y2~8LU^3F$xB*DKys;{lHzC2w~&v9(^WE^K*xpD>mycF`l)Ubhn~7*F@|i+=hFs?|u(w+M=NeCv3SJ z$GdFK@R+0_DvSo?ErJ};*(FgtBMP>E49(S0{w$rJl|7O@Kn>5*>qEHTD` zqA`xx*)AKD9r}fJ;K5W5W~4w}45>p7lsAr%ic?Z`Ifa?&Va;6cjDM>1T^L?mCXBrr zDsA->=5^*$tx#=}^^)SaJ5{_8Ne z>%ID{z0qoNd55lgZB0Gp8S~^(ZOJEojQ+5DKauXkI+TNHxqKJ=*p4ooNLxP zL@flJxK%M8RK3_vMT=V-m-@Df82xzkB}Wh zb3$A$$hWOL8X3c6P&Z6;Y{|ZO<*zz*JJKVI6T)#)K1{aZq{!mRfo~9>Auk#En|Re@ zoQFHfnrBA9sE(|173Rs9HkG^Yx*t~y-@t6S!@J51%7Dga>NPR1wg3$?wu9L7YO~-D z-7dq)vLoK5gxCh=_ZnvAWO`)bPb%_>MkqSUXdKe$9FhEi=jkSCsXM1`(B*FO=_v8~ zaX;uGzSQe+fb*r_r3Ri4ykQgio+9JueAX~x!Xo(m2=SQHm)~3;eBUULEGy5M87L_t zMGMko&nvl`)~-t^M0dSJ7rSAN_J(;(T1{O8r#QbR$~cw}L$ync@1uT}gX{01`@Pzq zvfz)14$onxJ|eWqYbsGLJp+m+W1FpcvFz#Tl>ZLsFlGXz z%kKOxVfk{B#QJ7Rd4}3SBIVuDhPd1z@Omfq1J#h%dcjSzu&`)|XDCoAl)p))a6+@t zX$|K0JYlgdcmZN`Q^tNhqu)TXO%!JqC*BGZ4-#|k40rC3AI(?&Da!8yFEm}EGCH7d z+FzEf-(&t~H?14d8~3`_vRYcgC%}We_gcP@ZtxEz5uT zjh~**fb1d~n##+`FO+d~<}pxJ#YsSy*T`eA)Q`CaKZd)v{!;iMSWPxwpV|g=3o(?% z9G#+8_BzN@E|%;sU*=lgrG;K@CPx1sY`&T5K)-H%*}AstI6ne4KAWHlq_J|tXF*Dn z%1qDjkV&UoD$_JvCW4=bzf>Yv7sc=wXA9CgP1Ds4`o)I7!m8X6h*G1=HPIVVKC6oAcfBOdFrlbm1&qF5f7kqQ8Nzc6;7Y$ z`5SO%aN{zT7Vr2(wubv^SW^Mox;=Ac8?lk~2>QXNJj1k{s+y=3t04dSYv@z!{5o5+ zIzub=5P1coXBZQA2m_ct-#@?95jK$s;#Y zdB-2RTODLYTt?GbxyV!f`oxrM|phQoWwodqp4ORt?dW>bQI2i!!Pq(z=E#YQIw| z{Tc6nao4Z@vb#q((W#BuhmvohfJubH>N?Erv5$e0x%8a!nhKir!7Z!#WNVgrw;X80 zjeqb&;VJdKCsB(nX=`I2bSbsD941cE9Nd(?Y(Y8<<9WB#<#W#{wxUmh!BI}NlaQvz zG#S;lAjO~LsvM_U^YPlsTQ!gcP~TKM{2@A4NWO()9~314OGNSwh|dKXM(;NbbEZWS zcq9AHb^!zGZ7vEl0IjvlZFfPd@OvSx?e`2CDB12Ban9Yb^Ou!nFZ=yljb&y}vx=i6 z;*;t|y`>!c|AswR+OUg7E%&A=A%S9L^+-+Bid0^+DXXc6W&ULgwVnEtt8FryI*!z( znenEx|M%5R+VVcv#fhpiQy9 zMp`l8X6iAY8CQS88J&}ka6aFVFFy0{;_`pnVpt(_SpCfU?S3HO^XrjjbD$Mdcl2!9-XltWigqqH5YJ=Fv&}b~1Jc_f_Uwn_IaW@J2FBzZBqQ@uL)lH9DT*IO>9UFWd^0y}2R1TxL zYRWwgZNG;TdfKl^AgFzJy3wj)WMldMfvet+Y^g)Bvq00g(dv#G)s|eH{P9#WtgRllp4F zu_vO3T?oO z&zuaM{w(@WSFN1qFX!ANDTvRT=;;=miVHYUo*5TY6=f1eKsUpgZp+mQ_{0VzF^}0Z zwguG{bvvDC$7>Leh6_$Xp5LCkLdwjTdLd7Qta73ytit@d^?g6g41ay`$3D(B@`{db z`S`BKCy5700J^&6yC$5=#k9NRTir5QckBK;jW&ZEAbOxoi(Ym7aYvGr$mS~;(GID_XS>ray6Gu665&=y2^vb_ z$U*9#^70QXgR@KD-%3^my2M`TK;q8Js|l=eQIK2CxsV2!n2Ngf?|nJ)bP#}+@26<& z2op$!pZx`AL7;(w-5Rt4lpUyaI|cSAiH=8{I?<&zY|=w>E>O+& zx%Nq|N6_>=hQ=i;)~G@c!=;L11K3-cKxUR)$Sp1nLo5R1)MpM-%5DxhRXkMAkx8c% zXv>iwCvpwDAX^>#t3f9fJ@G0*i5Ox%%%xZHbQghf9V2DJsClwK9K2s&NzEFn@aeQc zr<+~o3jlKFdISCAE0Jb4AywFjCXfqqC$p}e`>W0}XZgbvwqQM3D&9de%b$jn6vlL_ zFrn14Gbo;Z6~7K2_BzYoB&_J@M)Eo^bK13^tlX^%^6Tqn)?IB!3xB}{U5ijJD0xZ7 zff&MzTOH)2cob}TbhxU-H4*CUC=>r^47Z6KU|DguD1Mqw5sCX2*!{D*;@ z(e#~5U3h=}HI9G%^;dlHJtc6afKzoj$&e3`DNuHs^pZ~#c@Pck0=tf)7ZL+bH68TN znk8@d82tA9xJ*o>rx($rA+y5@klOV@@ulKHkL&K#!E)Qo1JbzM-j04%TTwnZ#_B@aTR;uvL>y;=Ie z6({NziKAcLDge`K?y5!iRc}B&+L(tVL#2N9kIn3sw2T4>$qA%|?K?E|Oq zRGFtc#TvGoh%sv@e?D)P`dH=>Q9U1ecbM_47vVIVV$9&hSi{CUi95v+s`c~xW2bqn z8d6@{B5L6<#D`K2)Dt*_XJghvuq~->>a557I+QM)Sm9h+tijG7o#Zy0J0H$ev-aSc zxLYBJ4$0DZwRg;Mm#hk7K#NI|)74e4g~D_(Jv3)eI@^6ZXDmb z@ws>IWjz?$+Ea%y57gMHom#N#-A{QBT<={T3$8;=Lf(USnUliI<7LHe-IX|LYE%v+ zx#bc`BG~fghaD{4{9$hZ8y};8m`T&;quircqoJ9YAEm;qb5LLu7cov;x5f>xllA5| zXkcOt6UK&IXX>rNj2A|OV}!{tMxQkgh%W6vl{LS)kB{j4$`3fd6#x9=qa*wwKmLi| zzQn)&@mK9Qm99yA#k-|>8UW{cLP2VE!Zo4nv$=GC=!9I)!V`VCjv&#t!fV1x3BsB3 zGVzMftcca~GhIqM!yO>&rm>GpPx{Q|Cc&jZ>|>$C$==E^(P1{@JoumsY|T*7&^?*; z>L8@5wS;Efa>HkfvKzjNa(X6N^t)O7)$yq(JVbgX(GLK+R)j(vqP+?cA9vc{c@-kX z7ZNEM4RabsOo2wF;O7WKO>~_J=4Wla2Q@rRsNOendiy!JQg?xqA*OywaB+Le#93Zj z2hydD$`a3@zcug7f%6bm`1f1utfCJf$if-o4?BSB*(dIj;9~>MrItFCSUsz+V$@?b zbyRL5u zsU{gxaHN{KWdIhMSed3XuNcb1D)Z3*<-Z}PGOYQ5+f-X6sVPKf(l{AkLdRZ09^GO{ zL&T-71N}yH8?+6I@$F7%msjV3-e+pvH1RQnJdI!a_mna`Xf&C^x{h-(;`%eij8_kG zx^XOx8KCZf6s8`>m%&>-K3(lAPMLpA-4fOah`h56 z%0&uf;s>sxY^d{vi_;GC_%LaTqatZJO27DNI$qpZ^E$|rW{HoF>F&9n&_L8p@ps(! zJq81pLljmCHzKRA!u-7bK~3Tr2_X;$IxM`#HekFc`%zhb4*gM<)sS{d@UpjT$_+s0 z+Z+BQ&9*n-JYRE)(=OUGMd7%V5Q`CU5AW)TK&_nf>Rs-VIRpAbK=XLRh-g=h?kyGf z-Dur-f9rnf=W*QtTi8>d^uL1bE=FSzCRp4HE~X$X@s|5r-JoB$J0(~=C9ks;kxx<~ zGMKjSeRQ2{V7b;p0Kg;(kUGrstZ*XVxttVE-OnCfhC&+R0%9xAANUS^hSbPafw|9U zN?q^{e6kg!wmz1M03G>iFlDe!3kno2Ci!QcDD2Q^yg^6c&00gsBR zDynOmy`d?0r0lH$?(GES^tn1gR8pEyMjN~)MaEbMeg!0I+ZMQe8S!F*nVKcTl#lgm zt2W31U|>*L%4-|LOG2g)Pf`hGeG8-wpyw^%iN1ca^lLm+Yl=Qw?K=eXvZMwNuRspO zjmf#z@ghK)s$rwv=HBvbOwaeMciM+*O$nSQn0P_ZE5+x>3Z&rJC(on>YH&VS5kt)& z2B@Uv8s?A~A|mv)?`)g6E|Ev-RlH3Nq)G}W%1G{5`a>J3Pj&SVAM(70g20!?WHDQL-iqXXl9#UIOj$4T_1DsA53c+|VH2@xAMY}r?lhdi#-jmE zpgE-iGTQSwUO(|9CHAjzqFFDx`W|{rsc21&hZ;PD{DNXojYtu53(}L79}}hhV+2+} zYC3A{Go?jEH(4~uB#67h`SV3VU5Qh?{(6=2>FLjt5HC;fPfx=^+#6Eww%nlnou{giYQ)*AerfXA{ao%#OEC!v zwhL&@qP=u&(HxX$ofxC*NK=r%B2z0rla`HMi`HBtFm$Oq9>gnfL=N@>sEm|2K>l;I z7m6|`^?7^3z2C@xqEkjsKUx$Ko1jcm+*iCrVkQF1s)bK|lc$nvER0i@tvYX-_T4n`+GJ3yx$9mg`VANVOpD*8pC9x~p}c^UE@}_V zqJF*b=2nMU^P&2k-PtfzNL0$!$2G?^46`OnlmKAjsjPyG)_i#xMz6g0YU%)7viN&v zsNub*{@J8MX=v1>a7lSeCtmm@W6=UMHT35vXnynil;P9;h7_m{l&F-^&#(I6Iub%( zaB`||WATcHTOH;B$24DDtOETL&kQ)L@+o2q zK3}B!K#%KpDHu`FlDM2iJV&g$?27bLnA!>|Fn`J#c%RbEwB+$8J#^icqptcIO;Uf@ zoC5EXQwKP0m-@j9oZtI6$<3P*Wlz1FoW9}Zj%1Hs=bp5vl}D1AFX9l)7ZK?vTX+rC z?!55Arb&sKH9u3IMhrVo>GZBQ6{Mz5Jeq;X-q3WCai(X3 zDPp1}t(dl!)(Lw+8-%>mnSu_jQ`Ggen3g*wB0D8@n4h=d&p5u%27KQeC4MC7th%Xd zRrK(ScY&rq!N6|1bI@2+N;#i55M>IQf937uRgtKu6$&5p}?FJM9@rE6OE+k!CTe9Chv@#?<=<#m|U{$hGK z_|VENm`%V{IeR3DiI!SytJ`z955I>$Z*L#!O?LN+1YoSu|j8oNQ0Ke}not3OZaAtfDJZz=c48b=G9Hf2Zu-GT4N zN1xFoJR`yC9x$1p`O>TP4XTKcp@Q@KW~Y2(xR3UAOd(!BBi#aRs5I!@;%fSU88mf( zGy5g33Fm9{M68WiUtR7Y_+8rdwTaeQ^5!QZpa;(Z$@uh0iLf22S7C@iuTBN$Chedp z2;AK5+lta`R~^Z6O5 zUBV|zhbwxi&XzFMykAu!i)w+1PWFMjqcxaf_grz9GxIBIB=H6a9cwKE(AhO{$cT3> zICp*0jex=hq7%b1k7yt7dap6{Rd^?UF{-hNf2jrPZUdz0^Pl?TuI?+OXP4@Xlp0~E z@ijjGjDsFHy_^?cCcftupk9U4{SsqjKMd;GQZ2;KjWC?g#Ta_g~#p;WJb1iy}Rv4al_Fat5Ll{TG6 z9bD=!xoFd&rwgga!2-q1h{$BqP~2uyqAB)to&+WZ77rz`fK(D^ZD((Fpr9$X;l&+u z6t~e7XQXZ!ZKA}PjgAizI}B&^PiLHHB}e;X73JshHibE2@*fyKXP?#Ew3~_0#g#vi z*?IImV_J}N%Yc*K6t0Q1w>r|#TaJ~7S$jA0*AC0^YJr+-~8O%9Zth_pX3??8VYfkf#xjQ9nW5kJopb)t7C1%G|3)6aLz@Z9M{ss>liA7Z_MB>CNI1<54)2NEj(&YV1iEX` zd6bnBkSL8J?Bm7o!1JUa+Km5U9p=woKgm$+&u|5&Scc|l(nUzL>^RShIh_0(ly_7Pn1 zf!Gy{P;7(pi(cmNvko)j9A1t&Yag^Hy-6bZb{%|tM$A?qHQv&N-vo4HztxZZpUaPD z?$-b>8|mW|j}o`2$zrlCKznFqxN#Z8p-5J3vnhV!U%4blbl7ajTNb z=?qm0zD>izfOrD)i)L;!9zQHidMlNZeL|4q1C^ScK_%&WhjtitpGsD|mk!B1?{0ON zUrV8>pSxg&kB^gNUR^&v`OeYJk5{RM^DNj9R)I9#r(F}!)8q8mCPgZb#@bB88gEnX znMloxw%DUu-Kr?(UeX~2%zD_%>0NHyASIdz5D7Ak4mh63)tuH?CYDZudJYt-N#LP! zY1z>Pv#mH@Yj>Wh3uxX}#4XBQ6Io=)BndZGF;*JNc280p^(9pr(5vbDP#$?6hLVn( zmQ6sT5j{UjI~KjnuaU=Z(Eq05F4g=bDLyt3d`di>p@bulQ;zedbSwAidDv<*yORAW z91O1$vvKcyjO{%OLlwV5UFKA(858-&9D(ZQP^7`0sazX<{J8KshWC6Zyg-T`F0|*i z04*!D!z#j~E~D!UPaROgS?VbBPBViNS7-SD#Q!Z*gy*I#*#z|n>D05s6t0hrIw@-G zAE$25sxcZN4k+HL2e`~F35j9jC!;&I>Q5qqd9oBNl_s5l`~Bu z<5U}*iTmqx@uNw>l~)mjxOzcN4yjNgz7KJqa?YXxDLtW$K+g~Yzj#0cWY(>a%3*r- z$e@W+wjHPF$KfQS_W%c!L1ZrwHKSk07D)MHPx+EW%v=FVC%=Ch)t{ME_$^^RBqlUX zNa-%^qGQs@xCW9hJwqBdb86LV0J_^xgpd13?9Rn9s z?TeMSOHR)Uk()GYK)=5amp-}qyYvN(_Y;cX(ai^~4huy%WvbLJrFL3?{&pWu0+yT& zy4L%;JPS@C6LIK4q?u+$m`PpfKxOvKD$ukKHyUXJbM`N@>P#~u=pY4GvJ%DOdw%2F zoPMkUT_XGK3z~lAADC{T8$U*%ApDD))Gfn8B~08-5Y}mcxp|53$%!2>t8^Q#f;y`& zoq9*&a}tANM)3>3NaW|zNF6B1RcQME50*MWbmKWm0mZdX?y6WP^6Lgo{SOXZIw&*> zTP}UzHg(kT*o1WYNHKq_#@APBeTe_qb%&N|5XPjGPG@_Bc@UAG4?QP%l}@LMLmg$@ zq4(_#zam(;y!0f9iXK9$Hx;R;0;eS=E!Tw8E_udKLQTp2QC(*G#3f2|O}^_bB(PQB zNV(e_U#1u~Wv2TxoYeU;^^8xQPL=ldN_lyf6F1QrF@jnhmvt|EJZdE}w>rp(@-^Gh zrfUe7=PDFkp=`1zX>U+vBwnSQs-{4SYFTb1sslaxq@{NoGJtw9bne7PKZ&8F&XGm) z*hmY|5I=re_6+c!67p4`$rlwp<^)66hmJk-oQYQYtoK$$xm3Z2k#EkkCj5HFG3Uh{ zRc(EUdu182FMy_nH&<{Ttv-|_F0(03Y{}4ShBw0F&%&SqDcsOzP>>>159ajgHoo4~ z8sp5Hh;tM=c=-HH(oFNsV&+o$6QrLLQc69o`U+?QtMB`#xA+al64#qlRhbJ|RSW@M zbV-mn5pD}O?*Ww`(FyQ(!yfpxw+H%dPfBBTdL(VB#~eyS!)2#wwn z74Lw+4C+|tFh%ytHR3ct<>Y8Y1ooWsq-KUJ*X4#bk|MN|L3tLuC02LrnsV$+kwH}p zP`*b4zeYp;UPW&}T{Y=caR_)x(c)gTjsxp5eQW%jFKJr+p-;ix0F{Y#t?A=ROIbm% z0`IxQgDSKwp{_iAb#bE}XZEf>Q^_$E5UevQX=5zQUxZFNkFj4_{pl!0Z)#~Xa$A@U zuT-uwBX;sg@2KMBbEMISK=uA1r2I2rHskU(oqO>iKHPPp*GwcqbFOR)elihmRhV-$ zI=@p%YKDG9_p2H)=6luS%hVMZ4aMpgF^O3hNRZF1O$7346xli8ct6pu{%k*SP zQxjZo4h;sp#$4bGBGnvPa8hz~aqjE=1#SAiWKn3M1WT2%W#M@pN2WSX6VChz^Ops0 z)=7UL0p&<_&4N5HzVlu)r}AbA{$ zaeHL(>&E=K#k*rL@$|(1-Xi^kgbuZpZ3xoqJ&&G7glMY82kzjRq9kIo-s>U8?}U-l zR#4O&0UI%llrbTX@5QWYOe-d>JqM5cCMcqGP!;MeqthvIDwpo0sx51mC-Kr<=FZD* z6KIM8bmoh*&ZAH_MWO!|=C3lomV$uP95QbT_sE7m_w5{X(ydhp1S^#I8qRc;LUu_2Mp5@ejhor+-?x2&R!&*szk7T(68pnf7E!v4UZ^)CEbt0{ss zI)=;g2xu@f$zKD|VYp9B{nO4YWBb#_JhKHlbrNBMO+pSQ@bo=L3YRJMy4Hc7ceWD` z*kjL;0ppYIeEfglnJ44cXMUbqK7rYAls3;%J*Fd`3NXHzUZKOl@C*be#m{?G-|9eP z^!Z1PKJL&z6Ea8yoE`eQYIb5Q!7lZPKY64SVa}7l7A&dJo-HWH^osZCtFm-}6a-q{ z?5KR->qp2411TJ0uDT>mEUifivKY~|;2dJe_NRE)#hP~fQs#aMJ<*6w6uBViUrxMd z(*j;J1O2`Y@x8>X$kP50*s|}kywy`ri~vR=lhZlB#+vD0lEj2UB?s{4)hlcVnojWXn_)%9iXCJwZ?af%MH8=0(}U!52y6w7vsw^Eku8 zIZTk#@$&jbue;pqR8>AHRAaIQp%V{4Imf(()I=9<4g2(gg>O-9!7K)(nr?)a+P$;~@A=GT%Jdu;~V*5zsv-H(fI zUeJ8lk^{9yXOX5>oV*t^j7cqe=+UJ4wjuFuDuPQ#CGkbJ{u6s$E+J;F)EI#ro#En`s zxEA#7A!K5jD$cLldwj-+-#%$?4-*H(4jI+;-q2k%R70u;MOTl;gCZAdUaE zEiezPNRK_R_x3U!esb_p|A@Df3?&_vc7+?FDd|+lN%_$Awp{>)6Xz&ighiWgEX)XeQ@W|F3#>y$NeQUj|QEi{63H|Uk;TXwLZ-} zh`ou1iI9l&gTRjNB#T2h)4US7`=JK(6O-W9xnk+JhyS#qy!+0lf(>q__@5&+$~S3| zeGoKuQ-%4(2E$Tk>pau)agYCKE%c@*ugr|fJ<$dl36?Z>BdnknGIl@li!`_?=Xkh1 z6Hxe0UX9am^}*+nVQ@wIrdWS1d!8KSKvkzRf6^Y%PiD~wbnvLn#dqDNh)Dt;+5bSt$!<;su?>4U9s`q90=+AOOib^-u zv-^}IwHOA^Z8}w;`}Zh6VAo=iOjnU^C(KMM0CwTSwL(xC8I!Ctr)z zftm^4q)WkF;8&?<%C_lw65Xx3@GB?Eb9_5z|56|tXzof-u~zzG`FU>^l=wO--JLG} zp}RM6rpn%r-P$>6I`>Iw075-b3|2=#At!~Fr$>PDC*O~EziuQ{jT6C;8lc8Z*@@zY z;?7Cp$X2^ZH;Z4a^zLhVdF_);Q_EvK{h)bRj#H6@@RC7J7%>S>mZ@w~xf|SP z3QD_l52N2HdZtN9Y`I8zFly5HMa`Hz!aMx92hLKWNk!YZiksB+pdMsv?>8njO;`s% z3{SM`gLV9>KPunJaE6sJCPKR*hECC&4uYp5JfCa;ah@P8#`C2=;wm9y&UBxbXD}wd zacQE5f+ju5CYUo&JC{VEI8Zm~C&@-?B5`$Z=oELkP3LT*w%n#^I21Et8secCqNpA&tzFGSc) z;OrdV9fTyMoc$`pW7JX%^+X3iykFck0Y|bek@{P0hyMJ0-#!NQasL?mh5Umz8SV5H z?bFnRd6UkAcSN8EhmY0n6hu%-|2pZet z4#igGosRKDxk<7^DUp=#XwlDXi5+Ug(-{2{P|aE>!rzPCIaIf3*;N#lYQ3Rh%Yc}< zXxj)(3qh%nELvT5+@q^Z-i}EdEb6jFCF_L{G=&ksjJ|j!$nDRq5K6oBfL0ft%H+|m z;!hv96g7$me+c-fmbbe5cltLhl}kFga!(4>aHW@->juyWik>mU$SVPpJFm#kPtsJnO8q=+QBO9cne z!?ET##WIyc4pm~wuWj7Zc*2B4;0u?mszVMRJmg;9c-~ld4~is`sY0F`RPAid`SA>^xHKZP*Zsi)u{NY zdS{}$VvcZzj<~=YuGasRPL5PK@#xwJc1C+^W!gcbdOM?>2vwPH_Yr3WD2Bk*W80SNe9ffksSKh3F+FR4}RG_kD z$2OHI9@3JfiDBHK#I0ovTl)C@97Ai78J1FIHzNH$MjB1{^zt_R8J>b2y^gCNA0woH zLY7EcU-+)LpoHC-!_5j)aQ-2e&?&a`yj458DQM!U8}zg*YG1OksRhzv&_zJMB?f#U z6id%DeLm^6Rbg&{riBml4_onpHjW)6PBA(Zz*A`gGiZ@JbBVX83X|asdw};0+SnfB zL7pq5h6tWLzzL58tVLIFjvDbk~=DK*Sor_@80oF=bT+@V-~)*@j9YdXQ!mD1np zI1f_1jA3U>uGB)DO45VD|&gkFOAg+dT%C?jA)6=hWCcT~h+<1XH5|Tys zB;NGFv6_x4NV9#QWv}4;`aUChOgkQIm=mHt zI|dzCX7}ag>P?@c=jew@sK^FPkuXP8FunyvvQpAg0{R?g^qAdPQ*t<($67s}dtFfx z3MHeI4&0{f^>p!}zOBM3VuP0rhn7<5N{Kq(Ul=zDT|J0*ES_8S=p~IX+ zi6E)Ee{F(2m&OI?>6DFIKokqlNC6ZCClbj@4JBGlFq?60;hV~%xakGjp}eIRY4%0p zf6Ywl4T>O2N34;4?;yRu%XjpTK4E6)eU$J*mTnVdq1C=Ga!d&_ONuFk$RHyQx3VkkC@~lA&sYm~fi_bn%Yg6$)kmJy zk-TLyh$*12BHf`SOf6?NXHWfg;x|f^llqxM$+277Hwu_aQ{_Q4;jE}I?-;Z`>Oeh4 zkmQcWjBZmf-O8YICMVci1`4dm>+b{o`n=hAc6vHMF{*#U&7WK2Ab06|NQtj9BxU24 zC}Slyl;Mb$5F$g$aFg=3Ej0}dRV}*sBxTGr@?T%RpJ>>g(s(}lqa7|fXZ8SYmeh)4D0IHK*gKLvwp9li8VhdZL*!M|mLBonBB)M8qzQjCyHT z4n8Nzr+^-QNfqWcmosNa<0k0s9?tsgHC1pG%`|I~WE^HUPX_LcN}468!`$Fx6y$?V z!c&*0ho&hf0j47K>a&SPqlyRAC5^r+%q>oQSvX+&?dWC00B%Y-!Jw|U$mRr|7F9){ zEU6~mg7oOA|M&<#RY}(|Xp?)7JhMxLHC{4S9m6T8l_gf4tay105}Aox*Xb^^xpwqN z{Nb5Q3PDjPwnx5tlu~`kLlH$Ihc7)#WKeml!{iqz>xG-S9}zFDQzT6URTvM3 z?*xL%j+Gmg<@W57?^K8RlO@oGqWh)j+t^IFHTh0RjX{am#mh9fVu$jHhcJ!e)o`9y zmvWH50$OJTnbWt?!vg`eV(ld*P&9OqX3s^S>l=UABlJGEXs&{x*BKK|J-knLko@K# zL43Q0GTu$z48-KV72=&fmrwlM?jGRZp?rUcl*oNe8`9|$4*3(WuKe_RqT}6Q?AmCy z@cdPh)2md2SrKqZwYvu`YEZ6sE=h{*;zU@74cdY;O*GOMeEX;GeWpwQ6XO!Aypor_ zrYwGi85c~Ea3&bTS)G$T6V7v(c#}5#gVS%~){Wnp>xw-Sb1E`<8WZB0my~tK6FNH4 z05w4Ux_NI(W{T5f^rvWNOZCLHaU8j3c$Xjvp%%4|^R@ zm4_*(Nx%hR(CXe>$KE9khK<; z7oca(FDK6Dt(?u8tW|3woAcTa-RsgiP(#^5RE1u5j1R;^ufU$?3WF{^ddZ-+3Fz24 zBp$Ym?v-Z3dZ>gF7%Zy!+>p^cd9Msf306^lamQ)k$$P@t51@PWR~@|E^b~y(Ok#QX zqpX1_0nMFSbdpg1tRqD?G-Yz{XwAnHdS8Ig<89M74-)M_RV>0r%R76a5@B+J?79?> zGy?v)RdZ!TS+{ws>TVwu?NKBF!CE|IOcl%MjeknDoGRkmcpv-|Wp;~EH~!}XL=iMU z2z6!&1^FU&=13iScu=%&0Xjq47?|8Fze$$1(88p7Cr>0hm=9hI>TcHZdw?iu&+k<1 zfZNmSpFgk9@s@vILOguYl@8dcw_tB5FVWXX8X}6Gs$@=zj!uf7uK|BUn!M#)?e5E* zeZtG&*BkUyp>r-ZID%U zM#GbYEDoD%Hl|3Bl8`9H%@v^O7Oj+SFSnFTozFx-9>|emOV5xxt>`^%0eX&+`1T&D zHc<-7Vyrpt0>@n`qgEaYsa#iq#+N^^T#1y!(8;v?L!htYs4jXabB8v@axB_QSo2FF zQJo%9LlZe1=GQ*VuT^@7rke52FZ(o*?<#!19vxk^zJ-;GIu}V?nslR{a$d;eY^o02 zD=LZ3oEx^9I~hi~rr@aOOQ*p-J4iq(WJfbZ?myvt=<8@58ee|cE)35%% zT6Tb_q@-CVuOQXQ^7)2O;u`E!l^gUZOP-RCK31 zmWbjErA~%hK2PTu%Ql$erb=$=`@3DI_L>OD9TAlF23-c48`G^LC}A(cbVsh~r8Vaq zTS%7$qRr+PRDslFCX)+D0|^VIVq-b%ayh}nYj`fP*;st(I%ZkF4)v9|)#1*URL?87 zr~qR z$CIXoNu5~aW@;wIe1jc-#RJrN)J5aZqEoEJU~@e+93`aA9OiJH$3GnBCMZ$)ayo?> zBYSe^;>muQaZSwz<1Q~$ShexrFrSbNv=gZ98$31}%F|1!&@auY4%f1r4VpR*B->Hvt`J!J|*M-1dJDFU3oGH4B}p;_<#mYZ(Sbd2N&f zMM;M!o|_EHuT71=aYaeuqnFR|hl5u4^V%rn&w7vk4a+8);_|yW^<N1boF*HGnUttFh1*vTnUs$nEQgqt#d?=nXvMg;8x&b^7Q zokBBqyptp!XD(={9p!IZadwC|UgAoZ3>FJB_0_q+nSLuMat%(@QZjev=Rb(#Zrme8Om{O+!x=MRwnlE0a zsh=3NGSzDh)#Cyv?}>rHB;u#Kg?F#hX%h?7`W|IdM!t-KJ+6LhEGLN|-&r7ATHOaX z@|ngxuX&zqe5h1LcI+)!Y*b-S9^ezRs%gTxXU{n^LGIrwt1DYuVl++Uc#Xz)QCKvn z`MuAKU@b^psy8o3DqR5__zG#$7A00y5#K0EM)3E^uihsgZVeZ}AwTuB?D463bN~;M zLkf34zg0bBv+yAo@gKvv{#@Uo7z>SW8U6|JK(X8oNVF%Mx}%hC(jckbr`UoaZ^n&L zch|j%4MHbMRbjzZY6>Tx#r0ZW_u&>6;tv+t@uljZdn7qW-P!0Hr9Ic1*V&AehWlvKn2P2{}w(oRb2(+4lp4$1OdRl`C`L;Rh&`)1$ z;yBfWUJ~&_;1t09+3_S9$Ek^}uxrD)UFZtV28*V2o{8p+K@&=kK{BLv5uHj;J+&7A z=;sO0Xi=1w`lmEBQruGK%vHPmMU4CtGmVtdLofdF(gUZNUwWTCrq^B`w3qqQPQ8IT#Aha4bbu#{Kf)D!P(gH7Xqjq!fi`OLq(nkJh^ zTBXe%R8es%DCuYJ{HA^SI;9?_leE4`ukO<+0VTnuOiWdLpK_je2R$F~>Qz^NeL;~J ziJ$1ehF%ZxpVdBX7`(>37|jPmIiYa#ICr{E-1*^FhxvWWH$1|-qwbAM-4IJxDf~Qb zF(|y8CZD=rlQnI+?zbp^wkUU)o~M&!5(V(-RO2x(Eh={;Ii)3U(e_1iNtf>X7IUsX z^T8K!=c4GiCQdg^gKYsBy^y@8APal4-Pzqz7_x@>y@9#g@>Fy_ukE?wQt~H^Uywfy z;H37JbwI>7${QZjci~ny==UvEZQ=)l0Tsk zzYKEf4unRe?}I_REk7Ol<^@kAcO=1AG15MST-~C6CbOOaYtlFisS>A=_X;eN9JiaD z4@ZnJssEx1vOrmcYd(fS^b5VJ8r3t&Wx5lL&64_W7SD~7;A^3BlUN(tejf8a+j;Aw zT+b+Y)VIJ$(sAh%<1LSZLP{gnk>X7Z=x3yB+s%u90=4P!w)EP>HwTR(wiv1`2>XN2 z3c*#NpEqyqAp3W!YUb+p+9$q@l+trV@PQUF?ThEeFPT{fl0gvWRAFwzpf$+oF+BKs zgOtL8y^)Q6at3^)xksL$n3xCmLf?!K`xGza7}iPd245(3SxT__Sde%z z&Sn!*6-Lu>Pi)=lc7XC{LK%IGGojVJBh(@$L0Ke`o9dx<<#EN&IP;T8-~H6z#Pe6% zaHYT?kN)>#bh7}^(}HFUr@IYSYEV-3mpup4_@!$*J~dtZlZ_t)bJO$5a6ZSgHIyf6 zh0`8%>lpE@1~`*iN@Uug@(WILy?9}91I`yBegNB54P(7Mp}*{f?OHF$WCDPi62aslR}h5@qX1v2llVq|_}?cZ?n@2>%a&x-_EK0`zclbUdn+w~Y|l)K_RajFQf01O1Tf z6-G2AZdH(#N&J17_0fk(AQPgFI_^Kl2xhyE+cVSCw*ejK6)RN~rq5pER-=|Y68fm< zU^I)_Q?TSN*^}7dDk!U0B9xIYFFVyq66=bJPq7Ou$zyTzEDJx;!SL^EbO(#*Cn*>M*1yWCZnb|B8)Eg~8udjQx>_k1!lK8c>?0UzK z5$}c|8dYx z)@0^85*w`J+*2H!Zl^>BIQ;^Hs_Rg;Np^6`x~RAXzz2srKoxgC3u=95r&ib+@LN7a zd!;h+hPUJa*aU$44j35ee5pKMiw)=S+ypmJlpZL7YhxG zRyMDF!`W(C{L8*6KUU;RLqiF3Pg5ukyeTkB-?aor0OIpgKM%e7(LmPaIsLu}j1ED} z@i_js=egSiq`_pjDc3isfdnVWA#uOrcW+2lzr9UEw{0?H5pHn*rC4fr&si}qr`YKc8MEVkQD`muEnqePm_ouTnFWmRxeG?+J5E-BU> z^z=V^pe8?X*r88uN#IffLPPUjb{2(n4wP3?gS=%H@(Rwc6ISBB|1eK@1XeyuQ%_+$ zPtZV%7eIhSj^S@VZz?1P$oK}dKn>BcOCR|mT`qI{^E7_EM7QrB{qfH~tMk-4f$8a? zG7vy^M<%5^UpC=9yGv=$_LqsC=cWW`a|TOQo5iAB)j^v%dtU>ZRM7s(Y$fEd$W0>u z@^K<+0LUTrK9D>+vnbafpqD?jzE)s9l5nV>CVKACs3(c}4byK_sGb{<(qMM z{n${Hw!Zh^1VApAJEvTI00mFQ*|sb^2xg-}YB)|5vCW=f% z!iKskhTmlk}_-!E~cW&~9YI<7!hp2rzn*Btq9=%M(0}PHd z-B0K$y#RGas8_esqlBYqdXHa8n2E*fs_@(Aa#0QE*KLindgL3r1*Yf{gFp_QA`B<@ zhMh~JKy{e#hMjVwq**1FstLz9n|KGQW~@TW)o8AAW>t}|B|?gDtKkIH?(hE1iDBpi zY6(N`Un@N1%eN?XP0}Um!H!x2E%2aQUJ1q8w#-gDvRMQ4AWO-~nTT>LuBuUjAfUV0Z>F4A^B zWN$#~h4*QBLzA3Lu6zh}%iJy%l+^RRq?O86p>m9Ih}X^Ke#RKpanEY}wCU7%E5gH

ZoyT4hP62x zqz@)CbaXUS6ggefhO?q6aXp=!N(lm9snc=wH7g{QI4zAy)rl_8s2!O5fuLIXJc4D(90<1sVBJ4H4pZjS1f0uxvNio1d62YDoDS;;Yx}pC;efU`v{1YL{MoC4Y$_v`iw5Zr-hxO z2K0RC{T67O=g68Jb8*@@ma0TY)?Rh#c7!Q6Khi?0tUVi2?E20zB*k+jQh2^3L z9}KqQC`c)3fl4o z^o&83=2^9iOEhS2vVwVi0}!`(@NvbT#-q&1gH;FU2gXOVi+}Q0)bdvp3Q|;aXxOI* zr~f{cP5OHb+(G{RAXNg^g_YtrlTLlJB6*mWc0N1KCOHO@MsJLO4Z)M!jRCmzMLXwl) zls%`OIGd@EQ^9#+(;<7%8%DpTN~0kLvKZhI-4FMkIT^A6-AXEu)PR28enH_h%rb`K zj^y3tv>ut%kv_OHGHz8_BApBOI+#=;X+gR}ud@DJP3$2Mm6%Y4_-24WJiqhZdhJaU z&e~xbuM1kw2`Hp=Rp>);ns~sR=#Y^nufQaiPltI#$?w>9)7aGDKBdu53@2%^^7ueC ztLK&PQaQYa5=Fdcx;{_lDL0h3_0vSXVwOgJz3QbYVVe0UiKGqR0&@^kmqy;Gi)e7z zhgnaRWS9!<=U{~LT>*5y@O6+mMcx3^Q>`8W$go41_sB__)PsbE;Hv4tCcE6Cj`xb$ z?v`V`3d}v9WP0-PhC*%k^7Ld*k;dZ=8YsvI6}`dW?)Cf)r8bxf&hzZ}!O}NX#%O*? zxVTH>Ev5OxWHuIe+KD;syvvmlH`#F%gUmh7S(h#1dUTWpgRU}WPTz5JYHHT0gZxQ}2v3O!F$K!;pmzxOM)B0$*YyV5G&if^ z;X81;;8bz#lM-q4_`rhQf^-<{%zcILgU+AtF+s5=}b z(Rj}z70FD?D>+(_s%;C-%V)nKN1kpeOAW#?bi(#ryyt=elC;Crl-E7o0Ssxsq#nWlw?AZICw0u_=WKa459c1Cvtdl;-BI06la~ zFVBOLSfmFVdT{aX?-4YiIv9z4G^U=f-e^vq_#sP=zEZgqM5NZXPJt z1ayY;>&Twhl~*ZpLKlRfSTqD~(IRN}lMr9~W$Jbsc6Qm48phQ#M=h#&7HvMvo*br- z`N403nZP{tFB_Qq3*Vp{N8Qe7+tDaFF=KjGWA-X(!cQQ-4?)Irg!=N(jrY4C^SQWD zhxDy*`#2jWY~o3BB*2JNghTSIZCa;y+Ogz#f67d z{c@5Dq!^{fNoqs-I{wnzeF-o9+AIFoCP6F;%vUHPVlN9n0Q*O4TXR{Uz> z9c4BNAT$82H)=gH^F2AE7^R1HT*v2d3Y&H|w?j186qV%33q9z~zB)dT)*gk>_|SXZ z>mmUaiUgFQ=BKJb8?xiuoL&>r7?s7M#|-yA7?vajPFLJd@u_bCst%M+hS`f=0hNvK zr;k2KN4;;V7*Gz}%}Y$Z@>U1>bJG*1*8=6p9)d>*Nsw(0eMHi0o-GN?&-2mD`TeYb zECg3~M+S$jMOzxmU{Oa(@KU?z7;1LxJ@-g#F4|X-Zno(2f-&D)E1b6FEYUay6bM}O z^Mm6qiC?>T=!AIy=+0+l(0Xg`lz_q@HF}9<=hqg^87Pp^WX<~8+M^n^@l5s#PM42= zCc_n^ylN0OGi7kcIgpK*oxLjDWLdL3OFOV1YA~_HF6@Yv1jWw8qrM(_AO_s@25$J zgSM^fQ-hOyT<9gL5PG>%UB~mJXg~n=lKuoc?86%({t)8hckxP{r*hCz zY++o>EoxYIArWCCqgw@mM{=28)`IUfsG4m+Z6+ zNI?lx23wQno$Im+UfU*UDfD5RY-S2uQUMlaDb+c87c|QSIL?x6G;wN%TLa*P_Kl<4 zjF&z#6``|=gBC7Hb318X<$`n%HWZezwT_E70h=-W%38Q2_POX!oHRXR$5W zANxg=w%Ta`QNG8_J4pSRLHXrMl;gzvTEmII=yDxG5_y|wPToe*&&q^Hk#=jj7hAPg z&}SD;@$JfEL!+mIRmB{wE1yA$Em_`jRi=E9qXVvXAHY;8i*3LP6(PD`6l&FNd*;66 z@2@AUsddUzGRQ&jJ}@_nGwTH+tTVTUEl|H#*XpvBwa<~O>rn$xpf2O<&e`gW$!Yb5 zjhdtEdCpAkl&CHTFO#T)piwh}#wi|WC9LUS1&AX^(*hO$2ghbzV1s$@?eYlx+}9nQ zSf@PZH@SKFD`2w{a?3RUqPpRpxsLY9S{`Wb^#}@di1#blCD0NC=iqYaBP&2B*VekLFMN>OwU-kS zWW(B{Uv|i)^tbWFE~S=(q)=Uago*(mfJ9LhU%0M#0o4be2h5w0?p{#GHf>4^(11DA z&pj?x$D+c_%w?xoi)1S6r$65Q7=Q~HiK zsyG2e>|Up7IC9g|-<-IVRI;#Lbg$B6#1<%G72$Og&{;%~z8OCB$1vpI*bm{{+vb95 z=$fT+x{Nozj$u_-9D3eHL0m#f#-#!?5ghtxH#_pQ%E|TA;Pz9K7ZIt027%3T0Om~j zZ)`Wy{(b`BXPQ3QhuPozzwb}u{qOjNQ^Dwn=T@lXcL8Dq_En^dLs&MywDgvFr{P{V%Li0tM zCOq~Z(212^9@6q?jKvw(^?}Lv6hMug7@v2LeisHMm&EpVeCk={|E&bPU-qA_CbjLJ znnpK0I^{cbcP}d+x5_M?51kN68UYs0YO%SEX>N2Oz&n#1|PYTG^nVpEc>e?Daj?;HPPRPeC__HP4|M!2CQa zR8g>hjx%1PPvg_e=-+a-&qIEGjdyiD**byPBqtle#($LOKzUZe`5Z)7?1?bXx$t2W zY5EKwJ@ZGG?=DSAuc-YV;QZt!{Wbp9 zS*)ushPID@$_9z=G7%=Z_f?#AvhU3pblY^XN75AZ`GG{eW`k<}GI=>`yH{ZT+`3;M z>KDmJe~j6T9$cIXMzwnewR<=I)^~#TNJsSPK`^IT7jJzUIjWnpE+zbkJyR7Gt?|7! zBnGb-P|1PHOv+S&i3!sI6`r1AjRBj#8 ziRfPtF?i@PSi0;|UPCuBJ)w1*{@kWa&d@x@(WpJ=lbSHvJw(SAU-QLRnKrBj^MNu{ zB@)RANZAKs3S}dPPV-kO5Z$u4)d2pGk7swMi`)^$iVQ)H<`vbUl?9;$??owa`Y_#0 zb)5b98gWhxvAd7{BSaDsNI}kocgflVgIY6<#MFVhQOCb7F!Hof+2T#o5JiLb43Cq| z`mQJbs0zwYByvn)#`-f~CtF4u4~0A-dkZ1)j-?%pD4$MT^>vhw4C^+L1WvLZ7=T9R zsVg;_3%HbbA~&xAZ_e9<<{7hAN=r?GQ%)n9$J#p`Cyv8FFJ_IZFl%M!p?}@P%XOO2 ziF;ETWW{~&8PWQLQ_qDlsZw|6IndiAiFQ1AusZlHvS?lqF^i$(C=SyClTW~UktwdK z=1lhN)9Mqm*<57q4}dlf>JuNEKv!3Moq{ZoE~zJ?5$U>Sr1|Lg!*)ty$E5YKavz9b z-}k|wM~0y^H!o(CdKx#WflSH!A*GlPV!V5aGMq&rYI>O<_|kiHb=!_#qvq!3Xvvaz zylaN3h?XPd;X=o|(Bei|!4#?iC+Q7=*(zA*3-aU668AxbB&kt_+0LtWhiPhSpgxG@>rjE!4RfZxd_?E$^U87FPmr#`5*-)xa056ay;UV#KQrFY=qA`ie(ILB zPcP4Eu!FTj_-&lDK}P@Hg+c!bL$HGhYs=={sWzXc4oC(q8<0VF@HrHY9>R|u#@eigo)5PX7v^nG4 z^-s1qEeT<3jPE*@%#F9!OtT+UNb-GEoH>oJPILKdpu3J~0d%4-r(RC1ebHwGsB_*~ z+RP+VhsxG?hfZK*jTaC*OuQ8*;4;F;HE%ABKCp2v>M_{nYINlhFaRL>#QSF1m|R zI6BiU;L_ejJ9W}mtHO=Dp>(MBDv;~VyPKWZu`l`#du>U&j$H@=G~5hs&^a;Lg0}pu zgTVWC@9tN1H)zRgrE-2WwJ*?uR+OOy`BadPpq)Q%0&dr6P4!|Rxh>?+b#G(XB8nWk zBi)S%G@>Qnz!EP?yvOQj>228Q;yJx?t6O1WoghIt%+H7tZnQ6hYkX!Mslok;a2+Jf zrl3{v3{VQey3Mt_ZkaHLn?a)LV_n?CmTg^_S8=>(oIq-|#kvQ3VY+jX-dJ0Aw`F>p zuY~$a{C86+`Cn`XY!0AxX)}l^=;Clccj4L(=N7WgrACs}nuOP?=lwA!HkywRGwH`w#-ZQTsAZ``u- zw(1GtQ6waL;%)#n010?31~%vm5nY5V1sT{l8V{>k7abQU5(Q45H|Y3tNc_%0dH>|r zuf_RxnDZVoKw2)IIo?<6h=dppy3~tLHj&evA!YSfcg9J3{VAUKKB0vO8X&`pTh7C_ zj^S1LsI|b&35Bv>aj$o=(YA~nf@Z=X@4$PmB3c(1+TbKT6c=o}g-J>YVcfaKb_)sX zcUa?I=v42c*8r^q_7Hn8<}YXskx~nN9qz~2bF)70+EzCO>}h-^Kam$=)X6 zYXMzhwq?V@^KD3p1T9Uc)=Wr2n+z)^qI{EAUU6QNNBmq%Nl>sbAWtv5eWX_Se6U)O z?)0kv+iPG6eiahS@gDH3aR5-wy!x7|GfhZ0Cu$lEP7*r9gZVGaiOU#9s<;gd2O1r* zS_L+NgaN#Lz_X^tKy0<$tp)9|57SQ;UiY@iRmOgu2VaE8 zD6@oji)TJKQu4hiW4A#4JcK%J&JhYP=O=5`M=&Lp%gaj4?QKb58jXX+5VPl1Pn;`E zTQ%79elNCXkK8@JHz~z*-{5R4EkHLT{{MJtYIU4UouE#or2uv?DO#b@5)XNN5&pJF z!veOq(cK#KejnZ$)c>Y!szd}SsQa1&<$W&J-;yS7^-$gJd#hb?mGAQ|95oEilXk+O z{kC_U&w!Ja1``s`UiIJ?@yo#zaGlI(Au%)5dF>20C$H4$T&b%AZE1P1kJ0EOlC=R2 ztHMOk25X)O!~nYzO;~?^HUps(aY(+U^4I9VUy)5J;w^=Yax|~BEZ*YVz(S8mcBX9~ z^c~K+&Ub&k@1<_siGK&pIR+!Fhd4uGh-kv8i9r2*x~axRANv4ji&h%74aVh%IA+l} z$T@3mH)(e_>{c&MJMngKw#)_5uub#;(R^=soQ>Z0#rJb*-RI}&^BCvzYxJVWyGSA* z{mfu-h;!ns&DW{ywlCB&A|U&KVLQb-p14JW6X`nrA2|N*0a9fm1Tlm&MylTPJWGMo znlv7A0Vlgnld2!F7?AkSr8dlE5HLE@60eiz*FK-GL!JUE=qr$)+xzLZzU`j|qF0!I zYmOX~QXaE-n*tG3$2U}Wgp{G=4dO-;w@Sk$x~ap!iF#sJ)6l!ky2~ zI;YgNaw7kzU-f9rFm3VEm0@a(SrDa$3+NMPS(E~(@OcQZ1t{H?6Q$z7FZqN&JV2&E zBFOQuOX|cEjI`2m2H1Sdr>?Q%3yHclZvN>{DzDtR`p}6*ZRt15y)o4(s~R0=7k8=9 zynGzg(l%y^rX*UN8}xG*>1W*B5uqDjF%k9@&rNQ2;uq8Y1$uIl$jgI>TQsOCO7hX$ z_wz}LR}^Y7HBThDdAVWGFZl-={u3w(d>{q5@|x>@2u@Pkp~_(No2|R%CrPFa+5&S( zje^5k3i0?PHPPsxxS~Wyl!cnkj{kSJ};R?#{TWVsokn{+2pltjuiQ?vu*gxzw3T+Vk_dbx?+`R6-D_$g#(z!K| zbdG#$Mz47mWL80jJKq_w(u+0HoPMIXLnfp<&Id<|Uw_@yYu~@Rak%#(r5&Od`qD?A z>~-jKzMQhBrx&T%n^Z;{101}#2?X*bj9bxnf?GFC3XWCCi0qG*J$9{IBHft>%Qav} z10tTTewHmSpyF7;fjZp=UkRy9+d!td#nI6=jX%+!zg}_u?~m1<=80{iSd4 zNT+(FNAo2Tdur(nDv&0Fc5Oi6-(^ABF@K%J#)rW|)$8hr-Hxt2vnYR};+CKWg_g4) z4>zmlHHPV=-{HgG0d|<+Mg|j8ZLjhV_ z5GKWk-yXrFi&Xv_nEl7cfaWFVAE0?j`Eew2;*Bp7i~a(X2lnW458bVfv+kL0^SO1; zG>f-N6>q5yawO^qC?b-Xp7vh=9dLQAGNWx1Z0Ng&ECDik5RvzLIIYg(^esR`;J9`_ zmt51O+T=SlEFz!7?$N-CO(0T0Yfl~JB9Eqvdx>?54_ly3UsVN)SkgM0sY@NOdwJK2eG9& zU}=_U)N}S((RFAxakrMG&v;gu+pH%)TC3OIQyZtNBi9)Uj`4Z&VIOGlepaMt!+C1b z%hixcx6>tAamj@7yx<-_=_cUytl~_fW75vd`NhW-ZK=)k-{2xgJ0AutA&|y=5~0@S z>~2+zyOZ?)tbcKt?_uI1_XcDif_e|<%P9fPQJ$LS!RknfK@Ys%-qPjd^YK|L{0uvo z8!oBbo=g&X0#i(G-?s5gndwYDVBB%-rmoIZ^ZR75{;pS=KlsHaApUXnD9-ug(*1um zbCSd+4M}##qc5#wM@nxleRpfv0k<52jJ@Y|hLg?O;y|YYW57^7sL~z3^f}VtyEJFj z1a$8+14hTeW0w@=%KCr{HE<6~@Q?(pr_gh&AE}1d=}{JE0iV=quu%nm{OxA#!>!@$ z-!P<3d7PPQ)Xraa*S&8Qs?2d$9I$W6JX7M3ZJJj+{aK+3e5t zsNYU;M4qJ{B+unLY)xpMduB|9zUO=^S&Eo^6V3tT8J2)0eF3)_tX**w?4Bc)D|fy) zNS!1ZFJU`wQd1^L(zIsU$a>u!sq zB(jHJH|K)0-}|=TShJ2Zr<*OjCS&2~7dw|Lgny?AV)S5-!a;U=pqvA@Shuoo$-frTwjn zGfxmu_JL&FT5NjuehN;C3zlI6(yX{CSY1SkTl_JfeNcY|(iyA(jZb}%BpHZ6DINQe zI^IKA3pVXz%{w(L0aN1ebWrh9+`m^c2FtTI>T@7cM>^y=p>ZTa+*H8n#*rEzN9{K6 zs5tYQX9}HEW7HZ7p4^~JT$q%xg1gm0Rwc$#3hJuY44j%q$PBVOPB5H_-zi`EfhhVL zU>><8ZanaQ@s(>LBXZ=-B5f`yemg3hLFv5P?8EO*NR)!58VR z5A>%FVGPy^8}GR=<3t*}cJSxcVbhb?Vf=%!A$v~WYJHcwU1@Ci6eFrP_wjEB=N_KE zyX%@UZAtBB53|myHxVe6ngqW{H5^4b*q+o4ZGyslWMObq00#npH|R$-M>^N^0AXA(}rx+I2x0Lq8*yXfGrV=l>AM|0IzA`OnUwy7hli z8RsvY8`J;wSO4Z*-z(+4w~CUnYnlU7&WfH92Vm*JGq2fs;(We&>^Ib!Cs`2` za1CM;t}X$nh)c5Pr)(m*AXKMNe{Rpu&rdHeFZbWiFVEBG{`}|pclq3PRGDc>RSWgsoBV{E6?_$cjOTEtF0iL#IM$B=*+t8wt_bLE0O#)Aa&k{kXTMO zA5VX;8xQJ4{**zDP8Gsv^zfO*r;3iWHO!}KSp1uR_M`cGbR>2(5E-p|9p}bK(0rCY zm2FveXa}NSFFH5Ts)1#DY;jYmM3LPB^d9DPR2CPi?azA0-ZF_Bz3Bjp@`pb|O+iXf zi6p)0K^Bhs8@4kNk3_f)Pn_cVgudi>y{e^GKD#Wkokzi`Ux$(Dq z>DBN4N%p_H3^B-q|M}?7E&uy7u||f_vYK>61d?I7ha~k5lT@Ik6P_Sg-4Y;8Q%n}j zV73EG1&fd@kC4K|d0xYaFfMy*vw-2Bas9d4ESg%HHT8|5gCM@6AOoR@A&O#S5YU)D_4Pj-l&2=H~8RE5Bq&c^VKd88PG;DrtNmL zcxvMF?K=l2WloD($4!bxah+Pn&T(!hnL;jtLHb~zSa}_3Ha*@cDFQBWkNnLF>EdRn z)Oy{BbiNViNEio955Lk=^mcjiCq4xj6@4zYz!}$QisGX+r*voqXZ-c9R@CMVg0lIA z#Aq=jX3(6YHEBb#2hwrBXkrCy+yup(GPI6Lz*n2HCi-g(i^1n8wt(lGRhg_}S+(q@ zt$oTlE<(%e^IvZq%`y^*;^U2~JnzW@P&WgOk0s_;TYxThOLuFpNmatc6+`xB(06@x zug+Jh>7aJvwJHqimNKa6Zj)YhD^5fkykv*Qr!<5mFYeIE*_4Pe0=n>v9m;#KgG{tf z=Q!!>4P(E<=twl`H+EPfDzQ<0ZW^yx6{!ySkteK3Ga~(!WF+XD z%QII~l8I#4qBF%)cL`{6Q0PRZ9Ag#e7hR}uO?&@jj2U0fQuvR=@L(p47eDmC4UG;g zo7NZisu7v;t%~@BMvtT!$M@lV{{g6`8zjj``Dka56)zjXi{*T|#IGW5O}4dncaL%L zJav7Kf5D#)6Twp0WO3^gL(`-K%t}ffj>Ucn>$DeK$~U%Pr4m`ZVD5jON6kX1RqkPT zFSNSX7;}pE0a$B0KAw??fpU_RE(K`YwqcGDmbG^qZMx|+I?wA=vt?=O!S#?B>0(f5 zH0wU_l5bzoK*qPBWlJ2wo8}DM`fX^^VUG7LoS1l#X%@A5#S>*dMXfD%#sBMqZ}tz= z0(yABEuhX~PgF~2=P2l_J*O*-7IoCN+XD6QLRdENL!1#JHJM6ic4@=9^jAm)^&0+r zq&u6mtwVxricV-Wn<~kG#>ZBcKp`erzX$dX5;lPxrNyH=4A&y;+_3FvkOW;^;QMCh zzewY|tj@Uy@`oM#iD!KcwNz}`$2k?9TQ%+H6BStM8T$59ne6n6!uPAx^T3lA2Vk3Y zZi$0MBA#?IK6QLfBfe5BXw_NDpaJTRQRh!8o2)~Z7GAI<(&#`|2=Pm|Lb|$5yEddR zV6-WC;9VGBOb9Pye5E7Wl>nM;k!OvI?y2i2o-ElN;&dXXf-YG!(7-EIN-TBus2-%S z_Q8$=4L?9g1<4T4)ME;)$t%QvcQe*y&DX<@+kIO1w5L89Yl%`_d)62kn9CB4DsL&Z zS_S$;j6nxGl}~R(Uuiv)UwQrKj#CNgTN*FoyFl}JE5aw~(+0FR4lNB8j3 zR-M;$vZD9u1Wo3bnLy5K<>bs)dcm$CH*!~ZLEWS&%@RChgFtS>ZCYdkJ!q9lT;Uw$ z&&H$$5vYj2F#dAQB6S^t84ig7d|`^R1yV;GaWn(fh_s(%R(9KY9?7jHxhqLsr-lj2 z`cS;8sFEslpVe@F-cp6i4HKFAxb;;ZqlH95prcV|7uY5ZoGuJ4o~e9I!tWLP-kIT{Lr=G-2E(%*4)S2UjEyKDHOw*%B1PL|I|OXzv`c| zOgaUkXdscKxyEkEz?s#O^NI0+y0H$2nQgLE{(zr3y1b8&*Jz}tJXDq9jR~b6wi8)c zhh{@!F=>Dt9WCXYoqI_7zU(Pc4>XiaXNKloJbdPkBUK!!&W>o^wzv2Mzw~oknOGTF zZqH1Gb7M|UD&H%G>B0F53Z3TOvdfJcE$i<=N_s}8xq(?97EYaym}u^z`E?(J;0D#) zpi^IQ9qUcHK>{iXfDOfcx!+CRFxEU3PQC0y^hO1n8x5QZEZ(IlsBf{U@g_f!jV5i* zOQQV+&3YvJB^gxK{pN@VQX2G2RFHmu{d~u8xqpI}{5)=Cp7bf`vai@2SQi&pKtCBW zXk2G6bVUW-CkE}Rb!SPnvmEL=wbK&dk#na>+#$NpiW!$XB5E4dsGIio;Xj7w5A*Rc z3=^65K-cYy(w1yGkLAgjl|NRfJuZ%Ex!eskm- zfKFFGO49I_FwD$WzMu@4n2f4Ow~4YDsUM`L8AyNi*(ahcB=lqq06dA7&PSdzuDHZw zMEncqD8Gp59df1oemZyQFEB0{)oZ*_LP>5?!`#1kn&Rr~7O4Nh#jw9uhjH=${P>s9 zNA90EW!}+fd`4W4gT)GdrFD(SJo+ux?HR&-QNl-vO_K8$sOsx^1|r0Z&CU~=A|5mx ztr|{NJe#~KSko@Q>bs}0J589DujwS~geyRy$p@DKo6QaJzeO;dmNF&#Fu%Tje!j?@ zpET@D<(z^32%||4Kzy<9_c1*G(!;YUaf*ynC!G2~yI2zC8uELXE8W%^r3?N zl?e5Cfc?_l7i8i3#s5Sq--NVsp2C)S>n!pUlSd_~%?AopCT>%9MM=3Z2slh;VlJl& zlUnutT8VlcuC};-azh0hLHg+L`z~%%{*sntQ9%-~b{%Mq#BPVQwjn=3LNAg`DpAc7 z?Bq*|{P>eE{|(S#TKHCzZi$sOnN%tW|liV`Sm>J2WnN;LpI+?~sry4cj4QzsC7 z&;flhp7rqnsF?$O8!{n715h*^IYZSEKzrSRygE$vJAYz?q!uYOAF*y(GUpY@(LO}RJq8=&M2!7Qg?TmFuQ zg&fcsB46unEjU$#XA;W&+~n0)bZ(1?4=6N00?+fRqS%DGxN^5DO3)gGaZp%&cbMaQ zXg~&6emwHlf!9ozNN1)n=Q5>w3sSHfs9YLLP&amcsGAc6;Fur>T~xd*mrkRgL~-ZK zEJ#&D8W(>Xh&WPvNxxT*QSl_bG)d{`o*$-&nH{F7zEg$yd7IzLq2S`-8{zU{A`c3a zCSX&KE;Q?i2{BHd#|%@J4|V%0&iT$~Ju$2=(nsTlU%PkyiNsHqQ9$pOwxr|97GAHD ze4W2lVSewpq(foOVYrx$%>4y|`p#`UQ=AhtZ~~_2JelM@)j-ynb%(7gX4|2cxJ9+a zs#Ao=pz`vA5FxW0)R6wL2D1SSH|nm^0SZs!d;jj;_`c3XwnBwwZ&JuqMTuAWbv!~^ z=ryEO)wFHev_+pFjhTUaO+yvi@e+h$(P(<_(H30=`gzkq2Y$#cKmN~q=f0&E!Vy)N zNkUXk@$Zv_*K1>D&$-ntcrNq`lQHq=3;NzVKPYhpr-EDR$bkl0~ z{JtgAZC$7#I{`z#o;Ya}q=5s4K4>Bh@g>qF2iZaUCn!StH6#80`rboID~y78Kk9g* z(D|CC_sGz4So1A*1yhVVNI}w!u|e?U(G155CR(g7sraAPO-dsic~~bkXU0cA4E>OQ z4guXZvufcXG(`7>&TqS8fY+dhTr^UaCV)GuvW%;6sK--@{eWUALx*Xo^K?dv6a))#)h*=*CM zf-Vj1n&|MwH;Sjo3uZ7O@NKkFM9_E<^9+2zHW`GYB@4~ z7(+b=ZjpDIfTsG0pX(#F!$e5YS#lrGnm8^8PV+Mwk)pE8L|%d^U(v({+=f&Y&T{?+ z(C>Js)cZAFxP0T2!bh~fNTet8+MA-3Ppoh>r+R0=4;%WzbN6Xi zu6?=jIZg;ay-q}{Rh&I^+fHxO%WqSz;7Uy`?@F@1D1+4f9EOHzVw1s)ul^S1_s#V8 zz8jvOpYCJVJrR+m86{2Rj9%^FoFodSj+j0Ex{0ma#s>flFkNEc=pj+2iVLblswc&yt4Oz>j|T?G{yQt>LAy6vl=Va!-e>4l=7OxE zj4(CYVeVxz=S&$>ww0TxFs6L(p_u1+H*ADDC!W(bO&Pr^)L|HRMzi{3sBN5pME|cf zIr);y_Xblqr9zRDUk5tV|9c|n@r(q{qnX#)4gG%`5uBm9=eR>5_fp!_GN+V?gy57` zfkvDD0)fzlE2?#HRALkp0ZHMMn!+iSXx~QnRt@G}W@q(L578eGbD5$Gzf_)_kYz^7OjZoP4y<-6T4c(Y57}UI;1dYXo6X@=XT*+Srwt60s%tA%p$NW z%CUw`2tObN)dKY?9+%XiMYR7QxS`;gYUD`^;L>TzNj)(CBkvfubg}S!z{T6db5`G= z>ru=Wi?+-*r)K@G47-uc`m*n{<-=&`9c88{JZWXw#Xb^j{%8Sp3#!v`|Ez z50hnXiBEht-K_!=-`}Rn4gS>oTlRXAbgeMGz|vZo7QC>x@4(iK4U za*YyaU|>Lh&P__6o!Q$xlTNB`6UUX>j$ z`Rf@dYSz}##qXjI8@DT0eF&U0(gmIU=PJ-t8JlMA4_<()=P40gA#{>RnRw4ijRj8c zCMAtFoR!bjaAaZ&MDsh&{SnOIriEX_{MvyTPv-cpM(>^OAvO4iQch%A>Ly-q(y}|- z@6BeQQ46vJDtb}HxSO>+se`FoNgetXW5UBf;IKKir>qXVZNxDbb22XvLYc2<&}@Nu zKI*oE@`5-fQ*S*0YEsu@3(&*vr{!~bdT1)(fW8LpkCMOi1*0j&^)x=jk$xYTlz)n= zG`&|FakjCtlst+kz2M3$>m9&dC85ril18W;G=v*z)X zd6J^Zq$zuE%yM!nD}UOO&8LSfBwU4|vRK$I|1>_Nk_vVM*7#C=@AbTf<#Z)BqaG*Y z@Os`q-w%`d(w-oh4)bJj6y`~y|7{j$}$^S{h@|xJzqI06bWW*eO4%Bxc za|1sN^kf$_`A=xqApa?Vflu*ytb!>tc~F?hE`k1Rcff7!U;`F8cr1M)Oa7wqr!`_ z%i)_}r(33_2f-3`KB|s&6S^{!Z&RtUe()RYxvDwT%Q)%CQyE7K(+93U5?m3Anv{BM zx}b)cQ*E{EY%2l)>@rq5&aDW6v>-i zXwDBTYU13mlr2fGehuc9xV-K?Hx(M!(%t(&Wp?vhfCloKJ{TuJ@fkNjTZgbURPy?` zL5<=$(g@VrB}eLLti1*3vhLWGJ`aja?*9Ae^okF*p|K>(&S3~gfo{2Q^j#5;m?@Fp zj&$FRcH^c2s*wZ^FQ^UZd{khsT`zv7-=GA!5-ms*jq#tMPvTSk8Zb2%tLdi;+dxdU z97WPz5Jx7G%K7;F&Bae->ovS&T6gr|n{lv5Oc7@=k=P582y1hJF{5M+CJ|+zX7?7O zwhWD3(Jh(AFfAxTYyv+}(v(Y_JJ?fx~MP+GJIBI_ zzI^1VgFKoNG>T|4VsU7ueAdjM?$!X4*>YWUcpAr-VfcOZC?%0WNt~ZCBq1`0W!=px zy+d8u6_B4_`{|u?2dasjkmThBbaZSVirzP0xTGKqia*wYKH};%HNm8Q9TM*jebyJ9 zkup{g55gTwHswgaf%Nlh`o+%|-S*U4()GO`Uu{2jR_fR1@#!_F*B5{P{WLe{PO7N3 zq}#Bim(L3KRJ^mj;nU#}nJ+6i5(*$SgMt;r&7%X5ei8BSXO=b>n>~O^XwNk9 zC>f&)pk?Wnh8!Az4&I1~x@ZoU%1-j@gdhr0eTbf(fl9yA ztdK&@4Yx9;dr zeouctl5n1w7OX+7(H#MG>Xx+HF9TiU-txOQD14-je3bAE#dXqfW`GDa{ygnd>e+C6 zP`_7DX_nb#VVZ7?VVu2_n#yvSZX{Ghnatgx_@9(L;v*_Fm}?|Um4!0-7}7XK)u^Ah zy*;`dt6}h)@VsoA6znBP-Q&rmwgu5YJDkN(7~tMKN>r%D%d zL!lTGCdzc#0yg#MGG5*Iy@`L3pr%EC?)$nwx3$`AG2JF;yiHpkl7zxFMYmpVFln&s z{OOBtQ0E$)UI)$1B>z+*m4XE7`4+JJm9h(O_BqfQ=@Y0nUdJgKb-V-N5h_TUal-g@ zj7x2?{6)$P{EE>}spCwF;%?7#&cCz|_|TaTNYN!l{QewinSqM`kpl-{4QS;~?I|eT zPn6f*IyZ8qW^Gcj#QF9Gv%HQdHhsq&n@LQM|^_8PK#_0*sMH8*=zPZ%jr!Dkn0xRy1KJY_3(I&(kQz%Yz~hD^|Ss! z6VM*JGtJ&M=?~OJGRWam6q9%Y8xDY~96+@IwL_RxlBZ8{s@(z5=6BSfF6vRt@v3#IMtKVk~cq4jxQd*T6R1u~mr(mG5`4(XwIKDT9^2e>q8*g@KOnF+AMEK47e%G)X? z1vNw!=;zJJesEN~?Z;QQ_$GZc=)K=T+E5i2{~ebdaY-PVB*jC$5~{$6cq`PyE6M>i zX-_?pGmDXlA`&=>*$lUbHCJ9Z+S@iD_R?ps3opcAcSpRdd{EHZYwSVPrk}nrNJaJQ^9UK2joeM}S(BtE81!sh|gztro0@mpuKzkxYS@06<0gwQf6nU=4Iwl*zYR_01tW=CksYWa*h5+hFMkbY zeej{*zWlBI5$H0Cr(dD<#PH>34H914TqdnUB?--2f5)J30{3zP{ILiX1W{lBH$CHr z65vT$c$KNhBQWh+MSNi0#TVG@*gD@D^+$oC8vhi>D%{L86-Z2xIqQpG*{nNAn+m4HZGi@v_@);6xNE3Bk#PJpK)r8} z6{+bhoBFyPb}geaM}CO+W26%8+wo%+&)7`=?3KxRsS3<|102wU9T>GeFO5-%PV|O9 z{aNtAE@!FpEjSBx#2M{WPqFFmbzkK96zM$uBp^{>&}b@d!Yn4W#9|hqKHo@nE`j_k zK@vPvcLDPAX3Xnr{O>ZhQ^x$4$)7jloN@o<@cs0jA{$GuR9V+G<&ai4CC~q#FBOd^ zlK6+vU9Y7mwrWu`CoKhiyJXka4bVubj+qEhF(9&1+^vd7EZF%~1;vFjw=K+{0%opD zjBZopDSmPJP^DtDBIjR0`$ZLQl`QWnKND*o+VgW}U|K#+6uXV=HlhccokAZ%vHsD8 zv@?4tP)eB^;?IEssrSPek0F9694ISo7=j+3bSGY|l~3})j7nVi=u#Qm+cNws2;k`f z=-Qxi&vcbo8A32yUsbpBgcuLp6(Wp_IRj;0^dMY)S&lS`Z;y>t>;8xY^ z1VD!|$QshKtZ$m&*?1|Z4uD*!_s|{fY59w!ieyg!<^Cv-Ud8z}X^&?C-#G{zPHuqH zy{f19&k_kdDicN(u1W;P+I!%}c+~>6!p$&jxf%9>ssvOmQxTd{RTwQbLbFR%^1c~s za%mDcKhI1Wk;0C@E^JhF#$LS0xm&c(xcFKj^{dOB%D7JQPL;RPrr*0*KlBIw{_r0k zA$&Z2_cjRi%u$J_oieIWyX=1ihrf>jd3{{pEd9Vt3BDOo-r(cKi zv(pwB!t3jbg-x8&>(BZh7UwGZD$0Q#R`DIc^VB*_9$+2nKqPT}d6XVLRD#8Th6rK< z(tyQVrMUdK$m$AJph*?%AZ8720*$u1=%cJz?oL%pYp1_w{m%dET^=ifRp* zuXldzCxbFlp_g#g(9EgqNQ0U~1y{@L3J^0qy#zJu?m}Je+#NL#xtk5hx0bNX7f?Ns zF=B|*`!(3bZ|MvL1TA29vQ?Q)%oCXy8nsHWyU*4H)^kQ{NEs+l+y?$|DV`3pJ_)-w zY}rH>yw5fu_fJ?84X>oxGo|np^v>|-AU><8tfn{CWICya!}XPFEUeXUkI3OdnoSgx zEt2wqMwPb#k6hpirsv?ni=g~mZ~RNN`vDboQUhW(W%O*&2Basp!K9z@I$lmv+cfv7 zH^}GC!Q5cuU1g9FDmJTICeP6sLgRAa;QstfEZj#M;QcvXgumW?578@7C0Ak_U13HZt(|-agklFI;j+42_r2^{)L?KBkhrh|B%{64aI!!t$2I`w zkLSSEiuA%(LB{oWjD>Z+1cp4&nSQ&1*+kd_avAIUfLpcGENY2BUAM%7n(ovVpta*P zYzh~x>hCrNEn0nX57n5zN&K@5E2pQ=B<@(}z)oOLQlKM&=^X(}yWtiUh zZW#OS^`CM0C%)bPgz+DT^46Lo;ndd_(|7`!z(~3So2~%awcyNBA(j4Ko3xf71Aki^X;UW2==4s^}a=@T}3s?uAvjaKTbPYv}p zrGo?wsqm9uy!|rCz_uXekJ9$j99MCqDH&|28WbS7W$X&+V$%*K_U;pZ4!yPjp zv{QGVr%3_2%&)VCT7*&pRINprwli0eW@a={VEV2jbzQzw`G^9P&L(EjbD*a)srLt`XVWkZQdBWeL>7pRD6Nr_ z!i8)?%5Kl~s!vhN<-Q8KQ5^=7J>05Lo_^l80-buQuGMfJ$0>oKzwG-{D-enn9p!#Z zSqL<|r(R-0O+kFChV&7>sk%@UxqUWq4r$3FKid@+O%s1rkae1jM^1jqr=p({;c5J0 z-62vf(j;9g(lU|?B&HrxaX1XG58P3n^p_&s4(gDW-TRPUbj52LpOUYn3weU``({Sj z{}&3X%Fny9$)x#-QU{e4;!Dt&Pzq(IDh9sI)LS8Sd`yM8)h)W3QfPJMt4Xm79MFRLbm(_dolSAjdtnQ|K?yyNWq=CD-{(Fo(#$Hmzc5)D--8}0 zG`4&B$YKzA+@fLQUe;`=tD8<^z)<1sob8P+S_2BGL^++^!5UPHj^N}@nUCJ?_*!!R zc%2&6(eXkp5PB_wH!)>~WW{bT8U#NFO2TYz+%P^IUIL92gdQvv0WG1{6!v8Fvq6MJ zja}cUU$;@+*EQgC_J=zCY-+U>a9YvB+!gLs1ZsVG2dLX7>e~VOhR+jyeR{qKM zvP7}dXh{hRM@=?F=~=w8oOv|9vMISYWHS{~l^?IXiLW*8XOax&h!0+PB$KEvI ze4-~*v>*FMa_o3NfxtI6;(n;XJol_EEV|)-sD~?4?>Y#S;uD~~;KwOJ z%@qJLsT3_xzlc<$k1t>^W@`Mxz{g|Yjnh`tZWGPxp&DHj0t>=aDqCoIYk+*~(QIS- z51wCL{qW#yeSD=9*m46}ZcK5w^yYAxCa{M);V8S_-W&|M%fwQ|HZ5;sM&z2h?d#j1 z&PTYJU^7jlwuacWqWc=LYFqSMxiWQO$fylq53w@V$4B^T3{`<38xOCQcZbLK&MloQ znTz&cSTzIfx69weoT?$-qKW<~>s&54nMFaLi0A6xul|;=rbYBJpn=V~p6I`Hk+mw= zJ*CZZ@zuMkA#Jf445~Aa=aO~2-%0pV`tBGih-!m+7%JPLejLPAH#Of=1`X^Y1WK~< z?d4j-gk0wh@-1022m+MU`h^^)n;^*G6AHqyX>r%9R z*_ocGzaVxB`k%mEm56j6uu5)fB6{2+{oWwm`q59tPy24_L6LgtSCG96@y^Gby)JEP zmpV1LN`h&!sc?wx?x`>p6s9eye?d_9rE@O6br&zFxg9)74280?60PfOi4-qX4d{VQ zi*5SI(3*#qpd?;zZqDMlCthb1RBIT|uczE=^T^Nw27%(U6kTeNQ5W4`p1t_s)g;lT zI@0f4Qk^pu!)_zsBO|s72`kL2YvRo9wqVnN>aq}41K1mROAEZd%KFz3p(d!VSLpr& zTT$`kN2qL{8lQWW>QGBme!`po^joOygj$xm6hhfa<`_RR|2Kpy{ z%rw0c@C)ON?JmcC)Cq1V;bSls4o(fW{Ol&epDbD2%4;HfI8CCJ`Be% z>Ld3)F{=ou-V$84_<{4PNY~M1bpz6`Tgc65xt(GX69@0#)VRDFu5I9_Oo0hFV3fv7 zrFmL{(-Q`n)i3KvX`}ug{nHrMtsjRcs>PL}_!-iIy6b&81Xd6!N|$;R8j)^3=Z|TV ziZnf@AXdO6nBZa#Ypm82w|fg#y!rFHU-~D5Pu!K4tU7DX#2YGDa8_{tg!4Uy#H-ZZ z>L~H(`@SD1vY*{j+STI8%%H2ls}!GoBUVU@3_4mAT96K7H}p><(Uh$Gz5Q!SHVuHL zxk`s-&t9)ilv|P~`9zUM#yQZq_HX{3KyH+8kJ$9u^alb>e<3j;RMDCm4LTS6g6@)b z*9zz77Uw4kb|za2{P`4cw~83w6DzSh44;o%k}>`1(Mn+)G#z;HL~uH_yh%xB@YI-a z_~T=V_j2~0HkbdUsRXs;PSBbFin8ePvjQK0x@m+eD3#`tDAY?Si9?|G@#!Az_mZgH zGdS^*uK;U7?!OMTT9c76(kwO0nW`>s(dhSiTiA4+kHY*^9cZmLX(zdRAt*&hBDhIqS9DJlU<25* zahd*n{#3yZ_rJ`lWdamx1A7DZ&6>LsM2Xfe45-sRG*Ih{<WJ>bLoKJG^hFSk01=lypgX zgUKPm*WcXyk~DXM@+WnmxTrMQZqRt8^w>Ygw<(@__vS+A<0}=KM!oq(mFv8Y^u(bv zTyUv~#QT=Jd=zGqb=Ly*2krDN`?c@;uxd!DD>qLH3b+P3%qSN=fZgm_eQQ8`1Dom| zqt0WA6w4?zG_I-+1K)*hi!_=~J--c>J?l=MetX%gqLvh!ay}iZ{-JmS9QRjbV*YJ` zYKjh@Vc_ZC>rmNfiX~xrZ6V()4xuU%AM;I6PjV9vEI*r}GF0O;P@&?rGZAsI*#x3g zL*rESU>&?x#hm)8)90+h@5{E&=wA`}kCOaMF+psQ7`~$CyX6YNkWF-2`y~XJw!(?M^8Xv)35K{K z$Kh=zQlRGP(O)OkM+-%^Dg4(?6{nwPR8=QPf3)TPuUx0w_o`8gkf?PHIRTLCWfy9Z z`wgbhrg|Ld&PHv~^$d;@0T};@-*FkGh%~-XdOlKqsr~@x*M#$Dg%ds?>ZaNZF`j;U z8;$j9@ES>$;Z8|vzs{_QRm;EHw*0541(lTEBgbaS%fIOK3LPcXt0t{rp10pNBZ(`u{y@ueU0_)`zMb_z`<#rIW0$ zjLx5hJef5|Sd~lp)v8T@Ao6*S7@uBLh*&3>)J8RQf`lshRzsh6Xw8cq|h_h5?A zwB8ISFl|%Dk}AKrQw``pH4m#~kp-NHYO6?bq^8((;N-ePz7Gbu^H4RZ6~v7y!Tg9( z53s552Y}P628mOpd<$A4eS15i&e=0;16lbr_78P34ErcP`&U9$K9wq4paM%cpQE_+ z{^t%Ak>uW@$HKKLgya>~M5?N9_0^9S?S{2)n!8kvU^W%0sf7|J-+PQw6nT{bs}_06 zs{yO`%AucPPpKk*E*+~(_vJvLL8^qs^pudijY?B##S>5I8A#;R2K7Yczdnf-`JG2~ zzsvhXP$iKQV8p{f|Ai~)l}H5!)u=tGVoo64=Os9C{Of7Tnfnvn{b*1U#guZ!I*m|b zz=ry~t5`8?zvBRG!m0qGtyMFvt7<5lkP?AN0-~9|cn0{pYGj&JZUB7ipEgj}`L>59 zXaaR8f=UBT)am8`_L#4vf;w9_`YrK20MmZ4 zbqiiq;)kH#?<(Gt4!~hlV?Tt!UvRLwZUwUJ(HS(h$XIZo*=q@nK$jxW`%Xjc1G^y2 zrm7ULdQZ)YM^IJBx;0Hu`$bxG~qYstOOw<=3^oS#KXti3%F? zXv4>c9alqY+u^jT@-NC3Xb9+uRJY?Oxet(tU(v2qzpcV_=+UJ}G1jK_`=L=vL!LG1 zD2JjLtkf!3iPGgm_v(C{@GtO+*!t?qC+43d1LMfMW@Dd16{B7uje6Cus7mYquw&E4 znY6g{G5Q0Ws^$^^Lb>8?)rnH2igRnyVf(`)Z3{%EOr3uir?%x~>NxQy8PzpmJ)zP> zHQ3wWA2O=SDWK@E@MuL9{)!YtP*sO{viM8faw!2kIK#(PHMc2Z7}aQqRuzE?XQmA< z>y*}U#>Iahhr1cQF+=K7%mCRdx;jrSIW=b6^$^q21O$D?{ z?sq&=eWp`fovW)vY7=t?m_A~lqJ`wUl=sq8EiF$cRe|PD3RAQ9zXSpCmRfZzv@}z1 zCA60ZO7mwF;|V08ond|-z@*kH=f>g1j4zxztK_NMH|Ys|LZYMqeL`ZWLehjSe}UDR z)UEhcF)6U#6&ea{8U4Rzz~dkMaE?_ThE?%}^6`=?B5JKR+cexDr*sbU^Va*6J9BK+ zed$f@Kl;bf-=y>oS^`wmg+Bu7b1kKAPh`_aZ4P+pPl48xY0-^~PAORQZL#)6*(apP zzXfVfgA~*C8S13;4NxiXZ%OViUYPL;;MHlZ*AX?bC)I#{?X{_Jm|=^wal9YXa}@vU zBAKFjG9~f+qC8o{`Ewh3WGVNZ{PbCS(2YPr_Z7{lZ1niJBc%%(f{?{@8jzkq++X~* zVNYsMS6#d&KucPjC~i~hX71!VQc!%&H~qw<)*mBnNT(#E2Ceie1}Cb>P!~weq)^&| z6j`*%Gg-zaPYzU5Dov3dg^Q0A=2G}J<^5?ckIyDhXE;A^zs#!~o@{ZDPKRh#{j}kj zhycMTC}~9zLg}L7hZ#_ZHszW{3*U62`yUptJK4#$v3dA>UP44G{;SDjo2pcvXhHf* zYhS8;KCNGYt1J|gc#ej58a*mLmsXloiKOsx(WE<{ozCxiWjYPfpph2r-W|#OFr-DW z2R>S9Z*`yzg~@)s_;r$BGO13DUh(C(wz#AG`YDzARtNf(n-jSeH|gmW(gvm+F-d)k z9_<`_lLl7ob75+vufdG5o=kJHb9w4sO`J7l_>hSVaP{LGC3!}oU?Rsgi}Gm$(u1{M z+CRe>uHO0+PagVbDa|AOj#0C}uTqD43)F!AbabALAJbPf{P6y?N780Gwa|umOL01< z%=J7Ue3Q7n&SBzSxQ%b65%GC`#*HeGOM7~jPx}Xde~N-R(Wvq1c=g*p6iI##HF%rb zCmOctZe!Q!d8*%0nKK)jq|xc~UGYG1BJ#LTH6>5#K&u?T!{&}^=t(D}N!h_@lF>Vc z3NJdo`fX6xK?x7~z@^|XCr*V#o!3$0oPxSjk>ll1Asv&#y#}b7$IPz{G`}t75^A16 z_YA71ohxjrS*4$HXYiydC~3(1XxY=()SrC$Ii*8|@HxIuUCHb^L1nM02rW>nWy#R5 zW0OWYPfI-X4(*;r6va8ygC|$YC326NO@EIvdQX4G)d20=(dth#{<}H^ydgn@+b2F$ zGVn}K2~^}NRLkP`(c6dk2#V)p?)Es_rVUMg2`EBn-z$xIzhX8iVx4K7;^`MujA+3+ zZAofFNcB7#QKoq19bJBpr1395nJ0yTQ9 zO}e{PTdHPR=G8}!1}d+`HB~r%5T8m3>2sJBlZb))H={k6{ zr4(f|VD-y8l~fa2unvC)t=>#GDB^U}#OW4Z-P`aS|Frhmt!VQr6^XeaDY{Y$TvJx7RN-`x1#_sbx{{N-@%+jwX+9jLfdC75$K_izDKbe+aNHBDHbwG|GQ z6vN=c@a~>oG_hs5ne^i_R#Nsrb5D#>!I#EG9ntc|p~_t1t0Kkd-1~HO4!e_Gk2?My zBc8#<4QqKPA}2>r5x>qf52rYPZuh&!Jx@2iM@w>AeR&Af>auHIAEqTOViZBWbK1%y zu)(CTzi!l@n|~YUlq7KvJ;c*psoK2Am5@V{hn@t zH;(v>IYsWc{SzmFMz?ezO2;CRRxCeV|57#?6{3^bN$ES*?R~ubb0!AnlPL zil^W68PxdiidpnJ&@_pXTz-a8dZKge(|Fg4=cRi2Pl+_Bc?a1`sJQZ-S~Q}dsWyaj zsQ*b&=Lya^Z#E^-+{f_O=(frJvdDYZFBQN&szI8@p}NAM(l&MY*KA6Mio2-u;U7rf zl@!y%BMFME=Irc>FAcLEEI|RKG!phXM;ZSv5>$Q$y3pt0tG#rkW~iwm>2$nW%YLa9 zR5NKgG(lZX5RoIl@e6CO+S8OtwZ!g)4iBTan-Y=EQ>dZ?&kw4n4Nz}HND|-vV2gu) z+%>bGMVCc~M*#D%FvOeGn{v9(sp3VQ29X<}{z7Sge)M+-kxviR&O?>xM-zFHHKA9| z9bru|YP`w52-rDPF%Y?v9ju*P>UnI!@39fM@=e_&sB6YLz}GY&L2e6A9f^GTu@aGL*+i!JQQ&s{a9`F!5uYDbe-o;tSw=9f}Nv3pYK_ zp;B#1k)Zn-O6rq$sT*Z~i|%byv3vM!rXaAhN8OPCCC1PpmQq+XEOK5Hqo#@JI@X#| zH!4};%&KC(sT`V69Z8Ne0$SWkZi%I# zaew}_JpUP~Hj`8R|9q)V7?H?x1PPJyWR)+{D#9k#U!x{q75ouYJ z(|nQoC!GWoDQYl}?o~p5k0D`vbPghbTKJE#9z|`5I0 zDIPe909(ZpG>AT37x#c!Azj?+j+m3snN&ymee3!=GX7ykm-zIC-0ZC`FaPqgTIxzg zrrMis1$SY1A*D=Zo9r6yW*iV+%NST=%=5YH2W5+Z6Hlnr0LNcY}c|#naT1k zyIA9yYq09)Ep*Fr-;+JrmaycrJ~GtjsdHXqSsdxiyw-sUrx%tpVeLZG~SU&K~Hjw|HIT-b3BW#-FZ;86sf_Q z5&^po{K>`rA2u#Pq9v_?-CX^w*)#v*f!V%kU`{~Wr(n$pVry1?tKy7E$$px{{GY1- z*tqbH=b-SgRe-3f18Pa3J~91#u?F8j=!) zY=Y|IDGU?qRHjeu(L*)%KHGS|s#0&FHSzj~>a6D#6)r;&-2{}jH0p?c6`T*Ont{19_mReK35<01>D653BRw<`x=^E0X z+jNYkA+%xJ3V8WurD}zu0+2xyP%$=HK!r+uJJR({HOvNzZGiFbH3+BZDV*z0;zHF4W#n)3afPsRyXnI6V~rjtVX-%@aO5t-68GfrhTA} zu&xSgJAwqDc=4n~;UZAq72LU@$gDxlk%lO0HvL)G)s|QQeKynwa;*fw`G}zJB2la^ zp8#9t8=q6U_@mJ_2?D5C0R= zO!CrA{P_(~@yj0?N5?B_h%#YA@L4%s^|~cmL6q}7_9O%Ci%UypErmK}dI|i(NLq)g z8whDowv3SgL=%0{RxPtKiDmDAytP=i-U7Zs+Hkfg8o&%)^vC0_EtK75SClPn8Ubj) zdYj`Y%K!DFOmWumfp(w|64HBcQ~^FKn6z|h)S_42BM=a`t2VWzDbsn|R013OKroXI zDw5vt7GOM1!7PrTOmAz;v69eB1E`nAvW09)S^23Jj2=*-R#2JGnw4E!pt?SFR_Qfu z;^T)u`K-FPn50G8QgEb&!%75dT|QH%K!0xYp!aSE*keegAo|Q0t)hUA{%U`SRjbrp z*M!wkgN4(in>0ExroKAX4F1@aYA6>FAf#gW+$WO0VR5cB?SM1_bPn}9I#;+;&HG8M zWyQ1B8VVH(xquy@-yG=56CC=?pO8N>61cl{jnxz`tK6d{McM*$v>5)=Wj#<9 zdJih7bgkAb`g6dZzI>c>>lu(%{$yl>1hoD#x6g#M$OL(vyuf{&pEJ&5Qkvh{sL{b% zm#s>h?wB-rfv#7IOzOBk4Pb4~RBo<3G3XbytkTAOb!!^BWlKDArjjD1i+eT30=m%q zAh3(C;u48U1J?7ge+s#`!xc?8E80Oo`r;u>R~{=-IxCinK`n+o!@AG))Wl1Sf-smg z6>1jzxr%C3rKHv#fkKsD~KZ12**7_(&YF$Jcu-6v8V9~l%LhTZV{w2Hi zYk>4|doe&0i59FG!1UWoYYL;P;t4P`SY5~2Lj17`TQ4N8HL3yV3D(8cs%}m%SF4x? z0qa;p^wC_PWLi%iK%a5|NmGlyyKt^7=c$N6V1T#M>0uHLohp!fLzB z0>r@Dft9#-g+w9xf3#YTzoKCE80yyybxK#EBV4E_Vts~v|GYoF|M@fiZC}@2HtIAJ zI7e3TR+S<`MR?6Os_bsYFQ;E*RqC2eLHUcSrK2yiGc|lHwakyTw<6C9?1Cj&(PGoZ z#|lgUg;@dCF5ar5Myn>Qthzb@G}HI*^v9LnH72F%67>s6ii$ovWKx)C9WPlFgsVvN zbajOa;KBtk3F=uA{fcgt7nohCa)-9{|0nTeM_?(FhptwCJ+Hrh&<40V$8G&=P1aAkDGfFo%8AxHyht zaPMns@>X93dQ`|;3(O>QqZXqJK@fpz6=+`k6UsNeZL&WPR&&(?+=TJpO7}s_VwZ+R zl!#_p65V?h=g-ZXU-yBE6yfM-T}@Y|%!GuZdn&e-P zul;zp$4C#T35!ZlNMt1zdSt!lyHqg&jfm5eB3ad*oA7`B%)@qZ>Fp!kAjJ76Y@oRn zTjo^@f^XE`r4}t<>$&QShks^yk7zYI!8q9`s{WSUQJUP8W|Pte=zBp0pkSf!6Mxnt zGI-*0b6q<4;8p0+_}#0ZN~Eh7N|<(}N1ufEGV@a^R|?;I68z;bRRPo8(y_0hWH9?_ zM70c1#CqLL)4URHP{gJNbv1rLDLw?$Ig_+g8<2k9Ua5RO&U!SKk?HLpd~^1YmLfl3 zfB|W~E{(cerYg8;UaiHb2=OT-NwGe@4KFAF4o}a6dU;#jQ1uMuG*{iZ7)8Z@eDUb7 z)*sun$*SdO)&A##O<9uKfj`y9YZWpBejjK@%>F_&A&pCI=%GJuv40?!V$fCzaX(F+ z^=$DCbE8y{lt`)X(jq%0hq>}gO?Gk|q#XUz?iF<+N0O?)=&1qYBWA%w5uGY7q1;(D zO)J;HBB+Xp`<^HZ%6(8D2WuDy_5Y2N<*3mfEPz6+U@z*lUDEpSEwFFnA3FMHY#>)l zD^vV05mlkK<~zP^i@|m0vxZ{bz&DT;dCo^&gW4eXV5D}FGk8X4V3sKS)QkN-fT96Vy1)u-i+V*;}f(k&M+Ch=4^u?H630BKg zSZT8=`%IXV^cM!~CDi$@-dfaQr;=ICN|ZttZ2!8`LhI(DJUnC5 zicvhjJd;_`ZvVu00OVu2Su-bqDsw<(lTC^$QdC&Gk z->;eK>(drgw?H%qsj~P_FolH!)BWfsNreW`x4-|kzbtiF%+Kwg)7zkRiUk}th_wPI zhLJj6wsYRHvm{eSRracJZ^7K@#xm3J`tbK`SeLJ|t4C}mTyd8CLSZdy4F%dVbVW(9 z<)z(S{&_~6W|}YO*i-ysK)52HSwSqy%NB@O-BQ1FxqkT=*v;obVmKZ8fcmvBnwNAL zyXrI_*sue(hsnn+-WM)_S*n^U!ZAK{4r=A@5NgtZ zF-=hG=l|NnI+N`}`U`~%&S5CErE*}-v&Lr&{layWb4w790;b^*5?Z48`{MCW?EsJ_ z1dF9Gy6~~%m9@O7S|!S@cBK2C)C=G)KdICVpah0(yXdd*#+8C(ow^o~b+5t%<4U5c zU-ej@3^8Beg@iPr!>!5{)d}ky32fmGAXM#_t#%8j{>wGC%K2y7dC}dk&g})@31sQs?AT- zKf~8 zf4)ep?&pV0d-L)ahU{Nas(5~;-c>*Td6(~F|Gv9h%K%%;od6r88xdvz>7MAzZa`CJ zSh`eUJ+~f`PJ-Gjyn zKRi|qBa9iUiZ_6jkOknY&ykA6x7=n_I!gVTwftXR0F+}#FCfN(@aFR)Rd@i9uK?%L z@ngCm&F6jkGIdu!kuF5M82VqQ?I3&Ifa&;)L=F+)=#M_ ze2{4k*J+GXP%Xe=98hV~MLS?YxlJ7*UEBfJu+qn1OOy(Rmm3%$t4FblKw(G*zEwGm zks!XEG`n~X6OD^u45u4)2kLq0Vxb2`w!+0bH9~O)B?c_H69qKeKl{`yH+@pC*%y|_OOgN2tb z{P1TO{`4;*yoLVH+n@NvzCEem*^WULTu-3UjPK4$lSCGTzgmVgLfv31*vZdf{6zOK z=-i_mJ=4p>D6{(^L7+jB-i2sl3AQ70k}fo%HP3JTo8d$sJv%48+-|>?us%=#5*=v} zRPcthf}2=J*l4P#qMX_$=V}9eUC0UUz1a-T)n(@wM+q$YxPgk|gX4Zu7cz}b#`<-F zH9B>k+Pv<=fCy<}QTI!jcd!Re_=z}|9yGLikh}IFO(N}@SEqizX7e5mrV5%^zk0W) z)IM6LUGJg#{2h^`Ks9(2tDwO__gSEpuqU0Ft$IBzWoeJ5L5Z3R| zKAFZgWA1xTGYS1FW#)?Fj#l&x)s4D1%uAgVUtTF4;YMhITxWhtSrfP-LTPXnnPaH* zymw7dhn)|6Q=h(b@v|S^x5#P44U2A%qB+r(RR~Gk?^T?YJY+Wa)k<^{cSm%md+ku- zDYq);DUEwIOa2km&l9LPR&RgIb9|T3hA_UEQK|kl5C7*2_v%)is(a9U(-3<0hL_9= zPGvM`P_s|fsuVU`cRHMYeKIlm_lB}25`wQ~7qu&LQKloexsG&`i^^60Ak#}5>>w_) z)TA3AhD#lhs#>o5v<8}+{jUREu7SgDpL%td8q*Z`)P!~Dnvnj)sESDSFJNV?Z?G#- z6di=3jYbtjRckzP!1Jx@iU3cfcFHDBsrxBG@!sM%8gq1 zf-3ofb)2` zxhXCFm|v$Szps$2AT8}W(CAy=V?Y4`sDmxK zLD~?zBE|+!VNd1W@?Zt-t`e7$H{=4=fd2Vo%%4AZ`4oNC7*fA<*0|{k*mqY|QIHh& zsLRtLb%8qo&NOqaOA270l{E-x1*^P2OZP!}{^(`LwVw#Uj#B(nEh4+tVZU?+*IHBQ z#0!16`huJl)wKHcA(iVVDi6}3*B=evp=_JP2GGmt_gSo_0jqe`q929H?Q%rWBlz3!Hmp=Y8ha6u28ss? zjJ16ILszW7O&PWppg!IvgPTS^cE=O0ws_#`2T7%&QMw`%STHK5R5a>4RhU1w5M%vi z*rTDvqt#bUqFM?Q^rD!jE4Y7!&QeuXq%l?zgZ_O-MqiKXiP{Hjs-}rg4ACJ3Fh!hF zP}GXVr;O&_8p`D~yf-`Q^bC7<^`r6PlpIp^=`A4TugRH!mpeaa7k;cMI zRRh$o&r{#er+?tVYRp9Lj;Ku;;hpztPGBqWf56DPcn1QPfe^&~lxa#Uut8IDkGtV* zsbdtNlld3D^8%oS7xRcX2oWNP?3h54C!(>8OJ zXEtpk)zf$mB2=%Dxq`@=6b$TQRs7U7A@wf)MU?tOZu#t!2tX!PoUenn+TTa*Az)WK^ABQIRTs z6{BKyp6B`foJ02n-i%Mb@2im16_K7)hxr~<`=VWC+%JM(MSRXX)%$dJYuT=p^pkQ3 zVOUC(3vX(1N3Bq=WMB3;NmK2|l01>OXzyi@k}Bv^DV8Qy%BC}>d$2q_fh}VOeRhF1 za8jny4`#YdeE3}mYpiy0{XFdIzayw1 zCKsl~tmoNDa;?@EY`wE9k&}R$CVHqyR&y;C75&gfqD~}EN^z^+1D}&f^;7bdTuM=z zA=iTT%-Rz7BSRfc8sZ-4dRH_msDeII7&j49S8gnj=uQgd{pj^Lu02$<-2oK}<$SJ? zlqQKf!{R9=I6I9dO2VX2d}`0*0EJ~L`pu!LbCPC-B2;}NWLxysD52I_-*m0kO!|3C zbCTnnklaxzyJk~Hper!j1$x3lqDYA{{&$(7q{*x2H$#}9#XHf9F%78zQg#XSB`t!(JrJBgT zJh_32+(E%lRrFchf>ThHvSQEGu=Ejyp1XYgXa8Cl8kT_W6JP!!LoIz4{%e4WRsUyl zt^Q$O50}5et;%IIq$Vt;=ETaX%fK8ZR8lhaf>k%4^dk6k{=5SZ&?43+vuYAnJ~V6M zPgTcQKNqYqDqXMru=@6qh6>84IYVW2$h-5Ks=%r#``0yLg@)dJ!nL1Bx#R)NV_lJgP@Vo!-itu8+T7av1Y3`V)>VC@{Q2Va1cNFzbD;Ox{Vq{9m@&yQ!jMDMqPtK|yhUepf=?9Ph#6u!U`djxd@O)6oOpCfO7*i@6 z;FA9{ibFyUf`tQvmr)eONQ3SlKl5@K# zFz7AWio`>uZs!)ok0}LkX#Zb|+4ZpA~O3RXffQT=^Z z7aua^)z5y5+WDl4>JzV%jyo2Me~49Q_4oQl{k(OH-`_79Km7^Th6n(SUm;MBl9oIG z(8WdNEzkcQV$40Yq(l}Lc$vx1e2QY3QX&YT7lh4J413S;(exe|)CE_OAGB zztV-X>N+k-acZe)!%)wE;*}t{j)Nqvt>)Y$~;7T{c)dGP@>`LHaXM-hk0HD zYRaoin?>qF8mhA#>_YHiluA_U3)asAthezWJ^m9v!$1E#{qy=y_$LfH{uw_nI{x%B zihovKwcER?iYGOd10{ND1dS^e73>Jrxv3s#gdn-MbF+SZX103gq?aZ1; z6H7>2*fr+T4~zj;!&cb9UB_4cx*wSJDO6(l)A9Cn>peTatB*ijed3ezC~Ha*rXdfY zV=U#$bVUj{{>p=itbVQzmi**cHKc$|9tHQ{Bj8Lls$k6$L_(LYstQg9^td%?-&3vA zkRn-$9DvdMvNC0@3Uw8gZ`D(z1oaNqLHKO~U;HwpQnNyN1JKj8 z-*C`0GP}m3B#49r4U@}JTFAY!i&_I%xt!uj4|enHH+6iY^p8A+2d`5x_6wA5R(Uj_ z_$FSre+AX`Zig@Z4D|EX{|4#9J2F(%=l`0}afyo4;pDyNla7)^2axeykA9>QDN9aJY~q@b ze*8&7zEk&?|4{ft9n(3Lag^V=@RJ@5ST$t4^gA{^r3&6D@Z(W+q5?AU&K4eiOAmd$ zu=Q1y$iL)@yI&`lKtIjHth$+wCVCIw|%ms;tZ8>3B!HMiU4(1f(;(e@|fY4W`* zLsRsBg!1r<97vr)O=Ql$(&;CY+7-3u#;US`O=Cyjm)Vs^Co)a^lhR8SE5o!!xw``z zl?dWXDx*&t|2B;ALs?Geih^*e`PXpnyrXRA-f5C${)yy(=(ho4(@)eR8Eq@ey034LS5Z z)og~ZjC4wcP}Jc3mASeOONe)k9{^6R0XhB3-Rd|$Z!X%y|q?Z52wr)D~|)k2Io-2q2f zeWvwn!HOr}yiTfqX$PEdfkyQKun&{73IziG3aqfwM1pU^dQXQ7pY`$I$J)&4UW$A# zb}feK>B@q1?sv|m9^m|;U^-=fUnXEXRe=4%-)fL{OP5**5;LfZjZxxV%?xzxvj;TZ zS^tHle-#Pj^Ap^bmt0>_Dt%db*5%BvTsv1w;4i5I7zGtoIM-emUQ3uS*u%w7SoahN zicf!N*YieY2SF;(W&5J_#}}6?c~?@-kLw}I)KNS2_#PAL?B^(^UwjMK_QQjwh26PR2>bHZuHzeoE%&McHW#CnYpE0_FZs~@;l3Wn&D ze^mvVyq4VjvFcBof4n}EMjZ;!$uWAJ1t`XTC6QB*%JXLu&pHJ9NrOPo6r0#e$jt*eTQqQ|}g;Y|T zl50b%S*~KxtFh0Wl$CBRQ)wc1mvFDRV21A0%`BId>~crtjPz$8X~e1%BsHq1_(jC) zG;Z37Hd*37df9KNI2o|pY7#P}g|9-rpPjhXO!^J=bOU~Z|B8nR*S>J>$u0b)dhZTs zhy#d)+Cqa!$9upPNXuN1O@#S%pouTr;RX=&g>Hl72dK%im%OTEQ)GZhg~AAn+In%S ziu{VSNir`{)SN;6jCa7FKW_A36s4wAH2%49lBFD<)h5K&)l}eGKb-^RBlK_$UMEJ? zQ?$1e(a`IJmK2zlrz%nc@F+PF%gEv&^Vx|gCbp&f}HIpW1#qXw751)Vr zrPn17J9YrV>C?AmL|9A?wvt}-?$`&EIal$FP;pGGJn zP*<{PY=}xKoVrWdLc|M@xPJn5;oq$NG8G zuh9d5MRmWZQ^QG7(+uln7hq44c!M?f|0Kr>lNEKWKa^pMPfNe%f#2H~m+#j-Spc>j ziYi8Gu(r2J;`t2lICTB5u@7V3!D-HF=n`DS1}pK*RknRE*}g-t%`99rgM)9IW-Mx! zO>OJpkXP$byKd!k7poS%;1H;#q;M4{!hskMpRE2CXWvS|5zi;VOO>8SeKg_%<<58}qDJWcX*B@Cnsl9ehmem+e z8S~J}&>QMmAMy-K`g-Y|-DiR2b}e4oB=#GjHkj2eeamgdp(epMB7+n*P@k>kxz-g_ z3Si>-YT5zIPHlu*ZwTCx`#FMYO-f+2KwZJg8FzC6wc#Du2tF~SzCb$3tyFYiI zCoxy%h_tpL)v{qOXF!YR%K0gKRl}J>mvt;Kmon@l8+AvQwm`bng{9`rK`lt9L)EfR z8x&MmLci?j>y9b?N@A{1sdjY)^M_#Oae(w#y~#Ahu!1cg8wp(rmn=3dgue5Q>TVT# zQjkU6K_6~z2Lj9P+!{3QUH+|aRVhozuXO!99qP}|ExS_({Z@NBpk5h17Te)_ zp|}Rp3d3rke z-nSdN;q}^)2w8ST(IPJ0#JXF@eAD6YgwhX3q3!h@yrte}Pz!I{(_yo>2IJm_uu``A z_g38%31L{(#;hXK@0{-gx@=EF+DAn~3gs2HZH?VRHMi=1#Tn~I*H1J-dqsHnKcZ-{ zSk;#CR>(z-Ey&LqE{Ehu4`~|`!eisF*2z9=2DYj;ejO+ zNYs&{RfT6y*S=*hpR0{t99w_8y2%HPdlT&n+opckru8noJt9uFQ;Tk~bf)5&s{w^K zpgeKc7HxQ|jj&I~dEV8;Y2r9e&J(AotAT7kj?mvR8|)rnFb_Qq^!qq*m~sZ0Rh~{wVum;=9zE8XUlKDj(2nskr#n`LX%zFwxM?%IeZ0Nh@7Mq??tv$^ z2}0Q043mpBb>yzeEp|C>8B#tro^Atp169M~=?YXF=u=uqx0tozJy=s5F54EsQJYc! zpZLF}WP3OM*B_d7LQ7QAln!#L+LSr<51bS79M2AO%*C|;vP+sCt{E48AqB9*&@9SP z&ui{+UCvv<6wNM*I^JaFx;lnQn|8dzvQKBFm=>-}xfv$104f zl>mQ;*nYH2p71H|18RNj7d=6-%gHvikC${DLKb~aG5(`g7irZpleO;!a$Rsw zzn=6g$kq27i|*?%%VOoB7Kr(APj{3n)J!tWiQho4k?z_uK2AZt4<>qnf9|9CW8L^3 zMxwSNZ;;gZ63$aG6IsRSOPtRO%5QWCe&zHU0`2dw_?x73@r@1p70=QAx9Xq%m@#z9 zjOtJSIvO?JpPpXte<02NH1{%OF_ZtMRxl~CsBrLi7Sx<9=-0+fiJmZ}c!^@s`N1*4 z%JZvImH9H|I0tMZRztotR1tosh5XzuTzWu?V>@no)J- zHSH+=L5r7zq*q}^bGX#>=Iz|lbSj3?5B~i91K7~ap$jLpfzV?5;3afsEyzx^`m zt^XtLVNfc#LAYQ{=k7|G;qA$YKW6v2UF|rz_FYX}$QbFxE1C#9_zie=ET-k0KlnG8 z9y|KrI{EWDVCLmdh|gW%L$3#M!5-o99*ZFNu=&Z*CiRiFoD4l?9$}5jD@h36={NH% zMAOL-h5xd{$yQ=rn51$HBX$kD2AeMG>73w;dmwU=8`m|id!RAxF7PvKkNno}v_-cO z7InGyDC*dDfmEb)WJSrz`!F@)X%-Z*OD2TMyVh>g5Bt4O7=ReTnm# zq5P)w)c2ALAd4=Z1dR+l)9p9(V>iKy2Pn{37HoR&*Pb;201q%27lP%Bxyh4Mj1>R( zyD_|t=FOxRPLTWR4LPwPnQwP7PlI{#TcfLBd(x^l#mf;EBZZVGS29E0KguOz;{!a?eukOCrh7a`y}EYcdPC6d6Lt2XS*pJ?Iu*0 zX$p~;DE`e#4nuVC;)?x_izY<8-|_}x(k?A4DT~Vu_gXx$MCWa}oP&|;d{+(N?4zva zxuy$l7}S$$K!`WE%*JTsH{(0u(Z=mu;9ltg%-zsqHss+azHon>orv-GJ?Aysc;W1E zI={s)jZP}q{8UbG>65G+`+Vp3j7o=3yKMy5^KiM|C8F;f&_xn`0p`raC{_AZCN`hk zjWH>skcfuw!|*~+#%9)RZ(mAZ21`4s*kn$)_(&B8BE@zbWk(8`9OTY=r%Ut;8Ul%B7*73Gn9RAX=Ha+g`F*>%r%&yG3MATk*JQOWwwOSD1H!N|cD*p`P#r zlUl~^fB*eA<%C^7+@rg&BQn2B-?qvxt)=Bx)Y6MlqnoxcOD8W|gd?O3=;uwnyu9SX eI|}e)>LY$VF2l=xso6QK|NjFqE)HdPaR>l(AaSh# literal 0 HcmV?d00001 diff --git a/tests/pysam_data/ex1.vcf.gz b/tests/pysam_data/ex1.vcf.gz new file mode 100644 index 0000000000000000000000000000000000000000..64a453d396c4b1f0d9aec0f7607f85d9925d0122 GIT binary patch literal 16982 zcmV(vKn^W@2siGTT*Uv55J z|8jT#@#^!lzieOp-LK3){R@Bb`>W5_&#VD>3g#&Qe)Zw*%l+HyXBQu?KL7UV%fo;C z<@)~N=I-`C%nDWk|Nf`*7q6fF@1MSZ_RE*sx8I$A`S|no{WJJ(|J$eQXKy~=-`u|c z?)&S9xA!-nKI6AN`{x(D8yVS0AtEZ*u+L_|d=dlm39O#Sij}e&Ex) zUrs;&dVTu$tNWX)+t2g&-E7|edUgB$`WxPM^YP~P?sW6^=H01$&-|U<-rYX<_zmy# z=k1&AsgI`*pRV8DTtA%BH(uZW{fa;9!`r+2M{oRa{r=sTPmkXC#fQ7A&x7~H7k|9I z{d|hw@!{s};(LNI=Ka^-l3qqnH9~Ey!qwx*FVpjpI+=o%lY)le*K#-?mql>@$2=i9lpb_zkRs-1|wha z>qhVJ@yqA^*T4VOm(TK0_E!&hWJYiF^70$r2VXS$-WQkkTg~FP{_ybm1|7)tyVFm1 zpT2yMkF)SlFE9S`^*4NV{SFV-DISlTk6%8X{(SXtefnQtu0Gs+{_PZ<6@LM@&;8w( z+jrwr_)S0N^7`-S!mdvrKHp#A8-05E_p1+I9<6`BeQbcA&@;WizMsF<{_ZonvHSTO zzP-c$yn26qdi5Fo#m&R%hr7359_H`=^pry8G}EpYQ#b+tUx%x9>my z`pEA*|CS|h=*V3^{rTqVp{{pzy1&K;c>A7B`{C{%)uQe5KeEX0Fvu;xko@KS_0>D} zOrNjtsp1b~gAAYD#l_dxadAhR{RThqr~A8~uYSJaz43=nzux06e0Y2H;riVZ{1Mgg zbw%jR?yukDR(Qk3Ie6 z>gL0PnpIo@0zN!WkH7!w==WcBu4MfEKVQAOq$Q8v<>AYxPj~keHSTUd{C4{DZ)%@^ z;2vi;R6V|I{kI?P@DY8!JJ|H!ozm{Oy~D5EUq293L2Lhfhi@V)d{{mHT)%z-^JwpW zxVrsMdgATK=`MIU{Z(A=Zy#l^i0h>jiM|J&$yHnT>&sW0J-`3%Wqp#X#l1mi9AWe| zuJrxW4>$jbKxp zkAGIftWIB(J+D47Ui%@rxk9Y+0_5_pZPIF7y`}PPru^BcsG5P$8R$oz+>U; z{2(mgb|&-JXN!l0xAnu-$4?)w4?gQ-Z#4WN&BD5maGyM!UTA=*IA>;o_3q_*_owx= zhSjnu{_yA9ch|q%+~T`^zIy+J-;DOm&3nP_zuv=lvR9s2Uu-bZ!r^P|^cn}Hxa1CB z&;SD)n)V_Wg7e7_J`h0nB4c8J!RoqLm+t}d1m4OAInY$Plddnf4qGC>g3|}o0Ffu zKe_zj#mVO7{^U=8-n={!?|nkS@!wwKheTYzz6WToUBgvC)*P+?&M4|W-fW+3x4YdQf9?36-DbDLubl0-&%DKdzrc6J%;A{}XZy=% z)|?S_@a*RH^F0v>XGBRn+w3>ryUm#-y7_-Q`tIYy1&w>pR00gNECo zHPfQq3ckUi-CS=s$99Wkx1?svt5n!*WmPhNJDF`@wI#Db`MqXy&1}WH;-gu%8h#@g z#U}ieYBuw)(3uVJ{Q~~(5qROL=)z+$7A>nMEtsWs+f^~Mbw^sa)pdK`FlIVw!N|Jf3U>jm z8+WR&JBIekcC*{=@z-v@-){GH-T35b-RRF{;h7fh^WnmsODh|3Ngh9#{qAXmyb5k@ zP7hb!ewR@1$ zg3mmwlVRK0`pj{`o6U|N{f17@hSqMaleGuSYfnIHcja*HHro}(nWwmCd1Wb@736iW z_+)jj^b$D~DM$R4b;3gdp{*V=;s#v(7FTc0;-kkcPai)V+47lJ&s!efsQTC} zJ{Es;sE>ZnJDt|NrN@u^0H42XdC$w|9e~f=iMtqV`Mkn~;loV0yo`P7oJRZG1%e4-OA{r<`3@B%YmCO+#Wu6*DoBMGRRrSA066r z-)v~RZ)n~0;L!jZe(s2Gc;ODzQS!>s0kEUIeS3Mn5ij}b%^ohwnNY|W&h6>>)yL~+ zAMV~gLp0iX&oX(>)VwEvOJG8ZhZaScvO)y(G=#FsrByH(P(VzJ|xy*L;Y*kC!i+=n6VO9+O)vO^pJVn+I_9=QMA7}>#wrawo7}2P> z88P&Wi^4#k(eNH4J%X^O2n$wT{4+q?tpR_5*N7f^o7z>d&8BVzX4y$Wv#DqItYL{B zYIRY*ZdEkkmOb;1%u0c2F9AJ>MM0vHD`e4dxN^W4N72S%l*KdZ{Hmbe4QprBITb`h zxP@>R&`!dmT+nNy@0Jx?TryajIVA1rscs2TY)@jG9n>sw^aTeOgBt>O`)uvLt(hGY z1z=n=AQ*^s&AEnRKAIajm>Y7=xS#gom&7e6Ii2{ew2cOfPUx5LSpq)hkSNw-Kw1aC zPIhw15*Pm;pM&I1dw!u!!@b1cJ%No^8y?I5p$yIYRtp#Wgk0#^-1w@oi6sNd70GUe1vf z*Tjw~kBz&1{jzMV8Z)Ef*^A;KoxQ~Ns@pQGN+O>x zXBG%Wq0J!He8Of-WEm#xH+Ud1!B{q#3x^&kPNz^Hu@7xS7KMhKi|~d-YhgC9W3R*i zBkw~t%Zdym+bl{pF*t{~K+K(=ddyJhw4oEmGwAc$IoTf>u@deKTz2yG_hpqVpF&?z zq4yahVkwFbmLV~jazNv!qf{iPF2z4>8l?eprCoHvtGLYGwC5bn~JuLpdz{xI?6V};-t-AzG9gQ>d5 zxGk1Ln3Ophu(Jn4*hRroHCznAqZ6##Y|(DG@O+r6gYDhDC&LBaX6o+oxEFQzaZ1(q z;*aE?&Lep}U0J~r8Lo_7(#zM|L}XJDAB1VMb5Bk$F8{cBu5Kw=2<}O@6T2KfMjK&} z$O6W5+JeC75;r8eAu?ypW6?3CC@DN|L`&deT>xEKwP$wThv;=9IzIyou{5BB@t4ls zQB?1nhsTXc_Ouvh!U1a7Oa8iN2Tuo=!YF%qP^c7b4;uzx$kP*Av{a{5z4N|#%UQFPp*gaICKKEYD%u#s%-;I{D=`7l82^M z(--&zN%{)%yotZTe;=+og_W^P$VA%CB@xAkiI$DBXiOFiqeu3;n9Q0rCJj(GdBBZ@ z>3-B~;BoF6eOt1Zd@GH2xt(B4oaL@)WAz%jO!)xiRD0$s_-VHk%Sd!0mWx(hT%TiI z|MwJ~e!M)tJZti-XSe8kf5U(M_VMn^!|9vzznoQx)wA*~?4%kC2No zBRr2do;?z}Zo-*(2%=ph)+~);iK|2qgCP~Z!VshoA8&knUN+-b664L?iOb9Mnt|nv zn9rr-=N08-W;vO$f_j88p$8Kf8wp5J=0<;%T*f7%UP+#pHOw)U0n3t|FpC)hlyP(l z(I;b)MkG_Jyeh7fQ#>%VpXsb-bYF<42vQY0w?S4Lgt%-2dxTm&utA8GXNu*(1|t)Q z4Py1o>FYL#OtWW#_rxhBT(4V4F@g9fgjI;N$OMU?5t#rmz!c)7a0~S&@G*X!YjcPb za1DNZY#j$DcF=KlZZX_Ps|kp8jcj9YMF*GiXQkWNSt(9}tWH{xWf`1<0t9W)6~!p@ zI-aCemc$jKu$ZCH86dA_8Aw91=tl%rTT_u@L}y(>3>u*A;#oKVioUl&YTlZOW-BLw zesU#SUBij|)M*>=R@e#hVFRQNC;GG$qLQTY7zvoDAi{!jCkwJ{=Q%PV$m8F#C2!pk z87@Yjf^P)#;?6Jf)L|TzC6nN%?uB5MosWSLPsQUZ7NzhTP9P*MbB51MhLI5Elwal$ zHOQ_p6laW=xNeJ?nWHQkZOT;zFYERt^K-^5iC-AV`j{4&buhD~Ga#XdeXI~w!XcM2 zd)UBPl`301})tt&l zH|11drlbljUo!!lTuR_HV0W>)WLI#Da;(Pl^~2Mkk-Fgj^1wrRU}oB9Nwx5S7`sOB zP+3-sUYm|Fa85)u5lSWbkvTtmWVV*UjyPxx3H~tYpW&)9Ij33+$<;mQl`m7A#z(Z# z`j-^M1VKk7--0@4eq`wz9@#fNuVlCQye_Q2`1Q7A1T8XKskjkt1Y%Oqd#E8yrc4iVUO6h(qQwwR zWdamz26Gau#~ov9^&Z?J)n*^>!kOa;t$gpqafG@HjaQJ+p~a1qp9LdOPO}$uuNc8f zkOW2ugJ=;kW8vBbu0|vY26H$>KT(cfCZ-ve#7u?hN#n2C8V`7!xvx z6|O&ffmY2yGNqchJF5gzv=cnsaj2l*sBA>gh>?+%7-=O&+Jy>-S5`-sgw_P5poRMZ z&eL(910iTfTt>HIfG!~EQk!zqOv&Ku|6Ock^;v1{Nli7%r%QYma;I!cbX zYusufkZX6Efmn;Umku2Q653>38CTct)Yzm#3#n$zt_LEj#i$80W3YuPH}n4BrXs&{ z6@$feP~_+0nP@x6yHkmBuL6fk6S%I(KT>wkV|2nC61a?9>(}g3Ju8u6kx2q_Ji!x% zwvK77nHQXRS0E?jIPGA@j}jt6#3wG!>=2<9y+JUEe~d+IQAt*>xfcfR%YN4~$GDUA z?pV_zzZi2DsmDt0X_o3}o=6`;)&#Qfp~Q7&_$A0wd6U4rHL-wEXjK>MnlWpO8LTRK z{9=|-R@odLu6Yf5qQZP`I-YW{WMZPJQnA|zBTe{w-;qMT^CmFJGm2d$3>moHW6?mF zX`4?1CMl%?RaR-)2*1%Rwq_c<>YM`eLX=}KuR1<n6 zvFTW4;V$_66liI?JM`7GkC;{#l?eYMb`@uxWIuuD3Va+O!`GMj&u~ir{ziDn4m%)J zMu)w#Arqv3nd8e&v{*2EAK~wSA)i8jh-MWyEM~*1oWvZq5Cmv`GIcJB#eGRtiUtmv zv3<>Z`BH^BMD0!-0n;Q~Mm`iEX;aU3afn|NWP$J= zBy~vWiZc{~c3kn%N}5lqNAd!P(61vKT@tIV}*{&e)YFvcTZmdxH14(6z%1 zO!1#{EY%{|&&;;N&rUR=uTLFgA!bn}NWpb?EcwE$f9|t$2Z+3xmk=8_=4$e#CKLq7 zPn!!D42I~Gi4d*y%7@sM5a&t2o9(%K-T+Oqozlu@bRdJ!#-+l@aXkX3Nq((FB6qh;epOq@~@Bzt6qU9EJu_aZ5K(z5G+&eDG^UeR`&)-48j{N6g9jp z#bnWYkV1y`z_AmFKW)C_QbUVi8eDAUrB;>h;S;+a3UiE2S%EcA#{7gBVJLpszuIr1 zlMOk8Kzm%Trxb$NYyys$oNI0ln6m}Jm5v0pD^BOoE=kSe0CS7PpyU_}YaLtB|qMGXy9l zQ{{LpO1!8?&}c}K+{uqN1ZJ!8`S1w2j3{pq!|^0@y$@Vr>Ni9Lhq4K>9w5lLFPKOa zaEWeymC=Kzs;0LmF?h^pW3BfcPb%~drHiRnVIKKl~Co^TEoUzRsd6# zLUa#4XS7qE>pCNJI$<-fhN;l8Dqc*7?wqf*xRw;0<|y0g|N2WxV7+Z5&JVZJ=KPOu z;Q5FHa-y4~K!*!l8Rmde)l2iy!#HTTQ74jifg@b?D2R<+%E1aV!2;%uc)>^8#s^tryP2T5}9|AoA74N#aQ(XPGMY<5`%38(47bZb}IeabtqTSeHoK6sv9M|iZO%) zZa@MzVY5XSP&lSi(V4W)Sr6)v3U2KO56lYDLwzAjS$!kCeJ-S(+x0unzkN zse86xCF0dFMkO_z8sQ z91#+_e8UQ4i~%VV)^uL&TF`F>W0VKXl2S}U?<{K_cN{wK%-6^BjmqpA17l2{GM;38Xe+R|@$fPE&brG9H6YDv6 zP=A<3=ZVNc7i|>49fzpLu?ouj%Krp@jSq#3LqMIGxcHb`?&VLS_a){edXeo( zIl_NEQpmW2Jm0ilpAu_3BGf_{v^<|7$DSqU+?7XoTfAoO6f(l!4&l+8zn%Xu6^u*Y zyb)t^i_Hkc-(!A~xK^x9W_VueFG9j z+Ok_kJb-4Paq2GMfV$(HN}CJinTOQNh=lxtQQ;C3Ys+E?D~c05dwAA8so@k!AjI(8 zzASwL-gB=%SF&Wk2a2ZIrO-P678x*v0|N$ZmP$G|H3;|`0L)=3xe=wDz^AP!B?Ks| zj0l|c=UQI88&H2>rJ6;lfK`PQ0AeKke-(B|?J5bZ8Hx0JTxawH(AMsKv>~b|TyBmy z@PxCq`#IyOy%7nwdDf-7jt~~%oNDJbeBL<{Xdvi>-3#4XkKx42*W2i$DN)b*B(Rw5AQbIf4)DpimKe?>4PEg&HHhI~2G`vy(KXtKwD(>a(szm6N2wnq}4k zSQai}B=nwg!`f6LXDzdYkb2&v4w&m|qe&sTDsHih-OB}o%QCy{Csj2_8KTq_$%7Ir zp+R64c@U+%XDG~U(!TTMniP7W7zPSKOp8EjE{^+U(EW0O7%FF|aylr&LpYYVL{~Lj zf%qin4Ru{e6gyUkNMGwA2@@2OTsUJc+P}`RVH5{r(kZcyHqnQvRa2uRURA5(KY3)1_eKU8`WhzU!-0WvD zpLMOLIW8U(MMU-po?`nsNg!G)cgP2|)D2UPJ4vs3?un+>scv)fhYu#Sx3>ES=qw7Q| za2?M*N>^8fp%Zs=k?c(73Ms{n9*Hp(FtVo_N2GyDI#MW-e#O{0l&_2e{&<(sNS&U) zP{xY1SyjH0r#`RER?5cAVQ8kx0YCN5_-Mf2LcF{GCDmOP6HT#r_0whW`LEj1oC8ez z4DnJ2uY8(nXUTPezSt7Wh$Ryi%m}zLhAPpX)WOP<$+#Ghv^mMp7y<%nV~bftirVVC znF~38M@wPXR1`Z!r*FN!n3KuWC*cC5cWR?j>Futjg;Gb*L1kG~og+bBkyg6Q5=W2A z0#9=UQfv05$rH5oq;eE6C^-CUjD5Z?JV(fw7S;yu#f9g`eCSMyXB!m&zFT-~?Y_G3 ziYGbRtE`iosYEs%W+X_G!3?80Wx{3wyJ(uQkR$qKLOAM198W4KNm{P(v1doiR`MsF zIP}}b*`lei^)n{|y@2`KT({7`zK&P$hcqzdYf>tsM@^+uts426=avfL;*6`!-Qm#b@Pn4jjrkhRhB^WsP`mFb=9+`gY*j}uyN~rCBa(w3}{>$ zRqm+SI@cKtWLrcPLN9T{1sq9H;-GKd9v&tEQ~*l4qNh|JU8Z3lWLFN0tdwRKEz+}8 z`>C~5C7}_%$;5!0B!)v92h#IQ`3gWc-wG405gU<>N0>R{cF>e;YA=w@7ehr*YRhk6 zL|Ou=4~Q^qB;r#*Y>A!KQwd(doLgihTB`9#Tr_Um_Z7pMTxss9)rzx|9fLV7hbqmT zdbOWlDr`tEIHqWnhoq#Sy)+q3kPayF*n!Y4?Xr4+ee@=PHFdf3*$ibWYj|mGYNbHv z_gGi;g?=^zL5EuJ&Q!C{6GyVx(Jws=>j=H$G)7t`PXFO$OO)6alebI7(ho&U(@E}KmDd}?NWhcaV zF4_$0te188`7z~jSfY?D+?T%nAk}V@G9zudXs5bG(a*^cFVOx26^cc!hQ<+BZ$ujy zs5r;4gibaqHY@h?(QrZ2d&32b%!ABGEnku@K02F|PZjTnbc{+=u&7O&?m&cuT#h5@) z1gWiSU>6fBSEsHmqcPhJ$+DqR)u~F>bE|)I%pii57ziE}r3H!-`ZbGS9khk<%cqCW z_t#e+74v?7xrZhGg@oUsszl~=M%SC=hNtC_AWR*Zk5NvpF{2@8MNOwTc4=r$5rqhK zUh(u!B3CF?)>kQ|QxLubfUgZpM_c6QwOr^cnp0g*f}(cF<5N-8Bdo!Png{HcMW5|>;2g`xXdtsp3JbLhi3jkZ zu{i&6J~0OKmHddOmmHg9NLTTk}-Vm3s(u0YvMa$}^OiVh6GEz^%-DX=t4+#bxBj&H zqmA~m+hBGyq1W0}oF5FDFgY6hq&#Q>_r?!TV>f6bjV2wi@Y7}<4^1x!|6WbW-!S?LXf_i>QeG0}L&E>;1%vbupw*rNQ z$rc$$Rlc50Gf_reON8{j$^%*S8%SP5Gf`}n?NAAjf*s=F0_5t_ieycd2`z|<>6#Cd z6&c1O^;9@gw=j*vkb%BXiO^Cpl4;6Uf`Q`fD|b^*W$Kw5Awow*i^yx@DRAPJQ(9vV zRNXeENST%2iK89qDKH~M!_=o8Y)MIGif{{)S)@bV;}|y+M}|2aO5^|sIjE%jY_z@% zA{0Sa&xeBGn{oYf?zJ)XZ__bLnCODwC!JSU(TvFzb0}S?-8MYbkQz^>gqhlaNF6S; z3}Fcx>ldrte6leC)Tv2}mCROb7z!3(x{5(sne`3}JB_7JlMmO~jWQR4r?GDPRvRyR z(kvY(1J{5%o_p{`6dhL4b2mU86GnRYA~#P^#|@Qia$eJpV*hP1QqkyVO&imkhN`We zqJpKJlE=;)=0G?J2Zf&|wJPT17o;@6$ApJM)Cm}%(}{IPTqp}r*r7k*a+3}(_jLb; zC;4y{#N)OQzYslZ9|Jg2!t(VKFfF@;5w!`8`;n?%S!UnD+$|`z2~`gtg?jTxSDi}# zoJHC-0&@iXc}{8JtcLDa02)uwCKS*}N3UJ{K1t=s^VoN(#^IVV2!!k#fxoD2vMmJ~ zO(=--lC_((P2oV+B}2X?VdOG>6-;ZD#CCQ1!R`j&N%nYBsZWd-rmX-n@1$^Vw+CkY zsQp2-uTj^FK##|GtE~69ma9L{hpN`tu|TO#WY8v;(v4PP56IIewo3U6}WqW zd6X?O5loF>LFzhqP-r?{E&CghgHxs)rKti9n9XEBXBnY2as?J6L3mv8N&U{r^NE4@ zK7t!cRd@7i2Of6H@<*1maGpGqzzdi+3to|Q9TL>IhmeM0PH~S$Rf<^8O50`B?ps$^ z>)8T!lI19zsEgG9q)*d^%=DLK>GN zHs^o5{N9=8FSRruoPBb-ySQ|vj<5G7xv7X6yNfm;MmxLyY3iki5{etCN+Qkt@l+v= z-1(de&DElYtgHexy7Y#|rle$uzAMJ9!kU#4y}2RRisG`Y8llz^LAjLHBwOrnnxJ4` z%^kZNa70+kWmF#ct~X71ou+GD?MalzUbArV!efI+?;jc5l?cDv;MRr$Wwf;uSefya z5Djy8XGx)s&!;Y+8UQ_yMx_1~IodYGIvUpk^u`Y@3@(q^hsUgjJD|#4D`SV&H&m)R z&`cw%MZv_a4)Uj37MXFyqGVbafBwko)S~m)>d}O6vbyVX)R55X1Dj`%Uj3YSFgo2H zLc~Csrpi&$l|_KU^ED9n0EseO-Q_W6gHNZH+tOl9B2)qIa=ERO$mN=RrO>w>>Ky~;aYtM0bGFA_LvKc%kfcD znbQRt^FtT*1P#;(iqUK`w&p8sfTd0>9R_MMjg6RJC1z<7r8rX86w_Od(+qeB=!tl` z2en=2WvPi(be(5*<_YknA zSenXDo0+EaU-)dNsg5CZ5zXQb@NGt$KjdFC0tK&wehcxhbd$=@vc3cdI)1Jxn*gfb6P=RN#c&l zak(`?aJ2%xP`Xn%n%_dAQ_qSLx!to+S1D;wD+fsz_7#!i(DwBB3dC6?7?h)EPHc(J z6<3Gv9~-(plAsO*PS$s0*Ky?q`Yg0{k@5Vfoer+qRfT+!m1m_Pjr5fsil<*(?x0=K z6TtTvYFtwC#>6}vu1HgEh?Gm2jRd5q4uy)cU|KHf1r?yL1MSb1@eP=;N>duz60_kz zlUr*-f25Pj4^H?(d#-QusC-nu%1*hNl=-%rHj+B1ex=) z5l|q_of0Fo0#tm*^d9d)2%Kvq`dz1i)W#Jn^=oTo2xOwRJG~9XRRdU(!g+Q^_(4b! z-@Btw$Iod=WDc<>3^Zxrf~ul&y=b?Ghs=Jle0ARj|1817p)6=N-Y3z5yKD2jWWd(S zgQo#^T|E}p%B=~Kb!`sO-n?UFAPib4{%F7_znQw@@_WcS#EP2 z(Y#VzwmNH;Zq(puAd3138}VfqL~AF<*WpARYVA&9z(?<$2H3c`+|VS;qa^cDA6B$= zj(fI)B$G!sh~iBLIL>C<$Uq6R z$Jg3enbK5iHX}$esaN~UY-l2_viHzwmNbO!D?g{ zRdxLy+NIIQrdG`_!R+V%*)Rb}8L+H9!I)0kgXQajK(+q`e0&8Rj8L2OE|c3zS?s#-9nsG zy>!gFe%GtWk?&94Q4%X7#dot(hH98a$~(Hy{oT=Ig63@u7 zuC>CDn3ASzk#LhLY7}n-LHN=woV7VsQn9!ZeZ8}9Bpd8hPTHan#-;n}sZtsdr~o3vb!eR`o)v90EQ+M%k>`U*sho3If8s(e z_yFq>{913F86UwgO?a23XYH;-w>X&azLn8Hd@;8ChhWDnXHZ9~SwR$scdNg6`R^|H zkzm5&!{+iJ@Ze+I%v8LI(8fkb5Cv_Z8Ck?WQl(wwR892V{)D1?Pp7q07SI^>5cE^>@k6y%pUd91n%%zDR zsSaiJC&}0d$u`mSVp%z($3LVIXA|jR64|$^auXGq(gDkzG?kJEV5U_^vL4RL9yvYr zWWYBHQpclQm!ipcv@#hhb9*>p4^m68uL~!nmCjk8ah~7lYNiW5_3FTJ)YVOICsm`b zwToD_65LQwWY5c`ri3oHQmL!+;FVOf0xU~f8VH7fiw7;swE_e|9FH|9RV1#Xkw`;E zYfgom9VJKNC9 zSv9CxQ=PtBg}-u>m>cbKt4N9(`3YD>Zso)vR%N_&vkU8c3kwDdxOycN2%(DWr>PDe z+_)58F_!H4*_cp(1IEry`ID&C}!N_JH>GP_PYv>6t{n1{YwOm830 zvT!qJ&h<8JW+iI>(B##)fHJ=oT3BSAaV9L&(hUG!Q)CuIdBY>!ViN~xK(jL4EJ)gD zbv{uz2_7L(4n_xN%AGN!+&PJJZou?vu<`V}Swa9x3xbdaCIlb(o&6&b-B7k?OQx*O01=Z(|K7Lp3h-^Er0i;{^e#k8g*6@%pbn zO${Dys%XTV9E_k$SUG9u_cA#?bv0*%`=krCQl5xZwFsDfs%=v6m{sXe`R$QL*jPJx zhM{~SO;Xng8*>CfJ=+St-GJ+AC;K!GgGEg{ zp42lhgsN-PLZ~cv#GS~5Ix85I?)alwV$+y!%u$jI%pfP1X%NdgN4>Wrp4jM;iJ^^y zKXw7^k&8Pdh>4yncQdd^U{pcsBrww3x40RUl?5AZbOMlP9A(i#n6Z&ZH!|DA(@ZMj z^r`KJXUV-R^P8s2c-4 z)_^{WX<903G0jT-+tvEFR*8frtam-TzEUI-zEOs1S6uhzdLn6xvhOEB2O|_>67)is z;HIwgirT$XN(fx^ehk0(xTniJm+Oq|%PfaB-((K;vX*J~%Z?df8e}hbukG5sA$oBL zjro*zhay)ujU`>XKfif?;p=d>f*Hq?(?_Emr!u2+CWKLqgnHyXyTojGV}R#+^qQ&E zIyK1B%v+A5bcqDlRA|;4W_aW^iWrkvsN|!oLmQW`ji<|pXWPb)CF0QE8c%AxO7FA= zQGtF^X%u0cHi+s>3fnsk7=T|d>j@xTQZ^HTfv&R6drcylr^aB<4Ur^VW5u+(49rYI zDaM$p8`%r#GH07@yJ|#slO%4l(bp5`Hyy{^hMUnm(%KNft&MUcz-C)J9mQivgeVFI zbB7k@CD!NLmzx(&euY?Pq6#f$n%#hnfzhM~#!DSP8fqD%*=MaTEki6xdPM`5f~l9- zrMgvcGlrCS;s9SZZH~+ahQVH$X@)yUX<`kl-fCGI;tW#Cl>$6UV^eP&(SzqZk#rcA zrCuAj!AR`}+myHRitORUAu7cnOZGwGT@udRH` zciJE4A%%96vBZ!=cdI=jOM6%flBrYDjV#w@Yc)4j`dM2#TozwHl7iTzGpB9Bg%c%J zXr!bFm|dy`5uiQAiUwQgRwz&GByekjan%g8Q%$Ow+zh(=IzVc9qRC-vLhPYC@jG=a zb-T(&?vo|Sqg*Y!sbfAu?9v*!@gR;P-Noydm-gT5aMNPklhYTQS7`r@&N(wQ@N_uC zw3`YMt;cXbxEBaFmE)_grCS+&hb0}Ut+R@w4owgp4u+wSDK(H`o@CT$6Uomj_i^kx zi2yUsYnC2M>tC8sL{&&ouVEW^l{@L6jLYF3X6bp?25#lNirxWGcyEpR*2&3m+b=|; z)2%aI{u8Nt9ZD5!p@F5y9uYz@NJu$ReOa`kQ4N7{qga}|@in>H!6mlPPc@ZlH+2mIAPk!Rp8>&tIv{RV_b^=S)>qILK$@nduiR*xpq7cJjnzE8W;?8 zxi8Po5DZDfRIIhG_;0#S)zNdS2^r|_LQ?nU-!ShvVfpFx`SvRP) z&%4Cg!&;760jh(oV(Ljdq8YLu zmEcWCPpTl)jdbWHv4+TFFz2)r9SB{7j83A?AYvU34U8ZwZmTL8} zj>tVGH%rS+J(ls1omiE+g;@Po0nwy3la67%L{<)vQciMuYQv%Ej|aSpmAumx7AsN} z7}IT!ORt#&X^tabo06O~gcJ$Qv9zW8;1U>xg3Ikp2Z|Ips0^8@LKs_I4(&FviCmPT zVAZGWTQ^he+vTEJx+(#)AQl}s{*9`EbaQO0h7*63nOEd0&r3SAovbt>c$ zX@Wa4!SB%xYPGqPTFMT`BeHwsI-rbOt@U7?B;&dP(4!^u6DG>Y>Ubo#c4fL6!U=gC zS&&Y%=BPOyYG}axA|`9dIZ$e}pU*;eQU`E`raJT+@YIbjx(Tpi;Qid_sdVBUq={9N>sbi7pCuWqcUSr1qBU zQUEG^YULx}(=fH4ak_#{%4Wj1>u^}PGGtUQB`$>0U}6=SO++WB_0W1{77eu~$4~c3 z(vHX!B8X@gc?7N9+Z?sdus?~5qtTa`wqY6^OH~7uS}!!N_kD7)q%?5xyu7WUXaK@5)f?+w@hN-5%8k?A*6Z$YHYg{T?&5~0N_9j(3D=Y(O=|9 zpnu3#g|#|TlC$m|>&68Os$$&qx2D3FPBx6wm}Q`rL5yLE>)@IUI39l;MMmu{%_tFK zOPB0?vOG}j>$e~IVYgf_e=t+&q+VO&YYtR;7td8O)?M-i=;Y=3F_(I;;Mp{?ev}4a zxTZ~;{mM#9u1reuv1S0k^h!3O9w)$?>Ea`=tM(o+Z!Eb^L^;+)_Nd3i9hOZFz-w$# zK1w-!QugT}VxDxp+15+Xdp56Us}4q}pYP8%7w)-&{}PQ2%q`fom9OOl$>k@*k^HHj zI2rM)e$;*r(upDCw~7p;E$xDoBwaovr~;0Sp}%&xoFHh*bfx^)hm*Q`pUiTFLK>lF zJ*v@F(PZeSN$hK0rIhJTr*DDIV^YVFB{m+89o+osB3*oy=}ROm2t(zeO;W+c{FD%t zqb-ogod#1&m`>zbMk*7Y6ljuIgl4+pqAy=Jo%Wzk7`q(Y@|mZ6wA+=rrc{$Eg=36% z>u+ZFfLFX#de!Af`)yfMNg0#et4Cav$5c^$kV;cX0YL)3{q9OEA6?-r3r}7bo*j)b zHtqJgMLgxJT5g$-QYR!DECW^c9x5RL-K5H$-aNPG#c%4c>a6U#B2DSnIW`@_nvH9B zXJnuBN-~0pl>>~vo5_*83p8jh`s}n$^j|ngbAthn5FS(w^a#Y z?O61^R#e1;!~52E7n}Vgs}KEk^ys|?*GSFV@}VEiZl%lty5Z=aRuU;RSY=X5P`n~Z z8fdvYxPLuKl{BcKXmYjnOF(iK6MVg~1OcCIY_rT%-7>o129Mgdr06OsRTMiDJ$(9b z^Y-TUy++&3_Iv}+|DZE5A+O)ATrp4W(|_ap&qV1(OF8A2U~c3vKrFuM$wKjRn5r2% z+g63lneJ?2f+8!$ji;9fAd`@y@F3*KS6-|OmrnjlEI)pVTq?OeyNk%r=OFmOn2nmL zl{sUhR}pzvdmwwphEvmeQ}j-XM^cZIP~wj=HuaM1B#bSU#NS^uD75%HY%H0Pa{d3Wxc@80j;nLBT^lUJ>f zoBv4_B$w! znvYU8MqCZ(K5bK8US3iD*dCU8ss(t-Fw}PcS^YH}k5_XM^t_sw>46X+HY7CQ0c9dA zWi3soT})1(lZJ(ocsoOlXbo;Cc;rb^r3M4gVdt3?d3fY3xM?OX=bpCypLV+hg@$`A@ovW1h|UGN?L;^98RL1K}eer4Q97~S#2#KW2rWZcby>67#i?#*6c+s=qUvnQ4gT((+maMUNu1 z^}5YUz30vy6nB?No3aRjs+!!>Xl6{@elI99P^*XkM=3h|33@iD7o76~N1v-^F}STV zlzZ)urmfn!K^{KBvU)zW-k6+Cs^gT9W6Pp&TB4jo_G!9ruQ3`X4!grXP1+Gp{9d$& znRQ*-7#$I>Yp)f@+~V?H>7A+p6Fh$OBgs4Yzq;f3W(m!yC2~?ZIqfAemX~L}s0+C2 zyJ6*!rWYUq>1urpkR29$wfZMB_tk0Uy$3LsrtnK&G^^(vX-&4)v`G3X&RppmHU1?4 zKr5NE{k>&<{5tDznY3R!9{6jC! zVYXK}n;~ScjqMUo>TbQWq@)<4 z>jZgT6rZ}DgW6iAN7F!wvuZj^8CkF~YDya@*WbJxGsf~PikZVR3w5O-SM`D-_dB-b zw_bk5Ng%2lJP(bOXZ!x1TlyqpLybvnYg?7piU2DoN$c^gB)qarcOz&aWX6AX@5Du8LRT-t5 zwIIng_{m9gRD4{|!)a-)$iwlyB_c|6=&r@UhfJA3y+c3s(!3Vg+8QvU=|!zQwH#|~ zIo5#JnkyC?6o;&)Ec&igC`l3dn#JWSrVT9j1Vf6(jOJ=i{mgjz#t2piiP)#1QS3XA zsB1q%?Mqsi4w7Wb{>3&dYKy)ku9q1iDaZ`yug|pr76gY@wOl+=bW)#7GGHf0onh-_ zyUf)(dvHwKf_RSTDKO6v$i5}{L-=aZC<{OfF5w|_W*^WOgp2gYAUK7!zwy^B=dZFn zi&__;a7%)U;(F}&ty#(k)Qd>6Z6bTnm@ zs&eTy0Fc2l(O!xsWtUiekPV_pL4xSoyQrk5R`I@2ifccjO%(kLhYS&r2%-m>95~qP z$+te?v)(WbPKXD%o>zYu+qSI-KdG82i!410??d~@*H*i#h~NG)3uN5*NW93^ck(f= zI})0{tj?GZNTGeBY2k8QJer>|j$X3ZcXl~w?6o{{bJa$`y6%2GOVgbVn|^Y8se8xH z&rc`7;2Ncwp^8gqmE-;k2uRPEv`5OBEJL-yXHTO_j=DBCnC1#UJ^Wk`rHVw0@V z+|Q&Ach?QKm@njbD`(=Sc!4uXjg`{Vj;7gjaeKC_#HiX#bB6mN7Gs9>NZkQM)vY}$ zO3`PyB!@uF+)blGHQO8_{uuX=IU7B3kv`9{vpE+p|2A^#8wNDrF8LMP36%wY46FR! z(4r{wH^W`~h$u-mdv__6_|pIH$rl1JEewWwZHPHvA|7rwg>_`|L%~2syM*Kz7~?}uyV68z$*6%e2u3wt8sI*5&f&p&Y9bt8#gt`pWVuqY<}X&tEf0 zy}o+$+Ml)@-ySilyT#EQ1Eu_zD=)@JHb5W(`hE~;2<6iO1Et$S>s=@jJwDjGiB`+m zxkk1!9lkKX%NaUdwePI&`TLBc6RVF?B3CH~YKWBeesy?laFzc;zCyrxRE)X4Ia2Yu zlDB`#Yg_AW{=r&{qO}lGUHggvh{duU^TIKj5H}yrR$6$)h>o!4Ln_EBo%9e5ltFTn zsa0UGP8mHZLJga7lE({Mc55a&>68wQl~!7vGrU90z$5t7GUVToAHj{4))XTrXS8E} z$LGfgg{X7WQXhtmXUF3b*wHjTS7~?sc*}BBXvscn_B&s-kZt%ZcIaVro1S)CYOZlP z>tq3vvnwA_#H?~ybqnL&ay9Q-%%ABCC(y1Q^*_ZO? z2DFgSkr;Nylsa;r(h<{@*SecV9)xCUZTc8J`yaq!WX(Sb66qrc=Ek+(bo#DD9hepMT0dBTWTlv8J#@( zlpfPcZxhYXSvf;>NlB<;_iz3Y{Zm+WdRVbgm8YYan=T|YsZF#6(@%oIzZUw^(N(93 z)7^!7+=%Si#uI{?^f_F6t-u+mbHJ2VM&`qs1g5kON&i8-{oOhOQ)(=owx=7z+Cxu; zBKTyGPhxT9=K?NG2E%v%GKJbJQ|QxXPJfuIbNpUSuxuK_nNFZ3_Lq6e$s1?HF2|RG zJga^G+XbYv%fDfL((N4qdoPA4wK^Rim+Soj>vW{k`o{HbJD|?K<0`m>1SmMNpOK6Cn_rjJkhp~8{#8zVJ1!Y&?$b3u z1T*jyA}N6$xYv$g6y)U(6Mh9Pg&-sE&f0;gprkv{9BhkVc7HCam5a&d7T&GEW|~9K zNymLd>fJ(KisPAKrDMNwjfvbJc!4R|c&}+Pjt!sioj|cG%Y<-8{9v&Zb?U`nT4B8( zY$8Vg9dzr&%=!V9)d!a2u3AJ*@a42Z{}+Y+rs=RZQr`2cU1y1>}i?QzcIfX~0Tgs5qYhubgTd z_;H)7G&56tGqR+CRUhKghnyaOEW~vzw2dOd8o>Tqx>(}LGYq8#t)-p+KrXrnwCT;? zwVe06=Z^p#R=CQFLHCi)a;yDaM+nqsm!DeKZr~3q-SA8*{Z`vw?@Pai&IA*8^sy5< z9v$)YOF*ZSd_`~T=fYToR!B?z>_ms4rvK(EcWfk~4Cz2rtzheAHIv@pW^db7zQN4i z7Dhz}--;bCwTbRNFP-_NhKJXJAgc+8DhC%B-~hhPM;svn5o4e}LX<$#cA$z!7BR)> ztk1c+Eh8MV@}1v_Q0gv+zbDz-H)f=LPTibaH#WC_vIK~*ywD}uiytMuYVAZs^>RdE z%sEJ=T==WD1s777;EEGAAAEEIHHIIIIIIIIIIIIIIBBBIIIIH==<<<<>>D?1112544556::03---//25.22=;DD?;;;>BDDDEEEGGGA<8889>?999<0////8888>=??@DDDDFFFF???:;;;;AAA???DDDDFFFAAAAFFD8AAFFFC???CFFFFFFFFFFFFFFFFAAAAFFFFCCCF<<<=424226622....666=?==4466444@?4444==?;;;9688<0...:::9<:7988989????984444A@?AABBA=?==; AS:i:260 XS:i:239 XF:i:2 XE:i:3 XN:i:1 RG:Z:mu16_454_mu16 diff --git a/tests/pysam_data/ex9_nofail.sam b/tests/pysam_data/ex9_nofail.sam new file mode 100644 index 0000000..ee31dca --- /dev/null +++ b/tests/pysam_data/ex9_nofail.sam @@ -0,0 +1,1021 @@ +@HD VN:1.0 GO:none SO:coordinate +@SQ SN:CUTC000001 LN:810 +@SQ SN:CUTC000002 LN:1213 +@SQ SN:CUTC000003 LN:525 +@SQ SN:CUTC000004 LN:620 +@SQ SN:CUTC000005 LN:550 +@SQ SN:CUTC000006 LN:723 +@SQ SN:CUTC000007 LN:773 +@SQ SN:CUTC000008 LN:667 +@SQ SN:CUTC000009 LN:593 +@SQ SN:CUTC000010 LN:556 +@SQ SN:CUTC000011 LN:519 +@SQ SN:CUTC000012 LN:537 +@SQ SN:CUTC000013 LN:930 +@SQ SN:CUTC000014 LN:944 +@SQ SN:CUTC000015 LN:829 +@SQ SN:CUTC000016 LN:1109 +@SQ SN:CUTC000017 LN:513 +@SQ SN:CUTC000018 LN:1043 +@SQ SN:CUTC000019 LN:884 +@SQ SN:CUTC000020 LN:567 +@SQ SN:CUTC000021 LN:1001 +@SQ SN:CUTC000022 LN:754 +@SQ SN:CUTC000023 LN:1045 +@SQ SN:CUTC000024 LN:1091 +@SQ SN:CUTC000025 LN:606 +@SQ SN:CUTC000026 LN:635 +@SQ SN:CUTC000027 LN:563 +@SQ SN:CUTC000028 LN:830 +@SQ SN:CUTC000029 LN:1456 +@SQ SN:CUTC000030 LN:872 +@SQ SN:CUTC000031 LN:742 +@SQ SN:CUTC000032 LN:553 +@SQ SN:CUTC000033 LN:624 +@SQ SN:CUTC000034 LN:641 +@SQ SN:CUTC000035 LN:695 +@SQ SN:CUTC000036 LN:1519 +@SQ SN:CUTC000037 LN:536 +@SQ SN:CUTC000038 LN:619 +@SQ SN:CUTC000039 LN:643 +@SQ SN:CUTC000040 LN:650 +@SQ SN:CUTC000041 LN:571 +@SQ SN:CUTC000042 LN:1457 +@SQ SN:CUTC000043 LN:618 +@SQ SN:CUTC000044 LN:1261 +@SQ SN:CUTC000045 LN:544 +@SQ SN:CUTC000046 LN:1234 +@SQ SN:CUTC000047 LN:867 +@SQ SN:CUTC000048 LN:792 +@SQ SN:CUTC000049 LN:1076 +@SQ SN:CUTC000050 LN:479 +@SQ SN:CUTC000051 LN:584 +@SQ SN:CUTC000052 LN:841 +@SQ SN:CUTC000053 LN:518 +@SQ SN:CUTC000054 LN:1052 +@SQ SN:CUTC000055 LN:626 +@SQ SN:CUTC000056 LN:773 +@SQ SN:CUTC000057 LN:542 +@SQ SN:CUTC000058 LN:566 +@SQ SN:CUTC000059 LN:931 +@SQ SN:CUTC000060 LN:755 +@SQ SN:CUTC000061 LN:606 +@SQ SN:CUTC000062 LN:640 +@SQ SN:CUTC000063 LN:667 +@SQ SN:CUTC000064 LN:1717 +@SQ SN:CUTC000065 LN:695 +@SQ SN:CUTC000066 LN:1735 +@SQ SN:CUTC000067 LN:474 +@SQ SN:CUTC000068 LN:813 +@SQ SN:CUTC000069 LN:746 +@SQ SN:CUTC000070 LN:1141 +@SQ SN:CUTC000071 LN:624 +@SQ SN:CUTC000072 LN:1097 +@SQ SN:CUTC000073 LN:510 +@SQ SN:CUTC000074 LN:638 +@SQ SN:CUTC000075 LN:682 +@SQ SN:CUTC000076 LN:1043 +@SQ SN:CUTC000077 LN:727 +@SQ SN:CUTC000078 LN:1124 +@SQ SN:CUTC000079 LN:711 +@SQ SN:CUTC000080 LN:578 +@SQ SN:CUTC000081 LN:718 +@SQ SN:CUTC000082 LN:1779 +@SQ SN:CUTC000083 LN:630 +@SQ SN:CUTC000084 LN:850 +@SQ SN:CUTC000085 LN:590 +@SQ SN:CUTC000086 LN:578 +@SQ SN:CUTC000087 LN:727 +@SQ SN:CUTC000088 LN:582 +@SQ SN:CUTC000089 LN:632 +@SQ SN:CUTC000090 LN:792 +@SQ SN:CUTC000091 LN:553 +@SQ SN:CUTC000092 LN:606 +@SQ SN:CUTC000093 LN:1263 +@SQ SN:CUTC000094 LN:1119 +@SQ SN:CUTC000095 LN:1107 +@SQ SN:CUTC000096 LN:1240 +@SQ SN:CUTC000097 LN:578 +@SQ SN:CUTC000098 LN:739 +@SQ SN:CUTC000099 LN:959 +@SQ SN:CUTC000100 LN:701 +@SQ SN:CUTC000101 LN:1047 +@SQ SN:CUTC000102 LN:961 +@SQ SN:CUTC000103 LN:548 +@SQ SN:CUTC000104 LN:579 +@SQ SN:CUTC000105 LN:1376 +@SQ SN:CUTC000106 LN:1202 +@SQ SN:CUTC000107 LN:615 +@SQ SN:CUTC000108 LN:634 +@SQ SN:CUTC000109 LN:742 +@SQ SN:CUTC000110 LN:645 +@SQ SN:CUTC000111 LN:567 +@SQ SN:CUTC000112 LN:715 +@SQ SN:CUTC000113 LN:705 +@SQ SN:CUTC000114 LN:548 +@SQ SN:CUTC000115 LN:555 +@SQ SN:CUTC000116 LN:1370 +@SQ SN:CUTC000117 LN:715 +@SQ SN:CUTC000118 LN:737 +@SQ SN:CUTC000119 LN:595 +@SQ SN:CUTC000120 LN:674 +@SQ SN:CUTC000121 LN:858 +@SQ SN:CUTC000122 LN:571 +@SQ SN:CUTC000123 LN:656 +@SQ SN:CUTC000124 LN:923 +@SQ SN:CUTC000125 LN:487 +@SQ SN:CUTC000126 LN:488 +@SQ SN:CUTC000127 LN:548 +@SQ SN:CUTC000128 LN:547 +@SQ SN:CUTC000129 LN:593 +@SQ SN:CUTC000130 LN:980 +@SQ SN:CUTC000131 LN:605 +@SQ SN:CUTC000132 LN:942 +@SQ SN:CUTC000133 LN:599 +@SQ SN:CUTC000134 LN:755 +@SQ SN:CUTC000135 LN:544 +@SQ SN:CUTC000136 LN:623 +@SQ SN:CUTC000137 LN:680 +@SQ SN:CUTC000138 LN:633 +@SQ SN:CUTC000139 LN:4441 +@SQ SN:CUTC000140 LN:894 +@SQ SN:CUTC000141 LN:688 +@SQ SN:CUTC000142 LN:683 +@SQ SN:CUTC000143 LN:679 +@SQ SN:CUTC000144 LN:698 +@SQ SN:CUTC000145 LN:629 +@SQ SN:CUTC000146 LN:534 +@SQ SN:CUTC000147 LN:643 +@SQ SN:CUTC000148 LN:614 +@SQ SN:CUTC000149 LN:845 +@SQ SN:CUTC000150 LN:652 +@SQ SN:CUTC000151 LN:1332 +@SQ SN:CUTC000152 LN:1091 +@SQ SN:CUTC000153 LN:702 +@SQ SN:CUTC000154 LN:677 +@SQ SN:CUTC000155 LN:902 +@SQ SN:CUTC000156 LN:557 +@SQ SN:CUTC000157 LN:735 +@SQ SN:CUTC000158 LN:940 +@SQ SN:CUTC000159 LN:668 +@SQ SN:CUTC000160 LN:2002 +@SQ SN:CUTC000161 LN:665 +@SQ SN:CUTC000162 LN:907 +@SQ SN:CUTC000163 LN:497 +@SQ SN:CUTC000164 LN:966 +@SQ SN:CUTC000165 LN:645 +@SQ SN:CUTC000166 LN:595 +@SQ SN:CUTC000167 LN:651 +@SQ SN:CUTC000168 LN:410 +@SQ SN:CUTC000169 LN:1122 +@SQ SN:CUTC000170 LN:1021 +@SQ SN:CUTC000171 LN:804 +@SQ SN:CUTC000172 LN:972 +@SQ SN:CUTC000173 LN:1839 +@SQ SN:CUTC000174 LN:647 +@SQ SN:CUTC000175 LN:675 +@SQ SN:CUTC000176 LN:647 +@SQ SN:CUTC000177 LN:1713 +@SQ SN:CUTC000178 LN:911 +@SQ SN:CUTC000179 LN:664 +@SQ SN:CUTC000180 LN:765 +@SQ SN:CUTC000181 LN:950 +@SQ SN:CUTC000182 LN:914 +@SQ SN:CUTC000183 LN:1166 +@SQ SN:CUTC000184 LN:834 +@SQ SN:CUTC000185 LN:812 +@SQ SN:CUTC000186 LN:793 +@SQ SN:CUTC000187 LN:1148 +@SQ SN:CUTC000188 LN:1376 +@SQ SN:CUTC000189 LN:724 +@SQ SN:CUTC000190 LN:762 +@SQ SN:CUTC000191 LN:940 +@SQ SN:CUTC000192 LN:707 +@SQ SN:CUTC000193 LN:1596 +@SQ SN:CUTC000194 LN:557 +@SQ SN:CUTC000195 LN:596 +@SQ SN:CUTC000196 LN:930 +@SQ SN:CUTC000197 LN:1447 +@SQ SN:CUTC000198 LN:566 +@SQ SN:CUTC000199 LN:686 +@SQ SN:CUTC000200 LN:685 +@SQ SN:CUTC000201 LN:579 +@SQ SN:CUTC000202 LN:1282 +@SQ SN:CUTC000203 LN:1601 +@SQ SN:CUTC000204 LN:1034 +@SQ SN:CUTC000205 LN:1370 +@SQ SN:CUTC000206 LN:530 +@SQ SN:CUTC000207 LN:947 +@SQ SN:CUTC000208 LN:655 +@SQ SN:CUTC000209 LN:611 +@SQ SN:CUTC000210 LN:700 +@SQ SN:CUTC000211 LN:940 +@SQ SN:CUTC000212 LN:496 +@SQ SN:CUTC000213 LN:849 +@SQ SN:CUTC000214 LN:713 +@SQ SN:CUTC000215 LN:879 +@SQ SN:CUTC000216 LN:686 +@SQ SN:CUTC000217 LN:655 +@SQ SN:CUTC000218 LN:1139 +@SQ SN:CUTC000219 LN:712 +@SQ SN:CUTC000220 LN:987 +@SQ SN:CUTC000221 LN:581 +@SQ SN:CUTC000222 LN:867 +@SQ SN:CUTC000223 LN:1591 +@SQ SN:CUTC000224 LN:661 +@SQ SN:CUTC000225 LN:1490 +@SQ SN:CUTC000226 LN:1207 +@SQ SN:CUTC000227 LN:785 +@SQ SN:CUTC000228 LN:700 +@SQ SN:CUTC000229 LN:474 +@SQ SN:CUTC000230 LN:539 +@SQ SN:CUTC000231 LN:1095 +@SQ SN:CUTC000232 LN:556 +@SQ SN:CUTC000233 LN:609 +@SQ SN:CUTC000234 LN:1335 +@SQ SN:CUTC000235 LN:566 +@SQ SN:CUTC000236 LN:612 +@SQ SN:CUTC000237 LN:918 +@SQ SN:CUTC000238 LN:572 +@SQ SN:CUTC000239 LN:690 +@SQ SN:CUTC000240 LN:539 +@SQ SN:CUTC000241 LN:1861 +@SQ SN:CUTC000242 LN:730 +@SQ SN:CUTC000243 LN:775 +@SQ SN:CUTC000244 LN:1439 +@SQ SN:CUTC000245 LN:687 +@SQ SN:CUTC000246 LN:754 +@SQ SN:CUTC000247 LN:646 +@SQ SN:CUTC000248 LN:543 +@SQ SN:CUTC000249 LN:1182 +@SQ SN:CUTC000250 LN:650 +@SQ SN:CUTC000251 LN:732 +@SQ SN:CUTC000252 LN:1040 +@SQ SN:CUTC000253 LN:979 +@SQ SN:CUTC000254 LN:1055 +@SQ SN:CUTC000255 LN:971 +@SQ SN:CUTC000256 LN:817 +@SQ SN:CUTC000257 LN:606 +@SQ SN:CUTC000258 LN:624 +@SQ SN:CUTC000259 LN:516 +@SQ SN:CUTC000260 LN:987 +@SQ SN:CUTC000261 LN:1071 +@SQ SN:CUTC000262 LN:588 +@SQ SN:CUTC000263 LN:1389 +@SQ SN:CUTC000264 LN:672 +@SQ SN:CUTC000265 LN:954 +@SQ SN:CUTC000266 LN:1072 +@SQ SN:CUTC000267 LN:713 +@SQ SN:CUTC000268 LN:1192 +@SQ SN:CUTC000269 LN:540 +@SQ SN:CUTC000270 LN:592 +@SQ SN:CUTC000271 LN:901 +@SQ SN:CUTC000272 LN:420 +@SQ SN:CUTC000273 LN:670 +@SQ SN:CUTC000274 LN:1088 +@SQ SN:CUTC000275 LN:786 +@SQ SN:CUTC000276 LN:846 +@SQ SN:CUTC000277 LN:839 +@SQ SN:CUTC000278 LN:901 +@SQ SN:CUTC000279 LN:3005 +@SQ SN:CUTC000280 LN:727 +@SQ SN:CUTC000281 LN:982 +@SQ SN:CUTC000282 LN:553 +@SQ SN:CUTC000283 LN:513 +@SQ SN:CUTC000284 LN:666 +@SQ SN:CUTC000285 LN:480 +@SQ SN:CUTC000286 LN:726 +@SQ SN:CUTC000287 LN:1225 +@SQ SN:CUTC000288 LN:783 +@SQ SN:CUTC000289 LN:802 +@SQ SN:CUTC000290 LN:1190 +@SQ SN:CUTC000291 LN:1323 +@SQ SN:CUTC000292 LN:700 +@SQ SN:CUTC000293 LN:748 +@SQ SN:CUTC000294 LN:840 +@SQ SN:CUTC000295 LN:447 +@SQ SN:CUTC000296 LN:475 +@SQ SN:CUTC000297 LN:693 +@SQ SN:CUTC000298 LN:838 +@SQ SN:CUTC000299 LN:933 +@SQ SN:CUTC000300 LN:1175 +@SQ SN:CUTC000301 LN:795 +@SQ SN:CUTC000302 LN:514 +@SQ SN:CUTC000303 LN:650 +@SQ SN:CUTC000304 LN:1015 +@SQ SN:CUTC000305 LN:869 +@SQ SN:CUTC000306 LN:1218 +@SQ SN:CUTC000307 LN:943 +@SQ SN:CUTC000308 LN:879 +@SQ SN:CUTC000309 LN:758 +@SQ SN:CUTC000310 LN:895 +@SQ SN:CUTC000311 LN:1060 +@SQ SN:CUTC000312 LN:1414 +@SQ SN:CUTC000313 LN:1841 +@SQ SN:CUTC000314 LN:1040 +@SQ SN:CUTC000315 LN:769 +@SQ SN:CUTC000316 LN:1400 +@SQ SN:CUTC000317 LN:1097 +@SQ SN:CUTC000318 LN:953 +@SQ SN:CUTC000319 LN:793 +@SQ SN:CUTC000320 LN:840 +@SQ SN:CUTC000321 LN:734 +@SQ SN:CUTC000322 LN:528 +@SQ SN:CUTC000323 LN:492 +@SQ SN:CUTC000324 LN:737 +@SQ SN:CUTC000325 LN:681 +@SQ SN:CUTC000326 LN:446 +@SQ SN:CUTC000327 LN:836 +@SQ SN:CUTC000328 LN:745 +@SQ SN:CUTC000329 LN:1514 +@SQ SN:CUTC000330 LN:773 +@SQ SN:CUTC000331 LN:608 +@SQ SN:CUTC000332 LN:814 +@SQ SN:CUTC000333 LN:655 +@SQ SN:CUTC000334 LN:697 +@SQ SN:CUTC000335 LN:818 +@SQ SN:CUTC000336 LN:650 +@SQ SN:CUTC000337 LN:1787 +@SQ SN:CUTC000338 LN:695 +@SQ SN:CUTC000339 LN:1638 +@SQ SN:CUTC000340 LN:903 +@SQ SN:CUTC000341 LN:638 +@SQ SN:CUTC000342 LN:659 +@SQ SN:CUTC000343 LN:1335 +@SQ SN:CUTC000344 LN:775 +@SQ SN:CUTC000345 LN:834 +@SQ SN:CUTC000346 LN:1356 +@SQ SN:CUTC000347 LN:1566 +@SQ SN:CUTC000348 LN:1240 +@SQ SN:CUTC000349 LN:810 +@SQ SN:CUTC000350 LN:885 +@SQ SN:CUTC000351 LN:532 +@SQ SN:CUTC000352 LN:434 +@SQ SN:CUTC000353 LN:705 +@SQ SN:CUTC000354 LN:740 +@SQ SN:CUTC000355 LN:833 +@SQ SN:CUTC000356 LN:680 +@SQ SN:CUTC000357 LN:1362 +@SQ SN:CUTC000358 LN:621 +@SQ SN:CUTC000359 LN:1108 +@SQ SN:CUTC000360 LN:721 +@SQ SN:CUTC000361 LN:709 +@SQ SN:CUTC000362 LN:908 +@SQ SN:CUTC000363 LN:1044 +@SQ SN:CUTC000364 LN:701 +@SQ SN:CUTC000365 LN:798 +@SQ SN:CUTC000366 LN:550 +@SQ SN:CUTC000367 LN:1007 +@SQ SN:CUTC000368 LN:1355 +@SQ SN:CUTC000369 LN:469 +@SQ SN:CUTC000370 LN:629 +@SQ SN:CUTC000371 LN:1065 +@SQ SN:CUTC000372 LN:415 +@SQ SN:CUTC000373 LN:977 +@SQ SN:CUTC000374 LN:547 +@SQ SN:CUTC000375 LN:699 +@SQ SN:CUTC000376 LN:1150 +@SQ SN:CUTC000377 LN:576 +@SQ SN:CUTC000378 LN:626 +@SQ SN:CUTC000379 LN:1326 +@SQ SN:CUTC000380 LN:621 +@SQ SN:CUTC000381 LN:900 +@SQ SN:CUTC000382 LN:1573 +@SQ SN:CUTC000383 LN:634 +@SQ SN:CUTC000384 LN:1186 +@SQ SN:CUTC000385 LN:623 +@SQ SN:CUTC000386 LN:1082 +@SQ SN:CUTC000387 LN:948 +@SQ SN:CUTC000388 LN:912 +@SQ SN:CUTC000389 LN:1564 +@SQ SN:CUTC000390 LN:1046 +@SQ SN:CUTC000391 LN:1302 +@SQ SN:CUTC000392 LN:1070 +@SQ SN:CUTC000393 LN:519 +@SQ SN:CUTC000394 LN:558 +@SQ SN:CUTC000395 LN:802 +@SQ SN:CUTC000396 LN:592 +@SQ SN:CUTC000397 LN:903 +@SQ SN:CUTC000398 LN:926 +@SQ SN:CUTC000399 LN:1054 +@SQ SN:CUTC000400 LN:626 +@SQ SN:CUTC000401 LN:1078 +@SQ SN:CUTC000402 LN:1369 +@SQ SN:CUTC000403 LN:1616 +@SQ SN:CUTC000404 LN:608 +@SQ SN:CUTC000405 LN:1418 +@SQ SN:CUTC000406 LN:583 +@SQ SN:CUTC000407 LN:658 +@SQ SN:CUTC000408 LN:1265 +@SQ SN:CUTC000409 LN:745 +@SQ SN:CUTC000410 LN:690 +@SQ SN:CUTC000411 LN:609 +@SQ SN:CUTC000412 LN:1061 +@SQ SN:CUTC000413 LN:899 +@SQ SN:CUTC000414 LN:925 +@SQ SN:CUTC000415 LN:552 +@SQ SN:CUTC000416 LN:559 +@SQ SN:CUTC000417 LN:964 +@SQ SN:CUTC000418 LN:855 +@SQ SN:CUTC000419 LN:1045 +@SQ SN:CUTC000420 LN:1479 +@SQ SN:CUTC000421 LN:537 +@SQ SN:CUTC000422 LN:1080 +@SQ SN:CUTC000423 LN:792 +@SQ SN:CUTC000424 LN:1201 +@SQ SN:CUTC000425 LN:1332 +@SQ SN:CUTC000426 LN:929 +@SQ SN:CUTC000427 LN:606 +@SQ SN:CUTC000428 LN:727 +@SQ SN:CUTC000429 LN:1085 +@SQ SN:CUTC000430 LN:504 +@SQ SN:CUTC000431 LN:1231 +@SQ SN:CUTC000432 LN:859 +@SQ SN:CUTC000433 LN:728 +@SQ SN:CUTC000434 LN:553 +@SQ SN:CUTC000435 LN:1124 +@SQ SN:CUTC000436 LN:1430 +@SQ SN:CUTC000437 LN:1770 +@SQ SN:CUTC000438 LN:831 +@SQ SN:CUTC000439 LN:1062 +@SQ SN:CUTC000440 LN:945 +@SQ SN:CUTC000441 LN:1082 +@SQ SN:CUTC000442 LN:2057 +@SQ SN:CUTC000443 LN:1425 +@SQ SN:CUTC000444 LN:1133 +@SQ SN:CUTC000445 LN:1478 +@SQ SN:CUTC000446 LN:755 +@SQ SN:CUTC000447 LN:548 +@SQ SN:CUTC000448 LN:1087 +@SQ SN:CUTC000449 LN:594 +@SQ SN:CUTC000450 LN:1012 +@SQ SN:CUTC000451 LN:1777 +@SQ SN:CUTC000452 LN:631 +@SQ SN:CUTC000453 LN:914 +@SQ SN:CUTC000454 LN:1701 +@SQ SN:CUTC000455 LN:869 +@SQ SN:CUTC000456 LN:1024 +@SQ SN:CUTC000457 LN:802 +@SQ SN:CUTC000458 LN:663 +@SQ SN:CUTC000459 LN:951 +@SQ SN:CUTC000460 LN:739 +@SQ SN:CUTC000461 LN:658 +@SQ SN:CUTC000462 LN:1055 +@SQ SN:CUTC000463 LN:807 +@SQ SN:CUTC000464 LN:1157 +@SQ SN:CUTC000465 LN:1340 +@SQ SN:CUTC000466 LN:1016 +@SQ SN:CUTC000467 LN:646 +@SQ SN:CUTC000468 LN:998 +@SQ SN:CUTC000469 LN:687 +@SQ SN:CUTC000470 LN:919 +@SQ SN:CUTC000471 LN:1062 +@SQ SN:CUTC000472 LN:1454 +@SQ SN:CUTC000473 LN:875 +@SQ SN:CUTC000474 LN:774 +@SQ SN:CUTC000475 LN:671 +@SQ SN:CUTC000476 LN:880 +@SQ SN:CUTC000477 LN:1297 +@SQ SN:CUTC000478 LN:722 +@SQ SN:CUTC000479 LN:985 +@SQ SN:CUTC000480 LN:797 +@SQ SN:CUTC000481 LN:741 +@SQ SN:CUTC000482 LN:598 +@SQ SN:CUTC000483 LN:841 +@SQ SN:CUTC000484 LN:1193 +@SQ SN:CUTC000485 LN:856 +@SQ SN:CUTC000486 LN:1020 +@SQ SN:CUTC000487 LN:984 +@SQ SN:CUTC000488 LN:1145 +@SQ SN:CUTC000489 LN:862 +@SQ SN:CUTC000490 LN:558 +@SQ SN:CUTC000491 LN:484 +@SQ SN:CUTC000492 LN:1097 +@SQ SN:CUTC000493 LN:763 +@SQ SN:CUTC000494 LN:2369 +@SQ SN:CUTC000495 LN:993 +@SQ SN:CUTC000496 LN:716 +@SQ SN:CUTC000497 LN:590 +@SQ SN:CUTC000498 LN:992 +@SQ SN:CUTC000499 LN:1223 +@SQ SN:CUTC000500 LN:956 +@SQ SN:CUTC000501 LN:761 +@SQ SN:CUTC000502 LN:1533 +@SQ SN:CUTC000503 LN:951 +@SQ SN:CUTC000504 LN:1599 +@SQ SN:CUTC000505 LN:1393 +@SQ SN:CUTC000506 LN:1064 +@SQ SN:CUTC000507 LN:1198 +@SQ SN:CUTC000508 LN:650 +@SQ SN:CUTC000509 LN:1190 +@SQ SN:CUTC000510 LN:1168 +@SQ SN:CUTC000511 LN:926 +@SQ SN:CUTC000512 LN:1528 +@SQ SN:CUTC000513 LN:516 +@SQ SN:CUTC000514 LN:886 +@SQ SN:CUTC000515 LN:779 +@SQ SN:CUTC000516 LN:955 +@SQ SN:CUTC000517 LN:1795 +@SQ SN:CUTC000518 LN:1028 +@SQ SN:CUTC000519 LN:799 +@SQ SN:CUTC000520 LN:1170 +@SQ SN:CUTC000521 LN:1348 +@SQ SN:CUTC000522 LN:611 +@SQ SN:CUTC000523 LN:795 +@SQ SN:CUTC000524 LN:767 +@SQ SN:CUTC000525 LN:679 +@SQ SN:CUTC000526 LN:1216 +@SQ SN:CUTC000527 LN:1105 +@SQ SN:CUTC000528 LN:757 +@SQ SN:CUTC000529 LN:951 +@SQ SN:CUTC000530 LN:446 +@SQ SN:CUTC000531 LN:759 +@SQ SN:CUTC000532 LN:751 +@SQ SN:CUTC000533 LN:629 +@SQ SN:CUTC000534 LN:903 +@SQ SN:CUTC000535 LN:652 +@SQ SN:CUTC000536 LN:584 +@SQ SN:CUTC000537 LN:785 +@SQ SN:CUTC000538 LN:3820 +@SQ SN:CUTC000539 LN:582 +@SQ SN:CUTC000540 LN:980 +@SQ SN:CUTC000541 LN:613 +@SQ SN:CUTC000542 LN:978 +@SQ SN:CUTC000543 LN:1717 +@SQ SN:CUTC000544 LN:1069 +@SQ SN:CUTC000545 LN:770 +@SQ SN:CUTC000546 LN:1249 +@SQ SN:CUTC000547 LN:940 +@SQ SN:CUTC000548 LN:1018 +@SQ SN:CUTC000549 LN:962 +@SQ SN:CUTC000550 LN:768 +@SQ SN:CUTC000551 LN:576 +@SQ SN:CUTC000552 LN:687 +@SQ SN:CUTC000553 LN:1354 +@SQ SN:CUTC000554 LN:664 +@SQ SN:CUTC000555 LN:847 +@SQ SN:CUTC000556 LN:1580 +@SQ SN:CUTC000557 LN:950 +@SQ SN:CUTC000558 LN:877 +@SQ SN:CUTC000559 LN:857 +@SQ SN:CUTC000560 LN:802 +@SQ SN:CUTC000561 LN:1022 +@SQ SN:CUTC000562 LN:1082 +@SQ SN:CUTC000563 LN:623 +@SQ SN:CUTC000564 LN:1403 +@SQ SN:CUTC000565 LN:1766 +@SQ SN:CUTC000566 LN:891 +@SQ SN:CUTC000567 LN:864 +@SQ SN:CUTC000568 LN:1010 +@SQ SN:CUTC000569 LN:510 +@SQ SN:CUTC000570 LN:812 +@SQ SN:CUTC000571 LN:582 +@SQ SN:CUTC000572 LN:677 +@SQ SN:CUTC000573 LN:899 +@SQ SN:CUTC000574 LN:1121 +@SQ SN:CUTC000575 LN:601 +@SQ SN:CUTC000576 LN:1757 +@SQ SN:CUTC000577 LN:1015 +@SQ SN:CUTC000578 LN:1147 +@SQ SN:CUTC000579 LN:692 +@SQ SN:CUTC000580 LN:638 +@SQ SN:CUTC000581 LN:504 +@SQ SN:CUTC000582 LN:945 +@SQ SN:CUTC000583 LN:512 +@SQ SN:CUTC000584 LN:761 +@SQ SN:CUTC000585 LN:957 +@SQ SN:CUTC000586 LN:611 +@SQ SN:CUTC000587 LN:776 +@SQ SN:CUTC000588 LN:658 +@SQ SN:CUTC000589 LN:727 +@SQ SN:CUTC000590 LN:833 +@SQ SN:CUTC000591 LN:488 +@SQ SN:CUTC000592 LN:774 +@SQ SN:CUTC000593 LN:784 +@SQ SN:CUTC000594 LN:835 +@SQ SN:CUTC000595 LN:752 +@SQ SN:CUTC000596 LN:523 +@SQ SN:CUTC000597 LN:468 +@SQ SN:CUTC000598 LN:1021 +@SQ SN:CUTC000599 LN:982 +@SQ SN:CUTC000600 LN:671 +@SQ SN:CUTC000601 LN:1063 +@SQ SN:CUTC000602 LN:482 +@SQ SN:CUTC000603 LN:1087 +@SQ SN:CUTC000604 LN:1043 +@SQ SN:CUTC000605 LN:1176 +@SQ SN:CUTC000606 LN:897 +@SQ SN:CUTC000607 LN:764 +@SQ SN:CUTC000608 LN:1724 +@SQ SN:CUTC000609 LN:579 +@SQ SN:CUTC000610 LN:657 +@SQ SN:CUTC000611 LN:627 +@SQ SN:CUTC000612 LN:1110 +@SQ SN:CUTC000613 LN:1065 +@SQ SN:CUTC000614 LN:765 +@SQ SN:CUTC000615 LN:813 +@SQ SN:CUTC000616 LN:1510 +@SQ SN:CUTC000617 LN:906 +@SQ SN:CUTC000618 LN:1733 +@SQ SN:CUTC000619 LN:490 +@SQ SN:CUTC000620 LN:841 +@SQ SN:CUTC000621 LN:1331 +@SQ SN:CUTC000622 LN:1082 +@SQ SN:CUTC000623 LN:1310 +@SQ SN:CUTC000624 LN:977 +@SQ SN:CUTC000625 LN:1122 +@SQ SN:CUTC000626 LN:613 +@SQ SN:CUTC000627 LN:486 +@SQ SN:CUTC000628 LN:1411 +@SQ SN:CUTC000629 LN:1005 +@SQ SN:CUTC000630 LN:1090 +@SQ SN:CUTC000631 LN:715 +@SQ SN:CUTC000632 LN:1475 +@SQ SN:CUTC000633 LN:823 +@SQ SN:CUTC000634 LN:949 +@SQ SN:CUTC000635 LN:1125 +@SQ SN:CUTC000636 LN:904 +@SQ SN:CUTC000637 LN:472 +@SQ SN:CUTC000638 LN:668 +@SQ SN:CUTC000639 LN:788 +@SQ SN:CUTC000640 LN:1314 +@SQ SN:CUTC000641 LN:920 +@SQ SN:CUTC000642 LN:952 +@SQ SN:CUTC000643 LN:859 +@SQ SN:CUTC000644 LN:1001 +@SQ SN:CUTC000645 LN:1386 +@SQ SN:CUTC000646 LN:1109 +@SQ SN:CUTC000647 LN:708 +@SQ SN:CUTC000648 LN:1011 +@SQ SN:CUTC000649 LN:1061 +@SQ SN:CUTC000650 LN:1213 +@SQ SN:CUTC000651 LN:633 +@SQ SN:CUTC000652 LN:667 +@SQ SN:CUTC000653 LN:1364 +@SQ SN:CUTC000654 LN:593 +@SQ SN:CUTC000655 LN:1099 +@SQ SN:CUTC000656 LN:1155 +@SQ SN:CUTC000657 LN:482 +@SQ SN:CUTC000658 LN:1122 +@SQ SN:CUTC000659 LN:1060 +@SQ SN:CUTC000660 LN:558 +@SQ SN:CUTC000661 LN:957 +@SQ SN:CUTC000662 LN:851 +@SQ SN:CUTC000663 LN:1100 +@SQ SN:CUTC000664 LN:868 +@SQ SN:CUTC000665 LN:1147 +@SQ SN:CUTC000666 LN:572 +@SQ SN:CUTC000667 LN:1032 +@SQ SN:CUTC000668 LN:703 +@SQ SN:CUTC000669 LN:1411 +@SQ SN:CUTC000670 LN:1938 +@SQ SN:CUTC000671 LN:1586 +@SQ SN:CUTC000672 LN:1165 +@SQ SN:CUTC000673 LN:897 +@SQ SN:CUTC000674 LN:845 +@SQ SN:CUTC000675 LN:876 +@SQ SN:CUTC000676 LN:756 +@SQ SN:CUTC000677 LN:1253 +@SQ SN:CUTC000678 LN:812 +@SQ SN:CUTC000679 LN:581 +@SQ SN:CUTC000680 LN:753 +@SQ SN:CUTC000681 LN:1146 +@SQ SN:CUTC000682 LN:925 +@SQ SN:CUTC000683 LN:819 +@SQ SN:CUTC000684 LN:913 +@SQ SN:CUTC000685 LN:946 +@SQ SN:CUTC000686 LN:1112 +@SQ SN:CUTC000687 LN:1056 +@SQ SN:CUTC000688 LN:941 +@SQ SN:CUTC000689 LN:892 +@SQ SN:CUTC000690 LN:780 +@SQ SN:CUTC000691 LN:587 +@SQ SN:CUTC000692 LN:696 +@SQ SN:CUTC000693 LN:810 +@SQ SN:CUTC000694 LN:1198 +@SQ SN:CUTC000695 LN:1089 +@SQ SN:CUTC000696 LN:596 +@SQ SN:CUTC000697 LN:1100 +@SQ SN:CUTC000698 LN:639 +@SQ SN:CUTC000699 LN:1254 +@SQ SN:CUTC000700 LN:709 +@SQ SN:CUTC000701 LN:797 +@SQ SN:CUTC000702 LN:915 +@SQ SN:CUTC000703 LN:2222 +@SQ SN:CUTC000704 LN:772 +@SQ SN:CUTC000705 LN:1080 +@SQ SN:CUTC000706 LN:1421 +@SQ SN:CUTC000707 LN:1369 +@SQ SN:CUTC000708 LN:475 +@SQ SN:CUTC000709 LN:775 +@SQ SN:CUTC000710 LN:1192 +@SQ SN:CUTC000711 LN:1226 +@SQ SN:CUTC000712 LN:373 +@SQ SN:CUTC000713 LN:483 +@SQ SN:CUTC000714 LN:647 +@SQ SN:CUTC000715 LN:1087 +@SQ SN:CUTC000716 LN:1006 +@SQ SN:CUTC000717 LN:1179 +@SQ SN:CUTC000718 LN:1032 +@SQ SN:CUTC000719 LN:605 +@SQ SN:CUTC000720 LN:807 +@SQ SN:CUTC000721 LN:1042 +@SQ SN:CUTC000722 LN:970 +@SQ SN:CUTC000723 LN:831 +@SQ SN:CUTC000724 LN:1140 +@SQ SN:CUTC000725 LN:1293 +@SQ SN:CUTC000726 LN:923 +@SQ SN:CUTC000727 LN:754 +@SQ SN:CUTC000728 LN:1052 +@SQ SN:CUTC000729 LN:680 +@SQ SN:CUTC000730 LN:825 +@SQ SN:CUTC000731 LN:1366 +@SQ SN:CUTC000732 LN:2118 +@SQ SN:CUTC000733 LN:733 +@SQ SN:CUTC000734 LN:1328 +@SQ SN:CUTC000735 LN:1059 +@SQ SN:CUTC000736 LN:1025 +@SQ SN:CUTC000737 LN:964 +@SQ SN:CUTC000738 LN:776 +@SQ SN:CUTC000739 LN:1112 +@SQ SN:CUTC000740 LN:1200 +@SQ SN:CUTC000741 LN:634 +@SQ SN:CUTC000742 LN:840 +@SQ SN:CUTC000743 LN:1103 +@SQ SN:CUTC000744 LN:1714 +@SQ SN:CUTC000745 LN:612 +@SQ SN:CUTC000746 LN:512 +@SQ SN:CUTC000747 LN:1120 +@SQ SN:CUTC000748 LN:957 +@SQ SN:CUTC000749 LN:821 +@SQ SN:CUTC000750 LN:475 +@SQ SN:CUTC000751 LN:957 +@SQ SN:CUTC000752 LN:743 +@SQ SN:CUTC000753 LN:533 +@SQ SN:CUTC000754 LN:1345 +@SQ SN:CUTC000755 LN:476 +@SQ SN:CUTC000756 LN:871 +@SQ SN:CUTC000757 LN:843 +@SQ SN:CUTC000758 LN:513 +@SQ SN:CUTC000759 LN:775 +@SQ SN:CUTC000760 LN:1275 +@SQ SN:CUTC000761 LN:1375 +@SQ SN:CUTC000762 LN:1001 +@SQ SN:CUTC000763 LN:1114 +@SQ SN:CUTC000764 LN:974 +@SQ SN:CUTC000765 LN:398 +@SQ SN:CUTC000766 LN:974 +@SQ SN:CUTC000767 LN:689 +@SQ SN:CUTC000768 LN:853 +@SQ SN:CUTC000769 LN:1029 +@SQ SN:CUTC000770 LN:1400 +@SQ SN:CUTC000771 LN:667 +@SQ SN:CUTC000772 LN:939 +@SQ SN:CUTC000773 LN:1054 +@SQ SN:CUTC000774 LN:779 +@SQ SN:CUTC000775 LN:1247 +@SQ SN:CUTC000776 LN:1848 +@SQ SN:CUTC000777 LN:979 +@SQ SN:CUTC000778 LN:852 +@SQ SN:CUTC000779 LN:695 +@SQ SN:CUTC000780 LN:675 +@SQ SN:CUTC000781 LN:1312 +@SQ SN:CUTC000782 LN:895 +@SQ SN:CUTC000783 LN:451 +@SQ SN:CUTC000784 LN:1063 +@SQ SN:CUTC000785 LN:719 +@SQ SN:CUTC000786 LN:915 +@SQ SN:CUTC000787 LN:1050 +@SQ SN:CUTC000788 LN:1056 +@SQ SN:CUTC000789 LN:657 +@SQ SN:CUTC000790 LN:630 +@SQ SN:CUTC000791 LN:877 +@SQ SN:CUTC000792 LN:1279 +@SQ SN:CUTC000793 LN:875 +@SQ SN:CUTC000794 LN:1121 +@SQ SN:CUTC000795 LN:1009 +@SQ SN:CUTC000796 LN:785 +@SQ SN:CUTC000797 LN:546 +@SQ SN:CUTC000798 LN:578 +@SQ SN:CUTC000799 LN:854 +@SQ SN:CUTC000800 LN:987 +@SQ SN:CUTC000801 LN:604 +@SQ SN:CUTC000802 LN:919 +@SQ SN:CUTC000803 LN:1633 +@SQ SN:CUTC000804 LN:984 +@SQ SN:CUTC000805 LN:559 +@SQ SN:CUTC000806 LN:788 +@SQ SN:CUTC000807 LN:918 +@SQ SN:CUTC000808 LN:846 +@SQ SN:CUTC000809 LN:939 +@SQ SN:CUTC000810 LN:946 +@SQ SN:CUTC000811 LN:874 +@SQ SN:CUTC000812 LN:886 +@SQ SN:CUTC000813 LN:813 +@SQ SN:CUTC000814 LN:1369 +@SQ SN:CUTC000815 LN:827 +@SQ SN:CUTC000816 LN:867 +@SQ SN:CUTC000817 LN:1158 +@SQ SN:CUTC000818 LN:742 +@SQ SN:CUTC000819 LN:831 +@SQ SN:CUTC000820 LN:942 +@SQ SN:CUTC000821 LN:740 +@SQ SN:CUTC000822 LN:1191 +@SQ SN:CUTC000823 LN:2043 +@SQ SN:CUTC000824 LN:1642 +@SQ SN:CUTC000825 LN:1314 +@SQ SN:CUTC000826 LN:723 +@SQ SN:CUTC000827 LN:966 +@SQ SN:CUTC000828 LN:995 +@SQ SN:CUTC000829 LN:1118 +@SQ SN:CUTC000830 LN:546 +@SQ SN:CUTC000831 LN:995 +@SQ SN:CUTC000832 LN:860 +@SQ SN:CUTC000833 LN:970 +@SQ SN:CUTC000834 LN:862 +@SQ SN:CUTC000835 LN:458 +@SQ SN:CUTC000836 LN:774 +@SQ SN:CUTC000837 LN:824 +@SQ SN:CUTC000838 LN:1083 +@SQ SN:CUTC000839 LN:866 +@SQ SN:CUTC000840 LN:959 +@SQ SN:CUTC000841 LN:1275 +@SQ SN:CUTC000842 LN:1271 +@SQ SN:CUTC000843 LN:786 +@SQ SN:CUTC000844 LN:598 +@SQ SN:CUTC000845 LN:643 +@SQ SN:CUTC000846 LN:1263 +@SQ SN:CUTC000847 LN:968 +@SQ SN:CUTC000848 LN:1210 +@SQ SN:CUTC000849 LN:634 +@SQ SN:CUTC000850 LN:1085 +@SQ SN:CUTC000851 LN:792 +@SQ SN:CUTC000852 LN:1049 +@SQ SN:CUTC000853 LN:513 +@SQ SN:CUTC000854 LN:839 +@SQ SN:CUTC000855 LN:912 +@SQ SN:CUTC000856 LN:1127 +@SQ SN:CUTC000857 LN:796 +@SQ SN:CUTC000858 LN:769 +@SQ SN:CUTC000859 LN:455 +@SQ SN:CUTC000860 LN:1067 +@SQ SN:CUTC000861 LN:2816 +@SQ SN:CUTC000862 LN:1486 +@SQ SN:CUTC000863 LN:1037 +@SQ SN:CUTC000864 LN:699 +@SQ SN:CUTC000865 LN:1266 +@SQ SN:CUTC000866 LN:719 +@SQ SN:CUTC000867 LN:762 +@SQ SN:CUTC000868 LN:1182 +@SQ SN:CUTC000869 LN:825 +@SQ SN:CUTC000870 LN:1325 +@SQ SN:CUTC000871 LN:579 +@SQ SN:CUTC000872 LN:851 +@SQ SN:CUTC000873 LN:790 +@SQ SN:CUTC000874 LN:793 +@SQ SN:CUTC000875 LN:2194 +@SQ SN:CUTC000876 LN:1237 +@SQ SN:CUTC000877 LN:856 +@SQ SN:CUTC000878 LN:1438 +@SQ SN:CUTC000879 LN:2190 +@SQ SN:CUTC000880 LN:793 +@SQ SN:CUTC000881 LN:1844 +@SQ SN:CUTC000882 LN:1184 +@SQ SN:CUTC000883 LN:933 +@SQ SN:CUTC000884 LN:1372 +@SQ SN:CUTC000885 LN:373 +@SQ SN:CUTC000886 LN:1141 +@SQ SN:CUTC000887 LN:447 +@SQ SN:CUTC000888 LN:1789 +@SQ SN:CUTC000889 LN:593 +@SQ SN:CUTC000890 LN:1020 +@SQ SN:CUTC000891 LN:904 +@SQ SN:CUTC000892 LN:1417 +@SQ SN:CUTC000893 LN:823 +@SQ SN:CUTC000894 LN:1315 +@SQ SN:CUTC000895 LN:999 +@SQ SN:CUTC000896 LN:716 +@SQ SN:CUTC000897 LN:1244 +@SQ SN:CUTC000898 LN:1059 +@SQ SN:CUTC000899 LN:741 +@SQ SN:CUTC000900 LN:762 +@SQ SN:CUTC000901 LN:589 +@SQ SN:CUTC000902 LN:1199 +@SQ SN:CUTC000903 LN:1895 +@SQ SN:CUTC000904 LN:417 +@SQ SN:CUTC000905 LN:976 +@SQ SN:CUTC000906 LN:1405 +@SQ SN:CUTC000907 LN:1652 +@SQ SN:CUTC000908 LN:1138 +@SQ SN:CUTC000909 LN:1099 +@SQ SN:CUTC000910 LN:777 +@SQ SN:CUTC000911 LN:1057 +@SQ SN:CUTC000912 LN:1065 +@SQ SN:CUTC000913 LN:895 +@SQ SN:CUTC000914 LN:745 +@SQ SN:CUTC000915 LN:605 +@SQ SN:CUTC000916 LN:719 +@SQ SN:CUTC000917 LN:709 +@SQ SN:CUTC000918 LN:799 +@SQ SN:CUTC000919 LN:1057 +@SQ SN:CUTC000920 LN:867 +@SQ SN:CUTC000921 LN:629 +@SQ SN:CUTC000922 LN:780 +@SQ SN:CUTC000923 LN:856 +@SQ SN:CUTC000924 LN:814 +@SQ SN:CUTC000925 LN:786 +@SQ SN:CUTC000926 LN:1193 +@SQ SN:CUTC000927 LN:1094 +@SQ SN:CUTC000928 LN:987 +@SQ SN:CUTC000929 LN:1380 +@SQ SN:CUTC000930 LN:1039 +@SQ SN:CUTC000931 LN:487 +@SQ SN:CUTC000932 LN:1016 +@SQ SN:CUTC000933 LN:1449 +@SQ SN:CUTC000934 LN:2138 +@SQ SN:CUTC000935 LN:581 +@SQ SN:CUTC000936 LN:1100 +@SQ SN:CUTC000937 LN:1035 +@SQ SN:CUTC000938 LN:966 +@SQ SN:CUTC000939 LN:856 +@SQ SN:CUTC000940 LN:802 +@SQ SN:CUTC000941 LN:892 +@SQ SN:CUTC000942 LN:1122 +@SQ SN:CUTC000943 LN:923 +@SQ SN:CUTC000944 LN:1125 +@SQ SN:CUTC000945 LN:600 +@SQ SN:CUTC000946 LN:1718 +@SQ SN:CUTC000947 LN:856 +@SQ SN:CUTC000948 LN:1062 +@SQ SN:CUTC000949 LN:934 +@SQ SN:CUTC000950 LN:1006 +@SQ SN:CUTC000951 LN:1797 +@SQ SN:CUTC000952 LN:1347 +@SQ SN:CUTC000953 LN:930 +@SQ SN:CUTC000954 LN:639 +@SQ SN:CUTC000955 LN:776 +@SQ SN:CUTC000956 LN:807 +@SQ SN:CUTC000957 LN:1050 +@SQ SN:CUTC000958 LN:774 +@SQ SN:CUTC000959 LN:1496 +@SQ SN:CUTC000960 LN:497 +@SQ SN:CUTC000961 LN:1052 +@SQ SN:CUTC000962 LN:949 +@SQ SN:CUTC000963 LN:1105 +@SQ SN:CUTC000964 LN:1040 +@SQ SN:CUTC000965 LN:717 +@SQ SN:CUTC000966 LN:1341 +@SQ SN:CUTC000967 LN:866 +@SQ SN:CUTC000968 LN:925 +@SQ SN:CUTC000969 LN:1527 +@SQ SN:CUTC000970 LN:1437 +@SQ SN:CUTC000971 LN:1144 +@SQ SN:CUTC000972 LN:744 +@SQ SN:CUTC000973 LN:839 +@SQ SN:CUTC000974 LN:872 +@SQ SN:CUTC000975 LN:880 +@SQ SN:CUTC000976 LN:785 +@SQ SN:CUTC000977 LN:919 +@SQ SN:CUTC000978 LN:1153 +@SQ SN:CUTC000979 LN:844 +@SQ SN:CUTC000980 LN:919 +@SQ SN:CUTC000981 LN:902 +@SQ SN:CUTC000982 LN:861 +@SQ SN:CUTC000983 LN:1017 +@SQ SN:CUTC000984 LN:660 +@SQ SN:CUTC000985 LN:922 +@SQ SN:CUTC000986 LN:1119 +@SQ SN:CUTC000987 LN:359 +@SQ SN:CUTC000988 LN:1490 +@SQ SN:CUTC000989 LN:1621 +@SQ SN:CUTC000990 LN:789 +@SQ SN:CUTC000991 LN:1064 +@SQ SN:CUTC000992 LN:687 +@SQ SN:CUTC000993 LN:1092 +@SQ SN:CUTC000994 LN:843 +@SQ SN:CUTC000995 LN:1053 +@SQ SN:CUTC000996 LN:552 +@SQ SN:CUTC000997 LN:881 +@SQ SN:CUTC000998 LN:1067 +@SQ SN:CUTC000999 LN:817 +@SQ SN:CUTC001000 LN:641 +@SQ SN:CUTC001001 LN:901 +@SQ SN:CUTC001002 LN:1005 +@SQ SN:CUTC001003 LN:1411 +@SQ SN:CUTC001004 LN:853 +@SQ SN:CUTC001005 LN:621 +@SQ SN:CUTC001006 LN:1374 +@SQ SN:CUTC001007 LN:1122 +@SQ SN:CUTC001008 LN:1098 +@SQ SN:CUTC001009 LN:819 +@SQ SN:CUTC001010 LN:939 +@SQ SN:CUTC001011 LN:591 +@SQ SN:CUTC001012 LN:580 +@SQ SN:CUTC001013 LN:1057 +@SQ SN:CUTC001014 LN:1551 +@SQ SN:CUTC001015 LN:701 +@SQ SN:CUTC001016 LN:885 +@SQ SN:CUTC001017 LN:1209 +@RG ID:mu16_454_mu16 PL:454 LB:mu16 SM:mu16 +@RG ID:upv196_454_upv196 PL:454 LB:upv196 SM:upv196 +CUESOXRA74 0 CUTC000001 1 10 77M1I222M * 0 0 GCCTTTTATAATTATTATAAATTTCGGTTGACCCGACCCCATTAGACAGAGTCTATTAAAGCCCCGTGAAAGCCCGGCAAAACCCAGTAGCGCAGAGATCGGCGAGGGCGAATTTTCGATTGCATTTTCGTTCGTTTCTCTTCTGAATTTCTGTAATCTGTAACGATGTCTCAGACTACTGTCCTCAAGGTTGCTATGTCATGTCAGGGCTGTGTTGGAGCCGCCAAAAGGGTCTTGGGGAAACTGGAAGGTGTTGAAACATTTGACATCGACATAGATGCACAAAAGGTGACTGTGAAA 1BB@@BBHFHHHHHIIHIHFFF@@A@@>9>?999<0////8888>=??@DDDDFFFF???:;;;;AAA???DDDDFFFAAAAFFD8AAFFFC???CFFFFFFFFFFFFFFFFAAAAFFFFCCCF<<<=424226622....666=?==4466444@?4444==?;;;9688<0...:::9<:7988989????984444A@?AABBA=?==; AS:i:260 XS:i:239 XF:i:2 XE:i:3 XN:i:1 RG:Z:mu16_454_mu16 diff --git a/tests/pysam_data/ex_spliced.sam b/tests/pysam_data/ex_spliced.sam new file mode 100644 index 0000000..ae8086a --- /dev/null +++ b/tests/pysam_data/ex_spliced.sam @@ -0,0 +1,297 @@ +@HD VN:1.4 SO:coordinate +@SQ SN:1 LN:248956422 +@SQ SN:2 LN:242193529 +@SQ SN:3 LN:198295559 +@SQ SN:4 LN:190214555 +@SQ SN:5 LN:181538259 +@SQ SN:6 LN:170805979 +@SQ SN:7 LN:159345973 +@SQ SN:8 LN:145138636 +@SQ SN:9 LN:138394717 +@SQ SN:10 LN:133797422 +@SQ SN:11 LN:135086622 +@SQ SN:12 LN:133275309 +@SQ SN:13 LN:114364328 +@SQ SN:14 LN:107043718 +@SQ SN:15 LN:101991189 +@SQ SN:16 LN:90338345 +@SQ SN:17 LN:83257441 +@SQ SN:18 LN:80373285 +@SQ SN:19 LN:58617616 +@SQ SN:20 LN:64444167 +@SQ SN:21 LN:46709983 +@SQ SN:22 LN:50818468 +@SQ SN:X LN:156040895 +@SQ SN:Y LN:57227415 +@SQ SN:MT LN:16569 +@SQ SN:GL000008.2 LN:209709 +@SQ SN:GL000009.2 LN:201709 +@SQ SN:GL000194.1 LN:191469 +@SQ SN:GL000195.1 LN:182896 +@SQ SN:GL000205.2 LN:185591 +@SQ SN:GL000208.1 LN:92689 +@SQ SN:GL000213.1 LN:164239 +@SQ SN:GL000214.1 LN:137718 +@SQ SN:GL000216.2 LN:176608 +@SQ SN:GL000218.1 LN:161147 +@SQ SN:GL000219.1 LN:179198 +@SQ SN:GL000220.1 LN:161802 +@SQ SN:GL000221.1 LN:155397 +@SQ SN:GL000224.1 LN:179693 +@SQ SN:GL000225.1 LN:211173 +@SQ SN:GL000226.1 LN:15008 +@SQ SN:KI270302.1 LN:2274 +@SQ SN:KI270303.1 LN:1942 +@SQ SN:KI270304.1 LN:2165 +@SQ SN:KI270305.1 LN:1472 +@SQ SN:KI270310.1 LN:1201 +@SQ SN:KI270311.1 LN:12399 +@SQ SN:KI270312.1 LN:998 +@SQ SN:KI270315.1 LN:2276 +@SQ SN:KI270316.1 LN:1444 +@SQ SN:KI270317.1 LN:37690 +@SQ SN:KI270320.1 LN:4416 +@SQ SN:KI270322.1 LN:21476 +@SQ SN:KI270329.1 LN:1040 +@SQ SN:KI270330.1 LN:1652 +@SQ SN:KI270333.1 LN:2699 +@SQ SN:KI270334.1 LN:1368 +@SQ SN:KI270335.1 LN:1048 +@SQ SN:KI270336.1 LN:1026 +@SQ SN:KI270337.1 LN:1121 +@SQ SN:KI270338.1 LN:1428 +@SQ SN:KI270340.1 LN:1428 +@SQ SN:KI270362.1 LN:3530 +@SQ SN:KI270363.1 LN:1803 +@SQ SN:KI270364.1 LN:2855 +@SQ SN:KI270366.1 LN:8320 +@SQ SN:KI270371.1 LN:2805 +@SQ SN:KI270372.1 LN:1650 +@SQ SN:KI270373.1 LN:1451 +@SQ SN:KI270374.1 LN:2656 +@SQ SN:KI270375.1 LN:2378 +@SQ SN:KI270376.1 LN:1136 +@SQ SN:KI270378.1 LN:1048 +@SQ SN:KI270379.1 LN:1045 +@SQ SN:KI270381.1 LN:1930 +@SQ SN:KI270382.1 LN:4215 +@SQ SN:KI270383.1 LN:1750 +@SQ SN:KI270384.1 LN:1658 +@SQ SN:KI270385.1 LN:990 +@SQ SN:KI270386.1 LN:1788 +@SQ SN:KI270387.1 LN:1537 +@SQ SN:KI270388.1 LN:1216 +@SQ SN:KI270389.1 LN:1298 +@SQ SN:KI270390.1 LN:2387 +@SQ SN:KI270391.1 LN:1484 +@SQ SN:KI270392.1 LN:971 +@SQ SN:KI270393.1 LN:1308 +@SQ SN:KI270394.1 LN:970 +@SQ SN:KI270395.1 LN:1143 +@SQ SN:KI270396.1 LN:1880 +@SQ SN:KI270411.1 LN:2646 +@SQ SN:KI270412.1 LN:1179 +@SQ SN:KI270414.1 LN:2489 +@SQ SN:KI270417.1 LN:2043 +@SQ SN:KI270418.1 LN:2145 +@SQ SN:KI270419.1 LN:1029 +@SQ SN:KI270420.1 LN:2321 +@SQ SN:KI270422.1 LN:1445 +@SQ SN:KI270423.1 LN:981 +@SQ SN:KI270424.1 LN:2140 +@SQ SN:KI270425.1 LN:1884 +@SQ SN:KI270429.1 LN:1361 +@SQ SN:KI270435.1 LN:92983 +@SQ SN:KI270438.1 LN:112505 +@SQ SN:KI270442.1 LN:392061 +@SQ SN:KI270448.1 LN:7992 +@SQ SN:KI270465.1 LN:1774 +@SQ SN:KI270466.1 LN:1233 +@SQ SN:KI270467.1 LN:3920 +@SQ SN:KI270468.1 LN:4055 +@SQ SN:KI270507.1 LN:5353 +@SQ SN:KI270508.1 LN:1951 +@SQ SN:KI270509.1 LN:2318 +@SQ SN:KI270510.1 LN:2415 +@SQ SN:KI270511.1 LN:8127 +@SQ SN:KI270512.1 LN:22689 +@SQ SN:KI270515.1 LN:6361 +@SQ SN:KI270516.1 LN:1300 +@SQ SN:KI270517.1 LN:3253 +@SQ SN:KI270518.1 LN:2186 +@SQ SN:KI270519.1 LN:138126 +@SQ SN:KI270521.1 LN:7642 +@SQ SN:KI270522.1 LN:5674 +@SQ SN:KI270528.1 LN:2983 +@SQ SN:KI270529.1 LN:1899 +@SQ SN:KI270530.1 LN:2168 +@SQ SN:KI270538.1 LN:91309 +@SQ SN:KI270539.1 LN:993 +@SQ SN:KI270544.1 LN:1202 +@SQ SN:KI270548.1 LN:1599 +@SQ SN:KI270579.1 LN:31033 +@SQ SN:KI270580.1 LN:1553 +@SQ SN:KI270581.1 LN:7046 +@SQ SN:KI270582.1 LN:6504 +@SQ SN:KI270583.1 LN:1400 +@SQ SN:KI270584.1 LN:4513 +@SQ SN:KI270587.1 LN:2969 +@SQ SN:KI270588.1 LN:6158 +@SQ SN:KI270589.1 LN:44474 +@SQ SN:KI270590.1 LN:4685 +@SQ SN:KI270591.1 LN:5796 +@SQ SN:KI270593.1 LN:3041 +@SQ SN:KI270706.1 LN:175055 +@SQ SN:KI270707.1 LN:32032 +@SQ SN:KI270708.1 LN:127682 +@SQ SN:KI270709.1 LN:66860 +@SQ SN:KI270710.1 LN:40176 +@SQ SN:KI270711.1 LN:42210 +@SQ SN:KI270712.1 LN:176043 +@SQ SN:KI270713.1 LN:40745 +@SQ SN:KI270714.1 LN:41717 +@SQ SN:KI270715.1 LN:161471 +@SQ SN:KI270716.1 LN:153799 +@SQ SN:KI270717.1 LN:40062 +@SQ SN:KI270718.1 LN:38054 +@SQ SN:KI270719.1 LN:176845 +@SQ SN:KI270720.1 LN:39050 +@SQ SN:KI270721.1 LN:100316 +@SQ SN:KI270722.1 LN:194050 +@SQ SN:KI270723.1 LN:38115 +@SQ SN:KI270724.1 LN:39555 +@SQ SN:KI270725.1 LN:172810 +@SQ SN:KI270726.1 LN:43739 +@SQ SN:KI270727.1 LN:448248 +@SQ SN:KI270728.1 LN:1872759 +@SQ SN:KI270729.1 LN:280839 +@SQ SN:KI270730.1 LN:112551 +@SQ SN:KI270731.1 LN:150754 +@SQ SN:KI270732.1 LN:41543 +@SQ SN:KI270733.1 LN:179772 +@SQ SN:KI270734.1 LN:165050 +@SQ SN:KI270735.1 LN:42811 +@SQ SN:KI270736.1 LN:181920 +@SQ SN:KI270737.1 LN:103838 +@SQ SN:KI270738.1 LN:99375 +@SQ SN:KI270739.1 LN:73985 +@SQ SN:KI270740.1 LN:37240 +@SQ SN:KI270741.1 LN:157432 +@SQ SN:KI270742.1 LN:186739 +@SQ SN:KI270743.1 LN:210658 +@SQ SN:KI270744.1 LN:168472 +@SQ SN:KI270745.1 LN:41891 +@SQ SN:KI270746.1 LN:66486 +@SQ SN:KI270747.1 LN:198735 +@SQ SN:KI270748.1 LN:93321 +@SQ SN:KI270749.1 LN:158759 +@SQ SN:KI270750.1 LN:148850 +@SQ SN:KI270751.1 LN:150742 +@SQ SN:KI270752.1 LN:27745 +@SQ SN:KI270753.1 LN:62944 +@SQ SN:KI270754.1 LN:40191 +@SQ SN:KI270755.1 LN:36723 +@SQ SN:KI270756.1 LN:79590 +@SQ SN:KI270757.1 LN:71251 +@PG ID:STAR PN:STAR VN:STAR_2.4.1a +HWI-C00113:131:HMHYWADXX:1:2202:17748:47494 272 1 14792 0 51M * 0 0 GGGCCTCTCACCAGCCCCAGGTCCTTTCCCAGAGATGCCCTTGCGCCTCAT CCCFFFFFHHHHHFHIIJJIJAFHJJJJJGJIIHGIJGGIJJIIJIIJJJG NH:i:6 HI:i:3 AS:i:47 nM:i:1 +HWI-C00113:131:HMHYWADXX:1:2202:17748:47494 272 1 14792 0 38M140N13M * 0 0 GGGCCTCTCACCAGCCCCAGGTCCTTTCCCAGAGATGCCCTTGCGCCTCAT CCCFFFFFHHHHHFHIIJJIJAFHJJJJJGJIIHGIJGGIJJIIJIIJJJG NH:i:6 HI:i:3 AS:i:47 nM:i:1 +HWI-C00113:131:HMHYWADXX:2:1214:7658:35836 272 1 14792 0 38M140N13M * 0 0 GGGCCCCTCACCAGCCCCAGGTCTTTTCCCAGAGATGCCCTTGCGCCTCAT CCCFFFFFHHHHHJJJJJJJJCGHIJJIJJJJJJIJJGIJJIJIJIJJJJI NH:i:6 HI:i:3 AS:i:47 nM:i:1 +HWI-C00113:131:HMHYWADXX:1:2114:4116:44566 272 1 14794 0 36M140N15M * 0 0 GCCCCTCACCAGCCCCAGGTCTTTTCCCAGAGATGCCCTTGCGCCTCATGA <@@DDDDDDFHCFHEFGBE+2AFH@GIEGF=GGHII9FB?BFFDEE??BD?D@DADDDDBDDD@FGHFHFHIHGI@?DGC@CF NH:i:7 HI:i:4 AS:i:47 nM:i:1 +HWI-C00113:131:HMHYWADXX:1:1105:1515:82248 272 1 14802 0 28M140N23M * 0 0 CCAGCCCCAGGTCCTTTCCCAGAGATGCCCTTGCGCCTCATGACCAGCTTG ??:ADBDDDDD:A<+C?AFDB@E?F4<*?:?1:??):??0009??9?(8BC NH:i:7 HI:i:4 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:1:1110:16355:5537 272 1 14802 0 28M140N23M * 0 0 CCAGCCCCAGGTCCTTTCCCAGAGATGCCCTTGCGCCTCATGACCAGCTTG @CCFFFFFHH?ADHGIJIJJJJJIIEHIJJJJJIJIGIIJJIJJIIJIJJJ NH:i:7 HI:i:4 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:2:1102:17802:20689 272 1 14805 0 25M140N26M * 0 0 GCTCCAGGTCCTTTCCCAGAGATGCCCTTGCGCCTCATGACCAGCTTGTTG CCCFFFFFHHHHHJJJJJJIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJI NH:i:7 HI:i:4 AS:i:47 nM:i:1 +HWI-C00113:131:HMHYWADXX:2:1104:7670:95815 272 1 14805 0 25M140N26M * 0 0 GCCCCAGGTCCTTTCCCAGAGATGCCCTTGCGCCTCATGACCAGCTTGTTG @@@DBDDDHHBFDBFGEBBGHG@HIBHIDHBGGGEFBDDDFDGBBBGCHHI NH:i:7 HI:i:4 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:2:1110:11368:101298 272 1 14805 0 25M140N26M * 0 0 GCCCCAGGTCCTTTCCCAGAGATGCCCTTGCGCCTCATGACCAGCTTGTTG BCCFFFFFCFHHHJJJJJIJJJJJJJJJJJJJGJJJJJJJJJJJJJJJIJJ NH:i:7 HI:i:4 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:2:1115:2363:85646 272 1 14805 0 25M140N26M * 0 0 GCTCCAGGTCCTTTCCCAGAGATGCCCTTGCGCCTCATGACCAGCTTGTTG @C@FFFB?CFDFHDHGIIIIEGIIIIEDGIIIIIIIIIGGIIGIIGCGHIH NH:i:7 HI:i:4 AS:i:47 nM:i:1 +HWI-C00113:131:HMHYWADXX:2:2213:6044:80821 272 1 14805 0 25M140N26M * 0 0 GCTCCGGGTCCTTTCCCAGAGATGCCCTTGCGCCTCATGACCAGCTTGTTG @@@FFFFFFFBFDGIIJIJGGFHIIIJIIJGIIEHICHIGEGFG?FGHGA>9B8BF@ NH:i:7 HI:i:4 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:2:1215:4185:31561 272 1 14815 0 15M140N36M * 0 0 CTTTCCCAGAGATGCCCTTGCGCCTCATGACCAGCTTGTTGAAGAGATCCG CCCFFFFFHHHHGJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJIJJJH NH:i:7 HI:i:4 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:1:2108:1506:70629 272 1 14816 0 14M140N37M * 0 0 TTTCCCAGAGATGCCCTTGCGCCTCATGACCAGCTTGTTGAAGAGATCCGA ?@@;BDDD=DFFDDDFGGFCA?)1@F?F+AAEEEBFFIIF@DE4= NH:i:8 HI:i:2 AS:i:47 nM:i:1 +HWI-C00113:131:HMHYWADXX:1:1108:6828:32713 272 1 15003 0 36M757N15M * 0 0 CCGGCATCAAGTCCCCACCTTGGCTCGTGGCTCTCACTTGCTCCTGCTCCT ?@@ADDDDD?CDD:CFB@:@G@ABGFGFGFBFEAFEEEFCFCF@F=)8=@> NH:i:8 HI:i:2 AS:i:45 nM:i:2 +HWI-C00113:131:HMHYWADXX:1:1111:7491:39504 272 1 15003 0 36M757N15M * 0 0 CCGACATCAAGTGCCCACCTTGGCTCGTGGCTCTCACTTGCTCCTGCTCCT CCCFFDFFFHHHFIGEGHIGIGGDGIJFHEHGGIJJJIJIJJJJJIIIIGI NH:i:8 HI:i:2 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:1:1212:16079:85811 272 1 15003 0 36M757N15M * 0 0 CCGGCATCAAGTCCCCACCTTGGCTCGTGGCTCTCACTTGCTCCTGCTCCT @CCFFFFFHGHHHJJJJJJJIIJJJJJIJIJJHIIJJJJIJJJJJJJIJJJ NH:i:8 HI:i:2 AS:i:45 nM:i:2 +HWI-C00113:131:HMHYWADXX:1:2101:7167:50357 272 1 15003 0 36M757N15M * 0 0 CCGACATCAAGTGCCCACCTTGGCTCGTGGCTCTCACTTGCTCCTGCTCCT @@@DD?DDFHHHD@?CG?FHGIIIIG@??BGHIE;8@BFEG NH:i:8 HI:i:2 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:2:1211:4828:84953 272 1 15003 0 36M757N15M * 0 0 CCGACATCAAGTGCCCACCTTGGCTCGTGGCTCTCACTTGCTCCTGCTCCT @BB?DFFFHHHHHIJIJJJJJJJJJJJHIJJIIJJJJJJIIIJJJJJJIJI NH:i:8 HI:i:2 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:2:2107:20905:80208 272 1 15003 0 36M757N15M * 0 0 CCGACATCAAGTGCCCACCTTGGCTCGTGGCTCTCACTTGCTCCTGCTCCT @CCFFFFFHHHFBHIIEIIDIHGGGGG@GGHCFGHIIJIGGGGIJIGIGGH NH:i:8 HI:i:2 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:2:2112:6263:84991 272 1 15003 0 36M757N15M * 0 0 CCGACATCAAGTCCCCACCTTGGCTCGTGGCTCTCACTTGCTCCTGCTCCT @@@?DDDDFBH?FHIGIGIIGG;GHBGCD?DCGIIGHEGBBFHGGIHBFIG NH:i:8 HI:i:2 AS:i:47 nM:i:1 +HWI-C00113:131:HMHYWADXX:2:2202:10314:26844 272 1 15003 0 36M757N15M * 0 0 CCGACATCAAGTGCCCACCTTGGCTCGTGGCTCTCACTTGCTCCTGCTCCT CCCFFFFFHHHHHJJJJJJJJJJJJJJIJJJJIIJJJJJJJJJJJJJJJJJ NH:i:8 HI:i:2 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:2:2213:21028:90280 272 1 15003 0 36M757N15M * 0 0 CCGACATCAAGTCCCCACCTTGGCTCGTGGCTCTCACTTGCTCCTGCTCCT @@@BDDDAD?FDF9GIBB@@FFG3CFF:DD)?BD*9D@@F4BDEEEFFF8= NH:i:8 HI:i:2 AS:i:47 nM:i:1 +HWI-C00113:131:HMHYWADXX:1:1216:14847:22529 272 1 15004 0 35M757N16M * 0 0 CGACATCAAGTGCCCACCTTGGCTCGTGGCTCTCACTTGCTCCTGCTCCTT @@@FFFFDHHBDHIIIJJJJIIIIIIJJIJJGIJIFIJJIDHHGBEHIJJJ NH:i:8 HI:i:2 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:2:2111:14281:81135 272 1 15007 0 32M757N19M * 0 0 CATCAAGTGCCCACCTTGGCTCGTGGCTCTCACTTGCTCCTGCTCCTTCTG @@@DDDBD42=:ACFFIE?FFGAFF@FFFDGEAG>D@DBB9BC3D@EDFFA NH:i:8 HI:i:2 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:1:2203:4824:93169 272 1 15008 0 31M757N20M * 0 0 ATCAAGTGCCCACCTTGGCTCGTGGCTCTCACTTGCTCCTGCTCCTTCTGC CCCFFFFFHHHHHJJJJIJJJJHIJIJJJJJJJJGIJJJJI?DFGFHIHJF NH:i:8 HI:i:2 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:1:1112:17298:87937 272 1 15925 1 23M659N28M * 0 0 CACTTCCCTGGGAGCTCCCTGGACTGAAGGAGACGCGCTGCTGCTGCTGTC ?@;;BA;3ABC?C?6EGDGIIBA+AACACD>>:9:??2< NH:i:6 HI:i:2 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:2:2109:14386:93817 272 1 16728 0 38M92N13M * 0 0 GGGCGGTGGGGGTGGTGTTAGTACCCCATCTTGTAGGTCTTGAGAGGCTCG @CCFFFDDHHHHDHIFHIJJJGHHIIJHHHHHHFFFFEFEEEECDDDDDDB NH:i:6 HI:i:2 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:1:2203:14322:7218 272 1 16741 0 25M110N26M * 0 0 GGTGTTAGTACCCCATCTTGTAGGTCTCAGTGTGGAAGGTGGGCAGTTCTG ?@?DDD?BFFHHFB7EFGGGEFHIHADB8D>822BDG?FHBGEH?FHGG3 NH:i:6 HI:i:1 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:1:2116:7403:96086 272 1 17020 0 36M177N15M * 0 0 GCCCAGGTCTGGCACATAGAAGTAGTTCTCTGGGACCTGCTGTTCCAGCTG :?=DDD=AAAC:+BDIIIIIIA? NH:i:7 HI:i:5 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:2:1209:11002:81132 272 1 17020 0 36M177N15M * 0 0 GCCCGGGTCTGGCACATAGAAGTAGTTCTCTGGGACCTGCTGTTCCAGCTG @@@DD@A<@DDDF;BCGF<4CHCEG?EG@FGF9)?BB:?B?DBF>D?**9B NH:i:7 HI:i:4 AS:i:47 nM:i:1 +HWI-C00113:131:HMHYWADXX:2:1115:8064:78307 272 1 17021 0 35M177N16M * 0 0 CCCTGGTCTGGCACATAGAAGTAGTTCTCTGGGACCTGCTGTTCCAGCTGC 11844BBDD=FDFEFFFDFI?HEHAFBEHEEEFC?E:FDGDDDH9CBEHHHEEFB?F>GD@3?FB?BB@ NH:i:7 HI:i:6 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:2:1101:15891:42282 272 1 17028 0 28M177N23M * 0 0 CTGGCACATAGAAGTAGTTCTCTGGGACCTGCTGTTCCAGCTGCTCTCTCT CCCFFFFFHHHHHJHHIIJJJJJJJJJJIIJJJJIJJJIJJJJJJJJJJJJ NH:i:7 HI:i:6 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:1:1107:10929:6659 272 1 17030 0 26M177N25M * 0 0 GGCACATAGAAGTAGTTCTCTGGGACCTGCTGTTCCAGCTGCTCTCTCTTG CCCFFFFFHHHHDHIHHJJGJJJJJJJIJJIJGIJJJIJJJIJJJJJIJJG NH:i:7 HI:i:6 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:1:1114:7098:71178 272 1 17030 0 26M177N25M * 0 0 GGCACATAGAAGTAGTTCTCTGGGACCTGCTGTTCCAGCTGCTCTCTCTTG =?@BDEEFHBDHFBGIEGIHEHIGDHGEIIJIIIEHIHIIGHDGHIGIIH@ NH:i:7 HI:i:6 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:1:1209:3383:100724 272 1 17030 0 26M177N25M * 0 0 GGCACATAGAAGTAGTTCTCTGGGACCTGCTGTTCCAGCTGCTCTCTCTTG ?@@ADDDDDHDH?EEFHEHIGIIGHGHIFII>BFIH? NH:i:7 HI:i:6 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:1:2111:3771:31345 272 1 17030 0 26M177N25M * 0 0 GGCACATAGAAGTAGTTCTCTGGGACCTGCTGTTCCAGCTGCTCTCTCTTG @@@DFFFFGHDHHHJGIHJJJJGIJJIJIJIIJJIIJJIGHIJJJIJJIJ< NH:i:7 HI:i:6 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:1:2205:14794:36455 272 1 17030 0 26M177N25M * 0 0 GGCACATAGAAGTAGTTCTCTGGGACCTGCTGTTCCAGCTGCTCTCTCTTG CCCFFFFFHHHHHIJJJJJJJJJJJJJJJJJJIJJJJIJJIJJJJJJJJJJ NH:i:7 HI:i:6 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:2:1107:19701:64552 272 1 17030 0 26M177N25M * 0 0 GGCACATAGAAGTAGTTCTCTGGGACCTGCTGTTCCAGCTGCTCTCTCTTG CCCFFDFFHHHHDGIIJIJJJIIJDGHGJJJJJJIJJJJJJJGIJJJJJJF NH:i:7 HI:i:6 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:2:1210:18711:88303 272 1 17030 0 26M177N25M * 0 0 GGCACATAGAAGTAGTTCTCTGGGACCTGCTGTTCCAGCTGCTCTCTCTTG CCCFFFFFHHHHHJJJJJJJJIJFIJJJEIIHIIJJIIJJGJJJIJJJJJE NH:i:7 HI:i:6 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:2:2212:19113:15559 272 1 17030 0 26M177N25M * 0 0 GGCACATAGAAGTAGTTCTCTGGGACCTGCTGTTCCAGCTGCTCTCTCTTG @@@7B>DDC=@BFBGBAFCGBFDB@DHIHIDD>@@GHID NH:i:7 HI:i:6 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:2:1212:15591:47491 272 1 17031 0 25M177N26M * 0 0 GCACATAGAAGTAGTTCTCTGGGACCTGCTGTTCCAGCTGCTCTCTCTTGC @@C+ADDDDHFFDEGEGIIIDFHIFHIIIIIGEHIIBH>FGGGHGHFGGII NH:i:7 HI:i:6 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:2:2215:10125:81395 272 1 17031 0 25M859N26M * 0 0 GCACATAGAAGTAGTTCTCTGGGACCTGCAGGGCCCGCTCGTCCAGGGGGC CCCFFFFFGHHHHJJJJJJJJJHJJJJJJIJIIJJJHIJJJJJJJJJIJHE NH:i:6 HI:i:1 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:1:2102:9065:90529 16 1 17033 0 2S23M550N26M * 0 0 GTACATAGAAGTAGTTCTCTGGGACAGGTTCTCGGTGGTGTTGAAGAGCAG C@CFFFFFHHHHHJJJJJJJJJJJJJJJJJJJJJJFHIFHIJIJJJJJJJJ NH:i:5 HI:i:2 AS:i:47 nM:i:0 +HWI-C00113:131:HMHYWADXX:1:2204:7767:77376 16 1 17033 0 2S23M550N26M * 0 0 GTACATAGAAGTAGTTCTCTGGGACAGGTTCTCGGTGGTGTTGAAGAGCAG @@@FDFDDBFHADEHEIGIGIJIGHIHG?EDGHGGCFH:B?BD@FGFHGIH NH:i:5 HI:i:2 AS:i:47 nM:i:0 +HWI-C00113:131:HMHYWADXX:2:1212:6793:42000 16 1 17033 0 2S23M550N26M * 0 0 GTACATAGAAGTAGTTCTCTGGGACAGGTTCTCGGTGGTGTTGAAGAGCAG @@?DADBD8CFADGFHIIIIE3A9?DH?FHGHH@EHGIEHGGIIIGGHIGHGFDEHGH=FHGIIH NH:i:3 HI:i:1 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:2:2207:3786:78354 16 1 17340 1 29M237N22M * 0 0 GGGGGTCCAGGAAGACATACTTCTTCTACAGGTTCTCGGTGGTGTTGAAGA CCCFFFFFHHHHHJJJJJIIJJJJJJJJJJJJHHIJIHHBFIHIIJJJJJI NH:i:3 HI:i:1 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:1:1115:8438:81914 16 1 17341 1 28M237N23M * 0 0 GGGGTCCAGGAAGACATACTTCTTCTACAGGTTCTCGGTGGTGTTGAAGAG @@CFFFFDHH?HDGGHIIGIGHIGHGIDIIIFGIIGHHDG:?DFHEHIIII NH:i:3 HI:i:1 AS:i:49 nM:i:0 +HWI-C00113:131:HMHYWADXX:2:1114:13486:49038 16 1 17341 1 28M237N23M * 0 0 GGGGTCCAGGAAGACATACTTCTTCTACAGGTTCTCGGTGGTGTTGAAGAG ?@@:D@DDFHAFFHGGFHFHH@CCHIIIII@:CFGFGGC?D)?8DHHGCGI NH:i:3 HI:i:1 AS:i:49 nM:i:0 diff --git a/tests/pysam_data/example_aligned_pairs.sam b/tests/pysam_data/example_aligned_pairs.sam new file mode 100644 index 0000000..e6f9830 --- /dev/null +++ b/tests/pysam_data/example_aligned_pairs.sam @@ -0,0 +1,81 @@ +@HD VN:1.0 GO:none SO:coordinate +@SQ SN:chrM LN:16571 +@SQ SN:chr1 LN:249250621 +@SQ SN:chr2 LN:243199373 +@SQ SN:chr3 LN:198022430 +@SQ SN:chr4 LN:191154276 +@SQ SN:chr5 LN:180915260 +@SQ SN:chr6 LN:171115067 +@SQ SN:chr7 LN:159138663 +@SQ SN:chr8 LN:146364022 +@SQ SN:chr9 LN:141213431 +@SQ SN:chr10 LN:135534747 +@SQ SN:chr11 LN:135006516 +@SQ SN:chr12 LN:133851895 +@SQ SN:chr13 LN:115169878 +@SQ SN:chr14 LN:107349540 +@SQ SN:chr15 LN:102531392 +@SQ SN:chr16 LN:90354753 +@SQ SN:chr17 LN:81195210 +@SQ SN:chr18 LN:78077248 +@SQ SN:chr19 LN:59128983 +@SQ SN:chr20 LN:63025520 +@SQ SN:chr21 LN:48129895 +@SQ SN:chr22 LN:51304566 +@SQ SN:chrX LN:155270560 +@SQ SN:chrY LN:59373566 +@RG ID:FC1_NA12892_03 PL:ILLUMINA SM:FC1_NA12892_03 +@PG ID:bwa PN:bwa VN:0.7.7-isis-1.0.0 +@PG ID:GATK IndelRealigner VN:1.6-23-gf0210b3 CL:knownAlleles=[] targetIntervals=/data/scratch/workspace/RunFolder/Data/Intensities/BaseCalls/Alignment/FC1-NA12892-03_S1_chrM.intervals LODThresholdForCleaning=5.0 consensusDeterminationModel=USE_READS entropyThreshold=0.15 maxReadsInMemory=150000 maxIsizeForMovement=3000 maxPositionalMoveAllowed=200 maxConsensuses=30 maxReadsForConsensuses=120 maxReadsForRealignment=20000 noOriginalAlignmentTags=false nWayOut=null generate_nWayOut_md5s=false check_early=false noPGTag=false keepPGTags=false indelsFileForDebugging=null statisticsFileForDebugging=null SNPsFileForDebugging=null +D0004:230:H08B1ADXX:1:1204:18619:71946 163 chr22 16084109 27 149M = 16084228 268 GTGCAGGCATGGAGATTCTGGGGTGAATCTGCTGAGTTTAAAAGCTTCCTTTGGAGATGCCCCTGGCCCCCTCCACCTGTCAAGAAGAGGCCATCCTATCTGCCTGTCAAGAAGAGGCCATCCTGGGCAGCACAGTAGAGGCAAATGGC BBBFFBFFFFFFFFFIFIFIFFI0BBFIFIIIIIFFFFIFIIIFFBIFIIIIFI>>>>>>====>=>>;:8,,((1*0536;;=<>;:;>>>>>>>>>>>>>>>>>>>><9=556.2<<<8===<<<9;9=>=>>>>>>>>>>>>>>>>.>>>===>>>>>>>4=>>==;<<896=>===<>>588-1.19<= RG:Z:QW85I PG:Z:tmap MD:Z:140 NM:i:0 AS:i:140 FZ:B:S,100,1,91,0,7,101,0,201,96,204,0,0,87,109,0,7,97,112,1,12,78,197,0,7,100,95,101,202,0,6,0,1,186,0,84,0,244,0,0,324,0,107,195,101,113,0,102,0,104,3,0,101,1,0,212,6,0,0,1,0,74,1,11,0,196,2,197,103,0,108,98,2,7,0,1,2,194,0,180,0,108,0,203,104,16,5,205,0,0,0,1,1,100,98,0,0,204,6,0,79,0,0,101,7,109,90,265,1,27,10,109,102,9,0,292,0,110,0,0,102,112,0,0,84,100,103,2,81,126,0,2,90,0,15,96,15,1,0,2,0,107,92,0,0,101,3,98,15,102,13,116,116,90,93,198,0,0,0,199,92,26,495,100,5,0,100,5,209,0,92,107,90,0,0,0,0,109,194,7,94,200,0,40,197,0,11,0,0,112,110,6,4,200,28,0,196,0,203,1,129,0,0,1,0,94,0,1,0,107,5,201,3,3,100,0,121,0,7,0,1,105,306,3,86,8,183,0,12,163,17,83,22,0,0,1,8,109,103,0,0,295,0,200,16,172,3,16,182,3,11,0,0,223,111,103,0,5,225,0,95 XA:Z:map2-1 XS:i:53 XT:i:38 XF:i:1 XE:i:0 +QW85I:468:729 0 chr1 156268499 63 140M15H * 0 0 GTCCAGTCTCCTGTAATTCTTGGGCTTGACTAGGCTTCCGACAACCTGGAGGCATTGCTCTTTCAGGGTATACACTGCAGTGTGATGTTGGCAAAAACAGGCTGTCCATTAACATTGGAAGATGGCACAAACAATTCAGT >>>>>>>====>=>>;:8,,((1*0536;;=<>;:;>>>>>>>>>>>>>>>>>>>><9=556.2<<<8===<<<9;9=>=>>>>>>>>>>>>>>>>.>>>===>>>>>>>4=>>==;<<896=>===<>>588-1.19<= RG:Z:QW85I PG:Z:tmap MD:Z:140 NM:i:0 AS:i:140 FZ:B:s,-100,200,-300,-400 XA:Z:map2-1 XS:i:53 XT:i:38 XF:i:1 XE:i:0 +QW85I:468:729 0 chr1 156268499 63 140M15H * 0 0 GTCCAGTCTCCTGTAATTCTTGGGCTTGACTAGGCTTCCGACAACCTGGAGGCATTGCTCTTTCAGGGTATACACTGCAGTGTGATGTTGGCAAAAACAGGCTGTCCATTAACATTGGAAGATGGCACAAACAATTCAGT >>>>>>>====>=>>;:8,,((1*0536;;=<>;:;>>>>>>>>>>>>>>>>>>>><9=556.2<<<8===<<<9;9=>=>>>>>>>>>>>>>>>>.>>>===>>>>>>>4=>>==;<<896=>===<>>588-1.19<= RG:Z:QW85I PG:Z:tmap MD:Z:140 NM:i:0 AS:i:140 FZ:B:c,-100,12 XA:Z:map2-1 XS:i:53 XT:i:38 XF:i:1 XE:i:0 +QW85I:468:729 0 chr1 156268499 63 140M15H * 0 0 GTCCAGTCTCCTGTAATTCTTGGGCTTGACTAGGCTTCCGACAACCTGGAGGCATTGCTCTTTCAGGGTATACACTGCAGTGTGATGTTGGCAAAAACAGGCTGTCCATTAACATTGGAAGATGGCACAAACAATTCAGT >>>>>>>====>=>>;:8,,((1*0536;;=<>;:;>>>>>>>>>>>>>>>>>>>><9=556.2<<<8===<<<9;9=>=>>>>>>>>>>>>>>>>.>>>===>>>>>>>4=>>==;<<896=>===<>>588-1.19<= RG:Z:QW85I PG:Z:tmap MD:Z:140 NM:i:0 AS:i:140 FZ:B:C,12,15 XA:Z:map2-1 XS:i:53 XT:i:38 XF:i:1 XE:i:0 +QW85I:468:729 0 chr1 156268499 63 140M15H * 0 0 GTCCAGTCTCCTGTAATTCTTGGGCTTGACTAGGCTTCCGACAACCTGGAGGCATTGCTCTTTCAGGGTATACACTGCAGTGTGATGTTGGCAAAAACAGGCTGTCCATTAACATTGGAAGATGGCACAAACAATTCAGT >>>>>>>====>=>>;:8,,((1*0536;;=<>;:;>>>>>>>>>>>>>>>>>>>><9=556.2<<<8===<<<9;9=>=>>>>>>>>>>>>>>>>.>>>===>>>>>>>4=>>==;<<896=>===<>>588-1.19<= RG:Z:QW85I PG:Z:tmap MD:Z:140 NM:i:0 AS:i:140 FZ:B:f,-1.0,5.0,2.5 XA:Z:map2-1 XS:i:53 XT:i:38 XF:i:1 XE:i:0 diff --git a/tests/pysam_data/example_empty_header.sam b/tests/pysam_data/example_empty_header.sam new file mode 100644 index 0000000..b1a3ca5 --- /dev/null +++ b/tests/pysam_data/example_empty_header.sam @@ -0,0 +1,321 @@ +@SQ SN:chr1 LN:1000 +XXX0000 0 chr1 100 170 171M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTC * AS:i:170 MS:i:50 +XXX0001 0 chr1 100 255 284M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGT * AS:i:283 MS:i:50 +XXX0002 0 chr1 100 205 206M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGA * AS:i:205 MS:i:50 +XXX0003 0 chr1 100 212 213M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCC * AS:i:212 MS:i:50 +XXX0004 0 chr1 100 208 209M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGG * AS:i:208 MS:i:50 +XXX0005 0 chr1 100 245 245M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGG * AS:i:245 MS:i:50 +XXX0006 0 chr1 100 251 251M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATC * AS:i:251 MS:i:50 +XXX0007 0 chr1 100 255 257M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAA * AS:i:257 MS:i:50 +XXX0008 0 chr1 100 255 285M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTT * AS:i:284 MS:i:50 +XXX0009 0 chr1 100 255 261M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTA * AS:i:261 MS:i:50 +XXX0010 0 chr1 100 255 289M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCG * AS:i:288 MS:i:50 +XXX0011 0 chr1 100 173 174M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCG * AS:i:173 MS:i:50 +XXX0012 0 chr1 100 255 265M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCC * AS:i:265 MS:i:50 +XXX0013 0 chr1 100 255 293M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATC * AS:i:292 MS:i:50 +XXX0014 0 chr1 100 166 167M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGA * AS:i:166 MS:i:50 +XXX0015 0 chr1 100 247 247M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAA * AS:i:247 MS:i:50 +XXX0016 0 chr1 100 255 295M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCA * AS:i:294 MS:i:50 +XXX0017 0 chr1 100 210 211M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTC * AS:i:210 MS:i:50 +XXX0018 0 chr1 100 235 236M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTG * AS:i:235 MS:i:50 +XXX0019 0 chr1 100 195 196M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCC * AS:i:195 MS:i:50 +XXX0020 0 chr1 100 178 179M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGG * AS:i:178 MS:i:50 +XXX0021 0 chr1 100 255 259M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGG * AS:i:259 MS:i:50 +XXX0022 0 chr1 100 238 239M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACT * AS:i:238 MS:i:50 +XXX0023 0 chr1 100 255 272M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCAC * AS:i:272 MS:i:50 +XXX0024 0 chr1 100 255 257M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAA * AS:i:257 MS:i:50 +XXX0025 0 chr1 100 255 268M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCA * AS:i:268 MS:i:50 +XXX0026 0 chr1 100 201 202M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGG * AS:i:201 MS:i:50 +XXX0027 0 chr1 100 180 181M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGT * AS:i:180 MS:i:50 +XXX0028 0 chr1 100 153 154M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCG * AS:i:153 MS:i:50 +XXX0029 0 chr1 100 255 280M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGA * AS:i:279 MS:i:50 +XXX0030 0 chr1 100 255 275M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCC * AS:i:274 MS:i:50 +XXX0031 0 chr1 100 255 259M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGG * AS:i:259 MS:i:50 +XXX0032 0 chr1 100 229 230M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCC * AS:i:229 MS:i:50 +XXX0033 0 chr1 100 229 230M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCC * AS:i:229 MS:i:50 +XXX0034 0 chr1 100 172 173M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGC * AS:i:172 MS:i:50 +XXX0035 0 chr1 100 246 246M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGA * AS:i:246 MS:i:50 +XXX0036 0 chr1 100 187 188M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACT * AS:i:187 MS:i:50 +XXX0037 0 chr1 100 189 190M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTG * AS:i:189 MS:i:50 +XXX0038 0 chr1 100 192 193M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTC * AS:i:192 MS:i:50 +XXX0039 0 chr1 100 221 222M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAA * AS:i:221 MS:i:50 +XXX0040 0 chr1 100 186 187M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCAC * AS:i:186 MS:i:50 +XXX0041 0 chr1 100 185 186M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCA * AS:i:185 MS:i:50 +XXX0042 0 chr1 100 255 299M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACT * AS:i:298 MS:i:50 +XXX0043 0 chr1 100 156 157M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTT * AS:i:156 MS:i:50 +XXX0044 0 chr1 100 255 270M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACC * AS:i:270 MS:i:50 +XXX0045 0 chr1 100 206 207M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGAC * AS:i:206 MS:i:50 +XXX0046 0 chr1 100 255 262M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAA * AS:i:262 MS:i:50 +XXX0047 0 chr1 100 249 249M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGA * AS:i:249 MS:i:50 +XXX0048 0 chr1 100 226 226M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGT * AS:i:226 MS:i:50 +XXX0049 0 chr1 100 233 234M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACG * AS:i:233 MS:i:50 +XXX0050 0 chr1 100 162 163M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGT * AS:i:162 MS:i:50 +XXX0051 0 chr1 100 242 242M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATA * AS:i:242 MS:i:50 +XXX0052 0 chr1 100 255 288M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCC * AS:i:287 MS:i:50 +XXX0053 0 chr1 100 255 267M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCC * AS:i:267 MS:i:50 +XXX0054 0 chr1 100 196 197M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCA * AS:i:196 MS:i:50 +XXX0055 0 chr1 100 236 237M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGA * AS:i:236 MS:i:50 +XXX0056 0 chr1 100 223 223M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAA * AS:i:223 MS:i:50 +XXX0057 0 chr1 100 171 172M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCG * AS:i:171 MS:i:50 +XXX0058 0 chr1 100 178 179M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGG * AS:i:178 MS:i:50 +XXX0059 0 chr1 100 255 269M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCAC * AS:i:269 MS:i:50 +XXX0060 0 chr1 100 195 196M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCC * AS:i:195 MS:i:50 +XXX0061 0 chr1 100 212 213M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCC * AS:i:212 MS:i:50 +XXX0062 0 chr1 100 255 258M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAG * AS:i:258 MS:i:50 +XXX0063 0 chr1 100 157 158M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTC * AS:i:157 MS:i:50 +XXX0064 0 chr1 100 173 174M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCG * AS:i:173 MS:i:50 +XXX0065 0 chr1 100 178 179M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGG * AS:i:178 MS:i:50 +XXX0066 0 chr1 100 186 187M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCAC * AS:i:186 MS:i:50 +XXX0067 0 chr1 100 255 290M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGG * AS:i:289 MS:i:50 +XXX0068 0 chr1 100 238 239M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACT * AS:i:238 MS:i:50 +XXX0069 0 chr1 100 176 177M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAG * AS:i:176 MS:i:50 +XXX0070 0 chr1 100 255 288M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCC * AS:i:287 MS:i:50 +XXX0071 0 chr1 100 206 207M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGAC * AS:i:206 MS:i:50 +XXX0072 0 chr1 100 224 224M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAA * AS:i:224 MS:i:50 +XXX0073 0 chr1 100 218 219M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTA * AS:i:218 MS:i:50 +XXX0074 0 chr1 100 237 238M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGAC * AS:i:237 MS:i:50 +XXX0075 0 chr1 100 250 250M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGAT * AS:i:250 MS:i:50 +XXX0076 0 chr1 100 255 265M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCC * AS:i:265 MS:i:50 +XXX0077 0 chr1 100 255 264M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGC * AS:i:264 MS:i:50 +XXX0078 0 chr1 100 242 242M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATA * AS:i:242 MS:i:50 +XXX0079 0 chr1 100 159 160M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTT * AS:i:159 MS:i:50 +XXX0080 0 chr1 100 248 248M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAG * AS:i:248 MS:i:50 +XXX0081 0 chr1 100 253 253M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCA * AS:i:253 MS:i:50 +XXX0082 0 chr1 100 199 200M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAA * AS:i:199 MS:i:50 +XXX0083 0 chr1 100 168 169M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATT * AS:i:168 MS:i:50 +XXX0084 0 chr1 100 249 249M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGA * AS:i:249 MS:i:50 +XXX0085 0 chr1 100 255 268M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCA * AS:i:268 MS:i:50 +XXX0086 0 chr1 100 255 298M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACAC * AS:i:297 MS:i:50 +XXX0087 0 chr1 100 229 230M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCC * AS:i:229 MS:i:50 +XXX0088 0 chr1 100 255 278M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCA * AS:i:277 MS:i:50 +XXX0089 0 chr1 100 198 199M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAA * AS:i:198 MS:i:50 +XXX0090 0 chr1 100 255 273M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACC * AS:i:272 MS:i:50 +XXX0091 0 chr1 100 182 183M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGA * AS:i:182 MS:i:50 +XXX0092 0 chr1 100 211 212M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCC * AS:i:211 MS:i:50 +XXX0093 0 chr1 100 207 208M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACG * AS:i:207 MS:i:50 +XXX0094 0 chr1 100 221 222M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAA * AS:i:221 MS:i:50 +XXX0095 0 chr1 100 177 178M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGG * AS:i:177 MS:i:50 +XXX0096 0 chr1 100 255 289M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCG * AS:i:288 MS:i:50 +XXX0097 0 chr1 100 255 276M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCT * AS:i:275 MS:i:50 +XXX0098 0 chr1 100 237 238M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGAC * AS:i:237 MS:i:50 +XXX0099 0 chr1 100 255 273M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACC * AS:i:272 MS:i:50 +XXX0100 0 chr1 100 255 264M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGC * AS:i:264 MS:i:50 +XXX0101 0 chr1 100 255 285M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTT * AS:i:284 MS:i:50 +XXX0102 0 chr1 100 233 234M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACG * AS:i:233 MS:i:50 +XXX0103 0 chr1 100 237 238M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGAC * AS:i:237 MS:i:50 +XXX0104 0 chr1 100 214 215M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCAT * AS:i:214 MS:i:50 +XXX0105 0 chr1 100 154 155M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGT * AS:i:154 MS:i:50 +XXX0106 0 chr1 100 181 182M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTG * AS:i:181 MS:i:50 +XXX0107 0 chr1 100 255 265M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCC * AS:i:265 MS:i:50 +XXX0108 0 chr1 100 255 259M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGG * AS:i:259 MS:i:50 +XXX0109 0 chr1 100 186 187M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCAC * AS:i:186 MS:i:50 +XXX0110 0 chr1 100 172 173M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGC * AS:i:172 MS:i:50 +XXX0111 0 chr1 100 155 156M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTT * AS:i:155 MS:i:50 +XXX0112 0 chr1 100 209 210M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGT * AS:i:209 MS:i:50 +XXX0113 0 chr1 100 255 257M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAA * AS:i:257 MS:i:50 +XXX0114 0 chr1 100 255 260M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGT * AS:i:260 MS:i:50 +XXX0115 0 chr1 100 195 196M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCC * AS:i:195 MS:i:50 +XXX0116 0 chr1 100 200 201M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAG * AS:i:200 MS:i:50 +XXX0117 0 chr1 100 255 271M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCA * AS:i:271 MS:i:50 +XXX0118 0 chr1 100 255 297M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACA * AS:i:296 MS:i:50 +XXX0119 0 chr1 100 163 164M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTA * AS:i:163 MS:i:50 +XXX0120 0 chr1 100 255 256M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGA * AS:i:256 MS:i:50 +XXX0121 0 chr1 100 255 284M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGT * AS:i:283 MS:i:50 +XXX0122 0 chr1 100 176 177M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAG * AS:i:176 MS:i:50 +XXX0123 0 chr1 100 251 251M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATC * AS:i:251 MS:i:50 +XXX0124 0 chr1 100 255 260M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGT * AS:i:260 MS:i:50 +XXX0125 0 chr1 100 255 285M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTT * AS:i:284 MS:i:50 +XXX0126 0 chr1 100 201 202M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGG * AS:i:201 MS:i:50 +XXX0127 0 chr1 100 165 166M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACG * AS:i:165 MS:i:50 +XXX0128 0 chr1 100 255 279M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAG * AS:i:278 MS:i:50 +XXX0129 0 chr1 100 165 166M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACG * AS:i:165 MS:i:50 +XXX0130 0 chr1 100 204 205M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGG * AS:i:204 MS:i:50 +XXX0131 0 chr1 100 199 200M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAA * AS:i:199 MS:i:50 +XXX0132 0 chr1 100 208 209M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGG * AS:i:208 MS:i:50 +XXX0133 0 chr1 100 209 210M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGT * AS:i:209 MS:i:50 +XXX0134 0 chr1 100 183 184M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGAT * AS:i:183 MS:i:50 +XXX0135 0 chr1 100 255 266M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCC * AS:i:266 MS:i:50 +XXX0136 0 chr1 100 255 293M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATC * AS:i:292 MS:i:50 +XXX0137 0 chr1 100 255 285M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTT * AS:i:284 MS:i:50 +XXX0138 0 chr1 100 219 220M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAG * AS:i:219 MS:i:50 +XXX0139 0 chr1 100 247 247M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAA * AS:i:247 MS:i:50 +XXX0140 0 chr1 100 192 193M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTC * AS:i:192 MS:i:50 +XXX0141 0 chr1 100 255 261M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTA * AS:i:261 MS:i:50 +XXX0142 0 chr1 100 212 213M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCC * AS:i:212 MS:i:50 +XXX0143 0 chr1 100 255 276M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCT * AS:i:275 MS:i:50 +XXX0144 0 chr1 100 177 178M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGG * AS:i:177 MS:i:50 +XXX0145 0 chr1 100 179 180M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGG * AS:i:179 MS:i:50 +XXX0146 0 chr1 100 255 263M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAG * AS:i:263 MS:i:50 +XXX0147 0 chr1 100 255 272M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCAC * AS:i:272 MS:i:50 +XXX0148 0 chr1 100 255 299M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACT * AS:i:298 MS:i:50 +XXX0149 0 chr1 100 255 274M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCC * AS:i:273 MS:i:50 +XXX0150 0 chr1 100 255 300M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTC * AS:i:299 MS:i:50 +XXX0151 0 chr1 100 157 158M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTC * AS:i:157 MS:i:50 +XXX0152 0 chr1 100 161 162M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTG * AS:i:161 MS:i:50 +XXX0153 0 chr1 100 202 203M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGC * AS:i:202 MS:i:50 +XXX0154 0 chr1 100 171 172M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCG * AS:i:171 MS:i:50 +XXX0155 0 chr1 100 183 184M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGAT * AS:i:183 MS:i:50 +XXX0156 0 chr1 100 255 286M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTG * AS:i:285 MS:i:50 +XXX0157 0 chr1 100 255 257M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAA * AS:i:257 MS:i:50 +XXX0158 0 chr1 100 255 275M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCC * AS:i:274 MS:i:50 +XXX0159 0 chr1 100 255 276M * 0 0 CCTCTTTTATAGCAGCATGAACCCGTCGGTTTTAAACACGGTGTCAGCGGTGGCCTCGGAAGTATGGCCCATTCGCGAACGATGCCGTCCCTTTCAAGACACCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCT * AS:i:275 MS:i:50 +XXX0174 16 chr1 201 255 300M * 0 0 CCTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:298 MS:i:50 +XXX0238 16 chr1 202 255 299M * 0 0 CTGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:297 MS:i:50 +XXX0286 16 chr1 203 255 298M * 0 0 TGAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:296 MS:i:50 +XXX0249 16 chr1 204 255 297M * 0 0 GAGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:295 MS:i:50 +XXX0201 16 chr1 205 255 296M * 0 0 AGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:294 MS:i:50 +XXX0225 16 chr1 205 255 296M * 0 0 AGACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:294 MS:i:50 +XXX0265 16 chr1 206 255 295M * 0 0 GACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:293 MS:i:50 +XXX0182 16 chr1 207 255 294M * 0 0 ACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:292 MS:i:50 +XXX0275 16 chr1 207 255 294M * 0 0 ACACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:292 MS:i:50 +XXX0168 16 chr1 209 255 292M * 0 0 ACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:290 MS:i:50 +XXX0208 16 chr1 209 255 292M * 0 0 ACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:290 MS:i:50 +XXX0264 16 chr1 209 255 292M * 0 0 ACGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:290 MS:i:50 +XXX0258 16 chr1 210 255 291M * 0 0 CGGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:289 MS:i:50 +XXX0226 16 chr1 211 255 290M * 0 0 GGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:288 MS:i:50 +XXX0228 16 chr1 211 255 290M * 0 0 GGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:288 MS:i:50 +XXX0263 16 chr1 211 255 290M * 0 0 GGGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:288 MS:i:50 +XXX0205 16 chr1 212 255 289M * 0 0 GGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:287 MS:i:50 +XXX0276 16 chr1 212 255 289M * 0 0 GGATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:287 MS:i:50 +XXX0192 16 chr1 213 255 288M * 0 0 GATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:286 MS:i:50 +XXX0298 16 chr1 213 255 288M * 0 0 GATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:286 MS:i:50 +XXX0196 16 chr1 214 255 287M * 0 0 ATCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:285 MS:i:50 +XXX0291 16 chr1 215 255 286M * 0 0 TCTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:284 MS:i:50 +XXX0245 16 chr1 216 255 285M * 0 0 CTTTATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:283 MS:i:50 +XXX0284 16 chr1 220 255 281M * 0 0 ATCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:278 MS:i:50 +XXX0227 16 chr1 221 255 280M * 0 0 TCGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:277 MS:i:50 +XXX0166 16 chr1 222 255 279M * 0 0 CGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:276 MS:i:50 +XXX0294 16 chr1 222 255 279M * 0 0 CGCCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:276 MS:i:50 +XXX0300 16 chr1 224 255 277M * 0 0 CCCGTGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:274 MS:i:50 +XXX0212 16 chr1 228 255 273M * 0 0 TGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:271 MS:i:50 +XXX0313 16 chr1 228 255 273M * 0 0 TGAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:271 MS:i:50 +XXX0318 16 chr1 229 255 272M * 0 0 GAGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:270 MS:i:50 +XXX0193 16 chr1 230 255 271M * 0 0 AGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:268 MS:i:50 +XXX0315 16 chr1 230 255 271M * 0 0 AGACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:268 MS:i:50 +XXX0211 16 chr1 231 255 270M * 0 0 GACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:267 MS:i:50 +XXX0295 16 chr1 231 255 270M * 0 0 GACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:267 MS:i:50 +XXX0235 16 chr1 232 255 269M * 0 0 ACCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:266 MS:i:50 +XXX0170 16 chr1 233 255 268M * 0 0 CCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:265 MS:i:50 +XXX0310 16 chr1 233 255 268M * 0 0 CCCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:265 MS:i:50 +XXX0252 16 chr1 234 255 267M * 0 0 CCACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:265 MS:i:50 +XXX0206 16 chr1 235 255 266M * 0 0 CACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:264 MS:i:50 +XXX0223 16 chr1 236 255 265M * 0 0 ACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:263 MS:i:50 +XXX0229 16 chr1 236 255 265M * 0 0 ACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:263 MS:i:50 +XXX0268 16 chr1 236 255 265M * 0 0 ACACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:263 MS:i:50 +XXX0189 16 chr1 237 255 264M * 0 0 CACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:262 MS:i:50 +XXX0299 16 chr1 237 255 264M * 0 0 CACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:262 MS:i:50 +XXX0316 16 chr1 238 255 263M * 0 0 ACACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:261 MS:i:50 +XXX0224 16 chr1 239 255 262M * 0 0 CACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:260 MS:i:50 +XXX0255 16 chr1 240 255 261M * 0 0 ACCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:259 MS:i:50 +XXX0278 16 chr1 241 255 260M * 0 0 CCACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:258 MS:i:50 +XXX0314 16 chr1 243 255 258M * 0 0 ACGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:257 MS:i:50 +XXX0282 16 chr1 244 255 257M * 0 0 CGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:256 MS:i:50 +XXX0311 16 chr1 244 255 257M * 0 0 CGCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:256 MS:i:50 +XXX0176 16 chr1 245 255 256M * 0 0 GCTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:255 MS:i:50 +XXX0188 16 chr1 246 254 255M * 0 0 CTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:254 MS:i:50 +XXX0290 16 chr1 246 254 255M * 0 0 CTTTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:254 MS:i:50 +XXX0187 16 chr1 248 252 253M * 0 0 TTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:252 MS:i:50 +XXX0259 16 chr1 248 252 253M * 0 0 TTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:252 MS:i:50 +XXX0292 16 chr1 248 252 253M * 0 0 TTCCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:252 MS:i:50 +XXX0222 16 chr1 250 249 251M * 0 0 CCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:249 MS:i:50 +XXX0256 16 chr1 250 249 251M * 0 0 CCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:249 MS:i:50 +XXX0296 16 chr1 250 249 251M * 0 0 CCCGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:249 MS:i:50 +XXX0281 16 chr1 252 248 249M * 0 0 CGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:248 MS:i:50 +XXX0289 16 chr1 252 248 249M * 0 0 CGTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:248 MS:i:50 +XXX0171 16 chr1 253 247 248M * 0 0 GTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:247 MS:i:50 +XXX0181 16 chr1 253 247 248M * 0 0 GTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:247 MS:i:50 +XXX0266 16 chr1 253 247 248M * 0 0 GTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:247 MS:i:50 +XXX0319 16 chr1 253 247 248M * 0 0 GTTTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:247 MS:i:50 +XXX0172 16 chr1 255 245 246M * 0 0 TTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:245 MS:i:50 +XXX0317 16 chr1 255 245 246M * 0 0 TTCTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:245 MS:i:50 +XXX0207 16 chr1 257 242 244M * 0 0 CTTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:242 MS:i:50 +XXX0240 16 chr1 258 242 243M * 0 0 TTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:242 MS:i:50 +XXX0246 16 chr1 258 242 243M * 0 0 TTTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:242 MS:i:50 +XXX0203 16 chr1 259 240 242M * 0 0 TTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:240 MS:i:50 +XXX0217 16 chr1 259 240 242M * 0 0 TTGTACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:240 MS:i:50 +XXX0216 16 chr1 262 237 239M * 0 0 TACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:237 MS:i:50 +XXX0230 16 chr1 262 237 239M * 0 0 TACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:237 MS:i:50 +XXX0277 16 chr1 263 236 238M * 0 0 ACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:236 MS:i:50 +XXX0308 16 chr1 263 236 238M * 0 0 ACGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:236 MS:i:50 +XXX0288 16 chr1 264 235 237M * 0 0 CGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:235 MS:i:50 +XXX0305 16 chr1 264 235 237M * 0 0 CGATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:235 MS:i:50 +XXX0210 16 chr1 265 234 236M * 0 0 GATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:234 MS:i:50 +XXX0164 16 chr1 266 233 235M * 0 0 ATTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:233 MS:i:50 +XXX0221 16 chr1 267 232 234M * 0 0 TTTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:232 MS:i:50 +XXX0163 16 chr1 268 231 233M * 0 0 TTCGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:231 MS:i:50 +XXX0244 16 chr1 270 228 231M * 0 0 CGCGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:228 MS:i:50 +XXX0237 16 chr1 272 226 229M * 0 0 CGCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:226 MS:i:50 +XXX0178 16 chr1 273 226 228M * 0 0 GCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:226 MS:i:50 +XXX0202 16 chr1 273 226 228M * 0 0 GCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:226 MS:i:50 +XXX0236 16 chr1 273 226 228M * 0 0 GCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:226 MS:i:50 +XXX0304 16 chr1 273 226 228M * 0 0 GCAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:226 MS:i:50 +XXX0270 16 chr1 274 225 227M * 0 0 CAGGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:225 MS:i:50 +XXX0161 16 chr1 276 223 225M * 0 0 GGGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:223 MS:i:50 +XXX0287 16 chr1 277 222 224M * 0 0 GGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:222 MS:i:50 +XXX0306 16 chr1 277 222 224M * 0 0 GGGTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:222 MS:i:50 +XXX0173 16 chr1 279 220 222M * 0 0 GTGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:220 MS:i:50 +XXX0269 16 chr1 280 219 221M * 0 0 TGATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:219 MS:i:50 +XXX0303 16 chr1 282 216 219M * 0 0 ATCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:216 MS:i:50 +XXX0220 16 chr1 283 215 218M * 0 0 TCACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:215 MS:i:50 +XXX0219 16 chr1 284 214 217M * 0 0 CACTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:214 MS:i:50 +XXX0177 16 chr1 286 212 215M * 0 0 CTTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:212 MS:i:50 +XXX0257 16 chr1 287 211 214M * 0 0 TTGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:211 MS:i:50 +XXX0241 16 chr1 288 210 213M * 0 0 TGGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:210 MS:i:50 +XXX0167 16 chr1 289 209 212M * 0 0 GGTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:209 MS:i:50 +XXX0261 16 chr1 290 208 211M * 0 0 GTCTCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:208 MS:i:50 +XXX0312 16 chr1 293 205 208M * 0 0 TCCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:205 MS:i:50 +XXX0272 16 chr1 294 204 207M * 0 0 CCAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:204 MS:i:50 +XXX0253 16 chr1 295 203 206M * 0 0 CAAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:203 MS:i:50 +XXX0254 16 chr1 296 202 205M * 0 0 AAAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:202 MS:i:50 +XXX0307 16 chr1 297 201 204M * 0 0 AAAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:201 MS:i:50 +XXX0169 16 chr1 298 200 203M * 0 0 AAGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:200 MS:i:50 +XXX0232 16 chr1 299 199 202M * 0 0 AGGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:199 MS:i:50 +XXX0195 16 chr1 300 198 201M * 0 0 GGCGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:198 MS:i:50 +XXX0179 16 chr1 302 196 199M * 0 0 CGGACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:196 MS:i:50 +XXX0160 16 chr1 305 193 196M * 0 0 ACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:193 MS:i:50 +XXX0271 16 chr1 305 193 196M * 0 0 ACGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:193 MS:i:50 +XXX0180 16 chr1 306 192 195M * 0 0 CGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:192 MS:i:50 +XXX0185 16 chr1 306 192 195M * 0 0 CGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:192 MS:i:50 +XXX0199 16 chr1 306 192 195M * 0 0 CGGTCCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:192 MS:i:50 +XXX0191 16 chr1 310 188 191M * 0 0 CCCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:188 MS:i:50 +XXX0250 16 chr1 311 187 190M * 0 0 CCATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:187 MS:i:50 +XXX0273 16 chr1 312 186 189M * 0 0 CATGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:186 MS:i:50 +XXX0239 16 chr1 314 184 187M * 0 0 TGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:184 MS:i:50 +XXX0301 16 chr1 314 184 187M * 0 0 TGTTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:184 MS:i:50 +XXX0197 16 chr1 316 182 185M * 0 0 TTAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:182 MS:i:50 +XXX0260 16 chr1 317 181 184M * 0 0 TAGAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:181 MS:i:50 +XXX0190 16 chr1 319 179 182M * 0 0 GAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:179 MS:i:50 +XXX0309 16 chr1 319 179 182M * 0 0 GAAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:179 MS:i:50 +XXX0285 16 chr1 320 178 181M * 0 0 AAAAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:178 MS:i:50 +XXX0214 16 chr1 322 176 179M * 0 0 AAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:176 MS:i:50 +XXX0279 16 chr1 322 176 179M * 0 0 AAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:176 MS:i:50 +XXX0280 16 chr1 322 176 179M * 0 0 AAGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:176 MS:i:50 +XXX0242 16 chr1 323 175 178M * 0 0 AGTTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:175 MS:i:50 +XXX0213 16 chr1 325 173 176M * 0 0 TTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:173 MS:i:50 +XXX0233 16 chr1 325 173 176M * 0 0 TTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:173 MS:i:50 +XXX0297 16 chr1 325 173 176M * 0 0 TTCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:173 MS:i:50 +XXX0183 16 chr1 326 172 175M * 0 0 TCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:172 MS:i:50 +XXX0194 16 chr1 326 172 175M * 0 0 TCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:172 MS:i:50 +XXX0283 16 chr1 326 172 175M * 0 0 TCCCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:172 MS:i:50 +XXX0215 16 chr1 328 170 173M * 0 0 CCTACGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:170 MS:i:50 +XXX0162 16 chr1 332 166 169M * 0 0 CGTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:166 MS:i:50 +XXX0262 16 chr1 333 165 168M * 0 0 GTGACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:165 MS:i:50 +XXX0200 16 chr1 335 163 166M * 0 0 GACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:163 MS:i:50 +XXX0234 16 chr1 336 161 165M * 0 0 ACTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:161 MS:i:50 +XXX0186 16 chr1 337 161 164M * 0 0 CTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:161 MS:i:50 +XXX0218 16 chr1 337 161 164M * 0 0 CTATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:161 MS:i:50 +XXX0248 16 chr1 338 160 163M * 0 0 TATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:160 MS:i:50 +XXX0267 16 chr1 338 160 163M * 0 0 TATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:160 MS:i:50 +XXX0247 16 chr1 339 158 162M * 0 0 ATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:158 MS:i:50 +XXX0274 16 chr1 339 158 162M * 0 0 ATATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:158 MS:i:50 +XXX0198 16 chr1 340 158 161M * 0 0 TATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:158 MS:i:50 +XXX0251 16 chr1 340 158 161M * 0 0 TATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:158 MS:i:50 +XXX0204 16 chr1 341 156 160M * 0 0 ATGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:156 MS:i:50 +XXX0175 16 chr1 342 155 159M * 0 0 TGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:155 MS:i:50 +XXX0209 16 chr1 342 155 159M * 0 0 TGGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:155 MS:i:50 +XXX0243 16 chr1 343 154 158M * 0 0 GGAAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:154 MS:i:50 +XXX0165 16 chr1 345 152 156M * 0 0 AAGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:152 MS:i:50 +XXX0231 16 chr1 346 151 155M * 0 0 AGATCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:151 MS:i:50 +XXX0293 16 chr1 349 148 152M * 0 0 TCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:148 MS:i:50 +XXX0302 16 chr1 349 148 152M * 0 0 TCCAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:148 MS:i:50 +XXX0184 16 chr1 351 146 150M * 0 0 CAGGAAGGTAAGCCCCACCACCCCTCAGATCGTTGCCGGATCCACACTCAGCAACTCGGGCTTACCATAACCCCCGTAGATACTAGTCCCCGCCCGACGACAACAGTTTCTGAGATCCAAAAGCCGCCTCAAGGTGCAGACATAGGGCTA * AS:i:146 MS:i:50 diff --git a/tests/pysam_data/example_empty_with_header.sam b/tests/pysam_data/example_empty_with_header.sam new file mode 100644 index 0000000..60f088e --- /dev/null +++ b/tests/pysam_data/example_empty_with_header.sam @@ -0,0 +1 @@ +@HD VN:1.3 SO:coordinate diff --git a/tests/pysam_data/example_no_seq_in_header.bam b/tests/pysam_data/example_no_seq_in_header.bam new file mode 100644 index 0000000000000000000000000000000000000000..72de636194cf09dae6b47ee000ff954c2751b9a2 GIT binary patch literal 953 zcmV;q14jHGiwFb&00000{{{d;LjnN60cFrTNW)MRfZ?O1t*MIO;?O1FprA<_oAeQ- zRxLijXMHOo(MDQmlQv1U)xp6*5eG+cbxK-mcZM0;b*#GoSbK4x@Cu?*AJ5}xRA57QS@#*A#QYLm~rC^23AijXuiny^&N zYl3ZLld3H&q;&Gia-3zPwSp@0elC|+(-zAa?1HJLbWRf`UglPdlFTE{vLW{WaVb5a z6@*MC{C{vswd@?fn72Lkzni;$pT(pp`k-O^%8ez$uCI$$3n&qVmLK*KP3~%}c~jLB zMg~s3E_#>*+4wRYkRc*Bxv&Djw>~&=Jb>f-HGjJV;pXy~k{}Yt9z#h8+G|rztS~&5 zA32<);OO(ZvWf%_kKEJ(0WGl7aqA)Bhr|92hG=@3(gC2Bpz)#`frKD#l_QX$v{i>d zM(}Jo5d`4Xe5oK21ZI+IdbRIOszdPAeCH-0gy8(M3PBilq8frQg0*`Wf&nPC1CZZ0 zuA}I#m_acGXHRdq#1w*$HZOu{m_2+40;UnnrPm!lGN?9x@&W(=ABzYC000000RIL6 zLPG)o+X1cAPixdb7zXf3^kB=@vRf6z-Rw^OOc$h(cV;rl40th@?V*dHAPBYxL3%8H zg1WSI>D{9r!INJ@K@=1`w%?=r&TazfCWk0KLx#BoemwIgCxnm=jk&J>L3OVCcy=0a(m zC;1@HUpylDlikj*4>!*W#}9P)Z5>>gL@90nAWhR%$=hDfpC7ZOB4m+WVH8DmNxzg# z_b=Rc6-m%mBC!&wgfgHqCE{kvHip?P++Kt=l=2@anE}qZG?2zxW_8N!@%;GqecB&* z-h)1M>nSK7G_7v^B+OY{NhTLME$_S#O4&(BY6SGoaLKh73!{`uk5#*~!np z>4ak^iI%Yet%ZhFN^k6s@p@QsE%ttJYQhG}W=VN?>D@Z3P+HHd1iT)|QX{0$wNkp& zN?0`!V>G-M+!+O4RnjRXdpIcPRmqL^Gb@F_X0k-<+MINkofL&I+!h-DdM6G_T$H>z zd;{8QUVlDv&i|zsg#(*GWA0B?A?B7_589:1:101:825:28 +GGGAACAGGGGGGTGCACTAATGCGCTCCACGCCC +>B7_589:1:101:825:28 +TGTGTCCATGTACACACGCTGTCCTATGTACTTAT +>B7_589:1:110:543:934 +AAGAATTGTAAAAGTCAAAATTAAAGTTCAATACT +>B7_589:1:110:543:934 +ACAAGCCAGAAGAGATTGGATCTAATTTTTGGACT +>B7_589:1:122:337:968 +ACAGGGGGCTGCGCGGTTTCCCATCATGAAGCACT +>B7_589:1:122:337:968 +GCTTTACTGTCTAAACTATGAAGAGACTATTGCCA +>B7_589:1:122:77:789 +ACTATATTTATGCTATTCAGTTCTAAATATAGAAA +>B7_589:1:122:77:789 +GGACGCTGAAGAACTTTGATGCCCTCTTCTTCCAA +>B7_589:1:168:69:249 +ATATGCTGTTTACAAGAAACTCATTAATAAAGACA +>B7_589:1:168:69:249 +TTCAGCAAGAAGATATAACCATCCTACTAAATACA +>B7_589:1:29:529:379 +CAGTTTCTGCCCCCAGCATGGTTGTACTGGGCAAT +>B7_589:1:29:529:379 +GACTCTATCCCAAATTCCCAATTACGTCCTATCTT +>B7_589:2:30:644:942 +TACCTAATTGGTACAATGTACAATATTCTGATGAT +>B7_589:2:30:644:942 +TATATCAGATAAAGCACACTTTAAATCAACAACAG +>B7_589:2:73:730:487 +AGGAAGAAAAGGTCTTTCAAAAGGTGATGTGTGTT +>B7_589:2:73:730:487 +TAGCCATTTCTTTTGGCATTTGCCTTCAGACCCTA +>B7_589:2:9:49:661 +TACACACAAAAGTACAAAACTCACAGGTTTTATAA +>B7_589:2:9:49:661 +TGCTAAACTAAGCATCATAAATGAAGCGGAAATAA +>B7_589:3:71:478:175 +ACAGAGCTTTCAAGAAGTATGAGATTATGTAAAGT +>B7_589:3:71:478:175 +TAGACATCTAAATGAAAGAGGCTCAAAGAATGCCA +>B7_589:3:82:13:897 +ATACAGTCATCTATAAAGGAAATCCCAGCAGAATA +>B7_589:3:82:13:897 +CATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCT +>B7_589:4:54:989:654 +ACTTATCATGACTCTATCCCAAATTCCCAATTACG +>B7_589:4:54:989:654 +TCCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTT +>B7_589:5:147:405:738 +AGGGATTAAATTCCCCCACTTAAGAGATATAGATT +>B7_589:5:147:405:738 +ATCAGATAAAGCACACTTTAAATCAACAACAGTAA +>B7_589:5:198:564:731 +ACAAAGGAGGTCATCATACAATGATAAAAAGATCA +>B7_589:5:198:564:731 +ATAGATTGGCAGAACAGATTTAAAAACATGAACTA +>B7_589:5:50:950:562 +CTATTTTTGTCTTGACACCCTACTAATATTTGTCT +>B7_589:5:50:950:562 +GCCCCATCTCTTGTAATCTCTCTCCTTTTTGCTGC +>B7_589:5:68:440:424 +ACACTTTAAATCAACAACAGTAAAATAAAACAAAG +>B7_589:5:68:440:424 +TGGTACAATGTACAATATTCTGATGATGGTTACAC +>B7_589:6:108:958:42 +AAAGTACAAAACTCACAGGTTTTATAAAACAATTA +>B7_589:6:108:958:42 +TATGCCCTGCTAAACTAAGCATCATAAATGAAGGG +>B7_589:6:114:714:317 +AACCCCAGGGAATTTGTCAATGTCAGGGAAGGAGC +>B7_589:6:114:714:317 +TGCCAGCACAGGGGCTTAACCTCTGGTGACTGCCA +>B7_589:6:120:14:944 +CAAAAGGTGATGTGTGTTCTCATCAACCTCATACA +>B7_589:6:120:14:944 +CAAAGATGAAACGCGTAACTGCGCTCTCATTCACT +>B7_589:6:33:356:636 +TTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTTTT +>B7_589:7:112:203:90 +CCTGTCACCCAATGGACCTGTGATATCTGGATTCT +>B7_589:7:112:203:90 +CTTGAGAACCCCAGGGAATTTGTCAATGTCAGGGA +>B7_589:7:154:26:712 +ATTGAGACTACAGAGCAACTAGGTAAAAAATTAAC +>B7_589:7:154:26:712 +TTAATAAAGACATGAGTTCAGGTAAAGGGGTGGAA +>B7_589:7:72:916:763 +CTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGGT +>B7_589:7:72:916:763 +GTCCTATCTTCTTCTTAGGGAAGAACAGCTTAGGT +>B7_589:7:76:306:561 +GGTGGAAAAAGATGTTCTACGCAAACAGAAACCAA +>B7_589:7:76:306:561 +TACAGAGCAACTAGGTAAAAAATTAACATTACAAC +>B7_589:7:93:634:323 +CTTAAAGAAAAAAAAACCTGTCAAACACGAATGTT +>B7_589:7:93:634:323 +TAAAGTTCAATACTCACCATCATAAATACACACAA +>B7_589:8:113:968:19 +GAAAACTATATTTATGCTATTCAGTTCTAAATATA +>B7_589:8:118:829:36 +AGTATTGGTAAAGATGTGGGGAAAAAAGTAAACTC +>B7_589:8:118:829:36 +TAATTGGTACAATGTACAATATTCTGATGATGGTT +>B7_589:8:139:727:808 +AAGTAAATAAAACACATAGCTAAAACTAAAAAAGC +>B7_589:8:139:727:808 +ACAAATACTACTAGACCTAAGAGGGATGAGAAATT +>B7_589:8:157:935:374 +CAGTTACCAAATGTGTTTATTACCAGAGGGATGGA +>B7_589:8:157:935:374 +TCTTCATCCTGGACCCTGAGAGATTCTGCAGCCCA +>B7_589:8:2:434:715 +AGAGAGAACTTCCCTGGAGGTCTGATGGCGTTTCT +>B7_589:8:2:434:715 +CTTGTTGTTGGTTTTCTGTTTCTTTGTTTGATTTT +>B7_589:8:74:674:124 +CACTGAACTTCCACGTCTCATCTAGGGGAACAGGG +>B7_589:8:74:674:124 +TTCTTATCTGCACATTACTACCCTGCAATTAATAT +>B7_591:1:191:462:705 +CAGATCCAGATTGCTTGTGGTCTGACAGGCTGCAAC +>B7_591:1:191:462:705 +CATCCCTGTCTTACTTCCAGCTCCCCAGAGGGAAAG +>B7_591:1:60:837:923 +CATCAACCGCATACACTCACATGGTTTAGGGGTATA +>B7_591:1:60:837:923 +TTCACGCCAGCTCCCTGTCACCCAATGGACCTCTGA +>B7_591:2:123:924:645 +TATATCAGATAAAGCACACTTTAAATCAACAACAGT +>B7_591:2:123:924:645 +TGAATAAAAAGGGATTAAATTCCCCCACTTAAGAGA +>B7_591:2:134:868:252 +AAGAACTTTGATGCCCTCTTCTTCCAAAGATGAAAC +>B7_591:2:134:868:252 +ATGAACAACAGGAAGAAAAGGTCTTTCAAAAGGTGA +>B7_591:2:13:100:876 +ACAGGGATTCCTGAGGAAAAAGAAAAAGTGAGAAGT +>B7_591:2:13:100:876 +AGAATATATAAAGTCAACATGAAGGAAAAAAATTCT +>B7_591:2:223:583:968 +AATATAGTTGAAAGCTCTAACAATAGACTAAACCAA +>B7_591:2:223:583:968 +TATGAGGCACAGGTATTCCTGAGGAAAAAGAAAAAG +>B7_591:2:240:603:890 +GCTCCCAAGAGGGAAAGCTTTCAACGCTTCTAGCCA +>B7_591:2:240:603:890 +TCACAATGAACAACAGGAAGAAAAGGTCTTTCAAAA +>B7_591:2:279:124:41 +GAATTAACCCAGTCAGACAAAAANNAAGAAAAAAGA +>B7_591:2:279:124:41 +GCTAGAGATTTAGACATCTAAATGAAAGAGGCTCAA +>B7_591:2:27:280:592 +AATAACAATGGGCTTCTCAGCGGAAACCTTACAAGC +>B7_591:2:27:280:592 +AGAGATTTAGACATCTAAATGAAAGAGGCTCAAAGA +>B7_591:2:309:798:997 +TTTTTTTTTTTTTTTTTTCTCTTTTTTTTTTTTTTT +>B7_591:2:323:639:311 +AAGCCGTTCTATTTGTAATGAAAACTATATTTAGGC +>B7_591:2:323:639:311 +TACCAAATGTGTTTATTACCAGAGGGATGGAGGGAA +>B7_591:2:46:220:58 +CAAATCTGCGCTTGTACTTCTAAATCTATAAAAAAA +>B7_591:2:46:220:58 +TTCCACTTTGGAAAACAATTTGGTAATTTCGTTTTT +>B7_591:3:168:69:605 +TACCCGAGGGATGGAGGGTAGAGGGACGCTGAAGTG +>B7_591:3:168:69:605 +TCTGACAGGCGGCAACTGTGAGCCATCACAATGAAC +>B7_591:3:179:496:161 +AAAAACATGAACTAACTATATGCTGTTTACAAGAAA +>B7_591:3:179:496:161 +AAGTACAAAACTCACAGGTTTTATAAAACAATTAAT +>B7_591:3:277:458:330 +AATGTCAGGGAAGGAGCCTTTTGTCAGTTACCAAAT +>B7_591:3:277:458:330 +TGATATCTGGATTCTGGGAAATTCTTCATCCTGGAC +>B7_591:3:291:404:199 +TATAAAACAATTAATTGAGACTACAGAGCAACTAGG +>B7_591:3:291:404:199 +TGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAAGC +>B7_591:3:305:565:952 +GTCCGTGTCCTCCCATCTGGCCTCGTCCACACTGGT +>B7_591:3:305:565:952 +TAATACTATGTTTCTTATCTGCACATTACTACCCTG +>B7_591:3:45:294:380 +ATAATTGTGTCCATGTACACACGATGTCATATGTAC +>B7_591:3:45:294:380 +CCTCGTCCACACTGGTTCGCTTGAAAGCTTGGGCTG +>B7_591:4:103:111:720 +CAGTTACCAAATGTGTTTATTACCAGAGGGATGGAG +>B7_591:4:103:111:720 +TCTTCATCCTGGACCCTGAGAGATTCTGCAGCCCAG +>B7_591:4:159:508:571 +CAAAACCTCATATATCAATATTAACTTTGAATAAAA +>B7_591:4:159:508:571 +TGGAAAAAGATGTTCTACGCAAACAGAAACCAAATG +>B7_591:4:216:650:516 +GAACAGCTTAGGTATCAATTTGGTGTTCTGTGTAAA +>B7_591:4:216:650:516 +TTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTT +>B7_591:4:329:339:408 +CAATCCAGAAGAGATTGGATCTAATTTTTGGACTTC +>B7_591:4:329:339:408 +TAAATGAAAGAGGCTCAAAGAATGCCAGGAAGATAC +>B7_591:4:92:411:955 +GGTAAAGGGGTGGAAAAAGATGTTCTACGCAAACAG +>B7_591:4:92:411:955 +TACTAAATACATATGCACCTAACACAAGACTACCCA +>B7_591:5:124:978:501 +AATTTGGTAATTTCGTTTTTTTTTTTTTCTTTTCTC +>B7_591:5:124:978:501 +ATGTAACAAATCTGCGCTTGTACTTCTAAATCTATA +>B7_591:5:134:751:831 +AGCTCCCTGTCACCCAATGGACCTGTGATATCTGGA +>B7_591:5:134:751:831 +ATACACACACATGGTTTAGGGGTATAATACCTCTAC +>B7_591:5:243:557:560 +AAAGAGGCTCAAAGAATGCCAGGAAGATACATTGCA +>B7_591:5:243:557:560 +CTAAGCAGAAACCTTACAAGCCAGAAGAGATTGGAT +>B7_591:5:254:542:848 +CCAAGCAGAAGAAAGAGGTTCAGAACTTGAAGACAA +>B7_591:5:254:542:848 +CTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAAC +>B7_591:5:289:132:526 +CACCCGGTCCCTGCCCCATCTCTTGTAATCTCTCTC +>B7_591:5:289:132:526 +TCTATTTTTGTCTTGACACCCAACTAATATTTGTCT +>B7_591:5:42:540:501 +CTATATTTATGCTATTCAGTTCTAAATATAGAAATT +>B7_591:5:90:828:633 +CTGCAGCCCAGATCCAGATTGCTTGTGGTCTGACAG +>B7_591:5:90:828:633 +GGATGGAGGGAAGAGGGACGCTGAAGAACTTTGATG +>B7_591:6:11:646:628 +GTACTTATCATGACTCTATCCCAAATTCCCAATTAC +>B7_591:6:11:646:628 +TTCTGCCCCCAGCATGGTTGTACTGGGCAATACATG +>B7_591:6:155:12:674 +CTATATTTATGCTATTCAGTTCTAAATATAGAAATT +>B7_591:6:181:191:418 +AAACTATATTTATGCTATTCAGTTCTAAATATAGAA +>B7_591:6:181:191:418 +AGGGAAGAGGGACGCTGAAGAACTTTGATGCCCTCT +>B7_591:6:190:42:671 +TATTGCCAGATGAACCACACATTAATACTATGTTTC +>B7_591:6:190:42:671 +TGTGTAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCA +>B7_591:6:29:575:453 +TACTACCCTGCAATTAATATAATTGTGTCCATTTAC +>B7_591:6:29:575:453 +TCTGGCCTCGTCCACACTGGTTCTCTTGAAAGCTTG +>B7_591:7:116:814:89 +ACTATGCTAAGTATTGGTAAAGATGTGGGGAAAAAA +>B7_591:7:116:814:89 +CCTAATTGGTACAATGTACAATATTCTGATGATGGT +>B7_591:7:129:956:115 +AGTTTCTGCCCCCAGCATGGTTGTACTGGGCAATAC +>B7_591:7:129:956:115 +GCTCCCCAGAGGGAAAGCTTTCAACGCTTCTAGCCA +>B7_591:7:157:447:758 +AAAGATGTTCTACGCAAACAGAAACCAAATGAGAGA +>B7_591:7:157:447:758 +ACAAAACCTCATATATCAATATTAACTTTGAATAAA +>B7_591:7:200:192:373 +AGTGCCTTTGTTCACATAGACCCCCTTGCAACAACC +>B7_591:7:200:192:373 +CTCTCATTCACTCCAGCTCCCTGTCACCCAATGGAC +>B7_591:7:22:632:176 +AAAGGAGGTCATCATACAATGATAAAAAGATCAATT +>B7_591:7:22:632:176 +AGATATAGATTGGCAGAACAGATTTAAAAACATGAA +>B7_591:7:68:242:834 +AAATAAAAAAGCAAAAACAAAAACTATGCTAAGTAT +>B7_591:7:68:242:834 +TACTACTAGACCTAAGAGGGATGAGAAATTACCTAA +>B7_591:7:89:67:709 +TTTTTTTTTTTGTCTTCTCTTTTTTTTTTTTTTTTT +>B7_591:8:4:841:340 +TTCAAATGAACTTCTGTAATTGAAAAATTCATTTAA +>B7_593:1:12:158:458 +CTGGGAAATTCTTCATCCTGGACCCTGAGAGATTCT +>B7_593:1:12:158:458 +TAATAATGCTACATGGATGATTATGAAATCAATGTT +>B7_593:1:189:876:833 +CAAGACTACCCAGATTCATAAAACAAATACTACTAG +>B7_593:1:189:876:833 +TTAAAATTTAACAAAAGTAAATAAAACACATAGCTA +>B7_593:1:19:695:59 +AACAGGAACAAAACCTCATATATCAATATTAACTTT +>B7_593:1:19:695:59 +GTGGAAAAAGATGTTCTACGCAAACAGAAACCAAAT +>B7_593:1:200:559:765 +GGAAGGAGCATTTTGTCAGTTACCAAATGTGTTTAT +>B7_593:1:200:559:765 +TGGACCCTGAGAGATTCTGCAGCCCAGATCCAGATT +>B7_593:1:215:861:605 +GAAAAACTATTTGAGGAAGTAATTGGGGAAAACCTC +>B7_593:1:215:861:605 +NAAGACAAGTCTCTTATGAATTAACCCAGTCAGACA +>B7_593:1:36:485:632 +AAAAGGTCTTTCAAAAGGTGATGTGTGTTCTCATCA +>B7_593:1:36:485:632 +GGCATTTGCCTTCAGACCCTACACGAATGCGTCTCT +>B7_593:1:85:361:418 +AGCCAGAAGAGATTGGATCTAATTTTTGGACTTCTT +>B7_593:1:85:361:418 +GAAGATACATTGCAAGACAGACTTCATCAAGATATG +>B7_593:2:104:744:280 +CATATGGAAAGGTTGTTGGGATTTTTTTAATGATTC +>B7_593:2:104:744:280 +TGGGCTGTAATGATGCCCCTTGTCCATCACCCGGTC +>B7_593:2:125:875:553 +AACAGTAAAATAAAACAAAGGAGGTCATCATACAAT +>B7_593:2:125:875:553 +TAATTGGTACAATGTACAATATTCTGATGATGGTTA +>B7_593:2:128:555:941 +AACCAAAAGAGAGAAGGAGTAGTTATACACATATCA +>B7_593:2:133:460:542 +CCTATAAGCCGTTCTATTTGTAATGAAAACTATATT +>B7_593:2:133:460:542 +TTACCAAATGTGTTTATTACCAGAGGGATGGAGGGA +>B7_593:2:259:467:737 +CTATGTACTTATCATGACTCTATCCCAAATTCCCAA +>B7_593:2:259:467:737 +TCACAGTTTCTGCCCCCAGCATGGTTGTACTGGGCA +>B7_593:2:270:430:269 +AAAGAGGCTCAAAGAATGCCAGGAAGATACATTGCA +>B7_593:2:270:430:269 +CCAGAAGAGATTGGATCTAATTTTTGGACTTCTTAA +>B7_593:2:273:348:37 +AGAAATGCGCAAAAGAATTGTAAAAGTCAAAATTAA +>B7_593:2:273:348:37 +GAATAACAATGGGCTTCTCAGCAGAAACCTTACACG +>B7_593:2:313:531:169 +GAAAGAGGTTCAGAACTTGAAGACAAGTCTCTTATG +>B7_593:2:313:531:169 +GTGAGAAGTTTGGAAAAACTATTTGAGGAAGTAATT +>B7_593:2:43:239:977 +TGAACTTCTGTAATTGAAAAATTCATTTAAGAAATT +>B7_593:2:68:140:542 +AAAAACAAAAACTATGCTAAGTATTGGTAAAGATGT +>B7_593:2:68:140:542 +GGGATGAGAAATTACCTAATTGGTACAATGTACAAT +>B7_593:2:68:692:347 +TATCAATTTGGTGTTCTGTGTAAAGTCTCATGGAGC +>B7_593:2:68:692:347 +TGTCTTGATTTACTTGTTGTTGGTTTTCTGTTTCTT +>B7_593:2:81:435:410 +AGACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGT +>B7_593:2:81:435:410 +ATTAATTGAGACTACAGAGCAACTAGGTAAAAAATT +>B7_593:3:102:856:670 +AAACCTCATATATCAATATTAACTTTGAATAAAAAG +>B7_593:3:102:856:670 +AGAGAAGGAGTAGCTATACTTATATCAGATAAAGCA +>B7_593:3:115:649:259 +ATTAATTGAGAATACAGAGCAACTAGGTAAAAAATT +>B7_593:3:115:649:259 +GGGAAATAAAGTCAAGTCTTTCCTGACAAGCAAATG +>B7_593:3:148:437:481 +CGCTTCTAGCCATTTCTTTTGGCATTTGCCTTCAGA +>B7_593:3:148:437:481 +GTACTGGGCAATACATGAGATTATTAGGAAATGCTT +>B7_593:3:180:89:582 +ATGCTAAGATAATTCATCATCACTAAACCAGTCCTA +>B7_593:3:180:89:582 +TAAAAAATTAACATTACAACAGGAACAAAACCTCAT +>B7_593:3:194:168:684 +AAAACAGTCTAGATGAGAGAGAACTTCCCTGGAGGT +>B7_593:3:194:168:684 +CTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGGTT +>B7_593:3:196:11:27 +AAGACCCAGTTAGCCGTCCGTGTCCTCCCATCTGGC +>B7_593:3:196:11:27 +CTATGTTTCTTATCTGCNCATTACTACCCTGCAATT +>B7_593:3:303:131:673 +ACAAGAAACTCATTAATAAAGACATGAGTTCAGGTA +>B7_593:3:303:131:673 +ATAAAAAGATCAATTCAGCAAGAAGATATAACCATC +>B7_593:3:310:193:629 +CATACAATGATAAAAAGATCAATTCAGCAAGAAGAT +>B7_593:3:310:193:629 +TACACTAAAAGCCCATACTTTACTGCTACTCAATAT +>B7_593:4:104:153:698 +CCAGATACCATCCCTGTCTTACTTCCAGCTCCCCAG +>B7_593:4:104:153:698 +CTAATGCGCTCCACGCCCAAGCCCTTCTCACAGTTT +>B7_593:4:106:316:452 +CTATATTTATGCTATTCAGTTCTAAATATAGAAATT +>B7_593:4:142:63:937 +GAAAAGGTCTTTCAAAAGGTGATGTGTGTTCTCATC +>B7_593:4:142:63:937 +TTCTTTTGGCATTTGCCTTCAGACCCTACACGAATG +>B7_593:4:28:781:723 +AATACCTCTACATGGCTGATTATGAAAACAATGTTC +>B7_593:4:28:781:723 +ACTGAACTTCCACGTCTCATCTAGGGGAACAGGGAG +>B7_593:4:29:794:282 +CACATTAATACTATGTTTCTTATCTGCACATTACTA +>B7_593:4:29:794:282 +TAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCATCTG +>B7_593:4:30:117:411 +TCTTGACACCCAACTAATATTTGTCTGAGCAAAACA +>B7_593:4:30:117:411 +TCTTGTAATCTCTCTCCTTTTTGCTGCATCCCTGTC +>B7_593:4:30:812:345 +TATGTTTCTTATCTGCACATTACTACCCTGCAATTA +>B7_593:4:30:812:345 +TCATCTAGGGGAACAGGGAGGTGCACTAATGCGCTC +>B7_593:4:315:201:673 +AAGATATGTAGTCATCAGACTATCTAAAGTCAACAT +>B7_593:4:315:201:673 +TTGGACTTATTAAAGAAAAAAAAACCTGTCAAACAC +>B7_593:5:171:343:758 +ACTAATATTTGTCTGAGCAAAACAGTCTAGATGAGA +>B7_593:5:171:343:758 +GCTGCATCCCTGTCTTCCTCTGTCTTGATTTACTTG +>B7_593:5:267:71:603 +TTGGCCATCACCCAGTCCCTGCCCCATCTCTTGTAA +>B7_593:5:267:71:603 +TTTAATGATTCCTCAATGTTAAAATGTCTATTTTTG +>B7_593:5:299:743:762 +AAAATTAAAATTTAACAAAAGTAAATAAAACACATA +>B7_593:5:299:743:762 +CAAGACTACCCAGATTCATAAAACAAATACTACTAG +>B7_593:5:30:599:589 +CTACGCAAACAGAAACCAAATGAGAGAAGGAGCAGC +>B7_593:5:30:599:589 +TCATAAAACAAATACTACTAGACCTAAGAGGGATGA +>B7_593:6:118:121:760 +GAGATTTAGACATCTAAATGAAAGAGGCTCAAAGAA +>B7_593:6:119:428:415 +GCTATACTTATATCAGATAAAGCACACTTTAAATCA +>B7_593:6:119:428:415 +TAAATTCCCCCACTTAAGAGATATAGATTGGCAGAA +>B7_593:6:185:96:948 +CTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGATA +>B7_593:6:185:96:948 +TTTAAAAATGAACAGAGCTTTCAAGAAGTATGAGAT +>B7_593:6:38:332:54 +CCATCATAAATACACACAAAAGTACAAAACTCACAG +>B7_593:6:38:332:54 +TGGCAGAACAGATTTAAAAACATGAACTAACTATAT +>B7_593:6:61:628:681 +CAGAGGGAAAGCTTTCAACGCTTCTAGCCATTTCTT +>B7_593:6:61:628:681 +GCCATCACAATGAACAACAGGAAGAAAAGGTCTTTC +>B7_593:7:15:244:876 +AAAAGTAAACTCTCAAATATTGCTAGTGTGAGTATA +>B7_593:7:15:244:876 +GTACAATATTCTGATGATGGTTACACTAAAAGCCCA +>B7_593:7:189:530:40 +AAAAGAATTGTAAAAGTCAAAATTAAAGTTCAATAC +>B7_593:7:189:530:40 +CCCCACTTAAGAGATATAGATTGGCAGAACAGATTT +>B7_593:7:256:354:173 +CATTAATAAAGACATGAGTTCAGGTAAAGGGGTGGA +>B7_593:7:256:354:173 +TCAATTCAGCAAGAAGATATAACCATCCTACTAAAT +>B7_593:7:283:186:707 +AATACATATGCACCTAACACAAGACTACCCAGATTC +>B7_593:7:283:186:707 +CGCTTGTACTTCTAAATCTATAACAAAATTAAAATT +>B7_593:7:307:481:625 +AAAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAG +>B7_593:7:307:481:625 +TCAACATGAAGGAAAAAAATTCTAAAATCAGCAAGA +>B7_593:7:67:302:762 +GTAATCTCTCTCCTTTTTGCTGCATCCCTGTCTTCC +>B7_593:7:67:302:762 +TTACGTCCTATCTTCTTCTTAGGGAAGAACAGCTTA +>B7_593:7:6:585:132 +GCCCCTTGACCACCACCCAGTCCCTGCCCCATCTCT +>B7_593:7:6:585:132 +TGTACTTATCATGTTTCTTTCCTAATTTTTCAATTA +>B7_593:7:87:89:696 +TGGTTCTCTTGAAAGCTTGGGCTGTAATGATGCCCC +>B7_593:7:87:89:696 +TTCCTATGGAAAGGTTGTTGGGAGATTTTTAATGAT +>B7_595:1:209:345:87 +AAACAGTCTAGATGAGAGAGAACTTCCCTGGAGGT +>B7_595:1:209:345:87 +TTACTTGTTGTTGGTTTTCTGTTTCTTTTTTTGAT +>B7_595:1:209:653:400 +AGGAGCATTTTGTCAGTTACCAAATGTGTTTATTA +>B7_595:1:209:653:400 +CTAGAGTCCCATTTGGAGCCCCTCTAAGCCGTTCT +>B7_595:1:252:19:955 +AGCCAGTTCTTTTGGCATTTGCCTTCAGACCCTCC +>B7_595:1:252:19:955 +TGAACAAAAGGAAGAAAAGGTCTTTCAAAAGGTGA +>B7_595:1:81:1000:375 +ACCCTGAGAGATTCTGCAGCCCAGCTCCAGATTGC +>B7_595:1:81:1000:375 +NATGTCAGGGAAGGAGCATTTTGTCAGTTACCAAA +>B7_595:2:178:77:424 +CTACCCTGCAATTAATATAATTGTGTCCATGTACA +>B7_595:2:178:77:424 +TGCGCTCCACGCCCAAGCCCTTCTCACAGTTTCTG +>B7_595:2:251:121:479 +GGCTGCAACTGTGAGCCATCACAATGAACAACAGG +>B7_595:2:251:121:479 +GGGAAAGCTTTCAACGCTTCTAGCCATTTCTTTTG +>B7_595:2:29:729:70 +AAACAGAAACCAAATGAGAGAAGGAGTAGCTATAC +>B7_595:2:29:729:70 +ANTATTANCTTTGANNAAAAAGGGATTAAATTCCC +>B7_595:3:229:543:583 +ATAACCATCCTACTAAATACATATGCACCTAACAC +>B7_595:3:229:543:583 +TCAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAA +>B7_595:3:297:637:86 +CAATGTTCCCCAGATACCATCCCTGTCTTACTTCC +>B7_595:3:297:637:86 +TCTCAGCTAGGGGAACAGGGAGGTGCACTAATGCG +>B7_595:3:57:735:151 +CTATCCCAAATTCCCAATTACGTCCTATCTTCTTC +>B7_595:3:57:735:151 +TAAACTCTCACCTTATTGCTGCATCCCTGTCTTCC +>B7_595:3:85:964:950 +AACAGATTTAAAAACATGAACTAACTATATGCTGT +>B7_595:3:85:964:950 +GAGGTCATCATACAATGATAAAAAGATCAATTCAG +>B7_595:4:12:402:843 +AGGGAGGTGCACTAATGCGCTCCACGCCCAAGCCC +>B7_595:4:12:402:843 +ATATAATTGTGTCCATGTACACACGCTGTCCTATG +>B7_595:4:319:250:718 +AAAAGAAAAAGTGAGAAGTTTGGAAAAACTATTTG +>B7_595:4:319:250:718 +AGTTGAAAGCTCTAACAATAGACTAAACCAAGCAG +>B7_595:4:58:703:72 +GTACACACGCTGTCCTATGTACTTATCATGACTCT +>B7_595:4:58:703:72 +TCCACGCCCAAGCCCTTCTCACAGTTTCTGCCCCC +>B7_595:4:84:802:737 +CATAGACCCCCTTGCAACAACCTTGAGAACCCCAG +>B7_595:4:84:802:737 +CTTAACCTCTGGTGACTGCCAGAGCTGCTGGCAAG +>B7_595:5:184:912:258 +ATTCTAAAATCAGCAAGAGAAAAGCATACAGTCAT +>B7_595:5:184:912:258 +GTTATGCCCTGCTAAACTAAGCATCATAAATGAAG +>B7_595:5:36:649:554 +AAGAGATTGGATCTAATTTTTGGACTTCTTAAAGA +>B7_595:5:36:649:554 +CAGGAAGATACATTGCAAGACAGACTTCATCAAGA +>B7_595:5:84:91:614 +GAACCACACATTAATACTATGTTTCTTATCTGCAC +>B7_595:5:84:91:614 +TTTCCCATCATGAAGCACTGATCTTCCACGTCTCA +>B7_595:6:119:730:190 +AGTCTCTTATGAATTAACCCAGTCAGACAAAAATA +>B7_595:6:119:730:190 +AGTCTTGCTAGAGATTTAGACATCTAAATGAAAGA +>B7_595:6:137:811:130 +AAAATTTAACAAAAGTAAATAAAACACATAGCTAA +>B7_595:6:137:811:130 +AGACTACCCAGATTCATAAAACAAATACTACTAGA +>B7_595:6:290:270:557 +ACATTACTACCCTGCAATTAATATAATTGTGTCCA +>B7_595:6:290:270:557 +GGAACAGGGAGGTGCACTAATGCGCTCCACGCCCA +>B7_595:6:47:720:789 +CCCTTGGCCATCACCCGGTCCCGGCCCCTTCTCTT +>B7_595:6:47:720:789 +TCCTCAATGTTAAAATGTCTATTTTTGTCTTGACA +>B7_595:6:52:751:360 +AAAAACTATTTGAGGAAGTAATTGGGGAAAACCTC +>B7_595:6:52:751:360 +AGAGAAAAGCATACAGTCATCTATAAAGGAAATCC +>B7_595:6:99:557:427 +AACAAAATTAAAATTTAACAAAAGTAAATAAAACA +>B7_595:6:99:557:427 +ATTCATAAAACAAATACTACTAGACCTAAGAGGGA +>B7_595:7:123:610:472 +GTCTGAGCAAAACAGTCTAGATGAGAGAGAACTTC +>B7_595:7:123:610:472 +TGCATCCCTGTCTTCCTCTGTCTTGATTTACTTGT +>B7_595:7:149:123:265 +AAGAGGGATGAGAAATTACCTAATTGGTACAATGT +>B7_595:7:149:123:265 +AGCAAAAACAAAAACTATGCTAAGTATTGGTAAAG +>B7_595:7:166:203:416 +AATTACGTCCTATCTTCTTCTTAGGGAAGAACAGC +>B7_595:7:166:203:416 +ATGAGATTATTAGGAAATGCTTTACTGTCATAACT +>B7_595:7:188:802:71 +ATGCTATTCAGTTCTAAATATAGAAATTGAAACAG +>B7_595:7:188:802:71 +TGCCCTCTTCTTCCAAAGATGAAACGCGTAACTGC +>B7_595:7:190:481:295 +GAAGAACAGCTTAGGTATCAATTTGGTGTTCTGTG +>B7_595:7:190:481:295 +TCATAACTATGAAGAGACTATTGCCAGATGAACCA +>B7_595:7:242:4:593 +ATATACACACGCTGTCCTATGTACTTATCATGACT +>B7_595:7:242:4:593 +TCCACGCCCAAGCCCTTCTCACAGTTTCTGCCCCC +>B7_595:8:26:242:35 +ATAAAACAAAGGAGGTCATCATACAATGATAAAAA +>B7_595:8:26:242:35 +ATATTTTGATGATGGTTACACTAAAAGCCCATACT +>B7_597:2:100:563:301 +GAACTTCTGTAATTGAAAAATTCATTTAAGAAATT +>B7_597:2:132:493:921 +ACGGGGTTGCCAGCACAGGGGCTTAACCTCTGGTG +>B7_597:2:132:493:921 +GTTCTCAAGGTTGTTGCAAGGGGGTCTATGTGAAC +>B7_597:2:165:431:857 +GAACTTTGATGCCCTCTTCTTCCAAAGATGAAACG +>B7_597:2:165:431:857 +TTGGGGTCTGACAGGCTGCAACTGTGAGCCATCAC +>B7_597:2:168:829:88 +ACAGACTTCATCAAGATATGTAGTCATCAGACTAT +>B7_597:2:168:829:88 +TAACTGAACCTATGAGTCACAGGTATTCCTGAGGA +>B7_597:2:42:28:552 +AAGAAGATATAACCATCCTACTAAATACATATGCA +>B7_597:2:42:28:552 +ACTCAATATATCCATGTAACAAATCTGCGCTTGTA +>B7_597:3:10:394:392 +TCATCAAGATATGTAGTCATCAGACTATCTAAATT +>B7_597:3:10:394:392 +TTGGACTTCTTAAAGAAAAAAAAACCTGTCAAACA +>B7_597:3:115:646:430 +CACAGGTTTTATAAAACAATTAATTGAGACTACAG +>B7_597:3:115:646:430 +GTTATGCCCTGCTAAACTTAGCATCATAAATGAAG +>B7_597:3:133:707:886 +ACCTAATAAATACATATGCACCTAACACAAGACTA +>B7_597:3:133:707:886 +AGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAAC +>B7_597:3:157:361:309 +CCTGCTAAACTAAGCATCATAAATGAAGGGGAAAT +>B7_597:3:157:361:309 +TACACACAAAAGTACAAAACTCACAGGTTTTATAA +>B7_597:3:39:966:551 +ACATTAATACTATGTTTCTTATCTGCACATTACTA +>B7_597:3:39:966:551 +AGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCGTC +>B7_597:3:46:981:766 +TCTTTTGGCATTTGCCTTCAGACCCTACACGAATG +>B7_597:3:46:981:766 +TGCCCCCAGCATGGTTGTACTGGGCAATACATGAG +>B7_597:3:53:616:842 +CTTATCATGACTCTATCCCAAATTCCCACTTACGT +>B7_597:3:53:616:842 +TCACCCAGTCCCTGCCCCATCTCTTGTAATCTCTC +>B7_597:3:67:620:344 +AGCTTTCAACGCTTCTAGCCATTTCTTTTGGCATT +>B7_597:3:67:620:344 +CCCCCGCCCAAGCCCTTCTCACAGTTTCTGCCCCC +>B7_597:3:73:273:488 +AAAACAGTCTAGATGAGAGAGAACTTCCCTGGAGG +>B7_597:3:73:273:488 +CTCTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTG +>B7_597:4:138:211:582 +CATTAATAAAGACATGAGTTCAGGTAAAGGGGTGG +>B7_597:4:138:211:582 +TGAGACTACAGAGCAAATAGGTAAAAAATTAACAT +>B7_597:4:144:492:61 +AAATACTCACCATCATAAATACACACAAAAGTACA +>B7_597:4:144:492:61 +AACCTGTCAAACACGAATGTTATGCCCTGCTAAAC +>B7_597:4:146:961:63 +TACTTATATCAGATAAAGCACACTTTAAATCAACA +>B7_597:4:146:961:63 +TGAATAAAAAGGGCTTAAATTCCCCCACTTAAGGG +>B7_597:4:38:999:463 +GCGGAAACCTTACAAGCCAGAAGAGATTGGATCTA +>B7_597:4:38:999:463 +TAGACATCTAAATGAAAGNNGCNNNAAGAATGCCA +>B7_597:5:125:957:753 +TTTTTTTTTTTTCTCTCCTCTTTTTTTTTTTTTTT +>B7_597:5:160:434:853 +ATATAATTGTGTCCATGTACACACGCTGTCCTATG +>B7_597:5:160:434:853 +GCTTGGGCTGTAATGATGCCCCTTGGCCATCACCC +>B7_597:5:58:684:520 +AGACAGACTTCATCAAGATATGTAGTCATCAGACT +>B7_597:5:58:684:520 +ATTTTTGGACTTCTTAAAGAAAAAAAAACCTGTCA +>B7_597:5:6:882:784 +CATGGCTGATTATGAAAACAATGTTCCCCAGATAC +>B7_597:5:6:882:784 +CTGGATTCTGGGAAATTCTTCATCCTGGACCCTGA +>B7_597:5:98:995:929 +GTCCTATAAGAAATGCTCAAAAGAATTGTAAAAGT +>B7_597:5:98:995:929 +TATAACAATATTAACTTTGAATAAAAAGGGATTAA +>B7_597:6:106:595:322 +GAGGAAGTAATTGGGGAAAACCTCTTTAGTCTTGC +>B7_597:6:106:595:322 +GCAAGAGAAAAGCATACAGTCATCTATAAAGGAAA +>B7_597:6:193:661:771 +AAACTCATTAATAAAGACATGAGTTCAGGTAAAGG +>B7_597:6:193:661:771 +GCAAGAAGATATAACCATCCTACTAAATACATATG +>B7_597:6:20:592:496 +CTCAAAGAATGCCAGGAAGATACATTGCAAGACAG +>B7_597:6:20:592:496 +TCTCAGCGGAAACCTTACAAGCCAGAAGAGATTGG +>B7_597:6:29:249:878 +ATTGTGTCCATGTACACACGCTGTCCTATGTACTT +>B7_597:6:29:249:878 +TCTCACAGTTTCTGCCCCCAGCATGGTTGTACTGG +>B7_597:6:73:420:812 +CTAAGTATTGGTAAAGATGTGGGGAAAAAAGTAAA +>B7_597:6:73:420:812 +CTAATTGGTACAATGTACAATATTCTGATGATGGT +>B7_597:7:103:731:697 +AATTAACCCAGTCAGACAAAAATAAAGAAAAAAGA +>B7_597:7:103:731:697 +CTTGCTAGAGATTTAGACATCTAAATGAAAGAGGC +>B7_597:7:113:408:211 +AAACTCATTAATAAAGACATGAGTTCAGGTAAAGG +>B7_597:7:113:408:211 +GAGACTACAGAGCAACTAGGTAAAAAATTAACATT +>B7_597:7:31:948:254 +CCTCTACATGGCTGATTATGAAAACAATGTTCCCC +>B7_597:7:31:948:254 +TGAAGCACTGAACTTCCACGTCTCATCTAGGGGAA +>B7_597:7:41:34:211 +CACCTAACACAAGACTACCCAGATTCATAAAACAA +>B7_597:7:41:34:211 +GTAAAGGGGTGGAAAAAGATGTTCTACGCAAACAG +>B7_597:7:5:753:806 +AAAATATAGTTGAAAGCTCTAACAATAGACTAAAC +>B7_597:7:5:753:806 +ATGTAAAGTAACTGAACCTATGAGTCACAGGTATT +>B7_597:7:94:273:165 +AGAAAGAAGATATAACCATCCTACTAAATACATAT +>B7_597:7:94:273:165 +TTACAAGAAACTCATTAATAAAGACATGAGTTCAG +>B7_597:8:147:360:141 +TGCGCTTGTACTTCTAAATCTATAACAAAATTAAA +>B7_597:8:147:360:141 +TTTGGTAATTTAGTTTTTTTTTTTTCTTTTCTCTT +>B7_597:8:186:850:838 +GGAAGAGGGACGCTGAAGAACTTTGATGCCCTCTT +>B7_597:8:186:850:838 +GTTCTATTTGTAATGAAAACTATATTTATGCTATT +>B7_597:8:35:118:589 +TCATAAAACAAATACTACTAGACCTAAGAGGGATG +>B7_597:8:35:118:589 +TGTTCTACGCAAACAGAAACCAAATGAGAGAAGGA +>B7_597:8:48:805:860 +AAACCTGTCAAACACGAATGTTATGCCCTGCTAAA +>B7_597:8:48:805:860 +AAAGTACAAAACTCACAGGTTTTATAAAACAATTA +>B7_610:1:12:88:200 +ACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTT +>B7_610:1:12:88:200 +GAAGATATAACCATCCTACTAAATACATATGCACC +>B7_610:1:139:152:856 +AGAGGGACGCTGAAGAACTTTGATGCCCTCTTCTT +>B7_610:1:139:152:856 +CTAAGCCGTTCTATTTGTAATGAAAACTATATTTA +>B7_610:1:37:652:403 +CCCCTCTAAGCCGTTCTATTTGTAATGAAAACTAT +>B7_610:1:37:652:403 +TTTTGTCAGTTACCAAATGTGTTTATTACCAGAGG +>B7_610:2:189:831:878 +AGAAAAAAAAACCTGTCAAACACGAATGTTATGCC +>B7_610:2:189:831:878 +AGGAAGATACATTGCAAGACAGACTTCATCAAGAT +>B7_610:2:194:688:289 +TCAGACCCTACACGAATGCGTCTCTACCACAGGGG +>B7_610:2:194:688:289 +TGTGTGTTCTCATCAACCTCATACACACACATGGT +>B7_610:2:6:529:366 +CATACAATGATAAAAAGATCAATTCAGCAAGAAGA +>B7_610:2:6:529:366 +GCTACTCAATATATCCATGTAACAAATCTGCGCTT +>B7_610:2:75:887:149 +TACAACAGGAACAAAACCTCATATATCAATATTAA +>B7_610:2:75:887:149 +TACGCAAACAGAAACCAAATGAGAGAAGGAGTAGC +>B7_610:3:102:825:507 +TGCTGCATCCCTGTCTTCCTCTGTCTTGATTTACT +>B7_610:3:102:825:507 +TTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAAC +>B7_610:3:120:63:653 +AACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATG +>B7_610:3:120:63:653 +TCTTCTTCCAAAGATGAAACGCGTAACTGCGCTCT +>B7_610:3:137:895:681 +CTTCCTATGGAAAGGTTGTTGGGAGATTTTTAATG +>B7_610:3:137:895:681 +GCCTCGTCCACACTGGTTCTCTTGAAAGCTTGGGC +>B7_610:3:148:340:479 +TCTGTGTAAAGTCTCAGGGAGCCGTCCGTGTCCTC +>B7_610:3:148:340:479 +TTGTTGTTGGTTTTCTGTTTCTTTGTTTGATTTGG +>B7_610:3:182:23:585 +AGAACAGCTTAGGTATCAATTTGGTGTTCTGTGTA +>B7_610:3:182:23:585 +ATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTGT +>B7_610:3:5:863:302 +ACGTCTCATCTAGGGGAACAGGGAGGTGCACTAAT +>B7_610:3:5:863:302 +TGAAAACAATGTTCCCCAGATACCATCCCTGTCTT +>B7_610:3:82:998:566 +ATCTGGCCTCGTCCACACTGGTTCTCTTGAAAGCT +>B7_610:3:82:998:566 +GCACATTACTACCCTGCAATTAATATAATTGTGTC +>B7_610:3:84:101:328 +AATGGACCTGTGATATCTGGATTCTGGGAAATTCT +>B7_610:3:84:101:328 +TATAATACCTCTACATGGCTGATTATGAAAACAAT +>B7_610:3:85:219:371 +GACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGT +>B7_610:3:85:219:371 +TAACATTACAACAGGAACAAAACCTCATATATCAA +>B7_610:4:139:989:144 +ACTAAAAAAGCAAAAACAAAAACTATGCTAAGTAT +>B7_610:4:139:989:144 +ACTACTAGACCTAAGAGGGATGAGAAATTACCTAA +>B7_610:4:15:805:420 +ATGAAGAGACTATTCACATGTGAACCACACATTTA +>B7_610:4:15:805:420 +GAACAGTTTAGGTATCAATTTGGTGTTCTTTGTAA +>B7_610:4:198:59:675 +AATCTGCGCTTGTACTTCTAAATCTATAACAAAAT +>B7_610:4:198:59:675 +ACTAAATACATATGCACCTAACACAAGACTATCCT +>B7_610:4:67:317:249 +CTACATGGCTGATTATGAAATCTATGTTCCCCATA +>B7_610:4:67:317:249 +TTCCCATCATGACGCACCGAACTTCCACGTCTCAT +>B7_610:5:102:915:87 +AACAATAGACTAAACCAAGCAGAAGAAAGAGGTTC +>B7_610:5:102:915:87 +CACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAA +>B7_610:5:120:596:847 +AACCTATGAGTCACAGGTATTCCTGAGGAAAAAGA +>B7_610:5:120:596:847 +TCAACATGAAGGAAAAAAATTCTAAAATCAGCAAG +>B7_610:5:136:260:254 +AAATTAACATTACAACAGGAACAAAACCTCATATA +>B7_610:5:136:260:254 +GTGGAAAAAGATGTTCTACGCAAACAGAAACCAAA +>B7_610:5:147:68:353 +AACAACCTTGAGAACCCCAGGGAATTTGTCAATGT +>B7_610:5:147:68:353 +CCTTTGATATCTGGATTCTGGGAAATTCTTCATCC +>B7_610:5:51:904:391 +ACCTATGAGTCACAGGTATTCCTGAGGAAAAAGAA +>B7_610:5:51:904:391 +TATCTAAAGTCAACATGAAGGAAAAAAATTCTAAA +>B7_610:5:7:761:623 +CCGGCATGGTTGTACTGGGCAATACATGAGATTAT +>B7_610:5:7:761:623 +CTTTCAACGCTTCTAGCCATTTCTTTTGGCATTTG +>B7_610:6:107:252:533 +AGAGAAGGAGTAGCTATACTTATATCAGATAAAGC +>B7_610:6:107:252:533 +CAAGACTACCCAGATTCATAAAACAAATACTACTA +>B7_610:6:111:379:700 +ACACTAAAAGCCCATACTTTACTGCTACTCAATAT +>B7_610:6:111:379:700 +CGCACTGGCAATATTTGTGTGTTTACTTTTTTGCA +>B7_610:6:143:620:158 +ACTTTACTGCTACTCAATATATCCATGTAACAAAT +>B7_610:6:143:620:158 +CAATGATAAAAAGATCAATTCAGCAAGAAGATATA +>B7_610:6:148:776:486 +AACTGTGAGCCATCACAATGAACAACAGGAAGAAA +>B7_610:6:148:776:486 +AGCTTTCAACGCTTCTAGCCATTTCTTTTGGCATT +>B7_610:7:116:157:612 +GTAAAAGTCAAAATTAAAGTTCAATACTCACCATC +>B7_610:7:116:157:612 +TTAAGAGATATAGATTGGCAGTACAGATTTAAAAA +>B7_610:7:117:857:942 +AGAGAGAACTTCCCTGGAGGTCTGATGGCGTTTCT +>B7_610:7:117:857:942 +GGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGAC +>B7_610:7:158:943:467 +AAAGCTCTAACAATAGACTAAACCAAGCAGAAGAA +>B7_610:7:158:943:467 +AGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTT +>B7_610:7:15:696:693 +TCAAACACGAATGTTAATCCCTGCTAAACTAATCA +>B7_610:7:15:696:693 +TCTAAAGTCAACATGAAGGAAAAAAATTCTAAAAT +>B7_610:7:177:469:800 +AAAATCAGCAAGAGAAAAGCATACAGTCATCTATA +>B7_610:7:177:469:800 +TTGGAAAAACTATTTGAGGAAGTAATTGGGGAAAA +>B7_610:7:26:749:174 +CAGATTCATAAAACAAATACTACTAGACCTAAGAG +>B7_610:7:26:749:174 +TAACAAAAGTAAATAAAACACATAGCTAAAACTAA +>B7_610:7:34:144:868 +AATTACCTAATTGGTACAATGTACAATATTCTGAT +>B7_610:7:34:144:868 +AGCTAAGGAATGGGAAAGGTGTGGGGAAAAAAGTA +>B7_610:7:35:378:681 +GCGTCTCTACCACAGGGGGCTGCGCGGTTTCCCAT +>B7_610:7:35:378:681 +GTGTGTTCTCATCAACCTCATACACACACATGGTT +>B7_610:8:163:757:432 +CCAGATGAACCACACATTAATACTATGTTTCTCAT +>B7_610:8:163:757:432 +GGTTTCCCATCATGAAGCACTGAACTTCCACGTCT +>B7_610:8:68:570:705 +AACAGATTTAAAAACATGAACTAACTATATGCTGT +>B7_610:8:68:570:705 +CATCATACAATGATAAAAAGATCAATTCAGCAAGA +>B7_610:8:95:426:791 +CCAAATGTGTTTATTACCAGAGGGATGGAGGGAAG +>B7_610:8:95:426:791 +GNTCCAGATTGCTTGTGGTCTGACAGGCTGCAACT +>EAS112_32:7:113:809:364 +GATGCCCTCTTCTTCCAAAGATGAAACGCGTAACT +>EAS112_32:7:113:809:364 +TATAGAAATTGAAACAGCTGTGTTTAGTGCCTTTG +>EAS112_32:7:135:401:735 +AATTGTAAAAGTCAAAATTAAAGTTCAATACTCAC +>EAS112_32:7:135:401:735 +CCTTACAAGCCAGAAGAGATTGGATCTAATTTTTG +>EAS112_32:7:168:117:441 +TCATAACTATGAAGAGACTATTGCCAGATGAACCA +>EAS112_32:7:168:117:441 +TCTTCTTAGGGAAGAACAGCTTAGGTATCAATTTG +>EAS112_32:7:272:328:400 +CAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAA +>EAS112_32:7:272:328:400 +CTAAATACATATGCACCTAACACAAGACTACCCAG +>EAS112_32:7:322:391:742 +ATCAATATTAACTTTGAATAAAAAGGGATTAAATT +>EAS112_32:7:322:391:742 +CATCACTAAACCAGTCCTATAAGAAATGCTCAAAA +>EAS112_32:7:42:804:114 +ATACTTTACTGCTACTCAATATATCCATGTAACAA +>EAS112_32:7:42:804:114 +TCAAATATTGCTAGTGGGAGTATAAATTGTTTTCC +>EAS112_32:8:88:90:59 +ATAATACCTCTACATGTCTGATTATGAAAACAATG +>EAS112_32:8:88:90:59 +TGCACCTCCCTGTTCACCTAGATGCTAGGAGGACA +>EAS112_32:8:89:254:332 +AAACCTCTTTAGTCTTGCTAGAGATTTAGACATCT +>EAS112_32:8:89:254:332 +GAATTAACCCAGTCAGACAAAAATAAAGAAAAAAG +>EAS112_34:4:12:273:89 +AGTCTTTCCTGACAAGCAAATGCTAAGATAATTCA +>EAS112_34:4:12:273:89 +CCATCAGAATAACAATGGGCTTCTCAGCGGAAACC +>EAS112_34:4:17:989:186 +TTAGTCTTGCTAGAGATTTAGACATCTAAATGAAA +>EAS112_34:4:17:989:186 +TTATGAATTAACCCAGTCAGACAAAAATAAAGAAA +>EAS112_34:4:22:206:150 +AAAAAAGAGCAACTAGGTAAAAAATTAACATTACA +>EAS112_34:4:22:206:150 +GAAATAAAGTCAAGTCTTTCCTGACAAGCAAATGC +>EAS112_34:4:74:570:695 +CACACTGGTTCTCTTGAAAGCTTGGGCTGTAATGA +>EAS112_34:4:74:570:695 +TTGGGAGATTTTTAATGATTCCTCAATGTTAAAAT +>EAS112_34:4:92:412:435 +AGATTCATAAAACAAATACTACTAGACCTAAGAGG +>EAS112_34:4:92:412:435 +CTACGCAAACAGAAACCAANTGAGAGAAGGAGTAG +>EAS112_34:6:127:153:861 +CTCAGGGAGCCGTCCGTGTCCTCCCATCTGGCCTC +>EAS112_34:6:127:153:861 +TTTTCTGTTTCTTTGTTTGATTTGGTGGAAGACAT +>EAS112_34:6:130:865:838 +AAAGCATACAGTCATCTATAAAGGAAATCCCATCA +>EAS112_34:6:130:865:838 +AATGCTAAGATAATTCATCATCACTAAACCAGTCC +>EAS112_34:6:145:144:263 +TTTCGTTTTTTTTTTTTTTTTTTCCCCTTTCTTTT +>EAS112_34:6:43:47:279 +AAAACTATGCTAAGTATTGGTAAAGATGTGGGGAA +>EAS112_34:6:43:47:279 +TAGACCTAAGAGGGATGAGAAGTTACCTAATTGGT +>EAS112_34:6:71:85:629 +CCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGA +>EAS112_34:6:71:85:629 +TTGACACCCAACTAATATTTGTCTGAGCAAAACAG +>EAS112_34:6:75:615:555 +AAGTTTGGAAAAACTATTTGAGGAAGTAATTGGGG +>EAS112_34:6:75:615:555 +TGAAGGAAAAAAATTCTAAAATCAGCAAGAGAAAA +>EAS112_34:7:118:523:591 +GAGGGACGCTGAAGAACTTTGATGCCCTCTTCTTC +>EAS112_34:7:118:523:591 +GGTCTGACAGGCTGCAACTGTGAGCCATCACAATG +>EAS112_34:7:141:80:875 +AGCCGAGTCACGGGGTTGCCAGCACAGGGGCTTAA +>EAS112_34:7:141:80:875 +AGCTGTGTTTAGTGCCTTTGTTCAACCCCCTTGCA +>EAS112_34:7:142:457:584 +GGAAGAACAGCTTAGGTATCAATTTGGTGTTCTGT +>EAS112_34:7:142:457:584 +TGAAGAGACTATTTCCAGATGAACCACACATTAAT +>EAS112_34:7:71:62:254 +AAAAAAGTAAACTCTCAAATATTGCTAGTGGGAGT +>EAS112_34:7:71:62:254 +GGTTACACTAAAAGCCCATACTTTCCTGCTACTCA +>EAS112_34:7:86:498:373 +CACTAATGCGCTCCACGCCCAAGCCCTTCTCACAG +>EAS112_34:7:86:498:373 +GATACCATCCCTGTCTTACTTCCAGCTCACCAGAG +>EAS112_34:7:96:489:453 +AAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGAT +>EAS112_34:7:96:489:453 +AGAAAAGCATACAGTCATCTATAAAGGAAATCCCA +>EAS112_34:8:103:812:255 +ATGTTAAAATGTCTATTTTTGTCTTGACACCCAAC +>EAS112_34:8:103:812:255 +TGATGCCCCTTGGCCATCACCCAGTCCCTGCCCCC +>EAS112_34:8:174:557:872 +GGTAAAGATGTGGGGAAAAAAGTAAACTCTCAAAT +>EAS112_34:8:174:557:872 +TGGTACAATGTACAATATTCTGATGATGGTTACAC +>EAS112_34:8:179:13:782 +GACAGTCTACAACTGTGAGCCATCACAATGAACAA +>EAS112_34:8:179:13:782 +TGATGCCCTCTTCTTCCAAAGATGAAACGCGTAAC +>EAS112_34:8:30:816:90 +ACTACCCTGCAATTAATATAATTGTGTCCATGTAC +>EAS112_34:8:30:816:90 +AGGGAGGTGCACTAATGCGCTCCACGCCCCAGCCC +>EAS112_34:8:45:800:733 +ACATGAAGGAAAAAAATTCTAAAATCAGCAAGAGA +>EAS112_34:8:45:800:733 +ATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTG +>EAS112_34:8:4:841:339 +ACCTCATACACACACATGGTTTAGGGGTATAATAC +>EAS112_34:8:4:841:339 +CTTCAGACCCTACACGAATGCGTCTCTACCACAGG +>EAS114_26:1:113:367:659 +AGTCATCAGACTATCTAAAGTCAACATGAAGGAAA +>EAS114_26:1:113:367:659 +CACAGGTATTCCTGAGGAAAAAGAAAAAGCGAGAA +>EAS114_26:1:155:807:19 +AAAAGGGATTAAATTCCCCCACTTAAGAGATATAG +>EAS114_26:1:155:807:19 +CAACAGTAAAATAAAACAAAGGAGGTCATCATACA +>EAS114_26:1:171:527:247 +AACAAATGCTACTAGACCTAAGAGGGATGAGAAAT +>EAS114_26:1:171:527:247 +AGAAGGAGTAGCTAGACTTATATCAGATAAAGCAC +>EAS114_26:1:324:238:736 +AGACAGACTTCATCAAGATATGTAGTCATCAGACT +>EAS114_26:1:324:238:736 +TCAAGAAGTATGAGATTATGTAAAGTAACTGAACC +>EAS114_26:1:35:522:294 +GGTTCAGAACTTGAAGACAAGTCTCTTATGAATTA +>EAS114_26:1:35:522:294 +TTGAGGAAGTAATTGGGGAAAACCTCTTTAGTCTT +>EAS114_26:1:99:212:522 +ACGAATGCGTCTCTACCACAGGGGGCTGCGCGGTT +>EAS114_26:1:99:212:522 +AGAGACTATTGCCAGATGAACCACACATTAATACT +>EAS114_26:2:130:609:467 +AAATTCCCCCACTTAAGAGATATAGATTGGCAGAA +>EAS114_26:2:130:609:467 +CAATACTCACCATCATAAATACACACAAAAGTACA +>EAS114_26:2:214:950:32 +ACAAGAAACTCATTAATAAAGACATGAGTTCAGGT +>EAS114_26:2:214:950:32 +AGAAGATATAACCATCCTACTAAATACATATGCAC +>EAS114_26:2:237:497:165 +GAAATAAAGTCAAGTCTTTCCTGACAAGCAAATGC +>EAS114_26:2:237:497:165 +TACAGTCATCTATAAAGGAAATCCCATCAGAATAA +>EAS114_26:2:315:219:7 +GAAAGAGGCTCAAAGAATGCCAGGAAGATACATTG +>EAS114_26:2:329:458:365 +GTGTTCTGTGTAAAGTCTCAGGGAGCCGTCCGTGT +>EAS114_26:2:329:458:365 +TTGTTGTTGGTTTTCTGTTTCTTTGTTTGATTTGG +>EAS114_26:2:73:513:102 +GTCTCATCTAGGGGAACAGGGAGGTGCACTAATGC +>EAS114_26:2:73:513:102 +TGAAAACAATGTTCCCCAGATACCATCCCTGTCTT +>EAS114_26:3:117:284:589 +ACAAAATATAGTTGAAAGCTCTAACAATAGACTAA +>EAS114_26:3:117:284:589 +GAACCTATGAGTCACAGGTATTCCTGAGGAAAAAG +>EAS114_26:3:284:261:124 +ACAGCTGTGTTTAGTGCCTTTGTTCAACCCCCTTG +>EAS114_26:3:287:665:495 +GAATTGTAAAAGTCAAAATTAAAGTTCAATACTCA +>EAS114_26:3:287:665:495 +TGGATCTAATTTTTGGACTTCTTAAAGAAAAAAAA +>EAS114_26:4:100:238:596 +ATGAGAAATTACCTAATTGGTACAATGTACAATAT +>EAS114_26:4:100:238:596 +CAAAAACTATTCTAAGTATTGGTAAAGATGTGGGG +>EAS114_26:4:110:840:431 +CTGTCAAACACGAATGTTATGCCCTGCTAAACTAA +>EAS114_26:4:110:840:431 +GTAGTCATCAGACTATCTAAAGTCAACATGAAGGA +>EAS114_26:4:123:1001:580 +AGGTTTTATAAAACAATTAATTGAGACTACAGAGC +>EAS114_26:4:123:1001:580 +GGGAANTAAAGTCAAGTCTTTCCTGACAAGCAAAT +>EAS114_26:4:253:285:104 +CTCTCATTCACTCCAGCTCCCTGTCACCCAATGGA +>EAS114_26:4:253:285:104 +GTGATGTGTGTTCTCATCAACCTCATACACACACA +>EAS114_26:4:306:388:342 +CCGTCCGTGTCCTCCCATCTGGCCTCGTCCACACT +>EAS114_26:4:306:388:342 +GGGGAAGACATAATCCCACGCTTCCTATGGAAAGG +>EAS114_26:4:40:352:151 +ATTACGTCCTATCTTCTTCTTAGGGAAGAACAGCT +>EAS114_26:4:40:352:151 +TTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTT +>EAS114_26:5:139:331:63 +GACACCCAACTAATATTTGTCTGAGCAAAACAGTC +>EAS114_26:5:139:331:63 +TTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTT +>EAS114_26:5:228:189:826 +AAGCCCTTCTCACAGTTTCTGCCCCCCGCATGGTT +>EAS114_26:5:228:189:826 +ATCATGACTCTATCCCAAATTCCCAATTACGTCCT +>EAS114_26:5:238:31:968 +ACACCATCCCTGTCTTACTTCCAGCTCCCCAGAGG +>EAS114_26:5:238:31:968 +ATTCTGCAGCCCAGCTCCAGATTGCTTGTGGTCTG +>EAS114_26:5:43:114:617 +AATCATAAATACACACAAAAGTACAAAACTCACAG +>EAS114_26:5:43:114:617 +AATGTTATGCCCTGCTAAACTAAGCATCATAAATG +>EAS114_26:6:129:694:359 +CCCTGAGAGATTCTGCAGCCCAGATCCAGATTGCT +>EAS114_26:6:129:694:359 +TGTCAGTTACCAAATGTGTTTATTACCCGAGGGAT +>EAS114_26:6:140:253:322 +AATTTTTGGACTTCTTAAAGAAAAAAAAACCTGTC +>EAS114_26:6:140:253:322 +GAAATGCTCAAAAGAATTGTAAAAGTCAAAATTAA +>EAS114_26:6:183:697:555 +AAAGAATGCCAGGAAGATACATTGCCAGACAGACT +>EAS114_26:6:183:697:555 +AGAAATCTTAGAAGCCAGAAGAGATTGGATCTAAT +>EAS114_26:6:46:13:880 +AAAACCTCTTTAGTCTTGCTAGAGATTTAGACATC +>EAS114_26:6:46:13:880 +AGAAAAGCATACAGTCATCTATAAAGGAAATCCCA +>EAS114_26:7:13:172:720 +AATTCATTTAAGAAATTACAAAATATAGTTGAAAG +>EAS114_26:7:157:876:302 +AAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGA +>EAS114_26:7:157:876:302 +CAACTAGGTAAAAAATTAACATTACAACACGAACA +>EAS114_26:7:218:858:445 +AAAAAGAAAAAGTGAGAAGTTTGGAAAAACTATTT +>EAS114_26:7:218:858:445 +GAAAAAAATTCTAAAATCAGCAAGAGAAAAGCATA +>EAS114_26:7:245:323:744 +ACCTCTACATGGCTGATTATGAAAACAATGTTCCC +>EAS114_26:7:245:323:744 +GATTCTGGGAAATTCTTCATCCTGGACCCTGAGAG +>EAS114_26:7:37:79:581 +TTAAAATTTAAAAAAAGTAAATAAAACACATAGCT +>EAS114_26:7:37:79:581 +TTTTTTTTTTTTTTTTTTTTTTTCATGCCAGAAAA +>EAS114_26:7:86:308:648 +GAAGAACAGCTTAGGTATCAATTTGGTGTTCTGTG +>EAS114_26:7:86:308:648 +TATTAGGAAATGCTTTACTGTCATAACTATGAAGA +>EAS114_28:1:144:242:602 +ATCAGCAAGAGAAAAGCATACAGTCATCTATAAAGG +>EAS114_28:1:144:242:602 +ATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAAG +>EAS114_28:1:168:389:889 +GAAATTACAAAATATAGTTGAAAGCTCTAACAATAG +>EAS114_28:1:168:389:889 +TAACTGAACCTATGAGTCACAGGTATTCCTGAGGAA +>EAS114_28:1:168:609:646 +GGAAAAAAGTAAACTCTCAAATATTGCTAGTGGGAG +>EAS114_28:1:168:609:646 +GGTTACACTAAAAGCCCATACTTTACTGCTACTCAA +>EAS114_28:1:220:801:282 +AACCTCATATATCAATATTAACTTTGAATAAAAAGG +>EAS114_28:1:220:801:282 +AATTCATCATCACTAAACCAGTCCTATAAGAAATGC +>EAS114_28:1:232:351:909 +ACATGGCTGATTATGAAATCAATGTTCCCCAGATGC +>EAS114_28:1:232:351:909 +CCATCATGAAGCGCTGAACTTCCACGTCTCATCTAG +>EAS114_28:1:28:708:463 +CCCAATGGACCTGTGATATCTGGATTCTGGGAAATT +>EAS114_28:1:28:708:463 +GTATAATACCTCTACATGGCTGATTATGAAAACAAT +>EAS114_28:2:114:938:216 +CTAACAATAGACTAAACCAAGCAGAAGAAAGAGGTT +>EAS114_28:2:114:938:216 +GAGTCACAGGTATTCCTGAGGAAAAAGAAAAAGTGA +>EAS114_28:2:141:7:963 +CACTTTAAATCAACAACAGTAAAATAAAACAAAGGA +>EAS114_28:2:141:7:963 +TACAATGTACAATATTCTGATGATGGTTACACTAAA +>EAS114_28:2:149:650:44 +CGCTCCACGCCCAAGCCCTTCTCACAGTTTCTGCCC +>EAS114_28:2:149:650:44 +CTGTCTTACTTCCAGCTCCCCAGAGGGAAAGCTTTC +>EAS114_28:2:167:905:852 +AGAAAAGCATACAGTCATCTATAAAGAAAATCCCAT +>EAS114_28:2:167:905:852 +CAAATGCTAAGATAATTCATCATCACTAAACCAGTC +>EAS114_28:2:251:819:772 +TCCCCCACTTAAGAGATATAGATTGGCAGAACAGAT +>EAS114_28:2:251:819:772 +TTCAATACTCACCATCATAAATACACACAAAAGTAC +>EAS114_28:2:28:474:566 +ACTGAACTTCCACGTCTCATCTAGGGGAACAGGGAG +>EAS114_28:2:28:474:566 +TGAACCACACATTAATACTATGTTTCTTATCTGCAC +>EAS114_28:2:329:437:643 +AAGATACATTGCAAGACAGACTTCATCAAGATATGT +>EAS114_28:2:329:437:643 +TTTTGGACTTCTTAAAGAAAAAAAAACCTGTCAAAC +>EAS114_28:2:55:562:403 +CAACAGGAACAAAACCTCATATATCAATATTAACTT +>EAS114_28:2:55:562:403 +CAAGCAAATGCTAAGATAATTCATCATCACTAAACC +>EAS114_28:3:110:984:98 +AAGGAGGTCATCATACAATGATAAAAAGATCAATTC +>EAS114_28:3:110:984:98 +ACTAAAACCCCATACTTTACTGCTACTCAATATATC +>EAS114_28:3:173:627:465 +GTAAACTCTCAAATATTGCTAGTGGGAGTATAAATT +>EAS114_28:3:173:627:465 +TGATGGTTACACTAAAAGCCCATACTTTACTGCTAC +>EAS114_28:3:176:402:458 +AAATAGCTAAAACTAAAAAAGCAAAAACAAAAACTA +>EAS114_28:3:176:402:458 +CCTAAGAGGGATGAGAAATTACCTAATTGGTACAAT +>EAS114_28:3:202:275:776 +CAAATACTACTAGACCTAAGAGGGATGAGAAATTAC +>EAS114_28:3:202:275:776 +TCTACGCAAACAGAAACCAAATGAGAGAAGGAGTAG +>EAS114_28:3:250:628:423 +CAATGGGCTTCTCAGCGGAAACCTTACAAGCCAGAA +>EAS114_28:3:250:628:423 +CTCTTTAGTCTTGCTAGAGATTTAGACATCTAAATG +>EAS114_28:3:279:763:945 +CTGCACATTACTACCCTGCAATTAATATAATTGTGT +>EAS114_28:3:279:763:945 +GCCGTCCGTGTCCTCCCATCTGGCCTCGTCCACACT +>EAS114_28:3:308:509:948 +AATATATCCATGTAACAAATCTGCGCTTGTACTTCT +>EAS114_28:3:308:509:948 +AATTCAGCAAGAAGATATAACCATCCTACTAAATAC +>EAS114_28:3:32:492:907 +CAAACACGAATGTTATGCCCTGCTAAACTAAGCATC +>EAS114_28:3:32:492:907 +TGTAGTCATCAGACTATCTAAAGTCAACATGAAGGA +>EAS114_28:3:78:773:660 +ATTCTGCAGCCCAGCTCCAGATTGCTTGTGGTCTGA +>EAS114_28:3:78:773:660 +CCCCAGATACCATCCCTGTCTTACTTCCAGCTCCCC +>EAS114_28:4:13:701:55 +AAACCAAATGAGAGAAGGAGTAGCTATACTTATATC +>EAS114_28:4:13:701:55 +TTCATAAAACAAATACTACTAGACCTAAGAGGGATG +>EAS114_28:4:149:572:877 +ATGTAAAGTAACTGAACCTATGAGTCACAGGTATTC +>EAS114_28:4:149:572:877 +GAGGCTCAAAGAATGCCAGGAAGATACATTGCAAGA +>EAS114_28:4:215:246:640 +AAAAGCATACAGTCATCTATAAAGGAAATCCCATCA +>EAS114_28:4:215:246:640 +AAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGAT +>EAS114_28:4:305:707:258 +AAAAAGATGTTCTACGCAAGCAGAAACCAAATGAGA +>EAS114_28:4:305:707:258 +GAACAAAACCTCATATATCAATATTAACTTTGAATA +>EAS114_28:4:322:631:245 +CCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGC +>EAS114_28:4:322:631:245 +TATTTTTGTCTTGACACCCAACTAATATTTGTCTGA +>EAS114_28:4:9:55:730 +ATCCCTGTCTTACTTCCAGCTCCCCAGAGGGAAAGC +>EAS114_28:4:9:55:730 +CAGCCCAGCTCCAGATTGCTTGTGGTCTGACAGGCT +>EAS114_28:5:104:350:749 +AAATATAGAAATTGAAACAGCTGTGTTTAGTGCCTT +>EAS114_28:5:104:350:749 +TGCCCTCTTCTTCCAAAGATGAAACGCGTAACTGCG +>EAS114_28:5:11:868:62 +TCTTAGGGAAGAACAGCTTAGGTATCAATTTGGTGT +>EAS114_28:5:11:868:62 +TTTACTGTCATAACTATGAAGAGACTATTGCCAGAT +>EAS114_28:5:163:832:715 +TAAAAACATGAACTAACTATATGCTGTTTACAAGAA +>EAS114_28:5:163:832:715 +TAAAACAAAGGAGGTCATCATACAATGATAAAAAGA +>EAS114_28:5:206:671:49 +ACCATCCCTGTCTTACTTCCAGCTCCCCAGAGGGAA +>EAS114_28:5:206:671:49 +GCTTGTGGTCTGACAGGCTGCAACTGTGAGCCATCA +>EAS114_28:5:209:778:588 +AACAGTCTAGATGAGAGAGAACTTCCCTGGAGGTCT +>EAS114_28:5:209:778:588 +TTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTT +>EAS114_28:5:23:944:377 +AATGTTATGCCCTGCTAAACTAAGCATCATAAATGA +>EAS114_28:5:23:944:377 +AGTACAAAACTCACAGGTTTTATAAAACAATTAATT +>EAS114_28:6:11:151:750 +GTTTTTATTTTTTTCCTCTCTCTTTTTTTTTTTTTT +>EAS114_28:6:155:68:326 +CCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGTAA +>EAS114_28:6:155:68:326 +GTCAGGGAAGGAGCATTTTGTCAGTTACCAAATGTG +>EAS114_28:6:175:705:982 +CATGGTTTAGGGGTATAATACCTCTACATGGCTGAT +>EAS114_28:6:175:705:982 +CTGGATTCTGGGAAATTCTTCATCCTGGACCCTGAG +>EAS114_28:6:185:87:475 +AAGAAACTCATTAATAAAGACATGAGTTCAGGTAAA +>EAS114_28:6:185:87:475 +ATTGAGACTACAGAGCAACTAGGTAAAAAATTAACA +>EAS114_28:6:187:996:432 +TGCTCAAAAGAATTGTAAAAGTCAAAATTAAAGTTC +>EAS114_28:6:187:996:432 +TTGAATAAAAAGGGATTAAATTCCCCCACTTAAGAG +>EAS114_28:6:51:506:878 +TAATCTCTCTCCTTTTTGCTGCATCCCTGTCTTCCT +>EAS114_28:6:51:506:878 +TTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAACT +>EAS114_28:6:54:263:585 +TGAAAGCTTGGGCTGTAATGATGCCCCTTGGCCATC +>EAS114_28:6:54:263:585 +TGTCCATGTACACACGCTGTCCTATGTACTTATCAT +>EAS114_28:7:133:514:754 +AGCTATACTTATATCAGATAAAGCACACTTTAAATC +>EAS114_28:7:133:514:754 +TAAATTTGAATAAAAAGGGATTAAATTCCCCCACTT +>EAS114_28:7:157:786:424 +GCTTTACTGTCATAACTATGAAGAGACTATTGCCAG +>EAS114_28:7:157:786:424 +TTAGGTATCAATTTGGTGTTCTGTGTAAAGTCTCAG +>EAS114_28:7:178:276:693 +GTTCAGAACTTGAAGACAAGTCTCTTATGAATTAAC +>EAS114_28:7:178:276:693 +TTGGAAAAACTATTTGAGGAAGTAATTGGGGAAAAC +>EAS114_28:7:215:863:521 +ACTCACCATCATAAATACACACAAAAGTACAAAACT +>EAS114_28:7:215:863:521 +TAAGAGATATAGATTGGCAGAACAGATTTAAAAACA +>EAS114_28:7:242:354:637 +AACTATATTTATGCTATTCAGTTCTAAATATAGAAA +>EAS114_28:7:242:354:637 +CCCTCTTCTTCCAAAGATGAAACGCGTAACTGCGCT +>EAS114_28:7:287:492:169 +CGCTCTCATTCACTCCAGCTCCCTGTCACCCAATGG +>EAS114_28:7:287:492:169 +GTGTTTAGTGCCTTTGTTCAACCCCCTTGCAACAAC +>EAS114_28:7:57:324:546 +GTCATCTATAAAGGAAATCCCATCAGAATAACAATG +>EAS114_28:7:57:324:546 +TAATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATT +>EAS114_30:1:134:379:893 +AGTTTCTGCCCCCAGCATGGTTGTACTGGGCAATA +>EAS114_30:1:134:379:893 +CGCTGTCCTATGTACTTATCATGACTCTATCCCAA +>EAS114_30:1:154:818:165 +GAACAGGGAGGTGCACTAATGCGCTCCACGCCCAA +>EAS114_30:1:154:818:165 +TTCTTATCTGCACATTACTACCCTGCAATTAATAT +>EAS114_30:1:176:168:513 +ATTTGTAATGAAAACTATATTTATGCTATTCAGTT +>EAS114_30:1:176:168:513 +TTTGATGCCCTCTTCTTCCAAAGATGAAACGCGTA +>EAS114_30:1:188:863:790 +CATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTC +>EAS114_30:1:188:863:790 +TTAATTGAGACTACAGAGCAACTAGGTAAAAAATT +>EAS114_30:1:243:10:911 +TATTCAGTTCTAAATATAGAAATTGAAACAGCTGT +>EAS114_30:1:64:526:339 +ACATTACAACAGGAACAAAACCTCATATATCAATA +>EAS114_30:1:64:526:339 +CAAATGAGAGAAGGAGTATCTATACTTATATCAGA +>EAS114_30:2:111:142:21 +ATCAGAATAACAATGGGCTTCACAGCGGAAACCTT +>EAS114_30:2:111:142:21 +CTTGCTAGAGATTTAGACATCTAAATGAAAGAGGC +>EAS114_30:2:226:885:729 +AAAAGGGATTAAATTCCCCCACTTAAGAGATATAG +>EAS114_30:2:226:885:729 +GCTGAACTTACATCAGATAAAGCACACTTTAAATC +>EAS114_30:2:272:750:698 +GTGTTTATTACCAGAGGGATGGAGGGATGACGGAC +>EAS114_30:2:272:750:698 +TGCAGCCCAGATCCAGATTGCTTGTGGTCTGACAG +>EAS114_30:2:297:949:26 +ACCAGTCCTATAAGAAATGCTCAAAAGAATTGTAA +>EAS114_30:2:297:949:26 +CATATATCAATATTAACTTTGAATAAAAAGGGATT +>EAS114_30:2:303:428:326 +AAAATTAAAATTTAACAAAAGTAAATAAAACACAT +>EAS114_30:2:303:428:326 +TTTTTTTTTTTTTTTTTCTCTTTTTTTTTTTTTTT +>EAS114_30:2:30:887:404 +CAACAGGAAGAAAAGGTCTTTCAAAAGGTGATGTG +>EAS114_30:2:30:887:404 +TTGCCTTCAGACCCTGCACGAATGCGTCTCTACCA +>EAS114_30:2:315:412:921 +GTAAAGATGTGGGGAAAAAAGTAAACTCTCAAATA +>EAS114_30:2:315:412:921 +TTCTGATGATGGTTACACTACAAGCCCATACTGTA +>EAS114_30:2:82:963:128 +ATTAAAGTTCAATACTCACCATCATAAATACACAC +>EAS114_30:2:82:963:128 +GGCAGAACAGATTTAAAAACATGAACTAACTATAT +>EAS114_30:3:139:117:262 +AGGGGCTTAACCTCTGGTGACTGCCAGAGCTGCTG +>EAS114_30:3:139:117:262 +GTTCTCAAGGTTGTTGCAAGGGGGTCTATGTGAAC +>EAS114_30:3:14:697:541 +TAAAAGCAGCAAGAGAAAAGCATACAGTCATCTAT +>EAS114_30:3:14:697:541 +TTGGAAAAACTATTTGAGGAAGTAATTGGGGAAAA +>EAS114_30:3:161:366:544 +CTTCTGTAATTGAAAAATTCATTTAAGAAATTACA +>EAS114_30:3:181:582:435 +CAAGTCTTTCCTGACAAGCAAATGCTAAGATAATT +>EAS114_30:3:181:582:435 +GAAATCCCATCAGAATAACAATGGGCTTCTCAGCA +>EAS114_30:3:187:294:947 +ACAGGGGGCTGCGCGGTTTCCCATCATGAAGCACT +>EAS114_30:3:187:294:947 +AGAGACTATTGCCAGATGAACCACACATTAATACT +>EAS114_30:3:215:840:760 +AAGTATTGGTAAAGATGTGGGGAAAAAAGTAAACT +>EAS114_30:3:215:840:760 +CTGATGATGGTTACACTAAAAGCCCATACTTTCCT +>EAS114_30:3:24:195:604 +TCACAGTTTCTGCCCCCAGCATGGTTGTACTGTGC +>EAS114_30:3:24:195:604 +TGTCCTATGTACTTATCATGACTCTATCCCAAATT +>EAS114_30:3:302:288:657 +AGGTATCAATTTGGTGTTCTGTGTAAAGTCTCAGG +>EAS114_30:3:302:288:657 +CCAGATGAACCACACATTAATACTATGTTTCTTAT +>EAS114_30:3:35:361:546 +TGCACTAATGCGCTCCACGCCCAAGCCCTTCTCAC +>EAS114_30:3:35:361:546 +TTACTTCCAGCTCCCCAGAGGGAAAGCTTTCAACG +>EAS114_30:3:39:348:594 +AAGCATCATAAATGAAGGGGAAATAAAGTCAAGTC +>EAS114_30:3:39:348:594 +CTAAAATCAGCAAGAGAAAAGCATACAGTCATCTA +>EAS114_30:4:183:852:253 +ACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATGT +>EAS114_30:4:183:852:253 +CCATTTCTTTTGGCATTTGCCTTCAGACCCTACAC +>EAS114_30:4:317:378:535 +AGCTTGGGCTGTAATGATGCCCCTTGGCCATCACC +>EAS114_30:4:317:378:535 +GCTGTCCTATGTACTTATCATGACTCTATCCCAAA +>EAS114_30:4:327:795:103 +AACCTTGAGAACCCCAGGGAATTTGTCAATGTCAG +>EAS114_30:4:327:795:103 +ACAGGGGCTTAACCTCTGGTGACTGCCAGAGCTGC +>EAS114_30:4:328:537:640 +AAGTATGAGATTATGTAAAGTAACTGAACCTATGA +>EAS114_30:4:328:537:640 +GGAAGATACATTGCAAGACAGACTTCATCAAGATA +>EAS114_30:5:327:991:508 +ACCCCAGGGAATTTGTCAATGTCAGGGAAGGAGCA +>EAS114_30:5:327:991:508 +TCTGGATTCTGGGAAATTCTTCATCCTGGACCCTG +>EAS114_30:5:32:461:154 +ACAGGTTTTATAAAACAATTAATTGAGACTACAGA +>EAS114_30:5:32:461:154 +TTACAAGAAACTCATTAATAAAGACATGAGTTCAG +>EAS114_30:6:137:741:866 +ACACTAAAAGCCCATACTTTACTGCTACTCAATAT +>EAS114_30:6:137:741:866 +GATGAGGGGAAAAAAGTAAACTCTCAAATATTGCT +>EAS114_30:6:157:42:763 +TCTGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCG +>EAS114_30:6:157:42:763 +TTTCTTATCTGCACATTACTACCCTGCAATTATTA +>EAS114_30:6:163:312:891 +CCCAGCTCCAGATTGCTTGTGGTCTGACAGGCTGC +>EAS114_30:6:163:312:891 +TTCCCCAGATACCGTCCCTGTCTTACTTCCAGCTC +>EAS114_30:6:214:565:337 +AAATGAAAGAGGCTCAAAGAATGCCAGGAAGATAC +>EAS114_30:6:214:565:337 +CAGAATAACAATGGGCTTCTCAGCAGAAACCTTAC +>EAS114_30:6:220:809:850 +GGGGGGAAAAAGATGTGCTACACAAAAAGATTCCA +>EAS114_30:6:220:809:850 +TTCATAAAACAAATACTACTAGACCTAAGAGGGAT +>EAS114_30:6:238:803:383 +ACAATTAATTGAGACTACAGAGCAACTAGGTAAAA +>EAS114_30:6:238:803:383 +ACTCATTAATAAAGACATGAGTTCAGGTAAAGGGG +>EAS114_30:6:243:209:110 +AAAACATGAACTAACTATATGCTGTTTACAAGAAA +>EAS114_30:6:243:209:110 +CACAGGTTTTATAAAACAATTAATTGAGACTACAG +>EAS114_30:6:277:397:932 +TTTCTTTTCACTTTTTTTTTTTTTTTTTTTTACTT +>EAS114_30:6:290:146:36 +CTTTCCCATCCCCCGGTCCCTGCCCCATCTCTTGT +>EAS114_30:6:290:146:36 +TTATCATGACTCTATCCCAAATTCCCAATTACGTC +>EAS114_30:6:326:309:149 +CAACCTTGAGAACCCCAGGGAATTTGTCAATGTCA +>EAS114_30:6:326:309:149 +CTCCCTGTCACCCAATGGACCTGTGATATCTGGAT +>EAS114_30:6:41:461:436 +TAAAGTAACTGAACCTATGAGTCACAGGTATTCCT +>EAS114_30:6:41:461:436 +TAGTCATCAGACTATCTAAAGTCAACATGAAGGAA +>EAS114_30:6:49:656:507 +AAGGAAATCCCATCAGAATAACAATGGGCTTCTCA +>EAS114_30:6:49:656:507 +TCCTGACAAGCAAATGCTAAGATAATTCATCATCA +>EAS114_30:6:4:665:771 +GAATAAAAAGGGATTAAATTCCCCCACTTAAGAGA +>EAS114_30:6:4:665:771 +GTGCTTTATCTGATATCAATGCCGATAAACTGCCT +>EAS114_30:6:62:386:959 +AAAAGCTTTCAACGCTTCTAGCCATTTCTTTTGGC +>EAS114_30:6:62:386:959 +AATGAACAACAGGAAGAAAAGGTCTTTCAAAAGGT +>EAS114_30:7:269:944:220 +ATCTTCTTCTTAGGGAAGAACAGCTTAGGTATCAA +>EAS114_30:7:269:944:220 +TGGGCAATACATGAGATTATTAGGAAATGCTTTAC +>EAS114_30:7:283:799:560 +ACATAGACCCCCTTGCAACAACCTTGAGAACCCCA +>EAS114_30:7:283:799:560 +GGGGTTGCCAGCACAGGGGCTTAACCTCTGGTGAC +>EAS114_30:7:310:155:312 +CAGCAAGAGAAAAGCATACAGTCATCTATAAAGGA +>EAS114_30:7:310:155:312 +CATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCT +>EAS114_30:7:319:11:255 +TACCCAGATTCATAAAACAAATACTACTAGACCTA +>EAS114_30:7:319:11:255 +TCTATAAAAAAATTAAAATTTAACAAAAGTAAATA +>EAS114_30:7:59:871:351 +GTAAAAAATTAACATTACAACAGGAACAAAACCTC +>EAS114_30:7:59:871:351 +TAAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAG +>EAS114_30:7:71:311:202 +TATGAGATTATGTAAAGTAACTGAACCTATGAGTC +>EAS114_30:7:71:311:202 +TCAAGATATGTAGTCATCAGACTATCTAAAGTCAA +>EAS114_32:1:199:760:42 +ACCCAATTAATATTTTTCTTAGCAAAACAGTCTAG +>EAS114_32:1:199:760:42 +CTCTCTAATTTTTGCTGCTTCCATGTCTTACTCTG +>EAS114_32:1:208:971:600 +AAAAAAACCTGTCAAACACGAATGTTATGCCCTGC +>EAS114_32:1:208:971:600 +AGATATGTAGTCATCAGACTATCTAAAGTCAACAT +>EAS114_32:2:163:618:570 +AGGCTGCAACTGTGAGCCATCACAATGAACAACAG +>EAS114_32:2:163:618:570 +GGAAAGCTGTCAACGCTTCTAGCCATTTCTTTTGG +>EAS114_32:2:197:170:559 +CTCATTCACTCCAGCTCCCTGTCACCCAATGGACC +>EAS114_32:2:197:170:559 +TTCTCAAGGTTGTTGCAAGGGGGTCTATGTGAACA +>EAS114_32:2:247:900:123 +AAAACATGAACTAACTATATGCTGTTTACAAGAAA +>EAS114_32:2:247:900:123 +AATTCAGCAAGAAGATATAACCATCCTACTAAATA +>EAS114_32:2:283:577:398 +ACAATGGGCTTCTCAGCGGAAACCTTACAAGCCAG +>EAS114_32:2:283:577:398 +CTAGAGATTTAGACATCTAAATGAAAGAGGCTCAA +>EAS114_32:2:306:119:56 +CTTCTCACAGTTTCTGCCCCCAGCATGGTTGTACT +>EAS114_32:2:306:119:56 +TCCATGTACACACGCTGTCCTATGTACTTATCATG +>EAS114_32:3:236:475:254 +AGATAAAGCACACTTTAAATCAACAACAGTAAAAT +>EAS114_32:3:236:475:254 +TTCCCCCACTTAAGAGATATAGATTGGCAGAACAG +>EAS114_32:3:307:113:346 +AATTCAGCAAGAAGATATAACCATCCTACTAAATA +>EAS114_32:3:307:113:346 +ATGCTGTTTACAAGAAACTCATTAATAAAGACATG +>EAS114_32:4:156:21:69 +AAAAATGAACAGAGCTTTCAAGAAGTATGAGATTA +>EAS114_32:4:156:21:69 +TTGCAAGACAGACTTCATCAAGATATGTAGTCATC +>EAS114_32:4:20:41:138 +CATTTCTTTTGGCATTTGCCTTCAGACCCTACACG +>EAS114_32:4:20:41:138 +GTCTTTCAAAAGGTGATGTGTGTTCTCATCAACCT +>EAS114_32:4:228:587:504 +GCACATTACGACCCGGCAAGGTGTATAATTGTGTC +>EAS114_32:4:228:587:504 +GTGCACTAATGCGCTCCACGCCCAAGCCCTTCTCA +>EAS114_32:4:246:647:765 +GATCAATTCAGCAAGAAGATATAACCATCCTACTA +>EAS114_32:4:246:647:765 +TATGCTGTTTACAAGAAACTCATTAATAAAGACAT +>EAS114_32:4:42:923:169 +ACAGTTTCTGCCCCCAGCATGGTTGTACTGGGCAA +>EAS114_32:4:42:923:169 +TTCCTATGTACTTATCATGAATCTATCCCAAATTC +>EAS114_32:4:5:396:292 +ATACATATGCACCTAACACAAGACTACCCAGATTC +>EAS114_32:4:5:396:292 +TAAAGGGGTGGAAAAAGATGTTCTACGCAAACAGA +>EAS114_32:4:7:282:424 +CAAAAACAAAAACTATGCTAAGTATTGTTAAAGAT +>EAS114_32:4:7:282:424 +TAATTGGTACAATGTACAATATTCTGATGATGGTT +>EAS114_32:5:109:199:592 +ACGAATATTATGCCCTGCTAAACTAAGCATCATAA +>EAS114_32:5:109:199:592 +AGTCATCAGACTATCTAAAGTCAACATGAAGGAAA +>EAS114_32:5:182:313:319 +AATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGT +>EAS114_32:5:182:313:319 +GATGAACCACACATTAATACTATGTTTCTTATCTG +>EAS114_32:5:267:170:250 +CATAAAACAAATACTACTAGACCTAAGAGGGATGA +>EAS114_32:5:267:170:250 +CATAGCTAAAACTAAAAAAGCAAAAACAAAAACTA +>EAS114_32:5:78:583:499 +TTTACGCTATTCAGTACTAAATATAGAAATTGAAA +>EAS114_32:6:122:342:296 +AAAGCTTGGGCTGTAATGATGCCCCTTGGCCATCA +>EAS114_32:6:122:342:296 +TCCTATGTACTTATCATGACTCTATCCCAAATTCC +>EAS114_32:6:178:342:866 +AACAAATCTGCGCTTGTACTTCTAAATCTATAAAA +>EAS114_32:6:178:342:866 +ATACATATGCACCTAACACAAGACTACCCAGATTC +>EAS114_32:6:179:735:569 +ATGTTAAAATGTCTATTTTTGTCTTGACACCCAAC +>EAS114_32:6:179:735:569 +CATCACCCGGTCCCTGCCCCATCTCTTGTAATCTC +>EAS114_32:6:199:818:124 +AACTATTTGAGGAAGTAATTGGGGAAAACCTCTTT +>EAS114_32:6:199:818:124 +ACTAAACCAAGCAGAAGAAAGAGGTTCAGAACTTG +>EAS114_32:6:78:909:394 +ATTGCTTGGTGTCTGACAGGCTGCAACTGTGAGCC +>EAS114_32:6:78:909:394 +TACCAGAGGGATGGAGGGAAGAGGGACGCTGAAGA +>EAS114_32:6:88:162:587 +GGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGAC +>EAS114_32:6:88:162:587 +TTCTGTGTAAAGTCTCAGGGAGCCGTCCGTGTCCT +>EAS114_32:7:174:597:66 +TCTCTTGTAATCTCTCTCCTTTTTGCTGCATCCCT +>EAS114_32:7:174:597:66 +TCTTCTTCTTAGGGAAGAACAGCTTAGGTATCAAT +>EAS114_32:7:201:959:19 +CTCTACATGGCTGATTATTAAAACAATGTTCCCCA +>EAS114_32:7:201:959:19 +TATCTGGATTCTGGGAAATTCTTCATCCTGGACCC +>EAS114_32:7:256:407:470 +AACGCTTCTAGCCATTTCTTTTGGCATTTGCCTTC +>EAS114_32:7:256:407:470 +CAGCATGGTTGTACTGGGCAATACATGAGATTATT +>EAS114_39:1:12:884:219 +GAGCCATCACAATGAACAACAGGAAGAAAAGGTCT +>EAS114_39:1:12:884:219 +GCTTTCAACGCTTCTAGCCATTTCTTTTGGCATTT +>EAS114_39:1:28:350:895 +ATATAGTTGAAAGCTCTAACAATAGACTAAACCAA +>EAS114_39:1:28:350:895 +TATGAGTCACAGGTATTCCTGAGGAAAAAGAAAAA +>EAS114_39:1:43:1120:878 +ACTAATGCGCTCCACGCCCAAGCCCTTCTCACAGT +>EAS114_39:1:43:1120:878 +TAATTGTGTCCATGTACACACGCTGTCCTATGTAC +>EAS114_39:1:70:147:84 +ATAGACCCCCTTGCAACAACCTTGAGAACCCCAGG +>EAS114_39:1:70:147:84 +CCAGCACAGGGGCTTAACCTCTGGTGACTGCCAGA +>EAS114_39:1:71:636:533 +GCCTCGTCCACACTGGTTCTCTTGAAAGCTTGGGC +>EAS114_39:1:71:636:533 +GTGGAAGACATAATCCCACGCTTCCTATGGAAAGG +>EAS114_39:1:73:302:1574 +AAGGTTGTTGGGAGATTTTTAATGATTCCTCAATG +>EAS114_39:1:73:302:1574 +CCTCGTCCACACTGGTTCTCTTGAAAGCTTGGGCT +>EAS114_39:1:98:641:1040 +CAGAACAGATTTAAAAACATGAACTAACTATATGC +>EAS114_39:1:98:641:1040 +TAAAACAAAGGAGGTCATCATACAATGATAAAAAG +>EAS114_39:2:18:967:582 +AAGCCGTTCTATTTGTAATGAAAACTATATTTATG +>EAS114_39:2:18:967:582 +ACGCTGAAGAACTTTGATGCCCTCTTCTTCCAAAG +>EAS114_39:2:38:670:564 +CAGGTTTTATAAAACAATTAATTGAGACTACAGAG +>EAS114_39:2:38:670:564 +CTAACTATATGCTGTTTACAAGAAACTCATTAATA +>EAS114_39:2:41:576:1016 +CTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTC +>EAS114_39:2:41:576:1016 +TGTCTGAGCAAAACAGTCTAGATGAGAGAGAACTT +>EAS114_39:2:57:1064:925 +TGACAAGCAAATGCTAAGATAATTCATCATCACTA +>EAS114_39:2:5:1219:137 +AAAACTAAAAAAGCAAAAACAAAAACTATGCTAAG +>EAS114_39:2:5:1219:137 +ACCTAAGAGGGATGAGAAATTACATAATTGGTACA +>EAS114_39:3:11:1238:1728 +AGAGATTTAGACATCTAAATGAAAGAGGCTCAAAG +>EAS114_39:3:11:1238:1728 +TCCCATCAGAATAACAATGGGCTTCTCAGCGGAAA +>EAS114_39:3:55:464:146 +AAAAAGATCAATTCAGCAAGAAGATATAACCATCC +>EAS114_39:3:55:464:146 +CTCAATATATCCATGTAACAAATCTGCGCTTGTAC +>EAS114_39:3:6:1064:1805 +TAAAATTTAACAAAAGTAAATAAAACACATAGCTA +>EAS114_39:3:6:1064:1805 +TTGGTAATTTCGTTTTTTTTTTTTTCTTTTCTCTT +>EAS114_39:3:88:84:1558 +AGTAACTGAACCTATGAGTCACAGGTATTCCTGTG +>EAS114_39:3:88:84:1558 +ATCAGACTATCTAAAGTCAACATGAAGGAAAAAAA +>EAS114_39:4:10:1312:1558 +AACTAACTATATGCTGTTTACAAGAAACTCATTAA +>EAS114_39:4:10:1312:1558 +AGGTTTTATAAAACAATTAATTGAGACTACAGAGC +>EAS114_39:4:30:432:228 +ATCCTACTAAATACATATGCACCTAACACAAGACT +>EAS114_39:4:30:432:228 +GACATGAGTTCAGGGAAAGGGGTGGAAAAAGATGT +>EAS114_39:4:30:570:902 +AAAAACCTGTCAAACACGAATGTTATGCCCTGCTA +>EAS114_39:4:30:570:902 +ATACTCACCATCATAAATACGCACAAAAGTACAAA +>EAS114_39:4:43:1047:1626 +GATGAGAGAGAACTTCCCTGGAGGTCTGATGGCGT +>EAS114_39:4:43:1047:1626 +GTTGGTTTTCTGTTTCTTTGTTTGATTTGGTGGAA +>EAS114_39:4:58:271:612 +AGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAACTA +>EAS114_39:4:58:271:612 +ATGAAGGAAAAAAATTCTAAAATCAGCAAGAGCAA +>EAS114_39:4:93:77:1338 +GCTGCTTACAAGAAGCGCATTAATAAAGACATGAG +>EAS114_39:4:93:77:1338 +GTCATCATACAATGAAAAAAAGATCAATTCAGCAA +>EAS114_39:5:17:1222:783 +AAGAAAGAGGTTCAGAACTTGAAGACAAGTCTCGT +>EAS114_39:5:17:1222:783 +TGAGAAGTTTGGAAAAACTATTTGAGGAAGTAATT +>EAS114_39:5:42:1223:1087 +CAGTCCCTGCCCCATCTCTTGTAATCTCTCTCCTT +>EAS114_39:5:42:1223:1087 +TTGTCTTGACACCCAACTAATATTTGTCTGAGCAA +>EAS114_39:5:50:972:1286 +AGAGGGATGGAGGGAAGAGGGACGCTGAAGAACTT +>EAS114_39:5:50:972:1286 +TTGTGGTCTGACAGGCTGCAACTGTGAGCCATCAC +>EAS114_39:5:61:1000:1534 +CTTGAAGACAAGTCTCTTATGAATTAACCCAGTCA +>EAS114_39:5:61:1000:1534 +GGGGAAAACCTCTTTAGTCTTGCTAGAGATTTAGA +>EAS114_39:5:93:312:331 +AACTCATTAATAAAGACATGAGTTCAGGTAAAGGG +>EAS114_39:5:93:312:331 +ATCCTACTAAATACATATGCACCTAACACAAGACT +>EAS114_39:6:13:1034:1144 +AAAGATGAAACGCGTAACTGCGCTCTCATTCACTC +>EAS114_39:6:13:1034:1144 +AATTGAAACAGCTGTGTTTAGTGCCTTTGTTCACA +>EAS114_39:6:34:380:815 +AAGAGGTTCAGAACTTGAAGACAAGTCTCTTATGA +>EAS114_39:6:34:380:815 +ATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATTT +>EAS114_39:6:71:644:1792 +AAAAGTACAAAACTCACAGGTTTTATAAAACAATT +>EAS114_39:6:71:644:1792 +CCTGCTAAACTAAGCATCATAAATGAAGGGGAAAT +>EAS114_39:6:76:282:1668 +AACAAAAACTATGCTAAGTATTGGTAAAGATGTGG +>EAS114_39:6:76:282:1668 +TACAATGTACAATATTCTGATGATGGTTACACTAA +>EAS114_39:6:7:492:1088 +ACAGGTTTTATAAAACAATTAATTGAGACTACAGA +>EAS114_39:6:7:492:1088 +TGAACTAACTATATGCTGTTTACAAGAAACTCATT +>EAS114_39:6:85:1224:625 +GAACTCCCCTGGAGGTCTGATGGCGTTTCTCCCTC +>EAS114_39:6:85:1224:625 +GCTGCATCCCTGTCTTCCTCTGTCTTGATTTCCTT +>EAS114_39:6:94:1273:1462 +AAGATGTTCTACGCAAACAGAAACCAAATGAGAGA +>EAS114_39:6:94:1273:1462 +CCTAACACAAGACTACCCAGATTCATAAAACAAAT +>EAS114_39:7:100:708:1984 +AGATGAACCACACATTAATACTATGTTTCTTATCT +>EAS114_39:7:100:708:1984 +TACCACAGGGGGCTGCGCGGTTTCCCATCATGAAG +>EAS114_39:7:23:1126:1886 +ACACTAAAAGCCCATACTTTACTGCTACTCAATAT +>EAS114_39:7:23:1126:1886 +GGAGGTCATCATACAATGATAAAAAGATCAATTCA +>EAS114_39:7:32:562:1695 +GATGATGGTTACACTAAAAGCCCATACTTTACTGC +>EAS114_39:7:32:562:1695 +TAAAACAAAGGAGGTCATCATACAATGATAAAAAG +>EAS114_39:7:57:1114:2032 +TAACTATATGCTGTTTACAAGAAACTCATTAATAA +>EAS114_39:7:57:1114:2032 +TATTACAATGATAAAAAGATCAATTCAGCAAGAAG +>EAS114_39:7:90:406:631 +CATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTG +>EAS114_39:7:90:406:631 +TGAGAGAGAACTTCCCTGGAGGTCTGATGGCGTTT +>EAS114_45:1:100:979:1863 +ATTACAAAACTCACAGGTTTTATAAAACAATTAAT +>EAS114_45:1:100:979:1863 +TTATGCCCTGCTAAACTAAGCATCATAAATGAAGG +>EAS114_45:1:12:1296:358 +CTTGAAAGCTTGGTCTGTAATGATGCCCCTTGGCC +>EAS114_45:1:12:1296:358 +GTCCATGTACACACGCTGTCCTATGTACTTATCAT +>EAS114_45:1:2:1422:1820 +CACCTAACACAAGACTACCCAGATTCATAAAACAA +>EAS114_45:1:2:1422:1820 +TACGCAAACAGAAACCAAATGAGAGAAGGAGTAGC +>EAS114_45:1:30:1882:1210 +ATCATCACTAAACCAGTCCTATAAGAAATGCTCAA +>EAS114_45:1:30:1882:1210 +GCAGAAACCTTACAAGCCAGAAGAGATTGGATCTA +>EAS114_45:1:33:1407:94 +TAGGTATCAATTTGGTGTTCTGTGTAAAGTCTCAG +>EAS114_45:1:33:1407:94 +TTACTTGTTGTTGGTTTTCTGTTTCTTTGTTTGAT +>EAS114_45:1:77:1000:1780 +AGTAATTGGGGAAAACCTCTTTAGTCTTGCTAGAG +>EAS114_45:1:77:1000:1780 +TGAATTAACCCAGTCAGACAAAAATAAAGAAAAAA +>EAS114_45:1:84:275:1572 +AGGGACGCTGAAGAACTTTGATGCCCTCTTCTTCC +>EAS114_45:1:84:275:1572 +TTATGCTATTCAGTTCTAAATATAGAAATTGAAAC +>EAS114_45:1:95:1530:28 +AAGAGGCTCAAAGAATGCCAGGAAGATACATTGCA +>EAS114_45:1:95:1530:28 +AATGGGCTTCTCAGCAGAAACCTTACAAGCCAGAA +>EAS114_45:1:9:1289:215 +AGGGACGCTGAAGAACTTTGATGCCCTCTTCTTCC +>EAS114_45:1:9:1289:215 +TATGCTATTCAGTTCTAAATATAGAAATTGAAACA +>EAS114_45:2:13:1507:1146 +AAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAGA +>EAS114_45:2:13:1507:1146 +CAGAAGAAAGAGGTTCAGAACTTGAAGACAAGTCT +>EAS114_45:2:15:1497:1530 +AATTACGTCCTATCTTCTTCTTAGGGAAGAACAGC +>EAS114_45:2:15:1497:1530 +TAATCTCTCTCCTTTTTGCTGCATCCCTGTCTTCC +>EAS114_45:2:1:1140:1206 +TCCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGT +>EAS114_45:2:1:1140:1206 +TTTATTACCAGAGGGATGGAGGGAAGAGGGACGCT +>EAS114_45:2:20:413:1334 +CCGTGTCCTCCCATCTGGCCTCGTCCACACTGGTT +>EAS114_45:2:20:413:1334 +TTGGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAG +>EAS114_45:2:23:1754:796 +CTTCTAAATCTATAAAAAAATTAAAATTTAACAAA +>EAS114_45:2:23:1754:796 +CTTTGGAAAACAATTTGGTAATTTCGTTTTTTTTT +>EAS114_45:2:33:1445:1357 +TATGAATTAACCCAGTCAGACAAAAATAAAGAAAA +>EAS114_45:2:33:1445:1357 +TTAGTCTTGCTAGAGATTTAGACATCTAAATGAAA +>EAS114_45:2:41:199:388 +AGAAAAAGTGAGAAGTTTGGAAAAACTATTTGAGG +>EAS114_45:2:41:199:388 +TCTAAAGTCAACATGAAGGAAAAAAATTCTAAAAT +>EAS114_45:2:49:163:904 +GCTCTCATTCACTCCAGCTCCCTGTCACCCAATGG +>EAS114_45:2:49:163:904 +TCTTTCAAAAGGTGATGTGTGTTCTCATCAACCTC +>EAS114_45:2:54:1886:719 +CTGTTTACAAGAAACTCATTAATAAAGACATGAGT +>EAS114_45:2:54:1886:719 +TTCAGCAAGAAGATATAACCATCCTACTAAATACA +>EAS114_45:2:59:396:359 +GGGTATAATACCTCTACATGGCTGATTATGAAAAC +>EAS114_45:2:59:396:359 +TCACCCAATGGACCTGTGATATCTGGATTCTGGGA +>EAS114_45:2:76:1765:700 +AAAAAGGGATTAAATTCCCCCACTTAAGAGATATA +>EAS114_45:2:76:1765:700 +GTCCTATAAGAAATGCTCAAAAGAATTGTAAAAGT +>EAS114_45:2:79:554:354 +AAATAAAACAAAGGAGGTCATCATACAATGATAAA +>EAS114_45:2:79:554:354 +CAATGTACAATATTCTGATGATGGTTACACTAAAA +>EAS114_45:3:26:1867:162 +ATATAACCATCCTACTAAATACATATGCACCTAAC +>EAS114_45:3:26:1867:162 +ATATATCCATGTAACAAATCTGCGCTTGTACTTCT +>EAS114_45:3:27:1881:486 +AAGAAAAGGTCTTTCAAAAGGTGATGTGTGTTCTC +>EAS114_45:3:27:1881:486 +CCAAAGATGAAACGCGTAACTGCGCTCTCATTCAC +>EAS114_45:3:2:1200:1076 +CATTTGCCTTCAGACCCTACACGAATGCGTCTCTA +>EAS114_45:3:2:1200:1076 +GATGTGTGTTCTCATCAACCTCATACACACACATG +>EAS114_45:3:32:1379:738 +TTAAGAAATTACAAAATATAGTTGAAAGCTCTAAC +>EAS114_45:3:35:896:1588 +CTAGACCTAAGAGGGATGAGAAATTACCTAATTGG +>EAS114_45:3:35:896:1588 +GAGTAGCTATACTTATATCAGATAAAGCACACTTT +>EAS114_45:3:39:208:644 +ATTGTAAAAGTCAAAATTAAAGTTCAATACTCACC +>EAS114_45:3:39:208:644 +TTTGAATAAAAAGGGATTAAATTCCCCCACTTAAG +>EAS114_45:3:3:1377:1663 +CTGCGCTCTCATTCACTCCAGCTCCCTGTCACCCA +>EAS114_45:3:3:1377:1663 +GGTGATGTGTGTTCTCATCAACCTCATACACACAC +>EAS114_45:3:3:864:1888 +AATGTTATGCCCTGCTAAACTAAGCATCATAAATG +>EAS114_45:3:3:864:1888 +CAACATGAAGGAAAAAAATTCTAAAATCAGCAAGA +>EAS114_45:3:41:653:1568 +AACTATTTGAGGAAGTAATTGGGGAAAACCTCTTT +>EAS114_45:3:41:653:1568 +GGTTCAGAACTTGAAGACAAGTCTCTTATGAATTA +>EAS114_45:3:44:1578:1674 +CCTCTTCTTCCAAAGATGAAACGCGTAACTGCGCT +>EAS114_45:3:44:1578:1674 +GCTGCAACTGTGAGCCATCACAATGAACAACAGGA +>EAS114_45:3:75:217:337 +GACAGGCTGCAACTGTGAGCCATCACAATGAACAA +>EAS114_45:3:75:217:337 +GAGGGAAGAGGGACGCTGAAGAACTTTGATGCCCT +>EAS114_45:3:90:1403:1635 +TGTCTTGACACCCAACTAATATTTGTCTGAGCAAA +>EAS114_45:3:90:1403:1635 +TTGTAATCTCTCTCCTTTTTGCTGCATCCCTGTCT +>EAS114_45:4:48:310:473 +TGAATTAACCCAGTCAGACAAAAATAAAGAAAAAA +>EAS114_45:4:48:310:473 +TTTAGTCTTGCTAGAGATTTAGACATCTAAATGAA +>EAS114_45:4:73:1208:495 +AGATGAAACGCGTAACTGCGCTCTCATTCACTCCA +>EAS114_45:4:73:1208:495 +TAAATATAGAAATTGAAACAGCTGTGTTTAGTGCC +>EAS114_45:4:7:1347:375 +CTAAAAGCCCATACTTTACTGCTACTCAATATATC +>EAS114_45:4:7:1347:375 +GGAAAAAAGTAAACTCTCAAATATTGCTAGTGGGA +>EAS114_45:4:87:323:895 +ATCTGGATTCTGGGAAATTCTTCATCCTGGACCCT +>EAS114_45:4:87:323:895 +GGTATAATACCTCTACATGGCTGATTATGAAAACA +>EAS114_45:4:88:55:1187 +GTCACAGGTATTCCTGAGGAAAAAGAAAAAGTGAG +>EAS114_45:4:88:55:1187 +GTCATCAGACTATCTAAAGTCAACATGAAGGAAAA +>EAS114_45:5:56:1757:1319 +CATTAATAAAGACATGAGTTCAGGTAAAGGGGTGG +>EAS114_45:5:56:1757:1319 +TTTATAAAACAATTAATTGAGACTACAGAGCAACT +>EAS114_45:5:62:841:1994 +ATATCCATGTAACAAATCTGCGCTTGTACTTCTAA +>EAS114_45:5:62:841:1994 +TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT +>EAS114_45:5:66:959:1311 +CAGAGCTGCTGGCAAGCTAGAGGCCCATCTGGAGC +>EAS114_45:5:66:959:1311 +GGGAAGGAGCATTTTGTCAGTTACCAAATGTGTTT +>EAS114_45:5:82:843:1838 +CTAGGTAAAAAATTAACATTACAACAGGAACAAAA +>EAS114_45:5:82:843:1838 +TGTTCTACGCAAACAGAAACCAAATGAGAGAAGGA +>EAS114_45:5:85:401:1190 +TACACACACATGGTTTAGGGGTATAATACCTCTAC +>EAS114_45:5:85:401:1190 +TCACTCCAGCTCCCTGTCACCCAATGGACCTGTGA +>EAS114_45:5:91:89:666 +GAAAACCTCTTTAGTCTTGCTAGAGATTTAGACAT +>EAS114_45:6:14:1211:1332 +AGGAAGATACATTGCAAGACAGACTTCATCAAGAT +>EAS114_45:6:14:1211:1332 +TTTCAAGAAGTATGAGATTATGTAAAGTAACTGAA +>EAS114_45:6:37:156:134 +AGAGAAAAGCATACAGTCATCTATAAAGGAAATCC +>EAS114_45:6:37:156:134 +GGAAAAACTATTTGAGGAAGTAATTGGGGAAAACC +>EAS114_45:6:39:956:676 +TAAAACAAATACTACTAGACCTAAGAGGGATGAGA +>EAS114_45:6:39:956:676 +TGAGAGAAGGAGTAGCTATACTTATATCAGATAAA +>EAS114_45:6:44:77:1255 +CTCATTAATAAAGACATGAGTTCAGGTAAAGGGGT +>EAS114_45:6:44:77:1255 +TAAAAAGATCAATTCAGCAAGAAGATATAACCATC +>EAS114_45:6:45:1769:1130 +ACCCAATGGACCTGTGATATCTGGATTCTGGGAAA +>EAS114_45:6:45:1769:1130 +TGTTCTCATCAACCTCATACACACACATGGTTTAG +>EAS114_45:6:47:1791:444 +AAGAGGGATGAGAAATTACCTAATTGGTACAATGT +>EAS114_45:6:47:1791:444 +TACTTATATCAGATAAAGCACACTTTAAATCAACA +>EAS114_45:6:59:1548:1096 +CCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTG +>EAS114_45:6:59:1548:1096 +GTCCTATGTACTTATCATGACTCTATCCCAAATTC +>EAS114_45:6:5:730:1436 +GAAGAACTTTGATGCCCTCTTCTTCCAAAGATGAA +>EAS114_45:6:5:730:1436 +TATTCAGTTCTAAATATAGAAATTGAAACAGCTGT +>EAS114_45:6:86:693:234 +AAGTAACTGAACCTATGAGTCACAGGTATTCCTGA +>EAS114_45:6:86:693:234 +GTAGTCATCAGACTATCTAAAGTCAACATGAAGGA +>EAS114_45:6:86:859:1779 +TTTTTTTCATTTCTCTTTTTTTTTTTTTTTTTTTT +>EAS114_45:6:90:561:850 +ACAGGAACAAAACCTCATATATCAATATTAACTTT +>EAS114_45:6:90:561:850 +TACGCAAACAGAAACCAAATGAGAGAAGGAGTAGC +>EAS114_45:6:93:1475:542 +TGAAAGCTTGGGCTGTAATGATGCCCCTTGGCCAT +>EAS114_45:6:93:1475:542 +TTATCATGACTCTATCCCAAATTCCCAATTACGTC +>EAS114_45:7:14:1256:204 +AAATGTCTATTTTTGTCTTGACACCCAACTAATAT +>EAS114_45:7:14:1256:204 +TCACCCAGTCCCTGCCCCATCTCTTGTAATCTCTC +>EAS114_45:7:14:978:1296 +ATACAATGATAAAAAGATCAATTCAGCAAGAAGAT +>EAS114_45:7:14:978:1296 +CAATATTCTGATGATGGTTACACTAAAAGCCCATA +>EAS114_45:7:24:1374:211 +AGCCCTTCTCACAGTTTCTGCCCCCAGCATGGTTG +>EAS114_45:7:24:1374:211 +TGCAATTAATATAATTGTGTCCATGTACACACGCT +>EAS114_45:7:2:168:1878 +AAAAAACCTGGCAAACACGAATGTTATGACATGTN +>EAS114_45:7:2:168:1878 +TAAATACACACAAAAGTAGAAAACGCACCAGTTTT +>EAS114_45:7:33:1566:588 +ACAGCTTAGGCATCAATTTGGTGTTCTGTGTAAAG +>EAS114_45:7:33:1566:588 +TACTGTCATAACTATGAAGAGCCTATTGCCAGATG +>EAS114_45:7:35:538:1882 +TATGCACCTAACACAAGACTACCCAGATTCATAAA +>EAS114_45:7:35:538:1882 +TCTATAACAAAATTAAAATTTAACAAAAGTAAATA +>EAS114_45:7:37:763:1437 +AAAGATGTTCTACGCAAACAGAAACCAAATGAGAG +>EAS114_45:7:37:763:1437 +TAAAACAAATACTACTAGACCTAAGAGGGATGAGA +>EAS114_45:7:45:1339:1807 +GACATCTAAATGAAAGAGGCTCAAAGAATGCCAGG +>EAS114_45:7:69:1130:832 +ATAGTTGAAAGCTCTAACAATAGACTAAACCAAGC +>EAS114_45:7:69:1130:832 +TCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAA +>EAS114_45:7:6:758:988 +AAACAAAGGAGGTCATCATACAATGATAAAAAGAT +>EAS114_45:7:6:758:988 +ATTCTGATGATGGTTACACTAAAAGCCCATACTTT +>EAS114_45:7:88:451:1773 +ATAAATACACACAAAAGTACAAAACTCACAGGTTT +>EAS114_45:7:88:451:1773 +ATTGGCAGAACAGATTTAAAAACATGAACTAACTA +>EAS114_45:7:97:1584:777 +CCAGATGAACCACACATTAATACTATGTTTCTTAT +>EAS114_45:7:97:1584:777 +GTCTCAGGGAGCCGTCCGTGTCCTCCCATCTGGCC +>EAS114_45:7:9:512:826 +AACTTCCACGTCTCATCTAGGGGAACAGGGAGGTG +>EAS114_45:7:9:512:826 +ACCACACATTAATACTATGTTTCTTATCTGCACAT +>EAS139_11:1:35:631:594 +ATCATGACTCTATCCCAAATTCCCAATTACGTCCT +>EAS139_11:1:35:631:594 +ATGATGCCCCTTGGCCATCACCCGGTCCCTGCCCC +>EAS139_11:1:59:742:549 +ACAAGCAAATGCTAAGATAATTCATCATCACTAAA +>EAS139_11:1:59:742:549 +TTAACATTACAACAGGAACAAAACCTCATATATCA +>EAS139_11:1:81:1019:558 +ACAAAACTCACAGGTTTTATAAAACAATTAATTGA +>EAS139_11:1:81:1019:558 +TGAACTAACTATATGCTGTTTACAAGAAACTCATT +>EAS139_11:1:84:92:1246 +GAAAAAAGTAAACTCTCAAATATTGCTAGTGGGAG +>EAS139_11:1:84:92:1246 +GTTACACTAAAAGCCCATACTTTACTGCTACTCAA +>EAS139_11:2:31:628:1820 +AACCAGTCCTATAAGAAATGCTCAAAAGAATTGTA +>EAS139_11:2:31:628:1820 +CAGGAACAAAACCTCATATATCAATATTAACTTTG +>EAS139_11:2:42:333:516 +AGACAAGTCTCTTATGAATTAACCCAGTCAGACAA +>EAS139_11:2:42:333:516 +TCTTTAGTCTTGCTAGAGATTTAGACATCTAAATG +>EAS139_11:2:55:296:1457 +CACTTTAAATCAACAACAGTAAAATAAAACAAAGG +>EAS139_11:2:55:296:1457 +CCCACTTAAGAGATATAGATTGGCAGAACAGATTT +>EAS139_11:2:63:816:921 +AAACCTCTTTAGTCTTGCTAGAGATTTAGACATCT +>EAS139_11:2:63:816:921 +TGAAGACAAGTCTCTTATGAATTAACCCAGTCAGA +>EAS139_11:2:6:251:1557 +AAAACAATGTTCCCCAGATACCATCCCTGTCTTAC +>EAS139_11:2:6:251:1557 +CCTGAGAGATTCTGCAGCCCAGCTCCAGATTGCTT +>EAS139_11:2:71:83:58 +AAAGAAAAAAGAATTTTAAAAATGAACAGAGCTTT +>EAS139_11:2:71:83:58 +CCAGGAAGATACATTGCAAGACAGACTTCATCAAG +>EAS139_11:3:34:970:1374 +ATGTGTTTATTACCAGAGGGATGGAGGGAAGAGGG +>EAS139_11:3:34:970:1374 +CTGGACCCTGAGAGATTCTGCAGCCCAGATCCAGA +>EAS139_11:3:43:1229:1855 +ATGTACAATATTCTGATGATGGTTACACTAAAAGC +>EAS139_11:3:43:1229:1855 +CAACAGTAAAATAAAACAAAGGAGGTCATCATACA +>EAS139_11:3:65:556:1505 +CAATGAACAACAGGAAGAAAAGGTCTTTCAAAAGG +>EAS139_11:3:65:556:1505 +TGCCTTCAGACCCTACACGAATGCGTCTCTACCAC +>EAS139_11:3:81:12:1231 +AAAAAGCAAAAACAAAAACTATGCTAAGTATTGGT +>EAS139_11:3:81:12:1231 +TTACCTAATTGGTACAATGTACAATATTCTGATGA +>EAS139_11:4:26:137:1382 +AATGTTATGCCCTGCTAAACTAAGCATCATAAATG +>EAS139_11:4:26:137:1382 +AGACTATCTAAAGTCAACATGAAGGAAAAAAATTC +>EAS139_11:4:36:1184:994 +GCCAGAAGAGATTGGATCTAATTTTTGGACTTCTT +>EAS139_11:4:36:1184:994 +TACATTGCAAGACAGACTTCATCAAGATATGTAGT +>EAS139_11:4:36:1231:1381 +AAGAGATATAGATTGGCAGAACAGATTTAAAAACA +>EAS139_11:4:36:1231:1381 +TAAAAGTCAAAATTAAAGTTCAATACTCACCATCA +>EAS139_11:4:38:557:1441 +GATAAAAATAAAAAAGCAAAAACAAAAACTATGCT +>EAS139_11:4:38:557:1441 +TAAGAGGGATGAGAAATTACCTAATTGGTACAATG +>EAS139_11:4:50:30:15 +AGATTATGTAAAGTAACTTAACCTATGAGTCCAAG +>EAS139_11:4:50:30:15 +TACATTGCAAGACAGTCGTCAGCAAGATATGTAGT +>EAS139_11:4:63:527:1923 +GCTTTACTGTCATAACCATGAAGAGACTATTGCCA +>EAS139_11:4:63:527:1923 +TACACGAATGCGTCTCTACCACAGGGGGCTGCGCG +>EAS139_11:5:32:686:735 +AAGTTTGGAAAAACTATTTGAGGAAGTAATTGGGG +>EAS139_11:5:32:686:735 +CAGAAGAAAGAGGTTCANANNNTGANGACAAGTCT +>EAS139_11:5:41:314:1173 +AAGAAAAAAAAACCTGTCAAACACGAATGTTATGC +>EAS139_11:5:41:314:1173 +AATTAAAGTTCAATACTCACCATCATAAATACACA +>EAS139_11:5:52:1278:1478 +GCTTGTACTTCTAAATCTATAACAAAATTAAAATT +>EAS139_11:5:52:1278:1478 +GTTTTTTTTTTTTTCTTTTCTCTTTTTTTTTTTTT +>EAS139_11:5:61:38:1182 +AGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCGTC +>EAS139_11:5:61:38:1182 +GTTTGATTTGGTGGAAGACATAATCCCACGCTTCC +>EAS139_11:5:64:199:1288 +GTAAAATAAAACAAAGGAGGTCATCATACAATGAT +>EAS139_11:5:64:199:1288 +TACAATGTACAATATTCTGATGATGGTTACACTAA +>EAS139_11:5:78:775:555 +AATGCTCAAAAGAATTGTAAAAGTCAAAATTAAAG +>EAS139_11:5:78:775:555 +TTTTTGGACTTCTTAAAGAAAAAAAAACCTGTCAA +>EAS139_11:6:11:285:1567 +ACATGGCTGATTATGAAAACAATGTTCCCCAGATA +>EAS139_11:6:11:285:1567 +CCCTGAGAGATTCTGCAGCCCAGATCCAGATTGCT +>EAS139_11:6:11:360:1577 +GAAGAAAAGGTCTTTCAAAAGGTGATGTGTGTTCT +>EAS139_11:6:11:360:1577 +TTTGGCATTTGCCTTCAGACCCTACACGAATGCGT +>EAS139_11:6:13:682:680 +AGAATAACAATGGGCTTCTCAGCGGAAACCTTACA +>EAS139_11:6:13:682:680 +ATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAA +>EAS139_11:6:17:1179:393 +CTAATTGGTACAATGTACAATATTCTGATGATGGT +>EAS139_11:6:17:1179:393 +TGCTAAGTATTGGTAAAGATGTGGGGAAAAAAGTA +>EAS139_11:6:19:306:982 +ATTTTTGGACTTCTTAAAGAAAAAAAAACCTGTCA +>EAS139_11:6:19:306:982 +GACAGACTTCATCAAGATATGTAGTCATCAGACTA +>EAS139_11:6:75:946:1035 +AACCCCCTTGCAACAACCTTGAGAACCCCAGGGAA +>EAS139_11:6:75:946:1035 +AATGGACCTGTGATATCTGGATTCTGGGAAATTCT +>EAS139_11:6:82:164:1924 +GAGGGATGGAGGGAAGAGGGACGCTGAAGAACTTT +>EAS139_11:6:82:164:1924 +GCCCAGCACCAGATTGCTTGTGGTCTGACAGGCTG +>EAS139_11:6:89:1151:1878 +CCATCACAATGAACAACAGGAAGAAAAGGTCTTTC +>EAS139_11:6:89:1151:1878 +CTTTCAACGATTCTAGCCATTTCTTTTGGCATTTG +>EAS139_11:7:24:1345:1627 +AGATTGGCAGAACAGATTTAAAAACATGAACTAAC +>EAS139_11:7:24:1345:1627 +NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN +>EAS139_11:7:42:1091:1726 +CAGGGAAGGAGCATTTTGTCAGTTACCAAATGTGT +>EAS139_11:7:42:1091:1726 +TCTGGGAAATTCTTCATCCTGGACCCTGAGAGATT +>EAS139_11:7:46:695:738 +CAAAGATGAAACGCGTAACTGCGCTCTCATTCACT +>EAS139_11:7:46:695:738 +TGAAACAGCTGAGTTTAGCGCCTGTGTTCACATAG +>EAS139_11:7:50:1229:1313 +ACATAGCTAAAACTAAAAAAGCAAAAACAAAAACT +>EAS139_11:7:50:1229:1313 +TTTTTTCTTTTTTTTTTTTTTTTTTTTGCATGCCA +>EAS139_11:7:53:458:581 +CTCAATTAATTGTTTTATAAAACCTGTGAGTTTTG +>EAS139_11:7:53:458:581 +TTATGCCCTGCTAAACTAAGCATCATAAATGAAGG +>EAS139_11:7:60:163:1612 +AGCAAGAGAAAAGCATACAGTCATCTATAAAGGAA +>EAS139_11:7:60:163:1612 +GGGAACTAAAGTCAAGTCTTTCCTGACAAGCAAAT +>EAS139_11:7:74:213:877 +AGATGTTCTACGCAAACAGAAACCAAATGAGAGAA +>EAS139_11:7:74:213:877 +TTAACATTACAACAGGAACAAAACCTCATATATCA +>EAS139_11:7:92:367:1495 +ACCACAGGGGGCTGCGCGGTTTCCCATCATGAAGC +>EAS139_11:7:92:367:1495 +CTGTCATAACTATGAAGAGACTATTGCCAGATGAA +>EAS139_11:8:17:437:1378 +ACCAGTCCTATAAGAAATGCTCAAAAGAATTGTAA +>EAS139_11:8:17:437:1378 +ATCAATATTAACTTTGAATAAAAAGGGATTAAATT +>EAS139_11:8:26:1221:222 +AAACAGCTGTGTTTAGTGCCTTTGTTCAACCCCCT +>EAS139_11:8:26:1221:222 +CTGCGCTCTCATTCACTCCAGCTCCCTGTCACCCA +>EAS139_11:8:38:842:395 +GTAACTGCGCTCTCATTCACTCCAGCTCCCTGTCA +>EAS139_11:8:76:205:587 +GAATAACAATGGGCTTCTCAGCGGAAACCTTACGA +>EAS139_11:8:76:205:587 +TGCTAGAGATTTAGACATCTAAATGAAAGAGGCTC +>EAS139_11:8:82:566:1096 +CAAAAGGTGATGTGTGTTCTCATCAACCTCATACA +>EAS139_11:8:82:566:1096 +CTGCGCTCTCATTCACTCCAGCTCCCTGTCACCCA +>EAS139_11:8:96:1314:1448 +CCTATGAGTCACAGGTATTCCTGAGGAAAAATAAA +>EAS139_11:8:96:1314:1448 +GTAGTCATCAGACTATCTAAAGTCAACATGAAGGA +>EAS139_19:1:14:420:712 +TGAGAGAGAACTTCCCTGGAGGTCTGATGGCGTTTCTCCC +>EAS139_19:1:14:420:712 +TGTTGGTTTTCTGTTTCTTTGTTTGATTTTTTTGAAGACA +>EAS139_19:1:1:1598:843 +TCAGCGGAAACCTTACAAGCCAGAAGAGATTGGATCTAAT +>EAS139_19:1:1:1598:843 +TGCCAGGAAGATACATTGCAAGACAGACTTCATCAAGATA +>EAS139_19:1:36:481:1079 +GTAAAAGTCAAAATTAAAGTTCAATACTCACCATCATAAA +>EAS139_19:1:36:481:1079 +TCCCCCACTTAAGAGATATAGATTGGCAGAACAGATTTAA +>EAS139_19:1:40:1596:1433 +CCATCACAATGAACAACAGGAAGAAAAGGTCTTTCAAAAG +>EAS139_19:1:40:1596:1433 +GCTTTCAACGCTTCTAGCCATTTCTTTTGGCATTTGCCTT +>EAS139_19:1:47:352:1492 +AGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCGCCCACTA +>EAS139_19:1:47:352:1492 +TTTGTTTTGTATGGTGGAAGACATAATCCCACGCTTCCTA +>EAS139_19:1:53:463:1132 +ATGATAAAAAGATCAATTCAGCAAGAAGATATAACCATCC +>EAS139_19:1:53:463:1132 +ATTTAAAAACATGAACTAACTATATGCTGTTTACANGAAA +>EAS139_19:1:58:726:1746 +AGATTGGCAGAACAGATTTAAAAACATGAACTAACTATAT +>EAS139_19:1:58:726:1746 +CAATTTAAATCAACAACAGTAAAATAAAACAAAGGAGGTC +>EAS139_19:1:82:946:392 +CAATATATCCATGTAACAAATCTGCGCTTGTACTTCAAAA +>EAS139_19:1:82:946:392 +GAAAACAATTTGGTAATTTCGTTTTTTTTTTTTTCTTTTC +>EAS139_19:1:85:1521:58 +AAATTAACATTACAACAGGAACAAAACCTCATATATCAAT +>EAS139_19:1:85:1521:58 +CTGACAAGCAAATGCTAAGATAATTCATCATCACTAAACC +>EAS139_19:1:87:1222:878 +TATAGGGCCTTTGTTCAAACCCCTTGCAACAACCTTGAGA +>EAS139_19:1:87:1222:878 +TCAGCGCGTCACTCCGCTCTCATTCACCCCAGCTCCCTGT +>EAS139_19:1:99:1632:76 +AAAGAAAAAAAACCCTGTCAAACACGAATGTTATGCCCTG +>EAS139_19:1:99:1632:76 +TTGTAAAAGTCAAAATTAAAGTTCAATACTCACCATCATA +>EAS139_19:2:12:1335:1372 +GAAGAACAGATTTAAAAACATGAACTAACTATATGCTGTT +>EAS139_19:2:12:1335:1372 +TAAAGTTCAATACTCACCATCATAAATACACACAAAAGTA +>EAS139_19:2:29:1822:1881 +AGAAAAAAGAATTTTAAAAATGAACAGAGCTTTCAAGAAG +>EAS139_19:2:29:1822:1881 +ATGAAAGAGGCTCAAAGAATGCCAGGAAGATACATTGCAA +>EAS139_19:2:2:1217:398 +CAATTAATTGAGACTACAGAGCAACTAGGTAAAAAATTAA +>EAS139_19:2:2:1217:398 +TAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAAGC +>EAS139_19:2:33:1193:664 +GCCCCATCTCTTGTAATCTCTCTCCTTTTTTCTGCATCCC +>EAS139_19:2:33:1193:664 +TATTTTTGTCTTGACACCCAACTAATATTTGTCTGAGCAA +>EAS139_19:2:57:1672:1890 +CCCCCCCCCCCCCCCCCAGCCACTGCGGCCCCCCCAGCCA +>EAS139_19:2:57:1672:1890 +TATTCAGTTCTAAATATAGAAATTGAAACAGCTGTGTTTA +>EAS139_19:2:82:154:1333 +TTAAAATTTAACAAAAGTAAATAAAACACACAGCTAAAAC +>EAS139_19:2:82:154:1333 +TTTTTTTTTTTTTTTTTTTTTCTTTTTTTTTTTTTTTTTT +>EAS139_19:3:10:349:1147 +GCTAGAGATTTAGACATCTAAATGAAAGAGGCTCAAAGAA +>EAS139_19:3:24:1135:563 +CTGCGCTCTCATTCACTCCAGCTCCCTGTCACCCAATGGA +>EAS139_19:3:24:1135:563 +GCTGTGTTTAGTGCCTTTGTTCAACCCCCTTGCAACAACC +>EAS139_19:3:4:1502:1911 +CTACACGAATGCGTCTCTACCACAGGGGGCTGCGCGGTTT +>EAS139_19:3:4:1502:1911 +TACACACACATGGTTTAGGGGTATAATACCTCTACATGGC +>EAS139_19:3:58:923:1915 +GCAAACAGAAACCAAATGAGAGAAGGAGTAGCTATACTTA +>EAS139_19:3:58:923:1915 +TATCAATATTAACTTTGAATAAAAAGGGATTAAATTCCCC +>EAS139_19:3:5:538:401 +AAGGTGATGTGTGTTCTCATCAACCTCATACACACACATG +>EAS139_19:3:5:538:401 +TTTGCCTTCACACCCTACACGAATGCGTCTCTGCCACAGG +>EAS139_19:3:66:718:481 +AACAACAGTAAAATAAAACAAAGGAGGTCATCATACAATG +>EAS139_19:3:66:718:481 +AAGAGATATAGATTGGCAGAACAGATTTAAAAACATGAAC +>EAS139_19:3:73:1158:535 +AATAAAGATATGTAGTCATCAGACTATCTAAAGTCAACAT +>EAS139_19:3:73:1158:535 +CCTATGAGTCACAGGTATTCCTGAGGAAAAAGAAAAAGTG +>EAS139_19:3:73:936:1509 +CTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTTATTT +>EAS139_19:3:73:936:1509 +TTGTCTGAGCAAAACAGTCTAGATGAGAGAGAACTTCCCT +>EAS139_19:3:75:732:442 +CGGTCCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGC +>EAS139_19:3:75:732:442 +CTATCCCAAATTCCCAATTACGTCCTATCTTCTTCTTAGG +>EAS139_19:3:87:133:930 +CAGTCTCAGGGCGCCGTCCGTTTCCTCCCATCTGGCCTCG +>EAS139_19:3:87:133:930 +TTATCTGCACATTACTACCCTGCAATTAATATAATTGTGT +>EAS139_19:3:88:1656:896 +AGGGAAGAGGGATGCTGAAGAACTTTGATGCCCTCTTCTT +>EAS139_19:3:88:1656:896 +TGCAGCCCAGATCCAGATTGCTTGTGGTCTGACAGGCTGC +>EAS139_19:4:13:1155:631 +ACCCTGAGAGATTCTGCAGCCCAGCTCCAGATTGCTTGTG +>EAS139_19:4:13:1155:631 +AGGGGTATAATACCTCTACATGGCTGATTATGAAAACAAT +>EAS139_19:4:18:1335:1514 +ATTGGTACAATGTACAATATTCTGATGATGGTTACACTAA +>EAS139_19:4:18:1335:1514 +CTTTAAATCAACAACAGTAAAATAAAACAAAGGAGGTCAT +>EAS139_19:4:1:156:196 +AAAAGGGATTAAATTCCCCCACTTAAGAGATATAGATTGG +>EAS139_19:4:1:156:196 +ACTTATATCAGATAAAGCACACTTTAAATCAACAACAGTA +>EAS139_19:4:26:1312:1400 +ACTGAACCTATGAGTCACAGGTATTCCTGAGGAAAAAGAA +>EAS139_19:4:26:1312:1400 +TATGTAGTCATCAGACTATCTAAAGTCAACATGAAGGAAA +>EAS139_19:4:26:274:1078 +AATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATTTAGAC +>EAS139_19:4:26:274:1078 +GTCATCTATAAAGGAAATCCCATCAGAATAACAATGGGCT +>EAS139_19:4:68:1122:79 +ATGGCTGATTATGAAAACAATGTTCCCCAGATACCATCCC +>EAS139_19:4:68:1122:79 +TGAGAGATTCTGCAGCCCAGCTCCAGATTGCTTGTGGTCT +>EAS139_19:4:69:1593:819 +ATTGAGACTACAGAGCAACTAGGTAAAAAATTAACATTAC +>EAS139_19:4:69:1593:819 +CAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAACAGAA +>EAS139_19:4:77:1780:693 +GGAAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAGAGAT +>EAS139_19:4:77:1780:693 +TGAAGACAAGTCTCTTATGAATTAACCCAGTCAGACAAAA +>EAS139_19:4:78:806:800 +AAATTAAAGTTCAATACTCACCATCATAAATACACACAAA +>EAS139_19:4:78:806:800 +AACCTGTCAAACACGAATGTTATGCCCTGCTAAACTAAGC +>EAS139_19:5:29:411:1208 +AAAAGAATTGTAAAAGTCAAAATTAAAGTTCAATACTCAC +>EAS139_19:5:29:411:1208 +CCCCCACTTAAGAGATATAGATTGGCAGAACAGATTTAAA +>EAS139_19:5:40:758:116 +GTCTCTACCACAGGGGGCTGCGCGGTTTCCCATCATGAAG +>EAS139_19:5:40:758:116 +GTGTGTTCTCATCAACCTCATACACACACATGGTTTAGGG +>EAS139_19:5:4:939:2021 +AAATACTACTAGACCTAAGAGGGATGAGAAATTACCTAAT +>EAS139_19:5:4:939:2021 +GGAGTAGCTATACTTATATCAGATAAAGCACACTTTAAAT +>EAS139_19:5:57:366:844 +AAATTCCCCCACTTAAGAGATATAGATTGGCAGAACAGAT +>EAS139_19:5:57:366:844 +TAAAAGTCAAAATTAAAGTTCAATACTCACCATCATAAAT +>EAS139_19:5:61:1885:163 +AGCAAGAAGATATAACCATCCTACTAAATACATATGCACC +>EAS139_19:5:61:1885:163 +ATACTTTACTGCTACTCAATATATCCATGTAACAAATCTG +>EAS139_19:5:66:1381:181 +GGACTTCTTAAAGAAAAAAAAACCTGTCAAACACGAATGT +>EAS139_19:5:66:1381:181 +TTGCAAGACAGACTTCATCAAGATATGTAGTCATCAGACT +>EAS139_19:5:68:306:409 +AACTTTGAATAAAAAGGGATTAAATTCCCCCACTTAAGAG +>EAS139_19:5:68:306:409 +CCTATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAATT +>EAS139_19:5:70:318:1631 +TAAGAAATTACAAAATATAGTTGAAAGCTCTAACAATAGA +>EAS139_19:5:74:668:424 +GACTTCTTAAAGAAAAAAAAACCTGTCAAACACGAATGTT +>EAS139_19:5:74:668:424 +GTAAAAGTCAAAATTAAAGTTCAATACTCACCATCATAAA +>EAS139_19:5:89:525:113 +GACGCTGAAGAACTTTGATTCCCTCTTCTTCCAAAGATGA +>EAS139_19:5:89:525:113 +TATTTATGCTATTCAGTTATAAATATAGAAATTGAAACAG +>EAS139_19:5:95:944:247 +GGTACAATGTACAATATTCTGATGATGGTTACACTAAAAG +>EAS139_19:5:95:944:247 +GTAAAGATGTGGGGAAAAAAGTAAACTCTCAAATATTGCT +>EAS139_19:6:21:1601:1666 +GAAAGCTCTAACAATAGACTAAACCAAGCAGAAGAAAGAG +>EAS139_19:6:21:1601:1666 +TATTACTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAA +>EAS139_19:6:52:1455:1212 +CCATCTCTTGTAATCTCTCTCCTTTTTGCTGCATCCCTGT +>EAS139_19:6:52:1455:1212 +TTCTTAGGGAAGAACAGCTTAGGTATCAATTTGGTGTTCT +>EAS139_19:6:72:308:839 +AGTTACCAAATGTGTTTATTACCAGAGGGATGGAGGGAAG +>EAS139_19:6:72:308:839 +ATCGTGGACCCTGAGAGATTCTGCAGCCCAGATCCAGATT +>EAS139_19:6:75:1503:1399 +CAAGAAGATATAACCATCCTACTAAATACATATGCACCTA +>EAS139_19:6:75:1503:1399 +CATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCTACGC +>EAS139_19:6:78:1029:512 +AGATAATTCATCATCACTAAACCAGTCCTATAAGAAATGC +>EAS139_19:6:78:1029:512 +TCAGCAGAAACCTTACAAGCCAGAAGAGATTGGATCTAAT +>EAS139_19:6:82:1051:921 +GCAAATAGGTAAAAAATTAACATTACAACAGGAACAAAAC +>EAS139_19:6:82:1051:921 +GGGGAAATAAAGTCAAGGCTTTCCTGACAAGCAAATGCTA +>EAS139_19:6:84:438:1505 +ATTAATATAATTGTGTCCATGTACACACTCTGTCCTATGT +>EAS139_19:6:84:438:1505 +GCACTAATGCGCTCCACGCCCAAGCCCTTCTCACAGTTTC +>EAS139_19:7:44:1807:833 +ATATCCATGTAACAAATCTGCGCTTGTACTTCTAAATCTA +>EAS139_19:7:44:1807:833 +CTCTCAAATATTGCTAGTGGGAGTATAAATTGTTTTCCAC +>EAS139_19:7:85:262:751 +CCATGTAACAAATCTGCGCTTGTACTTCTAAATCTATAAC +>EAS139_19:7:85:262:751 +TACAATGATAAAAAGATCAATTCAGCAAGAAGATATAACC +>EAS139_19:7:92:288:1354 +TCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATT +>EAS139_19:7:92:288:1354 +TGTCTTGACACCCAACTAATATTTGTCTGAGCAAAACAGT +>EAS188_4:5:103:870:105 +AAACTAAGCATCATAAATGAAGGGGAAATAAAGTC +>EAS188_4:5:103:870:105 +ATAAAACAATTAATTGAGACTACAGAGCAACTAGG +>EAS188_4:5:166:776:590 +CTTGAAAGCTTGGGCTGTAATGATGCCCCTTGGCC +>EAS188_4:5:166:776:590 +TAATTGTGTCCATGTACACACGCTGTCCTATGTAC +>EAS188_4:5:202:326:680 +ACTTATCATGACTCTATCCCAAATTCTCAATTACG +>EAS188_4:5:202:326:680 +GTAATGATGCCCCTTGGCCATCACCCGGTCCCTGC +>EAS188_4:5:295:547:216 +ATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCT +>EAS188_4:5:295:547:216 +TAAAAAATTAACATTACAACAGGAACAAAACCTCA +>EAS188_4:5:302:997:951 +ATGAACTTCTGTAATTGAAAAATTCATTTAAGAAA +>EAS188_4:5:308:552:77 +TTTTCTTTTTTTTCTTTTCTCTTTTTTTTTTTTTT +>EAS188_4:5:8:377:655 +CTATTTTTGTCTTGACACCCAACTAATATTTGTCT +>EAS188_4:5:8:377:655 +CTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGCT +>EAS188_4:7:282:567:481 +GGAACAGGGAGGCGCACTAATGCGCTCCACGCCCA +>EAS188_4:7:282:567:481 +TGCAATTAATATAATTGTGTCCACGTACACACGCT +>EAS188_4:7:296:401:60 +AATGAAAGAGGCTCAAAGAATGCCAGGAAGATACA +>EAS188_4:7:35:408:348 +AAGAAACGCGTAACTGCGCTCTCATACACTCCAGC +>EAS188_4:7:35:408:348 +GGTTCTCAAGGTTGTTGCAATGGGGTCTATGTGAA +>EAS188_4:7:78:583:670 +CAGGGAATTTGTCAATGTCAGGGAAGGAGCATTTT +>EAS188_4:7:78:583:670 +TAACCTCTGGTGACTGCCAGAGCTGCTGGCAAGCT +>EAS188_4:7:96:899:106 +TCTATAAAGGAAATCCCATCAGAATAACAATGGGC +>EAS188_4:7:96:899:106 +TTCCTGACAAGCAAATGCTAAGATAATTCATCATC +>EAS188_7:1:115:683:296 +AACAGTCTAGATGAGAGAGAACTTCCCTGGAGGTC +>EAS188_7:1:115:683:296 +CTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTC +>EAS188_7:1:177:522:118 +TAAACTAAGCATCATAAATGAAGGGGAAATAAAGT +>EAS188_7:1:177:522:118 +TCTCAATTAATTGTTTTATAAAACCTGTGAGTTTT +>EAS188_7:1:290:286:763 +TTAAAATTTAACAAAAGTAAATAAAACACATAGCT +>EAS188_7:1:290:286:763 +TTTTTTTTTTTTCTTTTCTCTTTTTTTTTTTTTTT +>EAS188_7:1:316:949:122 +TCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCT +>EAS188_7:1:316:949:122 +TTAGGGAAGAACAGCTTAGGTATCAATTTGGTGTT +>EAS188_7:1:77:251:446 +CAGCATGGTTGTACTGGGCAATACATGAGATTATT +>EAS188_7:1:77:251:446 +TTATCATGACTCTATCCCAAATGCCCAATTACGTC +>EAS188_7:2:152:765:744 +ACTTCCCTGGAGGTCTGATGGCGTTTCTCCCTCGT +>EAS188_7:2:152:765:744 +TTTTCTGTTTCTTTGTTTGATTTGGTGGAAGACAT +>EAS188_7:2:172:622:707 +ACATGGCTGATTATGAAAACAATGTTCCCCAGATA +>EAS188_7:2:172:622:707 +TTCTTCATCCTGGACCCTGAGAGATTCTGCAGCCC +>EAS188_7:2:187:227:818 +CAGCACAGGGGCTTAACCTCTGGTGACTGCCAGAG +>EAS188_7:2:187:227:818 +CCCCCTTGCAACAACCTTGAGAACCCCAGGGAATT +>EAS188_7:2:19:736:559 +AAGACTTCATCAAGATATGTAGTCATCAGACTATC +>EAS188_7:2:19:736:559 +TGAACCTATGAGTCACAGGTATTCCTGAGGAAAAA +>EAS188_7:2:218:877:489 +TATAGAAATTGAAACAGCTGTGTTTAGTGCCTTTG +>EAS188_7:2:259:219:114 +GAAATTGAAACAGCTGTGTTTAGTGCCTTTGTTCA +>EAS188_7:2:259:219:114 +TTGATGCCCTCTTCTTCCAAAGATGAAACGCGTAA +>EAS188_7:3:100:735:530 +GCACACTTTAAATCAACAACAGTAAAATAAAACAA +>EAS188_7:3:100:735:530 +TGATGATGGTTACACTAAAAGCCCATACTTTACTG +>EAS188_7:3:101:572:491 +CAACAGGAAGAAAAGGTCTTTCAAAAGGTGATGTG +>EAS188_7:3:101:572:491 +TTCCAAAGATGAAACGCGTAACTGCGCTCTCATTC +>EAS188_7:3:13:122:187 +AGCATTTTGTCAGTTACCAAATGTGTTTATTACCA +>EAS188_7:3:13:122:187 +GACTGCCAGAGCTGCTGGCAAGCTAGAGTCCCCTT +>EAS188_7:3:15:568:42 +TTTTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT +>EAS188_7:3:15:568:42 +TTTTTTTTTTTGTTTTTTTTTTTTTTTTTTTTATA +>EAS188_7:3:182:104:921 +ATCAAGATATGTAGTCATCAGACTATCTAAAGTCA +>EAS188_7:3:182:104:921 +CACGAATGTTATGCCCTGCTAAACTAAGCATCATA +>EAS188_7:3:200:712:439 +CGTCACCCGGTCCCTGCCCCATCTCTTGTAATCTC +>EAS188_7:3:200:712:439 +GTTGGGAGATTTTTAATGATTCCTCAATGTTAAAA +>EAS188_7:3:296:224:724 +ATAGTTGAAAGCTCTAACAATAGACTAAACCAAGC +>EAS188_7:3:296:224:724 +TGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAAC +>EAS188_7:3:76:333:905 +AATTGTGTCCATGTACACACGCTGTCCTATGTACT +>EAS188_7:3:76:333:905 +TTTCTGCCCCCAGCATGGTTGTACTGGGCAATACA +>EAS188_7:4:164:719:947 +AAATTAACATTACAACAGGAACAAAACCTCATATA +>EAS188_7:4:164:719:947 +ACGCAAACAGAAACCAAATGAGAGAAGGAGTAGCT +>EAS188_7:4:171:104:398 +AGGGAGGTGCACTAATGCGCTCCACGCCCAAGCCC +>EAS188_7:4:171:104:398 +CAATTAATATAATTGTGTCCATGTACACACGCTGT +>EAS188_7:4:21:443:404 +AGAGAACTTCCCTGGAGGTCTGATGGCGTTTCTCC +>EAS188_7:4:21:443:404 +TTCCTCTGTCTTGATTTACTTGTTGTTGGTTTTCT +>EAS188_7:4:238:441:727 +GTAATTGAAAAATTCATTTAAGAAATTACAAAATA +>EAS188_7:4:259:869:641 +GTTGGGAGATTTTTAATGATTCCTCAATGTTAAAA +>EAS188_7:4:259:869:641 +TGATGCCCCTTGGCCATCACCCAGTCCCTGCCCCA +>EAS188_7:4:92:693:228 +AAGGTTTTATAAAAAAATTAATTGAGACTACAGAG +>EAS188_7:4:92:693:228 +AGCATCATAAATGAAGGGGAAATAAAGTCAAGTCT +>EAS188_7:5:112:51:128 +AGACCCCCTTGCAACAACCTTGAGAACCCCAGGGA +>EAS188_7:5:112:51:128 +CCCAATGGACCTGTGATATCTGGATTCTGGGAAAT +>EAS188_7:5:115:249:673 +TAAAGAAAAAAAAACCTGTCAAACACGAATGTTAT +>EAS188_7:5:115:249:673 +TAAATACACACAAAAGTACAAAACTCACAGGTTTT +>EAS188_7:5:163:982:695 +CTCAGCAGAAACCTTACAAGCCAGAAGAGATTGGA +>EAS188_7:5:163:982:695 +TCAAAGAATGCCAGGAAGATACATTGCAAGACAGA +>EAS188_7:5:308:354:124 +GCTGCATCCCTGTCTTCCTCTGTCTTGATTTACTT +>EAS188_7:5:308:354:124 +TGAGCAAAACAGTCTAGATGAGAGAGAACTTCCCT +>EAS188_7:5:74:329:459 +ACAGAGCAACTAGGTAAAAAATTAACATTACAACA +>EAS188_7:5:74:329:459 +TAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAG +>EAS188_7:6:107:447:488 +TAATTGGTACAATGTACAATATTCTGATGATGGTT +>EAS188_7:6:107:447:488 +TGCTAAGTATTGGTAAAGATGTGGGGAAAAAAGTA +>EAS188_7:6:107:636:642 +AAGTCTTTCCTGACAAGCAAATGCTAAGATAATTC +>EAS188_7:6:107:636:642 +GTCATCTATAAAGGAAATCCCATCAGAATAACAAT +>EAS188_7:6:11:994:584 +GAAGGAAAAAAATTCTAAAATCAGCAAGAGAAAAG +>EAS188_7:6:11:994:584 +GGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTT +>EAS188_7:6:191:540:493 +AAAAGCCCATACTTTACTGCTACTCAATATATCCA +>EAS188_7:6:191:540:493 +GTGGGGAAAAAAGTAAACTCTCAAATATTGCTAGT +>EAS188_7:6:194:998:663 +ACCTAACACAAGACTACCCAGATTCATAAAACAAA +>EAS188_7:6:194:998:663 +TCTACGCAAACAGAAACCAAATGAGAGAAGGAGTA +>EAS188_7:6:205:873:464 +AGATTGCTTGTGGTCTGACAGGCTGCAACTGTGAG +>EAS188_7:6:205:873:464 +CCCCAGAGGGAAAGCTTTCAACGCTTCTAGCCATT +>EAS188_7:6:46:122:479 +AAGAAAGAGGTTCAGAACTTGAAGACAAGTCTCTT +>EAS188_7:6:46:122:479 +AAGTGAGAAGTTTGGAAGAACTATTTGAGGAAGTA +>EAS188_7:7:19:886:279 +CCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGTA +>EAS188_7:7:19:886:279 +GAAAGGAGCATTTTGTCAGTTACCAAATGTGTTTA +>EAS188_7:7:213:309:373 +TAGACATCTAAATGAAAGAGGCTCAAAGAATGCCA +>EAS188_7:7:213:309:373 +TTAAAAATGAACAGAGCTTTCAAGAAGTATGAGAT +>EAS188_7:7:243:876:758 +AGCCCAGATCCAGATTGCTTGTGGTCTGACAGGCT +>EAS188_7:7:243:876:758 +CCCAGATACCATCCCTGTCTTACTTCCAGCTCCCC +>EAS188_7:7:67:719:786 +GGATGAGAAATTACCTAATTGGTACACTGTACAAT +>EAS188_7:7:67:719:786 +TAAAAAAAAAAAAGCAAAAACAAAAACTATGCTAA +>EAS188_7:8:60:182:718 +GTCCCTGCCCCATCTCTTGTAATCTCTCTCCTTTT +>EAS188_7:8:60:182:718 +TGACACCCAACTAATATTTGTCTGAGCAAAACAGT +>EAS188_7:8:64:350:174 +CCTAACACAAGACTACCCAGATTCATAAAACAAAT +>EAS188_7:8:64:350:174 +GTTCTACGCAAACAGAAACCAAATGAGAGAAGGAG +>EAS192_3:1:114:19:769 +AAACACGAATGTTATGCCCTGCTAAACTAAGCATC +>EAS192_3:1:114:19:769 +TAAAGTCAACATGAAGGAAAAAAATTCTAAAATCA +>EAS192_3:1:225:195:543 +AACAACCTTGAGAACCCCAGGGAATTTGTCAATGT +>EAS192_3:1:225:195:543 +GGTTGCCAGCACAGGGGCTTAACCTCTGGTGACTG +>EAS192_3:3:194:378:230 +AATACTACTAGACCTAAGAGGGATGAGAAATTACC +>EAS192_3:3:194:378:230 +ATGAGAGAAGGAGTAGCTATACTTATATCAGATAA +>EAS192_3:3:221:881:916 +TAACACAAGACTACCCAGATTCATAAAACAAATAC +>EAS192_3:3:221:881:916 +TAATTCTAAATCTAGAACAAAATTAAAATTTAACA +>EAS192_3:3:257:611:440 +ACCCTGAGAGATTCTGCAGCCCAGATCCAGATTGC +>EAS192_3:3:257:611:440 +GGAGCATTTTGTCAGTTACCAAATGTGTTTATTAC +>EAS192_3:3:27:973:518 +CTGATTATGAAAACAATGTTCCCCAGATACCATCC +>EAS192_3:3:27:973:518 +TCCAGATTGCTTGTGGTCTGACAGGCTGCAACTGT +>EAS192_3:3:285:349:797 +ATCATAAATGAAGGGGAAATAAAGTCAAGTCTTTC +>EAS192_3:3:285:349:797 +GTTTTAAAAAACCAATAATTGAGACTACAGAGCAA +>EAS192_3:3:309:187:267 +ATTGAGACTACAGAGCAACTAGGTAAAAAATTAAC +>EAS192_3:3:309:187:267 +GGGGAAATAAAGTCAAGTCTTTCCTGACAAGCAAA +>EAS192_3:3:88:866:774 +ATGTAACAAATCTGCTCTTGTACTTCTAAATCTAT +>EAS192_3:3:88:866:774 +TTGTTTTCCACTTTGGAAAACAATTTGGTAATTTC +>EAS192_3:4:184:237:476 +ATCATACAATGATAAAAAGATCAATTCAGCAAGAA +>EAS192_3:4:184:237:476 +ATGAACTAACTATATGCTGTTTACAAGAAACTCAT +>EAS192_3:4:255:549:422 +AAGTCATCTATAAAGGAAATCCCATCAGAATAACA +>EAS192_3:4:255:549:422 +CTCTTTAGTCTTGCTAGAGATTTAGACATCTAAAT +>EAS192_3:4:293:168:240 +ATGAACAGAGCTTTCAAGAAGTATGAGATTATGTA +>EAS192_3:4:293:168:240 +CAAAGAATGCCAGGAAGATACATTGCAAGACAGAC +>EAS192_3:4:312:915:751 +AATAAAGTCAAGTCTTTCCTGACAAGCAAAAGCTA +>EAS192_3:4:312:915:751 +ATCTATAAAGGAAATCCCATCAGAATAACAATGGG +>EAS192_3:4:63:5:870 +AAAGAAAAAAGAATTTTAAAAATGAACAGAGCTTT +>EAS192_3:4:63:5:870 +GAAAGAGGCTCAAAGAATGCCAGGAAGATACATTG +>EAS192_3:5:197:914:256 +ACTAGACCTAAGAGGGATGAGAAATTACCTAATTG +>EAS192_3:5:197:914:256 +TCAGATAAAGCACACTTTAAATCAACAACAGTAAA +>EAS192_3:5:223:142:410 +CTATTCAGTTCTAAATATAGAAATTGAAACAGCTG +>EAS192_3:5:27:577:849 +AGTCTCTTATGAATTAACCCAGTCAGACAAAAATA +>EAS192_3:5:27:577:849 +TTAGACATCTAAATGAAAGAGGCTCAAAGAATGCC +>EAS192_3:5:287:334:110 +GATGAATACTAAGATTGATGTAGCAGCTTTTGCAA +>EAS192_3:5:287:334:110 +TATGTAAAGTAACTGAACCTATGAGTCACAGGTAT +>EAS192_3:6:116:464:261 +CAATGATAAAAAGATCAATTCAGCAAGAAGATATA +>EAS192_3:6:116:464:261 +CTATATGCTGTTTACAAGAAACTCATTAATAAAGA +>EAS192_3:6:170:169:57 +GGCTTGACCTCTGGTGACTGCCAGAGCTGCTGGCC +>EAS192_3:6:170:169:57 +TGCAACAACCTTGAGAACCCCAGGGAATTTGTCAA +>EAS192_3:6:175:437:950 +CCAAATTCCCAATTACGTCCTATCTTCTTCTTAGG +>EAS192_3:6:175:437:950 +CCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGC +>EAS192_3:6:185:868:496 +CCCTTGGCCATCACCCAGTCCCTGCCCCATCTCTT +>EAS192_3:6:185:868:496 +GATTTTTAATGATTCCTCAATGTTAAAATGTCTAT +>EAS192_3:6:201:195:757 +CCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGC +>EAS192_3:6:201:195:757 +TATGTACTTATCATGACTCTATCCCAAATTCCCAA +>EAS192_3:6:216:292:528 +GGGAGATTTTTAATGATTCCTCAATGTTAAAATGT +>EAS192_3:6:216:292:528 +TAATGATGCCCCTTGGCCATCACCCAGTCCCTGCC +>EAS192_3:6:235:505:553 +GGTGGAAAAAGATGTTCTACGCAAACAGAAACCAA +>EAS192_3:6:235:505:553 +GTAAAAAATTAACATTACAACAGGAACAAAACCTC +>EAS192_3:6:326:887:180 +CTAAACCAGTCCTATAAGAAATGCTCAAAAGAATT +>EAS192_3:6:326:887:180 +TGGGCTTCTCAGCAGAAACCTTACAAGCCAGAAGC +>EAS192_3:6:45:183:25 +CAGCGGAAACCTTACAAGCCAGAAGAGATTGGATC +>EAS192_3:6:45:183:25 +CTAAACCAGTCCTATAAGAAATGCTCAAAAGAATT +>EAS192_3:7:149:354:667 +CTTCCAGCTCCCCAGAGGGAAAGCTTTCAACGCTT +>EAS192_3:7:149:354:667 +GAGGTGCACTAATGCGCTCCACGCCCAAGCCCTTC +>EAS192_3:7:298:644:697 +CTATGTTTCTTATCTGCACATTACTACCCTGCAAT +>EAS192_3:7:298:644:697 +TCCACGTCTCATCTAGGGGAACAGGGAGGTGCACT +>EAS192_3:7:66:891:294 +AGCACACTTTAAATCAACAACAGTAAAATAAAACA +>EAS192_3:7:66:891:294 +TAATTGGTACAATGTACAATATTCTGATGATGGTT +>EAS192_3:7:78:692:671 +AATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACA +>EAS192_3:7:78:692:671 +CAGCAAGAGAAAAGCATACAGTCATCTATAAAGGA +>EAS192_3:7:93:945:176 +CCAGAGGGAAAGCTTTCAACGCTTCTAGCCATTTC +>EAS192_3:7:93:945:176 +GTGAGCCATCACAATGAACAACAGGAAGAAAAGGT +>EAS192_3:8:6:104:118 +AAGAATTTTAAAAATGAACAGAGCTTTCAAGAAGT +>EAS192_3:8:6:104:118 +TCTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGA +>EAS192_3:8:6:237:885 +AAAATCAGCAAGAGAAAAGCATACAGTCATCTATA +>EAS192_3:8:6:237:885 +TATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT +>EAS1_103:1:151:159:43 +AACCTCATACACACACATGGTTTAGGGGTATAATA +>EAS1_103:1:151:159:43 +TCTCATTCACTCCAGCTCCCTGTCACCCAATGGAC +>EAS1_103:1:228:736:747 +AAGATATGTAGTCATCAGACTATCTAAAGTCAACA +>EAS1_103:1:228:736:747 +TTGGACTTCTTAAAGAAAAAAAAACCTGTCAAACA +>EAS1_103:1:274:176:479 +CCTATCTTCTTCTTAGGGAAGAACAGCTTAGGTAT +>EAS1_103:1:274:176:479 +GAAATGCTTTACTGTCATAACTATGAAGAGACTAT +>EAS1_103:1:2:831:692 +GTGTTCTCATCAACCTCATACACACACATGGTTTA +>EAS1_103:1:2:831:692 +TCCAGCTCCCTGTCACCCAATGGACCTGTGATATC +>EAS1_103:2:184:980:396 +AAGGAGGTCATCATACAATGATAAAAAGATCAATT +>EAS1_103:2:184:980:396 +ACATGAACTAACTATATGCTGTTTACAAGAAACTC +>EAS1_103:2:226:302:758 +GGAAAGCTTTCAACGCTTCTAGCCATTTCTTTTGG +>EAS1_103:2:226:302:758 +TGCTTGTGGTCTGACAGGCTGCAACTTTGAGCGNT +>EAS1_103:2:234:167:381 +AAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGAT +>EAS1_103:2:234:167:381 +AGAGAAAAGCATACAGTCATCTATAAAGGAAATCC +>EAS1_103:2:235:805:373 +TATCTTCTTCTTAGGGAAGAACAGCTTAGGTATCA +>EAS1_103:2:235:805:373 +TTTACTGTCATAACTATGAAGAGACTATTTCCAGA +>EAS1_103:2:307:252:632 +ACCATCCTGCTAAATACATATGCACCTAACACAAG +>EAS1_103:2:307:252:632 +ATGTTCTACGCAAACAGAAACCAAATGAGAGAAGG +>EAS1_103:3:253:175:31 +CAAACAGAAACCAAATGAGAGAAGGAGTAGCTATA +>EAS1_103:3:253:175:31 +TTCATAAAACAAATACTACTAGACCTAAGAGGGAT +>EAS1_103:3:277:921:474 +AAAATATAGTTGAAAGCTCTAACAATAGACTAAAC +>EAS1_103:3:277:921:474 +AAAGAAAAAGTGAGAAGTTTGGAAAAACTATTTGA +>EAS1_103:3:320:505:814 +ACAGTCTAGATGAGAGAGAACTTCCCTGGAGGTCT +>EAS1_103:3:320:505:814 +CTGTCTTGATTTACTTGTTGTTGGTTTTCTTTTTC +>EAS1_103:3:323:196:855 +ACAAGCAAATGCTAAGATAATTCATCATCACTAAA +>EAS1_103:3:323:196:855 +TAAAAAATTAACATTACAACAGGAACAAAACCTCA +>EAS1_103:3:41:474:283 +TGAACCACACATTAATACTATGTTTCTTATCTGCA +>EAS1_103:3:41:474:283 +TTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGTCC +>EAS1_103:4:143:560:194 +GTTGTACTGGGCAATACATGAGATTATTAGGAAAT +>EAS1_103:4:143:560:194 +TCTAGCCATTTCTTTTGGCATTTGCCTTCAGACCC +>EAS1_103:4:164:79:134 +ACAATGGGCTTCTCAGCGGAAACCTTACAAGCCAG +>EAS1_103:4:164:79:134 +AGATAATTCATCATCACTAAACCAGTCCTATAAGA +>EAS1_103:4:231:815:626 +GATCAATACAGCAAGAAGATATAACCATCCTACTA +>EAS1_103:4:231:815:626 +GCTGTTTACAAGAAACTCATTAATAAAGACATGAG +>EAS1_103:4:235:899:847 +AGAAACTCATTAATAAAGACATGAGTTCAGGTAAA +>EAS1_103:4:235:899:847 +ATAAAAAGATCAATTCAGCAAGAAGATATAACCAT +>EAS1_103:4:294:525:849 +AGGAGCATTTTGTCAGTTACCAAATGTGTTTATTA +>EAS1_103:4:294:525:849 +CTGGCAAGCTAGAGTCCCATTTGGAGCCCCTCTAA +>EAS1_103:4:61:433:385 +ACTGTGAGCCATCACAATGAACAACAGGAAGAAAA +>EAS1_103:4:61:433:385 +GGATGGAGGGAAGAGGGACGCTGAAGCACTTTGAT +>EAS1_103:5:141:711:813 +TATTACCAGAGGGATGGAGGGAAGAGGGACGCTGA +>EAS1_103:5:141:711:813 +TATTTGTAATGAAAACTATATTTATGCTATTCAGT +>EAS1_103:5:188:20:592 +CTACTAGACCTAAGAGGGATGAGAAATTACCTAAT +>EAS1_103:5:188:20:592 +GAGTAGCTATACTTATATCAGATAAAGCACACTTT +>EAS1_103:5:285:241:560 +GAAATTACAAAATATAGTTGAAAGCTCTAACAATA +>EAS1_103:5:285:241:560 +TAAAGTAACTGAACCTATGAGTCACAGGTATTCCT +>EAS1_103:5:319:165:698 +ATCACCCAGTCCCTGCCCCATATCTTGTAATCTCT +>EAS1_103:5:319:165:698 +TGACACCCAACTAATATTTGTCTGAGCAAAACAGT +>EAS1_103:6:7:858:437 +CAATGAACAACAGGAAGAAAAGGTCTTTCAAAAGG +>EAS1_103:6:7:858:437 +CCATTTCTTTTGGCATTTGCCTTCAGACCCTACAC +>EAS1_103:7:112:578:782 +AAAATAAAACACATAGCTAAAACTAAAAAAGCAAA +>EAS1_103:7:112:578:782 +CAGATTCATAAAACAAATACTACTAGACCTAAGAG +>EAS1_103:7:139:578:951 +AAAAACATGAACTAACTATATGCTGTTTACAAGAA +>EAS1_103:7:139:578:951 +GAGGTCATCATACAATGATAAAAAGATCAATTCAG +>EAS1_103:7:166:84:766 +ATAACACAAGACTACCCAGATTCATAAAACAAATA +>EAS1_103:7:166:84:766 +GGAAAAAGATGTTCTACGCAAACAGAAACCAAATG +>EAS1_103:7:311:100:539 +AAATTCTTCATCCTGGACCCTGAGAGATTCTGCAG +>EAS1_103:7:311:100:539 +CAGTTACCAAATGTGTTTATTACCAGAGGGATGGA +>EAS1_103:7:313:83:546 +TCATTCACTCCAGCTCCCTGTCACCCAATGGACCT +>EAS1_103:7:313:83:546 +TGCAACAACCTTGAGAACCCCAGGGAATTTGTCAA +>EAS1_103:7:53:783:78 +AAAAACCTGTCAAACACGAATGTTATGCCCTGCTA +>EAS1_103:7:53:783:78 +TGCAAGACAGACTTCATCAAGATATGTAGTCATCA +>EAS1_105:1:115:226:443 +AAATCTGCGCTTGTACTTCTAAATCTATAAAAAAA +>EAS1_105:1:115:226:443 +ATATAACCATCCTACTAAATACATATGCACCTAAC +>EAS1_105:1:141:415:738 +AAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGA +>EAS1_105:1:141:415:738 +TTACCTAGTTGCTCTGTAGTCTCAATTAATTGTTT +>EAS1_105:1:234:185:359 +AAGGAGTAGCTATACTTATATCAGATAAAGCACAC +>EAS1_105:1:234:185:359 +CAGATTCATAAAACAAATACTACTAGACCTAAGAG +>EAS1_105:1:28:745:352 +ATATGCACCTAACACAAGACTACCCAGATTCATAA +>EAS1_105:1:28:745:352 +CTTCTAAATCTATAACAAAATTAAAATTTAACAAA +>EAS1_105:1:297:283:948 +CCAGATTGCTTGTGGTCTGACAGGCTGCAACTGTG +>EAS1_105:1:297:283:948 +TGTCTTACTTCCAGCTCCCCAGAGGGAAAGCTTTC +>EAS1_105:1:329:407:872 +TTCGTTTTTTTTTTTTTTTTTTCCCTTTTTTTTTT +>EAS1_105:1:3:903:957 +AAGCCAGAAGAGATTGGATCTAATTTTTGGACTTC +>EAS1_105:1:3:903:957 +ATTCATCATCACTAAACCAGTCCTATAAGAAATGC +>EAS1_105:1:45:239:851 +CTAAGAGGGATGAGAAATTACCTAATTGGTACAAT +>EAS1_105:1:45:239:851 +TGAGAGAAGGAGTAGCTATACTTATATCAGATAAA +>EAS1_105:1:87:430:995 +GAAAAGAGTTAAAAACATGAACTAACTATATGCTG +>EAS1_105:1:87:430:995 +TACTCACCATCATAAATACACACAAAATTACAAAA +>EAS1_105:2:110:584:649 +CCATGTACACACGCTGTCCTATGTACTTATCATGA +>EAS1_105:2:110:584:649 +CTGTAATGATGCCCCTTGGCCATCACCCGGTCCCT +>EAS1_105:2:146:374:692 +AAATGCTCAAAAGAATTGTAAAAGTCAAAATTAAA +>EAS1_105:2:146:374:692 +ATTAAATTCCCCCACTTAAGAGATATAGATTGGCA +>EAS1_105:2:179:532:82 +CCATCACCCGGTCCCTGCCCCATCTCTTGTAATCT +>EAS1_105:2:179:532:82 +TGTACTTATCATGACTCTATCCCAAATTCCCAATT +>EAS1_105:2:280:662:939 +AAGAGAAAAGCATACAGTCATCTATAAAGGAAATC +>EAS1_105:2:280:662:939 +CCTCTTTAGTCTTGCTAGAGATTTAGACATCTAAA +>EAS1_105:2:299:360:220 +ATTCAGTTCTAAATATAGAAATTGAAACAGCTGTG +>EAS1_105:2:299:360:220 +GAAGAACTTAGATGCCCTCTTCTTCCAAAGATGAA +>EAS1_105:2:301:161:195 +ACAGTAAAATAAAACAAAGGAGGTCATCATACAAT +>EAS1_105:2:301:161:195 +GTACAATGTACAATATTCTGATGATGGTTACACTA +>EAS1_105:3:176:431:647 +ATCATGACTCTATCCCAAATTCCCAATTACGTCCT +>EAS1_105:3:176:431:647 +CCATCACCCAGTCCCTGCCCCATCTCTTGTAATCT +>EAS1_105:3:182:404:693 +ACCTCATACACACACATGGTTTAGGGGTATAATAC +>EAS1_105:3:182:404:693 +GCGTCTCTACCACAGGGGGCTGCGCGGTTTCCCAT +>EAS1_105:3:232:364:583 +CAATTAATTGAGACTACAGAGCAACTAGGTAAAAA +>EAS1_105:3:232:364:583 +TCATTAATAAAGACATGAGTTCAGGTAAAGGGGTG +>EAS1_105:3:308:66:538 +CGCTTGTACTTCTAAATCTATAACAAAATTAAAAT +>EAS1_105:3:308:66:538 +TATAACCATCCTACTAAATACATATGCACCTAACA +>EAS1_105:3:329:177:267 +CATGAGATTATTAGGAAATGCTTTACTGTCATAAC +>EAS1_105:3:329:177:267 +TACGTCCTATCTTCTTCTTAGGGAAGAACAGCTTA +>EAS1_105:3:7:35:528 +TTTTTTTTTTGTTCTTTACTCTTTTTTTTTTTTTT +>EAS1_105:3:86:823:683 +ACTTTGATGCCCTCTTCTTCCAAAGATGAAACGCG +>EAS1_105:3:86:823:683 +CAGTTCTAAATATAGAAATTGAAACAGCTGTGTTT +>EAS1_105:6:134:853:558 +AATATAATTGTGTCCATGTACACACGCTGTCCTAT +>EAS1_105:6:134:853:558 +GGAACAGGGAGGTGCACTAATGCGCTCCACGCCCA +>EAS1_105:6:162:594:858 +CTACCACAGGGGGCTGCGCGGTTTCCCATCATGAA +>EAS1_105:6:162:594:858 +GTGTTCTCATCAACCTCATACACACACATGGTTTA +>EAS1_105:6:172:827:592 +AATTGTAAAAGTCAAAATTAAAGTTCAATACTCAC +>EAS1_105:6:172:827:592 +TAGATTGGCAGAACAGATTTAAAAACATGAACTAA +>EAS1_105:6:23:885:274 +ACAAAGGAGGTCATCATACAATGATAAAAAGATCA +>EAS1_105:6:23:885:274 +CTACTACTCAATATATCCATGTAACAAATCTGCGC +>EAS1_105:6:267:953:459 +ACCTTACAAGCCAGAAGAGATTGGATCTAATTTTT +>EAS1_105:6:267:953:459 +CATCACTAAACCAGTCCTATAAGAAATGCTCAAAA +>EAS1_105:7:110:355:323 +ACCTTGAGAACCCCAGGGAATTTGTCAATGTCAGG +>EAS1_105:7:110:355:323 +CCCAATGGACCTGTGATATCTGGATTCTGGGAAAT +>EAS1_105:7:168:247:414 +AAAAGAATTGTAAAAGTCAAAATTAAAGTTCAATA +>EAS1_105:7:168:247:414 +TAAATTCCCCCACTTAAGAGATATAGATTGGCAGA +>EAS1_105:7:289:472:86 +ATGAACTTCTGTAATTGAAAAATTCATTTAAGAAA +>EAS1_105:7:45:462:455 +TCCCTGTCTTACTTCCAGCTCCCCAGACGGAACGC +>EAS1_105:7:45:462:455 +TCTAGGGGAACAGGGAGGTGCACTAATGCGCTCCA +>EAS1_105:7:57:722:347 +ACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATGT +>EAS1_105:7:57:722:347 +CGCGTAACTGCGCTCTCATTCACTCCAGCTCCCTG +>EAS1_105:8:160:130:351 +CAAAAGAATTGTAAAAGTCAAAATTAAAGTTCAAT +>EAS1_105:8:160:130:351 +TGGATCTAATTTTTGGACTTCTTAAAGAAAAAAAA +>EAS1_105:8:179:119:876 +ATAAAAAGATCAATTCAGCAAGAAGATATAACCAT +>EAS1_105:8:179:119:876 +TTAAAAACATGAACTAACTATATGCTGTTTACCAG +>EAS1_105:8:24:718:322 +AACTCATTAATAATGTCATGAGTTCAGGTAAAGGG +>EAS1_105:8:24:718:322 +ACAATTAATTGAGACTACAGACCAATTATGTAAAA +>EAS1_105:8:254:617:73 +AACTATTTGAGGAAGTAATTGGGGAAAACCTCTTT +>EAS1_105:8:254:617:73 +GCAGAAGAAAGAGGTTCAGAACTTGAAGACAAGTC +>EAS1_105:8:256:404:584 +ACTGTCCTATGTACTTATCATGACTCTATCCCAAA +>EAS1_105:8:256:404:584 +GTTTCTGCCCCCAGCATGGTTGTACTGGGCAATAC +>EAS1_105:8:96:720:940 +AAAGGAAATCCCATCAGAATAACAATGGGCTTCTC +>EAS1_105:8:96:720:940 +TAAGATAATTCATCATCACTAAACCAGTCCTATAA +>EAS1_108:1:111:796:737 +ATCATGACTCTATCCCAAATTCCCAATTACGTCCT +>EAS1_108:1:111:796:737 +CCCCAGCATGGTTGTACTGGGCAATACATGTGATT +>EAS1_108:1:131:518:588 +AAAATCAGCAAGAGAAAAGCATACAGTCATCTATA +>EAS1_108:1:131:518:588 +ATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTG +>EAS1_108:1:148:286:316 +AGAACTTCCCTGGAGGTCTGATGGCGTTTCTCCCT +>EAS1_108:1:148:286:316 +CCTCTGTCTTGATTTACTTGTTGTTGGTTTTCTGT +>EAS1_108:1:155:809:543 +AAATTTAACAAAAGTAAATAAAACACATAGCTAAA +>EAS1_108:1:155:809:543 +TACATATGCACCTAACACAAGACTACCCAGATTCA +>EAS1_108:1:16:438:245 +TTGAATAAAAAGGGATTAAATTCCCCCACTTAAGA +>EAS1_108:1:189:863:213 +CTACTAGACCTAAGAGGGATGAGAAATTACCTAAT +>EAS1_108:1:189:863:213 +TATACTTATATCAGATAAAGCACACTTTAAATCAA +>EAS1_108:1:242:419:512 +AATGGGCTTCTCAGCAGAAACCTTACAAGCCAGAA +>EAS1_108:1:242:419:512 +CTAAACCAGTCCTATAAGAAATGCTCAAAAGAATT +>EAS1_108:1:277:194:143 +TGGGCTGTAATGATGCCCCTTGGCCATCACCCGGT +>EAS1_108:1:277:194:143 +TTTTTAATGATTCCTCAATGTTAAAATGTCTATTT +>EAS1_108:1:328:614:638 +AAAGGTTGTTGGGAGATTTTTAATGATTCCTCAAT +>EAS1_108:1:328:614:638 +ACTGGTTCTCTTGAAAGCTTGGGCTGTAATGATGC +>EAS1_108:1:33:779:821 +AATGTTATGCCCTGCTAAACTAAGCATCATAAATG +>EAS1_108:1:33:779:821 +TGAAGGAAAAAAATTCTAAAATCAGCAAGAGAAAA +>EAS1_108:1:49:911:980 +ACAATGTACAATATTCTGATGATGGTTACACTAAA +>EAS1_108:1:49:911:980 +GGGGAAAAAAGTAAACTCTCAAATATTGCTAGTGG +>EAS1_108:1:65:787:74 +TGTAATGAAAACTATATTTATGCTATTCAGTTCTA +>EAS1_108:2:102:543:160 +CAACAGGAACAAAACCTCATATATCAATATTAACT +>EAS1_108:2:102:543:160 +CAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAA +>EAS1_108:2:116:966:193 +ATTAACATTACAACAGGAACAAAACCTCATATATC +>EAS1_108:2:116:966:193 +GACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGT +>EAS1_108:2:170:326:433 +CTTCCCTGGAGGTCTGATGGCGTTTCTCCCTCGTC +>EAS1_108:2:170:326:433 +TTGTTGGTTTTCTGTTTCTTTGTTTGATTTGGTGG +>EAS1_108:2:176:653:957 +AAAGGGGTGGAAAAAGATGTTCTACGCAAACAGAA +>EAS1_108:2:176:653:957 +ACATTACAACAGGAACAAAACCTCATATATCAATA +>EAS1_108:2:204:737:61 +AAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAGT +>EAS1_108:2:204:737:61 +TCAGCAAGAGAAAAGCATACAGTCATCTATAAAGG +>EAS1_108:2:240:593:842 +ATCTGGATTCTGGGAAATTCTTCATCCTGGACCCT +>EAS1_108:2:240:593:842 +CATGGTTTAGGGGTATAATACCTCTACATGGCTGA +>EAS1_108:2:266:994:429 +ACAGGTTTTATAAAACAATTAATTGAGACTACAGA +>EAS1_108:2:266:994:429 +TGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAAG +>EAS1_108:2:316:176:543 +ATGTCTATTTTTGTCTTGACACCCAACTAATATTT +>EAS1_108:2:316:176:543 +CATCTCTTGTAATCTCTCTCCTTTTTGCTGCATCC +>EAS1_108:2:49:271:588 +CACATGGTTTAGGGGTATAATACCTCTACATGGCT +>EAS1_108:2:49:271:588 +GCTGCGCGGTTTCCCATCATGAAGCACTGAACTTC +>EAS1_108:2:62:879:264 +AATGAAAACTATATTTATGCTATTCAGTTCTAAAT +>EAS1_108:2:62:879:264 +GGACGCTGAAGAACTTTGATGCCCTCTTCTTCCAA +>EAS1_108:2:82:879:246 +AAGAGGGACGCTGAAGAATTTTGATGCCCTCTTCT +>EAS1_108:2:82:879:246 +ACAACTGTGAGCCATCACAATGAACAACAGGAAGA +>EAS1_108:2:85:580:481 +AAAAAAGTAAATAAAACACATAGCTAAAACTAAAA +>EAS1_108:2:85:580:481 +CTAACACAAGACTACCCAGATTCATAAAACAAATA +>EAS1_108:3:216:988:883 +AAGCCAACACAATGAACAACAGGAAGAAAAGGTCT +>EAS1_108:3:216:988:883 +AGAGGGACGCTGAAGAACTTTGATGCCCTCTTCTT +>EAS1_108:3:24:319:429 +GTTATGCCCTGCTAAACTAAGCATCATAAATGAAG +>EAS1_108:3:24:319:429 +TAATAAATACACACAAAAGTACAAAACTCACAGGT +>EAS1_108:3:75:934:439 +AAGAGACTATTGCCAGATGAACCACACATTAATAC +>EAS1_108:3:75:934:439 +CCCATCATGAAGCACTGAACTTCCACGTCTCATCT +>EAS1_108:3:82:356:253 +AGTTTCTGCCCCCAGCATGGTTGTACTGGGCAATA +>EAS1_108:3:82:356:253 +GAAAGCTTTCAACGCTTCTAGCCATTTCTTTTGGC +>EAS1_108:4:163:611:211 +TAAAGTCAACATGAAGGAAAAAAATTCTAAAATCA +>EAS1_108:4:163:611:211 +TGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAAC +>EAS1_108:4:248:753:731 +TATGCTATTCAGTTCTAAATATAGAAATTGAAACA +>EAS1_108:4:248:753:731 +TGAAGAACTTTGATGCCCTCTTCTTCCAAAGATGA +>EAS1_108:4:31:622:216 +ATTTAACAAAAGTAAATAAAACACATAGCTAAAAC +>EAS1_108:4:37:604:389 +ATGTTCTACGCAAACAGAAACCAAATGAGAGAAGG +>EAS1_108:4:37:604:389 +TCATAAAACAAATACTACTAGACCTAAGAGGGATG +>EAS1_108:4:75:166:463 +GTGAGAAGTTTGGAAAAACTATTTGAGGAAGTAAT +>EAS1_108:4:75:166:463 +TAACAATAGACTAAACCAAGCAGAAGAAAGAGGTT +>EAS1_108:4:91:521:517 +CCACACTGGTTCTCTTGAAAGCTTGGGCTGTAATG +>EAS1_108:4:91:521:517 +CCCTGCAATTAATATAATTGTGTCCATGTACACAC +>EAS1_108:5:115:193:231 +GAAGAGATTGGATCTAATTTTTGGACTTCTTAAAG +>EAS1_108:5:115:193:231 +TATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAA +>EAS1_108:5:11:555:330 +CGCTTGTACTTCTAAATCTATAAAAAAATTAAAAT +>EAS1_108:5:11:555:330 +GGAAAACAATTTGGTAATTTCGTTTTTTTTTTTTT +>EAS1_108:5:175:149:296 +AAAAATTAACATTACAACAGGAACAAAACCTCATA +>EAS1_108:5:175:149:296 +AAGGGGAAATAAAGTCAAGCCTTTCCTGACAAGCA +>EAS1_108:5:180:905:36 +CCTCCGTGTCCTCCCATCTGGCCTCGTCCACACTG +>EAS1_108:5:180:905:36 +TACTATGTTTCTTATCTGCACATTACTACCCTGCA +>EAS1_108:5:229:717:121 +ACTATGAAGAGACTATTGCCAGATGAACCACACAC +>EAS1_108:5:229:717:121 +TTCTTCTGAGGGAAGAACAGCTTAGGTATCAATTT +>EAS1_108:5:321:712:224 +AGATAAAGCACACTTTAAATCAACAACAGAAAAAT +>EAS1_108:5:321:712:224 +ATGAGAAATTACCTAATTGGTACAATGTACAATAT +>EAS1_108:5:89:942:84 +AAAACCTGTCAAACACGAATGTTATGCCCTGCTAA +>EAS1_108:5:89:942:84 +TACAAAACTCACAGGTTTTATAAAACAATTAATTG +>EAS1_108:6:159:493:275 +ACAAAACTCACAGGTTTTATAAAACAATTAATTGA +>EAS1_108:6:159:493:275 +TGCTGTTTACAAGAAACTCATTAATAAAGACATGA +>EAS1_108:6:165:464:123 +CATACACACACATGGTTTAGGGGTATAATACCTCT +>EAS1_108:6:165:464:123 +GTCTCTACCACAGGGGGCTGCGCGGTTTCCCATCA +>EAS1_108:6:222:579:961 +AGTCCTATAAGAAATGCTCAAAAGAATTGTAAAAG +>EAS1_108:6:222:579:961 +CAGAAACCTTACAAGCCAGAAGAGATTGGATCTAA +>EAS1_108:6:71:187:824 +AGACAGACTTCATCAAGATATGTAGTCATCAGACT +>EAS1_108:6:71:187:824 +TCTAATTTTTGGACTTCTTAAAGAAAAAAAAACCT +>EAS1_108:6:73:735:329 +AAAGGGATTAAATTCCCCCACTTAAGAGATATAGA +>EAS1_108:6:73:735:329 +TAGCTATACTTATATCAGATAAAGCACACTTTAAA +>EAS1_108:6:77:48:860 +CTCTGTCTTGATTTACTTGTTGTTTGTTTTCTGTT +>EAS1_108:6:77:48:860 +TAGATGAGAGAGAACTTCCCTGGAGGTCTGATGGC +>EAS1_108:6:94:294:387 +ACCATCATAAATACACACAAAAGTACAAAACTCAC +>EAS1_108:6:94:294:387 +GAATGTTATGCCCTGCTAAACTAAGCATCATAAAT +>EAS1_108:6:95:235:746 +CTAAGCATCATAAATGAAGGGGAAATAAAGTCAAG +>EAS1_108:6:95:235:746 +TCTAAAATCAGCAAGAGAAAAGCATACAGACATCT +>EAS1_108:7:108:440:208 +CCCATCCTACTAAATACATATGCACCTAACACAAG +>EAS1_108:7:108:440:208 +TTCAGGTAAAGGGGAGGAAAAAGATGTTCTACGCA +>EAS1_108:7:222:538:267 +ATAATTGTGTCCATGTACACACGCTGTCCTATTTA +>EAS1_108:7:222:538:267 +TCTGGCCTCGTCCACACTGGTTCTCTTGAAAGCTT +>EAS1_108:7:266:556:252 +CCCATCTGGCCTCGTCCACACTGGTTCTCTTGAAA +>EAS1_108:7:266:556:252 +GATTTGGTGGAAGACATAATCCCACGCTTCCTATG +>EAS1_108:7:82:926:112 +CAATGTCAGGGAAGGAGCATTTTGTCAGTTGCCAA +>EAS1_108:7:82:926:112 +CTGCTGGCAAGCTAGAGTCCCATTTGGAGCCCCTC +>EAS1_108:8:118:440:850 +AATTGAAAAATTCATTTAAGAAATTACAAAATATA +>EAS1_108:8:129:477:427 +ATGGACCTGTGATATCTGGATTCTGGGAAATTCTT +>EAS1_108:8:129:477:427 +TACACACACATGGTTTAGGGGTATAATACCTCTAC +>EAS1_108:8:19:929:765 +AAAAACATGAACTAACTATATGCTGTTTACAAGAA +>EAS1_108:8:19:929:765 +ATCAACAACAGTAAAATAAAACAAAGGAGGTCATC +>EAS1_93:1:131:946:353 +TCTCTTGAAAGCTTGGGCTGTAATGATGCCCCTTG +>EAS1_93:1:131:946:353 +TGTACACACGCTGTCCTATGTACTTATCATGACTC +>EAS1_93:1:179:629:513 +GTCAACATGAAGGAAAAAAATTCTAAAATCAGCAA +>EAS1_93:1:179:629:513 +GTCACAGGTATTCCTGAGGAAAAAGAAAAAGTGAG +>EAS1_93:1:20:635:509 +CAGCTTAGGTATCAATTTGGTGTTCTGTGTAAAGT +>EAS1_93:1:20:635:509 +TGCATCCCTGTCTTCCTCTGTCTTGATTTACTTGT +>EAS1_93:1:214:784:690 +AAATCCCATCAGAATAACAATGGGCTTCTCAGCGG +>EAS1_93:1:214:784:690 +GATAATTCATCATCACTAAACCAGTCCTATAAGAA +>EAS1_93:1:216:381:608 +TAATTGTGTCCATGTACACTCGCTGTCCTATGTAC +>EAS1_93:1:216:381:608 +TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG +>EAS1_93:1:253:59:242 +CCCCATCTCTTGTAATCTCTCTCCTTTTTGCTGCA +>EAS1_93:1:253:59:242 +TTTGTCTTGACACCCAACTAATATTTGTCTGAGCA +>EAS1_93:1:264:988:663 +CGAGGGGAACAGGGAGGTGCACTAATGCGCTCCAC +>EAS1_93:1:264:988:663 +TGGCTGATTATGAAAACAATGTTCCCCAGATACCA +>EAS1_93:1:92:213:217 +ACAGTCTAGATGAGAGAGAACTTCCCTGGAGGTCT +>EAS1_93:1:92:213:217 +TGCATCCCTGTCTTCCTCTGTCTTGATTTACTTGT +>EAS1_93:2:173:995:93 +GCTGGAGGGAAGAGGGACGCTGAAGAACTTTGATG +>EAS1_93:2:173:995:93 +TAATGAAAACTATATTTATGCTATTCAGTTCTAAA +>EAS1_93:2:286:923:549 +TCAAATGAACTTCTGTAATTGAAAAATTCATTTAA +>EAS1_93:2:30:466:652 +AAAAATGAACAGAGCTTTCAAGAAGTATGAGATTA +>EAS1_93:2:30:466:652 +AAGAGGCTAAAAGAATGCCAGGAAGATACATTGCA +>EAS1_93:2:313:711:530 +ACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTT +>EAS1_93:2:313:711:530 +TAATTGAGACTACAGAGCAACTAGGTAAAAAATTA +>EAS1_93:3:181:93:694 +ACTCATTAATAAAGACATGAGTTCAGGTAAAGGGG +>EAS1_93:3:181:93:694 +TTAATTGAGACTACAGAGCAACTAGGTAAAAAATT +>EAS1_93:3:79:879:15 +AGACTACAGAGCAACTAGGTAAAAAATTAACATTA +>EAS1_93:3:79:879:15 +AGTCAAGTCTTTCCTGACAAGCAAATGCTAAGATA +>EAS1_93:4:160:896:275 +AAAACTATATTTATGCTATTCAGTTCTAAATATAG +>EAS1_93:4:160:896:275 +AGGGAAGAGGGACGCTGAAGAACTTTGATGCCCTC +>EAS1_93:4:321:271:138 +GTGTAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCA +>EAS1_93:4:321:271:138 +TTTGGTGGAAGACATAATCCCACGCTTCCTATGGA +>EAS1_93:4:325:352:67 +ATAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAA +>EAS1_93:4:325:352:67 +TACAGAGCAACTAGGTAAAAAATTAACATTACAAC +>EAS1_93:5:197:52:58 +AAATGAACAGAGCTTTCAAGAAGTATGAGATTATG +>EAS1_93:5:197:52:58 +TCTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGA +>EAS1_93:5:246:177:525 +CATCATAAATACACACAAAAGTAAAAAACTCACAG +>EAS1_93:5:246:177:525 +TCTTAAAGAAAAAAAAACCTGTCAAACACGAATGT +>EAS1_93:5:256:444:399 +CTGCTACTCAATATATCCATGTAACAAATCTGCGC +>EAS1_93:5:256:444:399 +GAAGATATAACCATCCTACTAAATACATATGCACC +>EAS1_93:5:292:122:666 +GGGAAGAACAGCTTAGGTATCAATTTGGTGTTCTG +>EAS1_93:5:292:122:666 +TACTGTCATAACTATGAAGAGACTATTGTCAGATG +>EAS1_93:5:62:969:12 +TATAAAGGAAATCCCATCAGAATAACAATGGGCTT +>EAS1_93:5:62:969:12 +TCTTGCTAGAGATTTAGACATCTAAATGAAAGAGG +>EAS1_93:5:66:372:343 +ATTACAAAATATAGTTGAAAGATCTAACAATAGAC +>EAS1_93:5:66:372:343 +TATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGG +>EAS1_93:6:132:717:233 +AGAGAACTTCCCTGGAGGTCTGATGGAGTTTCTCC +>EAS1_93:6:132:717:233 +TGTTGGTTTTCTGTTTCTTTGTTTGATTTGGTGGA +>EAS1_93:6:159:273:253 +TTAGTCTTGCTAGAGATTTAGACATCTAAATGAAA +>EAS1_93:6:191:948:257 +AACTAATATTTGTCTGAGCAAAACAGTCTAGATGA +>EAS1_93:6:191:948:257 +CTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGAT +>EAS1_93:6:216:47:302 +AAAAAAAAACCTGTCAAACACGAATGTTATGCCCT +>EAS1_93:6:216:47:302 +AATACTCACCATCATAAATACACACAAAAGTACAA +>EAS1_93:6:218:144:794 +GGGTGCATTGCTATGTTGCGGTCGCTTTGCCTCCT +>EAS1_93:6:218:144:794 +TTTTTTTTTTTTTCTTTTCTCTTTTTTTTTTTTTT +>EAS1_93:6:238:514:194 +AAACTATTTGAGGAAGTAATTGGGGAAAACCTCTT +>EAS1_93:6:238:514:194 +AATAGACTAAACCAAGCAGAAGAAAGAGGTTCAGA +>EAS1_93:6:255:441:47 +AACAACAGTAAAATAAAACAAAGGAGGTCATCATA +>EAS1_93:6:255:441:47 +TGGTACAATGTACAATATTCTGATGATGGTTACAC +>EAS1_93:6:271:244:568 +ATGGACCTGTGATATCTGGATTCTGGGAAATTCTT +>EAS1_93:6:271:244:568 +CTTGCAACAACCTTGAGAACCCCAGGGAATTTGTC +>EAS1_93:6:45:601:439 +AATGCTCAAAAGAATTGTAAAAGTCAAAATTAAAG +>EAS1_93:6:45:601:439 +ATAAAAAGGGATTAAATTCCCCCACTTAAGAGATA +>EAS1_93:7:14:426:613 +AGGGAGGGAGGGAAGAGGGACGCTGAAGAACTTTG +>EAS1_93:7:14:426:613 +GTAATGAAAACTATATTTATGCTATTCAGTTCTAA +>EAS1_93:7:252:171:323 +GCTATTCAGTTCTAAATATAGAAATTGAAACAGCT +>EAS1_93:7:270:995:918 +AAAATTCATTTAAGAAATTACAAAATATAGTTGAA +>EAS1_93:7:319:280:57 +AAAGGAAATCCCATCAGAATAACAATGGGCTTCTC +>EAS1_93:7:319:280:57 +TGCTAGAGATTTAGACATCTAAATGAAAGAGGCTC +>EAS1_93:8:13:325:483 +AAAAACATGAACTAACTATATGCTGTTTACAAGAA +>EAS1_93:8:13:325:483 +ATCATACAATGATAAAAAGATCAATTCAGCAAGAA +>EAS1_93:8:14:601:624 +AAAAGGTGATGTGTGTTCTCATCAACCTCATACAC +>EAS1_93:8:14:601:624 +CTGCGCTCTCATTCACTCCAGCTCCCTGTCAACCC +>EAS1_95:1:16:823:343 +AGACATAACCCCACGCTTCCTATGGAAAGGTTGTT +>EAS1_95:1:16:823:343 +TCCCATCTGGCCTCGTCCACACTGGTTCTCTTGAA +>EAS1_95:1:196:533:921 +AAATGTGTTTATTACCAGAGGGATGGAGGGAAGAG +>EAS1_95:1:196:533:921 +CCTGAGAGATTCTGCAGCCCAGATCCAGATTGCTT +>EAS1_95:1:202:341:984 +GGAGGTCATCATACAATGATAAAAAGATCAATTCA +>EAS1_95:1:202:341:984 +TGAACTAACTATATGCTGTTTACAAGAAACTCATT +>EAS1_95:1:249:986:224 +CTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGAT +>EAS1_95:1:249:986:224 +TATTTGTCTGAGCAAAACAGTCTAGATGAGAGAGA +>EAS1_95:1:261:504:780 +TCCCTGTCTTCCTCTGTCTTGATTTACTTGTTGTT +>EAS1_95:1:261:504:780 +TTTGTCTGAGAAAAACAGTCTAGATGAGAGAGAAC +>EAS1_95:1:301:54:240 +AACAGGGAGGTGCACTAATGCGCTCCACGCCCAAG +>EAS1_95:1:301:54:240 +CCCTGCAATTAATATAATTGTGTCCATGTACACAC +>EAS1_95:1:77:589:741 +AGTAAAATAAAACAAAGGAGGTCATCATACAATGA +>EAS1_95:1:77:589:741 +TGGTTACACTAAAAGCCCATACTTTACTGCTACTC +>EAS1_95:2:142:353:398 +CAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAA +>EAS1_95:2:142:353:398 +GGTAAAAAATTAACATTACAACAGGAACAAAACCT +>EAS1_95:2:162:503:769 +AGAGGGACGCTGAAGAACTTTGATGCCCTCTTCTT +>EAS1_95:2:162:503:769 +AGGCTGCAACTGTGAGCCATCACAATGAACAACAG +>EAS1_95:2:198:691:595 +ACACACATGGTTTAGGGGTATAATACCTCTACATG +>EAS1_95:2:198:691:595 +CATGAAGCACTGAACTTCCACGTCTCATCTAGGGG +>EAS1_95:2:211:954:174 +AAAGAAAAAACAAAAACTATGCTAAGTATTGGTAA +>EAS1_95:2:211:954:174 +AGACCTAAGAGGGATGAGAAATTACCTAATTGGTA +>EAS1_95:2:228:915:631 +AAGATATGTAGTCATCAGACTATCTAAAGTCAACA +>EAS1_95:2:228:915:631 +ATTATTAAAGAAAAAAAAACCTGTCAAACACGAAT +>EAS1_95:2:278:918:892 +AGCCCAGCTCCAGATTGCTTGTGGTCTGACAGGCT +>EAS1_95:2:278:918:892 +CCATCCCTGTCTTACTTCCAGCTCCCCAGAGGGAA +>EAS1_95:2:40:918:950 +AATATAATTGTGTCCATGTACACACGCTTTCCTTT +>EAS1_95:2:40:918:950 +GTTCTCTTGAAAGCTTGGGCTGTAATGATGCCCCT +>EAS1_95:3:268:523:511 +ACACTGGTTCTCTTGAAAGCTTGGGCTGTAATGAT +>EAS1_95:3:268:523:511 +TGTCCATGTACACACGCTGTCCTATGTACTTATCA +>EAS1_95:3:303:970:243 +AACCTGTCAAACACGAATGTTATGCCCTGCTAAAC +>EAS1_95:3:303:970:243 +CAGACTTCATCAAGATATGTAGTCATCAGACTATC +>EAS1_95:3:308:956:873 +ATAAAAATAAGTGTGTCCATGTACACACGCTGTCC +>EAS1_95:3:308:956:873 +CTCATCTAGGGGAACAGGGAGGTGCACTAATGCGC +>EAS1_95:4:174:157:573 +CAGAAACCAAATGAGAGAAGGAGTAGCTATACTTA +>EAS1_95:4:174:157:573 +TAAAACAAATACTACTAGACCTAAGAGGGATGAGA +>EAS1_95:4:176:971:874 +TAAAATCAGAAGAGAAAAGCATACAGTCATCTATA +>EAS1_95:4:176:971:874 +TGAGGAAGTAATTGGGGAAAACCTCTTTAGTCTTG +>EAS1_95:4:184:17:636 +TACACACACATGGTTTAGGGGTATAATACCTCTAC +>EAS1_95:4:184:17:636 +TTTTTTTTTTTTTTTTTTTTTTTTTTTTCACAGGT +>EAS1_95:4:224:592:744 +GATATGTAGTCATCAGACTATCTAAAGTCAACATG +>EAS1_95:4:224:592:744 +TATGAGATTATGTAAAGTAACTGAACCTATGAGTC +>EAS1_95:4:238:124:196 +TTTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTTT +>EAS1_95:4:61:631:567 +AAGAAGATATAACCATCCTACTAAATACATATGCA +>EAS1_95:4:61:631:567 +CATTAATAAAGACATGAGTTCAGGTAAAGGGGTGG +>EAS1_95:4:66:179:118 +CCATGTACACACGCTGTCCTATGTACTTATCATGA +>EAS1_95:4:66:179:118 +TGGGCTGTAATGATGCCCCTTGGCCATCACCCAGT +>EAS1_95:4:71:517:742 +AACTATTTGAGGAAGTAATTGGGGAAAACCTCTTT +>EAS1_95:4:71:517:742 +AAGCAGAAGAAAGAGGTTCAGAACTTGAAGACAAG +>EAS1_95:5:257:654:116 +TAACAATAGACTAAACCAAGCAGAAGAAAGAGGTT +>EAS1_95:5:257:654:116 +TCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAA +>EAS1_95:5:263:511:936 +CAAATAGGTAAAAAATTAACATTACAACAGGAACA +>EAS1_95:5:263:511:936 +CAAGTCTTTCCTGACAAGCAAATGCTAAGATAATT +>EAS1_95:5:284:212:932 +CTTTAAATCAACAACAATAAAAAAAAACAAAGGAG +>EAS1_95:5:284:212:932 +TGATGATGGTTACGCTAAAAGTCCATGCTTTACTG +>EAS1_95:6:174:650:125 +AAGCATCATAAATGAAGGGGAAATAAAGTCAAGTC +>EAS1_95:6:174:650:125 +CAGGTTTTATAAAACAATTAATTGAGACTACAGAG +>EAS1_95:6:185:312:167 +CTGAAGAACTTTGATGCCCTCTTCTTCCAAAGATG +>EAS1_95:6:185:312:167 +TGGTCTGACAGGCTGCAACTGTGAGCCATCACAAT +>EAS1_95:6:194:696:490 +ACATTAATACTATGTTTCTTATCTGCACATTACTA +>EAS1_95:6:194:696:490 +TTCCACGTCTCATCTAGGGGAACAGGGAGGTGCAC +>EAS1_95:6:53:156:845 +ACACCCAACTAATATTTGTCTGAGCAAAACAGTCT +>EAS1_95:6:53:156:845 +TTGTAATCTCTCTCCTTTTTGCTGCATCCCTGTCT +>EAS1_95:6:87:734:888 +ATACCATCCCTGTCTTACTTCCAGCTCCCCAGAGG +>EAS1_95:6:87:734:888 +TGCGCTCCACGCCCAAGCCCTTCTCACAGTTTCTG +>EAS1_95:7:155:530:532 +AGCAAGAAGATATAACCATCCTACTAAATACATAT +>EAS1_95:7:155:530:532 +TGCGCTTGTACTTCTAAATCTATAACAAAATTAAA +>EAS1_95:7:280:607:113 +ATCCATGTAACAAATCTGCGCTTGTACTTCTAAAT +>EAS1_95:7:280:607:113 +GGAGTATAAATTGTTTTCCACTTTGGAAAACAATT +>EAS1_95:7:282:817:710 +TGGAGGGAAGAGGGACGCTGAAGAACTTTGATGCC +>EAS1_95:7:282:817:710 +TTTGTAATGAAAACTATATTTATGCTATTCAGTTC +>EAS1_95:7:310:800:761 +AAAGCACACTTTAAATCAACAACAGTAAAATAAAA +>EAS1_95:7:310:800:761 +CAATATTCTGATGATGGTTACACTAAAAGCCCATA +>EAS1_95:7:46:522:426 +AAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGA +>EAS1_95:7:46:522:426 +GGTAAAAAATTAACATTACAACAGGAACAAAACCT +>EAS1_95:7:55:506:125 +CTTTACTGTCATAACTATGAAGAGACTACTGCCAG +>EAS1_95:7:55:506:125 +TCTACCACAGGGGGCTGCGCGGTTTCCCATCATGA +>EAS1_95:7:61:702:720 +ATTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAA +>EAS1_95:7:61:702:720 +CTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTC +>EAS1_95:7:74:866:49 +CATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTC +>EAS1_95:7:74:866:49 +CCAACCTACTAAATACATATGCACCTAACACAAGA +>EAS1_97:2:128:629:484 +AAAAAAGTAAATAAAACACATAGCTAAAACTAAAA +>EAS1_97:2:128:629:484 +GATTCATAAAACAAATACTACTAGACCTAAGAGGG +>EAS1_97:2:193:420:78 +ATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTG +>EAS1_97:2:193:420:78 +TTGAGACTACAGAGCAACTAGGTAAAAAATTAACA +>EAS1_97:2:59:882:980 +AATATAATTGTGTCCATGTACACACGCTGTCCTAT +>EAS1_97:2:59:882:980 +GGGCTGTAATGATGCCCCTTGGCCATCACCCGGTC +>EAS1_97:2:96:419:327 +TACTAAATACATATGCACCTAACACAAGACTACCC +>EAS1_97:2:96:419:327 +TCTAAATCTATAACAAAATTAAAATTTAACAAAAG +>EAS1_97:2:9:203:653 +CACCCAACTAATATTTGTCTGAGCAAAACAGTCTA +>EAS1_97:2:9:203:653 +TCCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTT +>EAS1_97:3:147:423:584 +GAAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAG +>EAS1_97:3:147:423:584 +GCATACAGTCATCTATAAAGGAAATCCCATCAGAA +>EAS1_97:3:160:173:889 +TATGAGTCACAGGTATTCCTGAGGAAAAAGAAAAA +>EAS1_97:3:160:173:889 +TCAAGATATGTAGTCATCAGACTATCTAAAGTCAA +>EAS1_97:3:277:144:848 +TAACAATAGACTAAACCAAGCAGAAGAAAGAGGTT +>EAS1_97:3:277:144:848 +TATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGG +>EAS1_97:3:73:292:429 +GAAAGCTTTCAACGCTTCTAGCCATTTCTTTTTGC +>EAS1_97:3:73:292:429 +TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG +>EAS1_97:4:261:267:597 +GGGTAATAAAGTCAAGTCTTTCCTGACAAGCAAAT +>EAS1_97:4:261:267:597 +TTGAGAATAAAGAGCAACTAGGTAAAAAATTAACA +>EAS1_97:4:274:287:423 +CTAAATCTATAAAAAAATTAAAATTTAACAAAAGT +>EAS1_97:4:274:287:423 +TTTTTTTTTTTTTTTTTCTCTTTTTTTTTTTTTTT +>EAS1_97:4:290:121:79 +ATTGGTAAAGATGTGGGGAAAAAAGTAAACTCTCA +>EAS1_97:4:290:121:79 +TGATGATGGTTACACTAAAAGCCCATACTTTACTG +>EAS1_97:4:77:29:126 +ACAGGGAATTTGTCAATGTCAGGGAAGGAGCATTT +>EAS1_97:4:77:29:126 +GCACAGGGGCTTAACCTCTGGTGACTGCCAGAGCT +>EAS1_97:4:83:731:540 +CTAGGTAAAAAATTAACATTACAACAGGAACAAAA +>EAS1_97:4:83:731:540 +TAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAG +>EAS1_97:5:154:952:558 +AAAGACTACCCAGATTCATAAAACAAATACTACTA +>EAS1_97:5:154:952:558 +GCAAACAGAAACCAAATGAGAGAAGGAGTAGCTAT +>EAS1_97:5:219:174:684 +AAAAAAACTGTCAAACACGAATGTTATGCCCTGCT +>EAS1_97:5:219:174:684 +AGTCATCAGACTATCTAAAGTCAACATGAAGGAAA +>EAS1_97:5:28:538:148 +AAAAAAAAACCTGTCAAACACGAATGTTATGCCCT +>EAS1_97:5:28:538:148 +TCATCAAGATATGTAGTCATCAGACTATCTAAAGT +>EAS1_97:5:318:177:383 +TACTACCCTGCAATTAATATAATTGTGTCCATGTA +>EAS1_97:5:318:177:383 +TCTTGAAAGCTTGGGCTGTAATGATGCCCCTTGGC +>EAS1_97:5:84:927:843 +CCAGCATGGTTGTACTGGGCAATACATGAGATTAT +>EAS1_97:5:84:927:843 +TTACGTCCTATCTTCTTCTTAGGGAAGAACAGCTT +>EAS1_97:6:222:305:337 +TTTTTTTTTTTTTTTTTTCCCTTTTTTTTTTTTTT +>EAS1_97:6:308:667:658 +AAAGATCACTTCAGCAATAAGATATAACCATCCTA +>EAS1_97:6:308:667:658 +TAAAAACATGAACTAACTATATCCTTCTTACAATA +>EAS1_97:6:93:334:858 +CTGCCCCCAGCATGGTTGTACTTGGCAATACATGA +>EAS1_97:6:93:334:858 +GTACTTATCATGACTCTATCCCAAATTCCCAATTA +>EAS1_97:7:20:979:96 +GAAATTGAAACAGCTGTGTTTAGTGCCTTTGTTCA +>EAS1_97:7:264:642:506 +AAATATAGAAATTGAAACAGCTGTGTTTATTGTAT +>EAS1_97:7:264:642:506 +ACTTCATCCAAAGATGAAACGCGTAACTGCGCTCT +>EAS1_97:7:28:979:519 +AAAAAGTAAACTCTCAAATATTGCTAGTGGGAGTA +>EAS1_97:7:28:979:519 +CCCATACTTTACTGCTACTCAATATATCCATGTAA +>EAS1_97:7:63:727:203 +AAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAGA +>EAS1_97:7:63:727:203 +AGTCTCTTATGAATTAACCCAGTCAGACAAAAATA +>EAS1_97:7:9:648:712 +AAGAAGTATGAGATTATGTAAAGTAACTGAACCTA +>EAS1_97:7:9:648:712 +TACATTGCAAGACAGACTTCATCAAGATATGTAGT +>EAS1_97:8:36:927:478 +AAAAGGTCTTTCAAAAGGTGATGTGTGTTCTCATC +>EAS1_97:8:36:927:478 +GACCCTACACGAATGCGTCTCTACCACAGGGGGCT +>EAS1_99:1:17:595:863 +AAGCTACTCAATATATCCATGTAACAAATCTGCGC +>EAS1_99:1:17:595:863 +ATAACCATCCTACTAAATACACATGCACCTAACTC +>EAS1_99:1:187:715:521 +AAACCTCTTTAGTCTTGCTAGAGATTTAGACATCT +>EAS1_99:1:187:715:521 +GCATACAGTCATCTATAAAGGAAATCCCATCAGAA +>EAS1_99:1:34:649:318 +AAGAATAACAATGGGCTTCACAGCGGAACCCTTAC +>EAS1_99:1:34:649:318 +ATGAAAGAGGCTCAAAGAATGCCAGGAAGATACAT +>EAS1_99:1:86:871:319 +GGCTTCTCAGCGGAAACCTTACAAGCCAGAAGAGA +>EAS1_99:1:86:871:319 +TGCTAAGATAATTCATCATCACTAAACCAGTCCTA +>EAS1_99:2:152:355:962 +CAGTCATCTATAAAGGAAATCCCATCAGAATAACA +>EAS1_99:2:152:355:962 +TATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT +>EAS1_99:2:162:257:203 +AAAAAGATCAATTCAGCAAGAAGATATAACCATCC +>EAS1_99:2:162:257:203 +ATATCCATGTAACAAATCTGCGCTTGTACTTCTAA +>EAS1_99:2:188:782:483 +CTAAAATCAGCAAGAGAAAAGCATACAGTCATCTA +>EAS1_99:2:188:782:483 +GAAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAG +>EAS1_99:3:118:851:285 +CCCAATTACGTCCTATCTTCTTCTTAGGGAAGAAC +>EAS1_99:3:118:851:285 +TGGGCAATACATGAGATTATTAGGAAATGCTTTAC +>EAS1_99:3:135:543:760 +ATTTGCCTTCAGACCCTACACGAATGCGTCTCTAC +>EAS1_99:3:135:543:760 +TTCAAAAGGTGATGTGTGTTCTCATCAACCTCATA +>EAS1_99:3:187:791:153 +AATACATGAGATTATTAGGAAATGCTTTACTGTCA +>EAS1_99:3:187:791:153 +TACACGAATGCGTCTCTACCACAGGGGGCTGCGCG +>EAS1_99:3:21:423:169 +ACTAAAAGCCCATACTTTACTGCTACTCAATATAT +>EAS1_99:3:21:423:169 +GGAGTATAAATTGTTTTCCACTTTGGAAAACAATT +>EAS1_99:3:61:183:767 +GTAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCATC +>EAS1_99:3:61:183:767 +TTGCCAGATGAACCACACCTTAATACTATGTTTCT +>EAS1_99:5:147:479:41 +CTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTT +>EAS1_99:5:147:479:41 +TACGTCCTATCTTCTTCTTAGGGAAGAACAGCTTA +>EAS1_99:5:191:885:623 +TGCAAGACAGACTTCATCAAGATATGTAGTCATCA +>EAS1_99:5:191:885:623 +TTAAAGAAAAAAAAACCTGTCAAACACGAATGTTA +>EAS1_99:6:135:354:66 +GATACATTGCAAGACAGACTTCATCAAGATATGTA +>EAS1_99:6:135:354:66 +TATGAGATTATGTAAAGTAACTGAACCTATGAGTC +>EAS1_99:6:177:562:806 +ACAGTGTAGATGAGAGAGACCTTCCCTGGAGGTCT +>EAS1_99:6:177:562:806 +TGATTTACTTGTTGTTGGTTTTCTGTTTCTTTTTT +>EAS1_99:6:181:392:500 +GGAAATCCCATCAGAATAACAATGGGCTTCTCAGC +>EAS1_99:6:181:392:500 +TTAGTCTTGCTAGAGATTTAGACATCTAAATGAAA +>EAS1_99:6:63:48:631 +CAATACATGAGATTATTAGGAAATGCTTTACTGTC +>EAS1_99:6:63:48:631 +TCCTATCTTCTTCTTAGGGAAGAACAGCTTAGGTA +>EAS1_99:7:126:361:250 +AAAAAATTAACATTACAACAGGAACAAAACCTCAT +>EAS1_99:7:126:361:250 +TCTACGCAAACAGAAACCAAATGAGAGAAGGAGTA +>EAS1_99:7:171:196:287 +ATAACAATGGGCTTCTCAGCAGAAACCTTACAAGC +>EAS1_99:7:171:196:287 +ATAATTCATCATCACTAAACCAGTCCTATAAGAAA +>EAS1_99:7:183:645:699 +GTGGCCCTCCCCCATTCCCTGCCCCATCTCTTGTA +>EAS1_99:7:183:645:699 +TATCCCAAATTCCCAATTACGTCCTATCTTCTTCT +>EAS1_99:7:37:400:627 +ACATGAGATTATTAGGAAATGCTTTACTGTCATAA +>EAS1_99:7:37:400:627 +TCTTAGGGAAGAACAGCTTAGGTATCAATTTGGTG +>EAS1_99:8:117:578:853 +AATGAACTTCTGTAATTGAAAAATTCATTTAAGAA +>EAS1_99:8:152:778:228 +ATCATAAATACACACAAAAGTACAAAACTCACAGG +>EAS1_99:8:152:778:228 +ATTTAAAAACATGAACTAACTATATGCTGTTTACA +>EAS1_99:8:187:199:369 +TGAAAGAGGCTCAAAGAATGCCAGGAAGATACATT +>EAS1_99:8:27:228:31 +AAATAAAACAAAGGAGGTCATCATACAATGATAAA +>EAS1_99:8:27:228:31 +GGTTACACTAAAAGCCCATACTTTACTGCTACTCA +>EAS1_99:8:99:756:130 +GAAGAAAAGGTCTTTCAAAAGGTGATGTGTGTTCT +>EAS1_99:8:99:756:130 +GACCCTACACGAATGCGTCTCTACCACAGGGGGCT +>EAS218_1:2:10:686:1024 +ACAAGAAACTCATTAATAAAGACATGAGTTCAGGT +>EAS218_1:2:10:686:1024 +CATACAATGATAAAAAGATCAATTCAGCAAGAAGA +>EAS218_1:2:15:1763:1143 +AAACAAATACTACTAGACCTAAGAGGGATGAGAAA +>EAS218_1:2:15:1763:1143 +TGAGAGAAGGAGTAGCTATACTTATATCAGATAAA +>EAS218_1:2:18:1498:1475 +CTTGGGCTGTAATGATGCCCCTTGGCCATCACCCG +>EAS218_1:2:18:1498:1475 +GAAAGGTTGTTGGGAGATTTTTAATGATTCCTCAA +>EAS218_1:2:19:752:816 +CGTCCGTGTCCTCCCATCTGGCCTCGTCCACACTG +>EAS218_1:2:19:752:816 +TTTGGTGGAAGACATAATCCCACGCTTCCTATGGA +>EAS218_1:2:26:211:481 +ACAAAATATAGTTGAAAGCTCTAACAATAGACTAA +>EAS218_1:2:26:211:481 +CACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAA +>EAS218_1:2:40:1291:1045 +CTAACACAAGACTACCCAGATTCATAAAACAAATA +>EAS218_1:2:40:1291:1045 +GTAAAGGGGTGGAAAAAGATGTTCTACGCAACAAG +>EAS218_1:2:64:1318:1711 +GGAAGAGGGACGCTGAAGAACTTTGATGCCCTCTT +>EAS218_1:2:64:1318:1711 +TGAAAACTATATTTATGCTATTCAGTTCTAAATAT +>EAS218_1:4:14:1872:1521 +TCAAAGAATGCCAGGAAGATACATTGCAAGTCAGA +>EAS218_1:4:14:1872:1521 +TCATCAAAAACCTTACAAGCCAGAAGAGATTGGAT +>EAS218_1:4:15:856:340 +CACGCTGTCCTATGTACTTATCATGACTCTATCCC +>EAS218_1:4:15:856:340 +CCCCAGCATGGTTGCACTGGGCAATACATGAGATT +>EAS218_1:4:28:315:310 +AAACTGTTCTCTTGAAAGCTTGGGCTGTAATGATG +>EAS218_1:4:28:315:310 +CATGTACACACGCTGTCCTATGTACTTATCATGAC +>EAS218_1:4:37:1626:862 +ACCCAACTAATATTTGTCTGAGCAAAACAGTCTAG +>EAS218_1:4:37:1626:862 +TCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCT +>EAS218_1:4:61:1369:440 +AAAGACATGATTTCAGGTAAAGGGGTGGAAAAAGA +>EAS218_1:4:61:1369:440 +CAGGTTTTATAAAACAATTAATTGAGACTACAGAG +>EAS218_1:4:62:561:531 +AGCTATACTTATATCAGATAAAGCACACTTTAAAT +>EAS218_1:4:62:561:531 +TACTAGACCTAAGAGGGATGAGAAATTACCTAATT +>EAS218_1:4:71:832:743 +ACCCAGTCCCTGCCCCATCTCTTGTAATCTCTCTC +>EAS218_1:4:71:832:743 +CTATGTACTTATCATGACTCTATCCCAAATTCCCA +>EAS218_1:4:73:42:1038 +AAACAGTCTAGATGAGAGAGAACTTCCCTGGAGGT +>EAS218_1:4:73:42:1038 +TCTGTCTTGATTTACTTGTTGTTGGTTTTCTGTTT +>EAS218_1:4:75:555:1591 +TGAACTTCTGTAATTGAAAAATTCATTTAAGAAAT +>EAS218_1:6:49:905:27 +CCACAGGGGGCTGCGCGGTTTCCCATCCTGAAGCA +>EAS218_1:6:49:905:27 +GAAGAGACTATTGCCAGTTGAACCACACATTAATA +>EAS218_1:6:66:1282:1215 +GTGATGTGTGTTCTCATCAACCTCATACACACACA +>EAS218_1:6:66:1282:1215 +TTCAGACCCTACACGAATGCGTCTCTACCACAGGG +>EAS218_1:6:77:1529:522 +AAAACCTGTCAAACACGAATGTTATGCCCTGCTAA +>EAS218_1:6:77:1529:522 +AAAGTTCAATACTCACCATCATAAATACACACAAA +>EAS218_1:6:88:1413:14 +AATGAAAGAGGCTCAAAGAATGCCAGGAAGATACA +>EAS218_1:8:13:1729:1844 +ATGAACTTCTGTAATTGAAAAATTCATTTAAGAAA +>EAS218_1:8:16:1081:1894 +AAGGTGATGTGTGTTCTCATCAACCTCATACACAC +>EAS218_1:8:16:1081:1894 +AGATGAAACGCGTAACTGGGCTCTCATTCACTCCA +>EAS218_1:8:26:785:882 +CAGTTTCTGCCCCAAGCATGGTTGTACTGGGCAAT +>EAS218_1:8:26:785:882 +TACTTATCATGACTCTATCCCAAATTCCCAATTAC +>EAS218_1:8:61:1797:113 +CAGATAGCTTGTGGTCTGACAGGCTGCAACTGTGA +>EAS218_1:8:61:1797:113 +GGGATGGAGGGAAGAGGGACGCTGAAGAACTTTGA +>EAS218_1:8:70:445:1289 +CTAATTTTTGGACTTCTTAAAGAAAAAAAAACCTG +>EAS218_1:8:70:445:1289 +GAATTGTAAAAGTCAAAATTAAAGTTCAATACTCA +>EAS218_1:8:82:1540:77 +ATTGAGACTACAGAGCAACTAGGTAAAAAATTAAC +>EAS218_1:8:82:1540:77 +GAAATAAAGTCAAGTCTTTCCTGACAAGCAAATGC +>EAS218_1:8:90:706:1276 +AATTAACATTACAACAGGAACAAAACCTCATATAT +>EAS218_1:8:90:706:1276 +GTAAAGGGGTGGAAAAAGATGTTCTACGCAAACAG +>EAS218_4:1:34:1614:558 +CAACATGAAGGAAAAAAATTCTAAAATCAGCAAGA +>EAS218_4:1:34:1614:558 +GTCAAACACGAATGTTATGCCCTGCTAAACTAAGC +>EAS218_4:1:48:9:409 +CAGCTCCCTGTCACCCAATGGACCTGTGATATCTG +>EAS218_4:1:48:9:409 +GTTTAGTGCCTTTGTTCACATAGACCCCCTTGCAA +>EAS218_4:1:84:1505:1037 +GTCAACATGAAGGAAAAAAATTCTAAAATCAGCAA +>EAS218_4:1:84:1505:1037 +TGCCCTGCTAAACTAAGCATCATAAATGAAGGGGA +>EAS218_4:1:9:206:901 +AGTCTAGATGAGAGAGAACTTCCCTGGAGGTCTGA +>EAS218_4:1:9:206:901 +CTTCCTCTGTCTTGATTTACTTGTTGTTGGTTTTC +>EAS218_4:3:12:630:707 +ATTTAAAAACATGAACTAACTATATGCTGTTTACA +>EAS218_4:3:12:630:707 +CACAAAAGTACAAAACTCACAGGTTTTATAAAACA +>EAS218_4:3:39:1671:1928 +AGCCCATACTTTACTGCTACTCAATATATCCATGT +>EAS218_4:3:39:1671:1928 +CAAATATTGCTAGTGGGAGTATAAATTGTTTTCCA +>EAS218_4:3:41:1281:1785 +ACTATCTAAAGTCAACATGAAGGAAAAAAATTCTA +>EAS218_4:3:41:1281:1785 +GGAAAAAGAAAAAGTGAGAAGTTTGGAAAAACTAT +>EAS218_4:3:65:85:1547 +AAATCAGCAAGAGAAAAGCATACAGTCATCTATAA +>EAS218_4:3:65:85:1547 +GTTTGGAAAAACTATTTGAGGAAGTAATTGGGGAA +>EAS218_4:5:41:118:1246 +ACCAGAGGGATGGAGGGAAGAGGGACGCTGAAGAA +>EAS218_4:5:41:118:1246 +CTCCAGATTGCTTGTGGTCTGACAGGCTGCAACTG +>EAS218_4:5:63:875:1339 +CCCCAGATACCATCCCTGTCTTACTTCCAGCTCCC +>EAS218_4:5:63:875:1339 +GGGAACAGGGAGGTGCACTAATGCGCTCCACGCCC +>EAS218_4:7:71:31:1973 +AAAGAGGCTCAAAGAATGCCAGGAAGATACATTGC +>EAS218_4:7:72:1288:1211 +ATTGGTACAATGTACAATATTCTGATGATGGTTAC +>EAS218_4:7:72:1288:1211 +GATAAAGCACACTTTAAATCAACAACAGTAAAATA +>EAS218_4:7:85:923:726 +ACAAAATATAGTTGAAAGCTCTAACAATAGACTAA +>EAS218_4:7:85:923:726 +GTAAAGTAACTGAACCTATGAGTCACAGGTATTCC +>EAS218_4:7:87:964:826 +CACAGGGGGCTGCGCGGTTTCCCATCATGAAGCAC +>EAS218_4:7:87:964:826 +TGAAGAGACTATTGCCAGATGAACCACACATTAAT +>EAS218_4:7:89:1487:520 +CACGAATGCGTCTCTACCACAGGGGGCTGCGCGGT +>EAS218_4:7:89:1487:520 +TATGAAGAGACTATTGCCAGATGAACCACACATTA +>EAS218_4:7:90:1873:89 +GAGATTCTGCAGCCCAGATCCAGATTGCTTGTGGT +>EAS218_4:7:90:1873:89 +GCATTTTGTCAGTTACCAAATGTGTTTATTACCAG +>EAS219_1:1:22:490:2011 +ATAACAATGGGCTTCTCAGCGGAAACCTTACAAGC +>EAS219_1:1:22:490:2011 +GCTAGAGATTTAGACATCTAAATGAAAGAGGCTCA +>EAS219_1:1:37:1004:1136 +CCAGGGAATTTGTCAATGTCAGGGAAGGAGCATTT +>EAS219_1:1:37:1004:1136 +GTCACCCAATGGACCTGTGATATCTGGATTCTGGG +>EAS219_1:1:44:1466:425 +GTCCGTGTCCTCCCATCTGGCCTCGTCCACACTGG +>EAS219_1:1:44:1466:425 +TTATCTGCACATTACTACCCTGCAATTAATATAAT +>EAS219_1:1:50:257:341 +AAATTAACATTACAACAGGAACAAAACCTCATATA +>EAS219_1:1:50:257:341 +TGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCTA +>EAS219_1:1:5:497:687 +AAGAAAAGGTCTTTCAAAAGGTGATGTGTGTTCTC +>EAS219_1:1:5:497:687 +TTGCCTTCAGACCCTACACGAATGCGTCTCTACCA +>EAS219_1:1:60:1420:660 +AATGCTAAGATAATTCATCATCACTAAACCAGTCC +>EAS219_1:1:60:1420:660 +GTAAAAAATTAACATTACAACAGGAACAAAACCTC +>EAS219_1:1:63:28:1549 +AAAAAGTAAACTCTCAAATATTGCTAGTGGGAGTA +>EAS219_1:1:63:28:1549 +TACAATATTCTGATGATGGTTACACTAAAAGCCCA +>EAS219_1:1:67:191:668 +ACTATGAAGAGACTATTGCCAGATGAACCACACCT +>EAS219_1:1:67:191:668 +CCAATTACGTCCTATCTTCTTCTTAGGGAAGAACA +>EAS219_1:3:11:706:1030 +ATCTCTTGTAATCTCTCTCATCTTTGCTGCATCCC +>EAS219_1:3:11:706:1030 +ATGTCTATTTTTGTCTTGACACCCAACTAATATTT +>EAS219_1:3:33:1168:1762 +AGATTGCTTGTGGTCTGACAGGCTGCAACTGTGAG +>EAS219_1:3:33:1168:1762 +GTCTTACTTCCAGCTCCCCAGAGGGAAAGCTTTCA +>EAS219_1:3:4:1620:413 +CATCACAATGAACAACAGGAAGAAAAGGTCTTTCA +>EAS219_1:3:4:1620:413 +TCTAGCCATTTCTTTTGGCATTTGCCTTCAGACCC +>EAS219_1:3:62:603:1552 +AATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGT +>EAS219_1:3:62:603:1552 +GAACCACACATTAATACTATGTTTCTTATCTGCAC +>EAS219_1:3:88:465:1877 +AAAGCACACTTTAAATCAACAACAGTAAAATAAAA +>EAS219_1:3:88:465:1877 +TAAGAGGGATGAGAAATTACCTAATTGGTACAATG +>EAS219_1:3:90:219:528 +ACGAATGTTATGCCCTGCTAAACTAAGCATCATAA +>EAS219_1:3:90:219:528 +GTACAAAACTCACAGGTTTTATAAAACAATTAATT +>EAS219_1:5:5:259:250 +GTCTCTTATGAATTAACCCAGTCAGACAAAAATAA +>EAS219_1:5:5:259:250 +TATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT +>EAS219_1:5:6:1067:91 +CTTGACACCCAACTAATATTTGTCTGAGCAAAACA +>EAS219_1:5:6:1067:91 +CTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGAT +>EAS219_1:7:16:1343:1621 +AAATTCTAAAATCAGCAAGAGAAAAGCATACAGTC +>EAS219_1:7:16:1343:1621 +AAGTGAGAAGTTTGGAAAAACTATTTGAGGAAGTA +>EAS219_1:7:18:571:1110 +GAGGTGCACTAATGCGCTCCACGCCCAAGCCCTTC +>EAS219_1:7:18:571:1110 +TAATATAATTGTGTCCATGTACACACGCTGTCCTA +>EAS219_1:7:20:1444:328 +AAAAGATGTTCTACGCAAACAGAAACCAAATGAGA +>EAS219_1:7:20:1444:328 +TACTAAATACATATGCACCTAACACAAGACTACCC +>EAS219_1:7:35:392:2042 +ATAAATCTATAAAAAAATTAAAATTTAACAAAAGT +>EAS219_1:7:35:392:2042 +TAACACAAGACTACCCAGATTCATAAAACNAATAC +>EAS219_1:7:50:1339:1154 +CATCTCTTGTAATCTCTCTCCTTTTTGCTGCATCC +>EAS219_1:7:50:1339:1154 +GTCTTGACACCCAACTAATATTTGTCTGAGCAAAA +>EAS219_1:7:62:1076:540 +CCCCCACTTAAGAGATATAGATTGGCAGAACAGAT +>EAS219_1:7:62:1076:540 +TAAATCAACAACAGTAAAATAAAACAAAGGAGGTC +>EAS219_1:7:94:1655:1921 +AAAAGCATACAGTCATCTATAAAGGAAATCCCATC +>EAS219_1:7:94:1655:1921 +TTTGGAAAAACTATTTGAGGAAGTAATTGGGGAAA +>EAS219_FC30151:1:18:1418:237 +CCTTGAGAACCCCAGGGAATTTGTCAATGTCAGGG +>EAS219_FC30151:1:18:1418:237 +CTGGGAAATTCTTCATCCTGGACCCTGAGAGATTC +>EAS219_FC30151:1:53:140:421 +AACCAAATGAGAGAAGGAGTAGCTATACTTATATC +>EAS219_FC30151:1:53:140:421 +GATTCATAAAACAAATACTACTAGACCTAAGAGGG +>EAS219_FC30151:1:54:436:1452 +AAGACAAGTCTCTTATGAATTAACCCAGTCAGACA +>EAS219_FC30151:1:54:436:1452 +AGGAAGTAATTGGGGAAAACCTCTTTAGTCTTGCT +>EAS219_FC30151:1:55:8:1412 +ATATAATTGTGTCCATGTACACACGCTGTCCTATG +>EAS219_FC30151:1:55:8:1412 +GCCCAAGCCCTTCTCACAGTTTCTGCCCCCAGCAT +>EAS219_FC30151:1:76:34:691 +ATATATCAATATTAACTTTGAATAAAAAGGGATTA +>EAS219_FC30151:1:88:1454:418 +CCAGGAAGATACATTGCAAGACAGACTTCATCAAG +>EAS219_FC30151:1:88:1454:418 +GAAGAGATTGGATCTAATTTTTGGACTTCTTAAAG +>EAS219_FC30151:3:13:674:1717 +AGAAAAGCATGCAGTCATCTATAAAGGAAATCCCA +>EAS219_FC30151:3:13:674:1717 +TAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAG +>EAS219_FC30151:3:40:1128:1940 +CCCCTTACAACAACCTTGAGAACCCCAGGGAATTT +>EAS219_FC30151:3:40:1128:1940 +CCGAGTCACGGGGTTGCCAGCACAGGGGCTTAACC +>EAS219_FC30151:3:55:74:1040 +CTACCACAGGGGGCTGCGCGGTTTCCCATCATGAA +>EAS219_FC30151:3:55:74:1040 +GGAAATGCTTTACTGTCATAACTATGAAGAGACTA +>EAS219_FC30151:3:73:1458:1337 +AAATGAAGGGGAAATAAAGTCAAGTCTTTCCTGAC +>EAS219_FC30151:3:73:1458:1337 +AGGTAAAAAATTAACATTACAACAGGAACAAAACC +>EAS219_FC30151:3:81:1723:1820 +ATGAGAGAGAACTTCCCTGGAGGTCTGATGGCGTT +>EAS219_FC30151:3:81:1723:1820 +CATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTG +>EAS219_FC30151:3:90:1906:1528 +CACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAA +>EAS219_FC30151:3:90:1906:1528 +TTACAAAATATAGTTGAAAGCTCTAACAATAGACT +>EAS219_FC30151:3:9:1595:1826 +ACTAATATTTGTCTGAGCAAAACAGTCTAGATGAG +>EAS219_FC30151:3:9:1595:1826 +ATCTCTCTCCTTTTTGCTGCATCCCTGTCTTCCTC +>EAS219_FC30151:5:29:817:854 +AGGGGCTTAACCTCTGGTGACTGCCAGAGCTGCTG +>EAS219_FC30151:5:29:817:854 +GTTCTCAAGGTTGTTGCAAGGGGGTTTATGTGAAC +>EAS219_FC30151:5:54:1351:910 +ACTAAAAGCCCATACTTTACTGCTACTCAATATAT +>EAS219_FC30151:5:54:1351:910 +ACTCTCAAATATTGCTAGTGGGAGTATAAATTGTT +>EAS219_FC30151:5:63:424:1643 +GACCCTACACGAATGCGTCTCTACCACAGGGGGCT +>EAS219_FC30151:5:63:424:1643 +GGTCTTTCAAAAGGTGATGTGTGTTCTCATCAACC +>EAS219_FC30151:5:6:1243:981 +ATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAA +>EAS219_FC30151:5:6:1243:981 +TTACCTAGTTGCTCTGTAGTCTCAATTAATTGTTT +>EAS219_FC30151:5:70:348:972 +GAGAGAACTTCCCTGGAGGTCTGATGGCGTTTCTC +>EAS219_FC30151:5:70:348:972 +TCTTCCTCTGTCTTGATTTACTTGTTGTTGGTTTT +>EAS219_FC30151:5:72:1426:1883 +ACATAATCCCACGCTTCCTATGGAAAGGTTGTTGG +>EAS219_FC30151:5:72:1426:1883 +CATCTGGCCTCGTCCACACTGGTTCTCTTGAAAGC +>EAS219_FC30151:7:11:1261:1200 +AAAAAAAACCTGTCAAACACGAATGTTATGCCCTG +>EAS219_FC30151:7:11:1261:1200 +TTGCAAGACAGACTTCATCAAGTTATGTAGTCATC +>EAS219_FC30151:7:51:1429:1043 +TATTTGTAATGAAAACTATATTTATGCTATTCAGT +>EAS219_FC30151:7:87:1289:83 +ACATGAAGGAAAAAAATTCTAAAATCAGCAAGAGA +>EAS219_FC30151:7:87:1289:83 +ATGCCCTGCTAAACTAAGCATCATAAATGAAGGGG +>EAS219_FC30151:7:94:1440:2016 +AACCTGTCAAACACGAATGTTATGCCCTGCTAAAC +>EAS219_FC30151:7:94:1440:2016 +CACAAAAGTACAAAACTCACAGGTTTTATAAAACA +>EAS220_1:2:11:1274:1230 +TGAGCAAAACAGTCTAGATGAGAGAGAACTTCCCT +>EAS220_1:2:11:1274:1230 +TTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTT +>EAS220_1:2:43:656:1866 +TGAACTTCTGTAATTGAAAAATTCATTTAAGAAAT +>EAS220_1:2:47:591:698 +CAAATCTGCGCTTGTACTTCTAAATCTATAACAAA +>EAS220_1:2:47:591:698 +TCCTACTAAATACATATGCACCTAACACAAGACTA +>EAS220_1:2:50:513:882 +AAAACAAATACTACTAGACCTAAGAGGGATGAGAA +>EAS220_1:2:50:513:882 +GGAGTAGCTATACTTATATCAGATAAAGCACACTT +>EAS220_1:2:52:1779:1664 +CCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTG +>EAS220_1:2:52:1779:1664 +TGTTAAAATGTCTATTTTTGTCTTGACACCCAACT +>EAS220_1:2:54:91:1232 +AAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAG +>EAS220_1:2:54:91:1232 +AAAGCTCTAACAATAGACTAAACCAAGCAGAAGAA +>EAS220_1:2:62:1109:804 +TAGAGTCCCATTTGGAGCCCCTCTAAGCCGTTCTA +>EAS220_1:2:62:1109:804 +TGTCAGTTACCAAATGTGTTTATTACCAGAGGGAT +>EAS220_1:2:63:267:545 +ATGAGAGAGAACTTCCCTGGAGGTCTGATGGCGTT +>EAS220_1:2:63:267:545 +CTTGATTTACTTGTTGTTGGTTTTCTGTTTCTTTG +>EAS220_1:2:72:1809:1398 +AATACATGAGATTATTAGGAAATGCTTTACTGTCA +>EAS220_1:2:72:1809:1398 +CTATCTTCTTCTTAGGGAAGAACAGCTTAGGTATC +>EAS220_1:4:100:20:1199 +AAGGGGAAATAAAGTCAAGTCTTTCCTGACAAGCA +>EAS220_1:4:100:20:1199 +CAGTCATCTATAAAGGAAATCCCATCAGAATAACA +>EAS220_1:4:14:1665:1772 +GGGCTGTAATGATGCCCCTTGGCCATCACCCGGTC +>EAS220_1:4:14:1665:1772 +TATAATGGTGTCCATGTACACACGCTGTCCTATGT +>EAS220_1:4:46:1566:668 +CTACTAAATACATATGCACCTAACACAAGACTACC +>EAS220_1:4:46:1566:668 +TTAATAAAGACATGAGTTCAGGTAAAGGGGTGGAA +>EAS220_1:4:69:88:1154 +ATAACTATGAAGAGACTATTGCCAGATGAACCACA +>EAS220_1:4:69:88:1154 +CACGAATGCGTCTCTACCACAGGCGGCTGCGCGGT +>EAS220_1:4:6:1178:1105 +GATAATTCATCATCACTAAACCAGTCCTATAAGAA +>EAS220_1:4:6:1178:1105 +GGAACAAAACCTCATATATCAATATTAACTTTGAA +>EAS220_1:4:70:766:2016 +AAAAAAATTCTAAAATCAGCAAGAGAAAAGCATAC +>EAS220_1:4:70:766:2016 +ATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTG +>EAS220_1:6:24:105:1046 +AGATTCATAAAACAAATACTACTAGACCTAAGAGG +>EAS220_1:6:24:105:1046 +CATAGCTAAAACTAAAAAAGCAAAAACAAAAACTA +>EAS220_1:6:7:1547:1933 +AATATTTGACTGAGCAAAACAGTCTAGATGAGAGA +>EAS220_1:6:7:1547:1933 +CTCTTGTAATCTCTCTCCTTTTTGCTGCATCCCTG +>EAS220_1:8:18:1757:95 +ATGAGTCGCAGGTATTCCTGAGGAAAAAGAAAAAG +>EAS220_1:8:18:1757:95 +CTTCATCAAGATATGTAGTCATCAGACTATCTAAA +>EAS220_1:8:33:672:473 +ATGTCAGGGAAGGAGCATTTTGTCAGTTACCAAAT +>EAS220_1:8:33:672:473 +TCATCCTGGACCCTGAGAGATTCTGCAGCCCAGCT +>EAS220_1:8:38:1576:1923 +CACAGGGGGCTGCGCGGTTTCCCATCATGAAGCAC +>EAS220_1:8:38:1576:1923 +CTGTCATAACTATGAAGAGACTATTGCCAGATGAA +>EAS220_1:8:45:178:1321 +AGGTTTTATAAAACAATTAATTGAGACTACAGAGC +>EAS220_1:8:45:178:1321 +CATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCT +>EAS220_1:8:46:1528:799 +ATGATAAAAAGATCAATTCAGCAAGAAGATATAAC +>EAS220_1:8:46:1528:799 +CATGTAACAAATCTGCGCTTGTACTTCTAAATCTA +>EAS220_1:8:46:485:482 +AGAGATTCTGCAGCCCAGATCCAGATTGCTTGTGG +>EAS220_1:8:46:485:482 +ATTACCAGAGGGATGAAGGGAAGAGGGACGCTGAA +>EAS220_1:8:5:996:2000 +AGTCAACATGAAGGAAAAAAATTCTAAAATCAGCA +>EAS220_1:8:5:996:2000 +CACGAATGTTATGCCCTGCTAAACTAAGCATCATA +>EAS220_1:8:66:1046:167 +ACAATGTACAATATTCTGATGATGGTTACACTAAA +>EAS220_1:8:66:1046:167 +ACACTTTAAATCAACAACAGTAAAATAAAACAAAG +>EAS220_1:8:83:1456:1854 +AAGATCAATTCAGCAAGAAGATATAACCATCCTAC +>EAS220_1:8:83:1456:1854 +AAGCCCATACTTTACTGCTACTCAATATATCCATG +>EAS221_1:2:23:127:880 +CGGAAACCTTACAAGCCAGAAGAGATTGGATCTAA +>EAS221_1:2:23:127:880 +TAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAAT +>EAS221_1:2:24:1037:84 +TGCCCTCTTCTTCCAAAGATGAAACGCGTAACTGC +>EAS221_1:2:24:1037:84 +TTCAGTTCTAAATATAGAAATTGAAACAGCTGTGT +>EAS221_1:2:29:1486:672 +AATTGAAACAGCTGTGTTTAGTGCCTTTGTTCACA +>EAS221_1:2:3:542:428 +AAGACATGAGTTCAGGTACAGGGGTGGAAAAAGAT +>EAS221_1:2:3:542:428 +AGAGCAACTAGGTAAAAAATTAACATTACAACAGG +>EAS221_1:2:3:945:2005 +AACCAAGCAGAAGAAAGAGGCTCAGAACTTGAAGA +>EAS221_1:2:3:945:2005 +GAAAAACTATTTGAGGAAGTAATTGGGGAAAACCT +>EAS221_1:2:52:1144:509 +AAAAGGGATTAAATTCCCCCACTTAAGAGATATAG +>EAS221_1:2:52:1144:509 +TGTAAAAGTCAAAATTAAAGTTCAATACTCACCAT +>EAS221_1:2:73:955:728 +AATTCATCATCACTAAACCAGTCCTATAAGAAATG +>EAS221_1:2:73:955:728 +TACAACAGGAACAAAACCTCATATATCAATATTAA +>EAS221_1:2:8:327:522 +AACAGGAACAAAACCTCATATATCAATATTAACTT +>EAS221_1:2:8:327:522 +TTCTACGCAAACAGAAACCAAATGAGAGAAGGAGT +>EAS221_1:2:90:986:1224 +CTGTGTTTAGTGCCTTTGTTCAACCCCCTTGCAAC +>EAS221_1:2:91:856:504 +CTAGATGAGAGAGAACTTCCCTGGAGGTCTGATGG +>EAS221_1:2:91:856:504 +GTTGTTGGTTTTCTGTTTCTTTGTTTGATTTGGTT +>EAS221_1:4:36:1402:1709 +AGCTTAGGTATCAATTTGGTGTTCTGTGTAAAGTC +>EAS221_1:4:36:1402:1709 +TTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATT +>EAS221_1:4:3:248:1491 +TTAAAATTTAACAAAAGTAAATAAAACACATAGCT +>EAS221_1:4:41:519:609 +AACAAAAACTATGCTAAGTATTGGTAAAGATGTGG +>EAS221_1:4:41:519:609 +TACCTAATTGGTACAATGGACAATATTCTGATGAT +>EAS221_1:4:4:1732:88 +GCTGTAATGATGCCCCTTGGCCATCACCCGGTCCC +>EAS221_1:4:4:1732:88 +TGTACACACGCTGTCCTATGTACTTATCATGACTC +>EAS221_1:4:68:64:783 +AAGACATAATCCCACGCTTCCTATGGAAAGGTTGT +>EAS221_1:4:68:64:783 +TCCGTGTCCTCCCATCTGGCCTCGTCCACACTGGT +>EAS221_1:4:87:1375:1303 +AGGAGCATTTTGTCAGTTACCAAATGTGTTTATTA +>EAS221_1:4:87:1375:1303 +GAGAGATTCTGCAGCCCAGATCCAGATTGCTTGTG +>EAS221_1:6:38:1071:155 +ATGCCCCTTGGCCATCACCCAGTCCCTGCCCCATC +>EAS221_1:6:38:1071:155 +TAAAATGTCTATTTTTGTCTTGACACCCAACTAAT +>EAS221_1:6:4:1131:104 +ACTTTGGAAAACAATTTGGTAATTTCGTTTTTTTT +>EAS221_1:6:4:1131:104 +ATGTAACAAATCTGCGCTTGTACTTCTAAATCTAT +>EAS221_1:6:57:1342:1166 +AAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGA +>EAS221_1:6:57:1342:1166 +CAGAGCAACTAGGTAAAAAATTAACATTACAACAG +>EAS221_1:6:60:1037:1146 +AAAAGCATACAGTCATCTATAAAGGAAATCCCATC +>EAS221_1:6:60:1037:1146 +GTGAGAAGTTTGGAAAAACTATTTGAGGAAGTAAT +>EAS221_1:6:69:735:1915 +AATTTGTCAATGTCAGGGAAGGAGCATTTTGTCAG +>EAS221_1:6:69:735:1915 +ACTGCCAGAGCTGCTGGCAAGCTAGAGTCCCATTT +>EAS221_1:6:89:1164:573 +AAAAAACCTGTCAAACACGAATGTTATGCCCTGCT +>EAS221_1:6:89:1164:573 +AGACTTCATCAAGAGATGTAGTCATCAGACTATCT +>EAS221_1:6:92:1807:1185 +AGCATGGTTGTACTGGGCAATACATGAGATTATTA +>EAS221_1:6:92:1807:1185 +CTCTATCCCAAATTCCCAATTACGTCCTATCTTCT +>EAS221_1:6:96:491:1891 +AGAAGTTTGGAAAAACTATTTGAGGAAGTAATTGG +>EAS221_1:6:96:491:1891 +GTCAACATGAAGGAAAAAAATTCTAAAATCAGCAA +>EAS221_1:8:15:881:1932 +CACTTAAGAGATATAGATTGGCAGAACAGATTTAA +>EAS221_1:8:15:881:1932 +CACTTTAAATCAACAACAGTAAAATAAAACAAAGG +>EAS221_1:8:4:679:110 +AATGTTCCCCAGATACCATCCCTGTCTTACTTCCA +>EAS221_1:8:4:679:110 +TCCAGATTGCTTGTGGTCTGACAGGCTGCAACTGT +>EAS221_1:8:58:369:244 +CTGTAATGATGCCCCTTGGCCATCACCCAGTCCCT +>EAS221_1:8:58:369:244 +TTGGGAGATTTTTAATGATTCCTCAATGTTAAAAT +>EAS221_1:8:60:1020:1259 +CTATGAAGAGACTATTGCCAGATGAACCACACATT +>EAS221_1:8:60:1020:1259 +TAGGGAAGAACAGCTTAGGTATCAATTTGGTGTTC +>EAS221_1:8:65:1928:1125 +CATCACAATGAACAACAGGAAGAAAAGGTCTTTCA +>EAS221_1:8:65:1928:1125 +GGCATTTGCCTTCAGACCCTACACGAATACGTCTC +>EAS221_1:8:67:1797:1931 +GGGAAAGCTTTCAACGCTTCTAGCCATTTCTTTTG +>EAS221_1:8:67:1797:1931 +TGGTCTGACAGGCTGCAACTGTGAGCCATCACAAT +>EAS221_1:8:70:1349:1788 +ATTATATCAGATAAAGCACACTTTAAATCAACAAC +>EAS221_1:8:70:1349:1788 +TACTAGACCTAAGAGGGATGAGAAATTACCTAATT +>EAS221_1:8:73:108:1621 +GAACTTCCCTGGAGGTCTGATGGCGTTTCTCCCTC +>EAS221_1:8:73:108:1621 +GTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGACA +>EAS221_1:8:77:781:676 +TCATGAAGCACTGAACTTCCACGTATCATCTAGGG +>EAS221_1:8:77:781:676 +TTGCCAGATGAACCACACATTAATACTATGTTTCT +>EAS221_1:8:78:1478:1446 +GGAAGAGGGACGCTGAAGAACTTTGATGCCCTCTT +>EAS221_1:8:78:1478:1446 +TGTGGTCTGACAGGCTGCAACTGTGAGCCATCACA +>EAS221_1:8:84:1013:1074 +GCAAGGGGGTCTATGTGAACAAAGGCACTAAACAC +>EAS221_1:8:84:1013:1074 +TTGATGCCCTCTTCTTCCAAAGATGAAACGCGTAA +>EAS221_1:8:8:1351:1986 +CCCAAGCCCTTCTCACAGTTTCTGCCCCCAGCATG +>EAS221_1:8:8:1351:1986 +TCTTACTTCCAGATCCCCAGAGGGAAAGCTTTCAA +>EAS221_3:2:100:1147:124 +AAAAAAGAATTTTAAAAATGAACAGAGCTTTCAAG +>EAS221_3:2:100:1147:124 +AATGCCAGGAAGATACATTGCAAGACAGACTTCAT +>EAS221_3:2:22:1623:709 +GAAGACAAGTCTCTTATGAATTAACCCAGTCAGAC +>EAS221_3:2:22:1623:709 +GGGAAAACCTCTTTAGTCTTGCTAGAGATTTAGAC +>EAS221_3:2:2:491:1886 +CTCTTTAGTCTTGCTAGAGATTTAGACATCTAAAT +>EAS221_3:2:59:1576:946 +AACTGTGAGCCATCACAATGAACAACAGGAAGAAA +>EAS221_3:2:59:1576:946 +CAACGCTTCTAGCCATTTCTTTTGGCATTTGCCTT +>EAS221_3:2:60:590:1760 +AAAGTAACTGAACCTATGAGTCACAGGTATTCCTG +>EAS221_3:2:60:590:1760 +TCATCAAGATATGTAGTCATCAGACTATCTAAAGT +>EAS221_3:2:67:1467:1447 +AAAGTTCAATACTCACCATCATAAATACACACAAA +>EAS221_3:2:67:1467:1447 +ATAGATTGGCAGAACAGATTTAAAAACATGAACTA +>EAS221_3:2:67:1864:477 +AATGATGCCCCTTGGCCATCACCCAGTCCCTGCCC +>EAS221_3:2:67:1864:477 +TAAAATGTCTATTTTTGTCTTGACACCCAACTAAT +>EAS221_3:2:76:1729:813 +TAATTTCGTTTTTTTTTTTTTCTTTTCTCTTTTTT +>EAS221_3:2:76:1729:813 +TCTGCGCTTGTACTTCTAAATCTATAAAAAAATTA +>EAS221_3:4:12:276:1797 +ACTATTGCCAGATGAACCACACATTAATACTATGT +>EAS221_3:4:12:276:1797 +TCTGTGTAAAGTCTCAGGGAGCCGTCCGTGTCCTC +>EAS221_3:4:21:132:1423 +GCCAGATGAACCACACATTAATACTATGTTTCTTA +>EAS221_3:4:21:132:1423 +TCAATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCC +>EAS221_3:4:29:1061:574 +ATGTGTTTATTACCAGAGGGATGGAGGGAAGAGGG +>EAS221_3:4:29:1061:574 +GGTCTGACAGGCTGCAACTGTGAGCCATCACAATG +>EAS221_3:4:30:1452:1563 +ATGAATTAACCAAGTCAGACAAAAATAAAGAAAAA +>EAS221_3:4:30:1452:1563 +GATTTAGACATCTAAATGAAAGAGGCTCAAAGAAT +>EAS221_3:4:41:1308:619 +CATTGCAAGACAGACTTCATCAAGATATGTAGTCA +>EAS221_3:4:41:1308:619 +GAAGTATGAGATTATGTAAAGTAACTGAACCTATG +>EAS221_3:4:57:1675:720 +TATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAA +>EAS221_3:4:57:1675:720 +TCATATATCAATATTAACTTTGAATAAAAAGGGAT +>EAS221_3:4:66:584:407 +GCATTTGCCTTCAGACCCTACACGAATGCGTCTCT +>EAS221_3:4:66:584:407 +GGGCAATACATGAGATTATTAGGAAATGCTTTACT +>EAS221_3:4:78:1314:1275 +AGGAAATCCCATCAGAATAACAATGGGCTTCTCAG +>EAS221_3:4:78:1314:1275 +GAAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAG +>EAS221_3:4:81:687:1379 +CCTAAGAGGGATGAGAAATTACCTAATTGGTACAA +>EAS221_3:4:81:687:1379 +TAAATAAAACACATAGCTAAAACTAAAAAAGCAAA +>EAS221_3:4:90:247:212 +ACTTCCAGCTCCCCAGAGGGAAAGCTTTCAACGCT +>EAS221_3:4:90:247:212 +TGACAGGCTGCAACTGTGAGCCATCACAATGAACA +>EAS221_3:6:20:492:850 +AGTATGAAAACAATGTTCCCCAGATGCCGTCCCGG +>EAS221_3:6:20:492:850 +CCTGAGAGATTCTGCAGCCCAGCTCCAGATTGCTT +>EAS221_3:6:26:227:1053 +ATTCTTCATCCTGGACCCTGAGAGATTCTGCAGCC +>EAS221_3:6:26:227:1053 +GGTTTAGGGGTATAATACCTCTACATGGCTGATTA +>EAS221_3:6:51:1486:1131 +ATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAA +>EAS221_3:6:51:1486:1131 +TCAGCAGAAACCTTACAAGCCAGAAGAGATTGGAT +>EAS221_3:6:70:843:706 +AATGATTCCTCAATGTTAAAATGTCTATTTTTGTC +>EAS221_3:6:70:843:706 +ATCTCTTGTAATCTCTCTCCTTTTTGCTGCATCCC +>EAS221_3:8:33:1240:846 +ACCTTACAAGCCAGAAGAGATTGGATCTAATTTTT +>EAS221_3:8:33:1240:846 +ATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAA +>EAS221_3:8:34:956:1309 +AACTATGAAGAGACTATTGCCAGATGAACCACACA +>EAS221_3:8:34:956:1309 +AGCTTAGGTATCAATTTGGTGTTCTGTGTAAAGTC +>EAS221_3:8:50:1203:1094 +AAATATAGTTGAAAGCTCTAACAATAGACTAAACC +>EAS221_3:8:50:1203:1094 +ACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAG +>EAS221_3:8:55:932:613 +TAGTCATCAGACTATCTAAAGTCAACATGAAGGAA +>EAS221_3:8:55:932:613 +TGTCAAACACGAATGTTATGCCCTGCTAAACTAAG +>EAS221_3:8:63:1265:820 +CTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTC +>EAS221_3:8:63:1265:820 +TGTCTTGACACCCAACTAATATTTGTCTGAGCAAA +>EAS221_3:8:65:463:703 +GAAACCTTACAAGCCAGAAGAGATTGGATCTAATT +>EAS221_3:8:65:463:703 +TGCTCAAAAGAATTGTAAAAGTCAAAATTAAAGTT +>EAS221_3:8:74:770:1712 +ACATTACTACCCTGCAATTAATATAATTGTGTCCA +>EAS221_3:8:74:770:1712 +GAGCCGTCCGTGTCCTCCCATCTGGCCTCGTCCAC +>EAS221_3:8:7:1864:1569 +AAAAACCTGTCAAACACGAATGTTATGCCCTGCTA +>EAS221_3:8:7:1864:1569 +AGATATGTAGTCATCAGACTATCTAAAGTCAACAT +>EAS51_62:1:38:250:647 +AATAATAAAATGATAAAAAGATCAATTCAGCAAGA +>EAS51_62:1:38:250:647 +ACTATATGCTGTTTACAAGAAACTCATTAATAAAT +>EAS51_62:2:133:8:379 +ATAAGATAATTCATCATCACTAAACCAGTCCTATA +>EAS51_62:2:133:8:379 +GGAAATCCCATCAGAATAACAATGGGCTTCTCAGC +>EAS51_62:2:258:266:101 +ACGCTGTCCTATGTACTTATCATGACTCTATCCCA +>EAS51_62:2:258:266:101 +CCATCACCCAGTCCCTGCCCCATCTCTTGTAATCT +>EAS51_62:2:260:147:818 +AAAATTTGGTAATTTAGTTTTTTTTTTTTTCTTTT +>EAS51_62:2:260:147:818 +ATCCATGTAACAAATCTGCGCTTTTACTTCTAAAT +>EAS51_62:3:103:443:166 +ACCTGTCAAACACGAATGTTATGCCCTGCTAAACT +>EAS51_62:3:103:443:166 +TACACACAAAAGTACAAAACTCACAGGTTTTATAA +>EAS51_62:3:169:292:652 +ATCTCTTGTAATCTCTCTCCTTTTTGCTGCATCCC +>EAS51_62:3:169:292:652 +GCAAAACAGTCTAGATGAGAGAGAACTTCCCTGGA +>EAS51_62:3:200:263:280 +AGTAAAATAAAACAAAGGAGGTCATCATACAATGA +>EAS51_62:3:200:263:280 +TTGGTACAATGTACAATATTCTGATGATGGTTACA +>EAS51_62:3:263:74:407 +AAGCTTTCAACGCTTCTAGCCATTTCTTTTGGCAT +>EAS51_62:3:263:74:407 +CTGCAACTGTGAGCCATCACAATGAACAACAGGAA +>EAS51_62:3:314:386:190 +AGACCCCCTTGCAACAACCTTGAGAACCCCAGGGA +>EAS51_62:3:314:386:190 +CACTCCAGCTCCCTGTCACCCAATGGACCTGTGAT +>EAS51_62:3:50:312:219 +ACTGCTACTCAATATATCCATGTAACAAATCTGCG +>EAS51_62:3:50:312:219 +TCCTACTAAATACATATGCACCTAACACAAGACTA +>EAS51_62:3:55:340:837 +TCCACACTGGTTCTCTTGAAAGCTTGGGCTGTAAT +>EAS51_62:3:55:340:837 +TTAATATAATTGTGTCCATGTACACACGCTGTCCT +>EAS51_62:3:68:996:104 +AGAGGGATGAGAAATTACCTAATTGGTACAATGTA +>EAS51_62:3:68:996:104 +TACTTATATCAGATAAAGCACACTTTAAATCAACA +>EAS51_62:4:156:857:494 +CTCATACACACACATGGTTTAGGGGTATAATACCT +>EAS51_62:4:156:857:494 +GTTTCCCATCATGAAGCACTGAACTTCCACGTCTC +>EAS51_62:4:187:907:145 +TTTCTTCTCTCTCTTTTTTTTTTTTTTTATTGCAT +>EAS51_62:4:282:962:46 +GAAAAAAGTAAACTCTCAAATATTGCTAGTGGGAG +>EAS51_62:4:282:962:46 +TACTTTACTGCTACTCAATATATCCATGTAACAAA +>EAS51_62:4:308:614:911 +AAAAACAATTTGGTAATTTAGTTTTTTTTTTTTTC +>EAS51_62:4:308:614:911 +TGCGCTTGTACTTCTAAATCTATAACAAAATTAAA +>EAS51_62:5:119:38:945 +ATTCTAAAATCAGCAAGAGAAAAGCATACAGTCAT +>EAS51_62:5:119:38:945 +TCACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGA +>EAS51_62:5:131:779:345 +GTCCACACTGGTTCTCTTGAAAGCTTGGGCTGTAA +>EAS51_62:5:131:779:345 +TGGAAGACATAATCCCACGCTTCCTATGGAAAGGT +>EAS51_62:5:154:669:853 +GTGTAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCA +>EAS51_62:5:154:669:853 +TGGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGA +>EAS51_62:5:192:716:235 +ATACACACACATGGTTTAGGGGTATAATACCTCTA +>EAS51_62:5:192:716:235 +GACCCTACACGAATGCGTCTCTACCACAGGGGGCT +>EAS51_62:5:236:498:526 +ACTAATGCGCTCCACGCCCAAGCCCTTCTCACAGT +>EAS51_62:5:236:498:526 +CAGCACATTACTACCCTGCAATTAATATAATTGTG +>EAS51_62:5:290:319:736 +CGAGTCACGGGGTTGCCAGCACAGGGGCTTAACCT +>EAS51_62:5:290:319:736 +GTTCTCAAGGTTGTTGCAAGGGGGTCTATGTGAAC +>EAS51_62:5:295:882:282 +AATGCTCAAAAGAATTGTAAAAGTCAAAATTAAAG +>EAS51_62:5:295:882:282 +CAGAAGAGATTGGATCTAATTTTTGGACTTCTTAA +>EAS51_62:5:86:697:941 +AAAAAAATCCCGGAAGATACATTGCAAGACAGACT +>EAS51_62:5:86:697:941 +GTATGAGATTATGTAAAGTAACTGAACCTATGAGT +>EAS51_62:6:12:484:836 +AAACACATAGCTAAAACTAAAAAAGCAAAAACAAA +>EAS51_62:6:12:484:836 +AAATACTACTAGACCTAAGAGGGATGAGAAATTAC +>EAS51_62:6:148:170:895 +AAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAGT +>EAS51_62:6:148:170:895 +AAGAGGTTCAGAACTTGAAGACAAGTCTCTTATGA +>EAS51_62:6:50:542:881 +CCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGA +>EAS51_62:6:50:542:881 +TCCCAATTACGTCCTATCTTCTTCTTAGGTAAGAA +>EAS51_62:7:144:28:475 +AGGAAATGCTTTACTGTCATAACTATGAAGAGACT +>EAS51_62:7:144:28:475 +CAGCTTAGGTATCAATTTGGTGTTCTGTGTAAAGT +>EAS51_62:7:157:784:936 +GCTTAGGTATCAATTTGGTGTTCTGTGTAAAGTCT +>EAS51_62:7:157:784:936 +TGATTTACTTGTTGTTGGTTTTCTGTTTCTTTGTT +>EAS51_62:7:162:195:761 +AACATGAACTAACTATATGCTGTTTACAAGAAACT +>EAS51_62:7:162:195:761 +TCACAGGTTTTATAAAACAATTAATTGAGACTACA +>EAS51_62:7:178:286:414 +CACGCCCAAGCCCTTCTCACAGTTTCTGCCCCCAG +>EAS51_62:7:178:286:414 +TTACTTCCAGCTCCCCAGAGGGAAAGCTTTCAACG +>EAS51_62:7:196:511:896 +ATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATTT +>EAS51_62:7:196:511:896 +GAAAAGCATACAGTCATCTATAAAGGAAATCCCAT +>EAS51_62:7:248:17:435 +ATAACCATCCTACTAAATACATATGCACCTAACAC +>EAS51_62:7:248:17:435 +CATGAGTTCAGGAAAAGGGGTGGAAAAAGATGTTC +>EAS51_62:7:312:236:655 +GAGAAATTACCTAATTGGTACAATGTACAATATTC +>EAS51_62:7:312:236:655 +TGCTAAGTATTGGTAAAGATGTGGGGAAAAAAGTA +>EAS51_62:7:96:836:737 +ATCAACCTCATACACACACATGGTTTAGGGGTATA +>EAS51_62:7:96:836:737 +TCCCATCATGAAGCACTGAACTTCCACGTCTCATC +>EAS51_62:8:52:967:804 +AACTAAGCATCATAAATGAAGGGGAAATAAAGTCA +>EAS51_62:8:52:967:804 +TTACCTAGTTGCTCTGTAGTCTCAATTAATTGTTT +>EAS51_64:2:326:153:231 +ATTGTTTTCAACTTTGGAAAACAATTTGGTAATTT +>EAS51_64:2:326:153:231 +TGCTACTCAATATATCCATGTAACAAATCTGCGCT +>EAS51_64:3:143:310:958 +CTGCACATTACTACCCTGCAATTAATATAATTGTG +>EAS51_64:3:143:310:958 +GTCTCATCTAGGGGAACAGGGAGGTGCACTAATGC +>EAS51_64:3:190:727:308 +ACAGCTGTGTTTAGTGCCTTTGTTCAACCCCCTTG +>EAS51_64:3:190:727:308 +GGTGCAGAGCCGAGTCACGGGGTTGCCAGCACAGG +>EAS51_64:3:255:45:399 +AAAAACTATGCTAAGTATTGGTAAAGATGTGGGGA +>EAS51_64:3:255:45:399 +GGTACAATGTACAATATTCTGATGATGGTTACACT +>EAS51_64:3:285:417:147 +AGTCAAAATTAAAGTTCAATACTCACCATCATAAA +>EAS51_64:3:285:417:147 +TTGGATCTAATTTTTGGACTTCTTAAAGAAAAAAA +>EAS51_64:3:309:303:278 +CTATGAAGAGACTATTGCCAGATGAACCACACATT +>EAS51_64:3:309:303:278 +TCAATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCC +>EAS51_64:3:67:782:132 +ATATTTGTCTGAGCAAAACAGTCTAGATGAGAGAG +>EAS51_64:3:67:782:132 +TCTTCCTCTGTCTTGATTTACTTGTTGTTGGTTTT +>EAS51_64:3:7:268:263 +TCGTACAGAAGTTTAATGGAGCCTTGGGACCTTAC +>EAS51_64:3:7:268:263 +TTGCGTTATTTGAGTTGGTGGAAGACATAATCCCA +>EAS51_64:3:80:885:513 +GAAATTCTTCATCCTGGACCCTGAGAGATTCTGCA +>EAS51_64:3:80:885:513 +GCATTTTGTCAGTTACCAAATGTGTTTATTACCAG +>EAS51_64:3:90:435:691 +GGGAATTTGTCAATGTCAGGGAAGGAGCATTTTGT +>EAS51_64:3:90:435:691 +TCTGGTGACTGCCAGAGCTGCTGGCAAGCTAGAGT +>EAS51_64:4:102:467:897 +AGCATGGTTGTACAGGGCAATACATGAGATTATTA +>EAS51_64:4:102:467:897 +GCTTTCAACGCTTCTAGCCATTTCTTTTGTCTTTT +>EAS51_64:4:116:738:142 +AAAGTTCAATACTCACCATCATAAATACACACAAA +>EAS51_64:4:116:738:142 +TGTCAAACACGAATGTTATGCCCTGCTAAACTAAG +>EAS51_64:4:163:31:455 +CTTACTTCCAGCTCCCCAGAGGGACAGCTNNCAAC +>EAS51_64:4:163:31:455 +GGGAGGTGCACTAATGCGCTCCACGCCCAAGCCCT +>EAS51_64:4:179:389:585 +TGGCCACTTTTTATCGCATTTCCCTTTAGAACCTA +>EAS51_64:4:179:389:585 +TGTGAAATGAATGAGATTATTAGGAAATGCTTTAC +>EAS51_64:4:181:476:394 +AACAATATTAACTTTGAATAAAAAGGGATTAAATT +>EAS51_64:4:181:476:394 +TCATCACTAAACCAGTCCTATAAGAAATGCTCAAA +>EAS51_64:4:189:467:475 +CTACATGGCTGATTATGAAAACAATGTTCCCCAGA +>EAS51_64:4:189:467:475 +TATCTGGATTCTGGGAAATTCTTCATCCTGGACCC +>EAS51_64:4:189:571:366 +AACAAATACTACTAGACCTAAGAGGGATGAGAAAT +>EAS51_64:4:189:571:366 +TCTACGCAAACAGAAACCAAATGAGAGAAGGAGTA +>EAS51_64:4:318:345:156 +GGACCCTGAGAGATTCTGCAGCCCAGATCCAGATT +>EAS51_64:4:318:345:156 +TTATGAAAACAATGTTCCCCAGATACCATCCCTGT +>EAS51_64:4:57:786:414 +CTCATTCACTCCAGCTCCCTGTCACCCAATGGACC +>EAS51_64:4:57:786:414 +TGCAACAACCTTGAGAACCCCAGGGAATTTGTCAA +>EAS51_64:5:177:24:389 +AGCTTTCAAGAAGTATGAGATTATGTAAAGTAACT +>EAS51_64:5:177:24:389 +CAAGACAGACTTCATCAAGATATGTAGTCATCAGA +>EAS51_64:5:202:39:380 +CAGGGAAGGAGCATTTTGTCAGTTACCAAATGTGT +>EAS51_64:5:202:39:380 +CTTCATCCTGGACCCTGAGAGATTCTGCAGCCCAG +>EAS51_64:5:290:247:509 +AGCCCATACTTTACTGCTACTCAATATATCCATGT +>EAS51_64:5:290:247:509 +TCTCAAATATTGCTAGTGGGAGTATAAATTGTTTT +>EAS51_64:6:118:41:489 +ACAATTAATTGAGACTACAGAGCAACTAGGTAAAA +>EAS51_64:6:118:41:489 +CCCTGCTAAACTAAGCATCATAAATGAAGGGGAAA +>EAS51_64:6:124:128:489 +CTCTGTCTTGATTTACTTGTTGTTGGTTTTCTGTT +>EAS51_64:6:124:128:489 +GTCCTATCTTCTTCTTAGGGAAGAACAGCTTAGGT +>EAS51_64:6:143:763:480 +AAACGCGTAACTGCGCTCTCATTCACTCCAGCTCC +>EAS51_64:6:143:763:480 +CTGAAGGTTGTTGCAAGGGGGTCTATGTGAACAAA +>EAS51_64:6:195:348:703 +CAGTTACCAAATGTGTTTATTACCAGAGGGATGGA +>EAS51_64:6:195:348:703 +TAATGAAAACTATATTTATGCTATTCAGTTCTAAA +>EAS51_64:6:206:994:556 +ATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGTC +>EAS51_64:6:206:994:556 +NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN +>EAS51_64:6:210:809:735 +AAACCTCTTTAGTCTTGCTAGAGATTTAGACATCT +>EAS51_64:6:210:809:735 +GAGGTTCAGAACTTGAAGACAAGTCTCTTATGAAT +>EAS51_64:6:213:54:878 +CTCTGTCTTGATTTACTTGTTGTTGGTTTTTTGTT +>EAS51_64:6:300:622:86 +GGTTACACTAAAAGCCCATACTTTACTGCTACTCA +>EAS51_64:6:300:622:86 +TCATACAATGATAAAAAGATCAATTCAGCAAGAAG +>EAS51_64:6:54:695:952 +ACAGTAAAATAAAACAAAGGAGGTCATCATACAAT +>EAS51_64:6:54:695:952 +GGTTACACTAAAAGCCCATACTTTACTGCTACTCA +>EAS51_64:7:104:965:517 +AGAGGCTCAAAGAATGCCAGGAAGATACATTGCAA +>EAS51_64:7:104:965:517 +NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN +>EAS51_64:7:140:752:822 +CATCACTAAACCAGTCCTATAAGAAATGCTCAAAA +>EAS51_64:7:140:752:822 +GCTTCTCAGCGGAAACCTTACAAGCCAGAAGAGAT +>EAS51_64:7:152:918:824 +TACTATGTTTCTTATCTGCACATTACTACCCTGCA +>EAS51_64:7:152:918:824 +TTTCCCATCATGAAGCACTGAACTTCCACGTCTCA +>EAS51_64:7:92:493:891 +AAAAGAAAAAGTGAGAAGTTTGGAAAAACTATTTG +>EAS51_64:7:92:493:891 +AGTCAACATGAAGGAAAAAAATTCTAAAATCAGCA +>EAS51_66:1:282:274:50 +ATTACCAGAGGGATGGAGGGAAGAGGGACGCTGAA +>EAS51_66:1:282:274:50 +CCCCTCTAAGCCGTTCTATTTGTAATGAAAACTAT +>EAS51_66:1:289:207:323 +CCATACTTTACTGCTACTCAATATATCCATGTAAC +>EAS51_66:1:289:207:323 +CTAGTGGGAGTATAAATTGATTTCCACTTTGGAAA +>EAS51_66:1:64:182:741 +AAAAAAACAAATTAAACTCTAACAAAAGTAAATAA +>EAS51_66:3:102:511:946 +ATGTAAAAGTGACTGTTATTGTCTTGACACCCAAC +>EAS51_66:3:102:511:946 +CCCAGTCCCTGCCCCATCTCGGGTAATCTCTCTCC +>EAS51_66:3:155:375:623 +AAGGAGTAGCTATACTTATATCAGATAAAGCACAC +>EAS51_66:3:155:375:623 +CAATATTAACTTTGAATAAAAAGGGATTAAATTCC +>EAS51_66:3:166:532:438 +AACAAATACTACTAGACCTAAGAGGGATGAGAAAT +>EAS51_66:3:166:532:438 +AACTAAAAAAGCAAAAACAAAAACTATGCTAAGTA +>EAS51_66:3:233:191:520 +TGAACTTCTGTAATTGAAAAATTCATTTAAGAAAT +>EAS51_66:3:246:711:981 +AAAAAAACCTGTCAAACACGAATGTTATGCCCTGC +>EAS51_66:3:246:711:981 +AGACTTCATCAAGATATGTAGTCATCAGACTATCT +>EAS51_66:3:263:689:572 +AAAGAAAAAAAAACCTGTCAAACACGAATGTTATG +>EAS51_66:3:263:689:572 +AAGATATGTAGTCATCAGACTATCTAAAGTCAACA +>EAS51_66:3:29:381:169 +ATCTGGATTCTGGGAAATTCTTCATCCTGGACCCT +>EAS51_66:3:29:381:169 +CATCAACCTCATACACACACATGGTTTAGGGGTAT +>EAS51_66:3:39:59:738 +GAGATTATTAGGAAATGCTTTACTGTCATAATTAT +>EAS51_66:3:39:59:738 +GTCCTATGTTCTTCTTAGGGAAGAACAGCTTAGGT +>EAS51_66:4:188:460:1000 +GTGTCCATGTACACACGCTGTCCTATGTACTTATC +>EAS51_66:4:188:460:1000 +TCTTGAAAGCTTGGGCTGTAATGATGCCCCTTGGC +>EAS51_66:4:191:40:536 +ATAAAAAAAGACTACCCAGATTCATAAAACAAATA +>EAS51_66:4:191:40:536 +CAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAA +>EAS51_66:4:209:92:210 +GAGATTATTAGGAAATGCTTTACTGTCATAACTAT +>EAS51_66:4:209:92:210 +TTAGGGAAGAACAGCTTAGGTATCAATTTGGTGTT +>EAS51_66:4:240:264:231 +CAACAGATCAAGAAGGAGGGGCAATGGACGAGTTA +>EAS51_66:4:240:264:231 +TGTAATGAAAACTATATTTATGCTATTCAGTTCTA +>EAS51_66:4:277:482:316 +CACTAATGCGCTCCACGCCCAAGCCCTTCTCACAG +>EAS51_66:4:277:482:316 +TGTCCTATGTACTTATCATGACTCTATCCCAAATT +>EAS51_66:4:310:287:420 +AAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGAT +>EAS51_66:4:310:287:420 +TACAGAGCAACTAGGTAAAAAATTAACATTACAAC +>EAS51_66:4:322:350:374 +ACTTCTTAAAGAAAAAAAAACCTGTCAAACACGAA +>EAS51_66:4:322:350:374 +CATTGCAAGACAGACTTCATCAAGATATGTAGTCA +>EAS51_66:5:210:674:911 +TCATAAATACACACAAAAGTACAAAACTCACAGGT +>EAS51_66:5:210:674:911 +TGGCAGAACAGATTTAAAAACATGAACTAACTATA +>EAS51_66:5:269:280:716 +TGATATCTGGATTCTGGGAAATTCTTCATCCTGGA +>EAS51_66:5:269:280:716 +TTTGTCAATGTCAGGGAAGGAGCATTTTTTCAGTT +>EAS51_66:5:273:545:1001 +AACAAAGGAGGTCATCATACAATGATAAAAAGATC +>EAS51_66:5:273:545:1001 +AGATTTAAAAACATGAACTAACTATATGCTGTTTA +>EAS51_66:5:285:395:450 +GTCATCTATAAAGGAAATCCCATCAGAATAACAAT +>EAS51_66:5:285:395:450 +TATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT +>EAS51_66:5:308:400:602 +ATAGACCCCCTTGCAACAACCTTGAGAACCCCAGG +>EAS51_66:5:308:400:602 +CCTGTCACCCAATGGACCTGTGATATCTGGATTCT +>EAS51_66:6:284:442:747 +AAAGAGGCTCAAAGAATGCCAGGAAGATACATTGC +>EAS51_66:6:310:747:415 +TGAGTCACAGGTATTCCTGAGGAAAAAGAAAAAGT +>EAS51_66:6:310:747:415 +TGTAGTCATCAGACTATCTAAAGTCAACATGAAGG +>EAS51_66:7:174:987:334 +ACACCCAAGCCCTTCTCACAGTTTCTGCCCCCAGC +>EAS51_66:7:174:987:334 +GTCCATGTACACACGCTGTCCTATGTACTTATCAT +>EAS51_66:7:4:234:610 +AAAAAACCTGTCAAACACGAATGTTATGCCCTCCT +>EAS51_66:7:4:234:610 +AAAAATCAACATCACAAATACACACAAAAGTACAA +>EAS51_66:7:84:411:336 +GCTTGTACTTCTAAATCTATAAAAAAATTAAAATT +>EAS51_66:8:36:688:722 +ATGTCTATTTTTGTCTTGACACCCAACTAATATTT +>EAS51_66:8:36:688:722 +GTCCCTGCCCCATCTCTTGTAATCTCTCTCCTTTT +>EAS51_66:8:43:972:506 +AGAAACCTTACAAGCCAGAAGAGATTGGATCTAAT +>EAS51_66:8:43:972:506 +TAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAAT +>EAS51_66:8:66:655:769 +TCATCCTGGACCCTGAGAGATTCTGCAGCCCAGCT +>EAS51_66:8:66:655:769 +TTTGTCAGTTACCAAATGTGTTTATTACCAGAGGG +>EAS51_66:8:9:80:353 +AATTAATATAATTGTGTCCATGTACACACGCTGTC +>EAS51_66:8:9:80:353 +CCTCGTCCACACTGGTTCTCTTGAAAGCTTGGGCT +>EAS51_78:7:113:43:634 +ATTTGTCTGAGAAAAACAGTCTAGATGAGAGAGAA +>EAS51_78:7:113:43:634 +CTGTCTTCCTCTGTCTTGATTTACTTGTTGTTTTT +>EAS51_78:7:147:64:416 +AAACAATGTCCCCCAGATACCATCCCTGTCTTACT +>EAS51_78:7:147:64:416 +CTCATCTAGGGGAACAGGGAGGTGCACTAATGCGC +>EAS51_78:7:164:727:977 +GAAATGCTCAAAAGAATTGTAAAAGTCAAAATTAA +>EAS51_78:7:164:727:977 +TACAAGCCAGAAGAGATTGGATCTAATTTTTCGAC +>EAS51_78:7:186:199:927 +CTACGCGAATGCGTCTCTACCACAGGGGGCTGCGC +>EAS51_78:7:186:199:927 +TGGCATTTGCCTTCAGACCCTACACGAATGCGTCT +>EAS51_78:7:215:516:299 +AAGCTATGCTAAGTATTGGTAAAGATGTGGGGAAA +>EAS51_78:7:215:516:299 +AATTACCTAATTGGTACAATGTACAATATTCTGAT +>EAS51_78:7:270:448:491 +GTAATCTCTCTCCTTTTTGCTGCATCCCTGTCTTC +>EAS51_78:7:270:448:491 +TTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAAC +>EAS51_78:7:303:402:142 +AGCATTTTGTCAGTTACCAAATGTGTTTATTACCA +>EAS51_78:7:303:402:142 +TCCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGT +>EAS51_78:7:316:961:576 +TGTGATATCTGGATTCTGGGAAATTCTTCATCCCG +>EAS51_78:7:316:961:576 +TTACGGGTGTAATCTCTCTACATGGCTAATTATGA +>EAS54_61:1:115:868:887 +CATACACACACATGGTTTAGGGGTATAATACCTCT +>EAS54_61:1:115:868:887 +TCTCATTCACTCCAGCTCCCTGTCACCCAATGGAC +>EAS54_61:2:168:61:867 +GATGTTCTACGCAAACAGAAACCAAATGAGAGAAG +>EAS54_61:2:168:61:867 +TCATAAAACAAATACTACTAGACCTAAGAGGGATG +>EAS54_61:2:66:757:918 +CCATCCTACTAAATACATATGCACCTAACACAAGA +>EAS54_61:2:66:757:918 +GGGGTGGAAAAAGATGTTCTACGCAAACAGAAACC +>EAS54_61:3:150:933:810 +AGCTTTCAACGCTTCTAGCCATTTCTTTTGGCATT +>EAS54_61:3:150:933:810 +CAATGAACAACAGGAAGAAAAGGTCTTTCAAAAGG +>EAS54_61:3:155:758:710 +ATCAGATAAAGCACACTTTAAATCAACAACAGTAA +>EAS54_61:3:155:758:710 +TTTGAATAAAAAGGGATTAAATTCCCCCACTTAAG +>EAS54_61:3:20:762:748 +CACAATGAACAACAGGAAGAAAAGGTCTTTCAAAA +>EAS54_61:3:20:762:748 +TTCTTTTGGCATTTGCCTTCAGACCCTACACGAAT +>EAS54_61:4:143:69:578 +ATTGGGAGCCCCTCTAAGCCGTTCTATTTGTAATG +>EAS54_61:4:83:452:970 +AATGAAAACTATATTTATGCTATTCAGTTCTAAAT +>EAS54_61:4:83:452:970 +AGGGATGGAGGGAAGAGGGACGCTGAAGAACTTTG +>EAS54_61:4:86:660:932 +AATACATATGCACCTAACACAAGACTACCCAGATT +>EAS54_61:4:86:660:932 +ATATAAAAAAATTAAAATTTAACAAAAGTAAATAA +>EAS54_61:6:126:541:194 +AGTACGACCAGCTCCCCAGAGGGAAAGCTTTCAAC +>EAS54_61:6:126:541:194 +CAGCCCAGATCCAGATTGCTTGTGGTCTGACAGGC +>EAS54_61:6:25:949:33 +AAAGTAACTGAACCTATGAGTCACAGGTATTCCTG +>EAS54_61:6:25:949:33 +GATATGTAGTCATCAGACTATCTAAAGTCAACATG +>EAS54_61:7:114:506:971 +ACTAAATACATATGCACCTAACACAAGACTACCCA +>EAS54_61:7:114:506:971 +GGGTGGAAAAAGATGTTCTACGCAAACAGAAACCA +>EAS54_61:7:64:37:257 +CCGTGTCCTCCCATCTGGCCTCGTCCACACTGGTT +>EAS54_61:7:64:37:257 +TTTGATTTGGTGGAAGACATAATCCCACGCTTCCT +>EAS54_61:8:165:441:708 +CCATCATAAATACACACAAAAGTACAAAACTCACA +>EAS54_61:8:165:441:708 +CTTAAAGAAAAAAAAACCTGTCAAACACGAATGTT +>EAS54_61:8:4:173:814 +CTGCTACTCAATATATCCATGTAACAAATCTGCGC +>EAS54_61:8:4:173:814 +GATAAAAAGATCAATTCAGCAAGAAGATATAACCA +>EAS54_65:2:127:288:655 +ACTAGGTAAAAAATTAACATTACAACAGGAACAAA +>EAS54_65:2:127:288:655 +TGTTCTACGCAAACAGAAACCAAATGAGAGAAGGA +>EAS54_65:2:182:924:833 +TTTTTTTTTTTTTATTTGCGCTTTTTTTTTTTTTT +>EAS54_65:2:264:157:150 +GGAAAAATGGACAAGATTCTGATGAGGGTTACACT +>EAS54_65:2:264:157:150 +TAAAGCACACTTTAAATCAACAACAGTAAAATAAA +>EAS54_65:2:94:356:809 +AAATCTATAACAAAATTAAAATTTAACAAAAGTAA +>EAS54_65:2:94:356:809 +CTAAATACATATGCACCTAACACAAGACTACCCAG +>EAS54_65:3:102:884:63 +GTCTTGACACCCAACTAATATTTGTCTGAGCAAAA +>EAS54_65:3:102:884:63 +TGTCTTCCTCTGTCTTGATTTCCTTGTTGTTGGTT +>EAS54_65:3:155:541:234 +CTAAATACATATGCACCTAACACAAGACTACCCAG +>EAS54_65:3:155:541:234 +TGCGCTTGTACTTCTAAATCTATAAAAAAATTAAA +>EAS54_65:3:214:946:229 +AAATGAACAGAGCTTTCAAGAAGTATGATATTATG +>EAS54_65:3:214:946:229 +ACAAAGAATGCCAGGAAGATACATTGCAAGACAGA +>EAS54_65:3:273:901:459 +CCAGCATGGTTGTACTGGGCAATACATGAGATTAT +>EAS54_65:3:273:901:459 +TGTCCTATGTACTTATCATGACTCTATCCCAAATT +>EAS54_65:3:290:558:349 +ACCATCCCTGTCTTACTTCCAGCTCCCCAGCGGGA +>EAS54_65:3:290:558:349 +TCTCAGCTAGGGGAACAGGGAGGTGCACTAATGCG +>EAS54_65:3:320:20:250 +AAATAAAACACATAGCTAAAACTAAAAAAGCAAAA +>EAS54_65:3:320:20:250 +TTTTTTTTTTTTTTTTTTTTTTTGCATGCCAGAAA +>EAS54_65:3:321:311:983 +ATTTATGCTATTCAGTTCTAAATATAGAAATTGAA +>EAS54_65:3:326:652:890 +TTCTGTAATTGAAAAATTCATTTAAGAAATTACAA +>EAS54_65:4:137:319:642 +CTTGTTGTTGGTTTTCTGTTTCTTTTTTTGATTTT +>EAS54_65:4:174:753:617 +ATATATCCATGTAACAAATCTGCGCTTGTACTTCT +>EAS54_65:4:174:753:617 +GATATAACCATCCTACTAAATACATATGCACCTAA +>EAS54_65:4:192:714:341 +AAATTAAAATTTAACAAAAGTAAATAAAACACATA +>EAS54_65:4:192:714:341 +ACACAAGACTACCCAGATTCATAAAACAAATACTA +>EAS54_65:4:193:38:987 +AGGGAAGAACAGCTTAGGTATCAATTTTGTGTTCT +>EAS54_65:4:193:38:987 +TGAGATTATTAGGAAATGCTTTACTGTCATAACTA +>EAS54_65:4:246:313:499 +ACAATGAACAACAGGAAGAAAAGGTCTTTCAAAAG +>EAS54_65:4:246:313:499 +CTTTAAACGCTTCTAGCCATTTCTTTTGGCATTTG +>EAS54_65:4:325:795:213 +AGACTACAGAGCAACTAGGTAAAAAATTAACATTA +>EAS54_65:4:325:795:213 +GGAAATAAAGTCAAGTCTTTCCTGACAAGCAAATG +>EAS54_65:4:61:346:384 +CAACTAAGAAGAAACCTTACAAGCCAGAAGAGATT +>EAS54_65:4:61:346:384 +CTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGAT +>EAS54_65:4:91:267:655 +CAGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCGT +>EAS54_65:4:91:267:655 +TGTTGTTGGTTTTCTGTTTCTTTGTTTGATTTGGT +>EAS54_65:6:115:538:276 +CAAATGTGTTTATTACCAGAGGGATGGAGGGAAGA +>EAS54_65:6:115:538:276 +TATTTGTAATGAAAACTATATTTATGCTATTCAGT +>EAS54_65:6:164:797:930 +AGCTAGAGACCCATTTGGAGCCCCTCTAAGCCGTT +>EAS54_65:6:164:797:930 +GTCAGGGAAGGAGCATTTTGTCAGTTACCAAATGT +>EAS54_65:6:18:376:416 +GCAAAACAGTCTAGATGAGAGAGAACTTCCCTGGA +>EAS54_65:6:18:376:416 +TTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGTTT +>EAS54_65:6:277:590:364 +CTCTACATGGCTGATTATGAAAACAATGTTCCCCA +>EAS54_65:6:277:590:364 +CTGGGAAATTCTTCATCCTGGACCCTGAGAGATTC +>EAS54_65:6:326:71:741 +TCTCGTTTTTTTTTCTTTCTTTTCTCTTTTTTTTT +>EAS54_65:6:49:183:435 +CCATCATGAAGCACTGAACTTCCACGTCTCATCTA +>EAS54_65:6:49:183:435 +GACTATTGCCAGATGAACCACACATTAATACTATG +>EAS54_65:6:67:56:806 +TATAAAGGAAATCCCATCAGAATAACAATGGGCTT +>EAS54_65:6:67:56:806 +TCCTGACAAGCAAATGCTAAGATAATTCATCATCA +>EAS54_65:7:117:452:744 +AATATTAACTTTGAATAAAAAGGGATTAAATTCCC +>EAS54_65:7:117:452:744 +ACCAGTCCTATAAGAAATGCTCAAAAGAATTGTAA +>EAS54_65:7:155:629:357 +AGAAGAGATTGGATCTAATTTTTGGACTTCTTAAA +>EAS54_65:7:155:629:357 +AGAGGCTCAAAGAATGCCAGGAAGATACATTGCAA +>EAS54_65:7:159:253:353 +ATAAAACAATTAATTGAGACTACAGAGCAACTAGG +>EAS54_65:7:159:253:353 +GAAGGGGAAATAAAGTCAAGTCTTTCCTGACAGGC +>EAS54_65:7:56:57:985 +TTCTGTCTTCTCTCCTGTCTTCTTTTCTCTTCTTT +>EAS54_65:7:56:57:985 +TTTTTTCTCTTTTCTCTTTTTTTTTTTTTTTTTTT +>EAS54_65:7:68:825:405 +AAAACCTCATATATCAATATTAACTTTGAATAAAA +>EAS54_65:7:68:825:405 +AAACCAAATGAGAGAAGGAGTAGCTATACTTATAT +>EAS54_65:8:10:975:766 +AATAACACAAGACTACCCAGATTCATAAAACAAAT +>EAS54_65:8:10:975:766 +TTAATAAAGACATGAGTTCAGGTAAAGGGGTGAAA +>EAS54_65:8:140:924:923 +GAACAACAGGAAGAAAAGGTCTTTCAAAAGGTGAT +>EAS54_65:8:140:924:923 +TTTTAGCCATTTCTTTTGGCATTTGCCTTCAGACC +>EAS54_65:8:147:687:428 +ATATGCACCTAACACAAGACTACCCAGATTCATAA +>EAS54_65:8:147:687:428 +ATGTTCTACGCAAACAGAAACCAAATGAGAGAAGG +>EAS54_65:8:178:187:610 +AAATACACACAAAAGTACAAAACTCACAGGTTTTA +>EAS54_65:8:178:187:610 +TTGGCAGAACAGATTTAAAAACATGAACTAACTAT +>EAS54_65:8:240:719:799 +AGATTGGCAGAACAGATTTAAAAACATGAACTAAC +>EAS54_65:8:240:719:799 +TTAAAGTTCAATACTCACCATCATAAATACACACA +>EAS54_65:8:305:819:245 +AAATTCATTTAAGAAATTACAAAATATAGTTGAAA +>EAS54_65:8:76:493:708 +TTTATGCTATTCAGTTCTAAATATAGAAATTGAAA +>EAS54_67:1:138:186:274 +GGCCTCGTCCACACTGGTTCTCTTGAAAGCTTGGG +>EAS54_67:1:138:186:274 +TAATTGTGTCCATGTACACACGCTGTCCTATGTAC +>EAS54_67:1:159:222:274 +GAACCACACATTAATACTATGTTTCTTATCTGCAC +>EAS54_67:1:159:222:274 +GTCTGGGGAAAGTCTCAGGGAGCCGTCCGTGTCCT +>EAS54_67:1:15:381:715 +GACTAAACCAAGCAGAAGAAAGAGGTTCAGAACTT +>EAS54_67:1:15:381:715 +GGAAAAAGAAAAAGTGAGAAGTTTGGAAAAACTAT +>EAS54_67:1:88:54:900 +ATCAACAACAGAAAAATAAAACAAAGGAGGTCATC +>EAS54_67:1:88:54:900 +TGATGATGGTTACACTAAAAGCCCATACTTCACTG +>EAS54_67:2:22:471:500 +GTAAATAAAACACATAGCTAAAACTAAAAAAGCAA +>EAS54_67:2:22:471:500 +TACTACTAGACCTAAGAGGGATGAGAAATTACCTA +>EAS54_67:3:114:736:433 +AACAAAACCTCATATATCAATATTAACTTTGAATA +>EAS54_67:3:114:736:433 +ATGTTCTACGCAAACAGAAACCAAGTGAGAGAAGG +>EAS54_67:3:172:196:746 +AAATAAAGTCAAGTCTTTCCTGACAAGCAAATGCT +>EAS54_67:3:172:196:746 +GCATACAGTCATCTATAAAGGAAATCCCATCAGAA +>EAS54_67:3:175:730:949 +TTATGCTATTCAGTTCTAAATATAGAAATTGAAAC +>EAS54_67:3:197:261:624 +GACTATCTAAAGTCAACATGAAGGAAAAAAATTCT +>EAS54_67:3:197:261:624 +GCCCTGCTAAACTAAGCATCATAAATGAAGGGGAA +>EAS54_67:3:47:471:858 +ACACCCAACTAATATTTGTCTGAGCAAAACAGTCT +>EAS54_67:3:47:471:858 +CATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTG +>EAS54_67:4:142:943:582 +TTCAAATGAACTTCTGTAATTGAAAAATTCATTTA +>EAS54_67:4:145:607:216 +AACGCGTAACTGCGCTCTCATTCACTCCAGCTCCC +>EAS54_67:4:145:607:216 +TGAAAAACAGGAAGAAAAGGTCTTTCAAAAGGTGA +>EAS54_67:4:7:526:343 +TCATCCTGGACCCTGAGAGATTCTGCAGCCCAGCT +>EAS54_67:4:7:526:343 +TGAAAACAGTGTTCCCCAGATACCATCCCTGTCTT +>EAS54_67:5:117:33:262 +AATTAACATTACAACAGGAACAAAACCTCATATAT +>EAS54_67:5:117:33:262 +ACAAGCAAATGCTAAGATAATTCATCATCACTAAA +>EAS54_67:5:124:241:608 +CTGAACTTCCACGTCTCATCTAGGGGAACAGGGAG +>EAS54_67:5:124:241:608 +GGGTATAATACCTCTACATGGCTGATTATGAAAAC +>EAS54_67:5:127:828:697 +ATGCCAGGAAGATACATTGCAAGACAGACTTCATC +>EAS54_67:5:127:828:697 +TAAAGAAAAAAAAACCTGTCAAACACGAATGTTAT +>EAS54_67:5:149:639:910 +CAATGGGCTTCTCAGCAGAAACCTTACAAGCCAGA +>EAS54_67:5:149:639:910 +TCACTAAACCAGTCCTATAAGAAATGCTCAAAAGA +>EAS54_67:5:71:408:741 +AGTCATCTATAAAGGAAATCCCATCAGAATAACAA +>EAS54_67:5:71:408:741 +TCCTGACAAGCAAATGCTAAGATAATTCATCATCA +>EAS54_67:6:107:395:312 +CAAAATATAGTTGAAAGCTCTAACAATAGACTAAA +>EAS54_67:6:107:395:312 +CAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGT +>EAS54_67:6:109:953:668 +CAATATATCCATGTAACAAATCTGCGCTTGTACTT +>EAS54_67:6:109:953:668 +CCACTTTGGAAAACAATTTGGTAATTTCGTTTTTT +>EAS54_67:6:198:503:669 +CAATGATAAAAAGATCAATTCAGCAAGAAGATATA +>EAS54_67:6:198:503:669 +CAGATTTAAAAACATGAACTAACTATATGCTGTTT +>EAS54_67:6:43:859:229 +TTCAAATGAACTTCTGTAATTGAAAAATTCATTTA +>EAS54_67:6:46:285:790 +AACGCGTAACTGCGCTCTCATTCACTCCAGCTCCC +>EAS54_67:6:46:285:790 +TCAAGGTTGTTGCAAGGGGGTCTATGTGAACAAAG +>EAS54_67:7:101:752:996 +AACCTTACAAGCCAGAAGAGATTGGATCTAATTTT +>EAS54_67:7:101:752:996 +AAGAAATGCTCAAAAGAATTGTAAAAGTCAAAATT +>EAS54_67:7:197:399:319 +CAAAAAACAAATACTACTAGACCTAAGAGGGATGA +>EAS54_67:7:197:399:319 +TAGAAACCAAATGAGAGAAGGAGTAGCTATACTTA +>EAS54_67:8:19:855:491 +TGGCATTTGCCTTCAGACCCTACACGAATGCGTCT +>EAS54_67:8:19:855:491 +TGTGTGTTCTCATCAACCTCATACACACACATGGT +>EAS54_67:8:46:900:610 +GATATCTGGATTCTGGGAAATTCTTCATCCTGGAC +>EAS54_67:8:46:900:610 +TACATGGCTGATTATGAAAACAATGTTCCCCAGAT +>EAS54_71:2:125:628:79 +GCTGAAGAACTTTGATGCCCTCTTCTTCCAAAGA +>EAS54_71:2:125:628:79 +TTTATGCTATTCAGTTCTAAATATAGAAATTGAAA +>EAS54_71:2:204:264:413 +CAATGAACAACAGAAAGAAAAGTTCTTTCAAAAGG +>EAS54_71:2:204:264:413 +TGCCCTCTTCTTCCAAAGATGAAACGCGTAACTG +>EAS54_71:2:85:686:696 +AATCAGCAAGAGAAAAGCATACAGTCATCTATAAA +>EAS54_71:2:85:686:696 +TAAACTAAGCATCATAAATGAAGTGGAAATAAAG +>EAS54_71:3:186:989:869 +ACACACATGGTTTAGGGGTATAATACCTCTACATG +>EAS54_71:3:186:989:869 +GGGAAATTCTTCATCCTGGACCCTGAGAGATTCT +>EAS54_71:3:254:32:275 +GATGGAGGGAAGAGGGACGCTGAAGAACTTTGAT +>EAS54_71:3:254:32:275 +TGCAACTGTGAGCCATCACAATGAACAACAGGAAG +>EAS54_71:3:257:288:731 +AAGAAGATATAACCATCCTACTAAATACATATGCA +>EAS54_71:3:257:288:731 +TGCTGTTTACAAGAAACTCATTAATAAAGACATG +>EAS54_71:3:267:821:860 +GCATACAGTCATCTATAAAGGAAATCCCATCAGA +>EAS54_71:3:267:821:860 +TCTTTAGTCTTGCTAGAGATTTAGACATCTAAATG +>EAS54_71:3:78:855:352 +AAAAGAAAAAGTGAGAAGTTTGGAAAAACTATTT +>EAS54_71:3:78:855:352 +AACAATAGACTAAACCAAGCAGAAGAAAGAGGTTC +>EAS54_71:4:127:725:381 +AATTACAAAATATAGTTGAAAGCTCTAACAATAGA +>EAS54_71:4:127:725:381 +TGAACCTATGAGTCACAGGTATTCCTGAGGAAAA +>EAS54_71:4:13:981:659 +CGGGACAATGGACGAGGTAAACCGCACATTGACAA +>EAS54_71:4:13:981:659 +TGTAGCCCCTCTAAGGCGTTCTATTTGTAATGAA +>EAS54_71:4:14:88:306 +AAAGAATGCCAGGAAGATACATTGCAAGACAGAC +>EAS54_71:4:14:88:306 +AGAAGAGATTAGATCTAATTTTTGGACTTCTTAAA +>EAS54_71:4:165:397:25 +GCAACTGTGAGCCATCACAATGAACAACAGGAAGA +>EAS54_71:4:165:397:25 +TTCAACGCTTCTAGCCATTTCTTTTGGCATTTGC +>EAS54_71:4:169:256:888 +AGGTTCAGAACTTGAAGACAAGTCTCTTATGAATT +>EAS54_71:4:169:256:888 +ATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT +>EAS54_71:4:169:862:829 +AAAGGTCTTTCAAAAGGTGATGTGTGTTCTCATCA +>EAS54_71:4:169:862:829 +GCCATTTCTTTTGGCATTTGCCTTCAGACCCTAC +>EAS54_71:4:206:741:810 +ACTAACTATATGCTGTTTACAAGAAACTCATTAA +>EAS54_71:4:206:741:810 +CAAAAGTACAAAACTCACAGGTTTTATAAAACAAT +>EAS54_71:4:209:159:130 +CTTATCATGACTCTATCCCAAATTCCCAATTACGT +>EAS54_71:4:209:159:130 +GCCCCCAGCATGGTTGTACTGGGCAATACATGAG +>EAS54_71:4:233:97:262 +ACCACACATTAATACTATGTTTCTTATCTGCCCA +>EAS54_71:4:233:97:262 +GTATCAATTTGGTGTTCTGTGTAAAGTCTCAGGGA +>EAS54_71:4:252:428:683 +TGTCTTGATTTACTTGTTGTTGGTTTTCTGTTTCT +>EAS54_71:4:284:269:882 +TTTCTTTTCTCTTTTTTTTTTTTTTGTTTTTGCA +>EAS54_71:4:328:669:662 +GGAAGGAGCATTTTGTCAGTTACCAAATGTGTTT +>EAS54_71:4:328:669:662 +TCTTCATCCTGTACCCTGAGAGATTCTGCAGCCCA +>EAS54_71:4:72:63:435 +CCTTGCAACAACCTTGAGAACCCCAGGGAATTTG +>EAS54_71:4:72:63:435 +TGATATCTGGATTCTGGGAAATTCTTCATCCTGGA +>EAS54_71:4:73:182:444 +AACTTCCCTGGAGGTCTGATGGCGTTTCTCCCTCG +>EAS54_71:4:73:182:444 +CTTGATTTACTTGTTGTTGGTTTTCTGTTTCTTT +>EAS54_71:5:153:543:671 +GCCCCATCTCTTGTAATCTCTCTCCTTTTTGCTG +>EAS54_71:5:153:543:671 +TAAAATGTCTATTTTTGTCTTGACACCCAACTAAT +>EAS54_71:5:16:434:204 +AGATGAGAGAGAACTTCCCTGGAGGTCTGATGGC +>EAS54_71:5:16:434:204 +CTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGGT +>EAS54_71:5:81:685:141 +ACTGAACCTATGAGTCACAGGTATTCCTGAGGAA +>EAS54_71:5:81:685:141 +AGATATGTAGTCATCAGACTATCTAAAGTCAACAT +>EAS54_71:6:172:896:83 +AGGAAGAAAAGGTCTTTCAAAAGGTGATGTGTGT +>EAS54_71:6:172:896:83 +CATTTGCCTTCAGACCCTACACGAATGCGTCTCTA +>EAS54_71:6:215:133:909 +TGTGTGTTCTCATCAACCTCATACACACACATGG +>EAS54_71:6:215:133:909 +TTGCCTTCAGACCCTACACGAATGCGTCTCTACCA +>EAS54_71:6:224:932:942 +CTCTTGAAAGCTTGGGCTGTAATGATGCCCCTTGG +>EAS54_71:6:224:932:942 +GTCCATGTACACACGCTGTCCTATGTACTTATCA +>EAS54_71:6:228:354:203 +AATGGACCTGTGATATCTGGATTCTGGGAAATTC +>EAS54_71:6:228:354:203 +TCAACCTCATACACACACATGGTTTAGGGGTATAA +>EAS54_71:6:264:705:89 +AAACATATGCACCTAACACAAGACTACCCAGATTC +>EAS54_71:6:264:705:89 +AAGGGGTGGAAAAAGATGTTCTACGCAAACAGAA +>EAS54_71:6:324:515:230 +AAAACAGTCTAGATGAGAGAGAACTTCCCTGGAG +>EAS54_71:6:324:515:230 +CCTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGG +>EAS54_71:6:82:932:400 +GACACCCAACTAATATTTGTCTGAGCAAAACAGTC +>EAS54_71:6:82:932:400 +GTAATCTCTCTCCTCTTCGCTGCATCCCTGTCTT +>EAS54_71:7:130:260:553 +AGCAAGAGAAAAGCATACAGTCATCTATAAAGGAA +>EAS54_71:7:130:260:553 +GTGAGAAGTTTGGAAAAACTATTTGAGGAAGCAC +>EAS54_71:7:194:867:616 +ATCCATGTAACAAATCTGCGCTTGTACTTCTATT +>EAS54_71:7:194:867:616 +TTTTCCACTTTGGAAAACAATTTGGTAATTTCGTT +>EAS54_71:7:212:329:348 +AACCACACATTAATACTATGTTTCTTATCTGCAC +>EAS54_71:7:212:329:348 +CCCATCATGAAGCACTGAACTTCCACGTCTCATCT +>EAS54_71:7:250:698:842 +AAAAAGTACAAAACTCACAGGTTTTATAAAACAA +>EAS54_71:7:250:698:842 +AAGAAAAAAAAACCTGTCAAACACGAATGTTATGC +>EAS54_71:7:80:760:490 +CATGGCTGATTATGAAAACAATGTTCCCCAGATAC +>EAS54_71:7:80:760:490 +CTGGACCCTGAGAGATTCTGCAGCCCAGCTCCAG +>EAS54_71:7:97:743:602 +AAGCAAATGCTAAGATAATTCATCATCACTAAACC +>EAS54_71:7:97:743:602 +ATTACAACAGGAACAAAACCTCATATATCAATAT +>EAS54_71:8:105:854:975 +ATTTAACAAAAGTAAATAAAACACATAGCTAAAAC +>EAS54_71:8:105:854:975 +TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTG +>EAS54_71:8:113:856:319 +AAATCAACAACAGTAAAATAAAACAAAGGAGGT +>EAS54_71:8:113:856:319 +CCCACTTAAGAGATATAGATTGGCAGAACAGATTT +>EAS54_71:8:215:830:609 +AAGACATCTAAATGAAAGAGGCTCAAAGAATGC +>EAS54_71:8:234:21:950 +TTTTTTTTTTTTCTCCTCTCTTTTTTTTTTTTT +>EAS54_71:8:321:642:388 +TACCAAATGTGTTTATTACCAGAGGGATGGAGG +>EAS54_71:8:321:642:388 +TCCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGT +>EAS54_71:8:38:856:336 +AATGGACCTGTGATATCTGGATTCTGGGAAATT +>EAS54_71:8:38:856:336 +CACACATGGTTTAGGGGTATAATACCTCTACATGG +>EAS54_73:3:203:419:243 +GGAAAAAGAAAAAGTGAGAAGTTTGGAAAAACTAT +>EAS54_73:3:203:419:243 +TTGAAAGCTCTAACAATAGACTAAACCAAGCAGAA +>EAS54_73:3:239:796:221 +ATAACTATGAAGAGACTATTGCCAGCTGACCCCCC +>EAS54_73:3:239:796:221 +GGAAGAACAGCTTAGGTATCAATTTGGTGTTCTGT +>EAS54_73:3:23:502:103 +AGTCCCTGCCCCATCTCTTGTAATCTCTCTCCTTT +>EAS54_73:3:23:502:103 +GACACCCAACTAATATTTGTCTGAGCAAAACAGTC +>EAS54_73:3:29:833:612 +AAGCTCTAACAATAGACTAAACCAAGCAGAAGAAA +>EAS54_73:3:29:833:612 +CAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGT +>EAS54_73:3:313:827:992 +AAAGTCTCAGGGAGCCGTCCGTGTCCTCCCATCTG +>EAS54_73:3:313:827:992 +TGTTTCTTTGTTTGATTTGGTGGAAGACATAATCC +>EAS54_73:3:37:761:635 +CCTCTTCTTCCAAAGATGAAACGCGTAACTGCGCT +>EAS54_73:3:37:761:635 +TGTGAGCCATCACAATGAACAACAGGAAGAAAAGG +>EAS54_73:3:4:854:140 +CCTGACAAGCAAATGCTAAGATAATTCATCATCAC +>EAS54_73:3:4:854:140 +GTCATCTATAAAGGAAATCCCATCAGAATAACAAT +>EAS54_73:3:88:24:744 +GTCCTGTGATATCTGGATTCTGGGAAATTCTTCAT +>EAS54_73:3:88:24:744 +TGTCAATGTCAGGGAAGGAGCATTTTTGAAGTTTA +>EAS54_73:5:145:635:390 +TAAACCAGTCCTATAAGAAATGCTCAAAAGAATTG +>EAS54_73:5:145:635:390 +TTGAATAAAAAGGGATTAAATTCCCCCACTTAAGA +>EAS54_73:5:169:714:644 +CCTAATTGGTACAATGTACAATATTCTGATGATGG +>EAS54_73:5:169:714:644 +GAAAAAAGTAAACTCTCAAATATTGCTAGTGGGAG +>EAS54_73:5:220:733:736 +CCATCCTACTAAATACATATGCACCTAACACAAGA +>EAS54_73:5:220:733:736 +TTAATAAAGACATGAGTTCAGGTAAAGGGGTGGAA +>EAS54_73:5:231:339:551 +CTGAGAGATTCTGCAGCCCAGATCCAGATTGCTTG +>EAS54_73:5:231:339:551 +TGTCAGTTACCAAATGTGTTTATTACCAGAGGGAT +>EAS54_73:5:255:796:239 +AAGGGATTAAATTCCCCCACTTAAGAGATAGAGAT +>EAS54_73:5:255:796:239 +ATGCTCAAAAGAATTGTAAAAGTCAAAATTAAAGT +>EAS54_73:5:263:557:988 +AATGATAAAAAGATCAATTCAGCAAGAAGATATAA +>EAS54_73:5:263:557:988 +CTGCTACTCAATATATCCATGTAACAAATCTGCGC +>EAS54_73:5:271:874:367 +AAAAAACCTGTCAAACACGAATGTTATGCCCTGCT +>EAS54_73:5:271:874:367 +ATATGTAGTCATCAGACTATCTAAAGTCAACATTA +>EAS54_73:5:3:233:911 +GTCTCATCTAGGGGAACAGGGAGGTGCACTAATGC +>EAS54_73:5:3:233:911 +TGGCTGATTATGAAAACAATGTTCCCCAGATACCA +>EAS54_73:5:44:498:945 +ATAGGGATGGAGGGAAGAGGGCCGCTGAAGAACTT +>EAS54_73:5:44:498:945 +CCTATAAGCCGTTCTATTTGTAATGAAAACTATAT +>EAS54_73:5:53:61:31 +AAGAAACTCATTAATAAAGACATGAGTTCAGATAA +>EAS54_73:5:53:61:31 +CAATTCAGCAAGAAGATATAACCATCCTACTAAAT +>EAS54_73:7:134:243:630 +ACATTACTACCCTGCAATTAATATAATTGTGTCCA +>EAS54_73:7:134:243:630 +TCATCTAGGGGAACAGGGAGGCGCACTAATGAGCT +>EAS54_73:7:200:65:291 +CAATACTCACCATCATAAATACACACAAAAGTACA +>EAS54_73:7:200:65:291 +CTAACTATATGCTGTTTACAAGAAACTCATTAATA +>EAS54_73:7:223:440:667 +AATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATT +>EAS54_73:7:223:440:667 +TTCAGAACTTGAAGACAAGTCTCTTATGAATTAAC +>EAS54_73:7:254:572:431 +AAGAGATATAGATTGGCAGAACAGATTTAAAAACA +>EAS54_73:7:254:572:431 +ATCAGATAAAGCACACTTTAAATCAACAACAGTAA +>EAS54_73:7:63:854:610 +AATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGT +>EAS54_73:7:63:854:610 +GACTATTGCCAGATGAACCACACATTAATACTATG +>EAS54_73:7:97:892:419 +AATAAAGTCAAGTCTTTCCTGACAAGCAAATGCTA +>EAS54_73:7:97:892:419 +GCAACTAGGTAAAAAATTAACATTACAACAGGAAC +>EAS54_81:2:128:394:455 +GTAATCTCTCTCCTTTTTGCTGCATCCCTGTCTTC +>EAS54_81:2:128:394:455 +TTAGGGAAGAACAGCTTAGGTATCAATTTGGTGTT +>EAS54_81:2:27:856:401 +ACCTCTACATGGCTGATTATGAAAACAATGTTCCC +>EAS54_81:2:27:856:401 +TCATCTAGGGGAACAGGGAGGTGCACTAATGCGCT +>EAS54_81:2:280:512:316 +GGGAAGAACAGCTTAGGTATCAATTTGGTGTTCTG +>EAS54_81:2:280:512:316 +TTACTGTCATAACTATGAAGAGACTATTGCCAGCT +>EAS54_81:2:285:367:932 +ATAGACCCCCTTGCAACAACCTTGAGAACCCCAGG +>EAS54_81:2:285:367:932 +GCGTAACTGCGCTCTCATTCACTCCAGCTCCCTGT +>EAS54_81:2:317:72:221 +AAAAAAATTCTAAAATCAGCAAGAGAAAAGCATAC +>EAS54_81:2:317:72:221 +ATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGTC +>EAS54_81:2:31:98:804 +CACGAATGCGTCTCTACCACAGGGGGCTGCGCGGC +>EAS54_81:2:31:98:804 +CTTTACTGTCATAACTATGAAGAGACTATTGCCAG +>EAS54_81:2:49:330:699 +AAAGTTCAATACTCACCATCATAAATACACACAAA +>EAS54_81:2:49:330:699 +TTTTGGACTTCTTAAAGAAAAAAAAACCTGTCAAA +>EAS54_81:2:5:491:391 +CCCTGCTCACAGTTTCTGCCCCCAGCATGGTTGTA +>EAS54_81:2:5:491:391 +TTGGCATTTGCCTTCAGACCCTACACGAATGCGTC +>EAS54_81:6:11:801:386 +AAAGGGATTAAATTCCCCCACTTAAGAGATATAGA +>EAS54_81:6:11:801:386 +CACTATAAATCAACAACAGTAAAATAAAACAAAGG +>EAS54_81:6:122:589:134 +AAAACCTGTCAAACACGAATGTTATGCCCTGCTAA +>EAS54_81:6:122:589:134 +ACAGACTTCATCAAGATATGTAGTCATCAGACTAT +>EAS54_81:6:199:511:426 +AATTCTTCATCCTGGACCCTGAGAGATTCTGCAGC +>EAS54_81:6:199:511:426 +GGGGTATAATACCTCTACATGGCTGATTATGAAAA +>EAS54_81:6:204:779:181 +AACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATG +>EAS54_81:6:204:779:181 +CTTTTGGCATTTGCCTTCAGACCCTACACGAATGC +>EAS54_81:6:265:251:147 +AAAAGTACAAAACTCACAGGTTTTATAAAACAATT +>EAS54_81:6:265:251:147 +TGTTATGCCCTGCTAAACTAAGCATCATAAATGAA +>EAS54_81:6:273:424:207 +AAGAGATATAGATTGGCAGAACAGATTTAAAAACA +>EAS54_81:6:273:424:207 +TAAATCAACAACAGTAAAATAAAACAAAGGAGGTC +>EAS54_81:6:35:186:412 +ATAACCATCCTACTAAATACATATGCACCTAACAC +>EAS54_81:6:35:186:412 +CATGTAACAAATCTGCGCTTGTACTTCTAAATCTA +>EAS54_81:6:75:917:886 +ACTGGGCAATACATGAGATTATTAGGAAATGCTTT +>EAS54_81:6:75:917:886 +TTATCATGACTCTATCCCAAATTCCCAATTACGTC +>EAS54_81:7:124:253:889 +CTAAGCATCATAAATGAAGGGGAAATAAAGTCAAG +>EAS54_81:7:124:253:889 +TCAGCAAGAGAAAAGCATACAGTCATCTATAAAGG +>EAS54_81:7:166:979:531 +ATCCCACGCTTCCTATGGAAAGGTTGTTGGGAGAT +>EAS54_81:7:166:979:531 +TGGTTCTCTTGAAAGCTTGGGCTGTAATGATGCCC +>EAS54_81:7:226:869:36 +ATATATAAAGGAAATCCCATCAGAATAACAATGGG +>EAS54_81:7:226:869:36 +TGAGGAAGTAATTGGGGAAAACCTCTTTAGTCTTG +>EAS54_81:7:246:205:734 +CTCCAGGGAAGTTATCTCTCATCTAGANNNNNTTG +>EAS54_81:7:246:205:734 +CTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGGT +>EAS54_81:7:293:355:321 +GCTAGAGTCCCATTTGGAGCCCCTCTAAGCCGTTC +>EAS54_81:7:293:355:321 +TTACCAAATGTGTTTATTACCAGAGGGATGGAGGG +>EAS54_81:7:324:472:791 +AAAGCCAATACTTTACTGCTACTCAATATATCCAT +>EAS54_81:7:324:472:791 +TGATAAAAAGATCAATTCAGCAAGAAGATATAACC +>EAS54_81:7:325:150:465 +AACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATG +>EAS54_81:7:325:150:465 +TGATGCCCTCTTCTTCCAAAGATGAAACGCGTAAC +>EAS54_81:7:74:596:137 +CTCTATCCCAAATTCCCAATTACGTCCTATCTTCT +>EAS54_81:7:74:596:137 +GGTCCCTGCCCCATCGCTTGTAATCTCTCGCCTTT +>EAS54_81:8:130:912:658 +TACACACACATGGTTTAGGGGTATAATACCTCTAC +>EAS54_81:8:130:912:658 +TCCCATCATGAAGCACTGAACTTCCACGTCTCATC +>EAS54_81:8:142:858:903 +ATGGTTGTACTGGGCAATACATGAGATTATTAGGA +>EAS54_81:8:142:858:903 +CTATCCCAAATTCCCAATTACGTCCTATCTTCTTC +>EAS54_81:8:14:360:580 +ACCCTACACGAATGCGTCTCTACCACAGGGGGCGG +>EAS54_81:8:14:360:580 +ATGAGATTATTAGGAAATGCTTTACTGTCATAACT +>EAS54_81:8:159:71:155 +AAAGGTTGTTGGGAGATTTTTAATGATTCCTCGAT +>EAS54_81:8:159:71:155 +GTCCACACTGGTTCTCTTGAAAGCTTGGGCTGTAA +>EAS54_81:8:177:800:714 +CTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGAT +>EAS54_81:8:177:800:714 +TTCTCAGCAGAAACCTTACAAGCCAGAAGAGATTG +>EAS54_81:8:271:180:509 +AATACTCACCATCATAAATACACACAAAAGTACAA +>EAS54_81:8:271:180:509 +ATATAGATTGGCAGAACAGATTTAAAAACATGAAC +>EAS54_81:8:40:925:442 +GAGGTTCAGAACTTGAAGACAAGTCTCTTATGAAT +>EAS54_81:8:40:925:442 +TTTGAGGAAGTAATTGGGGAAAACCTCTTTAGTCT +>EAS54_81:8:41:530:663 +AGAACAGATTTAAAAACATGAACTAACTATATGCT +>EAS54_81:8:41:530:663 +ATACTCACCATCATAAATACACACAAAATTACAAA +>EAS54_81:8:63:930:152 +ACTGGTTCTCTTGAAAGCTTGGGCTGTAATGATTC +>EAS54_81:8:63:930:152 +ATCCCACGCTTCCTATGGAAAGGTTGTTGGGAGAT +>EAS54_81:8:78:735:536 +TTTTTTTTTTTTTCATTTCTCTTTTTTTTTTTTTT +>EAS56_53:1:124:243:35 +GCATATCCAGATTGCTGGTGGTCTGACAGGCAGCA +>EAS56_53:1:124:243:35 +TGTGTTTATTACCAGAGGGATGGAGGGAAGAGCGA +>EAS56_53:1:154:118:488 +AAAAGCATACAGTCATCTATAAAGGAAATCCCATC +>EAS56_53:1:154:118:488 +AAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGA +>EAS56_53:1:23:403:981 +TACTGTCATAACTATGAAGAGACTATTGCCAGATG +>EAS56_53:1:23:403:981 +TCTTCATAGGGAAGAACAGCTTAGGTATCAATTTG +>EAS56_53:1:47:303:887 +ACATTACTACCCTGCCATTAATATACTTGTGTCCA +>EAS56_53:1:47:303:887 +CACACTGGTTCTCTTGAAAGCTTGGGCTGTAATGA +>EAS56_53:1:92:875:345 +AAATGCTCAAAAGAATTGTAAAAGTCAAAATTAAA +>EAS56_53:1:92:875:345 +CGGAAACCTTACAAGCCAGAAGAGATTGGATCTAA +>EAS56_53:2:170:265:818 +GAGGGGAAGCTTTCAACGCTTCTAGCACTTTCTTT +>EAS56_53:2:170:265:818 +TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG +>EAS56_53:2:59:286:290 +AAAGGAAATCCCATCAGAATAACAATGGGCTTCTC +>EAS56_53:2:59:286:290 +TCAAGTCTTTCCTGACAAGCAAATGCTAAGATAAT +>EAS56_53:3:101:809:776 +GTACTTCTAAATCTATAAAAAAATTAAAATTTAAC +>EAS56_53:3:101:809:776 +TATGCACCTAACACAAGACTACCCAGATTCATAAA +>EAS56_53:3:107:738:484 +GGTCATCATACAATGATAAAAAGATCAATTCAGCA +>EAS56_53:3:107:738:484 +TGAACTAACTATATGCTGTTTACAAGAAACTCATT +>EAS56_53:3:126:558:408 +TTCTATTTGTAATGAAAACTATATTTATGCTATTC +>EAS56_53:3:126:558:408 +TTTATTACCAGAGGGATGGAGGGAAGAGGGACGCT +>EAS56_53:3:134:126:465 +AAAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAA +>EAS56_53:3:134:126:465 +AAATCAGCAAGAGAAAAGCATACAGTCATCTATAA +>EAS56_53:4:130:568:978 +TAAATATAGAAATTGAAACAGCTGTGTTTAGTGAC +>EAS56_53:4:130:568:978 +TGAAACGCGAAACTGCACTCTCATTCACTCCAGCT +>EAS56_53:4:153:977:200 +TCATCAACCTCATACACACACATGGTTTAGGGGTA +>EAS56_53:4:153:977:200 +TGTCACCCAATGGACCTGTGATATCTGGATTCTGG +>EAS56_53:4:154:762:630 +AGGAAGAAAAGGTCTTTCAAAAGGTGATGTGTGTT +>EAS56_53:4:154:762:630 +CCTTCAGACCCTACACGAATGCGTCTCTACCACAG +>EAS56_53:4:168:528:288 +CAGGCTGCAACTGTGAGCCATCACAATGAACAACA +>EAS56_53:4:168:528:288 +GCTCCCCAGAGGGAAAGCTTTCAACGCTTCTAGCC +>EAS56_53:4:45:707:147 +AAAAATTCTAAAATCAGCAAGAGAAAAGCATACAG +>EAS56_53:4:45:707:147 +ATGAGTCACAGGTATTCCTGAGGAAAAAGAAAAAG +>EAS56_53:6:180:695:621 +ATACAGTCATCTATAAAGGAAATCCCATCAGAATA +>EAS56_53:6:180:695:621 +TACTGAAAAGCAAATGCTAAGATAATTCATCATCA +>EAS56_53:7:22:22:934 +ATTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAA +>EAS56_53:7:22:22:934 +CTGCATCCCTGTCTTCCTCTGTCTTGATTTACTTG +>EAS56_53:8:122:430:882 +CCTACTAAATACATATGCACCTAACACAAGACTAC +>EAS56_53:8:122:430:882 +CTATAAAAAAATTAAAATTTAACAAAAGTAAATAA +>EAS56_53:8:179:549:753 +TACTACCCTGCAATTAATATAATTGTGTCCATGTA +>EAS56_53:8:179:549:753 +TGTCCTCCCATCTGGCCTCGTCCACACTGGTTCTC +>EAS56_53:8:28:701:724 +TGGACCCTGAGAGATTCTGCAGCCCAGCTCCAGAT +>EAS56_53:8:28:701:724 +TTTTGTCAGTTACCAAATGTGTTTATTACCAGAGG +>EAS56_57:1:122:38:103 +ATAAAACAATTAATTGAGACTACAGAGCAACTAGG +>EAS56_57:1:122:38:103 +GAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCTAC +>EAS56_57:1:125:884:276 +TTGCAAGACAGACTTCATCAAGATATGTAGTCATC +>EAS56_57:1:125:884:276 +TTTGGACTTCTTAAAGAAAAAAAAACCTGTCAAAC +>EAS56_57:1:189:130:136 +ATTTAGACATCTAAATGAAAGAGGCTCAAAGAATG +>EAS56_57:1:189:130:136 +GGCTTCTCAGCAGAAACCTTACAAGCCAGAAGAGA +>EAS56_57:1:189:503:110 +ATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGGA +>EAS56_57:1:189:503:110 +CTAACAATAGACTAAACCAAGCAGAAGAAAGAGTT +>EAS56_57:1:228:182:717 +GGTCTGACAGGCTGCAACTGTGAGCCATCCCCATG +>EAS56_57:1:228:182:717 +TCTTACTTCCAGCTCCCCAGAGGGAAAGCTTTCAA +>EAS56_57:1:278:440:902 +AAGCACTGAACTTCCACGTCTCATCTAGGGGAACA +>EAS56_57:1:278:440:902 +ATACTATGTTTCTTATCTGCACATTACTACCCTGC +>EAS56_57:1:288:384:444 +TAACTTTGAATAAAAAGGGATTAAATTCCCCCACT +>EAS56_57:1:288:384:444 +TCAAAAGAATTGTAAAAGTCAAAATTAAAGTTCAA +>EAS56_57:2:158:909:321 +ATACAGTCATCTATAAAGGAAATCCCATCAGAATA +>EAS56_57:2:158:909:321 +TTTGAGGAAGTAATTGGGGAAAACCTCTTTAGTCT +>EAS56_57:2:178:192:499 +GTGAGCCATCACAATGAACAACAGGAAGAAAAGGT +>EAS56_57:2:178:192:499 +TCTAGCCATTTCTTTTGGCATTTGCCTTCAGACCC +>EAS56_57:2:206:873:186 +ACAATAGACTAAACCAAGCAGAAGAAAGAGGTTCA +>EAS56_57:2:206:873:186 +GTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTG +>EAS56_57:2:236:841:20 +AAAGGAAATCCCATCAGAATAACAATGGGCTTCTC +>EAS56_57:2:236:841:20 +GCTAAGATAATTCATCATCACTAAACCAGTCCTAT +>EAS56_57:2:237:855:581 +CTAAACGCCCATACTTTACTGCTACTCAATATATC +>EAS56_57:2:237:855:581 +TACAATGATAAAAAGATCAATTCAGCAAGAAGATA +>EAS56_57:2:23:268:529 +TGAAAGAGGCTCAAAGAATGCCAGGAAGATACATT +>EAS56_57:2:259:42:969 +GCTGTAATGATGCCCCTTGGCCATCACCCGGTCCC +>EAS56_57:2:259:42:969 +GGAAAGGTTGTTGGGAGATTTTTAATGATTCCTCA +>EAS56_57:2:262:297:601 +TGGACCTGTGATATCTGGATTCTGGGAAATTCTTC +>EAS56_57:2:262:297:601 +TGTTCTCATCAACCTCATACACACACATGGTTTAG +>EAS56_57:2:284:597:682 +AAAAAAAAACCTGTCAAACACGAATGTTATGCCCT +>EAS56_57:2:284:597:682 +TTCATCAAGATATGTAGTCATCAGACTATCTAAAG +>EAS56_57:2:44:153:969 +AAAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAA +>EAS56_57:2:44:153:969 +AAAAGCATACAGTCATCTATAAAGGAAATCCCATC +>EAS56_57:3:112:729:591 +ATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATTT +>EAS56_57:3:112:729:591 +GAAGAAAGAGGTTCAGAACTTGAAGACAAGTCTCT +>EAS56_57:3:119:761:239 +CGTCTCTACCACAGGGGGCTGCGCGGTTTCCCATC +>EAS56_57:3:119:761:239 +TGAAGAGACTATTGCCAGATGAACCACACATTAAT +>EAS56_57:3:285:489:327 +AATAGACTAAACCAAGCAGAAGAAAGAGGTTCAGA +>EAS56_57:3:285:489:327 +CTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAA +>EAS56_57:3:319:174:811 +CACTGGTTCTCTTGAAAGCTTGGGCTGTAATGATG +>EAS56_57:3:319:174:811 +TTATCTGCACATTTCTACCCTGCAATTAATATAAT +>EAS56_57:3:41:739:907 +CAGAAGAGATTGGATCTAATTTTTGGACTTCTTAA +>EAS56_57:3:41:739:907 +GAATGCCAGGAAGATACATTGCAAGACAGACTTCA +>EAS56_57:3:81:786:340 +TACTATGTTTCTTATCTGCACATTACTACCCTGCA +>EAS56_57:3:81:786:340 +TCCACGTCTCATCTAGGGGAACAGAGAGGTGCACT +>EAS56_57:4:233:478:792 +GCCTTCAGACCCTACACGAATGCGTCTCTACCACA +>EAS56_57:4:233:478:792 +GTGTTCTCATCAACCTCATACACACACATGGTTTA +>EAS56_57:4:262:965:756 +AGGGAGGTGCACTAATGCGCTCCACGCCCAAGCCC +>EAS56_57:4:262:965:756 +TTAATATAATTGTGTCCATGTACACACGCTGTCCT +>EAS56_57:4:71:707:568 +CTGCATCCCTGTCTTCCTCTGTCTTGATTTACTTG +>EAS56_57:4:71:707:568 +GTCTAGATGAGAGAGAACTTCCCTGGAGGTCTGAT +>EAS56_57:4:98:862:154 +AAAGATCAATTCAGCAAGAAGATATAACCATCCTA +>EAS56_57:4:98:862:154 +TGCTACTCAATATATCCATGTAACAAATCTGCGCT +>EAS56_57:5:105:521:563 +TATGTACTTATCATGACTCTATCCCAAATTCCCAA +>EAS56_57:5:105:521:563 +TGTAATGCTGCCCCTTGGCCATCCCCCGGTCCCTG +>EAS56_57:5:136:389:320 +TCCTATGTACTTATCATGACTCTATCCCAAATTCC +>EAS56_57:5:136:389:320 +TTCTGCCCCCAGCATGGTTGTACTGGGCAATACAT +>EAS56_57:5:145:383:182 +AAACCTCTTTAGTCTTGCTAGAGATTTAGACATCT +>EAS56_57:5:145:383:182 +TTGAAGACAAGTCTCTTATGAATTAACCCAGTCAG +>EAS56_57:5:207:926:427 +GGGAAGAACAGCTTAGGTATCAATTTGGTGTTCTG +>EAS56_57:5:207:926:427 +TAGGAAATGCTTTACTGTCATAACTATGAAGAGAC +>EAS56_57:5:214:644:390 +AAAAACATGAACTAACTATATGCTGTTTACAAGAA +>EAS56_57:5:214:644:390 +AAATAAAACAAAGGAGGTCATGATACAATGATAAA +>EAS56_57:5:24:284:360 +AGTCATCAGACTATCTAAAGTCAACATGAAGGAAA +>EAS56_57:5:24:284:360 +CTGTCAAACACGAATGTTATGCCCTGCTAAACTAA +>EAS56_57:5:266:133:789 +AAAAAATTAACATTACAACAGGAACAAAACCTCAT +>EAS56_57:5:266:133:789 +GTGGAAAAAGATGTTCTACGCAAACAGAAACCAAA +>EAS56_57:5:303:542:924 +AATAAAACAAAGGAGGTCATCATACAATGATAAAA +>EAS56_57:5:303:542:924 +CAATGTACAATATTCTGATGATGGTTACACTAAAA +>EAS56_57:5:309:109:987 +AACAAATACTACTAGACCTAAGAGGGATGAGAAAT +>EAS56_57:5:309:109:987 +GAGAGAAGGAGTAGCTATACTTATATCAGATAAAG +>EAS56_57:5:30:788:376 +ACGTCTCATCTAGGGGAACAGGGAGGTGCACTAAT +>EAS56_57:5:30:788:376 +TGTTTCTTATCTGCACATTACTACCCTGCAATTAA +>EAS56_57:5:324:728:956 +ATTTGTCAATGTCAGGGAAGGAGCATTTTGTCAGT +>EAS56_57:5:324:728:956 +TGCTGGCAAGCTAGAGTCCCATTTGGAGCCCCTCT +>EAS56_57:5:53:544:889 +AGGCTCAAAGAATGCCAGGAAGATACATTGCAAGA +>EAS56_57:5:53:544:889 +GCTTCTCAGCGGAAACCTTACAAGCCAGAAGAGAT +>EAS56_57:5:71:994:576 +AAGATAATTCATCATCACTAAACCAGTCCTATAAG +>EAS56_57:5:71:994:576 +TAGGTAAAAAATTAACATTACAACAGGAACAAAAC +>EAS56_57:6:145:144:796 +ATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGTC +>EAS56_57:6:145:144:796 +GGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGAC +>EAS56_57:6:157:643:175 +GGGATGGAGGGAAGAGGGACGCTGAAGAACTTTGA +>EAS56_57:6:157:643:175 +TTCTATTTGTAATGAAAACTATATTTATGCTATTC +>EAS56_57:6:175:289:351 +CATCCTACTAAATACATATGCACCTAACACAAGAC +>EAS56_57:6:175:289:351 +TGCGCTTGTACTTCTAAATCTATAAAAAAATTAAA +>EAS56_57:6:190:289:82 +AGGGGTGCAGAGCCGAGTCACGGGGTTGCCAGCAC +>EAS56_57:6:190:289:82 +CTCAAGGTTGTTGCAAGGGGGTCTATGTGAACAAA +>EAS56_57:6:21:553:57 +AAATACTACTAGACCTAAGAGGGATGAGAAATTAC +>EAS56_57:6:21:553:57 +AACAAAAGTAAATAAAACACATAGCTAAAACTAAA +>EAS56_57:6:234:787:12 +AAGCTTGGGCTGTAATGATGCCCCTTGGCCATCAC +>EAS56_57:6:234:787:12 +ACACGCTGGCCTATGTACTTATAATGACTCTATCC +>EAS56_57:6:325:759:288 +GCTGCTGGCAAGCTAGAGTCCCATTTGGAGCCCCT +>EAS56_57:6:325:759:288 +GGAGCATTTTGTCAGTTACCAAATGTGTTTATTAC +>EAS56_57:6:44:280:641 +AACCCCCTTGCAACAACCTTGAGAACCCCAGGGAA +>EAS56_57:6:44:280:641 +TCATTCACTCCAGCTCCCTGTCACCCAATGGACCT +>EAS56_57:6:4:223:776 +AGTAACTGAACCTATGAGTCACAGGTATTCCTGAG +>EAS56_57:6:4:223:776 +TGTAGTCATCAGACTATCTAAAGTCAACATGAAGG +>EAS56_57:7:159:125:297 +GCAAGCTAGAGTCCCATTTGGAGCCACTCTAAGAC +>EAS56_57:7:159:125:297 +GGAAGGAGCATTTTGTCAGTTACCAAATGTGTTTA +>EAS56_57:7:247:522:670 +CTATCCCAAATTCCCAATTACGTCCTATCTTCTTC +>EAS56_57:7:247:522:670 +TACATGAGATTATTAGGAAATGCTTTACTGTCATA +>EAS56_57:7:273:562:954 +AAAGTTCAATACTCACCATCATAAATACACACAAA +>EAS56_57:7:273:562:954 +TTTTTGGACTTCTTAAAGAAAAAAAAACCTGTCAA +>EAS56_57:7:287:258:321 +TAATACTATGTTTCTTATCTGCACATTACTACCCT +>EAS56_57:7:287:258:321 +TGTAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCAT +>EAS56_57:7:33:954:724 +CCTAAGAGGGATGAGAAATTACCTAATTGGTACAA +>EAS56_57:7:33:954:724 +TCAGATAAAGCACACTTTAAATCAACAACAGTAAA +>EAS56_57:7:57:826:977 +ATTGGATCTAATTTTTGGACTTCTTAAAGAAAAAA +>EAS56_57:7:57:826:977 +TGCTCAAAAGAATTGTAAAAGTCAAAATTAAAGTT +>EAS56_57:7:76:786:458 +GGAGCATTTTGTCAGTTACCAAATGTGTTTATTAC +>EAS56_57:7:76:786:458 +TCTGGGAAATTCTTCATCCTGGACCCTGAGAGATT +>EAS56_57:8:72:44:435 +AAAAGCAAAAACAAAAACTATGCTAAGTATTGGTA +>EAS56_57:8:72:44:435 +ATTGGTACAATGTACAATATTCTGATGATGGTTAA +>EAS56_59:1:126:526:276 +GAACTTCTGTAATTGAAAAATTCATTTAAGAAATT +>EAS56_59:1:128:584:952 +ATCATACAATGATAAAAAGATCAATTCAGCAAGAA +>EAS56_59:1:128:584:952 +GCCCATACTTTACTGCTACTCAATATATCCATGTA +>EAS56_59:1:219:294:861 +CTGGTTCTCTTGAAAGCTTGGGCTGTAATGATGCC +>EAS56_59:1:219:294:861 +TATAATTGTGTCCATGTACACACGCTGTCCTCTGT +>EAS56_59:1:248:122:558 +AATGTACAATATTCTGATGATGGTTACACTAAAAG +>EAS56_59:1:248:122:558 +GGAAAAAAGTAAACTCTCAAATATTGCTAGTGGGA +>EAS56_59:1:278:906:933 +AATATAATTGTGTCCATGTACACACGCTGTCCTAT +>EAS56_59:1:278:906:933 +TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG +>EAS56_59:1:82:670:302 +AGTTCAGGTAAAGGGGTGGAAAAAGATGTTCTACG +>EAS56_59:1:82:670:302 +TCCTACTAAATACATATGCACCTAACACAAGACTA +>EAS56_59:1:93:490:901 +AGAAAAGCATACAGTCATCTATAAAGGAAATCCCA +>EAS56_59:1:93:490:901 +GTAATTGGGGAAAACCTCTTTAGTCTTGCTAGAGA +>EAS56_59:2:104:402:732 +AAATCAGCAAGAGAAAAGCATACAGTCATCTATAA +>EAS56_59:2:104:402:732 +AATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACA +>EAS56_59:2:162:272:415 +ACATGAACTAACTATATGCTGTTTACAAGAAACTC +>EAS56_59:2:162:272:415 +ATAAAAAGATCAATTCAGCAAGAAGATATAACCAT +>EAS56_59:2:177:266:842 +ACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATGT +>EAS56_59:2:177:266:842 +GGCATTTGCCTTCAGACCCTACACGAATGCGTCTC +>EAS56_59:2:177:552:234 +ACGCTGTCCTATGTACTTATCATGACTCTATCCCA +>EAS56_59:2:177:552:234 +GCTCCACGCCCAAGCCCTTCTCACAGTTTCTGCCC +>EAS56_59:2:201:768:529 +AGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTT +>EAS56_59:2:201:768:529 +CAGACTATCTAAAGTCAACATGAAGGAAAAAAATT +>EAS56_59:2:239:1001:406 +AGCATACAGTCATCTATAAAGGAAATCCCATCAGA +>EAS56_59:2:239:1001:406 +CTTTCCTGACAAGCAAATGCTAAGATAATTCATCA +>EAS56_59:2:60:677:921 +CATCAGACTATCTAAAGTCAACATGAAGGAAAAAA +>EAS56_59:2:60:677:921 +GTGAGAAGTTTGGAAAAACTATTTGAGGAAGTAAT +>EAS56_59:3:149:953:349 +AGCCCTTCTCACAGTTTCTGCCCCCAGCATGGTTG +>EAS56_59:3:149:953:349 +TTCTTTTGGCATTTGCCTTCAGACCCTACACGAAT +>EAS56_59:3:166:626:836 +AGTACAAAACTCACAGGTTTTATAAAACAATTAAT +>EAS56_59:3:166:626:836 +CTGTCAAACACGAATGTTATGCCCTGCTAAACTAA +>EAS56_59:3:182:1002:639 +AAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAG +>EAS56_59:3:182:1002:639 +AACCAAGCAGAAGAAAGAGGTTCAGAACTTGAAGA +>EAS56_59:3:316:25:230 +GATGCCCCTTGGCCATCACCCGGTCCCTGCCCCAT +>EAS56_59:3:316:25:230 +TGTCCTATGTACTTATCATGACTCTATCCCAAATT +>EAS56_59:4:119:651:88 +GATTGGATCTAATTTTTGGACTTCTTAAAGAAAAA +>EAS56_59:4:119:651:88 +GCTCAAAGAATGCCAGGAAGATACATTGCAAGACA +>EAS56_59:4:262:928:237 +TGAGTTCAGGTAAAGGTGTGGAAAAAGATGTTCTA +>EAS56_59:4:262:928:237 +TTGAGACTACAGAGCAACTAGGTAAAAAATTAACA +>EAS56_59:4:267:394:437 +AAACATCATAAATACACACAAAAGTACAAAACTCA +>EAS56_59:4:267:394:437 +GGACTTCTTAAAGAAAAAAAAACCTGTCAAACACG +>EAS56_59:4:278:524:521 +CACATTAATACTATGTTTCTTATCTGCACATTACT +>EAS56_59:4:278:524:521 +CCCATCTGGCCTCGTCCACACTGGTTCTCTTGAAA +>EAS56_59:4:329:577:757 +AACGCGTAACTGCGCTCTCATTCACTCCAGCTCCC +>EAS56_59:4:329:577:757 +TCAAGGTTGTTGCAAGGGGGTCTATGTGAACAAAG +>EAS56_59:5:113:694:725 +CTGTAATGATGCCCCTTGGCCATCACCCGGTCCCT +>EAS56_59:5:113:694:725 +GTACACACGCTGTCCTATGTACTTATCATGACTCT +>EAS56_59:5:125:137:58 +AACTATATGCTGTTTACAAGAAACTCATTAATAAA +>EAS56_59:5:125:137:58 +GGTTTTATAAAACAATTAATTGAGACTACAGAGCA +>EAS56_59:5:181:713:140 +AGGGGAAATAAAGTCAAGTATTTCCTGACAAGCAA +>EAS56_59:5:181:713:140 +CTACAGAGCAACAAGGTAAAAAATTAACATTACAA +>EAS56_59:5:198:929:684 +AAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGA +>EAS56_59:5:198:929:684 +GAAATCCCATCAGAATAACAATGGGCTTCTCAGCA +>EAS56_59:5:232:336:46 +ATTTTTTTTTTTTCTTTTCTCTTGTTTCTTTTTTT +>EAS56_59:5:325:544:349 +AAAATTAAAGTTCAATACTCACCATCATAAATACA +>EAS56_59:5:325:544:349 +CAAGCCAGAAGAGATTGGATCTAATTTTTGGACTT +>EAS56_59:5:90:629:652 +AGCCCATACTTTACTGCTACTCAATATATCCATGT +>EAS56_59:5:90:629:652 +ATATTGCTAGTGGGAGTATAAATTGTTTTCCACTT +>EAS56_59:6:187:925:547 +GGCTGATTATGAAAACAATGTTCCCAAGATACCAT +>EAS56_59:6:187:925:547 +TGAACTTCCACGTCTCATCTAGGGGAACAGGGAGG +>EAS56_59:6:199:327:965 +ATCTGGATTCTGGGAAATTCTTCATCCTGGACCCT +>EAS56_59:6:199:327:965 +NCAACAACCTTGAGAACCCCAGGGAATTTGTCAAT +>EAS56_59:6:227:657:95 +GTAATTGGGGAAAACCTCTTTAGTCTTGCTAGAGA +>EAS56_59:6:227:657:95 +GTCATCTATAAAGGAAATCCCATCAGAATAACAAT +>EAS56_59:6:286:753:854 +TCACCCAGTCCCTGCCCCATCTCTTGTAATCTCTC +>EAS56_59:6:286:753:854 +TTATCATGACTCTATCCCAAATTCCCAATTACGTC +>EAS56_59:6:312:837:406 +AGGTGCACTAATGCGCTCCACGCCCAAGCCCTTCT +>EAS56_59:6:312:837:406 +CTGCACATTACTACCCTGCAATTAATATAATTGTG +>EAS56_59:6:3:186:68 +AAGAAATGCTCAAAAGAATTGTAAAAGTCAAAATT +>EAS56_59:6:3:186:68 +TTACAAGCCAGAAGAGATTGGATCTAATTTTTGTA +>EAS56_59:6:89:457:591 +ATGCCCTGCTAAACTAAGCATCATAAATGAAGGGG +>EAS56_59:6:89:457:591 +CAGGTTTTATAAAACAATTAATTGAGACTACATAG +>EAS56_59:7:260:985:520 +TCCCTGTCACCCAATGGACCTGTGATATCTGGATT +>EAS56_59:7:260:985:520 +TGCAACAACCTTGAGAACCCCAGGGAATTTGTCAA +>EAS56_59:7:318:679:883 +GATTTAGACATCTAAATGAAAGAGGCTCAAAGAAT +>EAS56_59:7:319:246:304 +CTTGAGAACCCCAGGGAATTTGTCAATGTCAGGGA +>EAS56_59:7:319:246:304 +TGTCACCCAATGGACCTGTGATATCTGGATTCTGG +>EAS56_59:7:82:902:868 +CTGTCACCCAATGGACCTGTGATATCTGGATTCTG +>EAS56_59:7:82:902:868 +TTGCAACAACCTTGAGAACCCCAGGGAATTTGTCA +>EAS56_59:8:49:182:192 +ACACAAAAGTACAAAACTCACAGGTTTTATAAAAC +>EAS56_59:8:49:182:192 +GTTATGCCCTGCTAAACTGAGCATCATAAATGAAG +>EAS56_59:8:80:542:549 +AGTAAACTCTCAAATATTGCTAGTGGGAGTATAAA +>EAS56_59:8:80:542:549 +CTAAAAGCCCATACTTTACTGCTACTCAATATATC +>EAS56_61:1:119:880:781 +ACAAATCTGCGCTTGTACTTCTAAATCTATAACAA +>EAS56_61:1:119:880:781 +ACATATGCACCTAACACAAGACTACCCAGATTCAT +>EAS56_61:1:210:880:606 +GGAGCATTTTGTCAGTTACCAAATGTGTTTATTAT +>EAS56_61:1:210:880:606 +TCCTGGACCCTGAGAGATTCTGCAGCCCAGCTCCA +>EAS56_61:1:303:184:14 +CAACCTTGAGAACCCCAGGGAATTTGTCAATGTCA +>EAS56_61:1:303:184:14 +CAATGGACCTGTGATATCTGGATTCTGGGAAATTC +>EAS56_61:2:152:860:286 +AGACTATTGCCAGATGAACCACACATTAATACTAT +>EAS56_61:2:152:860:286 +TTAGGTATCAATTTGGTGTTCTGTGTAAAGTCTCA +>EAS56_61:3:140:522:212 +CGCTGAAGAACTTTGATGCCCTCTTCTTCCAAAGA +>EAS56_61:3:140:522:212 +GACAGGCTGCAACTGTGAGCCATCACAATGAACAA +>EAS56_61:3:165:665:220 +ACAATTAATTGAGACTACAGAGCAACTAGGTAAAA +>EAS56_61:3:165:665:220 +GGAAATAAAGTCAAGTCTTTCCTGACAAGCAAATG +>EAS56_61:3:208:118:673 +AAGAGGCTCAAAGAATGCCAGGAAGATACATTGCA +>EAS56_61:3:208:118:673 +GAACAGAGCTTTCAAGAAGTATGAGATTATGTAAA +>EAS56_61:3:260:827:289 +AAACCTCATATATCAATATTAACTTTGAATAAAAA +>EAS56_61:3:260:827:289 +TGTTCTACGCAAACAGAAACCAAATGAGAGAAGGA +>EAS56_61:3:45:758:616 +ATAAATTGTTTTCCACTTTGGAAAACAATTTGGTA +>EAS56_61:3:45:758:616 +CATACTTTACTGCTACTCAATATATCCATGTAACA +>EAS56_61:3:5:45:441 +TTTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTTT +>EAS56_61:4:262:456:74 +TACCAAATGTGTTTATTACCAGAGGGATGGAGGGA +>EAS56_61:4:262:456:74 +TGGGAAATTCTTCATCCTGGACCCTGAGAGATTCT +>EAS56_61:5:194:470:416 +AAACTATTTGAGGAAGTAATTGGGGAAAACCTCTT +>EAS56_61:5:194:470:416 +TCAGAACTTGAAGACAAGTCTCTTATGAATTAACC +>EAS56_61:5:209:824:866 +ATCATCACTAAACCAGTCCTATAAGAAATGCTCAA +>EAS56_61:5:209:824:866 +CAGCAACAAAACCTCATATATCAATATTAACTTTG +>EAS56_61:5:263:314:696 +AACTCATTAATAAAGACATGAGTTCAGGTAAAGGG +>EAS56_61:5:263:314:696 +AAGATCAATTCAGCAAGAAGATATAACCATCCTAC +>EAS56_61:5:272:240:950 +CAGCAGAGCTTGGATCTAATTTTTGGACTTCTTCA +>EAS56_61:5:272:240:950 +TCAAAAGAATTGTAAAAGTCAAAATTAAAGTTCAA +>EAS56_61:6:10:106:737 +ACAAGAAACTCATTAATAAAGACATGAGTTCAGGT +>EAS56_61:6:10:106:737 +ACAATGATAAAAAGATCAATTCAGCAAGAAGATAT +>EAS56_61:6:160:272:398 +AATGTTCCCCAGATACCATCCCTGTCTTACTTCCA +>EAS56_61:6:160:272:398 +GTGCACTAATGCGCTCCACGCCCAAGCCCTTCTCA +>EAS56_61:6:226:370:91 +AGAATAACAATGGGCTTCTCAGCGGAAACCTTACA +>EAS56_61:6:226:370:91 +AGGCTCAAAGAATGCCAGGAAGATACATTGCAAGA +>EAS56_61:6:227:259:597 +AATATAGAAATTGAAACAGCTGTGTTTAGTGCCTT +>EAS56_61:6:256:67:461 +TCATGTTTGTGTCTTTCTATGCATTTTTTTTTTTT +>EAS56_61:6:256:67:461 +TTGTTTTTTCTTCTTTTCTCTTTTTTTTTTTTTTT +>EAS56_61:6:283:963:234 +AAAAAGATGTTCTACGCAAACAGAAACCAAATGAG +>EAS56_61:6:283:963:234 +ACATATGCACCTAACACAAGACTACCCAGATTCAT +>EAS56_61:6:307:208:477 +AAAGTCAAAATTAAAGTTCAATACTCACCATCATA +>EAS56_61:6:307:208:477 +ACTTCTTAAAGAAAAAAAAACCTGTCAAACACGAA +>EAS56_61:7:280:133:495 +AGATGAACCACACATTAATACTATGTTTCTTATCT +>EAS56_61:7:280:133:495 +CCATCATGAAGCACTGAACTTCCACGTCTCATCTA +>EAS56_61:7:41:745:603 +CATTGCAAGACAGACTTCATCAAGATATGTAGTCA +>EAS56_61:7:41:745:603 +TAATTTTTGGACTTCTTAAAGAAAAAAAAACCTGT +>EAS56_61:7:7:682:201 +CATACAGTCATCTATAAAGGAAATCCCATCAGAAT +>EAS56_61:7:7:682:201 +GGAAAACCTCTTTAGTCTTGCTAGAGATTTAGACA +>EAS56_61:8:60:358:494 +GGTAAAGGGGTGGAAAAAGATGTTCTACGCAAACA +>EAS56_61:8:60:358:494 +TACCCAGATTCATAAAACAAATACTACTAGACCTA +>EAS56_61:8:7:171:402 +GTGATATCTGGATTCTGGGAAATTCTTCATCCTGG +>EAS56_61:8:7:171:402 +TCTACATGGCTGATTATGAAAACAATGTTCCCCAG +>EAS56_63:1:119:446:185 +TGGTCTGACAGGCTGCAACTGTGAGCCATCACAAT +>EAS56_63:1:119:446:185 +TTACCAGAGGGATGGAGGGAAGAGGGACGCTGAAG +>EAS56_63:1:145:71:26 +CTAGGGGAACAGGGAGGTGCACTAATGCGCTCCAC +>EAS56_63:1:145:71:26 +TTTCTTATCTGCACATTACTACCCTGCAATTAATA +>EAS56_63:2:119:161:322 +ATCAGAATAACAATGGGCTTCTCAGCAGAAACCTT +>EAS56_63:2:119:161:322 +CTTTAGTCTTGCTAGAGATTTAGACATCTAAATGA +>EAS56_63:2:33:357:858 +AAAATTAAAGTTCAATACTCACCATCATAAATACA +>EAS56_63:2:33:357:858 +AGGGATTAAATTCCCCCACTTAAGAGATATAGATT +>EAS56_63:2:74:656:272 +AACAAAGGAGGTCATCATACAATGATAAAAAGATC +>EAS56_63:2:74:656:272 +TGTACAATATTCTGATGATGGTTACACTAAAAGCC +>EAS56_63:3:40:594:752 +ATACACACACATGGTTTAGGGGTATAATACCTCTA +>EAS56_63:3:40:594:752 +CTGCGCGGTTTCCCATCATGAAGCACTGAACTTCC +>EAS56_63:3:41:468:459 +AAATTTAACAAAAGTAAATAAAACACATAGCTAAA +>EAS56_63:3:41:468:459 +TTTTTTTTTTTTTTTTTTTCTTTTTTTTTTTTTTT +>EAS56_63:3:93:1002:845 +AATTCCCAATTACGTCCTATCTTCTTCTTAGGGAA +>EAS56_63:3:93:1002:845 +GGGCAATACATGAGATTATTAGGAAATGCTTTACT +>EAS56_63:4:141:9:811 +TTTCTTTTCTCCTTTTTTTTTTTTTTTTTCTACAT +>EAS56_63:4:184:659:377 +AAAAAGATGTTCTACGCAAACAGAAACCAAATGAG +>EAS56_63:4:184:659:377 +CAAAACTACCCAGATTCATAAAACAAATACTACTA +>EAS56_63:4:38:28:122 +AAATATAGTTGAAAGCTCTAACAATAGACTAAACC +>EAS56_63:4:38:28:122 +GTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTG +>EAS56_63:5:117:570:971 +ACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAG +>EAS56_63:5:117:570:971 +ACATGAAGGAAAAAAATTCTAAAATCAGCAAGAGA +>EAS56_63:5:123:998:248 +ATCACAATGAACAACAGGAAGAAAAGGTCTTTCAA +>EAS56_63:5:123:998:248 +TTTCTTTTGGCATTTGCCTTCAGACCCTACACGAA +>EAS56_63:5:36:678:316 +ATTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAA +>EAS56_63:5:36:678:316 +TTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTTA +>EAS56_63:5:96:788:614 +TAGGGGTATAATACCTCTACATGGCTGATTATGAA +>EAS56_63:5:96:788:614 +TTCCACGTCTCATCTAGGGGAACAGGGAGGTGCAC +>EAS56_63:6:102:816:260 +AAATTACCTAATTGGTACAATGTACAATATTCTGA +>EAS56_63:6:102:816:260 +TCAGATAAAGCACACTTTAAATCAACAACAGTAAA +>EAS56_63:6:42:920:522 +AATTAATATAATTGTGTCCATGTACACACGCTGTT +>EAS56_63:6:42:920:522 +CTGGTTCTCTTGAAAGCTTGGGCTGTAATGATGCC +>EAS56_63:6:91:360:585 +AAGATGAAACGCGTAACTGCGCTCTCATTCACTCC +>EAS56_63:6:91:360:585 +GACATCACAATGAACAACAGGAAGAAAAGGTCTTT +>EAS56_63:7:109:22:383 +ATGTACAATATTCTGATGATGGTTACACTAAAAGC +>EAS56_63:7:109:22:383 +CAACAACAGTAAAATAAAACAAAGGAGGTCATCAT +>EAS56_63:7:137:139:248 +GTCAAACACGAATGTTATGCCCTGCTAAACTAAGC +>EAS56_63:7:137:139:248 +TATCTAAAGTCAACATGAAGGAAAAAAATTCTAAA +>EAS56_63:7:166:42:147 +AATGCGCTCCACGCCCAAGCCCTTCTAACAGTTTC +>EAS56_63:7:166:42:147 +CTGCACATTACTACCCTGCAATTAATATAATTGTG +>EAS56_63:7:185:213:330 +CAATGTCAGGGAAGGAGCATTTTGTCAGTTACCAA +>EAS56_63:7:185:213:330 +TCTGGGAAATTCTTCATCCTGGACCCTGAGAGATT +>EAS56_63:7:190:95:706 +TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG +>EAS56_63:7:190:95:706 +TTGTGTCCATGTACACACGCTGTCCTATGTACTTA +>EAS56_63:7:34:334:825 +CATTTAAGAAATTACAAAATATAGTTGAAAGCTCT +>EAS56_63:8:138:186:459 +CATTGCAAGACAGACTTCATCAAGATATGTAGTCA +>EAS56_63:8:138:186:459 +GCCAGAAGAGATTGGAGCTAATTTTTGGACTTCTT +>EAS56_63:8:150:508:757 +ATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTGT +>EAS56_63:8:150:508:757 +CTTGACACCCAACTAATATTTGTCTGAGCAAAACA +>EAS56_63:8:4:571:820 +AAGAGATATAGATTGGCAGAACAGATTTAAAAACA +>EAS56_63:8:4:571:820 +CAACAACAGTAAAATAAAACAAAGGAGGTCATCAT +>EAS56_63:8:62:125:888 +CGGAAACCTTACAAGCCAGAAGAGATTGGATCTAA +>EAS56_63:8:62:125:888 +TGCCAGGAAGATACATTGCAAGACAGACTTCATCA +>EAS56_65:1:163:846:223 +CCAGCTCCCTGTCACCCAATGGACCTGTGATATCT +>EAS56_65:1:163:846:223 +GCCTTTGTTCACATAGACCCCCTTGCAACAACCTT +>EAS56_65:1:178:305:843 +ATGTTTCTTATCTGCACATTACTACCCTGCAATTA +>EAS56_65:1:178:305:843 +CCACGTCTCATCTAGGGGAACAGGGAGGTGCACTA +>EAS56_65:1:23:536:229 +AAAGCATACAGTCATCTATAAAGGAAATCCCATCA +>EAS56_65:1:23:536:229 +AAGGGGAAATAAAGTCAAGTCTTTCCTGACAAGCA +>EAS56_65:1:53:272:944 +CAACCCCCTTGCAACAACCTTGCGAACCCCAGGGA +>EAS56_65:1:53:272:944 +TGCGCTCTCATTCACTCCAGCTCCCTGTCACCCAA +>EAS56_65:2:224:579:433 +ATAACAATGGGCTTCTCAGCAGAAACCTTACAAGC +>EAS56_65:2:224:579:433 +TTCATCATCACTAAACCAGTCCTATAAGAAATGCT +>EAS56_65:2:56:155:49 +ATCCTACTAAATACATATGCACCTAACACAAGACT +>EAS56_65:2:56:155:49 +ATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCT +>EAS56_65:3:168:741:680 +AGGGACGCTGAAGAACTTTGATGCCCTCTTCTTCC +>EAS56_65:3:168:741:680 +TGGTCTGACAGGCTGCAACTGTGAGCCATCACAAT +>EAS56_65:3:47:64:359 +TTTTTTTTTTTCTCTCCTCTTTTTTTTTTTTTTTT +>EAS56_65:4:124:367:72 +AGACTACCCAGATTCATAAAACAAATACTACTAGA +>EAS56_65:4:124:367:72 +CATAGCTAAAACTAAAAAAGCAAAAACAAAAACTA +>EAS56_65:4:126:966:514 +AGAAGAAGTAGCTATACTTATATCAGATAAAGCAC +>EAS56_65:4:126:966:514 +TAAAAAGGGATTAAATTCCCCCACTTAAGAGATAT +>EAS56_65:4:150:94:843 +AAAGGGATTAAATTCCCCCACTTAAGAGATATAGA +>EAS56_65:4:150:94:843 +CAGATACATCCCACTTTAAATCAACCACAGTAAAA +>EAS56_65:4:296:78:421 +TCTTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTT +>EAS56_65:4:296:78:421 +TGTTGGTGTTCGTTTTTTCTCCTGTTTCTTTTTCT +>EAS56_65:5:121:380:656 +AATGTGTTTATTACCAGAGGGATGGAGGGAAGAGG +>EAS56_65:5:121:380:656 +GCCCAGCTCCAGATTGCTTGTGGTCTGACAGGCTG +>EAS56_65:5:131:742:561 +TCAAAAGGTGATGTGTGTTCTCATCAACCTCATAC +>EAS56_65:5:131:742:561 +TGCCTTCAGACCCTACACGAATGCGTCTCTACCAC +>EAS56_65:5:211:84:84 +CTATTTGAGGAAGTAATTGGGGAAAACCTCTTTAG +>EAS56_65:5:211:84:84 +GCAAGAGAAAAGCATACAGTCATCTATAAAGGAAA +>EAS56_65:5:262:53:888 +AAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGAT +>EAS56_65:5:262:53:888 +TTGAGACTACAGAGCAACTAGGTAAAAAATTAACA +>EAS56_65:5:278:848:765 +GTACACACGCTGTCCTATGTACTTATCATGACTCT +>EAS56_65:5:278:848:765 +TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG +>EAS56_65:5:299:336:613 +ATCCTACTAAATACATATGCACCTAACACAAGACT +>EAS56_65:5:299:336:613 +TACTCAATATATCCATGTAACAAATCTGCGCTTGT +>EAS56_65:5:30:92:753 +TATAATACCTCTACATGGCTGATTATGAAAACAAT +>EAS56_65:5:30:92:753 +TGGATTCTGGGAAATTCTTCATCCTGGACCCTGAG +>EAS56_65:5:312:985:871 +ATAAAACACATAGCTAAAACTAAAAAAGCAAAAAC +>EAS56_65:5:312:985:871 +TAAGAGGGATGAGAAATTACCTAATTGGTACAATG +>EAS56_65:5:37:611:267 +AATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACA +>EAS56_65:5:37:611:267 +TATAAAGGAAATCCCATAAGAATAACAATGGGCTT +>EAS56_65:5:75:637:650 +CTGATTATGAAAACAATGTTCCCCAGATACCATCC +>EAS56_65:5:75:637:650 +GTCTCATCTAGGGGAACAGGGAGGTGCACTAATGC +>EAS56_65:6:197:759:975 +AAAAGAATTGTAAAAGTCAAAATTAAAGTTCAATA +>EAS56_65:6:197:759:975 +AATTTTTGGACTTCTTAAAGAAAAAAAAACCTGTC +>EAS56_65:6:37:610:260 +CAAGCCCTTCTCACAGTTTCTGCCCCCAGCATGGT +>EAS56_65:6:37:610:260 +CCAGAGGGAAAGCTTTCAACGCTTCTAGCCATTTC +>EAS56_65:6:46:173:214 +AACAATGGGCTTCTCAGCAGAAACCTTACAAGCCA +>EAS56_65:6:46:173:214 +CTAGAGATTTAGACATCTAAATGAAAGAGGCTCAA +>EAS56_65:6:66:257:524 +ATACATGAGATTATTAGGAAATGCTTTACTGTCAT +>EAS56_65:6:66:257:524 +GCCTTCAGACCCTACACGAATGCGTCTCTACCACC +>EAS56_65:6:67:800:450 +TCACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGA +>EAS56_65:6:67:800:450 +TTACAAAATATAGTTGAAAGCTCTAACAATAGACT +>EAS56_65:6:82:822:767 +AACAGCTTAGGTATCAATTTGGTGTTCTGTGTAAA +>EAS56_65:6:82:822:767 +TTAGGAAATGCTTTACTGTCATAACTATGAAGAGA +>EAS56_65:7:118:775:467 +AACAGTAAAATAAAACAAAGGAGGTCATCATACAA +>EAS56_65:7:118:775:467 +TGTACAATATTCTGATGATGGTTACACTAAAAGCC +>EAS56_65:7:122:398:994 +GGGATTAAATTCCCCCACTTAAGAGATATAGATTG +>EAS56_65:7:122:398:994 +TAAAAGTCAAAATTAAAGTTCAATACTCACCATCA +>EAS56_65:7:219:40:833 +CCCATACTTTACTGCTACTCAATATATCCATGTAA +>EAS56_65:7:219:40:833 +GGAGGTCATCATACAATGATAAAAAGATCAATTCA +>EAS56_65:7:288:552:440 +AGAGGGAACGCTTTCAACTCTTCTAGCCATTTCTT +>EAS56_65:7:288:552:440 +TGTGGTCTGACAGGCTGCAACTGTGAGCCTTCCAT +>EAS56_65:7:67:692:110 +ATTGCCAGATGAACCACACATTAATACTATGTTTC +>EAS56_65:7:67:692:110 +GTATCAATTTGGTGTTCTGTGTAAAGTCTCAGGGA +>EAS56_65:8:117:156:84 +GGTTCAGAACTTGAAGACAAGTCTCTTATGAATTA +>EAS56_65:8:117:156:84 +TGGGGAAAACCTCTTTAGTCTTGCTAGAGATTTAG +>EAS56_65:8:206:563:262 +ATTACGTCCTATCTTCTTCTTAGGGAAGAACAGCT +>EAS56_65:8:206:563:262 +ATTAGGAAATGCTTTACTGTCATAACTATGAAGAG +>EAS56_65:8:218:173:667 +CCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGC +>EAS56_65:8:218:173:667 +TAATGATTCCTCAATGTTAAAATGTCTATTTTTGT +>EAS56_65:8:24:415:944 +GTTCAGGTAAAGGGGTGGAAAAAGATGTTCTACGC +>EAS56_65:8:24:415:944 +TAGGTAAAAAATTAACATTACAACAGGAACAAAAC +>EAS56_65:8:275:851:240 +CCCCAGAGGGAAAGCTTTCAACGTTTCTAGCCATT +>EAS56_65:8:275:851:240 +GTGGTCTGACAGGCTGCAACTGTGAGCCATCACAA +>EAS56_65:8:317:83:500 +TTTTTTTTTTTTCTTTTCTCCTTTTTTTTTTGTTT +>EAS56_65:8:64:507:478 +TAATTGAAAAATTCATTTAAGAAATTACAAAATAT diff --git a/tests/pysam_data/faidx_ex1.fq b/tests/pysam_data/faidx_ex1.fq new file mode 100644 index 0000000..92801c3 --- /dev/null +++ b/tests/pysam_data/faidx_ex1.fq @@ -0,0 +1,13080 @@ +@B7_589:1:101:825:28 +GGGAACAGGGGGGTGCACTAATGCGCTCCACGCCC ++ +<<86<<;<78<<<)<;4<67<;<;<74-7;,;8,; +@B7_589:1:101:825:28 +TGTGTCCATGTACACACGCTGTCCTATGTACTTAT ++ +0;0'0;<<<<<<8<;<<<<;;3<<;;<<<8<<<<< +@B7_589:1:110:543:934 +AAGAATTGTAAAAGTCAAAATTAAAGTTCAATACT ++ +<<<<<5<<;<<<<<<;<<<<<<<<<<<;<<<<<<< +@B7_589:1:110:543:934 +ACAAGCCAGAAGAGATTGGATCTAATTTTTGGACT ++ +<<<<<<<<<<<<;<<<<<;;<<<;;<<<<<,,;<< +@B7_589:1:122:337:968 +ACAGGGGGCTGCGCGGTTTCCCATCATGAAGCACT ++ +<<<<<;<<<<<<<<<<<<<<<<<<<;<<;;<;;;; +@B7_589:1:122:337:968 +GCTTTACTGTCTAAACTATGAAGAGACTATTGCCA ++ +%454<75!7<+!990<9<6<<<<6<<<< +@B7_597:6:29:249:878 +TCTCACAGTTTCTGCCCCCAGCATGGTTGTACTGG ++ +<<<<<<<<<<<<<<<<<<<<<<:<:<<=<<:<<6& +@B7_597:6:73:420:812 +CTAAGTATTGGTAAAGATGTGGGGAAAAAAGTAAA ++ +5'<<<,<&,<<,<<<<<7<<<<<<<<<<<<<<<<< +@B7_597:6:73:420:812 +CTAATTGGTACAATGTACAATATTCTGATGATGGT ++ +<<<<<1<<<<::1<7<:<96<9<:<<:4<70:11< +@B7_597:7:103:731:697 +AATTAACCCAGTCAGACAAAAATAAAGAAAAAAGA ++ +<<<<<<<<<<<<<<<<<<:<:<<6<<<<<<<:<;: +@B7_597:7:103:731:697 +CTTGCTAGAGATTTAGACATCTAAATGAAAGAGGC ++ +:::;3:<<<<<<<:<<<<<<:<<<<<<<<<<<<<< +@B7_597:7:113:408:211 +AAACTCATTAATAAAGACATGAGTTCAGGTAAAGG ++ +<:;:;:<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@B7_597:7:113:408:211 +GAGACTACAGAGCAACTAGGTAAAAAATTAACATT ++ +<<<<<<<<<<<<<<<:&<<<&:<<<<<<<<<<;:/ +@B7_597:7:31:948:254 +CCTCTACATGGCTGATTATGAAAACAATGTTCCCC ++ +<<<<<<<<<<<<<<<<<<<;<<<<<:<<8<;;;;< +@B7_597:7:31:948:254 +TGAAGCACTGAACTTCCACGTCTCATCTAGGGGAA ++ +7;;;98<<7<<<<<<<<<<<<<<<<<<8<<<<<<< +@B7_597:7:41:34:211 +CACCTAACACAAGACTACCCAGATTCATAAAACAA ++ +7<<<<<<<<<<<<<<<< +@B7_610:5:136:260:254 +GTGGAAAAAGATGTTCTACGCAAACAGAAACCAAA ++ +;:;;<<<<<<<<<<<<<<;<;<<<<<<<<<<<<<< +@B7_610:5:147:68:353 +AACAACCTTGAGAACCCCAGGGAATTTGTCAATGT ++ +<;<;<<7<<<<<<<7<<;;<7<4<8<<<8.;4;;; +@B7_610:5:147:68:353 +CCTTTGATATCTGGATTCTGGGAAATTCTTCATCC ++ +<<;;<<<<<<<<+;<<;<<0;<<<<;<<<<<<<<< +@B7_610:5:51:904:391 +ACCTATGAGTCACAGGTATTCCTGAGGAAAAAGAA ++ +<<<<<<<<<<<<<<<<<;<<<<<;:;<2<6;;;;; +@B7_610:5:51:904:391 +TATCTAAAGTCAACATGAAGGAAAAAAATTCTAAA ++ +;<96<<<<<<7<<7<<<<<<<<<<<<<<;<<<<<< +@B7_610:5:7:761:623 +CCGGCATGGTTGTACTGGGCAATACATGAGATTAT ++ +::';-8);<<<<;<1<<<<:<<<<<<<<<<<<<<< +@B7_610:5:7:761:623 +CTTTCAACGCTTCTAGCCATTTCTTTTGGCATTTG ++ +<<<<<<<<<<<<<8<<<<;;<0<<<<<;;<;<;;& +@B7_610:6:107:252:533 +AGAGAAGGAGTAGCTATACTTATATCAGATAAAGC ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;<<;9 +@B7_610:6:107:252:533 +CAAGACTACCCAGATTCATAAAACAAATACTACTA ++ +3<<<<+<<96<<<<<<;<<<<<<;<<<<<<<<<<< +@B7_610:6:111:379:700 +ACACTAAAAGCCCATACTTTACTGCTACTCAATAT ++ +7<<:<<<<02<<6&<==>=>=>=>>>==>>>=>>> +@EAS114_26:2:130:609:467 +CAATACTCACCATCATAAATACACACAAAAGTACA ++ +==8=====;==8==;=4=;;8=====;6=177.== +@EAS114_26:2:214:950:32 +ACAAGAAACTCATTAATAAAGACATGAGTTCAGGT ++ +>>=>>>>==>=>>>==>=>=:=====;=:=6:::6 +@EAS114_26:2:214:950:32 +AGAAGATATAACCATCCTACTAAATACATATGCAC ++ +=&==4======:;==6<==:=============== +@EAS114_26:2:237:497:165 +GAAATAAAGTCAAGTCTTTCCTGACAAGCAAATGC ++ +9=:=======2=27======<>&<=,==4>4=>>= +@EAS114_26:2:237:497:165 +TACAGTCATCTATAAAGGAAATCCCATCAGAATAA ++ +8===<8===========37=<===7=;7=8===== +@EAS114_26:2:315:219:7 +GAAAGAGGCTCAAAGAATGCCAGGAAGATACATTG ++ +7==::<2=8<<<=====>888<=2=>==>,>,>>8 +@EAS114_26:2:329:458:365 +GTGTTCTGTGTAAAGTCTCAGGGAGCCGTCCGTGT ++ +==========================9======== +@EAS114_26:2:329:458:365 +TTGTTGTTGGTTTTCTGTTTCTTTGTTTGATTTGG ++ +====:==9========>==7>==9>=7=>=>>=>> +@EAS114_26:2:73:513:102 +GTCTCATCTAGGGGAACAGGGAGGTGCACTAATGC ++ +==::===8=>=====>=>=>>>=>>==>=>>>>>> +@EAS114_26:2:73:513:102 +TGAAAACAATGTTCCCCAGATACCATCCCTGTCTT ++ +===========================;======= +@EAS114_26:3:117:284:589 +ACAAAATATAGTTGAAAGCTCTAACAATAGACTAA ++ +==================================0 +@EAS114_26:3:117:284:589 +GAACCTATGAGTCACAGGTATTCCTGAGGAAAAAG ++ +==8==;==================;========== +@EAS114_26:3:284:261:124 +ACAGCTGTGTTTAGTGCCTTTGTTCAACCCCCTTG ++ +===27===.====&===========;;======== +@EAS114_26:3:287:665:495 +GAATTGTAAAAGTCAAAATTAAAGTTCAATACTCA ++ +===,9=;;====7=====5===;==1========= +@EAS114_26:3:287:665:495 +TGGATCTAATTTTTGGACTTCTTAAAGAAAAAAAA ++ +==========================98====8=8 +@EAS114_26:4:100:238:596 +ATGAGAAATTACCTAATTGGTACAATGTACAATAT ++ +======9=====;=======5===;====/=;=== +@EAS114_26:4:100:238:596 +CAAAAACTATTCTAAGTATTGGTAAAGATGTGGGG ++ +4<<<<;<3<3&<3<1<5<31<<3<<<<<<2<<;<, +@EAS114_26:4:110:840:431 +CTGTCAAACACGAATGTTATGCCCTGCTAAACTAA ++ +77<;7<<<<<<<<<4<<<<<<<:<<<<<<<<<<<< +@EAS114_26:4:110:840:431 +GTAGTCATCAGACTATCTAAAGTCAACATGAAGGA ++ +=====================5:======54=+3+ +@EAS114_26:4:123:1001:580 +AGGTTTTATAAAACAATTAATTGAGACTACAGAGC ++ +<.00..3<6<<<<<<<3;<<08<<<<<6<<<<<<< +@EAS114_26:4:123:1001:580 +GGGAANTAAAGTCAAGTCTTTCCTGACAAGCAAAT ++ +=====!=====================1.8131*= +@EAS114_26:4:253:285:104 +CTCTCATTCACTCCAGCTCCCTGTCACCCAATGGA ++ +======================:========7==; +@EAS114_26:4:253:285:104 +GTGATGTGTGTTCTCATCAACCTCATACACACACA ++ +2<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS114_26:4:306:388:342 +CCGTCCGTGTCCTCCCATCTGGCCTCGTCCACACT ++ +================5====:=====;==1=4== +@EAS114_26:4:306:388:342 +GGGGAAGACATAATCCCACGCTTCCTATGGAAAGG ++ +9/<9;<<<;<;<<7<<<7<<<<<<<<<<<<<<<<< +@EAS114_26:4:40:352:151 +ATTACGTCCTATCTTCTTCTTAGGGAAGAACAGCT ++ +<<<<<<<<<<<<<<<;<<9<<<<:<<<<;<99<3< +@EAS114_26:4:40:352:151 +TTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTT ++ +;=;;5=:-=9=====;;================== +@EAS114_26:5:139:331:63 +GACACCCAACTAATATTTGTCTGAGCAAAACAGTC ++ +7===================:=:============ +@EAS114_26:5:139:331:63 +TTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTT ++ +====================<<============= +@EAS114_26:5:228:189:826 +AAGCCCTTCTCACAGTTTCTGCCCCCCGCATGGTT ++ +;9=========;=1======9=====1;=<3=:6; +@EAS114_26:5:228:189:826 +ATCATGACTCTATCCCAAATTCCCAATTACGTCCT ++ +:74=:.==1========================== +@EAS114_26:5:238:31:968 +ACACCATCCCTGTCTTACTTCCAGCTCCCCAGAGG ++ +=(.7=5%===9:7==+==77=============== +@EAS114_26:5:238:31:968 +ATTCTGCAGCCCAGCTCCAGATTGCTTGTGGTCTG ++ +9======8====*=====,=1=======<=7:::, +@EAS114_26:5:43:114:617 +AATCATAAATACACACAAAAGTACAAAACTCACAG ++ ++=22=6=================9=========== +@EAS114_26:5:43:114:617 +AATGTTATGCCCTGCTAAACTAAGCATCATAAATG ++ +=============;=========;=========== +@EAS114_26:6:129:694:359 +CCCTGAGAGATTCTGCAGCCCAGATCCAGATTGCT ++ +7777<7<7;77+<3<<;<<;<<<<;<<<<<<<<<< +@EAS114_26:6:129:694:359 +TGTCAGTTACCAAATGTGTTTATTACCCGAGGGAT ++ +============+7=======:==;;;'=;==7;= +@EAS114_26:6:140:253:322 +AATTTTTGGACTTCTTAAAGAAAAAAAAACCTGTC ++ +<<<<<<<<<<<<<;<<<<<<<<<<<<<<<;;;<<; +@EAS114_26:6:140:253:322 +GAAATGCTCAAAAGAATTGTAAAAGTCAAAATTAA ++ +=;===;54:====================>>===> +@EAS114_26:6:183:697:555 +AAAGAATGCCAGGAAGATACATTGCCAGACAGACT ++ +=====================:===&==:;==5;; +@EAS114_26:6:183:697:555 +AGAAATCTTAGAAGCCAGAAGAGATTGGATCTAAT ++ +<<<;&,.;);&96<84<<81<<&<<<9<<8<8<<1 +@EAS114_26:6:46:13:880 +AAAACCTCTTTAGTCTTGCTAGAGATTTAGACATC ++ +<<<<<<<<<<<<<<<<<<<<;<7<3<<<9<+;;<9 +@EAS114_26:6:46:13:880 +AGAAAAGCATACAGTCATCTATAAAGGAAATCCCA ++ +=&====8==========0================= +@EAS114_26:7:13:172:720 +AATTCATTTAAGAAATTACAAAATATAGTTGAAAG ++ +============:3<==:====<=9=3===;==83 +@EAS114_26:7:157:876:302 +AAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGA ++ +===:=8=;==:892=,28==88==28====8=;;8 +@EAS114_26:7:157:876:302 +CAACTAGGTAAAAAATTAACATTACAACACGAACA ++ +2<<;<<<22<<<<<<77<<<<22<7<<<<%-<<1< +@EAS114_26:7:218:858:445 +AAAAAGAAAAAGTGAGAAGTTTGGAAAAACTATTT ++ +;===5=;=======;==3======9;,79==;=== +@EAS114_26:7:218:858:445 +GAAAAAAATTCTAAAATCAGCAAGAGAAAAGCATA ++ +;<<<<<<<8;:<<<<<<;<<:<<<<<<<<<<<<;< +@EAS114_26:7:245:323:744 +ACCTCTACATGGCTGATTATGAAAACAATGTTCCC ++ +/.848299;&;9;9;=2.=7========;;===== +@EAS114_26:7:245:323:744 +GATTCTGGGAAATTCTTCATCCTGGACCCTGAGAG ++ +<;<<<<<<<<<<<<<<<<<<<<<;<+<<<<<<<4< +@EAS114_26:7:37:79:581 +TTAAAATTTAAAAAAAGTAAATAAAACACATAGCT ++ +<>4<>>>>;>>&>->9>9;4>->>>>,4>9>,<1> +@EAS114_26:7:37:79:581 +TTTTTTTTTTTTTTTTTTTTTTTCATGCCAGAAAA ++ +3,,,===6===<===<;=====-============ +@EAS114_26:7:86:308:648 +GAAGAACAGCTTAGGTATCAATTTGGTGTTCTGTG ++ +<7<<<;<<<<+;<<<2<5<<<77;<<2<;;<<<<< +@EAS114_26:7:86:308:648 +TATTAGGAAATGCTTTACTGTCATAACTATGAAGA ++ +=8=====;=8======;=======35==;=;.;25 +@EAS114_28:1:144:242:602 +ATCAGCAAGAGAAAAGCATACAGTCATCTATAAAGG ++ +========================;=====<;;<<; +@EAS114_28:1:144:242:602 +ATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAAG ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS114_28:1:168:389:889 +GAAATTACAAAATATAGTTGAAAGCTCTAACAATAG ++ +<<<<<<<<<<<<<<<<<<<<;<<<<<<<;9;;<<<< +@EAS114_28:1:168:389:889 +TAACTGAACCTATGAGTCACAGGTATTCCTGAGGAA ++ +;<<;;56;==================8========8 +@EAS114_28:1:168:609:646 +GGAAAAAAGTAAACTCTCAAATATTGCTAGTGGGAG ++ +;;<<<<=======;;:;======;==<========= +@EAS114_28:1:168:609:646 +GGTTACACTAAAAGCCCATACTTTACTGCTACTCAA ++ +<<<<<<<<<<<;<<<<<:<8<<<<;<<<<<4<<<9< +@EAS114_28:1:220:801:282 +AACCTCATATATCAATATTAACTTTGAATAAAAAGG ++ +;7;87;===;==;====:===<==7=========== +@EAS114_28:1:220:801:282 +AATTCATCATCACTAAACCAGTCCTATAAGAAATGC ++ +<<<<<<<<<<<<<<<<<<<<<;<+<;<<<<<::<<: +@EAS114_28:1:232:351:909 +ACATGGCTGATTATGAAATCAATGTTCCCCAGATGC ++ +<<<<<99<<<<<<99<7<'<9<<<6<<+<;7;<<&; +@EAS114_28:1:232:351:909 +CCATCATGAAGCGCTGAACTTCCACGTCTCATCTAG ++ +:8%3<8====130=8==+===;=3=8===48==;3* +@EAS114_28:1:28:708:463 +CCCAATGGACCTGTGATATCTGGATTCTGGGAAATT ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<9;<:<< +@EAS114_28:1:28:708:463 +GTATAATACCTCTACATGGCTGATTATGAAAACAAT ++ +;;<;<<====3=====5=================== +@EAS114_28:2:114:938:216 +CTAACAATAGACTAAACCAAGCAGAAGAAAGAGGTT ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<4; +@EAS114_28:2:114:938:216 +GAGTCACAGGTATTCCTGAGGAAAAAGAAAAAGTGA ++ +<<<<7<6<<<<<<<6<<<<<<<<<<<<<<<<<<<<< +@EAS114_28:2:141:7:963 +CACTTTAAATCAACAACAGTAAAATAAAACAAAGGA ++ +<<<<<<<<<<<<;<:<<<<<<1<<&<;<;<<;,<;5 +@EAS114_28:2:141:7:963 +TACAATGTACAATATTCTGATGATGGTTACACTAAA ++ +95+<<9<<5<;;<<;<<;'<<<<<;<<<7<9<<<<< +@EAS114_28:2:149:650:44 +CGCTCCACGCCCAAGCCCTTCTCACAGTTTCTGCCC ++ +;8<<7><>;>+>>/;>>=>=>=:>><>=<<==;)<=8; +@EAS114_28:4:149:572:877 +GAGGCTCAAAGAATGCCAGGAAGATACATTGCAAGA ++ +6<94693<;<<<<;;<<<<<<<<<<;9<<<<<<<<< +@EAS114_28:4:215:246:640 +AAAAGCATACAGTCATCTATAAAGGAAATCCCATCA ++ +<<<<<<<<<<9<;<<<<<<<<<<9;<<<<<<3;<;3 +@EAS114_28:4:215:246:640 +AAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGAT ++ +;<<,<<<96<<:<:<9<6<97<<<<<9<<<<9<<9< +@EAS114_28:4:305:707:258 +AAAAAGATGTTCTACGCAAGCAGAAACCAAATGAGA ++ +3<<7<,;<<<<0<66<6+<%<<<.<<<<<<<<<9<< +@EAS114_28:4:305:707:258 +GAACAAAACCTCATATATCAATATTAACTTTGAATA ++ +9<<<<<<<<<<<<;<<-<<;;<;<<9<<;<<+99;7 +@EAS114_28:4:322:631:245 +CCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGC ++ +<<<<<<<<<<<<<<<<<0<<<<<<<<<<<<<<<<5; +@EAS114_28:4:322:631:245 +TATTTTTGTCTTGACACCCAACTAATATTTGTCTGA ++ +<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<< +@EAS114_28:4:9:55:730 +ATCCCTGTCTTACTTCCAGCTCCCCAGAGGGAAAGC ++ +<:<;;<6<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS114_28:4:9:55:730 +CAGCCCAGCTCCAGATTGCTTGTGGTCTGACAGGCT ++ +>>=>>+==>>==<==<=8=><:;8/;7<<<<<<<<<<<<<< +@EAS114_45:6:37:156:134 +GGAAAAACTATTTGAGGAAGTAATTGGGGAAAACC ++ +;;;;;;;;;;9;;;;;;;;;;;;;;;9;;;77679 +@EAS114_45:6:39:956:676 +TAAAACAAATACTACTAGACCTAAGAGGGATGAGA ++ +899985;;<;:9;;:9<;:9:5;<;;;<;<;<<<< +@EAS114_45:6:39:956:676 +TGAGAGAAGGAGTAGCTATACTTATATCAGATAAA ++ +;;;;;;;;;;;;9;;;;;;;;;;;;;;;9957777 +@EAS114_45:6:44:77:1255 +CTCATTAATAAAGACATGAGTTCAGGTAAAGGGGT ++ +;;;;;;;8;;;7;8;;;;;;;;;;886;;;76777 +@EAS114_45:6:44:77:1255 +TAAAAAGATCAATTCAGCAAGAAGATATAACCATC ++ +79998;;;9:;<696<;.<;;<<;<;<;<;;;<8; +@EAS114_45:6:45:1769:1130 +ACCCAATGGACCTGTGATATCTGGATTCTGGGAAA ++ +;;;;;;;;;;;;9;;;;;;19;;;9;;;;176777 +@EAS114_45:6:45:1769:1130 +TGTTCTCATCAACCTCATACACACACATGGTTTAG ++ +88989;<;97;9<<;<;;;;9<98<<<<<<<;<<< +@EAS114_45:6:47:1791:444 +AAGAGGGATGAGAAATTACCTAATTGGTACAATGT ++ +978879;:;;<:;;<<;:<9<<<<;6;;;;<<<<; +@EAS114_45:6:47:1791:444 +TACTTATATCAGATAAAGCACACTTTAAATCAACA ++ +;3;;;;;;;;;;;;;;;;;;;;;;;;;;;877977 +@EAS114_45:6:59:1548:1096 +CCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTG ++ +88888;;88;;;;8;;9;;;<<<<<<<<<<<<<<; +@EAS114_45:6:59:1548:1096 +GTCCTATGTACTTATCATGACTCTATCCCAAATTC ++ +;.;;;;;;;;6;;;;;;;;;;;;;;;73;;77777 +@EAS114_45:6:5:730:1436 +GAAGAACTTTGATGCCCTCTTCTTCCAAAGATGAA ++ +7977979;;;;;;;;;7;3<;2<;26;<;<<;;<< +@EAS114_45:6:5:730:1436 +TATTCAGTTCTAAATATAGAAATTGAAACAGCTGT ++ +;;;;;;;;;;;;;;;;;;8;;;;;8;;;;;67777 +@EAS114_45:6:86:693:234 +AAGTAACTGAACCTATGAGTCACAGGTATTCCTGA ++ +;;;;;;;;;;;;;;;;9;;;;;;;;99;;&70777 +@EAS114_45:6:86:693:234 +GTAGTCATCAGACTATCTAAAGTCAACATGAAGGA ++ +83997;<;;;;98;;3*6<<;<:8;;;;;<;;<<< +@EAS114_45:6:86:859:1779 +TTTTTTTCATTTCTCTTTTTTTTTTTTTTTTTTTT ++ +;;;;;;;;;;;;;;;;;;;;;;;;;;;8;;)7699 +@EAS114_45:6:90:561:850 +ACAGGAACAAAACCTCATATATCAATATTAACTTT ++ +;;;;;;;;;;;;;;;;;;;;;;;;9;9;6;77777 +@EAS114_45:6:90:561:850 +TACGCAAACAGAAACCAAATGAGAGAAGGAGTAGC ++ +78376<;;9<;<<;:9<<<6;<;<;;8;;<;/;;; +@EAS114_45:6:93:1475:542 +TGAAAGCTTGGGCTGTAATGATGCCCCTTGGCCAT ++ +98987:9:<:;:;;;;;<<;<;<;;;;<<<;;;<< +@EAS114_45:6:93:1475:542 +TTATCATGACTCTATCCCAAATTCCCAATTACGTC ++ +;;;;;;;;;;;;;;;;;;;;;;9;;;9;;;77777 +@EAS114_45:7:14:1256:204 +AAATGTCTATTTTTGTCTTGACACCCAACTAATAT ++ +66777:;;37;;:;;0;:;;;;):;;:7;;;;;;; +@EAS114_45:7:14:1256:204 +TCACCCAGTCCCTGCCCCATCTCTTGTAATCTCTC ++ +<<<<<;;;;;;<;;;;;;;<;<;;;;<:-;79697 +@EAS114_45:7:14:978:1296 +ATACAATGATAAAAAGATCAATTCAGCAAGAAGAT ++ +;6;;;;;;;;;;;:;;;;;;;6;;;;;;;;77777 +@EAS114_45:7:14:978:1296 +CAATATTCTGATGATGGTTACACTAAAAGCCCATA ++ +77177;9;2:;;:;;(;;9;<;;;;:;;;:7;<<; +@EAS114_45:7:24:1374:211 +AGCCCTTCTCACAGTTTCTGCCCCCAGCATGGTTG ++ +;;:<<;<;:;;;;;;;;;;<::;;;6;;2+74917 +@EAS114_45:7:24:1374:211 +TGCAATTAATATAATTGTGTCCATGTACACACGCT ++ +77661;;;5;;:;;:;:;;;;;;8:;;;:;;;;;: +@EAS114_45:7:2:168:1878 +AAAAAACCTGGCAAACACGAATGTTATGACATGTN ++ +;<:;;<:<;<;<;;;;:;<;:::&9:&:68&6&*! +@EAS114_45:7:2:168:1878 +TAAATACACACAAAAGTAGAAAACGCACCAGTTTT ++ +*3/6)9.;;;;;;;;5;;);;;3;(;;;+(;7.)3 +@EAS114_45:7:33:1566:588 +ACAGCTTAGGCATCAATTTGGTGTTCTGTGTAAAG ++ +-6246;;97;77;;97;;;;;;9;7;79;)&;37; +@EAS114_45:7:33:1566:588 +TACTGTCATAACTATGAAGAGCCTATTGCCAGATG ++ +<;.;;;;6;;;;6;;29;;;<+9;;;.3;;73797 +@EAS114_45:7:35:538:1882 +TATGCACCTAACACAAGACTACCCAGATTCATAAA ++ +;);43.50;3;93;;4;3;;;9-7.;*;;966*75 +@EAS114_45:7:35:538:1882 +TCTATAACAAAATTAAAATTTAACAAAAGTAAATA ++ +73797;;3<;;<6;;<<<;8:;:;<;:<:;<<;;; +@EAS114_45:7:37:763:1437 +AAAGATGTTCTACGCAAACAGAAACCAAATGAGAG ++ +;;;;;6;;;;;;;;;:;6;5;5;;;;;76;767/7 +@EAS114_45:7:37:763:1437 +TAAAACAAATACTACTAGACCTAAGAGGGATGAGA ++ +79979;<;<;;;<;;;;;;6:;<:;<:8;<<<<;< +@EAS114_45:7:45:1339:1807 +GACATCTAAATGAAAGAGGCTCAAAGAATGCCAGG ++ +77797;;:;::&:;;0:;8;;4;;:;;6;;;;;;; +@EAS114_45:7:69:1130:832 +ATAGTTGAAAGCTCTAACAATAGACTAAACCAAGC ++ +;;2<;<;;<;9;<;;;;;;;7;8;;7;;;;77437 +@EAS114_45:7:69:1130:832 +TCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAA ++ +6)377;3;;;;;;;;;1;;;;;;;;;;;;;;;;;; +@EAS114_45:7:6:758:988 +AAACAAAGGAGGTCATCATACAATGATAAAAAGAT ++ +3+;0;0;;;0;;;;;;5;;;9;;;;90;;;57560 +@EAS114_45:7:6:758:988 +ATTCTGATGATGGTTACACTAAAAGCCCATACTTT ++ +3-7*73;;399:9;9;7<-(<;;<;;:;9::;;7; +@EAS114_45:7:88:451:1773 +ATAAATACACACAAAAGTACAAAACTCACAGGTTT ++ +;;:::<:;:<<;:6::;:;;:::;;<;;;367177 +@EAS114_45:7:88:451:1773 +ATTGGCAGAACAGATTTAAAAACATGAACTAACTA ++ +973776;;;;;;;;;::;;;;;;;;;;;;;;3;;; +@EAS114_45:7:97:1584:777 +CCAGATGAACCACACATTAATACTATGTTTCTTAT ++ +<<;<;;;;<;<;<<;;;;;;;;;;;;;;:;79979 +@EAS114_45:7:97:1584:777 +GTCTCAGGGAGCCGTCCGTGTCCTCCCATCTGGCC ++ +66746,9::9;;;;:;;;;;;;;;;;;;;;:;;;; +@EAS114_45:7:9:512:826 +AACTTCCACGTCTCATCTAGGGGAACAGGGAGGTG ++ +67<<<;;;<;;<<;;<;<:;9;;;9;;;;<59777 +@EAS114_45:7:9:512:826 +ACCACACATTAATACTATGTTTCTTATCTGCACAT ++ +76777:;;;;;;;;;;;;;;;;;;;;;;;;;:;;; +@EAS139_11:1:35:631:594 +ATCATGACTCTATCCCAAATTCCCAATTACGTCCT ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS139_11:1:35:631:594 +ATGATGCCCCTTGGCCATCACCCGGTCCCTGCCCC ++ +<<<<4<<<<<.<<<<<<<<<<<<<<<<<<<<<<<< +@EAS139_11:1:59:742:549 +ACAAGCAAATGCTAAGATAATTCATCATCACTAAA ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<8< +@EAS139_11:1:59:742:549 +TTAACATTACAACAGGAACAAAACCTCATATATCA ++ +-<<<3<<<<6<<6<<<<<6<<<<6<<<<<<<<<<< +@EAS139_11:1:81:1019:558 +ACAAAACTCACAGGTTTTATAAAACAATTAATTGA ++ +<<<<<<<<<<<6<<<<<<<<<<<<<<<<<<<<<7< +@EAS139_11:1:81:1019:558 +TGAACTAACTATATGCTGTTTACAAGAAACTCATT ++ +<<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS139_11:1:84:92:1246 +GAAAAAAGTAAACTCTCAAATATTGCTAGTGGGAG ++ +<<<<<<<<<<<<<<<8<<<<<<5<<<<<<<<<<<< +@EAS139_11:1:84:92:1246 +GTTACACTAAAAGCCCATACTTTACTGCTACTCAA ++ +<<<<<<<<<<<<<<<<5<:<<5<<<<<<<<<<<<< +@EAS139_11:2:31:628:1820 +AACCAGTCCTATAAGAAATGCTCAAAAGAATTGTA ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<9<<<<<<< +@EAS139_11:2:31:628:1820 +CAGGAACAAAACCTCATATATCAATATTAACTTTG ++ +<<<<<<:<<<<:6<<<<<<<<<<<<<<<<<<<<<< +@EAS139_11:2:42:333:516 +AGACAAGTCTCTTATGAATTAACCCAGTCAGACAA ++ +<<<<<5<*<2<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<:<<<< +@EAS192_3:7:149:354:667 +GAGGTGCACTAATGCGCTCCACGCCCAAGCCCTTC ++ +;<;;;<<<<;<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS192_3:7:298:644:697 +CTATGTTTCTTATCTGCACATTACTACCCTGCAAT ++ +8:<8;<;:7;<<;4;:+<7<<<<;<<<<<<<<<<< +@EAS192_3:7:298:644:697 +TCCACGTCTCATCTAGGGGAACAGGGAGGTGCACT ++ +<<<<<<<<<<<<<<<::;;;6<8:;;9;98;668; +@EAS192_3:7:66:891:294 +AGCACACTTTAAATCAACAACAGTAAAATAAAACA ++ +<<<<<<<<<<<<<<<<<<<<<<<9<<<<<<;<<<< +@EAS192_3:7:66:891:294 +TAATTGGTACAATGTACAATATTCTGATGATGGTT ++ +:<<5;;<<<4<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS192_3:7:78:692:671 +AATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACA ++ +<<);<<;;<<<<<;<<<<<<<<<<<<<6<<<<<<< +@EAS192_3:7:78:692:671 +CAGCAAGAGAAAAGCATACAGTCATCTATAAAGGA ++ +<<<<<<<<<<<<<;<<<<<<<:<<:<<<:8<<0;; +@EAS192_3:7:93:945:176 +CCAGAGGGAAAGCTTTCAACGCTTCTAGCCATTTC ++ +6;;;8<<3<<8.<;6)<<<<<9<<<<<<<<<<<<< +@EAS192_3:7:93:945:176 +GTGAGCCATCACAATGAACAACAGGAAGAAAAGGT ++ +<<<<<<<<<<<<<<<<<<<<<;<<<<;;<;:7;<3 +@EAS192_3:8:6:104:118 +AAGAATTTTAAAAATGAACAGAGCTTTCAAGAAGT ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<=<<<<<< +@EAS192_3:8:6:104:118 +TCTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGA ++ +;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS192_3:8:6:237:885 +AAAATCAGCAAGAGAAAAGCATACAGTCATCTATA ++ +<<<<1:<;:<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS192_3:8:6:237:885 +TATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT ++ +<<<<<<<<9<<<<<<<<<<<<<<<<<<<<<;;;<; +@EAS1_103:1:151:159:43 +AACCTCATACACACACATGGTTTAGGGGTATAATA ++ +;;4;6<<;<<<<7<77<6;<6<<<<<;;<<<<<<< +@EAS1_103:1:151:159:43 +TCTCATTCACTCCAGCTCCCTGTCACCCAATGGAC ++ +<<<<<<<;<<<8<<<;<;8<<<<7<77;;79<09+ +@EAS1_103:1:228:736:747 +AAGATATGTAGTCATCAGACTATCTAAAGTCAACA ++ +<<<<<<<<<;<<<<<<<;;<<;<<<<;::<;;7;7 +@EAS1_103:1:228:736:747 +TTGGACTTCTTAAAGAAAAAAAAACCTGTCAAACA ++ +<07<<&<;+<<<<<<<<<<<<<<<<;<<<<<<<<< +@EAS1_103:1:274:176:479 +CCTATCTTCTTCTTAGGGAAGAACAGCTTAGGTAT ++ +7)<<7<626<<7<<<<<<<<<<<<<<<<<<<3<<< +@EAS1_103:1:274:176:479 +GAAATGCTTTACTGTCATAACTATGAAGAGACTAT ++ +<<<<<<<<<<<<<;<<<<<<<<<<;<<9<59<<<< +@EAS1_103:1:2:831:692 +GTGTTCTCATCAACCTCATACACACACATGGTTTA ++ +2749'979<9<<<6;<<<0<;<<<<<3<<<<<<<< +@EAS1_103:1:2:831:692 +TCCAGCTCCCTGTCACCCAATGGACCTGTGATATC ++ +<<<<<<<<;<<<<<<<<<<9<<:9<<<;;96<796 +@EAS1_103:2:184:980:396 +AAGGAGGTCATCATACAATGATAAAAAGATCAATT ++ +<<;;<77;;<<;<<<<<<<<<<<<<<<<<<<<<<< +@EAS1_103:2:184:980:396 +ACATGAACTAACTATATGCTGTTTACAAGAAACTC ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<< +@EAS1_103:2:226:302:758 +GGAAAGCTTTCAACGCTTCTAGCCATTTCTTTTGG ++ +;<<<<9;<<<<<<<<<<7<<<<<<<<<<<<<<<<< +@EAS1_103:2:226:302:758 +TGCTTGTGGTCTGACAGGCTGCAACTTTGAGCGNT ++ +<<<<<<<;;;,<;<92;66<;))42<&2&(/1!!! +@EAS1_103:2:234:167:381 +AAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGAT ++ +<<;<;<<<<;<<<<7<<<<<<<<<<<<<<<<<<<< +@EAS1_103:2:234:167:381 +AGAGAAAAGCATACAGTCATCTATAAAGGAAATCC ++ +<<<<<<<<<<<<<<<<<<<<<<<<<;<<<;;7<;; +@EAS1_103:2:235:805:373 +TATCTTCTTCTTAGGGAAGAACAGCTTAGGTATCA ++ +<<;<<<<<<9<9<<<<<<<<<<<<<<<<<<<<<<< +@EAS1_103:2:235:805:373 +TTTACTGTCATAACTATGAAGAGACTATTTCCAGA ++ +<<<<<<<<<<<<<<<<<<<<;<;<<<<<<;;<99; +@EAS1_103:2:307:252:632 +ACCATCCTGCTAAATACATATGCACCTAACACAAG ++ +<77<;,5<,9<<<<<<;<<<<<7<;<<<<<<<<<< +@EAS1_103:2:307:252:632 +ATGTTCTACGCAAACAGAAACCAAATGAGAGAAGG ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;;<;; +@EAS1_103:3:253:175:31 +CAAACAGAAACCAAATGAGAGAAGGAGTAGCTATA ++ +<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<:<;;; +@EAS1_103:3:253:175:31 +TTCATAAAACAAATACTACTAGACCTAAGAGGGAT ++ +;+;<;<<<<<<<<9<<9<<<<<;<<<<<<<<<<<< +@EAS1_103:3:277:921:474 +AAAATATAGTTGAAAGCTCTAACAATAGACTAAAC ++ +<<<<<<<<<<<<<<<:<<<<<<<<<<<5<<;;;;; +@EAS1_103:3:277:921:474 +AAAGAAAAAGTGAGAAGTTTGGAAAAACTATTTGA ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS1_103:3:320:505:814 +ACAGTCTAGATGAGAGAGAACTTCCCTGGAGGTCT ++ +<2<;;5<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS1_103:3:320:505:814 +CTGTCTTGATTTACTTGTTGTTGGTTTTCTTTTTC ++ +<<<<<<<<<<<<<<<<;<<8<<76<<<<;<&<<<7 +@EAS1_103:3:323:196:855 +ACAAGCAAATGCTAAGATAATTCATCATCACTAAA ++ +<<<<<<<7<<<<<<:<<<<<<<<<<<<<<<<<;7: +@EAS1_103:3:323:196:855 +TAAAAAATTAACATTACAACAGGAACAAAACCTCA ++ +&<<<<<<09<<7<7;<;<<0<<<<<;<<<<<<<<< +@EAS1_103:3:41:474:283 +TGAACCACACATTAATACTATGTTTCTTATCTGCA ++ +<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<+<< +@EAS1_103:3:41:474:283 +TTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGTCC ++ +6/;;;88;;<:;48<<<<<;<;<<<<<<<<<<;<< +@EAS1_103:4:143:560:194 +GTTGTACTGGGCAATACATGAGATTATTAGGAAAT ++ +9:<;7<:::<:<;<<<<<<<<<<:<<<<<<<<<<< +@EAS1_103:4:143:560:194 +TCTAGCCATTTCTTTTGGCATTTGCCTTCAGACCC ++ +<<<<;;<<<<<<<<<<<6<;<<<<;;<<;9<999< +@EAS1_103:4:164:79:134 +ACAATGGGCTTCTCAGCGGAAACCTTACAAGCCAG ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7< +@EAS1_103:4:164:79:134 +AGATAATTCATCATCACTAAACCAGTCCTATAAGA ++ +<;<;<<<;<<;<<<<<<<<<<<<<<<<<<<<<<<< +@EAS1_103:4:231:815:626 +GATCAATACAGCAAGAAGATATAACCATCCTACTA ++ +'<4%<<<22<<,<<;<<4;<<<<<<<<<<<<<<7< +@EAS1_103:4:231:815:626 +GCTGTTTACAAGAAACTCATTAATAAAGACATGAG ++ +<;<<<<9<<<<<<<<<<<<<<<<<;<<;5<<<;:; +@EAS1_103:4:235:899:847 +AGAAACTCATTAATAAAGACATGAGTTCAGGTAAA ++ +<<3<;<<<<<<<<<;;<<<<<<<+<<<+6<8<3/< +@EAS1_103:4:235:899:847 +ATAAAAAGATCAATTCAGCAAGAAGATATAACCAT ++ +<7<<<<<<<<:<<<<:<<<<<1>><<<< +@EAS1_108:2:102:543:160 +CAACAGGAACAAAACCTCATATATCAATATTAACT ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<6<:< +@EAS1_108:2:102:543:160 +CAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAA ++ +9==9=====;=====================<=== +@EAS1_108:2:116:966:193 +ATTAACATTACAACAGGAACAAAACCTCATATATC ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<< +@EAS1_108:2:116:966:193 +GACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGT ++ +=================================== +@EAS1_108:2:170:326:433 +CTTCCCTGGAGGTCTGATGGCGTTTCTCCCTCGTC ++ +:44<<<<<<<<<<:6<<<<<<<:<<<<<<<<<<<< +@EAS1_108:2:170:326:433 +TTGTTGGTTTTCTGTTTCTTTGTTTGATTTGGTGG ++ +=====<=9===:=<:==2=======2:===9==/5 +@EAS1_108:2:176:653:957 +AAAGGGGTGGAAAAAGATGTTCTACGCAAACAGAA ++ +===::=============<==<====<======== +@EAS1_108:2:176:653:957 +ACATTACAACAGGAACAAAACCTCATATATCAATA ++ +????????????<=>>>==>>===>==> +@EAS1_108:6:159:493:275 +ACAAAACTCACAGGTTTTATAAAACAATTAATTGA ++ +=====3============================= +@EAS1_108:6:159:493:275 +TGCTGTTTACAAGAAACTCATTAATAAAGACATGA ++ +4949;<<<<<<<<<<<6<;<<<<;<<<<<*<<<<< +@EAS1_108:6:165:464:123 +CATACACACACATGGTTTAGGGGTATAATACCTCT ++ +===============7==============8==== +@EAS1_108:6:165:464:123 +GTCTCTACCACAGGGGGCTGCGCGGTTTCCCATCA ++ +9;<)<<%<<9<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS1_108:6:222:579:961 +AGTCCTATAAGAAATGCTCAAAAGAATTGTAAAAG ++ +=58====;==8=======;================ +@EAS1_108:6:222:579:961 +CAGAAACCTTACAAGCCAGAAGAGATTGGATCTAA ++ +<<<<<<<<<<<<<<<<<<<<<<<<<7<<:7;;;68 +@EAS1_108:6:71:187:824 +AGACAGACTTCATCAAGATATGTAGTCATCAGACT ++ +;===;======3==;==========4=;=7;;3;6 +@EAS1_108:6:71:187:824 +TCTAATTTTTGGACTTCTTAAAGAAAAAAAAACCT ++ +0040;<7<<<<0<7<<<;<7*<<<<<7<<771<<< +@EAS1_108:6:73:735:329 +AAAGGGATTAAATTCCCCCACTTAAGAGATATAGA ++ +================;==;====;=;=======; +@EAS1_108:6:73:735:329 +TAGCTATACTTATATCAGATAAAGCACACTTTAAA ++ +;;;9;<<7<<<<<<<<<<<<<<<<<<<2<<<<<<< +@EAS1_108:6:77:48:860 +CTCTGTCTTGATTTACTTGTTGTTTGTTTTCTGTT ++ +=========;===========9==*;5=;=;=,7= +@EAS1_108:6:77:48:860 +TAGATGAGAGAGAACTTCCCTGGAGGTCTGATGGC ++ +;8;8;<9<9<<<<<<<<<4<<<<<<<<<<<<<<<< +@EAS1_108:6:94:294:387 +ACCATCATAAATACACACAAAAGTACAAAACTCAC ++ +779=53=9===;=:=;=========;========= +@EAS1_108:6:94:294:387 +GAATGTTATGCCCTGCTAAACTAAGCATCATAAAT ++ +<<<<<<<;<<<<<<<<<:<<<<<<<<<<<<;)7;; +@EAS1_108:6:95:235:746 +CTAAGCATCATAAATGAAGGGGAAATAAAGTCAAG ++ +==&=;===7=3===8======;=;8===8=====; +@EAS1_108:6:95:235:746 +TCTAAAATCAGCAAGAGAAAAGCATACAGACATCT ++ +<<<<;<<<<<<<<79<<<<<<<<<<<<<<*;;;<9 +@EAS1_108:7:108:440:208 +CCCATCCTACTAAATACATATGCACCTAACACAAG ++ ++35:486<<4<<<<<<<<<<<-<<<<<7<<)<<<- +@EAS1_108:7:108:440:208 +TTCAGGTAAAGGGGAGGAAAAAGATGTTCTACGCA ++ +<<<;<<<<<<<<<<<8<<<<<><<<<<><<<<<<<<<<<<<<< +@EAS1_95:7:280:607:113 +ATCCATGTAACAAATCTGCGCTTGTACTTCTAAAT ++ +===================;===;=====<=7=9: +@EAS1_95:7:280:607:113 +GGAGTATAAATTGTTTTCCACTTTGGAAAACAATT ++ +18<-<<<<<<<<<<<<<8<<<<<<<<<<<<<<<<< +@EAS1_95:7:282:817:710 +TGGAGGGAAGAGGGACGCTGAAGAACTTTGATGCC ++ +366=6;======8====:========;======== +@EAS1_95:7:282:817:710 +TTTGTAATGAAAACTATATTTATGCTATTCAGTTC ++ +<<<<<<<<<<<<<<<<<<<<<<<;:<<<<:8,<<8 +@EAS1_95:7:310:800:761 +AAAGCACACTTTAAATCAACAACAGTAAAATAAAA ++ +===========================+======= +@EAS1_95:7:310:800:761 +CAATATTCTGATGATGGTTACACTAAAAGCCCATA ++ +1<<:<:<:<<<<:<<<<<<<<<;<<<<<<<<<<<< +@EAS1_95:7:46:522:426 +AAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGA ++ +<<<<<:<<<<<<1/<<<<<<<<<<<<<<<<<<<<< +@EAS1_95:7:46:522:426 +GGTAAAAAATTAACATTACAACAGGAACAAAACCT ++ +=======================:==;<===78== +@EAS1_95:7:55:506:125 +CTTTACTGTCATAACTATGAAGAGACTACTGCCAG ++ +118%67;1;8,4:187<4>::1:818;;&::<>.; +@EAS1_95:7:55:506:125 +TCTACCACAGGGGGCTGCGCGGTTTCCCATCATGA ++ +<<<<<<<<<;<9<;<<;558<<<<5(5*<<<<<51 +@EAS1_95:7:61:702:720 +ATTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAA ++ +<<<4<4+0;<<:<<<<<<<<-<<<<<<<<<<<<<< +@EAS1_95:7:61:702:720 +CTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTC ++ +==============;=======&=========3:= +@EAS1_95:7:74:866:49 +CATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTC ++ +====================9==91==<=6==;:= +@EAS1_95:7:74:866:49 +CCAACCTACTAAATACATATGCACCTAACACAAGA ++ +:8<&<<<<7<<<<:<<<<<<8<5<<<<<<<<<<<< +@EAS1_97:2:128:629:484 +AAAAAAGTAAATAAAACACATAGCTAAAACTAAAA ++ +:(::<<<<<<<<<7<<<<<<<<=<<<<<<<<<<<<<< +@EAS1_99:8:27:228:31 +AAATAAAACAAAGGAGGTCATCATACAATGATAAA ++ +<<<<<<<<<<<<<<<<<;9<:;<<<<<<75<<<<< +@EAS1_99:8:27:228:31 +GGTTACACTAAAAGCCCATACTTTACTGCTACTCA ++ +99;;;<<<<<<:<<;<;<<;<<<<;<<;<<<<<<< +@EAS1_99:8:99:756:130 +GAAGAAAAGGTCTTTCAAAAGGTGATGTGTGTTCT ++ +;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<6<<;< +@EAS1_99:8:99:756:130 +GACCCTACACGAATGCGTCTCTACCACAGGGGGCT ++ +;;<<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS218_1:2:10:686:1024 +ACAAGAAACTCATTAATAAAGACATGAGTTCAGGT ++ +<:<<<<:<<<<<<<<<<:<:<<<<<<<<<<<5<<< +@EAS218_1:2:10:686:1024 +CATACAATGATAAAAAGATCAATTCAGCAAGAAGA ++ +&<<<3<<<<<<<<<<<<<<7<<<<<<<<<<7<<<< +@EAS218_1:2:15:1763:1143 +AAACAAATACTACTAGACCTAAGAGGGATGAGAAA ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS218_1:2:15:1763:1143 +TGAGAGAAGGAGTAGCTATACTTATATCAGATAAA ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS218_1:2:18:1498:1475 +CTTGGGCTGTAATGATGCCCCTTGGCCATCACCCG ++ +<<<<<7<<<<<<+<<-3<<3<:<2<1<<:<<<<<+ +@EAS218_1:2:18:1498:1475 +GAAAGGTTGTTGGGAGATTTTTAATGATTCCTCAA ++ +:<4<*7<<<<<<<:<<:<<<<<<<<<<<<<<<<<< +@EAS218_1:2:19:752:816 +CGTCCGTGTCCTCCCATCTGGCCTCGTCCACACTG ++ +<<<<<<<<<<<<<<<<<<<8<7;<;<<767277;6 +@EAS218_1:2:19:752:816 +TTTGGTGGAAGACATAATCCCACGCTTCCTATGGA ++ ++<<+<--/<<<<4<2<<<<45<<<:<<<<<<+<<< +@EAS218_1:2:26:211:481 +ACAAAATATAGTTGAAAGCTCTAACAATAGACTAA ++ +<<<<<<<<<<<<<<<<<<<<<<<7<<<<<:<7<<< +@EAS218_1:2:26:211:481 +CACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAA ++ +:<:<<<<<<9:5<<<<<<<<<<<<<<:<:<<<<<< +@EAS218_1:2:40:1291:1045 +CTAACACAAGACTACCCAGATTCATAAAACAAATA ++ +*<<<9<<<<<<:0<9<<<<<<<;<<<<<<<<<<<< +@EAS218_1:2:40:1291:1045 +GTAAAGGGGTGGAAAAAGATGTTCTACGCAACAAG ++ +<<<<<<<<<5<<5<<<<7<<<<<<<<<5<9<&%73 +@EAS218_1:2:64:1318:1711 +GGAAGAGGGACGCTGAAGAACTTTGATGCCCTCTT ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS218_1:2:64:1318:1711 +TGAAAACTATATTTATGCTATTCAGTTCTAAATAT ++ +<<<<<<<<<<<<<<<<7<<<<<<<:<<<<<2<<<< +@EAS218_1:4:14:1872:1521 +TCAAAGAATGCCAGGAAGATACATTGCAAGTCAGA ++ +7<<<<77<<<3<3<7.'<<<<<7<67<+.0%4*<4 +@EAS218_1:4:14:1872:1521 +TCATCAAAAACCTTACAAGCCAGAAGAGATTGGAT ++ +/1<%73&7<1<3577,<<<7/733<<<<<<<<1<< +@EAS218_1:4:15:856:340 +CACGCTGTCCTATGTACTTATCATGACTCTATCCC ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS218_1:4:15:856:340 +CCCCAGCATGGTTGCACTGGGCAATACATGAGATT ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<77<< +@EAS218_1:4:28:315:310 +AAACTGTTCTCTTGAAAGCTTGGGCTGTAATGATG ++ ++%,768<<:<:<2<<<<<<<<<<<<<<<<<<<<<< +@EAS218_1:4:28:315:310 +CATGTACACACGCTGTCCTATGTACTTATCATGAC ++ +<<<<<<<<<<<<<<<<<<<<<:<+.<<.<+7<*17 +@EAS218_1:4:37:1626:862 +ACCCAACTAATATTTGTCTGAGCAAAACAGTCTAG ++ +:663<<3<<<<<<<<<<:<<<<7<<<<<<<<<<<< +@EAS218_1:4:37:1626:862 +TCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCT ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS218_1:4:61:1369:440 +AAAGACATGATTTCAGGTAAAGGGGTGGAAAAAGA ++ +<<<<<<<<<<8<<<<<<<<<<<<<<<<<<<<<<<< +@EAS218_1:4:61:1369:440 +CAGGTTTTATAAAACAATTAATTGAGACTACAGAG ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<8 +@EAS218_1:4:62:561:531 +AGCTATACTTATATCAGATAAAGCACACTTTAAAT ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS218_1:4:62:561:531 +TACTAGACCTAAGAGGGATGAGAAATTACCTAATT ++ +<<7<<<<:<8<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS218_1:4:71:832:743 +ACCCAGTCCCTGCCCCATCTCTTGTAATCTCTCTC ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS218_1:4:71:832:743 +CTATGTACTTATCATGACTCTATCCCAAATTCCCA ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<*<<<<<<< +@EAS218_1:4:73:42:1038 +AAACAGTCTAGATGAGAGAGAACTTCCCTGGAGGT ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS218_1:4:73:42:1038 +TCTGTCTTGATTTACTTGTTGTTGGTTTTCTGTTT ++ +<<<<<<<<<<<<<<<<<<<<<<<:<<<<<.<<<<< +@EAS218_1:4:75:555:1591 +TGAACTTCTGTAATTGAAAAATTCATTTAAGAAAT ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<6<<<< +@EAS218_1:6:49:905:27 +CCACAGGGGGCTGCGCGGTTTCCCATCCTGAAGCA ++ +<<;<.89<9.<2<9<:91+447.9,04&000(,+( +@EAS218_1:6:49:905:27 +GAAGAGACTATTGCCAGTTGAACCACACATTAATA ++ +99515<<&<<6595-56%;86&<;<<<6<<<<6;< +@EAS218_1:6:66:1282:1215 +GTGATGTGTGTTCTCATCAACCTCATACACACACA ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;;; +@EAS218_1:6:66:1282:1215 +TTCAGACCCTACACGAATGCGTCTCTACCACAGGG ++ +::;<;<<<<:<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS218_1:6:77:1529:522 +AAAACCTGTCAAACACGAATGTTATGCCCTGCTAA ++ +<<;<<<<<<<<<<<4<<4<;;:;2:7<<<2*<;;8 +@EAS218_1:6:77:1529:522 +AAAGTTCAATACTCACCATCATAAATACACACAAA ++ +<<<;7;,<<<<<<.<,6<<6<<<<<<<;<<<<<<< +@EAS218_1:6:88:1413:14 +AATGAAAGAGGCTCAAAGAATGCCAGGAAGATACA ++ +<<<<<<<<<<<;;;<<<<<<;<;;<<<<<<<<<<< +@EAS218_1:8:13:1729:1844 +ATGAACTTCTGTAATTGAAAAATTCATTTAAGAAA ++ +<<<;;<;7<<<<4<<<<762;6<<<<<<<;6;618 +@EAS218_1:8:16:1081:1894 +AAGGTGATGTGTGTTCTCATCAACCTCATACACAC ++ +;5;;&<;<<<<<<<<;<;<<;<<<;<<<<<<<<<< +@EAS218_1:8:16:1081:1894 +AGATGAAACGCGTAACTGGGCTCTCATTCACTCCA ++ +<<<<<<<<<<<<<<<<<<8<<<<;<<;<<<<<<<+ +@EAS218_1:8:26:785:882 +CAGTTTCTGCCCCAAGCATGGTTGTACTGGGCAAT ++ +<<<0<<<<<<<<<6,<<)<<<<<<<&<<0<<,<'< +@EAS218_1:8:26:785:882 +TACTTATCATGACTCTATCCCAAATTCCCAATTAC ++ +<<&5&<<<<5.;5<'<<;.76<<<<<7<7<<<<<< +@EAS218_1:8:61:1797:113 +CAGATAGCTTGTGGTCTGACAGGCTGCAACTGTGA ++ +<<0<<&<<<<;<<4;;3<;<:<<<<<<<<<<<<<< +@EAS218_1:8:61:1797:113 +GGGATGGAGGGAAGAGGGACGCTGAAGAACTTTGA ++ +<<<<<<;<<<<;:<3<<<<;;<<<8<<;:<<;3<. +@EAS218_1:8:70:445:1289 +CTAATTTTTGGACTTCTTAAAGAAAAAAAAACCTG ++ +<<<<<<<<<<2<<<<<<<<<<:<<<<<<<;;;;<: +@EAS218_1:8:70:445:1289 +GAATTGTAAAAGTCAAAATTAAAGTTCAATACTCA ++ +<<<:<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<< +@EAS218_1:8:82:1540:77 +ATTGAGACTACAGAGCAACTAGGTAAAAAATTAAC ++ +<48;<;<<<<< +@EAS221_1:6:96:491:1891 +AGAAGTTTGGAAAAACTATTTGAGGAAGTAATTGG ++ +<:<<<<<::<<<<<<<<<<<<<<<<:<<::7<<:7 +@EAS221_1:6:96:491:1891 +GTCAACATGAAGGAAAAAAATTCTAAAATCAGCAA ++ +:;5<<7<;:<<;<<<<<<<<<<;<<<<<<<<<<<< +@EAS221_1:8:15:881:1932 +CACTTAAGAGATATAGATTGGCAGAACAGATTTAA ++ +<<<<<<<<<<<<<<<;<<<<:<<<2<26<8<<;;. +@EAS221_1:8:15:881:1932 +CACTTTAAATCAACAACAGTAAAATAAAACAAAGG ++ +)<4<<<<<<<4<<4<<4<<<<<<<<<<<<<<<<<< +@EAS221_1:8:4:679:110 +AATGTTCCCCAGATACCATCCCTGTCTTACTTCCA ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS221_1:8:4:679:110 +TCCAGATTGCTTGTGGTCTGACAGGCTGCAACTGT ++ +<<<<<<<<<<<<<<<<<<<;<<<<<<<<::<;;:7 +@EAS221_1:8:58:369:244 +CTGTAATGATGCCCCTTGGCCATCACCCAGTCCCT ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS221_1:8:58:369:244 +TTGGGAGATTTTTAATGATTCCTCAATGTTAAAAT ++ +<<<<<<<<<<<<<<<<<<<<;<<;<<<<<<<<<<< +@EAS221_1:8:60:1020:1259 +CTATGAAGAGACTATTGCCAGATGAACCACACATT ++ +<;<<<<;<<<<<<<<<;<<<<<<<8<<<<<:<:<< +@EAS221_1:8:60:1020:1259 +TAGGGAAGAACAGCTTAGGTATCAATTTGGTGTTC ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS221_1:8:65:1928:1125 +CATCACAATGAACAACAGGAAGAAAAGGTCTTTCA ++ +<<;<<<7<<7<;<7<<<<<<<7<<<<;<.-;<+88 +@EAS221_1:8:65:1928:1125 +GGCATTTGCCTTCAGACCCTACACGAATACGTCTC ++ +<+<<<2<4<<<0<<4<<<<<6<<<6<<<'<<<<0< +@EAS221_1:8:67:1797:1931 +GGGAAAGCTTTCAACGCTTCTAGCCATTTCTTTTG ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS221_1:8:67:1797:1931 +TGGTCTGACAGGCTGCAACTGTGAGCCATCACAAT ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<< +@EAS221_1:8:70:1349:1788 +ATTATATCAGATAAAGCACACTTTAAATCAACAAC ++ +&<8<<<85:580;<:0-><;>588>9<>7:<0<9; +@EAS221_1:8:70:1349:1788 +TACTAGACCTAAGAGGGATGAGAAATTACCTAATT ++ +<7;<<8<74;;<1<<71<;7<;;<;<7<<<<<<<< +@EAS221_1:8:73:108:1621 +GAACTTCCCTGGAGGTCTGATGGCGTTTCTCCCTC ++ +<<8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS221_1:8:73:108:1621 +GTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGACA ++ +<<<<<<<<71<<<<<<<<<+<<<<70:0<9<<61< +@EAS221_1:8:77:781:676 +TCATGAAGCACTGAACTTCCACGTATCATCTAGGG ++ +<<<<<<<5<<5<<<<<<<<<<<<13<<2<<<<<,< +@EAS221_1:8:77:781:676 +TTGCCAGATGAACCACACATTAATACTATGTTTCT ++ +:<;<2<<<<<<26<<<<6<;<<<<<<<<<<<<<<< +@EAS221_1:8:78:1478:1446 +GGAAGAGGGACGCTGAAGAACTTTGATGCCCTCTT ++ +<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<:<<<; +@EAS221_1:8:78:1478:1446 +TGTGGTCTGACAGGCTGCAACTGTGAGCCATCACA ++ +<8,8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS221_1:8:84:1013:1074 +GCAAGGGGGTCTATGTGAACAAAGGCACTAAACAC ++ +<7<<<<<<<<9<<<<<<<<<<<<<<<<<<<<<<<< +@EAS221_1:8:84:1013:1074 +TTGATGCCCTCTTCTTCCAAAGATGAAACGCGTAA ++ +8;;<;8744<7<<4<<47<<<<<<7<<<<<<<<<< +@EAS221_1:8:8:1351:1986 +CCCAAGCCCTTCTCACAGTTTCTGCCCCCAGCATG ++ +<8;<<<<<<<<<<<;<<;<<<<<<<<<<<<<<<<< +@EAS221_1:8:8:1351:1986 +TCTTACTTCCAGATCCCCAGAGGGAAAGCTTTCAA ++ +<<<<<<<<<<<<-<<<<<<<<<<<<<<<<<<<<<< +@EAS221_3:2:100:1147:124 +AAAAAAGAATTTTAAAAATGAACAGAGCTTTCAAG ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<< +@EAS221_3:2:100:1147:124 +AATGCCAGGAAGATACATTGCAAGACAGACTTCAT ++ +<<<<96<<<<<<<<<<<<<<<<<<<<<<:<<<<<< +@EAS221_3:2:22:1623:709 +GAAGACAAGTCTCTTATGAATTAACCCAGTCAGAC ++ +<<<<<<<<<7<<<<<<<:<<<<<<<<:85:<:2<< +@EAS221_3:2:22:1623:709 +GGGAAAACCTCTTTAGTCTTGCTAGAGATTTAGAC ++ +<'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS221_3:2:2:491:1886 +CTCTTTAGTCTTGCTAGAGATTTAGACATCTAAAT ++ +<<:<8:<<<:<<<<<<<<<<<9<<<<<<<<<<<<: +@EAS221_3:2:59:1576:946 +AACTGTGAGCCATCACAATGAACAACAGGAAGAAA ++ +<:<<<<<<<<<<<<:<:<<<<<<<8<<::1<<<<< +@EAS221_3:2:59:1576:946 +CAACGCTTCTAGCCATTTCTTTTGGCATTTGCCTT ++ +9<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS221_3:2:60:590:1760 +AAAGTAACTGAACCTATGAGTCACAGGTATTCCTG ++ +<:<<<<<2<<<<:<::<<<::<<<<<6<<<<<<<6 +@EAS221_3:2:60:590:1760 +TCATCAAGATATGTAGTCATCAGACTATCTAAAGT ++ +<8<-<<<<<<<82<<<4<<<<<<<<<<<<<8<<<< +@EAS221_3:2:67:1467:1447 +AAAGTTCAATACTCACCATCATAAATACACACAAA ++ +<<<<<<<<<<<<<<<<<<<<<<7<<<<<<<<<<<< +@EAS221_3:2:67:1467:1447 +ATAGATTGGCAGAACAGATTTAAAAACATGAACTA ++ +<<<<<::<<:<<<<:<<<<<<<<<<<<<<<<<<<< +@EAS221_3:2:67:1864:477 +AATGATGCCCCTTGGCCATCACCCAGTCCCTGCCC ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS221_3:2:67:1864:477 +TAAAATGTCTATTTTTGTCTTGACACCCAACTAAT ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS221_3:2:76:1729:813 +TAATTTCGTTTTTTTTTTTTTCTTTTCTCTTTTTT ++ +<+6<<<&1<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS221_3:2:76:1729:813 +TCTGCGCTTGTACTTCTAAATCTATAAAAAAATTA ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS221_3:4:12:276:1797 +ACTATTGCCAGATGAACCACACATTAATACTATGT ++ +<<<<<<<<<<<<:>>>>>>>>>>>>>;<>>>>><<>>>;<+<<<+<<<<:<<<<2<;<<<;<<<<<<<<<<< +@EAS54_67:3:172:196:746 +GCATACAGTCATCTATAAAGGAAATCCCATCAGAA ++ +<<<<<<<<9<<<<9<<<<<<<<<;<<<<6<<<<;< +@EAS54_67:3:175:730:949 +TTATGCTATTCAGTTCTAAATATAGAAATTGAAAC ++ +<<<<;+<<<<7<;<<;<<<<<<<<<<<<<<<<<<< +@EAS54_67:3:197:261:624 +GACTATCTAAAGTCAACATGAAGGAAAAAAATTCT ++ +<<<<<<<<<<<;<<<<<<<;<<;<<<<<<;<<<9< +@EAS54_67:3:197:261:624 +GCCCTGCTAAACTAAGCATCATAAATGAAGGGGAA ++ +866;2:/;<<<;:<<<;<;;<<<<<<<<<<<<<<< +@EAS54_67:3:47:471:858 +ACACCCAACTAATATTTGTCTGAGCAAAACAGTCT ++ +/;9<<63<<<<3<;<<<<<<<<<<<<<<<<<<<9< +@EAS54_67:3:47:471:858 +CATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTG ++ +<<;<<<<<<<<9<<<4;;<<<<;<<<<<.<<4;<4 +@EAS54_67:4:142:943:582 +TTCAAATGAACTTCTGTAATTGAAAAATTCATTTA ++ +<<<<<<;<<<<<<:<<;<<<<;<<<;<<<:;<<<5 +@EAS54_67:4:145:607:216 +AACGCGTAACTGCGCTCTCATTCACTCCAGCTCCC ++ +<<<<<<<<8<<<<<<<<<<4<<<7<:<<1<<;;99 +@EAS54_67:4:145:607:216 +TGAAAAACAGGAAGAAAAGGTCTTTCAAAAGGTGA ++ +/;<<&<<8<<<<<<<<<<<<<;872<<<<<<<<<< +@EAS54_67:4:7:526:343 +TCATCCTGGACCCTGAGAGATTCTGCAGCCCAGCT ++ +<<<<<<<<<<<<<<<:<<<5<<<<<<5;<<<+8<; +@EAS54_67:4:7:526:343 +TGAAAACAGTGTTCCCCAGATACCATCCCTGTCTT ++ +(7:;;;<<;;;<1<1<<<<<<<<<<<<<<<<<<<< +@EAS54_67:5:117:33:262 +AATTAACATTACAACAGGAACAAAACCTCATATAT ++ +<<;;<<;<:8<7<<;<<<<<<<<<<<<<<<<<<<< +@EAS54_67:5:117:33:262 +ACAAGCAAATGCTAAGATAATTCATCATCACTAAA ++ +<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; +@EAS54_67:5:124:241:608 +CTGAACTTCCACGTCTCATCTAGGGGAACAGGGAG ++ +9;;<<;<<<;<<<;<:<<<<;<<<<<<<<<<<<<< +@EAS54_67:5:124:241:608 +GGGTATAATACCTCTACATGGCTGATTATGAAAAC ++ +<<<<<<<<<;<<<<<<<<<;;<<<;<<<<;;8;;: +@EAS54_67:5:127:828:697 +ATGCCAGGAAGATACATTGCAAGACAGACTTCATC ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;;<; +@EAS54_67:5:127:828:697 +TAAAGAAAAAAAAACCTGTCAAACACGAATGTTAT ++ +;<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS54_67:5:149:639:910 +CAATGGGCTTCTCAGCAGAAACCTTACAAGCCAGA ++ +<<<<<<<<<<<<<<<<<<<<<<<<7<;;<<;<<;< +@EAS54_67:5:149:639:910 +TCACTAAACCAGTCCTATAAGAAATGCTCAAAAGA ++ +<;49;<<;;<<<<8;<<<<<<<<<<<<<<<<<<;< +@EAS54_67:5:71:408:741 +AGTCATCTATAAAGGAAATCCCATCAGAATAACAA ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;< +@EAS54_67:5:71:408:741 +TCCTGACAAGCAAATGCTAAGATAATTCATCATCA ++ +;7;<;<0<<<<<<<<:;<<<<<<<<<<<<<<<<<< +@EAS54_67:6:107:395:312 +CAAAATATAGTTGAAAGCTCTAACAATAGACTAAA ++ +<<<<<<<<<<<<<<<<<<<<<<<<<;<;;<:<<<< +@EAS54_67:6:107:395:312 +CAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGT ++ +;<;;<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS54_67:6:109:953:668 +CAATATATCCATGTAACAAATCTGCGCTTGTACTT ++ +;<<<<;<<<<<<<<<<<<<<<<<<<<<<<<8<;<< +@EAS54_67:6:109:953:668 +CCACTTTGGAAAACAATTTGGTAATTTCGTTTTTT ++ +<:)9<<<<<<<<8:<<<<<<<<<<<<<<<<<<<<< +@EAS54_67:6:198:503:669 +CAATGATAAAAAGATCAATTCAGCAAGAAGATATA ++ +5<<:<<;<<<<<<<;;<<9<<<<<<<<;<<<<;<< +@EAS54_67:6:198:503:669 +CAGATTTAAAAACATGAACTAACTATATGCTGTTT ++ +<<<<<<<<<<;8<<<<<;<<<<<<;<;<8<<8<<< +@EAS54_67:6:43:859:229 +TTCAAATGAACTTCTGTAATTGAAAAATTCATTTA ++ ++37<=<.;<<7.;77<5<<0<<<;<<<27<<<<<< +@EAS54_67:6:46:285:790 +AACGCGTAACTGCGCTCTCATTCACTCCAGCTCCC ++ +;;<8<;<<<<88<8<<;;<;<<;<<<<<<<<;<<< +@EAS54_67:6:46:285:790 +TCAAGGTTGTTGCAAGGGGGTCTATGTGAACAAAG ++ +!!<<3<<<;;<<<<<<<<<;<;7<<7<<<<<<;<< +@EAS54_67:7:101:752:996 +AACCTTACAAGCCAGAAGAGATTGGATCTAATTTT ++ +<<<<<<<<<<<<<<<;<<<<<9<<<<<<;<<;;;; +@EAS54_67:7:101:752:996 +AAGAAATGCTCAAAAGAATTGTAAAAGTCAAAATT ++ +<<<<<<<<7<7<<<<<<<<<<<<<<<<<;<<<<<< +@EAS54_67:7:197:399:319 +CAAAAAACAAATACTACTAGACCTAAGAGGGATGA ++ +&<+==<<5<<<8<89;;<<<<<<8<<<<<<<<<<< +@EAS54_67:7:197:399:319 +TAGAAACCAAATGAGAGAAGGAGTAGCTATACTTA ++ ++<<<<<<<<<<<<<<<<<;<<<<<<<<<<<;;<<; +@EAS54_67:8:19:855:491 +TGGCATTTGCCTTCAGACCCTACACGAATGCGTCT ++ +8<<<<;:<<<<:<<<<<:<;;<<<<<<<;<<<;<; +@EAS54_67:8:19:855:491 +TGTGTGTTCTCATCAACCTCATACACACACATGGT ++ +<<<<<<<<<<<;<<.:<<<<;;;<4<:<:<7<;;; +@EAS54_67:8:46:900:610 +GATATCTGGATTCTGGGAAATTCTTCATCCTGGAC ++ +<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<;;4;< +@EAS54_67:8:46:900:610 +TACATGGCTGATTATGAAAACAATGTTCCCCAGAT ++ +<;5<;<<<;<<<<<<;<<<<<<<<<<8<<<<<8<< +@EAS54_71:2:125:628:79 +GCTGAAGAACTTTGATGCCCTCTTCTTCCAAAGA ++ +95&<<<<<<<63<<<6<<<<8<;<<8<<<<<<<< +@EAS54_71:2:125:628:79 +TTTATGCTATTCAGTTCTAAATATAGAAATTGAAA ++ +==================<6<====<<:<==7;:: +@EAS54_71:2:204:264:413 +CAATGAACAACAGAAAGAAAAGTTCTTTCAAAAGG ++ +1==(4=::;/7::&===;====/=;===;;===== +@EAS54_71:2:204:264:413 +TGCCCTCTTCTTCCAAAGATGAAACGCGTAACTG ++ +<<<<<<<<<<<<<;:59<+<<:<<<9<<;:62<) +@EAS54_71:2:85:686:696 +AATCAGCAAGAGAAAAGCATACAGTCATCTATAAA ++ +==================<=====:==<=<;=:== +@EAS54_71:2:85:686:696 +TAAACTAAGCATCATAAATGAAGTGGAAATAAAG ++ +:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS54_71:3:186:989:869 +ACACACATGGTTTAGGGGTATAATACCTCTACATG ++ +;<<;:<<<7:<<<<<<:<<<<<<<<<<<<<<<<<< +@EAS54_71:3:186:989:869 +GGGAAATTCTTCATCCTGGACCCTGAGAGATTCT ++ +<<<<<<<<<<<<<<<<<<<<7;:<<<<<<<<<$< +@EAS54_71:3:254:32:275 +GATGGAGGGAAGAGGGACGCTGAAGAACTTTGAT ++ +<<<<<<<<<<<<<<<<<<<<<<;;<:<::<:2*< +@EAS54_71:3:254:32:275 +TGCAACTGTGAGCCATCACAATGAACAACAGGAAG ++ +(6+<;+6:9<<:7:<95<<<<<<<<<<<<<<<<<< +@EAS54_71:3:257:288:731 +AAGAAGATATAACCATCCTACTAAATACATATGCA ++ +<<:<<7<<<<<;<5<<<<<<<<<<<<<<<<<<<<< +@EAS54_71:3:257:288:731 +TGCTGTTTACAAGAAACTCATTAATAAAGACATG ++ +<<<<<<<<8<8<<;<;<<<;<<<5<;;88.8<6< +@EAS54_71:3:267:821:860 +GCATACAGTCATCTATAAAGGAAATCCCATCAGA ++ +$&<<<.<:;6<<;<<<<<<<<<<<<<<<<<<<<< +@EAS54_71:3:267:821:860 +TCTTTAGTCTTGCTAGAGATTTAGACATCTAAATG ++ +;<<<<<8<<<<<8<<;<8<<<<<5<;<<<<<2;<5 +@EAS54_71:3:78:855:352 +AAAAGAAAAAGTGAGAAGTTTGGAAAAACTATTT ++ +2<<<<<<<9<<4<<<<<<<<<<<<<<<<<<<<<< +@EAS54_71:3:78:855:352 +AACAATAGACTAAACCAAGCAGAAGAAAGAGGTTC ++ +<<<<<<<<;<<<<<<<<<;<<<<<<<<;<;<<:<: +@EAS54_71:4:127:725:381 +AATTACAAAATATAGTTGAAAGCTCTAACAATAGA ++ +<<<<<<<<<<<<<<<<<<<<<;<<<<;;;;;<<8: +@EAS54_71:4:127:725:381 +TGAACCTATGAGTCACAGGTATTCCTGAGGAAAA ++ ++<<.<<;<;<<<3;<;<<<<<<6<8;<<<<<<<1 +@EAS54_71:4:13:981:659 +CGGGACAATGGACGAGGTAAACCGCACATTGACAA ++ ++)---3&&3&--+0)&+3:7777).333:<06<<< +@EAS54_71:4:13:981:659 +TGTAGCCCCTCTAAGGCGTTCTATTTGTAATGAA ++ +()&)06636;;<664*6;<<<<<<<<<<<<<<<1 +@EAS54_71:4:14:88:306 +AAAGAATGCCAGGAAGATACATTGCAAGACAGAC ++ +<<<<<<8<<<<<<;<<<3<<<8<<;<;;<15<:6 +@EAS54_71:4:14:88:306 +AGAAGAGATTAGATCTAATTTTTGGACTTCTTAAA ++ +<1;<;<;<4<&<<<:<<<:<<<<;<<<<<<<<<<< +@EAS54_71:4:165:397:25 +GCAACTGTGAGCCATCACAATGAACAACAGGAAGA ++ +<<7<<<<<<)97<6<:3:60:3+37-37+<:33:3 +@EAS54_71:4:165:397:25 +TTCAACGCTTCTAGCCATTTCTTTTGGCATTTGC ++ +&(33'60;-'+'<7;<<*3-<;;183<<<;<;<< +@EAS54_71:4:169:256:888 +AGGTTCAGAACTTGAAGACAAGTCTCTTATGAATT ++ +<<<<<<<<<<<<<<<<<<<<<<;;<;<<;<<:;;< +@EAS54_71:4:169:256:888 +ATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT ++ +&<<:<;<<;;<8<;<<<<<<<<<<<<<<<<<<<< +@EAS54_71:4:169:862:829 +AAAGGTCTTTCAAAAGGTGATGTGTGTTCTCATCA ++ +<<<<<<<<<<<<<<<<<;<<<;<;<<<<:<;;<78 +@EAS54_71:4:169:862:829 +GCCATTTCTTTTGGCATTTGCCTTCAGACCCTAC ++ +,1<6<<<<<7<<<<<<<<<<<<<<<<<7<<<<<< +@EAS54_71:4:206:741:810 +ACTAACTATATGCTGTTTACAAGAAACTCATTAA ++ +<3<<;5<<<<<;:<<<<<<<<<<<<<<<<<<<<< +@EAS54_71:4:206:741:810 +CAAAAGTACAAAACTCACAGGTTTTATAAAACAAT ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;:-;<< +@EAS54_71:4:209:159:130 +CTTATCATGACTCTATCCCAAATTCCCAATTACGT ++ +;:6<:<8::;<<<;<-<<<<<<<<<<<<<<<<<<< +@EAS54_71:4:209:159:130 +GCCCCCAGCATGGTTGTACTGGGCAATACATGAG ++ +<<<<<<8<<<<<<&<<+7<<4<<<22<;<<<<3< +@EAS54_71:4:233:97:262 +ACCACACATTAATACTATGTTTCTTATCTGCCCA ++ +<<<<<<<<<<<;<;<<:<<<<<<<<<<<<.<&77 +@EAS54_71:4:233:97:262 +GTATCAATTTGGTGTTCTGTGTAAAGTCTCAGGGA ++ +--;;7<;<;;:;<;<<<<<<<<<<<<<<<<<<<<< +@EAS54_71:4:252:428:683 +TGTCTTGATTTACTTGTTGTTGGTTTTCTGTTTCT ++ +<<<<<<;<<<<<<<<7<<7<<&+<<<<:<&<<<4< +@EAS54_71:4:284:269:882 +TTTCTTTTCTCTTTTTTTTTTTTTTGTTTTTGCA ++ +<;<<<<<8<7<8;<<<;<7<<<<<;272;73&&) +@EAS54_71:4:328:669:662 +GGAAGGAGCATTTTGTCAGTTACCAAATGTGTTT ++ +<<<<<<<<<<<<<<<<<<<<<<<<+9;<;;.<<< +@EAS54_71:4:328:669:662 +TCTTCATCCTGTACCCTGAGAGATTCTGCAGCCCA ++ +4<<;<<8<.<88.<<;4<<<<<<<4<.<<<<7<<< +@EAS54_71:4:72:63:435 +CCTTGCAACAACCTTGAGAACCCCAGGGAATTTG ++ +<<<<<<<<<<<<<<<<<<<<;<<<;<;;39:7:7 +@EAS54_71:4:72:63:435 +TGATATCTGGATTCTGGGAAATTCTTCATCCTGGA ++ +::<;<<<<;;;<<<<<<<<<<<<<<<<<<<<<<<< +@EAS54_71:4:73:182:444 +AACTTCCCTGGAGGTCTGATGGCGTTTCTCCCTCG ++ +:1<4;;::<<;<<<<;<<<<<<<<<<<;<<<<<<< +@EAS54_71:4:73:182:444 +CTTGATTTACTTGTTGTTGGTTTTCTGTTTCTTT ++ +<<<<;;<<<<<<<<<<<<;<;<<<<<:<<<<<7< +@EAS54_71:5:153:543:671 +GCCCCATCTCTTGTAATCTCTCTCCTTTTTGCTG ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<2<<7 +@EAS54_71:5:153:543:671 +TAAAATGTCTATTTTTGTCTTGACACCCAACTAAT ++ +;;;;;=;==================;========= +@EAS54_71:5:16:434:204 +AGATGAGAGAGAACTTCCCTGGAGGTCTGATGGC ++ +<:7:<<<<<<<<<<<9<<<+<<<<<<<<<<<<<< +@EAS54_71:5:16:434:204 +CTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGGT ++ +=================;)===8===:==7;<+%; +@EAS54_71:5:81:685:141 +ACTGAACCTATGAGTCACAGGTATTCCTGAGGAA ++ +<<<<<<<<<<<<<<<<<<<<<;;<<;<<<',7,7 +@EAS54_71:5:81:685:141 +AGATATGTAGTCATCAGACTATCTAAAGTCAACAT ++ +;+;(;)..=3.1=.7=;=8;==<4====;====== +@EAS54_71:6:172:896:83 +AGGAAGAAAAGGTCTTTCAAAAGGTGATGTGTGT ++ +<<<<<<<<<<<<<<<<<:;;+;<<<<<<<<9;;; +@EAS54_71:6:172:896:83 +CATTTGCCTTCAGACCCTACACGAATGCGTCTCTA ++ +;<.5.;;<+;<<<<<<<4<<<<<<<;<<<<<;<<< +@EAS54_71:6:215:133:909 +TGTGTGTTCTCATCAACCTCATACACACACATGG ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<996( +@EAS54_71:6:215:133:909 +TTGCCTTCAGACCCTACACGAATGCGTCTCTACCA ++ +7758;<;<;8<<<<;<;<<<<<:;<<<<<<<<<<< +@EAS54_71:6:224:932:942 +CTCTTGAAAGCTTGGGCTGTAATGATGCCCCTTGG ++ +<;<<;;<<<;<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS54_71:6:224:932:942 +GTCCATGTACACACGCTGTCCTATGTACTTATCA ++ +<<<<<<<<<<<<<<<<<<<<<<;<<<<7<<(;3, +@EAS54_71:6:228:354:203 +AATGGACCTGTGATATCTGGATTCTGGGAAATTC ++ +88<<<8<<<<<<<<<8<<<<<<<<<4<<<4/9/; +@EAS54_71:6:228:354:203 +TCAACCTCATACACACACATGGTTTAGGGGTATAA ++ +%1<851<5<<<982<<<<<<<<::<<<<7<<<<3< +@EAS54_71:6:264:705:89 +AAACATATGCACCTAACACAAGACTACCCAGATTC ++ +<(<2<&<)<<<7<8<<<<<<<<<<.<<<<<<<<<< +@EAS54_71:6:264:705:89 +AAGGGGTGGAAAAAGATGTTCTACGCAAACAGAA ++ +<<<<<<<<<<;8<<<<<<<<<<<<<<<&<<,;;( +@EAS54_71:6:324:515:230 +AAAACAGTCTAGATGAGAGAGAACTTCCCTGGAG ++ +7<<1<<<7<+<<<;<<<<<<<<<<<<<<<<<<<< +@EAS54_71:6:324:515:230 +CCTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGG ++ +<<;<<<<<<<<<<<<<<<:<<<<8<<<4<<4<<34 +@EAS54_71:6:82:932:400 +GACACCCAACTAATATTTGTCTGAGCAAAACAGTC ++ +<<;<<72<<7<<<<<<<<<<;<<<+7<<<<<<<<< +@EAS54_71:6:82:932:400 +GTAATCTCTCTCCTCTTCGCTGCATCCCTGTCTT ++ +<<<<<<8<1<<<<8+<<&<<<8<<<<<<<+(,/8 +@EAS54_71:7:130:260:553 +AGCAAGAGAAAAGCATACAGTCATCTATAAAGGAA ++ +<*;<<7<);<<;9;<5<*<9<;<<;;<7<<<<<1< +@EAS54_71:7:130:260:553 +GTGAGAAGTTTGGAAAAACTATTTGAGGAAGCAC ++ +<<<<<1<<<<<<<<<<6<<81============= +@EAS56_59:2:60:677:921 +GTGAGAAGTTTGGAAAAACTATTTGAGGAAGTAAT ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS56_59:3:149:953:349 +AGCCCTTCTCACAGTTTCTGCCCCCAGCATGGTTG ++ +2;<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS56_59:3:149:953:349 +TTCTTTTGGCATTTGCCTTCAGACCCTACACGAAT ++ +<<<<<<<<;<<<<<<<<<<<;7:<:<<:<:;;::; +@EAS56_59:3:166:626:836 +AGTACAAAACTCACAGGTTTTATAAAACAATTAAT ++ +<;;7<<<<<<;<7;<<<<<<<<<<<<7<<<<<<<+ +@EAS56_59:3:166:626:836 +CTGTCAAACACGAATGTTATGCCCTGCTAAACTAA ++ +<<<<<<<<<<<<<<<<<<<<9<<<<<<<<;<;;;9 +@EAS56_59:3:182:1002:639 +AAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAG ++ +<<;;9;9<<<<<<;<7;<;<<<<;;<<<;<<7;<< +@EAS56_59:3:182:1002:639 +AACCAAGCAGAAGAAAGAGGTTCAGAACTTGAAGA ++ +<<<<<<<<<<<<<<<<<<<<<9-<<<<4<;<;;<; +@EAS56_59:3:316:25:230 +GATGCCCCTTGGCCATCACCCGGTCCCTGCCCCAT ++ +8;8;<<;<;;<<<<<;<<<<<<<<<<<<<<<<<<< +@EAS56_59:3:316:25:230 +TGTCCTATGTACTTATCATGACTCTATCCCAAATT ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<);2;; +@EAS56_59:4:119:651:88 +GATTGGATCTAATTTTTGGACTTCTTAAAGAAAAA ++ +<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS56_59:4:119:651:88 +GCTCAAAGAATGCCAGGAAGATACATTGCAAGACA ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9;< +@EAS56_59:4:262:928:237 +TGAGTTCAGGTAAAGGTGTGGAAAAAGATGTTCTA ++ +;<<<<<;<<<<<<<<<;<<<<<<<<<<<<<<<<<< +@EAS56_59:4:262:928:237 +TTGAGACTACAGAGCAACTAGGTAAAAAATTAACA ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7<< +@EAS56_59:4:267:394:437 +AAACATCATAAATACACACAAAAGTACAAAACTCA ++ +&<&,<8.<;<<<;<8<8<7<<<<<<<<<<<<<<<< +@EAS56_59:4:267:394:437 +GGACTTCTTAAAGAAAAAAAAACCTGTCAAACACG ++ +<<<<<<<<<<;<;<<<<<;;<<<<<;<<:;8<;<8 +@EAS56_59:4:278:524:521 +CACATTAATACTATGTTTCTTATCTGCACATTACT ++ +<<<;<<;<<<<<<<;<<<<<<<<<<7;5;<<<;;< +@EAS56_59:4:278:524:521 +CCCATCTGGCCTCGTCCACACTGGTTCTCTTGAAA ++ +7777,<;<<7<<<<;;<<;;<<<<<<<<<<<<<<< +@EAS56_59:4:329:577:757 +AACGCGTAACTGCGCTCTCATTCACTCCAGCTCCC ++ +;;;888;<<<<<<6<<<2;<<<<<<;<<<<<<<<< +@EAS56_59:4:329:577:757 +TCAAGGTTGTTGCAAGGGGGTCTATGTGAACAAAG ++ +!!<<<<9;<:<<;<<<<<<<<;<<<<<<<<<<<<< +@EAS56_59:5:113:694:725 +CTGTAATGATGCCCCTTGGCCATCACCCGGTCCCT ++ +;::<<:<:<<<<<<<<<<:<:<<<<<<;<<<<<<< +@EAS56_59:5:113:694:725 +GTACACACGCTGTCCTATGTACTTATCATGACTCT ++ +<<<<<<<<<<<<9<<<<<:<<<<<<<<<<:;;<;; +@EAS56_59:5:125:137:58 +AACTATATGCTGTTTACAAGAAACTCATTAATAAA ++ +<<9;<<<<<;<;<<<<;<<<<<<;<<<<<<<<<<< +@EAS56_59:5:125:137:58 +GGTTTTATAAAACAATTAATTGAGACTACAGAGCA ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<9;< +@EAS56_59:5:181:713:140 +AGGGGAAATAAAGTCAAGTATTTCCTGACAAGCAA ++ +<7<<<<<<<<<<<<7<7<6+<<<5;<;<2<;;+;; +@EAS56_59:5:181:713:140 +CTACAGAGCAACAAGGTAAAAAATTAACATTACAA ++ +78<+<7<-7;;;&<5<7<<<<7<<<<<<<<<<<7< +@EAS56_59:5:198:929:684 +AAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGA ++ +<<;<<<<<:<<<<<<<<<<<<<<<<<;<<<<<<<< +@EAS56_59:5:198:929:684 +GAAATCCCATCAGAATAACAATGGGCTTCTCAGCA ++ +<7<<<<;<<<<<<<<<<<<;<<<<<:<<<<::<:7 +@EAS56_59:5:232:336:46 +ATTTTTTTTTTTTCTTTTCTCTTGTTTCTTTTTTT ++ ++<<<<<<<<<<<<6<<<<;<6<<&&<,3<<<<3,, +@EAS56_59:5:325:544:349 +AAAATTAAAGTTCAATACTCACCATCATAAATACA ++ +<<<<57<<<7<;6<<<<;<7<7;<<7<<<<<<<<< +@EAS56_59:5:325:544:349 +CAAGCCAGAAGAGATTGGATCTAATTTTTGGACTT ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<6;;;<< +@EAS56_59:5:90:629:652 +AGCCCATACTTTACTGCTACTCAATATATCCATGT ++ +<<<<<<<<<<<<<<<<<<<<<<<:<;<<<<<<<<< +@EAS56_59:5:90:629:652 +ATATTGCTAGTGGGAGTATAAATTGTTTTCCACTT ++ +<:<7::<:<<<<<8<<<<<<<<<<<<<<<<<<<7< +@EAS56_59:6:187:925:547 +GGCTGATTATGAAAACAATGTTCCCAAGATACCAT ++ +43<<<:9<;;;:7<<<<6<:<8<-4-/,81<(48: +@EAS56_59:6:187:925:547 +TGAACTTCCACGTCTCATCTAGGGGAACAGGGAGG ++ +((988+&8<<;<09<;<<9<<4<<-<99<<;<9<; +@EAS56_59:6:199:327:965 +ATCTGGATTCTGGGAAATTCTTCATCCTGGACCCT ++ +<5<:<<<58<:<<<<<<8<<<<<<<<<;<<<<<<< +@EAS56_59:6:199:327:965 +NCAACAACCTTGAGAACCCCAGGGAATTTGTCAAT ++ +!,+*+++++++++++*+++++++**)+*+**+(** +@EAS56_59:6:227:657:95 +GTAATTGGGGAAAACCTCTTTAGTCTTGCTAGAGA ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<8<85 +@EAS56_59:6:227:657:95 +GTCATCTATAAAGGAAATCCCATCAGAATAACAAT ++ +;3;<);<<<<<<<<<<<<18<<<<<<<<<<<<<<< +@EAS56_59:6:286:753:854 +TCACCCAGTCCCTGCCCCATCTCTTGTAATCTCTC ++ +;<2<<<,57:<<9<<<<<<<<<<<<<<<<<<<<<< +@EAS56_59:6:286:753:854 +TTATCATGACTCTATCCCAAATTCCCAATTACGTC ++ +<<<<<<<<<<<<<<<<<<3<<<<<<9999<;<<9; +@EAS56_59:6:312:837:406 +AGGTGCACTAATGCGCTCCACGCCCAAGCCCTTCT ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS56_59:6:312:837:406 +CTGCACATTACTACCCTGCAATTAATATAATTGTG ++ +;<;<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS56_59:6:3:186:68 +AAGAAATGCTCAAAAGAATTGTAAAAGTCAAAATT ++ +<<;<<<<<&:,<<<<<<<<<<<<<<<<<<<<<<<< +@EAS56_59:6:3:186:68 +TTACAAGCCAGAAGAGATTGGATCTAATTTTTGTA ++ +<<<<<<<<<<<<;<<<<<<<<<<<<;;<<<<<&%8 +@EAS56_59:6:89:457:591 +ATGCCCTGCTAAACTAAGCATCATAAATGAAGGGG ++ +<<<<<<<<<<<4<<<<<<<<<<<<8<7/4<<<<4+ +@EAS56_59:6:89:457:591 +CAGGTTTTATAAAACAATTAATTGAGACTACATAG ++ +797<<9<<<<<<<3<7<<<<<<<<<<)<<<<<07< +@EAS56_59:7:260:985:520 +TCCCTGTCACCCAATGGACCTGTGATATCTGGATT ++ +;9;7<<<<<<<<<<<<<<<<<:<<<<<<<<<<<<< +@EAS56_59:7:260:985:520 +TGCAACAACCTTGAGAACCCCAGGGAATTTGTCAA ++ +<<<<<<<<<<<<<<<<<;:;<<;<:<<<,:1;)<; +@EAS56_59:7:318:679:883 +GATTTAGACATCTAAATGAAAGAGGCTCAAAGAAT ++ +<<;4<<;<:<<7<<<<<<<<<<<<<<<<<<<<<<< +@EAS56_59:7:319:246:304 +CTTGAGAACCCCAGGGAATTTGTCAATGTCAGGGA ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;: +@EAS56_59:7:319:246:304 +TGTCACCCAATGGACCTGTGATATCTGGATTCTGG ++ +;;<;;;<<<<8;<<<<;<<<<<<<<<<<<<<<;<< +@EAS56_59:7:82:902:868 +CTGTCACCCAATGGACCTGTGATATCTGGATTCTG ++ +<<;;<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<< +@EAS56_59:7:82:902:868 +TTGCAACAACCTTGAGAACCCCAGGGAATTTGTCA ++ +<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS56_59:8:49:182:192 +ACACAAAAGTACAAAACTCACAGGTTTTATAAAAC ++ +<5<;<<<<<<<<<<<:<<<<<<<<<<<<<<<<<<< +@EAS56_59:8:49:182:192 +GTTATGCCCTGCTAAACTGAGCATCATAAATGAAG ++ +=====================;============< +@EAS56_59:8:80:542:549 +AGTAAACTCTCAAATATTGCTAGTGGGAGTATAAA ++ +=9====7=;=======;;==;========<===== +@EAS56_59:8:80:542:549 +CTAAAAGCCCATACTTTACTGCTACTCAATATATC ++ +<<<<<<<<;<<<<<<<<:<<<<-<;;<;7<;3;9; +@EAS56_61:1:119:880:781 +ACAAATCTGCGCTTGTACTTCTAAATCTATAACAA ++ +;8<<;<<<<:<84<<<<:<<<<<<<<<<<<<5<<< +@EAS56_61:1:119:880:781 +ACATATGCACCTAACACAAGACTACCCAGATTCAT ++ +<<<<<<<<<<<<<<<<<<<<<<<<+<<<<7<<<<< +@EAS56_61:1:210:880:606 +GGAGCATTTTGTCAGTTACCAAATGTGTTTATTAT ++ +<<<<<<<<<<<<<<<<<<;<<<<<<:<<<<3<<8& +@EAS56_61:1:210:880:606 +TCCTGGACCCTGAGAGATTCTGCAGCCCAGCTCCA ++ +.<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS56_61:1:303:184:14 +CAACCTTGAGAACCCCAGGGAATTTGTCAATGTCA ++ +<<<<<<8<0<<<<-<-98<<--<<<6;076;75+& +@EAS56_61:1:303:184:14 +CAATGGACCTGTGATATCTGGATTCTGGGAAATTC ++ +:<<.<;;7<:<<<<<<7<<<<<<<<<<<<<<<<<< +@EAS56_61:2:152:860:286 +AGACTATTGCCAGATGAACCACACATTAATACTAT ++ +<;<<<;<<0:<3<:<<2<<<<<7+<7+47<9(999 +@EAS56_61:2:152:860:286 +TTAGGTATCAATTTGGTGTTCTGTGTAAAGTCTCA ++ +2;5;8<<;5<<<;<2<8<<<<<<;8<;<<<<;<<< +@EAS56_61:3:140:522:212 +CGCTGAAGAACTTTGATGCCCTCTTCTTCCAAAGA ++ +<<<<<<<<<<<<<<<<<;<<<<<<<<<<<;<;95; +@EAS56_61:3:140:522:212 +GACAGGCTGCAACTGTGAGCCATCACAATGAACAA ++ +:;8;:::<<:<<<<<<<<<7<<<<<<<<<<<<<<< +@EAS56_61:3:165:665:220 +ACAATTAATTGAGACTACAGAGCAACTAGGTAAAA ++ +<:<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS56_61:3:165:665:220 +GGAAATAAAGTCAAGTCTTTCCTGACAAGCAAATG ++ +<<<<<<<<<<<<<<<<<<<<<;<;;<<<;;<;<<; +@EAS56_61:3:208:118:673 +AAGAGGCTCAAAGAATGCCAGGAAGATACATTGCA ++ +<<<<<;;<;<<<<<<<<<:<<<<<<<<<<<<<<<< +@EAS56_61:3:208:118:673 +GAACAGAGCTTTCAAGAAGTATGAGATTATGTAAA ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<;; +@EAS56_61:3:260:827:289 +AAACCTCATATATCAATATTAACTTTGAATAAAAA ++ +<<<<2<<<<;<<<<;<<<<<<:<<<&-<8<<88<3 +@EAS56_61:3:260:827:289 +TGTTCTACGCAAACAGAAACCAAATGAGAGAAGGA ++ +6;99+<<<<<<<<<<<<<<6<<<<<7<<<<<<<<< +@EAS56_61:3:45:758:616 +ATAAATTGTTTTCCACTTTGGAAAACAATTTGGTA ++ +<<;<:<<<<<<<<<;<<<<<<<<<<<<<<<<<<<< +@EAS56_61:3:45:758:616 +CATACTTTACTGCTACTCAATATATCCATGTAACA ++ +<<<<<<<<<<<<<<<<<<<<<<<<<6<<<<<<;;< +@EAS56_61:3:5:45:441 +TTTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTTT ++ +;;58:<:<(:<<11<&<1<<;<<<<><<<<<<<<< +@EAS56_61:4:262:456:74 +TACCAAATGTGTTTATTACCAGAGGGATGGAGGGA ++ +<<<<<<<<<<<<<<<<<<<<:;;:;7:<::7<7:3 +@EAS56_61:4:262:456:74 +TGGGAAATTCTTCATCCTGGACCCTGAGAGATTCT ++ +862;<<<:;<;<<<;;;<<<<;;<<<<<<<<<<<< +@EAS56_61:5:194:470:416 +AAACTATTTGAGGAAGTAATTGGGGAAAACCTCTT ++ +<<<7<<;<<<<<<<<<:<<<<<<<<<<<<<<<<<< +@EAS56_61:5:194:470:416 +TCAGAACTTGAAGACAAGTCTCTTATGAATTAACC ++ +<<<<<<<<<<<<<<<<<<<<<<<<;<;<<<<<<<< +@EAS56_61:5:209:824:866 +ATCATCACTAAACCAGTCCTATAAGAAATGCTCAA ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; +@EAS56_61:5:209:824:866 +CAGCAACAAAACCTCATATATCAATATTAACTTTG ++ +;<:&<<:<<<<;<<;<<<<<<<<<<<<<<<<<<<< +@EAS56_61:5:263:314:696 +AACTCATTAATAAAGACATGAGTTCAGGTAAAGGG ++ +<<<<<<<<<<<<<<;<<<<<<<<<<<<:<<;<775 +@EAS56_61:5:263:314:696 +AAGATCAATTCAGCAAGAAGATATAACCATCCTAC ++ +<<;<;:<<<<7<<:<<<<<<<<<<<<<<<<<<<<< +@EAS56_61:5:272:240:950 +CAGCAGAGCTTGGATCTAATTTTTGGACTTCTTCA ++ +6<<&:<<<&<::;&7<<<3<;<<;<:;:<8:<<(< +@EAS56_61:5:272:240:950 +TCAAAAGAATTGTAAAAGTCAAAATTAAAGTTCAA ++ +37<<<<<<<<<<<<<<<<<<<<<<;;<;<<<<<<; +@EAS56_61:6:10:106:737 +ACAAGAAACTCATTAATAAAGACATGAGTTCAGGT ++ +<<<;<1<;<<<<<<9<<<<;;<<<<<99<<94008 +@EAS56_61:6:10:106:737 +ACAATGATAAAAAGATCAATTCAGCAAGAAGATAT ++ +<-<<;<<<<<<<<<<<;<<<<;<<;<<<<<<<<<< +@EAS56_61:6:160:272:398 +AATGTTCCCCAGATACCATCCCTGTCTTACTTCCA ++ +9<<<3<<<<<<<<<<<9<<;8<<<<;<+.;;89.. +@EAS56_61:6:160:272:398 +GTGCACTAATGCGCTCCACGCCCAAGCCCTTCTCA ++ +3:,<,;;<<;<<1<<<<<<<;<;<<<<<<<<<<<< +@EAS56_61:6:226:370:91 +AGAATAACAATGGGCTTCTCAGCGGAAACCTTACA ++ +<':<6<;<<<;2<;<-7;;;<<<<<<<;;;<<7;< +@EAS56_61:6:226:370:91 +AGGCTCAAAGAATGCCAGGAAGATACATTGCAAGA ++ +8<<<;<8<8<;<<<8<<;7<7;8784<<,;864<& +@EAS56_61:6:227:259:597 +AATATAGAAATTGAAACAGCTGTGTTTAGTGCCTT ++ +<8<;2;9;<;;-92<;;;<;<<<<<<<<<<<<<<< +@EAS56_61:6:256:67:461 +TCATGTTTGTGTCTTTCTATGCATTTTTTTTTTTT ++ +!!7181!63:6-:!-163(-1%-18<<4<<<<<<< +@EAS56_61:6:256:67:461 +TTGTTTTTTCTTCTTTTCTCTTTTTTTTTTTTTTT ++ +*.%53.:)1+9;3397;1795507+335;.&51)5 +@EAS56_61:6:283:963:234 +AAAAAGATGTTCTACGCAAACAGAAACCAAATGAG ++ +<<<<<<<<<<<<<<<;<<<<<<<<<<<;<<;<<;< +@EAS56_61:6:283:963:234 +ACATATGCACCTAACACAAGACTACCCAGATTCAT ++ +<5<;<;97;;:;<<7<;<<<<<<<<<<<<<<<<<< +@EAS56_61:6:307:208:477 +AAAGTCAAAATTAAAGTTCAATACTCACCATCATA ++ +<<<<<.<<<<<<<<<<<<;<;<<<<<<<<<<<<<< +@EAS56_61:6:307:208:477 +ACTTCTTAAAGAAAAAAAAACCTGTCAAACACGAA ++ +<<<<<<<;<<;<<<<<<<<<<<<<<<<;:<<<88; +@EAS56_61:7:280:133:495 +AGATGAACCACACATTAATACTATGTTTCTTATCT ++ +<:<9:<<7:<6<<<<<<<<<<<<<<<<<<<<<<<< +@EAS56_61:7:280:133:495 +CCATCATGAAGCACTGAACTTCCACGTCTCATCTA ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; +@EAS56_61:7:41:745:603 +CATTGCAAGACAGACTTCATCAAGATATGTAGTCA ++ +<<<<<<<<<<<<:<<<<<<<<<<<<<<<6<:8<<: +@EAS56_61:7:41:745:603 +TAATTTTTGGACTTCTTAAAGAAAAAAAAACCTGT ++ +;<<;;<;<8<<<<<<<<<<<;<<;<<<<<<<<<;< +@EAS56_61:7:7:682:201 +CATACAGTCATCTATAAAGGAAATCCCATCAGAAT ++ +0:8;5<8<1:78<<<<<<<<<<<<:8<<2<<<<:< +@EAS56_61:7:7:682:201 +GGAAAACCTCTTTAGTCTTGCTAGAGATTTAGACA ++ +<<<<<<<7<<7<<<<77&;-9<97<76<;<<993< +@EAS56_61:8:60:358:494 +GGTAAAGGGGTGGAAAAAGATGTTCTACGCAAACA ++ +<<<<<<<<<<<<<<<<<<<<<<<<<<:<:<<;;4; +@EAS56_61:8:60:358:494 +TACCCAGATTCATAAAACAAATACTACTAGACCTA ++ +7<77;<<<<<;<<<<<<<<<<<<<<<<<<<<<<<< +@EAS56_61:8:7:171:402 +GTGATATCTGGATTCTGGGAAATTCTTCATCCTGG ++ +<<<<<<<<<<<<<<<;/<<<<;<<<<<;<<1<<<4 +@EAS56_61:8:7:171:402 +TCTACATGGCTGATTATGAAAACAATGTTCCCCAG ++ +:086::::847:<7<<7<<<<<<;7<<;<<<<7<< +@EAS56_63:1:119:446:185 +TGGTCTGACAGGCTGCAACTGTGAGCCATCACAAT ++ ++70730;<0<77;;<<<<<9<<<<<<9<<<<<<<< +@EAS56_63:1:119:446:185 +TTACCAGAGGGATGGAGGGAAGAGGGACGCTGAAG ++ +<<<<<<<7<<<4<<<<9<<54<:<7<5:<::7-5; +@EAS56_63:1:145:71:26 +CTAGGGGAACAGGGAGGTGCACTAATGCGCTCCAC ++ +<<<<<<<<<<<<<<<<<;<;;<<;<;<9<9;;99; +@EAS56_63:1:145:71:26 +TTTCTTATCTGCACATTACTACCCTGCAATTAATA ++ +882;8;<;;887<<<;;<<<<;<<<<<<<<<<<<< +@EAS56_63:2:119:161:322 +ATCAGAATAACAATGGGCTTCTCAGCAGAAACCTT ++ +<83<;<<;<;<<<<<<<<<<<<<<<<<<<<<<<<< +@EAS56_63:2:119:161:322 +CTTTAGTCTTGCTAGAGATTTAGACATCTAAATGA ++ +<<<<<<<<<<<<<<;<<<<<<<;<<<<<<<<<<<<<1>><<<< MF:i:18 Aq:i:21 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS51_66:4:240:264:231 121 chr1 213 66 35M = 213 0 TGTAATGAAAACTATATTTATGCTATTCAGTTCTA 9;,;;62<9<)29<<<;96<<<;<<7<<<<<<;<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS51_66:4:240:264:231 181 chr1 213 0 * = 213 0 CAACAGATCAAGAAGGAGGGGCAATGGACGAGTTA %15+5022))0&<<)0)+7:4+&<0<<:0<<<7<< MF:i:192 +EAS1_93:7:14:426:613 99 chr1 214 99 35M = 379 200 GTAATGAAAACTATATTTATGCTATTCAGTTCTAA ======;=;==========;;==3=;==-=<;<;< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_93:2:173:995:93 163 chr1 215 99 35M = 382 202 TAATGAAAACTATATTTATGCTATTCAGTTCTAAA <<<<<<<<<<<<<<<<<<<7:<<<<;:<:<<<<:7 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS51_64:6:195:348:703 163 chr1 215 99 35M = 353 173 TAATGAAAACTATATTTATGCTATTCAGTTCTAAA <<<<<<<;<<<<<;:<<<<<<<<<<<<:<1:<:7< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_108:2:62:879:264 163 chr1 216 99 35M = 396 215 AATGAAAACTATATTTATGCTATTCAGTTCTAAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<2<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_61:4:83:452:970 99 chr1 216 99 35M = 379 198 AATGAAAACTATATTTATGCTATTCAGTTCTAAAT ==========================;======== MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS218_1:2:64:1318:1711 99 chr1 218 99 35M = 389 206 TGAAAACTATATTTATGCTATTCAGTTCTAAATAT <<<<<<<<<<<<<<<<7<<<<<<<:<<<<<2<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_589:8:113:968:19 83 chr1 219 99 35M = 50 -204 GAAAACTATATTTATGCTATTCAGTTCTAAATATA 8;<;8;9<<<<<<<9<:<<<<<<<<<;<<<<<<<< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_93:4:160:896:275 163 chr1 220 99 35M = 387 202 AAAACTATATTTATGCTATTCAGTTCTAAATATAG ============<====<==<====<==<==;=:6 MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_591:6:181:191:418 163 chr1 221 99 36M = 387 202 AAACTATATTTATGCTATTCAGTTCTAAATATAGAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<988 MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_28:7:242:354:637 99 chr1 222 99 36M = 417 231 AACTATATTTATGCTATTCAGTTCTAAATATAGAAA <<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<6<;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_589:1:122:77:789 163 chr1 223 99 35M = 396 208 ACTATATTTATGCTATTCAGTTCTAAATATAGAAA <<<:<4<<9<:7<<<:<<<7<<<<<<<<<<9<9<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_591:5:42:540:501 147 chr1 224 99 36M = 60 -200 CTATATTTATGCTATTCAGTTCTAAATATAGAAATT ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_591:6:155:12:674 83 chr1 224 99 36M = 52 -208 CTATATTTATGCTATTCAGTTCTAAATATAGAAATT ;<<<<<<<<<<;<<<<;<<<<8<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_593:4:106:316:452 147 chr1 224 99 36M = 49 -211 CTATATTTATGCTATTCAGTTCTAAATATAGAAATT :<<<<<;<<<<:<<:<<<<<<7<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS139_19:5:89:525:113 163 chr1 227 78 40M = 397 210 TATTTATGCTATTCAGTTATAAATATAGAAATTGAAACAG <1<7<6;+0;7;7'<70;-<7<:<:<<5<<:9<5:7:%:7 MF:i:18 Aq:i:39 NM:i:1 UQ:i:12 H0:i:0 H1:i:1 +EAS54_65:3:321:311:983 147 chr1 228 99 35M = 51 -212 ATTTATGCTATTCAGTTCTAAATATAGAAATTGAA ;;4;;<7<<<<<<77<<<<<<<<<<17<<<<<<<< MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_65:8:76:493:708 147 chr1 229 44 35M = 73 -191 TTTATGCTATTCAGTTCTAAATATAGAAATTGAAA 5/)63.&1517(544(055(0454&7706566679 MF:i:18 Aq:i:44 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_71:2:125:628:79 163 chr1 229 99 35M = 400 205 TTTATGCTATTCAGTTCTAAATATAGAAATTGAAA ==================<6<====<<:<==7;:: MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_32:5:78:583:499 83 chr1 229 74 35M = 37 -227 TTTACGCTATTCAGTACTAAATATAGAAATTGAAA &6&9774&<;67<44&-4<;<9<7<<<<<;<<<<< MF:i:18 Aq:i:37 NM:i:2 UQ:i:27 H0:i:0 H1:i:1 +EAS54_67:3:175:730:949 83 chr1 230 99 35M = 70 -195 TTATGCTATTCAGTTCTAAATATAGAAATTGAAAC <<<<;+<<<<7<;<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_45:1:84:275:1572 163 chr1 230 99 35M = 394 199 TTATGCTATTCAGTTCTAAATATAGAAATTGAAAC /6;;;4;;;;;;;;7;;4;.4;;;;;6;;;77077 MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_108:4:248:753:731 99 chr1 231 99 35M = 402 206 TATGCTATTCAGTTCTAAATATAGAAATTGAAACA <<<<<<<<<<<8<<<<<<<<<<<<:<<<<&<:<.: MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_45:1:9:1289:215 99 chr1 231 99 35M = 394 198 TATGCTATTCAGTTCTAAATATAGAAATTGAAACA ;;;;;;9;;;67;;;;;99;9;;;;;;;;977747 MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_595:7:188:802:71 163 chr1 232 99 35M = 415 218 ATGCTATTCAGTTCTAAATATAGAAATTGAAACAG <<<<<<<<<;<<<<<9<<<:<<<:<<<<<<:<<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_93:7:252:171:323 83 chr1 234 99 35M = 43 -226 GCTATTCAGTTCTAAATATAGAAATTGAAACAGCT ;8<;<=3=6==:====;;======;========== MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS192_3:5:223:142:410 147 chr1 235 99 35M = 60 -210 CTATTCAGTTCTAAATATAGAAATTGAAACAGCTG 8;<<<;<<<<;<<<<<<;<;<<<<<<<<<<<<;<< MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_30:1:243:10:911 83 chr1 236 99 35M = 63 -208 TATTCAGTTCTAAATATAGAAATTGAAACAGCTGT ;<;;;<4;9:<<<;<<;<<<<<;;<<<<<<<<<<< MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_45:6:5:730:1436 163 chr1 236 99 35M = 403 202 TATTCAGTTCTAAATATAGAAATTGAAACAGCTGT ;;;;;;;;;;;;;;;;;;8;;;;;8;;;;;67777 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS139_19:2:57:1672:1890 121 chr1 236 75 40M = 236 0 TATTCAGTTCTAAATATAGAAATTGAAACAGCTGTGTTTA :;;;9<8;;*<<<<<<:<<<<<<<<1:<<<<<<<<<<<7< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS139_19:2:57:1672:1890 181 chr1 236 0 * = 236 0 CCCCCCCCCCCCCCCCCAGCCACTGCGGCCCCCCCAGCCA -+)%)'-'+,,<066,))090+:&486083:5&&:<<5<0 MF:i:192 +EAS1_105:2:299:360:220 99 chr1 237 99 35M = 403 201 ATTCAGTTCTAAATATAGAAATTGAAACAGCTGTG <<<<<<<9<9<<<<<<<<<<<<<<<<<5<;<0<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS221_1:2:24:1037:84 163 chr1 238 99 35M = 415 212 TTCAGTTCTAAATATAGAAATTGAAACAGCTGTGT <<<<<<<<<<<<<<<<<<<<<<;<<<<<<;:<57< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_105:3:86:823:683 163 chr1 240 99 35M = 408 203 CAGTTCTAAATATAGAAATTGAAACAGCTGTGTTT <<<<<<<<;<<<<<<<<<<<<<<<<<<<<;;9<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_53:4:130:568:978 99 chr1 246 88 35M = 434 223 TAAATATAGAAATTGAAACAGCTGTGTTTAGTGAC 7<<;<<;<7<:;<7<<<<<<<<);4;+<7+3+%;< MF:i:18 Aq:i:24 NM:i:1 UQ:i:26 H0:i:1 H1:i:0 +EAS114_45:4:73:1208:495 163 chr1 246 99 35M = 431 220 TAAATATAGAAATTGAAACAGCTGTGTTTAGTGCC ;;;;;;;;;;;;;;;;;;;;;;;;5;;;;;37377 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_97:7:264:642:506 99 chr1 247 99 35M = 420 208 AAATATAGAAATTGAAACAGCTGTGTTTATTGTAT <<;<<<<<<;<<<;:;;:;;<<;<<<<;*+;*&.4 MF:i:18 Aq:i:56 NM:i:3 UQ:i:28 H0:i:1 H1:i:0 +EAS114_28:5:104:350:749 163 chr1 247 99 36M = 415 204 AAATATAGAAATTGAAACAGCTGTGTTTAGTGCCTT <<8<<<<<<<<<<<;<<<<<<<<0;<<<9;<85;;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_61:6:227:259:597 147 chr1 248 99 35M = 61 -222 AATATAGAAATTGAAACAGCTGTGTTTAGTGCCTT <8<;2;9;<;;-92<;;;<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS112_32:7:113:809:364 99 chr1 250 99 35M = 413 198 TATAGAAATTGAAACAGCTGTGTTTAGTGCCTTTG <<<<<<<<<<<<<<<<<<<<<<<<<<7<;<;<<<4 MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS188_7:2:218:877:489 83 chr1 250 86 35M = 80 -205 TATAGAAATTGAAACAGCTGTGTTTAGTGCCTTTG 9<<<8<<<;<9<<<<<<<<<<;<<<<<<<<<<<<< MF:i:18 Aq:i:10 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_97:7:20:979:96 83 chr1 254 99 35M = 79 -210 GAAATTGAAACAGCTGTGTTTAGTGCCTTTGTTCA '9996;(:;-<;1<<<<=<<<<=<<<<<<<<<<<< MF:i:18 Aq:i:37 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS188_7:2:259:219:114 99 chr1 254 99 35M = 411 192 GAAATTGAAACAGCTGTGTTTAGTGCCTTTGTTCA <<<<<<<<<<<<<<<;<<<<<<7<7<<<<<0<<9< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_39:6:13:1034:1144 99 chr1 256 99 35M = 429 208 AATTGAAACAGCTGTGTTTAGTGCCTTTGTTCACA <<<<<<<<<<<<<<<<<<<<<<<<3<<<;<<;<++ MF:i:18 Aq:i:69 NM:i:2 UQ:i:48 H0:i:1 H1:i:0 +EAS221_1:2:29:1486:672 147 chr1 256 99 35M = 79 -212 AATTGAAACAGCTGTGTTTAGTGCCTTTGTTCACA <<:<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<++ MF:i:18 Aq:i:29 NM:i:2 UQ:i:54 H0:i:0 H1:i:0 +EAS139_11:7:46:695:738 163 chr1 259 74 35M = 428 204 TGAAACAGCTGAGTTTAGCGCCTGTGTTCACATAG <;<<<<;<<),&4<3<<7&7<0;)).3;79;7<;0 MF:i:130 Aq:i:74 NM:i:3 UQ:i:18 H0:i:0 H1:i:0 +EAS139_11:8:26:1221:222 163 chr1 261 99 35M = 446 220 AAACAGCTGTGTTTAGTGCCTTTGTTCAACCCCCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS51_64:3:190:727:308 147 chr1 263 99 35M = 103 -195 ACAGCTGTGTTTAGTGCCTTTGTTCAACCCCCTTG ;;<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_26:3:284:261:124 83 chr1 263 99 35M = 79 -219 ACAGCTGTGTTTAGTGCCTTTGTTCAACCCCCTTG ===27===.====&===========;;======== MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS112_34:7:141:80:875 147 chr1 265 99 35M = 110 -190 AGCTGTGTTTAGTGCCTTTGTTCAACCCCCTTGCA 6/<;84<;<;<<<<<<5<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS139_19:3:24:1135:563 163 chr1 266 99 40M = 446 220 GCTGTGTTTAGTGCCTTTGTTCAACCCCCTTGCAACAACC <<<<:<<<<:1:<<<<<<.<<<<<<<<;<;;;43+:30:: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS221_1:2:90:986:1224 83 chr1 267 99 35M = 67 -235 CTGTGTTTAGTGCCTTTGTTCAACCCCCTTGCAAC <7*37;;;;;;;9<<;<7<<<<<<<<<<<;;<<<< MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_28:7:287:492:169 99 chr1 269 99 36M = 449 216 GTGTTTAGTGCCTTTGTTCAACCCCCTTGCAACAAC <<<7<<<<<<<<<<<<<<<<<<<<<<<8;;<;6<<; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS218_4:1:48:9:409 99 chr1 271 75 18M5I12M = 464 228 GTTTAGTGCCTTTGTTCACATAGACCCCCTTGCAA <<<<<<<<<<<<<:<<<<<<<<<<<<<<<<<<<<< MF:i:130 Aq:i:75 NM:i:0 UQ:i:0 H0:i:0 H1:i:0 +EAS139_19:1:87:1222:878 163 chr1 272 10 40M = 435 203 TATAGGGCCTTTGTTCAAACCCCTTGCAACAACCTTGAGA &+6<6&<:<<9<1112<<;)9227>>>>>>>>>>>>>;<>>>>><<>>>;<+<>=>>+==>>==<==<=8=><:;8/;7<<<<<<<<;<:<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_591:2:240:603:890 83 chr1 740 99 36M = 590 -186 GCTCCCAAGAGGGAAAGCTTTCAACGCTTCTAGCCA ;+&+//&<<<<<<<<<<9<<<8<<<<9<<<<<<<<< MF:i:18 Aq:i:66 NM:i:1 UQ:i:5 H0:i:1 H1:i:0 +B7_591:7:129:956:115 163 chr1 740 99 36M = 927 223 GCTCCCCAGAGGGAAAGCTTTCAACGCTTCTAGCCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;877- MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_53:4:168:528:288 83 chr1 740 99 35M = 570 -205 GCTCCCCAGAGGGAAAGCTTTCAACGCTTCTAGCC 8<%<31;<<;<;<<<<<<<;<<<<<<<<<<;<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_65:8:275:851:240 147 chr1 743 99 35M = 561 -217 CCCCAGAGGGAAAGCTTTCAACGTTTCTAGCCATT 66614/&3616630666&66666&66666868666 MF:i:18 Aq:i:31 NM:i:1 UQ:i:5 H0:i:0 H1:i:1 +EAS188_7:6:205:873:464 147 chr1 743 99 35M = 552 -226 CCCCAGAGGGAAAGCTTTCAACGCTTCTAGCCATT <-((+:+;289<--;<;-;<:;;<<<;;<<<<<<< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_65:6:37:610:260 163 chr1 745 99 35M = 913 203 CCAGAGGGAAAGCTTTCAACGCTTCTAGCCATTTC <<<;<;<<7<<<<<<<<<<<<<<;6<963;;;3;1 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS192_3:7:93:945:176 147 chr1 745 99 35M = 582 -198 CCAGAGGGAAAGCTTTCAACGCTTCTAGCCATTTC 6;;;8<<3<<8.<;6)<<<<<9<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_593:6:61:628:681 83 chr1 746 99 36M = 586 -196 CAGAGGGAAAGCTTTCAACGCTTCTAGCCATTTCTT 95<<<<<<<<;<<<<;<<<:<<;;<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_65:7:288:552:440 83 chr1 747 87 35M = 560 -222 AGAGGGAACGCTTTCAACTCTTCTAGCCATTTCTT 9<<%'%<<.2<<<<<<<<5:<<<<<<<<<<<<<<< MF:i:18 Aq:i:26 NM:i:2 UQ:i:33 H0:i:0 H1:i:0 +EAS56_53:2:170:265:818 163 chr1 748 10 35M = 920 207 GAGGGGAAGCTTTCAACGCTTCTAGCACTTTCTTT <<<<<(5/959<8.<9<8<<<2<&59&&:22:8+( MF:i:18 Aq:i:10 NM:i:3 UQ:i:17 H0:i:0 H1:i:0 +B7_595:2:251:121:479 83 chr1 750 99 35M = 572 -213 GGGAAAGCTTTCAACGCTTCTAGCCATTTCTTTTG <<<<<6'..663;&<<;<<9<<<9<<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS221_1:8:67:1797:1931 147 chr1 750 99 35M = 562 -223 GGGAAAGCTTTCAACGCTTCTAGCCATTTCTTTTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_103:2:226:302:758 83 chr1 751 99 35M = 556 -230 GGAAAGCTTTCAACGCTTCTAGCCATTTCTTTTGG ;<<<<9;<<<<<<<<<<7<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:33 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_32:2:163:618:570 83 chr1 751 99 35M = 571 -215 GGAAAGCTGTCAACGCTTCTAGCCATTTCTTTTGG <9774<88&:8<:8<8:8<8<<<<<;88<88<<<< MF:i:18 Aq:i:41 NM:i:1 UQ:i:5 H0:i:0 H1:i:1 +EAS1_97:3:73:292:429 99 chr1 752 99 35M = 920 203 GAAAGCTTTCAACGCTTCTAGCCATTTCTTTTTGC <<<<<<<<<<7<<;<<<<<<<2<<<5<<<<<:%)< MF:i:18 Aq:i:69 NM:i:1 UQ:i:4 H0:i:1 H1:i:0 +EAS1_108:3:82:356:253 99 chr1 752 99 35M = 927 210 GAAAGCTTTCAACGCTTCTAGCCATTTCTTTTGGC ===================<========;===39= MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_30:6:62:386:959 147 chr1 752 99 35M = 594 -193 AAAAGCTTTCAACGCTTCTAGCCATTTCTTTTGGC %;71131((<<6<92(+<1<<;<-3<8<<;<;;<< MF:i:18 Aq:i:57 NM:i:1 UQ:i:4 H0:i:1 H1:i:0 +EAS51_62:3:263:74:407 83 chr1 754 99 35M = 574 -215 AAGCTTTCAACGCTTCTAGCCATTTCTTTTGGCAT ;;88<::+;<)<5<<:<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_597:3:67:620:344 99 chr1 755 99 35M = 905 185 AGCTTTCAACGCTTCTAGCCATTTCTTTTGGCATT <<<<2<:2<<<<<<7<<<<:<<*<<<<<<***3<< MF:i:18 Aq:i:33 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_610:6:148:776:486 83 chr1 755 99 35M = 578 -212 AGCTTTCAACGCTTCTAGCCATTTCTTTTGGCATT ;:<<<;<<;<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_61:3:150:933:810 83 chr1 755 99 35M = 593 -197 AGCTTTCAACGCTTCTAGCCATTTCTTTTGGCATT :89===:=:=;;==;==================== MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS51_64:4:102:467:897 99 chr1 756 97 35M = 940 219 GCTTTCAACGCTTCTAGCCATTTCTTTTGTCTTTT <<<<9<<<<9<2<<<&,/=====>=>=>>>=>>==>=>>>>>> MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_595:3:297:637:86 83 chr1 869 99 35M = 704 -200 TCTCAGCTAGGGGAACAGGGAGGTGCACTAATGCG <:75<;<;;<<<<<<;;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:1 UQ:i:26 H0:i:1 H1:i:0 +EAS54_65:3:290:558:349 147 chr1 869 99 35M = 719 -185 TCTCAGCTAGGGGAACAGGGAGGTGCACTAATGCG 2;2;;'5&;<<5<<;5/<<<<<7<<;+;<<+1<8< MF:i:18 Aq:i:59 NM:i:1 UQ:i:6 H0:i:1 H1:i:0 +EAS1_95:3:308:956:873 99 chr1 870 99 35M = 1068 233 CTCATCTAGGGGAACAGGGAGGTGCACTAATGCGC <<<<<<<<<<<<<;<;<;1<<<<<.<9<;<<<<+; MF:i:18 Aq:i:31 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS51_78:7:147:64:416 147 chr1 870 99 35M = 701 -204 CTCATCTAGGGGAACAGGGAGGTGCACTAATGCGC /;49;:6<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_593:4:30:812:345 163 chr1 871 99 36M = 1036 201 TCATCTAGGGGAACAGGGAGGTGCACTAATGCGCTC <<<<<<<7<;<<7<;77;3<&0-;<5<;6<1'13<: MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_73:7:134:243:630 163 chr1 871 99 35M = 1052 216 TCATCTAGGGGAACAGGGAGGCGCACTAATGAGCT <<<:<<<<::1:818;;&::<>.; MF:i:18 Aq:i:35 NM:i:1 UQ:i:5 H0:i:0 H1:i:1 +EAS54_81:2:31:98:804 147 chr1 982 99 35M = 805 -212 CTTTACTGTCATAACTATGAAGAGACTATTGCCAG ====;========7===================== MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_103:2:235:805:373 163 chr1 983 99 35M = 1146 198 TTTACTGTCATAACTATGAAGAGACTATTTCCAGA <<<<<<<<<<<<<<<<<<<<;<;<<<<<<;;<99; MF:i:18 Aq:i:74 NM:i:1 UQ:i:26 H0:i:1 H1:i:0 +EAS114_28:5:11:868:62 99 chr1 983 99 36M = 1154 207 TTTACTGTCATAACTATGAAGAGACTATTGCCAGAT <<<<<<<<<<<<<<<<<<<<:<<<;<<<<(7:7039 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_81:2:280:512:316 163 chr1 984 99 35M = 1159 210 TTACTGTCATAACTATGAAGAGACTATTGCCAGCT ==<========6==4==6;;==:===;=2/:+8%6 MF:i:18 Aq:i:68 NM:i:1 UQ:i:4 H0:i:1 H1:i:0 +EAS1_93:5:292:122:666 99 chr1 985 99 35M = 1159 209 TACTGTCATAACTATGAAGAGACTATTGTCAGATG <<<<<<6<<<<<<<<8;<<<<<<<<<<3&9+;;(; MF:i:18 Aq:i:68 NM:i:1 UQ:i:5 H0:i:1 H1:i:0 +EAS56_53:1:23:403:981 99 chr1 985 99 35M = 1151 201 TACTGTCATAACTATGAAGAGACTATTGCCAGATG <8<<<;<<<<<<;<<<<<<8;<<<9<9,3;,6(91 MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_45:7:33:1566:588 99 chr1 985 76 35M = 1166 216 TACTGTCATAACTATGAAGAGCCTATTGCCAGATG <;.;;;;6;;;;6;;29;;;<+9;;;.3;;73797 MF:i:18 Aq:i:37 NM:i:1 UQ:i:10 H0:i:0 H1:i:1 +EAS139_11:7:92:367:1495 83 chr1 987 99 35M = 820 -202 CTGTCATAACTATGAAGAGACTATTGCCAGATGAA <8<88<<<<7<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS220_1:8:38:1576:1923 83 chr1 987 99 35M = 822 -200 CTGTCATAACTATGAAGAGACTATTGCCAGATGAA 8;<98<<<<<<<;<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_595:7:190:481:295 163 chr1 990 99 35M = 1161 206 TCATAACTATGAAGAGACTATTGCCAGATGAACCA <<<<<<<<<<<<<<<<<<<<<<9<<<<<9<7<2:: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS112_32:7:168:117:441 99 chr1 990 99 35M = 1151 196 TCATAACTATGAAGAGACTATTGCCAGATGAACCA <<3<<<<<<<<<<<<<<<<<<<+<<17;<;:<995 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_73:3:239:796:221 163 chr1 992 99 35M = 1160 203 ATAACTATGAAGAGACTATTGCCAGCTGACCCCCC <<<7<<7<<7<<7<;<<<<<,;;,+'<+/+99%:' MF:i:18 Aq:i:37 NM:i:4 UQ:i:26 H0:i:0 H1:i:1 +EAS220_1:4:69:88:1154 147 chr1 992 99 35M = 805 -222 ATAACTATGAAGAGACTATTGCCAGATGAACCACA <<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS221_3:8:34:956:1309 99 chr1 994 99 35M = 1168 209 AACTATGAAGAGACTATTGCCAGATGAACCACACA <<<<<<7<<<<<<<<<<<6<<<<<<<<<<<:<8<8 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_108:5:229:717:121 99 chr1 995 99 35M = 1150 190 ACTATGAAGAGACTATTGCCAGATGAACCACACAC =================<)=<4<0=.<<<71;41& MF:i:18 Aq:i:43 NM:i:1 UQ:i:5 H0:i:1 H1:i:0 +EAS219_1:1:67:191:668 99 chr1 995 99 35M = 1134 174 ACTATGAAGAGACTATTGCCAGATGAACCACACCT <<<<<<<<<<<<<<<<<6<<;<;<;<<<<<<6;%2 MF:i:18 Aq:i:74 NM:i:1 UQ:i:4 H0:i:1 H1:i:0 +EAS51_64:3:309:303:278 163 chr1 996 99 35M = 1178 217 CTATGAAGAGACTATTGCCAGATGAACCACACATT <<<<<<<<<<<<<<<<+<<+<<7<<<<<5<<<;;; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS221_1:8:60:1020:1259 99 chr1 996 99 35M = 1157 196 CTATGAAGAGACTATTGCCAGATGAACCACACATT <;<<<<;<<<<<<<<<;<<<<<<<8<<<<<:<:<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS218_4:7:89:1487:520 83 chr1 997 99 35M = 805 -227 TATGAAGAGACTATTGCCAGATGAACCACACATTA 4;;/<<<<<:<;<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_610:4:15:805:420 163 chr1 998 35 35M = 1164 201 ATGAAGAGACTATTCACATGTGAACCACACATTTA ;73;;;;67.;1<<+*.;*&<4947<&474&*9*( MF:i:130 Aq:i:35 NM:i:4 UQ:i:33 H0:i:0 H1:i:0 +EAS56_57:3:119:761:239 147 chr1 999 99 35M = 813 -221 TGAAGAGACTATTGCCAGATGAACCACACATTAAT ;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS112_34:7:142:457:584 99 chr1 999 99 35M = 1160 196 TGAAGAGACTATTTCCAGATGAACCACACATTAAT <<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_63:7:190:95:706 147 chr1 1078 99 35M = 920 -193 TTGTGTCCATGTACACACGCTGTCCTATGTACTTA 9;97437;<;;<<;<;<<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_589:1:101:825:28 83 chr1 1079 99 35M = 879 -235 TGTGTCCATGTACACACGCTGTCCTATGTACTTAT 0;0'0;<<<<<<8<;<<<<;;3<<;;<<<8<<<<< MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS51_66:4:188:460:1000 99 chr1 1080 99 35M = 1251 206 GTGTCCATGTACACACGCTGTCCTATGTACTTATC <<<<<<<<<<<<<<<<7<<;:4;44<;;:8;;9;; MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_95:3:268:523:511 99 chr1 1081 99 35M = 1241 195 TGTCCATGTACACACGCTGTCCTATGTACTTATCA <<<<<<<<<<<<<<<<<<<<;<<<<6<:9<<3<44 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_28:6:54:263:585 99 chr1 1081 99 36M = 1254 209 TGTCCATGTACACACGCTGTCCTATGTACTTATCAT <<<<<<<<<<<<<<<<<<<:;<<;<:;::<<;;:;4 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS51_66:7:174:987:334 83 chr1 1082 99 35M = 908 -209 GTCCATGTACACACGCTGTCCTATGTACTTATCAT ,;<;;<<<&<<<1<<<<<<<<<<<<<;<<<<<<<< MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_71:6:224:932:942 99 chr1 1082 99 34M = 1250 203 GTCCATGTACACACGCTGTCCTATGTACTTATCA <<<<<<<<<<<<<<<<<<<<<<;<<<<7<<(;3, MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_45:1:12:1296:358 99 chr1 1082 96 35M = 1252 205 GTCCATGTACACACGCTGTCCTATGTACTTATCAT ;;;6;7;7;;;;;7;9;;-*1;9;699/99/7477 MF:i:18 Aq:i:37 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_32:2:306:119:56 147 chr1 1083 99 35M = 919 -199 TCCATGTACACACGCTGTCCTATGTACTTATCATG ;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_95:4:66:179:118 163 chr1 1084 99 35M = 1262 213 CCATGTACACACGCTGTCCTATGTACTTATCATGA <<<<<<<<<<<<<<<<<<<<<<<<<<:<<;<<6<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_105:2:110:584:649 99 chr1 1084 99 35M = 1266 217 CCATGTACACACGCTGTCCTATGTACTTATCATGA <<<<<<<<<<<<<<<<<<<<<<<<;<<<<<::<38 MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS218_1:4:28:315:310 163 chr1 1085 99 35M = 1242 192 CATGTACACACGCTGTCCTATGTACTTATCATGAC <<<<<<<<<<<<<<<<<<<<<:<+.<<.<+7<*17 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_595:7:242:4:593 147 chr1 1086 99 35M = 905 -216 ATATACACACGCTGTCCTATGTACTTATCATGACT 1.%55877+8+88808887+7;7;18:8;;;.&;8 MF:i:18 Aq:i:53 NM:i:1 UQ:i:4 H0:i:1 H1:i:0 +EAS1_93:1:131:946:353 163 chr1 1087 99 35M = 1249 197 TGTACACACGCTGTCCTATGTACTTATCATGACTC <<<<<<<<<<<<<;<<<<;;<<<<<<<;<:52;<2 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS221_1:4:4:1732:88 99 chr1 1087 99 35M = 1265 213 TGTACACACGCTGTCCTATGTACTTATCATGACTC <<<<<<<<<<<<<<<<<2<8;8<;<8;<2;2:<:< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_595:4:58:703:72 83 chr1 1088 99 35M = 905 -218 GTACACACGCTGTCCTATGTACTTATCATGACTCT 5&<<7;+95;7'6<<<<<.<<<<<;<<9<7<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_59:5:113:694:725 163 chr1 1088 99 35M = 1266 213 GTACACACGCTGTCCTATGTACTTATCATGACTCT <<<<<<<<<<<<9<<<<<:<<<<<<<<<<:;;<;; MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_65:5:278:848:765 147 chr1 1088 99 35M = 920 -203 GTACACACGCTGTCCTATGTACTTATCATGACTCT 7;;<;5<55<<;;<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_57:6:234:787:12 163 chr1 1092 97 35M = 1257 200 ACACGCTGGCCTATGTACTTATAATGACTCTATCC <;<<<9<<&+9;3;<993;<9<+94;9&41;08%9 MF:i:18 Aq:i:24 NM:i:2 UQ:i:15 H0:i:0 H1:i:0 +EAS218_1:4:15:856:340 147 chr1 1093 99 35M = 936 -192 CACGCTGTCCTATGTACTTATCATGACTCTATCCC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS51_62:2:258:266:101 163 chr1 1094 99 35M = 1285 226 ACGCTGTCCTATGTACTTATCATGACTCTATCCCA <<<<<<<<<<<<<<<<<<5<;,<-2<<<<;68<<6 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_59:2:177:552:234 147 chr1 1094 99 35M = 903 -226 ACGCTGTCCTATGTACTTATCATGACTCTATCCCA ::;:=;=99=====;;====;==========<=== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_30:1:134:379:893 147 chr1 1095 99 35M = 927 -203 CGCTGTCCTATGTACTTATCATGACTCTATCCCAA 7137::;<<<<<<<;<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_105:8:256:404:584 147 chr1 1096 99 35M = 928 -203 ACTGTCCTATGTACTTATCATGACTCTATCCCAAA &&326+23<3<<<+:<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_595:3:57:735:151 99 chr1 1121 94 35M = 1314 228 CTATCCCAAATTCCCAATTACGTCCTATCTTCTTC <<<<<<<<8<<8<:<<*<:<<<4<<<;,<<<<:<: MF:i:18 Aq:i:26 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_81:8:142:858:903 147 chr1 1121 99 35M = 943 -213 CTATCCCAAATTCCCAATTACGTCCTATCTTCTTC <<<<<;<<<<9<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_57:7:247:522:670 83 chr1 1121 99 35M = 960 -196 CTATCCCAAATTCCCAATTACGTCCTATCTTCTTC ;;;9;:<<<<<;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS139_19:3:75:732:442 99 chr1 1121 99 40M = 1293 212 CTATCCCAAATTCCCAATTACGTCCTATCTTCTTCTTAGG <<<<<;<<<<<9<<<;<<;<<<5<<;8<<<<<<<<;:9%% MF:i:18 Aq:i:60 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_99:7:183:645:699 99 chr1 1122 86 35M = 1281 194 TATCCCAAATTCCCAATTACGTCCTATCTTCTTCT <<9<9<<<<<<<<<;<<;<<*175;173<;;;<-/ MF:i:18 Aq:i:21 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS192_3:6:175:437:950 163 chr1 1126 99 35M = 1298 207 CCAAATTCCCAATTACGTCCTATCTTCTTCTTAGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:59 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_63:3:93:1002:845 83 chr1 1129 99 35M = 954 -210 AATTCCCAATTACGTCCTATCTTCTTCTTAGGGAA <<::;;;<<<<<<<<<<<<<<<<;<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS51_62:6:50:542:881 163 chr1 1132 99 35M = 1324 227 TCCCAATTACGTCCTATCTTCTTCTTAGGTAAGAA <<<<<4<09<<9<<2<<<<<<<<<<<2/.&2<%<7 MF:i:18 Aq:i:63 NM:i:1 UQ:i:5 H0:i:1 H1:i:0 +EAS1_99:3:118:851:285 83 chr1 1133 99 35M = 953 -215 CCCAATTACGTCCTATCTTCTTCTTAGGGAAGAAC 3+7<<<;<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS219_1:1:67:191:668 147 chr1 1134 99 35M = 995 -174 CCAATTACGTCCTATCTTCTTCTTAGGGAAGAACA <<<<<7<<7<<<<<<<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_595:7:166:203:416 83 chr1 1136 99 35M = 963 -208 AATTACGTCCTATCTTCTTCTTAGGGAAGAACAGC <<<<<<<<::<<<<<<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_45:2:15:1497:1530 99 chr1 1136 99 35M = 1314 213 AATTACGTCCTATCTTCTTCTTAGGGAAGAACAGC 0<;;;9;;86<;;;<<&<<.<<;)3;7;654-471 MF:i:18 Aq:i:57 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_65:8:206:563:262 83 chr1 1137 99 35M = 971 -201 ATTACGTCCTATCTTCTTCTTAGGGAAGAACAGCT <<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_26:4:40:352:151 99 chr1 1137 99 35M = 1327 225 ATTACGTCCTATCTTCTTCTTAGGGAAGAACAGCT <<<<<<<<<<<<<<<;<<9<<<<:<<<<;<99<3< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_593:7:67:302:762 99 chr1 1138 99 36M = 1313 211 TTACGTCCTATCTTCTTCTTAGGGAAGAACAGCTTA <<<<<<<<<<<<<<<<<<<<;;65;<-<;<:8<<<3 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_97:5:84:927:843 147 chr1 1138 99 35M = 938 -235 TTACGTCCTATCTTCTTCTTAGGGAAGAACAGCTT 588;<:<<<<<<<6<<<<;<<<:/<<3<:;<*<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_99:5:147:479:41 163 chr1 1139 99 35M = 1322 218 TACGTCCTATCTTCTTCTTAGGGAAGAACAGCTTA <<<<<<<<<<<<<<<<<<<<::6<<;<<<;;9;;6 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_105:3:329:177:267 83 chr1 1139 99 35M = 962 -212 TACGTCCTATCTTCTTCTTAGGGAAGAACAGCTTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_589:7:72:916:763 163 chr1 1142 99 35M = 1340 233 GTCCTATCTTCTTCTTAGGGAAGAACAGCTTAGGT ==7>==9>=7=>=>>=>> MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_65:4:91:267:655 147 chr1 1365 99 35M = 1204 -196 TGTTGTTGGTTTTCTGTTTCTTTGTTTGATTTGGT ;,:;5:<6:<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS221_1:2:91:856:504 99 chr1 1366 99 35M = 1520 189 GTTGTTGGTTTTCTGTTTCTTTGTTTGATTTGGTT <<<<<<<<<<<<<<7<<<<<<<7<<<&;<<<&&<& MF:i:18 Aq:i:68 NM:i:1 UQ:i:5 H0:i:1 H1:i:0 +EAS1_108:2:170:326:433 99 chr1 1367 99 35M = 1535 203 TTGTTGGTTTTCTGTTTCTTTGTTTGATTTGGTGG =====<=9===:=<:==2=======2:===9==/5 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_93:6:132:717:233 99 chr1 1368 99 35M = 1529 196 TGTTGGTTTTCTGTTTCTTTGTTTGATTTGGTGGA <<<<<<<<<<<<;<<<<<<<<<<<7<<<<&-<4<1 MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS139_19:1:14:420:712 99 chr1 1368 99 40M = 1525 197 TGTTGGTTTTCTGTTTCTTTGTTTGATTTTTTTGAAGACA <<<<<<<<<<<<;<<<<<<<;<<<-;<<<&,<&*8111:6 MF:i:18 Aq:i:66 NM:i:3 UQ:i:21 H0:i:1 H1:i:0 +EAS114_39:4:43:1047:1626 163 chr1 1369 99 35M = 1523 189 GTTGGTTTTCTGTTTCTTTGTTTGATTTGGTGGAA <<<<<<<<<<<<<<<<<<<:<<<:<<<<:+;-4:( MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_45:2:20:413:1334 147 chr1 1370 99 35M = 1215 -190 TTGGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAG 88878777;:;:1:;9;;;6;;;6;9;;;;;296; MF:i:18 Aq:i:60 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS51_62:5:154:669:853 83 chr1 1371 99 35M = 1193 -213 TGGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGA <::<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_610:7:117:857:942 99 chr1 1372 99 35M = 1527 190 GGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGAC <<<<<<<<<<<<<<<<<<<<<<<<<:6<;;7;9<; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_57:6:145:144:796 147 chr1 1372 99 35M = 1181 -226 GGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGAC ;<<<;<<<<<<<<<;<<<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_32:6:88:162:587 147 chr1 1372 99 35M = 1189 -218 GGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGAC 386;;388-<8;<;68<<;;<;<6<<<8<<<<<<< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS221_1:8:73:108:1621 99 chr1 1373 99 35M = 1532 194 GTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGACA <<<<<<<<71<<<<<<<<<+<<<<70:0<9<<61< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS112_34:6:127:153:861 147 chr1 1374 99 35M = 1202 -207 TTTTCTGTTTCTTTGTTTGATTTGGTGGAAGACAT :;:6;9<<1;<<95<<<9<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS188_7:2:152:765:744 163 chr1 1374 99 35M = 1534 195 TTTTCTGTTTCTTTGTTTGATTTGGTGGAAGACAT <<<<<<<<<<<<<<<<<<:<<<<<<<<&<7293<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_73:3:313:827:992 147 chr1 1379 99 35M = 1197 -217 TGTTTCTTTGTTTGATTTGGTGGAAGACATAATCC '187:1'<75<.*<<:5<..<<*<<917<<7<<17 MF:i:18 Aq:i:57 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS51_64:3:7:268:263 121 chr1 1381 22 35M = 1381 0 TTGCGTTATTTGAGTTGGTGGAAGACATAATCCCA ',)*&2<$7+<<<'<-<7<<<<<<<7<<7><>;>+>>/;>>=>=>=:>><>=<<==;)<=8; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS218_4:7:85:923:726 147 chr2 199 99 35M = 43 -191 GTAAAGTAACTGAACCTATGAGTCACAGGTATTCC <:<<<%3<<1<<86<<-<<<<<<<<<<<<6<<1<< MF:i:18 Aq:i:44 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_103:5:285:241:560 83 chr2 200 99 35M = 37 -198 TAAAGTAACTGAACCTATGAGTCACAGGTATTCCT :<<<<;<<,<<<<5<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_30:6:41:461:436 163 chr2 200 74 35M = 389 224 TAAAGTAACTGAACCTATGAGTCACAGGTATTCCT <<<<<<<<<<<<<<<<<<<:<<<<<<<<;<;;;:; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_61:6:25:949:33 99 chr2 201 99 35M = 383 217 AAAGTAACTGAACCTATGAGTCACAGGTATTCCTG =;===/8========*==&;6=&=&:=6&:=::67 MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS221_3:2:60:590:1760 99 chr2 201 99 35M = 376 210 AAAGTAACTGAACCTATGAGTCACAGGTATTCCTG <:<<<<<2<<<<:<::<<<::<<<<<6<<<<<<<6 MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_45:6:86:693:234 163 chr2 202 82 35M = 388 221 AAGTAACTGAACCTATGAGTCACAGGTATTCCTGA ;;;;;;;;;;;;;;;;9;;;;;;;;99;;&70777 MF:i:18 Aq:i:18 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_57:6:4:223:776 163 chr2 203 93 35M = 387 219 AGTAACTGAACCTATGAGTCACAGGTATTCCTGAG <<<<<<<<<<<<<<<<<<<<<<<<<9<<<:;<;2< MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_39:3:88:84:1558 99 chr2 203 95 35M = 394 226 AGTAACTGAACCTATGAGTCACAGGTATTCCTGTG <<;<<<<<<<<<<<<;;<<<<<<<::<<<<<<7&< MF:i:18 Aq:i:22 NM:i:1 UQ:i:5 H0:i:1 H1:i:0 +B7_597:2:168:829:88 163 chr2 205 99 35M = 369 199 TAACTGAACCTATGAGTCACAGGTATTCCTGAGGA <<<<<<<<<<<<<<<<<<<<<<<6<<<<<<9;4;2 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_28:1:168:389:889 147 chr2 205 99 36M = 37 -204 TAACTGAACCTATGAGTCACAGGTATTCCTGAGGAA ;<<;;56;==================8========8 MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_71:5:81:685:141 99 chr2 207 85 34M = 382 210 ACTGAACCTATGAGTCACAGGTATTCCTGAGGAA <<<<<<<<<<<<<<<<<<<<<;;<<;<<<',7,7 MF:i:18 Aq:i:17 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS139_19:4:26:1312:1400 99 chr2 207 99 40M = 385 218 ACTGAACCTATGAGTCACAGGTATTCCTGAGGAAAAAGAA <<<<;<<<:<<:<;<:<<<;:;<<<<<<:<8<1;;:::88 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_71:4:127:725:381 83 chr2 209 99 34M = 39 -204 TGAACCTATGAGTCACAGGTATTCCTGAGGAAAA +<<.<<;<;<<<3;<;<<<<<<6<8;<<<<<<<1 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS188_7:2:19:736:559 99 chr2 209 99 35M = 370 196 TGAACCTATGAGTCACAGGTATTCCTGAGGAAAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_26:3:117:284:589 83 chr2 210 99 35M = 43 -202 GAACCTATGAGTCACAGGTATTCCTGAGGAAAAAG ==8==;==================;========== MF:i:18 Aq:i:56 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_610:5:120:596:847 163 chr2 211 83 35M = 410 234 AACCTATGAGTCACAGGTATTCCTGAGGAAAAAGA <<<<<<<<<<<<<;<<<9<<<<<<<;:<62;58;2 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1 +B7_610:5:51:904:391 163 chr2 212 97 35M = 401 224 ACCTATGAGTCACAGGTATTCCTGAGGAAAAAGAA <<<<<<<<<<<<<<<<<;<<<<<;:;<2<6;;;;; MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS139_11:8:96:1314:1448 163 chr2 213 93 35M = 388 210 CCTATGAGTCACAGGTATTCCTGAGGAAAAATAAA <<<<<<<<<<<<<<<<<<<<<<<<5<4<<<<-<<< MF:i:18 Aq:i:18 NM:i:1 UQ:i:12 H0:i:1 H1:i:0 +EAS139_19:3:73:1158:535 163 chr2 213 99 40M = 377 204 CCTATGAGTCACAGGTATTCCTGAGGAAAAAGAAAAAGTG <<<<<<<<<<<<<<<<<<<<<<8<;;<<<<<9<<9::8:8 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_591:2:223:583:968 147 chr2 215 88 36M = 47 -204 TATGAGGCACAGGTATTCCTGAGGAAAAAGAAAAAG 1<';<<&%-:<<<<<:66%<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:1 UQ:i:5 H0:i:1 H1:i:0 +EAS1_97:3:160:173:889 163 chr2 215 99 35M = 379 199 TATGAGTCACAGGTATTCCTGAGGAAAAAGAAAAA <<<<<<<<<<<<<<<<<<<<;0<7<<;<<<;7<09 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_39:1:28:350:895 83 chr2 215 95 35M = 48 -202 TATGAGTCACAGGTATTCCTGAGGAAAAAGAAAAA :<;<<<:;<-<<<<<4;77<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_53:4:45:707:147 163 chr2 216 99 35M = 424 243 ATGAGTCACAGGTATTCCTGAGGAAAAAGAAAAAG <<<<<<<<<<<<&<<<<:<<9<<<9<<<<75;;;< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS220_1:8:18:1757:95 99 chr2 216 45 35M = 374 193 ATGAGTCGCAGGTATTCCTGAGGAAAAAGAAAAAG <<<<<<<<<<<<<<<<<<<1<:<<<<<<:<<<;:< MF:i:18 Aq:i:0 NM:i:1 UQ:i:27 H0:i:0 H1:i:1 +EAS51_66:6:310:747:415 163 chr2 217 99 35M = 387 205 TGAGTCACAGGTATTCCTGAGGAAAAAGAAAAAGT <<<<<<<<<<<<<<<<<<:<<<<<;<<<<<;<;<; MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_28:2:114:938:216 147 chr2 218 99 36M = 63 -191 GAGTCACAGGTATTCCTGAGGAAAAAGAAAAAGTGA <<<<7<6<<<<<<<6<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_93:1:179:629:513 163 chr2 220 99 35M = 409 224 GTCACAGGTATTCCTGAGGAAAAAGAAAAAGTGAG <<<<<<<<<<<<<<<;<;<<<<<<<<<<<<<;<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_45:4:88:55:1187 99 chr2 220 66 35M = 391 206 GTCACAGGTATTCCTGAGGAAAAAGAAAAAGTGAG ;;<;;;<<99<<;;<;;;;;:;49;:;;;;87898 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS51_62:5:119:38:945 99 chr2 221 99 35M = 428 242 TCACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGA <<<<<<<<<<<<<<<8<<<<<8<<<8<;<<7<:<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_65:6:67:800:450 147 chr2 221 99 35M = 41 -215 TCACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGA 9-<9<;<<<<9;5<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_610:5:102:915:87 147 chr2 222 99 35M = 65 -192 CACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAA ;<8<;;<<<<7;<<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_26:1:113:367:659 163 chr2 222 72 35M = 390 203 CACAGGTATTCCTGAGGAAAAAGAAAAAGCGAGAA =9====8==========:=:=====9=:=&====5 MF:i:18 Aq:i:0 NM:i:1 UQ:i:5 H0:i:1 H1:i:0 +EAS218_1:2:26:211:481 147 chr2 222 99 35M = 43 -214 CACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAA :<:<<<<<<9:5<<<<<<<<<<<<<<:<:<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS219_FC30151:3:90:1906:1528 83 chr2 222 99 35M = 41 -216 CACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAA :<<<<<<<<<3:<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_591:2:13:100:876 163 chr2 223 73 36M = 397 210 ACAGGGATTCCTGAGGAAAAAGAAAAAGTGAGAAGT <8<<<*<2<7<<<6<<<<<<6<<8<<<<5<<<<4<9 MF:i:18 Aq:i:30 NM:i:1 UQ:i:9 H0:i:0 H1:i:1 +EAS56_63:5:117:570:971 163 chr2 223 99 35M = 413 225 ACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAG <<<<<<<<<<<<<;;;<<<<6<7;9;<:;<;<;;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS221_3:8:50:1203:1094 83 chr2 223 99 35M = 46 -212 ACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAG <7<<<<<5:+63<<<<<<<<<<<<<<<<2<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_67:6:107:395:312 83 chr2 224 99 35M = 44 -215 CAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGT ;<;;<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_73:3:29:833:612 83 chr2 224 99 35M = 58 -201 CAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGT <<;<<<;<::<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_610:7:158:943:467 83 chr2 225 99 35M = 57 -203 AGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTT <:<<;;<:5<<<<<<<<<<<<<<<<<<;<<<;<<< MF:i:18 Aq:i:46 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_59:2:201:768:529 163 chr2 225 99 35M = 396 206 AGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTT ==========================1=======; MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS188_7:6:11:994:584 99 chr2 226 97 35M = 417 226 GGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTT <<<<<<<<<<<7<<<<<<<<<<<<<6<<<<<<3<6 MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_57:2:206:873:186 83 chr2 227 99 35M = 66 -196 GTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTG ;<<;--7<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_63:4:38:28:122 83 chr2 227 99 35M = 46 -216 GTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTG ;9;9;-1<<<<<<<<<<<<<<<<<;<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_93:5:66:372:343 83 chr2 228 99 35M = 40 -223 TATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGG ;<1;89<<<<<;<9<<<<9<<<;8<9<;<<<<<;8 MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_97:3:277:144:848 83 chr2 228 99 35M = 64 -199 TATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGG <<<)63<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS139_19:6:21:1601:1666 83 chr2 228 99 40M = 56 -212 TATTACTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAA -;;3&1<<<<<<<<<<<<1<<<<<<<<<<<7<<<<<<<<=<<<<<<<<<<<<<< MF:i:32 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_57:2:23:268:529 153 chr2 329 71 35M * 0 0 TGAAAGAGGCTCAAAGAATGCCAGGAAGATACATT 7;<<<<<<57;-<<<<<<:<77<<<<<<<;<;<<< MF:i:32 Aq:i:28 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_26:2:315:219:7 153 chr2 330 69 35M * 0 0 GAAAGAGGCTCAAAGAATGCCAGGAAGATACATTG 7==::<2=8<<<=====>888<=2=>==>,>,>>8 MF:i:32 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS192_3:4:63:5:870 83 chr2 330 75 35M = 148 -217 GAAAGAGGCTCAAAGAATGCCAGGAAGATACATTG :<;<;<<<4:;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_591:5:243:557:560 163 chr2 331 75 36M = 499 204 AAAGAGGCTCAAAGAATGCCAGGAAGATACATTGCA <<<<<<<9<<<<<<<<<<<<<<<<<<;<<89<<9<; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_593:2:270:430:269 163 chr2 331 99 36M = 519 224 AAAGAGGCTCAAAGAATGCCAGGAAGATACATTGCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;7;: MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS51_66:6:284:442:747 89 chr2 331 75 35M * 0 0 AAAGAGGCTCAAAGAATGCCAGGAAGATACATTGC <;<<<<<:<;<<<<<<<<;<<<<<<<<<<<<<<<< MF:i:32 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS218_4:7:71:31:1973 89 chr2 331 76 35M * 0 0 AAAGAGGCTCAAAGAATGCCAGGAAGATACATTGC <<<<<7<:<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:32 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_93:2:30:466:652 147 chr2 332 98 35M = 163 -204 AAGAGGCTAAAAGAATGCCAGGAAGATACATTGCA <<<<<;3;&<<<<<<<============= MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:4 H1:i:13 +EAS114_39:3:88:84:1558 147 chr2 394 95 35M = 203 -226 ATCAGACTATCTAAAGTCAACATGAAGGAAAAAAA ;;<<;<<;<<5<<<<<<;<<:<<<;<<<<<<;<<< MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:2 H1:i:3 +EAS56_59:2:201:768:529 83 chr2 396 99 35M = 225 -206 CAGACTATCTAAAGTCAACATGAAGGAAAAAAATT 3<:<9<<;<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_591:2:13:100:876 83 chr2 397 73 36M = 223 -210 AGAATATATAAAGTCAACATGAAGGAAAAAAATTCT ;9<$<<<$<<<<<<<<75<<<<<<<9<9<<<<<<<< MF:i:18 Aq:i:30 NM:i:2 UQ:i:6 H0:i:1 H1:i:1 +EAS139_11:4:26:137:1382 99 chr2 397 99 35M = 579 217 AGACTATCTAAAGTCAACATGAAGGAAAAAAATTC <<<<<<7<<<77<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_59:1:93:490:901 83 chr2 445 99 35M = 280 -200 AGAAAAGCATACAGTCATCTATAAAGGAAATCCCA <<<<<<<;<<<;<<<;<<;<<;<<<<<<<<<<<<< MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS112_34:7:96:489:453 99 chr2 445 99 35M = 625 215 AGAAAAGCATACAGTCATCTATAAAGGAAATCCCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;;: MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_26:6:46:13:880 147 chr2 445 99 35M = 290 -190 AGAAAAGCATACAGTCATCTATAAAGGAAATCCCA =&====8==========0================= MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_28:2:167:905:852 163 chr2 445 99 36M = 647 238 AGAAAAGCATACAGTCATCTATAAAGAAAATCCCAT <<<7<<<<<<<<<<<<<<:<:<<:::&.<:<66:3< MF:i:18 Aq:i:43 NM:i:1 UQ:i:5 H0:i:0 H1:i:1 +EAS219_FC30151:3:13:674:1717 163 chr2 445 99 35M = 623 213 AGAAAAGCATGCAGTCATCTATAAAGGAAATCCCA <<<<<<<<<<%<<<<<<<<<<<<<<<<<<<;:;;; MF:i:18 Aq:i:45 NM:i:1 UQ:i:4 H0:i:0 H1:i:1 +EAS51_62:7:196:511:896 83 chr2 446 99 35M = 283 -198 GAAAAGCATACAGTCATCTATAAAGGAAATCCCAT 8<<<<<;<<<:<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:52 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_53:1:154:118:488 163 chr2 447 99 35M = 624 212 AAAAGCATACAGTCATCTATAAAGGAAATCCCATC <<<<<<<<<<<<<<<<<<<<<<:7<<<<7<:;;:: MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_57:2:44:153:969 83 chr2 447 95 35M = 245 -237 AAAAGCATACAGTCATCTATAAAGGAAATCCCATC <<5<:7<72<51<7<*79<<<<<5<<<<<<<<<2< MF:i:18 Aq:i:36 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_28:4:215:246:640 99 chr2 447 99 36M = 624 213 AAAAGCATACAGTCATCTATAAAGGAAATCCCATCA <<<<<<<<<<9<;<<<<<<<<<<9;<<<<<<3;<;3 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS219_1:7:94:1655:1921 147 chr2 447 85 35M = 258 -224 AAAAGCATACAGTCATCTATAAAGGAAATCCCATC <<<<;:===<==;<==<;================; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS221_1:6:60:1037:1146 147 chr2 447 99 35M = 250 -232 AAAAGCATACAGTCATCTATAAAGGAAATCCCATC <<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_65:1:23:536:229 99 chr2 448 99 35M = 614 201 AAAGCATACAGTCATCTATAAAGGAAATCCCATCA <<<<<<<<<<<<<<<<<:<8<:<<;<<<<<<7<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS112_34:6:130:865:838 163 chr2 448 99 35M = 649 236 AAAGCATACAGTCATCTATAAAGGAAATCCCATCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;:<;3 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_59:2:239:1001:406 99 chr2 450 99 35M = 634 219 AGCATACAGTCATCTATAAAGGAAATCCCATCAGA <<<<<<7<<<<<<<<8<;<<<7<<<<36<<3<:33 MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_97:3:147:423:584 147 chr2 451 99 35M = 277 -209 GCATACAGTCATCTATAAAGGAAATCCCATCAGAA 27<;<3<<<+<<;<<<;;-4<<<<<;<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_99:1:187:715:521 83 chr2 451 99 35M = 291 -195 GCATACAGTCATCTATAAAGGAAATCCCATCAGAA <7<:<9<<<<<<<<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_67:3:172:196:746 99 chr2 451 99 35M = 620 204 GCATACAGTCATCTATAAAGGAAATCCCATCAGAA <<<<<<<<9<<<<9<<<<<<<<<;<<<<6<<<<;< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_71:3:267:821:860 83 chr2 451 99 34M = 296 -189 GCATACAGTCATCTATAAAGGAAATCCCATCAGA $&<<<.<:;6<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:3 +EAS56_61:7:7:682:201 83 chr2 452 99 35M = 288 -199 CATACAGTCATCTATAAAGGAAATCCCATCAGAAT 0:8;5<8<1:78<<<<<<<<<<<<:8<<2<<<<:< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_589:3:82:13:897 163 chr2 453 99 35M = 606 188 ATACAGTCATCTATAAAGGAAATCCCAGCAGAATA <<<<;<<<<<<;<;<;5<51;<1<<<<%<<<<,58 MF:i:18 Aq:i:41 NM:i:1 UQ:i:4 H0:i:0 H1:i:1 +EAS56_53:6:180:695:621 99 chr2 453 99 35M = 637 219 ATACAGTCATCTATAAAGGAAATCCCATCAGAATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;::<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_57:2:158:909:321 83 chr2 453 99 35M = 271 -217 ATACAGTCATCTATAAAGGAAATCCCATCAGAATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_26:2:237:497:165 99 chr2 454 99 35M = 619 200 TACAGTCATCTATAAAGGAAATCCCATCAGAATAA 8===<8===========37=<===7=;7=8===== MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_99:2:152:355:962 83 chr2 456 99 35M = 269 -222 CAGTCATCTATAAAGGAAATCCCATCAGAATAACA &<.9.<;+;<;<<<<<<<<<<::<<:<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2 +EAS192_3:4:255:549:422 83 chr2 456 99 35M = 295 -196 AAGTCATCTATAAAGGAAATCCCATCAGAATAACA &<;;+<;4;<<<<<<<<<<<;<;<<;<<<<<<<<< MF:i:18 Aq:i:30 NM:i:1 UQ:i:5 H0:i:1 H1:i:2 +EAS220_1:4:100:20:1199 163 chr2 456 99 35M = 614 193 CAGTCATCTATAAAGGAAATCCCATCAGAATAACA 7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<4<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_67:5:71:408:741 163 chr2 457 99 35M = 637 215 AGTCATCTATAAAGGAAATCCCATCAGAATAACAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS51_66:5:285:395:450 147 chr2 458 99 35M = 269 -224 GTCATCTATAAAGGAAATCCCATCAGAATAACAAT 8)3<8+;<)<<<<<<<<97:7<<<<<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_73:3:4:854:140 99 chr2 458 72 35M = 638 215 GTCATCTATAAAGGAAATCCCATCAGAATAACAAT <<<6<<<:<6<<<:36:<<<<3<<8:.6<38::4< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_59:6:227:657:95 147 chr2 458 99 35M = 280 -213 GTCATCTATAAAGGAAATCCCATCAGAATAACAAT ;3;<);<<<<<<<<<<<<18<<<<<<<<<<<<<<< MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_28:7:57:324:546 83 chr2 458 99 36M = 281 -213 GTCATCTATAAAGGAAATCCCATCAGAATAACAATG ;;5<;,<<<;;<<<<<<<97<<<<<<<<<<9<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS139_19:4:26:274:1078 83 chr2 458 99 40M = 282 -216 GTCATCTATAAAGGAAATCCCATCAGAATAACAATGGGCT 9:*:64<<;<<<<<<<<<;8;<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS188_7:6:107:636:642 163 chr2 458 99 35M = 630 207 GTCATCTATAAAGGAAATCCCATCAGAATAACAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_81:7:226:869:36 147 chr2 461 99 35M = 273 -223 ATATATAAAGGAAATCCCATCAGAATAACAATGGG <0/)&<=,==4>4=>>= MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS218_1:8:82:1540:77 163 chr2 619 99 35M = 786 202 GAAATAAAGTCAAGTCTTTCCTGACAAGCAAATGC <<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<<<:8 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_67:3:172:196:746 147 chr2 620 99 35M = 451 -204 AAATAAAGTCAAGTCTTTCCTGACAAGCAAATGCT <<<;><<+<<<<:<<<<2<;<<<;<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_73:7:97:892:419 163 chr2 621 99 35M = 800 214 AATAAAGTCAAGTCTTTCCTGACAAGCAAATGCTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS192_3:4:312:915:751 147 chr2 621 99 35M = 461 -195 AATAAAGTCAAGTCTTTCCTGACAAGCAAAAGCTA <:-<<<99:::);:7<4;8<<<<<<<;<2<+8<;< MF:i:18 Aq:i:41 NM:i:1 UQ:i:10 H0:i:0 H1:i:1 +EAS1_93:4:325:352:67 163 chr2 622 99 35M = 794 207 ATAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAA ==================<========<=<;-=== MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_97:4:83:731:540 99 chr2 623 99 35M = 804 216 TAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAG <<<<<<<<<;<<<<<<<<<<<<<:<7<*;&;<;;9 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS188_7:5:74:329:459 163 chr2 623 99 35M = 795 207 TAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAG <<<<<<<<<<<<<<<<<<<<<<<;<<;<<;9;599 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS219_FC30151:3:13:674:1717 83 chr2 623 99 35M = 445 -213 TAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_105:1:141:415:738 69 chr2 624 0 * = 624 0 TTACCTAGTTGCTCTGTAGTCTCAATTAATTGTTT <<<<<<<<<<<<<<<<<<<<<<<;<<<<<;<8<<< MF:i:192 +EAS1_105:1:141:415:738 137 chr2 624 76 35M = 624 0 AAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGA <<<<<<<<<<<<<<<<<<<<<<:<<;<<;<<<<6: MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_53:1:154:118:488 83 chr2 624 99 35M = 447 -212 AAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGA <<<;58<<95:<<;<;<<<;<<<;;<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_59:5:198:929:684 83 chr2 624 99 35M = 471 -188 AAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGA <<;<<<<<:<<<<<<<<<<<<<<<<<;<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_28:4:215:246:640 147 chr2 624 99 36M = 447 -213 AAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGAT ;<<,<<<96<<:<:<9<6<97<<<<<9<<<<9<<9< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_103:2:234:167:381 83 chr2 625 99 35M = 443 -217 AAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGAT <<;<;<<<<;<<<<7<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS112_34:7:96:489:453 147 chr2 625 99 35M = 445 -215 AAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGAT ;<;;;<<<<5:<<:<<<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_93:3:79:879:15 99 chr2 626 99 35M = 790 199 AGTCAAGTCTTTCCTGACAAGCAAATGCTAAGATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<2<;<<1< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_53:2:59:286:290 147 chr2 628 99 35M = 467 -196 TCAAGTCTTTCCTGACAAGCAAATGCTAAGATAAT 77<<<<7<<<97<<,7<<<;<<<;<9<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_95:5:263:511:936 99 chr2 629 99 35M = 801 207 CAAGTCTTTCCTGACAAGCAAATGCTAAGATAATT <<<<<<<<<<<<<<<<<;<<<<<;<<:<:<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_30:3:181:582:435 147 chr2 629 99 35M = 471 -193 CAAGTCTTTCCTGACAAGCAAATGCTAAGATAATT <<<<<<<<;<<<<<;<<4<<<<<<;<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS188_7:6:107:636:642 83 chr2 630 99 35M = 458 -207 AAGTCTTTCCTGACAAGCAAATGCTAAGATAATTC <<<<<<<;<<<<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS112_34:4:12:273:89 83 chr2 631 99 35M = 477 -189 AGTCTTTCCTGACAAGCAAATGCTAAGATAATTCA <:737<288<<<7<<<<<<<<<:9<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_59:2:239:1001:406 147 chr2 634 99 35M = 450 -219 CTTTCCTGACAAGCAAATGCTAAGATAATTCATCA 0':.71;;:9==9=;====;=;============= MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS188_4:7:96:899:106 147 chr2 636 99 35M = 462 -209 TTCCTGACAAGCAAATGCTAAGATAATTCATCATC ;;;;<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_65:6:67:56:806 147 chr2 637 99 35M = 464 -208 TCCTGACAAGCAAATGCTAAGATAATTCATCATCA 844:8;7<88;8<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_67:5:71:408:741 83 chr2 637 99 35M = 457 -215 TCCTGACAAGCAAATGCTAAGATAATTCATCATCA ;7;<;<0<<<<<<<<:;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_53:6:180:695:621 147 chr2 637 99 35M = 453 -219 TACTGAAAAGCAAATGCTAAGATAATTCATCATCA ;&377<&<<;7<<<<<7<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:2 UQ:i:10 H0:i:1 H1:i:0 +EAS114_30:6:49:656:507 147 chr2 637 99 35M = 468 -204 TCCTGACAAGCAAATGCTAAGATAATTCATCATCA %44;;<:<<;<;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_73:3:4:854:140 147 chr2 638 72 35M = 458 -215 CCTGACAAGCAAATGCTAAGATAATTCATCATCAC :9':<;<<<;<<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS139_19:1:85:1521:58 99 chr2 639 99 40M = 813 214 CTGACAAGCAAATGCTAAGATAATTCATCATCACTAAACC <<<<<<<<9<<<<<<<<<<<<<7<<<<<<<<<<<<;;:7: MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_39:2:57:1064:925 137 chr2 640 76 35M * 0 0 TGACAAGCAAATGCTAAGATAATTCATCATCACTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<< MF:i:32 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_103:3:323:196:855 163 chr2 642 99 35M = 809 202 ACAAGCAAATGCTAAGATAATTCATCATCACTAAA <<<<<<<7<<<<<<:<<<<<<<<<<<<<<<<<;7: MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_67:5:117:33:262 163 chr2 642 99 35M = 814 207 ACAAGCAAATGCTAAGATAATTCATCATCACTAAA <<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS139_11:1:59:742:549 99 chr2 642 99 35M = 816 209 ACAAGCAAATGCTAAGATAATTCATCATCACTAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<8< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_28:2:55:562:403 163 chr2 643 99 36M = 825 218 CAAGCAAATGCTAAGATAATTCATCATCACTAAACC <<<<<<<<<<<<<<<<<<<<<;<<;<<<<<<<;<;: MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_71:7:97:743:602 163 chr2 644 99 35M = 821 211 AAGCAAATGCTAAGATAATTCATCATCACTAAACC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<: MF:i:18 Aq:i:26 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_28:2:167:905:852 83 chr2 647 99 36M = 445 -238 CAAATGCTAAGATAATTCATCATCACTAAACCAGTC +<<<9;7;<<+<<<<<39<;9<;9<<7<<<<<<<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS112_34:6:130:865:838 83 chr2 649 99 35M = 448 -236 AATGCTAAGATAATTCATCATCACTAAACCAGTCC ;<:84<<<4<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS219_1:1:60:1420:660 163 chr2 649 99 35M = 808 194 AATGCTAAGATAATTCATCATCACTAAACCAGTCC <<<<<<<<<<<<<<<<<<<<<<<<<<;<<<8<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_593:3:180:89:582 99 chr2 650 99 36M = 809 195 ATGCTAAGATAATTCATCATCACTAAACCAGTCCTA <<<<<<<<<7<<<<<<<<<7<<<:<<<:<<::77:< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_99:1:86:871:319 147 chr2 651 71 35M = 494 -192 TGCTAAGATAATTCATCATCACTAAACCAGTCCTA 7;+1;<:<<<<<<<<;<<;<<9<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_57:2:236:841:20 83 chr2 652 99 35M = 467 -220 GCTAAGATAATTCATCATCACTAAACCAGTCCTAT 7;<<<;<<<<;;<<<<<<<<<<<<<<<<<<<<;<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS51_62:2:133:8:379 83 chr2 653 99 35M = 470 -218 ATAAGATAATTCATCATCACTAAACCAGTCCTATA &=========='==7==0=2====28===00==== MF:i:18 Aq:i:70 NM:i:1 UQ:i:5 H0:i:1 H1:i:0 +EAS1_105:8:96:720:940 83 chr2 654 99 35M = 467 -222 TAAGATAATTCATCATCACTAAACCAGTCCTATAA *<<<<;<<<9<<;,<;0<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_57:5:71:994:576 99 chr2 655 99 35M = 805 185 AAGATAATTCATCATCACTAAACCAGTCCTATAAG <<<<<<<<<<<<<<<<<<<<<<<;<<5<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_103:4:164:79:134 147 chr2 656 99 35M = 488 -203 AGATAATTCATCATCACTAAACCAGTCCTATAAGA <;<;<<<;<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS139_19:6:78:1029:512 83 chr2 656 99 40M = 500 -196 AGATAATTCATCATCACTAAACCAGTCCTATAAGAAATGC ;;;;;<;;<<<.<<6;<<;<;8<<<<::<<<<<<<<;<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_93:1:214:784:690 147 chr2 657 99 35M = 472 -220 GATAATTCATCATCACTAAACCAGTCCTATAAGAA -<7<<7<:<<2<<<<;<<<<<;<<<<3<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1 +EAS220_1:4:6:1178:1105 99 chr2 657 93 35M = 830 208 GATAATTCATCATCACTAAACCAGTCCTATAAGAA <<<<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:17 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_99:7:171:196:287 83 chr2 658 99 35M = 485 -208 ATAATTCATCATCACTAAACCAGTCCTATAAGAAA <;;;98;<;&<;;<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_28:1:220:801:282 99 chr2 660 99 36M = 837 213 AATTCATCATCACTAAACCAGTCCTATAAGAAATGC <<<<<<<<<<<<<<<<<<<<<;<+<;<<<<<::<<: MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2 +EAS221_1:2:73:955:728 163 chr2 660 44 35M = 823 198 AATTCATCATCACTAAACCAGTCCTATAAGAAATG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<< MF:i:18 Aq:i:14 NM:i:0 UQ:i:0 H0:i:1 H1:i:2 +EAS1_105:1:3:903:957 147 chr2 661 99 35M = 516 -180 ATTCATCATCACTAAACCAGTCCTATAAGAAATGC <%12<&<<<;<:<<<<<<<<<7<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1 +EAS56_65:2:224:579:433 83 chr2 662 99 35M = 485 -212 TTCATCATCACTAAACCAGTCCTATAAGAAATGCT '<08/8<+<>===> MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_105:2:146:374:692 99 chr2 690 99 35M = 874 219 AAATGCTCAAAAGAATTGTAAAAGTCAAAATTAAA <<<<<<<<<<<<<<<=>>>==>>===>==> MF:i:130 Aq:i:74 NM:i:0 UQ:i:0 H0:i:0 H1:i:0 +EAS1_108:6:159:493:275 99 chr2 760 72 35M = 939 214 ACAAAACTCACAGGTTTTATAAAACAATTAATTGA =====3============================= MF:i:130 Aq:i:72 NM:i:0 UQ:i:0 H0:i:0 H1:i:0 +EAS139_11:1:81:1019:558 163 chr2 760 77 35M = 926 201 ACAAAACTCACAGGTTTTATAAAACAATTAATTGA <<<<<<<<<<<6<<<<<<<<<<<<<<<<<<<<<7< MF:i:130 Aq:i:77 NM:i:0 UQ:i:0 H0:i:0 H1:i:0 +EAS51_62:7:162:195:761 163 chr2 767 30 18M4I13M = 922 190 TCACAGGTTTTATAAAACAATTAATTGAGACTACA <<<<<<<<<<<<<<<<<<<<<<<<<<;<:<<<<;; MF:i:130 Aq:i:30 NM:i:0 UQ:i:0 H0:i:0 H1:i:0 +B7_597:3:115:646:430 147 chr2 768 45 17M4I14M = 582 -217 CACAGGTTTTATAAAACAATTAATTGAGACTACAG 5;5<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:130 Aq:i:45 NM:i:0 UQ:i:0 H0:i:0 H1:i:0 +EAS114_30:6:243:209:110 163 chr2 768 48 17M4I14M = 920 187 CACAGGTTTTATAAAACAATTAATTGAGACTACAG <<<<<;<;<<<;<<<<<<<<<<<;<:;<<:;;+85 MF:i:130 Aq:i:48 NM:i:0 UQ:i:0 H0:i:0 H1:i:0 +EAS1_108:2:266:994:429 147 chr2 769 76 16M4I15M = 612 -188 ACAGGTTTTATAAAACAATTAATTGAGACTACAGA <<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS139_19:1:85:1521:58 147 chr2 813 99 40M = 639 -214 AAATTAACATTACAACAGGAACAAAACCTCATATATCAAT :::86<<:<<8<<<<;<<8<<<<<<<<<<<<<<<;<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS188_7:4:164:719:947 99 chr2 813 99 35M = 1005 227 AAATTAACATTACAACAGGAACAAAACCTCATATA <<<<<<<<<<<<<<<<<<<;<<<<<<<<<;<<<<< MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS219_1:1:50:257:341 163 chr2 813 99 35M = 971 193 AAATTAACATTACAACAGGAACAAAACCTCATATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<7<6<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_67:5:117:33:262 83 chr2 814 99 35M = 642 -207 AATTAACATTACAACAGGAACAAAACCTCATATAT <<;;<<;<:8<7<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS218_1:8:90:706:1276 163 chr2 814 99 35M = 980 201 AATTAACATTACAACAGGAACAAAACCTCATATAT <<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<:<:< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_108:2:116:966:193 163 chr2 815 99 35M = 967 187 ATTAACATTACAACAGGAACAAAACCTCATATATC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS139_11:1:59:742:549 147 chr2 816 99 35M = 642 -209 TTAACATTACAACAGGAACAAAACCTCATATATCA -<<<3<<<<6<<6<<<<<6<<<<6<<<<<<<<<<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS139_11:7:74:213:877 99 chr2 816 99 35M = 996 215 TTAACATTACAACAGGAACAAAACCTCATATATCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2 +B7_610:3:85:219:371 163 chr2 817 99 35M = 967 185 TAACATTACAACAGGAACAAAACCTCATATATCAA <<<<<<<<<<<<<<<<<<<<<:<<<<<<<<<<;<; MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_108:2:176:653:957 163 chr2 819 82 35M = 982 198 ACATTACAACAGGAACAAAACCTCATATATCAATA ????????????<==>=>=>=>>>==>>>=>>> MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS139_19:5:57:366:844 83 chr2 877 99 40M = 708 -209 AAATTCCCCCACTTAAGAGATATAGATTGGCAGAACAGAT ;;;7:8&555<,;<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_32:3:236:475:254 163 chr2 880 99 35M = 1051 206 TTCCCCCACTTAAGAGATATAGATTGGCAGAACAG <<<<<<<<<<<<<<<<<<<<<<<<<:::<:;>=>>>>==>=>>>==>=>=:=====;=:=6:::6 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS218_1:2:10:686:1024 163 chr2 947 99 35M = 1103 191 ACAAGAAACTCATTAATAAAGACATGAGTTCAGGT <:<<<<:<<<<<<<<<<:<:<<<<<<<<<<<5<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_73:5:53:61:31 163 chr2 949 99 35M = 1122 208 AAGAAACTCATTAATAAAGACATGAGTTCAGATAA <<<7;<7<<<;7<;;<7<7<7<;5<73<<<;>588>9<>7:<0<9; MF:i:18 Aq:i:30 NM:i:1 UQ:i:5 H0:i:0 H1:i:1 +B7_589:2:30:644:942 99 chr2 1045 83 35M = 1229 219 TATATCAGATAAAGCACACTTTAAATCAACAACAG <<<<<<<<<<<<<<<<<<<<<<<9<<<<<<9;<9< MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:1 H1:i:3 +B7_591:2:123:924:645 83 chr2 1045 84 36M = 861 -220 TATATCAGATAAAGCACACTTTAAATCAACAACAGT ;<<<<*<<<<<<<<8<<<<<><<<<<><<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1 +EAS51_62:4:308:614:911 99 chr2 1319 90 35M = 1493 209 TGCGCTTGTACTTCTAAATCTATAACAAAATTAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<<<8< MF:i:18 Aq:i:43 NM:i:1 UQ:i:27 H0:i:0 H1:i:1 +EAS54_65:3:155:541:234 83 chr2 1319 99 35M = 1151 -203 TGCGCTTGTACTTCTAAATCTATAAAAAAATTAAA 78;<7<<<<<<<<<<<<<<;<<<<<<<<<<;<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_57:6:175:289:351 147 chr2 1319 99 35M = 1144 -210 TGCGCTTGTACTTCTAAATCTATAAAAAAATTAAA 9;;:+<<<<<;<<:<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_593:7:283:186:707 83 chr2 1321 99 36M = 1154 -203 CGCTTGTACTTCTAAATCTATAACAAAATTAAAATT 889;<7;<7<<7<<<<<7<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1 +EAS1_105:3:308:66:538 147 chr2 1321 99 35M = 1138 -218 CGCTTGTACTTCTAAATCTATAACAAAATTAAAAT 996999;<9;<:<<<<<:<<7<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1 +EAS1_108:5:11:555:330 163 chr2 1321 99 35M = 1492 206 CGCTTGTACTTCTAAATCTATAAAAAAATTAAAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<4<;< MF:i:18 Aq:i:56 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS51_66:7:84:411:336 73 chr2 1322 75 35M * 0 0 GCTTGTACTTCTAAATCTATAAAAAAATTAAAATT <<<;<<<;<<<<<<<<<<<<:<<;<<<<<<;8<;< MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS139_11:5:52:1278:1478 163 chr2 1322 47 35M = 1513 226 GCTTGTACTTCTAAATCTATAACAAAATTAAAATT <<<<<<<<<<<<<<9<<<<<<<<<<<<<<<<9<<< MF:i:18 Aq:i:0 NM:i:1 UQ:i:27 H0:i:0 H1:i:1 +EAS56_53:3:101:809:776 147 chr2 1326 99 35M = 1160 -201 GTACTTCTAAATCTATAAAAAAATTAAAATTTAAC <<<-<;7;<<<<:;<<<7<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS192_3:3:221:881:916 147 chr2 1327 96 35M = 1168 -194 TAATTCTAAATCTAGAACAAAATTAAAATTTAACA 44%-4(5<;9/,:<68:1<:8<:<<84;<<<<<;< MF:i:18 Aq:i:24 NM:i:3 UQ:i:41 H0:i:0 H1:i:0 +EAS1_105:1:28:745:352 147 chr2 1329 99 35M = 1159 -205 CTTCTAAATCTATAACAAAATTAAAATTTAACAAA 4;;*;<<<;;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1 +EAS114_45:2:23:1754:796 99 chr2 1329 99 35M = 1488 194 CTTCTAAATCTATAAAAAAATTAAAATTTAACAAA ;<<;<;<;<;<;<<;;;;;<<<<;;<<<<<97999 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_97:2:96:419:327 147 chr2 1331 99 35M = 1149 -217 TCTAAATCTATAACAAAATTAAAATTTAACAAAAG ;1<<<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1 +EAS1_97:4:274:287:423 163 chr2 1332 75 35M = 1515 218 CTAAATCTATAAAAAAATTAAAATTTAACAAAAGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS219_1:7:35:392:2042 83 chr2 1332 99 35M = 1168 -199 ATAAATCTATAAAAAAATTAAAATTTAACAAAAGT +<<<<4<>>>>;>>&>->9>9;4>->>>>,4>9>,<1> MF:i:18 Aq:i:27 NM:i:1 UQ:i:5 H0:i:0 H1:i:1 +EAS139_19:2:82:154:1333 99 chr2 1349 77 40M = 1511 202 TTAAAATTTAACAAAAGTAAATAAAACACACAGCTAAAAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<;;:;: MF:i:18 Aq:i:0 NM:i:1 UQ:i:27 H0:i:1 H1:i:0 +EAS188_7:1:290:286:763 99 chr2 1349 75 35M = 1515 201 TTAAAATTTAACAAAAGTAAATAAAACACATAGCT <<<<<<<<<<<<<<<<7<<<<<<<<<<<<<<<8<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS221_1:4:3:248:1491 73 chr2 1349 99 35M * 0 0 TTAAAATTTAACAAAAGTAAATAAAACACATAGCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:8:< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS114_39:3:6:1064:1805 99 chr2 1350 99 35M = 1502 187 TAAAATTTAACAAAAGTAAATAAAACACATAGCTA <<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_595:6:137:811:130 83 chr2 1351 99 35M = 1175 -211 AAAATTTAACAAAAGTAAATAAAACACATAGCTAA <<<<<<<<<:<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_108:1:155:809:543 83 chr2 1352 99 35M = 1156 -231 AAATTTAACAAAAGTAAATAAAACACATAGCTAAA <<<+0<<<9<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_63:3:41:468:459 99 chr2 1352 75 35M = 1513 196 AAATTTAACAAAAGTAAATAAAACACATAGCTAAA <<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<;;7 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_108:4:31:622:216 73 chr2 1354 99 35M * 0 0 ATTTAACAAAAGTAAATAAAACACATAGCTAAAAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<8<<96<7 MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS54_71:8:105:854:975 163 chr2 1354 71 35M = 1523 202 ATTTAACAAAAGTAAATAAAACACATAGCTAAAAC <<<<<<<<<<<<<<<<<<<<<<<<<<<7:<;;;;5 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +B7_610:7:26:749:174 147 chr2 1357 78 35M = 1183 -209 TAACAAAAGTAAATAAAACACATAGCTAAAACTAA (<<)<<<<6<<<<<<<<<<&:<3<<<6<<<)<:<< MF:i:18 Aq:i:11 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS56_57:6:21:553:57 147 chr2 1358 99 35M = 1197 -196 AACAAAAGTAAATAAAACACATAGCTAAAACTAAA <<+<<<<<<<<<;<<<<8<<<<<<8<<<<<;<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0 +EAS1_97:2:128:629:484 83 chr2 1359 96 35M = 1185 -209 AAAAAAGTAAATAAAACACATAGCTAAAACTAAAA :(::<<<<<<<<<< MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:82 H1:i:85 +B7_589:6:33:356:636 73 chr2 1520 0 35M * 0 0 TTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTTTT <<<<<<<8;<<<<<<<<<<<<<7<<<<<<<;;3&3 MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:14 H1:i:85 +EAS114_45:6:86:859:1779 137 chr2 1520 0 35M * 0 0 TTTTTTTCATTTCTCTTTTTTTTTTTTTTTTTTTT ;;;;;;;;;;;;;;;;;;;;;;;;;;;8;;)7699 MF:i:32 Aq:i:0 NM:i:1 UQ:i:26 H0:i:0 H1:i:15 +EAS54_71:8:105:854:975 83 chr2 1523 71 33M = 1354 -202 TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTG <<<<;<:<<;<&<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:85 H1:i:85 +EAS51_62:4:187:907:145 153 chr2 1524 28 35M * 0 0 TTTCTTCTCTCTCTTTTTTTTTTTTTTTATTGCAT <<<+;;,6<<<<6<<<<<<<<<<<<<<<<<<<<<< MF:i:32 Aq:i:28 NM:i:3 UQ:i:59 H0:i:0 H1:i:0 +EAS54_71:4:284:269:882 73 chr2 1524 0 34M * 0 0 TTTCTTTTCTCTTTTTTTTTTTTTTGTTTTTGCA <;<<<<<8<7<8;<<<;<7<<<<<;272;73&&) MF:i:32 Aq:i:0 NM:i:1 UQ:i:17 H0:i:0 H1:i:85 +EAS56_63:4:141:9:811 137 chr2 1524 10 35M * 0 0 TTTCTTTTCTCCTTTTTTTTTTTTTTTTTCTACAT <<<;<<<<<<<;<;<:<<<;<<<<<<<<..));;. MF:i:32 Aq:i:0 NM:i:3 UQ:i:47 H0:i:2 H1:i:27 +EAS114_30:6:277:397:932 73 chr2 1524 0 35M * 0 0 TTTCTTTTCACTTTTTTTTTTTTTTTTTTTTACTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<:8(,0%( MF:i:32 Aq:i:0 NM:i:3 UQ:i:42 H0:i:2 H1:i:85 +EAS139_11:7:50:1229:1313 83 chr2 1528 77 35M = 1376 -187 TTTTTTCTTTTTTTTTTTTTTTTTTTTGCATGCCA <<<<,<&<7<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:1 UQ:i:11 H0:i:3 H1:i:7 +EAS54_65:3:320:20:250 147 chr2 1532 77 35M = 1367 -200 TTTTTTTTTTTTTTTTTTTTTTTGCATGCCAGAAA +'''/<<<<7:;+<;::<<<;;<<<<<<<<<<<<< MF:i:18 Aq:i:6 NM:i:2 UQ:i:24 H0:i:1 H1:i:2 +EAS114_26:7:37:79:581 83 chr2 1533 68 35M = 1349 -219 TTTTTTTTTTTTTTTTTTTTTTTCATGCCAGAAAA 3,,,===6===<===<;=====-============ MF:i:18 Aq:i:27 NM:i:2 UQ:i:23 H0:i:0 H1:i:1 diff --git a/tests/pysam_data/softclip.sam b/tests/pysam_data/softclip.sam new file mode 100644 index 0000000..b285471 --- /dev/null +++ b/tests/pysam_data/softclip.sam @@ -0,0 +1,6 @@ +@HD VN:1.5 SO:coordinate +@SQ SN:ref LN:45 +r001 0 ref 9 30 3S6M1P1I4M * 0 0 AAAAGATAAGGATA * +r002 0 ref 9 30 5S6M * 0 0 GCCTAAGCTAA 01234567890 +r003 0 ref 9 30 6M5S * 0 0 GCCTAAGCTAA 01234567890 +r004 2064 ref 29 17 6H5M * 0 0 TAGGC 01234 diff --git a/tests/pysam_data/tag_bug.sam b/tests/pysam_data/tag_bug.sam new file mode 100644 index 0000000..9c0b1cc --- /dev/null +++ b/tests/pysam_data/tag_bug.sam @@ -0,0 +1,16 @@ +@SQ SN:2L LN:23011544 +@SQ SN:2LHet LN:368872 +@SQ SN:2R LN:21146708 +@SQ SN:2RHet LN:3288761 +@SQ SN:3L LN:24543557 +@SQ SN:3LHet LN:2555491 +@SQ SN:3R LN:27905053 +@SQ SN:3RHet LN:2517507 +@SQ SN:4 LN:1351857 +@SQ SN:U LN:10049037 +@SQ SN:Uextra LN:29004656 +@SQ SN:X LN:22422827 +@SQ SN:XHet LN:204112 +@SQ SN:YHet LN:347038 +@SQ SN:dmel_mitochondrion_genome LN:19517 +HWI-EAS241:138:4:17:7389-21153#0 256 2L 8878 3 36M * 0 0 CGCTGGACTCGCAAAGTGGACTTGTTCAGCAAGGAC FEAAEDBEEFEDGDGGG@88GBEED:BB|P% zTG-EDq87Gd=V5_P&_~SU<$LnXgJY*pRkPPd2l}%y0Vco^ToA~D$Kc-Hq1!I%DvX}9 z?F+bzNQ#7_RoJ(s>2_^>?9U1BLjq?=OxgrjwJ@i{hi=0N?Tew9DGxe~vh*!`0zi;I zD_!nB*k`o5%V)G019u@2(z}+tYbloGLW1O7%l@iun_kzZ*fmvc_LEqVlF9}KFQHsb*jRT9s&(e-89yT$a~$9C-R^*`FVIw67sxFA^UeL}d;3Au#Qt)UAO@&z_S J$a?Vx004wXnCt)m literal 0 HcmV?d00001 diff --git a/tests/pysam_data/test_mapped_unmapped.sam b/tests/pysam_data/test_mapped_unmapped.sam new file mode 100644 index 0000000..f5ca805 --- /dev/null +++ b/tests/pysam_data/test_mapped_unmapped.sam @@ -0,0 +1,28 @@ +@HD VN:1.0 +@SQ SN:chr1 LN:100 +@SQ SN:chr2 LN:100 +@CO Test counting of mapped/unmapped reads +read1_mapped 0 chr1 21 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +read2_unmapped 4 chr1 21 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +read3_unmapped 20 chr1 21 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +pair1a_mapped 67 chr1 21 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +pair1b_mapped 131 chr1 21 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +pair2a_unmapped 71 chr1 21 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +pair2b_mapped 139 chr1 21 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +pair3a_unmapped 77 chr1 21 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +pair3b_unmapped 141 chr1 21 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +noseq2b_mapped 139 chr1 21 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +bread1_mapped 0 chr2 21 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +bread2_unmapped 4 chr2 21 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +bread3_unmapped 20 chr2 21 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +bpair1a_mapped 67 chr2 21 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +bpair1b_mapped 131 chr2 21 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +bpair2a_unmapped 71 chr2 21 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +bpair2b_mapped 139 chr2 21 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +bpair3a_unmapped 77 chr2 21 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +bpair3b_unmapped 141 chr2 21 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +bnoseq2b_mapped 139 chr2 21 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +noseq1_unmapped 4 * 0 20 * = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +noseq2a_unmapped 71 * 0 20 * = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +pair3a_unmapped 77 * 0 20 * = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +pair3b_unmapped 141 * 0 20 * = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 diff --git a/tests/pysam_data/test_query_position.sam b/tests/pysam_data/test_query_position.sam new file mode 100644 index 0000000..5e8d2d1 --- /dev/null +++ b/tests/pysam_data/test_query_position.sam @@ -0,0 +1,9 @@ +@HD VN:1.0 +@SQ SN:chr1 LN:100 +@SQ SN:chr2 LN:100 +@SQ SN:chr3 LN:100 +@SQ SN:chr4 LN:100 +read1 0 chr1 21 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +read2 0 chr2 21 30 10M2D25M = 500 412 ACCTATATCTTGGCCTTGGCCGATGCGGCCTTGCA <<<<<;<<<<7;:<<<6;<<<<<<<<<<<<7<<<< MF:i:18 +read1 16 chr3 21 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 +read2 16 chr4 21 30 10M2D25M = 500 412 ACCTATATCTTGGCCTTGGCCGATGCGGCCTTGCA <<<<<;<<<<7;:<<<6;<<<<<<<<<<<<7<<<< MF:i:18 diff --git a/tests/pysam_data/test_unaligned.sam b/tests/pysam_data/test_unaligned.sam new file mode 100644 index 0000000..3cbb20a --- /dev/null +++ b/tests/pysam_data/test_unaligned.sam @@ -0,0 +1,6 @@ +@HD VN:1.0 SO:queryname +@RG ID:myid PL:illumina PU:P123456 LB:L123456 DT:2013-03-20T21:00:00-0700 SM:S123456 CN:MYCN +B123456:6:1101:10000:137074 77 * 0 0 * * 0 0 CATGTGTATCACCCAGTACAATGCCTGACACACAGCAGTCACTTAAAGAGTGCTATTGCTATTATACAGTCATACT HHHHHHHHHHHHHHHHFHHHHHHHHHHGHHHHHHHBHHEFFHHHHHHHHHDHHHFHFHHHHHFHHEHFB@CDCCDE RG:Z:myid AM:i:0 SM:i:0 +B123456:6:1101:10000:137074 141 * 0 0 * * 0 0 CAAGGAACTTTACAGTTCAGGGGAGTTTTCCAGTGGCAGAAAGTGGGAAGATGATGCTCCCAAGGAAGAAGTAGAT HHHHHHHHHHHGHHHHHHHHHHHHHHHHHHHHHFHGHFHDFEF?EFEDEFFHHHFHDFHHHFHHHEFBBHD@D=C# RG:Z:myid AM:i:0 SM:i:0 +B123456:6:1101:10000:171579 589 * 0 0 * * 0 0 GAAGCATAGGACATGTCAATGATGGCCAGGTGTGTGAGGAAGAAGTACATGGGGGTGTGAAGCTTAGAGTCCAGGC ############################################################################ RG:Z:myid AM:i:0 SM:i:0 +B123456:6:1101:10000:171579 653 * 0 0 * * 0 0 ACCCTGCTGGGGAATGGGGTCATCTTTGGGATTATCTGCCTGGACTCTAAGCTTCACACACCCATGTACTTCTTCC 8BBBB>6><937964@?:@@B;A@8>=<>CB=CD########################## RG:Z:myid AM:i:0 SM:i:23 diff --git a/tests/refactoring.pl b/tests/refactoring.pl new file mode 100644 index 0000000..3300111 --- /dev/null +++ b/tests/refactoring.pl @@ -0,0 +1,60 @@ +while () { + # Samfile refactoring + s/Samfile/AlignmentFile/g; + + # AlignedRead refactoring + s/AlignedRead/AlignedSegment/g; + + # Do these patterns first as they match + # the new names + s/\.query/\.query_alignment_sequence/g; + s/\.positions/\.getReferencePositions()/g; + + # Tabixfile, etc + s/Tabixfile/TabixFile/g; + s/Fastafile/FastaFile/g; + s/Fastqfile/FastqFile/g; + + # basic attributes + s/\.qname/\.query_name/g; + s/\.tid/\.reference_id/g; + s/\.pos/\.reference_start/g; + s/\.mapq/\.mapping_quality/g; + s/\.rnext/\.next_reference_id/g; + s/\.pnext/\.next_reference_start/g; + s/\.tlen/\.query_length/g; + s/\.seq/\.query_sequence/g; + if (/\.qual =/) { + s/([[\].0-9a-zA-Z]*)\.qual = (\S*)/$1.query_qualities = pysam.fromQualityString($2)/g; + } else { + s/([[\].0-9a-zA-Z]*)\.qual/pysam.toQualityString($1\.query_qualities)/g; + } + s/\.alen/\.reference_length/g; + s/\.aend/\.reference_end/g; + s/\.rlen/\.query_alignment_length/g; + s/([[\].0-9a-zA-Z]*)\.qqual/pysam.toQualityString($1\.query_alignment_qualities)/g; + s/\.qstart/\.query_alignment_start/g; + s/\.qend/\.query_alignment_end/g; + s/\.qlen/\.query_alignment_length/g; + s/\.mrnm/\.next_reference_id/g; + s/\.rnext/\.next_reference_id/g; + s/\.mpos/\.next_reference_start/g; + s/\.rname/\.reference_id/g; + s/\.isize/\.query_length/g; + s/\.cigar/\.cigartuples/g unless (/\.cigarstring/); + + s/\.blocks/\.getBlocks()/g; + s/\.aligned_pairs/\.getAlignedPairs()/g; + s/\.inferred_length/\.getInferredQueryLength()/g; + + s/\.overlap()/\.getOverlap()/g; + + # PileupProxy + s/\.n([^a-zA-Z])/\.nsegments$1/g; + + # if (/\.mrnm/ || /\.rnext/ || /\.mpos/ || /\.rname/) + # { + # warn "Deprecated tag $& at line $.\n"; + # } + print; +} diff --git a/tests/refactoring.txt b/tests/refactoring.txt new file mode 100644 index 0000000..75db3c7 --- /dev/null +++ b/tests/refactoring.txt @@ -0,0 +1,198 @@ +;; This buffer is for notes you don't want to save, and for Lisp evaluation. +;; If you want to create a file, visit that file with C-x C-f, +;; then enter the text in that file's own buffer. + +Samfile -> AlignmentFile +AlignedRead -> AlignedSegment +Tabixfile -> TabixFile +Fastafile -> FastaFile +Fastqfile -> FastqFile + +Changes to the AlignedSegment.API: + +Basic attributes +================ + +qname -> query_name +tid -> reference_id +pos -> reference_start +mapq -> mapping_quality +rnext -> next_reference_id +pnext -> next_reference_start +cigar = alignment (now returns CigarAlignment object) +cigarstring = cigarstring +tlen -> query_length +seq -> query_sequence +qual -> query_qualities, now returns array +tags = tags (now returns Tags object) + + +Derived simple attributes +========================= + +alen -> reference_length, reference is always "alignment", so removed +aend -> reference_end +rlen -> query_length +query -> query_alignment_sequence +qqual -> query_alignment_qualities, now returns array +qstart -> query_alignment_start +qend -> query_alignment_end +qlen -> query_alignment_length, kept, because can be computed without fetching the sequence +mrnm -> next_reference_id +mpos -> next_reference_start +rname -> reference_id +isize -> query_length + + +Complex attributes - functions +=============================== + +blocks -> getBlocks() +aligned_pairs -> getAlignedPairs() +inferred_length -> inferQueryLength() +positions -> getReferencePositions() +overlap() -> getOverlap() + + +Backwards incompatible changes: +================================ + +1. Empty cigarstring now returns None (intstead of '') + +2. Empty cigar now returns None (instead of []) + +3. When using the extension classes in cython modules, AlignedRead + needs to be substituted with AlignedSegment. Automatic casting + of the base class to the derived class seems not to work? + +4. fancy_str() has been removed + + +===================================================== + +Kevin's suggestions: + + +* smarter file opener +* CRAM support +* CSI index support (create and use) +* better attribute and property names +* remove deprecated names +* add object oriented CIGAR and tag handling +* fetch query that recruits mate pairs that overlap query region +* other commonly re-invented functionality + + qname -> template_name + pos -> reference_start + aend -> reference_stop + alen -> reference_length + tid -> ref_id + qname -> template_name (not a high priority, but would be clearer) + qstart -> query_start (really segment_align_start) + qend -> query_stop (really segment_align_stop) + qlen -> query_length (really segment_align_length) + qqual -> query_qual (really segment_align_qual) + rlen -> drop in favor of len(align.seq) + inferred_length -> inferred_query_length + is_* -> replace with flag object that is a subclass of int + cigarstring -> str(align.cigar) + tags -> opts object with a mapping-like interface + Non-backward compatible: + rname, mrnm, mpos, isize -> remove + cigar -> CigarSequence object (or something similar) + All coordinate and length queries return None when a value is not available (currently some return None, some 0) + Store qualities as an array or bytes type + + +Marcel's suggestions: + + I recently sent in a pull request (which was merged) that improves the pysam doc a bit. While preparing that, I also wrote down some ways in which the API itself could be improved. I think the API is ok, but for someone like me who uses pysam not every day, some of the details are hard to remember and every time I do very basic things I end up looking them up again in the docs. I can recommend this article, written for C++, but many points still apply: + http://qt-project.org/wiki/API_Design_Principles . + + Originally, I wanted to convert at least some of these suggestions to pull requests, but I'm not sure I have the time for that in the near future. So before I forget about this completely, I thought it's best to at least send this to the list. I'm concentrating on issues I found in Samfile and AlignedRead here. + + - The terminology is inconsistent - often two words are used + to describe the same thing: opt vs. tag, query vs. read, + reference vs. target. My suggestion is to consistently use + the same terms as in the SAM spec: tag, query, + reference. This applies both to documentation and + function/property names. + + - In line with the document linked to above (see the + section "The Art of Naming"): Do not abbreviate function + and property names. For example, tlen -> template_length, + pos -> position, mapq -> mapping_quality etc. + + - Be consistent with multiword function and variable names. I + suggest to use the PEP8 convention. This isn't so visible + to the user in Samfile and AlignedRead, it seems, but there + are things like convertBinaryTagToList which could be + renamed to convert_binary_tag_to_list. + + - Don't make functions that are not setters or getters a + property. This applies to + AlignedRead.positions/.inferred_length/.aligned_pairs/.blocks + and currently also Samfile.references, for example. Making + these a property implies to the user that access requires + constant time. This is important in code like this: + + for i in range(n): + do_something_with(read.positions[i]) + + This looks inconspicuous, but is possibly inefficient since + .positions actually builds up the result it returns each time + it's accessed. + + - Update the examples in the docs to use context manager + syntax. + + Particular to Samfile: + + - Deprecate Samfile.nreferences: propose to use + len(samfile.references) instead. Cache Samfile.references + so it's not re-created every time. + + - Move Samfile.mapped/.unmapped/.nocoordinate into a .stats + attribute (Samfile.stats.mapped/.unmapped/.noocordinate). + + Particular to AlignedRead: + + - When read is an AlignedRead, print(read) should print out a + properly formatted SAM line. + + - Force assignment to .qual/.seq to go through a function + that sets both at the same time. This avoids the problem + that they must be set in a particular order, which is easy + to forget and only 'enforced' through documentation. + + - Deprecate rlen, use len(read.seq) instead. + + - Handling of tags is a little awkward. Would be cool if this + worked: + + read.tags['XK'] = 'hello' # add a new tag if it doesn't exist + read.tags['AS'] += 17 # update the value of a tag + del read.tags['AS'] + if 'AS' in read.tags: ... + + - Add a property AlignedRead.qualities that behaves like a + Py3-bytes object in both Py2 and Py3. That is, accessing + read.qualities[0] gives you an int value that represents + the quality. The fact that qualities are encoded as + ASCII(q+33) is an implementation detail that can be hidden. + + Done + + - And finally: Add a Cigar class. I guess this is already + what 'improved CIGAR string handling' refers to in the + roadmap. AlignedRead.cigar would then return a Cigar object + that can be printed, compared and concatenated to others, + whose length can be measured etc. The .unclipped and + .inferred length properties can also be moved here. Or + perhaps: Make this an Alignment class that even knows about + the two strings it is aligning. One could then also iterate + over all columns of the alignment. But I guess this goes + too far since that's what the AlignedRead itself should be. + + Regards, + Marcel diff --git a/tests/samtools_test.py b/tests/samtools_test.py new file mode 100644 index 0000000..e84c7e5 --- /dev/null +++ b/tests/samtools_test.py @@ -0,0 +1,409 @@ +#!/usr/bin/env python +'''unit testing code for pysam. + +Execute in the :file:`tests` directory as it requires the Makefile +and data files located there. +''' + +import warnings +import unittest +import os +import re +import glob +import sys +import subprocess +import shutil +import pysam +import pysam.samtools +import pysam.bcftools +from TestUtils import checkBinaryEqual, check_lines_equal, \ + check_samtools_view_equal, get_temp_filename, force_bytes, WORKDIR, \ + BAM_DATADIR + + +IS_PYTHON3 = sys.version_info[0] >= 3 + + +def run_command(cmd): + '''run a samtools command''' + try: + retcode = subprocess.call(cmd, shell=True, + stderr=subprocess.PIPE) + if retcode < 0: + print("Child was terminated by signal", -retcode) + except OSError as e: + print("Execution failed:", e) + + +def get_version(executable): + '''return samtools/bcftools version''' + + with subprocess.Popen(executable, shell=True, + stderr=subprocess.PIPE).stderr as pipe: + lines = b"".join(pipe.readlines()) + + if IS_PYTHON3: + lines = lines.decode('ascii') + try: + x = re.search("Version:\s+(\S+)", lines).groups()[0] + except AttributeError: + raise ValueError("could not get version from %s" % lines) + return x + + +class SamtoolsTest(unittest.TestCase): + + '''test samtools command line commands and compare + against pysam commands. + + Tests fail, if the output is not binary identical. + ''' + + requisites = [ + "ex1.fa", "ex1.fa.fai", + "ex1.sam.gz", + "ex1.bam", "ex1.bam.bai", + "ex1.sam", + "ex1.sam", + "ex2.bam", + "ex2.sam", + "ex1.bed"] + + # a list of statements to test + # should contain at least one %(out)s component indicating + # an output file. + statements = [ + "view ex1.bam > %(out)s_ex1.view", + "view -c ex1.bam > %(out)s_ex1.count", + # ("view -bT ex1.fa -o %(out)s_ex1.view2 ex1.sam", + "sort ex1.bam -o %(out)s_ex1.sort.bam", + "mpileup ex1.bam > %(out)s_ex1.pileup", + "depth ex1.bam > %(out)s_ex1.depth", + # TODO: issues with file naming + # "faidx ex1.fa; %(out)s_ex1.fa.fai", + "index ex1.bam %(out)s_ex1.bam.fai", + "idxstats ex1.bam > %(out)s_ex1.idxstats", + "fixmate ex1.bam %(out)s_ex1.fixmate.bam", + "flagstat ex1.bam > %(out)s_ex1.flagstat", + # Fails python 3.3 on linux, passes on OsX and when + # run locally + "calmd ex1.bam ex1.fa > %(out)s_ex1.calmd.bam", + # use -s option, otherwise the following error in samtools 1.2: + # Samtools-htslib-API: bam_get_library() not yet implemented + # causes downstream problems + # TODO: The following cause subsequent commands to fail + # unknow option + # "rmdup -s ex1.bam %(out)s_ex1.rmdup.bam", + # "merge -f %(out)s_ex1.merge.bam ex1.bam ex1.bam", + "reheader ex2.sam ex1.bam > %(out)s_ex1.reheader.bam", + "cat -o %(out)s_ex1.cat.bam ex1.bam ex1.bam", + "targetcut ex1.bam > %(out)s_ex1.targetcut", + "phase ex1.bam > %(out)s_ex1.phase", + "import ex1.fa.fai ex1.sam.gz %(out)s_ex1.bam", + "bam2fq ex1.bam > %(out)s_ex1.bam2fq", + # TODO: not the same + # "pad2unpad -T ex1.fa ex2.bam > %(out)s_ex2.unpad", + # TODO: command line option problem + # "bamshuf ex1.bam -O --output-fmt SAM > %(out)s_ex1.bamshuf.sam", + # "collate ex1.bam %(out)s_ex1.collate", + "bedcov ex1.bed ex1.bam > %(out)s_ex1.bedcov", + "stats ex1.bam > %(out)s_ex1.stats", + "dict ex1.bam > %(out)s_ex1.dict", + # TODO: not the same + # ("addreplacerg -r 'RG\tID:ga\tSM:hs' ex1.bam > %(out)s_ex1.addreplacerg", + ] + + map_command = { + "import": "samimport"} + + executable = "samtools" + + module = pysam.samtools + + def check_version(self): + + samtools_version = get_version(self.executable) + + def _r(s): + # patch - remove any of the alpha/beta suffixes, i.e., 0.1.12a -> + # 0.1.12 + if s.count('-') > 0: + s = s[0:s.find('-')] + return re.sub("[^0-9.]", "", s) + + if _r(samtools_version) != _r(pysam.__samtools_version__): + warnings.warn( + "versions of pysam.%s and %s differ: %s != %s" % + (self.executable, + self.executable, + pysam.__samtools_version__, + samtools_version)) + + def setUp(self): + '''setup tests. + + For setup, all commands will be run before the first test is + executed. Individual tests will then just compare the output + files. + + ''' + self.check_version() + + self.workdir = os.path.join(WORKDIR, "samtools_test") + + if not os.path.exists(self.workdir): + os.makedirs(self.workdir) + + for f in self.requisites: + shutil.copy(os.path.join(BAM_DATADIR, f), + os.path.join(self.workdir, f)) + + self.savedir = os.getcwd() + os.chdir(self.workdir) + + return + + def get_command(self, statement, map_to_internal=True): + """return samtools command from statement""" + parts = statement.split(" ") + command = parts[0] + if map_to_internal: + return self.map_command.get(command, command) + else: + return command + + def check_statement(self, statement): + + parts = statement.split(" ") + r_samtools = {"out": self.executable} + r_pysam = {"out": "pysam"} + + command = self.get_command(statement) + + # self.assertTrue(command in pysam.SAMTOOLS_DISPATCH) + + targets = [x for x in parts if "%(out)s" in x] + samtools_targets = [x % r_samtools for x in targets] + pysam_targets = [x % r_pysam for x in targets] + + pysam_method = getattr(self.module, command) + + # run samtools + full_statement = re.sub("%\(out\)s", self.executable, statement) + run_command(" ".join((self.executable, full_statement))) + # sys.stdout.write("%s %s ok" % (command, self.executable)) + + # run pysam + if ">" in statement: + assert parts[-2] == ">" + parts = parts[:-2] + + # avoid interpolation to preserve string quoting, tab chars, etc. + pysam_parts = [re.sub("%\(out\)s", "pysam", x) for x in parts[1:]] + output = pysam_method(*pysam_parts, + raw=True, + catch_stdout=True) + # sys.stdout.write(" pysam ok\n") + if ">" in statement: + with open(pysam_targets[-1], "wb") as outfile: + if output is not None: + outfile.write(force_bytes(output)) + for samtools_target, pysam_target in zip(samtools_targets, + pysam_targets): + if os.path.isdir(samtools_target): + samtools_files = glob.glob(os.path.join( + samtools_target, "*")) + pysam_files = glob.glob(os.path.join(pysam_target, "*")) + self.assertEqual(len(samtools_files), len(pysam_files)) + # need to be able to exclude files like README, etc. + continue + else: + samtools_files = [samtools_target] + pysam_files = [pysam_target] + + for s, p in zip(samtools_files, pysam_files): + binary_equal = checkBinaryEqual(s, p) + error_msg = "%s failed: files %s and %s are not the same" % ( + command, s, p) + if binary_equal: + continue + elif s.endswith(".bam"): + self.assertTrue( + check_samtools_view_equal( + s, p, without_header=True), + error_msg) + else: + check_lines_equal( + self, s, p, + filter_f=lambda x: x.startswith("#"), + msg=error_msg) + + def testStatements(self): + for statement in self.statements: + command = self.get_command(statement, map_to_internal=False) + # bam2fq differs between version 1.5 and 1.6 - reenable if + # bioconda samtools will be available. + if command in ("bedcov", "stats", "dict", "bam2fq"): + continue + + if (command == "calmd" and + list(sys.version_info[:2]) == [3, 3]): + # skip calmd test, fails only on python 3.3.5 + # in linux (empty output). Works in OsX and passes + # for 3.4 and 3.5, see issue #293 + continue + self.check_statement(statement) + + @unittest.skipIf(sys.platform == "darwin", "not supported, pattern does not match") + @unittest.skipIf(not sys.stdin.isatty(), "skipping usage tests, stdin is not a tty") + def testUsage(self): + if self.executable == "bcftools": + # bcftools usage messages end with exit(1) + return + + for statement in self.statements: + command = self.get_command(statement, map_to_internal=False) + # ignore commands that exit or cause other failures + # TODO: check - if reheader or phase is run in testStatements, sort fails + # here + if command in ("view", "sort", "bam2fq", "flagstat", "reheader", "stats"): + continue + mapped_command = self.get_command(statement, map_to_internal=True) + pysam_method = getattr(self.module, mapped_command) + usage_msg = pysam_method.usage() + expected = "Usage:\s+{} {}".format(self.executable, command) + self.assertTrue(re.search(expected, usage_msg) is not None) + + def tearDown(self): + if os.path.exists(self.workdir): + shutil.rmtree(self.workdir) + os.chdir(self.savedir) + + +class EmptyIndexTest(unittest.TestCase): + + def testEmptyIndex(self): + self.assertRaises(IOError, pysam.samtools.index, + "exdoesntexist.bam") + + +if sys.platform != "darwin": + # fails with segfault with htslib 1.5 on Osx, an issue with flockfile + # issue seems to be with repeated calls to interface + + class TestReturnType(unittest.TestCase): + + def testReturnValueString(self): + retval = pysam.idxstats(os.path.join(BAM_DATADIR, "ex1.bam")) + if IS_PYTHON3: + self.assertFalse(isinstance(retval, bytes)) + self.assertTrue(isinstance(retval, str)) + else: + self.assertTrue(isinstance(retval, bytes)) + self.assertTrue(isinstance(retval, basestring)) + + def testReturnValueData(self): + args = "-O BAM {}".format(os.path.join(BAM_DATADIR, + "ex1.bam")).split(" ") + retval = pysam.view(*args) + + if IS_PYTHON3: + self.assertTrue(isinstance(retval, bytes)) + self.assertFalse(isinstance(retval, str)) + else: + self.assertTrue(isinstance(retval, bytes)) + self.assertTrue(isinstance(retval, basestring)) + + class StdoutTest(unittest.TestCase): + '''test if stdout can be redirected.''' + + def testWithRedirectedStdout(self): + r = pysam.samtools.flagstat( + os.path.join(BAM_DATADIR, "ex1.bam")) + self.assertTrue(len(r) > 0) + + def testWithoutRedirectedStdout(self): + r = pysam.samtools.flagstat( + os.path.join(BAM_DATADIR, "ex1.bam"), + catch_stdout=False) + self.assertEqual(r, None) + + def testDoubleCalling(self): + # The following would fail if there is an + # issue with stdout being improperly caught. + retvals = pysam.idxstats( + os.path.join(BAM_DATADIR, "ex1.bam")) + retvals = pysam.idxstats( + os.path.join(BAM_DATADIR, "ex1.bam")) + + def testSaveStdout(self): + outfile = get_temp_filename(suffix=".tsv") + r = pysam.samtools.flagstat( + os.path.join(BAM_DATADIR, "ex1.bam"), + save_stdout=outfile) + self.assertEqual(r, None) + with open(outfile) as inf: + r = inf.read() + self.assertTrue(len(r) > 0) + + class PysamTest(SamtoolsTest): + """check access to samtools command in the pysam + main package. + + This is for backwards capability. + """ + + module = pysam + +# class BcftoolsTest(SamtoolsTest): + +# requisites = [ +# "ex1.fa", +# "ex1.vcf.gz", +# "ex1.vcf.gz.tbi", +# ] +# # a list of statements to test +# # should contain at least one %(out)s component indicating +# # an output file. +# statements = [ +# # "index -n ex1.vcf.gz > %(out)s_ex1.index", + +# "annotate -x ID ex1.vcf.gz > %(out)s_ex1.annotate", +# "concat -a ex1.vcf.gz ex1.vcf.gz > %(out)s_ex1.concat", +# "isec -p %(out)s_ex1.isec ex1.vcf.gz ex1.vcf.gz", +# "merge --force-samples ex1.vcf.gz ex1.vcf.gz > %(out)s_ex1.norm", +# "norm -m +both ex1.vcf.gz > %(out)s_ex1.norm", + +# # "plugin", +# # "query -f '%CHROM\n' ex1.vcf.gz > %(out)s_ex1.query", +# # "reheader -s A > %(out)s_ex1.reheader", +# # "view ex1.vcf.gz > %(out)s_ex1.view", +# # "call -m ex1.vcf.gz > %(out)s_ex1.call", +# # bad file descriptor +# # "consensus -f ex1.fa ex1.vcf.gz > %(out)s_ex1.consensus" +# # need appropriate VCF file +# # "cnv", +# # segfault +# # "filter -s A ex1.vcf.gz > %(out)s_ex1.filter", +# # exit +# # "gtcheck -s A ex1.vcf.gz > %(out)s_ex1.gtcheck", +# # segfauld, used to work wit bcftools 1.3 +# # "roh -s A ex1.vcf.gz > %(out)s_ex1.roh", +# "stats ex1.vcf.gz > %(out)s_ex1.stats", +# ] + +# map_command = { +# "import": "samimport"} + +# executable = "bcftools" + +# module = pysam.bcftools + + +if __name__ == "__main__": + # build data files + print("building data files") + subprocess.call("make -C %s" % BAM_DATADIR, shell=True) + print("starting tests") + unittest.main() + print("completed tests") diff --git a/tests/tabix_bench.py b/tests/tabix_bench.py new file mode 100644 index 0000000..ce7077d --- /dev/null +++ b/tests/tabix_bench.py @@ -0,0 +1,180 @@ +import gzip +import os +import pysam + +from TestUtils import TABIX_DATADIR + +FN_COMPRESSED = "example.bed.gz" +FN_UNCOMPRESSED = "example.bed" +FN_LARGE_COMPRESSED = "example_large.bed.gz" +FN_LARGE_UNCOMPRESSED = "example_large.bed" + + +def read_python_compressed(fn): + '''iterate through with python.''' + with gzip.open(fn, mode="r") as f: + return len([x.split(b"\t") for x in f]) + + +def read_python_uncompressed(fn): + with open(fn) as f: + return len([x.split("\t") for x in f]) + + +def fetch_plain(fn): + with pysam.Tabixfile(fn) as f: + return len(list(f.fetch())) + + +def fetch_parsed(fn): + with pysam.Tabixfile(fn) as f: + return len(list(f.fetch(parser=pysam.asBed()))) + + +def iterate_generic_compressed(fn): + with gzip.open(fn) as f: + return len(list(pysam.tabix_generic_iterator(f, parser=pysam.asBed()))) + + +def iterate_generic_uncompressed(fn): + with open(fn) as f: + return len(list(pysam.tabix_generic_iterator(f, parser=pysam.asBed()))) + + +def iterate_parsed_compressed(fn): + with gzip.open(fn) as f: + return len(list(pysam.tabix_iterator(f, parser=pysam.asBed()))) + + +def iterate_parsed_uncompressed(fn): + with open(fn) as f: + return len(list(pysam.tabix_iterator(f, parser=pysam.asBed()))) + + +def iterate_file_compressed(fn): + with gzip.open(fn) as f: + return len(list(pysam.tabix_file_iterator(f, parser=pysam.asBed()))) + + +def iterate_file_uncompressed(fn): + with open(fn) as f: + return len(list(pysam.tabix_file_iterator(f, parser=pysam.asBed()))) + + +def test_read_python_compressed(benchmark): + result = benchmark(read_python_compressed, + os.path.join(TABIX_DATADIR, FN_COMPRESSED)) + assert result == 164 + + +def test_read_python_uncompressed(benchmark): + result = benchmark(read_python_uncompressed, + os.path.join(TABIX_DATADIR, FN_UNCOMPRESSED)) + assert result == 164 + + +def test_fetch_plain(benchmark): + result = benchmark(fetch_plain, os.path.join(TABIX_DATADIR, FN_COMPRESSED)) + assert result == 164 + + +def test_fetch_parsed(benchmark): + result = benchmark(fetch_parsed, os.path.join( + TABIX_DATADIR, FN_COMPRESSED)) + assert result == 164 + + +def test_iterate_generic_compressed(benchmark): + result = benchmark(iterate_generic_compressed, + os.path.join(TABIX_DATADIR, FN_COMPRESSED)) + assert result == 164 + + +def test_iterate_generic_uncompressed(benchmark): + result = benchmark(iterate_generic_uncompressed, + os.path.join(TABIX_DATADIR, FN_UNCOMPRESSED)) + assert result == 164 + + +def test_iterate_parsed_compressed(benchmark): + result = benchmark(iterate_parsed_compressed, + os.path.join(TABIX_DATADIR, FN_COMPRESSED)) + assert result == 164 + + +def test_iterate_parsed_uncompressed(benchmark): + result = benchmark(iterate_parsed_uncompressed, + os.path.join(TABIX_DATADIR, FN_UNCOMPRESSED)) + assert result == 164 + + +def test_iterate_file_compressed(benchmark): + result = benchmark(iterate_file_compressed, + os.path.join(TABIX_DATADIR, FN_COMPRESSED)) + assert result == 164 + + +def test_iterate_file_uncompressed(benchmark): + result = benchmark(iterate_file_uncompressed, + os.path.join(TABIX_DATADIR, FN_UNCOMPRESSED)) + assert result == 164 + + +def test_read_python_large_compressed(benchmark): + result = benchmark(read_python_compressed, os.path.join( + TABIX_DATADIR, FN_LARGE_COMPRESSED)) + assert result == 100000 + + +def test_read_python_large_uncompressed(benchmark): + result = benchmark(read_python_uncompressed, os.path.join( + TABIX_DATADIR, FN_LARGE_UNCOMPRESSED)) + assert result == 100000 + + +def test_fetch_plain(benchmark): + result = benchmark(fetch_plain, os.path.join( + TABIX_DATADIR, FN_LARGE_COMPRESSED)) + assert result == 100000 + + +def test_fetch_parsed(benchmark): + result = benchmark(fetch_parsed, os.path.join( + TABIX_DATADIR, FN_LARGE_COMPRESSED)) + assert result == 100000 + + +def test_iterate_generic_large_compressed(benchmark): + result = benchmark(iterate_generic_compressed, os.path.join( + TABIX_DATADIR, FN_LARGE_COMPRESSED)) + assert result == 100000 + + +def test_iterate_generic_large_uncompressed(benchmark): + result = benchmark(iterate_generic_uncompressed, os.path.join( + TABIX_DATADIR, FN_LARGE_UNCOMPRESSED)) + assert result == 100000 + + +def test_iterate_parsed_large_compressed(benchmark): + result = benchmark(iterate_parsed_compressed, os.path.join( + TABIX_DATADIR, FN_LARGE_COMPRESSED)) + assert result == 100000 + + +def test_iterate_parsed_large_uncompressed(benchmark): + result = benchmark(iterate_parsed_uncompressed, os.path.join( + TABIX_DATADIR, FN_LARGE_UNCOMPRESSED)) + assert result == 100000 + + +def test_iterate_file_large_compressed(benchmark): + result = benchmark(iterate_file_compressed, os.path.join( + TABIX_DATADIR, FN_LARGE_COMPRESSED)) + assert result == 100000 + + +def test_iterate_file_large_uncompressed(benchmark): + result = benchmark(iterate_file_uncompressed, os.path.join( + TABIX_DATADIR, FN_LARGE_UNCOMPRESSED)) + assert result == 100000 diff --git a/tests/tabix_data/empty.bed.gz b/tests/tabix_data/empty.bed.gz new file mode 100644 index 0000000000000000000000000000000000000000..a776e8d995dc9c98882e0db160c0453d340e7fe8 GIT binary patch literal 28 bcmb2|=3rp}f&Xj_PR>jW(hSUCE{FgCFhK%g literal 0 HcmV?d00001 diff --git a/tests/tabix_data/empty.bed.gz.tbi b/tests/tabix_data/empty.bed.gz.tbi new file mode 100644 index 0000000000000000000000000000000000000000..891fe9f541b79fd9b136813f44519e605529e4b7 GIT binary patch literal 75 zcmb2|=3rp}f&Xj_PR>jWdJNo!pHfm7nBCX}nmIdWHb%^36lP$Uz2u{i4p5amnsR9d JX0UD$0RTSz4F>=K literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example.bed b/tests/tabix_data/example.bed new file mode 100644 index 0000000..544e42d --- /dev/null +++ b/tests/tabix_data/example.bed @@ -0,0 +1,164 @@ +chr1 1737 2090 +chr1 1737 4275 +chr1 1873 1920 +chr1 1873 3533 +chr1 2042 2090 +chr1 2476 2560 +chr1 2476 2584 +chr1 2838 2915 +chr1 3084 3237 +chr1 3084 4021 +chr1 3084 4275 +chr1 3316 3533 +chr1 4022 4024 +chr1 4022 4249 +chr1 4226 4561 +chr1 4226 4692 +chr1 4226 19233 +chr1 4226 19433 +chr1 4250 4252 +chr1 4250 4275 +chr1 4267 4364 +chr1 4267 19433 +chr1 4559 4561 +chr1 4562 4692 +chr1 4833 4901 +chr1 4868 4901 +chr1 5659 5764 +chr1 5659 5810 +chr1 5767 5810 +chr1 6470 6628 +chr1 6717 6918 +chr1 6721 6918 +chr1 7096 7141 +chr1 7096 7227 +chr1 7096 7231 +chr1 7139 7141 +chr1 7142 7231 +chr1 7414 7416 +chr1 7414 7605 +chr1 7414 19206 +chr1 7417 7605 +chr1 7465 7605 +chr1 7469 7605 +chr1 7778 7924 +chr1 8131 8226 +chr1 8131 8229 +chr1 8227 8229 +chr1 8776 8868 +chr1 8776 8938 +chr1 8866 8868 +chr1 8869 8938 +chr1 14601 14706 +chr1 14601 14754 +chr1 14704 14706 +chr1 14707 14754 +chr1 19184 19206 +chr1 19184 19233 +chr1 19397 19433 +chr1 19417 19902 +chr1 19417 20960 +chr1 19417 20972 +chr1 20130 20530 +chr1 20130 20972 +chr1 20229 20366 +chr1 20427 20530 +chr1 20839 20960 +chr1 20839 20972 +chr1 24417 25003 +chr1 24417 25037 +chr1 24417 25944 +chr1 25001 25003 +chr1 25004 25037 +chr1 25108 25344 +chr1 25108 25936 +chr1 25140 25344 +chr1 25584 25599 +chr1 25584 25936 +chr1 25584 25944 +chr1 25597 25599 +chr1 25600 25944 +chr1 42912 42930 +chr1 42912 44799 +chr1 44693 44796 +chr1 44693 44799 +chr1 44797 44799 +chr1 52811 53750 +chr1 58918 58953 +chr1 58918 59971 +chr1 58954 58956 +chr1 58954 59868 +chr1 59869 59871 +chr1 59869 59971 +chr1 79158 81492 +chr1 79158 110795 +chr1 79158 123429 +chr1 79414 79913 +chr1 79414 80968 +chr1 80150 80968 +chr1 81954 82103 +chr1 82093 82103 +chr1 82093 119080 +chr1 100816 101220 +chr1 100816 119036 +chr1 102563 102667 +chr1 110584 110795 +chr1 110638 110795 +chr1 118918 119036 +chr1 118918 119080 +chr1 118944 119086 +chr1 118944 123429 +chr1 120967 123786 +chr1 123237 123429 +chr1 125110 125869 +chr1 125110 127902 +chr1 125110 129483 +chr1 127146 127148 +chr1 127146 127938 +chr1 127146 129483 +chr1 127149 127938 +chr1 127432 127902 +chr1 129119 129483 +chr1 129481 129483 +chr1 129653 129710 +chr1 129653 130202 +chr1 129938 130202 +chr1 131337 132874 +chr1 131337 139570 +chr1 132671 132874 +chr1 132671 136694 +chr1 136249 136372 +chr1 136249 139570 +chr1 136505 136694 +chr1 147647 147749 +chr1 147647 147750 +chr1 150309 150553 +chr1 150309 151388 +chr1 151177 151388 +chr1 154268 154654 +chr1 154268 163727 +chr1 155747 155805 +chr1 155752 155805 +chr1 155752 158630 +chr1 157963 158028 +chr1 158473 158630 +chr1 158912 159127 +chr1 162420 162551 +chr1 163616 163727 +chr2 28814 31610 +chr2 28814 31627 +chr2 28814 36385 +chr2 28814 36870 +chr2 31220 31627 +chr2 31220 32952 +chr2 31221 31627 +chr2 31221 36870 +chr2 31608 31610 +chr2 31611 31627 +chr2 32809 32952 +chr2 35440 36385 +chr2 36383 36385 +chr2 36807 36870 +chr2 187569 189901 +chr2 187569 192605 +chr2 190164 192605 diff --git a/tests/tabix_data/example.bed.gz b/tests/tabix_data/example.bed.gz new file mode 100644 index 0000000000000000000000000000000000000000..b67da76bc82bb554a4ded832c9fb696b351205a0 GIT binary patch literal 819 zcmV-31I+v%iwFb&00000{{{d;LjnL618tT&0yQTHh3m;`b|NQ+AJYZxGju?Oa*^<#@NjG{Ra5PCm^hz9z%@^79LD5q>FX`kD2CSZGI6s7B zP4YnKa!-Q@w2hl~I1BC)IhI7!hee@F4Qw+1X!rGM{k?2E< zVjtRx9*$A1uHK|*`ifQ8uXI?8nGM#YvW-U-eMtj*G+;}FCT)a11`J&y+99c0fub8j zZgFd6;8|#wI;6>YTE1pGnpI92U7Go0QJd;OS>)!Na_w=}tV_$I=DD6-29gVoT87i!R~{9!^#+Rfr`}v!4=wR42Mfr`EU^!8T~?^%L{^Z10JVErjA)g zoS?ZZ&|Jb!7agNpa3-LcE27q80k(4CJeBkVdV_6YIZ6Y94q1{(1*_-w&r;|B5e6Fw z|4KbT>{B|cG0W|;!0y8`mwE;USAKZ`z_5^mAaO;C#V=$dfI9Fz5EUK+GUasub83!I zyX$#c=)V9UhS%90!!u>W0K^NWRc#=Q+#s4C)pbyE_H$GFPh?%mFZ5f`qpuI`NhD%^ zk)Ein2+UxxiELZpyqGR4$qCF)?!txai{V0%xxP@QP<=msqb~^+x*X%SV!~_0$p5<> zvko^>q4}}8K?>2p)>q7h?udZqN)Wp7g+i?QqPz#;vRX(rHd35FL`sGi>V2sUIUVyM z!M}WKb;mbUL6@hNM$C^?*lh&lwS>7rW*5q9+~-GkK3{0gv<{|-%@H%_)QvTf;Qu36 z+Vjd(LK6+#BRU&hRz4FENR~BXt__a)5rIOaGlurO^7-YN0iJvxy&K!WWsxx?CvaOX zG^4b;EP(MogI)l)1)P0oCiFIsSv_4algiPlaHjk=v00@PcwV$^lzf0nX2Fc&^=|r5 x;Cf0V%0}fv{{lVu=?3Qt001A02m}BC000301^_}s0stET0{{R300000000jWiy62JKc%E3F)+F*q$DtGoY@#LlaXmhgN5bd69O(0h8q|v z=lSp?Of^tA&bW}dRpF7rza$M=7SZ;P`~^-K>pcZ-Corhl&14iUP~2$m@UmP-;MPo0 zr}s^lmS23ad(DcxmYt1~C*=*QuRH2;HSQ{xy^~a!mh%13mBU9^FWx!byoAloev!~# dK1+iJ1_oEPy}J7t85rcz+$hb!40bYz007KAKfC|{ literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example.gff2.gz b/tests/tabix_data/example.gff2.gz new file mode 100644 index 0000000000000000000000000000000000000000..4084a744555d0da52c679778938d60bfd3aa2cd2 GIT binary patch literal 238 zcmb2|=3rp}f&Xj_PR>jW7a3aneYp=A@U)%(7+xXn{c9)hO-GkKynzDiuZEgm(8^{1 zS7UA8W^l!!g43qbX`8|JdvnUwZ)AkO4v5z=aNL=&$(w2Mjpn!FCayPA`D3kuCq3Bm zbxG?KuaMc9iv(I+oQx%yn-_1aTc5jchWP87TMoEi>?!{FFly%Niwk4VYb-mTqM5MA zW5KG^dva=K@Mz0#;r_|py?JBmzo!4USzebMl(mwst$vZ;x`4w+sXN|Q^>Xm$eP2yv aem>x1tnY59W@KQHNAr<112fozAOZkz&|jed literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example.gff2.gz.tbi b/tests/tabix_data/example.gff2.gz.tbi new file mode 100644 index 0000000000000000000000000000000000000000..30d39ae813cb8f70d131055a1bac589cfe223f4f GIT binary patch literal 107 zcmb2|=3rp}f&Xj_PR>jWehl1&pHfm%8W;r5G96jtu!cu8nduRSL8Uv#A|^(?M$h%0 r0--M+gr|;yA=*)Vwiqh|gFKpX(hSTX!@&Rm+I1KX literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example.gff3.gz b/tests/tabix_data/example.gff3.gz new file mode 100644 index 0000000000000000000000000000000000000000..b42b41baf835c0ebb1dce9d0485e315af4503a90 GIT binary patch literal 3067 zcmVdXvqf~1QCI(5$}QWQy1_wma$e)#y|<@x8Ie)#2&>+{RQ z_20j|T_1jbeY`&Z@%ABds$KrfsmfowlmCAF$NfKl41tJ4x%}|k^TX?n{?o(D)BTs% zhr5^O>s@W7-^I)0m+RM;d-*e7Ucdf%eSEtAc=`PF@b>5R>HhDYdwG3(xW3(wr?<<~ z@1O1`g3IgU*X#J-U&r74bbojGd>s$`c=_(}fAB~l)hd6MkmRp@{}+!?Q%yHKRNr{S z6zGl+9^>g{@|XxbkMI9~9K{G&CorY2b4{#^v*^wU~GB_ML!!mHnHY-%Vz2un@k-fBahFE%z%K9 zpe5A*f7LqK0hiO#Q?EM zy_PUPIr!jAwWN*B&|Pp24PztE&t@CNfNYqNxN{kwEu^w9n^;=C^)%JpvMJEkug}+Y zV;F#SlS&P>m-)%vtsD93Qg4I6)HgPzL@1=`^No#S0Bj@ha^N^WV|EFR1kBCTRNrlr zBeZVx`I-e72EaDrJ0vT4esYexZ6pJv+bE#=&ZagfLhJK23K#|?sgeDnrL3Rb#k8?b zvRgO#ST|6Drq9<@z%T%8TB~(L==tf_&4|d!MQ9(>n4p-Z&sW6KH9^D`HhbH<*+=4eyjLt5=n5YXpq5HJi#VlxUz zj!lK;tF$P~V&gOQy-FiapP>CyA*g*83@BF%BxY_Z5V=Hptd{InPd-);mU}7!V`L~G zM&iF+Hk=`FNY3e`MvJ%msOlRdZW+u!CjzSt3e%iwws8>6A`j5=dprwCSWO;JE?sn!yWQf>;9k;~$m z%i@|}M;)_~BCul4P#`uE`|wDzrx3HN=R!?|_O@Xmzae#O9Vvp>RTSIniOGZ5^rZY*e8A$PgrBq$m&@5!Fhm ztB^uCYrE`fJ6}KK2xZ)cz-(kF5F3%0nIsFELOQxUlD2JLH}&1?BG%5eq;!=<+D&AHWD`6#yT28PuXWdT#Abf<%kR&s$UHP zFG>>zWTY-zBnK5@<}=t;N69C4+&*KB27=m+k)lA1l)F^gxu}riH(J`&CExW(zM;0M zAuzWy6o`$AB=6(URE1U#8&$U<9Stps4G<$mpas%Gf!Ij0_nIoHkjt@evwXs;-s;}jORtw9A&zCap{XSc=rHuvawK?f=WLFsm)q9_nX6j~i+`4Bh+ zAH5}%Zj7ex4pkZy84Q6Y4GRV0b@GpF0!fA3z1NlAw=H(+uF()MMv6dV-9mxbC|4<~ zdsjhztMlM%JIkNCvk^AD%6<;xpT?nmXSaEqJo)75txY#1>$s^ zo9t=9gx1e4F}sw3kCXwk(R?sjU@#OAqau5ZL^u_^(@7vmbq@^bIBjj%*|8$9<5oj~ zcwGxk;(t^jk+V^(VXu#-?gB%BI{Ah`dqE2YV51zkWLfPh@x)btFm%<}9tY{F@J0->{zAT$`tc6tI=(eK~3EYSrA0u)J zs>%(4rgaMiu#R#{HP_r!;8;#Z-7)G1BPak7SN4 z3}Q49G-ISFAg^mla!)d$xnhDON2q(3*catvx&>o25iGA$6bPd{Y7igj7)c3RU3YusFNJdCOAVX)=sa4J@ z@X=CjVwPK{oBA=K0k!K4f>AOUh>b{+#4fq_5Q-T8q!b+`9~lC6YN-e;_g*M4MmdZV zu_@?SyYD$;X-Ymq;Dn8*Du#B; z39^$Iy7qaCXb8=9<}c-w7= z$2J=x7#tKrdZ#pCAe3sQmUB>{9J!Ee;$aUC$@jP-b}Xg{lIB7S1>$y1l3q!CRjAS5 z`lzXI&F`tZT&QBfP7!ELu}}auVkt|wrl@}MXA)1yXq1pAno%S?HGv!$G;7OEvk1M z*qbCum7hPG6ytH-h4)FJsqd>Qw}(gYodpxb`wJx$2u4dvI3AaHrqsxLU}E0yVDoW{ zhr+Mm>tqZ?Tf7traN}2uqbF4%mEh;kX38c z$fQ)iabTPG4wz3YBrSni4Gi&})x?2#U!q7> z@7%%4kcA;ER*C~+CCgH3wYa2XaJQ%JRduTSmmz?`LNP2>h67~PQ?11$&dvkFn6ls7 z6#i%SHD!LH?}n6-&JACcq8$l3c-sJAu>-`bd22Ys3I7&Y9utp4DG!10{ONz%Mw#=0~2 zZsqK;%1Moam;ikot;pl2!I++RG|mR^+m`4+hFpvDI-iloK&EyLsT(m$EhUyKRTHP2 zxoH$WgVx-ffyq{WnmOMy!@VJF)iJT$TbUWG%4>)ORPiAS4j%1P?jYfffZdsUap<_o z!#oHsxa+`uO?x(p>-s|g%tXnhWG#1^e^v|s@aQ)aKP6u$GZd*V6rS{MJCS|`R{?$^ zMNJYHNXrSa7!2*b@+RY`p+^uN%B9R!U@lH7l5^^!u7*_|kyk^Ar9^EE(R^rLG^&v{wg49>yDXqTDkq|Wpzso0+@v|$ z_Ir-W`rB>tt=l*^!jYi1FN_XZ~_8Al|^ z9y<}qQDMx`xgm4$Qfy0JJV@c&V*NQjUm&y~rwr#3*|>Vb`4MbA-Qp6SnyopVQ*HFP zg>D~k&(E55gm-{Q+cW-L+TtUptNW!dpPrO#=|pqYdBeGF)Ld!#@X(w{7x&RATn^zF z_{kck7HT9Uw_J9w4mzK_<2_u18P!}crSX=Ad>Q*RRn8A1bl4La<8WSQfC$hk_z{j z_n>cztzp(8J*dG-Xi}~ysoaiW7TWz>TW5CE_;+YLsJ3H(*x@+F3x?*(L;Q7*yNK0Rkt(ylgSEti zkPmn*0=yWYB?dt_3Gz_#j3VKfiwql^_m@EG%aMt=13~>%w|&Hog>aRf9Rvd5 z{ED~rW6dDXZWpts+pWfzwFlU2ihH8tFI4I24<5{wr=wu0Cn8VE+&ZLCfye@JD7|J2Vm7U0*NUjc+h*<7 zLtAvB=Zec!qj#$a*5e%KL?iGT<9Y>n>cxHsYcTk}Ko<((^qqTS^=%Z>B_chndR1!) zj@)OS;JdOLj@A$KeH|o&$SIcJG^;&^Nn9V~+=v3`0RYf{vJnHAdw0q(!xI2#)SlTc zGcF%sxLeCin*f&>0tNYFDc2fB#RU&N}fbM1uCNn!_<#oo)7Yny#4wJi??T=-hTY$ z!{YPR^je?EG8yjiVpAMd|EZ5mt^ z4Y-huYTKar*{A<~UmhKQe|&ga-mk82AMWl~UpC)cKixe2SRWn#=j{B?v&|P*H{a|J zTwVa2Fn$5-4K#n3r^8x{cDJ=}?RI`biTeeAE&pErb;N!?`g-&C&Fbdb{a22T&#$iD zfBsm$Z~Mnc+w@I2hUoW#zR)`*oMyWtgq{eUE4iRTBJ_!&*Q3=6y5<-? z#7C-f_*`KGM-iwRTX_ehtPAr;}(0)$R&kH#MhtJ?(NTyas~WBdEELyxK%% zfeQ>R!VwhKet6AQU-iYB3KSm(s@34df{Ko4cSW^+dicJHN~s|3K{3Kgh_DJ~n0h9p zo}5ax;7sxi+od&dHQA6HCFy*&VLWMg#w47~1QO2OWxxXXU?Ygc`-pehQX$MX^Xj&x zhw7gjS-lO}wsA5=PCicB4qk2uASW-U!XGy{VIJX6P!ZJrK+SdJHKIB#buK52F?wSR z=M03j!G%y&0FA+gckDJn;n?+g&61M_g3cgDPzb8e8H~XRok5&4P&T=LMva+)f9y6u zp)>HMnvyHBkdkT?RM2TQIiWA`4m^cXv)fEmvKPM@&IUPi(-vEU5Uoa`C zxm&35K+V)dHKL0VIAL@V64Jm=M7<(Z#^Dv>j&1V!;b02;qqMG~o8xz$`2Vmnitx-r}@|bj9 zyNfnB#vDIzjU{$*-T_giiV6?X-V3R@MjYM44@I>fRC85TBaSu9;Gx75 z#<5MDP9*rys?BR7*YNP8 z>9c*uLCqFySPxVwvi7oWL|xYGP-CA=N+(_At}jkZDUcJ}QkS%K`?r;%iu7RT}xG@hy!3a8eU) z=YDQ92C2rN!4#u`5qy@=&Swb|*g%O$6J=U5MVmUJO>L4z129fHu&oYtCP1Mf7z=GN zB_$*wsMc(x^^H@U8ldi3tqXL^l#!xP#mkg};k$FGX-uCdIXjm}vaoKuZk2O&-R#-| z(k-&X08&h_RY15Z3|TUeR)ZH0#0#UAUFw(EY2_aJAmnGf2;lz zf;=Eb!~}Va7LjdF@o(YPGf}r1On^EUZxUMHY%U6NAA&3{8`ti#F8dVBOB$52ZZ$xf zQ3*PC8Q0SIU34lk#|jp`wh2God^tM))kaYEi?_FTYxic{KN%6l28Qq_z#~6_&Y7Qz zw=oKk_q4oAdz;6*)!>Elj<+5>U~^HK`%-3ozS5aqUOc5Y7Deo%V0S5Vh1--zU?J{F zRsNiCIo`%SE8Bw9C!<~jbro(j<@*WhlmVd^8f?Z9SRm1am{7VRC1+%ZcUEDv@t_~A zFxn)PpIgc@l5!w5ELj5(Wde7DAnf6=i@3SMOc@Uy*6PRHYVfKsCn4^#2F2}m#z3fo z-xwa;CSin7GM(Jn`5$jTc*yZQa+|LGuag=FqU%Fu>abclHlaV*ZL=l$pzyg)bFxlcUnOE?YI9?Sijj?Ias{ ztHD&rM*y7!*=q_=qI;BRWfhpEjn;R1>nm&?;$B?IP-u6r4({%CtBJXrVJKMNO z=G_jHTXMhs6$w@Ml&h#S;1yvVRri6C+h_QyJPRJ-PYu6ve-(Dab@-4)5B64riLno_ zlWTPzkGtcB7OH^D@+GvC-6vHh%8L?S1+#=pNV>Sy3Sf8f`Oc+4e2pEwTX4b4coAIp zj`?SNLrvWQ;w$bocHB%|cD_Rpky|sIRGd+aX!a1%H05dlOnsQ6dx>-}ZE$EG`@@>r zU91iqpzzY|q>+NT7X_gu6Jv-BaWhPr-NW^=Dnomwmhz`JQf8K@Rac~~Y;&$sy^=E{ zH0Y1KoLdcE73UGO?sPw~#%PHbMn_oS$^7!3!eYU*}T%hIqzm6E)!MJt$}Ui;Am1(+ zVusk?e_E{xWmyTN+q-od%C2}zX^{6syenl(>gKYTWGWC@AnEZ)qqUygT1!C$T90Wo z-JBxhN^<316c1DgaH4cDF_F8d*Q?93)9Ya+FuIF!M~8#7tox5=&c@Pe@G7u)k<=YK z>ZNBGiGXjQRMPM<`lKwPYGa9D@wxM!%*{`yyz$R6dT>eT4}Y=NZZM$Qvu5XQ?mXeg6+CNcltn0096WiwFb&00000{{{d;LjnLP z1MS+;ZrU&u2H@-LDNt^wR`#)dY^zs@b*r?NN-OOyQ3O$o)CB}twY~l9kkAkaBu#>b zWYjh)J$1s@(;wSP{Cm~&zYp(!4*jcMybPk%WI0>J<0$wQ_Wb@Wf@DNrQn&y@P04Hc z7QXi2s`nDS1yL}54kJ@{KN{UU-hCtM2M7@Urs93jtZtOnNs8LP`ZRf2Qtzh!)F1Xe zJDf)aG3PV~%9Qdhz0c;;{$MhHsnB}+s`nQpzZ?Hum!BXNyfsq-^DO}B=B=8+|)Qab5V zNOM4C4=A`%zSu9#G(&Yr8c_&YUwU}|bbVVQEt^4SLzhF#I?h~?O3sAI{rS6gMkYai z#JNy#R?fAI%hR`^pzG9Qoth?sklbdkP((QAPMrlbch*!RoS}2&IayU_YMsi{Bh^;O zh|}&uJMC(zky&Q~%B4q#>Cuj}>*r(rthi(@H%{QJsm*8e)y?iY%nbw%#2$p8&bdQp zh7{durG00}oF7L&JWz^qk5Q!M;Y@9U(*wv1B;xL-W*p9<@nk-oMb8yBh`#pkC?$gu z+wHOHYzw91UXX3lIC$>)gTa>v^WOqDMfoqTKZ$;Mq~uH=Ujrcm%7n^y|#%yTyt7&U-RQ-P!T;GH@( z-KKxXz=58xX0@ zXqTPcD7QI5<$Y%BEM+BUzT=#117*${Fu7Z!wsWE2tek5Zmn{Pu3%X7{)~V}6FhPLa sIk)Wm50iKxG}SKv03VA81ONa4009360763o02=@U000000000001%faGynhq literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example.gtf.gz.tbi b/tests/tabix_data/example.gtf.gz.tbi new file mode 100644 index 0000000000000000000000000000000000000000..6e4fb0bfea07421dacec207d3f59c87e0a3a76c4 GIT binary patch literal 196 zcmb2|=3rp}f&Xj_PR>jW%Ne)}Kc%E3H88j-q%kIiDTK9k6*3kUxlL5;Fkm`eW#kxg z=)l$O0#*SWN_>wu|7*G67*Hr-AGM`T+NIhzDIvkhh+VC&n^CktaihJL7Rb zajf0R>-0U}ed+%<4yDRxc+YtJYq%-BmUW@?f_JSSB_*bPRNO7TOioR&=UJRwit)lN glUYhLT4pOSF!-%CKevyOfk7V4oze`jWg^YVA`e!#g2pm2Cc=?N!%P+j^`F~wxi*y$E#bp<#Tsl2T z%2Cl!QSjH--K*791YYRAI%kz%`J*`QhgIYGDUX?r54~aDG)4TXT;eK~+gs0@yfQs+ zbf}UiU)audhHizLidTw3?YlTd?+Pi!O1mbH%FTDC{MnwT9hY*&1KHpX1y<%ye>e0gZ){exQw~vzl7nay7aWP$W zob_Rr@|om+cYTB3zxuzgNbciN!E>oA1Z}6N&9rZr#vLm)k6n#1jJt;|T>xUPJ6QLA&% mlCp63)YQInU8-eepSS#D=-ct;yazJ_gFIS@OEUlkp#T8fc(8u} literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example.sam.gz.tbi b/tests/tabix_data/example.sam.gz.tbi new file mode 100644 index 0000000000000000000000000000000000000000..a6c84f17ec90c8a57e3c41e1b0f0d546446a4137 GIT binary patch literal 128 zcmb2|=3rp}f&Xj_PR>jW$qd|upHfni5)u+vlF}5?5*rxUHO{ggIVtJdrf{f(aml4% zjzz!pLyqdWalAF{WYp=`<6HWGAyR)+<>m)m-4YYeI*X?tOS-3H;?1D!b!*i%pwaSZ Mc1SZYgRKM+00O)uuK)l5 literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example.vcf.gz b/tests/tabix_data/example.vcf.gz new file mode 100644 index 0000000000000000000000000000000000000000..277bd7bce7ff60ded736f4df4ccf77a1bef6f210 GIT binary patch literal 328 zcmb2|=3rp}f&Xj_PR>jW+Kj0a_vRfo;Au&J7Rl0XzbNJMhXvPGY~JD_u;1arO6Ne6 zmowV+mACU=;%TZlUAyP8u>kj`l#GOL;>J0r>-hD5JN_!Pp73QUkFn2YUu)^@+io(> zyJ!++=Bt=Eb>r3yFGtRT-f1T)TqQNU+$`n^Wu=@oaAbVE1ur9ao>4QUp6B~TJc20YKFmFXkTJok8okrsg!8b3g;N{tqCcHIb zrB0yi$A90d{#eNFI}t1QS0r&(_y2t#d?(&zHTyf!h9Oj2{)UFMe(OT_Uu;jJ7sq{L RWMGg-3oB^`W^mAf2mq^5hqC|x literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example.vcf.gz.tbi b/tests/tabix_data/example.vcf.gz.tbi new file mode 100644 index 0000000000000000000000000000000000000000..ddb120e44132d17fd5b151c9c6af8351dbd22398 GIT binary patch literal 182 zcmb2|=3rp}f&Xj_PR>jWGa0xGKc%FkB_t#;CAn$vGMx&T#oSRV$#Yh+hvz_1aErpL z1O+LtYG0=pu43+C+)Q>nixWgHh&5bVsBSX%(4~i-8ob`iUp#v8QY2EJ+e7|}&5Wv4 zw~)_%he}^Hq|Uf_=5^z%_Ls9cmnQzqR8wA6C$D1c{xVQ%X4_K5qL(u>I%OF;FPsl% SVPjyBM{}7p12fp6AOZmI-9AGA literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example.vcf40 b/tests/tabix_data/example.vcf40 new file mode 100644 index 0000000..07e0746 --- /dev/null +++ b/tests/tabix_data/example.vcf40 @@ -0,0 +1,23 @@ +##fileformat=VCFv4.0 +##fileDate=20090805 +##source=myImputationProgramV3.1 +##reference=1000GenomesPilot-NCBI36 +##phasing=partial +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003 +M 1230237 . T . 47 PASS NS=3;DP=13;AA=T GT:GQ:DP:HQ 0|0:54:7:56,60 0|0:48:4:51,51 0/0:61:2 +17 14370 rs6054257 G A 29 PASS NS=3;DP=14;AF=0.5;DB;H2 GT:GQ:DP:HQ 0|0:48:1:51,51 1|0:48:8:51,51 1/1:43:5:.,. +20 17330 . T A 3 q10 NS=3;DP=11;AF=0.017 GT:GQ:DP:HQ 0|0:49:3:58,50 0|1:3:5:65,3 0/0:41:3 +20 1110696 rs6040355 A G,T 67 PASS NS=2;DP=10;AF=0.333,0.667;AA=T;DB GT:GQ:DP:HQ 1|2:21:6:23,27 2|1:2:0:18,2 2/2:35:4 +20 1234567 microsat1 GTCT G,GTACT 50 PASS NS=3;DP=9;AA=G GT:GQ:DP 0/1:35:4 0/2:17:2 1/1:40:3 diff --git a/tests/tabix_data/example_0v23.bed.gz b/tests/tabix_data/example_0v23.bed.gz new file mode 100644 index 0000000000000000000000000000000000000000..b67da76bc82bb554a4ded832c9fb696b351205a0 GIT binary patch literal 819 zcmV-31I+v%iwFb&00000{{{d;LjnL618tT&0yQTHh3m;`b|NQ+AJYZxGju?Oa*^<#@NjG{Ra5PCm^hz9z%@^79LD5q>FX`kD2CSZGI6s7B zP4YnKa!-Q@w2hl~I1BC)IhI7!hee@F4Qw+1X!rGM{k?2E< zVjtRx9*$A1uHK|*`ifQ8uXI?8nGM#YvW-U-eMtj*G+;}FCT)a11`J&y+99c0fub8j zZgFd6;8|#wI;6>YTE1pGnpI92U7Go0QJd;OS>)!Na_w=}tV_$I=DD6-29gVoT87i!R~{9!^#+Rfr`}v!4=wR42Mfr`EU^!8T~?^%L{^Z10JVErjA)g zoS?ZZ&|Jb!7agNpa3-LcE27q80k(4CJeBkVdV_6YIZ6Y94q1{(1*_-w&r;|B5e6Fw z|4KbT>{B|cG0W|;!0y8`mwE;USAKZ`z_5^mAaO;C#V=$dfI9Fz5EUK+GUasub83!I zyX$#c=)V9UhS%90!!u>W0K^NWRc#=Q+#s4C)pbyE_H$GFPh?%mFZ5f`qpuI`NhD%^ zk)Ein2+UxxiELZpyqGR4$qCF)?!txai{V0%xxP@QP<=msqb~^+x*X%SV!~_0$p5<> zvko^>q4}}8K?>2p)>q7h?udZqN)Wp7g+i?QqPz#;vRX(rHd35FL`sGi>V2sUIUVyM z!M}WKb;mbUL6@hNM$C^?*lh&lwS>7rW*5q9+~-GkK3{0gv<{|-%@H%_)QvTf;Qu36 z+Vjd(LK6+#BRU&hRz4FENR~BXt__a)5rIOaGlurO^7-YN0iJvxy&K!WWsxx?CvaOX zG^4b;EP(MogI)l)1)P0oCiFIsSv_4algiPlaHjk=v00@PcwV$^lzf0nX2Fc&^=|r5 x;Cf0V%0}fv{{lVu=?3Qt001A02m}BC000301^_}s0stET0{{R300000000jW*BQ7AKc%E3F)+F*q$DtGoY@#LlaXmhgN5bd69O(0h6T)( z^L%&`rphnS%DSPjWx0Th3|q`h#Vz6?GRNwVGcDY^@R7kjW9^o2ja`R->|U@%A1EH) zbn7*{X#2<51zYSxYC8m>3x3(flRNzzp^#hyVc409dgA literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example_0v23.vcf.gz b/tests/tabix_data/example_0v23.vcf.gz new file mode 100644 index 0000000000000000000000000000000000000000..277bd7bce7ff60ded736f4df4ccf77a1bef6f210 GIT binary patch literal 328 zcmb2|=3rp}f&Xj_PR>jW+Kj0a_vRfo;Au&J7Rl0XzbNJMhXvPGY~JD_u;1arO6Ne6 zmowV+mACU=;%TZlUAyP8u>kj`l#GOL;>J0r>-hD5JN_!Pp73QUkFn2YUu)^@+io(> zyJ!++=Bt=Eb>r3yFGtRT-f1T)TqQNU+$`n^Wu=@oaAbVE1ur9ao>4QUp6B~TJc20YKFmFXkTJok8okrsg!8b3g;N{tqCcHIb zrB0yi$A90d{#eNFI}t1QS0r&(_y2t#d?(&zHTyf!h9Oj2{)UFMe(OT_Uu;jJ7sq{L RWMGg-3oB^`W^mAf2mq^5hqC|x literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example_0v23.vcf.gz.tbi b/tests/tabix_data/example_0v23.vcf.gz.tbi new file mode 100644 index 0000000000000000000000000000000000000000..27cdb5eb921ae89aa5309316e25e0ad0c93103e2 GIT binary patch literal 155 zcmb2|=3rp}f&Xj_PR>jWbqw5vpHfoN5)u-alH4?SnN9`FV(zGwb|NQ+AJYZxGju?Oa*^<#@NjG{Ra5PCm^hz9z%@^79LD5q>FX`kD2CSZGI6s7B zP4YnKa!-Q@w2hl~I1BC)IhI7!hee@F4Qw+1X!rGM{k?2E< zVjtRx9*$A1uHK|*`ifQ8uXI?8nGM#YvW-U-eMtj*G+;}FCT)a11`J&y+99c0fub8j zZgFd6;8|#wI;6>YTE1pGnpI92U7Go0QJd;OS>)!Na_w=}tV_$I=DD6-29gVoT87i!R~{9!^#+Rfr`}v!4=wR42Mfr`EU^!8T~?^%L{^Z10JVErjA)g zoS?ZZ&|Jb!7agNpa3-LcE27q80k(4CJeBkVdV_6YIZ6Y94q1{(1*_-w&r;|B5e6Fw z|4KbT>{B|cG0W|;!0y8`mwE;USAKZ`z_5^mAaO;C#V=$dfI9Fz5EUK+GUasub83!I zyX$#c=)V9UhS%90!!u>W0K^NWRc#=Q+#s4C)pbyE_H$GFPh?%mFZ5f`qpuI`NhD%^ zk)Ein2+UxxiELZpyqGR4$qCF)?!txai{V0%xxP@QP<=msqb~^+x*X%SV!~_0$p5<> zvko^>q4}}8K?>2p)>q7h?udZqN)Wp7g+i?QqPz#;vRX(rHd35FL`sGi>V2sUIUVyM z!M}WKb;mbUL6@hNM$C^?*lh&lwS>7rW*5q9+~-GkK3{0gv<{|-%@H%_)QvTf;Qu36 z+Vjd(LK6+#BRU&hRz4FENR~BXt__a)5rIOaGlurO^7-YN0iJvxy&K!WWsxx?CvaOX zG^4b;EP(MogI)l)1)P0oCiFIsSv_4algiPlaHjk=v00@PcwV$^lzf0nX2Fc&^=|r5 x;Cf0V%0}fv{{lVu=?3Qt001A02m}BC000301^_}s0stET0{{R300000000jW*BQ7AKc%E3F)+F*q$DtGoY@#LlaXmhgN5bd69O(0h6T)( z^L%&`rphnS%DSPjWx0Th3|q`h#Vz6?GRNwVGcDY^@R7kjW9^o2ja`R->|U@%A1EH) zbn7*{X#2<51zYSxYC8m>3x3(flRNzzp^#hyVc409dgA literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example_0v26.vcf.gz b/tests/tabix_data/example_0v26.vcf.gz new file mode 100644 index 0000000000000000000000000000000000000000..277bd7bce7ff60ded736f4df4ccf77a1bef6f210 GIT binary patch literal 328 zcmb2|=3rp}f&Xj_PR>jW+Kj0a_vRfo;Au&J7Rl0XzbNJMhXvPGY~JD_u;1arO6Ne6 zmowV+mACU=;%TZlUAyP8u>kj`l#GOL;>J0r>-hD5JN_!Pp73QUkFn2YUu)^@+io(> zyJ!++=Bt=Eb>r3yFGtRT-f1T)TqQNU+$`n^Wu=@oaAbVE1ur9ao>4QUp6B~TJc20YKFmFXkTJok8okrsg!8b3g;N{tqCcHIb zrB0yi$A90d{#eNFI}t1QS0r&(_y2t#d?(&zHTyf!h9Oj2{)UFMe(OT_Uu;jJ7sq{L RWMGg-3oB^`W^mAf2mq^5hqC|x literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example_0v26.vcf.gz.tbi b/tests/tabix_data/example_0v26.vcf.gz.tbi new file mode 100644 index 0000000000000000000000000000000000000000..27cdb5eb921ae89aa5309316e25e0ad0c93103e2 GIT binary patch literal 155 zcmb2|=3rp}f&Xj_PR>jWbqw5vpHfoN5)u-alH4?SnN9`FV(zGw_rV4Ru;KOg_UrTWum7OoysUPTY^-QhvK}c34H-swZG>AaUxM7E*;3|>*l8Ab+C{(GA zMaCb^zD~_gEo~II$eakH#`2JIk=0qm>(HWDhwelNd&}0Yy-3mU70a$q+2LBuXs{xc ztsSb^FKJ+hI!uXBq&3&WfT2o6TO?&GkXK`fEiSDLJPLhzo#*Mt*X{oO)@-qeJy`yHf;=(cnIb1q7*61vAs@!DxI~o~7l9U8LFnmn0wW*-(gwnt!a=A9D&G;>)95@)2CKSI_WsDd5`BEzFWq{0edOsym2?)Eq> z^e+JL*7NMP)+3ce1H=u5Rc;`(*dQ7o)$5?d?8m0opNP6r-_T=0m%g58P9hNViF8F} zMPLMj4P?^_$Az_7NlajTViz`K&lpbRaR(%d)T-yF@93F?5^avYTQT7_qR0Pjj!}ml zsnGaX-YkizVd=}qLRUmUV$*`LUsOJ*K2AORruJ=AZI`jF3#!T~Iir5%2a!%e@0}1{gb)`A4 zNF_8-!#QGSqs^+1Ll$ZG1!^5$TAbIj?w@^~eB6yqnIAEnu^V7?KrqyIg2Q zX?3{(`uRLM0qhpA_Mwr`%REMPb-_p~OQ*t-^2@|Vl~&N>qAjDu!&D**MigJ~sV8#0 zo)UqgQ903TeG!ir%*WUJ%U|8CM#Coy001A02m}BC000301^_}s0stET0{{R300000 F002)Un&JQe literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example_badcomments.bed.gz.tbi b/tests/tabix_data/example_badcomments.bed.gz.tbi new file mode 100644 index 0000000000000000000000000000000000000000..04631805ed33127ce32fccbbfe15d90115e442f4 GIT binary patch literal 194 zcmb2|=3rp}f&Xj_PR>jWOBuKeKc%E3F)+F*q$DtGoY@#LlaXmhgN5bd69O(0h8q|v z=lSp?Og$7JI!{KxDu6?Y@A3TROO64B68}xrTfWU=*~pv5=Tl?Eto6Vt=8BINCH7= literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example_badcomments.gtf.gz b/tests/tabix_data/example_badcomments.gtf.gz new file mode 100644 index 0000000000000000000000000000000000000000..9d6b241aa52e76ef3fbe5110c356de06a1935ff3 GIT binary patch literal 3825 zcmV**}C( zEy>BR^Y!!Xa&`Co@O`~$a9uQDTu`D+gW|pG|9xM~Prg4ttrri=o4cp`hvk>e-LjwQ#$w{ndWwrv%ww@NMz;;@h15 zI{$k6_wDlb#{N_0Cl}Y(?>~PmKezd#g=yMkw)pSU5}+kQ+x1&?@@}zOE$(l=uNFV#7-1jG1;%#)X_*zPtFP{3&;!*N3-7PdTN4{vhZJy%WSpwmSmoiO`u8 zGr|Qx9~pW*TCJcf2GK)&vO323=s_0 zA>O2x&>)LVF{zYd0ja?OM|UyfXSo>oW`Gm>C}RKwg6$aPzy1EHVn&z-W>L(nH(`W` znfcV#o1A(Exg<2mj4F;;CbPfJKE3CcgVQRzHJoTPC$9XQgeDoB2<0MoN^fjV@p{_l zRCo;lbwE&4A9=Nj$^sYGqzFeqScl;?RejYLYbsEzA1J56iv<-O(e8_CwSM}(iAo7a z_CX-RN{FxuW{`R&q@IijIb&3?4BMp?W^%M4IY`pEwP7r2c*Z20R0k5y{bj%ccyA*J z#Jh;M*;3B+F7s-)rN`=@8(F;x*>-U<0Zu+n$_!qn5e80PPK7^iaDqI-pP&M$!-1OW z$ZJG(N~l~;5My-47}gnZVS)=Ts{k5;3-8!%f`YN@^O_|mg%LP|7(oH3E@vVTl8I`Zn##Sokzx`>J{ zgv4?tG**ymc8uKyC>Xn5uPF)6<#Zg*06@h#g8?{!Gl<%pAdwa`i5aXJ_{Xkwnk6U0 z0-R>p#x+5K)9eC8VdRCK!4RCl8Ke}tNKEz4C-k#*Q&nceCtyZ)$^=fn{6I3y>_gAch{D1)t_cd9!MLC%I`ZnyU7{w)18&Vu*F%Cj% z;$cF0%g-RFrat@zL^bvCHzcZw4#37OTZ52-sYDXoLkua66_nV; zc?Uq1Dk?Z&`yiyI8gaA_KM>VnP)$`;jW||Q4Tlwv7{@kY+bVUeH7d`1Z-vb$Q#=G) zQp)$wFR%FQ-W7rT?1LbZBK<~q1lrbV3iRDCXgJkQ@H!4WLxH<^3)Teb&>f|~x<6~% z-Hx*CrD&(YtD>Alxb50vOp$qVnxjvliPEo)T*Jc;rcd|ogPJYauE}$^}30-ng|Me zn2Eq?@Y)bGhTJh~!M&GWW*c}2K)eA+McIVk5au0deEo|ExvTZ`!56C=w}Y74C*94V-xdOkCHXzXn_KoWNT-!SWAg(_Of*~7|6zwwMBgvCaalC3`p}`5XVTFC(SYd0yB|2 z!yaau8#3+4#z&>mWNE;_R(v%LtV#plG`^)Vzzo%d+q$0{j6td~XfTCnU;v-RmGxO% z2R2Xw(nOh-Ou?oOXj7YH!2k@C4(zH!tqG7|2!=viOi6Kp5U4d9X?^1qBN`L?tkwnE zWlB*|sN!Wxux9&nscB5Nlbo%~BUxB?T|4DmZ8yF;K-xui96*W*wh9Q7g&|7@;xu^i zK)f(&NnR$BNok}oB1~vn@Fm;5{zy(%$Crb{f1;-tpFh z1#B)T^H9pH&sSR0%ZjJ)#-f0I5bQQ(u5jz}2rR%os>-(sm*uVPv$8EfeKhJtP*>pw zQ+}ABPHN26OktC81QtjXLOPVL2*D`Y!X7h@>1y4NKM-BdG&- zg8=OQu#334!b~U&9oFi{>@;{)n3E8@;{)l#>Yi?PwN1P-&M+%kzm5<_IW{ zO&QyyP7xg3GX)_*?~tIROpvD8l%s+$NSR;i1_873s zqj(TfSeO?~NET;I*uXo755k!a&p8lsY-k%*2P=w!c5m91stFg=z6cT8@Cptw&mj)Q z8T5P@J%cyw@P-)KZ3)?PYrwgav!F1CIlg_y#gaC}8)Mt&9cRc^MztHtZow%y=jfT! zUeihcIOl}vq*%`Gp^WuxrJ~(?2?S_&(JobOkL{9{vs8go;;1bK4RJQ#l5+Q%daFG{ zQ={%-bS~bmde3gW7^mBHi$ejjbAs+yA5@fF_0Er$@qLo#k zhBjE=@vSd6d5C?nB}1Xzy(+l7*RCe!ZiczKG^(TQ5>xMXnB0>4-LFWfx+hFVodGWq zZK=8sl-zFN%knIEfIl|;%KcT?HB;e37CqRV1|wtdUnl2u9*?`_h87|*6Xi>2DZ5Lm zl$RGJyb5Lsmyon^s};cRyeiH~jQw*InFK+p zT}s_p1RH7s=dn3cOzp%nB}xX4Gh|qa;9S09iVwWA38T?Lqa@NY>LL?Ex^)ZLmbB(F z;N$$Hodz$6ba$Og@f+ePd#!ISLr`nCS}VIigv9xFK_lJA{{GWyO(@GsAnoqfX(+qm zErbT%Bk``3Er^}VqJqjmWC5gyBMsJibZad*;$S_-(R6c)j7h`eXtAN5G7h5!Ho03VA81ONa4009360763o06GKh+FftjFcb#h>-1Md+2z#AKK@p( z5bIWHEtOi@U7{#NEm9j0$*S$&&khM6fj~kMG$f;z2rxE0J$++aN&e14*PG3!K^Vv3 zc$CcjC=TY6S>j#0s|TYv@sr=N>-`)&{2FY&6!{;zi{2dvL6Ew_a0v+OChy^A`0m2B z`{sZ8kw1D3Bi-&{IJ|wn|A7`aV8Fa(i&dw2yJ6N&V6MFDi{NdJo!j0^Z_sm0cMfJq zkEsusNa4)5s8GA*}Q%q$zM|4xCY~e7ReiD8l7FY0eoF^`!?7 zFE@83(xMr3-gP;&sN+l}s^pA_*qy%%XHEo&W1I^O&dRx#ae4YS6ttCks8X{;V1k-Q3Ek|zGE>-GEJp7fJJ zFpkX^G7t3{nXYXJZIhclHNc0-3FsRtkf)`+G~ZL$*1R?IwM9%O&xtHwFk1Q6bin(BJS8|=2>rXpR^3$b8C$`*ATkc#UVW)uY zP5~GD%u+C}^g$_v%deCJf%slqB7|z`O1VA~O80iv*@be;0V?k^8)qRZInyoYbQ>sl zR>0G%HEKH-8l07LE#tCfU}HgBsfQ|ckq9~nIJM3#JAZM5>BmPHC9a>i$y?}#(fHyY n%;kR26)*q*ABzYC000000RIL6LPG)o8vp|U0000000000i;_dq literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example_badcomments.gtf.gz.tbi b/tests/tabix_data/example_badcomments.gtf.gz.tbi new file mode 100644 index 0000000000000000000000000000000000000000..c7731fc26fc6d9d607c81bbae0a274f1e775cc29 GIT binary patch literal 198 zcmb2|=3rp}f&Xj_PR>jWD;c;8Kc%E3H88j-q%kIiDTK9k6*3kUxlL5;Fkm`eW#kyb z0Ax(XYcno4oPqwNv_jN+4|#4$G1`yshwM-P;vge))x%AG&j(=L!Fey}3~WRxGdLB<43h)RNy+o%ky8(T9QtCb<;j ig(d4)N;6t!D=;wZJlw&zkCA~v9?hlF49sAMg9rdJS3{@( literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example_badcomments.sam.gz b/tests/tabix_data/example_badcomments.sam.gz new file mode 100644 index 0000000000000000000000000000000000000000..9d7cb5f31df05bc9716d1ac6185329acf10eb82a GIT binary patch literal 398 zcmb2|=3rp}f&Xj_PR>jWg^YVA`e!#g2pm2Cc=?N!%P+j^`F~wxi*y$E#bp<#Tsl2T z%2Cl!QSjH--K*791YYRAI%kz%`J*`QhgIYGDUX?r54~aDG)4TXT;eK~+gs0@yfQs+ zbf}UiU)audhHizLidTw3?YlTd?+Pi!O1mbH%FTDC{MnwT9hY*&1KHpX1y<%ye>e0gZ){exQw~vzl7nay7aWP$W zob_Rr@|om+cYTB3zxuzgNbciN!E>oA1Z}6N&9rZr#vLm)k6n#1jJt;|T>xUPJ6QLA&% mlCp63)YQInU8-eepSS#D=-ct;yazJ_gFIS@OEUlkp#T8fc(8u} literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example_badcomments.sam.gz.tbi b/tests/tabix_data/example_badcomments.sam.gz.tbi new file mode 100644 index 0000000000000000000000000000000000000000..a6c84f17ec90c8a57e3c41e1b0f0d546446a4137 GIT binary patch literal 128 zcmb2|=3rp}f&Xj_PR>jW$qd|upHfni5)u+vlF}5?5*rxUHO{ggIVtJdrf{f(aml4% zjzz!pLyqdWalAF{WYp=`<6HWGAyR)+<>m)m-4YYeI*X?tOS-3H;?1D!b!*i%pwaSZ Mc1SZYgRKM+00O)uuK)l5 literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example_badcomments.vcf.gz b/tests/tabix_data/example_badcomments.vcf.gz new file mode 100644 index 0000000000000000000000000000000000000000..d323cdf1876af21f80c9be62b57b1c85cf9b96bf GIT binary patch literal 753 zcmVY>GCzI`=!{~r>jfz-J{ z9XyVRrS{}oUdFpuC+CHXd7@TEQ-9|C7ic@I0Exu?ie&(2Gs$B#tTec_2WTw9Px1^ zoe4mgKum04fJi;24MKOh1kpRe(eebb9#8*xVjgDy4OuMJ) z17ap&lo`6w!4M#u5LoAM0RieletDqA1FD*?_&uf=U7c1*Q1#9%s*^g0spd5qA!zli zI*ADhrOF}DBVc`X3)eod@gaoh(6B7KZk`Hu;fg*m!-!c76CK+CD_6`QLtPyM{D2vu z%&c88F{!dhjWa~Ze`Kc%FkB_t#;CAn$vGMx&T#oSRV$#Yh+hvz_1aErpL zd4|qUWFr-}TvzFcD=Bni3whAIByEb^(oDzZOAFOa<{rBAuxd+5mtNmIzlmR)H1tgfZ@YkUBYk<_W`3W^M>f}|7-CqVu&1_q$Sd{4!)y%+f WJ4joFg^hth9?f;q49sB1f(QT-&p zjwVTnZi$1j`68QMD7s7MM>_e10Z-2~oG(JMCV3!qxu!t`+Qv;goCSA@9FIiQi$$SJ z4Qw+1X!Uh#erp-Cz)jXf7&VuNl$-3%BGHEy#XhtXT^yrYUA;-s^cAbFZ|U$XW;R%p z$~G=l^hX-lr2$JKG-)IBGGOQu(Kbod3KZQKa*JCl1J6Rc)FDmI)ADY%tyyK4(WRMR z7PYAkltpgNE}uQlnssS;)I8U-%b=33TdU`|?^a+Pv$UG^0>TAs@NQwlHj7;A?avpe zlL0}o9hI!Y1TnCKjHZg81q>_PfJT-=V+YM5mn2J4eMhM6E>6)$Szz_SuVG~jIzYv0 zf#3@5G=|M3tGu}gjEsJvx62KJbO9c_MW&8fM(m)uJfOLR?Jhb-x8O`bGgm~d#{<~P zh4WO>3+M@!h22s&g*CKarn+doU84MZ3$Ap9zI1F=r&ti~*t%L7&)mbuh3Fu3x| z4FHCPYy^obQY>B}8v)dT=Ygp37?3Hi1DI2DgxX!t(?Wj(fEZq9cMQ*z4FeDllvcHY zFmi)vepH`>lCz(i+J7SJN`9c%f^L1i(V9de<{Rmb+KRvo2Ajy170!$4u#%j>{Nyei z$lftrC^FX<$`q>i$4~T5LWK^;IIWoQ7%}qy4#%v+iBxEQtZtA(G_ds*bD=vTpt%x+ zZhW8+tG+1jK{%`)q#6q;&L1Kr!vpocREF%1`H*noQ%fV}M=I*1Yoh<(UDld>`E#+rVLwF(f;1dt7KnX?J-5#{CSs0h|`F_o124+dO7< zcfm|5Tc^UA^4r8_m3H8H(Y8_Y0VjWOBuKeKc%E3F)+F*q$DtGoY@#LlaXmhgN5bd69O(0h8q|v z=lSp?Og$7J+9o4l6~Ljy_c*`#l4C%j#D638mT$9IHu9$N`P3LOYdvrZI(&v>p=6|D ziNq8;?xpV+UX+gryvtF{Y&^+6;hWr(rVEMz-w*xZ;aPU(#Jkp&?Va34lnT^iwFb&00000{{{d;LjnMb3+Qt*D+dCJaqT438G zNYk0eAV`chz{Ck+cd+~Imy~2%qD6`nB~K!s0+rE(Vd|g%JQwni{CR%&^!T_~uIIPw z`D%Upvi|Ar`wO1EKmYRn^S?gLzFuF=u%vQEkVdn2vwxVs-xkZo&BOit#5DSV>>om? zmgMA@`TFH{xw?CKcwTQBTo(-(7nCT|p!nJK|DG4~ljoPG_2OZ9bN6)ru>7|9p7}ql zf2`&w|2e<-<9zeQDNG7H+q-Z|!$}N|5~pe=h!7{5hw; z%)j6Mb-TR1vHz9%$;I{c$FHBu_ig@YVVX9XE<o1ZauSc72!V7?B*%1<`#x`~B?v ztiY4U%xUl@m~DBHR9@xqRFclHCRxK1QN%~)^>vPlYx@txgW2W7caUmy{A1?k`ew91W>%-fkr<_tie-QMA-U(tP+Z_S)MCeS4 z8Q}t;j|{yYtya(#gXkeXS_Nq7Ap}uW&4|WXVJeL7G?Pk^(I_P**aheZGpPl1h6o1h z5N}dTXpqIGm{dx!fYjiCqq~^#vs?^(Gr);`lraDT!FG)DU;q83Vn&z-W>L(nH(`W` znR(aNo1A(Exg<2mj4F;;CbK`zzI^1DgVQRzHJoTPC$9XQgeDoB2<0MoN^fjV@p{_l zRCo;lbwE&4A9=Nj$^sYGqzFeqScl;?RejYLYbsEzA1J56s|6Ju(e8_CwSIcuM5Tly z`ydcuB}7;SGe|uXQcp&NoG~g`hV4=cGdbFj93<)7+Ax+hJYy10ssjn<{xVcCr@|jMI6)raPf!8W;XqAw zWLBZJddCiiO!U&u}jGzEimopfG6F7r7 zXCO^-zeNq1fq(2aK!G#xrJ90CG!ud-5LD1trX?B64F!I9AU>cg*rt7oV&aa^TmC_o9sL04W-yIxCN_Rt;}haGmEVY$;43_w38!LvCX zMX28Z1vybbP3Y4fC67IDyXSjsNq0O)I>F+ivc)6bP*L@C`|E8*^U3;HA7x=!%0IF7PfIs zP~Z&41vSx;S9b(Xcn zgcY&yZ4hbDRkxwSOdxEY66M7AQ=h~rE|c1j;xLPG5KoGlHeXR2of|1`KS) zSJS|%H1JL1TN(q*P))e4`?94F|p5TU7%g26cvRkUZw~1pQ_j_Pv#SH7U1Y}rq?ll-3&k+^DG7VkEIt?E6 zI^8Z77gy{9#^crgR{bXgc^GLP6Xa1+M7ABpzlB%NMC~*f0d+3kB(%QSToB|T1X)}* zuIy!9=E9+Z*8BIZ2{_|Q7?kJ3OAVY!vu9wW3FZjn~Wo{K%x-R zp>#zEM$sPctiovRK|fewv`#2LHEzBYet-YTLyqN<+jQ+G#}c+l7SpF!Y^PCsR*!JDF-MA&afv-p8ZyHr}9PmC}}KzVG+*d}#~;NYGq2nl+J1SMsH zG|i?grDU&*a<`Us!htc-l!bDS;;C8Zk~PK}DFm>`fL$KNgOI|)ykJ7IIAg*F-Z^{_ z&UARrfskWE+o(ENQ4F+u)2>uaxS;k$h|q>taEN&haVXB9=fmh3ykUno#K>+-$evpR z&YheEg*nXe?K3Wxv?1OY+dl6&L$)%i-B5N5PQf`x&z$y}PWsz9Crl^Ba&`}8tY<3~ z?cPfuK)Z`}scL&{m$aOv3Y-#0Z82zwv-y;iyU)~H?HQUHbq}L+@pjdFcH_l3g)iZ8 zlcPf0E}fcBx8SQ-JIO}wG#Cr{0HBi~drbjI^nenrtO7N(!TOGGeYwd)?29cK3hnMy z!QH)fH8FQH%+;k)9c7o8dbh*mmfY`tMMBj*VKV9rc!_9B)qSAkb_-vYXTbyfvEf(l zufndG3LmoQ!R|B|8GHXaIj8e@+$}e>5Q&*6UqVaST~ejIyeQ#KFiW_Eq>Wpx0Cpdr z?_3JN*Vxg!0~frE7r?denBU^-YwC^=UvaOo<)-Vh^BsZ++?wH}WRyTebAX7ZDOZiL zt`Bo?FOlxW1qb%AJFKbQ#cIJ}5MH{S)Phs{B5`QRL~A5M+%%PX|8Tvm%FvFfrTpoQ zl$j-B)D>wfUCvdiS8}F^1pSehv(w;BaZY0FpQFem2ukfz>c%42P!l+h&6#3qCzdHu zGH{$B!%76_@)c8j;GInvjSds*T85Kq}_ zeRCOtTD#R+*##mb&bJF1=|1-N?^bI|7QVR0bjo zAUzyuu-2nnYrzo*>oJa|n^R;=3MTD~WPu6+hNKE6CSo7;YI${jcGIr}Mzv9H>9CiU zRrm4C*;t$gZvu-KN!_u7UOI*m5BLT`1PLFbkIEt{7fS?-udVlFZhkuDjeix+!_OMRPf{U1!cCl3Gs0RSJ1 z2m}BC000301^_}s0strj?b=;$+AtIb;Op#HpxjQa>|^`bR<982R%tDjR@z;n2%;9L z3kb4m`}ea$!bc#GkOU3MsBKhm?eK8=#s0-Q!?z_x$jUEFU01_^TG{ zPP2A{w4J1={hLptw>kChx-Z>+*R$PuR1hHlL2d#UdPUoL1H%uaP{tX0;|5VE>-|MBJazCc>mgU-4xhL%;F zxgw>U36uNtcj=5wf;`1J*WjX@D;XE3Z%sj0smCfcO#~si&0e91aL%nd3#jj`sYbX! z=hAbsvd+{x6{kn4t&kC?-G+8r)lws~&IFW8j~3IT8E03|$Ld*e$y{!n!C6zA&*rC_ z-L;q-2pot#2tl25i_Q!wy46ba&X74j4}N%{6y+YHNQ=Xn+61QukQqqC-A&CnoJ7OX zbUcY(OKcE*?LJUSdIh%IeO1{OO8dPc+oW;u+VOk6FHh#l(P+G|Z^-^?*2sKgLui-W z?x_JiPR_tQNRB)y?Ung~!gl73nQts&Qh8*mc){r88FEjTeE0b-;_1x3@uYr{sEs)=akGLpX9Z?}1bZ_wz>&AU>|mgXb{D{AFMvrg z3(m>Ls>0>R8Hzb)?pAWGnwzto$Jyo5pfgwQ=Ph?sM7k+pvs1w3KC_YnwK-@_Xz`tL zAPF9{Wm4*f?v(2hsZDR!t=%ZM8ldz(vvroTlr!IPPPTzEXAPL#tx?%I*WjX@D;XCp z18WPqNjWD;c;8Kc%E3H88j-q%kIiDTK9k6*3kUxlL5;Fkm`eW#kyb z`tufr5{@f-4eXc?i`k`oKXm2rk;J@aM!6K@ ig(WLkN;6t!D=;t|TFkI@A0q>UJeo_T8JNKi2N3{3-$7IW literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example_comments.sam.gz b/tests/tabix_data/example_comments.sam.gz new file mode 100644 index 0000000000000000000000000000000000000000..9d7cb5f31df05bc9716d1ac6185329acf10eb82a GIT binary patch literal 398 zcmb2|=3rp}f&Xj_PR>jWg^YVA`e!#g2pm2Cc=?N!%P+j^`F~wxi*y$E#bp<#Tsl2T z%2Cl!QSjH--K*791YYRAI%kz%`J*`QhgIYGDUX?r54~aDG)4TXT;eK~+gs0@yfQs+ zbf}UiU)audhHizLidTw3?YlTd?+Pi!O1mbH%FTDC{MnwT9hY*&1KHpX1y<%ye>e0gZ){exQw~vzl7nay7aWP$W zob_Rr@|om+cYTB3zxuzgNbciN!E>oA1Z}6N&9rZr#vLm)k6n#1jJt;|T>xUPJ6QLA&% mlCp63)YQInU8-eepSS#D=-ct;yazJ_gFIS@OEUlkp#T8fc(8u} literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example_comments.sam.gz.tbi b/tests/tabix_data/example_comments.sam.gz.tbi new file mode 100644 index 0000000000000000000000000000000000000000..a6c84f17ec90c8a57e3c41e1b0f0d546446a4137 GIT binary patch literal 128 zcmb2|=3rp}f&Xj_PR>jW$qd|upHfni5)u+vlF}5?5*rxUHO{ggIVtJdrf{f(aml4% zjzz!pLyqdWalAF{WYp=`<6HWGAyR)+<>m)m-4YYeI*X?tOS-3H;?1D!b!*i%pwaSZ Mc1SZYgRKM+00O)uuK)l5 literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example_comments.vcf.gz b/tests/tabix_data/example_comments.vcf.gz new file mode 100644 index 0000000000000000000000000000000000000000..d323cdf1876af21f80c9be62b57b1c85cf9b96bf GIT binary patch literal 753 zcmVY>GCzI`=!{~r>jfz-J{ z9XyVRrS{}oUdFpuC+CHXd7@TEQ-9|C7ic@I0Exu?ie&(2Gs$B#tTec_2WTw9Px1^ zoe4mgKum04fJi;24MKOh1kpRe(eebb9#8*xVjgDy4OuMJ) z17ap&lo`6w!4M#u5LoAM0RieletDqA1FD*?_&uf=U7c1*Q1#9%s*^g0spd5qA!zli zI*ADhrOF}DBVc`X3)eod@gaoh(6B7KZk`Hu;fg*m!-!c76CK+CD_6`QLtPyM{D2vu z%&c88F{!dhjWa~Ze`Kc%FkB_t#;CAn$vGMx&T#oSRV$#Yh+hvz_1aErpL zd4|qUWFr-}TvzFcD=Bni3whAIByEb^(oDzZOAFOa<{rBAuxd+5mtNmIzlmR)H1tgfZ@YkUBYk<_W`3W^M>f}|7-CqVu&1_q$Sd{4!)y%+f WJ4joFg^hth9?f;q49sB1f(QT-&p zmbF&cVlB0()T*`0O1vO)B~@xEQbo~}BZQGdIg^nq1DPcA|Gv2Z_V&{m^}{&3fRz6JDWv^G84J7eBt>yxVxi>5QhLhWX) z3=iS^>aM|cHzC9nw_(O7^uzleR3%PorNl3vt5JB~-|}Qt#SGu!(W~PNWUS%KI?6Qe zAMC4|`Er5&%eu3>eWUn!uWuLA)Q19>EjuxVcE-z6{g=eq4*2rnuWSC}a;ZI?^8ax& zP31PSo7G!BUB^>spV`y0j!gLI3M=L1nnKob^(5ttno8EGf*Ip3b)-{=S6?cSu^+fO zqvqTUmhLWl9;s359=~p?{>tb}>9;2$`1CqW!c2P0dANvv3Ejy5$C)){FV~Da@)5q0^O-&T^0K~*5b}|Eqm5g?MccM|KG3cF6}^B9sOLv3@`o7 zpbU!$D8tzp^hLV<#w~kV&;wCf_ju~l)y6H{(;{*ENxiduMom6zyFh#Vp&pXWtl7NA zSkUeIN8z-#t;sW5JM7=+@7?XeWjWU&H~fc;#h+j-ezd;$v*`;tGveq&!=bXa@d=+t zQ4W@ws^+XQXT$Y35Yd{I?NEa4e?)(`n5vg;DvPP2c@@TL@H9TNW9vFzo#!9b<9}Xv z$y4iEHKRt?Ts82qzMjOU2kUE0`#kg5d|y)m3?<#SPK#O~wd8}2{PWGh zJ8yV;<+FEuC0^jcpBAEBD^yEXcjVt_4!(MW`0v$?9r(luI{HKQiVr4C{rmmmN2trc%v`Yh0p2*}ya}x* zY9({de;@3&AQ64A|7`S`mxsOi$e$j|^?k|PCF<};7k@e85)pWR;ur6@l_fne{i(yg zXI>q)YW7>$>KMr4p6_cb#*R7u_>8u*K9fIqaqawP8xMHAckbj5aia>p^F8zTVQ-$* z-73(9JfgqVKlQgdqQ6y;{#F8XtBDO2OZB&sp{0* zoI9fU^F6BTUl|@dMVB^lKBT>td)#HDG-t__>ro5co)E?~%>R)XJs}udT`{6Pv^ZwA zqT<4sTbYnXmUC#z-&Xv7_nG5g)GsQW^VuS|Z?a+%gV8O9M+x*9W$QC4eqj28hacX2 z=41WChd-iw_}H=fGC!+-_`CWmPoOK~f?xiy?QG<;x;*?6^T>NY66bthigyVbF6)R1D+f5%j^=?TTtssYwBiA zRjh;F#;Pgw_0+#>Fuf!6?^MMjcfZW5KZJ#q)u6}4iOv+D=ehCMB%ufTK2YVWe28Et{Z8({(&++Mg!i&ZZ>TmO{rNM-KXrs(6W{}&thiRO#dn{hH0Q8(p?lz4M{G<+FlqsRi31 zpV0cJ?|4({b}9F8i^b)5S>954TX}R%5c#ljjb`h%_Mbnwqr5#;R89{$`WZj{q1$a0 ztR6E~`8AEqa>+p~6QAV%px#Ra%;pi8=^9Jab6+H)fn*Mow>}%{x@!y`r|1{rC zKS+B@4!{3BkIWY3xb&*TGVSE3%?VQW%~;Mls-dh2i{S6~7G2Tc!5JmFe0F^-Co(xs z9VS%$hqHl7mNm&D`03svnOqQ+OJ-_@5$&G}#g(o&G<8;0NV)c#sLcgZc55tW6O~-v z6w2Y3c#Gu6u<|C1qsun>jqm+UT!Uw6t{42In$etpRPNWc0-74{c=NpWjXzMAb?pVe ztbuODxoWa%xEa4r54}ZYb!jwXo%dRaz5Tpd)Y>h9pA_dxS))H=KYYYR*L7eqT4ND45O~ATP)n!wfZb(OJH4bZV~JI?d+=>YKH5{dCIuQZe{+& zsc${-if&x+gAZdos66#lb@*Oo#|__cw=!>$k)<^W)Pj$AH)H<(B!7uM1#+ zDT~z)nw{QVN)FjXchW6p1~O)#8Bji8W~3Xx#J=Qjd_p`ksB7J#)smSHfS)XJ*Q&e3 z8n)C;?)G4=;A68otm$`}r`gij{ze)<-c_8Zj5}EsT%vt%gLa^j$M49(QVT8sJz@A+p4a`P-Ep&{;3f3jZ%OX=zPP&%f)v z{Ur7LTXx-;GxeFjDChA$m^bspn`RFQLjxFk0sKy(oOTXcw?CivEp_?gv%_z8uc;oV zweFq9l&$U!-m(bx9Bo^&EAx6>Rdmk}jO|CMTU#WRc`FY1R+g;boq2y|=*76;?KR0A z_pfaFWE$&3k9{X@#{BR6JHM&FPThFv8@JPA1K+2Jc`F;M_!H9LdNscw1om6%Us5;T z{KhR~Y+z{1qN2+5mAqT;&y2np7q)$wprc}CQ|mN&%eET9@+22sJ7WLp=goaS-;dh; zGR#}3jr;yBwxpde#XY^)jl=r#xqWkg=xM;i%Auma#o}#Mcqwk%VmCL|Utiewha+8Y ziGEnk{o%ahmWsu0Y*yBb`^r0rroF~(Nx`javu5gMkIk`%l^y!^`LgI0Nn(BP->3iZ zqX|ng^+zzRe!cBex>G;0HU{cP)>FP+W)753bSo>jB%K$+4e(=-ljn8{WLdih7{iu0_Q$#>$4R2g;UiL4_(;zg9y_YkVtoX;l2$ zFQmWxbOKgz{Vce}>W^ACzLufvn6mE+Ma;q6cM3IMw{CnZ!|lrnfpf_Ng;np>@!s7u z(?b^LA6IjT`nay?r}eBC_EPE_G2iFDb2YVq-Bi{}PuO$GS6$n>c|(TkKZg%fO?6G` z^{l`7?E6+R=ZD-EuW9~Y+s4n}8M^izN_DE+0}nhyWNVXp`6q@wN$o7?!?9=n67|!V z^wCAta~JGfxh7%3_RQ*(Gk=acKQjIIYq7%XP2vO5bYq@~srGV)xQ?NIhTK z?zI;hvMO{LujIWf`L6=+?d0B$t;?Ezeo@@~YDD%=4s;>OUdLmXO6#S!o7pn3u<5r(`)$RRIQF{}IL{XO(m#3UYYLk;u1sf# zOdveS?fF#~Z}1|cvogy(J>!H4RNIXv?OO4VGs{0v1b@9QiLV~rvT=L5vSU*DBE`7f zxrx7OCbw)%NM|pdzATKd?iywo%PiqFQc4KDld_%)tupHjS`a90HAULJ~B z3iNtP;g4SW%^&J_uwA#wdWmnCYEUGGUTf?==nZ-J*{`wDl5)>)fxw=2L5K+CF#QuxYT> zE`6wEh^yN8+k~7o?Qt)i3|{}?O}{NZOQ#esO8d9RDc4oI5lRgZsrwfB*$x0rUE`L%9hp2Glb)_L&*&X zgbmgtdJL|eenomlxUKx>?10wkitz7*YdDW(@8BlZhL=fS=TwzX+%(?eB=RwE2ksjj zPg40=d6)wJ%r28o*~Cp32Dd8Las;*V8|7hFr1{y|-w6|}Pw0*A7}cuWz#(eo^78U4 zQfYSf0ilq~ox|af%GmO9h1@keTPB5snN}ynzJohbuXEf;<+gHPh5WH>tV}v-6Lm%y z*s5H^Nvf4smHS?i=4L~}IO`L7p*wO~m6060R^Cu9x*{#g#tsMtTxvFlO)7Vkixl$l z*_ccU2{Wuqm>9Wj@$U-PjF|sxSc&w6=Zp&fSS;^h_S#1Ox7yUTPu}cTlJL*= z_>-PTZn-ll;p9!HP?kSbK9SAL0t{wr)WkjfebtwZXN1gZ)4{9~JLvM}R!?=u6yK}* zWkQHFVSRginrGcD_i%P$g@38&U{1nm%rC}sITb&OU8r<-6&;lOzp~knNeMqIZ-gvw z`#O6zhnWQ!#MY?p$lX!*vb(p!gIR4lh*e?_UEbX4iPj$dW&NIik2w{r+#vUlXpdjX zUYnD!fQlb4sxD0^yX9Uas{Yh7UFq(%IWN^Sy}~~Q%NxmF%fzHpU}uF_R@O}ZjSpUV>+EMGQ@G=)_=njqDBT|uEpGIm zxH+#l;qUG7Cp>rGa$m%Lp~C-X(c*InpJREScs|acgzsEQL|N9y5SUni!EBA086O#z z3HH(0gIQPiU@W};YZ5(t_m@Ao-*?~r_qpB1*z=zjR2uNv-dEQRt7xi`{BUwI{ae+x z+;aNI^-&+;e;o7loIm~UNF=f4Eky@O;Cu~9t2t__AWxG(^YEQ`L&43Ok>M`V%hQX) z!nepJ%9B`WSX!VocX}$e>K*CgkkX0L!nESFwDW1H;b{lLPq~K2$X9r;3YKbQTJ>A& z15%RY_{|#421=?9OZ8bbOPVwN^vJYe=?C1@>{Ur=3G%DT69M6F(reR8zDmnWJMEEn zEc`@xc%uAY(p7V$3o}bcNhM!J)Fh>?_paYiyWyJrvit|>e(5~nEa8EOn20&DQL@+! z*9_N4Z_5&dz+FOq2)XQW&7*c~{n+)7L_U(SHDj3UHQB!-_D8%b{D<&c3%<^TJ7m^x zsM{cs7s`)H4@rZB{=(#lgot3-R9Q+!XhvvcriBUKfjbHl6O_1%&@X7FrqgZCQN8kqAHGKZOTFj)oL^NIdGks{d-ef26-9 zU%w4k9|^f~?Ao!~`StVHPl=q8u`6SYY_9CHh(i%?2;UZdXTjGi;p)_kX|nfa-$WdX z2oTN}ejkz?a`l+xSlw^+zpY;xxzdua=Lx@;{vf>^el5Iqdj0hE<0Hps?8q1?n=Sh^ z;y}bK;XL7f3%(A4tB+-P$g179CVZK7@K$_$!XLukZjL|aKR4{{jedFlBRrpp_N#Dr z_k1Snpk;}0w~z6aYc;Fr=`2DRQswU9xjgIO4fh=hr?U<=#ebFXQdnVg{LlXHhZS!0 z%lCi6b9uDi5Kc5pb_?>X4(EkM<}fACwykV659{q1lt!w~!XvgMe4e%VR{R$UkA}U_9Dmk-cGwFW^M3Jv$n){&yzA~yc|M-CxY~UP zCwdr0q$gKR@i`#=HyuV?E!C&Z~5v;`v_I;v4SU6aJUAxG8>D!m~p+(e!I0QJ!I` z9OT86JlnXkiQFT^v~-@(&x>JgXXAQcV)wnh3Oc0f8ZvQrN?sc+T*WI7^qMXXM!QJm z@sVg3i8hm-(!=s4)M>Pfgw13?+M)219^u==SB9(#kuLQvoi4qyp*STiXG7{CX_0@i zI!r9>-0_LR&fO%BdRVvf)9oGq0sBYGws?JP5I0CXYHhglLwm==uy?fG&JXP!{dF&k zws?JP5D&rr(XuUG9~;EqVE<_07O#&D;sMw{TDHaOV}qCm`^S*T5Zw-NzU-@r(|ThnIMU@zUf zw+iW?3Z6>p4B%XM|Fh@ASx;BHf1L11*3-A*|C{iCVWXSlfAoJXZ1hIIU;H2Nd^p-~ z=q9Qr#$hR|U@Du)dHPq+Eu(b?GHWETPkX_jL9v#o% zV%V%Da8?9bRz>WLU}9_9tQzd4d-ql$Jl14hXFS%$GrBoGCShiDUXK61tm+E)z_8|9 z@sm8GH|Fh3n3+|b=RYB=x!Rop$+G_8g|e%i&JtuWxEMBTi4IM;Y4yyMHndsc?WI%q zUm+cuUz$1txb9)`&GA3^za198(eHx)XivXrze@LKJpHnszTv(t;b7L&P4QnQJUw(1 zy#QNaKVtxwA$hiKW#@U0+icwQGOzt?TNjM%!riMtOt0^9`e}3QgY8fhX5DE7EScvT zPd}~2Ynb(2C75DQLm1^XfFd#g!)CM6Rg;3k&e+p*Mj?gngj(!|9qQt0cYb10 zFo68-{GK5YsDWf$?6yT*RIQRt1R&@TMtKdSh(jO4X1mhiPj@+pWfW5AcBlnFoDlMM zml1i}!}rX9Kn*10YTh1|5qUd=QCL-0=o?q)&c{2ar%~LmNSuqEOw-Qg%q6{E{O;K(Uw|(kH*A?mANSwWrZ4Oa(11S?ocy+GFH0_DkaR#I<}HOaABD_BXrK-Ojh<;ikZ zQg4toNqDVAn6y3-ZLvUmvWi^S`_HFDemQ^kx67j`9T3MfJV!E<-fRjDPt?Q%~LM3=MhP5B>2VfYIj|A#=d)WC|IzH@4nDi+}(+ z5MvO|0(}AoaB>H$8W>AbHnT#+^j|SpJsDJg7|IaqfkIREPhgo`FtSXTL3Hb(7z=F0 z)$7pwQ4K)}VgvA9?SmFLn6;J8SZ1A99xS#D98e`Q31U5QY5W1u4zxEt2b38+x1Ne& zGpZgQ_m1g6$1YfbgIZfmq)9@B;5S)3)-(05bVUYDFaAF5Y@Y%`2ulHw3ZGSiv>20u ztqB=4asaZgU9k&CKs2@&^nvBbnfai{+8g@7a>3POpvT$^`oMDJ%yiIW?G1fkx!`It z=&@R>r*j8(VZ*iXI@>7(>p%?2a6)XohHpx(`&N*%@1EfZ} zgDXaN(@5C{>s0vOfHh~BhDu)rGhh5g%qkZbRj5GPnyFecwy6h3%jtAh0WMgImL>+7 zXGXD_dq7~k17PznjbQU0zGntqdmtHCYrk%XfP9oU$UF~WM*2XC=tuw}9;=ey8Sr5` z(Rr?u=~WVdDEErzAIXeAX^rNq>4xcK>G1p*TV(T4NN zIYRM8A_&=ZA-68D=|XN@`O4+o5?^G~h1|M!hA&TCn1YVlg+tm)gkuP z+WANx!oYH7Iwtxt7?qzJkN#g^q8FKIt!X9LyP8~d3)Gdw(t`k@W%`c85gTxEH(o|_ zVl^le8pzcl47a~p^}~2%GiLBYu?I6Ji%rxJ7RRW^&R|bAC-@!w^uRE(hI}jroV-{e zU{iZ|d?KEl78Cw2Zt~aJd=&%{tF7@c!!0=-KJxJV4Zuqxm=w)Wr*-jyC2I!SzV3Q!h9mw+j<5 z9X=kdEuS&yqCF&cbTP3Hb&+#oW~iLKuTW^~(FQMzX8_jKnDG1D$gymV}xPa)D8 zY~)xnmt$iyJ2isubn;??1Kj|rW=kl^V!Az@In8WOPF`B==z^LH z^8qH{u+orfthRl@&W5N&C&GP*+s>H<^5@aDU5-CTc$$xEaQA#B>tMC}kOIYzf!*zw z#@+4PjtEE5DF_*kKMyio?9?F}u=|kGDF~U)KUZckTV!xOoPQP?&p(GEV0rNKgbO@P z=buc+g5~=^0cxj?N>xCpu{?rvsPn9c@c{SzPJlb>A=9pu=~ys_WGHk;jfwq4ozPpR z!%a{?c#08vYtk4z=|DP}9h#ThjL=()kw?1{obF#ksS5ase66-f=e1Yx)x`p;?&q82 zQTf90r4!Qjhab-_eMp)tUqYSEUX_#<7ruf5DWANw(*bFR!cT;UZx3H7T{TC#)Vp+) zRI;HsC2c*m>ET4YA&OgTJCPSBe8_6}kk;k(&z@Y<6WuBu*;WyED3D%;aS?NqlXjb~lNWINgy%Ulj9IHRL8OrPHt0 z$kbU)aVdy}ln6cL8iJKU_du{R=pFzoL)~K`7pO;Fys{+9lcC`WacFMG=s&Lb~;M{ zOG_)9vY77>#S;gZ{18Ta`bGOOU4qH}C6@Zq9}>GYA$2qZ*YceITt@pN9fDEmZrt#F zndN}t{0_|xrBR4^=$$qV#S^e0ohLQ#pXyG#5~c@__rhW0Y2#rd9BVjUIKP_A*BaIC zUP323j#mZDK9K89;ODW{qQ#KG-e3z5i5D}NKvuDd&0K)gABm`P0Q zEYt;qBzu_L@dnCZU)+rV{ep=DPPm13YQ;+J$7Y7luggQAx_AK9Il7UM&OwJ@6(Utb zok`!Qu(j3hPIlQ0`|-~D#oy4T9h$LStZze+1JBg3wKv=u?<<64piKvr3v6Y|!(0js zncL|OcHTcFtGW`1Jq|$SaIlh!#k)kE!6&Ap4Ze4x4Z661Inf55Os@j<#E#C`(}Xa) z@x?-_v^$Na3t;}wT@g3)$T5y(arJp>30VDlMMtv6%A;b zQ=-mFiU92(9S)>dn2-+7Fah*xbCfzD1K=4DkOA-v{z5^*@s4bs@KxbIgx}f#)FAPw z{R&LF{3HEs0BV>E`{F}j()G6RyO1LxSB_b3@zwQe$+6nsz@%$sZ{Xu#;+;WSrE?3Lp4)8KV{;5CNCzCEzuny%DYD1Jy8W?oh2HkTk z!vg?3=w%s*=ZgG@^nmo89$`SACaASF-_p(FOrd-4;uxC z91`r3M+ixyv9#ZHcSqCqV0QO?Eo}5{etS;%kf&eP({=<=al(hf;_ZkD?}QK87skj5 zAKK`b=g)LfzX{Uhgb&#lz{Uw5VmP1Q2_K5LFI+Kz6stP)bV(rcQ~mYxoz=%uPk)^>xq&3U(1S%diCEbSqI{7NeBgBM7M}(l5U~| zH`iczgEpLAceQPeCW7z9!drm86=#wQpAKG9N5W5LgGP84+TU`j_%^w4e-r&_E>NK6 z%09DEa4Z=@Ym#GiUBg=t91G@TZ)&MO7R(9DZmYkTEDXzzZu>3SOHjV4?WQC|P@c7^ zL6Ue|qBxZ3O0tWP z_{i}YJ2FPfX3IY9E1EVRzD|zt7X}FrNsmeg#xv7KQkvlfr0R@Lq?!=ws9+}QrGXJ9 zNXtW!Qr~b->0$Yz5YTY%g?i~t|I1%^AR@+w)?QnIo3}M%nCvxB+8UUp7rOeN5Y;^z zQs^P^s2g}(HWMPdnGgot0AxS;QRyLRkkDV49FbtDaoDFDzC3;4a%}vDKa@662|p8P zSh&d!x^C_Kd|qMfYu@9Hl9>*)hbNCX}i!4Muk77-wv?=|Ff zqD)K5L10xhQ**9&4y}+Xu*+J`;CX%)fO)<`$BQBz-2Gq^{N-3!?+#5vK59^58~_xZ z2zRDeK^_rT*f~C>OoxTP2IKP!>nj-a&FKu!Bb%`LMJ=@NwbGLso?#Q|Rf^E65Z&XG1EO zLVL(WVdrj=D%pe#SMYK6uHRq-^`5bCm$CI@ZR865Hf%tTMEF@PgcINOYB_8|2eM`C zVbd8Xn`%=CiL!QnJ$lVwKP7TX#;%Mp0}Qde4*?q89#HswNOH*49zrY@d>wx6Se*qC zle-sC86Vb6f$0});aAbqSvW^%KQyMdK(ZAWNc_Ykq!Hq@gzC^#X-u=3{c!M{4Xg9| z0((0{n~M41`sJoa(rGq4!f>sn*I^U`m`WFvyA|JyHJE*)%f$S@Zx+NgL{YU)=`1?{ z5~{VI(Xa^B8ADU@uaJ%vgY}#8{^5miafVseF_pOJDkU^1E zrjjeWgmLVL_Ud(Qq$g034O8h9&vg579JGpmuGUJmuuvkDR|1@z=H~eA33f_&Cj?L8 z4OKd6JrN#ZKisk`n0l-8kO(Fl1cRLXNu6j=l}hHDk>_tmELnSHLPjIUX3n<;h%5>>dW<%O;xZ7YjiCJ^Ij8CSE zWs2!{_7?0q29Voc#0TvIThg1fA}U=6<#s=T%OY3BU``xR|e{>_@(yuU0ZpbUBM zFWcE0(QWbk2S5G5<8V(5t*wZm6~D-D_3QI?F9^u>da-EM))z?6{|-Ade$65B*XvMi=S}mZpNoq1ZHl<~qW|ekdlS^>;gVM{>PmBzIOnNO1 zETSHf7N(u>2p=!~ZNu^K@Zr)c8&0@}kCRH2A7qwJ02bFc@QFIFTtR_to9`+~_~m2p z0y!XCy{^E$u7IK7aM-m+|i`vLgPU1 zwBcQCnM3EjtZnxs!BTP2m9}M+Ozp$ZJe2jc&U8x$T|hD_pCo{_5yL*pd)+JA@0`CV zQ9KFG3q~`w7=8n9go3zjctfo!(=~Dn1KZIC6~M&qYhJNCHvdFt$EL8P#7&|@daT-g znCCOmerJ)p7&>+M1ERMw?IU*>t|P*l;g<-`?U`GQfj7ct?HNtjoFZKQ!+0jPtF?BArl z{V{STW7tQ#VWFJ&qj90k*kU|B@J4VMr#8;FaK`eWCmg2yh|I}!R&(gs#rY8s`X6Ot zP1FPzb(wF0xVpWf$=rNG=%M?R0A$YK~aJ! zU$E)I zZko8kcd!DP4?6#`>pE!mYeumV!wD}C1avF`JNaibJ-RX}ISo9P9zqUR!=3-=>!2X_ zh-pHf8J)K!!TFDU*TH5lx~XIKj;2XvHEMdLz}J%{pGlRcyAV66TfXUm#CEDxbjFiN zq?$$P93qBN^3J#s2~-m=olUrq4Vnt=Mt(Z0oUIU$aa4n*syvz>dj1sQO0CA(Ax(|k znsRIlmNTH&PPl$2b`|4~{P`5ImrDjH0|xZ+fa^V!9;7Dqi2_lSLMAL0mJR4t0@s%a zWn|HMRCQ7KQhdXJUJK#+h4>nrP3bEz2Ft|;@=Ac~6R;wTzvCBO1%@g^$$`9l8Z#B# zV)6_jaF14IuOmb;SR6G$>7)N}Azo$82MKVGFlDxaTKU#Kj3~<_mf#Jd1Wcg&kXu4# zSo6UmxJMk8L}^RET!wp-3aXe)Cl=u~x(|JonB^Z#V{4XN$2QY4{<5TTts|+R%Yt*f zF|EnR*~2uG8-rgJj~L)bZEGf$1HXNJ3-=+i$(35ez6-TJ@azswZ?MmN6_D?j<&wB2N*VnsewyvB znJf?X6VIiB3I&C{U9HK?`)GILO7UEk1PZi}&ER4Tyb;Y+f#1q?36 zz#BoOo^c-AoXaaqV1Aw?3@D^x*Js2hng`FrO_ z7S%)nkxUP(iTXoFPb{n_o)0RX5x>~)xa+(p-VMl14-idw?%Nam2Q=){pB;Sr#*($W zM<08#QVqsf1+<3WR6xH%S1;AHaIcBuSR|iTa$8xVQyd~uvk`C1r51|IU8pu*35!V3 zv}iR#I*AqOsVL>2BGzb|_G+56$6W{)2=^4Ti7lEo?a4sGlWO%XNg!KcgIr6Mkyl{X ze1KSo&p|t9Q32)#TWVjGFNvW9+6Ib6KZS>;|3Mk*GNIlOGPvVdAbXB{Rwa=EGrq)#iv5^A|+ z?hXXvrtSyl#98bK!aroyx=ZgWnQ)872{h+k|R~0QV*ecl&C`VD!v;3mUD(< z$=6|UhcGg`HCw^0V%#3UMvf_tZp) zb?p?@iTv>O_(4tv$C9tVf~)hf?V=l^H}JLicbs(26$nn%hA2W>JxCALSJYTbzRrZJ zWx_hCLfRTmhO5%3>6jEt6v;&a5TW{>lgYVi!Pl{HHN>$*RiarC+uBc@AudOiMb&yM zyjxvKS5+)E%95`$;A&Y^U8W+l6@po+6ly92xDrGSB7Zy*KSX2@h5E0zqxIsglD{1zJX`k2VHx9sEQpUP^sf8Lfapw_mga{Z=-i=@9*L{){Ha zcK98A0!@`w=vP$@v!tbo+K5mtx=vg|D10!>uQxv@uau30oJwG{>)u$OW%D0tlNz$! z~+(0L~dMwW=k%os>ZjFw~|k= zNAjjAlg|o%=1pst6bl{_KS4=`aH4Zq6XaR56wlGUVOHjCQtNolOxgBKbzIuf`csu);W<^tSD%*pXs!TpF_>Gs^ zE-4j^9lD9eD^Q;6y{HMgH_XbsO=?}`JG?fmEY(vrq}$0RMP+tZHLD8PUNY0RuOhgB z*LEv;nRrvX`hLC4Etpi;L)syeJeCLZKmu38Bys#Dq|2 zXeSn()R<3wh?kF}l%kS2@**$GP1&G1&PLHC6lAKKB35yfnJf9V`ZwG_>!UZO_|IyH z0a+fd=_T01m3h_LCVFFv|Ez}?kmcc;UV=R#5DT&*T+>UiM-H(d%fmIj1be(87Gy=Z zrk7w(1H^*5g=_kW=JfeBRTfp(U$C;@Xl9oLY<2ylclgA44WWeQ|w*$a>$88>ITO-9xDv2e@mBM71jiv2|^iTif?M$H*JCAep;{&V=bLM)eRv)cuHn zd+mU)djMhft|Mrj8W4ORBcR zVG7xWu<{vC#$|pG>Yt#G7&nr3(Y}LFMa=H-x(Xr44^2@auOE<@%0(w}y`efh-0x6Zw}bl+Br{rh#=b=sCBFs7kf_$@5D zP1DNfZ;oq^BVsbiv%c9b$~r_yfD>&*NPrVFw@w34RDLsUhIW`Mwd)6p@a4io@&pbMv>%PC~fq>KI&cms9AN^E@(hqXlj z+`j``-{)y;@5p>0j6`15tTvp*Xwf3n%Ek!9+v7+ZusVz|fjZ!XIKm-5w@g^KQmlfb zFp9xw%Km;z8~}i~Qe4XCwPF8jgW+_Fh7)~0rA^c*%7+7gtN1XPC(1&ks}meVy22X) zs{?910OfH3r5>PLi5rv1IL$`7I1X{J0L0^i-3X>(JSt7ps9;_jKzRVcV;%P9DiE!# zBQo`Xj1iW3)mceo>H!%e1(uX`M5Z2)G2|J}RTEUnYN}edI}`!g&0;cHw>jl@IvQYO z3i~4R^*^WFfv%|nI-qU%TxiabMb-8`YZ&-kX3ja4!AT*tJR@%W!Mkw6j}8cmjVA@R z1r>a@o{f+R5Expmd&2~Xf?4OjW+#%6k+aF1Pzumd%tC6IT|!3UP^>InJ;|T1$#yfw zIvIL2Xgp?-5W!l6+&d^3(kGe5><-2eEH0jv;if2c16GFvo{-wxX(3)SLFQthLvrpW zM|v<$RtkXydD2LS?C(6yE)SUSq<3U4QF0fcgfsob*CE@lyG8*)eb_lTt=0+{A}1|Z zVQ{7y2d8b-5Qazz`;%e7`7w%^Ol1rxZw~H}@4Y`n8)6a;gU~@FB(_r#W7NSJ2pME( zLGpJ3Arg2ZdP1bl2romcjFwP)YF;v~c5O`pVs4!bd6ti*ycv}!rQQ@ky1Vdgx;*Qa?QVnwXA2ArLq9o$YlA60oH;KbA&dmE2$>?nh88Gis87liL!A> zPE5bDhBrf4SIitNmKCaLZP=*Gn$<dI3O@tE-LX3)ATyhSSt6Zm1ljc-f- z)Pv5q74RUVQg|$=g|XN;?X93XEX6Yy{bcF5&NkMZ4?bG!nTojQ~%@l zFuiOws_@uGas-`q9yjg>hqQo+mB5jHLqH~A8~G(Mw-Yv!$n)B0x>!iYA)I+GGWS4^BgF!; z)ra0_k^W<)wL)BNI|bq>CHQizWR8%RZRbG=+3-)YG6lN=hMvq6HnVMgFndB&`HpKa z4Z)$VlhYr%Gz(U{hm5P;p)L8-Us0@td#ZR7GR8&8w*%6L;ehACKoB!T4$9be5;EP7 ztTb#JJ?@f)&|tu0k@t}#l8s8B2L-?z$3uxq0MTO@oA=HkYOtEuE;TgE=K@r4umKiC#_Tsc)-2pK2lu(IsVR5AM5n-syg!N_L8MC+tW~HdgYlA9dg*7 zu0Xc7Nc{lbFwgeSR1|Cd3dtGs3~^m24rj=lJoeq%O14<#JC=gLZX>-HixXq?UeN0? zDUQXU0~R;%ONT?fNmMg3VTY3yHWKQ=xafcd+_pF-F|t5}!#Rb6E`|+JB?53*x3R@J z2+!Egg8h3iaJSwd{dSm9I;U^|2I;rKjC=tsRn*q@|FYpy!HtqCW zY;3J%5vwj20xhPMp!IfM`e&l3jm>UmE2lAws>7xaRcZHKF>C+_#Y64hmCVVC?exWK z!vvjCo4d=L98{|yG?-1QiT2K!>)&BXrG3(9!NpL2CTAOhJ5@hsT5T8sKiLNV^}C^? zH<-qJYaj&c;J$g9SKzmKB^x-BPTxGnR{@VcCBaRumJ=E5vxR^aJbG;du{WCvb6gp@ zHqFfSo{G|Opw-26#Fv#Ysksa?hclvqdILle>vo!e2qEo3C4v!R#)3SKHh{iuiBaE{ z(M7Sg4GNYU$EM>Ur26f=_4Ehz{QH-yg>5}?BmVk)kkmUi)Nl1e3q#%?IVHI{b;693 zsr*@mb)&w``R29C;lI54Xd=n`QB4)lDuUj|r`LpC606CUmua$n9gF4>O$AZP3hcNT zs1BXl<=7_rPL=bn=yNKQrup^z%2Mg2c$K;ZCYN4_U}nUqLRBf0f`ij^c*j13j9-e+ z!uU&BQJ|)NOMBdf*rI9k1#NZY7y;Vqe2C%Z`eq~fb+DKK`E_J50kC*4stLj3L2vyq z(NW`r#X+=n0&w_z6x>>F8F{&z2Dp*rXLf?|aF_9l@iwwV5J04L$V-sdfdsiDNX$op zXM^6)1GyeD#_SMdMMVaJ(lhH6v0t=<;n;^!U^H3EYkQHJ0C4tH%~7OYX>;?uA+3|B z64lhf&uJhm(Vt*A9?MD))4hP&3|5!Gll)~nL9eo)k^2L|bO_Hm2+y8iYkt+4+BhtP zXHt}WCs0hB5FW-?0YG@FfnfrZO?_s&q*O3g%veLCQay49)&Ss=!tA10+XlqC?-Y5V z6qrP;uq(elYwIJG?ZHb`CZ8Al#yCKaTmVu!iJM_ns}!FinuG+=SOffMH$d@NzC&%@ z#nxQnA@2;d$wPm@{MGZ85Wqg@NoMRBbHF<)2duY1YDaew_Y7wMN%l3}VBQC=W!|txPize! z1FRGl3W2LV0M7FjH5N?KbQydDUyFZdrLvG*^agIA{~IzVZ4C$he;@JyeSGb$khZ## zt~&JqL*{1TYd{vK57nGLzHSiB!XxoRNL0s=IWxl{Jp@z6iB)BUhrqx&P=7B(?sts_(59PMhndq zuc@cX4{+CliSlkxuFGzh3@Y@kUzkv&JlIA8`kw+5tH>B*?H`5KKZ412St}Jx<=yqW zQN%yV>J+Td30AY`rY6(hH7%O&m1e;pFw!4^W%EAcvU!uk@YZ`RDM{?-t}XHfiLy<| zy1{8vP(N^GjG@=7sIr5mnK?i`nbBA-jXEiYPc+KBYFCQqGQ2ES>W)bYCLIbqyl*#v4^NEfk_rZ}}Qb~b~3+L*VfCR??4q=yZ zezg|Y)=fRBU!d0z!=AKZaYa7qE0X}wK4u8CWgog!Osm;@F)&0)nHiJ7dOE3u{0Gi- zL(~}9$%cznus_$qh9vD43I;JBpn~Bo>jM>~lK{@nbm*6(0lik-DNsce95O|NqizA# zW+a2%w-6AaSisXqgPC0vE73kUd7mK~?0~jo)2yttp^7W3Z}{G{Q0YeNRLQ>2pD4&&M8{!+EHpom}zy$&$r_+--{p*6}9SG0*Kv{g2o0 z>sKtj^i)|#V5_%~?x+!KDZbW=?kFJRXmtzsSC+^tiipu{Vl@^~z(Qav3n-G%(gOHc z4hl;D;cs5%rgMwv!kb`~kE5zI3vs}&$gxx6axZT0zyz*LSZ6-UBhnn4$Qnr02RNY$ zzzODmovH9{4J8p(qX%q4R9&XRB4k4WmM}n2%56SMVi7J3!V{?^jUG7!;ytqN{vDpm zTqfDB?(4H=0616)7{SvB8C;+V8^?2@l91SJ@@5Kl z)oDT^V7{G+%D1S#+~@YXhr4-5Upt%G;a~}&u~<{slR0#7q$0P(9)&~ zj<3`~+!R=r`nc&3!1mu0LP6(4F?vDY8F&JNf&X*^G+${LeaCD?mc*Ass70c~*+OSJk z4O1$mklOLYz!uKPQuOb>I*oDJb@2>t0-2;^)qQ){=FaKRv+eLP1f;Hn_P4 zkw2h-&}*QgPMvqC3{DEEH9--E9-#$bm(Gt{xud74>7Vs|g&IEcz%3Lf)bldXMwzP~Qpk-Ju zJ=zl~1ygYA27+O~!}6Ep;KaHUCUhQ^s55!4Kq|4rsaD@E>>Ca;2f=~h0p=hsR2wn} z$=7ZYHwsALd1z1a%de8^s;-)^i1B~)R`Ou6_P4_9x5PO6IV7E3gvTf@hEm@P2D6$S z(m`pk`fMMS*@i_Fns9jI8E#qOs7vQsSfJE!eGaduDBHh zbx>)=*G!|+^X_XBn~7nyI2jV=3R0e0U#q{iUU)%EHy(7FmEvjJOVGh9(RV2Z4e@wwv& z#3%&Rlw9D^Im0o4C3|TNTU`&@kb1Yu-WaBD!2}09V7*`gBp-$T8t%B>V0gjf#tF_^ zleONedMHza9V~A+`MxX>9HW8LWH*jr7D{{#eKgiq&15sp+6dy$hCyoycJE#w%*-!S zf7naAy_3!n%*dUb$lIk%W-xf`1@PINYvfKkB!H_;6Lr*pkabYw6??K;!IHLjB4qEe z;mCkdJx+{}6C*U>PSgizC+O~a@;EUT+Gx*Sm(;>a9cHnIrN zX3_;oSF_Ko1QDIwj@&446v*)fM}ZuZ(*T>;iRi+fKoJ3IWgQ0GjY&Y^Si%Mh#|`WRAFL^A zG>hq^6YGM$W?4-*Q?14P9d2Ak@=q3 z3)ThyZ-^3Xbl8&40r7wIvd#dYmy-iIkcZ_!Lg`|(U>1etyuh>)SaGL`6%*Gv7&{?j zoKfPAdBD)_$V9}GHVMc&rtwzIeX{MD$~OQC!1TtnQb>x~K<94#85wUG=d-EEwu-@0 zO4A|c3V>O?UY%`Ji5Mo#)TY_@19wf42+XeESFex< zE~AM?u3AnJjZvibxC&ouQ@O%DVG5W+|ctC7VNGZ!vMLOM`N`oY80K@&pmH^rn07ZJiI%Xq_tQ04! zr}#$=TSF%thw-9ln0Q=6n9)*TEAiygMbi2YOd`89LYR+b~RN%hnUNZTUGEU zU|hj$OR!e?=E7VyX| z1tE3jYU$pwQSWD70%*yk(UL?AkA?$LIwrmV#QC5QAOIzGRs8EOP5;>cYsVwiK9REjh31cvj`;P;eJeDRXmy>orKW(dA!#*7+W|%p z|LbVsw$^G38o8gN+IIsw!$LmL83beuA~CRm#L&hoVG&3!Uz17KG+f4X)Q36hroDH_ zE|uTuP0$r-bDPQ!v}$L|8a0&Ss0jlAffZpcn1BlFUX23+_Gg0hPo^TXH58reaByugaI~1(sicxmlDzE2jb`rI5&K0 z4zY)FJxR!@6N(%Sq0_JvGF|zi4&VY(BV0f#c!J>$M^^aC5V{Q?3xpS@@g&ORpY4wR zYyKes^Upy<;>6C0lfg$Ax~R7wOq@R(Cr(E@!q7*)-#TDe)H;tb#7wUOOdK3(TGTR` zR74Y{ReC0wqWr3tY#b78)+5^;Tf$k#mLk?=DRM%o{Q#N04wYoz{3%yT;+SI9L`{lm z4NO)B7x5ySlI_57ClQ>!LX8RrPKdRHoDoP?q-ZYNOZ(bE7afEmko4PRg_hKUFKm4# z!`Y7$vJZ1B2s=qm z8J+qV2I{vh_FZ>3j6bQ~w=C7o34jl_TL3)47ORTS!9-i6#Y@QcOak1wWF|??1TqgP z2+1+f(M;5A#2a-e6$Dnv(QZO;20*DGunM455Ll&didY5aU@P5Pcd<3z2tzYK%#YKH ztJRfs1*@)6mRNNmJ)W-qXamFcAdfZypo45{$Q30cZKJ-bLkRf-O2}r|o>~eN<5YRq zaMSX0JTu`He}N#-2;;u7%NqxD#Q_PtD*&KF=PAQ@W2{6PIiz~aPy`o=3Q{v%NHGcf zsej;1N7Z}}*z@H^*5z`>gG3H#CO0LYX1iP9)FeupWdtHHy)jD#qru=Q2(_q#0-kgN zLB_aE2x9$@5Hps?e-z?2M~!xv@P_H2C(Eh(5)wOVIPA0w83xO1fZ08``_RMq;~GqX zoAEY6)zI=_diYPeLTGi1xDwB$$R;seKx_C-IIV5TOybkYz#7yhVsR~TL}Q%ETS2?Y zO~+^1#4kCF_Njr$TY*Dt$GB*px|CJ!0u+j30hzCj4%B%?SAgTRv*6qX*m6@+C7zTX{yZ@mk(6g;f0u`OVhjx13KZV%{nz-C_2gjj?Z1aul5 zAf|}PJ6%AYg)j>A-UJM|S^3mrHaLSQMYj{O#6Z+SofsGncT*1MD4bO|_~cjfl2N(R ziI8PFNElW!K_)SQaP?7nFf#=r>XCX6nv{%+cz~33M1U+Hdh{ZAN12XxcEWqxFqtI# z3@y_gC=M47eKC)|^dBArxXunuJ>V8}Z&us_XQ10%^O#-2Mg5>YRlYTK2IZ`W7~Yuu z71h2QQdc@0_csYqMlszs1}VrICr)@X7Fh!!?GMK>#v#^yWSBUe9zcw@L28QxOH9MO zX-7aDG)kR7922YxV@(2$LZ=dCeMPYS0&!SkmG5sVkfLk^@q;)qMkjWa@M*w~Bh`>P z&5|VWl5O@y52_KL>+yRKZIK!u) zU$PeejssR*J;|H&5nXkLPpuT*X_wTD?F^pU536MoK#ZLHtXLBpi=aL?S{gX{Sxjaj zc3Rgdlee&MW1`{W|Eahp(MX1yK}m>UZT6`s{9A!$@~vdcos{fAu?a8wv%&M(0U?F< zh9az|$_|)JpTq3OVkZY&4NTguPRgK4yT`bfbYKgm6g#(0Qt_t#W(o{F#&AgD<8Y30 z$atV)1-{fu@w&h>=(VZDGs|Bc(NoQC3o8*f^{65Gc4=E6F(jP+h2W_-@H#n@U;RULo|!&FFMLQ z2r+(u#;b_zbfMy+b`y>m5MU7jXMQX&@K|IbJy0B)=I>Qp45c_qpGp>95<{N#&2~}N zVJAI_ofw#Z#DNFM#y}jA#la9Fsw}Fu56_4wSyZj9>=+aX5`Rc>QA6moeJFI!Ih<@w+Ejr+B=8Y= zkt_2P!w#Sq1JxpuklFK1 zt4XKP7Sk15>M8D<%Hhmzz7_GuVT=MIBYOfWwI8ESy@)Rzb**pC&8GTDk|!pWJk#7t!X+fLfo4!Yn5#YTGO zL)T{ujI6%1v6+<=46USCqHXldiAel=c=_WEAl_btdD;L2n?!}#)Xa*!5>`IkHilV8HCkNUa)Ig_lW5*#f#}O8W7n5XbJBW0s3`1jLB!PyaZg0 zeuD^a`Ucnx6w_e_tfehc!w1c*ifvT{~=E$C{UZX52g$q0$Q6y@8D}&2=UDZzG#l-DxUzu`91v2%lKKW z#vCfgH|w?^I9#W1U&02(GVl#_1N*=xOwLsc;pe>!=xo5Z zXDhgMT(Fz7kz2zV;*dFn3G>END7gEjP*ZI*o@!u3)&Lx^0CU5VDBl79iimI#O(#io zNQ4)`hM9ViO7ClOzCrt ztPHjn;l=TQu?wXn1&v%->2^YrG+Z5gC#j@BC$r-y%8JwkfnlwifiO*>_M;kVFJLoe z^1xwL6c%g>0Wto-UoX4^>v`lc!e|Yl-ehO`JMJd9`;aco_X3RrT9a8@X;ugv-IdPO zrr{qkt$`V@3IcN~$V2F(M=Koi(3>=&aZ-^{nFIQh*%4B}h{jop&%*4_o$FUo3{`2r zhD`q4q0NbxSSCK#z7ob!4!AriK$Xr0sI`AW&KY*tFIEUpV%pO503C#; zZ4L#JLvwm^zVA`uX#IzFx0E5tu-wP~RD&frJ9o zLUp}1C1^vVDTYF7)~7Z;IZo%rJ&;14vA z-q|MSkHMd}1+E3GAqs$CH2^^aj1_%n97og<1rhr7= zc4r_VfbKIQWhfzC=`6*;#O+x+essfg(H2iV7pz^%kUs{gL;R$Y z)v4EADh;OJCN#&u&B824Yr`c(g5#|5+#`8;Ip7a=5d)EgGj_t2M`m-E-lI)8y~`5ji6O)k&Mzq zBg9HJ%`;J=HQxex$4RvVxI%bJVD zj>+HeFL+kso`-?}_9mTr2`osvOApA$t8)?!8KQNwe6q+K)D%hIE}Wadm6h(*MWR`4 z7&bqGqg1%%-H#vqG>}f>o`-W_SWeOIp;54d~ciV(H-lX$t&ru4&{S4-S%%E zzWeic{>A#cmcpC2s(A*;MbOvK zB_sYbxVtz)Zt`bPY9N3L34)L=2xKED?*n8&TagSX4P-!<$;L|dFbRssHlkdVIU+$2 z=z>N(w+fXtR#L8`p8Cd(=1~r`|W7gtcrdlM2x z^q7e)j}L&4kSies&F8&?yAi^F!=t%Kd^8tPlaP5wVr6HM#y7+$Sll~vL;#sb2g9L8 zmF!{J=h<`dlIi26cR&K{eGzXdFN1qMz`*$z-@y42<^fH3TgOPk5D}KO{&6!3Gqf0G zAr`>Hne?pdb0DORzY)jN`03+c~UH%9(X)%KQwBv`YoRCVIO#2K-hB;yY&U zHI0D+AD(&=e0aKu{R*(D*nqZZZoqdmODVmx58V-Io#>qn-U0yVE$%jAkiC~M-(Cwl zH?Xl1opS-b7GRxzKWzZ-18FTZ6xGb`fjCg0y_c5Ci}UUCuLj$i@x2{@1{#8Y$ZD|j z2_p_Q9^5@V`CJRce6IMxIf{`Pt7yX$G_b%2_fTH%);LZypxL`ETlCJS5{Fbu2vFy7 zXK8=Zj<&vJ+2RW&!QMy9YoFE6M{5k$7*Z4@2-ER9`{6w910B|xiNg+fMbWaOa7_-v ze!^b}xr-WB3SrnmjJrLwjx9Zbu^mYBTF_FF25DY*V&0j{sD$?@qK$`ZCIY(-+m;_O z@sqrf4#X>@YzfCMZiA$k7Y24_v^meefuy`tI;vE}kiihI zw~u!NDM3ws@^|<)kdh`p*!vtgc*80G2GT?-iX@pB!a0zG-X~&8Z46!43TmX79aq-v z7kvXKe*QjA;T4IQ9h0U5fX(EG$1$yfo>qGRtOh4NIYSynGczK zdiD?_5o+KpLx?!JE+9p4sV!?$MHm-_z6LfAk)hA4ZbTq_H~OHd{eyrU?)`G6{T`uv zM<|&_n5cj#^01^|j6CFEASxh6B-9gI6GDOkDHakXS@`{3%wPbc1IT&g{u;&lXu=tF zWSX8#VP%}AoawG)s3yklmqOKZugN{3GN2zhsy+z%5q=*MRDotn12I}U77TaX2Q;lR zX9vHCYHi3>I}}d+iqxxPVevL};zm+2R3(_}gaNz^!o!Gfp9b@sF0i&)PwyE5599l3 zWlLpy2H4O{hP;}0Apa?H6Px}&T?l7DmPbS9ru=8HK&DI$B=d+Wu%SnB86nI|Qbp87 zy`6(E{Xj3Ds6w+?T%B}*~#l^idlgNUJt)9)E^+~R# zqY4|wg|(cTG~~?Tt@0>I+4Dv}hGywLZ88`xp=iW(Mm3 zulfUCB$kK37wSi^A-KjjsZII_l;Yk52(A$)wVBs~ik{x#ZD(>ry8OnLc4il>J?q3F zG|Y>4d!x8eab*Xr*!qiPF#6;H1ZkwPTYO^U=R<|rsflwKsnge_#2=3iv>1noxojZj z5+xlkLBHXyIrsodo(@Ja@ES>);i?y}(O zgCIg+2{ny!Nbu_5!DtpaF9Sq~Si-B2)l|gWn{SUrJD%w7=Na^Yz=R^eui9ZdSd=vb$PsN#BJnRz22T4FV2~h<5z;@Y_Nf5q`L;TP} zF4A~0tED0pme4mRW}H#5TLZ^nBjngqAUgJRmkzse$FQP1=pk#?`5b#j95PXt3*X2+ zw0}$>MZ!#!)=;*1cK(co^CyjcP?)yji8ZgSaDQQ-o4|)v_o(E#?h59jtC2huUc zadbcqWfTPOI(nysTrDDVyfk4x?F7W?2?OG$u_E!j-}!>;)es#2-~F zQP3+gjND9YMAJ%u&S6?PFtos-hWTU~2bl(P6!ePnUfWe}&}oD{MHzGsgAN$$`H})( zMZ#7~|j{HyNr|(2&3oRp?f%;guu)$13gmJ_;FdR~8NZ94glnr0*M$>;1y(461>zfL z5ozkUF<(TcIwB_DmK!Y*v$*X~9*kI2o$6SRK0ZINW?t?b6utWU+a!p%fld2N(`bq+Bge`Uki;(siL2=SX#310+EI3_~OQr*zI(t6q1h zbP@G9#`F@RWQks-@O-AW$0_&Q?z`jG8Q)pI^KWl{KI1!8&o;h!^TaXwXU{yjaN?Mk zzt{QXukLs=?|TCdI?h`E*;3@i?XEIUoqKZG#AjaqUe}YqxnpV@Xwfd?VeAOEoUX2v$l$E!*XWQ@1JxW44`;xFwlR=v76?>kZ9sN59c&K{D;@(yngF*@4b99<=_70rmttc`3Re~>e`x? zpO-yVTXyn7p6R`*PW}alQ6_v_*mzKr>ApgNcH$hZ>9x|VyH43pYiZ^dQmqWdT2q-y zNM|@o*7d;qbsT6VWSzB0qj@`bHLFR^Y=vA0h)pH^i_Z&$(2 zqJ)m*Yd~nY2E>{JHfy6(f^wikkuV_xX)o4$z9ev(MD{HC^+q}9YDW~h-1PW&=T{(rJNSYVeugE$r z`PGf$W{qJU3Y;Us6bJO{!of7i*{dTB8i?Xs;)|x!v9)SL2_vUog)}YA#T!;?8veHs z)0G){%u_JVMm(W3xptKLu*V;EfVw%_b)DcEUrt+8k;5s9YG!w!HJy0E$kunDg8v|( z5}xnKMcv#U`J%6jEDS^fi6=Y_E42vh3fdr#EPx+@+wmY;NJYBlL%sw7k{QLei^N4o z-fPRh!#|y5u`)>x2}|4sX{!Jqc#-eNhiHe)=Kn>t+MLzC0$13E6qc?{vo}v9y5fy3 z89+zvm&YwdGx#SZ=oRbIL{ovkL9pB)d2%t0ZXi@{p=c`LXHR03%(w&wU6QjfBt5HU zqOxlXC^m5K%*KQ_?lQ54+3Y!=u}*gHw65IW$anM8@btf048rAYqHq~rBwjk4jZ^N0 zDFF$&mCs<_nb_Wi(p@+KZan^hGk#3zUx&vORM_6IpQKVZm!@a2=gNo^@u}F28@;`= zbV!dN3+_GQK#P6OB|O17;y?>8aCZv3&SxnsmoVhsvqkTGD(S36O~c+?%*JVQ{Lf}m zw;Vh%!)4A>Aw{>^v%A`im$I8=y2W*CfjpBlVG!#w1dTS{iu>r5%p|R^ndr;wQs8c^ zRtpyEpNSSf*aq(o<-%$932~goy)(OVac8xM(visF5F9K|`8kB!sQ}c;e)(8rJr{}N zT%+!`Q8^Q;`vmR~Bx=;9@D<#Um@U-WSZqtgYFdYuY)pmx1gCqS0@tWqtO{cTsrf!Mq1+!QJAbP`W}e zMrU%7DIiX-P(UbNOeNc#RBuC(Xvu4es0nE66w#&UROO}81M=~x?uTi)4~62P+64p4 zLwGSJ4k}k+)hhcAVwjJ81Lt1cI}_WxP_hem@C*LxpVUr?ACo?mE4xS}Z0qnhlN{nl zfH0Dz7bWI?qJ!T8Bwe)DAH0XV5WWPKlPkq1Sn_Bq$|Gcp>1vvB8FXfII>=fQz2rBn z78)btjKNs<+K=*#8!CM^Rd;E;B<*B_@m86*RL$c|o`0Rol>$QLt)MhTfG<*+4r(udHtLGG#NiN)Y*rR}Z6IU7MM`_gUWhXGqqlZFyjd^~;h=v2HUo6y!L ze94+g#t$zVQ!HWdMX_)+9`nIMLkfe$?1_}8MiHV!I z`wbOAN#_%Bp8N^cI8B9odNhfNF7>=qzF>u@em>#gt0>!fB-)8L>&U_iazL)vfIzQ8 z_OKg*zA7Q_OGS6;*rRSp^OAWWp+z!q&TK<;PyxSjp1j9ImD72gpAdSGaw$>tbClFj z1F@Nm%mQd27S!*jD_hdr=iBFBoz6~oMdsTR$N{JjVz>&qDXuAOrbH=br|qhX5&HFn z$N3i{hsQ-lD~;HS@P3i%mTs!6|!-UiJt0XdZ%HXYJ~TlD2e?H?_O%^!}sn- z79SWpd#L3-?6Fp2E7<2?{3(Wl(-3rlSRTRHYz8AHYgm~&Ccn^M9+{6hSK~5P{u2Xs zdM;0_SMK6bi;4kRnNWKNeL9ft;a?xlIi2y&YfrE8ghBjwf$(bPi{Hx^Za%Vo(U0Dn z&{p+K?Z&;2q#PGkx3%_IwHjXzgjTpF2%Rn~`=^t0dO)Db*Ii*(EApBPE zq&rpbYc?&_cw!(R4I%|>M_X4;u3g=Ka_Qf}6A{|H@SwId=64Cz*Z^2UPEeKtX&^|Uu z;ByE0fsJd~<$us7U<}A2G;tcll1vlTCBtFu zf)?A0VT48g$16r{fDO*SY8ymRa{>awcmv)yqO~-W<5x9TA}UEz{PyA#cC1gjU$H&GA&-)GW@_Ltd<)RumrcM$o!K|`EG^>Ochp!7@ zNd#LE8#e_7MIcw`moV>4Z0|zpE}XDHW`>3Z-1AvFjv!WeN|O+4pDiVA{fTdfC<(E~ zE5r(^O|*Fmy@k{AR5{aK$pB1a@ux6r3~2iu_TAC;JGc~0MJddc>|xTNaJCWUsffTq zwnX6D171Zc*OxkXF>h~9l@L+62N0Eez_w>BJ63|-S{>~7N{grz*;W3!!yc$RG(cIk z9|6?AED^@r_3+cuR4q^{w53u)x~GmPlBjA?<*8ao2F}bNv>f`%a%F-2PeAA=LYJW} za^m%!{_WH_(lw(s;>hTlUk3gMVwt?wl#@BrA@r{p%TRNvjp9D*IQ6>DWd0Yf8EzqO zEf;Bqs8YeMDQ9+)xMOwS97e1zghA5y*vZ)Q(udl0ynN z8FqngBqCMyWd|bcHbX5Vem)dPwWAehb1E?ttmc|2rg~}!AF5e51BFN>)!Jg8_NRSt zXJj7%2;mtKLKs$h@l*MIG077<_{YSNHp$51oJr}ygqi%U_QO645!@Nsy{qKC;3(&H z8|br^8wPU32EGP4eLO;}xDFC?KlBw-rlE#-Q@)K4P7{qDLY%y&aJq${a{D4SarfOS z7*^k{epXfvjR)QnA-?6kv0?LMVlx-`k~B>Sm6Dv0lHALzUz?g@khmJvYjUaWeS1fn zA!`SWA$mG;g*yyOD*i2yFv9RqPD^Il`%mw?Z+?&C7t?yDeoj2`$)~*+(yn%;6@Fvp z^oxyS7Cv?PA5VVp2(2j*I7oyL-uOEtL6`-%Owjc5mnll+wq|fwvzoReEI!TIg|PTg z5ecjU^cCtNuW~~0DJN7ztiaR~DH3tAkK0te0@O~O&Kjv|C5lpYO=Xlxwdnsb_aHFS7bL$3X5 zI%lbnNn{{{606cZU+EH2I(vZ72{HSNaPC;GI9Un7TGDv%dctVNWPqlovDX84~1bl|k&5nb=NtkaOsDp+e*ae_P&b z%fF*Yw_&GLxJm#I*8fS-g3Fu+R-;W!(R`t`Nv}9=R_9=D;}xxK3B&GG<(tWvv?WP` z1QFV?5wdg$A{8vc5_%SKkJMfnBU}ld46DQnQPD9n1`x&Kue2CSbfaxKVY1E?L-25i zG=>>VSY7g2#-sLA>r1{UZnmGQdf{~OB;|7b3vF{(Dwnr>+%@;@j0(%gBYqG=&+6MS zI$T_4X+JmDY+t*&WQDS(s-Yqyucf`Yc!qs#*W8K9n)M}HGV=5d7#x<~;<;SUhS7*# zywCyr?kS_v*Tr_w9K+=G zJwGR;^I33BM}&A45aL0M z)%(3&1U^97Y_=-^1eB|GAg__4VDAUw&(A}8z#964Kv7%1i;E;a;56iXtpou4GjRAH zfC2d~?sTyC1H}uN0W=yIhb2-!VrQIWYXA=q7M>*@?LWW>=~_bS&v?21-M6j;QZGz; zIHx6}?6tZB_b=>m{^FwUn}yw2<*Eddo@78-|w|@Rx{Ufs9IgCONB`}&R zTH)g!tNV(UB4_tnyV%f+IH1wCPiO%H61 z)vaz!Wl{i9Ux@N6z(-4M0GBLemQ|wYZOcpwEa*K7y`mw|-5&(8lQumAMZm3wKTw1I z6$|?S9Yjhj@L05rM-WH?vL81h5XgTgOZ4BtT}b{j=-iWP2XOJ87u&AoH0$mJpMac% ziO@j)JE`{O6j0dU-kGs#yfA`b3Zp8t*T#!0z}k^=1^6;X@dOjw@gjS+j89;GVi-Ii zMyt17Sra?_11Ih(?YS^sHj4vivpNB_@q}sW5De_pG)1fIu_Uo*vlFz0C)ML|e4imuAM)sD;+&_*-*emfGYjgnrB zpxf5@R-&VM84*kThD$3K2lsb?k3h(j(91r+J$}4YUk773@DBA_*x8a!qA0toK<}I- z=S+unNl(@|wUwo*?KLT^&);Ww>)aK?p0d>dVG0#u;9iA%I_79Z6bJ&%-XuP>xOXPj z@p6&`dx7T&zX|K%6gOVBIH9e{aM-hTZkV z!DoHQtum`2QFi1%{0O&o{Qo+FUeUMBgS#!q9(XpFiO=RT>KV*kQ=;&?Ahol^VkhpM znP`C5jlFGR4YU2l&gqy3PUMJ*9>`!X$61QGXG%_!ZVVNf*@%r>x7RmtCeuSG+?#;V zZs{91aR*CEVBlOS4xA(GZ-RcWTlT-^I{r^kX~Z91o4xAR=iYmH>?4n~RZf}qZnfrD z|9G(K|LFgC*ZT2)T2!My_R6Ky%GOUb?jEa5=%9qD?w&$HSbRZ7&E9PnWZV>An1fdg zL3xxnf`!r?r2kRILs8e7N;e_Jz$N#-6lOE;$nvNptjOYC11f{MEWGmM+d#c>l}Y>`XCD&ce{Hva?Pf^#|I1rrbxT!FdGj{m0ZqSOvf^()xg zxelxmv$)*g1=7!4rycF@42Y~ug(z1*ZOq(4$`97KJ)SxeZSaIJ+^HotN4W2!vZPH|InOstCczVE^c_LUdN@}2Ckm1brMsWEw8jZSfBNfOMOs-bk z0nU>9Mdl{hQNz#@p71W3z1y-??|d308u632mK0+R5b)8~mn>VkWER(GAa%olc`+To z6U!aA2dgImi_>?i!?4v&6tB30uo#af(|>K{GK<>DMQMne`xPzQ!=f2JzCwu0?X z0;f2{`+Y!ai(muZCoLICoCPQv$$#Bjv4yXjL1^+R{6PT;8yFPbhrl7pKk{{uw=I8? zZ=stwww^aq-*Mt>YU9Ygsx>}c^90O^?`aTUFingvh>ZHa9`nhO1bi3310HsR5a0;k zbIwK>j~E5xL>jxr(KPYE{o&}s(e%qSvFmc#fB5XwS0cU!W0y-X(PK1BCsa&UP|Gp@ zEK$-fCWd-h5CJ}nyE4j;Kf*xP@c%l7-7SI$8kajQwftsNAZf&ohjJ_ruetZDvA3RW z%zFE#Z{4=}$`4m}a<_j?)t9}x^t-3#yg2>0^=ZFb-l~=HRwHF&zU$6%^IE~3rcw7; ztvfWEmiE<2-5cb{h=5RO`p1=Q(0EJ=-jH=_*+PD!(5Pd%a-n213Yju?Uir0*ELVn| zA`*;d2a-Jsg+vem#UHu*iO3Za^C3fIIy>FWoF#$EBOi1k`LuLVAgLe{L0{5D zmGJFc`yN%kU=WUFr8x2sFyluK@WVw`g0=&2BBt|-m;J%`qeROpSpoThzf5~{d=mM= zya~DrqwGYhJY9sc`AakpWUr4v6a~(uE^3ZAH7o%(~E58pV zZFTUAyu{Dsl*IV3e62$+sLweR)dY7U`adPM**L?7Q4lwovO2-OgV5%Gx zH@MD3tz}!uW=4{q6(m7OOy>#}uNB=;HW`Mq$>7rS4mVDMk;@2UpA?~0eVkMt2t%ck zIChs7&cE2&qG70V<1FG9YS_(Q#t&!l_xB*YdXu+ha8JPYN{oDz^CSw8BFl}n9-Ez8 z)x+8XTITyT>B_DmC{iSPjeS_#c|@QRlNAu2B97se&Nn_%;2uncTvk7o6HB$ozcC@b zbh0!l?X4{p3cvvpD{3q*YZ6+mYAwtrS-Q!(lf+%+`V1(qzEnGki76iK^4?3Oqq(0v zWbt!O1oy5SrWP9hdZ2U{Ze(-(D^w~`iMb% zol-I=Xzv*5`992;y{q?LohsigGU|PSd4XqOD^{Svh0jUeUJR&RxxF+Rh#!52iWmxK}j? zW#IB$OBxhTGq*%zpgQZgdiB9nr;%HTJig6bof`I0dTmRch83w-$FgH3AcY#h_a_LY zx(6uL1{g-ef4j0Jy*&t}8U-m-2%M{Qgixkkb@8<4>$F6qkPZ^R21QjPIv@jp*P%K0 z^#5rsutr)g%asLe4>6cCd{_tQ;VgQ)UJ_F1TyARRaYMDxs)6dg>$c%VScV;~_z&3J z8N-a$7qZJAuxp|_JU8K#UE8G{n-=*Slu;nugTG;B|)iixZjYbWw-NJ z-1}3RRIVGfSS<``Oi!Ka`t-r5IZ*UhUe&@LPxpMKCsQdSOQnobs)7Ez;2f7YRO_86 z{@}Yv78qH9D80D4d`(*XvUmZzA!qy2iwEu+T_Sczj$Cm?WfU zrTfye6m1X)hqIm@={G(T?XaXHD5N`+k1Q(U?ajl|*2LToeHZ}F-I&CVJoX%fptJes zwDIFhXn_$FcpY^)F;+zGc&EVJrP6q@=(__}syoCOy-dzji~bcq>_f!e#O)~YjlUaxv_O0o z#}mAll^=tHh+a5K7P!W#1AtwNs7bxcV>{!e@Q0_b+D|JW-WC@BuAn{Z{P>nPx>>e_|=pJF~&~68Fx;+Gk1v0?BpM z?I5N(-5s1o&=@;az3ug#O4hwE1=TsT8cWziS%!Je^C+Nw3!y>*?ZE6Hbf@0^2Fh@U z0w=0-7VsM((o5xXJ01j+VrM~c;~P2kD)LIDMHjX~*_T?d&#{uHjzw5P&mvMrJN8OC2`Sp$8MXYZ z!4<0mB)n|?9QHyPaRPRDE|m_0YMT}QN8IK)lN<5X?UzqRqViD>MU(FCaF)iS8k|vm z;@{@E2boIU94j7Ik(*8Z7WQeUiIq-x@hkA{nwC(xRwg$8r|6GDgE@)g;7=qa5uv!^ zh?0oVGhF;crX&#|c@zm9vFaj~M1Fa-KFa-dA;|FQ6}&*ff4Ftf z;j*&7KFNc|ZM7iBQ4tLXOfKp9b)9NnIKGdF2`%vrYaNo|bpANOX6ULTK|IMKe$U#^~?`CS4lS+#+ zyltGkU>ibQi?W?-VNbBt%!iWXBCraYVfWe(i!=eiWYDu``Gu*Vfb1alAwTqXe(??B zm{g{S-vE23+(N1~4Xn}+Xj&WC-nLAMMS=H#WF%PXM-`-gv_zyL(Sdh+f6bq?c|SJ6 z%i+0@+y=aJq=M#X>jujfz4Ix^=^7TyFNQqH@CHW1Aq{O@b*XA~vfPge&@fmH+(8^` zFjTFOgNbai+>d<|kjxy*7LMj&j&n+hs^vJlJD`e*AB@G?ZljN3h^*|*+#Bi5}K*D1uYe6keDz~{CIeX5%RA7MI>Ef9F=#HG(%sbo%<}qpg40yVT{R*_;q``Fu7M#e?0U#bQE7(C^ zF4ZjcpgZ0d>{ZcafQ{OxU@YWSNn_xH03fsHEA6_4XTadZ{wvdv2V_HDRrDJ#MFX~N z27!SP;S+)t8u0dMh{0URu5^iEUEx7L!M1JM$n4m3*w_vUU+AkZqbn?no)9}Xhjr>l z9P9$obRdor43I#pQ50xlgq|QrS?P%*nz`GznPWPn8$bdnQe5`7gRr0QuO!pd>$-B|Lk;cKKl4jyB=krs zYYAcAx-@(9M2H=UkN(9rXP{X(W7wWDLNl?$KWWC@+$rhQMaT=pffi+l-lyK?Ed4vU zmnEQS8U7Yz4&JiMU+SEIdBoy0P&Q8!mCe!_fDP-Jd>Nkz=>X_FXJ}q&#${`L!zu33 zr~b^ySOp%#GEN)PLH&`R)7NmyAG^^#%Z5Dkxf}!OrgfzK?_H;8kg0|xx1BiGh5GJ;nxV81dZ zj}h0hs^-zRv+dkJ$W7Xo?aUU=Nvx(xg}sm|;@Y@c-oc-ByWDGJB-K*L6mSlH6-CPJ zT4p;aTLvizTPOM3gj+P|pDs8*b;Y^l5`O+3(N5Dj#iC<@c? zBUtTU^aEKl7*213tQxYO&ATSlltGct7kTI zSBX_xa-O}OJwo)5RSJ3{+r?dQUn8q!q^w0wr`mN)8r#Oz^Vif>ayo_W;Lf{y)YTdi z1!q}1xjgpA^eXx<3Q%_BsvY@G-mZ!=MXShuPhuc4b?~6ofz{BUcYW9gz+Hb)n#Y2z zVRn0LdRBu~PkrWC|FHp_Xb>ZP?p(to7J- z(B(!nOT@^w;VHc*>WgWz7I5csBMYUv-kBszQ+$H0Ra#PkNyXTJWek^dW=QRTQRiRZ zf!AL+Ei5%LeGh06<~9~C_k$XZ)f=dspp`Ph{lqTl&>9(tu#y!+?3*AW-FCWz^Y+QD?kxp;t&Tl+-e*L3bFYUj>m5vWYCmAj0} z1Znou>`{Zjy%yq!IxK6Ovd#MTfM-`(H!?3fk2zYaJBvFE`Ar#SmGywKj6JrPd6_A$ zZ>?_4*lx%-C}#}uK)0IBBn(P&spnR`@$?zzHdtpNiq|wfV9q#y;Ds{f zmy1g_xwCR%^1e=U@!a)qyv)2?KexK|f$ha>3@^+Gafa&;WID}E=XRyDL+Px~;2as; z`C{Hx%wImH=8vi0SW2mvQU}ZBRJpvhNk=!Og*?1TY3A$)m@?L~n9gJL^`yR4xt&lN zm>HaXBc128I7oe`zJpLE4;tJ~y-Bh4-c4u&xj%BHrrnWZKF`cy;+_hpN_6|O@<%LW# zX8GIv@+AF&a}yYa84msu&+=^Nm083@Dhk>nhAc>mU@ztqGzaVPn&c!F_TuRXbwSfI66*SZY-n;%`uWDQd>$qgv}bchp;(JaEP!;XY1Ibe7A=?Tcsg1 z)v2`HUdPt*E=1U*u|~wRWfJFeWw4s7Nr{rC8R)>;PX3r)OYc(DC{Bi=%EEg)hK+z# zEtT!67WR1bRzjHwrs;o%4zghI#Hv9ft@QM<0muUD4pk^HCvT?-4)|Ltdz~5uQ03_#Z?qX^h z=Diw6*y>>8G8VxOfC=?2SPc{HZY2>u%+M}VpwC6V?BTayH# z)qqH~bk2glM^e3Z5QSz#^$I$fiW3ji14$|S9?dX?`eCX0N8_Nk;E7xzKAJ12Q4Te! z2;2EUy0#*jH)_(AT}9+5{BG$!MenJo99CETIaIGyur|^AliiUG9b?Q}`#sap0*pLc|+pi1~ zsNBIHK*`HSuHOB|Jb8~vv&55eC7sjDTVR6p7I;X7u$YSA?X_Uq6CUjo%z>)kPfv$T zaa7uKg109_v{iJjHG#@1>*$@*q=M`1dT_HsUs5?*c}gw$ zVA~UgZ4`GgNY2%{Twe5bR33rkjc3H*qVIXP@jo@pQJ!(9b5m^d zhnC9Xx8)fvF2}{!e?lppV7FQ!Pf&NKBq9WeSlp0dNkk}iGi0tO67~)ba3v8TT)D6S znN&$cD5%-Ss7LGYDs~3|1$3v<^L=oDYj_bMM-eak`?-plfm9LhhjLneT=rVsJNKVm zZCXC1eeTri9e=)B#mX+)?ppS@N8f(=?uLl(Wd()3>l$~H?4z1A33cXsPNa)cq z3W3!z-xj(JRVx2Jej9N>)|%=xbG7b`nx^gScH#|rr)7j|~)mDs9opF|ap$o!uCXF5C5;p;3-fchZTQz2& zST&5()cy>{9?Ls@nT_xw0Ue^)%pbAm%7_zY^`n?~X2NCq?U#>LUk{+WYTDx_7cScq z2j@fY5)!i{fY9+}9Vc_)a`A2gp~uATKf<1KFBKHdOt+Iqat1X2+&7Qe%6Dfqr7|g8 z2bzXbo%LKjc`yy2n^%Q{n$FW)9ch61CsCe?=AW`ov&!|Q&V5v^?AlD81qU2oQq{mr zxAVEe5;{z*W^ir>g0YbLGAyH=ux6nTQZCqc9%xGwbiP`{?DRx9g_7L*t}$G3?i#>K z)&P}LtvC@RbPj+g&;hLqd5m}p7EZ%fGarTwIfFDY==~OU@FUTw6ngZfXsEPQwx712 zz8YZ3C3Z`wW5iQrz$peX=-DRc5$ZfS9JnY9S@q>oO*wNmjQBV()XBfYA2*DB86Smh zh;hSl;;&-k-uP>V3RZ3v@>|v8ouz*Z8N$V|cU!jTolnWJFJZ^N*Ug}vu`iq+3vrN* zThO<4f_)X=lC0w2d(u#~LY_>i>Mq6Kfrn%=YbLT32a~gpnE1gQr@~|UxM=u+Z^%YS zaWsRtq)VOGH_YM=*FdBm_yPKW1iXy_ zqlC5y`j)jmAOZKzypf$rIDAM~uBqF<3J5wsqD2mvFfT$&HZ&CClVe|YlY zyq1hV+*kL9`xkE9_~^dv`ksw%-M!H{?`qc%pZ)!*3pd{{+kE`XzkZoga@?wYU*qnv z3Rg8#j%lX2I|Mf+XerJ6XR~VjVh0rB09g)Nh;(>Ea9hl>R_bgSFjiB}r9z~ypY=~; zwjxc$Y3^0JHJ$4wn*ik>1Vvv7r1}7zg9y|FVRAyfy_(*`R58b;QAuRlGp^nc>=l%t zsse&)H9ds64PO2-|-K&&6yjbza6i$6~icD_uX6$Z`zyQM(yge=%(G#Bu`su0_V%;Y8?U!;%uDr9c%!Au=w7 z(Jte47{NdhJ2>`mtITR(^d`mU=MTHwF?W%2Qp>W=xtlZIwk%s!vOi<2edhX-L&aa% zXI3>d7T>0vq;EJAYX`a1vQtErC&OT~Yf4LdWAQlq+RnMRD<5B9vN>b2zTr^uJC^n{ zbL;GDSCuSMK3>(ZKVx$2A9j_KE#M91N_v+L!>fx~+5N`UbQuHxItw&}$6U z$QwL6Ls<7~#4R(}9b90{o~(J@cB%T~Hh7hlzOJ|WenqH2W<^l8bAq2bQA8nrvZLFDy4 z%o8cRYraU}@(D_)oB{$Dygy2m8in}PcmG9KZ0RH}*N zWUnw$a6&T|)<~X#HnaD-*r)<|n5Re{7US*KN~s;3>Q^->2qjud*V3eLOszy55uzMk zlY{r=WfCkdfpYL$40Wp;`Ej*t{XI zKm?qDum?@`%5r6~L?j2Kkyoq#s}DrDw0mFLt>kx{yZ^TRbMiaao^RZKvwRHq{Fylm zSq_#PC6|jD&0Uf(V#@ln{OJls*mhk!NFiK(AcovwVBD7L4h}4t5spfr{$3R5^ zNJZIb+nl9;*Tv$mBekl&^&#$d0MCG`>r0QS3!c(#iAc$~)Wz_(wjvco)nllk;3+wA z6u%Q2-V8R)D>mvI?|kFxia-*IJ0H$z&V2oo`Zd#^<34`0Dl9ks z>w&ee)LMGEvct`$Q%Q_m(o&y?#kE_IRw<0VENuKy0+0g=#;KQkmfUqiPch^dXJi zD4Qyo?&E6@tOJfrERhT02TB3#L44ty+gxzy|tEKDovVc z;N1ico;qdl(z3G%+zFO@{4kE^#qy}!G_ZCj}NlS(@m`39I@b=~WryFii-n(XePTcUvw+l|uN2&?GGN zgn$_#r`WwO1)O{?Wr3m3X5QgGFpo*&t|I4=BPax{i`cI~Wr$tE?VmK`4#?gOlSD5d>v<6gjj=6OA<4+VO&2*%9B9ww#v3mhSySK- zNZUBW)Ba-TbmTyXF*;qt2qcO4_Kck7 z#}54ePal~4T+Ks&Ub~{@=oh!#HuJ)~-p_yY;vv(nC$fKV6FoJ?gkA5;?nmuo0e)0$~tSg+N^^q&UO^O0nrgi>;TabNbJxghq4@$ z>ogDnVC3r52Q_^aI>91?LY0(SWvHA~dA=lyj>uyt4?&6DzZ}#-atfL;?zSKGI=b69 z^rt!1d6r+8+Il-wG8;=!C37AMDN!(62o>F_V~-;Fhztsy5LqIF$dWdGpPVV+H^#nH zBvC92fdKqw=oDnW8k93IImM^qC0l zUF#I~=5$b+;NF>0gptJ;cqlkZwR6zJ*(nqgg%lwa4`GCp_n4@1I*%J9h-uKIrv3-i zf`dd5i=8NFo*Ix_rl=Hh%?Wl@eh|ez2*U+0EqBvn7nEssqv{0Me5INY7-L!v!IJg1ub>(PNT$@#MiDc!cd# zdn}e`5lL(Zu|AV~ZH>BdaX~PB>0y>!N8R*?mWdR=MX)G>o#42Evto*tih(=Fr7ko1 zpXOVrF)>{GBf}kq z*NNjkG_5s*|IC5L6N& zCeK?^Ot`!}9=Z3NhK(d~C2B$*Ay|82BwQa}51x>kT-YJku;6g>EWJgZ$C(c6%6RMp zPhLm6B*__Z{GNQpev|hWWK6Q~Z0XphdOaK4? literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example_large.bed.gz.tbi b/tests/tabix_data/example_large.bed.gz.tbi new file mode 100644 index 0000000000000000000000000000000000000000..35c9cd2b01f5ce162a056ce3032f93512e2df718 GIT binary patch literal 7877 zcmZ{pd0bKn-^H70(zmjl#>!C9%smxHG))w(+y%9=Tv02bBDWOW$aJd7$`nNu!xS?> zrgF(8_hrfo6%)BOn&ncV!W}CmF?W4$&*%B$o#*pD{J|gm$vx+L&iP%f+yC>^hVP$s zg$+j>f86kgX7I3LtzcffE;Dwy1z$d{bHL}(AoUpHWYjLt^3wE|O_|4zCPjttgF64u5FRkEg57sqFNC5vq?Q7$*04+K;{ zZ*9Tfy7b_~SolC{W#tPnM?4lT#QPn2)lkS>e*S{6J|CDo$!#%fkGgW@dQ4{MC^Eec z{Yb+sD<^#*yjlO;vY$ce1nwd@5p(s5I4pl#+DdY9Eg7IUw)|<~KgU?OY$D|{}>+^9|QGG^taYc?VV?B(Qy(_j@UJ~fVkRW3tua^nRkj2-9W&LvLO|i{OVIN)44<%rzKT;7MQg9 zkFL8Yv;wWizxkU^RpccNkP0(_a#$M(*@ zw0oy>BVv7b+nedMccJqq-aM-Aj|-S%SPnC;*v77f#=gHi^pV!HoBn|pE8c1&$_|<4 z2Gq5=8M&t~(=iAn~3FC?Hw2h}3!qgmtdH1oypi+0KD?udw8t+zN ztLG!^Mo0*Ax4-rh8mAv(n-Pj5Ii}G9jf9Eo?f9k3HjA`~U36}7*RmPDZ^mvmS~nqn zNQYN;H)yiUAZus#=#kjOV?%Ynn}m9V7@Mw6jQ4!4_SOp!?JM@pD^ZJ$yNa#Qx%)c* zx_Y-;SR?O&#yed61*1oGj5I4`pKouf_x4YFgUF1bPsrhuQJ)Y7DE#1P^@-{X)I`Y- zv0ZzIB5#(Vv1+cJ0-Xs!6#M4j(Ale&-Z@#k&PbmLIjlP0HBi#|#xBXuvm(&M)if`Y zf$86$M0zs(#J4xZ%r+v2@d_FB$gVZGcSL)6nsMugfaG?&OGhh|yEnUXR~s@Mw5N-5 z6nnd!CETg|*oJ+i5V~rm;8p#2-#a8&VWOU=JS{NI8h?FqchZ+yU#PEvcb5{lDY|A}TY^^KmS(5-Wg zlWMih6hC5yf#-aP&#_uQJod&vk_1OfAAD)XnfxF(bzG&IK-_vINRbi}O zl#Olir=v#$w+I@}d?jzTsn7is>Y`sjkZt)Iq1QON&)@|8TLH3-(c3 zX{Li+8tUWMJ&~7d3R_OreH8$<6RRW0J=tGYtNGdi^N)K-SWO#5tHJn8fAwdZfVHbF z@yC`bJDG#{V)g1XPWG*)jtLWg|A9@}d)JO}y|}Z}qS3%B>k9vD-gQ!^n^&WO^}E?F zuT6x%o&iTQ_sb%!AlrXxN+0d9`{qB}HZs>179Pw|Zz&>0lcR3K72_51VHFH2!)Oh;bWmFqwtZ`BcF!1AI4eXsyuX;^B~X z!vq|S6^>j?E7PC}qXqN?uG#(~Wqd!sTB?$?%*3f$S0qgeBdWU*HuyOlGDx%0tQc!- zsJM$^db>+Q_VtJnGsMNqO5nQ-4|acTb5?ldp5QseW|Rf_O%nH7sCh)I*t9Ss-W_42 z28D#1u11dc#8+o|`hGGjj%R2$<5p=JBaT*}(bjny4d2Ks*04PquV(USdtRE5aO(F$ z2aoLxb-JCmU62|8k{m$b|lws}6KC8;o$-!YG(T^*3tkCD0`AaLF z>o*pZi;6|&U-EV^Q=@9SIU08`sIQ&5D?r$@eSjZM!K3>k(Zql~!L6#cY)6#;CEG@P zWLh+bf4ECsP+N*@ZB(jzK7eFrW;~&n&U3jcDSK6#JuW4Hv8SRzFUDvJ;PA7epzkPb z5vS(Ty&yVBWvNIH-l9eox(J!%LT7$s!*8tH(uHmC)`lEbxU`W2?ot!LJuejH$ygzeoP5~z+E6|* zo|)@|iWTH0`yZuj!GxN_Zu0#I4P_Z^`k8s0p{sv!o|M-9mDAhw=1{3s4l%l0?v#vC z2=w3*Sh2tS0LS!)DYtW%nQxDl9(Z~d*?L{6&D0`iCKwiO<_YI; zYp}IqS76k!iQr-!#pIO&RtS1rOoU_3jvuO-0b5nN(fuL z4dpW9O&Mj2$H>Vy*ZXE+XmRg&%HoNTBfiYsjU;zhO=eCg1?%s$lrA{r4nt&4;A>kf zeHoL3+$X3u?Z_wG8W#4+nK0(SiBjwQr;Im&XKQIy@qoOomi$Z^f5wkEjR@ZU$#kR( zc;~&O`0*4>ZNE-2ro#>9pvD)GeuNu{M4A0k8#=W{dQerhkF*2cUcy%O14!G@gQA#? z@P3&hC5kQ1A`f485RtUt%7FPzS1_rNWdJ6oQBSXAvhu;iJnEoqH#)jshJdpdeq&{U zi@8)Y>G?j==;k59aWAmb)aUEz!=RDLEN8vz4~dXr~Vz zQESVVg@FfIRF#-5XdV!w07oCZ!I}j-!+(B;xd=o1^^p$12Z0!L)P2cWR1}x3l>m^G z;q!oO!x~noBVV~rHIOE%2}QF%!p%hH8&i1_Pt@9BzU_i4db(e>176%GvpL)N>)x7k zR!n(1d5?J|)@U#KI;YZ*k$vSj66fOb%Kxz1BRA4XV!3wYW`9@Il;Cw5vV5}@9W=$y zL^5f=Pj~xYBL2PCw1{vY?vV3M6Zp%gY5BbY@Gf-8Ax~R1MPH|bdpb8m%aMO#C5J@^ z7k0sU;z4<#CqIdd?RX)_dGII5D-5dr3YDb}E}-G{@8c<7?unzm0}HJzlKl$L5}E(b zlO{2!5-@Q`W#6nCJi5>PYAP_R312T2JFeVd38k?4Q|@Q^Wk@5%$sDR3QmwFTi%;Z%iCOj_L@$Ci7IW+Uai@`Q_hei{v#Vo7C7enNTOXRGr>Bz^cfQ49icPqGh{ z;^=Bt!I7v@D%fHLRH;~5KJ3ER0voob-j~>;G&x~EX92SZ(cXYe3Er`wjyCI;?T1&2 zO(~qvoug7-Y*hDyf8Z^}R`6xRH8W~@%>^kHO ztGIfSP@85skTVIS@42_+^# zv{KU@apWXGv|2lcv`nKyn7ZjBwaKGeNTpA0tx(jfwb`|3$nQ@fBK>h+PXi+ z7{1y-XI+vu_eq=e9&0ry`lvDP7Ugb{tfbk#B0k*g$*Y3Xa zC~C)Mc_EfxDLn{pFO@`~df8!Wh*HUM6oMz-kE(bYCm%ko$k#0+ZtM|TRVBN?LKC^O1@!fj;L23A$o9?0vRL_X20V-O?p6kAwr zR|fTs^Go~O(l5ZrKSz<~0dJSx2M=kOj5u=VNuW2a#Oz{OMg~u;i)xBdL!Sd;cEcqf zf21Jpi>=A>j~Ua^)?3v zBLrDhS!)~f8+lvK7j3{+$<=M$5T*v19Od=gNM7i{hmqy)H7LD2@evf_DM5}qEQ|)F zY;i&Zjdd4n$fKqVyL*p@zaPf%H!fJ9v-)OLQEAe|Eka-xijV(~Rbk}hv>5(b!ndCN z+bTN~p%C1>34dH0G)&jSdl-R6I+xFu?cJD1Scrp_BQhaY6-;5m9f{#rUvX-#V=o7l z>V0TNwzev@nOUH^-YC8~SwL~acr)K9I?%qY0do(?%`+At9I>iHIByB(fB1>wRVwx) z7g9s}Nmg))$b6e>KgkH5-ygFJKKLF*iMl7ACl6nJ2R2@#HiLWqT$S57@jJ+NF8olL zE?U@Uj^*D@yv`bwCSIdL)rvJQU9g60eRPl~dk9s@mQLRY@jX`>@yVLZ>`;B?5J*!N>JjEaO`WaNuV}%=}Ss6}RMrmu}TC))9mMwO2g?8yVCo@W1z}!~A}--3?V~ z5|io&Cc>jdvsUnFz&u@9x_F1>EnO(22DqR*E$>>6=gJxhN9;`u>02Jy%*j~pe=Szug9DXvLmm7_vC=r_FspHf)zL%B_}m`5 zLQhOf>a`F$Q&TrpnhUp0-g+F8`Vl?wIeOr;_SBs6)ZEU{$5CmXyF%M0`f?ouV^3=` z?}Wbf1Wx{R84M4^wgj>|n3zlD%YH(8_d~)On?a&00T~J& z{UMSv$_>kq%acGxFA*dEWpt1&rl6vpy^;@m zxH`ZSK5A0FaK%5M)-qhBi(Ao-WIJa*De(#`UwY>-e@v#2UcV=Xqt>p^gNrv=<|uo1 zSmEeKO~HQ8O1Im`^e12Z2!yybrF$f7HqmP(aK=m=ci}n6HpI3A_~fhDKd#LYjyrh_#qm*Ef!Vmpp>BM(OLDzvVwD{;HXjk6l-~A$ae` zG%uivr3-pqr4q>LUi``!D>UTvOzQ0zBXoX0337U$%y!sK2nEP>>bn?4G!!6*_^XLG zSvSBWC_n(2F015w5OT!3#w|8QSWEYmh>H`mSgHLoZTNbL*eCh0cL(z`6Hao&AbNCE zW--m~P3fm%K!i~%m)owv$S?7TsQ)!2Q&!-QarxWh+R2yJFH4anjo1rD@baomEYSdM z1x^`m44!d>ebHxYVZx%ZjL8%Lb@VMHD{uu@TH0A_hF|j6FuSHgc)1gHH{C*tzTHa# zTQ;bQmeo<0V4+-I$D>HXx^XNlZxlm_;=ojFGPl`)9jP{a~VNk>2gUnMm0s z@DPL}tM1qO(JCJLJ2t6s>Z$TUej4(%lS_enN6;IOm+d+#Z@W439QMX|hEY7Y=(a>T z~m`H{Jt1i#XU*A zTrQH?qN1KpgN@MR02?+Y^jjR_ZzQk4zUK!8%8zvFIhh^W43KSsSAN(=agi<)`e$JD{fe#TQ z(QeU^Wd^IhunQ(So>h&OEv8~R{#i5f0lLi$UWD&f1p0S1V~QOWD1wW~Z*DvAdn4@K<;$TTE#25KfU>ocZq(^ZzNU4^~Wgji9#hPEe_Y z{`4x6{p)UeRU&b}sVRgjY?`9R*90`m3$jOEgti06&OL1F65J}>|$ ztZjrpZe>`~)9N4RWu&_5*XFrTySplWGV%EY%+lm@f3lE$u4xW5(b~cT%k8wu(*Wwo zTbB=eKqx};$%PrAA`%MfiQqIALHd)<|P zue)&J$0W*km!m>D)a4m{GVg!jYPeyJc{cBX4L%UTWGT)H?zx}cNvrzkf4rdE?RJ2^ zZ}zwDg(mXJ{4ds=daD6?$|I!%3|i?MoZ2Wu=8pUj%zUjmmQVFUPHY6h^bxL5dt)o% zAZ)oydWcANpFMXF7wGEo4l28B@lSLwTQI_Qa3Pzz-X}9^yT?0Ryz5Ru z@Y;O9RbnH7VsHQM@x30yj2C#5kOB`3#>T`<#n`>sx#=Nv*ecU&jpMdoQ9AI6{%=`s5>n4cPA%x64f%Y*1D1oBh70#L%AlU_@bY#ZZhqH;*IUv>?}O;fkD`*Y*YZ9vUKrChS#?%;&ql02J=6 zi-+XAhO2NhxzNeg+KVm0qI&O(akxXme@}GW_5c48_wO~Ol**O3qo6glCzbt=A>zu1 z1orcKiNpuhc8`6!-njo0(v*i4nqFJ{E-sU>7n}#W3S=CbOmxF+ACSMAGAj}eU zGJ##t)rt0SBt<~X68vt3d{9Jw^B7{*KD3rcD0GTbpvacnq|bkd(9-R2#FOt>mcCa7 z?0f_Hn0HQv`-*%(yKB9gg^tsUT67oK)L zJ70z@a8%2@<5#fNEnJ&uoUX^I$;F!L^!FfJfAnQM9VEEK!7gnK$M{?(5)D=Ep0XfD zYX?VT5_05iw?A{&FT?)U)zLcTN0e%dFLnQJzix2}i22e;dFz#yrNt_M?k2q3KG= zSHcL1c5nmWKTdIw(b@S_Rs1B{6XoD}O+gl?X+@|-oW_^rlD!#W& yq!f2-CAT}xD^b>|*5I1r$aMEQVqLkoFVOedsSO*n{^Lcp`i71FdT;&x>wf|8F!@RV literal 0 HcmV?d00001 diff --git a/tests/tabix_data/example_unicode.vcf b/tests/tabix_data/example_unicode.vcf new file mode 100644 index 0000000..4512a8f --- /dev/null +++ b/tests/tabix_data/example_unicode.vcf @@ -0,0 +1,23 @@ +##fileformat=VCFv4.0 +##fileDate=20090805 +##source=myImputationProgramV3.1 +##reference=1000GenomesPilot-NCBI36 +##phasing=partial +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT Reneé Grün Señor +M 1230237 . T . 47 PASS NS=3;DP=13;AA=T GT:GQ:DP:HQ 0|0:54:7:56,60 0|0:48:4:51,51 0/0:61:2 +17 14370 Reneé G A 29 PASS NS=3;DP=14;AF=0.5;DB;H2 GT:GQ:DP:HQ 0|0:48:1:51,51 1|0:48:8:51,51 1/1:43:5:.,. +20 17330 . T A 3 q10 NS=3;DP=11;AF=0.017 GT:GQ:DP:HQ 0|0:49:3:58,50 0|1:3:5:65,3 0/0:41:3 +20 1110696 Grün A G,T 67 PASS NS=2;DP=10;AF=0.333,0.667;AA=T;DB GT:GQ:DP:HQ 1|2:21:6:23,27 2|1:2:0:18,2 2/2:35:4 +20 1234567 Señor GTCT G,GTACT 50 PASS NS=3;DP=9;AA=G GT:GQ:DP 0/1:35:4 0/2:17:2 1/1:40:3 diff --git a/tests/tabix_data/gtf_toofew_fields.gtf.gz b/tests/tabix_data/gtf_toofew_fields.gtf.gz new file mode 100644 index 0000000000000000000000000000000000000000..42b924d544c3880238198054da2c6d396f3f4cbc GIT binary patch literal 400 zcmb2|=3rp}f&Xj_PR>jW#f)#Kd1p5}2sFI^E82WL>BjW+&!#weEa>H2nc1(jOT}qd zSO0~7zt>4cXTLn$Cc?G*LF)6_H@_Y}$XPDgwzAqhHs=1JW6{jpRIa<~;}&es*c z)31C%#l-olQj3+?#bW^}jVBK4_;rhY$ZC*OQ{Be$>dqs}rwf)w27QS5ktlRD>GrWt zN*bqRwn&%%e6Ve{QpFU`*P_R)Qnh{DfBcP{FY-p<@20sIjz6+;yvkTz_n>+~@(tE@ z2bQ{0(F@b&ncvr$^?llDL)9w5vbi6ZyJ%!GFWq}J?}}lPq}Sc)ubxf*-D$ltzh>5E zxexkt_Wn|Gt~Gs|87;EG*)PlAWny7k{L%@k&hwtze7ZbmdSH<1|68;BE*KQ+Ud%kN z{9M*B$yjZt%ZU?N+xBFY_0Ic}R~`OprQ^z=|LU(^zn`n%=J!ul^Ck0AT>f(~wD_=f*etFfTZ)>-Rvj{IaEY8coAdeR2(hSVtC;$-v`+m2g literal 0 HcmV?d00001 diff --git a/tests/tabix_data/gtf_toomany_fields.gtf.gz b/tests/tabix_data/gtf_toomany_fields.gtf.gz new file mode 100644 index 0000000000000000000000000000000000000000..901dc1e92ca2ae444a7b6bebee06b77cc4850413 GIT binary patch literal 400 zcmb2|=3rp}f&Xj_PR>jW#f)#Kd1p5}2sE6(JpbWViEmF=TP_t4%1Cy~y0y4NuXDn> zN6K6N?^}KBTGX!%imiwADsKKvEBjkea45Dd@zp(F@$1_+e7x46o5kqJ*CZHoD*ZI; z_s1M2oM!{JaxCm~-C`&bsqo35`|={zJyHp6o}IdlR@*E5EHg5viP(tM&2ZUxW820( z99>52Z;!>=?RdM4LoW4DRqIB-n_QO#>*}wmvs%0C&r$!fafe?(>4ACjKjdCWlpRzQ zXpE0#-LmxgS@Z5^d!H8hbjG#BrvK3t^t$DcnZH%Kv?ro1==;)LKcCb+@_Qvc|JfS$ zKiui-_nioc_pQDq#`@Z7ThkID1YDIq8Ke_N((awf*RjW#f)#Kd1p5}2sE6(JpbWViEmF=TP_t4%1Cy~y0y4NuXDn> zN6K6N?^}KBTGX!%imiwADsKKvEBjkea45Dd@zp(F@$1_+e7x46o5kqJ*CZHoD*ZI; z_s1M2oM!{JaxCm~-C`&bsqo35`|={zJyHp6o}IdlR@*E5EHg5viP(tM&2ZUxW820( z99>52Z;!>=?RdM4LoW4DRqIB-n_QO#>*}wmvs%0C&r$!fafe?(>4ACjKjdCWlpRzQ zXpE0#-LmxgS@Z5^d!H8hbjG#BrvK3t^t$DcnZH%Kv?ro1==;)LKcCb+@_Qvc|JfS$ zKiui-_nioc_pQDq#`@Z7ThkID1YDIq8Ke_N((awf*R +##FILTER= +##FILTER= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##ValidationMetrics_HardyWeinbergViolations="25 (8%)" +##ValidationMetrics_HomVarViolations="0 (0%)" +##ValidationMetrics_NoCallViolations="13 (4%)" +##ValidationMetrics_PolymorphicPassingRecords="195 (75%)" +##ValidationMetrics_RecordsPassingFilters="258 (87%)" +##ValidationMetrics_RecordsProcessed=296 +##ValidationMetrics_SamplesAssayed=383 +##VariantValidationAssessor="analysis_type=VariantValidationAssessor input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=null excludeIntervals=null reference_sequence=/humgen/1kg/reference/human_g1k_v37.fasta rodBind=[rawData/plink.renamed.sorted.fixed.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION nonDeterministicRandomSeed=false DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=1 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false disable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null help=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub maxHardy=20.0 maxNoCall=0.05 maxHomVar=1.1" +##source=PLINK +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT HG00127 HG00128 HG00136 HG00137 HG00138 HG00139 HG00152 HG00156 HG00234 HG00235 HG00237 HG00242 HG00244 HG00262 HG01055 HG01079 NA19138 NA18974 NA18523 NA12717 NA19209 NA18577 NA18973 NA18943 NA12873 NA18623 NA18622 NA18948 NA19171 NA19204 NA06994 NA18563 NA18547 NA18861 NA18608 NA18995 NA10851 NA18976 NA18603 NA19200 HG01204 HG01191 HG01101 HG00146 HG00306 NA18985 HG00160 HG00635 HG00372 HG00357 HG00634 NA18541 NA18950 NA19759 HG00351 HG00257 HG00118 HG00336 HG00448 HG01354 NA18609 HG00428 HG00326 NA11894 NA18956 HG00173 HG00117 NA11893 HG01251 HG01441 HG01437 HG00182 HG00330 HG01060 HG00329 NA18960 NA18856 NA07346 NA18871 NA19057 NA18868 NA18636 NA12830 NA19007 NA18910 NA18874 NA19056 NA19064 NA19066 NA18487 NA18642 NA19236 NA07056 NA18637 NA19235 NA19309 NA19311 NA19334 NA19346 NA19347 NA19372 NA19376 NA19383 NA19384 NA19394 NA19428 NA19430 NA19451 NA19466 NA19313 NA19321 NA19324 NA19332 NA19390 NA19436 NA19439 NA19440 NA19463 NA19470 NA19471 NA19472 NA19676 NA19660 NA19661 NA19663 NA19722 NA19725 NA19728 NA19729 NA19731 NA19749 NA19755 NA19756 NA19758 NA19770 NA19773 NA19777 NA19780 NA19783 NA20525 NA20589 NA20765 NA20802 NA20804 NA18544 NA18602 NA18546 NA18610 NA18957 NA18615 NA18616 NA19010 NA18638 NA18639 NA18627 NA19072 NA18630 NA19074 NA19080 NA19081 NA19083 NA19085 NA19088 NA20287 NA19835 NA20276 NA19818 NA20278 NA20282 NA20342 NA20296 NA20314 NA20346 NA19712 NA19198 NA19108 NA18934 NA18916 NA18907 NA18917 NA06989 NA12058 NA12341 NA12546 NA12489 HG01197 NA18983 NA11843 NA11892 NA12749 NA12282 NA12751 NA18959 NA19331 NA19453 NA20537 NA12046 NA20515 NA20516 NA20521 NA20524 NA20528 NA20759 NA20768 NA20769 NA20774 NA20775 NA20783 NA20787 NA20790 NA20800 NA20819 NA20812 NA20505 NA20530 NA20540 NA20538 NA20581 NA20815 NA20544 NA20810 NA20807 NA20816 NA20504 NA20753 NA20502 NA12342 NA19150 NA19468 NA20336 NA19395 NA19257 NA19360 NA19700 NA18867 NA20317 NA18968 NA19107 HG00111 HG00108 NA19077 NA19684 NA18511 NA12044 NA19382 NA19457 NA18933 NA18923 NA18965 HG00141 NA20341 NA18740 HG00537 HG00346 HG01173 HG00702 HG00313 HG00150 NA18612 HG00339 NA12273 HG00250 NA18593 NA18621 HG00478 HG00251 HG01070 NA19160 HG00479 HG00608 NA18573 HG00375 NA19248 NA19093 HG01170 HG00534 HG01171 HG01522 NA18624 HG00683 HG01521 NA19005 NA20412 NA18971 HG00446 NA12748 HG00530 HG00690 HG01356 HG01516 NA20532 HG00344 HG00328 NA18542 HG00254 HG00321 HG00577 HG00656 HG00342 HG00524 HG00650 HG00557 HG00319 HG00457 HG00125 HG00578 HG00543 HG00638 HG00171 HG00699 HG00595 HG00187 HG00704 HG00533 HG00596 HG00268 HG01083 HG00651 HG01133 HG00671 HG00327 HG01148 HG00246 HG00672 HG00556 HG00436 HG00554 NA18633 NA20344 NA11993 NA07037 NA11930 HG01366 HG01389 HG00620 NA19740 HG00190 HG00419 NA18535 HG01495 NA18592 HG01497 HG00174 HG01140 NA12287 HG00689 HG01550 HG00334 HG01375 HG00637 NA18507 HG01113 NA18550 NA19129 HG01551 HG01462 HG00331 NA12413 HG01456 HG01360 HG00708 HG01350 HG00684 NA19099 HG00284 NA12399 NA12286 NA12777 HG00277 HG00266 NA19985 HG00353 HG01102 NA07347 NA07051 NA19900 NA18984 NA07048 HG00640 HG01066 NA12812 HG01174 HG01188 +20 676148 . A AC . PASS AC=0;AN=758;HW=0.00;HetPct=0.0;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=1.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1342549 . A AAGAT . PASS AC=0;AN=760;HW=0.00;HetPct=0.0;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1366475 . CT C . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1550416 . C CT . PASS AC=0;AN=760;HW=0.00;HetPct=0.0;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 3700705 . CTTTGGG C . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 5724449 . T TC . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7942727 . A AC . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 9231138 . AT A . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 10090376 . T TG . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12094344 . TCAGGAGGC T . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12634463 . TGA T . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12837095 . G GA . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12928028 . TG T . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13365589 . T TG . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13926445 . TA T . PASS AC=0;AN=756;HW=0.00;HetPct=0.0;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=1.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 14287634 . AGT A . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 14983337 . AGCC A . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15037520 . A AG . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15141272 . T TC . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16192114 . AT A . PASS AC=0;AN=760;HW=0.00;HetPct=0.0;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16259934 . C CAA . PASS AC=0;AN=758;HW=0.00;HetPct=0.0;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=1.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 17250858 . T TC . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 17753474 . C CA . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 18520672 . A ATT . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 19188693 . T TC . PASS AC=0;AN=760;HW=0.00;HetPct=0.0;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 19437778 . GGCCTGGGATGTAAA G . PASS AC=0;AN=760;HW=0.00;HetPct=0.0;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 20434198 . TA T . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 20990240 . TC T . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 24710482 . GT G . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 25905250 . GT G . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 29589873 . CCTT C . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 29628180 . C CCACAAGAAG . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 29804699 . A AC . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 30567910 . T TG . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 31760870 . CG C . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32456076 . GT G . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32968409 . GTC G . PASS AC=0;AN=754;HW=0.00;HetPct=0.0;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=1.6 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 34313574 . A AT . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 35329008 . ATC A . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37954797 . A AGT . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 39607037 . C CA . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 39868369 . T TG . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 40006262 . TGAG T . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 40110981 . A AG . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 40742257 . TG T . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41964672 . A AT . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42145613 . TG T . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42930748 . A AG . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43606638 . T TC . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43826992 . GC G . PASS AC=0;AN=748;HW=0.00;HetPct=0.0;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=2.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 44470843 . GAGTGTCGT G . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 45300827 . CT C . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 46353646 . A AG . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 47428163 . C CA . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49451656 . T TG . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49561273 . A AG . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49765611 . A AC . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 50772065 . T TC . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 53538294 . T TG . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54262948 . A AC . PASS AC=0;AN=760;HW=0.00;HetPct=0.0;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 55658161 . GT G . PASS AC=0;AN=760;HW=0.00;HetPct=0.0;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 59186675 . TATTA T . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 61531765 . AG A . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 diff --git a/tests/tabix_data/vcf/11.vcf b/tests/tabix_data/vcf/11.vcf new file mode 100644 index 0000000..fe190df --- /dev/null +++ b/tests/tabix_data/vcf/11.vcf @@ -0,0 +1,216 @@ +##fileformat=VCFv4.0 +##FILTER= +##FILTER= +##FILTER= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##ValidationMetrics_HardyWeinbergViolations="25 (8%)" +##ValidationMetrics_HomVarViolations="0 (0%)" +##ValidationMetrics_NoCallViolations="13 (4%)" +##ValidationMetrics_PolymorphicPassingRecords="195 (75%)" +##ValidationMetrics_RecordsPassingFilters="258 (87%)" +##ValidationMetrics_RecordsProcessed=296 +##ValidationMetrics_SamplesAssayed=383 +##VariantValidationAssessor="analysis_type=VariantValidationAssessor input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=null excludeIntervals=null reference_sequence=/humgen/1kg/reference/human_g1k_v37.fasta rodBind=[rawData/plink.renamed.sorted.fixed.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION nonDeterministicRandomSeed=false DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=1 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false disable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null help=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub maxHardy=20.0 maxNoCall=0.05 maxHomVar=1.1" +##source=PLINK +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT HG00127 HG00128 HG00136 HG00137 HG00138 HG00139 HG00152 HG00156 HG00234 HG00235 HG00237 HG00242 HG00244 HG00262 HG01055 HG01079 NA19138 NA18974 NA18523 NA12717 NA19209 NA18577 NA18973 NA18943 NA12873 NA18623 NA18622 NA18948 NA19171 NA19204 NA06994 NA18563 NA18547 NA18861 NA18608 NA18995 NA10851 NA18976 NA18603 NA19200 HG01204 HG01191 HG01101 HG00146 HG00306 NA18985 HG00160 HG00635 HG00372 HG00357 HG00634 NA18541 NA18950 NA19759 HG00351 HG00257 HG00118 HG00336 HG00448 HG01354 NA18609 HG00428 HG00326 NA11894 NA18956 HG00173 HG00117 NA11893 HG01251 HG01441 HG01437 HG00182 HG00330 HG01060 HG00329 NA18960 NA18856 NA07346 NA18871 NA19057 NA18868 NA18636 NA12830 NA19007 NA18910 NA18874 NA19056 NA19064 NA19066 NA18487 NA18642 NA19236 NA07056 NA18637 NA19235 NA19309 NA19311 NA19334 NA19346 NA19347 NA19372 NA19376 NA19383 NA19384 NA19394 NA19428 NA19430 NA19451 NA19466 NA19313 NA19321 NA19324 NA19332 NA19390 NA19436 NA19439 NA19440 NA19463 NA19470 NA19471 NA19472 NA19676 NA19660 NA19661 NA19663 NA19722 NA19725 NA19728 NA19729 NA19731 NA19749 NA19755 NA19756 NA19758 NA19770 NA19773 NA19777 NA19780 NA19783 NA20525 NA20589 NA20765 NA20802 NA20804 NA18544 NA18602 NA18546 NA18610 NA18957 NA18615 NA18616 NA19010 NA18638 NA18639 NA18627 NA19072 NA18630 NA19074 NA19080 NA19081 NA19083 NA19085 NA19088 NA20287 NA19835 NA20276 NA19818 NA20278 NA20282 NA20342 NA20296 NA20314 NA20346 NA19712 NA19198 NA19108 NA18934 NA18916 NA18907 NA18917 NA06989 NA12058 NA12341 NA12546 NA12489 HG01197 NA18983 NA11843 NA11892 NA12749 NA12282 NA12751 NA18959 NA19331 NA19453 NA20537 NA12046 NA20515 NA20516 NA20521 NA20524 NA20528 NA20759 NA20768 NA20769 NA20774 NA20775 NA20783 NA20787 NA20790 NA20800 NA20819 NA20812 NA20505 NA20530 NA20540 NA20538 NA20581 NA20815 NA20544 NA20810 NA20807 NA20816 NA20504 NA20753 NA20502 NA12342 NA19150 NA19468 NA20336 NA19395 NA19257 NA19360 NA19700 NA18867 NA20317 NA18968 NA19107 HG00111 HG00108 NA19077 NA19684 NA18511 NA12044 NA19382 NA19457 NA18933 NA18923 NA18965 HG00141 NA20341 NA18740 HG00537 HG00346 HG01173 HG00702 HG00313 HG00150 NA18612 HG00339 NA12273 HG00250 NA18593 NA18621 HG00478 HG00251 HG01070 NA19160 HG00479 HG00608 NA18573 HG00375 NA19248 NA19093 HG01170 HG00534 HG01171 HG01522 NA18624 HG00683 HG01521 NA19005 NA20412 NA18971 HG00446 NA12748 HG00530 HG00690 HG01356 HG01516 NA20532 HG00344 HG00328 NA18542 HG00254 HG00321 HG00577 HG00656 HG00342 HG00524 HG00650 HG00557 HG00319 HG00457 HG00125 HG00578 HG00543 HG00638 HG00171 HG00699 HG00595 HG00187 HG00704 HG00533 HG00596 HG00268 HG01083 HG00651 HG01133 HG00671 HG00327 HG01148 HG00246 HG00672 HG00556 HG00436 HG00554 NA18633 NA20344 NA11993 NA07037 NA11930 HG01366 HG01389 HG00620 NA19740 HG00190 HG00419 NA18535 HG01495 NA18592 HG01497 HG00174 HG01140 NA12287 HG00689 HG01550 HG00334 HG01375 HG00637 NA18507 HG01113 NA18550 NA19129 HG01551 HG01462 HG00331 NA12413 HG01456 HG01360 HG00708 HG01350 HG00684 NA19099 HG00284 NA12399 NA12286 NA12777 HG00277 HG00266 NA19985 HG00353 HG01102 NA07347 NA07051 NA19900 NA18984 NA07048 HG00640 HG01066 NA12812 HG01174 HG01188 +20 669442 . TG T . PASS AC=54;AN=766;HW=6.74;HetPct=12.0;HomRefPct=86.9;HomVarPct=1.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 719486 . C CT . PASS AC=1;AN=760;HW=0.00;HetPct=0.3;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 890696 . C CAT . PASS AC=6;AN=766;HW=0.00;HetPct=1.6;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1102516 . CT C . PASS AC=3;AN=760;HW=0.00;HetPct=0.8;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1149576 . CT C . PASS AC=2;AN=764;HW=0.00;HetPct=0.5;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1195706 . AAG A . PASS AC=334;AN=764;HW=9.47;HetPct=44.9;HomRefPct=33.7;HomVarPct=21.1;NoCallPct=0.3 GT 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 1/1 1/1 0/1 0/0 0/0 1/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/0 1/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 . 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 1/1 1/1 0/1 0/0 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 1/1 0/0 0/1 1/1 0/0 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 1/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 1/1 +20 1655540 . AT A . PASS AC=4;AN=764;HW=0.00;HetPct=1.0;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 2889034 . AAAAT A . PASS AC=6;AN=762;HW=0.00;HetPct=1.6;HomRefPct=97.9;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 3203741 . CT C . PASS AC=4;AN=762;HW=0.00;HetPct=1.0;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 4037626 . TC T . PASS AC=194;AN=764;HW=14.70;HetPct=33.4;HomRefPct=57.7;HomVarPct=8.6;NoCallPct=0.3 GT 0/1 0/1 0/0 0/0 0/0 1/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 . 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/0 1/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 +20 4210074 . G GA . PASS AC=197;AN=762;HW=14.95;HetPct=33.7;HomRefPct=56.9;HomVarPct=8.9;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 1/1 0/1 0/0 1/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 . 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 . 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 +20 4363519 . CATT C . PASS AC=7;AN=764;HW=0.00;HetPct=1.8;HomRefPct=97.9;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 4366806 . CAAAT C . PASS AC=2;AN=762;HW=0.00;HetPct=0.5;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 4641550 . CCTTGA C . PASS AC=3;AN=766;HW=0.00;HetPct=0.8;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 5105482 . C CATTTTAGG . PASS AC=101;AN=762;HW=14.11;HetPct=20.1;HomRefPct=76.2;HomVarPct=3.1;NoCallPct=0.5 GT 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 0/0 . 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 5289619 . GA G . PASS AC=377;AN=764;HW=5.70;HetPct=53.0;HomRefPct=24.0;HomVarPct=22.7;NoCallPct=0.3 GT 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/0 1/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 1/1 1/1 0/0 1/1 0/0 1/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 1/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 . 0/0 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/0 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/0 1/1 0/0 0/0 0/1 0/0 +20 5416109 . CA C . PASS AC=2;AN=752;HW=0.00;HetPct=0.5;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=1.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 5432262 . AGT A . PASS AC=4;AN=752;HW=0.00;HetPct=1.0;HomRefPct=97.1;HomVarPct=0.0;NoCallPct=1.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 6877907 . CA C . PASS AC=2;AN=766;HW=0.00;HetPct=0.5;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 6969412 . CAAAGAAT C . PASS AC=2;AN=762;HW=0.00;HetPct=0.5;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7229260 . T TA . PASS AC=2;AN=764;HW=0.00;HetPct=0.5;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7239075 . AG A . PASS AC=5;AN=766;HW=0.00;HetPct=1.3;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7950562 . C CT . PASS AC=4;AN=760;HW=18.01;HetPct=0.5;HomRefPct=98.4;HomVarPct=0.3;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 8195466 . C CT . PASS AC=1;AN=762;HW=0.00;HetPct=0.3;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 8233352 . TACTC T . PASS AC=56;AN=764;HW=1.84;HetPct=13.1;HomRefPct=85.9;HomVarPct=0.8;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 +20 8504000 . TAG T . PASS AC=5;AN=762;HW=0.00;HetPct=1.3;HomRefPct=98.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 9921724 . AAAGT A . PASS AC=11;AN=758;HW=0.00;HetPct=2.9;HomRefPct=96.1;HomVarPct=0.0;NoCallPct=1.0 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 9925738 . T TG . PASS AC=1;AN=760;HW=0.00;HetPct=0.3;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 11229169 . T TA . PASS AC=3;AN=756;HW=0.00;HetPct=0.8;HomRefPct=97.9;HomVarPct=0.0;NoCallPct=1.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 11511920 . AC A . PASS AC=2;AN=766;HW=0.00;HetPct=0.5;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 11893900 . ATTAG A . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12021825 . A AG . PASS AC=5;AN=756;HW=0.00;HetPct=1.3;HomRefPct=97.4;HomVarPct=0.0;NoCallPct=1.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12063752 . CTT C . PASS AC=1;AN=762;HW=0.00;HetPct=0.3;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12114989 . CTA C . PASS AC=4;AN=764;HW=0.00;HetPct=1.0;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12371546 . GACA G . PASS AC=10;AN=762;HW=0.00;HetPct=2.6;HomRefPct=96.9;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12512723 . G GTT . PASS AC=6;AN=762;HW=0.00;HetPct=1.6;HomRefPct=97.9;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12692743 . TTATC T . PASS AC=8;AN=762;HW=0.00;HetPct=2.1;HomRefPct=97.4;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13003323 . GGGA G . PASS AC=3;AN=762;HW=0.00;HetPct=0.8;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13128894 . CT C . PASS AC=10;AN=764;HW=0.00;HetPct=2.6;HomRefPct=97.1;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 +20 13287841 . CAT C . PASS AC=134;AN=760;HW=0.21;HetPct=29.2;HomRefPct=67.1;HomVarPct=2.9;NoCallPct=0.8 GT 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 1/1 0/1 0/1 . 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 1/1 0/1 0/0 0/0 0/1 . 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 . 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 +20 13566260 . AAATTG A . PASS AC=374;AN=764;HW=3.95;HetPct=47.5;HomRefPct=27.2;HomVarPct=25.1;NoCallPct=0.3 GT 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/0 0/1 1/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 0/0 1/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 0/0 0/1 . 0/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 1/1 0/0 0/1 0/1 0/0 1/1 1/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 1/1 1/1 0/1 0/0 0/1 1/1 1/1 +20 13685184 . AT A . PASS AC=2;AN=764;HW=0.00;HetPct=0.5;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13716193 . GAGAA G . PASS AC=2;AN=762;HW=0.00;HetPct=0.5;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13960028 . TC T . PASS AC=188;AN=750;HW=2.44;HetPct=35.5;HomRefPct=55.6;HomVarPct=6.8;NoCallPct=2.1 GT 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 . 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 . . 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 . 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 +20 14159734 . T TA . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 14383135 . TA T . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 14669226 . G GA . PASS AC=121;AN=766;HW=1.68;HetPct=25.8;HomRefPct=71.3;HomVarPct=2.9;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 +20 14697473 . TTC T . PASS AC=9;AN=764;HW=10.31;HetPct=1.8;HomRefPct=97.7;HomVarPct=0.3;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15189597 . GA G . PASS AC=311;AN=760;HW=2.80;HetPct=46.2;HomRefPct=35.5;HomVarPct=17.5;NoCallPct=0.8 GT 1/1 0/1 0/0 0/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/0 1/1 1/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 0/1 . 0/1 0/0 0/1 1/1 0/0 0/0 0/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 1/1 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/1 . 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 1/1 0/1 0/1 1/1 0/0 1/1 0/0 0/0 0/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 1/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 1/1 . 1/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 +20 15265098 . TG T . PASS AC=125;AN=766;HW=6.76;HetPct=25.3;HomRefPct=71.0;HomVarPct=3.7;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/1 +20 15410763 . TGA T . PASS AC=29;AN=764;HW=0.00;HetPct=7.6;HomRefPct=92.2;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15543319 . AG A . PASS AC=7;AN=764;HW=0.00;HetPct=1.8;HomRefPct=97.9;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 15550845 . TG T . PASS AC=34;AN=756;HW=0.00;HetPct=8.4;HomRefPct=90.1;HomVarPct=0.3;NoCallPct=1.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15703503 . TG T . PASS AC=87;AN=750;HW=3.63;HetPct=19.1;HomRefPct=77.0;HomVarPct=1.8;NoCallPct=2.1 GT 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 . 0/0 0/0 0/1 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/1 0/0 0/1 0/0 . 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 . 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15871330 . AG A . PASS AC=1;AN=762;HW=0.00;HetPct=0.3;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16016504 . TA T . PASS AC=186;AN=764;HW=15.27;HetPct=32.4;HomRefPct=59.3;HomVarPct=8.1;NoCallPct=0.3 GT 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 1/1 0/0 0/1 1/1 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +20 16312599 . CTA C . PASS AC=2;AN=764;HW=0.00;HetPct=0.5;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16723642 . GGTT G . PASS AC=6;AN=760;HW=0.00;HetPct=1.6;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16747221 . CA C . PASS AC=291;AN=764;HW=3.13;HetPct=45.2;HomRefPct=39.2;HomVarPct=15.4;NoCallPct=0.3 GT 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/0 1/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 1/1 1/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 1/1 1/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 . 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 +20 16813850 . C CA . PASS AC=7;AN=758;HW=0.00;HetPct=1.8;HomRefPct=97.1;HomVarPct=0.0;NoCallPct=1.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 17331332 . TA T . PASS AC=80;AN=762;HW=15.60;HetPct=16.2;HomRefPct=80.9;HomVarPct=2.3;NoCallPct=0.5 GT 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 17473782 . TGC T . PASS AC=1;AN=762;HW=0.00;HetPct=0.3;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 17607627 . A AGT . PASS AC=3;AN=764;HW=0.00;HetPct=0.8;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 18417481 . AC A . PASS AC=17;AN=766;HW=0.00;HetPct=4.4;HomRefPct=95.6;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 18445795 . AAG A . PASS AC=5;AN=760;HW=0.00;HetPct=1.3;HomRefPct=97.9;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 18522725 . ATTAAC A . PASS AC=1;AN=758;HW=0.00;HetPct=0.3;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=1.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 18915562 . TAA T . PASS AC=3;AN=762;HW=0.00;HetPct=0.8;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 19111235 . C CT . PASS AC=4;AN=764;HW=0.00;HetPct=1.0;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 19805154 . CCTT C . PASS AC=3;AN=766;HW=0.00;HetPct=0.8;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 20030869 . CT C . PASS AC=362;AN=766;HW=6.74;HetPct=46.5;HomRefPct=29.5;HomVarPct=24.0;NoCallPct=0.0 GT 0/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 1/1 1/1 0/1 1/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/1 1/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 1/1 1/1 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 1/1 1/1 0/0 0/1 0/0 1/1 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/0 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 1/1 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 +20 20286529 . A AC . PASS AC=1;AN=762;HW=0.00;HetPct=0.3;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 20404656 . ATTACAGACT A . PASS AC=7;AN=766;HW=0.00;HetPct=1.8;HomRefPct=98.2;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 20716329 . CA C . PASS AC=4;AN=760;HW=0.00;HetPct=1.0;HomRefPct=98.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 20760474 . TG T . PASS AC=15;AN=764;HW=5.83;HetPct=3.4;HomRefPct=96.1;HomVarPct=0.3;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 20952825 . T TC . PASS AC=1;AN=762;HW=0.00;HetPct=0.3;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21406859 . ACTT A . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21480245 . AG A . PASS AC=1;AN=766;HW=0.00;HetPct=0.3;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21852048 . CA C . PASS AC=330;AN=762;HW=4.15;HetPct=46.5;HomRefPct=33.2;HomVarPct=19.8;NoCallPct=0.5 GT 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 1/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 1/1 0/0 1/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 . 0/1 1/1 0/0 0/1 0/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 1/1 0/1 1/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 0/0 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/0 1/1 0/0 . 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/1 1/1 0/1 1/1 0/1 0/0 1/1 0/0 1/1 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 +20 21968507 . AC A . PASS AC=7;AN=762;HW=12.61;HetPct=1.3;HomRefPct=97.9;HomVarPct=0.3;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 22434333 . C CA . PASS AC=8;AN=766;HW=0.00;HetPct=2.1;HomRefPct=97.9;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 22637424 . C CAGCCA . PASS AC=3;AN=760;HW=0.00;HetPct=0.8;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 22655862 . TATC T . PASS AC=6;AN=766;HW=0.00;HetPct=1.6;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 23200197 . ATT A . PASS AC=1;AN=766;HW=0.00;HetPct=0.3;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 23293728 . CA C . PASS AC=8;AN=754;HW=11.33;HetPct=1.6;HomRefPct=96.6;HomVarPct=0.3;NoCallPct=1.6 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 23813095 . CT C . PASS AC=26;AN=762;HW=1.46;HetPct=6.3;HomRefPct=93.0;HomVarPct=0.3;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 23815381 . CT C . PASS AC=1;AN=762;HW=0.00;HetPct=0.3;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 23889003 . GA G . PASS AC=2;AN=766;HW=0.00;HetPct=0.5;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 24855121 . CT C . PASS AC=6;AN=760;HW=0.00;HetPct=1.6;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 25503211 . CATA C . PASS AC=1;AN=758;HW=0.00;HetPct=0.3;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=1.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 29913425 . TATATC T . PASS AC=15;AN=762;HW=5.82;HetPct=3.4;HomRefPct=95.8;HomVarPct=0.3;NoCallPct=0.5 GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 30390854 . TTATACTA T . PASS AC=3;AN=766;HW=0.00;HetPct=0.8;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 30534847 . ACAAT A . PASS AC=2;AN=764;HW=0.00;HetPct=0.5;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 31412616 . CT C . PASS AC=1;AN=760;HW=0.00;HetPct=0.3;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32015223 . CT C . PASS AC=5;AN=764;HW=0.00;HetPct=1.3;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32158330 . CAG C . PASS AC=4;AN=760;HW=0.00;HetPct=1.0;HomRefPct=98.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32509752 . A AG . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32700247 . GGCGTCTGA G . PASS AC=3;AN=754;HW=0.00;HetPct=0.8;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=1.6 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 33541746 . A AAG . PASS AC=4;AN=766;HW=0.00;HetPct=1.0;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 34251969 . C CA . PASS AC=3;AN=762;HW=0.00;HetPct=0.8;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 34633573 . TAA T . PASS AC=1;AN=754;HW=0.00;HetPct=0.3;HomRefPct=98.2;HomVarPct=0.0;NoCallPct=1.6 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 34831930 . CT C . PASS AC=7;AN=766;HW=0.00;HetPct=1.8;HomRefPct=98.2;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 35357903 . GA G . PASS AC=5;AN=764;HW=0.00;HetPct=1.3;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 35847597 . CTT C . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 36658020 . TG T . PASS AC=6;AN=764;HW=0.00;HetPct=1.6;HomRefPct=98.2;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 36704724 . TC T . PASS AC=8;AN=756;HW=0.00;HetPct=2.1;HomRefPct=96.6;HomVarPct=0.0;NoCallPct=1.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 36711544 . TAAAG T . PASS AC=1;AN=762;HW=0.00;HetPct=0.3;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 36947086 . ATAC A . PASS AC=33;AN=766;HW=0.12;HetPct=8.6;HomRefPct=91.4;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37139725 . CAG C . PASS AC=5;AN=760;HW=15.80;HetPct=0.8;HomRefPct=98.2;HomVarPct=0.3;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37278654 . CAG C . PASS AC=7;AN=764;HW=0.00;HetPct=1.8;HomRefPct=97.9;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37391272 . TG T . PASS AC=4;AN=764;HW=0.00;HetPct=1.0;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37608002 . CAT C . PASS AC=7;AN=762;HW=0.00;HetPct=1.8;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37678954 . C CTGG . PASS AC=7;AN=762;HW=0.00;HetPct=1.8;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37712193 . AAG A . PASS AC=29;AN=762;HW=0.00;HetPct=7.6;HomRefPct=91.9;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37836124 . AAAT A . PASS AC=3;AN=760;HW=0.00;HetPct=0.8;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37962643 . T TAA . PASS AC=178;AN=764;HW=12.74;HetPct=31.9;HomRefPct=60.6;HomVarPct=7.3;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 1/1 0/1 0/0 1/1 1/1 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 . 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 1/1 1/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 +20 38336199 . TA T . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 38495835 . T TA . PASS AC=14;AN=762;HW=0.00;HetPct=3.7;HomRefPct=95.8;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 38696054 . GAAGA G . PASS AC=3;AN=764;HW=0.00;HetPct=0.8;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 38784318 . CCTT C . PASS AC=7;AN=762;HW=0.00;HetPct=1.8;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 39042026 . T TG . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 39420665 . AG A . PASS AC=72;AN=760;HW=3.25;HetPct=16.2;HomRefPct=81.7;HomVarPct=1.3;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 1/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 . 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 +20 40445967 . TG T . PASS AC=3;AN=762;HW=0.00;HetPct=0.8;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41000677 . T TG . PASS AC=3;AN=764;HW=0.00;HetPct=0.8;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41149621 . T TATCA . PASS AC=3;AN=760;HW=0.00;HetPct=0.8;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41364251 . A AAG . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41543685 . CTAAGGAGGGAAAAAGATATAAT C . PASS AC=12;AN=764;HW=0.00;HetPct=3.1;HomRefPct=96.6;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41851636 . TA T . PASS AC=83;AN=764;HW=18.52;HetPct=16.4;HomRefPct=80.7;HomVarPct=2.6;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 +20 42159695 . GC G . PASS AC=87;AN=762;HW=7.05;HetPct=18.5;HomRefPct=78.9;HomVarPct=2.1;NoCallPct=0.5 GT 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 . 0/0 . 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 +20 42261635 . C CATTT . PASS AC=24;AN=764;HW=2.06;HetPct=5.7;HomRefPct=93.7;HomVarPct=0.3;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42470352 . CACTT C . PASS AC=19;AN=764;HW=3.87;HetPct=4.4;HomRefPct=95.0;HomVarPct=0.3;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 42585924 . T TA . PASS AC=1;AN=754;HW=0.00;HetPct=0.3;HomRefPct=98.2;HomVarPct=0.0;NoCallPct=1.6 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42856201 . CT C . PASS AC=3;AN=766;HW=0.00;HetPct=0.8;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42909154 . T TGGGTC . PASS AC=3;AN=764;HW=0.00;HetPct=0.8;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42918721 . AG A . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43245783 . AG A . PASS AC=8;AN=766;HW=11.40;HetPct=1.6;HomRefPct=98.2;HomVarPct=0.3;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43371647 . GGGCTGTAA G . PASS AC=80;AN=760;HW=6.79;HetPct=17.2;HomRefPct=80.2;HomVarPct=1.8;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +20 43434234 . AG A . PASS AC=4;AN=766;HW=0.00;HetPct=1.0;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43539258 . T TAG . PASS AC=1;AN=762;HW=0.00;HetPct=0.3;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43993933 . CA C . PASS AC=199;AN=764;HW=8.74;HetPct=35.2;HomRefPct=56.1;HomVarPct=8.4;NoCallPct=0.3 GT 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 1/1 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/0 1/1 1/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/1 1/1 0/0 1/1 1/1 1/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 +20 44071585 . C CT . PASS AC=132;AN=764;HW=8.50;HetPct=26.1;HomRefPct=69.5;HomVarPct=4.2;NoCallPct=0.3 GT 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 +20 44220528 . T TC . PASS AC=59;AN=766;HW=1.90;HetPct=14.9;HomRefPct=84.9;HomVarPct=0.3;NoCallPct=0.0 GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +20 44340276 . AACAG A . PASS AC=37;AN=758;HW=17.93;HetPct=7.6;HomRefPct=90.3;HomVarPct=1.0;NoCallPct=1.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 44464600 . T TA . PASS AC=19;AN=762;HW=3.86;HetPct=4.4;HomRefPct=94.8;HomVarPct=0.3;NoCallPct=0.5 GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 44572563 . GA G . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 44889286 . G GC . PASS AC=13;AN=766;HW=0.00;HetPct=3.4;HomRefPct=96.6;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +20 45092013 . GT G . PASS AC=4;AN=760;HW=0.00;HetPct=1.0;HomRefPct=98.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 45406096 . T TTC . PASS AC=4;AN=760;HW=0.00;HetPct=1.0;HomRefPct=98.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 45668403 . CTG C . PASS AC=86;AN=762;HW=16.06;HetPct=17.2;HomRefPct=79.6;HomVarPct=2.6;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +20 46051811 . T TAAGC . PASS AC=2;AN=762;HW=0.00;HetPct=0.5;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 46413551 . TC T . PASS AC=2;AN=760;HW=0.00;HetPct=0.5;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 46569465 . CTG C . PASS AC=10;AN=762;HW=0.00;HetPct=2.6;HomRefPct=96.9;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 46720983 . ATACTTGG A . PASS AC=3;AN=764;HW=0.00;HetPct=0.8;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 47032179 . GC G . PASS AC=2;AN=760;HW=0.00;HetPct=0.5;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 47136092 . A AGTC . PASS AC=1;AN=760;HW=0.00;HetPct=0.3;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 47335386 . GC G . PASS AC=2;AN=762;HW=0.00;HetPct=0.5;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 47988904 . CA C . PASS AC=187;AN=760;HW=17.08;HetPct=32.1;HomRefPct=58.7;HomVarPct=8.4;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 1/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/0 1/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/1 . 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 +20 48262933 . CCTA C . PASS AC=7;AN=766;HW=0.00;HetPct=1.8;HomRefPct=98.2;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49438742 . G GT . PASS AC=8;AN=762;HW=11.37;HetPct=1.6;HomRefPct=97.7;HomVarPct=0.3;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49537420 . AG A . PASS AC=3;AN=760;HW=0.00;HetPct=0.8;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 50136971 . TTTTC T . PASS AC=8;AN=764;HW=0.00;HetPct=2.1;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 50373155 . A AT . PASS AC=7;AN=762;HW=0.00;HetPct=1.8;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 50806976 . G GAA . PASS AC=128;AN=760;HW=0.17;HetPct=28.2;HomRefPct=68.4;HomVarPct=2.6;NoCallPct=0.8 GT 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 . 0/0 . 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 +20 50961401 . G GT . PASS AC=4;AN=762;HW=0.00;HetPct=1.0;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 51547787 . AC A . PASS AC=1;AN=762;HW=0.00;HetPct=0.3;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 51838824 . GA G . PASS AC=4;AN=756;HW=17.99;HetPct=0.5;HomRefPct=97.9;HomVarPct=0.3;NoCallPct=1.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 51961394 . ATTTG A . PASS AC=8;AN=760;HW=0.00;HetPct=2.1;HomRefPct=97.1;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 53081927 . CATGA C . PASS AC=5;AN=764;HW=0.00;HetPct=1.3;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 53602394 . T TA . PASS AC=7;AN=764;HW=0.00;HetPct=1.8;HomRefPct=97.9;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54124185 . T TC . PASS AC=2;AN=766;HW=0.00;HetPct=0.5;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54150907 . CAG C . PASS AC=3;AN=754;HW=0.00;HetPct=0.8;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=1.6 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54166824 . AC A . PASS AC=2;AN=762;HW=0.00;HetPct=0.5;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54230743 . CAT C . PASS AC=2;AN=758;HW=0.00;HetPct=0.5;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=1.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54309727 . TGAGC T . PASS AC=7;AN=762;HW=12.61;HetPct=1.3;HomRefPct=97.9;HomVarPct=0.3;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54379666 . GT G . PASS AC=172;AN=766;HW=14.43;HetPct=30.8;HomRefPct=62.1;HomVarPct=7.0;NoCallPct=0.0 GT 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/1 0/1 1/1 0/0 0/0 0/0 1/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 1/1 1/1 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 +20 55264363 . AG A . PASS AC=232;AN=762;HW=15.89;HetPct=37.1;HomRefPct=50.7;HomVarPct=11.7;NoCallPct=0.5 GT 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/0 1/1 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/0 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/0 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 1/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 . 0/0 . 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 +20 55608811 . CT C . PASS AC=35;AN=762;HW=19.90;HetPct=7.0;HomRefPct=91.4;HomVarPct=1.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 55611547 . CAA C . PASS AC=1;AN=760;HW=0.00;HetPct=0.3;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 55989765 . CA C . PASS AC=208;AN=764;HW=5.71;HetPct=37.1;HomRefPct=54.0;HomVarPct=8.6;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/0 1/1 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 +20 56249865 . T TGAGG . PASS AC=4;AN=756;HW=0.00;HetPct=1.0;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=1.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 56344957 . GT G . PASS AC=1;AN=762;HW=0.00;HetPct=0.3;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 56419021 . T TG . PASS AC=2;AN=766;HW=0.00;HetPct=0.5;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 56915853 . TG T . PASS AC=17;AN=764;HW=4.78;HetPct=3.9;HomRefPct=95.6;HomVarPct=0.3;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 57676578 . CCTTT C . PASS AC=7;AN=764;HW=0.00;HetPct=1.8;HomRefPct=97.9;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 58288793 . TC T . PASS AC=44;AN=766;HW=12.53;HetPct=9.4;HomRefPct=89.6;HomVarPct=1.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 59153061 . CTG C . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 59349754 . CCT C . PASS AC=168;AN=762;HW=8.71;HetPct=31.3;HomRefPct=61.9;HomVarPct=6.3;NoCallPct=0.5 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 1/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 1/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 . 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 +20 59365768 . TG T . PASS AC=2;AN=762;HW=0.00;HetPct=0.5;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 59769242 . C CT . PASS AC=4;AN=762;HW=0.00;HetPct=1.0;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 60337932 . AC A . PASS AC=3;AN=764;HW=0.00;HetPct=0.8;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 60925525 . GC G . PASS AC=2;AN=762;HW=0.00;HetPct=0.5;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 61000018 . GC G . PASS AC=203;AN=762;HW=0.38;HetPct=39.4;HomRefPct=53.3;HomVarPct=6.8;NoCallPct=0.5 GT 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 1/1 . 0/1 . 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/0 1/1 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 +20 61983510 . TCTGC T . PASS AC=75;AN=766;HW=0.03;HetPct=18.0;HomRefPct=81.2;HomVarPct=0.8;NoCallPct=0.0 GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 +20 62154368 . G GA . PASS AC=2;AN=760;HW=0.00;HetPct=0.5;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 62310426 . CTT C . PASS AC=1;AN=756;HW=0.00;HetPct=0.3;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=1.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 62871860 . C CCCGCA . PASS AC=27;AN=764;HW=17.87;HetPct=5.5;HomRefPct=93.5;HomVarPct=0.8;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 diff --git a/tests/tabix_data/vcf/12.vcf b/tests/tabix_data/vcf/12.vcf new file mode 100644 index 0000000..e0d112c --- /dev/null +++ b/tests/tabix_data/vcf/12.vcf @@ -0,0 +1,1000 @@ +##fileformat=VCFv4.0 +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT DNA_pool_A +chr1 1281168 . A G 14 . DP=37;AF1=0.6243;CI95=0.5,1;DP4=4,0,6,0;MQ=15;PV4=1,0.027,1,1 PL:GT:GQ 43,0,4:0/1:6 +chr1 1281205 . T C 26 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=41 PL:GT:GQ 58,9,0:1/1:63 +chr1 1281206 . G C 25 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=41 PL:GT:GQ 57,9,0:1/1:63 +chr1 1922737 . G C 13.2 . DP=21;AF1=1;CI95=1,1;DP4=0,0,0,21;MQ=22 PL:GT:GQ 46,63,0:1/1:99 +chr1 21197513 . A G 55.1 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=41 PL:GT:GQ 88,21,0:1/1:84 +chr1 21343209 . T C 5.45 . DP=17;AF1=1;CI95=1,1;DP4=0,0,17,0;MQ=14 PL:GT:GQ 37,51,0:1/1:99 +chr1 22097362 . T C 4.75 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=30 PL:GT:GQ 35,9,0:1/1:63 +chr1 22254012 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 40,6,0:1/1:49 +chr1 22650927 . G A 48.1 . DP=11;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=24 PL:GT:GQ 81,21,0:1/1:84 +chr1 23535401 . C T 40.4 . DP=25;AF1=1;CI95=0.5,1;DP4=0,16,0,5;MQ=19;PV4=1,0.2,1,1 PL:GT:GQ 73,13,0:1/1:65 +chr1 23543855 . T C 49.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=44 PL:GT:GQ 82,18,0:1/1:90 +chr1 24245107 . C G 32 . DP=4;AF1=0.5001;CI95=0.5,0.5;DP4=0,2,0,2;MQ=36;PV4=1,1,1,1 PL:GT:GQ 62,0,35:0/1:38 +chr1 24274412 . G C 39.5 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=32 PL:GT:GQ 72,12,0:1/1:72 +chr1 36529832 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=46 PL:GT:GQ 73,6,0:1/1:49 +chr1 37788090 . A G 89.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=49 PL:GT:GQ 122,12,0:1/1:72 +chr1 43120440 . C T 34 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=0,1,0,2;MQ=49;PV4=1,1,1,1 PL:GT:GQ 64,0,31:0/1:34 +chr1 43980466 . C T 43 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,15;MQ=19 PL:GT:GQ 76,45,0:1/1:99 +chr1 46047795 . T C 29.1 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=31 PL:GT:GQ 62,18,0:1/1:90 +chr1 48860309 . C T 99 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=46 PL:GT:GQ 141,18,0:1/1:90 +chr1 49415599 . T C 4.61 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=34 PL:GT:GQ 34,6,0:1/1:49 +chr1 51601816 . G T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=50 PL:GT:GQ 40,6,0:1/1:49 +chr1 51955459 . G C 89.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=49 PL:GT:GQ 122,12,0:1/1:72 +chr1 68479569 . T G 12 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 43,6,0:1/1:49 +chr1 69032455 . A G 15.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=29 PL:GT:GQ 47,9,0:1/1:63 +chr1 71888225 . G T 9.31 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=43 PL:GT:GQ 40,6,0:1/1:49 +chr1 72381528 . T C 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=41 PL:GT:GQ 76,9,0:1/1:63 +chr1 82004013 . A G 37.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=50 PL:GT:GQ 70,12,0:1/1:72 +chr1 86289622 . C T 18 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=42 PL:GT:GQ 50,9,0:1/1:63 +chr1 90267663 . A G 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=45 PL:GT:GQ 54,9,0:1/1:63 +chr1 92699542 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=45 PL:GT:GQ 40,6,0:1/1:49 +chr1 94867317 . G A 26.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=45 PL:GT:GQ 58,6,0:1/1:49 +chr1 96428713 . C G 3.98 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=27 PL:GT:GQ 33,6,0:1/1:49 +chr1 100466329 . G C 4.85 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,6;MQ=22 PL:GT:GQ 36,18,0:1/1:90 +chr1 101909281 . G A 70 . DP=11;AF1=0.5;CI95=0.5,0.5;DP4=4,0,5,0;MQ=46;PV4=1,1,0.096,1 PL:GT:GQ 100,0,88:0/1:91 +chr1 106216572 . T A 22 . DP=18;AF1=1;CI95=1,1;DP4=0,0,16,0;MQ=21 PL:GT:GQ 55,48,0:1/1:99 +chr1 107901770 . T C 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 40,6,0:1/1:49 +chr1 108431179 . A G 99 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=41 PL:GT:GQ 155,24,0:1/1:96 +chr1 112005344 . C T 99 . DP=52;AF1=1;CI95=1,1;DP4=7,0,27,0;MQ=44;PV4=1,1,1,1 PL:GT:GQ 196,25,0:1/1:99 +chr1 116625452 . C T 36 . DP=44;AF1=0.5;CI95=0.5,0.5;DP4=0,23,0,20;MQ=49;PV4=1,2.3e-69,0.42,1 PL:GT:GQ 66,0,179:0/1:69 +chr1 118060710 . G T 6.98 . DP=8;AF1=0.4999;CI95=0.5,0.5;DP4=4,0,3,0;MQ=47;PV4=1,0.0071,1,1 PL:GT:GQ 36,0,73:0/1:39 +chr1 118198177 . A G 15.9 . DP=23;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=43 PL:GT:GQ 47,6,0:1/1:49 +chr1 118586346 . T C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr1 120809555 . G A 20 . DP=8;AF1=0.5;CI95=0.5,0.5;DP4=6,0,2,0;MQ=46;PV4=1,1,1,1 PL:GT:GQ 50,0,106:0/1:53 +chr1 130723110 . C A 20.7 . DP=8;AF1=0.5939;CI95=0.5,1;DP4=0,6,0,2;MQ=26;PV4=1,1,1,1 PL:GT:GQ 50,0,5:0/1:7 +chr1 133979895 . T C 14.9 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=43 PL:GT:GQ 46,6,0:1/1:49 +chr1 134977940 . C T 30 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=0,1,0,2;MQ=38;PV4=1,1,0.26,1 PL:GT:GQ 60,0,31:0/1:34 +chr1 141768589 . G A 18.1 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=4,0,4,0;MQ=51;PV4=1,2.7e-05,1,1 PL:GT:GQ 48,0,100:0/1:51 +chr1 141768590 . G A 22 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=2,0,4,0;MQ=50;PV4=1,0.0033,1,1 PL:GT:GQ 52,0,40:0/1:43 +chr1 146506051 . T C 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=43 PL:GT:GQ 76,9,0:1/1:63 +chr1 150997009 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr1 162915612 . G C 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr1 168455400 . A G 4.12 . DP=28;AF1=1;CI95=1,1;DP4=0,0,0,27;MQ=10 PL:GT:GQ 35,81,0:1/1:99 +chr1 172784744 . T C 17.8 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=48 PL:GT:GQ 49,6,0:1/1:49 +chr1 183627307 . G A 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr1 185789457 . T C 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=50 PL:GT:GQ 73,6,0:1/1:49 +chr1 187081827 . T C 4.77 . DP=10;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=17 PL:GT:GQ 36,30,0:1/1:99 +chr1 188468339 . C T 33 . DP=25;AF1=1;CI95=1,1;DP4=0,0,0,13;MQ=24 PL:GT:GQ 66,39,0:1/1:99 +chr1 188595435 . C T 41.8 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr1 188670561 . G C 3.55 . DP=22;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=18 PL:GT:GQ 34,27,0:1/1:99 +chr1 188924877 . G A 6.2 . DP=10;AF1=0.9999;CI95=0.5,1;DP4=2,0,3,0;MQ=21;PV4=1,1,1,0.3 PL:GT:GQ 35,3,0:1/1:41 +chr1 190536295 . G A 68 . DP=38;AF1=1;CI95=1,1;DP4=0,0,36,0;MQ=18 PL:GT:GQ 101,108,0:1/1:99 +chr1 191129408 . T A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=48 PL:GT:GQ 40,6,0:1/1:49 +chr1 195937816 . T C 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr1 198857619 . T C 89 . DP=61;AF1=0.5;CI95=0.5,0.5;DP4=0,38,0,17;MQ=30;PV4=1,0.032,1,1 PL:GT:GQ 119,0,139:0/1:99 +chr1 199057483 . T C 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=32 PL:GT:GQ 44,6,0:1/1:49 +chr1 200133619 . G C 5.83 . DP=49;AF1=1;CI95=0.5,1;DP4=2,0,8,0;MQ=17;PV4=1,0.059,1,0.2 PL:GT:GQ 37,12,0:1/1:72 +chr1 200729661 . A T 36 . DP=15;AF1=1;CI95=1,1;DP4=0,0,14,0;MQ=27 PL:GT:GQ 69,42,0:1/1:99 +chr1 201374519 . T C 69.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=39 PL:GT:GQ 102,12,0:1/1:72 +chr1 202811668 . G A 20.2 . DP=4;AF1=0.5163;CI95=0.5,1;DP4=0,1,0,3;MQ=24;PV4=1,1,1,1 PL:GT:GQ 50,0,12:0/1:15 +chr1 202960650 . C T 16.6 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=27 PL:GT:GQ 49,12,0:1/1:72 +chr1 205686638 . C T 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=42 PL:GT:GQ 43,9,0:1/1:63 +chr1 205949857 . A G 3.14 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=21 PL:GT:GQ 33,15,0:1/1:75 +chr1 209806643 . A G 13.2 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=21 PL:GT:GQ 46,24,0:1/1:96 +chr1 209871501 . C T 25 . DP=12;AF1=0.5;CI95=0.5,0.5;DP4=5,0,4,0;MQ=41;PV4=1,7.7e-06,1,1 PL:GT:GQ 55,0,84:0/1:58 +chr1 211051323 . G A 99 . DP=14;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=49 PL:GT:GQ 176,24,0:1/1:96 +chr1 211389716 . C T 12 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=32 PL:GT:GQ 43,6,0:1/1:49 +chr1 211868415 . G A 3.54 . DP=11;AF1=1;CI95=1,1;DP4=0,0,0,11;MQ=14 PL:GT:GQ 34,33,0:1/1:99 +chr1 211914531 . C T 84.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,1,0,4;MQ=46;PV4=1,1,1,1 PL:GT:GQ 116,7,0:1/1:57 +chr1 214691313 . A G 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=49 PL:GT:GQ 54,9,0:1/1:63 +chr1 215184650 . C T 40.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=46 PL:GT:GQ 72,6,0:1/1:49 +chr1 215995258 . A G 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=50 PL:GT:GQ 100,9,0:1/1:63 +chr1 217031394 . G C 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr1 217986960 . T C 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=36 PL:GT:GQ 76,9,0:1/1:63 +chr1 218086681 . A G 99 . DP=10;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=34 PL:GT:GQ 142,27,0:1/1:99 +chr1 218546019 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 40,6,0:1/1:49 +chr1 218632417 . G T 17.1 . DP=19;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=26 PL:GT:GQ 50,21,0:1/1:84 +chr1 218833355 . C G 23 . DP=7;AF1=0.5;CI95=0.5,0.5;DP4=5,0,2,0;MQ=39;PV4=1,1,1,1 PL:GT:GQ 53,0,63:0/1:56 +chr1 219303186 . T C 7.79 . DP=25;AF1=1;CI95=1,1;DP4=0,0,0,25;MQ=12 PL:GT:GQ 40,75,0:1/1:99 +chr1 219517634 . G A 26.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=42 PL:GT:GQ 59,12,0:1/1:72 +chr1 219590158 . T C 3.27 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 33,12,0:1/1:72 +chr1 219709853 . A T 99 . DP=124;AF1=0.5;CI95=0.5,0.5;DP4=80,0,41,0;MQ=44;PV4=1,0.26,1,1 PL:GT:GQ 143,0,156:0/1:99 +chr1 222457988 . A G 11.1 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=23 PL:GT:GQ 42,6,0:1/1:49 +chr1 222477914 . A G 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=39 PL:GT:GQ 43,9,0:1/1:63 +chr1 223010233 . A G 18.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 51,12,0:1/1:72 +chr1 223796360 . G A 6.79 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=21 PL:GT:GQ 37,6,0:1/1:49 +chr1 224273784 . A T 14.2 . DP=18;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=15 PL:GT:GQ 47,30,0:1/1:99 +chr1 224454685 . C T 46.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=32 PL:GT:GQ 79,15,0:1/1:75 +chr1 224514706 . G C 21 . DP=38;AF1=1;CI95=1,1;DP4=0,0,38,0;MQ=19 PL:GT:GQ 54,114,0:1/1:99 +chr1 224515793 . C T 99 . DP=26;AF1=1;CI95=1,1;DP4=0,0,26,0;MQ=45 PL:GT:GQ 211,78,0:1/1:99 +chr1 224692969 . C A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=36 PL:GT:GQ 40,6,0:1/1:49 +chr1 225607249 . A G 34 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=1,0,2,0;MQ=45;PV4=1,1,0,1 PL:GT:GQ 64,0,31:0/1:34 +chr1 226923918 . C A 29.1 . DP=52;AF1=1;CI95=0.5,1;DP4=0,2,0,10;MQ=27;PV4=1,1,1,1 PL:GT:GQ 62,18,0:1/1:90 +chr1 227125189 . T C 56.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=41 PL:GT:GQ 89,12,0:1/1:72 +chr1 227133712 . A T 20.1 . DP=26;AF1=0.5;CI95=0.5,0.5;DP4=11,0,10,0;MQ=23;PV4=1,1,0.48,1 PL:GT:GQ 50,0,39:0/1:42 +chr1 227943954 . G C 47 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=37 PL:GT:GQ 79,9,0:1/1:63 +chr1 227943974 . G A 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=34 PL:GT:GQ 66,12,0:1/1:72 +chr1 228067480 . A G 42.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=45 PL:GT:GQ 75,15,0:1/1:75 +chr1 228067510 . A G 99 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=45 PL:GT:GQ 140,15,0:1/1:75 +chr1 228088778 . C T 6.79 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=23 PL:GT:GQ 37,6,0:1/1:49 +chr1 228117888 . A C 13.9 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=40 PL:GT:GQ 45,6,0:1/1:49 +chr1 228139641 . T C 44.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=35 PL:GT:GQ 77,12,0:1/1:72 +chr1 228577146 . T C 26 . DP=41;AF1=0.5;CI95=0.5,0.5;DP4=0,25,0,14;MQ=22;PV4=1,1,1,0.027 PL:GT:GQ 56,0,77:0/1:59 +chr1 229001369 . C A 45 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=41 PL:GT:GQ 77,9,0:1/1:63 +chr1 229001386 . C T 8.44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 39,6,0:1/1:49 +chr1 229348080 . T C 18.1 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=0,1,0,2;MQ=40;PV4=1,0.33,0.17,0.33 PL:GT:GQ 48,0,31:0/1:34 +chr1 229439710 . C T 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=32 PL:GT:GQ 66,12,0:1/1:72 +chr1 229655149 . T C 30 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=30 PL:GT:GQ 63,24,0:1/1:96 +chr1 229660873 . C G 81 . DP=28;AF1=0.5;CI95=0.5,0.5;DP4=0,20,0,7;MQ=36;PV4=1,1,1,1 PL:GT:GQ 111,0,120:0/1:99 +chr2a 3661005 . C G 24 . DP=13;AF1=0.5001;CI95=0.5,0.5;DP4=7,0,4,0;MQ=27;PV4=1,1.1e-05,1,1 PL:GT:GQ 54,0,34:0/1:37 +chr2a 4140063 . G A 81 . DP=26;AF1=0.6671;CI95=0.5,1;DP4=18,0,8,0;MQ=24;PV4=1,8.3e-09,1,1 PL:GT:GQ 110,0,3:0/1:5 +chr2a 4248440 . T C 20 . DP=28;AF1=0.5;CI95=0.5,0.5;DP4=11,0,7,0;MQ=25;PV4=1,1,0.47,1 PL:GT:GQ 50,0,92:0/1:53 +chr2a 4707656 . A G 63 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 95,9,0:1/1:63 +chr2a 5194801 . G A 7.59 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=24 PL:GT:GQ 38,6,0:1/1:49 +chr2a 14111103 . A G 7.84 . DP=7;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=20 PL:GT:GQ 40,21,0:1/1:84 +chr2a 17799746 . A G 11.3 . DP=5;AF1=0.5001;CI95=0.5,0.5;DP4=0,3,0,2;MQ=32;PV4=1,1,1,1 PL:GT:GQ 41,0,35:0/1:37 +chr2a 24728910 . G A 45.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=28 PL:GT:GQ 78,15,0:1/1:75 +chr2a 29627939 . G T 5.44 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=27 PL:GT:GQ 36,9,0:1/1:63 +chr2a 31373164 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=44 PL:GT:GQ 73,6,0:1/1:49 +chr2a 33935228 . T C 41.8 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=51 PL:GT:GQ 73,6,0:1/1:49 +chr2a 36311856 . G A 99 . DP=30;AF1=1;CI95=1,1;DP4=0,0,0,29;MQ=44 PL:GT:GQ 213,87,0:1/1:99 +chr2a 39281204 . T C 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 100,9,0:1/1:63 +chr2a 41087565 . C T 74.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=38 PL:GT:GQ 107,12,0:1/1:72 +chr2a 45574768 . C A 11.3 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=18 PL:GT:GQ 43,9,0:1/1:63 +chr2a 55464464 . T C 26.1 . DP=7;AF1=0.9966;CI95=0.5,1;DP4=5,0,2,0;MQ=26;PV4=1,1,1,1 PL:GT:GQ 55,1,0:1/1:23 +chr2a 63107673 . T A 70.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=34 PL:GT:GQ 103,12,0:1/1:72 +chr2a 63141732 . A T 22.8 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 54,6,0:1/1:49 +chr2a 63141910 . G A 3.41 . DP=16;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=32 PL:GT:GQ 32,6,0:1/1:49 +chr2a 63141911 . C T 9.55 . DP=16;AF1=0.5031;CI95=0.5,0.5;DP4=0,2,0,3;MQ=33;PV4=1,0.43,1,1 PL:GT:GQ 39,0,19:0/1:22 +chr2a 63143543 . C T 28 . DP=18;AF1=1;CI95=1,1;DP4=0,1,0,17;MQ=16;PV4=1,1,1,1 PL:GT:GQ 61,42,0:1/1:99 +chr2a 66419805 . G A 3.69 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=23 PL:GT:GQ 34,15,0:1/1:75 +chr2a 66563922 . C T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=51 PL:GT:GQ 40,6,0:1/1:49 +chr2a 67719136 . C T 39.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 71,6,0:1/1:49 +chr2a 72781453 . A C 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=50 PL:GT:GQ 73,6,0:1/1:49 +chr2a 76733211 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr2a 78190502 . A C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr2a 85021209 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr2a 88554861 . A T 39 . DP=74;AF1=0.5;CI95=0.5,0.5;DP4=0,7,0,4;MQ=46;PV4=1,1,1,1 PL:GT:GQ 69,0,92:0/1:72 +chr2a 88554877 . A G 92 . DP=90;AF1=0.5;CI95=0.5,0.5;DP4=0,23,0,13;MQ=41;PV4=1,0.3,1,1 PL:GT:GQ 122,0,128:0/1:99 +chr2a 88824857 . G A 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=37 PL:GT:GQ 45,6,0:1/1:49 +chr2a 93546675 . C T 26 . DP=6;AF1=0.5;CI95=0.5,0.5;DP4=4,0,2,0;MQ=46;PV4=1,1,1,1 PL:GT:GQ 56,0,87:0/1:59 +chr2a 94788853 . A G 34.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=43 PL:GT:GQ 67,15,0:1/1:75 +chr2a 96738146 . T C 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=40 PL:GT:GQ 43,9,0:1/1:63 +chr2a 102737384 . A G 12.3 . DP=18;AF1=1;CI95=1,1;DP4=0,0,18,0;MQ=11 PL:GT:GQ 45,54,0:1/1:99 +chr2a 103407172 . A G 35 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=19 PL:GT:GQ 68,24,0:1/1:96 +chr2a 105774580 . T G 99 . DP=13;AF1=1;CI95=1,1;DP4=0,0,13,0;MQ=30 PL:GT:GQ 135,39,0:1/1:99 +chr2a 106376301 . C G 24.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=19 PL:GT:GQ 57,18,0:1/1:90 +chr2a 106376315 . C T 8.75 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=19 PL:GT:GQ 41,18,0:1/1:90 +chr2a 112422267 . C T 30 . DP=20;AF1=0.5;CI95=0.5,0.5;DP4=14,0,5,0;MQ=39;PV4=1,1,1,1 PL:GT:GQ 60,0,131:0/1:63 +chr2b 3049384 . A C 14.9 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 46,6,0:1/1:49 +chr2b 3049385 . G C 14.9 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 46,6,0:1/1:49 +chr2b 3049406 . C G 99 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=36 PL:GT:GQ 135,18,0:1/1:90 +chr2b 4213802 . T C 89.5 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=49 PL:GT:GQ 122,12,0:1/1:72 +chr2b 5022895 . G A 66 . DP=10;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=49 PL:GT:GQ 99,30,0:1/1:99 +chr2b 6037666 . G T 56 . DP=18;AF1=1;CI95=1,1;DP4=0,0,0,13;MQ=17 PL:GT:GQ 89,39,0:1/1:99 +chr2b 13656952 . G A 19.2 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=21 PL:GT:GQ 52,18,0:1/1:90 +chr2b 15026944 . A G 6.79 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=32 PL:GT:GQ 37,6,0:1/1:49 +chr2b 23362613 . A G 5.64 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=22 PL:GT:GQ 37,15,0:1/1:75 +chr2b 45947861 . C G 68 . DP=11;AF1=1;CI95=1,1;DP4=0,0,0,11;MQ=50 PL:GT:GQ 101,33,0:1/1:99 +chr2b 46597824 . T C 65.6 . DP=39;AF1=0.5939;CI95=0.5,1;DP4=23,0,10,0;MQ=22;PV4=1,0.014,1,1 PL:GT:GQ 95,0,5:0/1:7 +chr2b 49665191 . G T 34.1 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=37 PL:GT:GQ 67,21,0:1/1:84 +chr2b 61001546 . A G 48 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=26 PL:GT:GQ 81,24,0:1/1:96 +chr2b 88502851 . T C 4.77 . DP=4;AF1=0.5;CI95=0.5,0.5;DP4=0,2,0,2;MQ=37;PV4=1,1,0.46,1 PL:GT:GQ 33,0,34:0/1:33 +chr2b 91675431 . C T 30 . DP=14;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=27 PL:GT:GQ 63,24,0:1/1:96 +chr2b 91870148 . T G 67 . DP=14;AF1=1;CI95=1,1;DP4=0,1,0,13;MQ=47;PV4=1,1,1,1 PL:GT:GQ 100,31,0:1/1:99 +chr2b 97066826 . G A 20.1 . DP=9;AF1=0.5001;CI95=0.5,0.5;DP4=0,6,0,2;MQ=31;PV4=1,1,1,1 PL:GT:GQ 50,0,35:0/1:38 +chr2b 97670822 . G A 4.85 . DP=6;AF1=1;CI95=1,1;DP4=0,0,0,6;MQ=18 PL:GT:GQ 36,18,0:1/1:90 +chr2b 102773175 . A G 17.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=38 PL:GT:GQ 49,9,0:1/1:63 +chr2b 109805532 . T C 99 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=45 PL:GT:GQ 176,24,0:1/1:96 +chr2b 110841448 . A G 11.1 . DP=20;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=44 PL:GT:GQ 42,6,0:1/1:49 +chr2b 123217025 . T C 31.5 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=37 PL:GT:GQ 64,12,0:1/1:72 +chr2b 123263214 . A G 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=35 PL:GT:GQ 43,9,0:1/1:63 +chr2b 127747292 . C T 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=52 PL:GT:GQ 100,9,0:1/1:63 +chr2b 130121958 . A G 89.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=43 PL:GT:GQ 122,15,0:1/1:75 +chr2b 130253633 . A G 14.9 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=42 PL:GT:GQ 46,6,0:1/1:49 +chr2b 130692761 . C T 49.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=51 PL:GT:GQ 82,18,0:1/1:90 +chr2b 130743365 . A G 99 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=42 PL:GT:GQ 140,15,0:1/1:75 +chr2b 131553874 . A C 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=37 PL:GT:GQ 43,9,0:1/1:63 +chr2b 131716894 . A G 99 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=40 PL:GT:GQ 137,24,0:1/1:96 +chr2b 131716936 . G A 99 . DP=14;AF1=1;CI95=1,1;DP4=0,0,0,12;MQ=36 PL:GT:GQ 173,36,0:1/1:99 +chr2b 131716952 . A G 99 . DP=22;AF1=0.5;CI95=0.5,0.5;DP4=0,7,0,14;MQ=36;PV4=1,1,1,1 PL:GT:GQ 152,0,43:0/1:46 +chr2b 133360184 . C T 99 . DP=20;AF1=1;CI95=1,1;DP4=0,0,0,20;MQ=32 PL:GT:GQ 163,60,0:1/1:99 +chr2b 133644741 . T A 16.4 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=27 PL:GT:GQ 49,15,0:1/1:75 +chr2b 133720595 . T C 41 . DP=15;AF1=1;CI95=1,1;DP4=0,0,0,12;MQ=29 PL:GT:GQ 74,36,0:1/1:99 +chr2b 133727192 . C T 19.3 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=23 PL:GT:GQ 52,15,0:1/1:75 +chr2b 133727260 . G A 3.56 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=18 PL:GT:GQ 34,24,0:1/1:95 +chr2b 133800294 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=23 PL:GT:GQ 40,6,0:1/1:49 +chr2b 134582754 . A C 56.1 . DP=37;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=36 PL:GT:GQ 89,21,0:1/1:84 +chr2b 134582763 . G C 78 . DP=37;AF1=1;CI95=1,1;DP4=0,0,0,36;MQ=34 PL:GT:GQ 111,108,0:1/1:99 +chr2b 134809668 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr3 527814 . C G 46 . DP=9;AF1=0.5;CI95=0.5,0.5;DP4=6,0,3,0;MQ=43;PV4=1,1,1,1 PL:GT:GQ 76,0,106:0/1:79 +chr3 559510 . G A 38 . DP=27;AF1=0.5;CI95=0.5,0.5;DP4=10,0,17,0;MQ=28;PV4=1,1,0.014,1 PL:GT:GQ 68,0,111:0/1:71 +chr3 879433 . T G 32 . DP=4;AF1=0.5001;CI95=0.5,0.5;DP4=2,0,2,0;MQ=43;PV4=1,1,1,1 PL:GT:GQ 62,0,34:0/1:37 +chr3 1809645 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=51 PL:GT:GQ 73,6,0:1/1:49 +chr3 3235812 . C T 7.59 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=45 PL:GT:GQ 38,6,0:1/1:49 +chr3 3250176 . A G 83 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=32 PL:GT:GQ 116,24,0:1/1:96 +chr3 5049073 . T A 99 . DP=25;AF1=0.5;CI95=0.5,0.5;DP4=16,0,9,0;MQ=39;PV4=1,1,1,1 PL:GT:GQ 136,0,129:0/1:99 +chr3 5142874 . G A 99 . DP=38;AF1=1;CI95=1,1;DP4=0,0,38,0;MQ=28 PL:GT:GQ 179,114,0:1/1:99 +chr3 5554864 . T C 3.54 . DP=7;AF1=0.4999;CI95=0.5,0.5;DP4=0,4,0,3;MQ=27;PV4=1,1,1,1 PL:GT:GQ 31,0,35:0/1:33 +chr3 5749648 . G A 21.2 . DP=26;AF1=0.7303;CI95=0.5,1;DP4=0,7,0,7;MQ=26;PV4=1,0.16,1,0.17 PL:GT:GQ 50,0,2:0/1:3 +chr3 16451708 . A T 71.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=38 PL:GT:GQ 104,15,0:1/1:75 +chr3 23410276 . G A 99 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=45 PL:GT:GQ 140,15,0:1/1:75 +chr3 51368824 . A G 28 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=48 PL:GT:GQ 60,9,0:1/1:63 +chr3 53000453 . A G 54 . DP=10;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=19 PL:GT:GQ 87,30,0:1/1:99 +chr3 53000463 . A G 54 . DP=10;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=19 PL:GT:GQ 87,30,0:1/1:99 +chr3 59077423 . C T 77.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=33 PL:GT:GQ 110,15,0:1/1:75 +chr3 60040501 . T C 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=35 PL:GT:GQ 43,9,0:1/1:63 +chr3 64203481 . A G 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=49 PL:GT:GQ 66,12,0:1/1:72 +chr3 67947441 . C T 17.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=25 PL:GT:GQ 50,12,0:1/1:72 +chr3 76372631 . A G 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=36 PL:GT:GQ 76,9,0:1/1:63 +chr3 80611316 . C G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr3 81554381 . G T 17.6 . DP=24;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=26 PL:GT:GQ 50,12,0:1/1:72 +chr3 87614647 . A G 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=34 PL:GT:GQ 45,6,0:1/1:49 +chr3 93900455 . A T 11.6 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=13 PL:GT:GQ 44,15,0:1/1:75 +chr3 96174457 . A G 4.11 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=24 PL:GT:GQ 34,9,0:1/1:63 +chr3 96215569 . A C 3.41 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=32 PL:GT:GQ 32,6,0:1/1:49 +chr3 96587998 . A C 7.08 . DP=9;AF1=1;CI95=1,1;DP4=0,0,6,0;MQ=17 PL:GT:GQ 39,18,0:1/1:90 +chr3 99711220 . A C 12.8 . DP=11;AF1=0.9998;CI95=0.5,1;DP4=1,0,2,0;MQ=35;PV4=1,1,1,1 PL:GT:GQ 42,2,0:1/1:37 +chr3 99789741 . C G 99 . DP=18;AF1=1;CI95=1,1;DP4=0,0,17,0;MQ=47 PL:GT:GQ 210,51,0:1/1:99 +chr3 103667651 . A C 3.98 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=37 PL:GT:GQ 33,6,0:1/1:49 +chr3 104604896 . G C 55 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=50 PL:GT:GQ 87,9,0:1/1:63 +chr3 104997217 . G A 33.1 . DP=18;AF1=1;CI95=1,1;DP4=1,0,16,0;MQ=34;PV4=1,3e-10,0.17,0.36 PL:GT:GQ 66,19,0:1/1:76 +chr3 106097816 . A G 28 . DP=15;AF1=1;CI95=1,1;DP4=0,0,0,15;MQ=26 PL:GT:GQ 61,45,0:1/1:99 +chr3 106822259 . G C 99 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=50 PL:GT:GQ 140,15,0:1/1:75 +chr3 109946413 . G A 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=34 PL:GT:GQ 44,6,0:1/1:49 +chr3 121238963 . T C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=51 PL:GT:GQ 40,6,0:1/1:49 +chr3 126248567 . A G 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=33 PL:GT:GQ 45,6,0:1/1:49 +chr3 129733836 . A G 6.2 . DP=4;AF1=0.5003;CI95=0.5,0.5;DP4=1,0,3,0;MQ=43;PV4=1,0.02,0.31,1 PL:GT:GQ 35,0,28:0/1:30 +chr3 131372785 . C T 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=34 PL:GT:GQ 76,9,0:1/1:63 +chr3 132290987 . C T 22 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=45 PL:GT:GQ 54,9,0:1/1:63 +chr3 136054421 . C T 73 . DP=82;AF1=1;CI95=1,1;DP4=0,0,78,0;MQ=28 PL:GT:GQ 106,235,0:1/1:99 +chr3 141075246 . G A 30.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=41 PL:GT:GQ 62,6,0:1/1:49 +chr3 141075262 . T G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=41 PL:GT:GQ 73,6,0:1/1:49 +chr3 141430649 . G T 81.8 . DP=6;AF1=1;CI95=0.5,1;DP4=0,1,0,4;MQ=41;PV4=1,0.34,1,0.25 PL:GT:GQ 113,6,0:1/1:49 +chr3 143617747 . G T 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=29 PL:GT:GQ 54,9,0:1/1:63 +chr3 163576128 . C T 5.6 . DP=4;AF1=0.7302;CI95=0.5,1;DP4=2,0,2,0;MQ=23;PV4=1,1,1,1 PL:GT:GQ 33,0,2:0/1:3 +chr3 163839828 . A G 4.45 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=26 PL:GT:GQ 35,12,0:1/1:72 +chr3 175839340 . G T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=51 PL:GT:GQ 40,6,0:1/1:49 +chr3 190193258 . G T 3.98 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 33,6,0:1/1:49 +chr3 190777007 . G A 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr3 190970350 . A G 61 . DP=11;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=37 PL:GT:GQ 94,30,0:1/1:99 +chr3 198686408 . G A 36.6 . DP=17;AF1=1;CI95=0.5,1;DP4=0,1,0,16;MQ=25;PV4=1,1,0.026,1 PL:GT:GQ 69,11,0:1/1:66 +chr3 199277478 . T C 3.61 . DP=6;AF1=1;CI95=1,1;DP4=0,0,0,6;MQ=21 PL:GT:GQ 34,18,0:1/1:90 +chr3 199780181 . G T 77 . DP=45;AF1=0.5;CI95=0.5,0.5;DP4=0,35,0,10;MQ=33;PV4=1,1,1,1 PL:GT:GQ 107,0,114:0/1:99 +chr3 199889335 . A C 9.54 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=18 PL:GT:GQ 42,24,0:1/1:96 +chr3 200018161 . A G 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=31 PL:GT:GQ 45,6,0:1/1:49 +chr4 195475 . A G 13 . DP=13;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 44,6,0:1/1:49 +chr4 639141 . C A 14.9 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 46,6,0:1/1:49 +chr4 639152 . C T 15.2 . DP=17;AF1=0.5016;CI95=0.5,0.5;DP4=0,2,0,2;MQ=33;PV4=1,1,1,1 PL:GT:GQ 45,0,22:0/1:25 +chr4 986497 . G T 99 . DP=10;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=33 PL:GT:GQ 163,30,0:1/1:99 +chr4 986516 . C T 55.1 . DP=8;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=37 PL:GT:GQ 88,21,0:1/1:84 +chr4 1207485 . A C 14.9 . DP=22;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=45 PL:GT:GQ 46,6,0:1/1:49 +chr4 1323502 . G A 13.2 . DP=13;AF1=1;CI95=1,1;DP4=0,0,11,0;MQ=22 PL:GT:GQ 46,33,0:1/1:99 +chr4 1613521 . G A 89 . DP=16;AF1=1;CI95=1,1;DP4=0,0,16,0;MQ=32 PL:GT:GQ 122,48,0:1/1:99 +chr4 1748790 . C T 38 . DP=21;AF1=0.5005;CI95=0.5,0.5;DP4=6,0,8,0;MQ=40;PV4=1,0.09,1,1 PL:GT:GQ 68,0,27:0/1:30 +chr4 2255732 . T C 99 . DP=29;AF1=1;CI95=1,1;DP4=0,0,28,0;MQ=31 PL:GT:GQ 186,84,0:1/1:99 +chr4 3010159 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=31 PL:GT:GQ 45,6,0:1/1:49 +chr4 3545023 . A G 99 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=38 PL:GT:GQ 145,27,0:1/1:99 +chr4 3586344 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=44 PL:GT:GQ 73,6,0:1/1:49 +chr4 3879337 . A G 16.6 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 49,12,0:1/1:72 +chr4 3940733 . A G 47.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=31 PL:GT:GQ 80,15,0:1/1:75 +chr4 4410338 . T C 13.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=31 PL:GT:GQ 46,15,0:1/1:75 +chr4 4796408 . T C 41 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,16;MQ=17 PL:GT:GQ 74,48,0:1/1:99 +chr4 4796414 . A G 11.3 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,15;MQ=17 PL:GT:GQ 44,45,0:1/1:99 +chr4 6436959 . T C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 40,6,0:1/1:49 +chr4 9494256 . T C 3.41 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=37 PL:GT:GQ 32,6,0:1/1:49 +chr4 24881479 . G A 14.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=42 PL:GT:GQ 46,9,0:1/1:63 +chr4 26128644 . A G 23 . DP=18;AF1=0.5006;CI95=0.5,0.5;DP4=8,0,10,0;MQ=22;PV4=1,1,1,1 PL:GT:GQ 53,0,26:0/1:29 +chr4 42109100 . G A 17.1 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=48 PL:GT:GQ 49,9,0:1/1:63 +chr4 42309652 . C T 68 . DP=17;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=50 PL:GT:GQ 100,9,0:1/1:63 +chr4 46913966 . C T 9.08 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=16 PL:GT:GQ 41,12,0:1/1:72 +chr4 50335142 . A G 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=41 PL:GT:GQ 76,9,0:1/1:63 +chr4 51658550 . C A 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=48 PL:GT:GQ 44,6,0:1/1:49 +chr4 58258023 . T C 26 . DP=5;AF1=0.5002;CI95=0.5,0.5;DP4=0,3,0,2;MQ=34;PV4=1,1,1,0.05 PL:GT:GQ 56,0,32:0/1:35 +chr4 59219112 . C A 42.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=50 PL:GT:GQ 75,12,0:1/1:72 +chr4 62746067 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr4 67404338 . G T 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=39 PL:GT:GQ 66,12,0:1/1:72 +chr4 73353380 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr4 73946294 . G C 4.77 . DP=51;AF1=0.4999;CI95=0.5,0.5;DP4=0,5,0,3;MQ=40;PV4=1,0.19,0.37,0.11 PL:GT:GQ 33,0,64:0/1:36 +chr4 79607484 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr4 82337365 . G C 90 . DP=54;AF1=1;CI95=1,1;DP4=0,0,0,16;MQ=28 PL:GT:GQ 123,48,0:1/1:99 +chr4 82653801 . A G 4.11 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=29 PL:GT:GQ 34,9,0:1/1:63 +chr4 87130164 . C T 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=26 PL:GT:GQ 43,9,0:1/1:63 +chr4 87130176 . G A 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=26 PL:GT:GQ 43,9,0:1/1:63 +chr4 91459729 . C A 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr4 96130778 . G C 99 . DP=19;AF1=1;CI95=1,1;DP4=0,0,0,19;MQ=45 PL:GT:GQ 211,57,0:1/1:99 +chr4 100709417 . A G 45.1 . DP=16;AF1=0.505;CI95=0.5,0.5;DP4=12,0,4,0;MQ=24;PV4=1,1,1,1 PL:GT:GQ 75,0,17:0/1:20 +chr4 107276770 . C T 70 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=0,9,0,6;MQ=31;PV4=1,1,1,1 PL:GT:GQ 100,0,97:0/1:98 +chr4 115327550 . G C 42 . DP=67;AF1=1;CI95=1,1;DP4=0,1,0,66;MQ=35;PV4=1,3.2e-24,0.13,1 PL:GT:GQ 75,162,0:1/1:99 +chr4 136558502 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr4 159572459 . G A 15.1 . DP=126;AF1=0.5;CI95=0.5,0.5;DP4=0,69,0,57;MQ=39;PV4=1,4.1e-96,0.077,1 PL:GT:GQ 45,0,175:0/1:48 +chr4 174968484 . G C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=42 PL:GT:GQ 40,6,0:1/1:49 +chr4 175030633 . T C 14.3 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=29 PL:GT:GQ 47,18,0:1/1:90 +chr4 183410027 . G T 6.2 . DP=31;AF1=0.5003;CI95=0.5,0.5;DP4=2,0,2,0;MQ=45;PV4=1,0.035,1,0.21 PL:GT:GQ 35,0,28:0/1:30 +chr4 190907368 . T C 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=50 PL:GT:GQ 66,12,0:1/1:72 +chr4 192175690 . A G 76.8 . DP=7;AF1=0.95;CI95=0.5,1;DP4=0,3,0,4;MQ=35;PV4=1,1,1,1 PL:GT:GQ 105,0,0:1/1:10 +chr4 192673268 . G A 14.2 . DP=9;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=22 PL:GT:GQ 47,27,0:1/1:99 +chr4 192943966 . T C 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=44 PL:GT:GQ 73,6,0:1/1:49 +chr4 195460104 . C G 23.1 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=19 PL:GT:GQ 56,24,0:1/1:96 +chr4 198277830 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr5 170098 . A G 13 . DP=12;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=30 PL:GT:GQ 44,6,0:1/1:49 +chr5 395814 . T C 4.77 . DP=4;AF1=0.5;CI95=0.5,0.5;DP4=0,2,0,2;MQ=36;PV4=1,1,0.48,1 PL:GT:GQ 33,0,33:0/1:33 +chr5 414024 . T A 10.4 . DP=17;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=20 PL:GT:GQ 42,9,0:1/1:63 +chr5 496767 . T C 13.9 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=36 PL:GT:GQ 45,6,0:1/1:49 +chr5 805676 . C G 45 . DP=17;AF1=1;CI95=1,1;DP4=0,0,17,0;MQ=32 PL:GT:GQ 78,51,0:1/1:99 +chr5 1252896 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr5 1418370 . G A 3.65 . DP=8;AF1=0.7301;CI95=0.5,1;DP4=4,0,4,0;MQ=13;PV4=1,1,1,1 PL:GT:GQ 30,0,2:0/1:3 +chr5 1494911 . G C 62 . DP=9;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=46 PL:GT:GQ 95,24,0:1/1:96 +chr5 1494932 . C T 6.98 . DP=8;AF1=0.5001;CI95=0.5,0.5;DP4=1,0,2,0;MQ=46;PV4=1,0.1,0.077,1 PL:GT:GQ 36,0,31:0/1:33 +chr5 1506037 . T C 24.1 . DP=24;AF1=1;CI95=0.5,1;DP4=11,0,13,0;MQ=16;PV4=1,1,1,1 PL:GT:GQ 55,5,0:1/1:46 +chr5 1509406 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=47 PL:GT:GQ 73,6,0:1/1:49 +chr5 1733649 . A G 99 . DP=25;AF1=1;CI95=1,1;DP4=0,0,0,25;MQ=47 PL:GT:GQ 212,75,0:1/1:99 +chr5 1747304 . A G 12.3 . DP=12;AF1=1;CI95=1,1;DP4=0,0,0,12;MQ=19 PL:GT:GQ 45,36,0:1/1:99 +chr5 1747308 . C A 44 . DP=12;AF1=1;CI95=1,1;DP4=0,0,0,12;MQ=19 PL:GT:GQ 77,36,0:1/1:99 +chr5 3519783 . C T 21.1 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=18 PL:GT:GQ 54,24,0:1/1:96 +chr5 4101593 . A G 69.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=43 PL:GT:GQ 102,12,0:1/1:72 +chr5 7204332 . T A 4.61 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=24 PL:GT:GQ 34,6,0:1/1:49 +chr5 11510398 . A C 34 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=1,0,2,0;MQ=51;PV4=1,1,0,1 PL:GT:GQ 64,0,31:0/1:34 +chr5 15406720 . T C 6.02 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=51 PL:GT:GQ 36,6,0:1/1:49 +chr5 25152417 . C A 10.9 . DP=28;AF1=0.5718;CI95=0.5,1;DP4=0,2,0,6;MQ=25;PV4=1,1,0.21,1 PL:GT:GQ 40,0,6:0/1:8 +chr5 39072637 . A G 35.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=50 PL:GT:GQ 68,15,0:1/1:75 +chr5 46022699 . G A 44 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=35 PL:GT:GQ 76,9,0:1/1:63 +chr5 55664181 . C G 10.4 . DP=8;AF1=0.9999;CI95=0.5,1;DP4=3,0,5,0;MQ=18;PV4=1,1,1,1 PL:GT:GQ 40,3,0:1/1:41 +chr5 56253386 . T C 50.1 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=36 PL:GT:GQ 83,21,0:1/1:84 +chr5 56253447 . C T 42.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=45 PL:GT:GQ 75,12,0:1/1:72 +chr5 71950166 . G T 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=40 PL:GT:GQ 43,9,0:1/1:63 +chr5 72703090 . C T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=46 PL:GT:GQ 40,6,0:1/1:49 +chr5 73570280 . G T 5.45 . DP=41;AF1=1;CI95=1,1;DP4=0,0,41,0;MQ=15 PL:GT:GQ 37,123,0:1/1:99 +chr5 73701762 . G T 40.8 . DP=13;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=43 PL:GT:GQ 72,6,0:1/1:49 +chr5 76956867 . T C 10.2 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=46 PL:GT:GQ 41,6,0:1/1:49 +chr5 79097961 . C G 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=40 PL:GT:GQ 54,9,0:1/1:63 +chr5 87026167 . T C 22 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 54,9,0:1/1:63 +chr5 97680525 . T C 3.27 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=23 PL:GT:GQ 33,12,0:1/1:72 +chr5 100674737 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr5 105389966 . T C 3.52 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=15 PL:GT:GQ 33,9,0:1/1:63 +chr5 109998341 . A C 12.7 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=35 PL:GT:GQ 45,12,0:1/1:72 +chr5 120629105 . C T 6.79 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 37,6,0:1/1:49 +chr5 128383954 . C T 23 . DP=10;AF1=0.5;CI95=0.5,0.5;DP4=0,5,0,5;MQ=48;PV4=1,3.3e-07,1,1 PL:GT:GQ 53,0,98:0/1:56 +chr5 133925142 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr5 135375404 . T C 11.8 . DP=6;AF1=1;CI95=0.5,1;DP4=1,0,3,0;MQ=31;PV4=1,0.03,1,1 PL:GT:GQ 42,4,0:1/1:45 +chr5 136498281 . T G 13.9 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=37 PL:GT:GQ 45,6,0:1/1:49 +chr5 136717285 . A G 82.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=48 PL:GT:GQ 115,12,0:1/1:72 +chr5 136910734 . G A 62 . DP=19;AF1=1;CI95=1,1;DP4=0,1,0,13;MQ=23;PV4=1,1,1,1 PL:GT:GQ 95,31,0:1/1:99 +chr5 141208149 . C G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr5 148056348 . C A 37.1 . DP=4;AF1=0.9966;CI95=0.5,1;DP4=1,0,2,0;MQ=38;PV4=1,1,1,1 PL:GT:GQ 66,1,0:1/1:23 +chr5 151941534 . G T 46.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=34 PL:GT:GQ 79,12,0:1/1:72 +chr5 159967229 . G C 22.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=35 PL:GT:GQ 55,12,0:1/1:72 +chr5 174024541 . T G 29.5 . DP=3;AF1=0.9998;CI95=0.5,1;DP4=0,1,0,2;MQ=32;PV4=1,1,1,1 PL:GT:GQ 59,2,0:1/1:37 +chr5 175525290 . A G 3.27 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=20 PL:GT:GQ 33,12,0:1/1:72 +chr5 175988954 . A C 14.2 . DP=23;AF1=0.5;CI95=0.5,0.5;DP4=0,6,0,4;MQ=47;PV4=1,1,0.2,1 PL:GT:GQ 44,0,76:0/1:47 +chr5 176782226 . T C 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=43 PL:GT:GQ 40,6,0:1/1:49 +chr5 179132834 . C G 99 . DP=28;AF1=1;CI95=1,1;DP4=0,0,0,28;MQ=41 PL:GT:GQ 207,84,0:1/1:99 +chr5 180155809 . G C 3.01 . DP=36;AF1=0.4997;CI95=0.5,0.5;DP4=25,0,9,0;MQ=35;PV4=1,1e-15,1,1 PL:GT:GQ 30,0,121:0/1:33 +chr5 181282819 . T G 38.3 . DP=11;AF1=1;CI95=0.5,1;DP4=0,2,0,9;MQ=23;PV4=1,1,1,1 PL:GT:GQ 71,14,0:1/1:70 +chr5 182426125 . G C 29 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=26 PL:GT:GQ 61,9,0:1/1:63 +chr5 182443682 . G A 3.69 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=21 PL:GT:GQ 34,15,0:1/1:75 +chr5 183008993 . C T 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 54,9,0:1/1:63 +chr5 183312016 . G T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr6_cox_hap1 519146 . G A 17.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=30 PL:GT:GQ 49,9,0:1/1:63 +chr6_cox_hap1 687497 . A G 33 . DP=6;AF1=0.9999;CI95=0.5,1;DP4=2,0,4,0;MQ=35;PV4=1,0.0016,1,1 PL:GT:GQ 63,3,0:1/1:41 +chr6_qbl_hap2 120066 . T C 99 . DP=12;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=37 PL:GT:GQ 139,27,0:1/1:99 +chr6 277954 . C T 53 . DP=41;AF1=1;CI95=1,1;DP4=4,0,37,0;MQ=19;PV4=1,1,0.3,1 PL:GT:GQ 86,49,0:1/1:99 +chr6 593158 . A G 4.61 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=32 PL:GT:GQ 34,6,0:1/1:49 +chr6 2865562 . T G 25 . DP=9;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=23 PL:GT:GQ 58,27,0:1/1:99 +chr6 3751403 . G A 42.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=32 PL:GT:GQ 75,15,0:1/1:75 +chr6 3884989 . A G 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=36 PL:GT:GQ 45,6,0:1/1:49 +chr6 4127278 . A T 13.9 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr6 5887783 . C G 99 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=34 PL:GT:GQ 142,21,0:1/1:84 +chr6 5887811 . C T 55.1 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=34 PL:GT:GQ 88,21,0:1/1:84 +chr6 6937170 . G C 99 . DP=47;AF1=1;CI95=1,1;DP4=0,0,0,47;MQ=28 PL:GT:GQ 157,141,0:1/1:99 +chr6 7262317 . C T 13.2 . DP=50;AF1=0.5;CI95=0.5,0.5;DP4=21,0,9,0;MQ=36;PV4=1,4e-05,0.17,0.26 PL:GT:GQ 43,0,158:0/1:46 +chr6 7533214 . A G 10.4 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=26 PL:GT:GQ 42,9,0:1/1:63 +chr6 20979907 . A G 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=38 PL:GT:GQ 76,9,0:1/1:63 +chr6 22321632 . A G 41 . DP=5;AF1=0.5004;CI95=0.5,0.5;DP4=1,0,3,0;MQ=46;PV4=1,0.24,0.19,0.33 PL:GT:GQ 71,0,28:0/1:31 +chr6 25352296 . G A 7.8 . DP=4;AF1=0.5003;CI95=0.5,0.5;DP4=0,1,0,3;MQ=38;PV4=1,1,0.16,1 PL:GT:GQ 37,0,28:0/1:30 +chr6 26298040 . T A 34 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=0,1,0,2;MQ=48;PV4=1,1,0.21,0.33 PL:GT:GQ 64,0,31:0/1:34 +chr6 33428755 . G A 70 . DP=14;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=32 PL:GT:GQ 103,27,0:1/1:99 +chr6 39512099 . G A 55.1 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=50 PL:GT:GQ 88,21,0:1/1:84 +chr6 39961094 . G A 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr6 40452120 . A G 40.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 72,6,0:1/1:49 +chr6 43204766 . A G 99 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=51 PL:GT:GQ 176,24,0:1/1:96 +chr6 52696512 . C T 70 . DP=76;AF1=0.5;CI95=0.5,0.5;DP4=0,34,0,42;MQ=18;PV4=1,0.11,1,1 PL:GT:GQ 100,0,51:0/1:54 +chr6 53785550 . A G 99 . DP=20;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=46 PL:GT:GQ 190,30,0:1/1:99 +chr6 53897484 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=36 PL:GT:GQ 45,6,0:1/1:49 +chr6 57038290 . C T 10.2 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=36 PL:GT:GQ 41,6,0:1/1:49 +chr6 62925087 . G C 35 . DP=5;AF1=0.5008;CI95=0.5,0.5;DP4=1,0,4,0;MQ=36;PV4=1,1,0.2,1 PL:GT:GQ 65,0,25:0/1:28 +chr6 62925094 . T C 25.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=36 PL:GT:GQ 58,15,0:1/1:75 +chr6 70834405 . G A 72.1 . DP=13;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=29 PL:GT:GQ 105,21,0:1/1:84 +chr6 71026058 . C T 48.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=42 PL:GT:GQ 81,18,0:1/1:90 +chr6 74420752 . T C 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=39 PL:GT:GQ 76,9,0:1/1:63 +chr6 77498624 . T C 16.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=33 PL:GT:GQ 48,6,0:1/1:49 +chr6 80416836 . T C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 40,6,0:1/1:49 +chr6 113611590 . A G 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=46 PL:GT:GQ 100,9,0:1/1:63 +chr6 119308431 . T C 38.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=40 PL:GT:GQ 71,12,0:1/1:72 +chr6 151758592 . T C 3.07 . DP=17;AF1=0.9966;CI95=0.5,1;DP4=0,8,0,9;MQ=13;PV4=1,1,1,1 PL:GT:GQ 29,1,0:1/1:23 +chr6 151759358 . A G 99 . DP=27;AF1=0.5;CI95=0.5,0.5;DP4=12,0,15,0;MQ=44;PV4=1,1,1,0.19 PL:GT:GQ 171,0,128:0/1:99 +chr6 154741755 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 40,6,0:1/1:49 +chr6 161061053 . C A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=52 PL:GT:GQ 40,6,0:1/1:49 +chr6 161474189 . C T 6.02 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 36,6,0:1/1:49 +chr6 164304657 . C T 10.4 . DP=63;AF1=0.5;CI95=0.5,0.5;DP4=0,29,0,19;MQ=22;PV4=1,7.7e-11,1,0.049 PL:GT:GQ 40,0,37:0/1:38 +chr6 164703105 . T C 99 . DP=11;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=40 PL:GT:GQ 165,30,0:1/1:99 +chr6 167518328 . A G 78 . DP=41;AF1=0.5;CI95=0.5,0.5;DP4=27,0,14,0;MQ=33;PV4=1,0.026,0.43,0.056 PL:GT:GQ 108,0,149:0/1:99 +chr6 169906323 . G A 41.8 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr6 171893912 . G A 69.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=33 PL:GT:GQ 102,15,0:1/1:75 +chr6 173631604 . A G 6.98 . DP=7;AF1=0.5;CI95=0.5,0.5;DP4=4,0,3,0;MQ=37;PV4=1,0.069,1,1 PL:GT:GQ 36,0,34:0/1:35 +chr7 835856 . C T 27.5 . DP=13;AF1=0.9998;CI95=0.5,1;DP4=4,0,6,0;MQ=23;PV4=1,0.46,1,1 PL:GT:GQ 57,2,0:1/1:37 +chr7 1046005 . C T 11.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=36 PL:GT:GQ 43,9,0:1/1:63 +chr7 1564339 . C T 71 . DP=66;AF1=0.5;CI95=0.5,0.5;DP4=36,0,24,0;MQ=29;PV4=1,1,0.35,1 PL:GT:GQ 101,0,134:0/1:99 +chr7 1806266 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 73,6,0:1/1:49 +chr7 1936013 . G T 7.77 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=17 PL:GT:GQ 39,9,0:1/1:63 +chr7 2319532 . C A 4.11 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=14 PL:GT:GQ 34,9,0:1/1:63 +chr7 2682121 . C T 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=33 PL:GT:GQ 44,6,0:1/1:49 +chr7 3248116 . T C 36.5 . DP=3;AF1=0.9998;CI95=0.5,1;DP4=0,1,0,2;MQ=37;PV4=1,1,1,1 PL:GT:GQ 66,2,0:1/1:37 +chr7 3624766 . C T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=41 PL:GT:GQ 40,6,0:1/1:49 +chr7 5291140 . G C 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=37 PL:GT:GQ 45,6,0:1/1:49 +chr7 5314457 . C A 3.56 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=18 PL:GT:GQ 34,24,0:1/1:95 +chr7 5595072 . T A 79 . DP=13;AF1=0.5;CI95=0.5,0.5;DP4=8,0,5,0;MQ=31;PV4=1,1,1,1 PL:GT:GQ 109,0,57:0/1:60 +chr7 5646060 . G C 7.79 . DP=11;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=10 PL:GT:GQ 40,30,0:1/1:99 +chr7 6056816 . C G 7.08 . DP=6;AF1=0.9966;CI95=0.5,1;DP4=0,2,0,3;MQ=23;PV4=1,1,1,1 PL:GT:GQ 35,1,0:1/1:23 +chr7 6412641 . C T 40 . DP=11;AF1=1;CI95=1,1;DP4=0,0,11,0;MQ=33 PL:GT:GQ 73,33,0:1/1:99 +chr7 6766874 . A G 34.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=43 PL:GT:GQ 67,15,0:1/1:75 +chr7 8482729 . C T 5.08 . DP=16;AF1=0.8276;CI95=0.5,1;DP4=3,0,3,0;MQ=22;PV4=1,1,1,0.19 PL:GT:GQ 32,0,1:1/1:5 +chr7 9238362 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr7 9687781 . G A 33 . DP=29;AF1=0.5;CI95=0.5,0.5;DP4=0,16,0,12;MQ=48;PV4=1,6.5e-38,1,1 PL:GT:GQ 63,0,170:0/1:66 +chr7 9752803 . A T 14.2 . DP=17;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=18 PL:GT:GQ 47,27,0:1/1:99 +chr7 10240910 . T C 45.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=35 PL:GT:GQ 78,12,0:1/1:72 +chr7 11046187 . C T 86.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=47 PL:GT:GQ 119,12,0:1/1:72 +chr7 11548207 . C G 14.6 . DP=13;AF1=1;CI95=0.5,1;DP4=6,1,0,5;MQ=18;PV4=0.015,1,1,1 PL:GT:GQ 46,7,0:1/1:57 +chr7 11580317 . C T 42 . DP=12;AF1=1;CI95=1,1;DP4=0,1,0,10;MQ=22;PV4=1,1,1,1 PL:GT:GQ 75,23,0:1/1:92 +chr7 11585384 . G A 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=46 PL:GT:GQ 73,6,0:1/1:49 +chr7 13498356 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=47 PL:GT:GQ 73,6,0:1/1:49 +chr7 13500887 . G A 15.1 . DP=11;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=22 PL:GT:GQ 48,30,0:1/1:99 +chr7 13827079 . C T 6.02 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 36,6,0:1/1:49 +chr7 14403976 . T G 59 . DP=30;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=39 PL:GT:GQ 92,24,0:1/1:96 +chr7 14756588 . A G 44 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=5,0,10,0;MQ=44;PV4=1,5.3e-18,1,1 PL:GT:GQ 74,0,70:0/1:72 +chr7 14756619 . T G 44 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=5,0,10,0;MQ=44;PV4=1,6.4e-10,1,1 PL:GT:GQ 74,0,70:0/1:72 +chr7 36734598 . A C 11.1 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=40 PL:GT:GQ 42,6,0:1/1:49 +chr7 36734599 . A T 11.1 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=40 PL:GT:GQ 42,6,0:1/1:49 +chr7 36734603 . G C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=40 PL:GT:GQ 40,6,0:1/1:49 +chr7 40634921 . A C 55 . DP=13;AF1=1;CI95=1,1;DP4=0,0,13,0;MQ=39 PL:GT:GQ 88,39,0:1/1:99 +chr7 48271285 . A T 73 . DP=15;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=25 PL:GT:GQ 106,30,0:1/1:99 +chr7 56264700 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=51 PL:GT:GQ 40,6,0:1/1:49 +chr7 62326003 . C A 26.1 . DP=35;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=28 PL:GT:GQ 59,18,0:1/1:90 +chr7 109468934 . T G 5.13 . DP=10;AF1=0.9998;CI95=0.5,1;DP4=0,1,0,2;MQ=39;PV4=1,0.031,1,1 PL:GT:GQ 33,2,0:1/1:37 +chr7 110208327 . C G 16.9 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=44 PL:GT:GQ 48,6,0:1/1:49 +chr7 125654934 . A G 4.11 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=27 PL:GT:GQ 34,9,0:1/1:63 +chr7 125770209 . A C 32 . DP=31;AF1=0.5;CI95=0.5,0.5;DP4=11,0,13,0;MQ=34;PV4=1,0.00017,0.16,0.22 PL:GT:GQ 62,0,105:0/1:65 +chr7 125770265 . G C 36 . DP=16;AF1=0.5;CI95=0.5,0.5;DP4=0,5,0,5;MQ=48;PV4=1,0.0047,0.016,0.035 PL:GT:GQ 66,0,110:0/1:69 +chr7 126687042 . A G 21.1 . DP=36;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=22 PL:GT:GQ 54,21,0:1/1:84 +chr7 132292897 . G T 99 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=43 PL:GT:GQ 167,21,0:1/1:84 +chr7 132334562 . A C 23 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=23 PL:GT:GQ 56,30,0:1/1:99 +chr7 132431838 . C T 13.3 . DP=5;AF1=1;CI95=0.5,1;DP4=1,0,4,0;MQ=23;PV4=1,1,1,1 PL:GT:GQ 44,5,0:1/1:46 +chr7 136324945 . T C 13.7 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=35 PL:GT:GQ 46,12,0:1/1:72 +chr7 136957634 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=43 PL:GT:GQ 40,6,0:1/1:49 +chr7 141746871 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 40,6,0:1/1:49 +chr7 146831870 . C T 4.77 . DP=14;AF1=0.5003;CI95=0.5,0.5;DP4=1,0,3,0;MQ=37;PV4=1,0.0029,0.28,1 PL:GT:GQ 33,0,28:0/1:30 +chr7 147142770 . T C 45 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=31 PL:GT:GQ 77,9,0:1/1:63 +chr7 147713906 . C T 4.77 . DP=8;AF1=0.5002;CI95=0.5,0.5;DP4=2,0,4,0;MQ=35;PV4=1,8.9e-06,0.48,0.27 PL:GT:GQ 33,0,29:0/1:31 +chr7 148742642 . G A 68 . DP=14;AF1=0.5032;CI95=0.5,0.5;DP4=4,0,10,0;MQ=28;PV4=1,1,1,1 PL:GT:GQ 98,0,19:0/1:22 +chr7 148879148 . C T 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=48 PL:GT:GQ 54,9,0:1/1:63 +chr7 149484407 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=45 PL:GT:GQ 73,6,0:1/1:49 +chr7 152444478 . A G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=36 PL:GT:GQ 44,6,0:1/1:49 +chr7 154106613 . C T 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=51 PL:GT:GQ 100,9,0:1/1:63 +chr7 154776891 . G T 14.4 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=31 PL:GT:GQ 47,15,0:1/1:75 +chr7 155882061 . A C 29 . DP=24;AF1=0.502;CI95=0.5,0.5;DP4=0,1,0,4;MQ=46;PV4=1,0.018,0.15,0.29 PL:GT:GQ 59,0,21:0/1:24 +chr7 155956844 . G C 23 . DP=11;AF1=0.5;CI95=0.5,0.5;DP4=0,7,0,4;MQ=38;PV4=1,1,0.38,1 PL:GT:GQ 53,0,103:0/1:56 +chr7 156277694 . G A 62 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=46 PL:GT:GQ 95,24,0:1/1:96 +chr7 156720588 . T C 16.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=29 PL:GT:GQ 48,9,0:1/1:63 +chr7 156807649 . T C 3.01 . DP=30;AF1=0.4997;CI95=0.5,0.5;DP4=0,4,0,3;MQ=43;PV4=1,0.16,0.15,1 PL:GT:GQ 30,0,72:0/1:33 +chr7 157331292 . G T 43.1 . DP=7;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=34 PL:GT:GQ 76,21,0:1/1:84 +chr7 157382957 . T C 33.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=43 PL:GT:GQ 66,12,0:1/1:72 +chr8 556382 . A G 37.1 . DP=5;AF1=0.9966;CI95=0.5,1;DP4=2,0,3,0;MQ=31;PV4=1,1,1,1 PL:GT:GQ 66,1,0:1/1:23 +chr8 1661673 . T C 9.31 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr8 7379751 . C A 6.24 . DP=8;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=19 PL:GT:GQ 38,21,0:1/1:84 +chr8 8160505 . A T 68.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=35 PL:GT:GQ 101,12,0:1/1:72 +chr8 8160508 . C T 24.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=35 PL:GT:GQ 57,12,0:1/1:72 +chr8 16781011 . A G 55.5 . DP=9;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=34 PL:GT:GQ 88,12,0:1/1:72 +chr8 18716499 . A T 20 . DP=10;AF1=0.5;CI95=0.5,0.5;DP4=0,4,0,2;MQ=29;PV4=1,1,1,1 PL:GT:GQ 50,0,52:0/1:51 +chr8 23326483 . A G 60 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=47 PL:GT:GQ 92,9,0:1/1:63 +chr8 25842819 . T A 12 . DP=18;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=47 PL:GT:GQ 43,6,0:1/1:49 +chr8 26300279 . T C 34 . DP=44;AF1=1;CI95=1,1;DP4=0,0,41,0;MQ=21 PL:GT:GQ 67,123,0:1/1:99 +chr8 29673470 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=41 PL:GT:GQ 73,6,0:1/1:49 +chr8 29673473 . C G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=41 PL:GT:GQ 40,6,0:1/1:49 +chr8 31685466 . C T 34 . DP=17;AF1=0.5;CI95=0.5,0.5;DP4=10,0,5,0;MQ=28;PV4=1,0.072,1,0.36 PL:GT:GQ 64,0,50:0/1:53 +chr8 37378739 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=34 PL:GT:GQ 45,6,0:1/1:49 +chr8 51325952 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr8 59221963 . G A 16.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=29 PL:GT:GQ 48,9,0:1/1:63 +chr8 62764995 . T G 20 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=32 PL:GT:GQ 52,9,0:1/1:63 +chr8 63157426 . C G 41.6 . DP=22;AF1=1;CI95=0.5,1;DP4=0,7,0,15;MQ=19;PV4=1,1,1,0.25 PL:GT:GQ 74,11,0:1/1:66 +chr8 68710444 . G A 30 . DP=5;AF1=0.6671;CI95=0.5,1;DP4=3,0,2,0;MQ=32;PV4=1,1,1,1 PL:GT:GQ 59,0,3:0/1:5 +chr8 76416560 . G A 89.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=46 PL:GT:GQ 122,12,0:1/1:72 +chr8 81425275 . T G 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=50 PL:GT:GQ 100,9,0:1/1:63 +chr8 89842286 . G C 4.61 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=30 PL:GT:GQ 34,6,0:1/1:49 +chr8 100926281 . G A 38 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=41 PL:GT:GQ 70,9,0:1/1:63 +chr8 102746002 . G C 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr8 107850176 . C T 43.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=45 PL:GT:GQ 76,18,0:1/1:90 +chr8 109966441 . T C 27.3 . DP=9;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=38 PL:GT:GQ 60,15,0:1/1:75 +chr8 118811716 . G T 99 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=50 PL:GT:GQ 155,18,0:1/1:90 +chr8 119440254 . A T 58.5 . DP=5;AF1=0.8277;CI95=0.5,1;DP4=2,0,3,0;MQ=34;PV4=1,1,1,0.14 PL:GT:GQ 87,0,1:1/1:5 +chr8 121236024 . G A 39.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=48 PL:GT:GQ 71,6,0:1/1:49 +chr8 125489079 . C T 13 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr8 128502549 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=45 PL:GT:GQ 73,6,0:1/1:49 +chr8 128502551 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=45 PL:GT:GQ 73,6,0:1/1:49 +chr8 130951113 . G A 4.61 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=19 PL:GT:GQ 34,6,0:1/1:49 +chr8 135307123 . G A 6.02 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=45 PL:GT:GQ 36,6,0:1/1:49 +chr8 138814155 . C T 57.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=46 PL:GT:GQ 90,18,0:1/1:90 +chr8 140566111 . A G 18.1 . DP=12;AF1=1;CI95=1,1;DP4=0,0,0,12;MQ=15 PL:GT:GQ 51,36,0:1/1:99 +chr8 141586480 . T G 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=40 PL:GT:GQ 76,9,0:1/1:63 +chr8 143376712 . A G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr8 150662729 . T C 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr8 150741294 . A G 25.1 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=34 PL:GT:GQ 58,18,0:1/1:90 +chr8 150975618 . A G 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 40,6,0:1/1:49 +chr8 151580103 . T C 6.02 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=20 PL:GT:GQ 36,6,0:1/1:49 +chr8 151634410 . G T 48 . DP=17;AF1=0.5;CI95=0.5,0.5;DP4=0,12,0,5;MQ=39;PV4=1,0.072,1,1 PL:GT:GQ 78,0,125:0/1:81 +chr8 151709267 . G A 91.1 . DP=8;AF1=0.5064;CI95=0.5,0.5;DP4=0,1,0,7;MQ=40;PV4=1,1,0.28,0.37 PL:GT:GQ 121,0,16:0/1:19 +chr8 152636420 . G A 8.75 . DP=3;AF1=0.9966;CI95=0.5,1;DP4=0,1,0,2;MQ=30;PV4=1,1,1,1 PL:GT:GQ 37,1,0:1/1:23 +chr8 152706967 . G A 3.01 . DP=10;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=16 PL:GT:GQ 33,30,0:1/1:99 +chr8 152786522 . T C 80.1 . DP=16;AF1=0.5102;CI95=0.5,0.5;DP4=0,4,0,12;MQ=31;PV4=1,0.25,1,1 PL:GT:GQ 110,0,14:0/1:17 +chr8 152863132 . T G 5.44 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=30 PL:GT:GQ 36,9,0:1/1:63 +chr9 23235268 . C T 12 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=32 PL:GT:GQ 43,6,0:1/1:49 +chr9 26391176 . T C 15.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 47,6,0:1/1:49 +chr9 26868232 . C G 63 . DP=20;AF1=0.5025;CI95=0.5,0.5;DP4=7,0,13,0;MQ=22;PV4=1,0.2,1,0.44 PL:GT:GQ 93,0,20:0/1:23 +chr9 34223668 . C T 22 . DP=16;AF1=0.5;CI95=0.5,0.5;DP4=0,9,0,7;MQ=27;PV4=1,0.14,0.34,1 PL:GT:GQ 52,0,79:0/1:55 +chr9 39696645 . G A 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=41 PL:GT:GQ 43,9,0:1/1:63 +chr9 40654130 . T G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 44,6,0:1/1:49 +chr9 41145321 . T G 46.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=33 PL:GT:GQ 79,12,0:1/1:72 +chr9 42273483 . G A 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr9 55633192 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr9 58705807 . T C 70 . DP=10;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=24 PL:GT:GQ 103,30,0:1/1:99 +chr9 61697149 . C G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr9 63152790 . A C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 40,6,0:1/1:49 +chr9 63703913 . C G 90.1 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=38 PL:GT:GQ 123,21,0:1/1:84 +chr9 65116068 . T C 70 . DP=13;AF1=1;CI95=1,1;DP4=0,0,0,13;MQ=49 PL:GT:GQ 103,39,0:1/1:99 +chr9 71266598 . C A 3.98 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 33,6,0:1/1:49 +chr9 73188677 . G T 52 . DP=294;AF1=1;CI95=1,1;DP4=44,0,245,0;MQ=33;PV4=1,0.28,0.0092,1 PL:GT:GQ 85,147,0:1/1:99 +chr9 78854179 . G T 22 . DP=97;AF1=0.5;CI95=0.5,0.5;DP4=21,0,12,0;MQ=44;PV4=1,0.02,0.032,0.0033 PL:GT:GQ 52,0,158:0/1:55 +chr9 82964679 . A C 13.2 . DP=19;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=36 PL:GT:GQ 45,9,0:1/1:63 +chr9 84124545 . G T 57 . DP=11;AF1=0.5;CI95=0.5,0.5;DP4=2,0,3,0;MQ=49;PV4=1,1,0.024,1 PL:GT:GQ 87,0,59:0/1:62 +chr9 86552862 . C T 14.4 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=26 PL:GT:GQ 47,15,0:1/1:75 +chr9 87548941 . A G 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=49 PL:GT:GQ 54,9,0:1/1:63 +chr9 89021101 . G A 89.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=49 PL:GT:GQ 122,12,0:1/1:72 +chr9 90447825 . G A 9.31 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=46 PL:GT:GQ 40,6,0:1/1:49 +chr9 92462035 . C A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=36 PL:GT:GQ 40,6,0:1/1:49 +chr9 93077294 . T G 5.44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=31 PL:GT:GQ 36,9,0:1/1:63 +chr9 93998137 . G A 68 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=46 PL:GT:GQ 100,9,0:1/1:63 +chr9 93998148 . C T 21.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=36 PL:GT:GQ 54,15,0:1/1:75 +chr9 95028964 . C A 99 . DP=83;AF1=0.5;CI95=0.5,0.5;DP4=0,57,0,26;MQ=32;PV4=1,9.3e-08,1,0.092 PL:GT:GQ 134,0,120:0/1:99 +chr9 103829155 . A G 33 . DP=96;AF1=1;CI95=1,1;DP4=0,0,96,0;MQ=16 PL:GT:GQ 66,255,0:1/1:99 +chr9 104981331 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=43 PL:GT:GQ 73,6,0:1/1:49 +chr9 111070656 . G A 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr9 117395657 . T C 16.4 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=23 PL:GT:GQ 49,15,0:1/1:75 +chr9 117718907 . A G 46.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=29 PL:GT:GQ 79,18,0:1/1:90 +chr9 119149161 . T C 3.14 . DP=65;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=22 PL:GT:GQ 33,15,0:1/1:75 +chr9 124528802 . G A 78 . DP=23;AF1=1;CI95=1,1;DP4=0,0,13,0;MQ=25 PL:GT:GQ 111,39,0:1/1:99 +chr9 126707903 . G A 26 . DP=37;AF1=0.5;CI95=0.5,0.5;DP4=0,21,0,8;MQ=46;PV4=1,2.6e-07,0.21,0.42 PL:GT:GQ 56,0,175:0/1:59 +chr9 128700686 . C G 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=50 PL:GT:GQ 66,12,0:1/1:72 +chr9 129084077 . G A 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=41 PL:GT:GQ 43,9,0:1/1:63 +chr9 129116900 . A T 20 . DP=13;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=30 PL:GT:GQ 52,9,0:1/1:63 +chr9 130290720 . C G 21.8 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 53,6,0:1/1:49 +chr9 130306057 . C G 71 . DP=14;AF1=1;CI95=1,1;DP4=0,0,14,0;MQ=28 PL:GT:GQ 104,42,0:1/1:99 +chr9 130528990 . G A 99 . DP=31;AF1=1;CI95=1,1;DP4=0,0,31,0;MQ=27 PL:GT:GQ 174,93,0:1/1:99 +chr9 130529002 . A T 7.79 . DP=30;AF1=1;CI95=1,1;DP4=0,0,11,0;MQ=15 PL:GT:GQ 40,33,0:1/1:99 +chr9 130639996 . A G 8.44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=51 PL:GT:GQ 39,6,0:1/1:49 +chr9 130704890 . A G 3.27 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=26 PL:GT:GQ 33,12,0:1/1:72 +chr9 130708345 . G A 13.3 . DP=11;AF1=0.9966;CI95=0.5,1;DP4=0,2,0,3;MQ=38;PV4=1,0.096,1,1 PL:GT:GQ 42,1,0:1/1:23 +chr9 131001601 . T A 3.98 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=31 PL:GT:GQ 33,6,0:1/1:49 +chr9 131058539 . T A 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=44 PL:GT:GQ 44,6,0:1/1:49 +chr9 131808965 . C T 42 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=37 PL:GT:GQ 75,27,0:1/1:99 +chr9 132551867 . C T 17.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=25 PL:GT:GQ 49,9,0:1/1:63 +chr9 132685120 . A G 4.75 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=25 PL:GT:GQ 35,9,0:1/1:63 +chr9 133175050 . A G 18.1 . DP=30;AF1=1;CI95=1,1;DP4=0,0,17,0;MQ=20 PL:GT:GQ 51,51,0:1/1:99 +chr9 133584978 . A G 99 . DP=25;AF1=1;CI95=1,1;DP4=0,0,25,0;MQ=45 PL:GT:GQ 212,75,0:1/1:99 +chr9 133661895 . A G 99 . DP=17;AF1=1;CI95=1,1;DP4=0,0,14,0;MQ=31 PL:GT:GQ 138,42,0:1/1:99 +chr9 133670376 . T C 68 . DP=19;AF1=1;CI95=1,1;DP4=0,1,0,16;MQ=39;PV4=1,1.4e-20,1,1 PL:GT:GQ 101,39,0:1/1:99 +chr9 133843777 . T C 99 . DP=9;AF1=0.5129;CI95=0.5,0.5;DP4=1,0,8,0;MQ=43;PV4=1,1,1,1 PL:GT:GQ 154,0,13:0/1:16 +chr9 134017265 . G C 3.27 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=13 PL:GT:GQ 33,12,0:1/1:72 +chr9 134105563 . T C 34.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=39 PL:GT:GQ 67,18,0:1/1:90 +chr9 134608906 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=46 PL:GT:GQ 73,6,0:1/1:49 +chr9 134861929 . T A 9.49 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=30 PL:GT:GQ 41,9,0:1/1:63 +chr10 796662 . A G 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=46 PL:GT:GQ 54,9,0:1/1:63 +chr10 1216716 . T A 18.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 51,12,0:1/1:72 +chr10 1220781 . G A 21 . DP=9;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=18 PL:GT:GQ 54,27,0:1/1:99 +chr10 1225208 . T C 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=47 PL:GT:GQ 100,9,0:1/1:63 +chr10 1727946 . T C 14.2 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=27 PL:GT:GQ 47,21,0:1/1:84 +chr10 5986542 . T C 83 . DP=93;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=39 PL:GT:GQ 116,30,0:1/1:99 +chr10 6436277 . G A 6.02 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 36,6,0:1/1:49 +chr10 7704114 . C A 35 . DP=6;AF1=0.9999;CI95=0.5,1;DP4=0,2,0,4;MQ=29;PV4=1,0.27,1,0.27 PL:GT:GQ 65,3,0:1/1:41 +chr10 10881734 . A G 9.52 . DP=9;AF1=0.5;CI95=0.5,0.5;DP4=4,0,5,0;MQ=42;PV4=1,0.0026,0.14,1 PL:GT:GQ 39,0,91:0/1:42 +chr10 13099383 . G A 27.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=48 PL:GT:GQ 60,12,0:1/1:72 +chr10 15764077 . G C 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=40 PL:GT:GQ 43,9,0:1/1:63 +chr10 18091502 . T C 47 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=38 PL:GT:GQ 79,9,0:1/1:63 +chr10 19645913 . A T 15.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=43 PL:GT:GQ 47,6,0:1/1:49 +chr10 22845062 . C T 18.1 . DP=8;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=18 PL:GT:GQ 51,21,0:1/1:84 +chr10 28282802 . T C 69 . DP=12;AF1=1;CI95=1,1;DP4=0,0,12,0;MQ=42 PL:GT:GQ 102,36,0:1/1:99 +chr10 28496872 . T G 8.44 . DP=11;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=45 PL:GT:GQ 39,6,0:1/1:49 +chr10 32746793 . G A 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=46 PL:GT:GQ 73,6,0:1/1:49 +chr10 41437604 . T G 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=39 PL:GT:GQ 43,9,0:1/1:63 +chr10 43051239 . C T 6.98 . DP=3;AF1=0.5001;CI95=0.5,0.5;DP4=1,0,2,0;MQ=40;PV4=1,0.33,0.33,1 PL:GT:GQ 36,0,31:0/1:33 +chr10 44455192 . C T 4.41 . DP=6;AF1=0.8276;CI95=0.5,1;DP4=0,3,0,3;MQ=21;PV4=1,1,1,1 PL:GT:GQ 31,0,1:1/1:5 +chr10 48387336 . A G 13 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr10 51561705 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=45 PL:GT:GQ 40,6,0:1/1:49 +chr10 51561712 . C G 39.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=45 PL:GT:GQ 71,6,0:1/1:49 +chr10 55617954 . G A 8.44 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=31 PL:GT:GQ 39,6,0:1/1:49 +chr10 55718281 . T A 3.41 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=32 PL:GT:GQ 32,6,0:1/1:49 +chr10 55888771 . T C 23.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=43 PL:GT:GQ 56,12,0:1/1:72 +chr10 56025569 . C G 34.1 . DP=3;AF1=0.5064;CI95=0.5,0.5;DP4=0,1,0,2;MQ=39;PV4=1,1,1,1 PL:GT:GQ 64,0,16:0/1:19 +chr10 57384943 . G T 84 . DP=29;AF1=0.5;CI95=0.5,0.5;DP4=16,0,13,0;MQ=26;PV4=1,0.015,1,1 PL:GT:GQ 114,0,110:0/1:99 +chr10 59873077 . T G 49 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=42 PL:GT:GQ 82,24,0:1/1:96 +chr10 61329572 . C T 15.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 47,6,0:1/1:49 +chr10 63790636 . T G 32.1 . DP=19;AF1=1;CI95=1,1;DP4=1,0,10,0;MQ=28;PV4=1,0.14,1,1 PL:GT:GQ 65,22,0:1/1:88 +chr10 64466048 . C G 18.2 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=28 PL:GT:GQ 51,18,0:1/1:90 +chr10 65053440 . G T 99 . DP=10;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=39 PL:GT:GQ 153,30,0:1/1:99 +chr10 65407358 . C G 84.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=45 PL:GT:GQ 117,15,0:1/1:75 +chr10 65605291 . G A 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=51 PL:GT:GQ 73,6,0:1/1:49 +chr10 66104447 . T C 99 . DP=47;AF1=0.5;CI95=0.5,0.5;DP4=0,25,0,21;MQ=34;PV4=1,1,0.15,1 PL:GT:GQ 136,0,162:0/1:99 +chr10 82160859 . G C 99 . DP=17;AF1=1;CI95=1,1;DP4=0,0,0,13;MQ=36 PL:GT:GQ 153,39,0:1/1:99 +chr10 82198579 . C T 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr10 87086290 . A G 4.13 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=17 PL:GT:GQ 35,27,0:1/1:99 +chr10 89550621 . T G 74 . DP=47;AF1=1;CI95=1,1;DP4=0,0,0,45;MQ=45 PL:GT:GQ 107,135,0:1/1:99 +chr10 92325046 . G A 42.3 . DP=18;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=45 PL:GT:GQ 75,15,0:1/1:75 +chr10 94488050 . A G 5.46 . DP=4;AF1=0.5;CI95=0.5,0.5;DP4=2,0,2,0;MQ=43;PV4=1,0.16,1,1 PL:GT:GQ 34,0,34:0/1:34 +chr10 95024815 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=36 PL:GT:GQ 45,6,0:1/1:49 +chr10 95466306 . G A 53 . DP=7;AF1=0.6671;CI95=0.5,1;DP4=0,4,0,3;MQ=33;PV4=1,1,1,1 PL:GT:GQ 82,0,3:0/1:5 +chr10 100256777 . T G 3.83 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=23 PL:GT:GQ 34,12,0:1/1:72 +chr10 101510485 . T C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr10 101530760 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr10 101879744 . T C 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=44 PL:GT:GQ 54,9,0:1/1:63 +chr10 102147276 . G C 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=33 PL:GT:GQ 43,9,0:1/1:63 +chr10 102642248 . T G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr10 107666616 . T C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=43 PL:GT:GQ 40,6,0:1/1:49 +chr10 108319945 . C G 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=29 PL:GT:GQ 43,9,0:1/1:63 +chr10 109734371 . G A 12.7 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=35 PL:GT:GQ 45,12,0:1/1:72 +chr10 112870604 . C T 46.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=36 PL:GT:GQ 79,12,0:1/1:72 +chr10 115304673 . T C 11.3 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=42 PL:GT:GQ 43,9,0:1/1:63 +chr10 119380588 . G A 14.2 . DP=4;AF1=0.502;CI95=0.5,0.5;DP4=1,0,3,0;MQ=43;PV4=1,0.18,0.32,1 PL:GT:GQ 44,0,21:0/1:24 +chr10 123063756 . C T 14.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=23 PL:GT:GQ 46,9,0:1/1:63 +chr10 128424770 . T G 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=30 PL:GT:GQ 45,6,0:1/1:49 +chr10 131229204 . T C 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=40 PL:GT:GQ 76,9,0:1/1:63 +chr10 132420570 . G C 89.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=49 PL:GT:GQ 122,12,0:1/1:72 +chr10 132528066 . C T 99 . DP=19;AF1=1;CI95=1,1;DP4=0,0,19,0;MQ=42 PL:GT:GQ 213,57,0:1/1:99 +chr10 132644619 . G A 19.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=23 PL:GT:GQ 52,15,0:1/1:75 +chr10 132707581 . G C 9.11 . DP=51;AF1=0.9998;CI95=0.5,1;DP4=1,0,2,0;MQ=25;PV4=1,1,1,1 PL:GT:GQ 38,2,0:1/1:37 +chr10 133026892 . T C 55.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=44 PL:GT:GQ 88,18,0:1/1:90 +chr11 768033 . T C 33.5 . DP=4;AF1=0.8277;CI95=0.5,1;DP4=0,2,0,2;MQ=32;PV4=1,1,1,1 PL:GT:GQ 62,0,1:1/1:5 +chr11 768042 . T C 33.5 . DP=6;AF1=0.8277;CI95=0.5,1;DP4=0,2,0,2;MQ=32;PV4=1,1,1,1 PL:GT:GQ 62,0,1:1/1:5 +chr11 874568 . G C 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=33 PL:GT:GQ 66,12,0:1/1:72 +chr11 1009210 . T C 4 . DP=70;AF1=0.6241;CI95=0.5,1;DP4=0,3,0,8;MQ=24;PV4=1,1,0.5,1 PL:GT:GQ 31,0,4:0/1:6 +chr11 1016692 . C T 27 . DP=39;AF1=1;CI95=1,1;DP4=0,0,0,38;MQ=22 PL:GT:GQ 60,114,0:1/1:99 +chr11 1034477 . A G 66 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=42 PL:GT:GQ 98,9,0:1/1:63 +chr11 1074037 . G A 4.13 . DP=9;AF1=0.5001;CI95=0.5,0.5;DP4=4,0,5,0;MQ=24;PV4=1,1,0.43,1 PL:GT:GQ 32,0,30:0/1:31 +chr11 1556298 . G A 11.8 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=33 PL:GT:GQ 44,12,0:1/1:72 +chr11 1824777 . T C 27 . DP=10;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=28 PL:GT:GQ 60,30,0:1/1:99 +chr11 3395801 . C T 22 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 54,9,0:1/1:63 +chr11 3411901 . G A 4.75 . DP=17;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=29 PL:GT:GQ 35,9,0:1/1:63 +chr11 3731606 . A C 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=39 PL:GT:GQ 43,9,0:1/1:63 +chr11 3783855 . C T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=44 PL:GT:GQ 40,6,0:1/1:49 +chr11 3967636 . A G 4.29 . DP=20;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=24 PL:GT:GQ 35,15,0:1/1:75 +chr11 4385618 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=31 PL:GT:GQ 45,6,0:1/1:49 +chr11 4424365 . T A 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr11 5295586 . C T 3.01 . DP=52;AF1=0.4997;CI95=0.5,0.5;DP4=33,0,10,0;MQ=29;PV4=1,0.0045,0.3,0.17 PL:GT:GQ 30,0,131:0/1:33 +chr11 6157144 . C G 45.1 . DP=14;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=35 PL:GT:GQ 78,21,0:1/1:84 +chr11 6352044 . C T 18 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=31 PL:GT:GQ 50,9,0:1/1:63 +chr11 6767356 . T C 9.63 . DP=3;AF1=0.9966;CI95=0.5,1;DP4=1,0,2,0;MQ=29;PV4=1,1,1,1 PL:GT:GQ 38,1,0:1/1:23 +chr11 6999404 . G C 21 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=37 PL:GT:GQ 53,9,0:1/1:63 +chr11 9120930 . C G 17.6 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=25 PL:GT:GQ 50,12,0:1/1:72 +chr11 9373125 . T C 19.8 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 51,6,0:1/1:49 +chr11 9585101 . C T 67 . DP=16;AF1=1;CI95=1,1;DP4=0,0,14,0;MQ=45 PL:GT:GQ 100,42,0:1/1:99 +chr11 10266192 . A C 14.3 . DP=22;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=27 PL:GT:GQ 47,18,0:1/1:90 +chr11 10303263 . T C 8.64 . DP=17;AF1=1;CI95=1,1;DP4=0,0,0,17;MQ=18 PL:GT:GQ 41,51,0:1/1:99 +chr11 10420170 . T C 35 . DP=17;AF1=1;CI95=1,1;DP4=0,1,0,15;MQ=28;PV4=1,0.12,1,0.4 PL:GT:GQ 68,36,0:1/1:99 +chr11 10912169 . G A 99 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=49 PL:GT:GQ 155,18,0:1/1:90 +chr11 11315826 . T G 6.29 . DP=27;AF1=1;CI95=1,1;DP4=0,0,0,6;MQ=19 PL:GT:GQ 38,18,0:1/1:90 +chr11 11603859 . A C 22 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=0,9,0,6;MQ=34;PV4=1,9.5e-13,0.22,1 PL:GT:GQ 52,0,115:0/1:55 +chr11 11700034 . C T 33 . DP=11;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=30 PL:GT:GQ 66,27,0:1/1:99 +chr11 11822758 . G A 15.1 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=0,7,0,3;MQ=38;PV4=1,0.18,1,1 PL:GT:GQ 45,0,88:0/1:48 +chr11 11976636 . C T 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=24 PL:GT:GQ 54,9,0:1/1:63 +chr11 14380517 . C G 16.1 . DP=10;AF1=0.5;CI95=0.5,0.5;DP4=5,0,5,0;MQ=48;PV4=1,2.1e-05,0.13,1 PL:GT:GQ 46,0,113:0/1:49 +chr11 14419212 . A G 91.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=38 PL:GT:GQ 124,18,0:1/1:90 +chr11 14846792 . A G 55 . DP=11;AF1=1;CI95=1,1;DP4=0,0,0,11;MQ=19 PL:GT:GQ 88,33,0:1/1:99 +chr11 15494556 . C T 99 . DP=38;AF1=0.5;CI95=0.5,0.5;DP4=22,0,14,0;MQ=34;PV4=1,0.0071,1,1 PL:GT:GQ 146,0,159:0/1:99 +chr11 16262879 . A C 16.1 . DP=4;AF1=0.5004;CI95=0.5,0.5;DP4=0,1,0,3;MQ=43;PV4=1,0.061,0.24,0.33 PL:GT:GQ 46,0,28:0/1:31 +chr11 21514947 . T C 24.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=41 PL:GT:GQ 57,12,0:1/1:72 +chr11 22532576 . C G 28 . DP=17;AF1=1;CI95=1,1;DP4=0,0,0,17;MQ=17 PL:GT:GQ 61,51,0:1/1:99 +chr11 23529238 . G T 4.29 . DP=13;AF1=0.5334;CI95=0.5,1;DP4=1,0,3,0;MQ=37;PV4=1,1,0.34,0.21 PL:GT:GQ 32,0,9:0/1:12 +chr11 24249554 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=48 PL:GT:GQ 73,6,0:1/1:49 +chr11 24853167 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=51 PL:GT:GQ 73,6,0:1/1:49 +chr11 33353903 . T C 24.3 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=36 PL:GT:GQ 57,15,0:1/1:75 +chr11 35126569 . T C 24.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=43 PL:GT:GQ 57,12,0:1/1:72 +chr11 35132248 . C T 18.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 51,12,0:1/1:72 +chr11 35155482 . T C 68 . DP=22;AF1=1;CI95=1,1;DP4=0,0,22,0;MQ=46 PL:GT:GQ 101,66,0:1/1:99 +chr11 52494088 . T C 99 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=37 PL:GT:GQ 140,27,0:1/1:99 +chr11 57899943 . C G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr11 62261460 . G T 19.1 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=0,7,0,5;MQ=27;PV4=1,1.1e-06,1,1 PL:GT:GQ 49,0,58:0/1:51 +chr11 67456049 . C T 39.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=19 PL:GT:GQ 72,18,0:1/1:90 +chr11 68509708 . C G 3.65 . DP=9;AF1=0.7301;CI95=0.5,1;DP4=0,5,0,4;MQ=17;PV4=1,1,1,1 PL:GT:GQ 30,0,2:0/1:3 +chr11 70115115 . T A 99 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=49 PL:GT:GQ 140,15,0:1/1:75 +chr11 72643951 . T C 70 . DP=23;AF1=1;CI95=1,1;DP4=0,0,22,0;MQ=39 PL:GT:GQ 103,66,0:1/1:99 +chr11 72647930 . G A 36 . DP=4;AF1=0.5004;CI95=0.5,0.5;DP4=0,1,0,3;MQ=41;PV4=1,1,0.3,1 PL:GT:GQ 66,0,28:0/1:31 +chr11 73330148 . C T 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr11 81720893 . A G 5.83 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=19 PL:GT:GQ 37,12,0:1/1:72 +chr11 83813797 . A G 23.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=43 PL:GT:GQ 56,12,0:1/1:72 +chr11 85949488 . C A 54 . DP=17;AF1=1;CI95=1,1;DP4=0,0,14,0;MQ=37 PL:GT:GQ 87,42,0:1/1:99 +chr11 87634829 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=51 PL:GT:GQ 40,6,0:1/1:49 +chr11 90913093 . A T 35.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=46 PL:GT:GQ 67,6,0:1/1:49 +chr11 93793348 . G A 99 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=31 PL:GT:GQ 139,24,0:1/1:96 +chr11 100802294 . T C 16.6 . DP=21;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=35 PL:GT:GQ 49,12,0:1/1:72 +chr11 107455449 . C T 8.44 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=26 PL:GT:GQ 39,6,0:1/1:49 +chr11 111344355 . A G 69.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=43 PL:GT:GQ 102,12,0:1/1:72 +chr11 111611115 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr11 113050466 . G C 6.02 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=30 PL:GT:GQ 36,6,0:1/1:49 +chr11 114332544 . T C 3.54 . DP=17;AF1=0.4999;CI95=0.5,0.5;DP4=0,4,0,5;MQ=37;PV4=1,0.32,0.13,1 PL:GT:GQ 31,0,37:0/1:33 +chr11 114332549 . G A 3.54 . DP=17;AF1=0.4998;CI95=0.5,0.5;DP4=0,9,0,8;MQ=36;PV4=1,3.1e-10,0.088,1 PL:GT:GQ 31,0,127:0/1:34 +chr11 114843578 . G C 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=50 PL:GT:GQ 73,6,0:1/1:49 +chr11 115580279 . A G 99 . DP=15;AF1=1;CI95=1,1;DP4=0,0,15,0;MQ=48 PL:GT:GQ 190,45,0:1/1:99 +chr11 116434328 . G A 17.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 50,12,0:1/1:72 +chr11 125914161 . A G 20.8 . DP=7;AF1=0.95;CI95=0.5,1;DP4=3,0,4,0;MQ=38;PV4=1,0.074,1,1 PL:GT:GQ 49,0,0:1/1:10 +chr11 125917089 . C T 12.3 . DP=41;AF1=0.5;CI95=0.5,0.5;DP4=0,28,0,12;MQ=44;PV4=1,4.7e-25,1,1 PL:GT:GQ 42,0,167:0/1:45 +chr11 127194100 . A G 60 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=49 PL:GT:GQ 93,24,0:1/1:96 +chr12 70856 . G A 27.5 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=49 PL:GT:GQ 60,12,0:1/1:72 +chr12 153693 . T C 52.3 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=38 PL:GT:GQ 85,15,0:1/1:75 +chr12 924547 . C G 37.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=50 PL:GT:GQ 69,6,0:1/1:49 +chr12 1555916 . G A 7.18 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=23 PL:GT:GQ 39,15,0:1/1:75 +chr12 1919860 . G T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr12 2283756 . G A 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=34 PL:GT:GQ 45,6,0:1/1:49 +chr12 2805983 . G C 12.7 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=35 PL:GT:GQ 45,12,0:1/1:72 +chr12 6088203 . T C 72.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=37 PL:GT:GQ 105,15,0:1/1:75 +chr12 7099460 . G C 10.8 . DP=6;AF1=0.8277;CI95=0.5,1;DP4=3,0,3,0;MQ=26;PV4=1,0.027,1,1 PL:GT:GQ 39,0,1:1/1:5 +chr12 7099464 . G A 13.3 . DP=6;AF1=0.9966;CI95=0.5,1;DP4=2,0,3,0;MQ=28;PV4=1,0.16,1,1 PL:GT:GQ 42,1,0:1/1:23 +chr12 7198516 . T G 4.61 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 34,6,0:1/1:49 +chr12 23331895 . C T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr12 28209020 . T G 14.4 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=31 PL:GT:GQ 47,15,0:1/1:75 +chr12 30074073 . C T 32.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 64,6,0:1/1:49 +chr12 30563452 . T C 25 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=46 PL:GT:GQ 57,9,0:1/1:63 +chr12 30563453 . A G 25 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=46 PL:GT:GQ 57,9,0:1/1:63 +chr12 30563464 . C A 78.8 . DP=8;AF1=1;CI95=0.5,1;DP4=0,2,0,5;MQ=34;PV4=1,0.29,1,1 PL:GT:GQ 110,6,0:1/1:49 +chr12 31505085 . G A 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr12 34041336 . G A 5.46 . DP=5;AF1=0.5;CI95=0.5,0.5;DP4=2,0,2,0;MQ=36;PV4=1,1,0.48,0.21 PL:GT:GQ 34,0,34:0/1:34 +chr12 49003648 . C G 42 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=39 PL:GT:GQ 75,24,0:1/1:96 +chr12 51280690 . G A 69 . DP=98;AF1=0.5;CI95=0.5,0.5;DP4=13,0,18,0;MQ=45;PV4=1,1,0.051,1 PL:GT:GQ 99,0,84:0/1:87 +chr12 69206633 . T C 17.1 . DP=12;AF1=1;CI95=1,1;DP4=0,0,0,11;MQ=17 PL:GT:GQ 50,33,0:1/1:99 +chr12 80417253 . T C 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=48 PL:GT:GQ 73,6,0:1/1:49 +chr12 86633033 . C T 34 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=0,1,0,2;MQ=43;PV4=1,1,0.33,1 PL:GT:GQ 64,0,31:0/1:34 +chr12 98097274 . C T 47.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=31 PL:GT:GQ 80,15,0:1/1:75 +chr12 105269319 . C T 19 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=26 PL:GT:GQ 51,9,0:1/1:63 +chr12 109053425 . G A 9.53 . DP=8;AF1=0.5012;CI95=0.5,0.5;DP4=2,0,6,0;MQ=25;PV4=1,1,0.19,1 PL:GT:GQ 39,0,23:0/1:26 +chr12 111904540 . A G 3.41 . DP=65;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=31 PL:GT:GQ 32,6,0:1/1:49 +chr12 115038686 . T C 15.2 . DP=7;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=27 PL:GT:GQ 48,21,0:1/1:84 +chr12 115039419 . A G 4.11 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=30 PL:GT:GQ 34,9,0:1/1:63 +chr12 115103890 . G A 66 . DP=39;AF1=1;CI95=1,1;DP4=0,0,0,38;MQ=49 PL:GT:GQ 99,114,0:1/1:99 +chr12 115833830 . G A 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 100,9,0:1/1:63 +chr12 116361873 . T G 6.34 . DP=5;AF1=0.7302;CI95=0.5,1;DP4=0,2,0,2;MQ=23;PV4=1,1,1,1 PL:GT:GQ 34,0,2:0/1:3 +chr12 123583527 . G A 14.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=25 PL:GT:GQ 46,9,0:1/1:63 +chr12 124115330 . A G 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=38 PL:GT:GQ 76,9,0:1/1:63 +chr12 125062296 . G A 41.8 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=50 PL:GT:GQ 73,6,0:1/1:49 +chr12 126718106 . A G 8.76 . DP=50;AF1=0.5163;CI95=0.5,1;DP4=2,0,6,0;MQ=26;PV4=1,0.33,0.37,1 PL:GT:GQ 38,0,12:0/1:15 +chr12 133348311 . G A 24 . DP=18;AF1=0.5;CI95=0.5,0.5;DP4=14,0,3,0;MQ=35;PV4=1,1,1,1 PL:GT:GQ 54,0,118:0/1:57 +chr12 134494475 . C T 28 . DP=18;AF1=0.6671;CI95=0.5,1;DP4=8,0,10,0;MQ=18;PV4=1,1,1,1 PL:GT:GQ 57,0,3:0/1:5 +chr12 134831761 . C T 41.3 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=27 PL:GT:GQ 74,15,0:1/1:75 +chr12 134992770 . A C,T 84 . DP=47;AF1=1;CI95=1,1;DP4=0,0,26,0;MQ=29 PL:GT:GQ 117,72,114,0,44,114:1/1:99 +chr12 135261117 . G A 49.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=46 PL:GT:GQ 82,18,0:1/1:90 +chr12 135261144 . A G 99 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=46 PL:GT:GQ 155,18,0:1/1:90 +chr12 135460302 . G A 99 . DP=25;AF1=1;CI95=1,1;DP4=0,0,23,0;MQ=40 PL:GT:GQ 198,69,0:1/1:99 +chr12 135463758 . A G 83 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,16;MQ=26 PL:GT:GQ 116,48,0:1/1:99 +chr12 135523325 . G A 99 . DP=23;AF1=1;CI95=1,1;DP4=0,0,22,0;MQ=26 PL:GT:GQ 136,66,0:1/1:99 +chr12 135782401 . T C 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr12 135795472 . G T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 40,6,0:1/1:49 +chr13 18040027 . G C 42 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=33 PL:GT:GQ 74,9,0:1/1:63 +chr13 19494625 . G T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 73,6,0:1/1:49 +chr13 20121126 . A G 15.1 . DP=36;AF1=0.5;CI95=0.5,0.5;DP4=25,0,9,0;MQ=36;PV4=1,1,0.13,1 PL:GT:GQ 45,0,153:0/1:48 +chr13 21536703 . A G 9.31 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr13 23160035 . G T 3.98 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=36 PL:GT:GQ 33,6,0:1/1:49 +chr13 23476554 . C A 6.79 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=52 PL:GT:GQ 37,6,0:1/1:49 +chr13 26632967 . C G 32 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=34 PL:GT:GQ 65,27,0:1/1:99 +chr13 26790010 . T C 89.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=35 PL:GT:GQ 122,15,0:1/1:75 +chr13 36083571 . T C 43 . DP=84;AF1=1;CI95=1,1;DP4=1,0,37,0;MQ=16;PV4=1,1,1,0.3 PL:GT:GQ 76,99,0:1/1:99 +chr13 44432419 . C T 3.58 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=19 PL:GT:GQ 34,21,0:1/1:84 +chr13 46592359 . T C 16.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 48,6,0:1/1:49 +chr13 52764657 . A T 3.14 . DP=32;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=22 PL:GT:GQ 33,15,0:1/1:75 +chr13 53084193 . C T 9.11 . DP=3;AF1=0.9998;CI95=0.5,1;DP4=0,1,0,2;MQ=29;PV4=1,1,1,1 PL:GT:GQ 38,2,0:1/1:37 +chr13 57763228 . C T 45 . DP=555;AF1=1;CI95=1,1;DP4=2,0,21,0;MQ=23;PV4=1,0.00021,1,0.3 PL:GT:GQ 78,45,0:1/1:99 +chr13 73857921 . G C 31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=49 PL:GT:GQ 63,9,0:1/1:63 +chr13 76718001 . G A 59 . DP=4;AF1=0.5004;CI95=0.5,0.5;DP4=1,0,3,0;MQ=45;PV4=1,1,0.12,1 PL:GT:GQ 89,0,28:0/1:31 +chr13 100912695 . A T 23 . DP=22;AF1=0.5;CI95=0.5,0.5;DP4=0,16,0,6;MQ=31;PV4=1,0.029,1,0.35 PL:GT:GQ 53,0,103:0/1:56 +chr13 101332001 . G C 21 . DP=23;AF1=1;CI95=1,1;DP4=0,0,23,0;MQ=21 PL:GT:GQ 54,69,0:1/1:99 +chr13 102637334 . C T 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 100,9,0:1/1:63 +chr13 102895627 . C T 63 . DP=9;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=48 PL:GT:GQ 96,27,0:1/1:99 +chr13 103830322 . T C 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 73,6,0:1/1:49 +chr13 112842448 . G A 39 . DP=18;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=27 PL:GT:GQ 72,27,0:1/1:99 +chr13 113310291 . C T 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=43 PL:GT:GQ 66,12,0:1/1:72 +chr13 114775162 . A G 80 . DP=17;AF1=1;CI95=1,1;DP4=0,0,17,0;MQ=21 PL:GT:GQ 113,51,0:1/1:99 +chr13 115267482 . A G 16.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=29 PL:GT:GQ 48,9,0:1/1:63 +chr13 116068676 . C T 3.83 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=27 PL:GT:GQ 34,12,0:1/1:72 +chr13 116455918 . A G 33 . DP=29;AF1=0.5;CI95=0.5,0.5;DP4=13,0,15,0;MQ=42;PV4=1,1.8e-20,0.3,1 PL:GT:GQ 63,0,146:0/1:66 +chr13 116765012 . G A 30.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 62,6,0:1/1:49 +chr13 116779773 . C T 17.1 . DP=38;AF1=0.5;CI95=0.5,0.5;DP4=27,0,11,0;MQ=24;PV4=1,4.5e-35,1,1 PL:GT:GQ 47,0,106:0/1:50 +chr13 116779791 . C T 57 . DP=38;AF1=0.5;CI95=0.5,0.5;DP4=24,0,14,0;MQ=24;PV4=1,1,1,1 PL:GT:GQ 87,0,103:0/1:90 +chr14 20159250 . C T 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=39 PL:GT:GQ 43,9,0:1/1:63 +chr14 23510676 . T C 52 . DP=22;AF1=1;CI95=1,1;DP4=0,0,22,0;MQ=32 PL:GT:GQ 85,66,0:1/1:99 +chr14 24735256 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr14 29525577 . G A 21 . DP=10;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=16 PL:GT:GQ 54,27,0:1/1:99 +chr14 36186389 . C T 6.79 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=20 PL:GT:GQ 37,6,0:1/1:49 +chr14 36186394 . A G 6.79 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=20 PL:GT:GQ 37,6,0:1/1:49 +chr14 37440609 . A G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=33 PL:GT:GQ 44,6,0:1/1:49 +chr14 40432807 . A G 18.6 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=23 PL:GT:GQ 51,12,0:1/1:72 +chr14 59466268 . T C 15.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=25 PL:GT:GQ 47,9,0:1/1:63 +chr14 61368162 . G T 7.18 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=17 PL:GT:GQ 39,15,0:1/1:75 +chr14 65152922 . G A 92 . DP=33;AF1=0.5;CI95=0.5,0.5;DP4=0,18,0,15;MQ=36;PV4=1,0.059,0.35,1 PL:GT:GQ 122,0,144:0/1:99 +chr14 69749148 . G T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=25 PL:GT:GQ 40,6,0:1/1:49 +chr14 74877658 . C T 45 . DP=48;AF1=1;CI95=1,1;DP4=0,1,0,12;MQ=36;PV4=1,0.02,1,0.39 PL:GT:GQ 78,28,0:1/1:99 +chr14 75546678 . C T 19.2 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=17 PL:GT:GQ 52,18,0:1/1:90 +chr14 76439185 . T C 67.1 . DP=7;AF1=0.505;CI95=0.5,0.5;DP4=0,1,0,6;MQ=33;PV4=1,1,0.056,0.29 PL:GT:GQ 97,0,17:0/1:20 +chr14 77313295 . T A 99 . DP=12;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=48 PL:GT:GQ 191,30,0:1/1:99 +chr14 77673422 . G A 11.5 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=24 PL:GT:GQ 44,18,0:1/1:90 +chr14 78646125 . T C 99 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=40 PL:GT:GQ 153,24,0:1/1:96 +chr14 91702449 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr14 91769842 . G A 63 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=47 PL:GT:GQ 95,9,0:1/1:63 +chr14 91775899 . C G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=45 PL:GT:GQ 73,6,0:1/1:49 +chr14 91775924 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=45 PL:GT:GQ 40,6,0:1/1:49 +chr14 93482918 . A C 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=49 PL:GT:GQ 100,9,0:1/1:63 +chr14 93665819 . C T 75 . DP=7;AF1=0.5002;CI95=0.5,0.5;DP4=0,3,0,4;MQ=42;PV4=1,1,1,1 PL:GT:GQ 105,0,31:0/1:34 +chr14 95422276 . A G 55.1 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=45 PL:GT:GQ 88,21,0:1/1:84 +chr14 95731986 . C T 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 100,9,0:1/1:63 +chr14 96045464 . A G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=33 PL:GT:GQ 44,6,0:1/1:49 +chr14 97172020 . C T 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=51 PL:GT:GQ 100,9,0:1/1:63 +chr14 100515480 . A G 6.98 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=1,0,2,0;MQ=45;PV4=1,0.14,0.085,0.33 PL:GT:GQ 36,0,30:0/1:32 +chr14 100770214 . A T 8.69 . DP=20;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=16 PL:GT:GQ 41,21,0:1/1:84 +chr14 101258303 . G A 82 . DP=15;AF1=1;CI95=1,1;DP4=0,0,15,0;MQ=26 PL:GT:GQ 115,45,0:1/1:99 +chr14 101701492 . C G 66 . DP=10;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=49 PL:GT:GQ 99,30,0:1/1:99 +chr14 102113772 . T C 3.98 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=30 PL:GT:GQ 33,6,0:1/1:49 +chr14 102751431 . A C 36.5 . DP=3;AF1=0.9998;CI95=0.5,1;DP4=1,0,2,0;MQ=35;PV4=1,1,1,1 PL:GT:GQ 66,2,0:1/1:37 +chr14 103708033 . A G 99 . DP=13;AF1=1;CI95=1,1;DP4=0,0,0,12;MQ=27 PL:GT:GQ 141,36,0:1/1:99 +chr14 104744582 . G A 3.52 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=25 PL:GT:GQ 33,9,0:1/1:63 +chr14 105989100 . C T 3.14 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=23 PL:GT:GQ 33,15,0:1/1:75 +chr14 105989162 . C T 3.65 . DP=12;AF1=0.7301;CI95=0.5,1;DP4=0,6,0,6;MQ=15;PV4=1,1,1,1 PL:GT:GQ 30,0,2:0/1:3 +chr14 106234810 . G A 25.3 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=39 PL:GT:GQ 58,15,0:1/1:75 +chr14 106995572 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr14 107283057 . T C 5.5 . DP=8;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=20 PL:GT:GQ 37,21,0:1/1:84 +chr14 107285319 . T C 33 . DP=36;AF1=1;CI95=1,1;DP4=0,0,0,35;MQ=22 PL:GT:GQ 66,105,0:1/1:99 +chr14 107640449 . A G 11.8 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=36 PL:GT:GQ 44,12,0:1/1:72 +chr15 20082092 . T G 18.3 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=24 PL:GT:GQ 51,15,0:1/1:75 +chr15 22955884 . T C 67 . DP=12;AF1=1;CI95=1,1;DP4=0,0,12,0;MQ=48 PL:GT:GQ 100,36,0:1/1:99 +chr15 22971987 . A G 5.29 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=22 PL:GT:GQ 35,6,0:1/1:49 +chr15 23233324 . C A 47 . DP=16;AF1=1;CI95=1,1;DP4=0,0,14,0;MQ=31 PL:GT:GQ 80,42,0:1/1:99 +chr15 25175286 . C T 36.5 . DP=3;AF1=0.9998;CI95=0.5,1;DP4=1,0,2,0;MQ=42;PV4=1,1,1,1 PL:GT:GQ 66,2,0:1/1:37 +chr15 25385709 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=48 PL:GT:GQ 40,6,0:1/1:49 +chr15 27372396 . A G 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=40 PL:GT:GQ 76,9,0:1/1:63 +chr15 35998093 . C T 9.53 . DP=9;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=17 PL:GT:GQ 42,27,0:1/1:99 +chr15 36716538 . C G 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=36 PL:GT:GQ 45,6,0:1/1:49 +chr15 36793360 . G T 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=42 PL:GT:GQ 76,9,0:1/1:63 +chr15 53783097 . A G 10.5 . DP=31;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=16 PL:GT:GQ 43,21,0:1/1:84 +chr15 54180175 . C T 10.4 . DP=7;AF1=0.5001;CI95=0.5,0.5;DP4=4,0,3,0;MQ=27;PV4=1,1.2e-05,1,1 PL:GT:GQ 40,0,32:0/1:34 +chr15 54939306 . C T 99 . DP=34;AF1=0.5;CI95=0.5,0.5;DP4=0,18,0,16;MQ=49;PV4=1,1,0.18,1 PL:GT:GQ 172,0,181:0/1:99 +chr15 59377916 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 73,6,0:1/1:49 +chr15 59685961 . G C 68 . DP=11;AF1=1;CI95=1,1;DP4=0,0,0,11;MQ=36 PL:GT:GQ 101,33,0:1/1:99 +chr15 60306384 . A G 18.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=25 PL:GT:GQ 51,12,0:1/1:72 +chr15 60345642 . G C 14.9 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 46,6,0:1/1:49 +chr15 60367387 . G A 13.2 . DP=6;AF1=0.5001;CI95=0.5,0.5;DP4=3,0,3,0;MQ=34;PV4=1,0.098,0.24,1 PL:GT:GQ 43,0,35:0/1:37 +chr15 60367446 . C T 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=41 PL:GT:GQ 76,9,0:1/1:63 +chr15 61763755 . G A 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=45 PL:GT:GQ 100,9,0:1/1:63 +chr15 61831362 . C G 11.3 . DP=5;AF1=0.5;CI95=0.5,0.5;DP4=0,2,0,3;MQ=30;PV4=1,0.00077,0.47,1 PL:GT:GQ 41,0,42:0/1:41 +chr15 63978880 . G C 60 . DP=6;AF1=0.9999;CI95=0.5,1;DP4=2,0,4,0;MQ=35;PV4=1,1,1,1 PL:GT:GQ 90,3,0:1/1:41 +chr15 64342445 . A G 12.2 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=18 PL:GT:GQ 44,9,0:1/1:63 +chr15 65424859 . T C 11.3 . DP=10;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=21 PL:GT:GQ 44,30,0:1/1:99 +chr15 65603698 . C T 60 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 92,9,0:1/1:63 +chr15 67005078 . G A 13.9 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr15 71133512 . G C 22.3 . DP=19;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=25 PL:GT:GQ 55,15,0:1/1:75 +chr15 72619009 . A G 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=48 PL:GT:GQ 54,9,0:1/1:63 +chr15 73272688 . C T 70.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=39 PL:GT:GQ 103,15,0:1/1:75 +chr15 73699335 . T A 99 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=45 PL:GT:GQ 175,27,0:1/1:99 +chr15 74513352 . C T 99 . DP=10;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=37 PL:GT:GQ 139,30,0:1/1:99 +chr15 75540536 . G A 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=44 PL:GT:GQ 40,6,0:1/1:49 +chr15 75822537 . C A 17.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=23 PL:GT:GQ 50,15,0:1/1:75 +chr15 78554005 . T C 12 . DP=18;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=46 PL:GT:GQ 43,6,0:1/1:49 +chr15 80089369 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=28 PL:GT:GQ 40,6,0:1/1:49 +chr15 83089149 . C G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=33 PL:GT:GQ 40,6,0:1/1:49 +chr15 86839307 . T C 90.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=43 PL:GT:GQ 123,15,0:1/1:75 +chr15 89836258 . T C 99 . DP=10;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=39 PL:GT:GQ 141,24,0:1/1:96 +chr15 89837706 . G A 4.13 . DP=8;AF1=0.4998;CI95=0.5,0.5;DP4=0,4,0,4;MQ=30;PV4=1,1,0.25,1 PL:GT:GQ 32,0,59:0/1:35 +chr15 89857648 . T C 99 . DP=27;AF1=0.5;CI95=0.5,0.5;DP4=8,0,8,0;MQ=40;PV4=1,1,0.3,1 PL:GT:GQ 133,0,130:0/1:99 +chr15 89864228 . A C 32 . DP=4;AF1=0.5002;CI95=0.5,0.5;DP4=2,0,2,0;MQ=42;PV4=1,1,1,1 PL:GT:GQ 62,0,31:0/1:34 +chr15 91261235 . G A 7.8 . DP=4;AF1=0.5002;CI95=0.5,0.5;DP4=1,0,2,0;MQ=44;PV4=1,1,0.32,1 PL:GT:GQ 37,0,30:0/1:32 +chr16 256990 . A C 10.4 . DP=16;AF1=0.5008;CI95=0.5,0.5;DP4=4,0,3,0;MQ=23;PV4=1,0.34,1,1 PL:GT:GQ 40,0,25:0/1:28 +chr16 260794 . T C 3.01 . DP=19;AF1=0.4999;CI95=0.5,0.5;DP4=13,0,2,0;MQ=24;PV4=1,1,1,1 PL:GT:GQ 30,0,32:0/1:31 +chr16 419905 . A G 7.9 . DP=5;AF1=0.9966;CI95=0.5,1;DP4=0,2,0,3;MQ=22;PV4=1,1,1,1 PL:GT:GQ 36,1,0:1/1:23 +chr16 824086 . T C 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=48 PL:GT:GQ 54,9,0:1/1:63 +chr16 1085063 . C T 52 . DP=12;AF1=0.5;CI95=0.5,0.5;DP4=6,0,6,0;MQ=42;PV4=1,1,0.014,1 PL:GT:GQ 82,0,128:0/1:85 +chr16 1221305 . T C 54 . DP=7;AF1=0.5;CI95=0.5,0.5;DP4=0,3,0,3;MQ=40;PV4=1,1,1,1 PL:GT:GQ 84,0,60:0/1:63 +chr16 1411728 . A G 32.3 . DP=11;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=35 PL:GT:GQ 65,15,0:1/1:75 +chr16 1443197 . C G 64 . DP=26;AF1=1;CI95=1,1;DP4=0,0,25,0;MQ=36 PL:GT:GQ 97,75,0:1/1:99 +chr16 1478746 . A T 32 . DP=20;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=28 PL:GT:GQ 65,24,0:1/1:96 +chr16 1514438 . A C 45 . DP=49;AF1=1;CI95=1,1;DP4=0,0,48,0;MQ=26 PL:GT:GQ 78,144,0:1/1:99 +chr16 1601989 . T C 99 . DP=13;AF1=1;CI95=1,1;DP4=0,0,13,0;MQ=29 PL:GT:GQ 133,39,0:1/1:99 +chr16 2043883 . C T 30 . DP=33;AF1=1;CI95=1,1;DP4=0,0,0,33;MQ=14 PL:GT:GQ 63,99,0:1/1:99 +chr16 2137470 . A C 39 . DP=38;AF1=0.5016;CI95=0.5,0.5;DP4=4,0,6,0;MQ=34;PV4=1,0.02,1,1 PL:GT:GQ 69,0,22:0/1:25 +chr16 2537260 . A G 99 . DP=11;AF1=1;CI95=1,1;DP4=0,0,11,0;MQ=40 PL:GT:GQ 177,33,0:1/1:99 +chr16 2564737 . T C 99 . DP=25;AF1=1;CI95=1,1;DP4=0,0,0,22;MQ=41 PL:GT:GQ 199,66,0:1/1:99 +chr16 2612605 . A T 62.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=28 PL:GT:GQ 95,15,0:1/1:75 +chr16 2704518 . G A 41 . DP=48;AF1=0.5;CI95=0.5,0.5;DP4=0,17,0,12;MQ=48;PV4=1,1.9e-23,0.24,0.034 PL:GT:GQ 71,0,175:0/1:74 +chr16 3274307 . G T 68 . DP=39;AF1=0.5;CI95=0.5,0.5;DP4=0,30,0,8;MQ=37;PV4=1,1,1,1 PL:GT:GQ 98,0,138:0/1:99 +chr16 5467292 . G C 37.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 69,6,0:1/1:49 +chr16 10079145 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr16 11483702 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=44 PL:GT:GQ 40,6,0:1/1:49 +chr16 12038227 . A T 23 . DP=47;AF1=0.5;CI95=0.5,0.5;DP4=0,22,0,23;MQ=32;PV4=1,4.4e-66,0.47,0.028 PL:GT:GQ 53,0,135:0/1:56 +chr16 21336880 . G C 55 . DP=35;AF1=0.5;CI95=0.5,0.5;DP4=0,12,0,19;MQ=47;PV4=1,5.6e-21,1,1 PL:GT:GQ 85,0,121:0/1:88 +chr16 21980241 . C T 16.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=29 PL:GT:GQ 48,9,0:1/1:63 +chr16 23275383 . C G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 44,6,0:1/1:49 +chr16 27546495 . G T 25 . DP=35;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=43 PL:GT:GQ 57,9,0:1/1:63 +chr16 27700399 . A T 17.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=17 PL:GT:GQ 50,12,0:1/1:72 +chr16 28021935 . A G 18.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=23 PL:GT:GQ 51,15,0:1/1:75 +chr16 29070016 . G T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr16 29478618 . C T 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=42 PL:GT:GQ 43,9,0:1/1:63 +chr16 29718140 . C T 46.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=31 PL:GT:GQ 79,15,0:1/1:75 +chr16 30700759 . T C 17.1 . DP=14;AF1=1;CI95=1,1;DP4=0,0,0,14;MQ=14 PL:GT:GQ 50,42,0:1/1:99 +chr16 35139103 . A G 46.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=37 PL:GT:GQ 79,12,0:1/1:72 +chr16 35473348 . G A 3.83 . DP=11;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 34,12,0:1/1:72 +chr16 36213667 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr16 36705528 . G A 14.4 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=32 PL:GT:GQ 47,15,0:1/1:75 +chr16 43831353 . C T 69.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=42 PL:GT:GQ 102,12,0:1/1:72 +chr16 44715166 . A C 25 . DP=18;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=32 PL:GT:GQ 58,24,0:1/1:96 +chr16 44957661 . T C 7.03 . DP=23;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=18 PL:GT:GQ 39,21,0:1/1:84 +chr16 44958698 . C T 42.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=49 PL:GT:GQ 75,15,0:1/1:75 +chr16 44959163 . T C 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=48 PL:GT:GQ 66,12,0:1/1:72 +chr16 45167959 . C T 4.45 . DP=16;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=24 PL:GT:GQ 35,12,0:1/1:72 +chr16 50254956 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=36 PL:GT:GQ 45,6,0:1/1:49 +chr16 52383122 . A C 46.5 . DP=19;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=42 PL:GT:GQ 79,12,0:1/1:72 +chr16 55978159 . C T 10.7 . DP=20;AF1=0.5336;CI95=0.5,1;DP4=2,0,5,0;MQ=35;PV4=1,0.038,1,0.059 PL:GT:GQ 40,0,9:0/1:12 +chr16 61358878 . T A 15.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=32 PL:GT:GQ 47,6,0:1/1:49 +chr16 61392487 . G A 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=31 PL:GT:GQ 44,6,0:1/1:49 +chr16 61621603 . G T 6.59 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=22 PL:GT:GQ 38,12,0:1/1:72 +chr16 69120890 . G C 51.3 . DP=36;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=42 PL:GT:GQ 84,15,0:1/1:75 +chr16 70778219 . A G 21.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=39 PL:GT:GQ 53,6,0:1/1:49 +chr16 71899519 . T C 40 . DP=11;AF1=1;CI95=1,1;DP4=0,0,11,0;MQ=33 PL:GT:GQ 73,33,0:1/1:99 +chr16 72079251 . A G 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=41 PL:GT:GQ 43,9,0:1/1:63 +chr16 72093003 . G C 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr16 72672428 . A G 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 100,9,0:1/1:63 +chr16 72864515 . A G 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr16 72890560 . G A 47.1 . DP=10;AF1=0.5064;CI95=0.5,0.5;DP4=0,1,0,7;MQ=49;PV4=1,0.0019,0.0033,1 PL:GT:GQ 77,0,16:0/1:19 +chr16 73048929 . A G 6.29 . DP=4;AF1=0.9966;CI95=0.5,1;DP4=1,0,2,0;MQ=27;PV4=1,1,1,0.33 PL:GT:GQ 34,1,0:1/1:23 +chr16 73177179 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr16 73191468 . C T 69.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=40 PL:GT:GQ 102,12,0:1/1:72 +chr16 73367439 . A C 7.41 . DP=36;AF1=1;CI95=0.5,1;DP4=0,2,0,13;MQ=26;PV4=1,1,0.027,1 PL:GT:GQ 37,4,0:1/1:45 +chr16 74259316 . C T 89.5 . DP=13;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=49 PL:GT:GQ 122,12,0:1/1:72 +chr16 75271450 . C G 6.99 . DP=15;AF1=0.5015;CI95=0.5,0.5;DP4=0,1,0,3;MQ=44;PV4=1,0.065,0.31,1 PL:GT:GQ 36,0,22:0/1:25 +chr16 76199870 . G A 26 . DP=14;AF1=0.5;CI95=0.5,0.5;DP4=8,0,6,0;MQ=47;PV4=1,1.2e-06,0.32,1 PL:GT:GQ 56,0,141:0/1:59 +chr16 77723692 . A G 89.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=50 PL:GT:GQ 122,12,0:1/1:72 +chr17 165875 . G A 40.8 . DP=11;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=42 PL:GT:GQ 72,6,0:1/1:49 +chr17 1443809 . C G 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=50 PL:GT:GQ 40,6,0:1/1:49 +chr17 1618253 . C T 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=39 PL:GT:GQ 54,9,0:1/1:63 +chr17 2815309 . T G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr17 3537486 . T G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 73,6,0:1/1:49 +chr17 3734367 . C A 23.5 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=36 PL:GT:GQ 56,12,0:1/1:72 +chr17 5634764 . T C 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr17 6408090 . C G 3.54 . DP=5;AF1=0.4998;CI95=0.5,0.5;DP4=3,0,2,0;MQ=40;PV4=1,1,0.36,1 PL:GT:GQ 31,0,66:0/1:34 +chr17 7089723 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr17 8731503 . G C 11.1 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=46 PL:GT:GQ 42,6,0:1/1:49 +chr17 9282935 . T C,G 24.5 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=40 PL:GT:GQ 57,12,61,0,3,61:1/1:72 +chr17 17284831 . T C 29 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=25 PL:GT:GQ 61,9,0:1/1:63 +chr17 18439515 . G A 4.11 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=25 PL:GT:GQ 34,9,0:1/1:63 +chr17 18602146 . C T 4.76 . DP=20;AF1=1;CI95=1,1;DP4=0,0,0,11;MQ=16 PL:GT:GQ 36,33,0:1/1:99 +chr17 19427888 . C T 57 . DP=104;AF1=0.5;CI95=0.5,0.5;DP4=45,0,29,0;MQ=39;PV4=1,2.2e-12,1,1 PL:GT:GQ 87,0,131:0/1:90 +chr17 19604159 . T C 9.31 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=45 PL:GT:GQ 40,6,0:1/1:49 +chr17 19610366 . C T 13 . DP=13;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 44,6,0:1/1:49 +chr17 20484706 . C G 51 . DP=35;AF1=0.5001;CI95=0.5,0.5;DP4=0,11,0,21;MQ=21;PV4=1,0.39,0.49,1 PL:GT:GQ 81,0,36:0/1:39 +chr17 20555720 . A G 26.3 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=28 PL:GT:GQ 59,15,0:1/1:75 +chr17 24328984 . A C 15.4 . DP=34;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=25 PL:GT:GQ 48,15,0:1/1:75 +chr17 26237090 . G A 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=44 PL:GT:GQ 73,6,0:1/1:49 +chr17 28394766 . C A 13.9 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=31 PL:GT:GQ 45,6,0:1/1:49 +chr17 31218277 . A G 3.62 . DP=38;AF1=0.5161;CI95=0.5,0.5;DP4=0,1,0,2;MQ=38;PV4=1,0.26,1,1 PL:GT:GQ 31,0,12:0/1:15 +chr17 31254021 . C T 15.1 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=35 PL:GT:GQ 47,9,0:1/1:63 +chr17 32516798 . G A 37.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 69,6,0:1/1:49 +chr17 32600253 . A G 16.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=25 PL:GT:GQ 49,12,0:1/1:72 +chr17 34255214 . G C 19.2 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=21 PL:GT:GQ 52,18,0:1/1:90 +chr17 34365900 . T C 93.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=38 PL:GT:GQ 126,18,0:1/1:90 +chr17 35380386 . A T 6.79 . DP=44;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=46 PL:GT:GQ 37,6,0:1/1:49 +chr17 41993344 . C T 64 . DP=41;AF1=1;CI95=1,1;DP4=0,0,0,41;MQ=16 PL:GT:GQ 97,123,0:1/1:99 +chr17 42128201 . A G 4.13 . DP=5;AF1=0.4998;CI95=0.5,0.5;DP4=0,2,0,2;MQ=52;PV4=1,0.0041,1,1 PL:GT:GQ 32,0,62:0/1:35 +chr17 42984490 . C A 56 . DP=33;AF1=0.5001;CI95=0.5,0.5;DP4=6,0,12,0;MQ=42;PV4=1,0.004,1,1 PL:GT:GQ 86,0,34:0/1:37 +chr17 43419457 . G A 99 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,14;MQ=45 PL:GT:GQ 185,42,0:1/1:99 +chr17 43421225 . A G 65.1 . DP=31;AF1=1;CI95=0.5,1;DP4=0,6,0,17;MQ=43;PV4=1,0.004,1,1 PL:GT:GQ 98,18,0:1/1:90 +chr17 45206897 . G A 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=47 PL:GT:GQ 54,9,0:1/1:63 +chr17 45381302 . T C 18.6 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 51,12,0:1/1:72 +chr17 45530812 . C A 3.54 . DP=6;AF1=0.4998;CI95=0.5,0.5;DP4=0,3,0,2;MQ=40;PV4=1,1,0.37,1 PL:GT:GQ 31,0,58:0/1:34 +chr17 50242633 . G A 44 . DP=42;AF1=0.5;CI95=0.5,0.5;DP4=0,25,0,13;MQ=32;PV4=1,0.084,0.14,1 PL:GT:GQ 74,0,154:0/1:77 +chr17 51275317 . G A 14.9 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=31 PL:GT:GQ 46,6,0:1/1:49 +chr17 52325530 . C T 29 . DP=19;AF1=1;CI95=1,1;DP4=0,0,0,18;MQ=24 PL:GT:GQ 62,54,0:1/1:99 +chr17 52411748 . T G 18.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=25 PL:GT:GQ 51,12,0:1/1:72 +chr17 53190746 . C G 62.1 . DP=20;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=40 PL:GT:GQ 95,18,0:1/1:90 +chr17 58289916 . T C 18.2 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=22 PL:GT:GQ 51,18,0:1/1:90 +chr17 59796875 . C T 42 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=35 PL:GT:GQ 74,9,0:1/1:63 diff --git a/tests/tabix_data/vcf/13.vcf b/tests/tabix_data/vcf/13.vcf new file mode 100644 index 0000000..08b54e0 --- /dev/null +++ b/tests/tabix_data/vcf/13.vcf @@ -0,0 +1,220 @@ +##fileformat=VCFv4.0 +##fileDate=2011-10-11 +##source=Platypus_Version_0.1.5 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT WTCHG_27173_05.bam WTCHG_27173_04.bam +chr1 1451489 . T C 103 PASS ABPV=1.00e+00;FPV=7.56e-01;FR=0.2501;HP=7;MMLQ=30;NF=2;NR=18;PP=103;RMP=57.54;RPV=1.00e-00;SC=CCGGTGTGGGTGGGGAGGCCG;TC=42;TCF=7;TCR=35;TR=20;func=intronic;gene=ATAD3A;segdup=0.91;1000g=0.36;dbsnp=rs76717221 GT:GL:GQ:NR 0/0:-43.28,-51.0,-125.34:35:18 1/0:-135.58,-103.29,-138.87:100:24 +chr1 1451490 . G A 73 PASS ABPV=1.00e+00;FPV=9.29e-01;FR=0.2501;HP=3;MMLQ=30;NF=3;NR=16;PP=73;RMP=58.79;RPV=9.98e-01;SC=CGGTGTGGGTGGGGAGGCCGG;TC=42;TCF=7;TCR=35;TR=19;func=intronic;gene=ATAD3A;segdup=0.91;1000g=0.33;dbsnp=rs9439460 GT:GL:GQ:NR 0/0:-43.28,-50.99,-127.79:35:18 0/1:-135.58,-110.35,-146.87:100:24 +chr1 12939904 . A C 109 PASS ABPV=1.00e+00;FPV=7.66e-01;FR=0.2500;HP=1;MMLQ=37;NF=22;NR=1;PP=109;RMP=45.66;RPV=4.46e-06;SC=ATTGTGAGGAACTTTAACGAG;TC=132;TCF=79;TCR=53;TR=23 GT:GL:GQ:NR 0/0:-40.31,-50.48,-301.89:45:53 0/1:-121.0,-87.39,-396.61:100:79 +chr1 16902943 . T C 50 PASS ABPV=1.00e+00;FPV=2.90e-01;FR=0.2506;HP=2;MMLQ=34;NF=30;NR=18;PP=50;RMP=46.42;RPV=8.84e-01;SC=GGGTCAGCTCTCGTTCCTGAG;TC=191;TCF=133;TCR=58;TR=48 GT:GL:GQ:NR 0/0:-337.26,-342.92,-618.53:26:93 0/1:-428.71,-408.75,-668.15:84:98 +chr1 16902982 . G T 41 PASS ABPV=1.00e+00;FPV=5.26e-02;FR=0.2500;HP=1;MMLQ=36;NF=29;NR=10;PP=41;RMP=55.68;RPV=1.90e-02;SC=ATTGCCTAAGGTGAGACGGTA;TC=223;TCF=152;TCR=71;TR=39 GT:GL:GQ:NR 0/0:-282.16,-293.75,-760.18:52:108 0/1:-308.83,-290.99,-786.16:75:115 +chr1 16918180 . C T 200 PASS ABPV=1.00e+00;FPV=7.60e-05;FR=0.2500;HP=1;MMLQ=37;NF=8;NR=11;PP=200;RMP=57.84;RPV=6.15e-01;SC=TACTTTGGTACCTCTGTCTTC;TC=134;TCF=91;TCR=43;TR=19 GT:GL:GQ:NR 0/0:-48.3,-68.7,-289.28:90:47 0/1:-194.28,-132.13,-452.09:100:87 +chr1 17083652 . C T 200 PASS ABPV=3.06e-02;FPV=6.38e-13;FR=0.2500;HP=2;MMLQ=36;NF=29;NR=3;PP=200;RMP=38.16;RPV=2.05e-02;SC=AAATCTCAACCTTGAGTACAA;TC=350;TCF=317;TCR=33;TR=32;func=ncRNA;gene=MST1P9;cons46=632 Name=lod=492;segdup=0.99;1000g=0.37;dbsnp=rs113710576 GT:GL:GQ:NR 0/0:-547.14,-559.85,-1017.76:56:159 0/1:-723.35,-656.42,-1167.76:100:191 +chr1 17083776 . C A 79 PASS ABPV=1.08e-01;FPV=7.38e-01;FR=0.2500;HP=1;MMLQ=35;NF=1;NR=22;PP=79;RMP=76.99;RPV=1.13e-09;SC=CACAGAGACACGCGTGAAGAC;TC=238;TCF=4;TCR=234;TR=23;func=ncRNA;gene=MST1P9;cons46=632 Name=lod=492;segdup=0.99;1000g=0.20;dbsnp=rs56318124 GT:GL:GQ:NR 0/0:-442.45,-455.85,-790.66:59:121 0/1:-451.84,-425.21,-717.41:100:117 +chr1 17575714 . G A 59 PASS ABPV=2.52e-01;FPV=3.10e-02;FR=0.2500;HP=1;MMLQ=31;NF=1;NR=4;PP=59;RMP=43.35;RPV=1.94e-02;SC=GACCCTCGTGGACATTTATGG;TC=58;TCF=19;TCR=39;TR=5 GT:GL:GQ:NR 0/0:-14.49,-33.87,-234.95:85:32 0/1:-39.36,-17.32,-168.9:93:26 +chr1 21751228 . T TCGCGCCCGGC 66 PASS ABPV=3.86e-06;FPV=8.03e-37;FR=0.2500;HP=4;NF=1;NR=1;PP=66;RMP=15.56;RPV=1.98e-06;SC=CTCAAATGAGTAAAAGGCACT;TC=133;TCF=77;TCR=56;TR=2 GT:GL:GQ:NR 0/0:-178.34,-190.57,-398.5:54:72 0/1:-308.3,-271.14,-540.05:100:98 +chr1 21755539 . C A 27 PASS ABPV=1.00e+00;FPV=9.84e-01;FR=0.2503;HP=1;MMLQ=31;NF=2;NR=1;PP=27;RMP=65.83;RPV=4.98e-02;SC=GGCCAACAACCGCCAGGTGCG;TC=20;TCF=3;TCR=17;TR=3;func=intergenic;gene=ECE1(dist=83505) NBPF3(dist=11092);cons46=807 Name=lod=2532;segdup=0.99;1000g=0.80;dbsnp=rs3855556 GT:GL:GQ:NR 0/0:0.0,-6.22,-62.68:28:10 1/0:-21.51,-6.92,-52.98:61:10 +chr1 40798730 . A AT 59 PASS ABPV=1.00e+00;FPV=6.06e-01;FR=0.2504;HP=10;NF=7;NR=1;PP=59;RMP=50.29;RPV=7.38e-01;SC=GAAGTCTTCTATTTTTTTTTA;TC=28;TCF=24;TCR=4;TR=8;func=intergenic;gene=COL9A2(dist=15791) SMAP2(dist=40648);dbsnp=rs34372767 GT:GL:GQ:NR 0/0:0.0,-6.13,-39.37:28:12 0/1:-35.97,-10.49,-31.53:98:16 +chr1 142803580 . TA T 145 PASS ABPV=1.00e+00;FPV=6.35e-02;FR=0.2500;HP=6;NF=1;NR=11;PP=145;RMP=65.89;RPV=8.29e-02;SC=TTCATAGATTTAAAAAATTAT;TC=81;TCF=16;TCR=65;TR=12 GT:GL:GQ:NR 0/0:-39.18,-49.93,-242.54:48:33 1/0:-80.12,-35.74,-249.72:100:48 +chr1 144854799 . C T 50 PASS ABPV=1.00e+00;FPV=9.37e-01;FR=0.2504;HP=1;MMLQ=34;NF=1;NR=19;PP=50;RMP=60.89;RPV=9.86e-01;SC=GCCTCGGATACCTCCAGCTGA;TC=52;TCF=2;TCR=50;TR=20;func=intronic;gene=PDE4DIP;segdup=0.96;dbsnp=rs5004097 GT:GL:GQ:NR 0/0:-89.24,-95.22,-205.12:27:25 0/1:-177.25,-157.18,-246.67:85:27 +chr1 145116027 . T C 127 PASS ABPV=1.00e+00;FPV=1.00e+00;FR=0.2501;HP=2;MMLQ=34;NF=0;NR=7;PP=127;RMP=54.07;RPV=5.14e-01;SC=AAAAGAGATGTCCTGAAAATG;TC=30;TCF=0;TCR=30;TR=7;func=UTR3;gene=SEC22B;cons46=340 Name=lod=32;1000g=0.45;dbsnp=rs7550440 GT:GL:GQ:NR 0/0:0.0,-7.61,-92.94:34:11 0/1:-56.84,-19.14,-106.99:100:19 +chr1 146554532 . C T 57 PASS ABPV=1.00e+00;FPV=5.18e-01;FR=0.2501;HP=12;MMLQ=31;NF=4;NR=5;PP=57;RMP=66.19;RPV=4.68e-01;SC=CTTCTTCTTTCTTTTTTTTTA;TC=41;TCF=18;TCR=23;TR=9;func=intergenic;gene=LOC728989(dist=39933) PRKAB2(dist=72153);segdup=0.93;dbsnp=rs9662613 GT:GL:GQ:NR 0/0:-13.82,-21.42,-95.53:34:13 0/1:-131.76,-110.18,-223.87:91:28 +chr1 148344564 . T C 34 PASS ABPV=3.69e-01;FPV=1.16e-03;FR=0.2500;HP=2;MMLQ=36;NF=24;NR=1;PP=34;RMP=22.65;RPV=1.98e-06;SC=TTCGTTCTTATTTCTCCCCGC;TC=218;TCF=162;TCR=56;TR=25 GT:GL:GQ:NR 0/0:-210.1,-224.84,-651.44:65:104 0/1:-232.74,-216.41,-586.14:69:114 +chr1 148853862 . G T 37 PASS ABPV=3.79e-01;FPV=1.94e-02;FR=0.2500;HP=3;MMLQ=31;NF=6;NR=2;PP=37;RMP=50.34;RPV=2.58e-02;SC=CGCTCCTGGAGCCCAGCCCGG;TC=76;TCF=50;TCR=26;TR=8 GT:GL:GQ:NR 0/0:-247.75,-257.0,-317.61:41:35 1/0:-179.5,-162.62,-280.47:71:41 +chr1 148854004 . C T 32 PASS ABPV=1.83e-01;FPV=3.17e-02;FR=0.2500;HP=1;MMLQ=34;NF=0;NR=3;PP=32;RMP=93.74;RPV=2.52e-02;SC=GCCCGCACTGCTGCAGCGCCC;TC=44;TCF=12;TCR=32;TR=3 GT:GL:GQ:NR 0/0:-75.02,-87.66,-197.34:56:26 1/0:-55.07,-39.25,-94.0:66:18 +chr1 152187606 . G A 200 PASS ABPV=3.64e-01;FPV=4.08e-07;FR=0.2500;HP=2;MMLQ=32;NF=7;NR=16;PP=200;RMP=30.4;RPV=4.89e-02;SC=GAAGACTGACGGGAGCCAGAC;TC=202;TCF=109;TCR=93;TR=23;func=exonic;gene=HRNR;exon_func=nonsynonymous SNV;AAchange=NM_001009931:c.C6499T:p.R2167C;segdup=0.98;1000g=0.05;sift=0.2;pp2=0.269490;phylop=0.009549;mutT=0.062064;LRT=0.589002 GT:GL:GQ:NR 0/0:-190.82,-206.2,-650.62:68:98 0/1:-306.73,-239.37,-605.74:100:104 +chr1 152281007 . A G 38 PASS ABPV=1.00e+00;FPV=2.01e-01;FR=0.2500;HP=1;MMLQ=31;NF=37;NR=62;PP=38;RMP=56.83;RPV=9.75e-01;SC=GCCTGATCATAATGGGATCCT;TC=370;TCF=169;TCR=201;TR=99 GT:GL:GQ:NR 0/0:-830.31,-842.03,-1695.93:52:178 0/1:-1104.87,-1087.65,-1851.72:72:192 +chr1 152281008 . A G 56 PASS ABPV=1.00e+00;FPV=2.26e-01;FR=0.2500;HP=1;MMLQ=31;NF=37;NR=62;PP=56;RMP=57.69;RPV=9.75e-01;SC=CCTGATCATAATGGGATCCTT;TC=368;TCF=167;TCR=201;TR=99 GT:GL:GQ:NR 0/0:-836.29,-850.28,-1704.3:62:178 1/0:-1097.96,-1076.67,-1811.19:90:190 +chr1 152281466 . C T 200 PASS ABPV=1.00e+00;FPV=3.99e-04;FR=0.2500;HP=2;MMLQ=33;NF=26;NR=66;PP=200;RMP=66.62;RPV=7.23e-01;SC=TGCCCGTGACCGGCTCTGTCT;TC=430;TCF=180;TCR=250;TR=92 GT:GL:GQ:NR 0/0:-912.94,-966.99,-1954.85:100:223 1/0:-939.3,-872.22,-1720.42:100:207 +chr1 168549565 . T C 28 PASS ABPV=1.00e+00;FPV=1.00e+00;FR=0.2504;HP=2;MMLQ=37;NF=0;NR=8;PP=28;RMP=72.28;RPV=1.34e-01;SC=TCCTTATCAATCATGTCTTTC;TC=47;TCF=0;TCR=47;TR=8 GT:GL:GQ:NR 0/0:-27.57,-33.72,-167.32:28:21 1/0:-34.62,-19.62,-182.0:63:26 +chr1 236647542 . G T 46 PASS ABPV=1.00e+00;FPV=9.99e-01;FR=0.2500;HP=3;MMLQ=34;NF=16;NR=40;PP=46;RMP=62.31;RPV=1.00e-00;SC=GTGCAAGCTGGCCCAGGCCAA;TC=104;TCF=32;TCR=72;TR=56 GT:GL:GQ:NR 0/0:-318.17,-328.23,-521.3:45:54 1/0:-498.22,-479.17,-572.27:80:50 +chr1 236647562 . T C 73 PASS ABPV=1.00e+00;FPV=9.95e-01;FR=0.2503;HP=2;MMLQ=37;NF=11;NR=36;PP=73;RMP=64.25;RPV=1.00e-00;SC=ATGGTTGGTGTGTCATGGTGC;TC=85;TCF=23;TCR=62;TR=47 GT:GL:GQ:NR 0/0:-240.39,-246.81,-405.51:29:42 0/1:-421.95,-396.59,-483.66:100:43 +chr1 236700807 . T A 130 PASS ABPV=1.00e+00;FPV=5.12e-01;FR=0.2502;HP=2;MMLQ=33;NF=8;NR=7;PP=130;RMP=47.87;RPV=8.70e-01;SC=GTAATCCCGTTTGTTGGCACC;TC=55;TCF=34;TCR=21;TR=15;func=exonic;gene=LGALS8;exon_func=nonsynonymous SNV;AAchange=NM_201544:c.T56A:p.F19Y;cons46=463 Name=lod=102;1000g=0.62;dbsnp=rs2737713;pp2=0.0;phylop=0.983932;mutT=4.6E-5;LRT=0.999982 GT:GL:GQ:NR 0/0:-41.35,-48.14,-183.02:31:21 0/1:-204.57,-166.19,-295.14:100:34 +chr1 236700823 . T C 200 PASS ABPV=1.00e+00;FPV=6.24e-01;FR=0.2504;HP=2;MMLQ=32;NF=9;NR=8;PP=200;RMP=58.62;RPV=8.49e-01;SC=GCACCATTCCTGATCAGCTGG;TC=60;TCF=35;TCR=25;TR=17;func=exonic;gene=LGALS8;exon_func=synonymous SNV;AAchange=NM_201544:c.T72C:p.P24P;cons46=463 Name=lod=102;1000g=0.61;dbsnp=rs1041934 GT:GL:GQ:NR 0/0:-41.35,-47.43,-173.43:28:22 1/0:-232.08,-183.12,-325.41:100:38 +chr1 241663902 . TGA T 37 PASS ABPV=2.57e-03;FPV=3.07e-05;FR=0.2507;HP=2;NF=0;NR=3;PP=37;RMP=44.45;RPV=2.39e-06;SC=TTTGAGTGAGTGAGAGAGAGA;TC=90;TCF=18;TCR=72;TR=3;func=intronic;gene=FH GT:GL:GQ:NR 0/0:-115.58,-120.99,-206.17:25:29 1/0:-208.1,-188.38,-347.52:83:62 +chr10 52420020 . G A 135 PASS ABPV=1.00e+00;FPV=2.24e-01;FR=0.2502;HP=2;MMLQ=35;NF=3;NR=3;PP=135;RMP=58.04;RPV=7.75e-01;SC=GAGAACTTCCGGCTGCAGTAC;TC=30;TCF=20;TCR=10;TR=6 GT:GL:GQ:NR 0/0:-65.01,-71.52,-138.01:30:16 0/1:-83.86,-44.38,-74.93:100:14 +chr10 118380701 . G A 77 PASS ABPV=1.00e+00;FPV=5.15e-01;FR=0.2503;HP=3;MMLQ=32;NF=5;NR=0;PP=77;RMP=22.32;RPV=5.62e-01;SC=CCGGGTTGCGGGGCGTCTGTT;TC=24;TCF=22;TCR=2;TR=5 GT:GL:GQ:NR 0/0:-4.14,-10.38,-77.71:28:10 0/1:-51.41,-25.11,-83.53:100:14 +chr11 1651169 . T C 84 PASS ABPV=1.00e+00;FPV=9.98e-01;FR=0.2502;HP=2;MMLQ=33;NF=8;NR=26;PP=84;RMP=71.99;RPV=1.00e-00;SC=GCTGTGGCTCTGGCTGTGGGG;TC=71;TCF=14;TCR=57;TR=34;func=exonic;gene=KRTAP5-5;exon_func=synonymous SNV;AAchange=NM_001001480:c.T99C:p.S33S;1000g=0.29;dbsnp=rs71454095 GT:GL:GQ:NR 0/0:-199.38,-206.33,-365.55:31:38 0/1:-226.68,-198.86,-282.14:100:33 +chr11 3431576 . G A 33 PASS ABPV=4.46e-01;FPV=4.99e-05;FR=0.2500;HP=1;MMLQ=30;NF=13;NR=10;PP=33;RMP=62.67;RPV=1.90e-02;SC=TCGTGTGTGAGTCCTACAGTG;TC=194;TCF=123;TCR=71;TR=23 GT:GL:GQ:NR 0/0:-71.93,-106.62,-693.75:100:102 1/0:-110.6,-94.58,-543.82:67:92 +chr11 43918703 . C CTTTTCATATTAT 36 PASS ABPV=4.61e-02;FPV=1.12e-04;FR=0.2500;HP=3;NF=2;NR=0;PP=36;RMP=5.0;RPV=1.00e+00;SC=CTGACAGTGGCTTTATATATA;TC=49;TCF=49;TCR=0;TR=2 GT:GL:GQ:NR 0/0:-14.5,-34.6,-394.96:89:42 1/0:-47.66,-15.24,-223.69:100:36 +chr11 48366812 . A C 48 PASS ABPV=1.00e+00;FPV=9.80e-01;FR=0.2502;HP=1;MMLQ=35;NF=16;NR=2;PP=48;RMP=45.69;RPV=1.00e+00;SC=AGATAATTGAATGTCCCAAGT;TC=44;TCF=42;TCR=2;TR=18 GT:GL:GQ:NR 0/0:-92.79,-99.69,-183.18:31:18 0/1:-133.87,-114.4,-228.26:82:26 +chr11 48387506 . A G 48 PASS ABPV=1.00e+00;FPV=6.15e-01;FR=0.2500;HP=3;MMLQ=34;NF=28;NR=52;PP=48;RMP=59.69;RPV=1.00e-00;SC=AAATCCCCCGACCCATGCCAT;TC=227;TCF=109;TCR=118;TR=80;func=intergenic;gene=OR4C45(dist=13507) OR4A47(dist=122839);dbsnp=rs72898882;sift=0.42 GT:GL:GQ:NR 0/0:-665.75,-691.04,-1124.95:100:117 0/1:-697.01,-677.56,-1037.3:82:110 +chr11 56143357 . G A 91 PASS ABPV=1.00e+00;FPV=9.70e-04;FR=0.2500;HP=3;MMLQ=36;NF=7;NR=60;PP=91;RMP=66.63;RPV=1.00e-00;SC=GGAATTTCTTGTACAAACAAA;TC=221;TCF=72;TCR=149;TR=67;func=exonic;gene=OR8U1 OR8U8;exon_func=synonymous SNV;AAchange=NM_001005204:c.G258A:p.L86L;dbsnp=rs76949582 GT:GL:GQ:NR 0/0:-538.52,-560.54,-1080.28:97:104 1/0:-924.01,-894.57,-1497.61:100:131 +chr11 56468493 . A G 86 PASS ABPV=1.00e+00;FPV=1.31e-03;FR=0.2500;HP=1;MMLQ=30;NF=23;NR=16;PP=86;RMP=49.16;RPV=3.74e-01;SC=TCTGCCCCGCAGTGCTCATCC;TC=227;TCF=156;TCR=71;TR=39 GT:GL:GQ:NR 0/0:-212.22,-234.78,-819.52:99:105 0/1:-472.13,-443.86,-1063.46:100:122 +chr11 92592540 . T G 22 PASS ABPV=9.72e-03;FPV=5.62e-02;FR=0.2501;HP=3;MMLQ=35;NF=0;NR=3;PP=22;RMP=99.66;RPV=8.62e-06;SC=GTTAGTGTTTTGGCTCTTGGA;TC=77;TCF=10;TCR=67;TR=3 GT:GL:GQ:NR 0/0:-302.47,-309.64,-322.1:32:36 0/1:-338.7,-325.07,-335.6:52:41 +chr11 123504959 . C G 200 PASS ABPV=1.00e+00;FPV=4.20e-01;FR=0.2508;HP=2;MMLQ=40;NF=0;NR=7;PP=200;RMP=63.62;RPV=9.72e-01;SC=CAGTGCCCAGCGTGGGAACAC;TC=19;TCF=3;TCR=16;TR=7;func=intronic;gene=SCN3B;1000g=0.72;dbsnp=rs1148110 GT:GL:GQ:NR 0/0:-1.61,-6.93,-61.43:24:8 1/0:-66.0,-7.62,-36.11:100:11 +chr12 92675 . C T 152 PASS ABPV=1.00e+00;FPV=7.38e-01;FR=0.2500;HP=1;MMLQ=37;NF=1;NR=7;PP=152;RMP=66.0;RPV=3.57e-01;SC=GGACTGTTTCCTGCTTGTAGC;TC=38;TCF=4;TCR=34;TR=8 GT:GL:GQ:NR 0/0:-41.61,-49.75,-120.62:37:14 1/0:-68.65,-25.34,-113.9:100:24 +chr12 11183642 . A G 154 PASS ABPV=1.00e+00;FPV=8.37e-01;FR=0.2500;HP=1;MMLQ=34;NF=47;NR=62;PP=154;RMP=57.25;RPV=1.00e-00;SC=GCTAGTAGCAAGCCAGTTGCT;TC=311;TCF=168;TCR=143;TR=109;func=exonic;gene=TAS2R31;exon_func=nonsynonymous SNV;AAchange=NM_176885:c.T293C:p.L98P;segdup=0.93;dbsnp=rs73049067 GT:GL:GQ:NR 0/0:-561.52,-579.71,-1246.3:80:152 0/1:-826.02,-782.04,-1401.37:100:159 +chr12 29908580 . A ATTGTT 200 PASS ABPV=1.00e+00;FPV=9.78e-01;FR=0.2507;HP=3;NF=10;NR=0;PP=200;RMP=36.19;RPV=1.00e+00;SC=TTTGGAAACTATTAAGTAATT;TC=24;TCF=24;TCR=0;TR=10;func=intronic;gene=TMTC1;dbsnp=rs3830194 GT:GL:GQ:NR 0/0:0.0,-5.55,-96.69:25:9 1/0:-151.5,-15.23,-76.28:100:17 +chr12 31282765 . A T 21 PASS ABPV=1.00e+00;FPV=8.68e-01;FR=0.2502;HP=2;MMLQ=35;NF=12;NR=5;PP=21;RMP=46.72;RPV=8.51e-01;SC=AATGAATACAAATTTTTTCAT;TC=53;TCF=38;TCR=15;TR=17 GT:GL:GQ:NR 0/0:-83.08,-89.72,-221.87:30:27 1/0:-63.64,-50.39,-170.59:55:26 +chr12 52843779 . T C 52 PASS ABPV=1.00e+00;FPV=1.21e-05;FR=0.2500;HP=4;MMLQ=20;NF=8;NR=16;PP=52;RMP=64.54;RPV=6.52e-01;SC=TTTGAACCCCTGGCTTCATCT;TC=161;TCF=100;TCR=61;TR=24;func=intronic;gene=KRT6B;segdup=0.93;dbsnp=rs380379 GT:GL:GQ:NR 0/0:-109.82,-139.81,-567.08:100:82 0/1:-186.27,-165.75,-481.84:87:79 +chr12 65471467 . A G 200 PASS ABPV=1.00e+00;FPV=6.42e-01;FR=0.2501;HP=2;MMLQ=36;NF=7;NR=0;PP=200;RMP=38.97;RPV=4.22e-01;SC=TGCATCTTAAATATTCTTATC;TC=30;TCF=27;TCR=3;TR=7;func=intronic;gene=WIF1;1000g=0.27;dbsnp=rs2289936 GT:GL:GQ:NR 0/0:0.0,-7.62,-98.02:34:12 1/0:-69.82,-23.48,-105.09:100:18 +chr12 99175091 . AAC A 86 PASS ABPV=3.61e-01;FPV=7.09e-04;FR=0.2503;HP=1;NF=4;NR=0;PP=86;RMP=34.87;RPV=9.95e-03;SC=AAACAACAACAACACACACAC;TC=43;TCF=27;TCR=16;TR=4;func=intronic;gene=ANKS1B GT:GL:GQ:NR 0/0:-4.37,-10.61,-100.0:28:17 0/1:-72.08,-41.09,-136.47:100:27 +chr12 104378526 . G GACACAGAAACT 200 PASS ABPV=2.37e-01;FPV=8.53e-03;FR=0.2500;HP=1;NF=5;NR=0;PP=200;RMP=8.25;RPV=5.63e-02;SC=TGTGATTCTAGCTCTGCTATG;TC=59;TCF=49;TCR=10;TR=5 GT:GL:GQ:NR 0/0:0.0,-15.25,-297.25:67:32 1/0:-137.95,-64.82,-429.82:100:44 +chr13 25169091 . A G 41 PASS ABPV=1.00e+00;FPV=1.23e-02;FR=0.2501;HP=3;MMLQ=35;NF=18;NR=1;PP=41;RMP=17.52;RPV=3.10e-02;SC=AATAACCAAAACAGTTTTTTA;TC=133;TCF=114;TCR=19;TR=19 GT:GL:GQ:NR 0/0:-140.13,-147.81,-405.22:35:57 0/1:-204.4,-186.51,-512.07:75:76 +chr13 37795039 . G T 20 PASS ABPV=5.69e-01;FPV=5.25e-01;FR=0.2502;HP=1;MMLQ=40;NF=2;NR=0;PP=20;RMP=33.0;RPV=7.49e-02;SC=TCCTTGGCCTGAGCTTCTTTG;TC=19;TCF=10;TCR=9;TR=2 GT:GL:GQ:NR 0/0:0.0,-6.93,-89.94:31:11 1/0:-22.03,-9.0,-57.23:54:8 +chr13 100517209 . G A 21 PASS ABPV=2.00e-01;FPV=2.14e-03;FR=0.2500;HP=2;MMLQ=35;NF=6;NR=7;PP=21;RMP=94.07;RPV=9.71e-04;SC=GTGTGTGTGTGTATATGTGTG;TC=134;TCF=62;TCR=72;TR=13 GT:GL:GQ:NR 0/0:-265.23,-279.13,-623.6:62:70 1/0:-308.0,-294.6,-524.58:56:64 +chr13 114540947 . C CTCTGCTCTT 45 PASS ABPV=1.42e-01;FPV=3.34e-03;FR=0.2500;HP=2;NF=2;NR=0;PP=45;RMP=1.0;RPV=5.62e-01;SC=CCACAGGAACCCAGCCAGCAG;TC=37;TCF=35;TCR=2;TR=2 GT:GL:GQ:NR 0/0:0.0,-11.09,-214.96:49:19 1/0:-74.37,-43.34,-288.0:100:27 +chr14 19118192 . A G 200 PASS ABPV=1.00e+00;FPV=1.32e-05;FR=0.2507;HP=2;MMLQ=32;NF=68;NR=76;PP=200;RMP=53.85;RPV=5.74e-02;SC=TGCTTGCCATATGTCATGGAT;TC=771;TCF=415;TCR=356;TR=144;func=intergenic;gene=NONE(dist=NONE) OR11H12(dist=259402);segdup=0.96;dbsnp=rs77434589 GT:GL:GQ:NR 0/0:-730.61,-736.03,-2441.78:25:349 1/0:-997.51,-891.65,-2847.93:100:422 +chr14 19500081 . A G 22 PASS ABPV=1.00e+00;FPV=1.61e-01;FR=0.2505;HP=3;MMLQ=22;NF=3;NR=0;PP=22;RMP=47.77;RPV=1.00e+00;SC=GGTGCACACCACTGTGGACGT;TC=22;TCF=22;TCR=0;TR=3 GT:GL:GQ:NR 0/0:-15.46,-21.36,-64.18:27:10 0/1:-27.84,-14.25,-57.82:57:12 +chr14 20137380 . C T 33 PASS ABPV=1.24e-02;FPV=1.12e-09;FR=0.2500;HP=1;MMLQ=31;NF=8;NR=17;PP=33;RMP=61.98;RPV=3.46e-06;SC=TCACTGCCCTCGCCGCATGCA;TC=303;TCF=142;TCR=161;TR=25 GT:GL:GQ:NR 0/0:-373.48,-389.86,-1035.03:72:144 0/1:-475.48,-459.41,-1121.57:68:159 +chr14 64496872 . G C 96 PASS ABPV=1.00e+00;FPV=1.00e+00;FR=0.2503;HP=1;MMLQ=37;NF=0;NR=4;PP=96;RMP=55.12;RPV=5.17e-01;SC=AGAAATTCCAGTGGTATTCAG;TC=18;TCF=0;TCR=18;TR=4;func=intronic;gene=SYNE2;1000g=0.90;dbsnp=rs3866737 GT:GL:GQ:NR 0/0:0.0,-6.24,-83.73:28:9 0/1:-36.8,-6.24,-45.77:100:9 +chr14 106881425 . A G 71 PASS ABPV=1.00e+00;FPV=1.15e-01;FR=0.2500;HP=1;MMLQ=32;NF=4;NR=10;PP=71;RMP=49.71;RPV=2.88e-01;SC=CCATCCACTCAAGCCCTTGTC;TC=78;TCF=29;TCR=49;TR=14 GT:GL:GQ:NR 0/0:-39.35,-48.57,-258.02:41:30 1/0:-231.62,-206.72,-399.17:100:48 +chr14 106881452 . T C 66 PASS ABPV=1.00e+00;FPV=3.03e-01;FR=0.2509;HP=1;MMLQ=27;NF=3;NR=10;PP=66;RMP=65.33;RPV=1.89e-01;SC=CTGGTCACACTGAATTCATAC;TC=71;TCF=18;TCR=53;TR=13 GT:GL:GQ:NR 0/0:-57.13,-62.37,-258.3:24:30 0/1:-168.08,-144.38,-338.93:100:41 +chr14 107034967 . T C 105 PASS ABPV=1.00e+00;FPV=6.54e-01;FR=0.2500;HP=1;MMLQ=34;NF=6;NR=9;PP=105;RMP=58.51;RPV=6.64e-01;SC=ACAGGAGATCTTCAGAGACTC;TC=57;TCF=23;TCR=34;TR=15 GT:GL:GQ:NR 0/0:-163.23,-172.19,-255.57:40:20 1/0:-379.46,-346.84,-445.34:100:39 +chr15 20083754 . G A 54 PASS ABPV=1.00e+00;FPV=5.67e-01;FR=0.2500;HP=2;MMLQ=36;NF=33;NR=5;PP=54;RMP=47.07;RPV=4.22e-01;SC=AAATCATTATGTGCTTTGAGA;TC=155;TCF=131;TCR=24;TR=38 GT:GL:GQ:NR 0/0:-122.79,-137.29,-483.11:64:64 1/0:-176.25,-155.43,-655.46:88:91 +chr15 20446256 . G C 57 PASS ABPV=1.00e+00;FPV=1.00e+00;FR=0.2500;HP=2;MMLQ=34;NF=1;NR=7;PP=57;RMP=71.88;RPV=4.32e-01;SC=CATGCAAGAAGCTGGAAAGCC;TC=33;TCF=1;TCR=32;TR=8;func=intergenic;gene=NONE(dist=NONE) LOC646096(dist=41741);segdup=0.97;dbsnp=rs3907011 GT:GL:GQ:NR 0/0:-13.82,-23.14,-131.81:42:16 0/1:-45.04,-23.56,-104.26:91:17 +chr15 20875055 . C G 154 PASS ABPV=1.00e+00;FPV=7.50e-01;FR=0.2504;HP=3;MMLQ=37;NF=0;NR=12;PP=154;RMP=60.19;RPV=1.71e-01;SC=AATTTAAACGCAAATTAGTAA;TC=64;TCF=1;TCR=63;TR=12;func=ncRNA;gene=NBEAP1;segdup=0.93;1000g=0.26;dbsnp=rs7496378 GT:GL:GQ:NR 0/0:-9.2,-15.25,-188.16:27:22 0/1:-137.96,-94.13,-342.43:100:42 +chr15 20875100 . A G 21 PASS ABPV=1.00e+00;FPV=7.50e-01;FR=0.2502;HP=4;MMLQ=35;NF=0;NR=6;PP=21;RMP=81.39;RPV=2.77e-01;SC=AGAGGTTAAAAATAACTTTCT;TC=33;TCF=1;TCR=32;TR=6;func=ncRNA;gene=NBEAP1;cons46=243 Name=lod=13;segdup=0.93;1000g=0.28;dbsnp=rs7497715 GT:GL:GQ:NR 0/0:-7.83,-14.75,-92.12:31:10 1/0:-92.65,-79.35,-211.07:56:23 +chr15 21140945 . C T 26 PASS ABPV=1.00e+00;FPV=1.00e-01;FR=0.2506;HP=2;MMLQ=33;NF=1;NR=3;PP=26;RMP=65.04;RPV=7.12e-01;SC=ACATGTACAGCGCCACACTTC;TC=25;TCF=14;TCR=11;TR=4;func=intergenic;gene=NF1P2(dist=6320) LOC348120(dist=4822);cons46=679 Name=lod=765;segdup=1.00;1000g=0.24;dbsnp=rs12324229 GT:GL:GQ:NR 0/0:-16.95,-22.6,-60.18:26:13 0/1:-36.66,-22.19,-44.85:61:12 +chr15 28900400 . G T 133 PASS ABPV=1.00e+00;FPV=6.31e-01;FR=0.2502;HP=3;MMLQ=34;NF=14;NR=0;PP=133;RMP=36.99;RPV=4.21e-01;SC=GCTTGTCATTGTAAATTTTCT;TC=57;TCF=54;TCR=3;TR=14 GT:GL:GQ:NR 0/0:-26.38,-32.94,-192.24:30:27 1/0:-71.34,-32.36,-180.89:100:30 +chr15 75656200 . G A 75 PASS ABPV=1.00e+00;FPV=6.28e-01;FR=0.2507;HP=6;MMLQ=37;NF=4;NR=0;PP=75;RMP=47.43;RPV=1.00e+00;SC=CCAGCCCCCCGGCCCCGTTTT;TC=16;TCF=16;TCR=0;TR=4 GT:GL:GQ:NR 0/0:-7.14,-12.68,-76.44:25:8 0/1:-34.75,-8.99,-31.71:100:8 +chr15 76075732 . A C 29 PASS ABPV=1.00e+00;FPV=9.97e-01;FR=0.2501;HP=2;MMLQ=34;NF=11;NR=15;PP=29;RMP=61.41;RPV=9.58e-01;SC=ATCCCTATCTATCCAGGCCTT;TC=64;TCF=22;TCR=42;TR=26 GT:GL:GQ:NR 0/0:-89.15,-96.33,-237.9:32:31 1/0:-134.14,-119.09,-238.26:63:33 +chr15 100340178 . C G 52 PASS ABPV=1.00e+00;FPV=1.76e-01;FR=0.2500;HP=1;MMLQ=31;NF=5;NR=5;PP=52;RMP=87.78;RPV=1.32e-01;SC=AGTGTCTTCTCGTTCCCACGC;TC=64;TCF=31;TCR=33;TR=10;func=ncRNA;gene=DNM1P46;cons46=699 Name=lod=923;segdup=0.97;sift=0.27 GT:GL:GQ:NR 0/0:-139.12,-149.96,-310.47:37:36 1/0:-206.67,-186.19,-317.68:87:38 +chr15 102303399 . C T 65 PASS ABPV=1.00e+00;FPV=4.32e-02;FR=0.2500;HP=2;MMLQ=34;NF=5;NR=30;PP=65;RMP=65.58;RPV=1.00e-00;SC=AGAGCTGCTGCCCAACCTGCA;TC=90;TCF=40;TCR=50;TR=35;func=intergenic;gene=TARSL2(dist=38754) OR4F6(dist=42524);cons46=920 Name=lod=7327;segdup=0.98;1000g=0.50;dbsnp=rs71416239 GT:GL:GQ:NR 0/0:-129.26,-138.34,-250.21:41:46 0/1:-118.78,-95.27,-224.48:100:44 +chr15 102506389 . C T 50 PASS ABPV=6.29e-01;FPV=1.27e-01;FR=0.2500;HP=1;MMLQ=34;NF=1;NR=3;PP=50;RMP=67.19;RPV=2.63e-01;SC=GGATGCCCTGCAGTACCTGCA;TC=32;TCF=13;TCR=19;TR=4 GT:GL:GQ:NR 0/0:-3.9,-15.65,-133.88:52:17 0/1:-31.25,-11.29,-72.06:84:15 +chr16 9250260 . T G 22 PASS ABPV=1.00e+00;FPV=1.00e-02;FR=0.2500;HP=2;MMLQ=29;NF=0;NR=4;PP=22;RMP=37.36;RPV=8.85e-01;SC=CACCTATTATTCCATGAATTC;TC=27;TCF=16;TCR=11;TR=4;func=intergenic;gene=C16orf72(dist=36705) MIR548X(dist=78514);cons46=749 Name=lod=1471;1000g=0.73;dbsnp=rs12929693 GT:GL:GQ:NR 0/0:-1.84,-10.83,-100.69:40:14 0/1:-25.85,-12.37,-70.66:56:13 +chr16 21747662 . G A 36 PASS ABPV=1.00e+00;FPV=2.01e-01;FR=0.2500;HP=1;MMLQ=34;NF=16;NR=6;PP=36;RMP=40.34;RPV=5.40e-05;SC=CTGTCTTTCAGTCTGTTCGGA;TC=159;TCF=79;TCR=80;TR=22 GT:GL:GQ:NR 0/0:-69.29,-88.69,-470.14:85:75 1/0:-171.53,-154.82,-534.35:70:84 +chr16 28618446 . T C 36 PASS ABPV=1.00e+00;FPV=8.61e-01;FR=0.2500;HP=3;MMLQ=32;NF=6;NR=14;PP=36;RMP=63.74;RPV=5.40e-01;SC=ACACAGCCTGTCCCAGGCCAG;TC=75;TCF=18;TCR=57;TR=20 GT:GL:GQ:NR 0/0:-33.24,-41.67,-205.86:38:27 0/1:-113.92,-97.17,-312.83:70:48 +chr16 33390329 . G C 24 PASS ABPV=6.16e-01;FPV=4.32e-02;FR=0.2500;HP=2;MMLQ=34;NF=5;NR=0;PP=24;RMP=54.47;RPV=1.00e+00;SC=TTAGAAACAGGTTCACAATTG;TC=40;TCF=40;TCR=0;TR=5;func=intergenic;gene=LOC390705(dist=91627) LINC00273(dist=570723);segdup=0.97;1000g=0.32;dbsnp=rs12232434 GT:GL:GQ:NR 0/0:-6.09,-14.55,-170.95:38:21 0/1:-47.14,-33.16,-147.34:58:19 +chr16 33401967 . G A 116 PASS ABPV=1.00e+00;FPV=1.64e-02;FR=0.2500;HP=2;MMLQ=34;NF=16;NR=15;PP=116;RMP=51.2;RPV=2.96e-01;SC=GAGGTCTGCCGACAGCTGCAC;TC=172;TCF=102;TCR=70;TR=31;func=intergenic;gene=LOC390705(dist=103265) LINC00273(dist=559085);cons46=611 Name=lod=406;segdup=0.97;dbsnp=rs8047578 GT:GL:GQ:NR 0/0:-133.55,-144.14,-490.22:47:76 1/0:-209.17,-173.99,-648.51:100:96 +chr16 33407954 . C G 34 PASS ABPV=1.00e+00;FPV=4.21e-01;FR=0.2507;HP=3;MMLQ=34;NF=0;NR=3;PP=34;RMP=61.08;RPV=5.19e-01;SC=GAAATTGTCTCGGGCCTGAAG;TC=17;TCF=3;TCR=14;TR=3 GT:GL:GQ:NR 0/0:-10.82,-16.36,-77.44:25:9 1/0:-63.55,-47.37,-59.15:58:8 +chr16 46405120 . C G 37 PASS ABPV=3.94e-02;FPV=4.07e-03;FR=0.2510;HP=2;MMLQ=40;NF=2;NR=1;PP=37;RMP=51.27;RPV=3.18e-03;SC=CGATTCCATTCGATAATGATT;TC=62;TCF=34;TCR=28;TR=3 GT:GL:GQ:NR 0/0:-129.24,-134.38,-161.33:24:28 0/1:-205.7,-188.69,-196.8:42:34 +chr16 58148083 . C CACACGCAGGTACA 31 PASS ABPV=1.69e-01;FPV=1.00e+00;FR=0.2500;HP=2;NF=0;NR=2;PP=31;RMP=88.0;RPV=3.34e-03;SC=CAGGGAAGCACCCACCCTTGT;TC=35;TCF=0;TCR=35;TR=2 GT:GL:GQ:NR 0/0:-11.28,-21.68,-223.8:46:16 0/1:-62.86,-30.44,-243.59:100:20 +chr17 5036281 . G C 48 PASS ABPV=1.00e+00;FPV=8.00e-01;FR=0.2500;HP=1;MMLQ=32;NF=14;NR=49;PP=48;RMP=47.67;RPV=9.22e-01;SC=AAGCACAGTAGCAAAGTAATG;TC=214;TCF=48;TCR=166;TR=63 GT:GL:GQ:NR 0/0:-506.02,-514.23,-1090.2:37:117 0/1:-460.03,-440.62,-871.14:82:97 +chr17 6328747 . T G 200 PASS ABPV=1.00e+00;FPV=8.77e-01;FR=0.2507;HP=4;MMLQ=32;NF=8;NR=5;PP=200;RMP=59.22;RPV=9.45e-01;SC=GGCCACTTGCTCCCTGCCTGG;TC=36;TCF=24;TCR=12;TR=13 GT:GL:GQ:NR 0/0:-4.84,-10.37,-69.24:25:8 0/1:-116.1,-23.7,-86.84:100:28 +chr17 14140191 . G A 125 PASS ABPV=1.00e+00;FPV=3.98e-02;FR=0.2500;HP=1;MMLQ=34;NF=2;NR=11;PP=125;RMP=71.76;RPV=3.84e-02;SC=AGCTGTTTACGGCGCTGACTC;TC=95;TCF=24;TCR=71;TR=13;func=upstream;gene=CDRT15;segdup=0.99;1000g=0.17;dbsnp=rs28533558 GT:GL:GQ:NR 0/0:-146.51,-156.3,-338.05:44:40 0/1:-162.79,-125.58,-384.62:100:55 +chr17 21904955 . G A 29 PASS ABPV=1.46e-01;FPV=3.00e-01;FR=0.2500;HP=2;MMLQ=33;NF=1;NR=7;PP=29;RMP=77.08;RPV=5.90e-05;SC=GTGGCACGGCGCTGTATCCTG;TC=95;TCF=9;TCR=86;TR=8 GT:GL:GQ:NR 0/0:-95.23,-110.26,-302.39:67:42 0/1:-104.15,-88.94,-334.7:64:53 +chr17_gl000205_random 114392 . G GC 200 PASS ABPV=1.00e+00;FPV=1.00e+00;FR=0.2503;HP=1;NF=1;NR=9;PP=200;RMP=62.13;RPV=8.86e-01;SC=GAGCTTCTATGAGGCGTGGGG;TC=28;TCF=1;TCR=27;TR=10;func=intergenic;gene=NONE(dist=NONE) MGC70870(dist=2231) GT:GL:GQ:NR 0/0:0.0,-6.24,-93.01:28:9 0/1:-137.06,-63.68,-124.76:100:19 +chr17_gl000205_random 118186 . TCGC T 157 PASS ABPV=1.00e+00;FPV=4.85e-02;FR=0.2506;HP=1;NF=4;NR=5;PP=157;RMP=51.77;RPV=1.51e-01;SC=CCATCATAAGTCGCATCCCGG;TC=55;TCF=23;TCR=32;TR=9;func=ncRNA;gene=MGC70870;cons46=824 Name=lod=2972;segdup=0.90 GT:GL:GQ:NR 0/0:-80.93,-86.51,-246.22:26:23 0/1:-151.92,-104.34,-309.99:100:34 +chr17_gl000205_random 118289 . G A 30 PASS ABPV=1.00e+00;FPV=2.43e-02;FR=0.2500;HP=1;MMLQ=38;NF=1;NR=4;PP=30;RMP=51.3;RPV=5.18e-01;SC=TGAGCTCAGTGGTGCTACCTA;TC=38;TCF=20;TCR=18;TR=5 GT:GL:GQ:NR 0/0:-92.27,-100.53,-170.2:37:15 0/1:-193.59,-178.31,-262.43:64:23 +chr17_gl000205_random 122791 . T C 124 PASS ABPV=1.00e+00;FPV=6.72e-01;FR=0.2504;HP=1;MMLQ=34;NF=8;NR=0;PP=124;RMP=54.5;RPV=1.00e+00;SC=GATATAAACTTCTAAAATTCA;TC=30;TCF=30;TCR=0;TR=8;func=intergenic;gene=MGC70870(dist=3059) NONE(dist=NONE) GT:GL:GQ:NR 0/0:-33.82,-39.98,-100.64:28:10 1/0:-177.82,-140.79,-190.46:100:20 +chr18 14183747 . T C 115 PASS ABPV=1.00e+00;FPV=9.72e-01;FR=0.2500;HP=5;MMLQ=36;NF=49;NR=88;PP=115;RMP=54.47;RPV=9.86e-01;SC=ACAAAGAAAATAGAACGCCTT;TC=444;TCF=156;TCR=288;TR=137 GT:GL:GQ:NR 0/0:-919.95,-948.86,-1765.89:100:211 0/1:-1189.4,-1154.37,-1918.79:100:233 +chr19 3611146 . A G 30 PASS ABPV=1.00e+00;FPV=5.15e-01;FR=0.2501;HP=1;MMLQ=24;NF=6;NR=1;PP=30;RMP=42.3;RPV=2.44e-01;SC=CCCTGTGCTCAGAGGTGGGGG;TC=36;TCF=26;TCR=10;TR=7;func=ncRNA;gene=C19orf29-AS1;1000g=0.56;dbsnp=rs2074786 GT:GL:GQ:NR 0/0:-27.63,-35.13,-121.04:34:15 0/1:-69.97,-54.53,-137.67:65:21 +chr19 12543121 . C G 200 PASS ABPV=1.00e+00;FPV=7.14e-01;FR=0.2502;HP=7;MMLQ=40;NF=11;NR=0;PP=200;RMP=33.87;RPV=7.50e-01;SC=TTCTTTGCTTCTTTTTAAATT;TC=41;TCF=40;TCR=1;TR=11;func=intronic;gene=ZNF443;segdup=0.96;dbsnp=rs74181652 GT:GL:GQ:NR 0/0:-8.47,-15.46,-153.74:32:20 0/1:-71.21,-15.46,-97.4:100:21 +chr19 15014189 . T C 90 PASS ABPV=1.00e+00;FPV=1.97e-01;FR=0.2500;HP=4;MMLQ=100;NF=2;NR=5;PP=90;RMP=90.56;RPV=4.68e-01;SC=GAGTGAGTTGTGGGTTGCAGC;TC=39;TCF=16;TCR=23;TR=7 GT:GL:GQ:NR 0/0:-190.71,-200.49,-255.11:44:24 1/0:-174.95,-145.84,-178.61:100:15 +chr19 41515263 . A G 88 PASS ABPV=3.76e-01;FPV=1.82e-01;FR=0.2500;HP=2;MMLQ=33;NF=7;NR=3;PP=88;RMP=64.16;RPV=2.48e-04;SC=AGCGCCCCCAAGGACCTCATC;TC=93;TCF=40;TCR=53;TR=10;func=exonic;gene=CYP2B6;exon_func=nonsynonymous SNV;AAchange=NM_000767:c.A785G:p.K262R;segdup=0.92;1000g=0.20;dbsnp=rs2279343;pp2=0.0;phylop=0.086093;mutT=1.0E-6;LRT=0.999974 GT:GL:GQ:NR 0/0:-4.81,-28.32,-273.38:100:41 0/1:-65.82,-37.11,-263.4:100:52 +chr19 42188037 . C T 114 PASS ABPV=1.00e+00;FPV=6.06e-02;FR=0.2500;HP=4;MMLQ=34;NF=2;NR=8;PP=114;RMP=98.9;RPV=1.54e-02;SC=GTGTGGCCCCCTTGGTTCCCC;TC=73;TCF=11;TCR=62;TR=10 GT:GL:GQ:NR 0/0:-205.49,-214.25,-251.15:29:29 0/1:-379.34,-343.91,-357.8:15:44 +chr19 50474708 . T G 61 PASS ABPV=1.00e+00;FPV=7.17e-01;FR=0.2501;HP=2;MMLQ=30;NF=5;NR=1;PP=61;RMP=67.96;RPV=3.09e-02;SC=CTGGGCTCAGTGTCCCAGAGC;TC=37;TCF=18;TCR=19;TR=6 GT:GL:GQ:NR 0/0:-86.34,-93.74,-137.77:33:15 0/1:-129.81,-107.4,-147.05:95:22 +chr19 52977823 . A G 102 PASS ABPV=1.00e+00;FPV=3.15e-01;FR=0.2507;HP=2;MMLQ=35;NF=0;NR=4;PP=102;RMP=41.58;RPV=8.84e-01;SC=GTTTCTCTCCAGTATGAATTC;TC=15;TCF=4;TCR=11;TR=4;func=intronic;gene=ZNF578;cons46=395 Name=lod=54;1000g=0.94;dbsnp=rs1673901 GT:GL:GQ:NR 0/0:0.0,-5.54,-65.87:25:9 1/0:-36.12,-4.16,-18.86:71:6 +chr19 54726711 . G T 43 PASS ABPV=1.00e+00;FPV=1.00e-00;FR=0.2504;HP=3;MMLQ=31;NF=22;NR=2;PP=43;RMP=52.84;RPV=6.78e-01;SC=GTCCCCGCCCGGGTGCCTCCT;TC=53;TCF=45;TCR=8;TR=24 GT:GL:GQ:NR 0/0:-47.88,-54.03,-95.64:28:18 1/0:-164.89,-146.64,-206.88:77:35 +chr2 905553 . G C 76 PASS ABPV=1.62e-02;FPV=5.75e-08;FR=0.2500;HP=2;MMLQ=31;NF=1;NR=7;PP=76;RMP=95.73;RPV=1.04e-02;SC=GCCTGCACTGGGTCTGGTGTT;TC=128;TCF=69;TCR=59;TR=8 GT:GL:GQ:NR 0/0:-314.19,-325.21,-450.94:49:57 0/1:-390.34,-364.48,-513.78:100:71 +chr2 905595 . G C 24 PASS ABPV=1.21e-01;FPV=1.79e-02;FR=0.2500;HP=2;MMLQ=35;NF=5;NR=1;PP=24;RMP=13.0;RPV=6.96e-04;SC=GCCTGCACTGGGTCTGGTGTT;TC=79;TCF=45;TCR=34;TR=6 GT:GL:GQ:NR 0/0:-210.22,-219.58,-290.19:42:42 1/0:-197.49,-183.47,-250.46:59:38 +chr2 91885842 . G A 37 PASS ABPV=1.00e+00;FPV=2.46e-01;FR=0.2502;HP=1;MMLQ=36;NF=4;NR=0;PP=37;RMP=71.85;RPV=4.22e-01;SC=CCAACATTACGGAATTTGGAT;TC=27;TCF=24;TCR=3;TR=4 GT:GL:GQ:NR 0/0:-11.45,-18.39,-83.47:31:11 0/1:-59.01,-41.99,-86.53:72:16 +chr2 96525556 . C T 37 PASS ABPV=1.00e+00;FPV=1.00e-00;FR=0.2503;HP=1;MMLQ=37;NF=60;NR=2;PP=37;RMP=45.25;RPV=9.49e-01;SC=TCTCCTTATACGTCTTTAATA;TC=91;TCF=87;TCR=4;TR=62 GT:GL:GQ:NR 0/0:-304.4,-310.82,-406.42:29:43 0/1:-411.62,-394.62,-459.09:72:48 +chr2 107042620 . C T 45 PASS ABPV=1.00e+00;FPV=7.50e-01;FR=0.2500;HP=4;MMLQ=33;NF=0;NR=10;PP=45;RMP=77.64;RPV=2.94e-02;SC=GCAAGAGCTACAAATACAAAA;TC=69;TCF=1;TCR=68;TR=10;func=intronic;gene=RGPD3;cons46=333 Name=lod=30;segdup=0.99;dbsnp=rs2433787 GT:GL:GQ:NR 0/0:-9.17,-23.45,-154.19:63:21 1/0:-107.84,-88.96,-294.09:80:48 +chr2 132860931 . G A 113 PASS ABPV=1.00e+00;FPV=5.61e-01;FR=0.2507;HP=1;MMLQ=38;NF=0;NR=8;PP=113;RMP=69.43;RPV=9.58e-01;SC=GAAGAATGTGGTAAAGCCTTT;TC=22;TCF=2;TCR=20;TR=8 GT:GL:GQ:NR 0/0:-12.66,-18.1,-56.72:25:9 1/0:-57.64,-23.24,-50.67:100:13 +chr2 133020074 . G A 33 PASS ABPV=1.00e+00;FPV=9.94e-01;FR=0.2501;HP=2;MMLQ=36;NF=45;NR=12;PP=33;RMP=47.59;RPV=9.08e-01;SC=ATTTCAGAAGGGAAAATATCC;TC=167;TCF=131;TCR=36;TR=57;func=intergenic;gene=ANKRD30BL(dist=4532) GPR39(dist=154073);cons46=762 Name=lod=1662;segdup=0.91;dbsnp=rs111959326 GT:GL:GQ:NR 0/0:-698.84,-706.52,-798.38:35:80 1/0:-786.87,-770.7,-903.5:68:87 +chr2 133020186 . T C 66 PASS ABPV=1.00e+00;FPV=1.55e-01;FR=0.2500;HP=1;MMLQ=34;NF=52;NR=51;PP=66;RMP=46.69;RPV=9.65e-01;SC=TAGCTTTGTGTTCATACCACT;TC=402;TCF=237;TCR=165;TR=103;func=intergenic;gene=ANKRD30BL(dist=4644) GPR39(dist=153961);cons46=762 Name=lod=1662;segdup=0.91;dbsnp=rs112259198 GT:GL:GQ:NR 0/0:-1712.52,-1737.48,-1975.72:100:192 1/0:-1974.59,-1950.96,-2276.74:100:211 +chr2 133020542 . G A 50 PASS ABPV=1.00e+00;FPV=1.14e-01;FR=0.2503;HP=1;MMLQ=32;NF=3;NR=6;PP=50;RMP=53.94;RPV=7.08e-02;SC=CTATCCAAGTGGATCCAAATT;TC=66;TCF=24;TCR=42;TR=9;func=intergenic;gene=ANKRD30BL(dist=5000) GPR39(dist=153605);cons46=762 Name=lod=1662;segdup=0.93;dbsnp=rs2257591 GT:GL:GQ:NR 0/0:-181.04,-187.42,-271.44:29:29 1/0:-243.98,-224.07,-313.1:84:37 +chr2 166801924 . C G 78 PASS ABPV=1.00e+00;FPV=5.71e-01;FR=0.2507;HP=3;MMLQ=34;NF=4;NR=0;PP=78;RMP=67.75;RPV=7.49e-01;SC=TATTTACAAACTGGCAATAGA;TC=18;TCF=17;TCR=1;TR=4;func=ncRNA;gene=LOC100506134;1000g=0.64;dbsnp=rs6432853 GT:GL:GQ:NR 0/0:-34.05,-39.57,-91.24:25:8 1/0:-42.79,-16.34,-58.89:100:10 +chr2 204055943 . T C 59 PASS ABPV=2.58e-01;FPV=8.29e-02;FR=0.2500;HP=2;MMLQ=33;NF=11;NR=2;PP=59;RMP=61.13;RPV=3.22e-06;SC=ATGGCCGCCATCCTCATGACA;TC=128;TCF=65;TCR=63;TR=13;func=intronic;gene=NBEAL1;cons46=702 Name=lod=950;dbsnp=rs4561645 GT:GL:GQ:NR 0/0:-41.52,-53.03,-440.53:51:70 1/0:-89.56,-67.55,-350.54:93:58 +chr2 210594540 . A G 200 PASS ABPV=1.00e+00;FPV=9.70e-01;FR=0.2507;HP=1;MMLQ=30;NF=10;NR=1;PP=200;RMP=52.61;RPV=9.37e-01;SC=CGAATGCAAGATATAGTTAAA;TC=27;TCF=25;TCR=2;TR=11;func=intronic;gene=MAP2;1000g=0.88;dbsnp=rs4673486 GT:GL:GQ:NR 0/0:0.0,-5.54,-62.54:25:8 0/1:-93.19,-14.77,-63.29:100:19 +chr2 211444533 . GGT G 32 PASS ABPV=1.78e-01;FPV=1.96e-01;FR=0.2503;HP=2;NF=1;NR=3;PP=32;RMP=50.82;RPV=2.40e-03;SC=TGTTTCTTCGGGTGTGTGTGT;TC=54;TCF=11;TCR=43;TR=4 GT:GL:GQ:NR 0/0:-4.14,-10.38,-103.02:28:17 1/0:-41.6,-23.06,-172.26:78:37 +chr2 227659818 . T TCAAGTGAGGA 93 PASS ABPV=3.68e-02;FPV=2.37e-01;FR=0.2500;HP=1;NF=0;NR=3;PP=93;RMP=91.0;RPV=7.64e-05;SC=CTCTCACCGCTGCCCAGGGGT;TC=63;TCF=5;TCR=58;TR=3 GT:GL:GQ:NR 0/0:-17.96,-35.28,-330.9:77:30 0/1:-94.07,-50.73,-458.79:100:41 +chr2 227954599 . G A 200 PASS ABPV=1.00e+00;FPV=9.19e-01;FR=0.2507;HP=2;MMLQ=31;NF=6;NR=4;PP=200;RMP=46.35;RPV=9.51e-01;SC=TCTCCTTTTGGGCCTCTTCCT;TC=25;TCF=16;TCR=9;TR=10;func=exonic;gene=COL4A4;exon_func=nonsynonymous SNV;AAchange=NM_000092:c.C1444T:p.P482S;1000g=0.55;dbsnp=rs2229814;sift=0.44;pp2=0.0;phylop=0.897442;mutT=9.0E-5;LRT=0.824593 GT:GL:GQ:NR 0/0:0.0,-5.54,-68.56:25:9 0/1:-80.77,-11.53,-34.97:100:16 +chr2 233273018 . G A 32 PASS ABPV=1.00e+00;FPV=3.62e-01;FR=0.2500;HP=3;MMLQ=34;NF=13;NR=4;PP=32;RMP=56.47;RPV=8.89e-03;SC=TTCCCATGGGGACCCCAGACC;TC=102;TCF=59;TCR=43;TR=17 GT:GL:GQ:NR 0/0:-50.24,-59.48,-309.03:41:45 0/1:-159.89,-144.07,-409.74:66:57 +chr20 29633938 . A G 28 PASS ABPV=1.00e+00;FPV=1.27e-01;FR=0.2500;HP=2;MMLQ=34;NF=16;NR=24;PP=28;RMP=56.91;RPV=2.94e-01;SC=AAATGACTGGAATTTTTGTTT;TC=192;TCF=84;TCR=108;TR=40;func=ncRNA;gene=FRG1B;cons46=514 Name=lod=163;segdup=0.96;dbsnp=rs4006818 GT:GL:GQ:NR 0/0:-963.63,-978.07,-1139.59:64:101 1/0:-1046.34,-1031.41,-1112.07:63:91 +chr20 33356511 . C T 44 PASS ABPV=1.00e+00;FPV=7.49e-01;FR=0.2507;HP=1;MMLQ=37;NF=0;NR=4;PP=44;RMP=57.46;RPV=6.28e-01;SC=AGTTTACCACCAGAAAAATGG;TC=17;TCF=1;TCR=16;TR=4;func=intronic;gene=NCOA6;cons46=243 Name=lod=13;1000g=0.36;dbsnp=rs2295353 GT:GL:GQ:NR 0/0:0.0,-5.54,-70.65:25:8 0/1:-49.75,-31.07,-63.51:79:9 +chr21 14424170 . C G 200 PASS ABPV=1.00e+00;FPV=7.37e-05;FR=0.2502;HP=1;MMLQ=31;NF=51;NR=68;PP=200;RMP=55.06;RPV=7.01e-02;SC=GGAAAGAACACCTGACACGGC;TC=637;TCF=318;TCR=319;TR=119 GT:GL:GQ:NR 0/0:-1068.97,-1075.78,-2090.04:31:272 1/0:-1608.82,-1559.51,-2814.14:100:365 +chr22 16256578 . G T 200 PASS ABPV=2.18e-01;FPV=6.87e-08;FR=0.2502;HP=4;MMLQ=34;NF=19;NR=8;PP=200;RMP=40.16;RPV=2.46e-02;SC=TGGCTCTGATGTTTCATTATG;TC=253;TCF=194;TCR=59;TR=27 GT:GL:GQ:NR 0/0:-139.12,-145.98,-745.94:31:118 0/1:-324.53,-220.54,-788.14:100:135 +chr22 24640438 . TCA T 58 PASS ABPV=5.57e-01;FPV=3.19e-02;FR=0.2503;HP=2;NF=2;NR=1;PP=58;RMP=48.68;RPV=9.37e-01;SC=ATACATTCACTCACACACACA;TC=27;TCF=25;TCR=2;TR=3 GT:GL:GQ:NR 0/0:-4.37,-10.61,-107.94:28:12 0/1:-47.48,-22.82,-120.6:100:15 +chr22 42524924 . A G 32 PASS ABPV=1.00e+00;FPV=1.78e-02;FR=0.2500;HP=2;MMLQ=35;NF=0;NR=4;PP=32;RMP=71.83;RPV=5.74e-01;SC=TGTCCAAGAGACCGTTGGGGC;TC=31;TCF=14;TCR=17;TR=4 GT:GL:GQ:NR 0/0:-1.84,-12.87,-112.28:49:17 1/0:-35.2,-19.47,-73.62:66:14 +chr3 6522043 . G A 62 PASS ABPV=1.00e+00;FPV=5.16e-01;FR=0.2507;HP=3;MMLQ=37;NF=4;NR=0;PP=62;RMP=44.82;RPV=7.49e-01;SC=TAACTGCAAAGTAGGAACACG;TC=19;TCF=18;TCR=1;TR=4 GT:GL:GQ:NR 0/0:0.0,-5.54,-65.36:25:9 1/0:-46.21,-23.49,-68.33:96:10 +chr3 135742089 . GAAAATA G 56 PASS ABPV=2.53e-02;FPV=5.62e-01;FR=0.2500;HP=4;NF=0;NR=2;PP=56;RMP=97.0;RPV=4.10e-05;SC=GTTTTGTTTTGAAAATATTTT;TC=55;TCF=2;TCR=53;TR=2 GT:GL:GQ:NR 0/0:-171.19,-180.69,-401.53:43:27 1/0:-163.7,-138.73,-368.83:100:28 +chr3 195453014 . G A 73 PASS ABPV=1.00e+00;FPV=9.99e-01;FR=0.2500;HP=3;MMLQ=31;NF=44;NR=44;PP=73;RMP=52.04;RPV=1.00e-00;SC=GACAGCACCCGGGGCCACGAC;TC=210;TCF=115;TCR=95;TR=88 GT:GL:GQ:NR 0/0:-596.82,-608.68,-929.74:53:99 0/1:-825.59,-800.41,-1040.36:100:111 +chr3 195453412 . C T 21 PASS ABPV=1.00e+00;FPV=1.25e-02;FR=0.2502;HP=2;MMLQ=25;NF=13;NR=52;PP=21;RMP=62.2;RPV=1.00e-00;SC=CCACGACTGCCCGGACGAGGC;TC=219;TCF=89;TCR=130;TR=65 GT:GL:GQ:NR 0/0:-275.62,-282.43,-681.47:31:103 0/1:-362.65,-349.41,-719.87:55:117 +chr3 195506775 . G A 87 PASS ABPV=1.00e+00;FPV=8.81e-01;FR=0.2500;HP=1;MMLQ=34;NF=11;NR=4;PP=87;RMP=30.23;RPV=4.10e-02;SC=AGGAAGTGTCGGTGACAGGAA;TC=69;TCF=34;TCR=35;TR=15;func=exonic;gene=MUC4;exon_func=synonymous SNV;AAchange=NM_018406:c.C11676T:p.H3892H;cons46=381 Name=lod=47;segdup=0.92;1000g=0.48;dbsnp=rs79609066 GT:GL:GQ:NR 0/0:-215.78,-225.62,-329.97:44:31 0/1:-253.55,-225.09,-324.19:100:38 +chr3 195507372 . C A 72 PASS ABPV=1.00e+00;FPV=9.50e-01;FR=0.2510;HP=1;MMLQ=31;NF=12;NR=10;PP=72;RMP=82.02;RPV=4.71e-01;SC=GAGGGGTGGCCTGACCTGTGG;TC=76;TCF=33;TCR=43;TR=22 GT:GL:GQ:NR 0/0:-85.59,-90.71,-175.03:23:27 0/1:-302.0,-277.02,-435.24:100:49 +chr3 195509974 . A G 107 PASS ABPV=1.00e+00;FPV=4.52e-02;FR=0.2501;HP=1;MMLQ=33;NF=7;NR=15;PP=107;RMP=66.83;RPV=1.62e-01;SC=ATGACCTGTGAACACTGAGGA;TC=127;TCF=50;TCR=77;TR=22 GT:GL:GQ:NR 0/0:-281.04,-289.1,-469.31:36:51 0/1:-474.46,-441.44,-679.46:100:76 +chr4 3589510 . G A 82 PASS ABPV=1.00e+00;FPV=1.00e-00;FR=0.2500;HP=1;MMLQ=35;NF=28;NR=15;PP=82;RMP=39.79;RPV=1.00e-00;SC=ACTTCCAGATGAGACTTCCTG;TC=89;TCF=62;TCR=27;TR=43;func=ncRNA;gene=FLJ35424 GT:GL:GQ:NR 0/0:-202.17,-216.0,-372.38:61:36 0/1:-618.94,-591.66,-690.1:100:53 +chr4 5747131 . C A 40 PASS ABPV=1.00e+00;FPV=6.32e-01;FR=0.2502;HP=2;MMLQ=33;NF=1;NR=19;PP=40;RMP=63.27;RPV=9.99e-01;SC=AAATTGGCTACATTAGAGAGA;TC=45;TCF=5;TCR=40;TR=20 GT:GL:GQ:NR 0/0:-175.23,-182.17,-227.63:31:19 1/0:-264.71,-246.95,-301.81:75:26 +chr4 70261725 . G A 25 PASS ABPV=1.00e+00;FPV=8.43e-01;FR=0.2503;HP=3;MMLQ=36;NF=1;NR=5;PP=25;RMP=77.58;RPV=8.09e-01;SC=TGTGGCCCTGGGGTAGTTACT;TC=19;TCF=3;TCR=16;TR=6 GT:GL:GQ:NR 0/0:-25.09,-31.31,-100.1:28:11 1/0:-62.48,-48.33,-68.8:59:8 +chr5 837488 . C A 84 PASS ABPV=3.03e-01;FPV=2.26e-02;FR=0.2502;HP=2;MMLQ=35;NF=22;NR=3;PP=84;RMP=67.65;RPV=4.45e-09;SC=ACCTGGAGAACTCCTTTGTCC;TC=225;TCF=128;TCR=97;TR=25 GT:GL:GQ:NR 0/0:-71.02,-77.56,-596.34:30:92 0/1:-157.13,-129.33,-794.35:100:133 +chr5 34192944 . A G 136 PASS ABPV=3.53e-01;FPV=1.29e-04;FR=0.2500;HP=1;MMLQ=31;NF=17;NR=13;PP=136;RMP=51.73;RPV=7.15e-05;SC=GCAGTGGATGAAGGCCCCTCA;TC=261;TCF=140;TCR=121;TR=30 GT:GL:GQ:NR 0/0:-120.41,-138.2,-806.35:79:120 0/1:-199.6,-159.91,-913.41:100:141 +chr5 36200413 . G A 33 PASS ABPV=1.25e-02;FPV=1.03e-02;FR=0.2511;HP=3;MMLQ=34;NF=2;NR=4;PP=33;RMP=98.68;RPV=2.69e-06;SC=GAAAATGTATGTTATAAATAT;TC=109;TCF=30;TCR=79;TR=6 GT:GL:GQ:NR 0/0:-295.77,-300.82,-490.03:23:53 1/0:-290.08,-274.08,-469.93:67:56 +chr5 41909830 . C T 27 PASS ABPV=5.28e-01;FPV=2.35e-03;FR=0.2504;HP=18;MMLQ=0;NF=0;NR=3;PP=27;RMP=14.14;RPV=9.29e-01;SC=AGATATCTTTCTTTTTTTTTT;TC=28;TCF=21;TCR=7;TR=3 GT:GL:GQ:NR 0/0:-4.61,-10.58,-40.73:26:11 0/1:-41.44,-26.72,-53.62:62:17 +chr5 54329850 . C CTGCTTTACTTA 68 PASS ABPV=5.01e-01;FPV=1.00e+00;FR=0.2503;HP=1;NF=0;NR=2;PP=68;RMP=90.0;RPV=7.41e-02;SC=CATATGGGGTCCATTTTTGCA;TC=21;TCF=0;TCR=21;TR=2 GT:GL:GQ:NR 0/0:0.0,-6.24,-122.94:28:9 1/0:-45.59,-6.93,-110.5:100:12 +chr5 58121059 . G A 112 PASS ABPV=1.00e+00;FPV=4.22e-01;FR=0.2501;HP=2;MMLQ=35;NF=0;NR=5;PP=112;RMP=75.51;RPV=4.68e-01;SC=TACAGAGTCCGAGCTAATTGT;TC=26;TCF=3;TCR=23;TR=5 GT:GL:GQ:NR 0/0:-31.77,-39.38,-124.25:34:12 0/1:-43.94,-9.7,-79.61:100:15 +chr5 169535734 . C A 20 PASS ABPV=1.00e+00;FPV=1.00e+00;FR=0.2507;HP=1;MMLQ=34;NF=0;NR=2;PP=20;RMP=68.72;RPV=3.31e-01;SC=CAGGAGCCTCCGAGGAATCCA;TC=13;TCF=0;TCR=13;TR=2;func=UTR3;gene=FOXI1;1000g=0.35;dbsnp=rs6873124 GT:GL:GQ:NR 0/0:-5.3,-10.84,-76.27:25:8 1/0:-15.88,-2.77,-16.56:54:5 +chr5 175467765 . A C 34 PASS ABPV=1.00e+00;FPV=6.86e-01;FR=0.2503;HP=3;MMLQ=37;NF=4;NR=7;PP=34;RMP=58.23;RPV=9.60e-01;SC=AGGAAAGCAGATTTGTACATC;TC=32;TCF=15;TCR=17;TR=11 GT:GL:GQ:NR 0/0:-48.25,-54.62,-116.89:29:16 0/1:-64.43,-48.26,-102.15:68:18 +chr5 180047739 . CGT C 40 PASS ABPV=3.01e-01;FPV=4.20e-02;FR=0.2503;HP=3;NF=0;NR=2;PP=40;RMP=66.37;RPV=1.63e-01;SC=AAGGGGCCGGCGTGTGTGTGT;TC=28;TCF=11;TCR=17;TR=2 GT:GL:GQ:NR 0/0:-15.43,-21.66,-115.16:28:17 0/1:-35.79,-15.44,-86.67:86:11 +chr6 26370657 . A G 26 PASS ABPV=1.00e+00;FPV=9.98e-01;FR=0.2500;HP=1;MMLQ=34;NF=25;NR=18;PP=26;RMP=46.67;RPV=9.65e-01;SC=ACAGTGGAGCAACGCCAAGGG;TC=112;TCF=61;TCR=51;TR=43 GT:GL:GQ:NR 0/0:-408.78,-416.97,-671.27:37:70 1/0:-270.25,-255.76,-422.39:61:42 +chr6 26370659 . C T 32 PASS ABPV=1.00e+00;FPV=9.98e-01;FR=0.2500;HP=2;MMLQ=34;NF=25;NR=17;PP=32;RMP=48.69;RPV=9.08e-01;SC=AGTGGAGCAACGCCAAGGGAG;TC=114;TCF=61;TCR=53;TR=42 GT:GL:GQ:NR 0/0:-408.78,-419.23,-664.68:47:70 1/0:-278.07,-262.18,-440.62:67:44 +chr6 35838820 . A ATTCTTACTTGG 44 PASS ABPV=1.42e-01;FPV=7.50e-01;FR=0.2500;HP=1;NF=0;NR=2;PP=44;RMP=90.0;RPV=2.64e-03;SC=CTCTACCAGAATGAAAAGTCT;TC=37;TCF=1;TCR=36;TR=2 GT:GL:GQ:NR 0/0:-22.8,-33.89,-243.84:49:19 1/0:-50.19,-17.08,-221.97:100:21 +chr6 58777098 . A T 42 PASS ABPV=1.00e+00;FPV=2.57e-03;FR=0.2500;HP=2;MMLQ=34;NF=14;NR=25;PP=42;RMP=50.5;RPV=1.85e-01;SC=GTAACTCTAGATTGAAGAATT;TC=224;TCF=105;TCR=119;TR=39;func=intergenic;gene=GUSBP4(dist=489374) NONE(dist=NONE);dbsnp=rs4330557 GT:GL:GQ:NR 0/0:-1161.42,-1180.18,-1411.53:83:106 0/1:-1283.78,-1265.72,-1460.11:76:119 +chr6 116774635 . C G 38 PASS ABPV=1.00e+00;FPV=3.66e-01;FR=0.2504;HP=1;MMLQ=36;NF=4;NR=12;PP=38;RMP=76.7;RPV=4.76e-01;SC=CTTTTTCCACCACAAATTCTT;TC=72;TCF=21;TCR=51;TR=16 GT:GL:GQ:NR 0/0:-45.72,-51.81,-228.46:28:30 0/1:-179.58,-162.43,-353.98:72:42 +chr6 136599000 . T TCATCTGTGA 73 PASS ABPV=2.21e-05;FPV=2.55e-09;FR=0.2505;HP=4;NF=2;NR=0;PP=73;RMP=1.41;RPV=3.11e-04;SC=TTTTAGTTTTTACCTTTTTAA;TC=118;TCF=90;TCR=28;TR=2;func=intronic;gene=BCLAF1;cons46=573 Name=lod=284;segdup=0.97 GT:GL:GQ:NR 0/0:-44.16,-49.89,-603.4:26:61 1/0:-105.25,-67.59,-750.95:100:79 +chr6 155757781 . T A 106 PASS ABPV=1.00e+00;FPV=3.16e-01;FR=0.2504;HP=2;MMLQ=36;NF=0;NR=5;PP=106;RMP=66.42;RPV=6.16e-01;SC=TACAGTGAGCTCTGAAATATC;TC=24;TCF=4;TCR=20;TR=5;func=intronic;gene=NOX3;1000g=0.22;dbsnp=rs231961 GT:GL:GQ:NR 0/0:0.0,-6.09,-69.03:28:9 0/1:-48.54,-15.69,-84.63:100:15 +chr7 65159983 . A G 128 PASS ABPV=1.00e+00;FPV=5.13e-01;FR=0.2500;HP=2;MMLQ=33;NF=9;NR=0;PP=128;RMP=42.05;RPV=1.33e-01;SC=TTGCTTAGTTACCAGGTAGAA;TC=45;TCF=38;TCR=7;TR=9;func=ncRNA;gene=INTS4L2 LOC441242;cons46=439 Name=lod=81;segdup=0.99;1000g=0.26;dbsnp=rs2949280 GT:GL:GQ:NR 0/0:0.0,-9.67,-99.87:43:16 0/1:-63.32,-25.43,-98.84:100:29 +chr7 100552044 . T G 46 PASS ABPV=1.00e+00;FPV=1.00e-00;FR=0.2500;HP=1;MMLQ=33;NF=133;NR=185;PP=46;RMP=54.24;RPV=1.00e-00;SC=CTGTTCCTTCTTCACCATACA;TC=776;TCF=387;TCR=389;TR=318 GT:GL:GQ:NR 0/0:-2768.08,-2799.9,-3980.82:100:373 0/1:-3148.55,-3129.5,-4372.1:80:403 +chr7 102319079 . G A 34 PASS ABPV=4.40e-01;FPV=1.00e+00;FR=0.2500;HP=1;MMLQ=38;NF=0;NR=6;PP=34;RMP=53.53;RPV=6.65e-03;SC=TGTGAGATGCGTGTGAAAATG;TC=56;TCF=0;TCR=56;TR=6;func=intergenic;gene=POLR2J2(dist=6903) FAM185A(dist=70320);segdup=1.00;1000g=0.17;dbsnp=rs62458736 GT:GL:GQ:NR 0/0:-9.39,-20.95,-166.2:51:26 0/1:-46.26,-30.07,-176.58:68:30 +chr7 106272259 . C T 200 PASS ABPV=1.00e+00;FPV=1.51e-04;FR=0.2501;HP=2;MMLQ=31;NF=27;NR=25;PP=200;RMP=18.87;RPV=1.08e-05;SC=CTCATTCCAACCTCTGCTTCC;TC=391;TCF=192;TCR=199;TR=52 GT:GL:GQ:NR 0/0:-1599.11,-1606.25,-1841.06:32:195 0/1:-1703.84,-1621.18,-1787.33:100:196 +chr7 128492558 . G A 32 PASS ABPV=1.00e+00;FPV=9.80e-01;FR=0.2501;HP=6;MMLQ=35;NF=15;NR=1;PP=32;RMP=45.11;RPV=5.34e-01;SC=TGAGTCCAGGGGGGGCTGCTC;TC=45;TCF=39;TCR=6;TR=16 GT:GL:GQ:NR 0/0:-82.82,-89.89,-214.44:32:24 0/1:-137.27,-121.35,-194.99:67:21 +chr7 142223942 . A G 200 PASS ABPV=1.00e+00;FPV=1.00e-00;FR=0.2500;HP=1;MMLQ=33;NF=86;NR=42;PP=200;RMP=48.5;RPV=9.93e-01;SC=ACTGTGAATCATCTACTACAC;TC=282;TCF=160;TCR=122;TR=128 GT:GL:GQ:NR 0/0:-840.21,-856.54,-1228.56:72:124 1/0:-1069.18,-1023.08,-1489.98:100:158 +chr7 142498735 . A C 51 PASS ABPV=1.00e+00;FPV=9.39e-01;FR=0.2500;HP=4;MMLQ=34;NF=23;NR=20;PP=51;RMP=54.1;RPV=9.74e-01;SC=AGGACCTGAAAAACGTGTTCC;TC=127;TCF=71;TCR=56;TR=43;func=intergenic;gene=TRY6(dist=16336) EPHB6(dist=54057);sift=0.35 GT:GL:GQ:NR 0/0:-407.53,-415.97,-666.18:38:67 0/1:-407.94,-387.73,-626.55:86:62 +chr7 143295456 . A C 200 PASS ABPV=1.00e+00;FPV=7.75e-01;FR=0.2500;HP=1;MMLQ=26;NF=24;NR=7;PP=200;RMP=70.65;RPV=6.11e-02;SC=GCCTCCTCGCAGTGGGGGGCA;TC=135;TCF=87;TCR=48;TR=31 GT:GL:GQ:NR 0/0:-28.78,-39.63,-253.37:48:66 0/1:-158.76,-57.73,-187.94:100:69 +chr7 143453710 . T A 66 PASS ABPV=1.00e+00;FPV=5.62e-01;FR=0.2501;HP=3;MMLQ=36;NF=0;NR=15;PP=66;RMP=54.55;RPV=5.68e-01;SC=TCTTCCTTTGTTTTGTCCACT;TC=62;TCF=2;TCR=60;TR=15 GT:GL:GQ:NR 0/0:-65.41,-73.41,-216.2:36:31 0/1:-102.8,-79.18,-187.97:100:31 +chr7 143956461 . T C 37 PASS ABPV=1.00e+00;FPV=8.34e-02;FR=0.2500;HP=2;MMLQ=31;NF=5;NR=0;PP=37;RMP=48.38;RPV=1.00e+00;SC=TGGGCTTGGCTGGATGCAGGA;TC=36;TCF=36;TCR=0;TR=5 GT:GL:GQ:NR 0/0:-6.63,-15.42,-125.53:39:20 1/0:-33.93,-16.96,-77.4:71:16 +chr7 157367205 . TGA T 52 PASS ABPV=3.26e-01;FPV=5.62e-01;FR=0.2503;HP=2;NF=0;NR=2;PP=52;RMP=55.44;RPV=3.19e-02;SC=AGAGTAATAATGAGAGAGAGA;TC=27;TCF=2;TCR=25;TR=2;func=intronic;gene=PTPRN2 GT:GL:GQ:NR 0/0:-10.36,-16.59,-113.87:28:16 1/0:-39.42,-16.12,-59.64:99:12 +chr8 8095880 . C T 131 PASS ABPV=1.00e+00;FPV=2.37e-01;FR=0.2500;HP=3;MMLQ=37;NF=0;NR=10;PP=131;RMP=64.63;RPV=8.71e-01;SC=GCCACATGGCCCCAGGCCCAA;TC=36;TCF=5;TCR=31;TR=10;func=ncRNA;gene=FLJ10661;segdup=0.98 GT:GL:GQ:NR 0/0:-78.8,-87.2,-171.27:38:18 0/1:-81.81,-43.3,-81.08:100:18 +chr8 12236123 . T G 111 PASS ABPV=1.00e+00;FPV=1.38e-39;FR=0.2500;HP=2;MMLQ=30;NF=16;NR=9;PP=111;RMP=18.14;RPV=9.45e-01;SC=GTATTTGTGTTTGTGTGTGTG;TC=103;TCF=79;TCR=24;TR=25 GT:GL:GQ:NR 0/0:-265.16,-270.76,-457.35:100:49 1/0:-317.4,-305.02,-585.97:25:76 +chr8 12428634 . C T 69 PASS ABPV=1.00e+00;FPV=7.50e-01;FR=0.2500;HP=1;MMLQ=36;NF=0;NR=5;PP=69;RMP=63.98;RPV=2.03e-01;SC=TCTTAACAACCGCCATGGTGC;TC=31;TCF=1;TCR=30;TR=5 GT:GL:GQ:NR 0/0:-10.77,-21.63,-134.62:48:17 1/0:-41.03,-16.59,-80.89:100:14 +chr8 35608374 . T C 24 PASS ABPV=1.00e+00;FPV=6.32e-01;FR=0.2502;HP=2;MMLQ=34;NF=1;NR=34;PP=24;RMP=69.53;RPV=1.00e-00;SC=TGAAAGTGTGTGTTTTCCAAA;TC=62;TCF=5;TCR=57;TR=35 GT:GL:GQ:NR 0/0:-248.65,-255.21,-376.27:30:35 1/0:-265.91,-251.92,-307.04:58:27 +chr8 121500323 . A AGTGGGATTGC 40 PASS ABPV=2.19e-01;FPV=8.43e-03;FR=0.2500;HP=2;NF=2;NR=0;PP=40;RMP=1.0;RPV=7.50e-01;SC=ATTATATCCTATGGATCAAAT;TC=32;TCF=31;TCR=1;TR=2 GT:GL:GQ:NR 0/0:-2.07,-11.08,-162.96:40:13 1/0:-47.66,-16.63,-264.67:100:25 +chr9 14510 . CTGT C 200 PASS ABPV=2.20e-01;FPV=4.66e-14;FR=0.2500;HP=1;NF=12;NR=0;PP=200;RMP=43.31;RPV=1.00e-02;SC=TAAAAGCACACTGTTGGTTTC;TC=123;TCF=107;TCR=16;TR=12 GT:GL:GQ:NR 0/0:-22.04,-38.67,-350.71:73:53 0/1:-133.83,-67.48,-425.73:100:75 +chr9 34724786 . G A 54 PASS ABPV=1.00e+00;FPV=5.46e-01;FR=0.2503;HP=2;MMLQ=31;NF=10;NR=18;PP=54;RMP=64.11;RPV=9.71e-01;SC=GGATTTCCACGGGACTAGGCT;TC=91;TCF=41;TCR=50;TR=28 GT:GL:GQ:NR 0/0:-77.92,-84.2,-224.15:29:46 1/0:-101.32,-80.48,-207.58:88:45 +chr9 44118498 . G C 200 PASS ABPV=1.00e+00;FPV=9.49e-01;FR=0.2503;HP=2;MMLQ=34;NF=2;NR=7;PP=200;RMP=65.44;RPV=6.41e-01;SC=GAGGGCAGCTGCCTGTCACCT;TC=31;TCF=4;TCR=27;TR=9;func=intergenic;gene=CNTNAP3B(dist=196025) FAM27C(dist=871738);segdup=0.98;1000g=0.77;dbsnp=rs28610048 GT:GL:GQ:NR 0/0:-11.97,-18.32,-91.33:29:13 0/1:-73.63,-27.61,-81.59:100:18 +chr9 67281836 . T G 200 PASS ABPV=1.00e+00;FPV=3.12e-01;FR=0.2500;HP=2;MMLQ=34;NF=6;NR=21;PP=200;RMP=63.02;RPV=5.58e-01;SC=GTGGACCTGATACAGTGGCCC;TC=115;TCF=31;TCR=84;TR=27;func=ncRNA;gene=AQP7P1;segdup=0.99;1000g=0.26;dbsnp=rs75812522 GT:GL:GQ:NR 0/0:-227.43,-240.42,-365.47:58:50 0/1:-353.09,-303.78,-464.7:100:65 +chr9 67293649 . T G 200 PASS ABPV=1.00e+00;FPV=2.40e-02;FR=0.2509;HP=2;MMLQ=32;NF=8;NR=20;PP=200;RMP=65.85;RPV=6.29e-01;SC=GTGTGCCAAGTGACTTCATCT;TC=136;TCF=59;TCR=77;TR=28 GT:GL:GQ:NR 0/0:-52.46,-57.7,-399.51:24:62 0/1:-141.44,-82.05,-400.07:100:74 +chr9 68358140 . T C 101 PASS ABPV=1.00e+00;FPV=4.09e-01;FR=0.2501;HP=2;MMLQ=31;NF=10;NR=13;PP=101;RMP=52.55;RPV=9.14e-01;SC=CCGCTTCAGATAGTGAAGAAG;TC=84;TCF=45;TCR=39;TR=23;func=intergenic;gene=ANKRD20A3(dist=387847) LOC642236(dist=69643);cons46=780 Name=lod=1967;segdup=0.98;dbsnp=rs62544188 GT:GL:GQ:NR 0/0:-99.49,-107.4,-306.63:36:46 0/1:-122.69,-91.06,-221.21:100:38 +chr9 92995102 . C T 25 PASS ABPV=1.74e-02;FPV=2.34e-06;FR=0.2500;HP=3;MMLQ=33;NF=11;NR=10;PP=25;RMP=36.17;RPV=2.75e-07;SC=ATAAAATTGTCCCCTCCATTC;TC=258;TCF=127;TCR=131;TR=21;func=intergenic;gene=LOC286370(dist=191321) LOC340515(dist=229612);segdup=0.96 GT:GL:GQ:NR 0/0:-127.8,-170.89,-839.43:100:127 1/0:-164.37,-150.07,-829.28:60:131 +chr9 139572068 . C G 44 PASS ABPV=1.00e+00;FPV=4.21e-01;FR=0.2507;HP=2;MMLQ=29;NF=0;NR=3;PP=44;RMP=57.58;RPV=7.11e-01;SC=GGCTGGGGCGCGAAGGCCTGG;TC=14;TCF=3;TCR=11;TR=3;func=intronic;gene=AGPAT2;1000g=0.57;dbsnp=rs2236514 GT:GL:GQ:NR 0/0:0.0,-5.54,-62.14:25:9 1/0:-29.67,-11.06,-23.48:61:5 +chr9 140777194 . A AGAGCGGCT 200 PASS ABPV=7.76e-05;FPV=4.77e-24;FR=0.2500;HP=2;NF=2;NR=1;PP=200;RMP=4.36;RPV=2.92e-05;SC=CGCTTCTCCTAGGACGACACG;TC=123;TCF=77;TCR=46;TR=3;func=splicing;gene=CACNA1B(NM_000718:c.390-2->CATGTCCGAGCGGCT NM_001243812:c.390-2->CATGTCCGAGCGGCT);cons46=573 Name=lod=285 GT:GL:GQ:NR 0/0:-260.4,-275.23,-819.04:71:85 0/1:-510.15,-408.95,-886.86:3:93 +chrUn_gl000214 53458 . T A 82 PASS ABPV=4.34e-01;FPV=7.36e-06;FR=0.2500;HP=4;MMLQ=34;NF=22;NR=0;PP=82;RMP=47.4;RPV=5.62e-01;SC=AAACACTATATAAATATAATT;TC=187;TCF=185;TCR=2;TR=22;func=intergenic;gene=NONE(dist=NONE) NONE(dist=NONE);segdup=0.98 GT:GL:GQ:NR 0/0:-154.3,-180.61,-694.01:100:88 1/0:-304.62,-277.18,-752.95:100:99 +chrUn_gl000214 61035 . A G 25 PASS ABPV=2.68e-01;FPV=1.27e-06;FR=0.2500;HP=2;MMLQ=34;NF=20;NR=0;PP=25;RMP=60.63;RPV=4.22e-01;SC=ATGTTTACCTATATAACAAAC;TC=187;TCF=184;TCR=3;TR=20 GT:GL:GQ:NR 0/0:-517.15,-538.58,-910.78:94:80 0/1:-812.82,-798.54,-1242.08:60:107 +chrUn_gl000214 74804 . T C 45 PASS ABPV=5.69e-01;FPV=4.33e-02;FR=0.2500;HP=2;MMLQ=35;NF=5;NR=0;PP=45;RMP=36.66;RPV=5.62e-01;SC=ATCACTTGAATGCAGTAGGCA;TC=42;TCF=40;TCR=2;TR=5 GT:GL:GQ:NR 0/0:-65.35,-75.06,-177.61:43:16 0/1:-180.67,-161.94,-279.38:79:26 +chrUn_gl000220 121703 . T C 75 PASS ABPV=9.31e-02;FPV=1.94e-05;FR=0.2500;HP=2;MMLQ=31;NF=5;NR=8;PP=75;RMP=52.13;RPV=2.81e-03;SC=GTGGGCACGGTACGCTCTGGT;TC=150;TCF=78;TCR=72;TR=13 GT:GL:GQ:NR 0/0:-64.92,-78.18,-505.13:59:80 1/0:-102.59,-76.78,-453.86:100:70 +chrUn_gl000220 128026 . C T 73 PASS ABPV=1.00e+00;FPV=1.39e-05;FR=0.2500;HP=1;MMLQ=37;NF=12;NR=5;PP=73;RMP=48.23;RPV=2.65e-03;SC=TCTCTGTCTCCGTCTCTGTCT;TC=117;TCF=62;TCR=55;TR=17 GT:GL:GQ:NR 0/0:-175.58,-193.94,-521.81:81:62 1/0:-151.61,-126.36,-397.61:100:57 +chrUn_gl000220 132074 . G A 200 PASS ABPV=1.00e+00;FPV=2.39e-03;FR=0.2500;HP=2;MMLQ=34;NF=10;NR=11;PP=200;RMP=61.51;RPV=6.72e-03;SC=CTCTCTGTCCGTCTCTGTCTT;TC=167;TCF=84;TCR=83;TR=21;func=intergenic;gene=LOC100507412(dist=5378) RN5-8S1(dist=23923);segdup=0.95 GT:GL:GQ:NR 0/0:-248.2,-257.69,-615.12:42:77 0/1:-290.71,-234.79,-658.31:100:90 +chrUn_gl000220 145002 . C T 28 PASS ABPV=3.17e-02;FPV=7.56e-08;FR=0.2500;HP=4;MMLQ=31;NF=1;NR=3;PP=28;RMP=65.86;RPV=4.70e-03;SC=ACTAGCCGGGCGCGGTGGCAC;TC=76;TCF=36;TCR=40;TR=4 GT:GL:GQ:NR 0/0:-17.73,-43.17,-320.69:100:46 1/0:-67.96,-52.99,-236.43:63:37 +chrUn_gl000220 145368 . T C 30 PASS ABPV=1.09e-01;FPV=1.31e-02;FR=0.2500;HP=1;MMLQ=29;NF=8;NR=2;PP=30;RMP=72.81;RPV=1.92e-05;SC=AGCCGGGCGCTGTGCTGTGCT;TC=119;TCF=63;TCR=56;TR=10;func=intergenic;gene=LOC100507412(dist=18672) RN5-8S1(dist=10629);dbsnp=rs3878955 GT:GL:GQ:NR 0/0:-48.56,-59.69,-409.13:50:53 0/1:-66.74,-51.46,-448.03:64:66 +chrUn_gl000225 30398 . C T 29 PASS ABPV=1.13e-01;FPV=3.15e-04;FR=0.2502;HP=1;MMLQ=33;NF=1;NR=5;PP=29;RMP=58.12;RPV=2.55e-02;SC=CCTGCTCCTCCGAGCCTTTGA;TC=80;TCF=37;TCR=43;TR=6 GT:GL:GQ:NR 0/0:-195.73,-202.53,-342.72:31:35 1/0:-230.45,-215.31,-371.74:63:45 +chrUn_gl000225 43193 . C T 46 PASS ABPV=1.00e+00;FPV=7.84e-02;FR=0.2507;HP=3;MMLQ=31;NF=8;NR=12;PP=46;RMP=44.42;RPV=4.19e-02;SC=GCCAGAGAGACGGGCCTCCCG;TC=126;TCF=51;TCR=75;TR=20 GT:GL:GQ:NR 0/0:-577.5,-583.01,-743.98:25:63 1/0:-604.31,-585.16,-703.98:81:63 +chrX 106390898 . G A 65 PASS ABPV=4.78e-01;FPV=1.49e-02;FR=0.2500;HP=1;MMLQ=39;NF=5;NR=0;PP=65;RMP=43.16;RPV=1.00e+00;SC=GTTTGGTCATGGAGCATACAA;TC=46;TCF=46;TCR=0;TR=5 GT:GL:GQ:NR 0/0:0.0,-11.78,-148.84:52:17 1/0:-49.23,-25.85,-211.17:99:29 diff --git a/tests/tabix_data/vcf/15.vcf b/tests/tabix_data/vcf/15.vcf new file mode 100644 index 0000000..9df9a1e --- /dev/null +++ b/tests/tabix_data/vcf/15.vcf @@ -0,0 +1,317 @@ +##fileformat=VCFv4.0 +##FILTER= +##FILTER= +##FILTER= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##ValidationMetrics_HardyWeinbergViolations="25 (8%)" +##ValidationMetrics_HomVarViolations="0 (0%)" +##ValidationMetrics_NoCallViolations="13 (4%)" +##ValidationMetrics_PolymorphicPassingRecords="195 (75%)" +##ValidationMetrics_RecordsPassingFilters="258 (87%)" +##ValidationMetrics_RecordsProcessed=296 +##ValidationMetrics_SamplesAssayed=383 +##VariantValidationAssessor="analysis_type=VariantValidationAssessor input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=null excludeIntervals=null reference_sequence=/humgen/1kg/reference/human_g1k_v37.fasta rodBind=[rawData/plink.renamed.sorted.fixed.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION nonDeterministicRandomSeed=false DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=1 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false disable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null help=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub maxHardy=20.0 maxNoCall=0.05 maxHomVar=1.1" +##source=PLINK +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT HG00127 HG00128 HG00136 HG00137 HG00138 HG00139 HG00152 HG00156 HG00234 HG00235 HG00237 HG00242 HG00244 HG00262 HG01055 HG01079 NA19138 NA18974 NA18523 NA12717 NA19209 NA18577 NA18973 NA18943 NA12873 NA18623 NA18622 NA18948 NA19171 NA19204 NA06994 NA18563 NA18547 NA18861 NA18608 NA18995 NA10851 NA18976 NA18603 NA19200 HG01204 HG01191 HG01101 HG00146 HG00306 NA18985 HG00160 HG00635 HG00372 HG00357 HG00634 NA18541 NA18950 NA19759 HG00351 HG00257 HG00118 HG00336 HG00448 HG01354 NA18609 HG00428 HG00326 NA11894 NA18956 HG00173 HG00117 NA11893 HG01251 HG01441 HG01437 HG00182 HG00330 HG01060 HG00329 NA18960 NA18856 NA07346 NA18871 NA19057 NA18868 NA18636 NA12830 NA19007 NA18910 NA18874 NA19056 NA19064 NA19066 NA18487 NA18642 NA19236 NA07056 NA18637 NA19235 NA19309 NA19311 NA19334 NA19346 NA19347 NA19372 NA19376 NA19383 NA19384 NA19394 NA19428 NA19430 NA19451 NA19466 NA19313 NA19321 NA19324 NA19332 NA19390 NA19436 NA19439 NA19440 NA19463 NA19470 NA19471 NA19472 NA19676 NA19660 NA19661 NA19663 NA19722 NA19725 NA19728 NA19729 NA19731 NA19749 NA19755 NA19756 NA19758 NA19770 NA19773 NA19777 NA19780 NA19783 NA20525 NA20589 NA20765 NA20802 NA20804 NA18544 NA18602 NA18546 NA18610 NA18957 NA18615 NA18616 NA19010 NA18638 NA18639 NA18627 NA19072 NA18630 NA19074 NA19080 NA19081 NA19083 NA19085 NA19088 NA20287 NA19835 NA20276 NA19818 NA20278 NA20282 NA20342 NA20296 NA20314 NA20346 NA19712 NA19198 NA19108 NA18934 NA18916 NA18907 NA18917 NA06989 NA12058 NA12341 NA12546 NA12489 HG01197 NA18983 NA11843 NA11892 NA12749 NA12282 NA12751 NA18959 NA19331 NA19453 NA20537 NA12046 NA20515 NA20516 NA20521 NA20524 NA20528 NA20759 NA20768 NA20769 NA20774 NA20775 NA20783 NA20787 NA20790 NA20800 NA20819 NA20812 NA20505 NA20530 NA20540 NA20538 NA20581 NA20815 NA20544 NA20810 NA20807 NA20816 NA20504 NA20753 NA20502 NA12342 NA19150 NA19468 NA20336 NA19395 NA19257 NA19360 NA19700 NA18867 NA20317 NA18968 NA19107 HG00111 HG00108 NA19077 NA19684 NA18511 NA12044 NA19382 NA19457 NA18933 NA18923 NA18965 HG00141 NA20341 NA18740 HG00537 HG00346 HG01173 HG00702 HG00313 HG00150 NA18612 HG00339 NA12273 HG00250 NA18593 NA18621 HG00478 HG00251 HG01070 NA19160 HG00479 HG00608 NA18573 HG00375 NA19248 NA19093 HG01170 HG00534 HG01171 HG01522 NA18624 HG00683 HG01521 NA19005 NA20412 NA18971 HG00446 NA12748 HG00530 HG00690 HG01356 HG01516 NA20532 HG00344 HG00328 NA18542 HG00254 HG00321 HG00577 HG00656 HG00342 HG00524 HG00650 HG00557 HG00319 HG00457 HG00125 HG00578 HG00543 HG00638 HG00171 HG00699 HG00595 HG00187 HG00704 HG00533 HG00596 HG00268 HG01083 HG00651 HG01133 HG00671 HG00327 HG01148 HG00246 HG00672 HG00556 HG00436 HG00554 NA18633 NA20344 NA11993 NA07037 NA11930 HG01366 HG01389 HG00620 NA19740 HG00190 HG00419 NA18535 HG01495 NA18592 HG01497 HG00174 HG01140 NA12287 HG00689 HG01550 HG00334 HG01375 HG00637 NA18507 HG01113 NA18550 NA19129 HG01551 HG01462 HG00331 NA12413 HG01456 HG01360 HG00708 HG01350 HG00684 NA19099 HG00284 NA12399 NA12286 NA12777 HG00277 HG00266 NA19985 HG00353 HG01102 NA07347 NA07051 NA19900 NA18984 NA07048 HG00640 HG01066 NA12812 HG01174 HG01188 +20 439104 . AG A . HighNoCallRate AC=0;AN=158;HW=0.00;HetPct=0.0;HomRefPct=20.6;HomVarPct=0.0;NoCallPct=79.4 GT . 0/0 . . . . 0/0 . 0/0 . 0/0 0/0 . . . . . . . . . . . . 0/0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0/0 . . . . . . . . . . . . . . 0/0 0/0 0/0 0/0 . 0/0 0/0 . 0/0 . 0/0 0/0 . . . . . . . . . . . . 0/0 0/0 . . . . . . . . . . . . . . . . . . . 0/0 0/0 . . 0/0 . . 0/0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0/0 0/0 . . 0/0 0/0 . . . . . . . . . . . 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 0/0 . . . . . . 0/0 . . . . . 0/0 0/0 0/0 0/0 . . . . . . . . . . 0/0 . . . . 0/0 . . 0/0 . . 0/0 0/0 0/0 . . 0/0 . . . . 0/0 . . . . . . . . . . . . . . . . 0/0 . . . . . 0/0 0/0 . 0/0 0/0 . . . . . . . . . 0/0 . 0/0 . . . . . 0/0 0/0 . 0/0 . . . . 0/0 . . . . 0/0 . . . . . . . . . . . . 0/0 . 0/0 . . . 0/0 . . . . 0/0 0/0 . 0/0 . . . . . 0/0 . . 0/0 . 0/0 . . . . . . 0/0 . . . 0/0 . 0/0 . . 0/0 . 0/0 . . 0/0 . . 0/0 . 0/0 0/0 0/0 0/0 . . . . . . +20 669442 . TG T . PASS AC=54;AN=766;HW=6.74;HetPct=12.0;HomRefPct=86.9;HomVarPct=1.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 676148 . A AC . PASS AC=0;AN=758;HW=0.00;HetPct=0.0;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=1.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 719486 . C CT . PASS AC=1;AN=760;HW=0.00;HetPct=0.3;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 890696 . C CAT . PASS AC=6;AN=766;HW=0.00;HetPct=1.6;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1102516 . CT C . PASS AC=3;AN=760;HW=0.00;HetPct=0.8;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1149576 . CT C . PASS AC=2;AN=764;HW=0.00;HetPct=0.5;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1195706 . AAG A . PASS AC=334;AN=764;HW=9.47;HetPct=44.9;HomRefPct=33.7;HomVarPct=21.1;NoCallPct=0.3 GT 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 1/1 1/1 0/1 0/0 0/0 1/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/0 1/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 . 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 1/1 1/1 0/1 0/0 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 1/1 0/0 0/1 1/1 0/0 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 1/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 1/1 +20 1342549 . A AAGAT . PASS AC=0;AN=760;HW=0.00;HetPct=0.0;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1366475 . CT C . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1390810 . T TTC . HighNoCallRate AC=0;AN=566;HW=0.00;HetPct=0.0;HomRefPct=73.9;HomVarPct=0.0;NoCallPct=26.1 GT 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 0/0 . 0/0 . 0/0 . . . . . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 0/0 . . 0/0 . 0/0 0/0 0/0 . 0/0 . 0/0 . . 0/0 0/0 . 0/0 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 . . . 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 . 0/0 0/0 0/0 . . 0/0 . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . . 0/0 0/0 0/0 . . 0/0 . 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . . 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . . . 0/0 . 0/0 0/0 . 0/0 0/0 0/0 . . . 0/0 0/0 . 0/0 . . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 . . 0/0 . 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . . . . 0/0 . 0/0 . 0/0 0/0 0/0 . 0/0 . . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 . 0/0 0/0 . 0/0 . . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 0/0 0/0 +20 1550416 . C CT . PASS AC=0;AN=760;HW=0.00;HetPct=0.0;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1655540 . AT A . PASS AC=4;AN=764;HW=0.00;HetPct=1.0;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 2133769 . GA G . HardyWeinbergViolation AC=379;AN=766;HW=85.69;HetPct=34.7;HomRefPct=33.2;HomVarPct=32.1;NoCallPct=0.0 GT 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 1/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/0 1/1 0/0 1/1 0/0 0/1 0/0 1/1 0/0 1/1 0/0 0/0 1/1 0/0 0/0 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 1/1 0/0 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 0/0 0/1 1/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/1 1/1 0/0 1/1 1/1 0/0 0/1 1/1 1/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 1/1 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 1/1 0/1 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 1/1 1/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 0/0 1/1 0/0 0/1 1/1 1/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/1 +20 2217137 . CT C . HighNoCallRate AC=0;AN=704;HW=0.00;HetPct=0.0;HomRefPct=91.9;HomVarPct=0.0;NoCallPct=8.1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 +20 2263095 . TG T . HardyWeinbergViolation AC=358;AN=766;HW=812.29;HetPct=93.5;HomRefPct=6.5;HomVarPct=0.0;NoCallPct=0.0 GT 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 +20 2426886 . G GAATT . HighNoCallRate AC=11;AN=680;HW=0.00;HetPct=2.9;HomRefPct=85.9;HomVarPct=0.0;NoCallPct=11.2 GT 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 . . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . . . 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 0/0 0/1 . 0/1 . 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 . . . 0/0 0/0 . 0/0 0/0 0/0 0/0 . . . 0/1 . . 0/0 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 +20 2889034 . AAAAT A . PASS AC=6;AN=762;HW=0.00;HetPct=1.6;HomRefPct=97.9;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 3203741 . CT C . PASS AC=4;AN=762;HW=0.00;HetPct=1.0;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 3327993 . CAA C . HardyWeinbergViolation AC=3;AN=766;HW=21.06;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.3;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 3700705 . CTTTGGG C . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 4037626 . TC T . PASS AC=194;AN=764;HW=14.70;HetPct=33.4;HomRefPct=57.7;HomVarPct=8.6;NoCallPct=0.3 GT 0/1 0/1 0/0 0/0 0/0 1/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 . 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/0 1/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 +20 4210074 . G GA . PASS AC=197;AN=762;HW=14.95;HetPct=33.7;HomRefPct=56.9;HomVarPct=8.9;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 1/1 0/1 0/0 1/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 . 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 . 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 +20 4363519 . CATT C . PASS AC=7;AN=764;HW=0.00;HetPct=1.8;HomRefPct=97.9;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 4366806 . CAAAT C . PASS AC=2;AN=762;HW=0.00;HetPct=0.5;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 4641550 . CCTTGA C . PASS AC=3;AN=766;HW=0.00;HetPct=0.8;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 5105482 . C CATTTTAGG . PASS AC=101;AN=762;HW=14.11;HetPct=20.1;HomRefPct=76.2;HomVarPct=3.1;NoCallPct=0.5 GT 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 0/0 . 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 5289619 . GA G . PASS AC=377;AN=764;HW=5.70;HetPct=53.0;HomRefPct=24.0;HomVarPct=22.7;NoCallPct=0.3 GT 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/0 1/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 1/1 1/1 0/0 1/1 0/0 1/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 1/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 . 0/0 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/0 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/0 1/1 0/0 0/0 0/1 0/0 +20 5416109 . CA C . PASS AC=2;AN=752;HW=0.00;HetPct=0.5;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=1.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 5432262 . AGT A . PASS AC=4;AN=752;HW=0.00;HetPct=1.0;HomRefPct=97.1;HomVarPct=0.0;NoCallPct=1.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 5724449 . T TC . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 5928403 . T TA . HardyWeinbergViolation AC=196;AN=762;HW=47.13;HetPct=29.2;HomRefPct=59.3;HomVarPct=11.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 1/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/0 0/0 0/1 0/0 1/1 0/0 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 0/0 0/1 1/1 0/1 1/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/1 1/1 0/1 1/1 0/0 1/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 +20 6877907 . CA C . PASS AC=2;AN=766;HW=0.00;HetPct=0.5;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 6969412 . CAAAGAAT C . PASS AC=2;AN=762;HW=0.00;HetPct=0.5;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7035110 . CT C . HardyWeinbergViolation AC=340;AN=758;HW=1038.45;HetPct=1.0;HomRefPct=54.0;HomVarPct=43.9;NoCallPct=1.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 1/1 1/1 1/1 0/0 0/0 1/1 0/0 1/1 0/0 1/1 1/1 0/0 0/0 0/0 0/0 0/0 1/1 1/1 1/1 0/0 1/1 0/0 1/1 1/1 1/1 0/0 0/0 1/1 1/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 1/1 1/1 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/0 0/0 0/0 0/0 1/1 1/1 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 1/1 1/1 1/1 0/0 1/1 0/0 0/0 1/1 1/1 1/1 0/0 0/0 1/1 0/0 0/0 1/1 0/0 0/0 1/1 0/0 0/1 0/0 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/0 0/0 1/1 1/1 1/1 1/1 0/0 1/1 1/1 0/0 1/1 0/0 0/0 0/0 1/1 1/1 1/1 1/1 0/0 0/0 1/1 1/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 1/1 0/0 1/1 1/1 0/0 0/0 1/1 0/0 1/1 1/1 0/0 0/0 0/0 1/1 0/0 0/0 1/1 1/1 0/0 1/1 0/0 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 0/0 0/0 1/1 1/1 1/1 1/1 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 1/1 0/0 1/1 1/1 0/0 0/0 0/0 1/1 1/1 0/0 0/0 0/0 1/1 . 0/0 . 0/0 0/0 0/0 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/0 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 0/0 0/0 1/1 1/1 0/0 0/0 0/0 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/0 1/1 1/1 0/0 1/1 1/1 0/0 0/0 0/0 1/1 1/1 1/1 0/0 0/0 1/1 1/1 0/0 0/0 0/0 1/1 1/1 0/0 1/1 0/0 0/0 1/1 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 1/1 0/0 0/0 0/0 0/0 0/0 1/1 1/1 1/1 1/1 0/0 0/0 1/1 . 1/1 0/0 0/0 0/0 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 1/1 0/0 1/1 0/0 1/1 0/0 0/0 1/1 1/1 1/1 0/0 0/1 1/1 0/0 0/0 0/0 1/1 0/0 1/1 0/0 1/1 1/1 1/1 0/0 1/1 0/0 0/0 0/0 1/1 1/1 0/0 0/0 0/0 1/1 1/1 0/0 0/0 0/0 1/1 0/0 1/1 +20 7229260 . T TA . PASS AC=2;AN=764;HW=0.00;HetPct=0.5;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7239075 . AG A . PASS AC=5;AN=766;HW=0.00;HetPct=1.3;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7942727 . A AC . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7950562 . C CT . PASS AC=4;AN=760;HW=18.01;HetPct=0.5;HomRefPct=98.4;HomVarPct=0.3;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 8195466 . C CT . PASS AC=1;AN=762;HW=0.00;HetPct=0.3;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 8233352 . TACTC T . PASS AC=56;AN=764;HW=1.84;HetPct=13.1;HomRefPct=85.9;HomVarPct=0.8;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 +20 8504000 . TAG T . PASS AC=5;AN=762;HW=0.00;HetPct=1.3;HomRefPct=98.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 8779672 . TG T . HighNoCallRate AC=0;AN=86;HW=0.00;HetPct=0.0;HomRefPct=11.2;HomVarPct=0.0;NoCallPct=88.8 GT . . . . . . . . . . . . . . . . 0/0 . . . . . . . . . . . 0/0 . . . . . . . . . . 0/0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0/0 0/0 . . . 0/0 . 0/0 . . . 0/0 . . . . . . . 0/0 . 0/0 0/0 . 0/0 . 0/0 0/0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0/0 . . . . . . . . . . . . . . . . . . . 0/0 0/0 0/0 0/0 . . . 0/0 . . . . . 0/0 0/0 . . . . 0/0 . . 0/0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0/0 . . . . . . . . . . . 0/0 . . . . 0/0 . . . . . . . . . 0/0 . 0/0 . 0/0 0/0 . . . . . . . . . . . . . . . . . . . 0/0 . . . . . . 0/0 . . . . . . . 0/0 . . . . . . . . . . . . . . . . . . . . . . . . 0/0 0/0 . . . . . . . . . . . . . . . . . . . . 0/0 . . . . . . . . . . . . . . . . . . 0/0 0/0 . 0/0 . . 0/0 . . . 0/0 . . . . . . . . . . . 0/0 . . . . . . . . . . . +20 8794142 . AG A . HardyWeinbergViolation AC=52;AN=756;HW=57.86;HetPct=8.4;HomRefPct=87.7;HomVarPct=2.6;NoCallPct=1.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 1/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +20 9231138 . AT A . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 9900218 . C CT . HardyWeinbergViolation AC=3;AN=766;HW=21.06;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.3;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 9921724 . AAAGT A . PASS AC=11;AN=758;HW=0.00;HetPct=2.9;HomRefPct=96.1;HomVarPct=0.0;NoCallPct=1.0 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 9925738 . T TG . PASS AC=1;AN=760;HW=0.00;HetPct=0.3;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 10090376 . T TG . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 10377174 . ATAAAAC A . HighNoCallRate AC=107;AN=514;HW=4.54;HetPct=20.6;HomRefPct=42.8;HomVarPct=3.7;NoCallPct=32.9 GT . . 0/0 0/0 . 0/0 . 0/1 . 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 . . . . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 . 0/1 0/0 . . 0/0 . 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 1/1 0/0 . . 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 . . . . . . 0/0 . 1/1 . 0/0 . 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 . . . . 0/1 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 . . 0/0 . . . . . 0/0 0/0 1/1 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . . 0/0 0/0 . . . . 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/1 . . . . . 0/0 . 0/1 0/1 . . 0/0 0/0 0/0 . 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 1/1 0/1 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/1 0/1 . 0/1 0/1 0/0 . 0/1 0/0 . . 0/0 . . . . . 0/0 0/1 0/1 0/0 0/1 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 . . . 0/0 0/0 0/0 0/1 . . 0/1 . . . 0/0 0/0 0/1 0/0 0/0 0/0 0/0 . . 0/1 . . . . . . . . . . . 0/1 0/0 . 0/0 . 0/1 0/1 . . . . . . . . . . 0/0 0/1 . . 0/0 . 0/0 . . . 0/1 . . . 0/1 . . 0/1 . . . . 0/0 . 0/1 0/0 . 0/1 . 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 . . . 1/1 0/1 . . 0/0 . 0/0 0/0 0/0 0/0 0/1 . 0/1 0/1 . . 0/0 0/0 0/0 0/0 0/1 0/0 +20 11229169 . T TA . PASS AC=3;AN=756;HW=0.00;HetPct=0.8;HomRefPct=97.9;HomVarPct=0.0;NoCallPct=1.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 11511920 . AC A . PASS AC=2;AN=766;HW=0.00;HetPct=0.5;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 11893900 . ATTAG A . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12021825 . A AG . PASS AC=5;AN=756;HW=0.00;HetPct=1.3;HomRefPct=97.4;HomVarPct=0.0;NoCallPct=1.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12063752 . CTT C . PASS AC=1;AN=762;HW=0.00;HetPct=0.3;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12094344 . TCAGGAGGC T . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12114989 . CTA C . PASS AC=4;AN=764;HW=0.00;HetPct=1.0;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12371546 . GACA G . PASS AC=10;AN=762;HW=0.00;HetPct=2.6;HomRefPct=96.9;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12512723 . G GTT . PASS AC=6;AN=762;HW=0.00;HetPct=1.6;HomRefPct=97.9;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12634463 . TGA T . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12692743 . TTATC T . PASS AC=8;AN=762;HW=0.00;HetPct=2.1;HomRefPct=97.4;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12837095 . G GA . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12928028 . TG T . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13003323 . GGGA G . PASS AC=3;AN=762;HW=0.00;HetPct=0.8;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13128894 . CT C . PASS AC=10;AN=764;HW=0.00;HetPct=2.6;HomRefPct=97.1;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 +20 13287841 . CAT C . PASS AC=134;AN=760;HW=0.21;HetPct=29.2;HomRefPct=67.1;HomVarPct=2.9;NoCallPct=0.8 GT 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 1/1 0/1 0/1 . 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 1/1 0/1 0/0 0/0 0/1 . 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 . 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 +20 13365589 . T TG . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13566260 . AAATTG A . PASS AC=374;AN=764;HW=3.95;HetPct=47.5;HomRefPct=27.2;HomVarPct=25.1;NoCallPct=0.3 GT 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/0 0/1 1/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 0/0 1/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 0/0 0/1 . 0/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 1/1 0/0 0/1 0/1 0/0 1/1 1/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 1/1 1/1 0/1 0/0 0/1 1/1 1/1 +20 13685184 . AT A . PASS AC=2;AN=764;HW=0.00;HetPct=0.5;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13716193 . GAGAA G . PASS AC=2;AN=762;HW=0.00;HetPct=0.5;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13926445 . TA T . PASS AC=0;AN=756;HW=0.00;HetPct=0.0;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=1.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13960028 . TC T . PASS AC=188;AN=750;HW=2.44;HetPct=35.5;HomRefPct=55.6;HomVarPct=6.8;NoCallPct=2.1 GT 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 . 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 . . 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 . 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 +20 14159734 . T TA . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 14287634 . AGT A . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 14383135 . TA T . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 14420574 . GA G . HardyWeinbergViolation AC=3;AN=766;HW=21.06;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.3;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 14669226 . G GA . PASS AC=121;AN=766;HW=1.68;HetPct=25.8;HomRefPct=71.3;HomVarPct=2.9;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 +20 14697473 . TTC T . PASS AC=9;AN=764;HW=10.31;HetPct=1.8;HomRefPct=97.7;HomVarPct=0.3;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 14983337 . AGCC A . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15037520 . A AG . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15141272 . T TC . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15189597 . GA G . PASS AC=311;AN=760;HW=2.80;HetPct=46.2;HomRefPct=35.5;HomVarPct=17.5;NoCallPct=0.8 GT 1/1 0/1 0/0 0/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/0 1/1 1/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 0/1 . 0/1 0/0 0/1 1/1 0/0 0/0 0/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 1/1 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/1 . 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 1/1 0/1 0/1 1/1 0/0 1/1 0/0 0/0 0/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 1/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 1/1 . 1/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 +20 15265098 . TG T . PASS AC=125;AN=766;HW=6.76;HetPct=25.3;HomRefPct=71.0;HomVarPct=3.7;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/1 +20 15410763 . TGA T . PASS AC=29;AN=764;HW=0.00;HetPct=7.6;HomRefPct=92.2;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15543319 . AG A . PASS AC=7;AN=764;HW=0.00;HetPct=1.8;HomRefPct=97.9;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 15550845 . TG T . PASS AC=34;AN=756;HW=0.00;HetPct=8.4;HomRefPct=90.1;HomVarPct=0.3;NoCallPct=1.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15703503 . TG T . PASS AC=87;AN=750;HW=3.63;HetPct=19.1;HomRefPct=77.0;HomVarPct=1.8;NoCallPct=2.1 GT 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 . 0/0 0/0 0/1 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/1 0/0 0/1 0/0 . 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 . 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15871330 . AG A . PASS AC=1;AN=762;HW=0.00;HetPct=0.3;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16016504 . TA T . PASS AC=186;AN=764;HW=15.27;HetPct=32.4;HomRefPct=59.3;HomVarPct=8.1;NoCallPct=0.3 GT 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 1/1 0/0 0/1 1/1 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +20 16172883 . G GTAGC . HardyWeinbergViolation AC=79;AN=762;HW=42.59;HetPct=13.8;HomRefPct=82.2;HomVarPct=3.4;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 . 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16192114 . AT A . PASS AC=0;AN=760;HW=0.00;HetPct=0.0;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16259934 . C CAA . PASS AC=0;AN=758;HW=0.00;HetPct=0.0;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=1.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16312599 . CTA C . PASS AC=2;AN=764;HW=0.00;HetPct=0.5;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16723642 . GGTT G . PASS AC=6;AN=760;HW=0.00;HetPct=1.6;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16747221 . CA C . PASS AC=291;AN=764;HW=3.13;HetPct=45.2;HomRefPct=39.2;HomVarPct=15.4;NoCallPct=0.3 GT 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/0 1/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 1/1 1/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 1/1 1/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 . 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 +20 16769262 . TTTC T . HighNoCallRate AC=8;AN=600;HW=0.00;HetPct=2.1;HomRefPct=76.2;HomVarPct=0.0;NoCallPct=21.7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 . 0/0 . . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . . 0/1 . . 0/0 0/0 0/0 0/0 0/0 0/0 . . . . 0/0 0/1 . 0/1 . . 0/1 0/0 0/0 . . . 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . . . 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/1 . 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/1 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . . 0/1 . . 0/0 0/0 . 0/0 0/0 . 0/0 . . . . . 0/0 . . . 0/0 0/0 0/0 . . 0/0 . . . 0/0 . 0/0 0/0 . 0/0 . 0/0 0/0 . . 0/0 . . 0/0 0/0 0/0 0/0 . 0/0 . . . 0/0 0/0 . 0/0 0/0 0/0 0/0 . . . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16813850 . C CA . PASS AC=7;AN=758;HW=0.00;HetPct=1.8;HomRefPct=97.1;HomVarPct=0.0;NoCallPct=1.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 17250858 . T TC . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 17331332 . TA T . PASS AC=80;AN=762;HW=15.60;HetPct=16.2;HomRefPct=80.9;HomVarPct=2.3;NoCallPct=0.5 GT 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 17473782 . TGC T . PASS AC=1;AN=762;HW=0.00;HetPct=0.3;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 17607627 . A AGT . PASS AC=3;AN=764;HW=0.00;HetPct=0.8;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 17753474 . C CA . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 18417481 . AC A . PASS AC=17;AN=766;HW=0.00;HetPct=4.4;HomRefPct=95.6;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 18445795 . AAG A . PASS AC=5;AN=760;HW=0.00;HetPct=1.3;HomRefPct=97.9;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 18520672 . A ATT . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 18522725 . ATTAAC A . PASS AC=1;AN=758;HW=0.00;HetPct=0.3;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=1.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 18915562 . TAA T . PASS AC=3;AN=762;HW=0.00;HetPct=0.8;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 19111235 . C CT . PASS AC=4;AN=764;HW=0.00;HetPct=1.0;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 19157532 . T TC . HardyWeinbergViolation AC=3;AN=760;HW=21.02;HetPct=0.3;HomRefPct=98.7;HomVarPct=0.3;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 19188693 . T TC . PASS AC=0;AN=760;HW=0.00;HetPct=0.0;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 19437778 . GGCCTGGGATGTAAA G . PASS AC=0;AN=760;HW=0.00;HetPct=0.0;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 19805154 . CCTT C . PASS AC=3;AN=766;HW=0.00;HetPct=0.8;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 20030869 . CT C . PASS AC=362;AN=766;HW=6.74;HetPct=46.5;HomRefPct=29.5;HomVarPct=24.0;NoCallPct=0.0 GT 0/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 1/1 1/1 0/1 1/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/1 1/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 1/1 1/1 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 1/1 1/1 0/0 0/1 0/0 1/1 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/0 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 1/1 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 +20 20286529 . A AC . PASS AC=1;AN=762;HW=0.00;HetPct=0.3;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 20404656 . ATTACAGACT A . PASS AC=7;AN=766;HW=0.00;HetPct=1.8;HomRefPct=98.2;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 20434198 . TA T . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 20716329 . CA C . PASS AC=4;AN=760;HW=0.00;HetPct=1.0;HomRefPct=98.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 20760474 . TG T . PASS AC=15;AN=764;HW=5.83;HetPct=3.4;HomRefPct=96.1;HomVarPct=0.3;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 20952825 . T TC . PASS AC=1;AN=762;HW=0.00;HetPct=0.3;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 20990240 . TC T . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21406859 . ACTT A . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21480245 . AG A . PASS AC=1;AN=766;HW=0.00;HetPct=0.3;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21852048 . CA C . PASS AC=330;AN=762;HW=4.15;HetPct=46.5;HomRefPct=33.2;HomVarPct=19.8;NoCallPct=0.5 GT 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 1/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 1/1 0/0 1/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 . 0/1 1/1 0/0 0/1 0/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 1/1 0/1 1/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 0/0 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/0 1/1 0/0 . 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/1 1/1 0/1 1/1 0/1 0/0 1/1 0/0 1/1 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 +20 21968507 . AC A . PASS AC=7;AN=762;HW=12.61;HetPct=1.3;HomRefPct=97.9;HomVarPct=0.3;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 22411326 . CA C . HardyWeinbergViolation AC=321;AN=762;HW=136.49;HetPct=29.5;HomRefPct=42.8;HomVarPct=27.2;NoCallPct=0.5 GT 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 1/1 1/1 0/0 0/0 1/1 0/0 1/1 0/1 0/0 . 0/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 1/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 1/1 0/0 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 1/1 0/0 1/1 1/1 1/1 1/1 0/0 1/1 0/0 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/0 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/0 1/1 1/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/0 1/1 0/0 0/0 1/1 0/1 0/1 1/1 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/1 1/1 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 1/1 0/0 0/0 1/1 1/1 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/0 1/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/0 1/1 1/1 0/0 0/0 0/1 0/0 0/1 +20 22434333 . C CA . PASS AC=8;AN=766;HW=0.00;HetPct=2.1;HomRefPct=97.9;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 22637424 . C CAGCCA . PASS AC=3;AN=760;HW=0.00;HetPct=0.8;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 22655862 . TATC T . PASS AC=6;AN=766;HW=0.00;HetPct=1.6;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 23169038 . TGTC T . HardyWeinbergViolation AC=380;AN=766;HW=1034.24;HetPct=98.7;HomRefPct=1.0;HomVarPct=0.3;NoCallPct=0.0 GT 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 +20 23200197 . ATT A . PASS AC=1;AN=766;HW=0.00;HetPct=0.3;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 23293728 . CA C . PASS AC=8;AN=754;HW=11.33;HetPct=1.6;HomRefPct=96.6;HomVarPct=0.3;NoCallPct=1.6 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 23319459 . CAT C . HardyWeinbergViolation AC=10;AN=766;HW=26.72;HetPct=1.6;HomRefPct=97.9;HomVarPct=0.5;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 23813095 . CT C . PASS AC=26;AN=762;HW=1.46;HetPct=6.3;HomRefPct=93.0;HomVarPct=0.3;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 23815381 . CT C . PASS AC=1;AN=762;HW=0.00;HetPct=0.3;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 23889003 . GA G . PASS AC=2;AN=766;HW=0.00;HetPct=0.5;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 24541328 . TA T . HighNoCallRate AC=0;AN=430;HW=0.00;HetPct=0.0;HomRefPct=56.1;HomVarPct=0.0;NoCallPct=43.9 GT . 0/0 0/0 0/0 0/0 0/0 . . . . . 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 . . . . 0/0 0/0 . . . 0/0 . . . . 0/0 0/0 . . . . 0/0 0/0 0/0 . . . 0/0 . . 0/0 . 0/0 0/0 0/0 . 0/0 0/0 . . 0/0 0/0 0/0 0/0 . 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . . . . 0/0 . . . 0/0 0/0 . . 0/0 0/0 . 0/0 . . 0/0 . 0/0 0/0 . 0/0 . . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . . 0/0 . 0/0 . 0/0 . . . . . . 0/0 0/0 . 0/0 0/0 0/0 . . 0/0 . 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . 0/0 0/0 . . . . . . 0/0 . 0/0 0/0 0/0 0/0 . . . 0/0 . . . . . . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . . . 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 . . . . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . . . 0/0 . . . 0/0 0/0 0/0 0/0 0/0 . . . 0/0 0/0 0/0 . . 0/0 . . 0/0 . 0/0 . 0/0 0/0 0/0 . . 0/0 . 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 . 0/0 . 0/0 0/0 . 0/0 . . 0/0 . . . . . . 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 . . . 0/0 . . 0/0 0/0 . . 0/0 . . . 0/0 . 0/0 0/0 0/0 0/0 . . . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . . 0/0 . 0/0 0/0 0/0 . . . 0/0 0/0 0/0 . 0/0 . 0/0 . 0/0 0/0 . 0/0 . 0/0 0/0 . . 0/0 0/0 0/0 . 0/0 . 0/0 0/0 . 0/0 +20 24710482 . GT G . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 24855121 . CT C . PASS AC=6;AN=760;HW=0.00;HetPct=1.6;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 25283938 . A AG . HardyWeinbergViolation AC=326;AN=762;HW=30.59;HetPct=40.2;HomRefPct=36.8;HomVarPct=22.5;NoCallPct=0.5 GT 0/0 0/1 0/1 0/0 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/1 1/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 1/1 0/0 0/1 0/0 1/1 1/1 0/0 0/0 0/1 1/1 0/0 0/0 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/0 1/1 1/1 1/1 . 0/1 . 0/0 0/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 1/1 0/0 1/1 1/1 0/0 0/1 1/1 0/1 0/0 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 1/1 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 1/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 1/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 1/1 0/1 0/1 1/1 0/0 0/1 0/0 1/1 1/1 0/1 1/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 1/1 +20 25503211 . CATA C . PASS AC=1;AN=758;HW=0.00;HetPct=0.3;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=1.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 25905250 . GT G . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 29589873 . CCTT C . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 29628180 . C CCACAAGAAG . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 29804699 . A AC . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 29913425 . TATATC T . PASS AC=15;AN=762;HW=5.82;HetPct=3.4;HomRefPct=95.8;HomVarPct=0.3;NoCallPct=0.5 GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 30390854 . TTATACTA T . PASS AC=3;AN=766;HW=0.00;HetPct=0.8;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 30534847 . ACAAT A . PASS AC=2;AN=764;HW=0.00;HetPct=0.5;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 30567910 . T TG . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 31412616 . CT C . PASS AC=1;AN=760;HW=0.00;HetPct=0.3;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 31760870 . CG C . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 31881479 . AG A . HardyWeinbergViolation AC=40;AN=764;HW=34.05;HetPct=7.3;HomRefPct=90.9;HomVarPct=1.6;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32015223 . CT C . PASS AC=5;AN=764;HW=0.00;HetPct=1.3;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32158330 . CAG C . PASS AC=4;AN=760;HW=0.00;HetPct=1.0;HomRefPct=98.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32456076 . GT G . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32477286 . CA C . HardyWeinbergViolation AC=14;AN=766;HW=20.05;HetPct=2.6;HomRefPct=96.9;HomVarPct=0.5;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32509752 . A AG . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32700247 . GGCGTCTGA G . PASS AC=3;AN=754;HW=0.00;HetPct=0.8;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=1.6 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32968409 . GTC G . PASS AC=0;AN=754;HW=0.00;HetPct=0.0;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=1.6 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 33541746 . A AAG . PASS AC=4;AN=766;HW=0.00;HetPct=1.0;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 34251969 . C CA . PASS AC=3;AN=762;HW=0.00;HetPct=0.8;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 34313574 . A AT . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 34633573 . TAA T . PASS AC=1;AN=754;HW=0.00;HetPct=0.3;HomRefPct=98.2;HomVarPct=0.0;NoCallPct=1.6 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 34831930 . CT C . PASS AC=7;AN=766;HW=0.00;HetPct=1.8;HomRefPct=98.2;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 35329008 . ATC A . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 35357903 . GA G . PASS AC=5;AN=764;HW=0.00;HetPct=1.3;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 35847597 . CTT C . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 36250348 . CG C . HighNoCallRate AC=0;AN=414;HW=0.00;HetPct=0.0;HomRefPct=54.0;HomVarPct=0.0;NoCallPct=46.0 GT 0/0 . 0/0 . . 0/0 0/0 . 0/0 0/0 . . 0/0 . 0/0 . 0/0 . 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 . 0/0 0/0 . 0/0 . 0/0 . . 0/0 . . 0/0 . 0/0 . . . 0/0 . 0/0 . . . 0/0 0/0 0/0 . . 0/0 . . 0/0 . . . 0/0 0/0 . . . 0/0 0/0 . . 0/0 . . . 0/0 . 0/0 . 0/0 . 0/0 . 0/0 0/0 . 0/0 . 0/0 . 0/0 0/0 . 0/0 0/0 . 0/0 0/0 . 0/0 0/0 . . . . 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . . . 0/0 0/0 . . . . . 0/0 0/0 0/0 . . 0/0 . 0/0 0/0 0/0 . 0/0 . . . 0/0 0/0 . . 0/0 . . 0/0 0/0 . 0/0 . 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 . . 0/0 . 0/0 0/0 0/0 0/0 0/0 . . 0/0 . 0/0 . 0/0 0/0 . . . 0/0 . 0/0 . 0/0 . 0/0 . 0/0 . . . 0/0 0/0 . 0/0 . 0/0 0/0 . . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . . . 0/0 . 0/0 0/0 . . 0/0 0/0 . 0/0 . . . . 0/0 0/0 0/0 0/0 0/0 . . . . . 0/0 0/0 0/0 . 0/0 0/0 0/0 . . 0/0 0/0 0/0 . 0/0 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . . 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . . . . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . . 0/0 0/0 . 0/0 0/0 0/0 . 0/0 0/0 . . . 0/0 0/0 0/0 0/0 0/0 . 0/0 . . . . 0/0 . . 0/0 . 0/0 . 0/0 0/0 . . 0/0 0/0 0/0 . 0/0 . . . . 0/0 0/0 0/0 . 0/0 . . 0/0 0/0 . . . 0/0 . 0/0 . 0/0 . . 0/0 . . . . +20 36658020 . TG T . PASS AC=6;AN=764;HW=0.00;HetPct=1.6;HomRefPct=98.2;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 36704724 . TC T . PASS AC=8;AN=756;HW=0.00;HetPct=2.1;HomRefPct=96.6;HomVarPct=0.0;NoCallPct=1.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 36711544 . TAAAG T . PASS AC=1;AN=762;HW=0.00;HetPct=0.3;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 36947086 . ATAC A . PASS AC=33;AN=766;HW=0.12;HetPct=8.6;HomRefPct=91.4;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37139725 . CAG C . PASS AC=5;AN=760;HW=15.80;HetPct=0.8;HomRefPct=98.2;HomVarPct=0.3;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37278654 . CAG C . PASS AC=7;AN=764;HW=0.00;HetPct=1.8;HomRefPct=97.9;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37391272 . TG T . PASS AC=4;AN=764;HW=0.00;HetPct=1.0;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37608002 . CAT C . PASS AC=7;AN=762;HW=0.00;HetPct=1.8;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37678954 . C CTGG . PASS AC=7;AN=762;HW=0.00;HetPct=1.8;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37712193 . AAG A . PASS AC=29;AN=762;HW=0.00;HetPct=7.6;HomRefPct=91.9;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37836124 . AAAT A . PASS AC=3;AN=760;HW=0.00;HetPct=0.8;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37954797 . A AGT . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37962643 . T TAA . PASS AC=178;AN=764;HW=12.74;HetPct=31.9;HomRefPct=60.6;HomVarPct=7.3;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 1/1 0/1 0/0 1/1 1/1 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 . 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 1/1 1/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 +20 38336199 . TA T . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 38495835 . T TA . PASS AC=14;AN=762;HW=0.00;HetPct=3.7;HomRefPct=95.8;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 38696054 . GAAGA G . PASS AC=3;AN=764;HW=0.00;HetPct=0.8;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 38784318 . CCTT C . PASS AC=7;AN=762;HW=0.00;HetPct=1.8;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 39042026 . T TG . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 39420665 . AG A . PASS AC=72;AN=760;HW=3.25;HetPct=16.2;HomRefPct=81.7;HomVarPct=1.3;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 1/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 . 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 +20 39607037 . C CA . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 39868369 . T TG . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 40006262 . TGAG T . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 40110981 . A AG . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 40445967 . TG T . PASS AC=3;AN=762;HW=0.00;HetPct=0.8;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 40742257 . TG T . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41000677 . T TG . PASS AC=3;AN=764;HW=0.00;HetPct=0.8;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41149621 . T TATCA . PASS AC=3;AN=760;HW=0.00;HetPct=0.8;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41364251 . A AAG . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41543685 . CTAAGGAGGGAAAAAGATATAAT C . PASS AC=12;AN=764;HW=0.00;HetPct=3.1;HomRefPct=96.6;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41851636 . TA T . PASS AC=83;AN=764;HW=18.52;HetPct=16.4;HomRefPct=80.7;HomVarPct=2.6;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 +20 41918747 . TATC T . HighNoCallRate AC=3;AN=650;HW=0.00;HetPct=0.8;HomRefPct=84.1;HomVarPct=0.0;NoCallPct=15.1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . . . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . . . 0/0 . 0/0 0/0 . . 0/0 0/0 . . . . 0/0 0/0 0/0 0/0 . . . 0/0 0/0 . 0/0 . . . 0/0 0/0 0/0 0/0 0/0 0/0 . . . . 0/0 0/0 0/0 . . . . 0/0 . . . . . 0/0 . 0/0 . . . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41964672 . A AT . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42145613 . TG T . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42159695 . GC G . PASS AC=87;AN=762;HW=7.05;HetPct=18.5;HomRefPct=78.9;HomVarPct=2.1;NoCallPct=0.5 GT 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 . 0/0 . 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 +20 42261635 . C CATTT . PASS AC=24;AN=764;HW=2.06;HetPct=5.7;HomRefPct=93.7;HomVarPct=0.3;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42470352 . CACTT C . PASS AC=19;AN=764;HW=3.87;HetPct=4.4;HomRefPct=95.0;HomVarPct=0.3;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 42585924 . T TA . PASS AC=1;AN=754;HW=0.00;HetPct=0.3;HomRefPct=98.2;HomVarPct=0.0;NoCallPct=1.6 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42856201 . CT C . PASS AC=3;AN=766;HW=0.00;HetPct=0.8;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42909154 . T TGGGTC . PASS AC=3;AN=764;HW=0.00;HetPct=0.8;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42918721 . AG A . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42930748 . A AG . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43245783 . AG A . PASS AC=8;AN=766;HW=11.40;HetPct=1.6;HomRefPct=98.2;HomVarPct=0.3;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43371647 . GGGCTGTAA G . PASS AC=80;AN=760;HW=6.79;HetPct=17.2;HomRefPct=80.2;HomVarPct=1.8;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +20 43434234 . AG A . PASS AC=4;AN=766;HW=0.00;HetPct=1.0;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43539258 . T TAG . PASS AC=1;AN=762;HW=0.00;HetPct=0.3;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43606638 . T TC . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43826992 . GC G . PASS AC=0;AN=748;HW=0.00;HetPct=0.0;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=2.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43993933 . CA C . PASS AC=199;AN=764;HW=8.74;HetPct=35.2;HomRefPct=56.1;HomVarPct=8.4;NoCallPct=0.3 GT 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 1/1 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/0 1/1 1/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/1 1/1 0/0 1/1 1/1 1/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 +20 44071585 . C CT . PASS AC=132;AN=764;HW=8.50;HetPct=26.1;HomRefPct=69.5;HomVarPct=4.2;NoCallPct=0.3 GT 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 +20 44220528 . T TC . PASS AC=59;AN=766;HW=1.90;HetPct=14.9;HomRefPct=84.9;HomVarPct=0.3;NoCallPct=0.0 GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +20 44340276 . AACAG A . PASS AC=37;AN=758;HW=17.93;HetPct=7.6;HomRefPct=90.3;HomVarPct=1.0;NoCallPct=1.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 44464600 . T TA . PASS AC=19;AN=762;HW=3.86;HetPct=4.4;HomRefPct=94.8;HomVarPct=0.3;NoCallPct=0.5 GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 44470843 . GAGTGTCGT G . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 44572563 . GA G . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 44889286 . G GC . PASS AC=13;AN=766;HW=0.00;HetPct=3.4;HomRefPct=96.6;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +20 45092013 . GT G . PASS AC=4;AN=760;HW=0.00;HetPct=1.0;HomRefPct=98.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 45300827 . CT C . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 45406096 . T TTC . PASS AC=4;AN=760;HW=0.00;HetPct=1.0;HomRefPct=98.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 45668403 . CTG C . PASS AC=86;AN=762;HW=16.06;HetPct=17.2;HomRefPct=79.6;HomVarPct=2.6;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +20 46011017 . GAT G . HighNoCallRate AC=4;AN=706;HW=0.00;HetPct=1.0;HomRefPct=91.1;HomVarPct=0.0;NoCallPct=7.8 GT . . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 46051811 . T TAAGC . PASS AC=2;AN=762;HW=0.00;HetPct=0.5;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 46353646 . A AG . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 46413551 . TC T . PASS AC=2;AN=760;HW=0.00;HetPct=0.5;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 46569465 . CTG C . PASS AC=10;AN=762;HW=0.00;HetPct=2.6;HomRefPct=96.9;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 46720983 . ATACTTGG A . PASS AC=3;AN=764;HW=0.00;HetPct=0.8;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 47032179 . GC G . PASS AC=2;AN=760;HW=0.00;HetPct=0.5;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 47136092 . A AGTC . PASS AC=1;AN=760;HW=0.00;HetPct=0.3;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 47239432 . T TA . HardyWeinbergViolation AC=3;AN=762;HW=21.03;HetPct=0.3;HomRefPct=99.0;HomVarPct=0.3;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 47335386 . GC G . PASS AC=2;AN=762;HW=0.00;HetPct=0.5;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 47428163 . C CA . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 47988904 . CA C . PASS AC=187;AN=760;HW=17.08;HetPct=32.1;HomRefPct=58.7;HomVarPct=8.4;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 1/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/0 1/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/1 . 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 +20 48262933 . CCTA C . PASS AC=7;AN=766;HW=0.00;HetPct=1.8;HomRefPct=98.2;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49438742 . G GT . PASS AC=8;AN=762;HW=11.37;HetPct=1.6;HomRefPct=97.7;HomVarPct=0.3;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49451656 . T TG . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49537420 . AG A . PASS AC=3;AN=760;HW=0.00;HetPct=0.8;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49561273 . A AG . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49765611 . A AC . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49823863 . ACTTTT A . HardyWeinbergViolation AC=14;AN=764;HW=20.03;HetPct=2.6;HomRefPct=96.6;HomVarPct=0.5;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 50136971 . TTTTC T . PASS AC=8;AN=764;HW=0.00;HetPct=2.1;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 50373155 . A AT . PASS AC=7;AN=762;HW=0.00;HetPct=1.8;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 50772065 . T TC . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 50806976 . G GAA . PASS AC=128;AN=760;HW=0.17;HetPct=28.2;HomRefPct=68.4;HomVarPct=2.6;NoCallPct=0.8 GT 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 . 0/0 . 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 +20 50961401 . G GT . PASS AC=4;AN=762;HW=0.00;HetPct=1.0;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 51547787 . AC A . PASS AC=1;AN=762;HW=0.00;HetPct=0.3;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 51758677 . A ATT . HardyWeinbergViolation AC=87;AN=762;HW=72.50;HetPct=13.3;HomRefPct=81.5;HomVarPct=4.7;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 1/1 1/1 1/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/1 1/1 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 +20 51838824 . GA G . PASS AC=4;AN=756;HW=17.99;HetPct=0.5;HomRefPct=97.9;HomVarPct=0.3;NoCallPct=1.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 51961394 . ATTTG A . PASS AC=8;AN=760;HW=0.00;HetPct=2.1;HomRefPct=97.1;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 53081927 . CATGA C . PASS AC=5;AN=764;HW=0.00;HetPct=1.3;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 53538294 . T TG . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 53602394 . T TA . PASS AC=7;AN=764;HW=0.00;HetPct=1.8;HomRefPct=97.9;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54124185 . T TC . PASS AC=2;AN=766;HW=0.00;HetPct=0.5;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54150907 . CAG C . PASS AC=3;AN=754;HW=0.00;HetPct=0.8;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=1.6 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54166824 . AC A . PASS AC=2;AN=762;HW=0.00;HetPct=0.5;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54230743 . CAT C . PASS AC=2;AN=758;HW=0.00;HetPct=0.5;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=1.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54262948 . A AC . PASS AC=0;AN=760;HW=0.00;HetPct=0.0;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54309727 . TGAGC T . PASS AC=7;AN=762;HW=12.61;HetPct=1.3;HomRefPct=97.9;HomVarPct=0.3;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54379666 . GT G . PASS AC=172;AN=766;HW=14.43;HetPct=30.8;HomRefPct=62.1;HomVarPct=7.0;NoCallPct=0.0 GT 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/1 0/1 1/1 0/0 0/0 0/0 1/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 1/1 1/1 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 +20 55264363 . AG A . PASS AC=232;AN=762;HW=15.89;HetPct=37.1;HomRefPct=50.7;HomVarPct=11.7;NoCallPct=0.5 GT 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/0 1/1 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/0 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/0 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 1/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 . 0/0 . 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 +20 55286852 . AAAC A . HardyWeinbergViolation AC=10;AN=764;HW=26.69;HetPct=1.6;HomRefPct=97.7;HomVarPct=0.5;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 55608811 . CT C . PASS AC=35;AN=762;HW=19.90;HetPct=7.0;HomRefPct=91.4;HomVarPct=1.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 55611547 . CAA C . PASS AC=1;AN=760;HW=0.00;HetPct=0.3;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 55658161 . GT G . PASS AC=0;AN=760;HW=0.00;HetPct=0.0;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 55989765 . CA C . PASS AC=208;AN=764;HW=5.71;HetPct=37.1;HomRefPct=54.0;HomVarPct=8.6;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/0 1/1 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 +20 56249865 . T TGAGG . PASS AC=4;AN=756;HW=0.00;HetPct=1.0;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=1.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 56344957 . GT G . PASS AC=1;AN=762;HW=0.00;HetPct=0.3;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 56419021 . T TG . PASS AC=2;AN=766;HW=0.00;HetPct=0.5;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 56915853 . TG T . PASS AC=17;AN=764;HW=4.78;HetPct=3.9;HomRefPct=95.6;HomVarPct=0.3;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 57125853 . GA G . HardyWeinbergViolation AC=137;AN=764;HW=48.09;HetPct=22.2;HomRefPct=70.8;HomVarPct=6.8;NoCallPct=0.3 GT 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 1/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 1/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 1/1 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 +20 57676578 . CCTTT C . PASS AC=7;AN=764;HW=0.00;HetPct=1.8;HomRefPct=97.9;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 57693627 . AG A . HighNoCallRate AC=12;AN=292;HW=71.95;HetPct=0.5;HomRefPct=36.3;HomVarPct=1.3;NoCallPct=61.9 GT . . 0/0 . . . 0/0 . . . . 0/0 . 1/1 . . 0/0 . 0/0 . 0/0 . . . . . . . 0/0 0/0 . . . 0/0 . . . . . 0/0 . 0/0 . . 0/0 0/0 . . . . . . . . 0/0 . . . . 0/0 . . . 0/0 . 0/0 0/0 0/0 . . 0/0 . . 0/0 0/0 . 0/0 . . . 0/0 . . . . . . . . 0/0 . 0/0 . . 0/0 0/0 0/0 . . . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 1/1 . . . . . . . 0/0 . . . 0/0 . . . . . . 0/0 1/1 . . . 0/0 . . . . . . . . 0/0 . 0/0 . . . 0/0 . . . . 0/0 0/0 0/0 . 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . . . . 0/0 . 0/0 . . . . 0/0 . . 0/0 . . 1/1 . 0/0 0/0 . 0/0 0/0 0/1 . . 0/0 . 0/0 1/1 . . . . . . . 0/0 0/0 . . . . . . . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . . . . 0/0 0/0 0/0 0/0 . 0/0 0/0 . . . 0/0 . 0/0 . 0/0 0/0 . . . . . 0/0 . 0/0 . 0/0 . 0/0 0/0 0/0 0/0 . . . . . . . 0/0 . . 0/0 . . 0/0 . 0/0 0/0 . . 0/0 . . . 0/0 0/0 . . . . 0/0 . . . 0/0 . . . 0/0 . . . 0/0 . . 0/0 . 0/0 . . . . . . 0/0 . . . . . . . 0/0 . . 0/1 0/0 . . . . . 0/0 0/0 0/0 0/0 0/0 . . 0/0 . . 0/0 . . 0/0 . . . . 0/0 . . . . . 0/0 . 0/0 . . 0/0 . 0/0 . . . 0/0 +20 57781799 . TGGG T . HardyWeinbergViolation AC=43;AN=764;HW=30.12;HetPct=8.1;HomRefPct=90.1;HomVarPct=1.6;NoCallPct=0.3 GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 1/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 +20 58288793 . TC T . PASS AC=44;AN=766;HW=12.53;HetPct=9.4;HomRefPct=89.6;HomVarPct=1.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 58790761 . TG T . HardyWeinbergViolation AC=232;AN=762;HW=35.81;HetPct=33.9;HomRefPct=52.2;HomVarPct=13.3;NoCallPct=0.5 GT 0/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/0 1/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 1/1 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/1 1/1 . 0/1 . 1/1 0/0 0/1 1/1 0/1 0/0 1/1 0/0 1/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/1 1/1 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 1/1 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/0 +20 59072457 . AAGG A . HardyWeinbergViolation AC=12;AN=756;HW=41.94;HetPct=1.6;HomRefPct=96.3;HomVarPct=0.8;NoCallPct=1.3 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 59153061 . CTG C . PASS AC=1;AN=764;HW=0.00;HetPct=0.3;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 59186675 . TATTA T . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 59349754 . CCT C . PASS AC=168;AN=762;HW=8.71;HetPct=31.3;HomRefPct=61.9;HomVarPct=6.3;NoCallPct=0.5 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 1/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 1/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 . 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 +20 59365768 . TG T . PASS AC=2;AN=762;HW=0.00;HetPct=0.5;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 59769242 . C CT . PASS AC=4;AN=762;HW=0.00;HetPct=1.0;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 59955821 . TG T . HighNoCallRate AC=0;AN=712;HW=0.00;HetPct=0.0;HomRefPct=93.0;HomVarPct=0.0;NoCallPct=7.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . . 0/0 0/0 0/0 . 0/0 0/0 . . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 60337932 . AC A . PASS AC=3;AN=764;HW=0.00;HetPct=0.8;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 60925525 . GC G . PASS AC=2;AN=762;HW=0.00;HetPct=0.5;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 60961768 . GA G . HardyWeinbergViolation AC=365;AN=766;HW=84.86;HetPct=34.7;HomRefPct=35.0;HomVarPct=30.3;NoCallPct=0.0 GT 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/0 1/1 0/0 1/1 1/1 1/1 0/1 0/0 1/1 1/1 0/0 0/0 1/1 1/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 1/1 1/1 1/1 0/0 1/1 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 1/1 0/0 0/0 1/1 1/1 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 1/1 1/1 0/0 0/0 1/1 0/1 0/1 1/1 0/1 0/0 0/0 1/1 0/1 1/1 0/0 0/0 0/0 1/1 1/1 1/1 0/0 0/1 0/0 0/0 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 1/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 1/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 +20 61000018 . GC G . PASS AC=203;AN=762;HW=0.38;HetPct=39.4;HomRefPct=53.3;HomVarPct=6.8;NoCallPct=0.5 GT 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 1/1 . 0/1 . 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/0 1/1 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 +20 61531765 . AG A . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 61983510 . TCTGC T . PASS AC=75;AN=766;HW=0.03;HetPct=18.0;HomRefPct=81.2;HomVarPct=0.8;NoCallPct=0.0 GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 +20 62154368 . G GA . PASS AC=2;AN=760;HW=0.00;HetPct=0.5;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 62310426 . CTT C . PASS AC=1;AN=756;HW=0.00;HetPct=0.3;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=1.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 62871860 . C CCCGCA . PASS AC=27;AN=764;HW=17.87;HetPct=5.5;HomRefPct=93.5;HomVarPct=0.8;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 diff --git a/tests/tabix_data/vcf/16.vcf b/tests/tabix_data/vcf/16.vcf new file mode 100644 index 0000000..eaa067e --- /dev/null +++ b/tests/tabix_data/vcf/16.vcf @@ -0,0 +1,369 @@ +##fileformat=VCFv4.0 +##ApplyRecalibration="analysis_type=ApplyRecalibration input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=[20] excludeIntervals=null reference_sequence=/humgen/1kg/reference/human_g1k_v37.fasta rodBind=[/humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/combined.phase1.chr20.raw.indels.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION nonDeterministicRandomSeed=false DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=1 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false disable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null help=false recal_file=/humgen/gsa-scr1/delangel/VQSRIndels/data/trainMills75_truthMills75_p15_12_12_pctb0.05_std12.0_mG8_QD_FS_HS_RP_IC.recal tranches_file=/humgen/gsa-scr1/delangel/VQSRIndels/data/trainMills75_truthMills75_p15_12_12_pctb0.05_std12.0_mG8_QD_FS_HS_RP_IC.tranches out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub ts_filter_level=93.0 ignore_filter=null mode=INDEL" +##CombineVariants="analysis_type=CombineVariants input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=[20:41000001-42000000] excludeIntervals=null reference_sequence=/humgen/1kg/reference/human_g1k_v37.fasta rodBind=[/humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/AFR/AFR.phase1.chr20.42.raw.indels.vcf, /humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/ASN/ASN.phase1.chr20.42.raw.indels.vcf, /humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/AMR/AMR.phase1.chr20.42.raw.indels.vcf, /humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/EUR/EUR.phase1.chr20.42.raw.indels.vcf, /humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/AFR.admix/AFR.admix.phase1.chr20.42.raw.indels.vcf, /humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/ASN.admix/ASN.admix.phase1.chr20.42.raw.indels.vcf, /humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/AMR.admix/AMR.admix.phase1.chr20.42.raw.indels.vcf, /humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/EUR.admix/EUR.admix.phase1.chr20.42.raw.indels.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION nonDeterministicRandomSeed=false DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=1 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false disable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null help=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub genotypemergeoption=PRIORITIZE filteredrecordsmergetype=KEEP_IF_ANY_UNFILTERED rod_priority_list=AFR.admix,AMR.admix,EUR.admix,ASN.admix,AFR,AMR,EUR,ASN printComplexMerges=false filteredAreUncalled=false minimalVCF=false setKey=set assumeIdenticalSamples=false minimumN=1 masterMerge=false mergeInfoWithMaxAC=true" +##FILTER= +##FILTER== 4 && (MQ0 / (1.0 * DP)) > 0.1"> +##FILTER=10)"> +##FILTER=20.0"> +##FILTER= 7500"> +##FILTER==15"> +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER==-1.0"> +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##LeftAlignVariants="analysis_type=LeftAlignVariants input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=[20] excludeIntervals=null reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta rodBind=[/humgen/gsa-scr1/ebanks/ALL.chr20.Oxford.20110407.indels.genotypes.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION nonDeterministicRandomSeed=false DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=1 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false disable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null help=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub" +##SelectVariants="analysis_type=SelectVariants input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=[20] excludeIntervals=null reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta rodBind=[/humgen/gsa-scr1/delangel/officialCalls/20110201_chr20_phase1_indels/dindel/20110208.chr20.dindel2.ALL.sites.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION nonDeterministicRandomSeed=false DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=1 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false disable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null help=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sample=null select_expressions=[] excludeNonVariants=false excludeFiltered=false discordance= concordance= family_structure= mendelianViolation=false mendelianViolationQualThreshold=0.0 select_random_number=0 select_random_fraction=0.0 selectSNPs=false selectIndels=true" +##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/broad/shptmp/delangel/calls/chr20/CHB.phase1.chr20.42.cleaned.bam, /broad/shptmp/delangel/calls/chr20/CHS.phase1.chr20.42.cleaned.bam, /broad/shptmp/delangel/calls/chr20/CLM.phase1.chr20.42.cleaned.bam, /broad/shptmp/delangel/calls/chr20/JPT.phase1.chr20.42.cleaned.bam, /broad/shptmp/delangel/calls/chr20/MXL.phase1.chr20.42.cleaned.bam, /broad/shptmp/delangel/calls/chr20/PUR.phase1.chr20.42.cleaned.bam] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=[20:41000001-42000000] excludeIntervals=null reference_sequence=/humgen/1kg/reference/human_g1k_v37.fasta rodBind=[/humgen/gsa-scr1/delangel/otherIndelCallerAnalysis/ALL.indels.combined.chr20.vcf, /humgen/gsa-hpprojects/GATK/data/dbsnp_132_b37.leftAligned.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION nonDeterministicRandomSeed=false DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=50 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=8 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false disable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null help=false genotype_likelihoods_model=INDEL p_nonref_model=EXACT heterozygosity=0.0010 pcr_error_rate=1.0E-4 genotyping_mode=GENOTYPE_GIVEN_ALLELES output_mode=EMIT_ALL_SITES standard_min_confidence_threshold_for_calling=4.0 standard_min_confidence_threshold_for_emitting=4.0 noSLOD=false assume_single_sample_reads=null abort_at_too_much_coverage=-1 min_base_quality_score=17 min_mapping_quality_score=20 max_deletion_fraction=0.05 min_indel_count_for_genotyping=5 indel_heterozygosity=1.25E-4 indelGapContinuationPenalty=10.0 indelGapOpenPenalty=45.0 indelHaplotypeSize=80 doContextDependentGapPenalties=true getGapPenaltiesFromData=false indel_recal_file=indel.recal_data.csv indelDebug=false dovit=false GSA_PRODUCTION_ONLY=false exactCalculation=LINEAR_EXPERIMENTAL ignoreSNPAlleles=true output_all_callable_bases=false genotype=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub debug_file=null metrics_file=null annotation=[MappingQualityZeroFraction]" +##VariantFiltration="analysis_type=VariantFiltration input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=[/humgen/1kg/processing/pipeline_test_bams/chr22_chunked.hg19.intervals] excludeIntervals=null reference_sequence=/humgen/1kg/reference/human_g1k_v37.fasta rodBind=[/broad/shptmp/rpoplin/ALL.phase1.chr22.raw.indels.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=1 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false enable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null quiet_output_mode=false debug_mode=false help=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub filterExpression=[MQ0 >= 4 && (MQ0 / (1.0 * DP)) > 0.1, QUAL<30.0, SB>=-1.0, QD<1.0, HRun>=15, HaplotypeScore>20.0] filterName=[HARD_TO_VALIDATE, LowQual, StrandBias, QualByDepth, HomopolymerRun, HaplotypeScore] genotypeFilterExpression=[] genotypeFilterName=[] clusterSize=3 clusterWindowSize=0 maskName=Mask missingValuesInExpressionsShouldEvaluateAsFailing=false" +##commandline="/share/software/freebayes/bin/freebayes --stdin --min-alternate-count 2 --genotype-combo-step-max 20 --genotype-variant-threshold 4 --no-marginals --pvar 0.0001 --indels --mnps --no-filters --binomial-obs-priors --allele-balance-priors --region 20:0..100000 --vcf /d1/data/1000G/20101123/populations/finalised.phase1/integrated/including454/wg/ALL/Pipeline/none//freebayes/freebayes.20:0-100000.baq.20110328.vcf --fasta-reference /d2/data/references/build_37/human_reference_v37.fa" +##fileDate=2011-03-28 +##filedate=2011-02-08 +##filter="( SNP | MNP ) & ( MQM > 65 | QUAL > 1 ) & ABP < 30 & AB < 0.9 | ( INS | DEL ) & QUAL > 500" +##phasing=none +##platypusOptions={'bamFiles': ['/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA06984', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA06985', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA06986', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA06989', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA06994', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA07000', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA07037', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA07048', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA07051', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA07056', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA07346', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA07347', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA07357', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA10847', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA10851', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11829', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11830', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11831', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11832', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11843', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11881', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11892', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11893', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11894', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11918', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11919', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11920', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11930', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11931', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11932', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11933', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11992', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11993', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11994', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11995', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12003', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12004', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12005', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12006', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12043', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12044', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12045', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12046', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12058', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12144', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12154', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12155', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12156', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12234', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12249', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12272', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12273', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12275', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12282', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12283', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12286', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12287', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12340', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12341', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12342', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12347', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12348', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12383', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12399', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12400', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12413', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12414', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12489', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12546', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12716', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12717', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12718', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12748', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12749', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12750', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12751', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12761', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12763', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12775', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12776', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12777', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12778', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12813', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12827', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12828', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12829', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12830', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12842', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12843', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12889', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12890', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18486', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18487', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18488', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18489', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18498', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18499', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18501', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18502', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18504', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18505', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18507', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18508', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18510', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18511', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18516', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18517', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18519', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18520', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18522', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18523', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18526', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18530', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18532', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18533', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18534', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18535', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18536', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18537', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18538', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18539', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18541', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18542', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18543', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18544', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18545', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18546', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18547', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18548', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18549', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18550', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18552', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18553', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18555', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18557', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18558', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18559', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18560', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18561', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18562', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18563', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18564', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18565', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18566', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18567', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18570', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18571', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18572', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18573', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18574', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18576', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18577', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18579', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18582', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18592', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18593', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18595', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18596', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18597', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18599', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18602', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18603', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18605', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18606', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18608', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18609', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18610', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18611', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18612', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18613', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18614', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18615', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18616', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18617', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18618', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18619', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18620', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18621', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18622', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18623', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18624', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18625', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18626', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18627', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18628', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18630', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18631', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18632', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18633', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18634', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18635', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18636', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18637', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18638', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18853', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18856', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18858', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18861', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18867', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18868', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18870', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18871', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18873', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18874', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18907', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18908', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18909', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18910', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18912', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18916', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18917', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18923', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18924', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18933', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18934', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18940', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18941', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18942', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18943', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18944', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18945', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18947', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18948', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18949', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18950', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18951', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18952', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18953', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18956', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18959', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18960', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18961', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18963', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18964', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18965', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18967', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18968', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18971', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18972', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18973', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18974', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18975', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18976', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18977', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18980', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18981', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18982', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18983', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18984', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18985', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18986', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18987', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18988', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18989', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18990', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18991', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18999', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19000', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19002', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19003', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19004', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19005', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19007', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19009', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19010', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19012', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19054', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19055', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19056', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19057', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19058', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19059', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19060', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19062', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19063', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19064', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19065', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19066', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19067', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19068', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19070', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19072', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19074', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19075', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19076', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19077', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19078', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19079', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19080', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19081', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19082', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19083', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19084', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19085', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19087', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19088', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19092', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19093', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19098', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19099', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19102', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19107', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19108', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19114', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19116', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19119', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19129', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19130', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19131', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19137', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19138', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19144', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19147', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19152', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19153', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19159', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19160', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19171', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19172', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19189', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19190', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19197', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19198', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19200', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19201', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19204', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19207', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19209', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19210', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19213', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19223', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19225', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19235', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19236', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19247', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19248', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19256', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19257', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19311', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19312', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19313', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19315', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19316', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19317', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19318', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19319', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19321', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19324', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19327', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19328', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19331', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19332', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19334', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19338', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19346', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19347', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19350', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19355', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19359', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19360', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19371', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19372', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19373', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19374', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19375', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19376', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19377', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19379', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19380', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19381', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19382', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19383', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19384', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19385', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19390', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19391', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19393', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19394', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19395', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19396', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19397', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19398', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19399', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19401', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19403', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19404', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19428', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19429', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19430', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19431', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19434', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19435', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19436', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19437', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19438', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19439', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19440', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19443', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19444', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19445', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19446', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19448', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19449', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19451', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19452', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19453', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19455', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19456', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19457', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19461', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19462', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19463', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19466', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19467', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19468', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19469', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19470', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19471', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19472', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19473', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19474', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19625', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19648', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19649', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19651', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19652', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19654', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19655', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19657', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19658', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19660', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19661', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19663', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19664', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19670', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19675', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19676', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19678', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19679', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19681', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19682', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19684', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19685', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19700', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19701', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19703', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19704', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19707', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19711', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19712', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19713', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19716', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19717', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19719', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19720', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19722', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19723', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19725', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19726', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19728', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19729', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19731', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19732', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19746', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19747', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19749', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19750', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19755', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19756', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19758', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19759', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19761', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19762', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19770', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19771', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19773', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19774', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19776', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19777', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19779', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19780', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19782', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19783', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19785', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19786', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19788', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19789', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19818', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19819', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19834', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19835', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19900', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19901', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19904', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19908', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19909', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19914', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19916', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19917', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19920', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19921', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19982', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19985', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20126', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20127', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20276', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20278', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20281', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20282', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20287', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20289', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20291', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20294', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20296', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20299', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20314', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20317', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20322', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20332', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20334', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20336', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20340', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20341', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20342', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20344', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20346', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20348', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20356', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20502', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20503', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20504', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20505', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20506', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20507', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20508', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20509', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20510', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20512', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20513', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20514', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20515', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20516', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20517', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20518', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20519', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20520', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20521', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20522', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20524', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20525', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20526', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20527', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20528', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20529', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20530', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20531', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20532', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20533', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20534', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20535', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20536', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20537', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20538', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20539', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20540', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20541', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20542', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20543', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20544', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20581', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20582', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20585', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20586', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20588', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20589', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20752', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20753', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20754', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20755', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20756', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20757', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20758', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20759', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20760', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20761', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20765', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20766', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20768', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20769', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20770', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20771', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20772', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20773', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20774', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20775', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20778', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20783', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20785', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20786', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20787', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20790', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20792', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20795', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20796', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20797', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20798', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20799', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20800', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20801', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20802', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20803', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20804', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20805', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20806', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20807', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20808', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20809', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20810', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20811', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20812', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20813', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20814', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20815', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20816', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20818', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20819', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20826', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20828', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00096', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00098', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00100', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00103', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00106', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00108', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00111', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00112', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00114', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00115', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00116', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00117', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00118', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00119', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00120', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00122', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00123', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00124', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00125', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00126', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00127', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00131', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00133', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00136', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00137', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00138', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00139', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00140', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00141', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00142', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00143', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00144', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00145', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00146', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00147', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00148', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00149', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00150', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00151', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00152', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00153', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00154', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00155', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00156', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00157', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00158', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00159', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00160', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00171', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00173', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00174', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00176', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00177', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00178', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00179', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00180', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00181', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00182', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00183', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00185', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00186', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00187', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00188', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00189', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00190', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00231', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00232', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00233', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00236', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00237', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00239', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00242', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00243', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00244', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00245', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00246', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00247', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00249', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00250', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00251', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00252', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00253', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00254', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00256', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00257', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00258', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00259', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00260', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00261', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00262', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00263', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00264', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00265', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00266', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00267', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00268', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00269', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00270', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00271', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00272', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00273', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00274', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00275', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00276', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00277', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00278', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00280', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00281', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00282', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00284', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00285', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00306', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00308', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00309', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00310', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00311', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00312', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00313', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00315', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00318', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00319', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00320', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00321', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00323', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00324', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00325', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00326', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00327', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00328', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00329', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00330', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00331', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00334', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00335', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00336', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00337', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00338', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00339', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00342', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00343', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00344', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00345', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00346', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00353', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00357', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00361', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00366', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00367', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00368', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00369', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00372', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00373', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00375', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00377', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00380', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00403', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00404', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00418', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00419', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00421', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00422', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00427', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00428', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00436', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00437', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00442', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00443', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00448', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00449', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00463', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00464', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00472', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00473', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00475', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00476', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00478', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00479', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00500', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00501', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00512', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00513', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00524', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00525', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00530', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00531', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00533', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00534', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00536', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00537', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00542', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00543', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00551', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00553', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00554', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00556', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00557', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00559', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00560', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00565', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00566', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00577', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00578', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00580', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00581', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00583', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00584', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00589', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00590', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00592', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00593', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00595', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00596', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00607', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00608', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00610', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00611', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00613', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00614', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00619', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00620', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00625', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00626', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00628', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00629', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00634', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00635', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00637', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00638', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00640', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00641', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00650', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00651', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00653', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00654', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00656', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00657', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00662', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00663', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00671', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00672', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00683', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00684', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00689', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00690', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00692', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00693', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00698', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00699', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00701', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00702', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00704', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00705', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00707', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00708', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00731', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00732', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00734', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00736', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00737', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00739', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00740', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01047', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01048', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01051', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01052', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01055', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01060', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01061', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01066', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01067', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01069', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01070', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01072', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01073', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01075', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01079', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01080', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01082', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01083', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01094', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01095', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01097', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01098', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01101', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01102', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01107', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01108', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01110', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01111', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01112', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01113', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01124', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01125', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01133', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01134', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01136', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01137', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01140', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01148', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01149', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01167', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01168', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01170', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01171', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01173', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01174', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01176', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01177', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01182', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01183', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01187', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01188', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01190', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01191', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01197', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01198', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01204', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01250', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01251', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01253', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01254', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01334', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01342', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01350', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01351', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01353', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01354', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01356', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01357', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01359', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01360', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01365', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01366', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01374', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01375', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01377', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01378', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01383', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01384', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01389', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01390', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01437', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01440', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01441', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01455', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01456', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01461', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01462', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01464', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01465', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01488', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01489', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01491', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01492', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01494', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01495', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01497', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01498', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01515', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01516', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01518', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01519', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01521', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01522', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01550', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01551'], 'minReads': 2, 'refFile': '/scratch/rimmer/Genomes/human_g1k_v37_ebv.fa', 'maxHaplotypes': 64, 'maxSize': 100, 'ploidy': 2, 'maxRegionSize': 10000, 'nCPU': 1, 'minFlank': 3, 'logFileName': 'LogsAllPhaseOne/ThousandGenomesPhaseOneCalls_20:1-100001.log', 'regions': ['20:1-100001'], 'maxVariants': 6, 'genIndels': 1, 'labels': None, 'dataType': 'population', 'minMapQual': 20, 'rlen': 100, 'nInd': 994, 'getVariantsFromBAMs': 1, 'genSNPs': 1, 'minReadQual': 20, 'maxCoverage': 1000000.0, 'verbosity': 2, 'sourceFile': None, 'callOnlyIndels': 1, 'output': 'VariantCallsAllPhaseOne/ThousandGenomesPhaseOneCalls_20:1-100001.vcf'} +##reference=/lustre/scratch105/projects/g1k/ref/main_project/human_g1k_v37.fasta +##source=Dindel2 +##source=SelectVariants +##source_20110031.1=/nfs/users/nfs_p/pd3/cvs/vcftools/perl/vcf-annotate -d /nfs/users/nfs_p/pd3/sandbox/hapmap/dbSNP-b132/non-1kg-vld.desc -a /nfs/users/nfs_p/pd3/sandbox/hapmap/dbSNP-b132/non-1kg-vld.tab.gz -c CHROM,FROM,INFO/VLD,INFO/KGPilot123,INFO/dbSNP +##vcfCTools=filter +##vcfCtools=merge freebayes.20:0-100000.baq.20110328.vcf, freebayes.20:100000-200000.baq.20110328.vcf, freebayes.20:200000-300000.baq.20110328.vcf, freebayes.20:300000-400000.baq.20110328.vcf, freebayes.20:400000-500000.baq.20110328.vcf, freebayes.20:500000-600000.baq.20110328.vcf, freebayes.20:600000-700000.baq.20110328.vcf, freebayes.20:700000-800000.baq.20110328.vcf, freebayes.20:800000-900000.baq.20110328.vcf, freebayes.20:900000-1000000.baq.20110328.vcf, freebayes.20:1000000-1100000.baq.20110328.vcf, freebayes.20:1100000-1200000.baq.20110328.vcf, freebayes.20:1200000-1300000.baq.20110328.vcf, freebayes.20:1300000-1400000.baq.20110328.vcf, freebayes.20:1400000-1500000.baq.20110328.vcf, freebayes.20:1500000-1600000.baq.20110328.vcf, freebayes.20:1600000-1700000.baq.20110328.vcf, freebayes.20:1700000-1800000.baq.20110328.vcf, freebayes.20:1800000-1900000.baq.20110328.vcf, freebayes.20:1900000-2000000.baq.20110328.vcf, freebayes.20:2000000-2100000.baq.20110328.vcf, freebayes.20:2100000-2200000.baq.20110328.vcf, freebayes.20:2200000-2300000.baq.20110328.vcf, freebayes.20:2300000-2400000.baq.20110328.vcf, freebayes.20:2400000-2500000.baq.20110328.vcf, freebayes.20:2500000-2600000.baq.20110328.vcf, freebayes.20:2600000-2700000.baq.20110328.vcf, freebayes.20:2700000-2800000.baq.20110328.vcf, freebayes.20:2800000-2900000.baq.20110328.vcf, freebayes.20:2900000-3000000.baq.20110328.vcf, freebayes.20:3000000-3100000.baq.20110328.vcf, freebayes.20:3100000-3200000.baq.20110328.vcf, freebayes.20:3200000-3300000.baq.20110328.vcf, freebayes.20:3300000-3400000.baq.20110328.vcf, freebayes.20:3400000-3500000.baq.20110328.vcf, freebayes.20:3500000-3600000.baq.20110328.vcf, freebayes.20:3600000-3700000.baq.20110328.vcf, freebayes.20:3700000-3800000.baq.20110328.vcf, freebayes.20:3800000-3900000.baq.20110328.vcf, freebayes.20:3900000-4000000.baq.20110328.vcf, freebayes.20:4000000-4100000.baq.20110328.vcf, freebayes.20:4100000-4200000.baq.20110328.vcf, freebayes.20:4200000-4300000.baq.20110328.vcf, freebayes.20:4300000-4400000.baq.20110328.vcf, freebayes.20:4400000-4500000.baq.20110328.vcf, freebayes.20:4500000-4600000.baq.20110328.vcf, freebayes.20:4600000-4700000.baq.20110328.vcf, freebayes.20:4700000-4800000.baq.20110328.vcf, freebayes.20:4800000-4900000.baq.20110328.vcf, freebayes.20:4900000-5000000.baq.20110328.vcf, freebayes.20:5000000-5100000.baq.20110328.vcf, freebayes.20:5100000-5200000.baq.20110328.vcf, freebayes.20:5200000-5300000.baq.20110328.vcf, freebayes.20:5300000-5400000.baq.20110328.vcf, freebayes.20:5400000-5500000.baq.20110328.vcf, freebayes.20:5500000-5600000.baq.20110328.vcf, freebayes.20:5600000-5700000.baq.20110328.vcf, freebayes.20:5700000-5800000.baq.20110328.vcf, freebayes.20:5800000-5900000.baq.20110328.vcf, freebayes.20:5900000-6000000.baq.20110328.vcf, freebayes.20:6000000-6100000.baq.20110328.vcf, freebayes.20:6100000-6200000.baq.20110328.vcf, freebayes.20:6200000-6300000.baq.20110328.vcf, freebayes.20:6300000-6400000.baq.20110328.vcf, freebayes.20:6400000-6500000.baq.20110328.vcf, freebayes.20:6500000-6600000.baq.20110328.vcf, freebayes.20:6600000-6700000.baq.20110328.vcf, freebayes.20:6700000-6800000.baq.20110328.vcf, freebayes.20:6800000-6900000.baq.20110328.vcf, freebayes.20:6900000-7000000.baq.20110328.vcf, freebayes.20:7000000-7100000.baq.20110328.vcf, freebayes.20:7100000-7200000.baq.20110328.vcf, freebayes.20:7200000-7300000.baq.20110328.vcf, freebayes.20:7300000-7400000.baq.20110328.vcf, freebayes.20:7400000-7500000.baq.20110328.vcf, freebayes.20:7500000-7600000.baq.20110328.vcf, freebayes.20:7600000-7700000.baq.20110328.vcf, freebayes.20:7700000-7800000.baq.20110328.vcf, freebayes.20:7800000-7900000.baq.20110328.vcf, freebayes.20:7900000-8000000.baq.20110328.vcf, freebayes.20:8000000-8100000.baq.20110328.vcf, freebayes.20:8100000-8200000.baq.20110328.vcf, freebayes.20:8200000-8300000.baq.20110328.vcf, freebayes.20:8300000-8400000.baq.20110328.vcf, freebayes.20:8400000-8500000.baq.20110328.vcf, freebayes.20:8500000-8600000.baq.20110328.vcf, freebayes.20:8600000-8700000.baq.20110328.vcf, freebayes.20:8700000-8800000.baq.20110328.vcf, freebayes.20:8800000-8900000.baq.20110328.vcf, freebayes.20:8900000-9000000.baq.20110328.vcf, freebayes.20:9000000-9100000.baq.20110328.vcf, freebayes.20:9100000-9200000.baq.20110328.vcf, freebayes.20:9200000-9300000.baq.20110328.vcf, freebayes.20:9300000-9400000.baq.20110328.vcf, freebayes.20:9400000-9500000.baq.20110328.vcf, freebayes.20:9500000-9600000.baq.20110328.vcf, freebayes.20:9600000-9700000.baq.20110328.vcf, freebayes.20:9700000-9800000.baq.20110328.vcf, freebayes.20:9800000-9900000.baq.20110328.vcf, freebayes.20:9900000-10000000.baq.20110328.vcf, freebayes.20:10000000-10100000.baq.20110328.vcf, freebayes.20:10100000-10200000.baq.20110328.vcf, freebayes.20:10200000-10300000.baq.20110328.vcf, freebayes.20:10300000-10400000.baq.20110328.vcf, freebayes.20:10400000-10500000.baq.20110328.vcf, freebayes.20:10500000-10600000.baq.20110328.vcf, freebayes.20:10600000-10700000.baq.20110328.vcf, freebayes.20:10700000-10800000.baq.20110328.vcf, freebayes.20:10800000-10900000.baq.20110328.vcf, freebayes.20:10900000-11000000.baq.20110328.vcf, freebayes.20:11000000-11100000.baq.20110328.vcf, freebayes.20:11100000-11200000.baq.20110328.vcf, freebayes.20:11200000-11300000.baq.20110328.vcf, freebayes.20:11300000-11400000.baq.20110328.vcf, freebayes.20:11400000-11500000.baq.20110328.vcf, freebayes.20:11500000-11600000.baq.20110328.vcf, freebayes.20:11600000-11700000.baq.20110328.vcf, freebayes.20:11700000-11800000.baq.20110328.vcf, freebayes.20:11800000-11900000.baq.20110328.vcf, freebayes.20:11900000-12000000.baq.20110328.vcf, freebayes.20:12000000-12100000.baq.20110328.vcf, freebayes.20:12100000-12200000.baq.20110328.vcf, freebayes.20:12200000-12300000.baq.20110328.vcf, freebayes.20:12300000-12400000.baq.20110328.vcf, freebayes.20:12400000-12500000.baq.20110328.vcf, freebayes.20:12500000-12600000.baq.20110328.vcf, freebayes.20:12600000-12700000.baq.20110328.vcf, freebayes.20:12700000-12800000.baq.20110328.vcf, freebayes.20:12800000-12900000.baq.20110328.vcf, freebayes.20:12900000-13000000.baq.20110328.vcf, freebayes.20:13000000-13100000.baq.20110328.vcf, freebayes.20:13100000-13200000.baq.20110328.vcf, freebayes.20:13200000-13300000.baq.20110328.vcf, freebayes.20:13300000-13400000.baq.20110328.vcf, freebayes.20:13400000-13500000.baq.20110328.vcf, freebayes.20:13500000-13600000.baq.20110328.vcf, freebayes.20:13600000-13700000.baq.20110328.vcf, freebayes.20:13700000-13800000.baq.20110328.vcf, freebayes.20:13800000-13900000.baq.20110328.vcf, freebayes.20:13900000-14000000.baq.20110328.vcf, freebayes.20:14000000-14100000.baq.20110328.vcf, freebayes.20:14100000-14200000.baq.20110328.vcf, freebayes.20:14200000-14300000.baq.20110328.vcf, freebayes.20:14300000-14400000.baq.20110328.vcf, freebayes.20:14400000-14500000.baq.20110328.vcf, freebayes.20:14500000-14600000.baq.20110328.vcf, freebayes.20:14600000-14700000.baq.20110328.vcf, freebayes.20:14700000-14800000.baq.20110328.vcf, freebayes.20:14800000-14900000.baq.20110328.vcf, freebayes.20:14900000-15000000.baq.20110328.vcf, freebayes.20:15000000-15100000.baq.20110328.vcf, freebayes.20:15100000-15200000.baq.20110328.vcf, freebayes.20:15200000-15300000.baq.20110328.vcf, freebayes.20:15300000-15400000.baq.20110328.vcf, freebayes.20:15400000-15500000.baq.20110328.vcf, freebayes.20:15500000-15600000.baq.20110328.vcf, freebayes.20:15600000-15700000.baq.20110328.vcf, freebayes.20:15700000-15800000.baq.20110328.vcf, freebayes.20:15800000-15900000.baq.20110328.vcf, freebayes.20:15900000-16000000.baq.20110328.vcf, freebayes.20:16000000-16100000.baq.20110328.vcf, freebayes.20:16100000-16200000.baq.20110328.vcf, freebayes.20:16200000-16300000.baq.20110328.vcf, freebayes.20:16300000-16400000.baq.20110328.vcf, freebayes.20:16400000-16500000.baq.20110328.vcf, freebayes.20:16500000-16600000.baq.20110328.vcf, freebayes.20:16600000-16700000.baq.20110328.vcf, freebayes.20:16700000-16800000.baq.20110328.vcf, freebayes.20:16800000-16900000.baq.20110328.vcf, freebayes.20:16900000-17000000.baq.20110328.vcf, freebayes.20:17000000-17100000.baq.20110328.vcf, freebayes.20:17100000-17200000.baq.20110328.vcf, freebayes.20:17200000-17300000.baq.20110328.vcf, freebayes.20:17300000-17400000.baq.20110328.vcf, freebayes.20:17400000-17500000.baq.20110328.vcf, freebayes.20:17500000-17600000.baq.20110328.vcf, freebayes.20:17600000-17700000.baq.20110328.vcf, freebayes.20:17700000-17800000.baq.20110328.vcf, freebayes.20:17800000-17900000.baq.20110328.vcf, freebayes.20:17900000-18000000.baq.20110328.vcf, freebayes.20:18000000-18100000.baq.20110328.vcf, freebayes.20:18100000-18200000.baq.20110328.vcf, freebayes.20:18200000-18300000.baq.20110328.vcf, freebayes.20:18300000-18400000.baq.20110328.vcf, freebayes.20:18400000-18500000.baq.20110328.vcf, freebayes.20:18500000-18600000.baq.20110328.vcf, freebayes.20:18600000-18700000.baq.20110328.vcf, freebayes.20:18700000-18800000.baq.20110328.vcf, freebayes.20:18800000-18900000.baq.20110328.vcf, freebayes.20:18900000-19000000.baq.20110328.vcf, freebayes.20:19000000-19100000.baq.20110328.vcf, freebayes.20:19100000-19200000.baq.20110328.vcf, freebayes.20:19200000-19300000.baq.20110328.vcf, freebayes.20:19300000-19400000.baq.20110328.vcf, freebayes.20:19400000-19500000.baq.20110328.vcf, freebayes.20:19500000-19600000.baq.20110328.vcf, freebayes.20:19600000-19700000.baq.20110328.vcf, freebayes.20:19700000-19800000.baq.20110328.vcf, freebayes.20:19800000-19900000.baq.20110328.vcf, freebayes.20:19900000-20000000.baq.20110328.vcf, freebayes.20:20000000-20100000.baq.20110328.vcf, freebayes.20:20100000-20200000.baq.20110328.vcf, freebayes.20:20200000-20300000.baq.20110328.vcf, freebayes.20:20300000-20400000.baq.20110328.vcf, freebayes.20:20400000-20500000.baq.20110328.vcf, freebayes.20:20500000-20600000.baq.20110328.vcf, freebayes.20:20600000-20700000.baq.20110328.vcf, freebayes.20:20700000-20800000.baq.20110328.vcf, freebayes.20:20800000-20900000.baq.20110328.vcf, freebayes.20:20900000-21000000.baq.20110328.vcf, freebayes.20:21000000-21100000.baq.20110328.vcf, freebayes.20:21100000-21200000.baq.20110328.vcf, freebayes.20:21200000-21300000.baq.20110328.vcf, freebayes.20:21300000-21400000.baq.20110328.vcf, freebayes.20:21400000-21500000.baq.20110328.vcf, freebayes.20:21500000-21600000.baq.20110328.vcf, freebayes.20:21600000-21700000.baq.20110328.vcf, freebayes.20:21700000-21800000.baq.20110328.vcf, freebayes.20:21800000-21900000.baq.20110328.vcf, freebayes.20:21900000-22000000.baq.20110328.vcf, freebayes.20:22000000-22100000.baq.20110328.vcf, freebayes.20:22100000-22200000.baq.20110328.vcf, freebayes.20:22200000-22300000.baq.20110328.vcf, freebayes.20:22300000-22400000.baq.20110328.vcf, freebayes.20:22400000-22500000.baq.20110328.vcf, freebayes.20:22500000-22600000.baq.20110328.vcf, freebayes.20:22600000-22700000.baq.20110328.vcf, freebayes.20:22700000-22800000.baq.20110328.vcf, freebayes.20:22800000-22900000.baq.20110328.vcf, freebayes.20:22900000-23000000.baq.20110328.vcf, freebayes.20:23000000-23100000.baq.20110328.vcf, freebayes.20:23100000-23200000.baq.20110328.vcf, freebayes.20:23200000-23300000.baq.20110328.vcf, freebayes.20:23300000-23400000.baq.20110328.vcf, freebayes.20:23400000-23500000.baq.20110328.vcf, freebayes.20:23500000-23600000.baq.20110328.vcf, freebayes.20:23600000-23700000.baq.20110328.vcf, freebayes.20:23700000-23800000.baq.20110328.vcf, freebayes.20:23800000-23900000.baq.20110328.vcf, freebayes.20:23900000-24000000.baq.20110328.vcf, freebayes.20:24000000-24100000.baq.20110328.vcf, freebayes.20:24100000-24200000.baq.20110328.vcf, freebayes.20:24200000-24300000.baq.20110328.vcf, freebayes.20:24300000-24400000.baq.20110328.vcf, freebayes.20:24400000-24500000.baq.20110328.vcf, freebayes.20:24500000-24600000.baq.20110328.vcf, freebayes.20:24600000-24700000.baq.20110328.vcf, freebayes.20:24700000-24800000.baq.20110328.vcf, freebayes.20:24800000-24900000.baq.20110328.vcf, freebayes.20:24900000-25000000.baq.20110328.vcf, freebayes.20:25000000-25100000.baq.20110328.vcf, freebayes.20:25100000-25200000.baq.20110328.vcf, freebayes.20:25200000-25300000.baq.20110328.vcf, freebayes.20:25300000-25400000.baq.20110328.vcf, freebayes.20:25400000-25500000.baq.20110328.vcf, freebayes.20:25500000-25600000.baq.20110328.vcf, freebayes.20:25600000-25700000.baq.20110328.vcf, freebayes.20:25700000-25800000.baq.20110328.vcf, freebayes.20:25800000-25900000.baq.20110328.vcf, freebayes.20:25900000-26000000.baq.20110328.vcf, freebayes.20:26000000-26100000.baq.20110328.vcf, freebayes.20:26100000-26200000.baq.20110328.vcf, freebayes.20:26200000-26300000.baq.20110328.vcf, freebayes.20:26300000-26400000.baq.20110328.vcf, freebayes.20:26400000-26500000.baq.20110328.vcf, freebayes.20:26500000-26600000.baq.20110328.vcf, freebayes.20:26600000-26700000.baq.20110328.vcf, freebayes.20:26700000-26800000.baq.20110328.vcf, freebayes.20:26800000-26900000.baq.20110328.vcf, freebayes.20:26900000-27000000.baq.20110328.vcf, freebayes.20:27000000-27100000.baq.20110328.vcf, freebayes.20:27100000-27200000.baq.20110328.vcf, freebayes.20:27200000-27300000.baq.20110328.vcf, freebayes.20:27300000-27400000.baq.20110328.vcf, freebayes.20:27400000-27500000.baq.20110328.vcf, freebayes.20:27500000-27600000.baq.20110328.vcf, freebayes.20:27600000-27700000.baq.20110328.vcf, freebayes.20:27700000-27800000.baq.20110328.vcf, freebayes.20:27800000-27900000.baq.20110328.vcf, freebayes.20:27900000-28000000.baq.20110328.vcf, freebayes.20:28000000-28100000.baq.20110328.vcf, freebayes.20:28100000-28200000.baq.20110328.vcf, freebayes.20:28200000-28300000.baq.20110328.vcf, freebayes.20:28300000-28400000.baq.20110328.vcf, freebayes.20:28400000-28500000.baq.20110328.vcf, freebayes.20:28500000-28600000.baq.20110328.vcf, freebayes.20:28600000-28700000.baq.20110328.vcf, freebayes.20:28700000-28800000.baq.20110328.vcf, freebayes.20:28800000-28900000.baq.20110328.vcf, freebayes.20:28900000-29000000.baq.20110328.vcf, freebayes.20:29000000-29100000.baq.20110328.vcf, freebayes.20:29100000-29200000.baq.20110328.vcf, freebayes.20:29200000-29300000.baq.20110328.vcf, freebayes.20:29300000-29400000.baq.20110328.vcf, freebayes.20:29400000-29500000.baq.20110328.vcf, freebayes.20:29500000-29600000.baq.20110328.vcf, freebayes.20:29600000-29700000.baq.20110328.vcf, freebayes.20:29700000-29800000.baq.20110328.vcf, freebayes.20:29800000-29900000.baq.20110328.vcf, freebayes.20:29900000-30000000.baq.20110328.vcf, freebayes.20:30000000-30100000.baq.20110328.vcf, freebayes.20:30100000-30200000.baq.20110328.vcf, freebayes.20:30200000-30300000.baq.20110328.vcf, freebayes.20:30300000-30400000.baq.20110328.vcf, freebayes.20:30400000-30500000.baq.20110328.vcf, freebayes.20:30500000-30600000.baq.20110328.vcf, freebayes.20:30600000-30700000.baq.20110328.vcf, freebayes.20:30700000-30800000.baq.20110328.vcf, freebayes.20:30800000-30900000.baq.20110328.vcf, freebayes.20:30900000-31000000.baq.20110328.vcf, freebayes.20:31000000-31100000.baq.20110328.vcf, freebayes.20:31100000-31200000.baq.20110328.vcf, freebayes.20:31200000-31300000.baq.20110328.vcf, freebayes.20:31300000-31400000.baq.20110328.vcf, freebayes.20:31400000-31500000.baq.20110328.vcf, freebayes.20:31500000-31600000.baq.20110328.vcf, freebayes.20:31600000-31700000.baq.20110328.vcf, freebayes.20:31700000-31800000.baq.20110328.vcf, freebayes.20:31800000-31900000.baq.20110328.vcf, freebayes.20:31900000-32000000.baq.20110328.vcf, freebayes.20:32000000-32100000.baq.20110328.vcf, freebayes.20:32100000-32200000.baq.20110328.vcf, freebayes.20:32200000-32300000.baq.20110328.vcf, freebayes.20:32300000-32400000.baq.20110328.vcf, freebayes.20:32400000-32500000.baq.20110328.vcf, freebayes.20:32500000-32600000.baq.20110328.vcf, freebayes.20:32600000-32700000.baq.20110328.vcf, freebayes.20:32700000-32800000.baq.20110328.vcf, freebayes.20:32800000-32900000.baq.20110328.vcf, freebayes.20:32900000-33000000.baq.20110328.vcf, freebayes.20:33000000-33100000.baq.20110328.vcf, freebayes.20:33100000-33200000.baq.20110328.vcf, freebayes.20:33200000-33300000.baq.20110328.vcf, freebayes.20:33300000-33400000.baq.20110328.vcf, freebayes.20:33400000-33500000.baq.20110328.vcf, freebayes.20:33500000-33600000.baq.20110328.vcf, freebayes.20:33600000-33700000.baq.20110328.vcf, freebayes.20:33700000-33800000.baq.20110328.vcf, freebayes.20:33800000-33900000.baq.20110328.vcf, freebayes.20:33900000-34000000.baq.20110328.vcf, freebayes.20:34000000-34100000.baq.20110328.vcf, freebayes.20:34100000-34200000.baq.20110328.vcf, freebayes.20:34200000-34300000.baq.20110328.vcf, freebayes.20:34300000-34400000.baq.20110328.vcf, freebayes.20:34400000-34500000.baq.20110328.vcf, freebayes.20:34500000-34600000.baq.20110328.vcf, freebayes.20:34600000-34700000.baq.20110328.vcf, freebayes.20:34700000-34800000.baq.20110328.vcf, freebayes.20:34800000-34900000.baq.20110328.vcf, freebayes.20:34900000-35000000.baq.20110328.vcf, freebayes.20:35000000-35100000.baq.20110328.vcf, freebayes.20:35100000-35200000.baq.20110328.vcf, freebayes.20:35200000-35300000.baq.20110328.vcf, freebayes.20:35300000-35400000.baq.20110328.vcf, freebayes.20:35400000-35500000.baq.20110328.vcf, freebayes.20:35500000-35600000.baq.20110328.vcf, freebayes.20:35600000-35700000.baq.20110328.vcf, freebayes.20:35700000-35800000.baq.20110328.vcf, freebayes.20:35800000-35900000.baq.20110328.vcf, freebayes.20:35900000-36000000.baq.20110328.vcf, freebayes.20:36000000-36100000.baq.20110328.vcf, freebayes.20:36100000-36200000.baq.20110328.vcf, freebayes.20:36200000-36300000.baq.20110328.vcf, freebayes.20:36300000-36400000.baq.20110328.vcf, freebayes.20:36400000-36500000.baq.20110328.vcf, freebayes.20:36500000-36600000.baq.20110328.vcf, freebayes.20:36600000-36700000.baq.20110328.vcf, freebayes.20:36700000-36800000.baq.20110328.vcf, freebayes.20:36800000-36900000.baq.20110328.vcf, freebayes.20:36900000-37000000.baq.20110328.vcf, freebayes.20:37000000-37100000.baq.20110328.vcf, freebayes.20:37100000-37200000.baq.20110328.vcf, freebayes.20:37200000-37300000.baq.20110328.vcf, freebayes.20:37300000-37400000.baq.20110328.vcf, freebayes.20:37400000-37500000.baq.20110328.vcf, freebayes.20:37500000-37600000.baq.20110328.vcf, freebayes.20:37600000-37700000.baq.20110328.vcf, freebayes.20:37700000-37800000.baq.20110328.vcf, freebayes.20:37800000-37900000.baq.20110328.vcf, freebayes.20:37900000-38000000.baq.20110328.vcf, freebayes.20:38000000-38100000.baq.20110328.vcf, freebayes.20:38100000-38200000.baq.20110328.vcf, freebayes.20:38200000-38300000.baq.20110328.vcf, freebayes.20:38300000-38400000.baq.20110328.vcf, freebayes.20:38400000-38500000.baq.20110328.vcf, freebayes.20:38500000-38600000.baq.20110328.vcf, freebayes.20:38600000-38700000.baq.20110328.vcf, freebayes.20:38700000-38800000.baq.20110328.vcf, freebayes.20:38800000-38900000.baq.20110328.vcf, freebayes.20:38900000-39000000.baq.20110328.vcf, freebayes.20:39000000-39100000.baq.20110328.vcf, freebayes.20:39100000-39200000.baq.20110328.vcf, freebayes.20:39200000-39300000.baq.20110328.vcf, freebayes.20:39300000-39400000.baq.20110328.vcf, freebayes.20:39400000-39500000.baq.20110328.vcf, freebayes.20:39500000-39600000.baq.20110328.vcf, freebayes.20:39600000-39700000.baq.20110328.vcf, freebayes.20:39700000-39800000.baq.20110328.vcf, freebayes.20:39800000-39900000.baq.20110328.vcf, freebayes.20:39900000-40000000.baq.20110328.vcf, freebayes.20:40000000-40100000.baq.20110328.vcf, freebayes.20:40100000-40200000.baq.20110328.vcf, freebayes.20:40200000-40300000.baq.20110328.vcf, freebayes.20:40300000-40400000.baq.20110328.vcf, freebayes.20:40400000-40500000.baq.20110328.vcf, freebayes.20:40500000-40600000.baq.20110328.vcf, freebayes.20:40600000-40700000.baq.20110328.vcf, freebayes.20:40700000-40800000.baq.20110328.vcf, freebayes.20:40800000-40900000.baq.20110328.vcf, freebayes.20:40900000-41000000.baq.20110328.vcf, freebayes.20:41000000-41100000.baq.20110328.vcf, freebayes.20:41100000-41200000.baq.20110328.vcf, freebayes.20:41200000-41300000.baq.20110328.vcf, freebayes.20:41300000-41400000.baq.20110328.vcf, freebayes.20:41400000-41500000.baq.20110328.vcf, freebayes.20:41500000-41600000.baq.20110328.vcf, freebayes.20:41600000-41700000.baq.20110328.vcf, freebayes.20:41700000-41800000.baq.20110328.vcf, freebayes.20:41800000-41900000.baq.20110328.vcf, freebayes.20:41900000-42000000.baq.20110328.vcf, freebayes.20:42000000-42100000.baq.20110328.vcf, freebayes.20:42100000-42200000.baq.20110328.vcf, freebayes.20:42200000-42300000.baq.20110328.vcf, freebayes.20:42300000-42400000.baq.20110328.vcf, freebayes.20:42400000-42500000.baq.20110328.vcf, freebayes.20:42500000-42600000.baq.20110328.vcf, freebayes.20:42600000-42700000.baq.20110328.vcf, freebayes.20:42700000-42800000.baq.20110328.vcf, freebayes.20:42800000-42900000.baq.20110328.vcf, freebayes.20:42900000-43000000.baq.20110328.vcf, freebayes.20:43000000-43100000.baq.20110328.vcf, freebayes.20:43100000-43200000.baq.20110328.vcf, freebayes.20:43200000-43300000.baq.20110328.vcf, freebayes.20:43300000-43400000.baq.20110328.vcf, freebayes.20:43400000-43500000.baq.20110328.vcf, freebayes.20:43500000-43600000.baq.20110328.vcf, freebayes.20:43600000-43700000.baq.20110328.vcf, freebayes.20:43700000-43800000.baq.20110328.vcf, freebayes.20:43800000-43900000.baq.20110328.vcf, freebayes.20:43900000-44000000.baq.20110328.vcf, freebayes.20:44000000-44100000.baq.20110328.vcf, freebayes.20:44100000-44200000.baq.20110328.vcf, freebayes.20:44200000-44300000.baq.20110328.vcf, freebayes.20:44300000-44400000.baq.20110328.vcf, freebayes.20:44400000-44500000.baq.20110328.vcf, freebayes.20:44500000-44600000.baq.20110328.vcf, freebayes.20:44600000-44700000.baq.20110328.vcf, freebayes.20:44700000-44800000.baq.20110328.vcf, freebayes.20:44800000-44900000.baq.20110328.vcf, freebayes.20:44900000-45000000.baq.20110328.vcf, freebayes.20:45000000-45100000.baq.20110328.vcf, freebayes.20:45100000-45200000.baq.20110328.vcf, freebayes.20:45200000-45300000.baq.20110328.vcf, freebayes.20:45300000-45400000.baq.20110328.vcf, freebayes.20:45400000-45500000.baq.20110328.vcf, freebayes.20:45500000-45600000.baq.20110328.vcf, freebayes.20:45600000-45700000.baq.20110328.vcf, freebayes.20:45700000-45800000.baq.20110328.vcf, freebayes.20:45800000-45900000.baq.20110328.vcf, freebayes.20:45900000-46000000.baq.20110328.vcf, freebayes.20:46000000-46100000.baq.20110328.vcf, freebayes.20:46100000-46200000.baq.20110328.vcf, freebayes.20:46200000-46300000.baq.20110328.vcf, freebayes.20:46300000-46400000.baq.20110328.vcf, freebayes.20:46400000-46500000.baq.20110328.vcf, freebayes.20:46500000-46600000.baq.20110328.vcf, freebayes.20:46600000-46700000.baq.20110328.vcf, freebayes.20:46700000-46800000.baq.20110328.vcf, freebayes.20:46800000-46900000.baq.20110328.vcf, freebayes.20:46900000-47000000.baq.20110328.vcf, freebayes.20:47000000-47100000.baq.20110328.vcf, freebayes.20:47100000-47200000.baq.20110328.vcf, freebayes.20:47200000-47300000.baq.20110328.vcf, freebayes.20:47300000-47400000.baq.20110328.vcf, freebayes.20:47400000-47500000.baq.20110328.vcf, freebayes.20:47500000-47600000.baq.20110328.vcf, freebayes.20:47600000-47700000.baq.20110328.vcf, freebayes.20:47700000-47800000.baq.20110328.vcf, freebayes.20:47800000-47900000.baq.20110328.vcf, freebayes.20:47900000-48000000.baq.20110328.vcf, freebayes.20:48000000-48100000.baq.20110328.vcf, freebayes.20:48100000-48200000.baq.20110328.vcf, freebayes.20:48200000-48300000.baq.20110328.vcf, freebayes.20:48300000-48400000.baq.20110328.vcf, freebayes.20:48400000-48500000.baq.20110328.vcf, freebayes.20:48500000-48600000.baq.20110328.vcf, freebayes.20:48600000-48700000.baq.20110328.vcf, freebayes.20:48700000-48800000.baq.20110328.vcf, freebayes.20:48800000-48900000.baq.20110328.vcf, freebayes.20:48900000-49000000.baq.20110328.vcf, freebayes.20:49000000-49100000.baq.20110328.vcf, freebayes.20:49100000-49200000.baq.20110328.vcf, freebayes.20:49200000-49300000.baq.20110328.vcf, freebayes.20:49300000-49400000.baq.20110328.vcf, freebayes.20:49400000-49500000.baq.20110328.vcf, freebayes.20:49500000-49600000.baq.20110328.vcf, freebayes.20:49600000-49700000.baq.20110328.vcf, freebayes.20:49700000-49800000.baq.20110328.vcf, freebayes.20:49800000-49900000.baq.20110328.vcf, freebayes.20:49900000-50000000.baq.20110328.vcf, freebayes.20:50000000-50100000.baq.20110328.vcf, freebayes.20:50100000-50200000.baq.20110328.vcf, freebayes.20:50200000-50300000.baq.20110328.vcf, freebayes.20:50300000-50400000.baq.20110328.vcf, freebayes.20:50400000-50500000.baq.20110328.vcf, freebayes.20:50500000-50600000.baq.20110328.vcf, freebayes.20:50600000-50700000.baq.20110328.vcf, freebayes.20:50700000-50800000.baq.20110328.vcf, freebayes.20:50800000-50900000.baq.20110328.vcf, freebayes.20:50900000-51000000.baq.20110328.vcf, freebayes.20:51000000-51100000.baq.20110328.vcf, freebayes.20:51100000-51200000.baq.20110328.vcf, freebayes.20:51200000-51300000.baq.20110328.vcf, freebayes.20:51300000-51400000.baq.20110328.vcf, freebayes.20:51400000-51500000.baq.20110328.vcf, freebayes.20:51500000-51600000.baq.20110328.vcf, freebayes.20:51600000-51700000.baq.20110328.vcf, freebayes.20:51700000-51800000.baq.20110328.vcf, freebayes.20:51800000-51900000.baq.20110328.vcf, freebayes.20:51900000-52000000.baq.20110328.vcf, freebayes.20:52000000-52100000.baq.20110328.vcf, freebayes.20:52100000-52200000.baq.20110328.vcf, freebayes.20:52200000-52300000.baq.20110328.vcf, freebayes.20:52300000-52400000.baq.20110328.vcf, freebayes.20:52400000-52500000.baq.20110328.vcf, freebayes.20:52500000-52600000.baq.20110328.vcf, freebayes.20:52600000-52700000.baq.20110328.vcf, freebayes.20:52700000-52800000.baq.20110328.vcf, freebayes.20:52800000-52900000.baq.20110328.vcf, freebayes.20:52900000-53000000.baq.20110328.vcf, freebayes.20:53000000-53100000.baq.20110328.vcf, freebayes.20:53100000-53200000.baq.20110328.vcf, freebayes.20:53200000-53300000.baq.20110328.vcf, freebayes.20:53300000-53400000.baq.20110328.vcf, freebayes.20:53400000-53500000.baq.20110328.vcf, freebayes.20:53500000-53600000.baq.20110328.vcf, freebayes.20:53600000-53700000.baq.20110328.vcf, freebayes.20:53700000-53800000.baq.20110328.vcf, freebayes.20:53800000-53900000.baq.20110328.vcf, freebayes.20:53900000-54000000.baq.20110328.vcf, freebayes.20:54000000-54100000.baq.20110328.vcf, freebayes.20:54100000-54200000.baq.20110328.vcf, freebayes.20:54200000-54300000.baq.20110328.vcf, freebayes.20:54300000-54400000.baq.20110328.vcf, freebayes.20:54400000-54500000.baq.20110328.vcf, freebayes.20:54500000-54600000.baq.20110328.vcf, freebayes.20:54600000-54700000.baq.20110328.vcf, freebayes.20:54700000-54800000.baq.20110328.vcf, freebayes.20:54800000-54900000.baq.20110328.vcf, freebayes.20:54900000-55000000.baq.20110328.vcf, freebayes.20:55000000-55100000.baq.20110328.vcf, freebayes.20:55100000-55200000.baq.20110328.vcf, freebayes.20:55200000-55300000.baq.20110328.vcf, freebayes.20:55300000-55400000.baq.20110328.vcf, freebayes.20:55400000-55500000.baq.20110328.vcf, freebayes.20:55500000-55600000.baq.20110328.vcf, freebayes.20:55600000-55700000.baq.20110328.vcf, freebayes.20:55700000-55800000.baq.20110328.vcf, freebayes.20:55800000-55900000.baq.20110328.vcf, freebayes.20:55900000-56000000.baq.20110328.vcf, freebayes.20:56000000-56100000.baq.20110328.vcf, freebayes.20:56100000-56200000.baq.20110328.vcf, freebayes.20:56200000-56300000.baq.20110328.vcf, freebayes.20:56300000-56400000.baq.20110328.vcf, freebayes.20:56400000-56500000.baq.20110328.vcf, freebayes.20:56500000-56600000.baq.20110328.vcf, freebayes.20:56600000-56700000.baq.20110328.vcf, freebayes.20:56700000-56800000.baq.20110328.vcf, freebayes.20:56800000-56900000.baq.20110328.vcf, freebayes.20:56900000-57000000.baq.20110328.vcf, freebayes.20:57000000-57100000.baq.20110328.vcf, freebayes.20:57100000-57200000.baq.20110328.vcf, freebayes.20:57200000-57300000.baq.20110328.vcf, freebayes.20:57300000-57400000.baq.20110328.vcf, freebayes.20:57400000-57500000.baq.20110328.vcf, freebayes.20:57500000-57600000.baq.20110328.vcf, freebayes.20:57600000-57700000.baq.20110328.vcf, freebayes.20:57700000-57800000.baq.20110328.vcf, freebayes.20:57800000-57900000.baq.20110328.vcf, freebayes.20:57900000-58000000.baq.20110328.vcf, freebayes.20:58000000-58100000.baq.20110328.vcf, freebayes.20:58100000-58200000.baq.20110328.vcf, freebayes.20:58200000-58300000.baq.20110328.vcf, freebayes.20:58300000-58400000.baq.20110328.vcf, freebayes.20:58400000-58500000.baq.20110328.vcf, freebayes.20:58500000-58600000.baq.20110328.vcf, freebayes.20:58600000-58700000.baq.20110328.vcf, freebayes.20:58700000-58800000.baq.20110328.vcf, freebayes.20:58800000-58900000.baq.20110328.vcf, freebayes.20:58900000-59000000.baq.20110328.vcf, freebayes.20:59000000-59100000.baq.20110328.vcf, freebayes.20:59100000-59200000.baq.20110328.vcf, freebayes.20:59200000-59300000.baq.20110328.vcf, freebayes.20:59300000-59400000.baq.20110328.vcf, freebayes.20:59400000-59500000.baq.20110328.vcf, freebayes.20:59500000-59600000.baq.20110328.vcf, freebayes.20:59600000-59700000.baq.20110328.vcf, freebayes.20:59700000-59800000.baq.20110328.vcf, freebayes.20:59800000-59900000.baq.20110328.vcf, freebayes.20:59900000-60000000.baq.20110328.vcf, freebayes.20:60000000-60100000.baq.20110328.vcf, freebayes.20:60100000-60200000.baq.20110328.vcf, freebayes.20:60200000-60300000.baq.20110328.vcf, freebayes.20:60300000-60400000.baq.20110328.vcf, freebayes.20:60400000-60500000.baq.20110328.vcf, freebayes.20:60500000-60600000.baq.20110328.vcf, freebayes.20:60600000-60700000.baq.20110328.vcf, freebayes.20:60700000-60800000.baq.20110328.vcf, freebayes.20:60800000-60900000.baq.20110328.vcf, freebayes.20:60900000-61000000.baq.20110328.vcf, freebayes.20:61000000-61100000.baq.20110328.vcf, freebayes.20:61100000-61200000.baq.20110328.vcf, freebayes.20:61200000-61300000.baq.20110328.vcf, freebayes.20:61300000-61400000.baq.20110328.vcf, freebayes.20:61400000-61500000.baq.20110328.vcf, freebayes.20:61500000-61600000.baq.20110328.vcf, freebayes.20:61600000-61700000.baq.20110328.vcf, freebayes.20:61700000-61800000.baq.20110328.vcf, freebayes.20:61800000-61900000.baq.20110328.vcf, freebayes.20:61900000-62000000.baq.20110328.vcf, freebayes.20:62000000-62100000.baq.20110328.vcf, freebayes.20:62100000-62200000.baq.20110328.vcf, freebayes.20:62200000-62300000.baq.20110328.vcf, freebayes.20:62300000-62400000.baq.20110328.vcf, freebayes.20:62400000-62500000.baq.20110328.vcf, freebayes.20:62500000-62600000.baq.20110328.vcf, freebayes.20:62600000-62700000.baq.20110328.vcf, freebayes.20:62700000-62800000.baq.20110328.vcf, freebayes.20:62800000-62900000.baq.20110328.vcf, freebayes.20:62900000-63000000.baq.20110328.vcf, freebayes.20:63000000-63025520.baq.20110328.vcf +#CHROM POS ID REF ALT QUAL FILTER INFO +20 458502 . G GA 4567.01 PASS AA=20;AB=0.61111;ABA=14;ABP=6.8707;ABR=22;AC=38;AF=0.0544;AN=698;BL=374;BR=1129;BVAR;BaseQRankSum=13.364;DP=15979;DP4=1882,2188,45,37;Dels=0.00;EL=5;EPP=13.868;ER=15;FR;FS=6.503;HETAR=11;HOMA=2;HOMR=985;HP=1;HPLen=2;HR=2;HRun=0;HU=G;INDEL;INS;InbreedingCoeff=0.0157;LEN=1;LRB=0.50233;LRBP=826.56;MQ=66.16;MQ0Fraction=0.0110;MQM=70.5;MQRankSum=-3.158;NF;NR;NS=998;PP;PV4=0.15,1,0.42,0.15;RA=3173;RL=1;RPP=38.188;RR=19;RUN=1;ReadPosRankSum=-2.346;SAB=0.7;SAF=14;SAP=9.959;SAR=6;SC=GGGCGTGGTGGTGCATGTAAT;SRB=0.50047;SRF=1588;SRP=3.0165;SRR=1585;TC;TR=9;TU=GGT;VQSLOD=10.0079;set=Intersection;sumGLbyD=23.94 +20 539571 . TG T 18546 PASS AA=71;AB=0.92482;ABA=63;ABP=1316.6;ABR=775;AC=42;AF=0.03512;AN=1196;BL=3915;BR=252;BVAR;BaseQRankSum=0.556;DEL;DP=10073;Dels=0.01;EL=47;EPP=19.189;ER=24;FS=2.124;HETAR=290;HOMA=156;HOMR=570;HRun=1;InbreedingCoeff=0.0620;LEN=1;LRB=0.87905;LRBP=6995.1;MQ0=0;MQ0Fraction=0.0000;MQM=127.99;MQRankSum=0.410;NS=1016;RA=3090;RL=71;RPP=157.18;RR=0;RUN=1;ReadPosRankSum=-11.038;SAB=0.66197;SAF=47;SAP=19.189;SAR=24;SRB=0.55016;SRF=1700;SRP=70.544;SRR=1390;VQSLOD=2.6772;set=filterInVQSR-2of5;sumGLbyD=4.71 +20 573764 . TA T 591.51 PASS AC=91;AF=0.1987;AN=458;BaseQRankSum=0.137;DP=519;FS=3.153;HRun=1;HaplotypeScore=14.0744;InbreedingCoeff=0.1460;MQ=48.16;MQ0=26;MQ0Fraction=0.0501;MQRankSum=-1.636;QD=3.63;ReadPosRankSum=-4.140;SB=-408.14;VQSLOD=5.2458;set=VQSR +20 766143 . C A,CATCTGGTA 5521.70 PASS AA=24;AB=0.5;ABA=18;ABP=3.0103;ABR=18;AC=14;AF=0.0289;AF1=0.02038;AN=484;BL=655;BR=1542;BVAR;BaseQRankSum=3.801;CI95=0.01549,0.02655;DP=11749;DP4=2222,1998,14,8;Dels=0.00;EL=9;EPP=6.2675;ER=15;FQ=999;FR;FS=2.941;HETAR=9;HOMA=4;HOMR=901;HP=2;HPLen=2;HR=1;HRun=0;HU=A;INDEL;INS;InbreedingCoeff=0.0515;LEN=8;LRB=0.40373;LRBP=780.64;MQ=56.81;MQ0Fraction=0.0253;MQM=22.167;MQRankSum=-4.809;NF;NR;NS=914;PP;PV4=0.39,1,5.8e-07,1;RA=3093;RL=6;RPP=16.039;RR=18;RUN=1;ReadPosRankSum=-2.827;SAB=0.625;SAF=15;SAP=6.2675;SAR=9;SC=GCTTTAAATTCATCTGGTACT;SRB=0.61623;SRF=1906;SRP=365.95;SRR=1187;TC;TR=1;TU=A;VQSLOD=7.0268;set=Intersection;sumGLbyD=50.23 +20 997076 rs11467490 CTG C 15379.78 PASS AA=195;AB=0.59878;ABA=132;ABP=30.896;ABR=197;AC=173;AF=0.14562;AN=1188;BL=7664;BR=7309;BVAR;BaseQRankSum=21.853;DB;DEL;DP=27127;DP4=1801,2002,241,282;Dels=0.13;EL=100;EPP=3.2887;ER=95;FQ=999;FR;FS=6.591;HETAR=77;HOMA=42;HOMR=815;HP=1;HPLen=1;HR=1;HRun=0;HU=T;INDEL;InbreedingCoeff=0.1284;LEN=2;LRB=0.023709;LRBP=21.287;MQ=61.18;MQ0Fraction=0.0214;MQM=43.041;MQRankSum=6.886;NF;NR;NS=934;PP;PV4=0.61,1.5e-78,1,1;RA=2800;RL=120;RPP=25.56;RR=75;RUN=1;ReadPosRankSum=4.504;SAB=0.62051;SAF=121;SAP=27.609;SAR=74;SC=CAGCTAATTACTGTATTTTTA;SRB=0.49821;SRF=1395;SRP=3.0879;SRR=1405;TC;TR=1;TU=T;VQSLOD=8.9396;set=Intersection;sumGLbyD=16.76 +20 1042261 rs10597473 CCCTG C 168658.05 PASS AA=4481;AB=0.29043;ABA=2128;ABP=1147.1;ABR=871;AC=1172;AF=0.97830;AN=1198;BL=169975;BR=194027;BVAR;BaseQRankSum=4.599;DB;DEL;DP=29418;DP4=29,47,1441,2403;Dels=0.84;EL=2358;EPP=29.772;ER=2123;FR;FS=9.122;HETAR=482;HOMA=559;HOMR=30;HP=2;HPLen=3;HR=3;HRun=0;HU=C;INDEL;InbreedingCoeff=0.0470;LEN=4;LRB=0.066077;LRBP=3454.1;MQ=104.58;MQ0=4;MQ0Fraction=0.0014;MQM=58.257;MQRankSum=-3.368;NF;NR;NS=1071;PP;PV4=0.91,6.8e-09,2.8e-05,1;RA=1039;RL=2088;RPP=48.09;RR=2393;RUN=1;ReadPosRankSum=5.288;SAB=0.41442;SAF=1857;SAP=288.09;SAR=2624;SC=CCAAACCCAACCCTGCCTGGC;SRB=0.48893;SRF=508;SRP=4.1159;SRR=531;TC;TR=8;TU=CCTG;VQSLOD=8.5148;dbSNP=120;set=Intersection;sumGLbyD=59.79 +20 1046297 rs33956316 C CT,CTT,CTTT 17698 PASS ABR=408;AC=432,79,230;AF=0.39779,0.07274,0.21179;BVAR;BaseQRankSum=-8.413;DB;DP=15649;DP4=147,199,534,436;FR;FS=11.580;HOMA=97;HOMR=457;HP=20;HR=16;HU=T;HaplotypeScore=16.0590;INDEL;INS;InbreedingCoeff=0.6018;KGPilot123;MQ0=19;MQ0Fraction=0.0093;MQRankSum=7.992;NF;NR;NS=767;PP;PV4=6e-05,1,1,1;QD=8.18;RA=1183;RUN=1;ReadPosRankSum=2.684;SB=-6384.08;SC=GGAAAATTTTCTTTTTTTTTT;SRB=0.40913;SRF=484;SRP=87.859;SRR=699;TC;TR=16;TU=T;VQSLOD=8.4941;dbSNP=132;set=Intersection +20 1405740 . T TA 257.28 PASS AF=0.0188;BaseQRankSum=-0.745;DP=3769;Dels=0.00;FS=0.742;HPLen=9;HRun=9;InbreedingCoeff=0.0462;MQ0Fraction=0.0151;MQRankSum=-0.090;ReadPosRankSum=-1.582;VQSLOD=5.6502;set=Intersection;sumGLbyD=6.94 +20 1690501 . TC T 27928 PASS AA=108;AB=0.91372;ABA=100;ABP=1726.1;ABR=1059;AC=35;AF=0.02966;AN=1180;BL=593;BR=6973;BVAR;BaseQRankSum=7.567;DEL;DP=10612;Dels=0.01;EL=50;EPP=4.2971;ER=58;FS=0.000;HETAR=378;HOMA=184;HOMR=477;HRun=1;InbreedingCoeff=0.0495;LEN=1;LRB=0.84325;LRBP=11685;MQ0=0;MQ0Fraction=0.0000;MQM=87.361;MQRankSum=4.088;NS=1045;RA=3125;RL=3;RPP=212.2;RR=105;RUN=1;ReadPosRankSum=-13.096;SAB=0.56481;SAF=61;SAP=6.9511;SAR=47;SRB=0.51776;SRF=1618;SRP=11.572;SRR=1507;VQSLOD=3.9824;set=filterInVQSR-2of5;sumGLbyD=4.07 +20 1948787 . GTC G,GTCTC 78.70 PASS AC=18,18;AF=0.01466,0.01466;AN=1228;BaseQRankSum=3.894;DP=19030;DP4=1874,1916,21,20;FR;FS=0.767;HP=2;HPLen=1;HR=1;HU=T;HaplotypeScore=16.5619;INDEL;InbreedingCoeff=0.2332;MQ0=0;MQ0Fraction=0.0000;MQRankSum=2.080;NF;NR;PP;PV4=0.88,1,0.094,0.47;QD=0.28;ReadPosRankSum=0.822;SB=-172.46;SC=CTCGACCCCTGTCTCTCTCTC;TC;TR=13;TU=CT;VQSLOD=3.7405;set=filterInVQSR-2of5 +20 1991285 rs113891396 TAA T,TA,TAAA,TAAAAA,TAAAAAA,TAAAAAAA,TAAAAAAAA 39235.36 PASS AC=5,251,20,39,188,52,79;AF=0.0056,0.2789,0.0222,0.0433,0.2089,0.0578,0.0878;AN=900;BVAR;BaseQRankSum=1.124;DB;DEL;DP=54393;DP4=906,772,824,579;Dels=0.21;FR;FS=37.525;HP=12;HR=12;HRun=12;HU=A;INDEL;INS;InbreedingCoeff=0.6891;MQ=76.81;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-6.593;NF;NR;PP;PV4=0.0087,1,6.3e-19,1;RUN=1;ReadPosRankSum=-2.184;SC=ATCTGCCACTTAAAAAAAAAA;TC;TR=12;TU=A;VQSLOD=9.0007;dbSNP=132;set=Intersection;sumGLbyD=11.45 +20 2355911 . TA T 11723 PASS AA=79;AB=0.9393;ABA=57;ABP=1577;ABR=882;AC=38;AF=0.0411;AN=924;BL=644;BR=5536;BVAR;BaseQRankSum=2.434;DEL;DP=9687;Dels=0.00;EL=45;EPP=6.3362;ER=34;FS=3.043;HETAR=321;HOMA=182;HOMR=555;HRun=5;InbreedingCoeff=0.0412;LEN=1;LRB=0.79159;LRBP=8411.9;MQ0=0;MQ0Fraction=0.0000;MQM=70.848;MQRankSum=0.137;NS=1058;RA=3415;RL=3;RPP=149.49;RR=76;RUN=1;ReadPosRankSum=-12.116;SAB=0.44304;SAF=35;SAP=5.2367;SAR=44;SRB=0.43572;SRF=1488;SRP=125.55;SRR=1927;VQSLOD=3.8910;set=filterInVQSR-2of5;sumGLbyD=4.88 +20 2512346 . A AC 11046.11 PASS AC=673;AF=0.57034;AN=1180;BaseQRankSum=19.890;DP=2717;FS=26.809;HRun=0;HaplotypeScore=19.0575;InbreedingCoeff=0.3068;MQ=61.07;MQ0=25;MQ0Fraction=0.0092;MQRankSum=2.745;QD=5.80;ReadPosRankSum=3.139;SB=-4564.39;VQSLOD=4.3252;set=VQSR +20 2597210 rs71329387 TAAAG T 32206.62 PASS AA=689;AB=0.5805;ABA=542;ABP=75.724;ABR=750;AC=253;AF=0.20738;BL=29921;BR=30215;BVAR;BaseQRankSum=20.638;DB;DEL;DP=29293;DP4=1750,1070,405,274;Dels=0.18;EL=345;EPP=3.0135;ER=344;FQ=999;FR;FS=1.827;HETAR=225;HOMA=55;HOMR=783;HP=7;HPLen=4;HR=3;HRun=0;HU=A;INDEL;InbreedingCoeff=0.1419;LEN=4;LRB=0.0048889;LRBP=6.1314;MQ=66.96;MQ0=0;MQ0Fraction=0.0000;MQM=42.925;MQRankSum=-7.105;NF;NR;NS=1063;PP;PV4=0.25,1,9e-20,1;RA=4619;RL=345;RPP=3.0135;RR=344;RUN=1;ReadPosRankSum=2.719;SAB=0.53556;SAF=369;SAP=10.577;SAR=320;SC=GAAAGGAAAATAAAGAAGGAG;SRB=0.52414;SRF=2421;SRP=26.389;SRR=2198;TC;TR=3;TU=A;VQSLOD=9.7974;dbSNP=130;set=Intersection;sumGLbyD=33.30 +20 2771621 rs11479849 GT G,GTT 1605.60 PASS AA=80;AB=0.79825;ABA=69;ABP=267.24;ABR=273;AC=79,91;AF=0.06551,0.07546;AN=1206;BL=2593;BR=3805;BVAR;BaseQRankSum=7.825;DB;DP=9790;Dels=0.04;EL=37;EPP=3.9875;ER=43;FR;FS=4.751;HETAR=62;HOMA=5;HOMR=958;HP=11;HR=11;HRun=11;HU=T;INS;InbreedingCoeff=0.2646;LEN=1;LRB=0.18943;LRBP=501.57;MQ0=0;MQ0Fraction=0.0000;MQM=52.45;MQRankSum=-0.560;NF;NR;NS=1025;PP;RA=3949;RL=29;RPP=16.148;RR=51;RUN=1;ReadPosRankSum=-2.397;SAB=0.525;SAF=42;SAP=3.4446;SAR=38;SC=TCATTTTAACGTTTTTTTTTT;SRB=0.54368;SRF=2147;SRP=68.46;SRR=1802;TC;TR=11;TU=T;VQSLOD=3.5989;set=filterInVQSR-2of5;sumGLbyD=3.92 +20 2891235 . G GT,GTTT 2869.87 PASS AC=236,246;AF=0.2803,0.2922;AN=842;BaseQRankSum=8.979;DP=1067;FS=3.911;HaplotypeScore=20.3595;InbreedingCoeff=0.6511;MQ=44.86;MQ0=114;MQ0Fraction=0.1068;MQRankSum=-2.273;QD=4.00;ReadPosRankSum=-6.601;SB=-991.85;VQSLOD=5.4379;set=VQSR +20 3033550 . TGAG T 2005.90 PASS AA=34;AB=0.51429;ABA=34;ABP=3.1344;ABR=36;AC=22;AF=0.0332;AN=662;BL=1374;BR=1649;BVAR;BaseQRankSum=5.192;DEL;DP=14639;DP4=2271,1492,12,21;Dels=0.02;EL=19;EPP=4.0322;ER=15;FR;FS=16.657;HETAR=17;HOMA=0;HOMR=914;HP=1;HPLen=1;HR=1;HRun=0;HU=G;INDEL;InbreedingCoeff=-0.0454;LEN=3;LRB=0.090969;LRBP=57.333;MQ=53.99;MQ0Fraction=0.0304;MQM=46.735;MQRankSum=1.938;NF;NR;NS=931;PP;PV4=0.0068,9.4e-05,1,1;RA=2985;RL=11;RPP=12.207;RR=23;RUN=1;ReadPosRankSum=-0.466;SAB=0.41176;SAF=14;SAP=5.3095;SAR=20;SC=CTTGGGAGGCTGAGGTGGGAG;SRB=0.62781;SRF=1874;SRP=426.52;SRR=1111;TC;TR=1;TU=G;VQSLOD=8.9194;set=Intersection;sumGLbyD=24.41 +20 3635363 . T TG 999 PASS AA=16;AB=0.61905;ABA=16;ABP=8.1805;ABR=26;AF=0.0141;AF1=0.01726;AN=708;BL=614;BR=523;BVAR;BaseQRankSum=2.337;CI95=0.01106,0.02434;DP=14594;DP4=2128,2038,6,10;Dels=0.00;EL=7;EPP=3.5532;ER=9;FQ=999;FR;FS=5.579;HETAR=8;HOMA=0;HOMR=1055;HP=3;HPLen=3;HR=3;HRun=3;HU=G;INDEL;INS;InbreedingCoeff=0.0633;LEN=1;LRB=0.080035;LRBP=18.826;MQ=100.74;MQ0=0;MQ0Fraction=0.0000;MQM=51.312;MQRankSum=2.569;NF;NR;NS=1063;PP;PV4=0.32,1,1,1;RA=5628;RL=9;RPP=3.5532;RR=7;RUN=1;ReadPosRankSum=-1.941;SAB=0.375;SAF=6;SAP=5.1818;SAR=10;SC=AAGGTTCGCTTGGGTGTGGAG;SRB=0.4984;SRF=2805;SRP=3.1353;SRR=2823;TC;TR=3;TU=G;VQSLOD=9.3275;set=Intersection;sumGLbyD=11.68 +20 3873327 rs61519218 A AAG 683.85 PASS AC=25;AF=0.0313;AN=800;BaseQRankSum=4.839;DB;DP=1718;FS=4.265;HRun=0;HaplotypeScore=20.5789;InbreedingCoeff=0.1055;MQ=53.70;MQ0=37;MQ0Fraction=0.0215;MQRankSum=2.468;QD=6.30;ReadPosRankSum=4.254;SB=-403.21;VQSLOD=6.1858;set=VQSR +20 4028835 . GC G 2511.30 PASS AA=66;AB=0.56954;ABA=65;ABP=9.3521;ABR=86;AC=22;AF=0.01836;AN=1198;BL=2303;BR=2463;BVAR;BaseQRankSum=7.621;DEL;DP=22795;DP4=1714,2774,22,37;Dels=0.02;EL=34;EPP=3.1419;ER=32;FQ=999;FR;FS=2.095;HETAR=21;HOMA=0;HOMR=1050;HP=2;HPLen=2;HR=2;HRun=2;HU=C;INDEL;InbreedingCoeff=0.0125;LEN=1;LRB=0.033571;LRBP=14.674;MQ=108.09;MQ0=0;MQ0Fraction=0.0000;MQM=53.318;MQRankSum=5.257;NF;NR;NS=1071;PP;PV4=1,5.4e-13,1,0.075;RA=6185;RL=36;RPP=4.1947;RR=30;RUN=1;ReadPosRankSum=-1.059;SAB=0.45455;SAF=30;SAP=4.1947;SAR=36;SC=TGCTGTCACTGCCTTCTCCTA;SRB=0.42118;SRF=2605;SRP=336.76;SRR=3580;TC;TR=2;TU=C;VQSLOD=10.2409;set=Intersection;sumGLbyD=12.71 +20 4039609 rs67812039 G GA 43457 PASS AA=909;AB=0.54639;ABA=572;ABP=26.583;ABR=689;AC=302;AF=0.3455;AN=874;BL=37070;BR=38211;BVAR;BaseQRankSum=20.147;DB;DP=25595;DP4=1483,1374,528,542;Dels=0.00;EL=467;EPP=4.5033;ER=442;FQ=999;FR;FS=5.441;HETAR=243;HOMA=127;HOMR=608;HP=4;HPLen=3;HR=3;HRun=3;HU=A;INDEL;INS;InbreedingCoeff=0.1388;LEN=1;LRB=0.015157;LRBP=40.563;MQ=119.50;MQ0=0;MQ0Fraction=0.0000;MQM=83.197;MQRankSum=1.080;NF;NR;NS=978;PP;PV4=0.16,1,3.6e-12,1;RA=3033;RL=443;RPP=4.274;RR=466;RUN=1;ReadPosRankSum=-1.000;SAB=0.32233;SAF=293;SAP=252.24;SAR=616;SC=TATGTTGGGAGAAATATCAGT;SRB=0.38378;SRF=1164;SRP=358.85;SRR=1869;TC;TR=4;TU=AG;VQSLOD=9.9146;dbSNP=130;set=Intersection;sumGLbyD=16.79 +20 4390056 . TC T 49312 PASS AA=91;AB=0.94353;ABA=86;ABP=2605.4;ABR=1437;AC=39;AF=0.03160;AN=1234;BL=6823;BR=731;BVAR;BaseQRankSum=2.727;DEL;DP=13149;Dels=0.00;EL=41;EPP=4.9431;ER=50;FS=4.002;HETAR=465;HOMA=313;HOMR=292;HRun=3;InbreedingCoeff=0.0326;LEN=1;LRB=0.80646;LRBP=10671;MQ0=0;MQ0Fraction=0.0000;MQM=69.824;MQRankSum=-0.903;NS=1073;RA=3078;RL=89;RPP=183.62;RR=2;RUN=1;ReadPosRankSum=-12.526;SAB=0.45055;SAF=41;SAP=4.9431;SAR=50;SRB=0.52567;SRF=1618;SRP=20.622;SRR=1460;VQSLOD=4.3235;set=Intersection;sumGLbyD=3.53 +20 4474622 . TA AA,T,TAA,TAAA,TAAAA 94522.28 PASS ABR=114;AC=38,68,16,900;AF=0.03333,0.05965,0.01404,0.78947;AN=1140;BVAR;BaseQRankSum=9.741;DB;DP=16656;Dels=0.00;FR;FS=2.355;HOMA=3;HOMR=936;HP=10;HPLen=10;HR=10;HRun=10;HU=A;INS;InbreedingCoeff=0.4516;MQ0=2;MQ0Fraction=0.0008;MQRankSum=-4.096;NF;NR;NS=980;PP;RA=3766;RUN=1;ReadPosRankSum=2.380;SC=AGAAAAAAATTAAAAAAAAAA;SRB=0.49734;SRF=1873;SRP=3.2409;SRR=1893;TC;TR=10;TU=A;VQSLOD=8.8186;set=Intersection;sumGLbyD=38.79 +20 4824911 . AC A 41998.70 PASS AC=1172;AF=0.97342;AN=1204;BaseQRankSum=8.604;DP=3615;FS=9.934;HRun=1;HaplotypeScore=39.6843;InbreedingCoeff=0.0980;MQ=129.80;MQ0=1;MQ0Fraction=0.0003;MQRankSum=3.378;QD=11.62;ReadPosRankSum=6.967;SB=-16955.28;VQSLOD=4.2689;set=VQSR +20 4839897 rs35881880 TAA T,TA,TAAA,TAAAAA 3906.80 PASS AC=12,95,137,189;AF=0.01024,0.08106,0.11689,0.16126;AN=1172;BVAR;BaseQRankSum=15.271;DB;DEL;DP=15105;Dels=0.04;FR;FS=43.567;HP=19;HR=13;HRun=13;HU=A;INS;InbreedingCoeff=0.5716;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-2.569;NF;NR;PP;RUN=1;ReadPosRankSum=-13.794;SC=TGTTAAAAAATAAAAAAAAAA;TC;TR=13;TU=A;VQSLOD=8.1773;set=Intersection;sumGLbyD=3.77 +20 5071386 . AT A 45200.27 PASS AC=685;AF=0.7495;AN=914;BaseQRankSum=11.006;DP=2725;FS=8.133;HRun=3;HaplotypeScore=50.5496;InbreedingCoeff=0.2364;MQ=81.40;MQ0=0;MQ0Fraction=0.0000;MQRankSum=2.411;QD=18.51;ReadPosRankSum=3.429;SB=-22405.85;VQSLOD=4.2872;set=VQSR +20 5507414 . G GCC 439.08 PASS AC=23;AF=0.01876;AN=1226;BaseQRankSum=3.051;DP=3023;FS=3.636;HRun=1;HaplotypeScore=30.3104;InbreedingCoeff=0.0204;MQ=112.09;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-2.065;QD=2.85;ReadPosRankSum=-2.709;SB=-302.22;VQSLOD=4.4311;set=VQSR +20 5609676 . GA G,GAA 799.89 PASS AA=42;AB=0.79096;ABA=37;ABP=133.16;ABR=140;AC=43,65;AF=0.03607,0.05453;AF1=0.02826;AN=1192;BL=1360;BR=2334;BVAR;BaseQRankSum=5.069;CI95=0.01242,0.04037;DP=15610;DP4=1548,2441,21,30;Dels=0.02;EL=18;EPP=4.8716;ER=24;FQ=12.1;FR;FS=0.000;HETAR=36;HOMA=1;HOMR=991;HP=13;HPLen=10;HR=10;HRun=10;HU=A;INDEL;INS;InbreedingCoeff=0.2001;LEN=1;LRB=0.26367;LRBP=560.68;MQ=63.29;MQ0Fraction=0.0003;MQM=44.143;MQRankSum=1.755;NF;NR;NS=1028;PP;PV4=0.77,1,0.0087,0.0053;RA=4114;RL=15;RPP=10.455;RR=27;RUN=1;ReadPosRankSum=-2.978;SAB=0.5;SAF=21;SAP=3.0103;SAR=21;SC=AAAAAAGAAAGAAAAAAAAAA;SRB=0.39742;SRF=1635;SRP=379;SRR=2479;TC;TR=11;TU=AAAG;VQSLOD=4.1229;set=filterInVQSR-2of5;sumGLbyD=7.95 +20 5736211 rs35303106 CT C,CTT 4384.40 PASS AA=117;AB=0.71499;ABA=116;ABP=166.4;ABR=291;AC=32,145;AF=0.02712,0.12288;AN=1180;BL=5556;BR=4901;BVAR;BaseQRankSum=2.708;DB;DP=9157;Dels=0.01;EL=54;EPP=4.5136;ER=63;FR;FS=2.802;HETAR=79;HOMA=1;HOMR=837;HP=16;HR=11;HRun=11;HU=T;INS;InbreedingCoeff=0.1903;LEN=1;LRB=0.062637;LRBP=92.1;MQ0Fraction=0.0273;MQM=48.932;MQRankSum=3.654;NF;NR;NS=917;PP;RA=2785;RL=79;RPP=34.209;RR=38;RUN=1;ReadPosRankSum=0.795;SAB=0.5641;SAF=66;SAP=7.1862;SAR=51;SC=TTTTCTTTTTCTTTTTTTTTT;SRB=0.41795;SRF=1164;SRP=165.85;SRR=1621;TC;TR=11;TU=T;VQSLOD=5.0895;set=Intersection;sumGLbyD=4.66 +20 5898626 rs34483659 CAAA C,CA,CAA,CAAAAA 1140.16 PASS ABR=34;AC=19,98,56,199;AF=0.0227,0.1172,0.0670,0.2380;AF1=0.08519;BVAR;BaseQRankSum=5.049;CI95=0.03727,0.1273;DB;DEL;DP=5091;DP4=539,408,121,123;FQ=4.43;FR;FS=5.701;HOMA=64;HOMR=156;HP=19;HR=18;HU=A;HaplotypeScore=11.5333;INDEL;InbreedingCoeff=0.7405;MQ0=117;MQ0Fraction=0.0986;MQRankSum=6.290;NF;NR;NS=240;PP;PV4=0.043,1,1,0.0087;QD=1.22;RA=204;RUN=1;ReadPosRankSum=-2.684;SB=-1015.09;SC=ACTAAAAATACAAAAAAAAAA;SRB=0.35294;SRF=72;SRP=41.33;SRR=132;TC;TR=18;TU=A;VQSLOD=4.1696;set=filterInVQSR-2of5 +20 5975126 rs10541892 C CAG 504.78 PASS AC=79;AF=0.07004;AN=1128;BaseQRankSum=10.498;DB;DP=2050;FS=38.228;HRun=0;HaplotypeScore=14.1426;InbreedingCoeff=-0.0053;MQ=60.40;MQ0=80;MQ0Fraction=0.0390;MQRankSum=5.098;QD=1.63;ReadPosRankSum=-4.851;SB=-590.69;VQSLOD=4.8517;set=VQSR +20 5992611 . G GT 799.56 PASS AA=39;AB=0.8301;ABA=35;ABP=197.98;ABR=171;AC=13;AF=0.0183;AN=712;BL=1164;BR=1566;BVAR;BaseQRankSum=1.914;DP=9561;Dels=0.01;EL=16;EPP=5.7386;ER=23;FS=0.739;HETAR=32;HOMA=0;HOMR=1024;HRun=9;INS;InbreedingCoeff=0.0339;LEN=1;LRB=0.14725;LRBP=131.55;MQ0=0;MQ0Fraction=0.0000;MQM=97.231;MQRankSum=0.764;NS=1056;RA=5204;RL=16;RPP=5.7386;RR=23;RUN=1;ReadPosRankSum=-1.169;SAB=0.69231;SAF=27;SAP=15.538;SAR=12;SRB=0.56399;SRF=2935;SRP=188.09;SRR=2269;VQSLOD=4.6516;set=Intersection;sumGLbyD=5.96 +20 6040983 rs11087710 A AAAAAAGAG,AAAAAGAG,AAAAGAG,AAAAGAGAG,AAAGAG,AAAGAGAG,AAGAG,AAGAGAG,AG,AGAG,AGAGAG 66894.55 PASS ABR=468;AC=80,9,20,136,31,91,33,29,9,3,5;AF=0.0980,0.0110,0.0245,0.1667,0.0380,0.1115,0.0404,0.0355,0.0110,0.0037,0.0061;AN=816;BVAR;BaseQRankSum=-12.470;DB;DP=38726;DP4=426,611,310,472;Dels=0.00;FQ=999;FR;FS=6.635;HOMA=110;HOMR=506;HP=14;HR=15;HRun=0;HU=A;INDEL;INS;InbreedingCoeff=0.8291;KGPilot123;MQ=54.22;MQ0Fraction=0.0168;MQRankSum=-5.329;NF;NR;NS=861;PP;PV4=0.56,1,6.9e-09,0.31;RA=1828;RUN=1;ReadPosRankSum=-7.857;SC=AAAAAAAAAAAAGAGAGAGAG;SRB=0.62418;SRF=1141;SRP=247.85;SRR=687;TC;TR=15;TU=A;VQSLOD=9.0574;dbSNP=131;set=Intersection;sumGLbyD=36.72 +20 6903392 . TC CC,T 999 PASS AF=0.0000;AF1=0.01192;CI95=0.008547,0.01709;DP=10440;DP4=2544,2062,9,11;Dels=0.01;FQ=999;FR;HP=2;HPLen=3;HR=3;HRun=2;HU=T;INDEL;InbreedingCoeff=0.0324;MQ=62.78;MQ0=2;MQ0Fraction=0.0009;NF;NR;PP;PV4=0.38,0.0069,0.36,0.41;QD=8.05;SB=-320.13;SC=TTATTTTCTTTCCAATTTTTA;TC;TR=8;TU=CTTT;set=filterInVQSR-2of5;sumGLbyD=13.22 +20 7024548 . G GAT 5041.27 PASS AC=123;AF=0.10336;AN=1190;BaseQRankSum=23.097;DP=3045;FS=7.979;HRun=0;HaplotypeScore=15.6967;InbreedingCoeff=0.1062;MQ=119.29;MQ0=2;MQ0Fraction=0.0007;MQRankSum=-3.725;QD=8.97;ReadPosRankSum=-1.636;SB=-2257.45;VQSLOD=5.9332;set=VQSR +20 7484554 . A AT 5.09 PASS AC=0;AF=0.0000;AN=710;BaseQRankSum=-0.696;DP=1862;FS=2.835;HRun=9;HaplotypeScore=13.5425;InbreedingCoeff=0.0567;MQ=76.92;MQ0=0;MQ0Fraction=0.0000;MQRankSum=1.932;ReadPosRankSum=-1.701;VQSLOD=4.3156;set=VQSR +20 7632194 rs77286341 GAA AAA,G 5324 PASS AC=0;AF=0.0000;AN=700;BaseQRankSum=-1.741;DB;DP=1772;FR;HP=4;HPLen=3;HR=3;HRun=0;HU=A;HaplotypeScore=60.1795;InbreedingCoeff=0.0017;MQ=70.69;MQ0=13;MQ0Fraction=0.0073;MQRankSum=-1.315;NF;NR;PP;ReadPosRankSum=-3.650;SC=GAGAGAGAGAGAAAGGTGTAA;TC;TR=13;TU=AG;set=filterInVQSR-2of5 +20 7767508 rs71329674 G GA 17914 PASS AA=415;AB=0.61617;ABA=337;ABP=105.94;ABR=541;AC=141;AF=0.11614;AN=1214;BL=15187;BR=20323;BVAR;BaseQRankSum=-13.946;DB;DP=28222;Dels=0.00;EL=184;EPP=14.569;ER=231;FQ=999;FR;FS=13.296;HETAR=178;HOMA=35;HOMR=822;HP=14;HPLen=9;HR=9;HRun=9;HU=A;INDEL;INS;InbreedingCoeff=0.0714;LEN=1;LRB=0.14464;LRBP=1616.1;MQ=89.69;MQ0=1;MQ0Fraction=0.0003;MQM=51.667;MQRankSum=0.664;NF;NR;NS=1035;PP;RA=3707;RL=171;RPP=30.894;RR=244;RUN=1;ReadPosRankSum=-1.120;SAB=0.45301;SAF=188;SAP=10.969;SAR=227;SC=ATTCTAAAAAGAAAAAAAAAT;SRB=0.38495;SRF=1427;SRP=429.23;SRR=2280;TC;TR=9;TU=A;VQSLOD=9.0748;set=Intersection;sumGLbyD=11.09 +20 7920261 . TA T,TAA 802.15 PASS AA=28;AB=0.8;ABA=28;ABP=112.45;ABR=112;AC=22,39;AF=0.01836,0.03255;AN=1198;BL=943;BR=1487;BVAR;BaseQRankSum=2.233;DP=10645;Dels=0.01;EL=11;EPP=5.8022;ER=17;FR;FS=1.691;HETAR=20;HOMA=0;HOMR=1007;HP=10;HPLen=9;HR=9;HRun=9;HU=A;INS;InbreedingCoeff=0.2256;LEN=1;LRB=0.22387;LRBP=267.46;MQ0=0;MQ0Fraction=0.0000;MQM=57.571;MQRankSum=0.940;NF;NR;NS=1027;PP;RA=4776;RL=8;RPP=14.178;RR=20;RUN=1;ReadPosRankSum=-1.567;SAB=0.53571;SAF=15;SAP=3.3205;SAR=13;SC=GTAACTGCTATAAAAAAAAAC;SRB=0.48576;SRF=2320;SRP=11.42;SRR=2456;TC;TR=9;TU=A;VQSLOD=4.0815;set=filterInVQSR-2of5;sumGLbyD=5.37 +20 8012465 rs10595338 TATGA T 2104.41 PASS AF=0.03339;BaseQRankSum=10.662;DB;DP=11772;DS;Dels=0.01;FR;FS=7.678;HP=1;HPLen=1;HR=1;HRun=0;HU=A;InbreedingCoeff=0.0266;MQ0Fraction=0.0731;MQRankSum=0.603;NF;NR;PP;ReadPosRankSum=1.276;SC=TGTATGTATGTATGATGTATG;TC;TR=19;TU=ATGT;VQSLOD=4.1376;set=filterInVQSR-2of5;sumGLbyD=6.53 +20 8573999 . CGTGT C,CGT,CGTGTGT,TGTGT 45865.96 PASS AC=458,0,731;AF=0.37727,0.00000,0.60214;AN=1214;BVAR;BaseQRankSum=-6.703;DEL;DP=37714;Dels=0.03;FR;FS=11.079;HP=2;HPLen=1;HR=1;HRun=0;HU=G;INDEL;INS;InbreedingCoeff=0.7632;LEN=2;MQ0Fraction=0.0026;MQRankSum=-1.394;NF;NR;PP;RUN=1;ReadPosRankSum=-2.102;SC=TGTGTGTGCGCGTGTGTGTGT;TC;TR=18;TU=GT;VQSLOD=6.1435;set=Intersection;sumGLbyD=3.53 +20 8610455 rs10571111 TTTTC T 11763.51 PASS AC=190;AF=0.17056;AN=1114;BaseQRankSum=-14.397;DB;DP=2323;FS=2.321;HRun=0;HaplotypeScore=39.8020;InbreedingCoeff=0.2502;MQ=53.39;MQ0=104;MQ0Fraction=0.0448;MQRankSum=3.519;QD=19.07;ReadPosRankSum=4.150;SB=-4067.02;VQSLOD=5.0554;set=VQSR +20 9139079 . ATT A,AT,ATTT,ATTTT,ATTTTT 8777.90 PASS AC=23,140,114,69,113;AF=0.01993,0.12132,0.09879,0.05979,0.09792;AN=1154;BVAR;BaseQRankSum=-0.022;DEL;DP=25109;DP4=502,657,278,313;FR;FS=11.929;HP=16;HR=16;HU=T;HaplotypeScore=20.2361;INDEL;INS;InbreedingCoeff=0.5704;MQ0=16;MQ0Fraction=0.0067;MQRankSum=2.624;NF;NR;PP;PV4=0.14,1,1,1;QD=1.48;RUN=1;ReadPosRankSum=-0.480;SB=-2354.28;SC=CACCTGGCTAATTTTTTTTTT;TC;TR=16;TU=T;VQSLOD=6.9180;set=Intersection +20 9862448 . CT C 49312 PASS AA=60;AB=0.96003;ABA=53;ABP=2440.4;ABR=1273;AC=18;AF=0.01461;AN=1232;BL=3516;BR=140;BVAR;BaseQRankSum=-2.056;DEL;DP=11893;Dels=0.01;EL=35;EPP=6.6294;ER=25;FS=1.787;HETAR=396;HOMA=344;HOMR=334;HRun=1;InbreedingCoeff=0.0379;LEN=1;LRB=0.92341;LRBP=6772.5;MQ0Fraction=0.0006;MQM=54.267;MQRankSum=-0.907;NS=1074;RA=2990;RL=60;RPP=133.3;RR=0;RUN=1;ReadPosRankSum=-10.579;SAB=0.58333;SAF=35;SAP=6.6294;SAR=25;SRB=0.47826;SRF=1430;SRP=15.284;SRR=1560;VQSLOD=3.0237;set=filterInVQSR-2of5;sumGLbyD=2.84 +20 9863736 rs73618103 G GT 50570.21 PASS AA=2247;AB=0.48878;ABA=1412;ABP=6.0324;ABR=1350;AC=546;AF=0.44463;AN=1228;BL=86886;BR=95862;BVAR;BaseQRankSum=-23.978;DB;DP=32517;DP4=1125,1133,1017,1048;Dels=0.00;EL=1089;EPP=7.6113;ER=1158;FQ=999;FR;FS=2.529;HETAR=445;HOMA=201;HOMR=393;HP=4;HPLen=4;HR=4;HRun=4;HU=T;INDEL;INS;InbreedingCoeff=0.1393;KGPilot123;LEN=1;LRB=0.049117;LRBP=960.35;MQ=68.10;MQ0=2;MQ0Fraction=0.0006;MQM=50.931;MQRankSum=-1.580;NF;NR;NS=1039;PP;PV4=0.71,1,0.11,1;RA=3139;RL=1089;RPP=7.6113;RR=1158;RUN=1;ReadPosRankSum=0.846;SAB=0.54161;SAF=1217;SAP=36.804;SAR=1030;SC=TGATTGTATGGTTTTGTCCTT;SRB=0.53425;SRF=1677;SRP=34.987;SRR=1462;TC;TR=4;TU=T;VLD;VQSLOD=10.1800;dbSNP=131;set=Intersection;sumGLbyD=18.20 +20 10640876 . TA T 42819 PASS AA=86;AB=0.92316;ABA=75;ABP=1521;ABR=901;AC=40;AF=0.0447;AN=894;BL=6265;BR=415;BVAR;BaseQRankSum=-0.850;DEL;DP=8223;Dels=0.00;EL=41;EPP=3.4143;ER=45;FS=3.190;HETAR=336;HOMA=384;HOMR=290;HRun=1;InbreedingCoeff=0.0173;LEN=1;LRB=0.87575;LRBP=11128;MQ0=0;MQ0Fraction=0.0000;MQM=76.163;MQRankSum=1.314;NS=1034;RA=2046;RL=83;RPP=164.61;RR=3;RUN=1;ReadPosRankSum=-12.060;SAB=0.46512;SAF=40;SAP=3.9193;SAR=46;SRB=0.5523;SRF=1130;SRP=51.615;SRR=916;VQSLOD=3.9183;set=filterInVQSR-2of5;sumGLbyD=4.00 +20 10926959 . AG A 12239 PASS AA=65;AB=0.92801;ABA=64;ABP=1417.6;ABR=825;AC=24;AF=0.0264;AN=908;BL=616;BR=3782;BVAR;BaseQRankSum=9.990;DEL;DP=10708;Dels=0.01;EL=37;EPP=5.7163;ER=28;FS=1.652;HETAR=275;HOMA=70;HOMR=724;HRun=1;InbreedingCoeff=0.0102;LEN=1;LRB=0.71987;LRBP=4952;MQ0=1;MQ0Fraction=0.0004;MQM=118.82;MQRankSum=1.018;NS=1069;RA=4746;RL=5;RPP=104.07;RR=60;RUN=1;ReadPosRankSum=-12.039;SAB=0.41538;SAF=27;SAP=7.0526;SAR=38;SRB=0.4764;SRF=2261;SRP=25.968;SRR=2485;VQSLOD=2.9713;set=filterInVQSR-2of5;sumGLbyD=4.10 +20 11299648 . TG T 49315 PASS AA=62;AB=0.95292;ABA=54;ABP=2046.7;ABR=1093;AC=28;AF=0.0373;AN=750;BL=3126;BR=528;BVAR;BaseQRankSum=-4.929;DEL;DP=10764;Dels=0.01;EL=26;EPP=6.5127;ER=36;FS=3.851;HETAR=366;HOMA=383;HOMR=304;HRun=1;InbreedingCoeff=0.0267;LEN=1;LRB=0.711;LRBP=4014.1;MQ0=1;MQ0Fraction=0.0005;MQM=76.468;MQRankSum=1.327;NS=1070;RA=2588;RL=54;RPP=77.121;RR=8;RUN=1;ReadPosRankSum=-12.507;SAB=0.48387;SAF=30;SAP=3.1504;SAR=32;SRB=0.47643;SRF=1233;SRP=15.499;SRR=1355;VQSLOD=3.8673;set=filterInVQSR-2of5;sumGLbyD=3.00 +20 11561096 . CTA C 999 PASS AC=2;AF=0.0029;AF1=0.005602;BaseQRankSum=3.190;CI95=0.004425,0.01106;DP=7521;DP4=1998,1794,2,4;Dels=0.00;FQ=999;FR;FS=5.422;HP=3;HPLen=2;HR=1;HRun=0;HU=T;INDEL;InbreedingCoeff=0.0056;MQ=113.88;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.297;NF;NR;PP;PV4=0.43,0.024,1,1;ReadPosRankSum=1.406;SC=CAATAGTATTCTATGTCAGTC;TC;TR=1;TU=T;VQSLOD=8.6243;set=Intersection;sumGLbyD=21.89 +20 11723671 . C CA 1096.60 PASS AA=35;AB=0.69565;ABA=35;ABP=41.247;ABR=80;AC=10;AF=0.0141;AN=710;BL=2005;BR=1702;BVAR;BaseQRankSum=-3.427;DP=9819;Dels=0.00;EL=20;EPP=4.5614;ER=15;FR;FS=3.814;HETAR=20;HOMA=0;HOMR=1034;HP=8;HPLen=7;HR=7;HRun=7;HU=A;INS;InbreedingCoeff=0.0323;LEN=1;LRB=0.081737;LRBP=56.79;MQ0=0;MQ0Fraction=0.0000;MQM=81.057;MQRankSum=0.050;NF;NR;NS=1054;PP;RA=5562;RL=22;RPP=8.0357;RR=13;RUN=1;ReadPosRankSum=-2.012;SAB=0.71429;SAF=25;SAP=16.97;SAR=10;SC=ATATTGAAGACAAAAAAACAG;SRB=0.49371;SRF=2746;SRP=4.9233;SRR=2816;TC;TR=7;TU=A;VQSLOD=7.4342;set=Intersection;sumGLbyD=8.30 +20 11767787 . CA C 1382.10 PASS AA=24;AB=0.56667;ABA=13;ABP=4.1684;ABR=17;AC=10;AF=0.00810;AN=1234;BL=967;BR=819;BVAR;BaseQRankSum=1.629;DEL;DP=22318;DP4=2190,2491,8,14;Dels=0.01;EL=16;EPP=8.8009;ER=8;FQ=999;FR;FS=2.536;HETAR=6;HOMA=3;HOMR=1051;HP=2;HPLen=1;HR=1;HRun=1;HU=A;INDEL;InbreedingCoeff=0.0823;LEN=1;LRB=0.082867;LRBP=29.642;MQ=65.44;MQ0Fraction=0.0032;MQM=50.583;MQRankSum=0.931;NF;NR;NS=1060;PP;PV4=0.39,0.018,1,0.37;RA=5568;RL=11;RPP=3.3722;RR=13;RUN=1;ReadPosRankSum=-0.694;SAB=0.375;SAF=9;SAP=6.2675;SAR=15;SC=TGAACATGTACAGACTTGGTT;SRB=0.44325;SRF=2468;SRP=158.78;SRR=3100;TC;TR=1;TU=A;VQSLOD=9.9622;set=Intersection;sumGLbyD=15.42 +20 12021825 . A AG 1063.30 PASS AA=26;AB=0.53704;ABA=25;ABP=3.6537;ABR=29;AC=12;AF=0.0214;AN=562;BL=1077;BR=815;BVAR;BaseQRankSum=-3.787;DP=22049;DP4=2650,2464,13,12;Dels=0.00;EL=18;EPP=11.362;ER=8;FR;FS=0.735;HETAR=12;HOMA=1;HOMR=1064;HP=1;HR=1;HRun=1;HU=G;INDEL;INS;InbreedingCoeff=0.0876;LEN=1;LRB=0.13848;LRBP=81.794;MQ=102.78;MQ0=0;MQ0Fraction=0.0000;MQM=85.538;MQRankSum=-0.126;NF;NR;NS=1077;PP;PV4=1,1,0.19,0.2;RA=6457;RL=17;RPP=8.3555;RR=9;RUN=1;ReadPosRankSum=-1.941;SAB=0.57692;SAF=15;SAP=4.3466;SAR=11;SC=GTAGTTTAACAGTTTATCAGG;SRB=0.5182;SRF=3346;SRP=21.582;SRR=3111;TC;TR=1;TU=G;VQSLOD=8.0483;set=Intersection;sumGLbyD=13.94 +20 12238835 rs113904674 CTCTTCATGGTCT C 1813.44 PASS AA=7;AB=0.73077;ABA=7;ABP=15.037;ABR=19;AC=4;AF=0.0056;AN=712;BL=360;BR=368;BVAR;BaseQRankSum=3.891;DB;DEL;DP=10309;Dels=0.00;EL=4;EPP=3.3205;ER=3;FR;FS=0.000;HETAR=3;HOMA=0;HOMR=1076;HP=1;HPLen=2;HR=2;HRun=0;HU=C;InbreedingCoeff=-0.0381;LEN=12;LRB=0.010989;LRBP=3.2012;MQ0=0;MQ0Fraction=0.0000;MQM=37;MQRankSum=-3.793;NF;NR;NS=1079;PP;RA=6085;RL=4;RPP=3.3205;RR=3;RUN=1;ReadPosRankSum=1.319;SAB=0.42857;SAF=3;SAP=3.3205;SAR=4;SC=CTTAATGCTCCTCTTCATGGT;SRB=0.51257;SRF=3119;SRP=11.364;SRR=2966;TC;TR=6;TU=CCT;VQSLOD=5.7551;set=Intersection;sumGLbyD=69.48 +20 12602812 . AT A 12344 PASS AA=47;AB=0.94372;ABA=43;ABP=1309.5;ABR=721;AC=14;AF=0.0196;AN=716;BL=2714;BR=217;BVAR;BaseQRankSum=1.424;DEL;DP=10743;Dels=0.00;EL=24;EPP=3.0565;ER=23;FS=0.629;HETAR=228;HOMA=65;HOMR=769;HRun=1;InbreedingCoeff=0.0233;LEN=1;LRB=0.85193;LRBP=4622.3;MQ0Fraction=0.0000;MQM=99.574;MQRankSum=1.901;NS=1080;RA=4839;RL=46;RPP=96.568;RR=1;RUN=1;ReadPosRankSum=-9.906;SAB=0.53191;SAF=25;SAP=3.4261;SAR=22;SRB=0.51106;SRF=2473;SRP=8.148;SRR=2366;VQSLOD=2.8161;set=filterInVQSR-2of5;sumGLbyD=3.67 +20 13600884 . CTG C,CTGTG 1278.10 PASS AA=85;AB=0.77994;ABA=79;ABP=247.38;ABR=280;AC=71,22;AF=0.05907,0.01830;AN=1202;BL=3279;BR=3205;BVAR;BaseQRankSum=8.852;DEL;DP=24185;DP4=1317,931,52,49;Dels=0.03;EL=45;EPP=3.649;ER=40;FQ=999;FR;FS=31.826;HETAR=75;HOMA=4;HOMR=926;HP=2;HPLen=1;HR=1;HRun=0;HU=T;INDEL;InbreedingCoeff=0.1566;LEN=2;LRB=0.011413;LRBP=4.8442;MQ=65.06;MQ0Fraction=0.0012;MQM=48.671;MQRankSum=-0.511;NF;NR;NS=1005;PP;PV4=0.18,1,0.39,0.27;RA=3342;RL=35;RPP=8.7583;RR=50;RUN=1;ReadPosRankSum=-2.329;SAB=0.43529;SAF=37;SAP=6.1015;SAR=48;SC=TCCCTTTACTCTGTGTGTGTG;SRB=0.59066;SRF=1974;SRP=241.62;SRR=1368;TC;TR=15;TU=GT;VQSLOD=3.8635;set=filterInVQSR-2of5;sumGLbyD=4.23 +20 13666265 . T TATAG 556.88 PASS AC=21;AF=0.01959;AN=1072;BaseQRankSum=24.958;DP=2706;FS=2.581;HRun=0;HaplotypeScore=25.9952;InbreedingCoeff=0.1419;MQ=72.43;MQ0=0;MQ0Fraction=0.0000;MQRankSum=2.888;QD=4.38;ReadPosRankSum=2.552;SB=-417.04;VQSLOD=7.3380;set=VQSR +20 13861245 rs72422273 C CTCA 2685.46 PASS AC=140;AF=0.11589;AN=1208;BaseQRankSum=24.355;DB;DP=2910;FS=6.808;HRun=0;HaplotypeScore=19.3095;InbreedingCoeff=-0.0991;MQ=78.25;MQ0=22;MQ0Fraction=0.0076;MQRankSum=3.225;QD=3.64;ReadPosRankSum=2.607;SB=-1861.38;VQSLOD=4.1974;set=VQSR +20 13865746 . T TA,TAA 1416.23 PASS AA=63;AB=0.80417;ABA=47;ABP=195.87;ABR=193;AC=122,21;AF=0.10133,0.01744;AN=1204;BL=3673;BR=1145;BVAR;BaseQRankSum=-3.336;DP=10513;Dels=0.00;EL=62;EPP=131.27;ER=1;FR;FS=716.583;HETAR=45;HOMA=1;HOMR=998;HP=2;HR=1;HRun=1;HU=A;INS;InbreedingCoeff=0.0814;LEN=1;LRB=0.5247;LRBP=2883.3;MQ0=0;MQ0Fraction=0.0000;MQM=56.143;MQRankSum=-1.197;NF;NR;NS=1044;PP;RA=4529;RL=62;RPP=131.27;RR=1;RUN=1;ReadPosRankSum=-12.295;SAB=1;SAF=63;SAP=139.81;SAR=0;SC=GGAACATGGATACCCCCCTGC;SRB=0.52462;SRF=2376;SRP=26.853;SRR=2153;TC;TR=1;TU=A;VQSLOD=-4.2308;set=filterInVQSR-2of5;sumGLbyD=4.77 +20 13881703 . CTT C 152.85 PASS AC=8;AF=0.0093;AN=862;BaseQRankSum=3.941;DP=2063;FS=0.962;HRun=5;HaplotypeScore=24.0313;InbreedingCoeff=0.0790;MQ=55.05;MQ0=49;MQ0Fraction=0.0238;MQRankSum=-1.418;QD=3.47;ReadPosRankSum=-0.605;SB=-93.04;VQSLOD=5.3874;set=VQSR +20 14033345 . A AT 2718.30 PASS AA=91;AB=0.80899;ABA=85;ABP=372.04;ABR=360;AC=43;AF=0.03895;AN=1104;BL=3916;BR=4753;BVAR;BaseQRankSum=-6.609;DP=8350;Dels=0.02;EL=46;EPP=3.0342;ER=45;FR;FS=0.498;HETAR=70;HOMA=1;HOMR=871;HP=11;HR=11;HRun=11;HU=T;INS;InbreedingCoeff=0.0952;LEN=1;LRB=0.096551;LRBP=178.49;MQ0=0;MQ0Fraction=0.0000;MQM=54.879;MQRankSum=2.164;NF;NR;NS=942;PP;RA=3717;RL=37;RPP=9.9065;RR=54;RUN=1;ReadPosRankSum=-1.447;SAB=0.48352;SAF=44;SAP=3.2251;SAR=47;SC=TTGCAAACAGATTTTTTTTTT;SRB=0.45252;SRF=1682;SRP=75.807;SRR=2035;TC;TR=11;TU=T;VQSLOD=3.8299;set=filterInVQSR-2of5;sumGLbyD=3.88 +20 14260090 rs73619828 A AT 27935 PASS AA=596;AB=0.59484;ABA=487;ABP=96.922;ABR=715;AC=204;AF=0.17000;AN=1200;BL=21718;BR=28458;BVAR;BaseQRankSum=0.756;DB;DP=23629;DP4=1385,1492,287,328;Dels=0.00;EL=299;EPP=3.0249;ER=297;FQ=999;FR;FS=6.187;HETAR=218;HOMA=38;HOMR=788;HP=9;HPLen=9;HR=9;HRun=9;HU=T;INDEL;INS;InbreedingCoeff=0.0797;LEN=1;LRB=0.13433;LRBP=1969;MQ=100.81;MQ0=0;MQ0Fraction=0.0000;MQM=57.084;MQRankSum=2.224;NF;NR;NS=1044;PP;PV4=0.53,1,1.2e-11,1;RA=4143;RL=238;RPP=55.475;RR=358;RUN=1;ReadPosRankSum=0.198;SAB=0.46812;SAF=279;SAP=8.2714;SAR=317;SC=CCTTAAGTTGATTTTTTTTTC;SRB=0.50374;SRF=2087;SRP=3.514;SRR=2056;TC;TR=9;TU=T;VQSLOD=9.0018;set=Intersection;sumGLbyD=10.82 +20 14260558 . AC A 238 PASS AC=1;AF=0.0014;AF1=0.003368;BaseQRankSum=2.868;CI95=0.003106,0.006211;DP=9724;DP4=2075,2329,1,7;Dels=0.00;FQ=106;FR;FS=10.678;HP=1;HPLen=2;HR=2;HRun=1;HU=A;INDEL;InbreedingCoeff=-0.0406;MQ=114.37;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.862;NF;NR;PP;PV4=0.074,0.0096,0.017,1;ReadPosRankSum=-0.042;SC=ATCAGGAATAACTGTGTGACC;TC;TR=2;TU=A;VQSLOD=8.1618;set=Intersection;sumGLbyD=18.65 +20 14425481 . GTA G,GTATA 148.85 PASS AC=43,23;AF=0.03473,0.01858;AN=1238;BaseQRankSum=6.289;DP=25167;DP4=1800,2021,38,49;FR;FS=9.416;HP=2;HPLen=1;HR=1;HU=T;HaplotypeScore=17.7453;INDEL;InbreedingCoeff=0.0995;MQ0=21;MQ0Fraction=0.0058;MQRankSum=-0.200;NF;NR;PP;PV4=0.59,1,0.04,0.023;QD=0.35;ReadPosRankSum=-1.689;SB=-367.50;SC=CTGTGTGTGTGTATATATATA;TC;TR=13;TU=AT;VQSLOD=3.5796;set=filterInVQSR-2of5 +20 14943522 rs11478299 GA AA,G 1761.24 PASS AA=117;AB=0.68142;ABA=108;ABP=99.919;ABR=231;AC=0;AF=0.0000;AF1=0.04204;AN=712;BL=4931;BR=5802;BVAR;BaseQRankSum=9.118;CI95=0.02876,0.05752;DB;DEL;DP=13717;DP4=1908,1684,59,58;Dels=0.05;EL=60;EPP=3.1773;ER=57;FQ=81.9;FR;HETAR=56;HOMA=1;HOMR=1011;HP=8;HPLen=8;HR=8;HU=A;INDEL;InbreedingCoeff=0.1264;LEN=1;LRB=0.081152;LRBP=156.5;MQ=106.93;MQ0=0;MQ0Fraction=0.0000;MQM=96.855;MQRankSum=1.619;NF;NR;NS=1068;PP;PV4=0.57,1,0.0003,1;QD=7.40;RA=5080;RL=56;RPP=3.4743;RR=61;RUN=1;ReadPosRankSum=0.814;SAB=0.52137;SAF=61;SAP=3.4743;SAR=56;SB=-1122.51;SC=GTTGTTTGGGGAAAAAAAACT;SRB=0.51083;SRF=2595;SRP=8.1825;SRR=2485;TC;TR=8;TU=A;set=filterInVQSR-2of5;sumGLbyD=9.81 +20 14974486 . A AG 4101.40 PASS AA=57;AB=0.57143;ABA=51;ABP=8.2839;ABR=68;AC=22;AF=0.01846;AN=1192;BL=2286;BR=2834;BVAR;BaseQRankSum=8.711;DP=20538;DP4=2172,2100,19,13;Dels=0.00;EL=32;EPP=4.877;ER=25;FS=0.517;HETAR=20;HOMA=4;HOMR=1027;HRun=1;INDEL;INS;InbreedingCoeff=0.0677;LEN=1;LRB=0.10703;LRBP=130.37;MQ=126.07;MQ0=0;MQ0Fraction=0.0000;MQM=56.088;MQRankSum=-10.756;NS=1051;PV4=0.38,3.5e-51,7.9e-34,1;RA=5203;RL=26;RPP=3.9627;RR=31;RUN=1;ReadPosRankSum=1.283;SAB=0.54386;SAF=31;SAP=3.9627;SAR=26;SRB=0.51816;SRF=2696;SRP=17.918;SRR=2507;VQSLOD=8.0072;set=Intersection;sumGLbyD=25.60 +20 15111137 . GA G 13533 PASS AA=98;AB=0.84864;ABA=89;ABP=623.8;ABR=499;AC=47;AF=0.03796;AN=1238;BL=5324;BR=856;BVAR;BaseQRankSum=-11.577;DEL;DP=13384;Dels=0.01;EL=53;EPP=4.4284;ER=45;FS=6.099;HETAR=219;HOMA=845;HOMR=18;HRun=1;InbreedingCoeff=-0.0056;LEN=1;LRB=0.72298;LRBP=7017.4;MQ0Fraction=0.0003;MQM=90.449;MQRankSum=1.408;NS=1083;RA=590;RL=87;RPP=130.99;RR=11;RUN=1;ReadPosRankSum=-18.074;SAB=0.55102;SAF=54;SAP=5.2261;SAR=44;SRB=0.52373;SRF=309;SRP=5.8958;SRR=281;VQSLOD=4.1054;set=filterInVQSR-2of5;sumGLbyD=3.06 +20 15283028 . A AC,ACACACACACACAC 140844.83 PASS AA=180;AB=0.61442;ABA=123;ABP=39.285;ABR=196;AC=13,817;AF=0.01111,0.69829;AN=1170;BL=4453;BR=11407;BVAR;BaseQRankSum=24.686;DP=6365;Dels=0.00;EL=124;EPP=58.793;ER=56;FR;FS=10.912;HETAR=87;HOMA=48;HOMR=683;HP=1;HR=1;HRun=1;HU=T;INS;InbreedingCoeff=0.2074;LEN=1;LRB=0.43846;LRBP=6624;MQ0Fraction=0.0558;MQM=38.211;MQRankSum=-21.111;NF;NR;NS=818;PP;RA=1732;RL=0;RPP=393.88;RR=180;RUN=1;ReadPosRankSum=-7.620;SAB=0.31111;SAF=56;SAP=58.793;SAR=124;SC=ACACACACACATACACACATA;SRB=0.54042;SRF=936;SRP=27.584;SRR=796;TC;TR=21;TU=AC;VQSLOD=4.7569;set=Intersection;sumGLbyD=18.36 +20 15361056 . ATAACT A 4892.81 PASS AA=59;AB=0.63576;ABA=55;ABP=27.184;ABR=96;AC=34;AF=0.0487;AN=698;BL=3164;BR=1999;BVAR;BaseQRankSum=3.391;DEL;DP=7080;Dels=0.03;EL=27;EPP=3.9304;ER=32;FR;FS=4.816;HETAR=35;HOMA=6;HOMR=966;HP=2;HPLen=3;HR=3;HRun=0;HU=A;InbreedingCoeff=0.0785;LEN=5;LRB=0.22564;LRBP=573.84;MQ0=0;MQ0Fraction=0.0000;MQM=70.034;MQRankSum=-8.732;NF;NR;NS=1008;PP;RA=3915;RL=42;RPP=26.013;RR=17;RUN=1;ReadPosRankSum=-0.735;SAB=0.44068;SAF=26;SAP=4.8137;SAR=33;SC=AGATTAGGAAATAACTTAGGG;SRB=0.42682;SRF=1671;SRP=185.12;SRR=2244;TC;TR=3;TU=A;VQSLOD=7.0900;set=Intersection;sumGLbyD=43.38 +20 15579507 . AATTAGTC A,TATTAGTC 1936.38 PASS AA=16;AB=0.58974;ABA=16;ABP=5.7386;ABR=23;AC=64;AF=0.05229;AN=1224;BL=699;BR=775;BVAR;BaseQRankSum=-21.390;DEL;DP=21920;DP4=2099,2403,6,6;Dels=0.00;EL=8;EPP=3.0103;ER=8;FR;FS=2.920;HETAR=5;HOMA=0;HOMR=1063;HP=3;HPLen=4;HR=4;HU=A;INDEL;InbreedingCoeff=-0.0143;LEN=7;LRB=0.05156;LRBP=11.519;MQ=129.49;MQ0=0;MQ0Fraction=0.0000;MQM=51.938;MQRankSum=3.331;NF;NR;NS=1068;PP;PV4=1,0.019,1.3e-07,1;RA=5334;RL=5;RPP=7.8961;RR=11;RUN=1;ReadPosRankSum=-16.901;SAB=0.4375;SAF=7;SAP=3.5532;SAR=9;SC=CATACTACAAAATTAGTCATT;SRB=0.41695;SRF=2224;SRP=322.58;SRR=3110;TC;TR=4;TU=A;VQSLOD=3.2237;set=filterInVQSR-2of5;sumGLbyD=43.57 +20 15752535 . CT C,GT 3775.20 PASS AA=92;AB=0.78636;ABA=47;ABP=159.71;ABR=173;AC=0;AF=0.0000;AN=608;BL=4955;BR=2380;BVAR;BaseQRankSum=2.910;DEL;DP=3429;Dels=0.04;EL=13;EPP=105.82;ER=79;FR;HETAR=92;HOMA=95;HOMR=544;HP=2;HPLen=2;HR=2;HU=T;InbreedingCoeff=0.0483;LEN=1;LRB=0.35106;LRBP=1966;MQ0Fraction=0.0232;MQM=35.293;MQRankSum=-2.199;NF;NR;NS=732;PP;QD=4.91;RA=1272;RL=81;RPP=118.66;RR=11;RUN=1;ReadPosRankSum=-1.077;SAB=0.021739;SAF=2;SAP=185.79;SAR=90;SB=-59.51;SC=CAAGACCATCCTTGGCTAACA;SRB=0.14623;SRF=186;SRP=1385.8;SRR=1086;TC;TR=2;TU=T;set=filterInVQSR-2of5;sumGLbyD=9.70 +20 15883060 rs73619850 A AT 1325.60 PASS AA=38;AB=0.59302;ABA=35;ABP=9.4742;ABR=51;AC=14;AF=0.0156;AN=896;BL=1078;BR=1638;BVAR;BaseQRankSum=-4.526;DB;DP=19854;DP4=1632,1800,15,20;Dels=0.00;EL=18;EPP=3.2389;ER=20;FR;FS=0.000;HETAR=14;HOMA=1;HOMR=1014;HP=1;HPLen=1;HR=1;HRun=1;HU=T;INDEL;INS;InbreedingCoeff=-0.0131;LEN=1;LRB=0.20619;LRBP=253.74;MQ=118.40;MQ0=0;MQ0Fraction=0.0000;MQM=56.526;MQRankSum=0.892;NF;NR;NS=1029;PP;PV4=0.61,1,0.25,0.14;RA=4439;RL=14;RPP=8.7247;RR=24;RUN=1;ReadPosRankSum=-2.061;SAB=0.42105;SAF=16;SAP=5.0675;SAR=22;SC=GGATTGGCAGATAAAAAATGG;SRB=0.46429;SRF=2061;SRP=52.168;SRR=2378;TC;TR=1;TU=T;VQSLOD=9.7576;set=Intersection;sumGLbyD=15.69 +20 16073315 rs111824749 GA G,GAA,GAAA 6400.63 PASS AC=138,47,20;AF=0.11577,0.03943,0.01678;AN=1192;BVAR;BaseQRankSum=11.377;DB;DEL;DP=35284;DP4=1695,1547,60,56;Dels=0.08;FR;FS=9.576;HP=11;HPLen=10;HR=10;HRun=10;HU=A;INDEL;INS;InbreedingCoeff=0.2137;MQ=106.87;MQ0=1;MQ0Fraction=0.0003;MQRankSum=0.773;NF;NR;PP;PV4=0.92,1,0.024,0.45;RUN=1;ReadPosRankSum=-2.224;SC=TATTTGAGGAGAAAAAAAAAA;TC;TR=10;TU=A;VQSLOD=9.3264;set=Intersection;sumGLbyD=8.64 +20 16122099 . GA G 12914 PASS AA=85;AB=0.85915;ABA=80;ABP=639.4;ABR=488;AC=19;AF=0.01542;AN=1232;BL=805;BR=5457;BVAR;BaseQRankSum=-6.084;DEL;DP=13592;Dels=0.00;EL=45;EPP=3.649;ER=40;FS=0.935;HETAR=218;HOMA=841;HOMR=14;HRun=2;InbreedingCoeff=0.0250;LEN=1;LRB=0.74289;LRBP=7507.5;MQ0=0;MQ0Fraction=0.0000;MQM=103.01;MQRankSum=2.843;NS=1075;RA=541;RL=2;RPP=170.62;RR=83;RUN=1;ReadPosRankSum=-16.222;SAB=0.49412;SAF=42;SAP=3.0358;SAR=43;SRB=0.44917;SRF=243;SRP=15.152;SRR=298;VQSLOD=3.9745;set=filterInVQSR-2of5;sumGLbyD=2.97 +20 16828509 . G GT 843.62 PASS AA=30;AB=0.70103;ABA=29;ABP=37.06;ABR=68;AC=10;AF=0.0140;AN=714;BL=1368;BR=1786;BVAR;BaseQRankSum=-4.061;DP=8682;Dels=0.01;EL=14;EPP=3.2998;ER=16;FR;FS=2.681;HETAR=22;HOMA=1;HOMR=1020;HP=8;HPLen=8;HR=8;HRun=8;HU=T;INS;InbreedingCoeff=0.1389;LEN=1;LRB=0.13253;LRBP=123.3;MQ0=0;MQ0Fraction=0.0000;MQM=62.8;MQRankSum=-1.491;NF;NR;NS=1043;PP;RA=4416;RL=11;RPP=7.6428;RR=19;RUN=1;ReadPosRankSum=-1.718;SAB=0.76667;SAF=23;SAP=21.54;SAR=7;SC=CCTTCAAAAGGTTTTTTTTGG;SRB=0.5745;SRF=2537;SRP=215.91;SRR=1879;TC;TR=8;TU=T;VQSLOD=7.6258;set=Intersection;sumGLbyD=10.77 +20 17470034 . GC G 46975 PASS AA=57;AB=0.96043;ABA=52;ABP=2422.5;ABR=1262;AC=34;AF=0.02773;AN=1226;BL=418;BR=3446;BVAR;BaseQRankSum=-6.250;DEL;DP=12035;Dels=0.00;EL=22;EPP=9.4485;ER=35;FS=1.350;HETAR=416;HOMA=409;HOMR=244;HRun=1;InbreedingCoeff=0.0083;LEN=1;LRB=0.78364;LRBP=5155.6;MQ0=0;MQ0Fraction=0.0000;MQM=99.509;MQRankSum=2.192;NS=1076;RA=2396;RL=5;RPP=87.164;RR=52;RUN=1;ReadPosRankSum=-15.199;SAB=0.5614;SAF=32;SAP=4.877;SAR=25;SRB=0.52963;SRF=1269;SRP=21.285;SRR=1127;VQSLOD=3.8440;set=filterInVQSR-2of5;sumGLbyD=3.06 +20 17471374 . AGCGGC A 850.03 PASS AC=6;AF=0.0085;AF1=0.01301;AN=704;BaseQRankSum=6.259;CI95=0.00885,0.01991;DP=8180;DP4=2215,1878,4,5;Dels=0.01;FQ=131;FS=0.000;HRun=0;INDEL;InbreedingCoeff=0.0009;MQ=104.41;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-5.521;PV4=0.74,0.37,0.0005,1;ReadPosRankSum=2.468;VQSLOD=6.8773;set=Intersection;sumGLbyD=30.85 +20 18433202 rs35582929 G GA 2506.90 PASS AA=55;AB=0.5812;ABA=49;ABP=9.7103;ABR=68;AC=20;AF=0.0218;AN=918;BL=2263;BR=2175;BVAR;BaseQRankSum=-6.639;DB;DP=19467;DP4=1845,2365,27,26;Dels=0.00;EL=21;EPP=9.6826;ER=34;FQ=999;FR;FS=5.633;HETAR=16;HOMA=3;HOMR=1045;HP=2;HPLen=3;HR=3;HRun=1;HU=G;INDEL;INS;InbreedingCoeff=0.0700;LEN=1;LRB=0.019829;LRBP=6.7994;MQ=114.03;MQ0=0;MQ0Fraction=0.0000;MQM=83.345;MQRankSum=1.610;NF;NR;NS=1064;PP;PV4=0.33,1,1,1;RA=5380;RL=28;RPP=3.0498;RR=27;RUN=1;ReadPosRankSum=0.873;SAB=0.47273;SAF=26;SAP=3.3656;SAR=29;SC=TATTTCATGGGAGCATTAAAA;SRB=0.42862;SRF=2306;SRP=241.07;SRR=3074;TC;TR=3;TU=G;VQSLOD=10.0372;dbSNP=126;set=Intersection;sumGLbyD=13.10 +20 18551314 rs10659122 CA C,CAA,CAAA,CAAAA,CAAAAA 18810.74 PASS ABR=243;AC=19,169,216,164,188;AF=0.01816,0.16157,0.20650,0.15679,0.17973;BVAR;BaseQRankSum=-5.742;DB;DP=17637;DP4=136,77,560,237;FR;FS=2.693;HOMA=177;HOMR=299;HP=17;HR=17;HU=A;HaplotypeScore=15.5048;INDEL;INS;InbreedingCoeff=0.8901;MQ0=11;MQ0Fraction=0.0069;MQRankSum=1.845;NF;NR;NS=658;PP;PV4=0.08,1,1,1;QD=12.66;RA=673;RUN=1;ReadPosRankSum=0.283;SB=-3514.45;SC=GATTCCATCTCAAAAAAAAAA;SRB=0.63596;SRF=428;SRP=111.06;SRR=245;TC;TR=17;TU=A;VQSLOD=10.6964;dbSNP=130;set=Intersection +20 18785519 . G GTC 415.55 PASS AC=28;AF=0.0400;AN=700;BaseQRankSum=10.889;DP=1929;FS=8.778;HRun=0;HaplotypeScore=27.6448;InbreedingCoeff=0.0510;MQ=61.99;MQ0=36;MQ0Fraction=0.0187;MQRankSum=4.508;QD=3.08;ReadPosRankSum=8.080;SB=-437.03;VQSLOD=4.9313;set=VQSR +20 19149501 . A AG 17.85 PASS AC=1;AF=0.0015;AN=670;BaseQRankSum=0.769;DP=1635;FS=9.858;HRun=0;HaplotypeScore=12.1949;InbreedingCoeff=-0.0381;MQ=102.63;MQ0=0;MQ0Fraction=0.0000;MQRankSum=1.200;QD=3.23;ReadPosRankSum=0.292;SB=-7.06;VQSLOD=4.4695;set=VQSR +20 19540281 . AC A 19710 PASS AA=145;AB=0.81843;ABA=134;ABP=652.98;ABR=604;AC=115;AF=0.09583;AN=1200;BL=9637;BR=817;BVAR;BaseQRankSum=-13.669;DEL;DP=10963;Dels=0.01;EL=66;EPP=5.5412;ER=79;FS=1.252;HETAR=305;HOMA=681;HOMR=59;HRun=1;InbreedingCoeff=0.0298;LEN=1;LRB=0.8437;LRBP=16162;MQ0=0;MQ0Fraction=0.0000;MQM=118.51;MQRankSum=-2.194;NS=1046;RA=823;RL=141;RPP=284.09;RR=4;RUN=1;ReadPosRankSum=-20.775;SAB=0.45517;SAF=66;SAP=5.5412;SAR=79;SRB=0.452;SRF=372;SRP=19.477;SRR=451;VQSLOD=3.9584;set=filterInVQSR-2of5;sumGLbyD=3.29 +20 20015051 . TGAGGGTGG T 1820.73 PASS AF=0.0112;AF1=0.01638;AN=714;BaseQRankSum=6.652;CI95=0.01106,0.02212;DP=9910;DP4=2812,1912,6,11;Dels=0.01;FQ=999;FR;FS=6.147;HP=1;HPLen=2;HR=2;HRun=0;HU=T;INDEL;InbreedingCoeff=0.0077;MQ=129.13;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-3.195;NF;NR;PP;PV4=0.049,1,5.5e-05,0.006;ReadPosRankSum=-1.989;SC=TTGGTGGAGTTGAGGGTGGGA;TC;TR=2;TU=T;VQSLOD=6.5963;set=Intersection;sumGLbyD=33.49 +20 20301041 rs35451634 ATATG A 200.42 PASS AC=21;AF=0.0449;AN=468;BaseQRankSum=5.251;DB;DP=579;FS=24.013;HRun=0;HaplotypeScore=27.8977;InbreedingCoeff=0.0113;MQ=78.47;MQ0=26;MQ0Fraction=0.0449;MQRankSum=-5.284;QD=3.06;ReadPosRankSum=1.793;SB=-55.76;VQSLOD=5.0981;set=VQSR +20 20378174 . TC T 245.55 PASS AC=23;AF=0.01879;AN=1224;BaseQRankSum=0.990;DP=3225;FS=10.413;HRun=1;HaplotypeScore=22.6109;InbreedingCoeff=0.0244;MQ=93.70;MQ0=3;MQ0Fraction=0.0009;MQRankSum=-3.349;QD=1.86;ReadPosRankSum=-7.227;SB=-188.62;VQSLOD=4.2553;set=VQSR +20 20809160 rs10571503 TAA AAA,T 3496 PASS AC=0;AF=0.0000;AN=612;BaseQRankSum=1.968;DB;DP=1092;FR;HP=4;HPLen=3;HR=3;HRun=0;HU=A;HaplotypeScore=26.1253;InbreedingCoeff=0.0603;MQ=68.98;MQ0=1;MQ0Fraction=0.0009;MQRankSum=1.520;NF;NR;PP;ReadPosRankSum=-4.042;SC=TATATATATATAAATTTAAAT;TC;TR=13;TU=AT;set=filterInVQSR-2of5 +20 22508765 . CT C 53877.84 PASS AA=187;AB=0.78077;ABA=171;ABP=537.09;ABR=609;AC=1017;AF=0.91787;AN=1108;BL=12690;BR=1718;BVAR;BaseQRankSum=13.773;DEL;DP=7430;Dels=0.02;EL=73;EPP=22.53;ER=114;FR;FS=16.352;HETAR=152;HOMA=9;HOMR=786;HP=8;HR=4;HRun=4;HU=T;InbreedingCoeff=0.3885;LEN=1;LRB=0.76152;LRBP=18147;MQ0=0;MQ0Fraction=0.0000;MQM=46.086;MQRankSum=0.971;NF;NR;NS=947;PP;RA=2868;RL=177;RPP=326.86;RR=10;RUN=1;ReadPosRankSum=9.951;SAB=0.34759;SAF=65;SAP=40.738;SAR=122;SC=AAAAAATTTTCTTTTGAACTG;SRB=0.46269;SRF=1327;SRP=37.684;SRR=1541;TC;TR=4;TU=T;VQSLOD=5.1182;set=Intersection;sumGLbyD=25.15 +20 22555082 rs11477526 AT A 11503 PASS AA=530;AB=0.50816;ABA=422;ABP=3.5063;ABR=436;AF=0.1614;AN=700;BL=21453;BR=23313;BVAR;BaseQRankSum=17.562;DB;DEL;DP=25587;DP4=1869,1600,283,201;Dels=0.14;EL=259;EPP=3.6003;ER=271;FQ=999;FR;FS=14.595;HETAR=159;HOMA=41;HOMR=846;HP=3;HPLen=3;HR=3;HRun=3;HU=T;INDEL;InbreedingCoeff=0.0995;LEN=1;LRB=0.041549;LRBP=170.83;MQ=95.89;MQ0=0;MQ0Fraction=0.0000;MQM=72.162;MQRankSum=2.564;NF;NR;NS=1046;PP;PV4=0.058,6.6e-129,0.04,1;RA=4303;RL=264;RPP=3.0267;RR=266;RUN=1;ReadPosRankSum=0.176;SAB=0.58679;SAF=311;SAP=37.688;SAR=219;SC=GGGAAAGCTGATTTACTGATT;SRB=0.54892;SRF=2362;SRP=92.453;SRR=1941;TC;TR=3;TU=T;VQSLOD=8.7746;dbSNP=120;set=Intersection;sumGLbyD=15.27 +20 22590907 . A AC 4204.88 PASS AA=67;AB=0.592;ABA=51;ABP=12.2;ABR=74;AF=0.0554;AF1=0.0468;AN=560;BL=2277;BR=2389;BVAR;BaseQRankSum=10.968;CI95=0.03759,0.05639;DP=14380;DP4=2514,2018,33,33;Dels=0.00;EL=22;EPP=20.155;ER=45;FQ=999;FR;FS=3.846;HETAR=25;HOMA=4;HOMR=1049;HP=4;HPLen=5;HR=5;HRun=0;HU=A;INDEL;INS;InbreedingCoeff=0.0719;LEN=1;LRB=0.024003;LRBP=8.8481;MQ=110.68;MQ0=0;MQ0Fraction=0.0000;MQM=96.149;MQRankSum=2.668;NF;NR;NS=1078;PP;PV4=0.39,1,0.46,0.36;RA=5468;RL=33;RPP=3.0427;RR=34;RUN=1;ReadPosRankSum=-1.097;SAB=0.50746;SAF=34;SAP=3.0427;SAR=33;SC=TCATATCAAAAACATTACGTT;SRB=0.54389;SRF=2974;SRP=94.508;SRR=2494;TC;TR=5;TU=A;VQSLOD=10.0712;set=Intersection;sumGLbyD=27.69 +20 22806326 rs11468890 ATTCCATCAC A 105320.99 PASS AC=567;AF=0.48795;AN=1162;BVAR;BaseQRankSum=32.858;DB;DEL;DP=26278;DP4=727,796,554,587;Dels=0.30;FQ=999;FR;FS=1.923;HP=3;HPLen=3;HR=2;HRun=0;HU=T;INDEL;InbreedingCoeff=0.2548;LEN=9;MQ=89.42;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-23.545;NF;NR;PP;PV4=0.7,1,1.3e-167,1;RUN=1;ReadPosRankSum=4.384;SC=GGCTGCTCCCATTCCATCACT;TC;TR=2;TU=T;VQSLOD=8.2594;set=Intersection;sumGLbyD=69.81 +20 22999898 rs55966257 CAGGA C 8019.97 PASS AA=23;AB=0.57778;ABA=19;ABP=5.3748;ABR=26;AC=214;AF=0.18838;AN=1136;BL=1143;BR=1040;BVAR;BaseQRankSum=29.294;DB;DEL;DP=8216;Dels=0.02;EL=11;EPP=3.1047;ER=12;FS=14.938;HETAR=14;HOMA=2;HOMR=948;HRun=0;InbreedingCoeff=0.0797;LEN=4;LRB=0.047183;LRBP=13.563;MQ0=0;MQ0Fraction=0.0000;MQM=34.783;MQRankSum=-20.301;NS=964;RA=3637;RL=13;RPP=3.86;RR=10;RUN=1;ReadPosRankSum=-24.607;SAB=0.47826;SAF=11;SAP=3.1047;SAR=12;SRB=0.49024;SRF=1783;SRP=6.02;SRR=1854;VQSLOD=7.9163;set=Intersection;sumGLbyD=9.43 +20 23385964 rs57723772 GAA G 8170.95 PASS AC=257;AF=0.20928;AN=1228;BaseQRankSum=32.220;DB;DP=3291;FS=1.688;HRun=3;HaplotypeScore=22.6739;InbreedingCoeff=0.0171;MQ=58.44;MQ0=32;MQ0Fraction=0.0097;MQRankSum=-4.893;QD=6.55;ReadPosRankSum=-35.524;SB=-3631.67;VQSLOD=5.6549;set=VQSR +20 23534530 . TA T 3542.10 PASS AA=45;AB=0.75658;ABA=37;ABP=89.926;ABR=115;AC=35;AF=0.02991;AN=1170;BL=3090;BR=270;BVAR;BaseQRankSum=-6.892;DEL;DP=8108;Dels=0.00;EL=19;EPP=5.3748;ER=26;FS=1.026;HETAR=76;HOMA=896;HOMR=18;HRun=1;InbreedingCoeff=0.0551;LEN=1;LRB=0.83929;LRBP=5142.4;MQ0Fraction=0.0017;MQM=41.578;MQRankSum=0.818;NS=991;RA=203;RL=43;RPP=84.127;RR=2;RUN=1;ReadPosRankSum=-12.923;SAB=0.37778;SAF=17;SAP=8.8491;SAR=28;SRB=0.5665;SRF=115;SRP=10.808;SRR=88;VQSLOD=4.2093;set=Intersection;sumGLbyD=3.49 +20 23976810 rs5841018 A ATATTAAT 1782.38 PASS AF=0.1387;AF1=0.01507;BaseQRankSum=3.717;CI95=0.00188,0.03947;DB;DP=1712;DP4=357,376,7,2;Dels=0.00;FQ=31.1;FS=14.489;HPLen=2;HRun=0;INDEL;InbreedingCoeff=0.1123;MQ=49.53;MQ0=2;MQ0Fraction=0.0055;MQRankSum=-4.928;PV4=0.1,1,0.00085,0.016;ReadPosRankSum=-4.456;VQSLOD=5.3140;dbSNP=116;set=Intersection;sumGLbyD=19.98 +20 24222100 . CTTTTA C 4219.36 PASS AA=57;AB=0.59434;ABA=43;ABP=11.205;ABR=63;AF=0.01803;AF1=0.01547;AN=1220;BL=2073;BR=2345;BVAR;BaseQRankSum=7.990;CI95=0.0114,0.02137;DEL;DP=17536;DP4=2140,2346,7,12;Dels=0.01;EL=32;EPP=4.877;ER=25;FQ=104;FS=0.614;HETAR=21;HOMA=4;HOMR=1042;HRun=0;INDEL;InbreedingCoeff=0.1941;LEN=5;LRB=0.061566;LRBP=39.374;MQ=73.32;MQ0Fraction=0.0021;MQM=39.614;MQRankSum=-5.728;NS=1067;PV4=0.37,1.1e-39,3.5e-09,1;RA=5527;RL=28;RPP=3.0484;RR=29;RUN=1;ReadPosRankSum=0.214;SAB=0.54386;SAF=31;SAP=3.9627;SAR=26;SRB=0.49267;SRF=2723;SRP=5.588;SRR=2804;VQSLOD=7.5428;set=Intersection;sumGLbyD=38.08 +20 24395018 . AT A 49310 PASS AA=146;AB=0.91198;ABA=130;ABP=2180.5;ABR=1347;AC=50;AF=0.04045;AN=1236;BL=587;BR=9625;BVAR;BaseQRankSum=-4.610;DEL;DP=12793;Dels=0.01;EL=54;EPP=24.487;ER=92;FS=22.108;HETAR=485;HOMA=384;HOMR=210;HRun=2;InbreedingCoeff=0.0374;LEN=1;LRB=0.88504;LRBP=17373;MQ0=0;MQ0Fraction=0.0000;MQM=102.26;MQRankSum=2.256;NS=1080;RA=2377;RL=1;RPP=311.42;RR=145;RUN=1;ReadPosRankSum=-16.347;SAB=0.63699;SAF=93;SAP=26.807;SAR=53;SRB=0.52167;SRF=1240;SRP=12.702;SRR=1137;VQSLOD=3.2421;set=filterInVQSR-2of5;sumGLbyD=3.80 +20 24411517 . C CA 246.18 PASS AF=0.01546;AF1=0.01095;BaseQRankSum=7.832;CI95=0.005698,0.01709;DP=7981;DP4=983,2037,7,7;Dels=0.00;FQ=27.9;FS=18.815;HPLen=3;HRun=3;INDEL;InbreedingCoeff=0.0175;MQ=60.28;MQ0Fraction=0.0137;MQRankSum=-7.243;PV4=0.25,1,2.7e-05,1;ReadPosRankSum=-0.143;VQSLOD=4.3701;set=Intersection;sumGLbyD=6.56 +20 24421169 . AG A 27480 PASS AA=182;AB=0.8303;ABA=149;ABP=835;ABR=729;AC=89;AF=0.07224;AN=1232;BL=11276;BR=2214;BVAR;BaseQRankSum=-5.447;DEL;DP=11717;Dels=0.01;EL=103;EPP=9.8827;ER=79;FR;FS=15.492;HETAR=343;HOMA=607;HOMR=114;HP=4;HR=1;HRun=1;HU=G;InbreedingCoeff=0.0353;LEN=1;LRB=0.67176;LRBP=13222;MQ0=0;MQ0Fraction=0.0000;MQM=88.324;MQRankSum=2.221;NF;NR;NS=1071;PP;RA=1226;RL=169;RPP=293.37;RR=13;RUN=1;ReadPosRankSum=-19.711;SAB=0.54945;SAF=100;SAP=6.876;SAR=82;SC=CCTTAGCCCCAGAAAACATCT;SRB=0.44535;SRF=546;SRP=34.814;SRR=680;TC;TR=1;TU=G;VQSLOD=4.2669;set=Intersection;sumGLbyD=3.91 +20 24765537 rs71841337 ATTT A,AT,ATT,ATTTT,ATTTTT 37852 PASS AC=13,120,527,51,92;AF=0.01102,0.10169,0.44661,0.04322,0.07797;AN=1180;BVAR;BaseQRankSum=8.172;DB;DEL;DP=39116;DP4=200,331,851,1169;FR;FS=2.394;HP=15;HR=15;HU=T;HaplotypeScore=20.8091;INDEL;INS;InbreedingCoeff=0.4815;MQ0=1;MQ0Fraction=0.0003;MQRankSum=4.344;NF;NR;PP;PV4=0.067,1,1,0.1;QD=7.90;RUN=1;ReadPosRankSum=1.798;SB=-8371.96;SC=CTCTGCAACAATTTTTTTTTT;TC;TR=15;TU=T;VQSLOD=9.9679;dbSNP=120;set=Intersection +20 25500689 . A AATTT 84980.72 PASS AC=1005;AF=0.89096;AN=1128;BaseQRankSum=17.400;DP=2324;FS=6.721;HRun=0;HaplotypeScore=25.3376;InbreedingCoeff=0.2148;MQ=75.19;MQ0=1;MQ0Fraction=0.0004;MQRankSum=-8.221;QD=38.28;ReadPosRankSum=4.504;SB=-34833.07;VQSLOD=4.6038;set=VQSR +20 25550373 . GA G 11251.31 PASS AA=246;AB=0.42963;ABA=154;ABP=14.624;ABR=116;AC=566;AF=0.6521;AN=868;BL=5230;BR=11845;BVAR;BaseQRankSum=7.418;DEL;DP=8885;Dels=0.02;EL=99;EPP=23.348;ER=147;FR;FS=50.357;HETAR=150;HOMA=849;HOMR=14;HP=1;HR=2;HRun=1;HU=G;InbreedingCoeff=0.1365;LEN=1;LRB=0.38741;LRBP=5567.9;MQ0=0;MQ0Fraction=0.0000;MQM=97.561;MQRankSum=0.050;NF;NR;NS=1013;PP;RA=269;RL=75;RPP=84.361;RR=171;RUN=1;ReadPosRankSum=-7.128;SAB=0.52846;SAF=130;SAP=4.7404;SAR=116;SC=CACGGAGGCGGAGGAAGCAGC;SRB=0.42379;SRF=114;SRP=16.58;SRR=155;TC;TR=6;TU=AGG;VQSLOD=4.0103;set=filterInVQSR-2of5;sumGLbyD=4.58 +20 25903865 . TTC T 7459.23 PASS AC=277;AF=0.23316;AN=1188;BaseQRankSum=31.479;DP=2969;FS=137.723;HRun=0;HaplotypeScore=37.3300;InbreedingCoeff=-0.1755;MQ=53.49;MQ0=50;MQ0Fraction=0.0168;MQRankSum=-25.506;QD=4.70;ReadPosRankSum=-5.913;SB=-1747.98;VQSLOD=5.4731;set=VQSR +20 25934237 . C CCACTT 771.36 PASS AC=37;AF=0.0426;AN=868;BaseQRankSum=16.331;DP=2253;FS=4.545;HRun=0;HaplotypeScore=29.9764;InbreedingCoeff=-0.0685;MQ=48.12;MQ0=87;MQ0Fraction=0.0386;MQRankSum=-12.497;QD=3.37;ReadPosRankSum=-8.428;SB=-297.70;VQSLOD=4.2324;set=VQSR +20 26054751 rs112967123 TATC T 33244 PASS AA=1863;AB=0.79012;ABA=1788;ABP=6231;ABR=6731;AC=227;AF=0.18218;AN=1246;BL=74924;BR=72452;BVAR;BaseQRankSum=32.258;DB;DEL;DP=36404;DS;Dels=0.05;EL=931;EPP=3.0115;ER=932;FR;FS=265.752;HETAR=527;HOMA=2;HOMR=565;HP=1;HR=2;HRun=0;HU=T;InbreedingCoeff=-0.2137;LEN=3;LRB=0.016773;LRBP=93.048;MQ0Fraction=0.0127;MQM=28.797;MQRankSum=-5.329;NF;NR;NS=1094;PP;RA=14604;RL=1014;RPP=34.743;RR=849;RUN=1;ReadPosRankSum=8.394;SAB=0.65486;SAF=1220;SAP=391.07;SAR=643;SC=TCACCATCATTATCATCATTA;SRB=0.56717;SRF=8283;SRP=575.39;SRR=6321;TC;TR=8;TU=ATC;VQSLOD=1.0486;set=filterInVQSR-2of5;sumGLbyD=6.54 +20 26075169 . CTTCATT C 34603 PASS AA=311;AB=0.88905;ABA=298;ABP=3534.4;ABR=2388;AC=235;AF=0.18921;AN=1242;BL=17537;BR=5525;BVAR;BaseQRankSum=33.761;DEL;DP=20706;DS;Dels=0.01;EL=206;EPP=74.236;ER=105;FR;FS=94.549;HETAR=596;HOMA=99;HOMR=336;HP=3;HR=2;HRun=0;HU=T;InbreedingCoeff=-0.2083;LEN=6;LRB=0.52086;LRBP=13589;MQ0Fraction=0.0426;MQM=14.524;MQRankSum=-37.199;NF;NR;NS=1038;PP;RA=3600;RL=311;RPP=678.34;RR=0;RUN=1;ReadPosRankSum=-27.333;SAB=0.66238;SAF=206;SAP=74.236;SAR=105;SC=TCACCATCATCTTCATTATCA;SRB=0.55833;SRF=2010;SRP=109.41;SRR=1590;TC;TR=7;TU=ATC;VQSLOD=1.4394;set=filterInVQSR-2of5;sumGLbyD=4.96 +20 26120452 . CAG C 7863.19 PASS AA=163;AB=0.70489;ABA=157;ABP=196.99;ABR=375;AC=171;AF=0.1908;AN=896;BL=3455;BR=4877;BVAR;BaseQRankSum=25.536;DEL;DP=7014;Dels=0.10;EL=58;EPP=32.438;ER=105;FS=231.723;HETAR=90;HOMA=5;HOMR=387;HRun=0;InbreedingCoeff=-0.1966;LEN=2;LRB=0.17067;LRBP=530;MQ0Fraction=0.0470;MQM=21.951;MQRankSum=-23.449;NS=482;RA=1117;RL=62;RPP=23.273;RR=101;RUN=1;ReadPosRankSum=1.904;SAB=0.37423;SAF=61;SAP=25.404;SAR=102;SRB=0.41719;SRF=466;SRP=69.544;SRR=651;VQSLOD=-0.9395;set=filterInVQSR-2of5;sumGLbyD=5.06 +20 26136208 . A AT 17172.04 PASS AA=252;AB=0.73593;ABA=183;ABP=338.07;ABR=510;AC=381;AF=0.30775;AN=1238;BL=8304;BR=14158;BVAR;BaseQRankSum=41.520;DP=40036;DP4=2448,2564,317,366;Dels=0.00;EL=163;EPP=50.197;ER=89;FQ=999;FS=6.531;HETAR=149;HOMA=52;HOMR=708;HRun=1;INDEL;INS;InbreedingCoeff=-0.3996;LEN=1;LRB=0.26062;LRBP=3315.9;MQ=64.20;MQ0=22;MQ0Fraction=0.0048;MQM=25.706;MQRankSum=-29.318;NS=909;PV4=0.24,1.1e-119,3.2e-281,1;RA=2939;RL=58;RPP=162.39;RR=194;RUN=1;ReadPosRankSum=0.592;SAB=0.24206;SAF=61;SAP=148.64;SAR=191;SRB=0.4852;SRF=1426;SRP=8.6026;SRR=1513;VQSLOD=0.5981;set=filterInVQSR-2of5;sumGLbyD=5.77 +20 26185812 . AG A 322.58 PASS AF=0.0342;BaseQRankSum=3.668;DP=3014;Dels=0.01;FR;FS=10.238;HP=8;HPLen=6;HR=6;HRun=6;HU=G;InbreedingCoeff=0.1504;MQ0Fraction=0.0473;MQRankSum=-5.464;NF;NR;PP;ReadPosRankSum=0.536;SC=GGGTGGGTGGAGGGGGGAGGG;TC;TR=6;TU=G;VQSLOD=5.0767;set=Intersection;sumGLbyD=8.46 +20 30963468 . AGTTT A 2041.12 PASS AA=38;AB=0.75694;ABA=35;ABP=85.587;ABR=109;AC=34;AF=0.0377;AN=902;BL=1974;BR=668;BVAR;BaseQRankSum=3.060;DEL;DP=22806;DP4=1997,1747,28,36;Dels=0.02;EL=17;EPP=3.9246;ER=21;FR;FS=16.034;HETAR=29;HOMA=1;HOMR=1009;HP=1;HPLen=1;HR=1;HRun=0;HU=G;INDEL;InbreedingCoeff=0.0752;LEN=4;LRB=0.49432;LRBP=1404.9;MQ=87.17;MQ0Fraction=0.0013;MQM=98.079;MQRankSum=6.021;NF;NR;NS=1039;PP;PV4=0.13,1.5e-07,1,0.051;RA=4052;RL=36;RPP=69.069;RR=2;RUN=1;ReadPosRankSum=-1.847;SAB=0.5;SAF=19;SAP=3.0103;SAR=19;SC=AGAAGTAAGTAGTTTGTTTTT;SRB=0.53776;SRF=2179;SRP=53.19;SRR=1873;TC;TR=9;TU=AAGT;VQSLOD=7.3578;set=Intersection;sumGLbyD=14.03 +20 31963212 . AAAAAAAAAAAAG A 727.15 PASS AC=5;AF=0.0080;AN=622;BaseQRankSum=4.037;DP=1480;FS=0.000;HRun=0;HaplotypeScore=43.3793;InbreedingCoeff=0.0350;MQ=51.77;MQ0=59;MQ0Fraction=0.0399;MQRankSum=-1.799;QD=22.72;ReadPosRankSum=3.591;SB=-364.04;VQSLOD=5.3166;set=VQSR +20 31997272 . CT C,CTT,CTTT 1837.10 PASS AA=63;AB=0.77559;ABA=57;ABP=170.57;ABR=197;AC=79,49,30;AF=0.06594,0.04090,0.02504;AN=1198;BL=2372;BR=2640;BVAR;BaseQRankSum=3.277;DP=9050;Dels=0.03;EL=24;EPP=10.766;ER=39;FR;FS=0.303;HETAR=45;HOMA=1;HOMR=981;HP=10;HPLen=10;HR=10;HRun=10;HU=T;INS;InbreedingCoeff=0.2796;LEN=1;LRB=0.053472;LRBP=34.128;MQ0Fraction=0.0000;MQM=50.889;MQRankSum=0.610;NF;NR;NS=1027;PP;RA=3776;RL=30;RPP=3.3205;RR=33;RUN=1;ReadPosRankSum=-0.800;SAB=0.39683;SAF=25;SAP=8.8354;SAR=38;SC=ACCCAACTTCCTTTTTTTTTT;SRB=0.46213;SRF=1745;SRP=50.049;SRR=2031;TC;TR=10;TU=T;VQSLOD=4.1189;set=filterInVQSR-2of5;sumGLbyD=3.66 +20 33446974 rs113250263 TAA T,TA,TAAA 17130.16 PASS AC=65,417,184;AF=0.05941,0.38117,0.16819;AN=1094;BVAR;BaseQRankSum=3.400;DB;DEL;DP=22362;DP4=221,247,418,524;Dels=0.33;FR;FS=15.409;HP=15;HR=14;HRun=14;HU=A;INDEL;INS;InbreedingCoeff=0.5215;MQ=61.32;MQ0Fraction=0.0021;MQRankSum=0.481;NF;NR;PP;PV4=0.33,1,1,1;RUN=1;ReadPosRankSum=-0.056;SC=CTCCGTCTCATAAAAAAAAAA;TC;TR=14;TU=A;VQSLOD=8.0974;dbSNP=132;set=Intersection;sumGLbyD=12.78 +20 33877149 . C CT 1784.40 PASS AA=58;AB=0.73096;ABA=53;ABP=94.289;ABR=144;AC=65;AF=0.05682;AN=1144;BL=3298;BR=1935;BVAR;BaseQRankSum=-2.066;DP=8074;Dels=0.02;EL=22;EPP=10.348;ER=36;FR;FS=11.452;HETAR=47;HOMA=3;HOMR=754;HP=16;HR=12;HRun=12;HU=T;INS;InbreedingCoeff=0.1178;LEN=1;LRB=0.26046;LRBP=773.91;MQ0Fraction=0.0165;MQM=52.259;MQRankSum=0.734;NF;NR;NS=804;PP;RA=2141;RL=43;RPP=32.363;RR=15;RUN=1;ReadPosRankSum=-1.273;SAB=0.46552;SAF=27;SAP=3.6093;SAR=31;SC=ATTTTCTTTTCTTTTTTTTTT;SRB=0.37553;SRF=804;SRP=291.14;SRR=1337;TC;TR=12;TU=T;VQSLOD=3.1540;set=filterInVQSR-2of5;sumGLbyD=2.84 +20 34358698 . A AAAAAAT 583.61 PASS AC=27;AF=0.02542;AN=1062;BaseQRankSum=5.228;DP=1997;FS=3.765;HRun=0;HaplotypeScore=27.7123;InbreedingCoeff=0.0566;MQ=55.50;MQ0=14;MQ0Fraction=0.0070;MQRankSum=-3.961;QD=5.21;ReadPosRankSum=0.862;SB=-399.69;VQSLOD=4.3826;set=VQSR +20 34387589 rs112431805 CT C,CTT 4039.10 PASS AA=121;AB=0.75368;ABA=117;ABP=268.53;ABR=358;AC=84,139;AF=0.07047,0.11661;AN=1192;BL=5557;BR=3901;BVAR;BaseQRankSum=2.693;DB;DP=10157;Dels=0.03;EL=47;EPP=16.093;ER=74;FR;FS=7.639;HETAR=89;HOMA=2;HOMR=913;HP=13;HR=11;HRun=11;HU=T;INS;InbreedingCoeff=0.2097;LEN=1;LRB=0.17509;LRBP=632.63;MQ0Fraction=0.0000;MQM=49.802;MQRankSum=-0.801;NF;NR;NS=1004;PP;RA=3789;RL=77;RPP=22.554;RR=44;RUN=1;ReadPosRankSum=-2.691;SAB=0.3719;SAF=45;SAP=20.256;SAR=76;SC=AAGAAGTGTTCTTTTTTTTTT;SRB=0.40987;SRF=1553;SRP=270.35;SRR=2236;TC;TR=11;TU=T;VQSLOD=4.0473;set=filterInVQSR-2of5;sumGLbyD=4.64 +20 34493409 rs73621682 C CAG 62288.93 PASS AA=1069;AB=0.54863;ABA=826;ABP=40.606;ABR=1004;AC=257;AF=0.3640;AN=706;BL=41524;BR=47039;BVAR;BaseQRankSum=-24.248;DB;DP=30195;DP4=1743,1636,614,487;Dels=0.00;EL=582;EPP=21.343;ER=487;FQ=999;FR;FS=5.080;HETAR=298;HOMA=63;HOMR=712;HP=1;HPLen=1;HR=1;HRun=0;HU=A;INDEL;INS;InbreedingCoeff=0.1437;LEN=2;LRB=0.062272;LRBP=748.76;MQ=77.99;MQ0=3;MQ0Fraction=0.0015;MQM=54.446;MQRankSum=0.160;NF;NR;NS=1073;PP;PV4=0.016,1,0.01,1;RA=4461;RL=526;RPP=3.5973;RR=543;RUN=1;ReadPosRankSum=-1.716;SAB=0.57343;SAF=613;SAP=53.08;SAR=456;SC=AGGAAGAGATCAGAGCTCCCC;SRB=0.52634;SRF=2348;SRP=29.892;SRR=2113;TC;TR=4;TU=AG;VQSLOD=8.7047;dbSNP=130;set=Intersection;sumGLbyD=49.82 +20 35086229 rs112534255 G GAT 6109.24 PASS AA=14;AB=0.71795;ABA=11;ABP=19.101;ABR=28;AC=35;AF=0.0509;AN=688;BL=846;BR=517;BVAR;BaseQRankSum=-7.153;DB;DP=15775;DP4=2064,2212,31,22;Dels=0.00;EL=7;EPP=3.0103;ER=7;FR;FS=0.000;HETAR=10;HOMA=2;HOMR=914;HP=3;HPLen=4;HR=4;HRun=0;HU=G;INDEL;INS;InbreedingCoeff=0.1170;LEN=2;LRB=0.24138;LRBP=175.46;MQ=54.65;MQ0Fraction=0.0118;MQM=45.643;MQRankSum=1.614;NF;NR;NS=926;PP;PV4=0.17,1,1,1;RA=2867;RL=11;RPP=12.937;RR=3;RUN=1;ReadPosRankSum=-0.520;SAB=0.71429;SAF=10;SAP=8.5941;SAR=4;SC=TTTTAGTAAAGGGGATTTCAC;SRB=0.58249;SRF=1670;SRP=172.46;SRR=1197;TC;TR=4;TU=G;VQSLOD=10.3126;set=Intersection;sumGLbyD=42.13 +20 35575895 rs67189278 AGTGT A,AGT,AGTGTGT,TGTGT 43809.26 PASS AC=593,3,481;AF=0.53327,0.00270,0.43255;AN=1112;BVAR;BaseQRankSum=-8.327;DB;DEL;DP=8989;Dels=0.04;FR;FS=9.400;HP=2;HPLen=1;HR=1;HRun=0;HU=G;INS;InbreedingCoeff=0.7735;LEN=2;MQ0Fraction=0.0400;MQRankSum=-2.719;NF;NR;PP;RUN=1;ReadPosRankSum=-9.301;SC=TGTGTGTGTGAGTGTGTGTGT;TC;TR=22;TU=GT;VQSLOD=8.6440;set=Intersection;sumGLbyD=6.01 +20 35957317 . CTGACT C,CGACT 4370.96 PASS ABR=81;AC=22,1;AF=0.0321,0.0015;AF1=0.04523;AN=686;BVAR;BaseQRankSum=7.969;CI95=0.0354,0.05752;DEL;DP=16632;DP4=1942,1815,17,21;Dels=0.03;FQ=999;FR;FS=0.531;HOMA=1;HOMR=998;HP=2;HPLen=1;HR=1;HRun=0;HU=T;INDEL;InbreedingCoeff=0.0587;MQ=83.38;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-7.201;NF;NR;NS=1020;PP;PV4=0.42,0.00017,4.5e-12,1;RA=4620;RUN=1;ReadPosRankSum=-1.007;SC=CCTCTCAGCTCTGACTGAGTC;SRB=0.50043;SRF=2312;SRP=3.0178;SRR=2308;TC;TR=8;TU=ACTG;VQSLOD=9.9778;dbSNP=130;set=Intersection;sumGLbyD=36.45 +20 36136198 . GTGTC G 2078.76 PASS AA=35;AB=0.54167;ABA=33;ABP=4.096;ABR=39;AC=17;AF=0.01384;AN=1228;BL=1212;BR=1523;BVAR;BaseQRankSum=6.900;DEL;DP=22483;DP4=1696,2291,9,16;Dels=0.01;EL=9;EPP=20.94;ER=26;FQ=999;FR;FS=3.023;HETAR=13;HOMA=1;HOMR=1061;HP=1;HPLen=1;HR=1;HRun=0;HU=T;INDEL;InbreedingCoeff=0.1113;LEN=4;LRB=0.11371;LRBP=79.803;MQ=93.98;MQ0=1;MQ0Fraction=0.0003;MQM=83.686;MQRankSum=-1.683;NF;NR;NS=1075;PP;PV4=0.55,1,0.0083,1;RA=5771;RL=19;RPP=3.5687;RR=16;RUN=1;ReadPosRankSum=0.618;SAB=0.37143;SAF=13;SAP=8.0357;SAR=22;SC=TATCATTTTAGTGTCTGTCTG;SRB=0.44966;SRF=2595;SRP=130.03;SRR=3176;TC;TR=11;TU=CTGT;VQSLOD=10.1935;set=Intersection;sumGLbyD=31.66 +20 36250522 . CA C 37933 PASS AA=51;AB=0.95582;ABA=44;ABP=1800.5;ABR=952;AC=23;AF=0.01885;AN=1220;BL=691;BR=3464;BVAR;BaseQRankSum=-2.418;DEL;DP=11998;Dels=0.00;EL=18;EPP=12.59;ER=33;FS=2.307;HETAR=348;HOMA=534;HOMR=164;HRun=1;InbreedingCoeff=0.0763;LEN=1;LRB=0.66739;LRBP=4021.7;MQ0=2;MQ0Fraction=0.0006;MQM=53.647;MQRankSum=1.083;NS=1047;RA=1663;RL=2;RPP=97.065;RR=49;RUN=1;ReadPosRankSum=-12.726;SAB=0.68627;SAF=35;SAP=18.381;SAR=16;SRB=0.59651;SRF=992;SRP=137.56;SRR=671;VQSLOD=4.1346;set=filterInVQSR-2of5;sumGLbyD=3.29 +20 36285033 rs34715186 AT A 39417 PASS AA=530;AB=0.5406;ABA=447;ABP=16.939;ABR=526;AC=88;AF=0.0950;AN=926;BL=20722;BR=20406;BVAR;BaseQRankSum=15.611;DB;DEL;DP=36713;DP4=2551,2475,236,218;Dels=0.09;EL=241;EPP=12.45;ER=289;FQ=999;FR;FS=1.290;HETAR=141;HOMA=16;HOMR=926;HP=2;HPLen=3;HR=3;HRun=1;HU=A;INDEL;InbreedingCoeff=0.0742;LEN=1;LRB=0.0076833;LRBP=8.2825;MQ=104.81;MQ0=0;MQ0Fraction=0.0000;MQM=84.285;MQRankSum=-0.702;NF;NR;NS=1083;PP;PV4=0.62,1,1,1;RA=6562;RL=263;RPP=3.0759;RR=267;RUN=1;ReadPosRankSum=0.090;SAB=0.55849;SAF=296;SAP=18.76;SAR=234;SC=AAAAACACAAATCAGATCGTG;SRB=0.51707;SRF=3393;SRP=19.614;SRR=3169;TC;TR=3;TU=A;VQSLOD=10.5533;dbSNP=126;set=Intersection;sumGLbyD=14.15 +20 36384872 . CTG C 43532.41 PASS AC=1213;AF=0.99589;AN=1218;BaseQRankSum=0.802;DP=3208;FS=9.727;HRun=0;HaplotypeScore=46.6153;InbreedingCoeff=0.1085;MQ=58.37;MQ0=50;MQ0Fraction=0.0156;MQRankSum=-1.672;QD=13.57;ReadPosRankSum=2.063;SB=-18894.12;VQSLOD=4.7353;set=VQSR +20 36542802 . GTA G 31310.15 PASS AA=1481;AB=0.67546;ABA=1378;ABP=1138.4;ABR=2868;AC=437;AF=0.35938;AN=1216;BL=25719;BR=95500;BVAR;BaseQRankSum=9.478;DEL;DP=18068;DS;Dels=0.10;EL=889;EPP=132.34;ER=592;FS=320.726;HETAR=591;HOMA=44;HOMR=378;HRun=0;InbreedingCoeff=-0.4197;LEN=2;LRB=0.57566;LRBP=87231;MQ0Fraction=0.0091;MQM=29.319;MQRankSum=-3.409;NS=1013;RA=4037;RL=3;RPP=3193;RR=1478;RUN=1;ReadPosRankSum=-6.687;SAB=0.40041;SAF=593;SAP=130.61;SAR=888;SRB=0.39014;SRF=1575;SRP=426.21;SRR=2462;VQSLOD=-1.6586;set=filterInVQSR-2of5;sumGLbyD=5.49 +20 36985025 . CCA C 4.57 PASS AC=0;AF=0.0000;AN=682;BaseQRankSum=4.199;DP=1504;FS=1.036;HRun=0;HaplotypeScore=18.5241;InbreedingCoeff=0.0460;MQ=57.04;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-1.774;ReadPosRankSum=-2.105;VQSLOD=6.7455;set=VQSR +20 37139725 . CAG C 250.77 PASS AF=0.0084;AF1=0.0139;BaseQRankSum=4.131;CI95=0.00885,0.01991;DP=7973;DP4=1808,1990,2,7;Dels=0.01;FQ=104;FR;FS=11.160;HP=3;HPLen=2;HR=1;HRun=0;HU=A;INDEL;InbreedingCoeff=-0.0001;MQ=103.71;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-3.378;NF;NR;PP;PV4=0.18,0.0011,0.041,1;ReadPosRankSum=0.605;SC=AGATGGGGAACAGAGAGCAAG;TC;TR=6;TU=AG;VQSLOD=7.0630;set=Intersection;sumGLbyD=12.13 +20 37213224 . G GTA 3230.05 PASS AA=32;AB=0.50769;ABA=32;ABP=3.0437;ABR=33;AC=12;AF=0.0168;AF1=0.02635;AN=714;BL=1271;BR=1743;BVAR;BaseQRankSum=-7.288;CI95=0.02212,0.03319;DP=14304;DP4=2180,2256,13,21;Dels=0.00;EL=20;EPP=7.3532;ER=12;FQ=999;FR;FS=7.863;HETAR=9;HOMA=0;HOMR=1043;HP=1;HPLen=1;HR=1;HRun=0;HU=T;INDEL;INS;InbreedingCoeff=0.0410;LEN=2;LRB=0.1566;LRBP=163.52;MQ=95.56;MQ0=1;MQ0Fraction=0.0005;MQM=51.562;MQRankSum=0.420;NF;NR;NS=1052;PP;PV4=0.23,1,0.03,0.33;RA=5138;RL=11;RPP=9.7962;RR=21;RUN=1;ReadPosRankSum=-1.122;SAB=0.28125;SAF=9;SAP=16.311;SAR=23;SC=TTTGCATCCAGTAGCACCACT;SRB=0.42293;SRF=2173;SRP=268.11;SRR=2965;TC;TR=1;TU=T;VQSLOD=9.7315;set=Intersection;sumGLbyD=36.69 +20 37282014 . ATGG A 2518.52 PASS AF=0.03519;BaseQRankSum=11.994;DP=24592;DP4=415,3804,8,49;DS;Dels=0.01;FQ=999;FR;FS=2.049;HP=1;HPLen=1;HR=1;HRun=0;HU=T;INDEL;InbreedingCoeff=0.1028;MQ=51.01;MQ0Fraction=0.0139;MQRankSum=-5.912;NF;NR;PP;PV4=0.27,1,0.22,0.015;ReadPosRankSum=1.781;SC=GGTGGTGATGATGGTGGTGGT;TC;TR=17;TU=GGT;VQSLOD=2.1183;set=filterInVQSR-2of5;sumGLbyD=9.05 +20 37532218 . GTCCGTCCA ATCCGTCCA,G 76120.88 PASS AC=998;AF=0.92924;AN=1074;BaseQRankSum=-2.877;DP=3087;FR;FS=9.889;HP=2;HPLen=2;HR=1;HRun=0;HU=T;HaplotypeScore=71.6244;InbreedingCoeff=-0.0027;MQ=52.68;MQ0=543;MQ0Fraction=0.1759;MQRankSum=-1.750;NF;NR;PP;QD=24.98;ReadPosRankSum=-0.850;SB=-36635.43;SC=CCGTCCGTCCGTCCGTCCATC;TC;TR=19;TU=CCGT;VQSLOD=5.3068;set=Intersection +20 37712193 . AAG A 2670.33 PASS AA=106;AB=0.62821;ABA=87;ABP=36.418;ABR=147;AC=53;AF=0.0759;AN=698;BL=4672;BR=4303;BVAR;BaseQRankSum=13.696;DEL;DP=15155;DP4=1340,1852,32,52;Dels=0.06;EL=57;EPP=4.3214;ER=49;FR;FS=0.824;HETAR=43;HOMA=7;HOMR=982;HP=1;HPLen=2;HR=2;HRun=0;HU=A;INDEL;InbreedingCoeff=0.0861;LEN=2;LRB=0.041114;LRBP=35.954;MQ=86.12;MQ0=0;MQ0Fraction=0.0000;MQM=54.236;MQRankSum=-5.745;NF;NR;NS=1034;PP;PV4=0.5,7.3e-26,1.1e-10,1;RA=4423;RL=58;RPP=5.0589;RR=48;RUN=1;ReadPosRankSum=2.617;SAB=0.38679;SAF=41;SAP=14.81;SAR=65;SC=GAAAATTCTGAAGAGAGTCAG;SRB=0.43093;SRF=1906;SRP=186.29;SRR=2517;TC;TR=6;TU=AG;VQSLOD=9.8131;set=Intersection;sumGLbyD=14.20 +20 37739002 . T TCA 1395.38 PASS AA=16;AB=0.48387;ABA=16;ABP=3.0803;ABR=15;AC=11;AF=0.00950;AN=1158;BL=504;BR=630;BVAR;BaseQRankSum=-3.257;DP=13617;DP4=1660,883,7,5;Dels=0.00;EL=7;EPP=3.5532;ER=9;FR;FS=1.114;HETAR=9;HOMA=0;HOMR=991;HP=1;HPLen=2;HR=2;HRun=0;HU=T;INDEL;INS;InbreedingCoeff=0.0527;LEN=2;LRB=0.11111;LRBP=33.411;MQ=88.41;MQ0=0;MQ0Fraction=0.0000;MQM=83.75;MQRankSum=1.713;NF;NR;NS=1000;PP;PV4=0.76,1,1,0.5;RA=3257;RL=6;RPP=5.1818;RR=10;RUN=1;ReadPosRankSum=1.190;SAB=0.6875;SAF=11;SAP=7.8961;SAR=5;SC=CCTTTTTTGTTCATTTCTGCA;SRB=0.68806;SRF=2241;SRP=1003.5;SRR=1016;TC;TR=2;TU=T;VQSLOD=10.2220;set=Intersection;sumGLbyD=41.32 +20 38122459 . T TG,TGG 1346.40 PASS ABR=339;AC=37,26;AF=0.02989,0.02100;BVAR;BaseQRankSum=10.222;DP=16425;FS=601.551;HOMA=0;HOMR=1008;HaplotypeScore=20.6522;INS;InbreedingCoeff=0.0829;MQ=105.78;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-4.295;NS=1079;QD=0.40;RA=6208;RUN=1;ReadPosRankSum=-14.427;SAB=1;SAR=0;SB=-368.88;SRB=0.34907;SRF=2167;SRP=1231.4;SRR=4041;VQSLOD=-3.3455;set=filterInVQSR-2of5 +20 38395256 . TTGAG T 633.19 PASS AF=0.0028;BaseQRankSum=5.667;DP=3839;Dels=0.00;FR;FS=10.238;HP=2;HPLen=3;HR=3;HRun=0;HU=T;InbreedingCoeff=-0.0097;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-1.276;NF;NR;PP;ReadPosRankSum=-1.016;SC=ATGTGTTTGTTTGAGTATGTT;TC;TR=10;TU=GTTT;VQSLOD=6.4906;set=Intersection;sumGLbyD=10.83 +20 38882632 rs72004513 AGTGTGTGTGT A,AGT,AGTGT,AGTGTGT,AGTGTGTGT,AGTGTGTGTGTGT 12304.47 PASS AC=57,24,51,78,89,186;AF=0.04664,0.01964,0.04173,0.06383,0.07283,0.15221;AN=1222;BVAR;BaseQRankSum=3.183;DB;DEL;DP=49261;DP4=144,106,104,101;Dels=0.05;FQ=999;FR;FS=5.209;HP=1;HPLen=2;HR=2;HRun=0;HU=A;INDEL;InbreedingCoeff=0.9090;MQ=87.48;MQ0Fraction=0.0071;MQRankSum=-0.897;NF;NR;PP;PV4=0.16,1,0.19,1;RUN=1;ReadPosRankSum=3.551;SC=TAACTCCTCAAGTGTGTGTGT;TC;TR=47;TU=GT;VQSLOD=9.9069;set=Intersection;sumGLbyD=5.30 +20 39345038 . CTGAACCATAATGTG C,CCCATAATGTG 60744.52 PASS AA=23;AB=0.67143;ABA=23;ABP=20.878;ABR=47;AC=232,2;AF=0.19366,0.00167;AN=1198;BL=1607;BR=1843;BVAR;BaseQRankSum=30.955;DEL;DP=31490;DP4=1729,2100,265,278;Dels=0.13;EL=6;EPP=14.434;ER=17;FQ=999;FR;FS=1.767;HETAR=18;HOMA=0;HOMR=1015;HP=1;HPLen=2;HR=2;HRun=0;HU=C;INDEL;InbreedingCoeff=0.1991;LEN=14;LRB=0.068406;LRBP=38.066;MQ=104.60;MQ0=0;MQ0Fraction=0.0000;MQM=189.83;MQRankSum=-16.579;NF;NR;NS=1033;PP;PV4=0.12,1,5.5e-137,1;RA=5286;RL=14;RPP=5.3706;RR=9;RUN=1;ReadPosRankSum=4.323;SAB=0.56522;SAF=13;SAP=3.86;SAR=10;SC=TGGGCTGGACCTGAACCATAA;SRB=0.46311;SRF=2448;SRP=65.493;SRR=2838;TC;TR=2;TU=C;VQSLOD=6.2643;dbSNP=130;set=Intersection;sumGLbyD=65.43 +20 39418008 . AG A 46796 PASS AA=113;AB=0.9511;ABA=80;ABP=2894.6;ABR=1556;AC=30;AF=0.02412;AN=1244;BL=638;BR=6936;BVAR;BaseQRankSum=7.280;DEL;DP=14307;Dels=0.00;EL=50;EPP=6.2579;ER=63;FR;FS=5.707;HETAR=473;HOMA=361;HOMR=246;HP=3;HR=3;HRun=3;HU=G;InbreedingCoeff=0.0272;LEN=1;LRB=0.83153;LRBP=11375;MQ0=0;MQ0Fraction=0.0000;MQM=62.398;MQRankSum=3.530;NF;NR;NS=1089;PP;RA=3000;RL=3;RPP=223.02;RR=110;RUN=1;ReadPosRankSum=-18.601;SAB=0.58407;SAF=66;SAP=9.9475;SAR=47;SC=ACTGGGGGAAAGGGATTCTAG;SRB=0.494;SRF=1482;SRP=3.9484;SRR=1518;TC;TR=3;TU=G;VQSLOD=4.5834;set=Intersection;sumGLbyD=3.06 +20 39876961 . GT G,GTT,GTTT 2302.10 PASS ABR=496;AC=45,51,45;AF=0.03664,0.04153,0.03664;AN=1228;BVAR;BaseQRankSum=4.462;DP=37649;DP4=1457,1975,57,59;Dels=0.02;FR;FS=9.938;HOMA=0;HOMR=978;HP=10;HPLen=10;HR=10;HRun=10;HU=T;INDEL;INS;InbreedingCoeff=0.2583;MQ=97.28;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.246;NF;NR;NS=1063;PP;PV4=0.15,1,1.9e-09,0.016;RA=5185;RUN=1;ReadPosRankSum=-4.954;SC=AGTTTCTCCGGTTTTTTTTTT;SRB=0.47464;SRF=2461;SRP=31.978;SRR=2724;TC;TR=10;TU=T;VQSLOD=4.9752;set=Intersection;sumGLbyD=4.39 +20 41013333 . TC T 20681 PASS AA=137;AB=0.89211;ABA=134;ABP=1661.6;ABR=1108;AC=68;AF=0.05601;AN=1214;BL=1091;BR=8981;BVAR;BaseQRankSum=1.354;DEL;DP=12998;Dels=0.01;EL=57;EPP=11.395;ER=80;FS=0.758;HETAR=359;HOMA=100;HOMR=610;HRun=1;InbreedingCoeff=0.0104;LEN=1;LRB=0.78336;LRBP=13424;MQ0=1;MQ0Fraction=0.0003;MQM=67.745;MQRankSum=2.563;NS=1072;RA=4447;RL=5;RPP=258.66;RR=132;RUN=1;ReadPosRankSum=-14.092;SAB=0.59124;SAF=81;SAP=12.917;SAR=56;SRB=0.54194;SRF=2410;SRP=70.947;SRR=2037;VQSLOD=3.7531;set=filterInVQSR-2of5;sumGLbyD=4.14 +20 41453533 rs112736557 T TA 1734.60 PASS AA=44;AB=0.58025;ABA=34;ABP=7.5409;ABR=47;AC=23;AF=0.0345;AN=666;BL=2061;BR=2408;BVAR;BaseQRankSum=5.768;DB;DP=7437;Dels=0.00;EL=25;EPP=4.787;ER=19;FR;FS=3.680;HETAR=17;HOMA=5;HOMR=975;HP=7;HPLen=6;HR=6;HRun=6;HU=A;INS;InbreedingCoeff=0.1712;LEN=1;LRB=0.077646;LRBP=61.517;MQ0=0;MQ0Fraction=0.0000;MQM=75.614;MQRankSum=-4.976;NF;NR;NS=997;PP;RA=4229;RL=21;RPP=3.2077;RR=23;RUN=1;ReadPosRankSum=-0.039;SAB=0.5;SAF=22;SAP=3.0103;SAR=22;SC=CCTTTCTCCATAAAAAAGCTT;SRB=0.46299;SRF=1958;SRP=53.315;SRR=2271;TC;TR=6;TU=A;VQSLOD=7.8972;set=Intersection;sumGLbyD=13.16 +20 41659532 . GC G 40544 PASS AA=42;AB=0.97149;ABA=39;ABP=2644.5;ABR=1329;AC=15;AF=0.0209;AN=716;BL=2531;BR=135;BVAR;BaseQRankSum=-2.537;DEL;DP=12219;Dels=0.00;EL=25;EPP=6.3192;ER=17;FS=2.656;HETAR=374;HOMA=155;HOMR=551;HRun=1;InbreedingCoeff=-0.0270;LEN=1;LRB=0.89872;LRBP=4678.9;MQ0=0;MQ0Fraction=0.0000;MQM=103.31;MQRankSum=2.828;NS=1088;RA=4736;RL=41;RPP=85.733;RR=1;RUN=1;ReadPosRankSum=-9.702;SAB=0.57143;SAF=24;SAP=4.8716;SAR=18;SRB=0.5625;SRF=2664;SRP=163.7;SRR=2072;VQSLOD=4.3267;set=Intersection;sumGLbyD=3.22 +20 41687456 . A AT 19682 PASS AA=446;AB=0.61202;ABA=426;ABP=122.69;ABR=672;AC=162;AF=0.13214;AN=1226;BL=15293;BR=20484;BVAR;BaseQRankSum=2.364;DP=29324;DP4=1993,1785,261,252;Dels=0.01;EL=214;EPP=4.5878;ER=232;FQ=999;FR;FS=1.923;HETAR=170;HOMA=7;HOMR=897;HP=11;HPLen=9;HR=9;HRun=9;HU=T;INDEL;INS;InbreedingCoeff=0.0769;LEN=1;LRB=0.14509;LRBP=1638.5;MQ=91.55;MQ0=0;MQ0Fraction=0.0000;MQM=57.168;MQRankSum=-0.764;NF;NR;NS=1074;PP;PV4=0.45,1,3.5e-08,1;RA=5437;RL=179;RPP=40.714;RR=267;RUN=1;ReadPosRankSum=0.356;SAB=0.51794;SAF=231;SAP=4.2567;SAR=215;SC=AGAAAACCTTATTTTTTTTTC;SRB=0.51094;SRF=2778;SRP=8.666;SRR=2659;TC;TR=9;TU=T;VQSLOD=9.6786;set=Intersection;sumGLbyD=10.93 +20 41845580 . GA G 49310 PASS AA=83;AB=0.95258;ABA=69;ABP=2591.6;ABR=1386;AC=46;AF=0.03740;AN=1230;BL=1320;BR=5150;BVAR;BaseQRankSum=-1.121;DEL;DP=13336;Dels=0.00;EL=36;EPP=6.1759;ER=47;FR;FS=0.372;HETAR=442;HOMA=341;HOMR=295;HP=2;HR=3;HRun=1;HU=G;InbreedingCoeff=0.0238;LEN=1;LRB=0.59196;LRBP=4926.2;MQ0=0;MQ0Fraction=0.0000;MQM=89.048;MQRankSum=0.897;NF;NR;NS=1080;PP;RA=3006;RL=5;RPP=142.43;RR=78;RUN=1;ReadPosRankSum=-15.412;SAB=0.55422;SAF=46;SAP=5.1294;SAR=37;SC=CCAGCTGTGGGAGAGAAACAT;SRB=0.47971;SRF=1442;SRP=13.762;SRR=1564;TC;TR=6;TU=AG;VQSLOD=4.4669;set=Intersection;sumGLbyD=3.65 +20 42209428 . GC G 13163 PASS AA=89;AB=0.86677;ABA=83;ABP=730.96;ABR=540;AC=39;AF=0.03218;AN=1212;BL=950;BR=5334;BVAR;BaseQRankSum=-10.119;DEL;DP=10692;Dels=0.01;EL=48;EPP=4.2058;ER=41;FS=0.000;HETAR=259;HOMA=727;HOMR=54;HRun=1;InbreedingCoeff=0.0448;LEN=1;LRB=0.69764;LRBP=6644.4;MQ0=0;MQ0Fraction=0.0000;MQM=126.55;MQRankSum=4.223;NS=1040;RA=723;RL=12;RPP=106.09;RR=77;RUN=1;ReadPosRankSum=-17.362;SAB=0.39326;SAF=35;SAP=11.818;SAR=54;SRB=0.37898;SRF=274;SRP=94.99;SRR=449;VQSLOD=3.7157;set=filterInVQSR-2of5;sumGLbyD=3.48 +20 42281109 . T TAG 2321.12 PASS AC=181;AF=0.3740;AN=484;BaseQRankSum=8.977;DP=435;FS=17.001;HRun=0;HaplotypeScore=14.6734;InbreedingCoeff=0.2340;MQ=53.88;MQ0=47;MQ0Fraction=0.1080;MQRankSum=0.762;QD=12.41;ReadPosRankSum=3.399;SB=-1299.73;VQSLOD=4.8926;set=VQSR +20 42436117 . TC T 38933 PASS AA=18;AB=0.98435;ABA=17;ABP=2215.9;ABR=1069;AC=15;AF=0.01223;AN=1226;BL=498;BR=428;BVAR;BaseQRankSum=-7.224;DEL;DP=12436;Dels=0.00;EL=1;EPP=33.893;ER=17;FS=2.469;HETAR=303;HOMA=614;HOMR=123;HRun=1;InbreedingCoeff=0.0439;LEN=1;LRB=0.075594;LRBP=14.501;MQ0=0;MQ0Fraction=0.0000;MQM=98.611;MQRankSum=1.086;NS=1075;RA=1656;RL=10;RPP=3.4928;RR=8;RUN=1;ReadPosRankSum=-17.765;SAB=0.5;SAF=9;SAP=3.0103;SAR=9;SRB=0.49879;SRF=826;SRP=3.0313;SRR=830;VQSLOD=4.0821;set=filterInVQSR-2of5;sumGLbyD=3.04 +20 42682214 . C A,CAT 3904.51 PASS AA=24;AB=0.6383;ABA=17;ABP=10.818;ABR=30;AC=0;AF=0.0000;AN=636;BL=1119;BR=949;BVAR;BaseQRankSum=1.426;DP=6509;Dels=0.00;EL=9;EPP=6.2675;ER=15;FR;HETAR=12;HOMA=3;HOMR=876;HP=2;HPLen=1;HR=1;HRun=0;HU=A;INS;InbreedingCoeff=0.0006;LEN=2;LRB=0.082205;LRBP=33.356;MQ0Fraction=0.0046;MQM=40.792;MQRankSum=-0.296;NF;NR;NS=891;PP;QD=32.81;RA=2679;RL=15;RPP=6.2675;RR=9;RUN=1;ReadPosRankSum=-1.806;SAB=0.75;SAF=18;SAP=16.039;SAR=6;SB=-924.23;SC=TATACACACACATATATATAC;SRB=0.66293;SRF=1776;SRP=620.76;SRR=903;TC;TR=9;TU=AC;set=filterInVQSR-2of5;sumGLbyD=32.75 +20 42973456 . CA C,CAA,CAAA 2675 PASS AA=90;AB=0.79177;ABA=86;ABP=308.39;ABR=327;AC=77,61,39;AF=0.06492,0.05143,0.03288;AN=1186;BL=2983;BR=4446;BVAR;BaseQRankSum=2.422;DP=9416;Dels=0.03;EL=39;EPP=6.4847;ER=51;FR;FS=31.555;HETAR=75;HOMA=1;HOMR=888;HP=11;HR=11;HRun=11;HU=A;INS;InbreedingCoeff=0.2696;LEN=1;LRB=0.19693;LRBP=628.63;MQ0=0;MQ0Fraction=0.0000;MQM=55.567;MQRankSum=1.777;NF;NR;NS=964;PP;RA=3601;RL=37;RPP=9.1869;RR=53;RUN=1;ReadPosRankSum=-4.991;SAB=0.55556;SAF=50;SAP=5.423;SAR=40;SC=TAGTGACTGTCAAAAAAAAAA;SRB=0.60622;SRF=2183;SRP=355.91;SRR=1418;TC;TR=11;TU=A;VQSLOD=1.0763;set=filterInVQSR-2of5;sumGLbyD=4.05 +20 43091870 . TC T 2455.60 PASS AA=120;AB=0.10619;ABA=101;ABP=155.22;ABR=12;AC=42;AF=0.03825;AN=1098;BL=573;BR=8744;BVAR;BaseQRankSum=-13.513;DEL;DP=9139;Dels=0.00;EL=64;EPP=4.1684;ER=56;FS=9.856;HETAR=118;HOMA=820;HOMR=0;HRun=1;InbreedingCoeff=0.0833;LEN=1;LRB=0.877;LRBP=15564;MQ0Fraction=0.0017;MQM=45.1;MQRankSum=2.266;NS=938;RA=24;RL=1;RPP=254.97;RR=119;RUN=1;ReadPosRankSum=-15.803;SAB=0.475;SAF=57;SAP=3.6617;SAR=63;SRB=0.54167;SRF=13;SRP=3.3722;SRR=11;VQSLOD=3.9930;set=filterInVQSR-2of5;sumGLbyD=3.09 +20 43233648 rs74585029 GA G,GAA 1504.40 PASS AA=113;AB=0.78652;ABA=95;ABP=320.31;ABR=350;AC=41,65;AF=0.03394,0.05381;AF1=0.0115;AN=1208;BL=4677;BR=5548;BVAR;BaseQRankSum=6.744;CI95=0.004274,0.01852;DB;DEL;DP=13996;DP4=1736,1549,15,17;Dels=0.03;EL=69;EPP=15.021;ER=44;FQ=14;FR;FS=12.174;HETAR=119;HOMA=15;HOMR=892;HP=11;HPLen=10;HR=10;HRun=10;HU=A;INDEL;InbreedingCoeff=0.2359;LEN=1;LRB=0.085183;LRBP=164.12;MQ=89.12;MQ0Fraction=0.0000;MQM=69.867;MQRankSum=2.513;NF;NR;NS=1027;PP;PV4=0.59,1,0.065,0.33;RA=3845;RL=46;RPP=11.485;RR=67;RUN=1;ReadPosRankSum=-4.957;SAB=0.33628;SAF=38;SAP=29.318;SAR=75;SC=AAAACAGCCAGAAAAAAAAAA;SRB=0.43667;SRF=1679;SRP=136.95;SRR=2166;TC;TR=10;TU=A;VQSLOD=4.5121;set=Intersection;sumGLbyD=8.22 +20 43246548 . AC A,CC 41579.13 PASS AA=382;AB=0.72402;ABA=316;ABP=502.11;ABR=829;AC=1197;AF=0.99254;AN=1206;BL=9889;BR=14293;BVAR;BaseQRankSum=1.373;DEL;DP=10477;DS;Dels=0.05;EL=243;EPP=64.494;ER=139;FS=29.162;HETAR=291;HOMA=85;HOMR=624;HPLen=10;InbreedingCoeff=0.1392;LEN=1;LRB=0.18212;LRBP=1744.6;MQ0Fraction=0.0024;MQM=48.471;MQRankSum=5.726;NS=1001;RA=3138;RL=174;RPP=9.5816;RR=208;RUN=1;ReadPosRankSum=5.755;SAB=0.79843;SAF=305;SAP=298.51;SAR=77;SRB=0.70363;SRF=2208;SRP=1133.2;SRR=930;VQSLOD=5.6318;set=Intersection;sumGLbyD=5.22 +20 43258646 . T TT 1107.17 PASS AC=97;AF=0.08420;AN=1152;BaseQRankSum=4.525;DP=2345;FS=19.308;HRun=9;HaplotypeScore=13.6276;InbreedingCoeff=0.1299;MQ=76.70;MQ0=0;MQ0Fraction=0.0000;MQRankSum=1.395;QD=2.67;ReadPosRankSum=-4.696;SB=-899.41;VQSLOD=5.4523;set=VQSR +20 43718299 . ATTACT A 5497.06 PASS AA=56;AB=0.51818;ABA=53;ABP=3.3262;ABR=57;AC=18;AF=0.0251;AF1=0.03729;AN=718;BL=2321;BR=2591;BVAR;BaseQRankSum=11.142;CI95=0.03319,0.04425;DEL;DP=17576;DP4=2460,2692,31,22;Dels=0.02;EL=28;EPP=3.0103;ER=28;FQ=999;FR;FS=9.689;HETAR=15;HOMA=1;HOMR=1068;HP=2;HPLen=2;HR=2;HRun=0;HU=T;INDEL;InbreedingCoeff=0.0448;LEN=5;LRB=0.054967;LRBP=35.238;MQ=96.55;MQ0=0;MQ0Fraction=0.0000;MQM=50.286;MQRankSum=-5.149;NF;NR;NS=1084;PP;PV4=0.13,1,1.2e-12,1;RA=6745;RL=28;RPP=3.0103;RR=28;RUN=1;ReadPosRankSum=0.828;SAB=0.5;SAF=28;SAP=3.0103;SAR=28;SC=ATGACAGTGGATTACTTTAGT;SRB=0.46835;SRF=3159;SRP=61.709;SRR=3586;TC;TR=2;TU=T;VQSLOD=7.8832;set=Intersection;sumGLbyD=46.60 +20 43981749 . A AAAAAAC,AC 20899.71 PASS ABR=192;AC=91,0;AF=0.1285,0.0000;AN=708;BVAR;BaseQRankSum=7.858;DP=23372;DP4=1554,1457,55,42;Dels=0.00;FR;FS=0.000;HOMA=4;HOMR=995;HP=6;HPLen=7;HR=7;HRun=0;HU=A;INDEL;INS;InbreedingCoeff=0.2109;MQ=95.59;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-12.081;NF;NR;NS=1051;PP;PV4=0.35,1,8.9e-73,1;RA=5027;RUN=1;ReadPosRankSum=-1.359;SC=TACACTAGCAAAAAAACAAAA;SRB=0.48518;SRF=2439;SRP=12.6;SRR=2588;TC;TR=7;TU=A;VQSLOD=8.0916;set=Intersection;sumGLbyD=54.33 +20 43999274 . TCAAA T 2948.85 PASS AA=59;AB=0.59441;ABA=58;ABP=14.08;ABR=85;AC=20;AF=0.0290;AF1=0.04249;AN=690;BL=2277;BR=2436;BVAR;BaseQRankSum=9.320;CI95=0.0354,0.05088;DEL;DP=14599;DP4=2052,2303,21,22;Dels=0.03;EL=32;EPP=3.9304;ER=27;FQ=999;FR;FS=0.000;HETAR=21;HOMA=0;HOMR=1043;HP=2;HPLen=1;HR=1;HRun=0;HU=C;INDEL;InbreedingCoeff=-0.0037;LEN=4;LRB=0.033736;LRBP=14.658;MQ=90.05;MQ0=0;MQ0Fraction=0.0000;MQM=75.339;MQRankSum=-1.294;NF;NR;NS=1064;PP;PV4=0.88,1,0.0026,1;RA=5732;RL=27;RPP=3.9304;RR=32;RUN=1;ReadPosRankSum=-0.915;SAB=0.47458;SAF=28;SAP=3.3415;SAR=31;SC=GGTACACAGCTCAAACAGTCT;SRB=0.4836;SRF=2772;SRP=16.4;SRR=2960;TC;TR=1;TU=C;VQSLOD=9.8086;set=Intersection;sumGLbyD=27.09 +20 44098622 . C CG 1092.40 PASS AA=129;AB=0.77301;ABA=74;ABP=214.06;ABR=252;AC=45;AF=0.0455;AN=988;BL=6586;BR=3029;BVAR;BaseQRankSum=2.802;DP=5177;Dels=0.00;EL=122;EPP=225.63;ER=7;FR;FS=355.273;HETAR=66;HOMA=11;HOMR=734;HP=6;HR=4;HRun=4;HU=G;INS;InbreedingCoeff=0.1759;LEN=1;LRB=0.36994;LRBP=2860.4;MQ0=0;MQ0Fraction=0.0000;MQM=52.395;MQRankSum=1.946;NF;NR;NS=811;PP;RA=1981;RL=121;RPP=217.95;RR=8;RUN=1;ReadPosRankSum=-6.413;SAB=0.99225;SAF=128;SAP=274.51;SAR=1;SC=GCGGAAGTGGCGGGGACCCTT;SRB=0.41242;SRF=817;SRP=135;SRR=1164;TC;TR=4;TU=G;VQSLOD=-2.2690;set=filterInVQSR-2of5;sumGLbyD=4.04 +20 44327637 . A AG,AGGGGGG 14351.23 PASS AC=9,211;AF=0.0103,0.2409;AN=876;BaseQRankSum=15.517;DP=1704;FS=6.768;HaplotypeScore=31.5906;InbreedingCoeff=0.1538;MQ=54.64;MQ0=4;MQ0Fraction=0.0023;MQRankSum=-12.691;QD=20.83;ReadPosRankSum=-3.583;SB=-6278.99;VQSLOD=5.1556;set=VQSR +20 45202636 . GA G 13269 PASS AA=25;AB=0.96162;ABA=18;ABP=871.09;ABR=451;AC=24;AF=0.02013;AN=1192;BL=567;BR=1728;BVAR;BaseQRankSum=-5.361;DEL;DP=10873;Dels=0.00;EL=10;EPP=5.1818;ER=15;FS=0.928;HETAR=169;HOMA=831;HOMR=45;HRun=1;InbreedingCoeff=0.0999;LEN=1;LRB=0.50588;LRBP=1278.4;MQ0=0;MQ0Fraction=0.0000;MQM=170.56;MQRankSum=0.161;NS=1049;RA=632;RL=2;RPP=41.315;RR=23;RUN=1;ReadPosRankSum=-14.760;SAB=0.68;SAF=17;SAP=10.046;SAR=8;SRB=0.51424;SRF=325;SRP=4.1235;SRR=307;VQSLOD=3.9290;set=filterInVQSR-2of5;sumGLbyD=3.90 +20 45417828 . TGAGC T,TGC 4672.90 PASS ABR=317;AC=69,104;AF=0.05712,0.08609;BVAR;BaseQRankSum=18.527;DEL;DP=11835;DS;FS=184.873;HOMA=48;HOMR=575;HaplotypeScore=65.5875;InbreedingCoeff=0.0599;MQ=29.78;MQ0=2988;MQ0Fraction=0.3629;MQRankSum=5.052;NS=713;QD=1.11;RA=1581;RUN=1;ReadPosRankSum=6.574;SB=-2116.87;SRB=0.47502;SRF=751;SRP=11.582;SRR=830;VQSLOD=0.0651;set=filterInVQSR-2of5 +20 45525657 rs66759083 TA AA,T 49315 PASS AA=2361;AB=0.45241;ABA=1398;ABP=53.235;ABR=1155;AC=20;AF=0.01701;AN=1176;BL=94913;BR=100886;BVAR;BaseQRankSum=0.740;DB;DEL;DP=30636;DP4=1258,881,1206,999;Dels=0.48;EL=1133;EPP=11.311;ER=1228;FQ=999;FR;FS=7.072;HETAR=503;HOMA=310;HOMR=218;HP=6;HPLen=7;HR=7;HU=T;INDEL;InbreedingCoeff=0.2271;LEN=1;LRB=0.030506;LRBP=398.68;MQ=102.24;MQ0=0;MQ0Fraction=0.0000;MQM=75.359;MQRankSum=0.148;NF;NR;NS=1031;PP;PV4=0.0064,0,4.6e-23,0.47;RA=2042;RL=1183;RPP=3.0333;RR=1178;RUN=1;ReadPosRankSum=-2.999;SAB=0.52139;SAF=1231;SAP=12.392;SAR=1130;SC=AGGATTTTTTTAAAAAGTTTT;SRB=0.55093;SRF=1125;SRP=49.017;SRR=917;TC;TR=7;TU=T;VQSLOD=7.1651;dbSNP=114;set=Intersection;sumGLbyD=18.51 +20 45783456 . T TG 2355.68 PASS AA=64;AB=0.78521;ABA=61;ABP=203.67;ABR=223;AC=15;AF=0.0165;AN=910;BL=815;BR=5486;BVAR;BaseQRankSum=8.593;DP=10348;Dels=0.00;EL=48;EPP=37.754;ER=16;FS=77.861;HETAR=56;HOMA=1;HOMR=970;HRun=1;INS;InbreedingCoeff=-0.0549;LEN=1;LRB=0.74131;LRBP=7522.1;MQ0Fraction=0.0122;MQM=44.562;MQRankSum=-1.258;NS=1027;RA=4750;RL=0;RPP=141.98;RR=64;RUN=1;ReadPosRankSum=-7.047;SAB=0.25;SAF=16;SAP=37.754;SAR=48;SRB=0.6;SRF=2850;SRP=415.59;SRR=1900;VQSLOD=1.3146;set=filterInVQSR-2of5;sumGLbyD=6.03 +20 46384744 . CT C 17791 PASS AA=51;AB=0.94826;ABA=49;ABP=1655.8;ABR=898;AC=23;AF=0.01867;AN=1232;BL=120;BR=3678;BVAR;BaseQRankSum=-0.185;DEL;DP=13879;Dels=0.00;EL=23;EPP=4.0747;ER=28;FS=2.864;HETAR=262;HOMA=78;HOMR=722;HRun=2;InbreedingCoeff=0.0193;LEN=1;LRB=0.93681;LRBP=7240.9;MQ0=0;MQ0Fraction=0.0000;MQM=66.667;MQRankSum=1.031;NS=1079;RA=5295;RL=0;RPP=113.76;RR=51;RUN=1;ReadPosRankSum=-12.934;SAB=0.54902;SAF=28;SAP=4.0747;SAR=23;SRB=0.54674;SRF=2895;SRP=103.49;SRR=2400;VQSLOD=3.0419;set=filterInVQSR-2of5;sumGLbyD=3.47 +20 46517110 . C CT 868.55 PASS AC=15;AF=0.0218;AN=688;BaseQRankSum=8.522;DP=1752;FS=6.570;HRun=0;HaplotypeScore=14.9548;InbreedingCoeff=0.0452;MQ=77.73;MQ0=0;MQ0Fraction=0.0000;MQRankSum=3.874;QD=10.98;ReadPosRankSum=-0.733;SB=-396.78;VQSLOD=6.7740;set=VQSR +20 46629361 . TTTCTTTC T,TTTTC 13000.91 PASS AC=188,107;AF=0.2212,0.1259;AN=850;BaseQRankSum=7.214;DP=1846;FS=14.502;HaplotypeScore=40.8481;InbreedingCoeff=0.3210;MQ=50.74;MQ0=79;MQ0Fraction=0.0428;MQRankSum=-6.348;QD=13.59;ReadPosRankSum=3.943;SB=-3581.20;VQSLOD=5.9412;set=VQSR +20 46951099 . G GT 1662.30 PASS AA=55;AB=0.7713;ABA=51;ABP=145.58;ABR=172;AC=47;AF=0.03923;AN=1198;BL=3288;BR=2434;BVAR;BaseQRankSum=-4.014;DP=27423;DP4=1483,1590,58,42;Dels=0.01;EL=21;EPP=9.6826;ER=34;FR;FS=9.565;HETAR=48;HOMA=0;HOMR=913;HP=16;HPLen=10;HR=10;HRun=10;HU=T;INDEL;INS;InbreedingCoeff=0.0952;LEN=1;LRB=0.14925;LRBP=279.78;MQ=70.36;MQ0Fraction=0.0124;MQM=52.545;MQRankSum=0.717;NF;NR;NS=961;PP;PV4=0.067,1,1,0.17;RA=3035;RL=38;RPP=20.422;RR=17;RUN=1;ReadPosRankSum=-3.014;SAB=0.47273;SAF=26;SAP=3.3656;SAR=29;SC=TTTGTTTTTTGTTTTTTTTTT;SRB=0.36013;SRF=1093;SRP=518.73;SRR=1942;TC;TR=10;TU=T;VQSLOD=5.4779;set=Intersection;sumGLbyD=3.49 +20 47201076 rs58052846 C CT 982.16 PASS AC=50;AF=0.0551;AN=908;BaseQRankSum=12.598;DB;DP=2449;FS=35.648;HRun=0;HaplotypeScore=29.4602;InbreedingCoeff=-0.0542;MQ=63.54;MQ0=0;MQ0Fraction=0.0000;MQRankSum=2.196;QD=3.16;ReadPosRankSum=-13.833;SB=-488.19;VQSLOD=6.0429;set=VQSR +20 47965974 rs60011158 G GA 999 PASS AA=21;AB=0.57143;ABA=21;ABP=5.1818;ABR=28;AC=7;AF=0.0101;AF1=0.02061;AN=690;BL=1043;BR=577;BVAR;BaseQRankSum=-3.087;CI95=0.01549,0.02655;DB;DP=14578;DP4=1554,3055,6,17;Dels=0.00;EL=11;EPP=3.1137;ER=10;FQ=999;FR;FS=5.982;HETAR=7;HOMA=0;HOMR=1041;HP=2;HPLen=1;HR=1;HRun=1;HU=A;INDEL;INS;InbreedingCoeff=0.0356;LEN=1;LRB=0.28765;LRBP=294.09;MQ=80.17;MQ0=0;MQ0Fraction=0.0000;MQM=64.19;MQRankSum=2.137;NF;NR;NS=1048;PP;PV4=0.51,1,1,1;RA=5224;RL=16;RPP=15.522;RR=5;RUN=1;ReadPosRankSum=0.236;SAB=0.38095;SAF=8;SAP=5.5954;SAR=13;SC=TTCATGTACAGAGCTGCTGTG;SRB=0.31183;SRF=1629;SRP=1609.6;SRR=3595;TC;TR=4;TU=AG;VQSLOD=9.5466;dbSNP=129;set=Intersection;sumGLbyD=13.83 +20 48402974 rs57331436 GA G 27741 PASS AA=401;AB=0.5372;ABA=311;ABP=11.089;ABR=361;AC=84;AF=0.1186;AN=708;BL=16591;BR=14776;BVAR;BaseQRankSum=14.621;DB;DEL;DP=30607;DP4=1928,2310,195,225;Dels=0.11;EL=189;EPP=5.8749;ER=212;FQ=999;FR;FS=15.568;HETAR=110;HOMA=30;HOMR=923;HP=4;HPLen=3;HR=1;HRun=3;HU=A;INDEL;InbreedingCoeff=0.1263;KGPilot123;LEN=1;LRB=0.057863;LRBP=231.06;MQ=106.68;MQ0=0;MQ0Fraction=0.0000;MQM=63.005;MQRankSum=-2.010;NF;NR;NS=1063;PP;PV4=0.72,1,0.001,1;RA=5258;RL=223;RPP=13.976;RR=178;RUN=1;ReadPosRankSum=1.337;SAB=0.37656;SAF=151;SAP=56.084;SAR=250;SC=TGCCCTCAAAGAGAAAAAGGA;SRB=0.38075;SRF=2002;SRP=652.44;SRR=3256;TC;TR=5;TU=AG;VQSLOD=8.7259;dbSNP=132;set=Intersection;sumGLbyD=15.86 +20 48519434 rs56747320 TA T,TAA 26754 PASS AC=91,355;AF=0.07738,0.30187;AN=1176;BVAR;BaseQRankSum=-5.499;DB;DEL;DP=24872;DP4=726,883,443,502;Dels=0.04;FR;FS=1.430;HP=12;HR=12;HRun=12;HU=A;INDEL;INS;InbreedingCoeff=0.2576;LEN=1;MQ=71.86;MQ0=1;MQ0Fraction=0.0004;MQRankSum=-0.526;NF;NR;PP;PV4=0.41,1,0.00077,1;RUN=1;ReadPosRankSum=-4.130;SC=CGTCTTAAACTAAAAAAAAAA;TC;TR=12;TU=A;VQSLOD=7.3200;set=Intersection;sumGLbyD=10.43 +20 49086519 rs111404890 CA C,CAA 1379.10 PASS AA=43;AB=0.672;ABA=41;ABP=35.131;ABR=84;AC=7,14;AF=0.0100,0.0201;AN=698;BL=1097;BR=2286;BVAR;BaseQRankSum=-2.656;DB;DP=9319;Dels=0.00;EL=22;EPP=3.0608;ER=21;FR;FS=1.147;HETAR=20;HOMA=0;HOMR=1029;HP=11;HPLen=8;HR=8;HRun=8;HU=A;INS;InbreedingCoeff=0.0760;LEN=1;LRB=0.35146;LRBP=910.45;MQ0=0;MQ0Fraction=0.0000;MQM=47.674;MQRankSum=2.682;NF;NR;NS=1049;PP;RA=5237;RL=10;RPP=29.724;RR=33;RUN=1;ReadPosRankSum=-2.367;SAB=0.48837;SAF=21;SAP=3.0608;SAR=22;SC=GTAAAACAAACAAAAAAAATG;SRB=0.48635;SRF=2547;SRP=11.489;SRR=2690;TC;TR=11;TU=AAAC;VQSLOD=7.3084;set=Intersection;sumGLbyD=9.84 +20 49101936 . C CT 404.46 PASS AC=40;AF=0.03559;AN=1124;BaseQRankSum=0.750;DP=2162;FS=14.291;HRun=2;HaplotypeScore=30.9513;InbreedingCoeff=-0.0082;MQ=49.78;MQ0=113;MQ0Fraction=0.0523;MQRankSum=-1.289;QD=1.94;ReadPosRankSum=-2.041;SB=-385.48;VQSLOD=4.6365;set=VQSR +20 49681276 . TC T 40042 PASS AA=72;AB=0.93908;ABA=70;ABP=1927.1;ABR=1079;AC=18;AF=0.0196;AN=918;BL=514;BR=4340;BVAR;BaseQRankSum=0.869;DEL;DP=10368;Dels=0.00;EL=33;EPP=4.096;ER=39;FS=17.302;HETAR=389;HOMA=269;HOMR=405;HRun=1;InbreedingCoeff=0.0626;LEN=1;LRB=0.78822;LRBP=6551.6;MQ0=0;MQ0Fraction=0.0000;MQM=123.06;MQRankSum=-1.047;NS=1064;RA=3095;RL=3;RPP=134.38;RR=69;RUN=1;ReadPosRankSum=-10.928;SAB=0.58333;SAF=42;SAP=7.3532;SAR=30;SRB=0.57738;SRF=1787;SRP=163.99;SRR=1308;VQSLOD=2.8517;set=filterInVQSR-2of5;sumGLbyD=3.69 +20 49690436 . GT G 473.74 PASS AF=0.0263;AF1=0.02287;BaseQRankSum=3.830;CI95=0.01327,0.03319;DP=7473;DP4=2241,1740,14,12;Dels=0.01;FQ=129;FR;FS=0.000;HP=4;HPLen=4;HR=4;HRun=4;HU=T;INDEL;InbreedingCoeff=0.1310;MQ=51.71;MQ0Fraction=0.0407;MQRankSum=1.792;NF;NR;PP;PV4=0.84,5.7e-10,0.22,1;ReadPosRankSum=0.973;SC=GTAGGACGGGGTTTTACCATG;TC;TR=4;TU=T;VQSLOD=7.4809;set=Intersection;sumGLbyD=10.96 +20 49731218 . ATTTTATTTTTTATT A,ATTTTATT 8398.93 PASS AF=0.0656,0.0156;AF1=0.0996;BaseQRankSum=13.996;CI95=0.07743,0.1239;DP=6308;DP4=951,1311,23,35;Dels=0.05;FQ=999;FR;FS=12.503;HP=7;HPLen=4;HR=4;HRun=0;HU=T;INDEL;InbreedingCoeff=0.1892;MQ=57.61;MQ0Fraction=0.0145;MQRankSum=-5.208;NF;NR;PP;PV4=0.79,1,6.3e-06,0.16;ReadPosRankSum=-2.239;SC=TATTTTATTTATTTTATTTTT;TC;TR=11;TU=ATTT;VQSLOD=4.3191;set=Intersection;sumGLbyD=42.27 +20 49894989 . TA T 172.25 PASS AF=0.0140;BaseQRankSum=7.220;DP=3882;Dels=0.00;FS=17.217;HPLen=2;HRun=1;InbreedingCoeff=0.0531;MQ0Fraction=0.0214;MQRankSum=-0.661;ReadPosRankSum=-0.592;VQSLOD=3.0905;set=filterInVQSR-2of5;sumGLbyD=6.60 +20 50010923 rs66516522 C CT,CTGG 35851 PASS ABR=555;AC=310,11;AF=0.26451,0.00939;BVAR;BaseQRankSum=10.662;DB;DP=8188;FR;FS=34.411;HOMA=261;HOMR=399;HP=5;HR=6;HU=C;HaplotypeScore=45.1715;INS;InbreedingCoeff=0.2090;MQ=72.80;MQ0=0;MQ0Fraction=0.0000;MQRankSum=9.015;NF;NR;NS=831;PP;QD=9.69;RA=1986;RUN=1;ReadPosRankSum=-24.284;SB=-6038.55;SC=TGTCTGTCCCCCCTCAGCACT;SRB=0.45972;SRF=913;SRP=31.001;SRR=1073;TC;TR=6;TU=C;VQSLOD=6.1824;set=Intersection +20 50059710 . C CCA 4175.86 PASS AA=28;AB=0.62963;ABA=20;ABP=10.892;ABR=34;AC=36;AF=0.0738;AN=488;BL=1050;BR=1273;BVAR;BaseQRankSum=3.198;DP=9138;Dels=0.00;EL=10;EPP=7.9737;ER=18;FR;FS=19.190;HETAR=10;HOMA=2;HOMR=1053;HP=6;HPLen=7;HR=7;HRun=0;HU=C;INS;InbreedingCoeff=0.1390;LEN=2;LRB=0.095997;LRBP=49.496;MQ0=0;MQ0Fraction=0.0000;MQM=57.464;MQRankSum=-1.875;NF;NR;NS=1065;PP;RA=5745;RL=12;RPP=4.2511;RR=16;RUN=1;ReadPosRankSum=-2.894;SAB=0.5;SAF=14;SAP=3.0103;SAR=14;SC=GGAGACCCCCCCTTCATCCTA;SRB=0.48129;SRF=2765;SRP=20.482;SRR=2980;TC;TR=7;TU=C;VQSLOD=5.1567;set=Intersection;sumGLbyD=11.49 +20 50228709 rs71192536 TG T 20517 PASS AA=924;AB=0.50203;ABA=735;ABP=3.0633;ABR=741;AC=200;AF=0.16502;AN=1212;BL=35460;BR=34197;BVAR;BaseQRankSum=13.810;DB;DEL;DP=32402;DP4=1760,2065,395,449;Dels=0.16;EL=439;EPP=7.9831;ER=485;FQ=999;FR;FS=0.558;HETAR=242;HOMA=63;HOMR=764;HP=5;HPLen=3;HR=3;HRun=3;HU=G;INDEL;InbreedingCoeff=0.1050;LEN=1;LRB=0.018132;LRBP=52.738;MQ=105.83;MQ0=0;MQ0Fraction=0.0000;MQM=75.87;MQRankSum=3.895;NF;NR;NS=1069;PP;PV4=0.7,1.5e-173,1,1;RA=4708;RL=486;RPP=8.4249;RR=438;RUN=1;ReadPosRankSum=1.586;SAB=0.43615;SAF=403;SAP=35.733;SAR=521;SC=GTTTTCCAGGTGGGAAGACCG;SRB=0.44074;SRF=2075;SRP=146.62;SRR=2633;TC;TR=3;TU=G;VQSLOD=10.4820;dbSNP=120;set=Intersection;sumGLbyD=15.35 +20 50236115 . AGG A,ACGGG,AG,AGGG 7429.57 PASS AC=192,13,221,183;AF=0.2115,0.0143,0.2434,0.2015;AN=908;BaseQRankSum=1.045;DP=1177;FS=13.479;HaplotypeScore=11.8294;InbreedingCoeff=0.7959;MQ=52.98;MQ0=6;MQ0Fraction=0.0051;MQRankSum=-1.482;QD=7.28;ReadPosRankSum=-2.380;SB=-1229.31;VQSLOD=8.3762;set=VQSR +20 51589568 . TAAAC AAAAC,T 12477.52 PASS AF=0.27949;BaseQRankSum=-28.122;DP=3777;Dels=0.00;FR;FS=31.799;HP=7;HPLen=4;HR=3;HRun=0;HU=A;InbreedingCoeff=-0.1429;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-1.196;NF;NR;PP;ReadPosRankSum=-16.483;SC=AAATTCAAAATAAACAAACAA;TC;TR=18;TU=AAAC;VQSLOD=3.9201;set=filterInVQSR-2of5;sumGLbyD=52.43 +20 51617742 . TGC T,TGCGC 1374.91 PASS AF=0.06000,0.02000;BaseQRankSum=12.051;DP=6231;Dels=0.00;FS=189.609;HPLen=1;HRun=0;InbreedingCoeff=0.0862;MQ0Fraction=0.0180;MQRankSum=-2.959;ReadPosRankSum=-5.090;VQSLOD=-2.8715;set=filterInVQSR-2of5;sumGLbyD=3.97 +20 51770354 . AG A 1010.90 PASS AA=26;AB=0.52727;ABA=26;ABP=3.3656;ABR=29;AC=7;AF=0.0097;AF1=0.01637;AN=718;BL=1034;BR=964;BVAR;BaseQRankSum=5.588;CI95=0.01327,0.02212;DEL;DP=16259;DP4=2785,2239,15,10;Dels=0.01;EL=11;EPP=4.3466;ER=15;FQ=999;FR;FS=3.367;HETAR=8;HOMA=0;HOMR=1064;HP=2;HPLen=2;HR=2;HRun=2;HU=G;INDEL;InbreedingCoeff=0.0557;LEN=1;LRB=0.035035;LRBP=8.3357;MQ=90.48;MQ0=0;MQ0Fraction=0.0000;MQM=61.346;MQRankSum=-0.019;NF;NR;NS=1072;PP;PV4=0.69,2.1e-08,0.078,1;RA=6173;RL=13;RPP=3.0103;RR=13;RUN=1;ReadPosRankSum=-0.460;SAB=0.61538;SAF=16;SAP=6.017;SAR=10;SC=GTGGTCCTGCAGGTCAATAAT;SRB=0.56342;SRF=3478;SRP=218.68;SRR=2695;TC;TR=2;TU=G;VQSLOD=10.1601;set=Intersection;sumGLbyD=14.60 +20 51848430 . AT A,ATT 999 PASS AA=39;AB=0.83408;ABA=37;ABP=219.19;ABR=186;AC=14,33;AF=0.0153,0.0359;AF1=0.03062;AN=918;BL=1676;BR=1732;BVAR;BaseQRankSum=3.338;CI95=0.02212,0.03982;DP=14886;DP4=1970,1762,22,31;Dels=0.01;EL=18;EPP=3.5114;ER=21;FQ=999;FR;FS=3.004;HETAR=31;HOMA=0;HOMR=1040;HP=10;HPLen=9;HR=9;HRun=9;HU=T;INDEL;INS;InbreedingCoeff=0.1629;LEN=1;LRB=0.016432;LRBP=5.0085;MQ=80.05;MQ0=0;MQ0Fraction=0.0000;MQM=56.667;MQRankSum=0.325;NF;NR;NS=1071;PP;PV4=0.13,1,0.0095,0.064;RA=5318;RL=21;RPP=3.5114;RR=18;RUN=1;ReadPosRankSum=-0.493;SAB=0.46154;SAF=18;SAP=3.5114;SAR=21;SC=ACAAAACAATATTTTTTTTTC;SRB=0.4968;SRF=2642;SRP=3.4823;SRR=2676;TC;TR=9;TU=T;VQSLOD=5.7417;set=Intersection;sumGLbyD=7.57 +20 51897203 . T TG 8427.20 PASS AA=237;AB=0.69846;ABA=215;ABP=246.92;ABR=498;AC=117;AF=0.1662;AN=704;BL=14961;BR=5990;BVAR;BaseQRankSum=22.203;DP=9710;Dels=0.00;EL=83;EPP=49.198;ER=154;FR;FS=9.450;HETAR=123;HOMA=9;HOMR=895;HP=5;HPLen=6;HR=6;HRun=0;HU=T;INS;InbreedingCoeff=-0.0513;LEN=1;LRB=0.42819;LRBP=8344.3;MQ0Fraction=0.0291;MQM=45.861;MQRankSum=-10.426;NF;NR;NS=1027;PP;RA=4919;RL=210;RPP=309.85;RR=27;RUN=1;ReadPosRankSum=-1.843;SAB=0.29536;SAF=70;SAP=89.219;SAR=167;SC=TTTGTTTGTTTTTTGTTGTTG;SRB=0.47794;SRF=2351;SRP=23.798;SRR=2568;TC;TR=23;TU=GTTT;VQSLOD=6.2670;set=Intersection;sumGLbyD=8.99 +20 52274070 . AAG A 1400.37 PASS AA=30;AB=0.74227;ABA=25;ABP=52.462;ABR=72;AC=21;AF=0.01756;AN=1196;BL=412;BR=1966;BVAR;BaseQRankSum=6.660;DEL;DP=9362;Dels=0.01;EL=16;EPP=3.2998;ER=14;FS=1.485;HETAR=18;HOMA=2;HOMR=1004;HRun=0;InbreedingCoeff=0.0317;LEN=2;LRB=0.65349;LRBP=2208.2;MQ0Fraction=0.0022;MQM=46.133;MQRankSum=-4.743;NS=1024;RA=3931;RL=2;RPP=51.941;RR=28;RUN=1;ReadPosRankSum=-4.152;SAB=0.4;SAF=12;SAP=5.6161;SAR=18;SRB=0.49784;SRF=1957;SRP=3.1699;SRR=1974;VQSLOD=5.6452;set=Intersection;sumGLbyD=11.11 +20 52351501 . TAC T 199.59 PASS AC=22;AF=0.0238;AN=926;BaseQRankSum=7.874;DP=22911;DP4=2146,1691,26,22;FR;FS=2.898;HP=4;HPLen=3;HR=1;HRun=0;HU=A;HaplotypeScore=18.6111;INDEL;InbreedingCoeff=-0.0326;MQ0=2;MQ0Fraction=0.0007;MQRankSum=1.011;NF;NR;PP;PV4=0.88,0.14,0.16,0.24;QD=1.10;ReadPosRankSum=-1.053;SB=-306.09;SC=GACACACAAATACACACACAC;TC;TR=13;TU=AC;VQSLOD=4.0486;set=filterInVQSR-2of5 +20 52447173 . CA C 503.89 PASS AC=23;AF=0.01891;AN=1216;BaseQRankSum=0.801;DP=3266;FS=2.606;HRun=2;HaplotypeScore=22.1543;InbreedingCoeff=-0.0097;MQ=118.02;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-1.309;QD=2.65;ReadPosRankSum=-7.872;SB=-279.27;VQSLOD=4.1900;set=VQSR +20 52498650 . GT G 24069 PASS AA=74;AB=0.90594;ABA=57;ABP=870.4;ABR=549;AC=28;AF=0.02333;AN=1200;BL=505;BR=4514;BVAR;BaseQRankSum=-3.837;DEL;DP=9798;Dels=0.01;EL=41;EPP=4.8883;ER=33;FS=4.085;HETAR=209;HOMA=663;HOMR=121;HRun=1;InbreedingCoeff=0.0334;LEN=1;LRB=0.79876;LRBP=6956.6;MQ0=2;MQ0Fraction=0.0007;MQM=57.784;MQRankSum=-2.951;NS=995;RA=957;RL=8;RPP=101.72;RR=66;RUN=1;ReadPosRankSum=-14.806;SAB=0.39189;SAF=29;SAP=10.522;SAR=45;SRB=0.39916;SRF=382;SRP=87.53;SRR=575;VQSLOD=3.8710;set=filterInVQSR-2of5;sumGLbyD=2.90 +20 52823602 rs11469056 CAAA C,CA,CAA,CAAAA,CAAAAA,CAAAAAA,CAAAAAAA,CAAAAAAAA,CAAAAAAAAA,CAAAAAAAAAA 14515.17 PASS AC=24,83,246,109,83,19,10,16,22,59;AF=0.02128,0.07358,0.21809,0.09663,0.07358,0.01684,0.00887,0.01418,0.01950,0.05230;AN=1128;BVAR;BaseQRankSum=4.150;DB;DEL;DP=28279;FR;FS=2.021;HP=17;HR=17;HU=A;HaplotypeScore=27.8032;INS;InbreedingCoeff=0.7740;MQ=69.00;MQ0=0;MQ0Fraction=0.0000;MQRankSum=1.418;NF;NR;PP;QD=7.90;RUN=1;ReadPosRankSum=-3.864;SB=-3244.40;SC=GGTCCTAAGGCAAAAAAAAAA;TC;TR=17;TU=A;VQSLOD=14.1033;set=Intersection +20 53308906 . CT C,CTT 2276 PASS AA=92;AB=0.84453;ABA=81;ABP=540.17;ABR=440;AC=53,81;AF=0.04351,0.06650;AN=1218;BL=3561;BR=4796;BVAR;BaseQRankSum=3.000;DP=11804;Dels=0.02;EL=48;EPP=3.3879;ER=44;FR;FS=13.197;HETAR=69;HOMA=3;HOMR=993;HP=11;HR=10;HRun=10;HU=T;INS;InbreedingCoeff=0.2297;LEN=1;LRB=0.14778;LRBP=399.32;MQ0=1;MQ0Fraction=0.0003;MQM=56.348;MQRankSum=3.154;NF;NR;NS=1065;PP;RA=5520;RL=39;RPP=7.6365;RR=53;RUN=1;ReadPosRankSum=-2.140;SAB=0.57609;SAF=53;SAP=7.6365;SAR=39;SC=AATCCAAAGTCTTTTTTTTTT;SRB=0.51576;SRF=2847;SRP=14.92;SRR=2673;TC;TR=10;TU=T;VQSLOD=2.4753;set=filterInVQSR-2of5;sumGLbyD=4.42 +20 53334602 . T TG,TGG 905.13 PASS ABR=325;AC=44,22;AF=0.03624,0.01812;BVAR;BaseQRankSum=-4.608;DP=15015;FR;FS=494.901;HOMA=0;HOMR=1004;HP=1;HR=1;HU=G;HaplotypeScore=20.5023;INS;InbreedingCoeff=0.0799;MQ=116.70;MQ0=0;MQ0Fraction=0.0000;MQRankSum=8.022;NF;NR;NS=1064;PP;QD=0.35;RA=5690;RUN=1;ReadPosRankSum=-14.522;SB=-311.57;SC=AGCCATTGGCTGTTTCACTGA;SRB=0.40738;SRF=2318;SRP=426.97;SRR=3372;TC;TR=1;TU=G;VQSLOD=-2.3042;set=filterInVQSR-2of5 +20 53729115 . T TG 15.48 PASS AC=1;AF=0.0015;AN=668;BaseQRankSum=-1.001;DP=1711;FS=9.048;HRun=2;HaplotypeScore=12.4681;InbreedingCoeff=-0.0320;MQ=131.36;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.193;QD=4.57;ReadPosRankSum=0.407;SB=-5.35;VQSLOD=4.8071;set=VQSR +20 53960980 . GC G 588.40 PASS AA=32;AB=0.78632;ABA=25;ABP=86.324;ABR=92;AF=0.0275;AF1=0.01689;AN=690;BL=1047;BR=1108;BVAR;BaseQRankSum=3.049;CI95=0.006637,0.02876;DEL;DP=11389;DP4=1514,1481,16,12;Dels=0.02;EL=27;EPP=35.854;ER=5;FQ=17.6;FS=0.652;HETAR=27;HOMA=3;HOMR=1006;HRun=1;INDEL;InbreedingCoeff=0.0473;LEN=1;LRB=0.028306;LRBP=6.7597;MQ=106.54;MQ0=0;MQ0Fraction=0.0000;MQM=115.53;MQRankSum=1.395;NS=1036;PV4=0.57,0.0057,0.46,0.22;RA=4207;RL=14;RPP=4.096;RR=18;RUN=1;ReadPosRankSum=-5.581;SAB=0.40625;SAF=13;SAP=5.4532;SAR=19;SRB=0.48586;SRF=2044;SRP=10.32;SRR=2163;VQSLOD=6.0155;set=Intersection;sumGLbyD=7.94 +20 54033830 . GTATTTTAAAATCA G 2220.86 PASS AF=0.0113;BaseQRankSum=5.506;DP=2577;Dels=0.01;FR;FS=6.533;HP=5;HPLen=4;HR=1;HRun=0;HU=T;InbreedingCoeff=0.0032;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-2.969;NF;NR;PP;ReadPosRankSum=1.322;SC=TCAATATTTTGTATTTTAAAA;TC;TR=1;TU=T;VQSLOD=5.5145;set=Intersection;sumGLbyD=95.65 +20 54375236 . GT G 626.13 PASS AA=40;AB=0.63551;ABA=39;ABP=20.078;ABR=68;AC=18;AF=0.0256;AN=702;BL=1331;BR=1743;BVAR;BaseQRankSum=9.346;DEL;DP=8568;Dels=0.02;EL=26;EPP=10.828;ER=14;FS=0.610;HETAR=21;HOMA=1;HOMR=1035;HRun=1;InbreedingCoeff=-0.0056;LEN=1;LRB=0.13403;LRBP=122.92;MQ0=0;MQ0Fraction=0.0000;MQM=67.125;MQRankSum=-2.537;NS=1058;RA=4870;RL=17;RPP=4.9646;RR=23;RUN=1;ReadPosRankSum=-1.229;SAB=0.525;SAF=21;SAP=3.2274;SAR=19;SRB=0.5271;SRF=2567;SRP=34.087;SRR=2303;VQSLOD=7.9228;set=Intersection;sumGLbyD=10.77 +20 54457331 . G GA 1793.40 PASS AA=77;AB=0.66667;ABA=74;ABP=56.573;ABR=148;AC=33;AF=0.02687;AN=1228;BL=3834;BR=1154;BVAR;BaseQRankSum=10.572;DP=10230;Dels=0.00;EL=77;EPP=170.21;ER=0;FS=139.433;HETAR=44;HOMA=1;HOMR=1001;HRun=1;INS;InbreedingCoeff=0.0023;LEN=1;LRB=0.53729;LRBP=3129.8;MQ0Fraction=0.0095;MQM=4.7013;MQRankSum=-8.116;NS=1046;RA=4009;RL=77;RPP=170.21;RR=0;RUN=1;ReadPosRankSum=-6.026;SAB=1;SAF=77;SAP=170.21;SAR=0;SRB=0.57022;SRF=2286;SRP=174.7;SRR=1723;VQSLOD=1.1887;set=filterInVQSR-2of5;sumGLbyD=5.90 +20 54469810 . CA C 1697.62 PASS AA=93;AB=0.63855;ABA=90;ABP=44.53;ABR=159;AC=34;AF=0.0374;AF1=0.01719;AN=908;BL=3242;BR=5839;BVAR;BaseQRankSum=10.425;CI95=0.009317,0.02795;DEL;DP=15197;DP4=2134,1896,56,46;Dels=0.03;EL=34;EPP=17.604;ER=59;FQ=16;FR;FS=9.985;HETAR=41;HOMA=1;HOMR=1011;HP=9;HPLen=8;HR=8;HRun=8;HU=A;INDEL;InbreedingCoeff=-0.0472;LEN=1;LRB=0.28598;LRBP=1615.8;MQ=83.37;MQ0=1;MQ0Fraction=0.0004;MQM=64.075;MQRankSum=3.036;NF;NR;NS=1053;PP;PV4=0.76,1,0.31,0.22;RA=5150;RL=28;RPP=34.975;RR=65;RUN=1;ReadPosRankSum=-0.252;SAB=0.5914;SAF=55;SAP=9.7582;SAR=38;SC=ATTGCTAAGACAAAAAAAAGA;SRB=0.50621;SRF=2607;SRP=4.7374;SRR=2543;TC;TR=8;TU=A;VQSLOD=8.3677;set=Intersection;sumGLbyD=9.90 +20 54542453 . GTATA G,GTA 5109.66 PASS ABR=112;AC=66,56;AF=0.0682,0.0579;AN=968;BVAR;BaseQRankSum=17.089;DB;DEL;DP=5519;DS;Dels=0.06;FS=99.502;HOMA=15;HOMR=409;HRun=0;InbreedingCoeff=0.1584;MQ0Fraction=0.0178;MQRankSum=-6.854;NS=460;RA=864;RUN=1;ReadPosRankSum=0.855;SRB=0.79282;SRF=685;SRP=646.5;SRR=179;VQSLOD=0.6375;set=filterInVQSR-2of5;sumGLbyD=8.53 +20 54629773 . CA C 1799.50 PASS AA=49;AB=0.82707;ABA=46;ABP=250.17;ABR=220;AC=9;AF=0.00746;AN=1206;BL=173;BR=2277;BVAR;BaseQRankSum=5.240;DEL;DP=8557;Dels=0.01;EL=49;EPP=109.41;ER=0;FS=32.359;HETAR=35;HOMA=1;HOMR=325;HRun=1;InbreedingCoeff=0.0892;LEN=1;LRB=0.85878;LRBP=3926.6;MQ0Fraction=0.0602;MQM=32.163;MQRankSum=-3.926;NS=361;RA=1091;RL=0;RPP=109.41;RR=49;RUN=1;ReadPosRankSum=-4.512;SAB=0;SAF=0;SAP=109.41;SAR=49;SRB=0.49404;SRF=539;SRP=3.3467;SRR=552;VQSLOD=1.1233;set=filterInVQSR-2of5;sumGLbyD=3.54 +20 54710245 . TA T 999 PASS AF=0.0084;AF1=0.0148;BaseQRankSum=3.954;CI95=0.00885,0.02212;DP=8043;DP4=2000,1849,10,7;Dels=0.01;FQ=999;FR;FS=0.000;HP=9;HPLen=6;HR=3;HRun=6;HU=A;INDEL;InbreedingCoeff=0.1181;MQ=78.51;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.095;NF;NR;PP;PV4=0.63,0.00056,1,1;ReadPosRankSum=-0.448;SC=CAACAAAAAATAAATAAATAA;TC;TR=15;TU=AAAT;VQSLOD=7.8129;set=Intersection;sumGLbyD=19.02 +20 54968173 . A AAT,AATAT,AT,ATAT 89535.82 PASS ABR=994;AC=561,278,2,3;AF=0.50179,0.24866,0.00179,0.00268;AN=1118;BVAR;BaseQRankSum=-2.699;DB;DP=27837;DP4=168,177,1045,866;Dels=0.00;FQ=999;FR;FS=12.472;HOMA=71;HOMR=455;HP=3;HPLen=4;HR=4;HRun=0;HU=A;INDEL;INS;InbreedingCoeff=0.6391;KGPilot123;MQ=80.36;MQ0Fraction=0.0055;MQRankSum=-1.512;NF;NR;NS=913;PP;PV4=0.046,1,1,1;RA=2015;RUN=1;ReadPosRankSum=1.015;SC=GGCCACTTAAAATATATATAT;SRB=0.44864;SRF=904;SRP=49.187;SRR=1111;TC;TR=15;TU=AT;VQSLOD=9.0092;dbSNP=132;set=Intersection;sumGLbyD=42.33 +20 55176688 . TA T 421.84 PASS AF=0.01322;AF1=0.01845;BaseQRankSum=5.383;CI95=0.01282,0.02564;DP=10531;DP4=1975,2017,16,14;Dels=0.01;FQ=91.2;FR;FS=7.401;HP=6;HPLen=5;HR=5;HRun=5;HU=A;INDEL;InbreedingCoeff=0.0829;MQ=75.80;MQ0=1;MQ0Fraction=0.0003;MQRankSum=-0.471;NF;NR;PP;PV4=0.72,1,1,1;ReadPosRankSum=0.223;SC=CTGCAAAATATAAAAATTAGG;TC;TR=5;TU=A;VQSLOD=6.6000;set=Intersection;sumGLbyD=12.15 +20 55664086 . GTT ATT,G,GT,GTTT 5622.44 PASS AC=6,71,136;AF=0.00498,0.05887,0.11277;AN=1206;BVAR;BaseQRankSum=3.173;DB;DEL;DP=40384;DP4=1567,1317,54,29;Dels=0.05;FR;FS=1.949;HP=14;HR=11;HRun=11;HU=T;INDEL;INS;InbreedingCoeff=0.3490;MQ=77.90;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.052;NF;NR;PP;PV4=0.057,1,0.2,1.2e-05;RUN=1;ReadPosRankSum=-13.646;SC=AATTTTATTTGTTTTTTTTTT;TC;TR=11;TU=T;VQSLOD=11.7964;set=Intersection;sumGLbyD=8.09 +20 56045006 . TG T 342.15 PASS AC=72;AF=0.0940;AN=766;BaseQRankSum=4.992;DP=1238;FS=1.460;HRun=7;HaplotypeScore=20.2784;InbreedingCoeff=0.1795;MQ=66.42;MQ0=1;MQ0Fraction=0.0008;MQRankSum=-0.937;QD=1.84;ReadPosRankSum=-4.385;SB=-320.83;VQSLOD=5.2383;set=VQSR +20 56158711 . AG A 922.47 PASS AA=18;AB=0.575;ABA=17;ABP=4.9646;ABR=23;AC=2;AF=0.0028;AN=714;BL=953;BR=808;BVAR;BaseQRankSum=3.129;DEL;DP=10462;Dels=0.01;EL=9;EPP=3.0103;ER=9;FR;FS=8.724;HETAR=4;HOMA=0;HOMR=1058;HP=1;HPLen=2;HR=2;HRun=1;HU=A;InbreedingCoeff=0.0262;LEN=1;LRB=0.08234;LRBP=28.936;MQ0=0;MQ0Fraction=0.0000;MQM=55.889;MQRankSum=2.052;NF;NR;NS=1062;PP;RA=6300;RL=9;RPP=3.0103;RR=9;RUN=1;ReadPosRankSum=-0.317;SAB=0.66667;SAF=12;SAP=7.3532;SAR=6;SC=TGGCCTAGCAAGCATCGTGAC;SRB=0.48143;SRF=3033;SRP=21.883;SRR=3267;TC;TR=8;TU=AAGC;VQSLOD=8.3252;set=Intersection;sumGLbyD=13.22 +20 56258618 rs113670927 T C,TGC,TGTGC,TGTGTGC 37834.99 PASS ABR=441;AC=11,100,43;AF=0.0123,0.1119,0.0481;AN=894;BVAR;BaseQRankSum=19.514;DB;DP=23173;DP4=541,920,413,579;Dels=0.00;FQ=999;FR;FS=1.238;HOMA=28;HOMR=808;HP=2;HPLen=1;HR=1;HRun=0;HU=G;INDEL;INS;InbreedingCoeff=0.2154;MQ=57.25;MQ0Fraction=0.0275;MQRankSum=-6.684;NF;NR;NS=976;PP;PV4=0.023,1,1,1;RA=3294;RUN=1;ReadPosRankSum=11.873;SC=TGCGTGTGTGTGTGTGTGTGT;SRB=0.42441;SRF=1398;SRP=166.5;SRR=1896;TC;TR=30;TU=GT;VQSLOD=6.7457;dbSNP=114;set=Intersection;sumGLbyD=21.27 +20 56395857 . T TAGGCAG 6614.22 PASS AA=30;AB=0.63415;ABA=30;ABP=15.827;ABR=52;AC=14;AF=0.0197;AF1=0.03154;AN=710;BL=991;BR=1813;BVAR;BaseQRankSum=-4.589;CI95=0.02434,0.04204;DP=13879;DP4=1543,1833,12,14;Dels=0.00;EL=14;EPP=3.2998;ER=16;FQ=999;FR;FS=1.482;HETAR=11;HOMA=0;HOMR=1051;HP=1;HPLen=2;HR=2;HRun=0;HU=T;INDEL;INS;InbreedingCoeff=0.0774;LEN=6;LRB=0.29315;LRBP=526.27;MQ=90.42;MQ0=0;MQ0Fraction=0.0000;MQM=39.433;MQRankSum=-7.011;NF;NR;NS=1062;PP;PV4=1,1,3.7e-09,1;RA=5322;RL=9;RPP=13.433;RR=21;RUN=1;ReadPosRankSum=0.679;SAB=0.43333;SAF=13;SAP=4.1684;SAR=17;SC=AAGAGCATCTTAGGCAGAGGC;SRB=0.47294;SRF=2517;SRP=36.853;SRR=2805;TC;TR=2;TU=T;VQSLOD=8.3045;set=Intersection;sumGLbyD=68.22 +20 56969289 . GTTTGT G 600.69 PASS AF=0.0056;AF1=0.007726;BaseQRankSum=2.907;CI95=0.004425,0.01327;DP=9643;DP4=1892,1749,6,3;Dels=0.00;FQ=117;FR;FS=16.601;HP=5;HPLen=3;HR=3;HRun=0;HU=T;INDEL;InbreedingCoeff=0.0236;MQ=92.59;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-2.134;NF;NR;PP;PV4=0.51,1,0.07,0.3;ReadPosRankSum=0.236;SC=TAAGGACGTTGTTTGTTTTGT;TC;TR=10;TU=GTTT;VQSLOD=5.8458;set=Intersection;sumGLbyD=39.51 +20 57187557 . AG A,AGG 1486.69 PASS AA=130;AB=0.55446;ABA=90;ABP=8.2132;ABR=112;AC=56,26;AF=0.0574,0.0266;AN=976;BL=3817;BR=5968;BVAR;BaseQRankSum=5.517;DEL;DP=14174;DP4=925,721,59,48;Dels=0.05;EL=52;EPP=14.302;ER=78;FR;FS=0.917;HETAR=44;HOMA=17;HOMR=864;HP=4;HPLen=4;HR=4;HRun=4;HU=G;INDEL;InbreedingCoeff=0.2856;LEN=1;LRB=0.21983;LRBP=1029.8;MQ=91.56;MQ0=0;MQ0Fraction=0.0000;MQM=63.631;MQRankSum=1.900;NF;NR;NS=925;PP;PV4=0.84,1,1,0.39;RA=2746;RL=44;RPP=32.476;RR=86;RUN=1;ReadPosRankSum=-0.639;SAB=0.44615;SAF=58;SAP=6.2842;SAR=72;SC=TCAGGCCCGCAGGGGTCAGGG;SRB=0.5772;SRF=1585;SRP=145.17;SRR=1161;TC;TR=4;TU=G;VQSLOD=7.7167;set=Intersection;sumGLbyD=14.85 +20 57282771 . T TG 506.43 PASS AA=34;AB=0.70312;ABA=19;ABP=25.946;ABR=45;AC=34;AF=0.0373;AN=912;BL=886;BR=1938;BVAR;BaseQRankSum=3.744;DP=4276;Dels=0.00;EL=18;EPP=3.2658;ER=16;FR;FS=0.639;HETAR=17;HOMA=9;HOMR=737;HP=9;HR=8;HRun=8;HU=G;INS;InbreedingCoeff=0.2149;LEN=1;LRB=0.37252;LRBP=853.99;MQ0=0;MQ0Fraction=0.0000;MQM=49.706;MQRankSum=-0.051;NF;NR;NS=763;PP;RA=1822;RL=9;RPP=19.36;RR=25;RUN=1;ReadPosRankSum=-2.111;SAB=0.55882;SAF=19;SAP=4.0322;SAR=15;SC=TCGGGGGGCGTGGGGGGGGTG;SRB=0.51098;SRF=931;SRP=4.9172;SRR=891;TC;TR=8;TU=G;VQSLOD=5.7772;set=Intersection;sumGLbyD=7.95 +20 57419740 rs11481507 A AT 82613.57 PASS AA=3850;AB=0.41404;ABA=1786;ABP=198.63;ABR=1262;AC=919;AF=0.75328;AN=1220;BL=140665;BR=151383;BVAR;BaseQRankSum=-27.490;DB;DP=31794;DP4=588,585,1571,1721;Dels=0.00;EL=1924;EPP=3.0126;ER=1926;FQ=999;FR;FS=2.191;HETAR=482;HOMA=454;HOMR=135;HP=3;HPLen=3;HR=3;HRun=3;HU=T;INDEL;INS;InbreedingCoeff=0.0861;LEN=1;LRB=0.036699;LRBP=857.15;MQ=123.92;MQ0=0;MQ0Fraction=0.0000;MQM=91.654;MQRankSum=3.016;NF;NR;NS=1071;PP;PV4=0.16,1,0.12,1;RA=1850;RL=1874;RPP=8.8784;RR=1976;RUN=1;ReadPosRankSum=-0.685;SAB=0.47636;SAF=1834;SAP=21.693;SAR=2016;SC=TACACTAGTGATTTAACCCTA;SRB=0.49027;SRF=907;SRP=4.5315;SRR=943;TC;TR=3;TU=T;VQSLOD=9.2768;dbSNP=126;set=Intersection;sumGLbyD=22.78 +20 57529209 . TA AA,T 1285.20 PASS AA=52;AB=0.89572;ABA=39;ABP=511.72;ABR=335;AC=0;AF=0.0000;AN=694;BL=1317;BR=3667;BVAR;BaseQRankSum=1.788;DEL;DP=8008;Dels=0.00;EL=30;EPP=5.6829;ER=22;FR;HETAR=151;HOMA=83;HOMR=752;HP=7;HR=7;HU=A;InbreedingCoeff=0.1368;LEN=1;LRB=0.47151;LRBP=2409.1;MQ0=0;MQ0Fraction=0.0000;MQM=58.288;MQRankSum=-0.490;NF;NR;NS=987;PP;QD=2.29;RA=2909;RL=4;RPP=83.856;RR=48;RUN=1;ReadPosRankSum=0.513;SAB=0.46154;SAF=24;SAP=3.6784;SAR=28;SB=-361.38;SC=CATAATTTTTTAAAAAAATAG;SRB=0.46855;SRF=1363;SRP=28.009;SRR=1546;TC;TR=7;TU=A;set=filterInVQSR-2of5;sumGLbyD=5.59 +20 57558194 . CT C,CTT,CTTT 6470.30 PASS ABR=451;AC=104,161,177;AF=0.08919,0.13808,0.15180;BVAR;BaseQRankSum=1.172;DP=7985;FR;FS=2.202;HOMA=19;HOMR=778;HP=22;HR=15;HU=T;HaplotypeScore=16.1921;INS;InbreedingCoeff=0.6440;MQ=69.24;MQ0=27;MQ0Fraction=0.0109;MQRankSum=-0.003;NF;NR;NS=943;PP;QD=2.22;RA=2531;RUN=1;ReadPosRankSum=-0.104;SB=-2096.85;SC=GCCTTTTTTTCTTTTTTTTTT;SRB=0.34848;SRF=882;SRP=507.73;SRR=1649;TC;TR=15;TU=T;VQSLOD=6.5151;set=Intersection +20 57693627 . AG A 1991.90 PASS AA=52;AB=0.49462;ABA=47;ABP=3.0336;ABR=46;AC=15;AF=0.01227;AN=1222;BL=1902;BR=1478;BVAR;BaseQRankSum=-6.121;DEL;DP=26459;DP4=2647,2873,16,20;Dels=0.01;EL=25;EPP=3.1773;ER=27;FR;FS=3.135;HETAR=15;HOMA=1;HOMR=1064;HP=2;HPLen=3;HR=3;HRun=2;HU=A;INDEL;InbreedingCoeff=0.0866;LEN=1;LRB=0.12544;LRBP=118.51;MQ=116.26;MQ0=0;MQ0Fraction=0.0000;MQM=114.65;MQRankSum=1.942;NF;NR;NS=1080;PP;PV4=0.74,6.9e-08,1,0.38;RA=6781;RL=33;RPP=11.195;RR=19;RUN=1;ReadPosRankSum=-1.795;SAB=0.5;SAF=26;SAP=3.0103;SAR=26;SC=ATTGGAGGAAAGGCTTTTTCA;SRB=0.46247;SRF=3136;SRP=85.976;SRR=3645;TC;TR=3;TU=A;VQSLOD=8.6672;set=Intersection;sumGLbyD=13.55 +20 57716287 . A AT 66.47 PASS AC=6;AF=0.00506;AN=1186;BaseQRankSum=1.369;DP=2744;FS=3.834;HRun=8;HaplotypeScore=11.2046;InbreedingCoeff=0.1196;MQ=73.00;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-0.086;QD=2.14;ReadPosRankSum=-2.588;SB=-53.80;VQSLOD=4.2080;set=VQSR +20 58121928 rs73625057 T TGG 6649.17 PASS AA=132;AB=0.57854;ABA=110;ABP=16.996;ABR=151;AC=57;AF=0.0617;AN=924;BL=4530;BR=4790;BVAR;BaseQRankSum=-13.456;DB;DP=30353;DP4=2107,2168,61,66;Dels=0.00;EL=67;EPP=3.0761;ER=65;FR;FS=0.708;HETAR=46;HOMA=8;HOMR=1023;HP=3;HPLen=2;HR=2;HRun=2;HU=G;INDEL;INS;InbreedingCoeff=0.1241;LEN=2;LRB=0.027897;LRBP=18.76;MQ=109.61;MQ0=1;MQ0Fraction=0.0004;MQM=79.833;MQRankSum=-0.699;NF;NR;NS=1077;PP;PV4=0.79,1,0.49,0.036;RA=5754;RL=61;RPP=4.6554;RR=71;RUN=1;ReadPosRankSum=-3.309;SAB=0.45455;SAF=60;SAP=5.3792;SAR=72;SC=GATTAGAATGTGGATATCTTT;SRB=0.48836;SRF=2810;SRP=9.7866;SRR=2944;TC;TR=4;TU=GT;VQSLOD=8.5770;set=Intersection;sumGLbyD=27.19 +20 58287008 . T TC 23.57 PASS AC=1;AF=0.0015;AN=678;BaseQRankSum=1.500;DP=1783;FS=0.000;HRun=1;HaplotypeScore=13.0585;InbreedingCoeff=0.0243;MQ=98.37;MQ0=0;MQ0Fraction=0.0000;MQRankSum=1.259;QD=5.43;ReadPosRankSum=1.115;SB=-40.33;VQSLOD=4.9523;set=VQSR +20 58418087 . TAC T 1908.26 PASS AA=64;AB=0.58667;ABA=62;ABP=12.796;ABR=88;AC=24;AF=0.0337;AN=712;BL=2841;BR=2706;BVAR;BaseQRankSum=12.276;DEL;DP=21427;DP4=2243,2398,22,31;Dels=0.03;EL=29;EPP=4.2318;ER=35;FQ=999;FR;FS=0.961;HETAR=21;HOMA=1;HOMR=1050;HP=2;HPLen=1;HR=1;HRun=0;HU=A;INDEL;InbreedingCoeff=0.0008;LEN=2;LRB=0.024337;LRBP=10.145;MQ=93.02;MQ0=0;MQ0Fraction=0.0000;MQM=51.109;MQRankSum=-3.746;NF;NR;NS=1072;PP;PV4=0.34,1.8e-11,2.3e-08,1;RA=6247;RL=37;RPP=6.4032;RR=27;RUN=1;ReadPosRankSum=0.418;SAB=0.4375;SAF=28;SAP=5.1818;SAR=36;SC=AGCCATAGGATACACAAAATC;SRB=0.47911;SRF=2993;SRP=26.689;SRR=3254;TC;TR=5;TU=AC;VQSLOD=10.5463;set=Intersection;sumGLbyD=12.25 +20 58468826 . ACAAG A 999 PASS AF=0.0014;AF1=0.003429;BaseQRankSum=4.082;CI95=0.003106,0.006211;DP=8461;DP4=2500,1817,8,2;Dels=0.01;FQ=999;FR;FS=5.034;HP=2;HPLen=1;HR=1;HRun=0;HU=C;INDEL;InbreedingCoeff=-0.0183;MQ=120.69;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.141;NF;NR;PP;PV4=0.21,1,0.054,1;ReadPosRankSum=2.096;SC=ATCCTGAAACACAAGAAGAAA;TC;TR=5;TU=AC;VQSLOD=7.4928;set=Intersection;sumGLbyD=29.17 +20 58731262 . TC T 999 PASS AA=21;AB=0.48649;ABA=19;ABP=3.069;ABR=18;AC=7;AF=0.0101;AF1=0.01493;AN=694;BL=939;BR=848;BVAR;BaseQRankSum=4.205;CI95=0.01106,0.02212;DEL;DP=12598;DP4=1766,1428,11,15;Dels=0.01;EL=13;EPP=5.5954;ER=8;FQ=999;FR;FS=1.796;HETAR=8;HOMA=1;HOMR=1031;HP=7;HPLen=8;HR=8;HRun=2;HU=T;INDEL;InbreedingCoeff=-0.0030;LEN=1;LRB=0.050923;LRBP=13.073;MQ=124.57;MQ0=0;MQ0Fraction=0.0000;MQM=67.905;MQRankSum=1.103;NF;NR;NS=1040;PP;PV4=0.23,1,1,1;RA=4884;RL=10;RPP=3.1137;RR=11;RUN=1;ReadPosRankSum=-0.091;SAB=0.47619;SAF=10;SAP=3.1137;SAR=11;SC=TCATTTTTTTTCCTTGAAACT;SRB=0.58006;SRF=2833;SRP=274.9;SRR=2051;TC;TR=8;TU=T;VQSLOD=10.8783;set=Intersection;sumGLbyD=15.11 +20 59181229 rs11476579 CTT C,CT,CTTT,CTTTT 7787.17 PASS AC=19,195,104,91;AF=0.01599,0.16414,0.08754,0.07660;AF1=0.2124;AN=1188;BVAR;BaseQRankSum=6.347;CI95=0.146,0.2743;DB;DEL;DP=26140;DP4=932,880,352,375;Dels=0.13;FQ=85.6;FR;FS=11.914;HP=14;HR=14;HRun=14;HU=T;INDEL;INS;InbreedingCoeff=0.4183;MQ=86.88;MQ0=0;MQ0Fraction=0.0000;MQRankSum=1.469;NF;NR;PP;PV4=0.17,1,1,1;RUN=1;ReadPosRankSum=-1.055;SC=GGTGAGAAAGCTTTTTTTTTT;TC;TR=14;TU=T;VQSLOD=7.4340;dbSNP=120;set=Intersection;sumGLbyD=7.02 +20 59213979 rs112141381 G GC 9068 PASS AA=131;AB=0.47115;ABA=110;ABP=4.5136;ABR=98;AF=0.0586;AN=700;BL=5395;BR=5816;BVAR;BaseQRankSum=15.453;DB;DP=23381;DP4=2191,2184,71,49;Dels=0.00;EL=66;EPP=3.0269;ER=65;FR;FS=7.907;HETAR=35;HOMA=5;HOMR=1019;HP=2;HPLen=3;HR=3;HRun=0;HU=G;INDEL;INS;InbreedingCoeff=0.0283;LEN=1;LRB=0.037552;LRBP=37.34;MQ=72.13;MQ0=0;MQ0Fraction=0.0000;MQM=54.496;MQRankSum=0.897;NF;NR;NS=1059;PP;PV4=0.052,1,0.066,1;RA=4976;RL=59;RPP=5.8117;RR=72;RUN=1;ReadPosRankSum=-0.811;SAB=0.58015;SAF=76;SAP=10.32;SAR=55;SC=GATGGACTGGGACAGTGACTC;SRB=0.49457;SRF=2461;SRP=4.2828;SRR=2515;TC;TR=3;TU=G;VQSLOD=9.3917;set=Intersection;sumGLbyD=28.58 +20 59252945 . CT C,CTT 557.18 PASS AA=24;AB=0.84868;ABA=23;ABP=163.53;ABR=129;AC=21,29;AF=0.01759,0.02429;BL=1217;BR=1336;BVAR;BaseQRankSum=5.135;DP=9970;Dels=0.01;EL=13;EPP=3.3722;ER=11;FS=2.302;HETAR=21;HOMA=1;HOMR=1012;HRun=9;INS;InbreedingCoeff=0.1549;LEN=1;LRB=0.046612;LRBP=15.055;MQ0=0;MQ0Fraction=0.0000;MQM=67.208;MQRankSum=0.086;NS=1034;RA=4421;RL=11;RPP=3.3722;RR=13;RUN=1;ReadPosRankSum=-1.826;SAB=0.41667;SAF=10;SAP=4.4579;SAR=14;SRB=0.49649;SRF=2195;SRP=3.4823;SRR=2226;VQSLOD=2.8923;set=filterInVQSR-2of5;sumGLbyD=5.47 +20 60016966 . CT C 42650 PASS AA=37;AB=0.97834;ABA=31;ABP=2847;ABR=1400;AC=15;AF=0.0163;AN=920;BL=2596;BR=778;BVAR;BaseQRankSum=-0.632;DEL;DP=10967;Dels=0.00;EL=14;EPP=7.7641;ER=23;FS=4.094;HETAR=421;HOMA=256;HOMR=385;HRun=1;InbreedingCoeff=-0.0051;LEN=1;LRB=0.53883;LRBP=2130.2;MQ0=0;MQ0Fraction=0.0000;MQM=120.3;MQRankSum=-0.911;NS=1072;RA=3413;RL=31;RPP=39.691;RR=6;RUN=1;ReadPosRankSum=-12.062;SAB=0.48649;SAF=18;SAP=3.069;SAR=19;SRB=0.47407;SRF=1618;SRP=22.943;SRR=1795;VQSLOD=3.3758;set=filterInVQSR-2of5;sumGLbyD=3.27 +20 60188651 . AG A 17624.52 PASS AA=462;AB=0.76548;ABA=409;ABP=1070.7;ABR=1335;AC=403;AF=0.34444;AN=1170;BL=13877;BR=25909;BVAR;BaseQRankSum=6.180;DEL;DP=9900;Dels=0.08;EL=353;EPP=282.84;ER=109;FR;FS=2699.057;HETAR=346;HOMA=26;HOMR=633;HP=3;HR=4;HRun=1;HU=A;InbreedingCoeff=-0.2900;LEN=1;LRB=0.30242;LRBP=7904.3;MQ0Fraction=0.0004;MQM=56.119;MQRankSum=1.644;NF;NR;NS=1005;PP;RA=3521;RL=112;RPP=269.25;RR=350;RUN=1;ReadPosRankSum=2.490;SAB=0.0064935;SAF=3;SAP=980.34;SAR=459;SC=AGGCTTCAAAAGAAAAAAAAA;SRB=0.55978;SRF=1971;SRP=112.32;SRR=1550;TC;TR=4;TU=A;VQSLOD=-34.0667;set=filterInVQSR-2of5;sumGLbyD=7.81 +20 60195570 . GTACATACATACA ATACATACATACA,G,GTACATACA 20140 PASS ABR=102;AC=105,2;AF=0.08794,0.00168;AN=1194;BVAR;BaseQRankSum=-28.899;DB;DEL;DP=14347;Dels=0.02;FR;FS=52.125;HOMA=1;HOMR=1006;HP=1;HPLen=1;HR=1;HRun=0;HU=T;InbreedingCoeff=0.0695;MQ0Fraction=0.0007;MQRankSum=1.957;NF;NR;NS=1035;PP;RA=4759;RUN=1;ReadPosRankSum=-22.252;SAB=0.5;SAP=3.0103;SC=TGATAGATTCGTACATACATA;SRB=0.47615;SRF=2266;SRP=26.522;SRR=2493;TC;TR=21;TU=ACAT;VQSLOD=2.7673;set=filterInVQSR-2of5;sumGLbyD=19.14 +20 60670601 rs72127450 AT A,ATT 6401.59 PASS AC=177,79;AF=0.16239,0.07248;AF1=0.1602;AN=1090;BVAR;BaseQRankSum=8.618;CI95=0.1106,0.2058;DB;DEL;DP=17508;DP4=1285,1094,313,259;Dels=0.10;FQ=94.1;FR;FS=0.000;HP=12;HR=12;HRun=12;HU=T;INDEL;INS;InbreedingCoeff=0.1076;LEN=1;MQ=64.73;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.620;NF;NR;PP;PV4=0.78,1,0.012,1;RUN=1;ReadPosRankSum=-1.294;SC=AGCCAGGCACATTTTTTTTTT;TC;TR=12;TU=T;VQSLOD=6.1650;dbSNP=130;set=Intersection;sumGLbyD=5.80 +20 60685780 . TC T 1123.58 PASS AC=79;AF=0.07655;AN=1032;BaseQRankSum=14.949;DP=2084;FS=23.521;HRun=1;HaplotypeScore=19.7117;InbreedingCoeff=0.1356;MQ=53.57;MQ0=61;MQ0Fraction=0.0293;MQRankSum=-7.958;QD=4.35;ReadPosRankSum=-13.757;SB=-791.28;VQSLOD=6.3549;set=VQSR +20 60744906 rs113528167 CG C 422.53 PASS AC=48;AF=0.0732;AN=656;BaseQRankSum=17.669;DB;DP=1189;FS=0.356;HRun=1;HaplotypeScore=15.1808;InbreedingCoeff=0.2111;MQ=82.83;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-10.455;QD=2.71;ReadPosRankSum=-16.887;SB=-326.46;VQSLOD=7.1707;set=VQSR +20 60848742 . CGT C,CGTGT 999 PASS AF=0.00980,0.01225;BaseQRankSum=5.597;DP=17065;DP4=1928,2188,17,13;Dels=0.01;FR;HP=1;HPLen=2;HR=2;HRun=0;HU=C;INDEL;InbreedingCoeff=0.2094;MQ=115.78;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.281;NF;NR;PP;PV4=0.36,0.4,0.12,0.12;ReadPosRankSum=-1.465;SB=-157.35;SC=TAGACGCTTCCGTGTGTGTGT;TC;TR=11;TU=GT;VQSLOD=1.7100;set=filterInVQSR-2of5;sumGLbyD=16.39 +20 61023668 rs57452309 G GAGC 6896.67 PASS AC=115;AF=0.1445;AN=796;BaseQRankSum=12.146;DB;DP=1423;FS=5.070;HRun=0;HaplotypeScore=29.8897;InbreedingCoeff=0.0740;MQ=77.02;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-9.005;QD=19.16;ReadPosRankSum=-17.440;SB=-3045.82;VQSLOD=4.5788;set=VQSR +20 61180519 . C CA,CT 1774.30 PASS ABR=135;AC=27,15;AF=0.02538,0.01410;BVAR;BaseQRankSum=-2.189;DP=8393;FR;FS=27.692;HOMA=2;HOMR=825;HP=6;HPLen=3;HR=3;HU=T;HaplotypeScore=19.5313;INS;InbreedingCoeff=0.0868;LEN=1;MQ=56.11;MQ0=172;MQ0Fraction=0.0667;MQRankSum=2.605;NF;NR;NS=854;PP;QD=1.99;RA=2868;RUN=1;ReadPosRankSum=-7.324;SB=-385.54;SC=TTCTTTCTTTCTTTCTTTCTT;SRB=0.32741;SRF=939;SRP=745.08;SRR=1929;TC;TR=69;TU=CTTT;VQSLOD=3.4398;set=filterInVQSR-2of5 +20 61184281 . AC A 9798.10 PASS AA=24;AB=0.96507;ABA=16;ABP=863.43;ABR=442;AC=4;AF=0.00341;AN=1174;BL=349;BR=1039;BVAR;BaseQRankSum=2.048;DEL;DP=10073;Dels=0.00;EL=11;EPP=3.3722;ER=13;FS=2.097;HETAR=141;HOMA=69;HOMR=829;HRun=1;InbreedingCoeff=0.0697;LEN=1;LRB=0.49712;LRBP=747.85;MQ0=0;MQ0Fraction=0.0000;MQM=98.042;MQRankSum=1.881;NS=1042;RA=3625;RL=5;RPP=20.744;RR=19;RUN=1;ReadPosRankSum=-8.009;SAB=0.75;SAF=18;SAP=16.039;SAR=6;SRB=0.52662;SRF=1909;SRP=25.323;SRR=1716;VQSLOD=1.8117;set=filterInVQSR-2of5;sumGLbyD=5.55 +20 62067246 . T TCGA 60869.60 PASS AC=1024;AF=0.88889;AN=1152;BaseQRankSum=17.328;DP=2144;FS=2.378;HRun=0;HaplotypeScore=22.0069;InbreedingCoeff=0.1400;MQ=86.75;MQ0=6;MQ0Fraction=0.0028;MQRankSum=-5.536;QD=29.45;ReadPosRankSum=1.266;SB=-24220.18;VQSLOD=6.4647;set=VQSR +20 62074219 . C CTAT,CTGT 2328 PASS ABR=99;AC=20,6;AF=0.01754,0.00526;BVAR;BaseQRankSum=11.221;DP=9498;DS;FS=4.510;HOMA=15;HOMR=645;HaplotypeScore=82.8868;INS;InbreedingCoeff=0.0880;LEN=3;MQ=29.88;MQ0=1378;MQ0Fraction=0.2286;MQRankSum=-5.309;NS=689;QD=0.77;RA=1679;RUN=1;ReadPosRankSum=-3.510;SAR=1;SB=-93.21;SRB=0.70697;SRF=1187;SRP=627.71;SRR=492;VQSLOD=1.8325;set=filterInVQSR-2of5 +20 62304449 . CA C,CAA 6680.17 PASS AC=141,69;AF=0.12567,0.06150;AF1=0.08178;AN=1122;BVAR;BaseQRankSum=9.754;CI95=0.05088,0.1128;DEL;DP=15867;DP4=1252,1289,232,208;Dels=0.10;FQ=52.6;FR;FS=6.576;HP=11;HR=11;HRun=11;HU=A;INDEL;INS;InbreedingCoeff=0.1950;LEN=1;MQ=60.48;MQ0Fraction=0.0004;MQRankSum=-0.049;NF;NR;PP;PV4=0.2,1,1,1;RUN=1;ReadPosRankSum=-2.137;SC=GATTCTGTGTCAAAAAAAAAA;TC;TR=11;TU=A;VQSLOD=7.4714;set=Intersection;sumGLbyD=8.36 +20 62804895 rs57769591 CCTT C 1148 PASS AC=8;AF=0.0085;AF1=0.002839;AN=938;BaseQRankSum=4.952;CI95=0.002212,0.006637;DB;DP=8889;DP4=2574,1668,4,8;FQ=12.3;FS=2.289;HPLen=3;HRun=0;HaplotypeScore=29.4184;INDEL;InbreedingCoeff=-0.0270;MQ0=876;MQ0Fraction=0.2674;MQRankSum=-0.641;PV4=0.074,1,1,1;QD=1.03;ReadPosRankSum=0.118;SB=-65.30;VQSLOD=6.4881;dbSNP=126;set=Intersection +20 62907688 . AAT A 6629.57 PASS AC=164;AF=0.13735;AN=1194;BaseQRankSum=27.368;DP=2746;FS=5.985;HRun=0;HaplotypeScore=14.7748;InbreedingCoeff=0.1433;MQ=96.65;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-3.318;QD=10.81;ReadPosRankSum=0.789;SB=-2662.16;VQSLOD=6.1473;set=VQSR +20 62952465 . G GT 9149.70 PASS AA=156;AB=0.66667;ABA=110;ABP=82.631;ABR=220;AC=8;AF=0.00768;AN=1042;BL=6618;BR=3296;BVAR;BaseQRankSum=-0.466;DP=6244;Dels=0.00;EL=70;EPP=6.5737;ER=86;FS=2.927;HETAR=88;HOMA=34;HOMR=664;HRun=0;INS;InbreedingCoeff=0.0711;LEN=1;LRB=0.33508;LRBP=2420.2;MQ0Fraction=0.0431;MQM=29.506;MQRankSum=-3.251;NS=786;RA=1722;RL=146;RPP=260.47;RR=10;RUN=1;ReadPosRankSum=-2.554;SAB=0.47436;SAF=74;SAP=3.9012;SAR=82;SRB=0.50523;SRF=870;SRP=3.4189;SRR=852;VQSLOD=6.1217;set=Intersection;sumGLbyD=16.58 diff --git a/tests/tabix_data/vcf/18.vcf b/tests/tabix_data/vcf/18.vcf new file mode 100644 index 0000000..e0d112c --- /dev/null +++ b/tests/tabix_data/vcf/18.vcf @@ -0,0 +1,1000 @@ +##fileformat=VCFv4.0 +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT DNA_pool_A +chr1 1281168 . A G 14 . DP=37;AF1=0.6243;CI95=0.5,1;DP4=4,0,6,0;MQ=15;PV4=1,0.027,1,1 PL:GT:GQ 43,0,4:0/1:6 +chr1 1281205 . T C 26 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=41 PL:GT:GQ 58,9,0:1/1:63 +chr1 1281206 . G C 25 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=41 PL:GT:GQ 57,9,0:1/1:63 +chr1 1922737 . G C 13.2 . DP=21;AF1=1;CI95=1,1;DP4=0,0,0,21;MQ=22 PL:GT:GQ 46,63,0:1/1:99 +chr1 21197513 . A G 55.1 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=41 PL:GT:GQ 88,21,0:1/1:84 +chr1 21343209 . T C 5.45 . DP=17;AF1=1;CI95=1,1;DP4=0,0,17,0;MQ=14 PL:GT:GQ 37,51,0:1/1:99 +chr1 22097362 . T C 4.75 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=30 PL:GT:GQ 35,9,0:1/1:63 +chr1 22254012 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 40,6,0:1/1:49 +chr1 22650927 . G A 48.1 . DP=11;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=24 PL:GT:GQ 81,21,0:1/1:84 +chr1 23535401 . C T 40.4 . DP=25;AF1=1;CI95=0.5,1;DP4=0,16,0,5;MQ=19;PV4=1,0.2,1,1 PL:GT:GQ 73,13,0:1/1:65 +chr1 23543855 . T C 49.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=44 PL:GT:GQ 82,18,0:1/1:90 +chr1 24245107 . C G 32 . DP=4;AF1=0.5001;CI95=0.5,0.5;DP4=0,2,0,2;MQ=36;PV4=1,1,1,1 PL:GT:GQ 62,0,35:0/1:38 +chr1 24274412 . G C 39.5 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=32 PL:GT:GQ 72,12,0:1/1:72 +chr1 36529832 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=46 PL:GT:GQ 73,6,0:1/1:49 +chr1 37788090 . A G 89.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=49 PL:GT:GQ 122,12,0:1/1:72 +chr1 43120440 . C T 34 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=0,1,0,2;MQ=49;PV4=1,1,1,1 PL:GT:GQ 64,0,31:0/1:34 +chr1 43980466 . C T 43 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,15;MQ=19 PL:GT:GQ 76,45,0:1/1:99 +chr1 46047795 . T C 29.1 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=31 PL:GT:GQ 62,18,0:1/1:90 +chr1 48860309 . C T 99 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=46 PL:GT:GQ 141,18,0:1/1:90 +chr1 49415599 . T C 4.61 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=34 PL:GT:GQ 34,6,0:1/1:49 +chr1 51601816 . G T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=50 PL:GT:GQ 40,6,0:1/1:49 +chr1 51955459 . G C 89.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=49 PL:GT:GQ 122,12,0:1/1:72 +chr1 68479569 . T G 12 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 43,6,0:1/1:49 +chr1 69032455 . A G 15.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=29 PL:GT:GQ 47,9,0:1/1:63 +chr1 71888225 . G T 9.31 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=43 PL:GT:GQ 40,6,0:1/1:49 +chr1 72381528 . T C 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=41 PL:GT:GQ 76,9,0:1/1:63 +chr1 82004013 . A G 37.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=50 PL:GT:GQ 70,12,0:1/1:72 +chr1 86289622 . C T 18 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=42 PL:GT:GQ 50,9,0:1/1:63 +chr1 90267663 . A G 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=45 PL:GT:GQ 54,9,0:1/1:63 +chr1 92699542 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=45 PL:GT:GQ 40,6,0:1/1:49 +chr1 94867317 . G A 26.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=45 PL:GT:GQ 58,6,0:1/1:49 +chr1 96428713 . C G 3.98 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=27 PL:GT:GQ 33,6,0:1/1:49 +chr1 100466329 . G C 4.85 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,6;MQ=22 PL:GT:GQ 36,18,0:1/1:90 +chr1 101909281 . G A 70 . DP=11;AF1=0.5;CI95=0.5,0.5;DP4=4,0,5,0;MQ=46;PV4=1,1,0.096,1 PL:GT:GQ 100,0,88:0/1:91 +chr1 106216572 . T A 22 . DP=18;AF1=1;CI95=1,1;DP4=0,0,16,0;MQ=21 PL:GT:GQ 55,48,0:1/1:99 +chr1 107901770 . T C 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 40,6,0:1/1:49 +chr1 108431179 . A G 99 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=41 PL:GT:GQ 155,24,0:1/1:96 +chr1 112005344 . C T 99 . DP=52;AF1=1;CI95=1,1;DP4=7,0,27,0;MQ=44;PV4=1,1,1,1 PL:GT:GQ 196,25,0:1/1:99 +chr1 116625452 . C T 36 . DP=44;AF1=0.5;CI95=0.5,0.5;DP4=0,23,0,20;MQ=49;PV4=1,2.3e-69,0.42,1 PL:GT:GQ 66,0,179:0/1:69 +chr1 118060710 . G T 6.98 . DP=8;AF1=0.4999;CI95=0.5,0.5;DP4=4,0,3,0;MQ=47;PV4=1,0.0071,1,1 PL:GT:GQ 36,0,73:0/1:39 +chr1 118198177 . A G 15.9 . DP=23;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=43 PL:GT:GQ 47,6,0:1/1:49 +chr1 118586346 . T C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr1 120809555 . G A 20 . DP=8;AF1=0.5;CI95=0.5,0.5;DP4=6,0,2,0;MQ=46;PV4=1,1,1,1 PL:GT:GQ 50,0,106:0/1:53 +chr1 130723110 . C A 20.7 . DP=8;AF1=0.5939;CI95=0.5,1;DP4=0,6,0,2;MQ=26;PV4=1,1,1,1 PL:GT:GQ 50,0,5:0/1:7 +chr1 133979895 . T C 14.9 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=43 PL:GT:GQ 46,6,0:1/1:49 +chr1 134977940 . C T 30 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=0,1,0,2;MQ=38;PV4=1,1,0.26,1 PL:GT:GQ 60,0,31:0/1:34 +chr1 141768589 . G A 18.1 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=4,0,4,0;MQ=51;PV4=1,2.7e-05,1,1 PL:GT:GQ 48,0,100:0/1:51 +chr1 141768590 . G A 22 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=2,0,4,0;MQ=50;PV4=1,0.0033,1,1 PL:GT:GQ 52,0,40:0/1:43 +chr1 146506051 . T C 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=43 PL:GT:GQ 76,9,0:1/1:63 +chr1 150997009 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr1 162915612 . G C 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr1 168455400 . A G 4.12 . DP=28;AF1=1;CI95=1,1;DP4=0,0,0,27;MQ=10 PL:GT:GQ 35,81,0:1/1:99 +chr1 172784744 . T C 17.8 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=48 PL:GT:GQ 49,6,0:1/1:49 +chr1 183627307 . G A 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr1 185789457 . T C 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=50 PL:GT:GQ 73,6,0:1/1:49 +chr1 187081827 . T C 4.77 . DP=10;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=17 PL:GT:GQ 36,30,0:1/1:99 +chr1 188468339 . C T 33 . DP=25;AF1=1;CI95=1,1;DP4=0,0,0,13;MQ=24 PL:GT:GQ 66,39,0:1/1:99 +chr1 188595435 . C T 41.8 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr1 188670561 . G C 3.55 . DP=22;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=18 PL:GT:GQ 34,27,0:1/1:99 +chr1 188924877 . G A 6.2 . DP=10;AF1=0.9999;CI95=0.5,1;DP4=2,0,3,0;MQ=21;PV4=1,1,1,0.3 PL:GT:GQ 35,3,0:1/1:41 +chr1 190536295 . G A 68 . DP=38;AF1=1;CI95=1,1;DP4=0,0,36,0;MQ=18 PL:GT:GQ 101,108,0:1/1:99 +chr1 191129408 . T A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=48 PL:GT:GQ 40,6,0:1/1:49 +chr1 195937816 . T C 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr1 198857619 . T C 89 . DP=61;AF1=0.5;CI95=0.5,0.5;DP4=0,38,0,17;MQ=30;PV4=1,0.032,1,1 PL:GT:GQ 119,0,139:0/1:99 +chr1 199057483 . T C 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=32 PL:GT:GQ 44,6,0:1/1:49 +chr1 200133619 . G C 5.83 . DP=49;AF1=1;CI95=0.5,1;DP4=2,0,8,0;MQ=17;PV4=1,0.059,1,0.2 PL:GT:GQ 37,12,0:1/1:72 +chr1 200729661 . A T 36 . DP=15;AF1=1;CI95=1,1;DP4=0,0,14,0;MQ=27 PL:GT:GQ 69,42,0:1/1:99 +chr1 201374519 . T C 69.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=39 PL:GT:GQ 102,12,0:1/1:72 +chr1 202811668 . G A 20.2 . DP=4;AF1=0.5163;CI95=0.5,1;DP4=0,1,0,3;MQ=24;PV4=1,1,1,1 PL:GT:GQ 50,0,12:0/1:15 +chr1 202960650 . C T 16.6 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=27 PL:GT:GQ 49,12,0:1/1:72 +chr1 205686638 . C T 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=42 PL:GT:GQ 43,9,0:1/1:63 +chr1 205949857 . A G 3.14 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=21 PL:GT:GQ 33,15,0:1/1:75 +chr1 209806643 . A G 13.2 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=21 PL:GT:GQ 46,24,0:1/1:96 +chr1 209871501 . C T 25 . DP=12;AF1=0.5;CI95=0.5,0.5;DP4=5,0,4,0;MQ=41;PV4=1,7.7e-06,1,1 PL:GT:GQ 55,0,84:0/1:58 +chr1 211051323 . G A 99 . DP=14;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=49 PL:GT:GQ 176,24,0:1/1:96 +chr1 211389716 . C T 12 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=32 PL:GT:GQ 43,6,0:1/1:49 +chr1 211868415 . G A 3.54 . DP=11;AF1=1;CI95=1,1;DP4=0,0,0,11;MQ=14 PL:GT:GQ 34,33,0:1/1:99 +chr1 211914531 . C T 84.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,1,0,4;MQ=46;PV4=1,1,1,1 PL:GT:GQ 116,7,0:1/1:57 +chr1 214691313 . A G 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=49 PL:GT:GQ 54,9,0:1/1:63 +chr1 215184650 . C T 40.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=46 PL:GT:GQ 72,6,0:1/1:49 +chr1 215995258 . A G 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=50 PL:GT:GQ 100,9,0:1/1:63 +chr1 217031394 . G C 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr1 217986960 . T C 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=36 PL:GT:GQ 76,9,0:1/1:63 +chr1 218086681 . A G 99 . DP=10;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=34 PL:GT:GQ 142,27,0:1/1:99 +chr1 218546019 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 40,6,0:1/1:49 +chr1 218632417 . G T 17.1 . DP=19;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=26 PL:GT:GQ 50,21,0:1/1:84 +chr1 218833355 . C G 23 . DP=7;AF1=0.5;CI95=0.5,0.5;DP4=5,0,2,0;MQ=39;PV4=1,1,1,1 PL:GT:GQ 53,0,63:0/1:56 +chr1 219303186 . T C 7.79 . DP=25;AF1=1;CI95=1,1;DP4=0,0,0,25;MQ=12 PL:GT:GQ 40,75,0:1/1:99 +chr1 219517634 . G A 26.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=42 PL:GT:GQ 59,12,0:1/1:72 +chr1 219590158 . T C 3.27 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 33,12,0:1/1:72 +chr1 219709853 . A T 99 . DP=124;AF1=0.5;CI95=0.5,0.5;DP4=80,0,41,0;MQ=44;PV4=1,0.26,1,1 PL:GT:GQ 143,0,156:0/1:99 +chr1 222457988 . A G 11.1 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=23 PL:GT:GQ 42,6,0:1/1:49 +chr1 222477914 . A G 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=39 PL:GT:GQ 43,9,0:1/1:63 +chr1 223010233 . A G 18.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 51,12,0:1/1:72 +chr1 223796360 . G A 6.79 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=21 PL:GT:GQ 37,6,0:1/1:49 +chr1 224273784 . A T 14.2 . DP=18;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=15 PL:GT:GQ 47,30,0:1/1:99 +chr1 224454685 . C T 46.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=32 PL:GT:GQ 79,15,0:1/1:75 +chr1 224514706 . G C 21 . DP=38;AF1=1;CI95=1,1;DP4=0,0,38,0;MQ=19 PL:GT:GQ 54,114,0:1/1:99 +chr1 224515793 . C T 99 . DP=26;AF1=1;CI95=1,1;DP4=0,0,26,0;MQ=45 PL:GT:GQ 211,78,0:1/1:99 +chr1 224692969 . C A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=36 PL:GT:GQ 40,6,0:1/1:49 +chr1 225607249 . A G 34 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=1,0,2,0;MQ=45;PV4=1,1,0,1 PL:GT:GQ 64,0,31:0/1:34 +chr1 226923918 . C A 29.1 . DP=52;AF1=1;CI95=0.5,1;DP4=0,2,0,10;MQ=27;PV4=1,1,1,1 PL:GT:GQ 62,18,0:1/1:90 +chr1 227125189 . T C 56.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=41 PL:GT:GQ 89,12,0:1/1:72 +chr1 227133712 . A T 20.1 . DP=26;AF1=0.5;CI95=0.5,0.5;DP4=11,0,10,0;MQ=23;PV4=1,1,0.48,1 PL:GT:GQ 50,0,39:0/1:42 +chr1 227943954 . G C 47 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=37 PL:GT:GQ 79,9,0:1/1:63 +chr1 227943974 . G A 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=34 PL:GT:GQ 66,12,0:1/1:72 +chr1 228067480 . A G 42.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=45 PL:GT:GQ 75,15,0:1/1:75 +chr1 228067510 . A G 99 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=45 PL:GT:GQ 140,15,0:1/1:75 +chr1 228088778 . C T 6.79 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=23 PL:GT:GQ 37,6,0:1/1:49 +chr1 228117888 . A C 13.9 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=40 PL:GT:GQ 45,6,0:1/1:49 +chr1 228139641 . T C 44.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=35 PL:GT:GQ 77,12,0:1/1:72 +chr1 228577146 . T C 26 . DP=41;AF1=0.5;CI95=0.5,0.5;DP4=0,25,0,14;MQ=22;PV4=1,1,1,0.027 PL:GT:GQ 56,0,77:0/1:59 +chr1 229001369 . C A 45 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=41 PL:GT:GQ 77,9,0:1/1:63 +chr1 229001386 . C T 8.44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 39,6,0:1/1:49 +chr1 229348080 . T C 18.1 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=0,1,0,2;MQ=40;PV4=1,0.33,0.17,0.33 PL:GT:GQ 48,0,31:0/1:34 +chr1 229439710 . C T 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=32 PL:GT:GQ 66,12,0:1/1:72 +chr1 229655149 . T C 30 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=30 PL:GT:GQ 63,24,0:1/1:96 +chr1 229660873 . C G 81 . DP=28;AF1=0.5;CI95=0.5,0.5;DP4=0,20,0,7;MQ=36;PV4=1,1,1,1 PL:GT:GQ 111,0,120:0/1:99 +chr2a 3661005 . C G 24 . DP=13;AF1=0.5001;CI95=0.5,0.5;DP4=7,0,4,0;MQ=27;PV4=1,1.1e-05,1,1 PL:GT:GQ 54,0,34:0/1:37 +chr2a 4140063 . G A 81 . DP=26;AF1=0.6671;CI95=0.5,1;DP4=18,0,8,0;MQ=24;PV4=1,8.3e-09,1,1 PL:GT:GQ 110,0,3:0/1:5 +chr2a 4248440 . T C 20 . DP=28;AF1=0.5;CI95=0.5,0.5;DP4=11,0,7,0;MQ=25;PV4=1,1,0.47,1 PL:GT:GQ 50,0,92:0/1:53 +chr2a 4707656 . A G 63 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 95,9,0:1/1:63 +chr2a 5194801 . G A 7.59 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=24 PL:GT:GQ 38,6,0:1/1:49 +chr2a 14111103 . A G 7.84 . DP=7;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=20 PL:GT:GQ 40,21,0:1/1:84 +chr2a 17799746 . A G 11.3 . DP=5;AF1=0.5001;CI95=0.5,0.5;DP4=0,3,0,2;MQ=32;PV4=1,1,1,1 PL:GT:GQ 41,0,35:0/1:37 +chr2a 24728910 . G A 45.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=28 PL:GT:GQ 78,15,0:1/1:75 +chr2a 29627939 . G T 5.44 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=27 PL:GT:GQ 36,9,0:1/1:63 +chr2a 31373164 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=44 PL:GT:GQ 73,6,0:1/1:49 +chr2a 33935228 . T C 41.8 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=51 PL:GT:GQ 73,6,0:1/1:49 +chr2a 36311856 . G A 99 . DP=30;AF1=1;CI95=1,1;DP4=0,0,0,29;MQ=44 PL:GT:GQ 213,87,0:1/1:99 +chr2a 39281204 . T C 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 100,9,0:1/1:63 +chr2a 41087565 . C T 74.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=38 PL:GT:GQ 107,12,0:1/1:72 +chr2a 45574768 . C A 11.3 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=18 PL:GT:GQ 43,9,0:1/1:63 +chr2a 55464464 . T C 26.1 . DP=7;AF1=0.9966;CI95=0.5,1;DP4=5,0,2,0;MQ=26;PV4=1,1,1,1 PL:GT:GQ 55,1,0:1/1:23 +chr2a 63107673 . T A 70.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=34 PL:GT:GQ 103,12,0:1/1:72 +chr2a 63141732 . A T 22.8 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 54,6,0:1/1:49 +chr2a 63141910 . G A 3.41 . DP=16;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=32 PL:GT:GQ 32,6,0:1/1:49 +chr2a 63141911 . C T 9.55 . DP=16;AF1=0.5031;CI95=0.5,0.5;DP4=0,2,0,3;MQ=33;PV4=1,0.43,1,1 PL:GT:GQ 39,0,19:0/1:22 +chr2a 63143543 . C T 28 . DP=18;AF1=1;CI95=1,1;DP4=0,1,0,17;MQ=16;PV4=1,1,1,1 PL:GT:GQ 61,42,0:1/1:99 +chr2a 66419805 . G A 3.69 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=23 PL:GT:GQ 34,15,0:1/1:75 +chr2a 66563922 . C T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=51 PL:GT:GQ 40,6,0:1/1:49 +chr2a 67719136 . C T 39.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 71,6,0:1/1:49 +chr2a 72781453 . A C 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=50 PL:GT:GQ 73,6,0:1/1:49 +chr2a 76733211 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr2a 78190502 . A C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr2a 85021209 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr2a 88554861 . A T 39 . DP=74;AF1=0.5;CI95=0.5,0.5;DP4=0,7,0,4;MQ=46;PV4=1,1,1,1 PL:GT:GQ 69,0,92:0/1:72 +chr2a 88554877 . A G 92 . DP=90;AF1=0.5;CI95=0.5,0.5;DP4=0,23,0,13;MQ=41;PV4=1,0.3,1,1 PL:GT:GQ 122,0,128:0/1:99 +chr2a 88824857 . G A 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=37 PL:GT:GQ 45,6,0:1/1:49 +chr2a 93546675 . C T 26 . DP=6;AF1=0.5;CI95=0.5,0.5;DP4=4,0,2,0;MQ=46;PV4=1,1,1,1 PL:GT:GQ 56,0,87:0/1:59 +chr2a 94788853 . A G 34.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=43 PL:GT:GQ 67,15,0:1/1:75 +chr2a 96738146 . T C 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=40 PL:GT:GQ 43,9,0:1/1:63 +chr2a 102737384 . A G 12.3 . DP=18;AF1=1;CI95=1,1;DP4=0,0,18,0;MQ=11 PL:GT:GQ 45,54,0:1/1:99 +chr2a 103407172 . A G 35 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=19 PL:GT:GQ 68,24,0:1/1:96 +chr2a 105774580 . T G 99 . DP=13;AF1=1;CI95=1,1;DP4=0,0,13,0;MQ=30 PL:GT:GQ 135,39,0:1/1:99 +chr2a 106376301 . C G 24.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=19 PL:GT:GQ 57,18,0:1/1:90 +chr2a 106376315 . C T 8.75 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=19 PL:GT:GQ 41,18,0:1/1:90 +chr2a 112422267 . C T 30 . DP=20;AF1=0.5;CI95=0.5,0.5;DP4=14,0,5,0;MQ=39;PV4=1,1,1,1 PL:GT:GQ 60,0,131:0/1:63 +chr2b 3049384 . A C 14.9 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 46,6,0:1/1:49 +chr2b 3049385 . G C 14.9 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 46,6,0:1/1:49 +chr2b 3049406 . C G 99 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=36 PL:GT:GQ 135,18,0:1/1:90 +chr2b 4213802 . T C 89.5 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=49 PL:GT:GQ 122,12,0:1/1:72 +chr2b 5022895 . G A 66 . DP=10;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=49 PL:GT:GQ 99,30,0:1/1:99 +chr2b 6037666 . G T 56 . DP=18;AF1=1;CI95=1,1;DP4=0,0,0,13;MQ=17 PL:GT:GQ 89,39,0:1/1:99 +chr2b 13656952 . G A 19.2 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=21 PL:GT:GQ 52,18,0:1/1:90 +chr2b 15026944 . A G 6.79 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=32 PL:GT:GQ 37,6,0:1/1:49 +chr2b 23362613 . A G 5.64 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=22 PL:GT:GQ 37,15,0:1/1:75 +chr2b 45947861 . C G 68 . DP=11;AF1=1;CI95=1,1;DP4=0,0,0,11;MQ=50 PL:GT:GQ 101,33,0:1/1:99 +chr2b 46597824 . T C 65.6 . DP=39;AF1=0.5939;CI95=0.5,1;DP4=23,0,10,0;MQ=22;PV4=1,0.014,1,1 PL:GT:GQ 95,0,5:0/1:7 +chr2b 49665191 . G T 34.1 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=37 PL:GT:GQ 67,21,0:1/1:84 +chr2b 61001546 . A G 48 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=26 PL:GT:GQ 81,24,0:1/1:96 +chr2b 88502851 . T C 4.77 . DP=4;AF1=0.5;CI95=0.5,0.5;DP4=0,2,0,2;MQ=37;PV4=1,1,0.46,1 PL:GT:GQ 33,0,34:0/1:33 +chr2b 91675431 . C T 30 . DP=14;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=27 PL:GT:GQ 63,24,0:1/1:96 +chr2b 91870148 . T G 67 . DP=14;AF1=1;CI95=1,1;DP4=0,1,0,13;MQ=47;PV4=1,1,1,1 PL:GT:GQ 100,31,0:1/1:99 +chr2b 97066826 . G A 20.1 . DP=9;AF1=0.5001;CI95=0.5,0.5;DP4=0,6,0,2;MQ=31;PV4=1,1,1,1 PL:GT:GQ 50,0,35:0/1:38 +chr2b 97670822 . G A 4.85 . DP=6;AF1=1;CI95=1,1;DP4=0,0,0,6;MQ=18 PL:GT:GQ 36,18,0:1/1:90 +chr2b 102773175 . A G 17.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=38 PL:GT:GQ 49,9,0:1/1:63 +chr2b 109805532 . T C 99 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=45 PL:GT:GQ 176,24,0:1/1:96 +chr2b 110841448 . A G 11.1 . DP=20;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=44 PL:GT:GQ 42,6,0:1/1:49 +chr2b 123217025 . T C 31.5 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=37 PL:GT:GQ 64,12,0:1/1:72 +chr2b 123263214 . A G 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=35 PL:GT:GQ 43,9,0:1/1:63 +chr2b 127747292 . C T 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=52 PL:GT:GQ 100,9,0:1/1:63 +chr2b 130121958 . A G 89.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=43 PL:GT:GQ 122,15,0:1/1:75 +chr2b 130253633 . A G 14.9 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=42 PL:GT:GQ 46,6,0:1/1:49 +chr2b 130692761 . C T 49.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=51 PL:GT:GQ 82,18,0:1/1:90 +chr2b 130743365 . A G 99 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=42 PL:GT:GQ 140,15,0:1/1:75 +chr2b 131553874 . A C 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=37 PL:GT:GQ 43,9,0:1/1:63 +chr2b 131716894 . A G 99 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=40 PL:GT:GQ 137,24,0:1/1:96 +chr2b 131716936 . G A 99 . DP=14;AF1=1;CI95=1,1;DP4=0,0,0,12;MQ=36 PL:GT:GQ 173,36,0:1/1:99 +chr2b 131716952 . A G 99 . DP=22;AF1=0.5;CI95=0.5,0.5;DP4=0,7,0,14;MQ=36;PV4=1,1,1,1 PL:GT:GQ 152,0,43:0/1:46 +chr2b 133360184 . C T 99 . DP=20;AF1=1;CI95=1,1;DP4=0,0,0,20;MQ=32 PL:GT:GQ 163,60,0:1/1:99 +chr2b 133644741 . T A 16.4 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=27 PL:GT:GQ 49,15,0:1/1:75 +chr2b 133720595 . T C 41 . DP=15;AF1=1;CI95=1,1;DP4=0,0,0,12;MQ=29 PL:GT:GQ 74,36,0:1/1:99 +chr2b 133727192 . C T 19.3 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=23 PL:GT:GQ 52,15,0:1/1:75 +chr2b 133727260 . G A 3.56 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=18 PL:GT:GQ 34,24,0:1/1:95 +chr2b 133800294 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=23 PL:GT:GQ 40,6,0:1/1:49 +chr2b 134582754 . A C 56.1 . DP=37;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=36 PL:GT:GQ 89,21,0:1/1:84 +chr2b 134582763 . G C 78 . DP=37;AF1=1;CI95=1,1;DP4=0,0,0,36;MQ=34 PL:GT:GQ 111,108,0:1/1:99 +chr2b 134809668 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr3 527814 . C G 46 . DP=9;AF1=0.5;CI95=0.5,0.5;DP4=6,0,3,0;MQ=43;PV4=1,1,1,1 PL:GT:GQ 76,0,106:0/1:79 +chr3 559510 . G A 38 . DP=27;AF1=0.5;CI95=0.5,0.5;DP4=10,0,17,0;MQ=28;PV4=1,1,0.014,1 PL:GT:GQ 68,0,111:0/1:71 +chr3 879433 . T G 32 . DP=4;AF1=0.5001;CI95=0.5,0.5;DP4=2,0,2,0;MQ=43;PV4=1,1,1,1 PL:GT:GQ 62,0,34:0/1:37 +chr3 1809645 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=51 PL:GT:GQ 73,6,0:1/1:49 +chr3 3235812 . C T 7.59 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=45 PL:GT:GQ 38,6,0:1/1:49 +chr3 3250176 . A G 83 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=32 PL:GT:GQ 116,24,0:1/1:96 +chr3 5049073 . T A 99 . DP=25;AF1=0.5;CI95=0.5,0.5;DP4=16,0,9,0;MQ=39;PV4=1,1,1,1 PL:GT:GQ 136,0,129:0/1:99 +chr3 5142874 . G A 99 . DP=38;AF1=1;CI95=1,1;DP4=0,0,38,0;MQ=28 PL:GT:GQ 179,114,0:1/1:99 +chr3 5554864 . T C 3.54 . DP=7;AF1=0.4999;CI95=0.5,0.5;DP4=0,4,0,3;MQ=27;PV4=1,1,1,1 PL:GT:GQ 31,0,35:0/1:33 +chr3 5749648 . G A 21.2 . DP=26;AF1=0.7303;CI95=0.5,1;DP4=0,7,0,7;MQ=26;PV4=1,0.16,1,0.17 PL:GT:GQ 50,0,2:0/1:3 +chr3 16451708 . A T 71.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=38 PL:GT:GQ 104,15,0:1/1:75 +chr3 23410276 . G A 99 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=45 PL:GT:GQ 140,15,0:1/1:75 +chr3 51368824 . A G 28 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=48 PL:GT:GQ 60,9,0:1/1:63 +chr3 53000453 . A G 54 . DP=10;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=19 PL:GT:GQ 87,30,0:1/1:99 +chr3 53000463 . A G 54 . DP=10;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=19 PL:GT:GQ 87,30,0:1/1:99 +chr3 59077423 . C T 77.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=33 PL:GT:GQ 110,15,0:1/1:75 +chr3 60040501 . T C 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=35 PL:GT:GQ 43,9,0:1/1:63 +chr3 64203481 . A G 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=49 PL:GT:GQ 66,12,0:1/1:72 +chr3 67947441 . C T 17.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=25 PL:GT:GQ 50,12,0:1/1:72 +chr3 76372631 . A G 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=36 PL:GT:GQ 76,9,0:1/1:63 +chr3 80611316 . C G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr3 81554381 . G T 17.6 . DP=24;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=26 PL:GT:GQ 50,12,0:1/1:72 +chr3 87614647 . A G 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=34 PL:GT:GQ 45,6,0:1/1:49 +chr3 93900455 . A T 11.6 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=13 PL:GT:GQ 44,15,0:1/1:75 +chr3 96174457 . A G 4.11 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=24 PL:GT:GQ 34,9,0:1/1:63 +chr3 96215569 . A C 3.41 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=32 PL:GT:GQ 32,6,0:1/1:49 +chr3 96587998 . A C 7.08 . DP=9;AF1=1;CI95=1,1;DP4=0,0,6,0;MQ=17 PL:GT:GQ 39,18,0:1/1:90 +chr3 99711220 . A C 12.8 . DP=11;AF1=0.9998;CI95=0.5,1;DP4=1,0,2,0;MQ=35;PV4=1,1,1,1 PL:GT:GQ 42,2,0:1/1:37 +chr3 99789741 . C G 99 . DP=18;AF1=1;CI95=1,1;DP4=0,0,17,0;MQ=47 PL:GT:GQ 210,51,0:1/1:99 +chr3 103667651 . A C 3.98 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=37 PL:GT:GQ 33,6,0:1/1:49 +chr3 104604896 . G C 55 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=50 PL:GT:GQ 87,9,0:1/1:63 +chr3 104997217 . G A 33.1 . DP=18;AF1=1;CI95=1,1;DP4=1,0,16,0;MQ=34;PV4=1,3e-10,0.17,0.36 PL:GT:GQ 66,19,0:1/1:76 +chr3 106097816 . A G 28 . DP=15;AF1=1;CI95=1,1;DP4=0,0,0,15;MQ=26 PL:GT:GQ 61,45,0:1/1:99 +chr3 106822259 . G C 99 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=50 PL:GT:GQ 140,15,0:1/1:75 +chr3 109946413 . G A 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=34 PL:GT:GQ 44,6,0:1/1:49 +chr3 121238963 . T C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=51 PL:GT:GQ 40,6,0:1/1:49 +chr3 126248567 . A G 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=33 PL:GT:GQ 45,6,0:1/1:49 +chr3 129733836 . A G 6.2 . DP=4;AF1=0.5003;CI95=0.5,0.5;DP4=1,0,3,0;MQ=43;PV4=1,0.02,0.31,1 PL:GT:GQ 35,0,28:0/1:30 +chr3 131372785 . C T 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=34 PL:GT:GQ 76,9,0:1/1:63 +chr3 132290987 . C T 22 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=45 PL:GT:GQ 54,9,0:1/1:63 +chr3 136054421 . C T 73 . DP=82;AF1=1;CI95=1,1;DP4=0,0,78,0;MQ=28 PL:GT:GQ 106,235,0:1/1:99 +chr3 141075246 . G A 30.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=41 PL:GT:GQ 62,6,0:1/1:49 +chr3 141075262 . T G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=41 PL:GT:GQ 73,6,0:1/1:49 +chr3 141430649 . G T 81.8 . DP=6;AF1=1;CI95=0.5,1;DP4=0,1,0,4;MQ=41;PV4=1,0.34,1,0.25 PL:GT:GQ 113,6,0:1/1:49 +chr3 143617747 . G T 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=29 PL:GT:GQ 54,9,0:1/1:63 +chr3 163576128 . C T 5.6 . DP=4;AF1=0.7302;CI95=0.5,1;DP4=2,0,2,0;MQ=23;PV4=1,1,1,1 PL:GT:GQ 33,0,2:0/1:3 +chr3 163839828 . A G 4.45 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=26 PL:GT:GQ 35,12,0:1/1:72 +chr3 175839340 . G T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=51 PL:GT:GQ 40,6,0:1/1:49 +chr3 190193258 . G T 3.98 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 33,6,0:1/1:49 +chr3 190777007 . G A 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr3 190970350 . A G 61 . DP=11;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=37 PL:GT:GQ 94,30,0:1/1:99 +chr3 198686408 . G A 36.6 . DP=17;AF1=1;CI95=0.5,1;DP4=0,1,0,16;MQ=25;PV4=1,1,0.026,1 PL:GT:GQ 69,11,0:1/1:66 +chr3 199277478 . T C 3.61 . DP=6;AF1=1;CI95=1,1;DP4=0,0,0,6;MQ=21 PL:GT:GQ 34,18,0:1/1:90 +chr3 199780181 . G T 77 . DP=45;AF1=0.5;CI95=0.5,0.5;DP4=0,35,0,10;MQ=33;PV4=1,1,1,1 PL:GT:GQ 107,0,114:0/1:99 +chr3 199889335 . A C 9.54 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=18 PL:GT:GQ 42,24,0:1/1:96 +chr3 200018161 . A G 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=31 PL:GT:GQ 45,6,0:1/1:49 +chr4 195475 . A G 13 . DP=13;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 44,6,0:1/1:49 +chr4 639141 . C A 14.9 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 46,6,0:1/1:49 +chr4 639152 . C T 15.2 . DP=17;AF1=0.5016;CI95=0.5,0.5;DP4=0,2,0,2;MQ=33;PV4=1,1,1,1 PL:GT:GQ 45,0,22:0/1:25 +chr4 986497 . G T 99 . DP=10;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=33 PL:GT:GQ 163,30,0:1/1:99 +chr4 986516 . C T 55.1 . DP=8;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=37 PL:GT:GQ 88,21,0:1/1:84 +chr4 1207485 . A C 14.9 . DP=22;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=45 PL:GT:GQ 46,6,0:1/1:49 +chr4 1323502 . G A 13.2 . DP=13;AF1=1;CI95=1,1;DP4=0,0,11,0;MQ=22 PL:GT:GQ 46,33,0:1/1:99 +chr4 1613521 . G A 89 . DP=16;AF1=1;CI95=1,1;DP4=0,0,16,0;MQ=32 PL:GT:GQ 122,48,0:1/1:99 +chr4 1748790 . C T 38 . DP=21;AF1=0.5005;CI95=0.5,0.5;DP4=6,0,8,0;MQ=40;PV4=1,0.09,1,1 PL:GT:GQ 68,0,27:0/1:30 +chr4 2255732 . T C 99 . DP=29;AF1=1;CI95=1,1;DP4=0,0,28,0;MQ=31 PL:GT:GQ 186,84,0:1/1:99 +chr4 3010159 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=31 PL:GT:GQ 45,6,0:1/1:49 +chr4 3545023 . A G 99 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=38 PL:GT:GQ 145,27,0:1/1:99 +chr4 3586344 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=44 PL:GT:GQ 73,6,0:1/1:49 +chr4 3879337 . A G 16.6 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 49,12,0:1/1:72 +chr4 3940733 . A G 47.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=31 PL:GT:GQ 80,15,0:1/1:75 +chr4 4410338 . T C 13.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=31 PL:GT:GQ 46,15,0:1/1:75 +chr4 4796408 . T C 41 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,16;MQ=17 PL:GT:GQ 74,48,0:1/1:99 +chr4 4796414 . A G 11.3 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,15;MQ=17 PL:GT:GQ 44,45,0:1/1:99 +chr4 6436959 . T C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 40,6,0:1/1:49 +chr4 9494256 . T C 3.41 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=37 PL:GT:GQ 32,6,0:1/1:49 +chr4 24881479 . G A 14.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=42 PL:GT:GQ 46,9,0:1/1:63 +chr4 26128644 . A G 23 . DP=18;AF1=0.5006;CI95=0.5,0.5;DP4=8,0,10,0;MQ=22;PV4=1,1,1,1 PL:GT:GQ 53,0,26:0/1:29 +chr4 42109100 . G A 17.1 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=48 PL:GT:GQ 49,9,0:1/1:63 +chr4 42309652 . C T 68 . DP=17;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=50 PL:GT:GQ 100,9,0:1/1:63 +chr4 46913966 . C T 9.08 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=16 PL:GT:GQ 41,12,0:1/1:72 +chr4 50335142 . A G 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=41 PL:GT:GQ 76,9,0:1/1:63 +chr4 51658550 . C A 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=48 PL:GT:GQ 44,6,0:1/1:49 +chr4 58258023 . T C 26 . DP=5;AF1=0.5002;CI95=0.5,0.5;DP4=0,3,0,2;MQ=34;PV4=1,1,1,0.05 PL:GT:GQ 56,0,32:0/1:35 +chr4 59219112 . C A 42.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=50 PL:GT:GQ 75,12,0:1/1:72 +chr4 62746067 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr4 67404338 . G T 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=39 PL:GT:GQ 66,12,0:1/1:72 +chr4 73353380 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr4 73946294 . G C 4.77 . DP=51;AF1=0.4999;CI95=0.5,0.5;DP4=0,5,0,3;MQ=40;PV4=1,0.19,0.37,0.11 PL:GT:GQ 33,0,64:0/1:36 +chr4 79607484 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr4 82337365 . G C 90 . DP=54;AF1=1;CI95=1,1;DP4=0,0,0,16;MQ=28 PL:GT:GQ 123,48,0:1/1:99 +chr4 82653801 . A G 4.11 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=29 PL:GT:GQ 34,9,0:1/1:63 +chr4 87130164 . C T 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=26 PL:GT:GQ 43,9,0:1/1:63 +chr4 87130176 . G A 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=26 PL:GT:GQ 43,9,0:1/1:63 +chr4 91459729 . C A 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr4 96130778 . G C 99 . DP=19;AF1=1;CI95=1,1;DP4=0,0,0,19;MQ=45 PL:GT:GQ 211,57,0:1/1:99 +chr4 100709417 . A G 45.1 . DP=16;AF1=0.505;CI95=0.5,0.5;DP4=12,0,4,0;MQ=24;PV4=1,1,1,1 PL:GT:GQ 75,0,17:0/1:20 +chr4 107276770 . C T 70 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=0,9,0,6;MQ=31;PV4=1,1,1,1 PL:GT:GQ 100,0,97:0/1:98 +chr4 115327550 . G C 42 . DP=67;AF1=1;CI95=1,1;DP4=0,1,0,66;MQ=35;PV4=1,3.2e-24,0.13,1 PL:GT:GQ 75,162,0:1/1:99 +chr4 136558502 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr4 159572459 . G A 15.1 . DP=126;AF1=0.5;CI95=0.5,0.5;DP4=0,69,0,57;MQ=39;PV4=1,4.1e-96,0.077,1 PL:GT:GQ 45,0,175:0/1:48 +chr4 174968484 . G C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=42 PL:GT:GQ 40,6,0:1/1:49 +chr4 175030633 . T C 14.3 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=29 PL:GT:GQ 47,18,0:1/1:90 +chr4 183410027 . G T 6.2 . DP=31;AF1=0.5003;CI95=0.5,0.5;DP4=2,0,2,0;MQ=45;PV4=1,0.035,1,0.21 PL:GT:GQ 35,0,28:0/1:30 +chr4 190907368 . T C 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=50 PL:GT:GQ 66,12,0:1/1:72 +chr4 192175690 . A G 76.8 . DP=7;AF1=0.95;CI95=0.5,1;DP4=0,3,0,4;MQ=35;PV4=1,1,1,1 PL:GT:GQ 105,0,0:1/1:10 +chr4 192673268 . G A 14.2 . DP=9;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=22 PL:GT:GQ 47,27,0:1/1:99 +chr4 192943966 . T C 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=44 PL:GT:GQ 73,6,0:1/1:49 +chr4 195460104 . C G 23.1 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=19 PL:GT:GQ 56,24,0:1/1:96 +chr4 198277830 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr5 170098 . A G 13 . DP=12;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=30 PL:GT:GQ 44,6,0:1/1:49 +chr5 395814 . T C 4.77 . DP=4;AF1=0.5;CI95=0.5,0.5;DP4=0,2,0,2;MQ=36;PV4=1,1,0.48,1 PL:GT:GQ 33,0,33:0/1:33 +chr5 414024 . T A 10.4 . DP=17;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=20 PL:GT:GQ 42,9,0:1/1:63 +chr5 496767 . T C 13.9 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=36 PL:GT:GQ 45,6,0:1/1:49 +chr5 805676 . C G 45 . DP=17;AF1=1;CI95=1,1;DP4=0,0,17,0;MQ=32 PL:GT:GQ 78,51,0:1/1:99 +chr5 1252896 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr5 1418370 . G A 3.65 . DP=8;AF1=0.7301;CI95=0.5,1;DP4=4,0,4,0;MQ=13;PV4=1,1,1,1 PL:GT:GQ 30,0,2:0/1:3 +chr5 1494911 . G C 62 . DP=9;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=46 PL:GT:GQ 95,24,0:1/1:96 +chr5 1494932 . C T 6.98 . DP=8;AF1=0.5001;CI95=0.5,0.5;DP4=1,0,2,0;MQ=46;PV4=1,0.1,0.077,1 PL:GT:GQ 36,0,31:0/1:33 +chr5 1506037 . T C 24.1 . DP=24;AF1=1;CI95=0.5,1;DP4=11,0,13,0;MQ=16;PV4=1,1,1,1 PL:GT:GQ 55,5,0:1/1:46 +chr5 1509406 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=47 PL:GT:GQ 73,6,0:1/1:49 +chr5 1733649 . A G 99 . DP=25;AF1=1;CI95=1,1;DP4=0,0,0,25;MQ=47 PL:GT:GQ 212,75,0:1/1:99 +chr5 1747304 . A G 12.3 . DP=12;AF1=1;CI95=1,1;DP4=0,0,0,12;MQ=19 PL:GT:GQ 45,36,0:1/1:99 +chr5 1747308 . C A 44 . DP=12;AF1=1;CI95=1,1;DP4=0,0,0,12;MQ=19 PL:GT:GQ 77,36,0:1/1:99 +chr5 3519783 . C T 21.1 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=18 PL:GT:GQ 54,24,0:1/1:96 +chr5 4101593 . A G 69.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=43 PL:GT:GQ 102,12,0:1/1:72 +chr5 7204332 . T A 4.61 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=24 PL:GT:GQ 34,6,0:1/1:49 +chr5 11510398 . A C 34 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=1,0,2,0;MQ=51;PV4=1,1,0,1 PL:GT:GQ 64,0,31:0/1:34 +chr5 15406720 . T C 6.02 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=51 PL:GT:GQ 36,6,0:1/1:49 +chr5 25152417 . C A 10.9 . DP=28;AF1=0.5718;CI95=0.5,1;DP4=0,2,0,6;MQ=25;PV4=1,1,0.21,1 PL:GT:GQ 40,0,6:0/1:8 +chr5 39072637 . A G 35.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=50 PL:GT:GQ 68,15,0:1/1:75 +chr5 46022699 . G A 44 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=35 PL:GT:GQ 76,9,0:1/1:63 +chr5 55664181 . C G 10.4 . DP=8;AF1=0.9999;CI95=0.5,1;DP4=3,0,5,0;MQ=18;PV4=1,1,1,1 PL:GT:GQ 40,3,0:1/1:41 +chr5 56253386 . T C 50.1 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=36 PL:GT:GQ 83,21,0:1/1:84 +chr5 56253447 . C T 42.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=45 PL:GT:GQ 75,12,0:1/1:72 +chr5 71950166 . G T 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=40 PL:GT:GQ 43,9,0:1/1:63 +chr5 72703090 . C T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=46 PL:GT:GQ 40,6,0:1/1:49 +chr5 73570280 . G T 5.45 . DP=41;AF1=1;CI95=1,1;DP4=0,0,41,0;MQ=15 PL:GT:GQ 37,123,0:1/1:99 +chr5 73701762 . G T 40.8 . DP=13;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=43 PL:GT:GQ 72,6,0:1/1:49 +chr5 76956867 . T C 10.2 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=46 PL:GT:GQ 41,6,0:1/1:49 +chr5 79097961 . C G 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=40 PL:GT:GQ 54,9,0:1/1:63 +chr5 87026167 . T C 22 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 54,9,0:1/1:63 +chr5 97680525 . T C 3.27 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=23 PL:GT:GQ 33,12,0:1/1:72 +chr5 100674737 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr5 105389966 . T C 3.52 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=15 PL:GT:GQ 33,9,0:1/1:63 +chr5 109998341 . A C 12.7 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=35 PL:GT:GQ 45,12,0:1/1:72 +chr5 120629105 . C T 6.79 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 37,6,0:1/1:49 +chr5 128383954 . C T 23 . DP=10;AF1=0.5;CI95=0.5,0.5;DP4=0,5,0,5;MQ=48;PV4=1,3.3e-07,1,1 PL:GT:GQ 53,0,98:0/1:56 +chr5 133925142 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr5 135375404 . T C 11.8 . DP=6;AF1=1;CI95=0.5,1;DP4=1,0,3,0;MQ=31;PV4=1,0.03,1,1 PL:GT:GQ 42,4,0:1/1:45 +chr5 136498281 . T G 13.9 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=37 PL:GT:GQ 45,6,0:1/1:49 +chr5 136717285 . A G 82.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=48 PL:GT:GQ 115,12,0:1/1:72 +chr5 136910734 . G A 62 . DP=19;AF1=1;CI95=1,1;DP4=0,1,0,13;MQ=23;PV4=1,1,1,1 PL:GT:GQ 95,31,0:1/1:99 +chr5 141208149 . C G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr5 148056348 . C A 37.1 . DP=4;AF1=0.9966;CI95=0.5,1;DP4=1,0,2,0;MQ=38;PV4=1,1,1,1 PL:GT:GQ 66,1,0:1/1:23 +chr5 151941534 . G T 46.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=34 PL:GT:GQ 79,12,0:1/1:72 +chr5 159967229 . G C 22.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=35 PL:GT:GQ 55,12,0:1/1:72 +chr5 174024541 . T G 29.5 . DP=3;AF1=0.9998;CI95=0.5,1;DP4=0,1,0,2;MQ=32;PV4=1,1,1,1 PL:GT:GQ 59,2,0:1/1:37 +chr5 175525290 . A G 3.27 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=20 PL:GT:GQ 33,12,0:1/1:72 +chr5 175988954 . A C 14.2 . DP=23;AF1=0.5;CI95=0.5,0.5;DP4=0,6,0,4;MQ=47;PV4=1,1,0.2,1 PL:GT:GQ 44,0,76:0/1:47 +chr5 176782226 . T C 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=43 PL:GT:GQ 40,6,0:1/1:49 +chr5 179132834 . C G 99 . DP=28;AF1=1;CI95=1,1;DP4=0,0,0,28;MQ=41 PL:GT:GQ 207,84,0:1/1:99 +chr5 180155809 . G C 3.01 . DP=36;AF1=0.4997;CI95=0.5,0.5;DP4=25,0,9,0;MQ=35;PV4=1,1e-15,1,1 PL:GT:GQ 30,0,121:0/1:33 +chr5 181282819 . T G 38.3 . DP=11;AF1=1;CI95=0.5,1;DP4=0,2,0,9;MQ=23;PV4=1,1,1,1 PL:GT:GQ 71,14,0:1/1:70 +chr5 182426125 . G C 29 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=26 PL:GT:GQ 61,9,0:1/1:63 +chr5 182443682 . G A 3.69 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=21 PL:GT:GQ 34,15,0:1/1:75 +chr5 183008993 . C T 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 54,9,0:1/1:63 +chr5 183312016 . G T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr6_cox_hap1 519146 . G A 17.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=30 PL:GT:GQ 49,9,0:1/1:63 +chr6_cox_hap1 687497 . A G 33 . DP=6;AF1=0.9999;CI95=0.5,1;DP4=2,0,4,0;MQ=35;PV4=1,0.0016,1,1 PL:GT:GQ 63,3,0:1/1:41 +chr6_qbl_hap2 120066 . T C 99 . DP=12;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=37 PL:GT:GQ 139,27,0:1/1:99 +chr6 277954 . C T 53 . DP=41;AF1=1;CI95=1,1;DP4=4,0,37,0;MQ=19;PV4=1,1,0.3,1 PL:GT:GQ 86,49,0:1/1:99 +chr6 593158 . A G 4.61 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=32 PL:GT:GQ 34,6,0:1/1:49 +chr6 2865562 . T G 25 . DP=9;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=23 PL:GT:GQ 58,27,0:1/1:99 +chr6 3751403 . G A 42.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=32 PL:GT:GQ 75,15,0:1/1:75 +chr6 3884989 . A G 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=36 PL:GT:GQ 45,6,0:1/1:49 +chr6 4127278 . A T 13.9 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr6 5887783 . C G 99 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=34 PL:GT:GQ 142,21,0:1/1:84 +chr6 5887811 . C T 55.1 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=34 PL:GT:GQ 88,21,0:1/1:84 +chr6 6937170 . G C 99 . DP=47;AF1=1;CI95=1,1;DP4=0,0,0,47;MQ=28 PL:GT:GQ 157,141,0:1/1:99 +chr6 7262317 . C T 13.2 . DP=50;AF1=0.5;CI95=0.5,0.5;DP4=21,0,9,0;MQ=36;PV4=1,4e-05,0.17,0.26 PL:GT:GQ 43,0,158:0/1:46 +chr6 7533214 . A G 10.4 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=26 PL:GT:GQ 42,9,0:1/1:63 +chr6 20979907 . A G 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=38 PL:GT:GQ 76,9,0:1/1:63 +chr6 22321632 . A G 41 . DP=5;AF1=0.5004;CI95=0.5,0.5;DP4=1,0,3,0;MQ=46;PV4=1,0.24,0.19,0.33 PL:GT:GQ 71,0,28:0/1:31 +chr6 25352296 . G A 7.8 . DP=4;AF1=0.5003;CI95=0.5,0.5;DP4=0,1,0,3;MQ=38;PV4=1,1,0.16,1 PL:GT:GQ 37,0,28:0/1:30 +chr6 26298040 . T A 34 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=0,1,0,2;MQ=48;PV4=1,1,0.21,0.33 PL:GT:GQ 64,0,31:0/1:34 +chr6 33428755 . G A 70 . DP=14;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=32 PL:GT:GQ 103,27,0:1/1:99 +chr6 39512099 . G A 55.1 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=50 PL:GT:GQ 88,21,0:1/1:84 +chr6 39961094 . G A 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr6 40452120 . A G 40.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 72,6,0:1/1:49 +chr6 43204766 . A G 99 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=51 PL:GT:GQ 176,24,0:1/1:96 +chr6 52696512 . C T 70 . DP=76;AF1=0.5;CI95=0.5,0.5;DP4=0,34,0,42;MQ=18;PV4=1,0.11,1,1 PL:GT:GQ 100,0,51:0/1:54 +chr6 53785550 . A G 99 . DP=20;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=46 PL:GT:GQ 190,30,0:1/1:99 +chr6 53897484 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=36 PL:GT:GQ 45,6,0:1/1:49 +chr6 57038290 . C T 10.2 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=36 PL:GT:GQ 41,6,0:1/1:49 +chr6 62925087 . G C 35 . DP=5;AF1=0.5008;CI95=0.5,0.5;DP4=1,0,4,0;MQ=36;PV4=1,1,0.2,1 PL:GT:GQ 65,0,25:0/1:28 +chr6 62925094 . T C 25.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=36 PL:GT:GQ 58,15,0:1/1:75 +chr6 70834405 . G A 72.1 . DP=13;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=29 PL:GT:GQ 105,21,0:1/1:84 +chr6 71026058 . C T 48.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=42 PL:GT:GQ 81,18,0:1/1:90 +chr6 74420752 . T C 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=39 PL:GT:GQ 76,9,0:1/1:63 +chr6 77498624 . T C 16.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=33 PL:GT:GQ 48,6,0:1/1:49 +chr6 80416836 . T C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 40,6,0:1/1:49 +chr6 113611590 . A G 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=46 PL:GT:GQ 100,9,0:1/1:63 +chr6 119308431 . T C 38.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=40 PL:GT:GQ 71,12,0:1/1:72 +chr6 151758592 . T C 3.07 . DP=17;AF1=0.9966;CI95=0.5,1;DP4=0,8,0,9;MQ=13;PV4=1,1,1,1 PL:GT:GQ 29,1,0:1/1:23 +chr6 151759358 . A G 99 . DP=27;AF1=0.5;CI95=0.5,0.5;DP4=12,0,15,0;MQ=44;PV4=1,1,1,0.19 PL:GT:GQ 171,0,128:0/1:99 +chr6 154741755 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 40,6,0:1/1:49 +chr6 161061053 . C A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=52 PL:GT:GQ 40,6,0:1/1:49 +chr6 161474189 . C T 6.02 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 36,6,0:1/1:49 +chr6 164304657 . C T 10.4 . DP=63;AF1=0.5;CI95=0.5,0.5;DP4=0,29,0,19;MQ=22;PV4=1,7.7e-11,1,0.049 PL:GT:GQ 40,0,37:0/1:38 +chr6 164703105 . T C 99 . DP=11;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=40 PL:GT:GQ 165,30,0:1/1:99 +chr6 167518328 . A G 78 . DP=41;AF1=0.5;CI95=0.5,0.5;DP4=27,0,14,0;MQ=33;PV4=1,0.026,0.43,0.056 PL:GT:GQ 108,0,149:0/1:99 +chr6 169906323 . G A 41.8 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr6 171893912 . G A 69.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=33 PL:GT:GQ 102,15,0:1/1:75 +chr6 173631604 . A G 6.98 . DP=7;AF1=0.5;CI95=0.5,0.5;DP4=4,0,3,0;MQ=37;PV4=1,0.069,1,1 PL:GT:GQ 36,0,34:0/1:35 +chr7 835856 . C T 27.5 . DP=13;AF1=0.9998;CI95=0.5,1;DP4=4,0,6,0;MQ=23;PV4=1,0.46,1,1 PL:GT:GQ 57,2,0:1/1:37 +chr7 1046005 . C T 11.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=36 PL:GT:GQ 43,9,0:1/1:63 +chr7 1564339 . C T 71 . DP=66;AF1=0.5;CI95=0.5,0.5;DP4=36,0,24,0;MQ=29;PV4=1,1,0.35,1 PL:GT:GQ 101,0,134:0/1:99 +chr7 1806266 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 73,6,0:1/1:49 +chr7 1936013 . G T 7.77 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=17 PL:GT:GQ 39,9,0:1/1:63 +chr7 2319532 . C A 4.11 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=14 PL:GT:GQ 34,9,0:1/1:63 +chr7 2682121 . C T 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=33 PL:GT:GQ 44,6,0:1/1:49 +chr7 3248116 . T C 36.5 . DP=3;AF1=0.9998;CI95=0.5,1;DP4=0,1,0,2;MQ=37;PV4=1,1,1,1 PL:GT:GQ 66,2,0:1/1:37 +chr7 3624766 . C T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=41 PL:GT:GQ 40,6,0:1/1:49 +chr7 5291140 . G C 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=37 PL:GT:GQ 45,6,0:1/1:49 +chr7 5314457 . C A 3.56 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=18 PL:GT:GQ 34,24,0:1/1:95 +chr7 5595072 . T A 79 . DP=13;AF1=0.5;CI95=0.5,0.5;DP4=8,0,5,0;MQ=31;PV4=1,1,1,1 PL:GT:GQ 109,0,57:0/1:60 +chr7 5646060 . G C 7.79 . DP=11;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=10 PL:GT:GQ 40,30,0:1/1:99 +chr7 6056816 . C G 7.08 . DP=6;AF1=0.9966;CI95=0.5,1;DP4=0,2,0,3;MQ=23;PV4=1,1,1,1 PL:GT:GQ 35,1,0:1/1:23 +chr7 6412641 . C T 40 . DP=11;AF1=1;CI95=1,1;DP4=0,0,11,0;MQ=33 PL:GT:GQ 73,33,0:1/1:99 +chr7 6766874 . A G 34.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=43 PL:GT:GQ 67,15,0:1/1:75 +chr7 8482729 . C T 5.08 . DP=16;AF1=0.8276;CI95=0.5,1;DP4=3,0,3,0;MQ=22;PV4=1,1,1,0.19 PL:GT:GQ 32,0,1:1/1:5 +chr7 9238362 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr7 9687781 . G A 33 . DP=29;AF1=0.5;CI95=0.5,0.5;DP4=0,16,0,12;MQ=48;PV4=1,6.5e-38,1,1 PL:GT:GQ 63,0,170:0/1:66 +chr7 9752803 . A T 14.2 . DP=17;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=18 PL:GT:GQ 47,27,0:1/1:99 +chr7 10240910 . T C 45.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=35 PL:GT:GQ 78,12,0:1/1:72 +chr7 11046187 . C T 86.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=47 PL:GT:GQ 119,12,0:1/1:72 +chr7 11548207 . C G 14.6 . DP=13;AF1=1;CI95=0.5,1;DP4=6,1,0,5;MQ=18;PV4=0.015,1,1,1 PL:GT:GQ 46,7,0:1/1:57 +chr7 11580317 . C T 42 . DP=12;AF1=1;CI95=1,1;DP4=0,1,0,10;MQ=22;PV4=1,1,1,1 PL:GT:GQ 75,23,0:1/1:92 +chr7 11585384 . G A 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=46 PL:GT:GQ 73,6,0:1/1:49 +chr7 13498356 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=47 PL:GT:GQ 73,6,0:1/1:49 +chr7 13500887 . G A 15.1 . DP=11;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=22 PL:GT:GQ 48,30,0:1/1:99 +chr7 13827079 . C T 6.02 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 36,6,0:1/1:49 +chr7 14403976 . T G 59 . DP=30;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=39 PL:GT:GQ 92,24,0:1/1:96 +chr7 14756588 . A G 44 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=5,0,10,0;MQ=44;PV4=1,5.3e-18,1,1 PL:GT:GQ 74,0,70:0/1:72 +chr7 14756619 . T G 44 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=5,0,10,0;MQ=44;PV4=1,6.4e-10,1,1 PL:GT:GQ 74,0,70:0/1:72 +chr7 36734598 . A C 11.1 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=40 PL:GT:GQ 42,6,0:1/1:49 +chr7 36734599 . A T 11.1 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=40 PL:GT:GQ 42,6,0:1/1:49 +chr7 36734603 . G C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=40 PL:GT:GQ 40,6,0:1/1:49 +chr7 40634921 . A C 55 . DP=13;AF1=1;CI95=1,1;DP4=0,0,13,0;MQ=39 PL:GT:GQ 88,39,0:1/1:99 +chr7 48271285 . A T 73 . DP=15;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=25 PL:GT:GQ 106,30,0:1/1:99 +chr7 56264700 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=51 PL:GT:GQ 40,6,0:1/1:49 +chr7 62326003 . C A 26.1 . DP=35;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=28 PL:GT:GQ 59,18,0:1/1:90 +chr7 109468934 . T G 5.13 . DP=10;AF1=0.9998;CI95=0.5,1;DP4=0,1,0,2;MQ=39;PV4=1,0.031,1,1 PL:GT:GQ 33,2,0:1/1:37 +chr7 110208327 . C G 16.9 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=44 PL:GT:GQ 48,6,0:1/1:49 +chr7 125654934 . A G 4.11 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=27 PL:GT:GQ 34,9,0:1/1:63 +chr7 125770209 . A C 32 . DP=31;AF1=0.5;CI95=0.5,0.5;DP4=11,0,13,0;MQ=34;PV4=1,0.00017,0.16,0.22 PL:GT:GQ 62,0,105:0/1:65 +chr7 125770265 . G C 36 . DP=16;AF1=0.5;CI95=0.5,0.5;DP4=0,5,0,5;MQ=48;PV4=1,0.0047,0.016,0.035 PL:GT:GQ 66,0,110:0/1:69 +chr7 126687042 . A G 21.1 . DP=36;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=22 PL:GT:GQ 54,21,0:1/1:84 +chr7 132292897 . G T 99 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=43 PL:GT:GQ 167,21,0:1/1:84 +chr7 132334562 . A C 23 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=23 PL:GT:GQ 56,30,0:1/1:99 +chr7 132431838 . C T 13.3 . DP=5;AF1=1;CI95=0.5,1;DP4=1,0,4,0;MQ=23;PV4=1,1,1,1 PL:GT:GQ 44,5,0:1/1:46 +chr7 136324945 . T C 13.7 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=35 PL:GT:GQ 46,12,0:1/1:72 +chr7 136957634 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=43 PL:GT:GQ 40,6,0:1/1:49 +chr7 141746871 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 40,6,0:1/1:49 +chr7 146831870 . C T 4.77 . DP=14;AF1=0.5003;CI95=0.5,0.5;DP4=1,0,3,0;MQ=37;PV4=1,0.0029,0.28,1 PL:GT:GQ 33,0,28:0/1:30 +chr7 147142770 . T C 45 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=31 PL:GT:GQ 77,9,0:1/1:63 +chr7 147713906 . C T 4.77 . DP=8;AF1=0.5002;CI95=0.5,0.5;DP4=2,0,4,0;MQ=35;PV4=1,8.9e-06,0.48,0.27 PL:GT:GQ 33,0,29:0/1:31 +chr7 148742642 . G A 68 . DP=14;AF1=0.5032;CI95=0.5,0.5;DP4=4,0,10,0;MQ=28;PV4=1,1,1,1 PL:GT:GQ 98,0,19:0/1:22 +chr7 148879148 . C T 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=48 PL:GT:GQ 54,9,0:1/1:63 +chr7 149484407 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=45 PL:GT:GQ 73,6,0:1/1:49 +chr7 152444478 . A G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=36 PL:GT:GQ 44,6,0:1/1:49 +chr7 154106613 . C T 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=51 PL:GT:GQ 100,9,0:1/1:63 +chr7 154776891 . G T 14.4 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=31 PL:GT:GQ 47,15,0:1/1:75 +chr7 155882061 . A C 29 . DP=24;AF1=0.502;CI95=0.5,0.5;DP4=0,1,0,4;MQ=46;PV4=1,0.018,0.15,0.29 PL:GT:GQ 59,0,21:0/1:24 +chr7 155956844 . G C 23 . DP=11;AF1=0.5;CI95=0.5,0.5;DP4=0,7,0,4;MQ=38;PV4=1,1,0.38,1 PL:GT:GQ 53,0,103:0/1:56 +chr7 156277694 . G A 62 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=46 PL:GT:GQ 95,24,0:1/1:96 +chr7 156720588 . T C 16.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=29 PL:GT:GQ 48,9,0:1/1:63 +chr7 156807649 . T C 3.01 . DP=30;AF1=0.4997;CI95=0.5,0.5;DP4=0,4,0,3;MQ=43;PV4=1,0.16,0.15,1 PL:GT:GQ 30,0,72:0/1:33 +chr7 157331292 . G T 43.1 . DP=7;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=34 PL:GT:GQ 76,21,0:1/1:84 +chr7 157382957 . T C 33.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=43 PL:GT:GQ 66,12,0:1/1:72 +chr8 556382 . A G 37.1 . DP=5;AF1=0.9966;CI95=0.5,1;DP4=2,0,3,0;MQ=31;PV4=1,1,1,1 PL:GT:GQ 66,1,0:1/1:23 +chr8 1661673 . T C 9.31 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr8 7379751 . C A 6.24 . DP=8;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=19 PL:GT:GQ 38,21,0:1/1:84 +chr8 8160505 . A T 68.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=35 PL:GT:GQ 101,12,0:1/1:72 +chr8 8160508 . C T 24.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=35 PL:GT:GQ 57,12,0:1/1:72 +chr8 16781011 . A G 55.5 . DP=9;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=34 PL:GT:GQ 88,12,0:1/1:72 +chr8 18716499 . A T 20 . DP=10;AF1=0.5;CI95=0.5,0.5;DP4=0,4,0,2;MQ=29;PV4=1,1,1,1 PL:GT:GQ 50,0,52:0/1:51 +chr8 23326483 . A G 60 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=47 PL:GT:GQ 92,9,0:1/1:63 +chr8 25842819 . T A 12 . DP=18;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=47 PL:GT:GQ 43,6,0:1/1:49 +chr8 26300279 . T C 34 . DP=44;AF1=1;CI95=1,1;DP4=0,0,41,0;MQ=21 PL:GT:GQ 67,123,0:1/1:99 +chr8 29673470 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=41 PL:GT:GQ 73,6,0:1/1:49 +chr8 29673473 . C G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=41 PL:GT:GQ 40,6,0:1/1:49 +chr8 31685466 . C T 34 . DP=17;AF1=0.5;CI95=0.5,0.5;DP4=10,0,5,0;MQ=28;PV4=1,0.072,1,0.36 PL:GT:GQ 64,0,50:0/1:53 +chr8 37378739 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=34 PL:GT:GQ 45,6,0:1/1:49 +chr8 51325952 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr8 59221963 . G A 16.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=29 PL:GT:GQ 48,9,0:1/1:63 +chr8 62764995 . T G 20 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=32 PL:GT:GQ 52,9,0:1/1:63 +chr8 63157426 . C G 41.6 . DP=22;AF1=1;CI95=0.5,1;DP4=0,7,0,15;MQ=19;PV4=1,1,1,0.25 PL:GT:GQ 74,11,0:1/1:66 +chr8 68710444 . G A 30 . DP=5;AF1=0.6671;CI95=0.5,1;DP4=3,0,2,0;MQ=32;PV4=1,1,1,1 PL:GT:GQ 59,0,3:0/1:5 +chr8 76416560 . G A 89.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=46 PL:GT:GQ 122,12,0:1/1:72 +chr8 81425275 . T G 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=50 PL:GT:GQ 100,9,0:1/1:63 +chr8 89842286 . G C 4.61 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=30 PL:GT:GQ 34,6,0:1/1:49 +chr8 100926281 . G A 38 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=41 PL:GT:GQ 70,9,0:1/1:63 +chr8 102746002 . G C 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr8 107850176 . C T 43.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=45 PL:GT:GQ 76,18,0:1/1:90 +chr8 109966441 . T C 27.3 . DP=9;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=38 PL:GT:GQ 60,15,0:1/1:75 +chr8 118811716 . G T 99 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=50 PL:GT:GQ 155,18,0:1/1:90 +chr8 119440254 . A T 58.5 . DP=5;AF1=0.8277;CI95=0.5,1;DP4=2,0,3,0;MQ=34;PV4=1,1,1,0.14 PL:GT:GQ 87,0,1:1/1:5 +chr8 121236024 . G A 39.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=48 PL:GT:GQ 71,6,0:1/1:49 +chr8 125489079 . C T 13 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr8 128502549 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=45 PL:GT:GQ 73,6,0:1/1:49 +chr8 128502551 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=45 PL:GT:GQ 73,6,0:1/1:49 +chr8 130951113 . G A 4.61 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=19 PL:GT:GQ 34,6,0:1/1:49 +chr8 135307123 . G A 6.02 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=45 PL:GT:GQ 36,6,0:1/1:49 +chr8 138814155 . C T 57.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=46 PL:GT:GQ 90,18,0:1/1:90 +chr8 140566111 . A G 18.1 . DP=12;AF1=1;CI95=1,1;DP4=0,0,0,12;MQ=15 PL:GT:GQ 51,36,0:1/1:99 +chr8 141586480 . T G 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=40 PL:GT:GQ 76,9,0:1/1:63 +chr8 143376712 . A G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr8 150662729 . T C 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr8 150741294 . A G 25.1 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=34 PL:GT:GQ 58,18,0:1/1:90 +chr8 150975618 . A G 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 40,6,0:1/1:49 +chr8 151580103 . T C 6.02 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=20 PL:GT:GQ 36,6,0:1/1:49 +chr8 151634410 . G T 48 . DP=17;AF1=0.5;CI95=0.5,0.5;DP4=0,12,0,5;MQ=39;PV4=1,0.072,1,1 PL:GT:GQ 78,0,125:0/1:81 +chr8 151709267 . G A 91.1 . DP=8;AF1=0.5064;CI95=0.5,0.5;DP4=0,1,0,7;MQ=40;PV4=1,1,0.28,0.37 PL:GT:GQ 121,0,16:0/1:19 +chr8 152636420 . G A 8.75 . DP=3;AF1=0.9966;CI95=0.5,1;DP4=0,1,0,2;MQ=30;PV4=1,1,1,1 PL:GT:GQ 37,1,0:1/1:23 +chr8 152706967 . G A 3.01 . DP=10;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=16 PL:GT:GQ 33,30,0:1/1:99 +chr8 152786522 . T C 80.1 . DP=16;AF1=0.5102;CI95=0.5,0.5;DP4=0,4,0,12;MQ=31;PV4=1,0.25,1,1 PL:GT:GQ 110,0,14:0/1:17 +chr8 152863132 . T G 5.44 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=30 PL:GT:GQ 36,9,0:1/1:63 +chr9 23235268 . C T 12 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=32 PL:GT:GQ 43,6,0:1/1:49 +chr9 26391176 . T C 15.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 47,6,0:1/1:49 +chr9 26868232 . C G 63 . DP=20;AF1=0.5025;CI95=0.5,0.5;DP4=7,0,13,0;MQ=22;PV4=1,0.2,1,0.44 PL:GT:GQ 93,0,20:0/1:23 +chr9 34223668 . C T 22 . DP=16;AF1=0.5;CI95=0.5,0.5;DP4=0,9,0,7;MQ=27;PV4=1,0.14,0.34,1 PL:GT:GQ 52,0,79:0/1:55 +chr9 39696645 . G A 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=41 PL:GT:GQ 43,9,0:1/1:63 +chr9 40654130 . T G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 44,6,0:1/1:49 +chr9 41145321 . T G 46.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=33 PL:GT:GQ 79,12,0:1/1:72 +chr9 42273483 . G A 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr9 55633192 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr9 58705807 . T C 70 . DP=10;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=24 PL:GT:GQ 103,30,0:1/1:99 +chr9 61697149 . C G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr9 63152790 . A C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 40,6,0:1/1:49 +chr9 63703913 . C G 90.1 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=38 PL:GT:GQ 123,21,0:1/1:84 +chr9 65116068 . T C 70 . DP=13;AF1=1;CI95=1,1;DP4=0,0,0,13;MQ=49 PL:GT:GQ 103,39,0:1/1:99 +chr9 71266598 . C A 3.98 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 33,6,0:1/1:49 +chr9 73188677 . G T 52 . DP=294;AF1=1;CI95=1,1;DP4=44,0,245,0;MQ=33;PV4=1,0.28,0.0092,1 PL:GT:GQ 85,147,0:1/1:99 +chr9 78854179 . G T 22 . DP=97;AF1=0.5;CI95=0.5,0.5;DP4=21,0,12,0;MQ=44;PV4=1,0.02,0.032,0.0033 PL:GT:GQ 52,0,158:0/1:55 +chr9 82964679 . A C 13.2 . DP=19;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=36 PL:GT:GQ 45,9,0:1/1:63 +chr9 84124545 . G T 57 . DP=11;AF1=0.5;CI95=0.5,0.5;DP4=2,0,3,0;MQ=49;PV4=1,1,0.024,1 PL:GT:GQ 87,0,59:0/1:62 +chr9 86552862 . C T 14.4 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=26 PL:GT:GQ 47,15,0:1/1:75 +chr9 87548941 . A G 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=49 PL:GT:GQ 54,9,0:1/1:63 +chr9 89021101 . G A 89.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=49 PL:GT:GQ 122,12,0:1/1:72 +chr9 90447825 . G A 9.31 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=46 PL:GT:GQ 40,6,0:1/1:49 +chr9 92462035 . C A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=36 PL:GT:GQ 40,6,0:1/1:49 +chr9 93077294 . T G 5.44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=31 PL:GT:GQ 36,9,0:1/1:63 +chr9 93998137 . G A 68 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=46 PL:GT:GQ 100,9,0:1/1:63 +chr9 93998148 . C T 21.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=36 PL:GT:GQ 54,15,0:1/1:75 +chr9 95028964 . C A 99 . DP=83;AF1=0.5;CI95=0.5,0.5;DP4=0,57,0,26;MQ=32;PV4=1,9.3e-08,1,0.092 PL:GT:GQ 134,0,120:0/1:99 +chr9 103829155 . A G 33 . DP=96;AF1=1;CI95=1,1;DP4=0,0,96,0;MQ=16 PL:GT:GQ 66,255,0:1/1:99 +chr9 104981331 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=43 PL:GT:GQ 73,6,0:1/1:49 +chr9 111070656 . G A 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr9 117395657 . T C 16.4 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=23 PL:GT:GQ 49,15,0:1/1:75 +chr9 117718907 . A G 46.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=29 PL:GT:GQ 79,18,0:1/1:90 +chr9 119149161 . T C 3.14 . DP=65;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=22 PL:GT:GQ 33,15,0:1/1:75 +chr9 124528802 . G A 78 . DP=23;AF1=1;CI95=1,1;DP4=0,0,13,0;MQ=25 PL:GT:GQ 111,39,0:1/1:99 +chr9 126707903 . G A 26 . DP=37;AF1=0.5;CI95=0.5,0.5;DP4=0,21,0,8;MQ=46;PV4=1,2.6e-07,0.21,0.42 PL:GT:GQ 56,0,175:0/1:59 +chr9 128700686 . C G 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=50 PL:GT:GQ 66,12,0:1/1:72 +chr9 129084077 . G A 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=41 PL:GT:GQ 43,9,0:1/1:63 +chr9 129116900 . A T 20 . DP=13;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=30 PL:GT:GQ 52,9,0:1/1:63 +chr9 130290720 . C G 21.8 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 53,6,0:1/1:49 +chr9 130306057 . C G 71 . DP=14;AF1=1;CI95=1,1;DP4=0,0,14,0;MQ=28 PL:GT:GQ 104,42,0:1/1:99 +chr9 130528990 . G A 99 . DP=31;AF1=1;CI95=1,1;DP4=0,0,31,0;MQ=27 PL:GT:GQ 174,93,0:1/1:99 +chr9 130529002 . A T 7.79 . DP=30;AF1=1;CI95=1,1;DP4=0,0,11,0;MQ=15 PL:GT:GQ 40,33,0:1/1:99 +chr9 130639996 . A G 8.44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=51 PL:GT:GQ 39,6,0:1/1:49 +chr9 130704890 . A G 3.27 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=26 PL:GT:GQ 33,12,0:1/1:72 +chr9 130708345 . G A 13.3 . DP=11;AF1=0.9966;CI95=0.5,1;DP4=0,2,0,3;MQ=38;PV4=1,0.096,1,1 PL:GT:GQ 42,1,0:1/1:23 +chr9 131001601 . T A 3.98 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=31 PL:GT:GQ 33,6,0:1/1:49 +chr9 131058539 . T A 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=44 PL:GT:GQ 44,6,0:1/1:49 +chr9 131808965 . C T 42 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=37 PL:GT:GQ 75,27,0:1/1:99 +chr9 132551867 . C T 17.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=25 PL:GT:GQ 49,9,0:1/1:63 +chr9 132685120 . A G 4.75 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=25 PL:GT:GQ 35,9,0:1/1:63 +chr9 133175050 . A G 18.1 . DP=30;AF1=1;CI95=1,1;DP4=0,0,17,0;MQ=20 PL:GT:GQ 51,51,0:1/1:99 +chr9 133584978 . A G 99 . DP=25;AF1=1;CI95=1,1;DP4=0,0,25,0;MQ=45 PL:GT:GQ 212,75,0:1/1:99 +chr9 133661895 . A G 99 . DP=17;AF1=1;CI95=1,1;DP4=0,0,14,0;MQ=31 PL:GT:GQ 138,42,0:1/1:99 +chr9 133670376 . T C 68 . DP=19;AF1=1;CI95=1,1;DP4=0,1,0,16;MQ=39;PV4=1,1.4e-20,1,1 PL:GT:GQ 101,39,0:1/1:99 +chr9 133843777 . T C 99 . DP=9;AF1=0.5129;CI95=0.5,0.5;DP4=1,0,8,0;MQ=43;PV4=1,1,1,1 PL:GT:GQ 154,0,13:0/1:16 +chr9 134017265 . G C 3.27 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=13 PL:GT:GQ 33,12,0:1/1:72 +chr9 134105563 . T C 34.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=39 PL:GT:GQ 67,18,0:1/1:90 +chr9 134608906 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=46 PL:GT:GQ 73,6,0:1/1:49 +chr9 134861929 . T A 9.49 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=30 PL:GT:GQ 41,9,0:1/1:63 +chr10 796662 . A G 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=46 PL:GT:GQ 54,9,0:1/1:63 +chr10 1216716 . T A 18.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 51,12,0:1/1:72 +chr10 1220781 . G A 21 . DP=9;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=18 PL:GT:GQ 54,27,0:1/1:99 +chr10 1225208 . T C 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=47 PL:GT:GQ 100,9,0:1/1:63 +chr10 1727946 . T C 14.2 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=27 PL:GT:GQ 47,21,0:1/1:84 +chr10 5986542 . T C 83 . DP=93;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=39 PL:GT:GQ 116,30,0:1/1:99 +chr10 6436277 . G A 6.02 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 36,6,0:1/1:49 +chr10 7704114 . C A 35 . DP=6;AF1=0.9999;CI95=0.5,1;DP4=0,2,0,4;MQ=29;PV4=1,0.27,1,0.27 PL:GT:GQ 65,3,0:1/1:41 +chr10 10881734 . A G 9.52 . DP=9;AF1=0.5;CI95=0.5,0.5;DP4=4,0,5,0;MQ=42;PV4=1,0.0026,0.14,1 PL:GT:GQ 39,0,91:0/1:42 +chr10 13099383 . G A 27.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=48 PL:GT:GQ 60,12,0:1/1:72 +chr10 15764077 . G C 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=40 PL:GT:GQ 43,9,0:1/1:63 +chr10 18091502 . T C 47 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=38 PL:GT:GQ 79,9,0:1/1:63 +chr10 19645913 . A T 15.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=43 PL:GT:GQ 47,6,0:1/1:49 +chr10 22845062 . C T 18.1 . DP=8;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=18 PL:GT:GQ 51,21,0:1/1:84 +chr10 28282802 . T C 69 . DP=12;AF1=1;CI95=1,1;DP4=0,0,12,0;MQ=42 PL:GT:GQ 102,36,0:1/1:99 +chr10 28496872 . T G 8.44 . DP=11;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=45 PL:GT:GQ 39,6,0:1/1:49 +chr10 32746793 . G A 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=46 PL:GT:GQ 73,6,0:1/1:49 +chr10 41437604 . T G 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=39 PL:GT:GQ 43,9,0:1/1:63 +chr10 43051239 . C T 6.98 . DP=3;AF1=0.5001;CI95=0.5,0.5;DP4=1,0,2,0;MQ=40;PV4=1,0.33,0.33,1 PL:GT:GQ 36,0,31:0/1:33 +chr10 44455192 . C T 4.41 . DP=6;AF1=0.8276;CI95=0.5,1;DP4=0,3,0,3;MQ=21;PV4=1,1,1,1 PL:GT:GQ 31,0,1:1/1:5 +chr10 48387336 . A G 13 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr10 51561705 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=45 PL:GT:GQ 40,6,0:1/1:49 +chr10 51561712 . C G 39.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=45 PL:GT:GQ 71,6,0:1/1:49 +chr10 55617954 . G A 8.44 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=31 PL:GT:GQ 39,6,0:1/1:49 +chr10 55718281 . T A 3.41 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=32 PL:GT:GQ 32,6,0:1/1:49 +chr10 55888771 . T C 23.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=43 PL:GT:GQ 56,12,0:1/1:72 +chr10 56025569 . C G 34.1 . DP=3;AF1=0.5064;CI95=0.5,0.5;DP4=0,1,0,2;MQ=39;PV4=1,1,1,1 PL:GT:GQ 64,0,16:0/1:19 +chr10 57384943 . G T 84 . DP=29;AF1=0.5;CI95=0.5,0.5;DP4=16,0,13,0;MQ=26;PV4=1,0.015,1,1 PL:GT:GQ 114,0,110:0/1:99 +chr10 59873077 . T G 49 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=42 PL:GT:GQ 82,24,0:1/1:96 +chr10 61329572 . C T 15.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 47,6,0:1/1:49 +chr10 63790636 . T G 32.1 . DP=19;AF1=1;CI95=1,1;DP4=1,0,10,0;MQ=28;PV4=1,0.14,1,1 PL:GT:GQ 65,22,0:1/1:88 +chr10 64466048 . C G 18.2 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=28 PL:GT:GQ 51,18,0:1/1:90 +chr10 65053440 . G T 99 . DP=10;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=39 PL:GT:GQ 153,30,0:1/1:99 +chr10 65407358 . C G 84.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=45 PL:GT:GQ 117,15,0:1/1:75 +chr10 65605291 . G A 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=51 PL:GT:GQ 73,6,0:1/1:49 +chr10 66104447 . T C 99 . DP=47;AF1=0.5;CI95=0.5,0.5;DP4=0,25,0,21;MQ=34;PV4=1,1,0.15,1 PL:GT:GQ 136,0,162:0/1:99 +chr10 82160859 . G C 99 . DP=17;AF1=1;CI95=1,1;DP4=0,0,0,13;MQ=36 PL:GT:GQ 153,39,0:1/1:99 +chr10 82198579 . C T 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr10 87086290 . A G 4.13 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=17 PL:GT:GQ 35,27,0:1/1:99 +chr10 89550621 . T G 74 . DP=47;AF1=1;CI95=1,1;DP4=0,0,0,45;MQ=45 PL:GT:GQ 107,135,0:1/1:99 +chr10 92325046 . G A 42.3 . DP=18;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=45 PL:GT:GQ 75,15,0:1/1:75 +chr10 94488050 . A G 5.46 . DP=4;AF1=0.5;CI95=0.5,0.5;DP4=2,0,2,0;MQ=43;PV4=1,0.16,1,1 PL:GT:GQ 34,0,34:0/1:34 +chr10 95024815 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=36 PL:GT:GQ 45,6,0:1/1:49 +chr10 95466306 . G A 53 . DP=7;AF1=0.6671;CI95=0.5,1;DP4=0,4,0,3;MQ=33;PV4=1,1,1,1 PL:GT:GQ 82,0,3:0/1:5 +chr10 100256777 . T G 3.83 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=23 PL:GT:GQ 34,12,0:1/1:72 +chr10 101510485 . T C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr10 101530760 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr10 101879744 . T C 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=44 PL:GT:GQ 54,9,0:1/1:63 +chr10 102147276 . G C 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=33 PL:GT:GQ 43,9,0:1/1:63 +chr10 102642248 . T G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr10 107666616 . T C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=43 PL:GT:GQ 40,6,0:1/1:49 +chr10 108319945 . C G 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=29 PL:GT:GQ 43,9,0:1/1:63 +chr10 109734371 . G A 12.7 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=35 PL:GT:GQ 45,12,0:1/1:72 +chr10 112870604 . C T 46.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=36 PL:GT:GQ 79,12,0:1/1:72 +chr10 115304673 . T C 11.3 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=42 PL:GT:GQ 43,9,0:1/1:63 +chr10 119380588 . G A 14.2 . DP=4;AF1=0.502;CI95=0.5,0.5;DP4=1,0,3,0;MQ=43;PV4=1,0.18,0.32,1 PL:GT:GQ 44,0,21:0/1:24 +chr10 123063756 . C T 14.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=23 PL:GT:GQ 46,9,0:1/1:63 +chr10 128424770 . T G 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=30 PL:GT:GQ 45,6,0:1/1:49 +chr10 131229204 . T C 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=40 PL:GT:GQ 76,9,0:1/1:63 +chr10 132420570 . G C 89.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=49 PL:GT:GQ 122,12,0:1/1:72 +chr10 132528066 . C T 99 . DP=19;AF1=1;CI95=1,1;DP4=0,0,19,0;MQ=42 PL:GT:GQ 213,57,0:1/1:99 +chr10 132644619 . G A 19.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=23 PL:GT:GQ 52,15,0:1/1:75 +chr10 132707581 . G C 9.11 . DP=51;AF1=0.9998;CI95=0.5,1;DP4=1,0,2,0;MQ=25;PV4=1,1,1,1 PL:GT:GQ 38,2,0:1/1:37 +chr10 133026892 . T C 55.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=44 PL:GT:GQ 88,18,0:1/1:90 +chr11 768033 . T C 33.5 . DP=4;AF1=0.8277;CI95=0.5,1;DP4=0,2,0,2;MQ=32;PV4=1,1,1,1 PL:GT:GQ 62,0,1:1/1:5 +chr11 768042 . T C 33.5 . DP=6;AF1=0.8277;CI95=0.5,1;DP4=0,2,0,2;MQ=32;PV4=1,1,1,1 PL:GT:GQ 62,0,1:1/1:5 +chr11 874568 . G C 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=33 PL:GT:GQ 66,12,0:1/1:72 +chr11 1009210 . T C 4 . DP=70;AF1=0.6241;CI95=0.5,1;DP4=0,3,0,8;MQ=24;PV4=1,1,0.5,1 PL:GT:GQ 31,0,4:0/1:6 +chr11 1016692 . C T 27 . DP=39;AF1=1;CI95=1,1;DP4=0,0,0,38;MQ=22 PL:GT:GQ 60,114,0:1/1:99 +chr11 1034477 . A G 66 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=42 PL:GT:GQ 98,9,0:1/1:63 +chr11 1074037 . G A 4.13 . DP=9;AF1=0.5001;CI95=0.5,0.5;DP4=4,0,5,0;MQ=24;PV4=1,1,0.43,1 PL:GT:GQ 32,0,30:0/1:31 +chr11 1556298 . G A 11.8 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=33 PL:GT:GQ 44,12,0:1/1:72 +chr11 1824777 . T C 27 . DP=10;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=28 PL:GT:GQ 60,30,0:1/1:99 +chr11 3395801 . C T 22 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 54,9,0:1/1:63 +chr11 3411901 . G A 4.75 . DP=17;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=29 PL:GT:GQ 35,9,0:1/1:63 +chr11 3731606 . A C 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=39 PL:GT:GQ 43,9,0:1/1:63 +chr11 3783855 . C T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=44 PL:GT:GQ 40,6,0:1/1:49 +chr11 3967636 . A G 4.29 . DP=20;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=24 PL:GT:GQ 35,15,0:1/1:75 +chr11 4385618 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=31 PL:GT:GQ 45,6,0:1/1:49 +chr11 4424365 . T A 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr11 5295586 . C T 3.01 . DP=52;AF1=0.4997;CI95=0.5,0.5;DP4=33,0,10,0;MQ=29;PV4=1,0.0045,0.3,0.17 PL:GT:GQ 30,0,131:0/1:33 +chr11 6157144 . C G 45.1 . DP=14;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=35 PL:GT:GQ 78,21,0:1/1:84 +chr11 6352044 . C T 18 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=31 PL:GT:GQ 50,9,0:1/1:63 +chr11 6767356 . T C 9.63 . DP=3;AF1=0.9966;CI95=0.5,1;DP4=1,0,2,0;MQ=29;PV4=1,1,1,1 PL:GT:GQ 38,1,0:1/1:23 +chr11 6999404 . G C 21 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=37 PL:GT:GQ 53,9,0:1/1:63 +chr11 9120930 . C G 17.6 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=25 PL:GT:GQ 50,12,0:1/1:72 +chr11 9373125 . T C 19.8 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 51,6,0:1/1:49 +chr11 9585101 . C T 67 . DP=16;AF1=1;CI95=1,1;DP4=0,0,14,0;MQ=45 PL:GT:GQ 100,42,0:1/1:99 +chr11 10266192 . A C 14.3 . DP=22;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=27 PL:GT:GQ 47,18,0:1/1:90 +chr11 10303263 . T C 8.64 . DP=17;AF1=1;CI95=1,1;DP4=0,0,0,17;MQ=18 PL:GT:GQ 41,51,0:1/1:99 +chr11 10420170 . T C 35 . DP=17;AF1=1;CI95=1,1;DP4=0,1,0,15;MQ=28;PV4=1,0.12,1,0.4 PL:GT:GQ 68,36,0:1/1:99 +chr11 10912169 . G A 99 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=49 PL:GT:GQ 155,18,0:1/1:90 +chr11 11315826 . T G 6.29 . DP=27;AF1=1;CI95=1,1;DP4=0,0,0,6;MQ=19 PL:GT:GQ 38,18,0:1/1:90 +chr11 11603859 . A C 22 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=0,9,0,6;MQ=34;PV4=1,9.5e-13,0.22,1 PL:GT:GQ 52,0,115:0/1:55 +chr11 11700034 . C T 33 . DP=11;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=30 PL:GT:GQ 66,27,0:1/1:99 +chr11 11822758 . G A 15.1 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=0,7,0,3;MQ=38;PV4=1,0.18,1,1 PL:GT:GQ 45,0,88:0/1:48 +chr11 11976636 . C T 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=24 PL:GT:GQ 54,9,0:1/1:63 +chr11 14380517 . C G 16.1 . DP=10;AF1=0.5;CI95=0.5,0.5;DP4=5,0,5,0;MQ=48;PV4=1,2.1e-05,0.13,1 PL:GT:GQ 46,0,113:0/1:49 +chr11 14419212 . A G 91.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=38 PL:GT:GQ 124,18,0:1/1:90 +chr11 14846792 . A G 55 . DP=11;AF1=1;CI95=1,1;DP4=0,0,0,11;MQ=19 PL:GT:GQ 88,33,0:1/1:99 +chr11 15494556 . C T 99 . DP=38;AF1=0.5;CI95=0.5,0.5;DP4=22,0,14,0;MQ=34;PV4=1,0.0071,1,1 PL:GT:GQ 146,0,159:0/1:99 +chr11 16262879 . A C 16.1 . DP=4;AF1=0.5004;CI95=0.5,0.5;DP4=0,1,0,3;MQ=43;PV4=1,0.061,0.24,0.33 PL:GT:GQ 46,0,28:0/1:31 +chr11 21514947 . T C 24.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=41 PL:GT:GQ 57,12,0:1/1:72 +chr11 22532576 . C G 28 . DP=17;AF1=1;CI95=1,1;DP4=0,0,0,17;MQ=17 PL:GT:GQ 61,51,0:1/1:99 +chr11 23529238 . G T 4.29 . DP=13;AF1=0.5334;CI95=0.5,1;DP4=1,0,3,0;MQ=37;PV4=1,1,0.34,0.21 PL:GT:GQ 32,0,9:0/1:12 +chr11 24249554 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=48 PL:GT:GQ 73,6,0:1/1:49 +chr11 24853167 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=51 PL:GT:GQ 73,6,0:1/1:49 +chr11 33353903 . T C 24.3 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=36 PL:GT:GQ 57,15,0:1/1:75 +chr11 35126569 . T C 24.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=43 PL:GT:GQ 57,12,0:1/1:72 +chr11 35132248 . C T 18.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 51,12,0:1/1:72 +chr11 35155482 . T C 68 . DP=22;AF1=1;CI95=1,1;DP4=0,0,22,0;MQ=46 PL:GT:GQ 101,66,0:1/1:99 +chr11 52494088 . T C 99 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=37 PL:GT:GQ 140,27,0:1/1:99 +chr11 57899943 . C G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr11 62261460 . G T 19.1 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=0,7,0,5;MQ=27;PV4=1,1.1e-06,1,1 PL:GT:GQ 49,0,58:0/1:51 +chr11 67456049 . C T 39.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=19 PL:GT:GQ 72,18,0:1/1:90 +chr11 68509708 . C G 3.65 . DP=9;AF1=0.7301;CI95=0.5,1;DP4=0,5,0,4;MQ=17;PV4=1,1,1,1 PL:GT:GQ 30,0,2:0/1:3 +chr11 70115115 . T A 99 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=49 PL:GT:GQ 140,15,0:1/1:75 +chr11 72643951 . T C 70 . DP=23;AF1=1;CI95=1,1;DP4=0,0,22,0;MQ=39 PL:GT:GQ 103,66,0:1/1:99 +chr11 72647930 . G A 36 . DP=4;AF1=0.5004;CI95=0.5,0.5;DP4=0,1,0,3;MQ=41;PV4=1,1,0.3,1 PL:GT:GQ 66,0,28:0/1:31 +chr11 73330148 . C T 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr11 81720893 . A G 5.83 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=19 PL:GT:GQ 37,12,0:1/1:72 +chr11 83813797 . A G 23.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=43 PL:GT:GQ 56,12,0:1/1:72 +chr11 85949488 . C A 54 . DP=17;AF1=1;CI95=1,1;DP4=0,0,14,0;MQ=37 PL:GT:GQ 87,42,0:1/1:99 +chr11 87634829 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=51 PL:GT:GQ 40,6,0:1/1:49 +chr11 90913093 . A T 35.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=46 PL:GT:GQ 67,6,0:1/1:49 +chr11 93793348 . G A 99 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=31 PL:GT:GQ 139,24,0:1/1:96 +chr11 100802294 . T C 16.6 . DP=21;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=35 PL:GT:GQ 49,12,0:1/1:72 +chr11 107455449 . C T 8.44 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=26 PL:GT:GQ 39,6,0:1/1:49 +chr11 111344355 . A G 69.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=43 PL:GT:GQ 102,12,0:1/1:72 +chr11 111611115 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr11 113050466 . G C 6.02 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=30 PL:GT:GQ 36,6,0:1/1:49 +chr11 114332544 . T C 3.54 . DP=17;AF1=0.4999;CI95=0.5,0.5;DP4=0,4,0,5;MQ=37;PV4=1,0.32,0.13,1 PL:GT:GQ 31,0,37:0/1:33 +chr11 114332549 . G A 3.54 . DP=17;AF1=0.4998;CI95=0.5,0.5;DP4=0,9,0,8;MQ=36;PV4=1,3.1e-10,0.088,1 PL:GT:GQ 31,0,127:0/1:34 +chr11 114843578 . G C 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=50 PL:GT:GQ 73,6,0:1/1:49 +chr11 115580279 . A G 99 . DP=15;AF1=1;CI95=1,1;DP4=0,0,15,0;MQ=48 PL:GT:GQ 190,45,0:1/1:99 +chr11 116434328 . G A 17.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 50,12,0:1/1:72 +chr11 125914161 . A G 20.8 . DP=7;AF1=0.95;CI95=0.5,1;DP4=3,0,4,0;MQ=38;PV4=1,0.074,1,1 PL:GT:GQ 49,0,0:1/1:10 +chr11 125917089 . C T 12.3 . DP=41;AF1=0.5;CI95=0.5,0.5;DP4=0,28,0,12;MQ=44;PV4=1,4.7e-25,1,1 PL:GT:GQ 42,0,167:0/1:45 +chr11 127194100 . A G 60 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=49 PL:GT:GQ 93,24,0:1/1:96 +chr12 70856 . G A 27.5 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=49 PL:GT:GQ 60,12,0:1/1:72 +chr12 153693 . T C 52.3 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=38 PL:GT:GQ 85,15,0:1/1:75 +chr12 924547 . C G 37.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=50 PL:GT:GQ 69,6,0:1/1:49 +chr12 1555916 . G A 7.18 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=23 PL:GT:GQ 39,15,0:1/1:75 +chr12 1919860 . G T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr12 2283756 . G A 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=34 PL:GT:GQ 45,6,0:1/1:49 +chr12 2805983 . G C 12.7 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=35 PL:GT:GQ 45,12,0:1/1:72 +chr12 6088203 . T C 72.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=37 PL:GT:GQ 105,15,0:1/1:75 +chr12 7099460 . G C 10.8 . DP=6;AF1=0.8277;CI95=0.5,1;DP4=3,0,3,0;MQ=26;PV4=1,0.027,1,1 PL:GT:GQ 39,0,1:1/1:5 +chr12 7099464 . G A 13.3 . DP=6;AF1=0.9966;CI95=0.5,1;DP4=2,0,3,0;MQ=28;PV4=1,0.16,1,1 PL:GT:GQ 42,1,0:1/1:23 +chr12 7198516 . T G 4.61 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 34,6,0:1/1:49 +chr12 23331895 . C T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr12 28209020 . T G 14.4 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=31 PL:GT:GQ 47,15,0:1/1:75 +chr12 30074073 . C T 32.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 64,6,0:1/1:49 +chr12 30563452 . T C 25 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=46 PL:GT:GQ 57,9,0:1/1:63 +chr12 30563453 . A G 25 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=46 PL:GT:GQ 57,9,0:1/1:63 +chr12 30563464 . C A 78.8 . DP=8;AF1=1;CI95=0.5,1;DP4=0,2,0,5;MQ=34;PV4=1,0.29,1,1 PL:GT:GQ 110,6,0:1/1:49 +chr12 31505085 . G A 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr12 34041336 . G A 5.46 . DP=5;AF1=0.5;CI95=0.5,0.5;DP4=2,0,2,0;MQ=36;PV4=1,1,0.48,0.21 PL:GT:GQ 34,0,34:0/1:34 +chr12 49003648 . C G 42 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=39 PL:GT:GQ 75,24,0:1/1:96 +chr12 51280690 . G A 69 . DP=98;AF1=0.5;CI95=0.5,0.5;DP4=13,0,18,0;MQ=45;PV4=1,1,0.051,1 PL:GT:GQ 99,0,84:0/1:87 +chr12 69206633 . T C 17.1 . DP=12;AF1=1;CI95=1,1;DP4=0,0,0,11;MQ=17 PL:GT:GQ 50,33,0:1/1:99 +chr12 80417253 . T C 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=48 PL:GT:GQ 73,6,0:1/1:49 +chr12 86633033 . C T 34 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=0,1,0,2;MQ=43;PV4=1,1,0.33,1 PL:GT:GQ 64,0,31:0/1:34 +chr12 98097274 . C T 47.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=31 PL:GT:GQ 80,15,0:1/1:75 +chr12 105269319 . C T 19 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=26 PL:GT:GQ 51,9,0:1/1:63 +chr12 109053425 . G A 9.53 . DP=8;AF1=0.5012;CI95=0.5,0.5;DP4=2,0,6,0;MQ=25;PV4=1,1,0.19,1 PL:GT:GQ 39,0,23:0/1:26 +chr12 111904540 . A G 3.41 . DP=65;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=31 PL:GT:GQ 32,6,0:1/1:49 +chr12 115038686 . T C 15.2 . DP=7;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=27 PL:GT:GQ 48,21,0:1/1:84 +chr12 115039419 . A G 4.11 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=30 PL:GT:GQ 34,9,0:1/1:63 +chr12 115103890 . G A 66 . DP=39;AF1=1;CI95=1,1;DP4=0,0,0,38;MQ=49 PL:GT:GQ 99,114,0:1/1:99 +chr12 115833830 . G A 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 100,9,0:1/1:63 +chr12 116361873 . T G 6.34 . DP=5;AF1=0.7302;CI95=0.5,1;DP4=0,2,0,2;MQ=23;PV4=1,1,1,1 PL:GT:GQ 34,0,2:0/1:3 +chr12 123583527 . G A 14.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=25 PL:GT:GQ 46,9,0:1/1:63 +chr12 124115330 . A G 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=38 PL:GT:GQ 76,9,0:1/1:63 +chr12 125062296 . G A 41.8 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=50 PL:GT:GQ 73,6,0:1/1:49 +chr12 126718106 . A G 8.76 . DP=50;AF1=0.5163;CI95=0.5,1;DP4=2,0,6,0;MQ=26;PV4=1,0.33,0.37,1 PL:GT:GQ 38,0,12:0/1:15 +chr12 133348311 . G A 24 . DP=18;AF1=0.5;CI95=0.5,0.5;DP4=14,0,3,0;MQ=35;PV4=1,1,1,1 PL:GT:GQ 54,0,118:0/1:57 +chr12 134494475 . C T 28 . DP=18;AF1=0.6671;CI95=0.5,1;DP4=8,0,10,0;MQ=18;PV4=1,1,1,1 PL:GT:GQ 57,0,3:0/1:5 +chr12 134831761 . C T 41.3 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=27 PL:GT:GQ 74,15,0:1/1:75 +chr12 134992770 . A C,T 84 . DP=47;AF1=1;CI95=1,1;DP4=0,0,26,0;MQ=29 PL:GT:GQ 117,72,114,0,44,114:1/1:99 +chr12 135261117 . G A 49.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=46 PL:GT:GQ 82,18,0:1/1:90 +chr12 135261144 . A G 99 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=46 PL:GT:GQ 155,18,0:1/1:90 +chr12 135460302 . G A 99 . DP=25;AF1=1;CI95=1,1;DP4=0,0,23,0;MQ=40 PL:GT:GQ 198,69,0:1/1:99 +chr12 135463758 . A G 83 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,16;MQ=26 PL:GT:GQ 116,48,0:1/1:99 +chr12 135523325 . G A 99 . DP=23;AF1=1;CI95=1,1;DP4=0,0,22,0;MQ=26 PL:GT:GQ 136,66,0:1/1:99 +chr12 135782401 . T C 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr12 135795472 . G T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 40,6,0:1/1:49 +chr13 18040027 . G C 42 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=33 PL:GT:GQ 74,9,0:1/1:63 +chr13 19494625 . G T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 73,6,0:1/1:49 +chr13 20121126 . A G 15.1 . DP=36;AF1=0.5;CI95=0.5,0.5;DP4=25,0,9,0;MQ=36;PV4=1,1,0.13,1 PL:GT:GQ 45,0,153:0/1:48 +chr13 21536703 . A G 9.31 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr13 23160035 . G T 3.98 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=36 PL:GT:GQ 33,6,0:1/1:49 +chr13 23476554 . C A 6.79 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=52 PL:GT:GQ 37,6,0:1/1:49 +chr13 26632967 . C G 32 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=34 PL:GT:GQ 65,27,0:1/1:99 +chr13 26790010 . T C 89.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=35 PL:GT:GQ 122,15,0:1/1:75 +chr13 36083571 . T C 43 . DP=84;AF1=1;CI95=1,1;DP4=1,0,37,0;MQ=16;PV4=1,1,1,0.3 PL:GT:GQ 76,99,0:1/1:99 +chr13 44432419 . C T 3.58 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=19 PL:GT:GQ 34,21,0:1/1:84 +chr13 46592359 . T C 16.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 48,6,0:1/1:49 +chr13 52764657 . A T 3.14 . DP=32;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=22 PL:GT:GQ 33,15,0:1/1:75 +chr13 53084193 . C T 9.11 . DP=3;AF1=0.9998;CI95=0.5,1;DP4=0,1,0,2;MQ=29;PV4=1,1,1,1 PL:GT:GQ 38,2,0:1/1:37 +chr13 57763228 . C T 45 . DP=555;AF1=1;CI95=1,1;DP4=2,0,21,0;MQ=23;PV4=1,0.00021,1,0.3 PL:GT:GQ 78,45,0:1/1:99 +chr13 73857921 . G C 31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=49 PL:GT:GQ 63,9,0:1/1:63 +chr13 76718001 . G A 59 . DP=4;AF1=0.5004;CI95=0.5,0.5;DP4=1,0,3,0;MQ=45;PV4=1,1,0.12,1 PL:GT:GQ 89,0,28:0/1:31 +chr13 100912695 . A T 23 . DP=22;AF1=0.5;CI95=0.5,0.5;DP4=0,16,0,6;MQ=31;PV4=1,0.029,1,0.35 PL:GT:GQ 53,0,103:0/1:56 +chr13 101332001 . G C 21 . DP=23;AF1=1;CI95=1,1;DP4=0,0,23,0;MQ=21 PL:GT:GQ 54,69,0:1/1:99 +chr13 102637334 . C T 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 100,9,0:1/1:63 +chr13 102895627 . C T 63 . DP=9;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=48 PL:GT:GQ 96,27,0:1/1:99 +chr13 103830322 . T C 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 73,6,0:1/1:49 +chr13 112842448 . G A 39 . DP=18;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=27 PL:GT:GQ 72,27,0:1/1:99 +chr13 113310291 . C T 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=43 PL:GT:GQ 66,12,0:1/1:72 +chr13 114775162 . A G 80 . DP=17;AF1=1;CI95=1,1;DP4=0,0,17,0;MQ=21 PL:GT:GQ 113,51,0:1/1:99 +chr13 115267482 . A G 16.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=29 PL:GT:GQ 48,9,0:1/1:63 +chr13 116068676 . C T 3.83 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=27 PL:GT:GQ 34,12,0:1/1:72 +chr13 116455918 . A G 33 . DP=29;AF1=0.5;CI95=0.5,0.5;DP4=13,0,15,0;MQ=42;PV4=1,1.8e-20,0.3,1 PL:GT:GQ 63,0,146:0/1:66 +chr13 116765012 . G A 30.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 62,6,0:1/1:49 +chr13 116779773 . C T 17.1 . DP=38;AF1=0.5;CI95=0.5,0.5;DP4=27,0,11,0;MQ=24;PV4=1,4.5e-35,1,1 PL:GT:GQ 47,0,106:0/1:50 +chr13 116779791 . C T 57 . DP=38;AF1=0.5;CI95=0.5,0.5;DP4=24,0,14,0;MQ=24;PV4=1,1,1,1 PL:GT:GQ 87,0,103:0/1:90 +chr14 20159250 . C T 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=39 PL:GT:GQ 43,9,0:1/1:63 +chr14 23510676 . T C 52 . DP=22;AF1=1;CI95=1,1;DP4=0,0,22,0;MQ=32 PL:GT:GQ 85,66,0:1/1:99 +chr14 24735256 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr14 29525577 . G A 21 . DP=10;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=16 PL:GT:GQ 54,27,0:1/1:99 +chr14 36186389 . C T 6.79 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=20 PL:GT:GQ 37,6,0:1/1:49 +chr14 36186394 . A G 6.79 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=20 PL:GT:GQ 37,6,0:1/1:49 +chr14 37440609 . A G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=33 PL:GT:GQ 44,6,0:1/1:49 +chr14 40432807 . A G 18.6 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=23 PL:GT:GQ 51,12,0:1/1:72 +chr14 59466268 . T C 15.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=25 PL:GT:GQ 47,9,0:1/1:63 +chr14 61368162 . G T 7.18 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=17 PL:GT:GQ 39,15,0:1/1:75 +chr14 65152922 . G A 92 . DP=33;AF1=0.5;CI95=0.5,0.5;DP4=0,18,0,15;MQ=36;PV4=1,0.059,0.35,1 PL:GT:GQ 122,0,144:0/1:99 +chr14 69749148 . G T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=25 PL:GT:GQ 40,6,0:1/1:49 +chr14 74877658 . C T 45 . DP=48;AF1=1;CI95=1,1;DP4=0,1,0,12;MQ=36;PV4=1,0.02,1,0.39 PL:GT:GQ 78,28,0:1/1:99 +chr14 75546678 . C T 19.2 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=17 PL:GT:GQ 52,18,0:1/1:90 +chr14 76439185 . T C 67.1 . DP=7;AF1=0.505;CI95=0.5,0.5;DP4=0,1,0,6;MQ=33;PV4=1,1,0.056,0.29 PL:GT:GQ 97,0,17:0/1:20 +chr14 77313295 . T A 99 . DP=12;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=48 PL:GT:GQ 191,30,0:1/1:99 +chr14 77673422 . G A 11.5 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=24 PL:GT:GQ 44,18,0:1/1:90 +chr14 78646125 . T C 99 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=40 PL:GT:GQ 153,24,0:1/1:96 +chr14 91702449 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr14 91769842 . G A 63 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=47 PL:GT:GQ 95,9,0:1/1:63 +chr14 91775899 . C G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=45 PL:GT:GQ 73,6,0:1/1:49 +chr14 91775924 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=45 PL:GT:GQ 40,6,0:1/1:49 +chr14 93482918 . A C 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=49 PL:GT:GQ 100,9,0:1/1:63 +chr14 93665819 . C T 75 . DP=7;AF1=0.5002;CI95=0.5,0.5;DP4=0,3,0,4;MQ=42;PV4=1,1,1,1 PL:GT:GQ 105,0,31:0/1:34 +chr14 95422276 . A G 55.1 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=45 PL:GT:GQ 88,21,0:1/1:84 +chr14 95731986 . C T 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 100,9,0:1/1:63 +chr14 96045464 . A G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=33 PL:GT:GQ 44,6,0:1/1:49 +chr14 97172020 . C T 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=51 PL:GT:GQ 100,9,0:1/1:63 +chr14 100515480 . A G 6.98 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=1,0,2,0;MQ=45;PV4=1,0.14,0.085,0.33 PL:GT:GQ 36,0,30:0/1:32 +chr14 100770214 . A T 8.69 . DP=20;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=16 PL:GT:GQ 41,21,0:1/1:84 +chr14 101258303 . G A 82 . DP=15;AF1=1;CI95=1,1;DP4=0,0,15,0;MQ=26 PL:GT:GQ 115,45,0:1/1:99 +chr14 101701492 . C G 66 . DP=10;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=49 PL:GT:GQ 99,30,0:1/1:99 +chr14 102113772 . T C 3.98 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=30 PL:GT:GQ 33,6,0:1/1:49 +chr14 102751431 . A C 36.5 . DP=3;AF1=0.9998;CI95=0.5,1;DP4=1,0,2,0;MQ=35;PV4=1,1,1,1 PL:GT:GQ 66,2,0:1/1:37 +chr14 103708033 . A G 99 . DP=13;AF1=1;CI95=1,1;DP4=0,0,0,12;MQ=27 PL:GT:GQ 141,36,0:1/1:99 +chr14 104744582 . G A 3.52 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=25 PL:GT:GQ 33,9,0:1/1:63 +chr14 105989100 . C T 3.14 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=23 PL:GT:GQ 33,15,0:1/1:75 +chr14 105989162 . C T 3.65 . DP=12;AF1=0.7301;CI95=0.5,1;DP4=0,6,0,6;MQ=15;PV4=1,1,1,1 PL:GT:GQ 30,0,2:0/1:3 +chr14 106234810 . G A 25.3 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=39 PL:GT:GQ 58,15,0:1/1:75 +chr14 106995572 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr14 107283057 . T C 5.5 . DP=8;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=20 PL:GT:GQ 37,21,0:1/1:84 +chr14 107285319 . T C 33 . DP=36;AF1=1;CI95=1,1;DP4=0,0,0,35;MQ=22 PL:GT:GQ 66,105,0:1/1:99 +chr14 107640449 . A G 11.8 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=36 PL:GT:GQ 44,12,0:1/1:72 +chr15 20082092 . T G 18.3 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=24 PL:GT:GQ 51,15,0:1/1:75 +chr15 22955884 . T C 67 . DP=12;AF1=1;CI95=1,1;DP4=0,0,12,0;MQ=48 PL:GT:GQ 100,36,0:1/1:99 +chr15 22971987 . A G 5.29 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=22 PL:GT:GQ 35,6,0:1/1:49 +chr15 23233324 . C A 47 . DP=16;AF1=1;CI95=1,1;DP4=0,0,14,0;MQ=31 PL:GT:GQ 80,42,0:1/1:99 +chr15 25175286 . C T 36.5 . DP=3;AF1=0.9998;CI95=0.5,1;DP4=1,0,2,0;MQ=42;PV4=1,1,1,1 PL:GT:GQ 66,2,0:1/1:37 +chr15 25385709 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=48 PL:GT:GQ 40,6,0:1/1:49 +chr15 27372396 . A G 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=40 PL:GT:GQ 76,9,0:1/1:63 +chr15 35998093 . C T 9.53 . DP=9;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=17 PL:GT:GQ 42,27,0:1/1:99 +chr15 36716538 . C G 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=36 PL:GT:GQ 45,6,0:1/1:49 +chr15 36793360 . G T 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=42 PL:GT:GQ 76,9,0:1/1:63 +chr15 53783097 . A G 10.5 . DP=31;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=16 PL:GT:GQ 43,21,0:1/1:84 +chr15 54180175 . C T 10.4 . DP=7;AF1=0.5001;CI95=0.5,0.5;DP4=4,0,3,0;MQ=27;PV4=1,1.2e-05,1,1 PL:GT:GQ 40,0,32:0/1:34 +chr15 54939306 . C T 99 . DP=34;AF1=0.5;CI95=0.5,0.5;DP4=0,18,0,16;MQ=49;PV4=1,1,0.18,1 PL:GT:GQ 172,0,181:0/1:99 +chr15 59377916 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 73,6,0:1/1:49 +chr15 59685961 . G C 68 . DP=11;AF1=1;CI95=1,1;DP4=0,0,0,11;MQ=36 PL:GT:GQ 101,33,0:1/1:99 +chr15 60306384 . A G 18.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=25 PL:GT:GQ 51,12,0:1/1:72 +chr15 60345642 . G C 14.9 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 46,6,0:1/1:49 +chr15 60367387 . G A 13.2 . DP=6;AF1=0.5001;CI95=0.5,0.5;DP4=3,0,3,0;MQ=34;PV4=1,0.098,0.24,1 PL:GT:GQ 43,0,35:0/1:37 +chr15 60367446 . C T 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=41 PL:GT:GQ 76,9,0:1/1:63 +chr15 61763755 . G A 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=45 PL:GT:GQ 100,9,0:1/1:63 +chr15 61831362 . C G 11.3 . DP=5;AF1=0.5;CI95=0.5,0.5;DP4=0,2,0,3;MQ=30;PV4=1,0.00077,0.47,1 PL:GT:GQ 41,0,42:0/1:41 +chr15 63978880 . G C 60 . DP=6;AF1=0.9999;CI95=0.5,1;DP4=2,0,4,0;MQ=35;PV4=1,1,1,1 PL:GT:GQ 90,3,0:1/1:41 +chr15 64342445 . A G 12.2 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=18 PL:GT:GQ 44,9,0:1/1:63 +chr15 65424859 . T C 11.3 . DP=10;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=21 PL:GT:GQ 44,30,0:1/1:99 +chr15 65603698 . C T 60 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 92,9,0:1/1:63 +chr15 67005078 . G A 13.9 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr15 71133512 . G C 22.3 . DP=19;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=25 PL:GT:GQ 55,15,0:1/1:75 +chr15 72619009 . A G 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=48 PL:GT:GQ 54,9,0:1/1:63 +chr15 73272688 . C T 70.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=39 PL:GT:GQ 103,15,0:1/1:75 +chr15 73699335 . T A 99 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=45 PL:GT:GQ 175,27,0:1/1:99 +chr15 74513352 . C T 99 . DP=10;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=37 PL:GT:GQ 139,30,0:1/1:99 +chr15 75540536 . G A 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=44 PL:GT:GQ 40,6,0:1/1:49 +chr15 75822537 . C A 17.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=23 PL:GT:GQ 50,15,0:1/1:75 +chr15 78554005 . T C 12 . DP=18;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=46 PL:GT:GQ 43,6,0:1/1:49 +chr15 80089369 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=28 PL:GT:GQ 40,6,0:1/1:49 +chr15 83089149 . C G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=33 PL:GT:GQ 40,6,0:1/1:49 +chr15 86839307 . T C 90.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=43 PL:GT:GQ 123,15,0:1/1:75 +chr15 89836258 . T C 99 . DP=10;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=39 PL:GT:GQ 141,24,0:1/1:96 +chr15 89837706 . G A 4.13 . DP=8;AF1=0.4998;CI95=0.5,0.5;DP4=0,4,0,4;MQ=30;PV4=1,1,0.25,1 PL:GT:GQ 32,0,59:0/1:35 +chr15 89857648 . T C 99 . DP=27;AF1=0.5;CI95=0.5,0.5;DP4=8,0,8,0;MQ=40;PV4=1,1,0.3,1 PL:GT:GQ 133,0,130:0/1:99 +chr15 89864228 . A C 32 . DP=4;AF1=0.5002;CI95=0.5,0.5;DP4=2,0,2,0;MQ=42;PV4=1,1,1,1 PL:GT:GQ 62,0,31:0/1:34 +chr15 91261235 . G A 7.8 . DP=4;AF1=0.5002;CI95=0.5,0.5;DP4=1,0,2,0;MQ=44;PV4=1,1,0.32,1 PL:GT:GQ 37,0,30:0/1:32 +chr16 256990 . A C 10.4 . DP=16;AF1=0.5008;CI95=0.5,0.5;DP4=4,0,3,0;MQ=23;PV4=1,0.34,1,1 PL:GT:GQ 40,0,25:0/1:28 +chr16 260794 . T C 3.01 . DP=19;AF1=0.4999;CI95=0.5,0.5;DP4=13,0,2,0;MQ=24;PV4=1,1,1,1 PL:GT:GQ 30,0,32:0/1:31 +chr16 419905 . A G 7.9 . DP=5;AF1=0.9966;CI95=0.5,1;DP4=0,2,0,3;MQ=22;PV4=1,1,1,1 PL:GT:GQ 36,1,0:1/1:23 +chr16 824086 . T C 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=48 PL:GT:GQ 54,9,0:1/1:63 +chr16 1085063 . C T 52 . DP=12;AF1=0.5;CI95=0.5,0.5;DP4=6,0,6,0;MQ=42;PV4=1,1,0.014,1 PL:GT:GQ 82,0,128:0/1:85 +chr16 1221305 . T C 54 . DP=7;AF1=0.5;CI95=0.5,0.5;DP4=0,3,0,3;MQ=40;PV4=1,1,1,1 PL:GT:GQ 84,0,60:0/1:63 +chr16 1411728 . A G 32.3 . DP=11;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=35 PL:GT:GQ 65,15,0:1/1:75 +chr16 1443197 . C G 64 . DP=26;AF1=1;CI95=1,1;DP4=0,0,25,0;MQ=36 PL:GT:GQ 97,75,0:1/1:99 +chr16 1478746 . A T 32 . DP=20;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=28 PL:GT:GQ 65,24,0:1/1:96 +chr16 1514438 . A C 45 . DP=49;AF1=1;CI95=1,1;DP4=0,0,48,0;MQ=26 PL:GT:GQ 78,144,0:1/1:99 +chr16 1601989 . T C 99 . DP=13;AF1=1;CI95=1,1;DP4=0,0,13,0;MQ=29 PL:GT:GQ 133,39,0:1/1:99 +chr16 2043883 . C T 30 . DP=33;AF1=1;CI95=1,1;DP4=0,0,0,33;MQ=14 PL:GT:GQ 63,99,0:1/1:99 +chr16 2137470 . A C 39 . DP=38;AF1=0.5016;CI95=0.5,0.5;DP4=4,0,6,0;MQ=34;PV4=1,0.02,1,1 PL:GT:GQ 69,0,22:0/1:25 +chr16 2537260 . A G 99 . DP=11;AF1=1;CI95=1,1;DP4=0,0,11,0;MQ=40 PL:GT:GQ 177,33,0:1/1:99 +chr16 2564737 . T C 99 . DP=25;AF1=1;CI95=1,1;DP4=0,0,0,22;MQ=41 PL:GT:GQ 199,66,0:1/1:99 +chr16 2612605 . A T 62.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=28 PL:GT:GQ 95,15,0:1/1:75 +chr16 2704518 . G A 41 . DP=48;AF1=0.5;CI95=0.5,0.5;DP4=0,17,0,12;MQ=48;PV4=1,1.9e-23,0.24,0.034 PL:GT:GQ 71,0,175:0/1:74 +chr16 3274307 . G T 68 . DP=39;AF1=0.5;CI95=0.5,0.5;DP4=0,30,0,8;MQ=37;PV4=1,1,1,1 PL:GT:GQ 98,0,138:0/1:99 +chr16 5467292 . G C 37.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 69,6,0:1/1:49 +chr16 10079145 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr16 11483702 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=44 PL:GT:GQ 40,6,0:1/1:49 +chr16 12038227 . A T 23 . DP=47;AF1=0.5;CI95=0.5,0.5;DP4=0,22,0,23;MQ=32;PV4=1,4.4e-66,0.47,0.028 PL:GT:GQ 53,0,135:0/1:56 +chr16 21336880 . G C 55 . DP=35;AF1=0.5;CI95=0.5,0.5;DP4=0,12,0,19;MQ=47;PV4=1,5.6e-21,1,1 PL:GT:GQ 85,0,121:0/1:88 +chr16 21980241 . C T 16.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=29 PL:GT:GQ 48,9,0:1/1:63 +chr16 23275383 . C G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 44,6,0:1/1:49 +chr16 27546495 . G T 25 . DP=35;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=43 PL:GT:GQ 57,9,0:1/1:63 +chr16 27700399 . A T 17.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=17 PL:GT:GQ 50,12,0:1/1:72 +chr16 28021935 . A G 18.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=23 PL:GT:GQ 51,15,0:1/1:75 +chr16 29070016 . G T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr16 29478618 . C T 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=42 PL:GT:GQ 43,9,0:1/1:63 +chr16 29718140 . C T 46.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=31 PL:GT:GQ 79,15,0:1/1:75 +chr16 30700759 . T C 17.1 . DP=14;AF1=1;CI95=1,1;DP4=0,0,0,14;MQ=14 PL:GT:GQ 50,42,0:1/1:99 +chr16 35139103 . A G 46.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=37 PL:GT:GQ 79,12,0:1/1:72 +chr16 35473348 . G A 3.83 . DP=11;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 34,12,0:1/1:72 +chr16 36213667 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr16 36705528 . G A 14.4 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=32 PL:GT:GQ 47,15,0:1/1:75 +chr16 43831353 . C T 69.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=42 PL:GT:GQ 102,12,0:1/1:72 +chr16 44715166 . A C 25 . DP=18;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=32 PL:GT:GQ 58,24,0:1/1:96 +chr16 44957661 . T C 7.03 . DP=23;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=18 PL:GT:GQ 39,21,0:1/1:84 +chr16 44958698 . C T 42.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=49 PL:GT:GQ 75,15,0:1/1:75 +chr16 44959163 . T C 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=48 PL:GT:GQ 66,12,0:1/1:72 +chr16 45167959 . C T 4.45 . DP=16;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=24 PL:GT:GQ 35,12,0:1/1:72 +chr16 50254956 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=36 PL:GT:GQ 45,6,0:1/1:49 +chr16 52383122 . A C 46.5 . DP=19;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=42 PL:GT:GQ 79,12,0:1/1:72 +chr16 55978159 . C T 10.7 . DP=20;AF1=0.5336;CI95=0.5,1;DP4=2,0,5,0;MQ=35;PV4=1,0.038,1,0.059 PL:GT:GQ 40,0,9:0/1:12 +chr16 61358878 . T A 15.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=32 PL:GT:GQ 47,6,0:1/1:49 +chr16 61392487 . G A 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=31 PL:GT:GQ 44,6,0:1/1:49 +chr16 61621603 . G T 6.59 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=22 PL:GT:GQ 38,12,0:1/1:72 +chr16 69120890 . G C 51.3 . DP=36;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=42 PL:GT:GQ 84,15,0:1/1:75 +chr16 70778219 . A G 21.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=39 PL:GT:GQ 53,6,0:1/1:49 +chr16 71899519 . T C 40 . DP=11;AF1=1;CI95=1,1;DP4=0,0,11,0;MQ=33 PL:GT:GQ 73,33,0:1/1:99 +chr16 72079251 . A G 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=41 PL:GT:GQ 43,9,0:1/1:63 +chr16 72093003 . G C 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr16 72672428 . A G 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 100,9,0:1/1:63 +chr16 72864515 . A G 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr16 72890560 . G A 47.1 . DP=10;AF1=0.5064;CI95=0.5,0.5;DP4=0,1,0,7;MQ=49;PV4=1,0.0019,0.0033,1 PL:GT:GQ 77,0,16:0/1:19 +chr16 73048929 . A G 6.29 . DP=4;AF1=0.9966;CI95=0.5,1;DP4=1,0,2,0;MQ=27;PV4=1,1,1,0.33 PL:GT:GQ 34,1,0:1/1:23 +chr16 73177179 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr16 73191468 . C T 69.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=40 PL:GT:GQ 102,12,0:1/1:72 +chr16 73367439 . A C 7.41 . DP=36;AF1=1;CI95=0.5,1;DP4=0,2,0,13;MQ=26;PV4=1,1,0.027,1 PL:GT:GQ 37,4,0:1/1:45 +chr16 74259316 . C T 89.5 . DP=13;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=49 PL:GT:GQ 122,12,0:1/1:72 +chr16 75271450 . C G 6.99 . DP=15;AF1=0.5015;CI95=0.5,0.5;DP4=0,1,0,3;MQ=44;PV4=1,0.065,0.31,1 PL:GT:GQ 36,0,22:0/1:25 +chr16 76199870 . G A 26 . DP=14;AF1=0.5;CI95=0.5,0.5;DP4=8,0,6,0;MQ=47;PV4=1,1.2e-06,0.32,1 PL:GT:GQ 56,0,141:0/1:59 +chr16 77723692 . A G 89.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=50 PL:GT:GQ 122,12,0:1/1:72 +chr17 165875 . G A 40.8 . DP=11;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=42 PL:GT:GQ 72,6,0:1/1:49 +chr17 1443809 . C G 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=50 PL:GT:GQ 40,6,0:1/1:49 +chr17 1618253 . C T 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=39 PL:GT:GQ 54,9,0:1/1:63 +chr17 2815309 . T G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr17 3537486 . T G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 73,6,0:1/1:49 +chr17 3734367 . C A 23.5 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=36 PL:GT:GQ 56,12,0:1/1:72 +chr17 5634764 . T C 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr17 6408090 . C G 3.54 . DP=5;AF1=0.4998;CI95=0.5,0.5;DP4=3,0,2,0;MQ=40;PV4=1,1,0.36,1 PL:GT:GQ 31,0,66:0/1:34 +chr17 7089723 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr17 8731503 . G C 11.1 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=46 PL:GT:GQ 42,6,0:1/1:49 +chr17 9282935 . T C,G 24.5 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=40 PL:GT:GQ 57,12,61,0,3,61:1/1:72 +chr17 17284831 . T C 29 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=25 PL:GT:GQ 61,9,0:1/1:63 +chr17 18439515 . G A 4.11 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=25 PL:GT:GQ 34,9,0:1/1:63 +chr17 18602146 . C T 4.76 . DP=20;AF1=1;CI95=1,1;DP4=0,0,0,11;MQ=16 PL:GT:GQ 36,33,0:1/1:99 +chr17 19427888 . C T 57 . DP=104;AF1=0.5;CI95=0.5,0.5;DP4=45,0,29,0;MQ=39;PV4=1,2.2e-12,1,1 PL:GT:GQ 87,0,131:0/1:90 +chr17 19604159 . T C 9.31 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=45 PL:GT:GQ 40,6,0:1/1:49 +chr17 19610366 . C T 13 . DP=13;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 44,6,0:1/1:49 +chr17 20484706 . C G 51 . DP=35;AF1=0.5001;CI95=0.5,0.5;DP4=0,11,0,21;MQ=21;PV4=1,0.39,0.49,1 PL:GT:GQ 81,0,36:0/1:39 +chr17 20555720 . A G 26.3 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=28 PL:GT:GQ 59,15,0:1/1:75 +chr17 24328984 . A C 15.4 . DP=34;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=25 PL:GT:GQ 48,15,0:1/1:75 +chr17 26237090 . G A 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=44 PL:GT:GQ 73,6,0:1/1:49 +chr17 28394766 . C A 13.9 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=31 PL:GT:GQ 45,6,0:1/1:49 +chr17 31218277 . A G 3.62 . DP=38;AF1=0.5161;CI95=0.5,0.5;DP4=0,1,0,2;MQ=38;PV4=1,0.26,1,1 PL:GT:GQ 31,0,12:0/1:15 +chr17 31254021 . C T 15.1 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=35 PL:GT:GQ 47,9,0:1/1:63 +chr17 32516798 . G A 37.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 69,6,0:1/1:49 +chr17 32600253 . A G 16.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=25 PL:GT:GQ 49,12,0:1/1:72 +chr17 34255214 . G C 19.2 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=21 PL:GT:GQ 52,18,0:1/1:90 +chr17 34365900 . T C 93.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=38 PL:GT:GQ 126,18,0:1/1:90 +chr17 35380386 . A T 6.79 . DP=44;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=46 PL:GT:GQ 37,6,0:1/1:49 +chr17 41993344 . C T 64 . DP=41;AF1=1;CI95=1,1;DP4=0,0,0,41;MQ=16 PL:GT:GQ 97,123,0:1/1:99 +chr17 42128201 . A G 4.13 . DP=5;AF1=0.4998;CI95=0.5,0.5;DP4=0,2,0,2;MQ=52;PV4=1,0.0041,1,1 PL:GT:GQ 32,0,62:0/1:35 +chr17 42984490 . C A 56 . DP=33;AF1=0.5001;CI95=0.5,0.5;DP4=6,0,12,0;MQ=42;PV4=1,0.004,1,1 PL:GT:GQ 86,0,34:0/1:37 +chr17 43419457 . G A 99 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,14;MQ=45 PL:GT:GQ 185,42,0:1/1:99 +chr17 43421225 . A G 65.1 . DP=31;AF1=1;CI95=0.5,1;DP4=0,6,0,17;MQ=43;PV4=1,0.004,1,1 PL:GT:GQ 98,18,0:1/1:90 +chr17 45206897 . G A 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=47 PL:GT:GQ 54,9,0:1/1:63 +chr17 45381302 . T C 18.6 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 51,12,0:1/1:72 +chr17 45530812 . C A 3.54 . DP=6;AF1=0.4998;CI95=0.5,0.5;DP4=0,3,0,2;MQ=40;PV4=1,1,0.37,1 PL:GT:GQ 31,0,58:0/1:34 +chr17 50242633 . G A 44 . DP=42;AF1=0.5;CI95=0.5,0.5;DP4=0,25,0,13;MQ=32;PV4=1,0.084,0.14,1 PL:GT:GQ 74,0,154:0/1:77 +chr17 51275317 . G A 14.9 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=31 PL:GT:GQ 46,6,0:1/1:49 +chr17 52325530 . C T 29 . DP=19;AF1=1;CI95=1,1;DP4=0,0,0,18;MQ=24 PL:GT:GQ 62,54,0:1/1:99 +chr17 52411748 . T G 18.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=25 PL:GT:GQ 51,12,0:1/1:72 +chr17 53190746 . C G 62.1 . DP=20;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=40 PL:GT:GQ 95,18,0:1/1:90 +chr17 58289916 . T C 18.2 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=22 PL:GT:GQ 51,18,0:1/1:90 +chr17 59796875 . C T 42 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=35 PL:GT:GQ 74,9,0:1/1:63 diff --git a/tests/tabix_data/vcf/2.vcf b/tests/tabix_data/vcf/2.vcf new file mode 100644 index 0000000..c77f2c4 --- /dev/null +++ b/tests/tabix_data/vcf/2.vcf @@ -0,0 +1,334 @@ +##fileformat=VCFv4.0 +##ApplyRecalibration="analysis_type=ApplyRecalibration input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=[20] excludeIntervals=null reference_sequence=/humgen/1kg/reference/human_g1k_v37.fasta rodBind=[/humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/combined.phase1.chr20.raw.indels.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION nonDeterministicRandomSeed=false DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=1 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false disable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null help=false recal_file=/humgen/gsa-scr1/delangel/VQSRIndels/data/trainMills75_truthMills75_p15_12_12_pctb0.05_std12.0_mG8_QD_FS_HS_RP_IC.recal tranches_file=/humgen/gsa-scr1/delangel/VQSRIndels/data/trainMills75_truthMills75_p15_12_12_pctb0.05_std12.0_mG8_QD_FS_HS_RP_IC.tranches out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub ts_filter_level=93.0 ignore_filter=null mode=INDEL" +##CombineVariants="analysis_type=CombineVariants input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=[20:41000001-42000000] excludeIntervals=null reference_sequence=/humgen/1kg/reference/human_g1k_v37.fasta rodBind=[/humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/AFR/AFR.phase1.chr20.42.raw.indels.vcf, /humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/ASN/ASN.phase1.chr20.42.raw.indels.vcf, /humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/AMR/AMR.phase1.chr20.42.raw.indels.vcf, /humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/EUR/EUR.phase1.chr20.42.raw.indels.vcf, /humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/AFR.admix/AFR.admix.phase1.chr20.42.raw.indels.vcf, /humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/ASN.admix/ASN.admix.phase1.chr20.42.raw.indels.vcf, /humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/AMR.admix/AMR.admix.phase1.chr20.42.raw.indels.vcf, /humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/EUR.admix/EUR.admix.phase1.chr20.42.raw.indels.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION nonDeterministicRandomSeed=false DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=1 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false disable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null help=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub genotypemergeoption=PRIORITIZE filteredrecordsmergetype=KEEP_IF_ANY_UNFILTERED rod_priority_list=AFR.admix,AMR.admix,EUR.admix,ASN.admix,AFR,AMR,EUR,ASN printComplexMerges=false filteredAreUncalled=false minimalVCF=false setKey=set assumeIdenticalSamples=false minimumN=1 masterMerge=false mergeInfoWithMaxAC=true" +##FILTER= +##FILTER== 4 && (MQ0 / (1.0 * DP)) > 0.1"> +##FILTER=10)"> +##FILTER=20.0"> +##FILTER= 7500"> +##FILTER==15"> +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER==-1.0"> +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##LeftAlignVariants="analysis_type=LeftAlignVariants input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=[20] excludeIntervals=null reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta rodBind=[/humgen/gsa-scr1/ebanks/ALL.chr20.Oxford.20110407.indels.genotypes.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION nonDeterministicRandomSeed=false DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=1 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false disable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null help=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub" +##SelectVariants="analysis_type=SelectVariants input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=[20] excludeIntervals=null reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta rodBind=[/humgen/gsa-scr1/delangel/officialCalls/20110201_chr20_phase1_indels/dindel/20110208.chr20.dindel2.ALL.sites.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION nonDeterministicRandomSeed=false DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=1 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false disable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null help=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sample=null select_expressions=[] excludeNonVariants=false excludeFiltered=false discordance= concordance= family_structure= mendelianViolation=false mendelianViolationQualThreshold=0.0 select_random_number=0 select_random_fraction=0.0 selectSNPs=false selectIndels=true" +##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/broad/shptmp/delangel/calls/chr20/CHB.phase1.chr20.42.cleaned.bam, /broad/shptmp/delangel/calls/chr20/CHS.phase1.chr20.42.cleaned.bam, /broad/shptmp/delangel/calls/chr20/CLM.phase1.chr20.42.cleaned.bam, /broad/shptmp/delangel/calls/chr20/JPT.phase1.chr20.42.cleaned.bam, /broad/shptmp/delangel/calls/chr20/MXL.phase1.chr20.42.cleaned.bam, /broad/shptmp/delangel/calls/chr20/PUR.phase1.chr20.42.cleaned.bam] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=[20:41000001-42000000] excludeIntervals=null reference_sequence=/humgen/1kg/reference/human_g1k_v37.fasta rodBind=[/humgen/gsa-scr1/delangel/otherIndelCallerAnalysis/ALL.indels.combined.chr20.vcf, /humgen/gsa-hpprojects/GATK/data/dbsnp_132_b37.leftAligned.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION nonDeterministicRandomSeed=false DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=50 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=8 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false disable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null help=false genotype_likelihoods_model=INDEL p_nonref_model=EXACT heterozygosity=0.0010 pcr_error_rate=1.0E-4 genotyping_mode=GENOTYPE_GIVEN_ALLELES output_mode=EMIT_ALL_SITES standard_min_confidence_threshold_for_calling=4.0 standard_min_confidence_threshold_for_emitting=4.0 noSLOD=false assume_single_sample_reads=null abort_at_too_much_coverage=-1 min_base_quality_score=17 min_mapping_quality_score=20 max_deletion_fraction=0.05 min_indel_count_for_genotyping=5 indel_heterozygosity=1.25E-4 indelGapContinuationPenalty=10.0 indelGapOpenPenalty=45.0 indelHaplotypeSize=80 doContextDependentGapPenalties=true getGapPenaltiesFromData=false indel_recal_file=indel.recal_data.csv indelDebug=false dovit=false GSA_PRODUCTION_ONLY=false exactCalculation=LINEAR_EXPERIMENTAL ignoreSNPAlleles=true output_all_callable_bases=false genotype=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub debug_file=null metrics_file=null annotation=[MappingQualityZeroFraction]" +##VariantAnnotator="analysis_type=VariantAnnotator input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=null excludeIntervals=null reference_sequence=/humgen/1kg/reference/human_g1k_v37.fasta rodBind=[./ALL.chr20.vqsr_2of5_union_sites_for_validation_boosted.vcf] rodToIntervalTrackName=variant BTI_merge_rule=UNION nonDeterministicRandomSeed=false DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=1 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false disable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null help=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sampleName=null annotation=[IndelType] group=[] expression=[] useAllAnnotations=false list=false assume_single_sample_reads=null vcfContainsOnlyIndels=false" +##VariantFiltration="analysis_type=VariantFiltration input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=[/humgen/1kg/processing/pipeline_test_bams/chr22_chunked.hg19.intervals] excludeIntervals=null reference_sequence=/humgen/1kg/reference/human_g1k_v37.fasta rodBind=[/broad/shptmp/rpoplin/ALL.phase1.chr22.raw.indels.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=1 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false enable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null quiet_output_mode=false debug_mode=false help=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub filterExpression=[MQ0 >= 4 && (MQ0 / (1.0 * DP)) > 0.1, QUAL<30.0, SB>=-1.0, QD<1.0, HRun>=15, HaplotypeScore>20.0] filterName=[HARD_TO_VALIDATE, LowQual, StrandBias, QualByDepth, HomopolymerRun, HaplotypeScore] genotypeFilterExpression=[] genotypeFilterName=[] clusterSize=3 clusterWindowSize=0 maskName=Mask missingValuesInExpressionsShouldEvaluateAsFailing=false" +##commandline="/share/software/freebayes/bin/freebayes --stdin --min-alternate-count 2 --genotype-combo-step-max 20 --genotype-variant-threshold 4 --no-marginals --pvar 0.0001 --indels --mnps --no-filters --binomial-obs-priors --allele-balance-priors --region 20:0..100000 --vcf /d1/data/1000G/20101123/populations/finalised.phase1/integrated/including454/wg/ALL/Pipeline/none//freebayes/freebayes.20:0-100000.baq.20110328.vcf --fasta-reference /d2/data/references/build_37/human_reference_v37.fa" +##fileDate=2011-03-28 +##filedate=2011-02-08 +##filter="( SNP | MNP ) & ( MQM > 65 | QUAL > 1 ) & ABP < 30 & AB < 0.9 | ( INS | DEL ) & QUAL > 500" +##phasing=none +##platypusOptions={'bamFiles': ['/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA06984', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA06985', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA06986', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA06989', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA06994', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA07000', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA07037', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA07048', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA07051', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA07056', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA07346', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA07347', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA07357', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA10847', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA10851', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11829', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11830', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11831', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11832', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11843', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11881', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11892', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11893', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11894', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11918', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11919', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11920', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11930', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11931', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11932', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11933', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11992', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11993', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11994', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA11995', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12003', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12004', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12005', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12006', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12043', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12044', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12045', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12046', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12058', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12144', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12154', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12155', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12156', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12234', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12249', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12272', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12273', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12275', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12282', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12283', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12286', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12287', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12340', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12341', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12342', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12347', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12348', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12383', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12399', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12400', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12413', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12414', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12489', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12546', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12716', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12717', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12718', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12748', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12749', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12750', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12751', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12761', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12763', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12775', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12776', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12777', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12778', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12813', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12827', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12828', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12829', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12830', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12842', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12843', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12889', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA12890', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18486', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18487', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18488', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18489', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18498', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18499', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18501', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18502', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18504', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18505', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18507', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18508', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18510', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18511', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18516', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18517', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18519', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18520', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18522', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18523', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18526', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18530', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18532', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18533', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18534', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18535', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18536', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18537', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18538', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18539', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18541', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18542', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18543', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18544', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18545', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18546', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18547', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18548', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18549', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18550', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18552', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18553', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18555', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18557', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18558', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18559', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18560', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18561', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18562', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18563', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18564', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18565', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18566', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18567', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18570', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18571', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18572', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18573', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18574', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18576', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18577', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18579', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18582', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18592', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18593', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18595', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18596', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18597', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18599', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18602', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18603', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18605', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18606', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18608', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18609', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18610', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18611', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18612', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18613', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18614', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18615', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18616', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18617', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18618', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18619', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18620', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18621', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18622', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18623', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18624', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18625', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18626', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18627', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18628', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18630', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18631', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18632', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18633', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18634', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18635', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18636', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18637', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18638', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18853', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18856', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18858', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18861', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18867', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18868', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18870', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18871', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18873', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18874', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18907', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18908', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18909', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18910', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18912', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18916', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18917', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18923', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18924', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18933', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18934', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18940', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18941', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18942', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18943', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18944', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18945', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18947', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18948', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18949', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18950', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18951', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18952', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18953', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18956', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18959', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18960', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18961', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18963', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18964', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18965', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18967', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18968', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18971', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18972', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18973', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18974', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18975', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18976', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18977', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18980', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18981', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18982', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18983', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18984', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18985', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18986', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18987', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18988', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18989', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18990', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18991', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA18999', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19000', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19002', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19003', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19004', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19005', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19007', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19009', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19010', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19012', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19054', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19055', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19056', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19057', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19058', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19059', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19060', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19062', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19063', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19064', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19065', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19066', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19067', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19068', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19070', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19072', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19074', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19075', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19076', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19077', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19078', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19079', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19080', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19081', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19082', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19083', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19084', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19085', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19087', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19088', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19092', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19093', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19098', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19099', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19102', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19107', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19108', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19114', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19116', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19119', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19129', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19130', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19131', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19137', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19138', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19144', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19147', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19152', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19153', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19159', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19160', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19171', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19172', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19189', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19190', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19197', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19198', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19200', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19201', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19204', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19207', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19209', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19210', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19213', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19223', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19225', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19235', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19236', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19247', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19248', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19256', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19257', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19311', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19312', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19313', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19315', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19316', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19317', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19318', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19319', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19321', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19324', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19327', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19328', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19331', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19332', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19334', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19338', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19346', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19347', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19350', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19355', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19359', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19360', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19371', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19372', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19373', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19374', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19375', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19376', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19377', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19379', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19380', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19381', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19382', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19383', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19384', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19385', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19390', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19391', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19393', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19394', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19395', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19396', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19397', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19398', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19399', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19401', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19403', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19404', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19428', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19429', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19430', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19431', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19434', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19435', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19436', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19437', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19438', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19439', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19440', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19443', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19444', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19445', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19446', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19448', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19449', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19451', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19452', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19453', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19455', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19456', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19457', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19461', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19462', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19463', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19466', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19467', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19468', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19469', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19470', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19471', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19472', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19473', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19474', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19625', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19648', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19649', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19651', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19652', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19654', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19655', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19657', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19658', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19660', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19661', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19663', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19664', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19670', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19675', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19676', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19678', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19679', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19681', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19682', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19684', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19685', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19700', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19701', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19703', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19704', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19707', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19711', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19712', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19713', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19716', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19717', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19719', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19720', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19722', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19723', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19725', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19726', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19728', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19729', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19731', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19732', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19746', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19747', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19749', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19750', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19755', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19756', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19758', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19759', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19761', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19762', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19770', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19771', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19773', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19774', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19776', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19777', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19779', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19780', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19782', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19783', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19785', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19786', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19788', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19789', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19818', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19819', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19834', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19835', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19900', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19901', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19904', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19908', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19909', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19914', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19916', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19917', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19920', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19921', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19982', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA19985', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20126', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20127', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20276', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20278', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20281', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20282', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20287', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20289', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20291', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20294', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20296', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20299', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20314', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20317', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20322', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20332', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20334', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20336', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20340', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20341', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20342', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20344', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20346', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20348', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20356', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20502', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20503', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20504', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20505', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20506', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20507', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20508', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20509', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20510', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20512', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20513', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20514', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20515', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20516', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20517', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20518', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20519', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20520', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20521', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20522', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20524', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20525', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20526', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20527', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20528', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20529', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20530', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20531', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20532', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20533', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20534', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20535', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20536', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20537', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20538', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20539', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20540', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20541', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20542', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20543', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20544', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20581', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20582', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20585', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20586', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20588', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20589', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20752', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20753', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20754', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20755', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20756', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20757', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20758', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20759', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20760', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20761', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20765', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20766', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20768', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20769', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20770', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20771', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20772', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20773', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20774', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20775', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20778', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20783', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20785', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20786', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20787', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20790', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20792', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20795', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20796', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20797', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20798', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20799', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20800', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20801', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20802', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20803', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20804', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20805', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20806', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20807', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20808', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20809', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20810', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20811', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20812', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20813', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20814', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20815', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20816', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20818', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20819', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20826', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/NA20828', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00096', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00098', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00100', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00103', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00106', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00108', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00111', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00112', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00114', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00115', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00116', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00117', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00118', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00119', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00120', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00122', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00123', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00124', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00125', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00126', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00127', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00131', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00133', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00136', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00137', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00138', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00139', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00140', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00141', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00142', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00143', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00144', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00145', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00146', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00147', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00148', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00149', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00150', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00151', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00152', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00153', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00154', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00155', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00156', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00157', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00158', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00159', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00160', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00171', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00173', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00174', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00176', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00177', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00178', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00179', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00180', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00181', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00182', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00183', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00185', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00186', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00187', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00188', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00189', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00190', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00231', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00232', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00233', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00236', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00237', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00239', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00242', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00243', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00244', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00245', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00246', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00247', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00249', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00250', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00251', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00252', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00253', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00254', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00256', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00257', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00258', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00259', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00260', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00261', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00262', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00263', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00264', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00265', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00266', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00267', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00268', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00269', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00270', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00271', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00272', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00273', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00274', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00275', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00276', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00277', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00278', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00280', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00281', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00282', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00284', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00285', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00306', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00308', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00309', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00310', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00311', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00312', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00313', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00315', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00318', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00319', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00320', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00321', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00323', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00324', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00325', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00326', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00327', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00328', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00329', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00330', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00331', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00334', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00335', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00336', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00337', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00338', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00339', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00342', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00343', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00344', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00345', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00346', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00353', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00357', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00361', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00366', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00367', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00368', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00369', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00372', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00373', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00375', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00377', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00380', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00403', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00404', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00418', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00419', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00421', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00422', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00427', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00428', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00436', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00437', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00442', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00443', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00448', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00449', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00463', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00464', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00472', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00473', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00475', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00476', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00478', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00479', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00500', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00501', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00512', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00513', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00524', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00525', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00530', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00531', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00533', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00534', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00536', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00537', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00542', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00543', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00551', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00553', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00554', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00556', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00557', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00559', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00560', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00565', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00566', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00577', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00578', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00580', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00581', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00583', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00584', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00589', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00590', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00592', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00593', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00595', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00596', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00607', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00608', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00610', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00611', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00613', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00614', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00619', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00620', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00625', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00626', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00628', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00629', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00634', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00635', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00637', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00638', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00640', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00641', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00650', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00651', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00653', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00654', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00656', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00657', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00662', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00663', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00671', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00672', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00683', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00684', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00689', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00690', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00692', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00693', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00698', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00699', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00701', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00702', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00704', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00705', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00707', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00708', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00731', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00732', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00734', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00736', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00737', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00739', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG00740', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01047', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01048', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01051', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01052', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01055', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01060', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01061', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01066', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01067', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01069', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01070', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01072', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01073', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01075', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01079', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01080', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01082', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01083', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01094', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01095', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01097', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01098', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01101', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01102', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01107', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01108', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01110', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01111', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01112', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01113', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01124', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01125', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01133', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01134', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01136', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01137', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01140', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01148', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01149', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01167', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01168', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01170', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01171', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01173', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01174', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01176', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01177', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01182', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01183', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01187', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01188', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01190', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01191', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01197', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01198', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01204', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01250', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01251', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01253', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01254', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01334', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01342', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01350', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01351', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01353', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01354', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01356', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01357', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01359', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01360', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01365', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01366', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01374', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01375', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01377', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01378', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01383', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01384', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01389', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01390', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01437', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01440', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01441', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01455', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01456', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01461', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01462', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01464', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01465', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01488', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01489', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01491', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01492', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01494', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01495', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01497', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01498', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01515', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01516', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01518', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01519', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01521', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01522', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01550', '/scratch/rimmer/ThousandGenomes/PhaseOneBAMs/HG01551'], 'minReads': 2, 'refFile': '/scratch/rimmer/Genomes/human_g1k_v37_ebv.fa', 'maxHaplotypes': 64, 'maxSize': 100, 'ploidy': 2, 'maxRegionSize': 10000, 'nCPU': 1, 'minFlank': 3, 'logFileName': 'LogsAllPhaseOne/ThousandGenomesPhaseOneCalls_20:1-100001.log', 'regions': ['20:1-100001'], 'maxVariants': 6, 'genIndels': 1, 'labels': None, 'dataType': 'population', 'minMapQual': 20, 'rlen': 100, 'nInd': 994, 'getVariantsFromBAMs': 1, 'genSNPs': 1, 'minReadQual': 20, 'maxCoverage': 1000000.0, 'verbosity': 2, 'sourceFile': None, 'callOnlyIndels': 1, 'output': 'VariantCallsAllPhaseOne/ThousandGenomesPhaseOneCalls_20:1-100001.vcf'} +##reference=/lustre/scratch105/projects/g1k/ref/main_project/human_g1k_v37.fasta +##source=Dindel2 +##source=SelectVariants +##source_20110031.1=/nfs/users/nfs_p/pd3/cvs/vcftools/perl/vcf-annotate -d /nfs/users/nfs_p/pd3/sandbox/hapmap/dbSNP-b132/non-1kg-vld.desc -a /nfs/users/nfs_p/pd3/sandbox/hapmap/dbSNP-b132/non-1kg-vld.tab.gz -c CHROM,FROM,INFO/VLD,INFO/KGPilot123,INFO/dbSNP +##vcfCTools=filter +##vcfCtools=merge freebayes.20:0-100000.baq.20110328.vcf, freebayes.20:100000-200000.baq.20110328.vcf, freebayes.20:200000-300000.baq.20110328.vcf, freebayes.20:300000-400000.baq.20110328.vcf, freebayes.20:400000-500000.baq.20110328.vcf, freebayes.20:500000-600000.baq.20110328.vcf, freebayes.20:600000-700000.baq.20110328.vcf, freebayes.20:700000-800000.baq.20110328.vcf, freebayes.20:800000-900000.baq.20110328.vcf, freebayes.20:900000-1000000.baq.20110328.vcf, freebayes.20:1000000-1100000.baq.20110328.vcf, freebayes.20:1100000-1200000.baq.20110328.vcf, freebayes.20:1200000-1300000.baq.20110328.vcf, freebayes.20:1300000-1400000.baq.20110328.vcf, freebayes.20:1400000-1500000.baq.20110328.vcf, freebayes.20:1500000-1600000.baq.20110328.vcf, freebayes.20:1600000-1700000.baq.20110328.vcf, freebayes.20:1700000-1800000.baq.20110328.vcf, freebayes.20:1800000-1900000.baq.20110328.vcf, freebayes.20:1900000-2000000.baq.20110328.vcf, freebayes.20:2000000-2100000.baq.20110328.vcf, freebayes.20:2100000-2200000.baq.20110328.vcf, freebayes.20:2200000-2300000.baq.20110328.vcf, freebayes.20:2300000-2400000.baq.20110328.vcf, freebayes.20:2400000-2500000.baq.20110328.vcf, freebayes.20:2500000-2600000.baq.20110328.vcf, freebayes.20:2600000-2700000.baq.20110328.vcf, freebayes.20:2700000-2800000.baq.20110328.vcf, freebayes.20:2800000-2900000.baq.20110328.vcf, freebayes.20:2900000-3000000.baq.20110328.vcf, freebayes.20:3000000-3100000.baq.20110328.vcf, freebayes.20:3100000-3200000.baq.20110328.vcf, freebayes.20:3200000-3300000.baq.20110328.vcf, freebayes.20:3300000-3400000.baq.20110328.vcf, freebayes.20:3400000-3500000.baq.20110328.vcf, freebayes.20:3500000-3600000.baq.20110328.vcf, freebayes.20:3600000-3700000.baq.20110328.vcf, freebayes.20:3700000-3800000.baq.20110328.vcf, freebayes.20:3800000-3900000.baq.20110328.vcf, freebayes.20:3900000-4000000.baq.20110328.vcf, freebayes.20:4000000-4100000.baq.20110328.vcf, freebayes.20:4100000-4200000.baq.20110328.vcf, freebayes.20:4200000-4300000.baq.20110328.vcf, freebayes.20:4300000-4400000.baq.20110328.vcf, freebayes.20:4400000-4500000.baq.20110328.vcf, freebayes.20:4500000-4600000.baq.20110328.vcf, freebayes.20:4600000-4700000.baq.20110328.vcf, freebayes.20:4700000-4800000.baq.20110328.vcf, freebayes.20:4800000-4900000.baq.20110328.vcf, freebayes.20:4900000-5000000.baq.20110328.vcf, freebayes.20:5000000-5100000.baq.20110328.vcf, freebayes.20:5100000-5200000.baq.20110328.vcf, freebayes.20:5200000-5300000.baq.20110328.vcf, freebayes.20:5300000-5400000.baq.20110328.vcf, freebayes.20:5400000-5500000.baq.20110328.vcf, freebayes.20:5500000-5600000.baq.20110328.vcf, freebayes.20:5600000-5700000.baq.20110328.vcf, freebayes.20:5700000-5800000.baq.20110328.vcf, freebayes.20:5800000-5900000.baq.20110328.vcf, freebayes.20:5900000-6000000.baq.20110328.vcf, freebayes.20:6000000-6100000.baq.20110328.vcf, freebayes.20:6100000-6200000.baq.20110328.vcf, freebayes.20:6200000-6300000.baq.20110328.vcf, freebayes.20:6300000-6400000.baq.20110328.vcf, freebayes.20:6400000-6500000.baq.20110328.vcf, freebayes.20:6500000-6600000.baq.20110328.vcf, freebayes.20:6600000-6700000.baq.20110328.vcf, freebayes.20:6700000-6800000.baq.20110328.vcf, freebayes.20:6800000-6900000.baq.20110328.vcf, freebayes.20:6900000-7000000.baq.20110328.vcf, freebayes.20:7000000-7100000.baq.20110328.vcf, freebayes.20:7100000-7200000.baq.20110328.vcf, freebayes.20:7200000-7300000.baq.20110328.vcf, freebayes.20:7300000-7400000.baq.20110328.vcf, freebayes.20:7400000-7500000.baq.20110328.vcf, freebayes.20:7500000-7600000.baq.20110328.vcf, freebayes.20:7600000-7700000.baq.20110328.vcf, freebayes.20:7700000-7800000.baq.20110328.vcf, freebayes.20:7800000-7900000.baq.20110328.vcf, freebayes.20:7900000-8000000.baq.20110328.vcf, freebayes.20:8000000-8100000.baq.20110328.vcf, freebayes.20:8100000-8200000.baq.20110328.vcf, freebayes.20:8200000-8300000.baq.20110328.vcf, freebayes.20:8300000-8400000.baq.20110328.vcf, freebayes.20:8400000-8500000.baq.20110328.vcf, freebayes.20:8500000-8600000.baq.20110328.vcf, freebayes.20:8600000-8700000.baq.20110328.vcf, freebayes.20:8700000-8800000.baq.20110328.vcf, freebayes.20:8800000-8900000.baq.20110328.vcf, freebayes.20:8900000-9000000.baq.20110328.vcf, freebayes.20:9000000-9100000.baq.20110328.vcf, freebayes.20:9100000-9200000.baq.20110328.vcf, freebayes.20:9200000-9300000.baq.20110328.vcf, freebayes.20:9300000-9400000.baq.20110328.vcf, freebayes.20:9400000-9500000.baq.20110328.vcf, freebayes.20:9500000-9600000.baq.20110328.vcf, freebayes.20:9600000-9700000.baq.20110328.vcf, freebayes.20:9700000-9800000.baq.20110328.vcf, freebayes.20:9800000-9900000.baq.20110328.vcf, freebayes.20:9900000-10000000.baq.20110328.vcf, freebayes.20:10000000-10100000.baq.20110328.vcf, freebayes.20:10100000-10200000.baq.20110328.vcf, freebayes.20:10200000-10300000.baq.20110328.vcf, freebayes.20:10300000-10400000.baq.20110328.vcf, freebayes.20:10400000-10500000.baq.20110328.vcf, freebayes.20:10500000-10600000.baq.20110328.vcf, freebayes.20:10600000-10700000.baq.20110328.vcf, freebayes.20:10700000-10800000.baq.20110328.vcf, freebayes.20:10800000-10900000.baq.20110328.vcf, freebayes.20:10900000-11000000.baq.20110328.vcf, freebayes.20:11000000-11100000.baq.20110328.vcf, freebayes.20:11100000-11200000.baq.20110328.vcf, freebayes.20:11200000-11300000.baq.20110328.vcf, freebayes.20:11300000-11400000.baq.20110328.vcf, freebayes.20:11400000-11500000.baq.20110328.vcf, freebayes.20:11500000-11600000.baq.20110328.vcf, freebayes.20:11600000-11700000.baq.20110328.vcf, freebayes.20:11700000-11800000.baq.20110328.vcf, freebayes.20:11800000-11900000.baq.20110328.vcf, freebayes.20:11900000-12000000.baq.20110328.vcf, freebayes.20:12000000-12100000.baq.20110328.vcf, freebayes.20:12100000-12200000.baq.20110328.vcf, freebayes.20:12200000-12300000.baq.20110328.vcf, freebayes.20:12300000-12400000.baq.20110328.vcf, freebayes.20:12400000-12500000.baq.20110328.vcf, freebayes.20:12500000-12600000.baq.20110328.vcf, freebayes.20:12600000-12700000.baq.20110328.vcf, freebayes.20:12700000-12800000.baq.20110328.vcf, freebayes.20:12800000-12900000.baq.20110328.vcf, freebayes.20:12900000-13000000.baq.20110328.vcf, freebayes.20:13000000-13100000.baq.20110328.vcf, freebayes.20:13100000-13200000.baq.20110328.vcf, freebayes.20:13200000-13300000.baq.20110328.vcf, freebayes.20:13300000-13400000.baq.20110328.vcf, freebayes.20:13400000-13500000.baq.20110328.vcf, freebayes.20:13500000-13600000.baq.20110328.vcf, freebayes.20:13600000-13700000.baq.20110328.vcf, freebayes.20:13700000-13800000.baq.20110328.vcf, freebayes.20:13800000-13900000.baq.20110328.vcf, freebayes.20:13900000-14000000.baq.20110328.vcf, freebayes.20:14000000-14100000.baq.20110328.vcf, freebayes.20:14100000-14200000.baq.20110328.vcf, freebayes.20:14200000-14300000.baq.20110328.vcf, freebayes.20:14300000-14400000.baq.20110328.vcf, freebayes.20:14400000-14500000.baq.20110328.vcf, freebayes.20:14500000-14600000.baq.20110328.vcf, freebayes.20:14600000-14700000.baq.20110328.vcf, freebayes.20:14700000-14800000.baq.20110328.vcf, freebayes.20:14800000-14900000.baq.20110328.vcf, freebayes.20:14900000-15000000.baq.20110328.vcf, freebayes.20:15000000-15100000.baq.20110328.vcf, freebayes.20:15100000-15200000.baq.20110328.vcf, freebayes.20:15200000-15300000.baq.20110328.vcf, freebayes.20:15300000-15400000.baq.20110328.vcf, freebayes.20:15400000-15500000.baq.20110328.vcf, freebayes.20:15500000-15600000.baq.20110328.vcf, freebayes.20:15600000-15700000.baq.20110328.vcf, freebayes.20:15700000-15800000.baq.20110328.vcf, freebayes.20:15800000-15900000.baq.20110328.vcf, freebayes.20:15900000-16000000.baq.20110328.vcf, freebayes.20:16000000-16100000.baq.20110328.vcf, freebayes.20:16100000-16200000.baq.20110328.vcf, freebayes.20:16200000-16300000.baq.20110328.vcf, freebayes.20:16300000-16400000.baq.20110328.vcf, freebayes.20:16400000-16500000.baq.20110328.vcf, freebayes.20:16500000-16600000.baq.20110328.vcf, freebayes.20:16600000-16700000.baq.20110328.vcf, freebayes.20:16700000-16800000.baq.20110328.vcf, freebayes.20:16800000-16900000.baq.20110328.vcf, freebayes.20:16900000-17000000.baq.20110328.vcf, freebayes.20:17000000-17100000.baq.20110328.vcf, freebayes.20:17100000-17200000.baq.20110328.vcf, freebayes.20:17200000-17300000.baq.20110328.vcf, freebayes.20:17300000-17400000.baq.20110328.vcf, freebayes.20:17400000-17500000.baq.20110328.vcf, freebayes.20:17500000-17600000.baq.20110328.vcf, freebayes.20:17600000-17700000.baq.20110328.vcf, freebayes.20:17700000-17800000.baq.20110328.vcf, freebayes.20:17800000-17900000.baq.20110328.vcf, freebayes.20:17900000-18000000.baq.20110328.vcf, freebayes.20:18000000-18100000.baq.20110328.vcf, freebayes.20:18100000-18200000.baq.20110328.vcf, freebayes.20:18200000-18300000.baq.20110328.vcf, freebayes.20:18300000-18400000.baq.20110328.vcf, freebayes.20:18400000-18500000.baq.20110328.vcf, freebayes.20:18500000-18600000.baq.20110328.vcf, freebayes.20:18600000-18700000.baq.20110328.vcf, freebayes.20:18700000-18800000.baq.20110328.vcf, freebayes.20:18800000-18900000.baq.20110328.vcf, freebayes.20:18900000-19000000.baq.20110328.vcf, freebayes.20:19000000-19100000.baq.20110328.vcf, freebayes.20:19100000-19200000.baq.20110328.vcf, freebayes.20:19200000-19300000.baq.20110328.vcf, freebayes.20:19300000-19400000.baq.20110328.vcf, freebayes.20:19400000-19500000.baq.20110328.vcf, freebayes.20:19500000-19600000.baq.20110328.vcf, freebayes.20:19600000-19700000.baq.20110328.vcf, freebayes.20:19700000-19800000.baq.20110328.vcf, freebayes.20:19800000-19900000.baq.20110328.vcf, freebayes.20:19900000-20000000.baq.20110328.vcf, freebayes.20:20000000-20100000.baq.20110328.vcf, freebayes.20:20100000-20200000.baq.20110328.vcf, freebayes.20:20200000-20300000.baq.20110328.vcf, freebayes.20:20300000-20400000.baq.20110328.vcf, freebayes.20:20400000-20500000.baq.20110328.vcf, freebayes.20:20500000-20600000.baq.20110328.vcf, freebayes.20:20600000-20700000.baq.20110328.vcf, freebayes.20:20700000-20800000.baq.20110328.vcf, freebayes.20:20800000-20900000.baq.20110328.vcf, freebayes.20:20900000-21000000.baq.20110328.vcf, freebayes.20:21000000-21100000.baq.20110328.vcf, freebayes.20:21100000-21200000.baq.20110328.vcf, freebayes.20:21200000-21300000.baq.20110328.vcf, freebayes.20:21300000-21400000.baq.20110328.vcf, freebayes.20:21400000-21500000.baq.20110328.vcf, freebayes.20:21500000-21600000.baq.20110328.vcf, freebayes.20:21600000-21700000.baq.20110328.vcf, freebayes.20:21700000-21800000.baq.20110328.vcf, freebayes.20:21800000-21900000.baq.20110328.vcf, freebayes.20:21900000-22000000.baq.20110328.vcf, freebayes.20:22000000-22100000.baq.20110328.vcf, freebayes.20:22100000-22200000.baq.20110328.vcf, freebayes.20:22200000-22300000.baq.20110328.vcf, freebayes.20:22300000-22400000.baq.20110328.vcf, freebayes.20:22400000-22500000.baq.20110328.vcf, freebayes.20:22500000-22600000.baq.20110328.vcf, freebayes.20:22600000-22700000.baq.20110328.vcf, freebayes.20:22700000-22800000.baq.20110328.vcf, freebayes.20:22800000-22900000.baq.20110328.vcf, freebayes.20:22900000-23000000.baq.20110328.vcf, freebayes.20:23000000-23100000.baq.20110328.vcf, freebayes.20:23100000-23200000.baq.20110328.vcf, freebayes.20:23200000-23300000.baq.20110328.vcf, freebayes.20:23300000-23400000.baq.20110328.vcf, freebayes.20:23400000-23500000.baq.20110328.vcf, freebayes.20:23500000-23600000.baq.20110328.vcf, freebayes.20:23600000-23700000.baq.20110328.vcf, freebayes.20:23700000-23800000.baq.20110328.vcf, freebayes.20:23800000-23900000.baq.20110328.vcf, freebayes.20:23900000-24000000.baq.20110328.vcf, freebayes.20:24000000-24100000.baq.20110328.vcf, freebayes.20:24100000-24200000.baq.20110328.vcf, freebayes.20:24200000-24300000.baq.20110328.vcf, freebayes.20:24300000-24400000.baq.20110328.vcf, freebayes.20:24400000-24500000.baq.20110328.vcf, freebayes.20:24500000-24600000.baq.20110328.vcf, freebayes.20:24600000-24700000.baq.20110328.vcf, freebayes.20:24700000-24800000.baq.20110328.vcf, freebayes.20:24800000-24900000.baq.20110328.vcf, freebayes.20:24900000-25000000.baq.20110328.vcf, freebayes.20:25000000-25100000.baq.20110328.vcf, freebayes.20:25100000-25200000.baq.20110328.vcf, freebayes.20:25200000-25300000.baq.20110328.vcf, freebayes.20:25300000-25400000.baq.20110328.vcf, freebayes.20:25400000-25500000.baq.20110328.vcf, freebayes.20:25500000-25600000.baq.20110328.vcf, freebayes.20:25600000-25700000.baq.20110328.vcf, freebayes.20:25700000-25800000.baq.20110328.vcf, freebayes.20:25800000-25900000.baq.20110328.vcf, freebayes.20:25900000-26000000.baq.20110328.vcf, freebayes.20:26000000-26100000.baq.20110328.vcf, freebayes.20:26100000-26200000.baq.20110328.vcf, freebayes.20:26200000-26300000.baq.20110328.vcf, freebayes.20:26300000-26400000.baq.20110328.vcf, freebayes.20:26400000-26500000.baq.20110328.vcf, freebayes.20:26500000-26600000.baq.20110328.vcf, freebayes.20:26600000-26700000.baq.20110328.vcf, freebayes.20:26700000-26800000.baq.20110328.vcf, freebayes.20:26800000-26900000.baq.20110328.vcf, freebayes.20:26900000-27000000.baq.20110328.vcf, freebayes.20:27000000-27100000.baq.20110328.vcf, freebayes.20:27100000-27200000.baq.20110328.vcf, freebayes.20:27200000-27300000.baq.20110328.vcf, freebayes.20:27300000-27400000.baq.20110328.vcf, freebayes.20:27400000-27500000.baq.20110328.vcf, freebayes.20:27500000-27600000.baq.20110328.vcf, freebayes.20:27600000-27700000.baq.20110328.vcf, freebayes.20:27700000-27800000.baq.20110328.vcf, freebayes.20:27800000-27900000.baq.20110328.vcf, freebayes.20:27900000-28000000.baq.20110328.vcf, freebayes.20:28000000-28100000.baq.20110328.vcf, freebayes.20:28100000-28200000.baq.20110328.vcf, freebayes.20:28200000-28300000.baq.20110328.vcf, freebayes.20:28300000-28400000.baq.20110328.vcf, freebayes.20:28400000-28500000.baq.20110328.vcf, freebayes.20:28500000-28600000.baq.20110328.vcf, freebayes.20:28600000-28700000.baq.20110328.vcf, freebayes.20:28700000-28800000.baq.20110328.vcf, freebayes.20:28800000-28900000.baq.20110328.vcf, freebayes.20:28900000-29000000.baq.20110328.vcf, freebayes.20:29000000-29100000.baq.20110328.vcf, freebayes.20:29100000-29200000.baq.20110328.vcf, freebayes.20:29200000-29300000.baq.20110328.vcf, freebayes.20:29300000-29400000.baq.20110328.vcf, freebayes.20:29400000-29500000.baq.20110328.vcf, freebayes.20:29500000-29600000.baq.20110328.vcf, freebayes.20:29600000-29700000.baq.20110328.vcf, freebayes.20:29700000-29800000.baq.20110328.vcf, freebayes.20:29800000-29900000.baq.20110328.vcf, freebayes.20:29900000-30000000.baq.20110328.vcf, freebayes.20:30000000-30100000.baq.20110328.vcf, freebayes.20:30100000-30200000.baq.20110328.vcf, freebayes.20:30200000-30300000.baq.20110328.vcf, freebayes.20:30300000-30400000.baq.20110328.vcf, freebayes.20:30400000-30500000.baq.20110328.vcf, freebayes.20:30500000-30600000.baq.20110328.vcf, freebayes.20:30600000-30700000.baq.20110328.vcf, freebayes.20:30700000-30800000.baq.20110328.vcf, freebayes.20:30800000-30900000.baq.20110328.vcf, freebayes.20:30900000-31000000.baq.20110328.vcf, freebayes.20:31000000-31100000.baq.20110328.vcf, freebayes.20:31100000-31200000.baq.20110328.vcf, freebayes.20:31200000-31300000.baq.20110328.vcf, freebayes.20:31300000-31400000.baq.20110328.vcf, freebayes.20:31400000-31500000.baq.20110328.vcf, freebayes.20:31500000-31600000.baq.20110328.vcf, freebayes.20:31600000-31700000.baq.20110328.vcf, freebayes.20:31700000-31800000.baq.20110328.vcf, freebayes.20:31800000-31900000.baq.20110328.vcf, freebayes.20:31900000-32000000.baq.20110328.vcf, freebayes.20:32000000-32100000.baq.20110328.vcf, freebayes.20:32100000-32200000.baq.20110328.vcf, freebayes.20:32200000-32300000.baq.20110328.vcf, freebayes.20:32300000-32400000.baq.20110328.vcf, freebayes.20:32400000-32500000.baq.20110328.vcf, freebayes.20:32500000-32600000.baq.20110328.vcf, freebayes.20:32600000-32700000.baq.20110328.vcf, freebayes.20:32700000-32800000.baq.20110328.vcf, freebayes.20:32800000-32900000.baq.20110328.vcf, freebayes.20:32900000-33000000.baq.20110328.vcf, freebayes.20:33000000-33100000.baq.20110328.vcf, freebayes.20:33100000-33200000.baq.20110328.vcf, freebayes.20:33200000-33300000.baq.20110328.vcf, freebayes.20:33300000-33400000.baq.20110328.vcf, freebayes.20:33400000-33500000.baq.20110328.vcf, freebayes.20:33500000-33600000.baq.20110328.vcf, freebayes.20:33600000-33700000.baq.20110328.vcf, freebayes.20:33700000-33800000.baq.20110328.vcf, freebayes.20:33800000-33900000.baq.20110328.vcf, freebayes.20:33900000-34000000.baq.20110328.vcf, freebayes.20:34000000-34100000.baq.20110328.vcf, freebayes.20:34100000-34200000.baq.20110328.vcf, freebayes.20:34200000-34300000.baq.20110328.vcf, freebayes.20:34300000-34400000.baq.20110328.vcf, freebayes.20:34400000-34500000.baq.20110328.vcf, freebayes.20:34500000-34600000.baq.20110328.vcf, freebayes.20:34600000-34700000.baq.20110328.vcf, freebayes.20:34700000-34800000.baq.20110328.vcf, freebayes.20:34800000-34900000.baq.20110328.vcf, freebayes.20:34900000-35000000.baq.20110328.vcf, freebayes.20:35000000-35100000.baq.20110328.vcf, freebayes.20:35100000-35200000.baq.20110328.vcf, freebayes.20:35200000-35300000.baq.20110328.vcf, freebayes.20:35300000-35400000.baq.20110328.vcf, freebayes.20:35400000-35500000.baq.20110328.vcf, freebayes.20:35500000-35600000.baq.20110328.vcf, freebayes.20:35600000-35700000.baq.20110328.vcf, freebayes.20:35700000-35800000.baq.20110328.vcf, freebayes.20:35800000-35900000.baq.20110328.vcf, freebayes.20:35900000-36000000.baq.20110328.vcf, freebayes.20:36000000-36100000.baq.20110328.vcf, freebayes.20:36100000-36200000.baq.20110328.vcf, freebayes.20:36200000-36300000.baq.20110328.vcf, freebayes.20:36300000-36400000.baq.20110328.vcf, freebayes.20:36400000-36500000.baq.20110328.vcf, freebayes.20:36500000-36600000.baq.20110328.vcf, freebayes.20:36600000-36700000.baq.20110328.vcf, freebayes.20:36700000-36800000.baq.20110328.vcf, freebayes.20:36800000-36900000.baq.20110328.vcf, freebayes.20:36900000-37000000.baq.20110328.vcf, freebayes.20:37000000-37100000.baq.20110328.vcf, freebayes.20:37100000-37200000.baq.20110328.vcf, freebayes.20:37200000-37300000.baq.20110328.vcf, freebayes.20:37300000-37400000.baq.20110328.vcf, freebayes.20:37400000-37500000.baq.20110328.vcf, freebayes.20:37500000-37600000.baq.20110328.vcf, freebayes.20:37600000-37700000.baq.20110328.vcf, freebayes.20:37700000-37800000.baq.20110328.vcf, freebayes.20:37800000-37900000.baq.20110328.vcf, freebayes.20:37900000-38000000.baq.20110328.vcf, freebayes.20:38000000-38100000.baq.20110328.vcf, freebayes.20:38100000-38200000.baq.20110328.vcf, freebayes.20:38200000-38300000.baq.20110328.vcf, freebayes.20:38300000-38400000.baq.20110328.vcf, freebayes.20:38400000-38500000.baq.20110328.vcf, freebayes.20:38500000-38600000.baq.20110328.vcf, freebayes.20:38600000-38700000.baq.20110328.vcf, freebayes.20:38700000-38800000.baq.20110328.vcf, freebayes.20:38800000-38900000.baq.20110328.vcf, freebayes.20:38900000-39000000.baq.20110328.vcf, freebayes.20:39000000-39100000.baq.20110328.vcf, freebayes.20:39100000-39200000.baq.20110328.vcf, freebayes.20:39200000-39300000.baq.20110328.vcf, freebayes.20:39300000-39400000.baq.20110328.vcf, freebayes.20:39400000-39500000.baq.20110328.vcf, freebayes.20:39500000-39600000.baq.20110328.vcf, freebayes.20:39600000-39700000.baq.20110328.vcf, freebayes.20:39700000-39800000.baq.20110328.vcf, freebayes.20:39800000-39900000.baq.20110328.vcf, freebayes.20:39900000-40000000.baq.20110328.vcf, freebayes.20:40000000-40100000.baq.20110328.vcf, freebayes.20:40100000-40200000.baq.20110328.vcf, freebayes.20:40200000-40300000.baq.20110328.vcf, freebayes.20:40300000-40400000.baq.20110328.vcf, freebayes.20:40400000-40500000.baq.20110328.vcf, freebayes.20:40500000-40600000.baq.20110328.vcf, freebayes.20:40600000-40700000.baq.20110328.vcf, freebayes.20:40700000-40800000.baq.20110328.vcf, freebayes.20:40800000-40900000.baq.20110328.vcf, freebayes.20:40900000-41000000.baq.20110328.vcf, freebayes.20:41000000-41100000.baq.20110328.vcf, freebayes.20:41100000-41200000.baq.20110328.vcf, freebayes.20:41200000-41300000.baq.20110328.vcf, freebayes.20:41300000-41400000.baq.20110328.vcf, freebayes.20:41400000-41500000.baq.20110328.vcf, freebayes.20:41500000-41600000.baq.20110328.vcf, freebayes.20:41600000-41700000.baq.20110328.vcf, freebayes.20:41700000-41800000.baq.20110328.vcf, freebayes.20:41800000-41900000.baq.20110328.vcf, freebayes.20:41900000-42000000.baq.20110328.vcf, freebayes.20:42000000-42100000.baq.20110328.vcf, freebayes.20:42100000-42200000.baq.20110328.vcf, freebayes.20:42200000-42300000.baq.20110328.vcf, freebayes.20:42300000-42400000.baq.20110328.vcf, freebayes.20:42400000-42500000.baq.20110328.vcf, freebayes.20:42500000-42600000.baq.20110328.vcf, freebayes.20:42600000-42700000.baq.20110328.vcf, freebayes.20:42700000-42800000.baq.20110328.vcf, freebayes.20:42800000-42900000.baq.20110328.vcf, freebayes.20:42900000-43000000.baq.20110328.vcf, freebayes.20:43000000-43100000.baq.20110328.vcf, freebayes.20:43100000-43200000.baq.20110328.vcf, freebayes.20:43200000-43300000.baq.20110328.vcf, freebayes.20:43300000-43400000.baq.20110328.vcf, freebayes.20:43400000-43500000.baq.20110328.vcf, freebayes.20:43500000-43600000.baq.20110328.vcf, freebayes.20:43600000-43700000.baq.20110328.vcf, freebayes.20:43700000-43800000.baq.20110328.vcf, freebayes.20:43800000-43900000.baq.20110328.vcf, freebayes.20:43900000-44000000.baq.20110328.vcf, freebayes.20:44000000-44100000.baq.20110328.vcf, freebayes.20:44100000-44200000.baq.20110328.vcf, freebayes.20:44200000-44300000.baq.20110328.vcf, freebayes.20:44300000-44400000.baq.20110328.vcf, freebayes.20:44400000-44500000.baq.20110328.vcf, freebayes.20:44500000-44600000.baq.20110328.vcf, freebayes.20:44600000-44700000.baq.20110328.vcf, freebayes.20:44700000-44800000.baq.20110328.vcf, freebayes.20:44800000-44900000.baq.20110328.vcf, freebayes.20:44900000-45000000.baq.20110328.vcf, freebayes.20:45000000-45100000.baq.20110328.vcf, freebayes.20:45100000-45200000.baq.20110328.vcf, freebayes.20:45200000-45300000.baq.20110328.vcf, freebayes.20:45300000-45400000.baq.20110328.vcf, freebayes.20:45400000-45500000.baq.20110328.vcf, freebayes.20:45500000-45600000.baq.20110328.vcf, freebayes.20:45600000-45700000.baq.20110328.vcf, freebayes.20:45700000-45800000.baq.20110328.vcf, freebayes.20:45800000-45900000.baq.20110328.vcf, freebayes.20:45900000-46000000.baq.20110328.vcf, freebayes.20:46000000-46100000.baq.20110328.vcf, freebayes.20:46100000-46200000.baq.20110328.vcf, freebayes.20:46200000-46300000.baq.20110328.vcf, freebayes.20:46300000-46400000.baq.20110328.vcf, freebayes.20:46400000-46500000.baq.20110328.vcf, freebayes.20:46500000-46600000.baq.20110328.vcf, freebayes.20:46600000-46700000.baq.20110328.vcf, freebayes.20:46700000-46800000.baq.20110328.vcf, freebayes.20:46800000-46900000.baq.20110328.vcf, freebayes.20:46900000-47000000.baq.20110328.vcf, freebayes.20:47000000-47100000.baq.20110328.vcf, freebayes.20:47100000-47200000.baq.20110328.vcf, freebayes.20:47200000-47300000.baq.20110328.vcf, freebayes.20:47300000-47400000.baq.20110328.vcf, freebayes.20:47400000-47500000.baq.20110328.vcf, freebayes.20:47500000-47600000.baq.20110328.vcf, freebayes.20:47600000-47700000.baq.20110328.vcf, freebayes.20:47700000-47800000.baq.20110328.vcf, freebayes.20:47800000-47900000.baq.20110328.vcf, freebayes.20:47900000-48000000.baq.20110328.vcf, freebayes.20:48000000-48100000.baq.20110328.vcf, freebayes.20:48100000-48200000.baq.20110328.vcf, freebayes.20:48200000-48300000.baq.20110328.vcf, freebayes.20:48300000-48400000.baq.20110328.vcf, freebayes.20:48400000-48500000.baq.20110328.vcf, freebayes.20:48500000-48600000.baq.20110328.vcf, freebayes.20:48600000-48700000.baq.20110328.vcf, freebayes.20:48700000-48800000.baq.20110328.vcf, freebayes.20:48800000-48900000.baq.20110328.vcf, freebayes.20:48900000-49000000.baq.20110328.vcf, freebayes.20:49000000-49100000.baq.20110328.vcf, freebayes.20:49100000-49200000.baq.20110328.vcf, freebayes.20:49200000-49300000.baq.20110328.vcf, freebayes.20:49300000-49400000.baq.20110328.vcf, freebayes.20:49400000-49500000.baq.20110328.vcf, freebayes.20:49500000-49600000.baq.20110328.vcf, freebayes.20:49600000-49700000.baq.20110328.vcf, freebayes.20:49700000-49800000.baq.20110328.vcf, freebayes.20:49800000-49900000.baq.20110328.vcf, freebayes.20:49900000-50000000.baq.20110328.vcf, freebayes.20:50000000-50100000.baq.20110328.vcf, freebayes.20:50100000-50200000.baq.20110328.vcf, freebayes.20:50200000-50300000.baq.20110328.vcf, freebayes.20:50300000-50400000.baq.20110328.vcf, freebayes.20:50400000-50500000.baq.20110328.vcf, freebayes.20:50500000-50600000.baq.20110328.vcf, freebayes.20:50600000-50700000.baq.20110328.vcf, freebayes.20:50700000-50800000.baq.20110328.vcf, freebayes.20:50800000-50900000.baq.20110328.vcf, freebayes.20:50900000-51000000.baq.20110328.vcf, freebayes.20:51000000-51100000.baq.20110328.vcf, freebayes.20:51100000-51200000.baq.20110328.vcf, freebayes.20:51200000-51300000.baq.20110328.vcf, freebayes.20:51300000-51400000.baq.20110328.vcf, freebayes.20:51400000-51500000.baq.20110328.vcf, freebayes.20:51500000-51600000.baq.20110328.vcf, freebayes.20:51600000-51700000.baq.20110328.vcf, freebayes.20:51700000-51800000.baq.20110328.vcf, freebayes.20:51800000-51900000.baq.20110328.vcf, freebayes.20:51900000-52000000.baq.20110328.vcf, freebayes.20:52000000-52100000.baq.20110328.vcf, freebayes.20:52100000-52200000.baq.20110328.vcf, freebayes.20:52200000-52300000.baq.20110328.vcf, freebayes.20:52300000-52400000.baq.20110328.vcf, freebayes.20:52400000-52500000.baq.20110328.vcf, freebayes.20:52500000-52600000.baq.20110328.vcf, freebayes.20:52600000-52700000.baq.20110328.vcf, freebayes.20:52700000-52800000.baq.20110328.vcf, freebayes.20:52800000-52900000.baq.20110328.vcf, freebayes.20:52900000-53000000.baq.20110328.vcf, freebayes.20:53000000-53100000.baq.20110328.vcf, freebayes.20:53100000-53200000.baq.20110328.vcf, freebayes.20:53200000-53300000.baq.20110328.vcf, freebayes.20:53300000-53400000.baq.20110328.vcf, freebayes.20:53400000-53500000.baq.20110328.vcf, freebayes.20:53500000-53600000.baq.20110328.vcf, freebayes.20:53600000-53700000.baq.20110328.vcf, freebayes.20:53700000-53800000.baq.20110328.vcf, freebayes.20:53800000-53900000.baq.20110328.vcf, freebayes.20:53900000-54000000.baq.20110328.vcf, freebayes.20:54000000-54100000.baq.20110328.vcf, freebayes.20:54100000-54200000.baq.20110328.vcf, freebayes.20:54200000-54300000.baq.20110328.vcf, freebayes.20:54300000-54400000.baq.20110328.vcf, freebayes.20:54400000-54500000.baq.20110328.vcf, freebayes.20:54500000-54600000.baq.20110328.vcf, freebayes.20:54600000-54700000.baq.20110328.vcf, freebayes.20:54700000-54800000.baq.20110328.vcf, freebayes.20:54800000-54900000.baq.20110328.vcf, freebayes.20:54900000-55000000.baq.20110328.vcf, freebayes.20:55000000-55100000.baq.20110328.vcf, freebayes.20:55100000-55200000.baq.20110328.vcf, freebayes.20:55200000-55300000.baq.20110328.vcf, freebayes.20:55300000-55400000.baq.20110328.vcf, freebayes.20:55400000-55500000.baq.20110328.vcf, freebayes.20:55500000-55600000.baq.20110328.vcf, freebayes.20:55600000-55700000.baq.20110328.vcf, freebayes.20:55700000-55800000.baq.20110328.vcf, freebayes.20:55800000-55900000.baq.20110328.vcf, freebayes.20:55900000-56000000.baq.20110328.vcf, freebayes.20:56000000-56100000.baq.20110328.vcf, freebayes.20:56100000-56200000.baq.20110328.vcf, freebayes.20:56200000-56300000.baq.20110328.vcf, freebayes.20:56300000-56400000.baq.20110328.vcf, freebayes.20:56400000-56500000.baq.20110328.vcf, freebayes.20:56500000-56600000.baq.20110328.vcf, freebayes.20:56600000-56700000.baq.20110328.vcf, freebayes.20:56700000-56800000.baq.20110328.vcf, freebayes.20:56800000-56900000.baq.20110328.vcf, freebayes.20:56900000-57000000.baq.20110328.vcf, freebayes.20:57000000-57100000.baq.20110328.vcf, freebayes.20:57100000-57200000.baq.20110328.vcf, freebayes.20:57200000-57300000.baq.20110328.vcf, freebayes.20:57300000-57400000.baq.20110328.vcf, freebayes.20:57400000-57500000.baq.20110328.vcf, freebayes.20:57500000-57600000.baq.20110328.vcf, freebayes.20:57600000-57700000.baq.20110328.vcf, freebayes.20:57700000-57800000.baq.20110328.vcf, freebayes.20:57800000-57900000.baq.20110328.vcf, freebayes.20:57900000-58000000.baq.20110328.vcf, freebayes.20:58000000-58100000.baq.20110328.vcf, freebayes.20:58100000-58200000.baq.20110328.vcf, freebayes.20:58200000-58300000.baq.20110328.vcf, freebayes.20:58300000-58400000.baq.20110328.vcf, freebayes.20:58400000-58500000.baq.20110328.vcf, freebayes.20:58500000-58600000.baq.20110328.vcf, freebayes.20:58600000-58700000.baq.20110328.vcf, freebayes.20:58700000-58800000.baq.20110328.vcf, freebayes.20:58800000-58900000.baq.20110328.vcf, freebayes.20:58900000-59000000.baq.20110328.vcf, freebayes.20:59000000-59100000.baq.20110328.vcf, freebayes.20:59100000-59200000.baq.20110328.vcf, freebayes.20:59200000-59300000.baq.20110328.vcf, freebayes.20:59300000-59400000.baq.20110328.vcf, freebayes.20:59400000-59500000.baq.20110328.vcf, freebayes.20:59500000-59600000.baq.20110328.vcf, freebayes.20:59600000-59700000.baq.20110328.vcf, freebayes.20:59700000-59800000.baq.20110328.vcf, freebayes.20:59800000-59900000.baq.20110328.vcf, freebayes.20:59900000-60000000.baq.20110328.vcf, freebayes.20:60000000-60100000.baq.20110328.vcf, freebayes.20:60100000-60200000.baq.20110328.vcf, freebayes.20:60200000-60300000.baq.20110328.vcf, freebayes.20:60300000-60400000.baq.20110328.vcf, freebayes.20:60400000-60500000.baq.20110328.vcf, freebayes.20:60500000-60600000.baq.20110328.vcf, freebayes.20:60600000-60700000.baq.20110328.vcf, freebayes.20:60700000-60800000.baq.20110328.vcf, freebayes.20:60800000-60900000.baq.20110328.vcf, freebayes.20:60900000-61000000.baq.20110328.vcf, freebayes.20:61000000-61100000.baq.20110328.vcf, freebayes.20:61100000-61200000.baq.20110328.vcf, freebayes.20:61200000-61300000.baq.20110328.vcf, freebayes.20:61300000-61400000.baq.20110328.vcf, freebayes.20:61400000-61500000.baq.20110328.vcf, freebayes.20:61500000-61600000.baq.20110328.vcf, freebayes.20:61600000-61700000.baq.20110328.vcf, freebayes.20:61700000-61800000.baq.20110328.vcf, freebayes.20:61800000-61900000.baq.20110328.vcf, freebayes.20:61900000-62000000.baq.20110328.vcf, freebayes.20:62000000-62100000.baq.20110328.vcf, freebayes.20:62100000-62200000.baq.20110328.vcf, freebayes.20:62200000-62300000.baq.20110328.vcf, freebayes.20:62300000-62400000.baq.20110328.vcf, freebayes.20:62400000-62500000.baq.20110328.vcf, freebayes.20:62500000-62600000.baq.20110328.vcf, freebayes.20:62600000-62700000.baq.20110328.vcf, freebayes.20:62700000-62800000.baq.20110328.vcf, freebayes.20:62800000-62900000.baq.20110328.vcf, freebayes.20:62900000-63000000.baq.20110328.vcf, freebayes.20:63000000-63025520.baq.20110328.vcf +#CHROM POS ID REF ALT QUAL FILTER INFO +20 458502 . G GA 4567.01 PASS AA=20;AB=0.61111;ABA=14;ABP=6.8707;ABR=22;AC=38;AF=0.0544;AN=698;BL=374;BR=1129;BVAR;BaseQRankSum=13.364;DP=15979;DP4=1882,2188,45,37;Dels=0.00;EL=5;EPP=13.868;ER=15;FR;FS=6.503;HETAR=11;HOMA=2;HOMR=985;HP=1;HPLen=2;HR=2;HRun=0;HU=G;INDEL;INS;InbreedingCoeff=0.0157;IndelType=INS.NOVEL_1.Novel_A.;LEN=1;LRB=0.50233;LRBP=826.56;MQ=66.16;MQ0Fraction=0.0110;MQM=70.5;MQRankSum=-3.158;NF;NR;NS=998;PP;PV4=0.15,1,0.42,0.15;RA=3173;RL=1;RPP=38.188;RR=19;RUN=1;ReadPosRankSum=-2.346;SAB=0.7;SAF=14;SAP=9.959;SAR=6;SC=GGGCGTGGTGGTGCATGTAAT;SRB=0.50047;SRF=1588;SRP=3.0165;SRR=1585;TC;TR=9;TU=GGT;VQSLOD=10.0079;set=Intersection;sumGLbyD=23.94 +20 573764 . TA T 591.51 PASS AC=91;AF=0.1987;AN=458;BaseQRankSum=0.137;DP=519;FS=3.153;HRun=1;HaplotypeScore=14.0744;InbreedingCoeff=0.1460;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;MQ=48.16;MQ0=26;MQ0Fraction=0.0501;MQRankSum=-1.636;QD=3.63;ReadPosRankSum=-4.140;SB=-408.14;VQSLOD=5.2458;set=VQSR +20 766143 . C CATCTGGTA 5521.70 PASS AA=24;AB=0.5;ABA=18;ABP=3.0103;ABR=18;AC=14;AF=0.0289;AF1=0.02038;AN=484;BL=655;BR=1542;BVAR;BaseQRankSum=3.801;CI95=0.01549,0.02655;DP=11749;DP4=2222,1998,14,8;Dels=0.00;EL=9;EPP=6.2675;ER=15;FQ=999;FR;FS=2.941;HETAR=9;HOMA=4;HOMR=901;HP=2;HPLen=2;HR=1;HRun=0;HU=A;INDEL;INS;InbreedingCoeff=0.0515;IndelType=INS.NumRepetitions_1.EventLength_8.;LEN=8;LRB=0.40373;LRBP=780.64;MQ=56.81;MQ0Fraction=0.0253;MQM=22.167;MQRankSum=-4.809;NF;NR;NS=914;PP;PV4=0.39,1,5.8e-07,1;RA=3093;RL=6;RPP=16.039;RR=18;RUN=1;ReadPosRankSum=-2.827;SAB=0.625;SAF=15;SAP=6.2675;SAR=9;SC=GCTTTAAATTCATCTGGTACT;SRB=0.61623;SRF=1906;SRP=365.95;SRR=1187;TC;TR=1;TU=A;VQSLOD=7.0268;set=Intersection;sumGLbyD=50.23 +20 997076 rs11467490 CTG C 15379.78 PASS AA=195;AB=0.59878;ABA=132;ABP=30.896;ABR=197;AC=173;AF=0.14562;AN=1188;BL=7664;BR=7309;BVAR;BaseQRankSum=21.853;DB;DEL;DP=27127;DP4=1801,2002,241,282;Dels=0.13;EL=100;EPP=3.2887;ER=95;FQ=999;FR;FS=6.591;HETAR=77;HOMA=42;HOMR=815;HP=1;HPLen=1;HR=1;HRun=0;HU=T;INDEL;InbreedingCoeff=0.1284;IndelType=DEL.NumRepetitions_1.EventLength_2.RepeatExpansion_TG.;LEN=2;LRB=0.023709;LRBP=21.287;MQ=61.18;MQ0Fraction=0.0214;MQM=43.041;MQRankSum=6.886;NF;NR;NS=934;PP;PV4=0.61,1.5e-78,1,1;RA=2800;RL=120;RPP=25.56;RR=75;RUN=1;ReadPosRankSum=4.504;SAB=0.62051;SAF=121;SAP=27.609;SAR=74;SC=CAGCTAATTACTGTATTTTTA;SRB=0.49821;SRF=1395;SRP=3.0879;SRR=1405;TC;TR=1;TU=T;VQSLOD=8.9396;set=Intersection;sumGLbyD=16.76 +20 1042261 rs10597473 CCCTG C 168658.05 PASS AA=4481;AB=0.29043;ABA=2128;ABP=1147.1;ABR=871;AC=1172;AF=0.97830;AN=1198;BL=169975;BR=194027;BVAR;BaseQRankSum=4.599;DB;DEL;DP=29418;DP4=29,47,1441,2403;Dels=0.84;EL=2358;EPP=29.772;ER=2123;FR;FS=9.122;HETAR=482;HOMA=559;HOMR=30;HP=2;HPLen=3;HR=3;HRun=0;HU=C;INDEL;InbreedingCoeff=0.0470;IndelType=DEL.NumRepetitions_2.EventLength_4.;LEN=4;LRB=0.066077;LRBP=3454.1;MQ=104.58;MQ0=4;MQ0Fraction=0.0014;MQM=58.257;MQRankSum=-3.368;NF;NR;NS=1071;PP;PV4=0.91,6.8e-09,2.8e-05,1;RA=1039;RL=2088;RPP=48.09;RR=2393;RUN=1;ReadPosRankSum=5.288;SAB=0.41442;SAF=1857;SAP=288.09;SAR=2624;SC=CCAAACCCAACCCTGCCTGGC;SRB=0.48893;SRF=508;SRP=4.1159;SRR=531;TC;TR=8;TU=CCTG;VQSLOD=8.5148;dbSNP=120;set=Intersection;sumGLbyD=59.79 +20 1046297 rs33956316 C CT,CTT,CTTT 17698 PASS ABR=408;AC=432,79,230;AF=0.39779,0.07274,0.21179;BVAR;BaseQRankSum=-8.413;DB;DP=15649;DP4=147,199,534,436;FR;FS=11.580;HOMA=97;HOMR=457;HP=20;HR=16;HU=T;HaplotypeScore=16.0590;INDEL;INS;InbreedingCoeff=0.6018;IndelType=MULTIALLELIC_INDEL;KGPilot123;MQ0=19;MQ0Fraction=0.0093;MQRankSum=7.992;NF;NR;NS=767;PP;PV4=6e-05,1,1,1;QD=8.18;RA=1183;RUN=1;ReadPosRankSum=2.684;SB=-6384.08;SC=GGAAAATTTTCTTTTTTTTTT;SRB=0.40913;SRF=484;SRP=87.859;SRR=699;TC;TR=16;TU=T;VQSLOD=8.4941;dbSNP=132;set=Intersection +20 1405740 . T TA 257.28 PASS AF=0.0188;BaseQRankSum=-0.745;DP=3769;Dels=0.00;FS=0.742;HPLen=9;HRun=9;InbreedingCoeff=0.0462;IndelType=INS.NumRepetitions_9.EventLength_1.RepeatExpansion_A.;MQ0Fraction=0.0151;MQRankSum=-0.090;ReadPosRankSum=-1.582;VQSLOD=5.6502;set=Intersection;sumGLbyD=6.94 +20 1690501 . TC T 27928 PASS AA=108;AB=0.91372;ABA=100;ABP=1726.1;ABR=1059;AC=35;AF=0.02966;AN=1180;BL=593;BR=6973;BVAR;BaseQRankSum=7.567;DEL;DP=10612;Dels=0.01;EL=50;EPP=4.2971;ER=58;FS=0.000;HETAR=378;HOMA=184;HOMR=477;HRun=1;InbreedingCoeff=0.0495;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;LEN=1;LRB=0.84325;LRBP=11685;MQ0=0;MQ0Fraction=0.0000;MQM=87.361;MQRankSum=4.088;NS=1045;RA=3125;RL=3;RPP=212.2;RR=105;RUN=1;ReadPosRankSum=-13.096;SAB=0.56481;SAF=61;SAP=6.9511;SAR=47;SRB=0.51776;SRF=1618;SRP=11.572;SRR=1507;VQSLOD=3.9824;set=filterInVQSR-2of5;sumGLbyD=4.07 +20 1991285 rs113891396 TAA T,TA,TAAA,TAAAAA,TAAAAAA,TAAAAAAA,TAAAAAAAA 39235.36 PASS AC=5,251,20,39,188,52,79;AF=0.0056,0.2789,0.0222,0.0433,0.2089,0.0578,0.0878;AN=900;BVAR;BaseQRankSum=1.124;DB;DEL;DP=54393;DP4=906,772,824,579;Dels=0.21;FR;FS=37.525;HP=12;HR=12;HRun=12;HU=A;INDEL;INS;InbreedingCoeff=0.6891;IndelType=MULTIALLELIC_INDEL;MQ=76.81;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-6.593;NF;NR;PP;PV4=0.0087,1,6.3e-19,1;RUN=1;ReadPosRankSum=-2.184;SC=ATCTGCCACTTAAAAAAAAAA;TC;TR=12;TU=A;VQSLOD=9.0007;dbSNP=132;set=Intersection;sumGLbyD=11.45 +20 2355911 . TA T 11723 PASS AA=79;AB=0.9393;ABA=57;ABP=1577;ABR=882;AC=38;AF=0.0411;AN=924;BL=644;BR=5536;BVAR;BaseQRankSum=2.434;DEL;DP=9687;Dels=0.00;EL=45;EPP=6.3362;ER=34;FS=3.043;HETAR=321;HOMA=182;HOMR=555;HRun=5;InbreedingCoeff=0.0412;IndelType=DEL.NumRepetitions_5.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.79159;LRBP=8411.9;MQ0=0;MQ0Fraction=0.0000;MQM=70.848;MQRankSum=0.137;NS=1058;RA=3415;RL=3;RPP=149.49;RR=76;RUN=1;ReadPosRankSum=-12.116;SAB=0.44304;SAF=35;SAP=5.2367;SAR=44;SRB=0.43572;SRF=1488;SRP=125.55;SRR=1927;VQSLOD=3.8910;set=filterInVQSR-2of5;sumGLbyD=4.88 +20 2771621 rs11479849 GT G,GTT 1605.60 PASS AA=80;AB=0.79825;ABA=69;ABP=267.24;ABR=273;AC=79,91;AF=0.06551,0.07546;AN=1206;BL=2593;BR=3805;BVAR;BaseQRankSum=7.825;DB;DP=9790;Dels=0.04;EL=37;EPP=3.9875;ER=43;FR;FS=4.751;HETAR=62;HOMA=5;HOMR=958;HP=11;HR=11;HRun=11;HU=T;INS;InbreedingCoeff=0.2646;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.18943;LRBP=501.57;MQ0=0;MQ0Fraction=0.0000;MQM=52.45;MQRankSum=-0.560;NF;NR;NS=1025;PP;RA=3949;RL=29;RPP=16.148;RR=51;RUN=1;ReadPosRankSum=-2.397;SAB=0.525;SAF=42;SAP=3.4446;SAR=38;SC=TCATTTTAACGTTTTTTTTTT;SRB=0.54368;SRF=2147;SRP=68.46;SRR=1802;TC;TR=11;TU=T;VQSLOD=3.5989;set=filterInVQSR-2of5;sumGLbyD=3.92 +20 2891235 . G GT,GTTT 2869.87 PASS AC=236,246;AF=0.2803,0.2922;AN=842;BaseQRankSum=8.979;DP=1067;FS=3.911;HaplotypeScore=20.3595;InbreedingCoeff=0.6511;IndelType=MULTIALLELIC_INDEL;MQ=44.86;MQ0=114;MQ0Fraction=0.1068;MQRankSum=-2.273;QD=4.00;ReadPosRankSum=-6.601;SB=-991.85;VQSLOD=5.4379;set=VQSR +20 3033550 . TGAG T 2005.90 PASS AA=34;AB=0.51429;ABA=34;ABP=3.1344;ABR=36;AC=22;AF=0.0332;AN=662;BL=1374;BR=1649;BVAR;BaseQRankSum=5.192;DEL;DP=14639;DP4=2271,1492,12,21;Dels=0.02;EL=19;EPP=4.0322;ER=15;FR;FS=16.657;HETAR=17;HOMA=0;HOMR=914;HP=1;HPLen=1;HR=1;HRun=0;HU=G;INDEL;InbreedingCoeff=-0.0454;IndelType=DEL.NumRepetitions_1.EventLength_3.;LEN=3;LRB=0.090969;LRBP=57.333;MQ=53.99;MQ0Fraction=0.0304;MQM=46.735;MQRankSum=1.938;NF;NR;NS=931;PP;PV4=0.0068,9.4e-05,1,1;RA=2985;RL=11;RPP=12.207;RR=23;RUN=1;ReadPosRankSum=-0.466;SAB=0.41176;SAF=14;SAP=5.3095;SAR=20;SC=CTTGGGAGGCTGAGGTGGGAG;SRB=0.62781;SRF=1874;SRP=426.52;SRR=1111;TC;TR=1;TU=G;VQSLOD=8.9194;set=Intersection;sumGLbyD=24.41 +20 3873327 rs61519218 A AAG 683.85 PASS AC=25;AF=0.0313;AN=800;BaseQRankSum=4.839;DB;DP=1718;FS=4.265;HRun=0;HaplotypeScore=20.5789;InbreedingCoeff=0.1055;IndelType=INS.NOVEL_2.;MQ=53.70;MQ0=37;MQ0Fraction=0.0215;MQRankSum=2.468;QD=6.30;ReadPosRankSum=4.254;SB=-403.21;VQSLOD=6.1858;set=VQSR +20 4028835 . GC G 2511.30 PASS AA=66;AB=0.56954;ABA=65;ABP=9.3521;ABR=86;AC=22;AF=0.01836;AN=1198;BL=2303;BR=2463;BVAR;BaseQRankSum=7.621;DEL;DP=22795;DP4=1714,2774,22,37;Dels=0.02;EL=34;EPP=3.1419;ER=32;FQ=999;FR;FS=2.095;HETAR=21;HOMA=0;HOMR=1050;HP=2;HPLen=2;HR=2;HRun=2;HU=C;INDEL;InbreedingCoeff=0.0125;IndelType=DEL.NumRepetitions_2.EventLength_1.RepeatExpansion_C.;LEN=1;LRB=0.033571;LRBP=14.674;MQ=108.09;MQ0=0;MQ0Fraction=0.0000;MQM=53.318;MQRankSum=5.257;NF;NR;NS=1071;PP;PV4=1,5.4e-13,1,0.075;RA=6185;RL=36;RPP=4.1947;RR=30;RUN=1;ReadPosRankSum=-1.059;SAB=0.45455;SAF=30;SAP=4.1947;SAR=36;SC=TGCTGTCACTGCCTTCTCCTA;SRB=0.42118;SRF=2605;SRP=336.76;SRR=3580;TC;TR=2;TU=C;VQSLOD=10.2409;set=Intersection;sumGLbyD=12.71 +20 4039609 rs67812039 G GA 43457 PASS AA=909;AB=0.54639;ABA=572;ABP=26.583;ABR=689;AC=302;AF=0.3455;AN=874;BL=37070;BR=38211;BVAR;BaseQRankSum=20.147;DB;DP=25595;DP4=1483,1374,528,542;Dels=0.00;EL=467;EPP=4.5033;ER=442;FQ=999;FR;FS=5.441;HETAR=243;HOMA=127;HOMR=608;HP=4;HPLen=3;HR=3;HRun=3;HU=A;INDEL;INS;InbreedingCoeff=0.1388;IndelType=INS.NumRepetitions_3.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.015157;LRBP=40.563;MQ=119.50;MQ0=0;MQ0Fraction=0.0000;MQM=83.197;MQRankSum=1.080;NF;NR;NS=978;PP;PV4=0.16,1,3.6e-12,1;RA=3033;RL=443;RPP=4.274;RR=466;RUN=1;ReadPosRankSum=-1.000;SAB=0.32233;SAF=293;SAP=252.24;SAR=616;SC=TATGTTGGGAGAAATATCAGT;SRB=0.38378;SRF=1164;SRP=358.85;SRR=1869;TC;TR=4;TU=AG;VQSLOD=9.9146;dbSNP=130;set=Intersection;sumGLbyD=16.79 +20 4390056 . TC T 49312 PASS AA=91;AB=0.94353;ABA=86;ABP=2605.4;ABR=1437;AC=39;AF=0.03160;AN=1234;BL=6823;BR=731;BVAR;BaseQRankSum=2.727;DEL;DP=13149;Dels=0.00;EL=41;EPP=4.9431;ER=50;FS=4.002;HETAR=465;HOMA=313;HOMR=292;HRun=3;InbreedingCoeff=0.0326;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;LEN=1;LRB=0.80646;LRBP=10671;MQ0=0;MQ0Fraction=0.0000;MQM=69.824;MQRankSum=-0.903;NS=1073;RA=3078;RL=89;RPP=183.62;RR=2;RUN=1;ReadPosRankSum=-12.526;SAB=0.45055;SAF=41;SAP=4.9431;SAR=50;SRB=0.52567;SRF=1618;SRP=20.622;SRR=1460;VQSLOD=4.3235;set=Intersection;sumGLbyD=3.53 +20 4474622 . TA T,TAA,TAAA,TAAAA 94522.28 PASS ABR=114;AC=38,68,16,900;AF=0.03333,0.05965,0.01404,0.78947;AN=1140;BVAR;BaseQRankSum=9.741;DB;DP=16656;Dels=0.00;FR;FS=2.355;HOMA=3;HOMR=936;HP=10;HPLen=10;HR=10;HRun=10;HU=A;INS;InbreedingCoeff=0.4516;IndelType=MULTIALLELIC_INDEL;MQ0=2;MQ0Fraction=0.0008;MQRankSum=-4.096;NF;NR;NS=980;PP;RA=3766;RUN=1;ReadPosRankSum=2.380;SC=AGAAAAAAATTAAAAAAAAAA;SRB=0.49734;SRF=1873;SRP=3.2409;SRR=1893;TC;TR=10;TU=A;VQSLOD=8.8186;set=Intersection;sumGLbyD=38.79 +20 4824911 . AC A 41998.70 PASS AC=1172;AF=0.97342;AN=1204;BaseQRankSum=8.604;DP=3615;FS=9.934;HRun=1;HaplotypeScore=39.6843;InbreedingCoeff=0.0980;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;MQ=129.80;MQ0=1;MQ0Fraction=0.0003;MQRankSum=3.378;QD=11.62;ReadPosRankSum=6.967;SB=-16955.28;VQSLOD=4.2689;set=VQSR +20 4839897 rs35881880 TAA T,TA,TAAA,TAAAAA 3906.80 PASS AC=12,95,137,189;AF=0.01024,0.08106,0.11689,0.16126;AN=1172;BVAR;BaseQRankSum=15.271;DB;DEL;DP=15105;Dels=0.04;FR;FS=43.567;HP=19;HR=13;HRun=13;HU=A;INS;InbreedingCoeff=0.5716;IndelType=MULTIALLELIC_INDEL;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-2.569;NF;NR;PP;RUN=1;ReadPosRankSum=-13.794;SC=TGTTAAAAAATAAAAAAAAAA;TC;TR=13;TU=A;VQSLOD=8.1773;set=Intersection;sumGLbyD=3.77 +20 5507414 . G GCC 439.08 PASS AC=23;AF=0.01876;AN=1226;BaseQRankSum=3.051;DP=3023;FS=3.636;HRun=1;HaplotypeScore=30.3104;InbreedingCoeff=0.0204;IndelType=INS.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;MQ=112.09;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-2.065;QD=2.85;ReadPosRankSum=-2.709;SB=-302.22;VQSLOD=4.4311;set=VQSR +20 5609676 . GA G,GAA 799.89 PASS AA=42;AB=0.79096;ABA=37;ABP=133.16;ABR=140;AC=43,65;AF=0.03607,0.05453;AF1=0.02826;AN=1192;BL=1360;BR=2334;BVAR;BaseQRankSum=5.069;CI95=0.01242,0.04037;DP=15610;DP4=1548,2441,21,30;Dels=0.02;EL=18;EPP=4.8716;ER=24;FQ=12.1;FR;FS=0.000;HETAR=36;HOMA=1;HOMR=991;HP=13;HPLen=10;HR=10;HRun=10;HU=A;INDEL;INS;InbreedingCoeff=0.2001;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.26367;LRBP=560.68;MQ=63.29;MQ0Fraction=0.0003;MQM=44.143;MQRankSum=1.755;NF;NR;NS=1028;PP;PV4=0.77,1,0.0087,0.0053;RA=4114;RL=15;RPP=10.455;RR=27;RUN=1;ReadPosRankSum=-2.978;SAB=0.5;SAF=21;SAP=3.0103;SAR=21;SC=AAAAAAGAAAGAAAAAAAAAA;SRB=0.39742;SRF=1635;SRP=379;SRR=2479;TC;TR=11;TU=AAAG;VQSLOD=4.1229;set=filterInVQSR-2of5;sumGLbyD=7.95 +20 5736211 rs35303106 CT C,CTT 4384.40 PASS AA=117;AB=0.71499;ABA=116;ABP=166.4;ABR=291;AC=32,145;AF=0.02712,0.12288;AN=1180;BL=5556;BR=4901;BVAR;BaseQRankSum=2.708;DB;DP=9157;Dels=0.01;EL=54;EPP=4.5136;ER=63;FR;FS=2.802;HETAR=79;HOMA=1;HOMR=837;HP=16;HR=11;HRun=11;HU=T;INS;InbreedingCoeff=0.1903;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.062637;LRBP=92.1;MQ0Fraction=0.0273;MQM=48.932;MQRankSum=3.654;NF;NR;NS=917;PP;RA=2785;RL=79;RPP=34.209;RR=38;RUN=1;ReadPosRankSum=0.795;SAB=0.5641;SAF=66;SAP=7.1862;SAR=51;SC=TTTTCTTTTTCTTTTTTTTTT;SRB=0.41795;SRF=1164;SRP=165.85;SRR=1621;TC;TR=11;TU=T;VQSLOD=5.0895;set=Intersection;sumGLbyD=4.66 +20 5898626 rs34483659 CAAA C,CA,CAA,CAAAAA 1140.16 PASS ABR=34;AC=19,98,56,199;AF=0.0227,0.1172,0.0670,0.2380;AF1=0.08519;BVAR;BaseQRankSum=5.049;CI95=0.03727,0.1273;DB;DEL;DP=5091;DP4=539,408,121,123;FQ=4.43;FR;FS=5.701;HOMA=64;HOMR=156;HP=19;HR=18;HU=A;HaplotypeScore=11.5333;INDEL;InbreedingCoeff=0.7405;IndelType=MULTIALLELIC_INDEL;MQ0=117;MQ0Fraction=0.0986;MQRankSum=6.290;NF;NR;NS=240;PP;PV4=0.043,1,1,0.0087;QD=1.22;RA=204;RUN=1;ReadPosRankSum=-2.684;SB=-1015.09;SC=ACTAAAAATACAAAAAAAAAA;SRB=0.35294;SRF=72;SRP=41.33;SRR=132;TC;TR=18;TU=A;VQSLOD=4.1696;set=filterInVQSR-2of5 +20 5975126 rs10541892 C CAG 504.78 PASS AC=79;AF=0.07004;AN=1128;BaseQRankSum=10.498;DB;DP=2050;FS=38.228;HRun=0;HaplotypeScore=14.1426;InbreedingCoeff=-0.0053;IndelType=INS.NOVEL_2.;MQ=60.40;MQ0=80;MQ0Fraction=0.0390;MQRankSum=5.098;QD=1.63;ReadPosRankSum=-4.851;SB=-590.69;VQSLOD=4.8517;set=VQSR +20 6040983 rs11087710 A AAAAAAGAG,AAAAAGAG,AAAAGAG,AAAAGAGAG,AAAGAG,AAAGAGAG,AAGAG,AAGAGAG,AG,AGAG,AGAGAG 66894.55 PASS ABR=468;AC=80,9,20,136,31,91,33,29,9,3,5;AF=0.0980,0.0110,0.0245,0.1667,0.0380,0.1115,0.0404,0.0355,0.0110,0.0037,0.0061;AN=816;BVAR;BaseQRankSum=-12.470;DB;DP=38726;DP4=426,611,310,472;Dels=0.00;FQ=999;FR;FS=6.635;HOMA=110;HOMR=506;HP=14;HR=15;HRun=0;HU=A;INDEL;INS;InbreedingCoeff=0.8291;IndelType=MULTIALLELIC_INDEL;KGPilot123;MQ=54.22;MQ0Fraction=0.0168;MQRankSum=-5.329;NF;NR;NS=861;PP;PV4=0.56,1,6.9e-09,0.31;RA=1828;RUN=1;ReadPosRankSum=-7.857;SC=AAAAAAAAAAAAGAGAGAGAG;SRB=0.62418;SRF=1141;SRP=247.85;SRR=687;TC;TR=15;TU=A;VQSLOD=9.0574;dbSNP=131;set=Intersection;sumGLbyD=36.72 +20 7024548 . G GAT 5041.27 PASS AC=123;AF=0.10336;AN=1190;BaseQRankSum=23.097;DP=3045;FS=7.979;HRun=0;HaplotypeScore=15.6967;InbreedingCoeff=0.1062;IndelType=INS.NumRepetitions_5.EventLength_2.RepeatExpansion_AT.;MQ=119.29;MQ0=2;MQ0Fraction=0.0007;MQRankSum=-3.725;QD=8.97;ReadPosRankSum=-1.636;SB=-2257.45;VQSLOD=5.9332;set=VQSR +20 7484554 . A AT 5.09 PASS AC=0;AF=0.0000;AN=710;BaseQRankSum=-0.696;DP=1862;FS=2.835;HRun=9;HaplotypeScore=13.5425;InbreedingCoeff=0.0567;IndelType=INS.NumRepetitions_9.EventLength_1.RepeatExpansion_T.;MQ=76.92;MQ0=0;MQ0Fraction=0.0000;MQRankSum=1.932;ReadPosRankSum=-1.701;VQSLOD=4.3156;set=VQSR +20 7632194 rs77286341 GAA AAA,G 5324 PASS AC=0;AF=0.0000;AN=700;BaseQRankSum=-1.741;DB;DP=1772;FR;HP=4;HPLen=3;HR=3;HRun=0;HU=A;HaplotypeScore=60.1795;InbreedingCoeff=0.0017;IndelType=MIXED;MQ=70.69;MQ0=13;MQ0Fraction=0.0073;MQRankSum=-1.315;NF;NR;PP;ReadPosRankSum=-3.650;SC=GAGAGAGAGAGAAAGGTGTAA;TC;TR=13;TU=AG;set=filterInVQSR-2of5 +20 7767508 rs71329674 G GA 17914 PASS AA=415;AB=0.61617;ABA=337;ABP=105.94;ABR=541;AC=141;AF=0.11614;AN=1214;BL=15187;BR=20323;BVAR;BaseQRankSum=-13.946;DB;DP=28222;Dels=0.00;EL=184;EPP=14.569;ER=231;FQ=999;FR;FS=13.296;HETAR=178;HOMA=35;HOMR=822;HP=14;HPLen=9;HR=9;HRun=9;HU=A;INDEL;INS;InbreedingCoeff=0.0714;IndelType=INS.NumRepetitions_9.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.14464;LRBP=1616.1;MQ=89.69;MQ0=1;MQ0Fraction=0.0003;MQM=51.667;MQRankSum=0.664;NF;NR;NS=1035;PP;RA=3707;RL=171;RPP=30.894;RR=244;RUN=1;ReadPosRankSum=-1.120;SAB=0.45301;SAF=188;SAP=10.969;SAR=227;SC=ATTCTAAAAAGAAAAAAAAAT;SRB=0.38495;SRF=1427;SRP=429.23;SRR=2280;TC;TR=9;TU=A;VQSLOD=9.0748;set=Intersection;sumGLbyD=11.09 +20 7920261 . TA T,TAA 802.15 PASS AA=28;AB=0.8;ABA=28;ABP=112.45;ABR=112;AC=22,39;AF=0.01836,0.03255;AN=1198;BL=943;BR=1487;BVAR;BaseQRankSum=2.233;DP=10645;Dels=0.01;EL=11;EPP=5.8022;ER=17;FR;FS=1.691;HETAR=20;HOMA=0;HOMR=1007;HP=10;HPLen=9;HR=9;HRun=9;HU=A;INS;InbreedingCoeff=0.2256;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.22387;LRBP=267.46;MQ0=0;MQ0Fraction=0.0000;MQM=57.571;MQRankSum=0.940;NF;NR;NS=1027;PP;RA=4776;RL=8;RPP=14.178;RR=20;RUN=1;ReadPosRankSum=-1.567;SAB=0.53571;SAF=15;SAP=3.3205;SAR=13;SC=GTAACTGCTATAAAAAAAAAC;SRB=0.48576;SRF=2320;SRP=11.42;SRR=2456;TC;TR=9;TU=A;VQSLOD=4.0815;set=filterInVQSR-2of5;sumGLbyD=5.37 +20 8012465 rs10595338 TATGA T 2104.41 PASS AF=0.03339;BaseQRankSum=10.662;DB;DP=11772;DS;Dels=0.01;FR;FS=7.678;HP=1;HPLen=1;HR=1;HRun=0;HU=A;InbreedingCoeff=0.0266;IndelType=DEL.NumRepetitions_1.EventLength_4.;MQ0Fraction=0.0731;MQRankSum=0.603;NF;NR;PP;ReadPosRankSum=1.276;SC=TGTATGTATGTATGATGTATG;TC;TR=19;TU=ATGT;VQSLOD=4.1376;set=filterInVQSR-2of5;sumGLbyD=6.53 +20 8573999 . CGTGT C,CGT,CGTGTGT,TGTGT 45865.96 PASS AC=458,0,731;AF=0.37727,0.00000,0.60214;AN=1214;BVAR;BaseQRankSum=-6.703;DEL;DP=37714;Dels=0.03;FR;FS=11.079;HP=2;HPLen=1;HR=1;HRun=0;HU=G;INDEL;INS;InbreedingCoeff=0.7632;IndelType=MIXED;LEN=2;MQ0Fraction=0.0026;MQRankSum=-1.394;NF;NR;PP;RUN=1;ReadPosRankSum=-2.102;SC=TGTGTGTGCGCGTGTGTGTGT;TC;TR=18;TU=GT;VQSLOD=6.1435;set=Intersection;sumGLbyD=3.53 +20 8610455 rs10571111 TTTTC T 11763.51 PASS AC=190;AF=0.17056;AN=1114;BaseQRankSum=-14.397;DB;DP=2323;FS=2.321;HRun=0;HaplotypeScore=39.8020;InbreedingCoeff=0.2502;IndelType=DEL.NumRepetitions_2.EventLength_4.;MQ=53.39;MQ0=104;MQ0Fraction=0.0448;MQRankSum=3.519;QD=19.07;ReadPosRankSum=4.150;SB=-4067.02;VQSLOD=5.0554;set=VQSR +20 9139079 . ATT A,AT,ATTT,ATTTT,ATTTTT 8777.90 PASS AC=23,140,114,69,113;AF=0.01993,0.12132,0.09879,0.05979,0.09792;AN=1154;BVAR;BaseQRankSum=-0.022;DEL;DP=25109;DP4=502,657,278,313;FR;FS=11.929;HP=16;HR=16;HU=T;HaplotypeScore=20.2361;INDEL;INS;InbreedingCoeff=0.5704;IndelType=MULTIALLELIC_INDEL;MQ0=16;MQ0Fraction=0.0067;MQRankSum=2.624;NF;NR;PP;PV4=0.14,1,1,1;QD=1.48;RUN=1;ReadPosRankSum=-0.480;SB=-2354.28;SC=CACCTGGCTAATTTTTTTTTT;TC;TR=16;TU=T;VQSLOD=6.9180;set=Intersection +20 9862448 . CT C 49312 PASS AA=60;AB=0.96003;ABA=53;ABP=2440.4;ABR=1273;AC=18;AF=0.01461;AN=1232;BL=3516;BR=140;BVAR;BaseQRankSum=-2.056;DEL;DP=11893;Dels=0.01;EL=35;EPP=6.6294;ER=25;FS=1.787;HETAR=396;HOMA=344;HOMR=334;HRun=1;InbreedingCoeff=0.0379;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.92341;LRBP=6772.5;MQ0Fraction=0.0006;MQM=54.267;MQRankSum=-0.907;NS=1074;RA=2990;RL=60;RPP=133.3;RR=0;RUN=1;ReadPosRankSum=-10.579;SAB=0.58333;SAF=35;SAP=6.6294;SAR=25;SRB=0.47826;SRF=1430;SRP=15.284;SRR=1560;VQSLOD=3.0237;set=filterInVQSR-2of5;sumGLbyD=2.84 +20 9863736 rs73618103 G GT 50570.21 PASS AA=2247;AB=0.48878;ABA=1412;ABP=6.0324;ABR=1350;AC=546;AF=0.44463;AN=1228;BL=86886;BR=95862;BVAR;BaseQRankSum=-23.978;DB;DP=32517;DP4=1125,1133,1017,1048;Dels=0.00;EL=1089;EPP=7.6113;ER=1158;FQ=999;FR;FS=2.529;HETAR=445;HOMA=201;HOMR=393;HP=4;HPLen=4;HR=4;HRun=4;HU=T;INDEL;INS;InbreedingCoeff=0.1393;IndelType=INS.NumRepetitions_4.EventLength_1.RepeatExpansion_T.;KGPilot123;LEN=1;LRB=0.049117;LRBP=960.35;MQ=68.10;MQ0=2;MQ0Fraction=0.0006;MQM=50.931;MQRankSum=-1.580;NF;NR;NS=1039;PP;PV4=0.71,1,0.11,1;RA=3139;RL=1089;RPP=7.6113;RR=1158;RUN=1;ReadPosRankSum=0.846;SAB=0.54161;SAF=1217;SAP=36.804;SAR=1030;SC=TGATTGTATGGTTTTGTCCTT;SRB=0.53425;SRF=1677;SRP=34.987;SRR=1462;TC;TR=4;TU=T;VLD;VQSLOD=10.1800;dbSNP=131;set=Intersection;sumGLbyD=18.20 +20 10926959 . AG A 12239 PASS AA=65;AB=0.92801;ABA=64;ABP=1417.6;ABR=825;AC=24;AF=0.0264;AN=908;BL=616;BR=3782;BVAR;BaseQRankSum=9.990;DEL;DP=10708;Dels=0.01;EL=37;EPP=5.7163;ER=28;FS=1.652;HETAR=275;HOMA=70;HOMR=724;HRun=1;InbreedingCoeff=0.0102;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_G.;LEN=1;LRB=0.71987;LRBP=4952;MQ0=1;MQ0Fraction=0.0004;MQM=118.82;MQRankSum=1.018;NS=1069;RA=4746;RL=5;RPP=104.07;RR=60;RUN=1;ReadPosRankSum=-12.039;SAB=0.41538;SAF=27;SAP=7.0526;SAR=38;SRB=0.4764;SRF=2261;SRP=25.968;SRR=2485;VQSLOD=2.9713;set=filterInVQSR-2of5;sumGLbyD=4.10 +20 11299648 . TG T 49315 PASS AA=62;AB=0.95292;ABA=54;ABP=2046.7;ABR=1093;AC=28;AF=0.0373;AN=750;BL=3126;BR=528;BVAR;BaseQRankSum=-4.929;DEL;DP=10764;Dels=0.01;EL=26;EPP=6.5127;ER=36;FS=3.851;HETAR=366;HOMA=383;HOMR=304;HRun=1;InbreedingCoeff=0.0267;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_G.;LEN=1;LRB=0.711;LRBP=4014.1;MQ0=1;MQ0Fraction=0.0005;MQM=76.468;MQRankSum=1.327;NS=1070;RA=2588;RL=54;RPP=77.121;RR=8;RUN=1;ReadPosRankSum=-12.507;SAB=0.48387;SAF=30;SAP=3.1504;SAR=32;SRB=0.47643;SRF=1233;SRP=15.499;SRR=1355;VQSLOD=3.8673;set=filterInVQSR-2of5;sumGLbyD=3.00 +20 11561096 . CTA C 999 PASS AC=2;AF=0.0029;AF1=0.005602;BaseQRankSum=3.190;CI95=0.004425,0.01106;DP=7521;DP4=1998,1794,2,4;Dels=0.00;FQ=999;FR;FS=5.422;HP=3;HPLen=2;HR=1;HRun=0;HU=T;INDEL;InbreedingCoeff=0.0056;IndelType=DEL.NumRepetitions_1.EventLength_2.RepeatExpansion_TA.;MQ=113.88;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.297;NF;NR;PP;PV4=0.43,0.024,1,1;ReadPosRankSum=1.406;SC=CAATAGTATTCTATGTCAGTC;TC;TR=1;TU=T;VQSLOD=8.6243;set=Intersection;sumGLbyD=21.89 +20 11723671 . C CA 1096.60 PASS AA=35;AB=0.69565;ABA=35;ABP=41.247;ABR=80;AC=10;AF=0.0141;AN=710;BL=2005;BR=1702;BVAR;BaseQRankSum=-3.427;DP=9819;Dels=0.00;EL=20;EPP=4.5614;ER=15;FR;FS=3.814;HETAR=20;HOMA=0;HOMR=1034;HP=8;HPLen=7;HR=7;HRun=7;HU=A;INS;InbreedingCoeff=0.0323;IndelType=INS.NumRepetitions_7.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.081737;LRBP=56.79;MQ0=0;MQ0Fraction=0.0000;MQM=81.057;MQRankSum=0.050;NF;NR;NS=1054;PP;RA=5562;RL=22;RPP=8.0357;RR=13;RUN=1;ReadPosRankSum=-2.012;SAB=0.71429;SAF=25;SAP=16.97;SAR=10;SC=ATATTGAAGACAAAAAAACAG;SRB=0.49371;SRF=2746;SRP=4.9233;SRR=2816;TC;TR=7;TU=A;VQSLOD=7.4342;set=Intersection;sumGLbyD=8.30 +20 12238835 rs113904674 CTCTTCATGGTCT C 1813.44 PASS AA=7;AB=0.73077;ABA=7;ABP=15.037;ABR=19;AC=4;AF=0.0056;AN=712;BL=360;BR=368;BVAR;BaseQRankSum=3.891;DB;DEL;DP=10309;Dels=0.00;EL=4;EPP=3.3205;ER=3;FR;FS=0.000;HETAR=3;HOMA=0;HOMR=1076;HP=1;HPLen=2;HR=2;HRun=0;HU=C;InbreedingCoeff=-0.0381;IndelType=DEL.NumRepetitions_1.EventLength_10orMore.;LEN=12;LRB=0.010989;LRBP=3.2012;MQ0=0;MQ0Fraction=0.0000;MQM=37;MQRankSum=-3.793;NF;NR;NS=1079;PP;RA=6085;RL=4;RPP=3.3205;RR=3;RUN=1;ReadPosRankSum=1.319;SAB=0.42857;SAF=3;SAP=3.3205;SAR=4;SC=CTTAATGCTCCTCTTCATGGT;SRB=0.51257;SRF=3119;SRP=11.364;SRR=2966;TC;TR=6;TU=CCT;VQSLOD=5.7551;set=Intersection;sumGLbyD=69.48 +20 12602812 . AT A 12344 PASS AA=47;AB=0.94372;ABA=43;ABP=1309.5;ABR=721;AC=14;AF=0.0196;AN=716;BL=2714;BR=217;BVAR;BaseQRankSum=1.424;DEL;DP=10743;Dels=0.00;EL=24;EPP=3.0565;ER=23;FS=0.629;HETAR=228;HOMA=65;HOMR=769;HRun=1;InbreedingCoeff=0.0233;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.85193;LRBP=4622.3;MQ0Fraction=0.0000;MQM=99.574;MQRankSum=1.901;NS=1080;RA=4839;RL=46;RPP=96.568;RR=1;RUN=1;ReadPosRankSum=-9.906;SAB=0.53191;SAF=25;SAP=3.4261;SAR=22;SRB=0.51106;SRF=2473;SRP=8.148;SRR=2366;VQSLOD=2.8161;set=filterInVQSR-2of5;sumGLbyD=3.67 +20 13600884 . CTG C,CTGTG 1278.10 PASS AA=85;AB=0.77994;ABA=79;ABP=247.38;ABR=280;AC=71,22;AF=0.05907,0.01830;AN=1202;BL=3279;BR=3205;BVAR;BaseQRankSum=8.852;DEL;DP=24185;DP4=1317,931,52,49;Dels=0.03;EL=45;EPP=3.649;ER=40;FQ=999;FR;FS=31.826;HETAR=75;HOMA=4;HOMR=926;HP=2;HPLen=1;HR=1;HRun=0;HU=T;INDEL;InbreedingCoeff=0.1566;IndelType=MULTIALLELIC_INDEL;LEN=2;LRB=0.011413;LRBP=4.8442;MQ=65.06;MQ0Fraction=0.0012;MQM=48.671;MQRankSum=-0.511;NF;NR;NS=1005;PP;PV4=0.18,1,0.39,0.27;RA=3342;RL=35;RPP=8.7583;RR=50;RUN=1;ReadPosRankSum=-2.329;SAB=0.43529;SAF=37;SAP=6.1015;SAR=48;SC=TCCCTTTACTCTGTGTGTGTG;SRB=0.59066;SRF=1974;SRP=241.62;SRR=1368;TC;TR=15;TU=GT;VQSLOD=3.8635;set=filterInVQSR-2of5;sumGLbyD=4.23 +20 13666265 . T TATAG 556.88 PASS AC=21;AF=0.01959;AN=1072;BaseQRankSum=24.958;DP=2706;FS=2.581;HRun=0;HaplotypeScore=25.9952;InbreedingCoeff=0.1419;IndelType=INS.NOVEL_4.;MQ=72.43;MQ0=0;MQ0Fraction=0.0000;MQRankSum=2.888;QD=4.38;ReadPosRankSum=2.552;SB=-417.04;VQSLOD=7.3380;set=VQSR +20 13861245 rs72422273 C CTCA 2685.46 PASS AC=140;AF=0.11589;AN=1208;BaseQRankSum=24.355;DB;DP=2910;FS=6.808;HRun=0;HaplotypeScore=19.3095;InbreedingCoeff=-0.0991;IndelType=INS.NumRepetitions_1.EventLength_3.;MQ=78.25;MQ0=22;MQ0Fraction=0.0076;MQRankSum=3.225;QD=3.64;ReadPosRankSum=2.607;SB=-1861.38;VQSLOD=4.1974;set=VQSR +20 13865746 . T TA,TAA 1416.23 PASS AA=63;AB=0.80417;ABA=47;ABP=195.87;ABR=193;AC=122,21;AF=0.10133,0.01744;AN=1204;BL=3673;BR=1145;BVAR;BaseQRankSum=-3.336;DP=10513;Dels=0.00;EL=62;EPP=131.27;ER=1;FR;FS=716.583;HETAR=45;HOMA=1;HOMR=998;HP=2;HR=1;HRun=1;HU=A;INS;InbreedingCoeff=0.0814;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.5247;LRBP=2883.3;MQ0=0;MQ0Fraction=0.0000;MQM=56.143;MQRankSum=-1.197;NF;NR;NS=1044;PP;RA=4529;RL=62;RPP=131.27;RR=1;RUN=1;ReadPosRankSum=-12.295;SAB=1;SAF=63;SAP=139.81;SAR=0;SC=GGAACATGGATACCCCCCTGC;SRB=0.52462;SRF=2376;SRP=26.853;SRR=2153;TC;TR=1;TU=A;VQSLOD=-4.2308;set=filterInVQSR-2of5;sumGLbyD=4.77 +20 13881703 . CTT C 152.85 PASS AC=8;AF=0.0093;AN=862;BaseQRankSum=3.941;DP=2063;FS=0.962;HRun=5;HaplotypeScore=24.0313;InbreedingCoeff=0.0790;IndelType=DEL.NumRepetitions_5.EventLength_1.RepeatExpansion_T.;MQ=55.05;MQ0=49;MQ0Fraction=0.0238;MQRankSum=-1.418;QD=3.47;ReadPosRankSum=-0.605;SB=-93.04;VQSLOD=5.3874;set=VQSR +20 14260090 rs73619828 A AT 27935 PASS AA=596;AB=0.59484;ABA=487;ABP=96.922;ABR=715;AC=204;AF=0.17000;AN=1200;BL=21718;BR=28458;BVAR;BaseQRankSum=0.756;DB;DP=23629;DP4=1385,1492,287,328;Dels=0.00;EL=299;EPP=3.0249;ER=297;FQ=999;FR;FS=6.187;HETAR=218;HOMA=38;HOMR=788;HP=9;HPLen=9;HR=9;HRun=9;HU=T;INDEL;INS;InbreedingCoeff=0.0797;IndelType=INS.NumRepetitions_9.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.13433;LRBP=1969;MQ=100.81;MQ0=0;MQ0Fraction=0.0000;MQM=57.084;MQRankSum=2.224;NF;NR;NS=1044;PP;PV4=0.53,1,1.2e-11,1;RA=4143;RL=238;RPP=55.475;RR=358;RUN=1;ReadPosRankSum=0.198;SAB=0.46812;SAF=279;SAP=8.2714;SAR=317;SC=CCTTAAGTTGATTTTTTTTTC;SRB=0.50374;SRF=2087;SRP=3.514;SRR=2056;TC;TR=9;TU=T;VQSLOD=9.0018;set=Intersection;sumGLbyD=10.82 +20 14260558 . AC A 238 PASS AC=1;AF=0.0014;AF1=0.003368;BaseQRankSum=2.868;CI95=0.003106,0.006211;DP=9724;DP4=2075,2329,1,7;Dels=0.00;FQ=106;FR;FS=10.678;HP=1;HPLen=2;HR=2;HRun=1;HU=A;INDEL;InbreedingCoeff=-0.0406;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;MQ=114.37;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.862;NF;NR;PP;PV4=0.074,0.0096,0.017,1;ReadPosRankSum=-0.042;SC=ATCAGGAATAACTGTGTGACC;TC;TR=2;TU=A;VQSLOD=8.1618;set=Intersection;sumGLbyD=18.65 +20 14425481 . GTA G,GTATA 148.85 PASS AC=43,23;AF=0.03473,0.01858;AN=1238;BaseQRankSum=6.289;DP=25167;DP4=1800,2021,38,49;FR;FS=9.416;HP=2;HPLen=1;HR=1;HU=T;HaplotypeScore=17.7453;INDEL;InbreedingCoeff=0.0995;IndelType=MULTIALLELIC_INDEL;MQ0=21;MQ0Fraction=0.0058;MQRankSum=-0.200;NF;NR;PP;PV4=0.59,1,0.04,0.023;QD=0.35;ReadPosRankSum=-1.689;SB=-367.50;SC=CTGTGTGTGTGTATATATATA;TC;TR=13;TU=AT;VQSLOD=3.5796;set=filterInVQSR-2of5 +20 14943522 rs11478299 GA AA,G 1761.24 PASS AA=117;AB=0.68142;ABA=108;ABP=99.919;ABR=231;AC=0;AF=0.0000;AF1=0.04204;AN=712;BL=4931;BR=5802;BVAR;BaseQRankSum=9.118;CI95=0.02876,0.05752;DB;DEL;DP=13717;DP4=1908,1684,59,58;Dels=0.05;EL=60;EPP=3.1773;ER=57;FQ=81.9;FR;HETAR=56;HOMA=1;HOMR=1011;HP=8;HPLen=8;HR=8;HU=A;INDEL;InbreedingCoeff=0.1264;IndelType=MIXED;LEN=1;LRB=0.081152;LRBP=156.5;MQ=106.93;MQ0=0;MQ0Fraction=0.0000;MQM=96.855;MQRankSum=1.619;NF;NR;NS=1068;PP;PV4=0.57,1,0.0003,1;QD=7.40;RA=5080;RL=56;RPP=3.4743;RR=61;RUN=1;ReadPosRankSum=0.814;SAB=0.52137;SAF=61;SAP=3.4743;SAR=56;SB=-1122.51;SC=GTTGTTTGGGGAAAAAAAACT;SRB=0.51083;SRF=2595;SRP=8.1825;SRR=2485;TC;TR=8;TU=A;set=filterInVQSR-2of5;sumGLbyD=9.81 +20 14974486 . A AG 4101.40 PASS AA=57;AB=0.57143;ABA=51;ABP=8.2839;ABR=68;AC=22;AF=0.01846;AN=1192;BL=2286;BR=2834;BVAR;BaseQRankSum=8.711;DP=20538;DP4=2172,2100,19,13;Dels=0.00;EL=32;EPP=4.877;ER=25;FS=0.517;HETAR=20;HOMA=4;HOMR=1027;HRun=1;INDEL;INS;InbreedingCoeff=0.0677;IndelType=INS.NOVEL_1.Novel_G.;LEN=1;LRB=0.10703;LRBP=130.37;MQ=126.07;MQ0=0;MQ0Fraction=0.0000;MQM=56.088;MQRankSum=-10.756;NS=1051;PV4=0.38,3.5e-51,7.9e-34,1;RA=5203;RL=26;RPP=3.9627;RR=31;RUN=1;ReadPosRankSum=1.283;SAB=0.54386;SAF=31;SAP=3.9627;SAR=26;SRB=0.51816;SRF=2696;SRP=17.918;SRR=2507;VQSLOD=8.0072;set=Intersection;sumGLbyD=25.60 +20 15111137 . GA G 13533 PASS AA=98;AB=0.84864;ABA=89;ABP=623.8;ABR=499;AC=47;AF=0.03796;AN=1238;BL=5324;BR=856;BVAR;BaseQRankSum=-11.577;DEL;DP=13384;Dels=0.01;EL=53;EPP=4.4284;ER=45;FS=6.099;HETAR=219;HOMA=845;HOMR=18;HRun=1;InbreedingCoeff=-0.0056;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.72298;LRBP=7017.4;MQ0Fraction=0.0003;MQM=90.449;MQRankSum=1.408;NS=1083;RA=590;RL=87;RPP=130.99;RR=11;RUN=1;ReadPosRankSum=-18.074;SAB=0.55102;SAF=54;SAP=5.2261;SAR=44;SRB=0.52373;SRF=309;SRP=5.8958;SRR=281;VQSLOD=4.1054;set=filterInVQSR-2of5;sumGLbyD=3.06 +20 15283028 . A AC,ACACACACACACAC 140844.83 PASS AA=180;AB=0.61442;ABA=123;ABP=39.285;ABR=196;AC=13,817;AF=0.01111,0.69829;AN=1170;BL=4453;BR=11407;BVAR;BaseQRankSum=24.686;DP=6365;Dels=0.00;EL=124;EPP=58.793;ER=56;FR;FS=10.912;HETAR=87;HOMA=48;HOMR=683;HP=1;HR=1;HRun=1;HU=T;INS;InbreedingCoeff=0.2074;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.43846;LRBP=6624;MQ0Fraction=0.0558;MQM=38.211;MQRankSum=-21.111;NF;NR;NS=818;PP;RA=1732;RL=0;RPP=393.88;RR=180;RUN=1;ReadPosRankSum=-7.620;SAB=0.31111;SAF=56;SAP=58.793;SAR=124;SC=ACACACACACATACACACATA;SRB=0.54042;SRF=936;SRP=27.584;SRR=796;TC;TR=21;TU=AC;VQSLOD=4.7569;set=Intersection;sumGLbyD=18.36 +20 15361056 . ATAACT A 4892.81 PASS AA=59;AB=0.63576;ABA=55;ABP=27.184;ABR=96;AC=34;AF=0.0487;AN=698;BL=3164;BR=1999;BVAR;BaseQRankSum=3.391;DEL;DP=7080;Dels=0.03;EL=27;EPP=3.9304;ER=32;FR;FS=4.816;HETAR=35;HOMA=6;HOMR=966;HP=2;HPLen=3;HR=3;HRun=0;HU=A;InbreedingCoeff=0.0785;IndelType=DEL.NumRepetitions_1.EventLength_5.;LEN=5;LRB=0.22564;LRBP=573.84;MQ0=0;MQ0Fraction=0.0000;MQM=70.034;MQRankSum=-8.732;NF;NR;NS=1008;PP;RA=3915;RL=42;RPP=26.013;RR=17;RUN=1;ReadPosRankSum=-0.735;SAB=0.44068;SAF=26;SAP=4.8137;SAR=33;SC=AGATTAGGAAATAACTTAGGG;SRB=0.42682;SRF=1671;SRP=185.12;SRR=2244;TC;TR=3;TU=A;VQSLOD=7.0900;set=Intersection;sumGLbyD=43.38 +20 15579507 . AATTAGTC A,TATTAGTC 1936.38 PASS AA=16;AB=0.58974;ABA=16;ABP=5.7386;ABR=23;AC=64;AF=0.05229;AN=1224;BL=699;BR=775;BVAR;BaseQRankSum=-21.390;DEL;DP=21920;DP4=2099,2403,6,6;Dels=0.00;EL=8;EPP=3.0103;ER=8;FR;FS=2.920;HETAR=5;HOMA=0;HOMR=1063;HP=3;HPLen=4;HR=4;HU=A;INDEL;InbreedingCoeff=-0.0143;IndelType=MIXED;LEN=7;LRB=0.05156;LRBP=11.519;MQ=129.49;MQ0=0;MQ0Fraction=0.0000;MQM=51.938;MQRankSum=3.331;NF;NR;NS=1068;PP;PV4=1,0.019,1.3e-07,1;RA=5334;RL=5;RPP=7.8961;RR=11;RUN=1;ReadPosRankSum=-16.901;SAB=0.4375;SAF=7;SAP=3.5532;SAR=9;SC=CATACTACAAAATTAGTCATT;SRB=0.41695;SRF=2224;SRP=322.58;SRR=3110;TC;TR=4;TU=A;VQSLOD=3.2237;set=filterInVQSR-2of5;sumGLbyD=43.57 +20 15752535 . CT C,GT 3775.20 PASS AA=92;AB=0.78636;ABA=47;ABP=159.71;ABR=173;AC=0;AF=0.0000;AN=608;BL=4955;BR=2380;BVAR;BaseQRankSum=2.910;DEL;DP=3429;Dels=0.04;EL=13;EPP=105.82;ER=79;FR;HETAR=92;HOMA=95;HOMR=544;HP=2;HPLen=2;HR=2;HU=T;InbreedingCoeff=0.0483;IndelType=MIXED;LEN=1;LRB=0.35106;LRBP=1966;MQ0Fraction=0.0232;MQM=35.293;MQRankSum=-2.199;NF;NR;NS=732;PP;QD=4.91;RA=1272;RL=81;RPP=118.66;RR=11;RUN=1;ReadPosRankSum=-1.077;SAB=0.021739;SAF=2;SAP=185.79;SAR=90;SB=-59.51;SC=CAAGACCATCCTTGGCTAACA;SRB=0.14623;SRF=186;SRP=1385.8;SRR=1086;TC;TR=2;TU=T;set=filterInVQSR-2of5;sumGLbyD=9.70 +20 15883060 rs73619850 A AT 1325.60 PASS AA=38;AB=0.59302;ABA=35;ABP=9.4742;ABR=51;AC=14;AF=0.0156;AN=896;BL=1078;BR=1638;BVAR;BaseQRankSum=-4.526;DB;DP=19854;DP4=1632,1800,15,20;Dels=0.00;EL=18;EPP=3.2389;ER=20;FR;FS=0.000;HETAR=14;HOMA=1;HOMR=1014;HP=1;HPLen=1;HR=1;HRun=1;HU=T;INDEL;INS;InbreedingCoeff=-0.0131;IndelType=INS.NumRepetitions_1.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.20619;LRBP=253.74;MQ=118.40;MQ0=0;MQ0Fraction=0.0000;MQM=56.526;MQRankSum=0.892;NF;NR;NS=1029;PP;PV4=0.61,1,0.25,0.14;RA=4439;RL=14;RPP=8.7247;RR=24;RUN=1;ReadPosRankSum=-2.061;SAB=0.42105;SAF=16;SAP=5.0675;SAR=22;SC=GGATTGGCAGATAAAAAATGG;SRB=0.46429;SRF=2061;SRP=52.168;SRR=2378;TC;TR=1;TU=T;VQSLOD=9.7576;set=Intersection;sumGLbyD=15.69 +20 16122099 . GA G 12914 PASS AA=85;AB=0.85915;ABA=80;ABP=639.4;ABR=488;AC=19;AF=0.01542;AN=1232;BL=805;BR=5457;BVAR;BaseQRankSum=-6.084;DEL;DP=13592;Dels=0.00;EL=45;EPP=3.649;ER=40;FS=0.935;HETAR=218;HOMA=841;HOMR=14;HRun=2;InbreedingCoeff=0.0250;IndelType=DEL.NumRepetitions_2.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.74289;LRBP=7507.5;MQ0=0;MQ0Fraction=0.0000;MQM=103.01;MQRankSum=2.843;NS=1075;RA=541;RL=2;RPP=170.62;RR=83;RUN=1;ReadPosRankSum=-16.222;SAB=0.49412;SAF=42;SAP=3.0358;SAR=43;SRB=0.44917;SRF=243;SRP=15.152;SRR=298;VQSLOD=3.9745;set=filterInVQSR-2of5;sumGLbyD=2.97 +20 16828509 . G GT 843.62 PASS AA=30;AB=0.70103;ABA=29;ABP=37.06;ABR=68;AC=10;AF=0.0140;AN=714;BL=1368;BR=1786;BVAR;BaseQRankSum=-4.061;DP=8682;Dels=0.01;EL=14;EPP=3.2998;ER=16;FR;FS=2.681;HETAR=22;HOMA=1;HOMR=1020;HP=8;HPLen=8;HR=8;HRun=8;HU=T;INS;InbreedingCoeff=0.1389;IndelType=INS.NumRepetitions_8.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.13253;LRBP=123.3;MQ0=0;MQ0Fraction=0.0000;MQM=62.8;MQRankSum=-1.491;NF;NR;NS=1043;PP;RA=4416;RL=11;RPP=7.6428;RR=19;RUN=1;ReadPosRankSum=-1.718;SAB=0.76667;SAF=23;SAP=21.54;SAR=7;SC=CCTTCAAAAGGTTTTTTTTGG;SRB=0.5745;SRF=2537;SRP=215.91;SRR=1879;TC;TR=8;TU=T;VQSLOD=7.6258;set=Intersection;sumGLbyD=10.77 +20 17470034 . GC G 46975 PASS AA=57;AB=0.96043;ABA=52;ABP=2422.5;ABR=1262;AC=34;AF=0.02773;AN=1226;BL=418;BR=3446;BVAR;BaseQRankSum=-6.250;DEL;DP=12035;Dels=0.00;EL=22;EPP=9.4485;ER=35;FS=1.350;HETAR=416;HOMA=409;HOMR=244;HRun=1;InbreedingCoeff=0.0083;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;LEN=1;LRB=0.78364;LRBP=5155.6;MQ0=0;MQ0Fraction=0.0000;MQM=99.509;MQRankSum=2.192;NS=1076;RA=2396;RL=5;RPP=87.164;RR=52;RUN=1;ReadPosRankSum=-15.199;SAB=0.5614;SAF=32;SAP=4.877;SAR=25;SRB=0.52963;SRF=1269;SRP=21.285;SRR=1127;VQSLOD=3.8440;set=filterInVQSR-2of5;sumGLbyD=3.06 +20 17471374 . AGCGGC A 850.03 PASS AC=6;AF=0.0085;AF1=0.01301;AN=704;BaseQRankSum=6.259;CI95=0.00885,0.01991;DP=8180;DP4=2215,1878,4,5;Dels=0.01;FQ=131;FS=0.000;HRun=0;INDEL;InbreedingCoeff=0.0009;IndelType=DEL.NumRepetitions_1.EventLength_5.;MQ=104.41;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-5.521;PV4=0.74,0.37,0.0005,1;ReadPosRankSum=2.468;VQSLOD=6.8773;set=Intersection;sumGLbyD=30.85 +20 18433202 rs35582929 G GA 2506.90 PASS AA=55;AB=0.5812;ABA=49;ABP=9.7103;ABR=68;AC=20;AF=0.0218;AN=918;BL=2263;BR=2175;BVAR;BaseQRankSum=-6.639;DB;DP=19467;DP4=1845,2365,27,26;Dels=0.00;EL=21;EPP=9.6826;ER=34;FQ=999;FR;FS=5.633;HETAR=16;HOMA=3;HOMR=1045;HP=2;HPLen=3;HR=3;HRun=1;HU=G;INDEL;INS;InbreedingCoeff=0.0700;IndelType=INS.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.019829;LRBP=6.7994;MQ=114.03;MQ0=0;MQ0Fraction=0.0000;MQM=83.345;MQRankSum=1.610;NF;NR;NS=1064;PP;PV4=0.33,1,1,1;RA=5380;RL=28;RPP=3.0498;RR=27;RUN=1;ReadPosRankSum=0.873;SAB=0.47273;SAF=26;SAP=3.3656;SAR=29;SC=TATTTCATGGGAGCATTAAAA;SRB=0.42862;SRF=2306;SRP=241.07;SRR=3074;TC;TR=3;TU=G;VQSLOD=10.0372;dbSNP=126;set=Intersection;sumGLbyD=13.10 +20 18551314 rs10659122 CA C,CAA,CAAA,CAAAA,CAAAAA 18810.74 PASS ABR=243;AC=19,169,216,164,188;AF=0.01816,0.16157,0.20650,0.15679,0.17973;BVAR;BaseQRankSum=-5.742;DB;DP=17637;DP4=136,77,560,237;FR;FS=2.693;HOMA=177;HOMR=299;HP=17;HR=17;HU=A;HaplotypeScore=15.5048;INDEL;INS;InbreedingCoeff=0.8901;IndelType=MULTIALLELIC_INDEL;MQ0=11;MQ0Fraction=0.0069;MQRankSum=1.845;NF;NR;NS=658;PP;PV4=0.08,1,1,1;QD=12.66;RA=673;RUN=1;ReadPosRankSum=0.283;SB=-3514.45;SC=GATTCCATCTCAAAAAAAAAA;SRB=0.63596;SRF=428;SRP=111.06;SRR=245;TC;TR=17;TU=A;VQSLOD=10.6964;dbSNP=130;set=Intersection +20 18785519 . G GTC 415.55 PASS AC=28;AF=0.0400;AN=700;BaseQRankSum=10.889;DP=1929;FS=8.778;HRun=0;HaplotypeScore=27.6448;InbreedingCoeff=0.0510;IndelType=INS.NOVEL_2.;MQ=61.99;MQ0=36;MQ0Fraction=0.0187;MQRankSum=4.508;QD=3.08;ReadPosRankSum=8.080;SB=-437.03;VQSLOD=4.9313;set=VQSR +20 20301041 rs35451634 ATATG A 200.42 PASS AC=21;AF=0.0449;AN=468;BaseQRankSum=5.251;DB;DP=579;FS=24.013;HRun=0;HaplotypeScore=27.8977;InbreedingCoeff=0.0113;IndelType=DEL.NumRepetitions_1.EventLength_4.;MQ=78.47;MQ0=26;MQ0Fraction=0.0449;MQRankSum=-5.284;QD=3.06;ReadPosRankSum=1.793;SB=-55.76;VQSLOD=5.0981;set=VQSR +20 20378174 . TC T 245.55 PASS AC=23;AF=0.01879;AN=1224;BaseQRankSum=0.990;DP=3225;FS=10.413;HRun=1;HaplotypeScore=22.6109;InbreedingCoeff=0.0244;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;MQ=93.70;MQ0=3;MQ0Fraction=0.0009;MQRankSum=-3.349;QD=1.86;ReadPosRankSum=-7.227;SB=-188.62;VQSLOD=4.2553;set=VQSR +20 20809160 rs10571503 TAA AAA,T 3496 PASS AC=0;AF=0.0000;AN=612;BaseQRankSum=1.968;DB;DP=1092;FR;HP=4;HPLen=3;HR=3;HRun=0;HU=A;HaplotypeScore=26.1253;InbreedingCoeff=0.0603;IndelType=MIXED;MQ=68.98;MQ0=1;MQ0Fraction=0.0009;MQRankSum=1.520;NF;NR;PP;ReadPosRankSum=-4.042;SC=TATATATATATAAATTTAAAT;TC;TR=13;TU=AT;set=filterInVQSR-2of5 +20 22508765 . CT C 53877.84 PASS AA=187;AB=0.78077;ABA=171;ABP=537.09;ABR=609;AC=1017;AF=0.91787;AN=1108;BL=12690;BR=1718;BVAR;BaseQRankSum=13.773;DEL;DP=7430;Dels=0.02;EL=73;EPP=22.53;ER=114;FR;FS=16.352;HETAR=152;HOMA=9;HOMR=786;HP=8;HR=4;HRun=4;HU=T;InbreedingCoeff=0.3885;IndelType=DEL.NumRepetitions_4.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.76152;LRBP=18147;MQ0=0;MQ0Fraction=0.0000;MQM=46.086;MQRankSum=0.971;NF;NR;NS=947;PP;RA=2868;RL=177;RPP=326.86;RR=10;RUN=1;ReadPosRankSum=9.951;SAB=0.34759;SAF=65;SAP=40.738;SAR=122;SC=AAAAAATTTTCTTTTGAACTG;SRB=0.46269;SRF=1327;SRP=37.684;SRR=1541;TC;TR=4;TU=T;VQSLOD=5.1182;set=Intersection;sumGLbyD=25.15 +20 22555082 rs11477526 AT A 11503 PASS AA=530;AB=0.50816;ABA=422;ABP=3.5063;ABR=436;AF=0.1614;AN=700;BL=21453;BR=23313;BVAR;BaseQRankSum=17.562;DB;DEL;DP=25587;DP4=1869,1600,283,201;Dels=0.14;EL=259;EPP=3.6003;ER=271;FQ=999;FR;FS=14.595;HETAR=159;HOMA=41;HOMR=846;HP=3;HPLen=3;HR=3;HRun=3;HU=T;INDEL;InbreedingCoeff=0.0995;IndelType=DEL.NumRepetitions_3.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.041549;LRBP=170.83;MQ=95.89;MQ0=0;MQ0Fraction=0.0000;MQM=72.162;MQRankSum=2.564;NF;NR;NS=1046;PP;PV4=0.058,6.6e-129,0.04,1;RA=4303;RL=264;RPP=3.0267;RR=266;RUN=1;ReadPosRankSum=0.176;SAB=0.58679;SAF=311;SAP=37.688;SAR=219;SC=GGGAAAGCTGATTTACTGATT;SRB=0.54892;SRF=2362;SRP=92.453;SRR=1941;TC;TR=3;TU=T;VQSLOD=8.7746;dbSNP=120;set=Intersection;sumGLbyD=15.27 +20 22590907 . A AC 4204.88 PASS AA=67;AB=0.592;ABA=51;ABP=12.2;ABR=74;AF=0.0554;AF1=0.0468;AN=560;BL=2277;BR=2389;BVAR;BaseQRankSum=10.968;CI95=0.03759,0.05639;DP=14380;DP4=2514,2018,33,33;Dels=0.00;EL=22;EPP=20.155;ER=45;FQ=999;FR;FS=3.846;HETAR=25;HOMA=4;HOMR=1049;HP=4;HPLen=5;HR=5;HRun=0;HU=A;INDEL;INS;InbreedingCoeff=0.0719;IndelType=INS.NOVEL_1.Novel_C.;LEN=1;LRB=0.024003;LRBP=8.8481;MQ=110.68;MQ0=0;MQ0Fraction=0.0000;MQM=96.149;MQRankSum=2.668;NF;NR;NS=1078;PP;PV4=0.39,1,0.46,0.36;RA=5468;RL=33;RPP=3.0427;RR=34;RUN=1;ReadPosRankSum=-1.097;SAB=0.50746;SAF=34;SAP=3.0427;SAR=33;SC=TCATATCAAAAACATTACGTT;SRB=0.54389;SRF=2974;SRP=94.508;SRR=2494;TC;TR=5;TU=A;VQSLOD=10.0712;set=Intersection;sumGLbyD=27.69 +20 22806326 rs11468890 ATTCCATCAC A 105320.99 PASS AC=567;AF=0.48795;AN=1162;BVAR;BaseQRankSum=32.858;DB;DEL;DP=26278;DP4=727,796,554,587;Dels=0.30;FQ=999;FR;FS=1.923;HP=3;HPLen=3;HR=2;HRun=0;HU=T;INDEL;InbreedingCoeff=0.2548;IndelType=DEL.NumRepetitions_2.EventLength_9.;LEN=9;MQ=89.42;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-23.545;NF;NR;PP;PV4=0.7,1,1.3e-167,1;RUN=1;ReadPosRankSum=4.384;SC=GGCTGCTCCCATTCCATCACT;TC;TR=2;TU=T;VQSLOD=8.2594;set=Intersection;sumGLbyD=69.81 +20 22999898 rs55966257 CAGGA C 8019.97 PASS AA=23;AB=0.57778;ABA=19;ABP=5.3748;ABR=26;AC=214;AF=0.18838;AN=1136;BL=1143;BR=1040;BVAR;BaseQRankSum=29.294;DB;DEL;DP=8216;Dels=0.02;EL=11;EPP=3.1047;ER=12;FS=14.938;HETAR=14;HOMA=2;HOMR=948;HRun=0;InbreedingCoeff=0.0797;IndelType=DEL.NumRepetitions_1.EventLength_4.;LEN=4;LRB=0.047183;LRBP=13.563;MQ0=0;MQ0Fraction=0.0000;MQM=34.783;MQRankSum=-20.301;NS=964;RA=3637;RL=13;RPP=3.86;RR=10;RUN=1;ReadPosRankSum=-24.607;SAB=0.47826;SAF=11;SAP=3.1047;SAR=12;SRB=0.49024;SRF=1783;SRP=6.02;SRR=1854;VQSLOD=7.9163;set=Intersection;sumGLbyD=9.43 +20 23385964 rs57723772 GAA G 8170.95 PASS AC=257;AF=0.20928;AN=1228;BaseQRankSum=32.220;DB;DP=3291;FS=1.688;HRun=3;HaplotypeScore=22.6739;InbreedingCoeff=0.0171;IndelType=DEL.NumRepetitions_3.EventLength_1.RepeatExpansion_A.;MQ=58.44;MQ0=32;MQ0Fraction=0.0097;MQRankSum=-4.893;QD=6.55;ReadPosRankSum=-35.524;SB=-3631.67;VQSLOD=5.6549;set=VQSR +20 23534530 . TA T 3542.10 PASS AA=45;AB=0.75658;ABA=37;ABP=89.926;ABR=115;AC=35;AF=0.02991;AN=1170;BL=3090;BR=270;BVAR;BaseQRankSum=-6.892;DEL;DP=8108;Dels=0.00;EL=19;EPP=5.3748;ER=26;FS=1.026;HETAR=76;HOMA=896;HOMR=18;HRun=1;InbreedingCoeff=0.0551;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.83929;LRBP=5142.4;MQ0Fraction=0.0017;MQM=41.578;MQRankSum=0.818;NS=991;RA=203;RL=43;RPP=84.127;RR=2;RUN=1;ReadPosRankSum=-12.923;SAB=0.37778;SAF=17;SAP=8.8491;SAR=28;SRB=0.5665;SRF=115;SRP=10.808;SRR=88;VQSLOD=4.2093;set=Intersection;sumGLbyD=3.49 +20 23976810 rs5841018 A ATATTAAT 1782.38 PASS AF=0.1387;AF1=0.01507;BaseQRankSum=3.717;CI95=0.00188,0.03947;DB;DP=1712;DP4=357,376,7,2;Dels=0.00;FQ=31.1;FS=14.489;HPLen=2;HRun=0;INDEL;InbreedingCoeff=0.1123;IndelType=INS.NumRepetitions_1.EventLength_7.;MQ=49.53;MQ0=2;MQ0Fraction=0.0055;MQRankSum=-4.928;PV4=0.1,1,0.00085,0.016;ReadPosRankSum=-4.456;VQSLOD=5.3140;dbSNP=116;set=Intersection;sumGLbyD=19.98 +20 24222100 . CTTTTA C 4219.36 PASS AA=57;AB=0.59434;ABA=43;ABP=11.205;ABR=63;AF=0.01803;AF1=0.01547;AN=1220;BL=2073;BR=2345;BVAR;BaseQRankSum=7.990;CI95=0.0114,0.02137;DEL;DP=17536;DP4=2140,2346,7,12;Dels=0.01;EL=32;EPP=4.877;ER=25;FQ=104;FS=0.614;HETAR=21;HOMA=4;HOMR=1042;HRun=0;INDEL;InbreedingCoeff=0.1941;IndelType=DEL.NumRepetitions_2.EventLength_5.;LEN=5;LRB=0.061566;LRBP=39.374;MQ=73.32;MQ0Fraction=0.0021;MQM=39.614;MQRankSum=-5.728;NS=1067;PV4=0.37,1.1e-39,3.5e-09,1;RA=5527;RL=28;RPP=3.0484;RR=29;RUN=1;ReadPosRankSum=0.214;SAB=0.54386;SAF=31;SAP=3.9627;SAR=26;SRB=0.49267;SRF=2723;SRP=5.588;SRR=2804;VQSLOD=7.5428;set=Intersection;sumGLbyD=38.08 +20 24395018 . AT A 49310 PASS AA=146;AB=0.91198;ABA=130;ABP=2180.5;ABR=1347;AC=50;AF=0.04045;AN=1236;BL=587;BR=9625;BVAR;BaseQRankSum=-4.610;DEL;DP=12793;Dels=0.01;EL=54;EPP=24.487;ER=92;FS=22.108;HETAR=485;HOMA=384;HOMR=210;HRun=2;InbreedingCoeff=0.0374;IndelType=DEL.NumRepetitions_2.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.88504;LRBP=17373;MQ0=0;MQ0Fraction=0.0000;MQM=102.26;MQRankSum=2.256;NS=1080;RA=2377;RL=1;RPP=311.42;RR=145;RUN=1;ReadPosRankSum=-16.347;SAB=0.63699;SAF=93;SAP=26.807;SAR=53;SRB=0.52167;SRF=1240;SRP=12.702;SRR=1137;VQSLOD=3.2421;set=filterInVQSR-2of5;sumGLbyD=3.80 +20 24411517 . C CA 246.18 PASS AF=0.01546;AF1=0.01095;BaseQRankSum=7.832;CI95=0.005698,0.01709;DP=7981;DP4=983,2037,7,7;Dels=0.00;FQ=27.9;FS=18.815;HPLen=3;HRun=3;INDEL;InbreedingCoeff=0.0175;IndelType=INS.NumRepetitions_3.EventLength_1.RepeatExpansion_A.;MQ=60.28;MQ0Fraction=0.0137;MQRankSum=-7.243;PV4=0.25,1,2.7e-05,1;ReadPosRankSum=-0.143;VQSLOD=4.3701;set=Intersection;sumGLbyD=6.56 +20 24421169 . AG A 27480 PASS AA=182;AB=0.8303;ABA=149;ABP=835;ABR=729;AC=89;AF=0.07224;AN=1232;BL=11276;BR=2214;BVAR;BaseQRankSum=-5.447;DEL;DP=11717;Dels=0.01;EL=103;EPP=9.8827;ER=79;FR;FS=15.492;HETAR=343;HOMA=607;HOMR=114;HP=4;HR=1;HRun=1;HU=G;InbreedingCoeff=0.0353;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_G.;LEN=1;LRB=0.67176;LRBP=13222;MQ0=0;MQ0Fraction=0.0000;MQM=88.324;MQRankSum=2.221;NF;NR;NS=1071;PP;RA=1226;RL=169;RPP=293.37;RR=13;RUN=1;ReadPosRankSum=-19.711;SAB=0.54945;SAF=100;SAP=6.876;SAR=82;SC=CCTTAGCCCCAGAAAACATCT;SRB=0.44535;SRF=546;SRP=34.814;SRR=680;TC;TR=1;TU=G;VQSLOD=4.2669;set=Intersection;sumGLbyD=3.91 +20 24765537 rs71841337 ATTT A,AT,ATT,ATTTT,ATTTTT 37852 PASS AC=13,120,527,51,92;AF=0.01102,0.10169,0.44661,0.04322,0.07797;AN=1180;BVAR;BaseQRankSum=8.172;DB;DEL;DP=39116;DP4=200,331,851,1169;FR;FS=2.394;HP=15;HR=15;HU=T;HaplotypeScore=20.8091;INDEL;INS;InbreedingCoeff=0.4815;IndelType=MULTIALLELIC_INDEL;MQ0=1;MQ0Fraction=0.0003;MQRankSum=4.344;NF;NR;PP;PV4=0.067,1,1,0.1;QD=7.90;RUN=1;ReadPosRankSum=1.798;SB=-8371.96;SC=CTCTGCAACAATTTTTTTTTT;TC;TR=15;TU=T;VQSLOD=9.9679;dbSNP=120;set=Intersection +20 25500689 . A AATTT 84980.72 PASS AC=1005;AF=0.89096;AN=1128;BaseQRankSum=17.400;DP=2324;FS=6.721;HRun=0;HaplotypeScore=25.3376;InbreedingCoeff=0.2148;IndelType=INS.NumRepetitions_1.EventLength_4.;MQ=75.19;MQ0=1;MQ0Fraction=0.0004;MQRankSum=-8.221;QD=38.28;ReadPosRankSum=4.504;SB=-34833.07;VQSLOD=4.6038;set=VQSR +20 25550373 . GA G 11251.31 PASS AA=246;AB=0.42963;ABA=154;ABP=14.624;ABR=116;AC=566;AF=0.6521;AN=868;BL=5230;BR=11845;BVAR;BaseQRankSum=7.418;DEL;DP=8885;Dels=0.02;EL=99;EPP=23.348;ER=147;FR;FS=50.357;HETAR=150;HOMA=849;HOMR=14;HP=1;HR=2;HRun=1;HU=G;InbreedingCoeff=0.1365;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.38741;LRBP=5567.9;MQ0=0;MQ0Fraction=0.0000;MQM=97.561;MQRankSum=0.050;NF;NR;NS=1013;PP;RA=269;RL=75;RPP=84.361;RR=171;RUN=1;ReadPosRankSum=-7.128;SAB=0.52846;SAF=130;SAP=4.7404;SAR=116;SC=CACGGAGGCGGAGGAAGCAGC;SRB=0.42379;SRF=114;SRP=16.58;SRR=155;TC;TR=6;TU=AGG;VQSLOD=4.0103;set=filterInVQSR-2of5;sumGLbyD=4.58 +20 25903865 . TTC T 7459.23 PASS AC=277;AF=0.23316;AN=1188;BaseQRankSum=31.479;DP=2969;FS=137.723;HRun=0;HaplotypeScore=37.3300;InbreedingCoeff=-0.1755;IndelType=DEL.NumRepetitions_1.EventLength_2.RepeatExpansion_TC.;MQ=53.49;MQ0=50;MQ0Fraction=0.0168;MQRankSum=-25.506;QD=4.70;ReadPosRankSum=-5.913;SB=-1747.98;VQSLOD=5.4731;set=VQSR +20 25934237 . C CCACTT 771.36 PASS AC=37;AF=0.0426;AN=868;BaseQRankSum=16.331;DP=2253;FS=4.545;HRun=0;HaplotypeScore=29.9764;InbreedingCoeff=-0.0685;IndelType=INS.NOVEL_5.;MQ=48.12;MQ0=87;MQ0Fraction=0.0386;MQRankSum=-12.497;QD=3.37;ReadPosRankSum=-8.428;SB=-297.70;VQSLOD=4.2324;set=VQSR +20 26054751 rs112967123 TATC T 33244 PASS AA=1863;AB=0.79012;ABA=1788;ABP=6231;ABR=6731;AC=227;AF=0.18218;AN=1246;BL=74924;BR=72452;BVAR;BaseQRankSum=32.258;DB;DEL;DP=36404;DS;Dels=0.05;EL=931;EPP=3.0115;ER=932;FR;FS=265.752;HETAR=527;HOMA=2;HOMR=565;HP=1;HR=2;HRun=0;HU=T;InbreedingCoeff=-0.2137;IndelType=DEL.NumRepetitions_2.EventLength_3.;LEN=3;LRB=0.016773;LRBP=93.048;MQ0Fraction=0.0127;MQM=28.797;MQRankSum=-5.329;NF;NR;NS=1094;PP;RA=14604;RL=1014;RPP=34.743;RR=849;RUN=1;ReadPosRankSum=8.394;SAB=0.65486;SAF=1220;SAP=391.07;SAR=643;SC=TCACCATCATTATCATCATTA;SRB=0.56717;SRF=8283;SRP=575.39;SRR=6321;TC;TR=8;TU=ATC;VQSLOD=1.0486;set=filterInVQSR-2of5;sumGLbyD=6.54 +20 26120452 . CAG C 7863.19 PASS AA=163;AB=0.70489;ABA=157;ABP=196.99;ABR=375;AC=171;AF=0.1908;AN=896;BL=3455;BR=4877;BVAR;BaseQRankSum=25.536;DEL;DP=7014;Dels=0.10;EL=58;EPP=32.438;ER=105;FS=231.723;HETAR=90;HOMA=5;HOMR=387;HRun=0;InbreedingCoeff=-0.1966;IndelType=DEL.NumRepetitions_1.EventLength_2.RepeatExpansion_AG.;LEN=2;LRB=0.17067;LRBP=530;MQ0Fraction=0.0470;MQM=21.951;MQRankSum=-23.449;NS=482;RA=1117;RL=62;RPP=23.273;RR=101;RUN=1;ReadPosRankSum=1.904;SAB=0.37423;SAF=61;SAP=25.404;SAR=102;SRB=0.41719;SRF=466;SRP=69.544;SRR=651;VQSLOD=-0.9395;set=filterInVQSR-2of5;sumGLbyD=5.06 +20 26185812 . AG A 322.58 PASS AF=0.0342;BaseQRankSum=3.668;DP=3014;Dels=0.01;FR;FS=10.238;HP=8;HPLen=6;HR=6;HRun=6;HU=G;InbreedingCoeff=0.1504;IndelType=DEL.NumRepetitions_6.EventLength_1.RepeatExpansion_G.;MQ0Fraction=0.0473;MQRankSum=-5.464;NF;NR;PP;ReadPosRankSum=0.536;SC=GGGTGGGTGGAGGGGGGAGGG;TC;TR=6;TU=G;VQSLOD=5.0767;set=Intersection;sumGLbyD=8.46 +20 30963468 . AGTTT A 2041.12 PASS AA=38;AB=0.75694;ABA=35;ABP=85.587;ABR=109;AC=34;AF=0.0377;AN=902;BL=1974;BR=668;BVAR;BaseQRankSum=3.060;DEL;DP=22806;DP4=1997,1747,28,36;Dels=0.02;EL=17;EPP=3.9246;ER=21;FR;FS=16.034;HETAR=29;HOMA=1;HOMR=1009;HP=1;HPLen=1;HR=1;HRun=0;HU=G;INDEL;InbreedingCoeff=0.0752;IndelType=DEL.NumRepetitions_2.EventLength_4.;LEN=4;LRB=0.49432;LRBP=1404.9;MQ=87.17;MQ0Fraction=0.0013;MQM=98.079;MQRankSum=6.021;NF;NR;NS=1039;PP;PV4=0.13,1.5e-07,1,0.051;RA=4052;RL=36;RPP=69.069;RR=2;RUN=1;ReadPosRankSum=-1.847;SAB=0.5;SAF=19;SAP=3.0103;SAR=19;SC=AGAAGTAAGTAGTTTGTTTTT;SRB=0.53776;SRF=2179;SRP=53.19;SRR=1873;TC;TR=9;TU=AAGT;VQSLOD=7.3578;set=Intersection;sumGLbyD=14.03 +20 31963212 . AAAAAAAAAAAAG A 727.15 PASS AC=5;AF=0.0080;AN=622;BaseQRankSum=4.037;DP=1480;FS=0.000;HRun=0;HaplotypeScore=43.3793;InbreedingCoeff=0.0350;IndelType=DEL.NumRepetitions_1.EventLength_10orMore.;MQ=51.77;MQ0=59;MQ0Fraction=0.0399;MQRankSum=-1.799;QD=22.72;ReadPosRankSum=3.591;SB=-364.04;VQSLOD=5.3166;set=VQSR +20 31997272 . CT C,CTT,CTTT 1837.10 PASS AA=63;AB=0.77559;ABA=57;ABP=170.57;ABR=197;AC=79,49,30;AF=0.06594,0.04090,0.02504;AN=1198;BL=2372;BR=2640;BVAR;BaseQRankSum=3.277;DP=9050;Dels=0.03;EL=24;EPP=10.766;ER=39;FR;FS=0.303;HETAR=45;HOMA=1;HOMR=981;HP=10;HPLen=10;HR=10;HRun=10;HU=T;INS;InbreedingCoeff=0.2796;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.053472;LRBP=34.128;MQ0Fraction=0.0000;MQM=50.889;MQRankSum=0.610;NF;NR;NS=1027;PP;RA=3776;RL=30;RPP=3.3205;RR=33;RUN=1;ReadPosRankSum=-0.800;SAB=0.39683;SAF=25;SAP=8.8354;SAR=38;SC=ACCCAACTTCCTTTTTTTTTT;SRB=0.46213;SRF=1745;SRP=50.049;SRR=2031;TC;TR=10;TU=T;VQSLOD=4.1189;set=filterInVQSR-2of5;sumGLbyD=3.66 +20 33446974 rs113250263 TAA T,TA,TAAA 17130.16 PASS AC=65,417,184;AF=0.05941,0.38117,0.16819;AN=1094;BVAR;BaseQRankSum=3.400;DB;DEL;DP=22362;DP4=221,247,418,524;Dels=0.33;FR;FS=15.409;HP=15;HR=14;HRun=14;HU=A;INDEL;INS;InbreedingCoeff=0.5215;IndelType=MULTIALLELIC_INDEL;MQ=61.32;MQ0Fraction=0.0021;MQRankSum=0.481;NF;NR;PP;PV4=0.33,1,1,1;RUN=1;ReadPosRankSum=-0.056;SC=CTCCGTCTCATAAAAAAAAAA;TC;TR=14;TU=A;VQSLOD=8.0974;dbSNP=132;set=Intersection;sumGLbyD=12.78 +20 33877149 . C CT 1784.40 PASS AA=58;AB=0.73096;ABA=53;ABP=94.289;ABR=144;AC=65;AF=0.05682;AN=1144;BL=3298;BR=1935;BVAR;BaseQRankSum=-2.066;DP=8074;Dels=0.02;EL=22;EPP=10.348;ER=36;FR;FS=11.452;HETAR=47;HOMA=3;HOMR=754;HP=16;HR=12;HRun=12;HU=T;INS;InbreedingCoeff=0.1178;IndelType=INS.NumRepetitions_10orMore.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.26046;LRBP=773.91;MQ0Fraction=0.0165;MQM=52.259;MQRankSum=0.734;NF;NR;NS=804;PP;RA=2141;RL=43;RPP=32.363;RR=15;RUN=1;ReadPosRankSum=-1.273;SAB=0.46552;SAF=27;SAP=3.6093;SAR=31;SC=ATTTTCTTTTCTTTTTTTTTT;SRB=0.37553;SRF=804;SRP=291.14;SRR=1337;TC;TR=12;TU=T;VQSLOD=3.1540;set=filterInVQSR-2of5;sumGLbyD=2.84 +20 34387589 rs112431805 CT C,CTT 4039.10 PASS AA=121;AB=0.75368;ABA=117;ABP=268.53;ABR=358;AC=84,139;AF=0.07047,0.11661;AN=1192;BL=5557;BR=3901;BVAR;BaseQRankSum=2.693;DB;DP=10157;Dels=0.03;EL=47;EPP=16.093;ER=74;FR;FS=7.639;HETAR=89;HOMA=2;HOMR=913;HP=13;HR=11;HRun=11;HU=T;INS;InbreedingCoeff=0.2097;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.17509;LRBP=632.63;MQ0Fraction=0.0000;MQM=49.802;MQRankSum=-0.801;NF;NR;NS=1004;PP;RA=3789;RL=77;RPP=22.554;RR=44;RUN=1;ReadPosRankSum=-2.691;SAB=0.3719;SAF=45;SAP=20.256;SAR=76;SC=AAGAAGTGTTCTTTTTTTTTT;SRB=0.40987;SRF=1553;SRP=270.35;SRR=2236;TC;TR=11;TU=T;VQSLOD=4.0473;set=filterInVQSR-2of5;sumGLbyD=4.64 +20 34493409 rs73621682 C CAG 62288.93 PASS AA=1069;AB=0.54863;ABA=826;ABP=40.606;ABR=1004;AC=257;AF=0.3640;AN=706;BL=41524;BR=47039;BVAR;BaseQRankSum=-24.248;DB;DP=30195;DP4=1743,1636,614,487;Dels=0.00;EL=582;EPP=21.343;ER=487;FQ=999;FR;FS=5.080;HETAR=298;HOMA=63;HOMR=712;HP=1;HPLen=1;HR=1;HRun=0;HU=A;INDEL;INS;InbreedingCoeff=0.1437;IndelType=INS.NumRepetitions_2.EventLength_2.RepeatExpansion_AG.;LEN=2;LRB=0.062272;LRBP=748.76;MQ=77.99;MQ0=3;MQ0Fraction=0.0015;MQM=54.446;MQRankSum=0.160;NF;NR;NS=1073;PP;PV4=0.016,1,0.01,1;RA=4461;RL=526;RPP=3.5973;RR=543;RUN=1;ReadPosRankSum=-1.716;SAB=0.57343;SAF=613;SAP=53.08;SAR=456;SC=AGGAAGAGATCAGAGCTCCCC;SRB=0.52634;SRF=2348;SRP=29.892;SRR=2113;TC;TR=4;TU=AG;VQSLOD=8.7047;dbSNP=130;set=Intersection;sumGLbyD=49.82 +20 35957317 . CTGACT C,CGACT 4370.96 PASS ABR=81;AC=22,1;AF=0.0321,0.0015;AF1=0.04523;AN=686;BVAR;BaseQRankSum=7.969;CI95=0.0354,0.05752;DEL;DP=16632;DP4=1942,1815,17,21;Dels=0.03;FQ=999;FR;FS=0.531;HOMA=1;HOMR=998;HP=2;HPLen=1;HR=1;HRun=0;HU=T;INDEL;InbreedingCoeff=0.0587;IndelType=MULTIALLELIC_INDEL;MQ=83.38;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-7.201;NF;NR;NS=1020;PP;PV4=0.42,0.00017,4.5e-12,1;RA=4620;RUN=1;ReadPosRankSum=-1.007;SC=CCTCTCAGCTCTGACTGAGTC;SRB=0.50043;SRF=2312;SRP=3.0178;SRR=2308;TC;TR=8;TU=ACTG;VQSLOD=9.9778;dbSNP=130;set=Intersection;sumGLbyD=36.45 +20 36136198 . GTGTC G 2078.76 PASS AA=35;AB=0.54167;ABA=33;ABP=4.096;ABR=39;AC=17;AF=0.01384;AN=1228;BL=1212;BR=1523;BVAR;BaseQRankSum=6.900;DEL;DP=22483;DP4=1696,2291,9,16;Dels=0.01;EL=9;EPP=20.94;ER=26;FQ=999;FR;FS=3.023;HETAR=13;HOMA=1;HOMR=1061;HP=1;HPLen=1;HR=1;HRun=0;HU=T;INDEL;InbreedingCoeff=0.1113;IndelType=DEL.NumRepetitions_2.EventLength_4.;LEN=4;LRB=0.11371;LRBP=79.803;MQ=93.98;MQ0=1;MQ0Fraction=0.0003;MQM=83.686;MQRankSum=-1.683;NF;NR;NS=1075;PP;PV4=0.55,1,0.0083,1;RA=5771;RL=19;RPP=3.5687;RR=16;RUN=1;ReadPosRankSum=0.618;SAB=0.37143;SAF=13;SAP=8.0357;SAR=22;SC=TATCATTTTAGTGTCTGTCTG;SRB=0.44966;SRF=2595;SRP=130.03;SRR=3176;TC;TR=11;TU=CTGT;VQSLOD=10.1935;set=Intersection;sumGLbyD=31.66 +20 36250522 . CA C 37933 PASS AA=51;AB=0.95582;ABA=44;ABP=1800.5;ABR=952;AC=23;AF=0.01885;AN=1220;BL=691;BR=3464;BVAR;BaseQRankSum=-2.418;DEL;DP=11998;Dels=0.00;EL=18;EPP=12.59;ER=33;FS=2.307;HETAR=348;HOMA=534;HOMR=164;HRun=1;InbreedingCoeff=0.0763;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.66739;LRBP=4021.7;MQ0=2;MQ0Fraction=0.0006;MQM=53.647;MQRankSum=1.083;NS=1047;RA=1663;RL=2;RPP=97.065;RR=49;RUN=1;ReadPosRankSum=-12.726;SAB=0.68627;SAF=35;SAP=18.381;SAR=16;SRB=0.59651;SRF=992;SRP=137.56;SRR=671;VQSLOD=4.1346;set=filterInVQSR-2of5;sumGLbyD=3.29 +20 36285033 rs34715186 AT A 39417 PASS AA=530;AB=0.5406;ABA=447;ABP=16.939;ABR=526;AC=88;AF=0.0950;AN=926;BL=20722;BR=20406;BVAR;BaseQRankSum=15.611;DB;DEL;DP=36713;DP4=2551,2475,236,218;Dels=0.09;EL=241;EPP=12.45;ER=289;FQ=999;FR;FS=1.290;HETAR=141;HOMA=16;HOMR=926;HP=2;HPLen=3;HR=3;HRun=1;HU=A;INDEL;InbreedingCoeff=0.0742;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.0076833;LRBP=8.2825;MQ=104.81;MQ0=0;MQ0Fraction=0.0000;MQM=84.285;MQRankSum=-0.702;NF;NR;NS=1083;PP;PV4=0.62,1,1,1;RA=6562;RL=263;RPP=3.0759;RR=267;RUN=1;ReadPosRankSum=0.090;SAB=0.55849;SAF=296;SAP=18.76;SAR=234;SC=AAAAACACAAATCAGATCGTG;SRB=0.51707;SRF=3393;SRP=19.614;SRR=3169;TC;TR=3;TU=A;VQSLOD=10.5533;dbSNP=126;set=Intersection;sumGLbyD=14.15 +20 36384872 . CTG C 43532.41 PASS AC=1213;AF=0.99589;AN=1218;BaseQRankSum=0.802;DP=3208;FS=9.727;HRun=0;HaplotypeScore=46.6153;InbreedingCoeff=0.1085;IndelType=DEL.NumRepetitions_7.EventLength_2.RepeatExpansion_TG.;MQ=58.37;MQ0=50;MQ0Fraction=0.0156;MQRankSum=-1.672;QD=13.57;ReadPosRankSum=2.063;SB=-18894.12;VQSLOD=4.7353;set=VQSR +20 36542802 . GTA G 31310.15 PASS AA=1481;AB=0.67546;ABA=1378;ABP=1138.4;ABR=2868;AC=437;AF=0.35938;AN=1216;BL=25719;BR=95500;BVAR;BaseQRankSum=9.478;DEL;DP=18068;DS;Dels=0.10;EL=889;EPP=132.34;ER=592;FS=320.726;HETAR=591;HOMA=44;HOMR=378;HRun=0;InbreedingCoeff=-0.4197;IndelType=DEL.NumRepetitions_1.EventLength_2.RepeatExpansion_TA.;LEN=2;LRB=0.57566;LRBP=87231;MQ0Fraction=0.0091;MQM=29.319;MQRankSum=-3.409;NS=1013;RA=4037;RL=3;RPP=3193;RR=1478;RUN=1;ReadPosRankSum=-6.687;SAB=0.40041;SAF=593;SAP=130.61;SAR=888;SRB=0.39014;SRF=1575;SRP=426.21;SRR=2462;VQSLOD=-1.6586;set=filterInVQSR-2of5;sumGLbyD=5.49 +20 36985025 . CCA C 4.57 PASS AC=0;AF=0.0000;AN=682;BaseQRankSum=4.199;DP=1504;FS=1.036;HRun=0;HaplotypeScore=18.5241;InbreedingCoeff=0.0460;IndelType=DEL.NumRepetitions_6.EventLength_2.RepeatExpansion_CA.;MQ=57.04;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-1.774;ReadPosRankSum=-2.105;VQSLOD=6.7455;set=VQSR +20 37139725 . CAG C 250.77 PASS AF=0.0084;AF1=0.0139;BaseQRankSum=4.131;CI95=0.00885,0.01991;DP=7973;DP4=1808,1990,2,7;Dels=0.01;FQ=104;FR;FS=11.160;HP=3;HPLen=2;HR=1;HRun=0;HU=A;INDEL;InbreedingCoeff=-0.0001;IndelType=DEL.NumRepetitions_3.EventLength_2.RepeatExpansion_AG.;MQ=103.71;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-3.378;NF;NR;PP;PV4=0.18,0.0011,0.041,1;ReadPosRankSum=0.605;SC=AGATGGGGAACAGAGAGCAAG;TC;TR=6;TU=AG;VQSLOD=7.0630;set=Intersection;sumGLbyD=12.13 +20 37213224 . G GTA 3230.05 PASS AA=32;AB=0.50769;ABA=32;ABP=3.0437;ABR=33;AC=12;AF=0.0168;AF1=0.02635;AN=714;BL=1271;BR=1743;BVAR;BaseQRankSum=-7.288;CI95=0.02212,0.03319;DP=14304;DP4=2180,2256,13,21;Dels=0.00;EL=20;EPP=7.3532;ER=12;FQ=999;FR;FS=7.863;HETAR=9;HOMA=0;HOMR=1043;HP=1;HPLen=1;HR=1;HRun=0;HU=T;INDEL;INS;InbreedingCoeff=0.0410;IndelType=INS.NumRepetitions_1.EventLength_2.RepeatExpansion_TA.;LEN=2;LRB=0.1566;LRBP=163.52;MQ=95.56;MQ0=1;MQ0Fraction=0.0005;MQM=51.562;MQRankSum=0.420;NF;NR;NS=1052;PP;PV4=0.23,1,0.03,0.33;RA=5138;RL=11;RPP=9.7962;RR=21;RUN=1;ReadPosRankSum=-1.122;SAB=0.28125;SAF=9;SAP=16.311;SAR=23;SC=TTTGCATCCAGTAGCACCACT;SRB=0.42293;SRF=2173;SRP=268.11;SRR=2965;TC;TR=1;TU=T;VQSLOD=9.7315;set=Intersection;sumGLbyD=36.69 +20 37282014 . ATGG A 2518.52 PASS AF=0.03519;BaseQRankSum=11.994;DP=24592;DP4=415,3804,8,49;DS;Dels=0.01;FQ=999;FR;FS=2.049;HP=1;HPLen=1;HR=1;HRun=0;HU=T;INDEL;InbreedingCoeff=0.1028;IndelType=DEL.NumRepetitions_5.EventLength_3.;MQ=51.01;MQ0Fraction=0.0139;MQRankSum=-5.912;NF;NR;PP;PV4=0.27,1,0.22,0.015;ReadPosRankSum=1.781;SC=GGTGGTGATGATGGTGGTGGT;TC;TR=17;TU=GGT;VQSLOD=2.1183;set=filterInVQSR-2of5;sumGLbyD=9.05 +20 37532218 . GTCCGTCCA ATCCGTCCA,G 76120.88 PASS AC=998;AF=0.92924;AN=1074;BaseQRankSum=-2.877;DP=3087;FR;FS=9.889;HP=2;HPLen=2;HR=1;HRun=0;HU=T;HaplotypeScore=71.6244;InbreedingCoeff=-0.0027;IndelType=MIXED;MQ=52.68;MQ0=543;MQ0Fraction=0.1759;MQRankSum=-1.750;NF;NR;PP;QD=24.98;ReadPosRankSum=-0.850;SB=-36635.43;SC=CCGTCCGTCCGTCCGTCCATC;TC;TR=19;TU=CCGT;VQSLOD=5.3068;set=Intersection +20 37712193 . AAG A 2670.33 PASS AA=106;AB=0.62821;ABA=87;ABP=36.418;ABR=147;AC=53;AF=0.0759;AN=698;BL=4672;BR=4303;BVAR;BaseQRankSum=13.696;DEL;DP=15155;DP4=1340,1852,32,52;Dels=0.06;EL=57;EPP=4.3214;ER=49;FR;FS=0.824;HETAR=43;HOMA=7;HOMR=982;HP=1;HPLen=2;HR=2;HRun=0;HU=A;INDEL;InbreedingCoeff=0.0861;IndelType=DEL.NumRepetitions_3.EventLength_2.RepeatExpansion_AG.;LEN=2;LRB=0.041114;LRBP=35.954;MQ=86.12;MQ0=0;MQ0Fraction=0.0000;MQM=54.236;MQRankSum=-5.745;NF;NR;NS=1034;PP;PV4=0.5,7.3e-26,1.1e-10,1;RA=4423;RL=58;RPP=5.0589;RR=48;RUN=1;ReadPosRankSum=2.617;SAB=0.38679;SAF=41;SAP=14.81;SAR=65;SC=GAAAATTCTGAAGAGAGTCAG;SRB=0.43093;SRF=1906;SRP=186.29;SRR=2517;TC;TR=6;TU=AG;VQSLOD=9.8131;set=Intersection;sumGLbyD=14.20 +20 37739002 . T TCA 1395.38 PASS AA=16;AB=0.48387;ABA=16;ABP=3.0803;ABR=15;AC=11;AF=0.00950;AN=1158;BL=504;BR=630;BVAR;BaseQRankSum=-3.257;DP=13617;DP4=1660,883,7,5;Dels=0.00;EL=7;EPP=3.5532;ER=9;FR;FS=1.114;HETAR=9;HOMA=0;HOMR=991;HP=1;HPLen=2;HR=2;HRun=0;HU=T;INDEL;INS;InbreedingCoeff=0.0527;IndelType=INS.NumRepetitions_1.EventLength_2.RepeatExpansion_CA.;LEN=2;LRB=0.11111;LRBP=33.411;MQ=88.41;MQ0=0;MQ0Fraction=0.0000;MQM=83.75;MQRankSum=1.713;NF;NR;NS=1000;PP;PV4=0.76,1,1,0.5;RA=3257;RL=6;RPP=5.1818;RR=10;RUN=1;ReadPosRankSum=1.190;SAB=0.6875;SAF=11;SAP=7.8961;SAR=5;SC=CCTTTTTTGTTCATTTCTGCA;SRB=0.68806;SRF=2241;SRP=1003.5;SRR=1016;TC;TR=2;TU=T;VQSLOD=10.2220;set=Intersection;sumGLbyD=41.32 +20 38395256 . TTGAG T 633.19 PASS AF=0.0028;BaseQRankSum=5.667;DP=3839;Dels=0.00;FR;FS=10.238;HP=2;HPLen=3;HR=3;HRun=0;HU=T;InbreedingCoeff=-0.0097;IndelType=DEL.NumRepetitions_1.EventLength_4.;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-1.276;NF;NR;PP;ReadPosRankSum=-1.016;SC=ATGTGTTTGTTTGAGTATGTT;TC;TR=10;TU=GTTT;VQSLOD=6.4906;set=Intersection;sumGLbyD=10.83 +20 39345038 . CTGAACCATAATGTG C,CCCATAATGTG 60744.52 PASS AA=23;AB=0.67143;ABA=23;ABP=20.878;ABR=47;AC=232,2;AF=0.19366,0.00167;AN=1198;BL=1607;BR=1843;BVAR;BaseQRankSum=30.955;DEL;DP=31490;DP4=1729,2100,265,278;Dels=0.13;EL=6;EPP=14.434;ER=17;FQ=999;FR;FS=1.767;HETAR=18;HOMA=0;HOMR=1015;HP=1;HPLen=2;HR=2;HRun=0;HU=C;INDEL;InbreedingCoeff=0.1991;IndelType=MULTIALLELIC_INDEL;LEN=14;LRB=0.068406;LRBP=38.066;MQ=104.60;MQ0=0;MQ0Fraction=0.0000;MQM=189.83;MQRankSum=-16.579;NF;NR;NS=1033;PP;PV4=0.12,1,5.5e-137,1;RA=5286;RL=14;RPP=5.3706;RR=9;RUN=1;ReadPosRankSum=4.323;SAB=0.56522;SAF=13;SAP=3.86;SAR=10;SC=TGGGCTGGACCTGAACCATAA;SRB=0.46311;SRF=2448;SRP=65.493;SRR=2838;TC;TR=2;TU=C;VQSLOD=6.2643;dbSNP=130;set=Intersection;sumGLbyD=65.43 +20 39418008 . AG A 46796 PASS AA=113;AB=0.9511;ABA=80;ABP=2894.6;ABR=1556;AC=30;AF=0.02412;AN=1244;BL=638;BR=6936;BVAR;BaseQRankSum=7.280;DEL;DP=14307;Dels=0.00;EL=50;EPP=6.2579;ER=63;FR;FS=5.707;HETAR=473;HOMA=361;HOMR=246;HP=3;HR=3;HRun=3;HU=G;InbreedingCoeff=0.0272;IndelType=DEL.NumRepetitions_3.EventLength_1.RepeatExpansion_G.;LEN=1;LRB=0.83153;LRBP=11375;MQ0=0;MQ0Fraction=0.0000;MQM=62.398;MQRankSum=3.530;NF;NR;NS=1089;PP;RA=3000;RL=3;RPP=223.02;RR=110;RUN=1;ReadPosRankSum=-18.601;SAB=0.58407;SAF=66;SAP=9.9475;SAR=47;SC=ACTGGGGGAAAGGGATTCTAG;SRB=0.494;SRF=1482;SRP=3.9484;SRR=1518;TC;TR=3;TU=G;VQSLOD=4.5834;set=Intersection;sumGLbyD=3.06 +20 39876961 . GT G,GTT,GTTT 2302.10 PASS ABR=496;AC=45,51,45;AF=0.03664,0.04153,0.03664;AN=1228;BVAR;BaseQRankSum=4.462;DP=37649;DP4=1457,1975,57,59;Dels=0.02;FR;FS=9.938;HOMA=0;HOMR=978;HP=10;HPLen=10;HR=10;HRun=10;HU=T;INDEL;INS;InbreedingCoeff=0.2583;IndelType=MULTIALLELIC_INDEL;MQ=97.28;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.246;NF;NR;NS=1063;PP;PV4=0.15,1,1.9e-09,0.016;RA=5185;RUN=1;ReadPosRankSum=-4.954;SC=AGTTTCTCCGGTTTTTTTTTT;SRB=0.47464;SRF=2461;SRP=31.978;SRR=2724;TC;TR=10;TU=T;VQSLOD=4.9752;set=Intersection;sumGLbyD=4.39 +20 41013333 . TC T 20681 PASS AA=137;AB=0.89211;ABA=134;ABP=1661.6;ABR=1108;AC=68;AF=0.05601;AN=1214;BL=1091;BR=8981;BVAR;BaseQRankSum=1.354;DEL;DP=12998;Dels=0.01;EL=57;EPP=11.395;ER=80;FS=0.758;HETAR=359;HOMA=100;HOMR=610;HRun=1;InbreedingCoeff=0.0104;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;LEN=1;LRB=0.78336;LRBP=13424;MQ0=1;MQ0Fraction=0.0003;MQM=67.745;MQRankSum=2.563;NS=1072;RA=4447;RL=5;RPP=258.66;RR=132;RUN=1;ReadPosRankSum=-14.092;SAB=0.59124;SAF=81;SAP=12.917;SAR=56;SRB=0.54194;SRF=2410;SRP=70.947;SRR=2037;VQSLOD=3.7531;set=filterInVQSR-2of5;sumGLbyD=4.14 +20 41659532 . GC G 40544 PASS AA=42;AB=0.97149;ABA=39;ABP=2644.5;ABR=1329;AC=15;AF=0.0209;AN=716;BL=2531;BR=135;BVAR;BaseQRankSum=-2.537;DEL;DP=12219;Dels=0.00;EL=25;EPP=6.3192;ER=17;FS=2.656;HETAR=374;HOMA=155;HOMR=551;HRun=1;InbreedingCoeff=-0.0270;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;LEN=1;LRB=0.89872;LRBP=4678.9;MQ0=0;MQ0Fraction=0.0000;MQM=103.31;MQRankSum=2.828;NS=1088;RA=4736;RL=41;RPP=85.733;RR=1;RUN=1;ReadPosRankSum=-9.702;SAB=0.57143;SAF=24;SAP=4.8716;SAR=18;SRB=0.5625;SRF=2664;SRP=163.7;SRR=2072;VQSLOD=4.3267;set=Intersection;sumGLbyD=3.22 +20 41845580 . GA G 49310 PASS AA=83;AB=0.95258;ABA=69;ABP=2591.6;ABR=1386;AC=46;AF=0.03740;AN=1230;BL=1320;BR=5150;BVAR;BaseQRankSum=-1.121;DEL;DP=13336;Dels=0.00;EL=36;EPP=6.1759;ER=47;FR;FS=0.372;HETAR=442;HOMA=341;HOMR=295;HP=2;HR=3;HRun=1;HU=G;InbreedingCoeff=0.0238;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.59196;LRBP=4926.2;MQ0=0;MQ0Fraction=0.0000;MQM=89.048;MQRankSum=0.897;NF;NR;NS=1080;PP;RA=3006;RL=5;RPP=142.43;RR=78;RUN=1;ReadPosRankSum=-15.412;SAB=0.55422;SAF=46;SAP=5.1294;SAR=37;SC=CCAGCTGTGGGAGAGAAACAT;SRB=0.47971;SRF=1442;SRP=13.762;SRR=1564;TC;TR=6;TU=AG;VQSLOD=4.4669;set=Intersection;sumGLbyD=3.65 +20 42209428 . GC G 13163 PASS AA=89;AB=0.86677;ABA=83;ABP=730.96;ABR=540;AC=39;AF=0.03218;AN=1212;BL=950;BR=5334;BVAR;BaseQRankSum=-10.119;DEL;DP=10692;Dels=0.01;EL=48;EPP=4.2058;ER=41;FS=0.000;HETAR=259;HOMA=727;HOMR=54;HRun=1;InbreedingCoeff=0.0448;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;LEN=1;LRB=0.69764;LRBP=6644.4;MQ0=0;MQ0Fraction=0.0000;MQM=126.55;MQRankSum=4.223;NS=1040;RA=723;RL=12;RPP=106.09;RR=77;RUN=1;ReadPosRankSum=-17.362;SAB=0.39326;SAF=35;SAP=11.818;SAR=54;SRB=0.37898;SRF=274;SRP=94.99;SRR=449;VQSLOD=3.7157;set=filterInVQSR-2of5;sumGLbyD=3.48 +20 42281109 . T TAG 2321.12 PASS AC=181;AF=0.3740;AN=484;BaseQRankSum=8.977;DP=435;FS=17.001;HRun=0;HaplotypeScore=14.6734;InbreedingCoeff=0.2340;IndelType=INS.NOVEL_2.;MQ=53.88;MQ0=47;MQ0Fraction=0.1080;MQRankSum=0.762;QD=12.41;ReadPosRankSum=3.399;SB=-1299.73;VQSLOD=4.8926;set=VQSR +20 42436117 . TC T 38933 PASS AA=18;AB=0.98435;ABA=17;ABP=2215.9;ABR=1069;AC=15;AF=0.01223;AN=1226;BL=498;BR=428;BVAR;BaseQRankSum=-7.224;DEL;DP=12436;Dels=0.00;EL=1;EPP=33.893;ER=17;FS=2.469;HETAR=303;HOMA=614;HOMR=123;HRun=1;InbreedingCoeff=0.0439;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;LEN=1;LRB=0.075594;LRBP=14.501;MQ0=0;MQ0Fraction=0.0000;MQM=98.611;MQRankSum=1.086;NS=1075;RA=1656;RL=10;RPP=3.4928;RR=8;RUN=1;ReadPosRankSum=-17.765;SAB=0.5;SAF=9;SAP=3.0103;SAR=9;SRB=0.49879;SRF=826;SRP=3.0313;SRR=830;VQSLOD=4.0821;set=filterInVQSR-2of5;sumGLbyD=3.04 +20 42682214 . C A,CAT 3904.51 PASS AA=24;AB=0.6383;ABA=17;ABP=10.818;ABR=30;AC=0;AF=0.0000;AN=636;BL=1119;BR=949;BVAR;BaseQRankSum=1.426;DP=6509;Dels=0.00;EL=9;EPP=6.2675;ER=15;FR;HETAR=12;HOMA=3;HOMR=876;HP=2;HPLen=1;HR=1;HRun=0;HU=A;INS;InbreedingCoeff=0.0006;IndelType=MIXED;LEN=2;LRB=0.082205;LRBP=33.356;MQ0Fraction=0.0046;MQM=40.792;MQRankSum=-0.296;NF;NR;NS=891;PP;QD=32.81;RA=2679;RL=15;RPP=6.2675;RR=9;RUN=1;ReadPosRankSum=-1.806;SAB=0.75;SAF=18;SAP=16.039;SAR=6;SB=-924.23;SC=TATACACACACATATATATAC;SRB=0.66293;SRF=1776;SRP=620.76;SRR=903;TC;TR=9;TU=AC;set=filterInVQSR-2of5;sumGLbyD=32.75 +20 42973456 . CA C,CAA,CAAA 2675 PASS AA=90;AB=0.79177;ABA=86;ABP=308.39;ABR=327;AC=77,61,39;AF=0.06492,0.05143,0.03288;AN=1186;BL=2983;BR=4446;BVAR;BaseQRankSum=2.422;DP=9416;Dels=0.03;EL=39;EPP=6.4847;ER=51;FR;FS=31.555;HETAR=75;HOMA=1;HOMR=888;HP=11;HR=11;HRun=11;HU=A;INS;InbreedingCoeff=0.2696;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.19693;LRBP=628.63;MQ0=0;MQ0Fraction=0.0000;MQM=55.567;MQRankSum=1.777;NF;NR;NS=964;PP;RA=3601;RL=37;RPP=9.1869;RR=53;RUN=1;ReadPosRankSum=-4.991;SAB=0.55556;SAF=50;SAP=5.423;SAR=40;SC=TAGTGACTGTCAAAAAAAAAA;SRB=0.60622;SRF=2183;SRP=355.91;SRR=1418;TC;TR=11;TU=A;VQSLOD=1.0763;set=filterInVQSR-2of5;sumGLbyD=4.05 +20 43091870 . TC T 2455.60 PASS AA=120;AB=0.10619;ABA=101;ABP=155.22;ABR=12;AC=42;AF=0.03825;AN=1098;BL=573;BR=8744;BVAR;BaseQRankSum=-13.513;DEL;DP=9139;Dels=0.00;EL=64;EPP=4.1684;ER=56;FS=9.856;HETAR=118;HOMA=820;HOMR=0;HRun=1;InbreedingCoeff=0.0833;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;LEN=1;LRB=0.877;LRBP=15564;MQ0Fraction=0.0017;MQM=45.1;MQRankSum=2.266;NS=938;RA=24;RL=1;RPP=254.97;RR=119;RUN=1;ReadPosRankSum=-15.803;SAB=0.475;SAF=57;SAP=3.6617;SAR=63;SRB=0.54167;SRF=13;SRP=3.3722;SRR=11;VQSLOD=3.9930;set=filterInVQSR-2of5;sumGLbyD=3.09 +20 43233648 rs74585029 GA G,GAA 1504.40 PASS AA=113;AB=0.78652;ABA=95;ABP=320.31;ABR=350;AC=41,65;AF=0.03394,0.05381;AF1=0.0115;AN=1208;BL=4677;BR=5548;BVAR;BaseQRankSum=6.744;CI95=0.004274,0.01852;DB;DEL;DP=13996;DP4=1736,1549,15,17;Dels=0.03;EL=69;EPP=15.021;ER=44;FQ=14;FR;FS=12.174;HETAR=119;HOMA=15;HOMR=892;HP=11;HPLen=10;HR=10;HRun=10;HU=A;INDEL;InbreedingCoeff=0.2359;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.085183;LRBP=164.12;MQ=89.12;MQ0Fraction=0.0000;MQM=69.867;MQRankSum=2.513;NF;NR;NS=1027;PP;PV4=0.59,1,0.065,0.33;RA=3845;RL=46;RPP=11.485;RR=67;RUN=1;ReadPosRankSum=-4.957;SAB=0.33628;SAF=38;SAP=29.318;SAR=75;SC=AAAACAGCCAGAAAAAAAAAA;SRB=0.43667;SRF=1679;SRP=136.95;SRR=2166;TC;TR=10;TU=A;VQSLOD=4.5121;set=Intersection;sumGLbyD=8.22 +20 43246548 . AC A,CC 41579.13 PASS AA=382;AB=0.72402;ABA=316;ABP=502.11;ABR=829;AC=1197;AF=0.99254;AN=1206;BL=9889;BR=14293;BVAR;BaseQRankSum=1.373;DEL;DP=10477;DS;Dels=0.05;EL=243;EPP=64.494;ER=139;FS=29.162;HETAR=291;HOMA=85;HOMR=624;HPLen=10;InbreedingCoeff=0.1392;IndelType=MIXED;LEN=1;LRB=0.18212;LRBP=1744.6;MQ0Fraction=0.0024;MQM=48.471;MQRankSum=5.726;NS=1001;RA=3138;RL=174;RPP=9.5816;RR=208;RUN=1;ReadPosRankSum=5.755;SAB=0.79843;SAF=305;SAP=298.51;SAR=77;SRB=0.70363;SRF=2208;SRP=1133.2;SRR=930;VQSLOD=5.6318;set=Intersection;sumGLbyD=5.22 +20 43258646 . T TT 1107.17 PASS AC=97;AF=0.08420;AN=1152;BaseQRankSum=4.525;DP=2345;FS=19.308;HRun=9;HaplotypeScore=13.6276;InbreedingCoeff=0.1299;IndelType=INS.NumRepetitions_10orMore.EventLength_1.RepeatExpansion_T.;MQ=76.70;MQ0=0;MQ0Fraction=0.0000;MQRankSum=1.395;QD=2.67;ReadPosRankSum=-4.696;SB=-899.41;VQSLOD=5.4523;set=VQSR +20 43718299 . ATTACT A 5497.06 PASS AA=56;AB=0.51818;ABA=53;ABP=3.3262;ABR=57;AC=18;AF=0.0251;AF1=0.03729;AN=718;BL=2321;BR=2591;BVAR;BaseQRankSum=11.142;CI95=0.03319,0.04425;DEL;DP=17576;DP4=2460,2692,31,22;Dels=0.02;EL=28;EPP=3.0103;ER=28;FQ=999;FR;FS=9.689;HETAR=15;HOMA=1;HOMR=1068;HP=2;HPLen=2;HR=2;HRun=0;HU=T;INDEL;InbreedingCoeff=0.0448;IndelType=DEL.NumRepetitions_1.EventLength_5.;LEN=5;LRB=0.054967;LRBP=35.238;MQ=96.55;MQ0=0;MQ0Fraction=0.0000;MQM=50.286;MQRankSum=-5.149;NF;NR;NS=1084;PP;PV4=0.13,1,1.2e-12,1;RA=6745;RL=28;RPP=3.0103;RR=28;RUN=1;ReadPosRankSum=0.828;SAB=0.5;SAF=28;SAP=3.0103;SAR=28;SC=ATGACAGTGGATTACTTTAGT;SRB=0.46835;SRF=3159;SRP=61.709;SRR=3586;TC;TR=2;TU=T;VQSLOD=7.8832;set=Intersection;sumGLbyD=46.60 +20 43981749 . A AAAAAAC,AC 20899.71 PASS ABR=192;AC=91,0;AF=0.1285,0.0000;AN=708;BVAR;BaseQRankSum=7.858;DP=23372;DP4=1554,1457,55,42;Dels=0.00;FR;FS=0.000;HOMA=4;HOMR=995;HP=6;HPLen=7;HR=7;HRun=0;HU=A;INDEL;INS;InbreedingCoeff=0.2109;IndelType=MULTIALLELIC_INDEL;MQ=95.59;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-12.081;NF;NR;NS=1051;PP;PV4=0.35,1,8.9e-73,1;RA=5027;RUN=1;ReadPosRankSum=-1.359;SC=TACACTAGCAAAAAAACAAAA;SRB=0.48518;SRF=2439;SRP=12.6;SRR=2588;TC;TR=7;TU=A;VQSLOD=8.0916;set=Intersection;sumGLbyD=54.33 +20 43999274 . TCAAA T 2948.85 PASS AA=59;AB=0.59441;ABA=58;ABP=14.08;ABR=85;AC=20;AF=0.0290;AF1=0.04249;AN=690;BL=2277;BR=2436;BVAR;BaseQRankSum=9.320;CI95=0.0354,0.05088;DEL;DP=14599;DP4=2052,2303,21,22;Dels=0.03;EL=32;EPP=3.9304;ER=27;FQ=999;FR;FS=0.000;HETAR=21;HOMA=0;HOMR=1043;HP=2;HPLen=1;HR=1;HRun=0;HU=C;INDEL;InbreedingCoeff=-0.0037;IndelType=DEL.NumRepetitions_1.EventLength_4.;LEN=4;LRB=0.033736;LRBP=14.658;MQ=90.05;MQ0=0;MQ0Fraction=0.0000;MQM=75.339;MQRankSum=-1.294;NF;NR;NS=1064;PP;PV4=0.88,1,0.0026,1;RA=5732;RL=27;RPP=3.9304;RR=32;RUN=1;ReadPosRankSum=-0.915;SAB=0.47458;SAF=28;SAP=3.3415;SAR=31;SC=GGTACACAGCTCAAACAGTCT;SRB=0.4836;SRF=2772;SRP=16.4;SRR=2960;TC;TR=1;TU=C;VQSLOD=9.8086;set=Intersection;sumGLbyD=27.09 +20 44098622 . C CG 1092.40 PASS AA=129;AB=0.77301;ABA=74;ABP=214.06;ABR=252;AC=45;AF=0.0455;AN=988;BL=6586;BR=3029;BVAR;BaseQRankSum=2.802;DP=5177;Dels=0.00;EL=122;EPP=225.63;ER=7;FR;FS=355.273;HETAR=66;HOMA=11;HOMR=734;HP=6;HR=4;HRun=4;HU=G;INS;InbreedingCoeff=0.1759;IndelType=INS.NumRepetitions_4.EventLength_1.RepeatExpansion_G.;LEN=1;LRB=0.36994;LRBP=2860.4;MQ0=0;MQ0Fraction=0.0000;MQM=52.395;MQRankSum=1.946;NF;NR;NS=811;PP;RA=1981;RL=121;RPP=217.95;RR=8;RUN=1;ReadPosRankSum=-6.413;SAB=0.99225;SAF=128;SAP=274.51;SAR=1;SC=GCGGAAGTGGCGGGGACCCTT;SRB=0.41242;SRF=817;SRP=135;SRR=1164;TC;TR=4;TU=G;VQSLOD=-2.2690;set=filterInVQSR-2of5;sumGLbyD=4.04 +20 44327637 . A AG,AGGGGGG 14351.23 PASS AC=9,211;AF=0.0103,0.2409;AN=876;BaseQRankSum=15.517;DP=1704;FS=6.768;HaplotypeScore=31.5906;InbreedingCoeff=0.1538;IndelType=MULTIALLELIC_INDEL;MQ=54.64;MQ0=4;MQ0Fraction=0.0023;MQRankSum=-12.691;QD=20.83;ReadPosRankSum=-3.583;SB=-6278.99;VQSLOD=5.1556;set=VQSR +20 45202636 . GA G 13269 PASS AA=25;AB=0.96162;ABA=18;ABP=871.09;ABR=451;AC=24;AF=0.02013;AN=1192;BL=567;BR=1728;BVAR;BaseQRankSum=-5.361;DEL;DP=10873;Dels=0.00;EL=10;EPP=5.1818;ER=15;FS=0.928;HETAR=169;HOMA=831;HOMR=45;HRun=1;InbreedingCoeff=0.0999;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.50588;LRBP=1278.4;MQ0=0;MQ0Fraction=0.0000;MQM=170.56;MQRankSum=0.161;NS=1049;RA=632;RL=2;RPP=41.315;RR=23;RUN=1;ReadPosRankSum=-14.760;SAB=0.68;SAF=17;SAP=10.046;SAR=8;SRB=0.51424;SRF=325;SRP=4.1235;SRR=307;VQSLOD=3.9290;set=filterInVQSR-2of5;sumGLbyD=3.90 +20 45417828 . TGAGC T,TGC 4672.90 PASS ABR=317;AC=69,104;AF=0.05712,0.08609;BVAR;BaseQRankSum=18.527;DEL;DP=11835;DS;FS=184.873;HOMA=48;HOMR=575;HaplotypeScore=65.5875;InbreedingCoeff=0.0599;IndelType=MULTIALLELIC_INDEL;MQ=29.78;MQ0=2988;MQ0Fraction=0.3629;MQRankSum=5.052;NS=713;QD=1.11;RA=1581;RUN=1;ReadPosRankSum=6.574;SB=-2116.87;SRB=0.47502;SRF=751;SRP=11.582;SRR=830;VQSLOD=0.0651;set=filterInVQSR-2of5 +20 45525657 rs66759083 TA AA,T 49315 PASS AA=2361;AB=0.45241;ABA=1398;ABP=53.235;ABR=1155;AC=20;AF=0.01701;AN=1176;BL=94913;BR=100886;BVAR;BaseQRankSum=0.740;DB;DEL;DP=30636;DP4=1258,881,1206,999;Dels=0.48;EL=1133;EPP=11.311;ER=1228;FQ=999;FR;FS=7.072;HETAR=503;HOMA=310;HOMR=218;HP=6;HPLen=7;HR=7;HU=T;INDEL;InbreedingCoeff=0.2271;IndelType=MIXED;LEN=1;LRB=0.030506;LRBP=398.68;MQ=102.24;MQ0=0;MQ0Fraction=0.0000;MQM=75.359;MQRankSum=0.148;NF;NR;NS=1031;PP;PV4=0.0064,0,4.6e-23,0.47;RA=2042;RL=1183;RPP=3.0333;RR=1178;RUN=1;ReadPosRankSum=-2.999;SAB=0.52139;SAF=1231;SAP=12.392;SAR=1130;SC=AGGATTTTTTTAAAAAGTTTT;SRB=0.55093;SRF=1125;SRP=49.017;SRR=917;TC;TR=7;TU=T;VQSLOD=7.1651;dbSNP=114;set=Intersection;sumGLbyD=18.51 +20 45783456 . T TG 2355.68 PASS AA=64;AB=0.78521;ABA=61;ABP=203.67;ABR=223;AC=15;AF=0.0165;AN=910;BL=815;BR=5486;BVAR;BaseQRankSum=8.593;DP=10348;Dels=0.00;EL=48;EPP=37.754;ER=16;FS=77.861;HETAR=56;HOMA=1;HOMR=970;HRun=1;INS;InbreedingCoeff=-0.0549;IndelType=INS.NOVEL_1.Novel_G.;LEN=1;LRB=0.74131;LRBP=7522.1;MQ0Fraction=0.0122;MQM=44.562;MQRankSum=-1.258;NS=1027;RA=4750;RL=0;RPP=141.98;RR=64;RUN=1;ReadPosRankSum=-7.047;SAB=0.25;SAF=16;SAP=37.754;SAR=48;SRB=0.6;SRF=2850;SRP=415.59;SRR=1900;VQSLOD=1.3146;set=filterInVQSR-2of5;sumGLbyD=6.03 +20 46517110 . C CT 868.55 PASS AC=15;AF=0.0218;AN=688;BaseQRankSum=8.522;DP=1752;FS=6.570;HRun=0;HaplotypeScore=14.9548;InbreedingCoeff=0.0452;IndelType=INS.NOVEL_1.Novel_T.;MQ=77.73;MQ0=0;MQ0Fraction=0.0000;MQRankSum=3.874;QD=10.98;ReadPosRankSum=-0.733;SB=-396.78;VQSLOD=6.7740;set=VQSR +20 46629361 . TTTCTTTC T,TTTTC 13000.91 PASS AC=188,107;AF=0.2212,0.1259;AN=850;BaseQRankSum=7.214;DP=1846;FS=14.502;HaplotypeScore=40.8481;InbreedingCoeff=0.3210;IndelType=MULTIALLELIC_INDEL;MQ=50.74;MQ0=79;MQ0Fraction=0.0428;MQRankSum=-6.348;QD=13.59;ReadPosRankSum=3.943;SB=-3581.20;VQSLOD=5.9412;set=VQSR +20 46951099 . G GT 1662.30 PASS AA=55;AB=0.7713;ABA=51;ABP=145.58;ABR=172;AC=47;AF=0.03923;AN=1198;BL=3288;BR=2434;BVAR;BaseQRankSum=-4.014;DP=27423;DP4=1483,1590,58,42;Dels=0.01;EL=21;EPP=9.6826;ER=34;FR;FS=9.565;HETAR=48;HOMA=0;HOMR=913;HP=16;HPLen=10;HR=10;HRun=10;HU=T;INDEL;INS;InbreedingCoeff=0.0952;IndelType=INS.NumRepetitions_10orMore.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.14925;LRBP=279.78;MQ=70.36;MQ0Fraction=0.0124;MQM=52.545;MQRankSum=0.717;NF;NR;NS=961;PP;PV4=0.067,1,1,0.17;RA=3035;RL=38;RPP=20.422;RR=17;RUN=1;ReadPosRankSum=-3.014;SAB=0.47273;SAF=26;SAP=3.3656;SAR=29;SC=TTTGTTTTTTGTTTTTTTTTT;SRB=0.36013;SRF=1093;SRP=518.73;SRR=1942;TC;TR=10;TU=T;VQSLOD=5.4779;set=Intersection;sumGLbyD=3.49 +20 47201076 rs58052846 C CT 982.16 PASS AC=50;AF=0.0551;AN=908;BaseQRankSum=12.598;DB;DP=2449;FS=35.648;HRun=0;HaplotypeScore=29.4602;InbreedingCoeff=-0.0542;IndelType=INS.NOVEL_1.Novel_T.;MQ=63.54;MQ0=0;MQ0Fraction=0.0000;MQRankSum=2.196;QD=3.16;ReadPosRankSum=-13.833;SB=-488.19;VQSLOD=6.0429;set=VQSR +20 47965974 rs60011158 G GA 999 PASS AA=21;AB=0.57143;ABA=21;ABP=5.1818;ABR=28;AC=7;AF=0.0101;AF1=0.02061;AN=690;BL=1043;BR=577;BVAR;BaseQRankSum=-3.087;CI95=0.01549,0.02655;DB;DP=14578;DP4=1554,3055,6,17;Dels=0.00;EL=11;EPP=3.1137;ER=10;FQ=999;FR;FS=5.982;HETAR=7;HOMA=0;HOMR=1041;HP=2;HPLen=1;HR=1;HRun=1;HU=A;INDEL;INS;InbreedingCoeff=0.0356;IndelType=INS.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.28765;LRBP=294.09;MQ=80.17;MQ0=0;MQ0Fraction=0.0000;MQM=64.19;MQRankSum=2.137;NF;NR;NS=1048;PP;PV4=0.51,1,1,1;RA=5224;RL=16;RPP=15.522;RR=5;RUN=1;ReadPosRankSum=0.236;SAB=0.38095;SAF=8;SAP=5.5954;SAR=13;SC=TTCATGTACAGAGCTGCTGTG;SRB=0.31183;SRF=1629;SRP=1609.6;SRR=3595;TC;TR=4;TU=AG;VQSLOD=9.5466;dbSNP=129;set=Intersection;sumGLbyD=13.83 +20 48402974 rs57331436 GA G 27741 PASS AA=401;AB=0.5372;ABA=311;ABP=11.089;ABR=361;AC=84;AF=0.1186;AN=708;BL=16591;BR=14776;BVAR;BaseQRankSum=14.621;DB;DEL;DP=30607;DP4=1928,2310,195,225;Dels=0.11;EL=189;EPP=5.8749;ER=212;FQ=999;FR;FS=15.568;HETAR=110;HOMA=30;HOMR=923;HP=4;HPLen=3;HR=1;HRun=3;HU=A;INDEL;InbreedingCoeff=0.1263;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;KGPilot123;LEN=1;LRB=0.057863;LRBP=231.06;MQ=106.68;MQ0=0;MQ0Fraction=0.0000;MQM=63.005;MQRankSum=-2.010;NF;NR;NS=1063;PP;PV4=0.72,1,0.001,1;RA=5258;RL=223;RPP=13.976;RR=178;RUN=1;ReadPosRankSum=1.337;SAB=0.37656;SAF=151;SAP=56.084;SAR=250;SC=TGCCCTCAAAGAGAAAAAGGA;SRB=0.38075;SRF=2002;SRP=652.44;SRR=3256;TC;TR=5;TU=AG;VQSLOD=8.7259;dbSNP=132;set=Intersection;sumGLbyD=15.86 +20 49101936 . C CT 404.46 PASS AC=40;AF=0.03559;AN=1124;BaseQRankSum=0.750;DP=2162;FS=14.291;HRun=2;HaplotypeScore=30.9513;InbreedingCoeff=-0.0082;IndelType=INS.NumRepetitions_2.EventLength_1.RepeatExpansion_T.;MQ=49.78;MQ0=113;MQ0Fraction=0.0523;MQRankSum=-1.289;QD=1.94;ReadPosRankSum=-2.041;SB=-385.48;VQSLOD=4.6365;set=VQSR +20 49731218 . ATTTTATTTTTTATT A,ATTTTATT 8398.93 PASS AF=0.0656,0.0156;AF1=0.0996;BaseQRankSum=13.996;CI95=0.07743,0.1239;DP=6308;DP4=951,1311,23,35;Dels=0.05;FQ=999;FR;FS=12.503;HP=7;HPLen=4;HR=4;HRun=0;HU=T;INDEL;InbreedingCoeff=0.1892;IndelType=MULTIALLELIC_INDEL;MQ=57.61;MQ0Fraction=0.0145;MQRankSum=-5.208;NF;NR;PP;PV4=0.79,1,6.3e-06,0.16;ReadPosRankSum=-2.239;SC=TATTTTATTTATTTTATTTTT;TC;TR=11;TU=ATTT;VQSLOD=4.3191;set=Intersection;sumGLbyD=42.27 +20 49894989 . TA T 172.25 PASS AF=0.0140;BaseQRankSum=7.220;DP=3882;Dels=0.00;FS=17.217;HPLen=2;HRun=1;InbreedingCoeff=0.0531;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;MQ0Fraction=0.0214;MQRankSum=-0.661;ReadPosRankSum=-0.592;VQSLOD=3.0905;set=filterInVQSR-2of5;sumGLbyD=6.60 +20 50010923 rs66516522 C CT,CTGG 35851 PASS ABR=555;AC=310,11;AF=0.26451,0.00939;BVAR;BaseQRankSum=10.662;DB;DP=8188;FR;FS=34.411;HOMA=261;HOMR=399;HP=5;HR=6;HU=C;HaplotypeScore=45.1715;INS;InbreedingCoeff=0.2090;IndelType=MULTIALLELIC_INDEL;MQ=72.80;MQ0=0;MQ0Fraction=0.0000;MQRankSum=9.015;NF;NR;NS=831;PP;QD=9.69;RA=1986;RUN=1;ReadPosRankSum=-24.284;SB=-6038.55;SC=TGTCTGTCCCCCCTCAGCACT;SRB=0.45972;SRF=913;SRP=31.001;SRR=1073;TC;TR=6;TU=C;VQSLOD=6.1824;set=Intersection +20 50228709 rs71192536 TG T 20517 PASS AA=924;AB=0.50203;ABA=735;ABP=3.0633;ABR=741;AC=200;AF=0.16502;AN=1212;BL=35460;BR=34197;BVAR;BaseQRankSum=13.810;DB;DEL;DP=32402;DP4=1760,2065,395,449;Dels=0.16;EL=439;EPP=7.9831;ER=485;FQ=999;FR;FS=0.558;HETAR=242;HOMA=63;HOMR=764;HP=5;HPLen=3;HR=3;HRun=3;HU=G;INDEL;InbreedingCoeff=0.1050;IndelType=DEL.NumRepetitions_3.EventLength_1.RepeatExpansion_G.;LEN=1;LRB=0.018132;LRBP=52.738;MQ=105.83;MQ0=0;MQ0Fraction=0.0000;MQM=75.87;MQRankSum=3.895;NF;NR;NS=1069;PP;PV4=0.7,1.5e-173,1,1;RA=4708;RL=486;RPP=8.4249;RR=438;RUN=1;ReadPosRankSum=1.586;SAB=0.43615;SAF=403;SAP=35.733;SAR=521;SC=GTTTTCCAGGTGGGAAGACCG;SRB=0.44074;SRF=2075;SRP=146.62;SRR=2633;TC;TR=3;TU=G;VQSLOD=10.4820;dbSNP=120;set=Intersection;sumGLbyD=15.35 +20 50236115 . AGG A,ACGGG,AG,AGGG 7429.57 PASS AC=192,13,221,183;AF=0.2115,0.0143,0.2434,0.2015;AN=908;BaseQRankSum=1.045;DP=1177;FS=13.479;HaplotypeScore=11.8294;InbreedingCoeff=0.7959;IndelType=MULTIALLELIC_INDEL;MQ=52.98;MQ0=6;MQ0Fraction=0.0051;MQRankSum=-1.482;QD=7.28;ReadPosRankSum=-2.380;SB=-1229.31;VQSLOD=8.3762;set=VQSR +20 51589568 . TAAAC AAAAC,T 12477.52 PASS AF=0.27949;BaseQRankSum=-28.122;DP=3777;Dels=0.00;FR;FS=31.799;HP=7;HPLen=4;HR=3;HRun=0;HU=A;InbreedingCoeff=-0.1429;IndelType=MIXED;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-1.196;NF;NR;PP;ReadPosRankSum=-16.483;SC=AAATTCAAAATAAACAAACAA;TC;TR=18;TU=AAAC;VQSLOD=3.9201;set=filterInVQSR-2of5;sumGLbyD=52.43 +20 51617742 . TGC T,TGCGC 1374.91 PASS AF=0.06000,0.02000;BaseQRankSum=12.051;DP=6231;Dels=0.00;FS=189.609;HPLen=1;HRun=0;InbreedingCoeff=0.0862;IndelType=MULTIALLELIC_INDEL;MQ0Fraction=0.0180;MQRankSum=-2.959;ReadPosRankSum=-5.090;VQSLOD=-2.8715;set=filterInVQSR-2of5;sumGLbyD=3.97 +20 51770354 . AG A 1010.90 PASS AA=26;AB=0.52727;ABA=26;ABP=3.3656;ABR=29;AC=7;AF=0.0097;AF1=0.01637;AN=718;BL=1034;BR=964;BVAR;BaseQRankSum=5.588;CI95=0.01327,0.02212;DEL;DP=16259;DP4=2785,2239,15,10;Dels=0.01;EL=11;EPP=4.3466;ER=15;FQ=999;FR;FS=3.367;HETAR=8;HOMA=0;HOMR=1064;HP=2;HPLen=2;HR=2;HRun=2;HU=G;INDEL;InbreedingCoeff=0.0557;IndelType=DEL.NumRepetitions_2.EventLength_1.RepeatExpansion_G.;LEN=1;LRB=0.035035;LRBP=8.3357;MQ=90.48;MQ0=0;MQ0Fraction=0.0000;MQM=61.346;MQRankSum=-0.019;NF;NR;NS=1072;PP;PV4=0.69,2.1e-08,0.078,1;RA=6173;RL=13;RPP=3.0103;RR=13;RUN=1;ReadPosRankSum=-0.460;SAB=0.61538;SAF=16;SAP=6.017;SAR=10;SC=GTGGTCCTGCAGGTCAATAAT;SRB=0.56342;SRF=3478;SRP=218.68;SRR=2695;TC;TR=2;TU=G;VQSLOD=10.1601;set=Intersection;sumGLbyD=14.60 +20 51848430 . AT A,ATT 999 PASS AA=39;AB=0.83408;ABA=37;ABP=219.19;ABR=186;AC=14,33;AF=0.0153,0.0359;AF1=0.03062;AN=918;BL=1676;BR=1732;BVAR;BaseQRankSum=3.338;CI95=0.02212,0.03982;DP=14886;DP4=1970,1762,22,31;Dels=0.01;EL=18;EPP=3.5114;ER=21;FQ=999;FR;FS=3.004;HETAR=31;HOMA=0;HOMR=1040;HP=10;HPLen=9;HR=9;HRun=9;HU=T;INDEL;INS;InbreedingCoeff=0.1629;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.016432;LRBP=5.0085;MQ=80.05;MQ0=0;MQ0Fraction=0.0000;MQM=56.667;MQRankSum=0.325;NF;NR;NS=1071;PP;PV4=0.13,1,0.0095,0.064;RA=5318;RL=21;RPP=3.5114;RR=18;RUN=1;ReadPosRankSum=-0.493;SAB=0.46154;SAF=18;SAP=3.5114;SAR=21;SC=ACAAAACAATATTTTTTTTTC;SRB=0.4968;SRF=2642;SRP=3.4823;SRR=2676;TC;TR=9;TU=T;VQSLOD=5.7417;set=Intersection;sumGLbyD=7.57 +20 51897203 . T TG 8427.20 PASS AA=237;AB=0.69846;ABA=215;ABP=246.92;ABR=498;AC=117;AF=0.1662;AN=704;BL=14961;BR=5990;BVAR;BaseQRankSum=22.203;DP=9710;Dels=0.00;EL=83;EPP=49.198;ER=154;FR;FS=9.450;HETAR=123;HOMA=9;HOMR=895;HP=5;HPLen=6;HR=6;HRun=0;HU=T;INS;InbreedingCoeff=-0.0513;IndelType=INS.NOVEL_1.Novel_G.;LEN=1;LRB=0.42819;LRBP=8344.3;MQ0Fraction=0.0291;MQM=45.861;MQRankSum=-10.426;NF;NR;NS=1027;PP;RA=4919;RL=210;RPP=309.85;RR=27;RUN=1;ReadPosRankSum=-1.843;SAB=0.29536;SAF=70;SAP=89.219;SAR=167;SC=TTTGTTTGTTTTTTGTTGTTG;SRB=0.47794;SRF=2351;SRP=23.798;SRR=2568;TC;TR=23;TU=GTTT;VQSLOD=6.2670;set=Intersection;sumGLbyD=8.99 +20 52274070 . AAG A 1400.37 PASS AA=30;AB=0.74227;ABA=25;ABP=52.462;ABR=72;AC=21;AF=0.01756;AN=1196;BL=412;BR=1966;BVAR;BaseQRankSum=6.660;DEL;DP=9362;Dels=0.01;EL=16;EPP=3.2998;ER=14;FS=1.485;HETAR=18;HOMA=2;HOMR=1004;HRun=0;InbreedingCoeff=0.0317;IndelType=DEL.NumRepetitions_1.EventLength_2.RepeatExpansion_AG.;LEN=2;LRB=0.65349;LRBP=2208.2;MQ0Fraction=0.0022;MQM=46.133;MQRankSum=-4.743;NS=1024;RA=3931;RL=2;RPP=51.941;RR=28;RUN=1;ReadPosRankSum=-4.152;SAB=0.4;SAF=12;SAP=5.6161;SAR=18;SRB=0.49784;SRF=1957;SRP=3.1699;SRR=1974;VQSLOD=5.6452;set=Intersection;sumGLbyD=11.11 +20 52351501 . TAC T 199.59 PASS AC=22;AF=0.0238;AN=926;BaseQRankSum=7.874;DP=22911;DP4=2146,1691,26,22;FR;FS=2.898;HP=4;HPLen=3;HR=1;HRun=0;HU=A;HaplotypeScore=18.6111;INDEL;InbreedingCoeff=-0.0326;IndelType=DEL.NumRepetitions_6.EventLength_2.RepeatExpansion_AC.;MQ0=2;MQ0Fraction=0.0007;MQRankSum=1.011;NF;NR;PP;PV4=0.88,0.14,0.16,0.24;QD=1.10;ReadPosRankSum=-1.053;SB=-306.09;SC=GACACACAAATACACACACAC;TC;TR=13;TU=AC;VQSLOD=4.0486;set=filterInVQSR-2of5 +20 52447173 . CA C 503.89 PASS AC=23;AF=0.01891;AN=1216;BaseQRankSum=0.801;DP=3266;FS=2.606;HRun=2;HaplotypeScore=22.1543;InbreedingCoeff=-0.0097;IndelType=DEL.NumRepetitions_2.EventLength_1.RepeatExpansion_A.;MQ=118.02;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-1.309;QD=2.65;ReadPosRankSum=-7.872;SB=-279.27;VQSLOD=4.1900;set=VQSR +20 52498650 . GT G 24069 PASS AA=74;AB=0.90594;ABA=57;ABP=870.4;ABR=549;AC=28;AF=0.02333;AN=1200;BL=505;BR=4514;BVAR;BaseQRankSum=-3.837;DEL;DP=9798;Dels=0.01;EL=41;EPP=4.8883;ER=33;FS=4.085;HETAR=209;HOMA=663;HOMR=121;HRun=1;InbreedingCoeff=0.0334;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.79876;LRBP=6956.6;MQ0=2;MQ0Fraction=0.0007;MQM=57.784;MQRankSum=-2.951;NS=995;RA=957;RL=8;RPP=101.72;RR=66;RUN=1;ReadPosRankSum=-14.806;SAB=0.39189;SAF=29;SAP=10.522;SAR=45;SRB=0.39916;SRF=382;SRP=87.53;SRR=575;VQSLOD=3.8710;set=filterInVQSR-2of5;sumGLbyD=2.90 +20 52823602 rs11469056 CAAA C,CA,CAA,CAAAA,CAAAAA,CAAAAAA,CAAAAAAA,CAAAAAAAA,CAAAAAAAAA,CAAAAAAAAAA 14515.17 PASS AC=24,83,246,109,83,19,10,16,22,59;AF=0.02128,0.07358,0.21809,0.09663,0.07358,0.01684,0.00887,0.01418,0.01950,0.05230;AN=1128;BVAR;BaseQRankSum=4.150;DB;DEL;DP=28279;FR;FS=2.021;HP=17;HR=17;HU=A;HaplotypeScore=27.8032;INS;InbreedingCoeff=0.7740;IndelType=MULTIALLELIC_INDEL;MQ=69.00;MQ0=0;MQ0Fraction=0.0000;MQRankSum=1.418;NF;NR;PP;QD=7.90;RUN=1;ReadPosRankSum=-3.864;SB=-3244.40;SC=GGTCCTAAGGCAAAAAAAAAA;TC;TR=17;TU=A;VQSLOD=14.1033;set=Intersection +20 53308906 . CT C,CTT 2276 PASS AA=92;AB=0.84453;ABA=81;ABP=540.17;ABR=440;AC=53,81;AF=0.04351,0.06650;AN=1218;BL=3561;BR=4796;BVAR;BaseQRankSum=3.000;DP=11804;Dels=0.02;EL=48;EPP=3.3879;ER=44;FR;FS=13.197;HETAR=69;HOMA=3;HOMR=993;HP=11;HR=10;HRun=10;HU=T;INS;InbreedingCoeff=0.2297;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.14778;LRBP=399.32;MQ0=1;MQ0Fraction=0.0003;MQM=56.348;MQRankSum=3.154;NF;NR;NS=1065;PP;RA=5520;RL=39;RPP=7.6365;RR=53;RUN=1;ReadPosRankSum=-2.140;SAB=0.57609;SAF=53;SAP=7.6365;SAR=39;SC=AATCCAAAGTCTTTTTTTTTT;SRB=0.51576;SRF=2847;SRP=14.92;SRR=2673;TC;TR=10;TU=T;VQSLOD=2.4753;set=filterInVQSR-2of5;sumGLbyD=4.42 +20 53334602 . T TG,TGG 905.13 PASS ABR=325;AC=44,22;AF=0.03624,0.01812;BVAR;BaseQRankSum=-4.608;DP=15015;FR;FS=494.901;HOMA=0;HOMR=1004;HP=1;HR=1;HU=G;HaplotypeScore=20.5023;INS;InbreedingCoeff=0.0799;IndelType=MULTIALLELIC_INDEL;MQ=116.70;MQ0=0;MQ0Fraction=0.0000;MQRankSum=8.022;NF;NR;NS=1064;PP;QD=0.35;RA=5690;RUN=1;ReadPosRankSum=-14.522;SB=-311.57;SC=AGCCATTGGCTGTTTCACTGA;SRB=0.40738;SRF=2318;SRP=426.97;SRR=3372;TC;TR=1;TU=G;VQSLOD=-2.3042;set=filterInVQSR-2of5 +20 53729115 . T TG 15.48 PASS AC=1;AF=0.0015;AN=668;BaseQRankSum=-1.001;DP=1711;FS=9.048;HRun=2;HaplotypeScore=12.4681;InbreedingCoeff=-0.0320;IndelType=INS.NumRepetitions_2.EventLength_1.RepeatExpansion_G.;MQ=131.36;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.193;QD=4.57;ReadPosRankSum=0.407;SB=-5.35;VQSLOD=4.8071;set=VQSR +20 54033830 . GTATTTTAAAATCA G 2220.86 PASS AF=0.0113;BaseQRankSum=5.506;DP=2577;Dels=0.01;FR;FS=6.533;HP=5;HPLen=4;HR=1;HRun=0;HU=T;InbreedingCoeff=0.0032;IndelType=DEL.NumRepetitions_1.EventLength_10orMore.;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-2.969;NF;NR;PP;ReadPosRankSum=1.322;SC=TCAATATTTTGTATTTTAAAA;TC;TR=1;TU=T;VQSLOD=5.5145;set=Intersection;sumGLbyD=95.65 +20 54375236 . GT G 626.13 PASS AA=40;AB=0.63551;ABA=39;ABP=20.078;ABR=68;AC=18;AF=0.0256;AN=702;BL=1331;BR=1743;BVAR;BaseQRankSum=9.346;DEL;DP=8568;Dels=0.02;EL=26;EPP=10.828;ER=14;FS=0.610;HETAR=21;HOMA=1;HOMR=1035;HRun=1;InbreedingCoeff=-0.0056;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.13403;LRBP=122.92;MQ0=0;MQ0Fraction=0.0000;MQM=67.125;MQRankSum=-2.537;NS=1058;RA=4870;RL=17;RPP=4.9646;RR=23;RUN=1;ReadPosRankSum=-1.229;SAB=0.525;SAF=21;SAP=3.2274;SAR=19;SRB=0.5271;SRF=2567;SRP=34.087;SRR=2303;VQSLOD=7.9228;set=Intersection;sumGLbyD=10.77 +20 54457331 . G GA 1793.40 PASS AA=77;AB=0.66667;ABA=74;ABP=56.573;ABR=148;AC=33;AF=0.02687;AN=1228;BL=3834;BR=1154;BVAR;BaseQRankSum=10.572;DP=10230;Dels=0.00;EL=77;EPP=170.21;ER=0;FS=139.433;HETAR=44;HOMA=1;HOMR=1001;HRun=1;INS;InbreedingCoeff=0.0023;IndelType=INS.NOVEL_1.Novel_A.;LEN=1;LRB=0.53729;LRBP=3129.8;MQ0Fraction=0.0095;MQM=4.7013;MQRankSum=-8.116;NS=1046;RA=4009;RL=77;RPP=170.21;RR=0;RUN=1;ReadPosRankSum=-6.026;SAB=1;SAF=77;SAP=170.21;SAR=0;SRB=0.57022;SRF=2286;SRP=174.7;SRR=1723;VQSLOD=1.1887;set=filterInVQSR-2of5;sumGLbyD=5.90 +20 54469810 . CA C 1697.62 PASS AA=93;AB=0.63855;ABA=90;ABP=44.53;ABR=159;AC=34;AF=0.0374;AF1=0.01719;AN=908;BL=3242;BR=5839;BVAR;BaseQRankSum=10.425;CI95=0.009317,0.02795;DEL;DP=15197;DP4=2134,1896,56,46;Dels=0.03;EL=34;EPP=17.604;ER=59;FQ=16;FR;FS=9.985;HETAR=41;HOMA=1;HOMR=1011;HP=9;HPLen=8;HR=8;HRun=8;HU=A;INDEL;InbreedingCoeff=-0.0472;IndelType=DEL.NumRepetitions_8.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.28598;LRBP=1615.8;MQ=83.37;MQ0=1;MQ0Fraction=0.0004;MQM=64.075;MQRankSum=3.036;NF;NR;NS=1053;PP;PV4=0.76,1,0.31,0.22;RA=5150;RL=28;RPP=34.975;RR=65;RUN=1;ReadPosRankSum=-0.252;SAB=0.5914;SAF=55;SAP=9.7582;SAR=38;SC=ATTGCTAAGACAAAAAAAAGA;SRB=0.50621;SRF=2607;SRP=4.7374;SRR=2543;TC;TR=8;TU=A;VQSLOD=8.3677;set=Intersection;sumGLbyD=9.90 +20 54542453 . GTATA G,GTA 5109.66 PASS ABR=112;AC=66,56;AF=0.0682,0.0579;AN=968;BVAR;BaseQRankSum=17.089;DB;DEL;DP=5519;DS;Dels=0.06;FS=99.502;HOMA=15;HOMR=409;HRun=0;InbreedingCoeff=0.1584;IndelType=MULTIALLELIC_INDEL;MQ0Fraction=0.0178;MQRankSum=-6.854;NS=460;RA=864;RUN=1;ReadPosRankSum=0.855;SRB=0.79282;SRF=685;SRP=646.5;SRR=179;VQSLOD=0.6375;set=filterInVQSR-2of5;sumGLbyD=8.53 +20 54629773 . CA C 1799.50 PASS AA=49;AB=0.82707;ABA=46;ABP=250.17;ABR=220;AC=9;AF=0.00746;AN=1206;BL=173;BR=2277;BVAR;BaseQRankSum=5.240;DEL;DP=8557;Dels=0.01;EL=49;EPP=109.41;ER=0;FS=32.359;HETAR=35;HOMA=1;HOMR=325;HRun=1;InbreedingCoeff=0.0892;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.85878;LRBP=3926.6;MQ0Fraction=0.0602;MQM=32.163;MQRankSum=-3.926;NS=361;RA=1091;RL=0;RPP=109.41;RR=49;RUN=1;ReadPosRankSum=-4.512;SAB=0;SAF=0;SAP=109.41;SAR=49;SRB=0.49404;SRF=539;SRP=3.3467;SRR=552;VQSLOD=1.1233;set=filterInVQSR-2of5;sumGLbyD=3.54 +20 54710245 . TA T 999 PASS AF=0.0084;AF1=0.0148;BaseQRankSum=3.954;CI95=0.00885,0.02212;DP=8043;DP4=2000,1849,10,7;Dels=0.01;FQ=999;FR;FS=0.000;HP=9;HPLen=6;HR=3;HRun=6;HU=A;INDEL;InbreedingCoeff=0.1181;IndelType=DEL.NumRepetitions_3.EventLength_1.RepeatExpansion_A.;MQ=78.51;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.095;NF;NR;PP;PV4=0.63,0.00056,1,1;ReadPosRankSum=-0.448;SC=CAACAAAAAATAAATAAATAA;TC;TR=15;TU=AAAT;VQSLOD=7.8129;set=Intersection;sumGLbyD=19.02 +20 54968173 . A AAT,AATAT,AT,ATAT 89535.82 PASS ABR=994;AC=561,278,2,3;AF=0.50179,0.24866,0.00179,0.00268;AN=1118;BVAR;BaseQRankSum=-2.699;DB;DP=27837;DP4=168,177,1045,866;Dels=0.00;FQ=999;FR;FS=12.472;HOMA=71;HOMR=455;HP=3;HPLen=4;HR=4;HRun=0;HU=A;INDEL;INS;InbreedingCoeff=0.6391;IndelType=MULTIALLELIC_INDEL;KGPilot123;MQ=80.36;MQ0Fraction=0.0055;MQRankSum=-1.512;NF;NR;NS=913;PP;PV4=0.046,1,1,1;RA=2015;RUN=1;ReadPosRankSum=1.015;SC=GGCCACTTAAAATATATATAT;SRB=0.44864;SRF=904;SRP=49.187;SRR=1111;TC;TR=15;TU=AT;VQSLOD=9.0092;dbSNP=132;set=Intersection;sumGLbyD=42.33 +20 55176688 . TA T 421.84 PASS AF=0.01322;AF1=0.01845;BaseQRankSum=5.383;CI95=0.01282,0.02564;DP=10531;DP4=1975,2017,16,14;Dels=0.01;FQ=91.2;FR;FS=7.401;HP=6;HPLen=5;HR=5;HRun=5;HU=A;INDEL;InbreedingCoeff=0.0829;IndelType=DEL.NumRepetitions_5.EventLength_1.RepeatExpansion_A.;MQ=75.80;MQ0=1;MQ0Fraction=0.0003;MQRankSum=-0.471;NF;NR;PP;PV4=0.72,1,1,1;ReadPosRankSum=0.223;SC=CTGCAAAATATAAAAATTAGG;TC;TR=5;TU=A;VQSLOD=6.6000;set=Intersection;sumGLbyD=12.15 +20 55664086 . GTT ATT,G,GT,GTTT 5622.44 PASS AC=6,71,136;AF=0.00498,0.05887,0.11277;AN=1206;BVAR;BaseQRankSum=3.173;DB;DEL;DP=40384;DP4=1567,1317,54,29;Dels=0.05;FR;FS=1.949;HP=14;HR=11;HRun=11;HU=T;INDEL;INS;InbreedingCoeff=0.3490;IndelType=MIXED;MQ=77.90;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.052;NF;NR;PP;PV4=0.057,1,0.2,1.2e-05;RUN=1;ReadPosRankSum=-13.646;SC=AATTTTATTTGTTTTTTTTTT;TC;TR=11;TU=T;VQSLOD=11.7964;set=Intersection;sumGLbyD=8.09 +20 56045006 . TG T 342.15 PASS AC=72;AF=0.0940;AN=766;BaseQRankSum=4.992;DP=1238;FS=1.460;HRun=7;HaplotypeScore=20.2784;InbreedingCoeff=0.1795;IndelType=DEL.NumRepetitions_7.EventLength_1.RepeatExpansion_G.;MQ=66.42;MQ0=1;MQ0Fraction=0.0008;MQRankSum=-0.937;QD=1.84;ReadPosRankSum=-4.385;SB=-320.83;VQSLOD=5.2383;set=VQSR +20 56158711 . AG A 922.47 PASS AA=18;AB=0.575;ABA=17;ABP=4.9646;ABR=23;AC=2;AF=0.0028;AN=714;BL=953;BR=808;BVAR;BaseQRankSum=3.129;DEL;DP=10462;Dels=0.01;EL=9;EPP=3.0103;ER=9;FR;FS=8.724;HETAR=4;HOMA=0;HOMR=1058;HP=1;HPLen=2;HR=2;HRun=1;HU=A;InbreedingCoeff=0.0262;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_G.;LEN=1;LRB=0.08234;LRBP=28.936;MQ0=0;MQ0Fraction=0.0000;MQM=55.889;MQRankSum=2.052;NF;NR;NS=1062;PP;RA=6300;RL=9;RPP=3.0103;RR=9;RUN=1;ReadPosRankSum=-0.317;SAB=0.66667;SAF=12;SAP=7.3532;SAR=6;SC=TGGCCTAGCAAGCATCGTGAC;SRB=0.48143;SRF=3033;SRP=21.883;SRR=3267;TC;TR=8;TU=AAGC;VQSLOD=8.3252;set=Intersection;sumGLbyD=13.22 +20 56258618 rs113670927 T C,TGC,TGTGC,TGTGTGC 37834.99 PASS ABR=441;AC=11,100,43;AF=0.0123,0.1119,0.0481;AN=894;BVAR;BaseQRankSum=19.514;DB;DP=23173;DP4=541,920,413,579;Dels=0.00;FQ=999;FR;FS=1.238;HOMA=28;HOMR=808;HP=2;HPLen=1;HR=1;HRun=0;HU=G;INDEL;INS;InbreedingCoeff=0.2154;IndelType=MIXED;MQ=57.25;MQ0Fraction=0.0275;MQRankSum=-6.684;NF;NR;NS=976;PP;PV4=0.023,1,1,1;RA=3294;RUN=1;ReadPosRankSum=11.873;SC=TGCGTGTGTGTGTGTGTGTGT;SRB=0.42441;SRF=1398;SRP=166.5;SRR=1896;TC;TR=30;TU=GT;VQSLOD=6.7457;dbSNP=114;set=Intersection;sumGLbyD=21.27 +20 56395857 . T TAGGCAG 6614.22 PASS AA=30;AB=0.63415;ABA=30;ABP=15.827;ABR=52;AC=14;AF=0.0197;AF1=0.03154;AN=710;BL=991;BR=1813;BVAR;BaseQRankSum=-4.589;CI95=0.02434,0.04204;DP=13879;DP4=1543,1833,12,14;Dels=0.00;EL=14;EPP=3.2998;ER=16;FQ=999;FR;FS=1.482;HETAR=11;HOMA=0;HOMR=1051;HP=1;HPLen=2;HR=2;HRun=0;HU=T;INDEL;INS;InbreedingCoeff=0.0774;IndelType=INS.NumRepetitions_2.EventLength_6.;LEN=6;LRB=0.29315;LRBP=526.27;MQ=90.42;MQ0=0;MQ0Fraction=0.0000;MQM=39.433;MQRankSum=-7.011;NF;NR;NS=1062;PP;PV4=1,1,3.7e-09,1;RA=5322;RL=9;RPP=13.433;RR=21;RUN=1;ReadPosRankSum=0.679;SAB=0.43333;SAF=13;SAP=4.1684;SAR=17;SC=AAGAGCATCTTAGGCAGAGGC;SRB=0.47294;SRF=2517;SRP=36.853;SRR=2805;TC;TR=2;TU=T;VQSLOD=8.3045;set=Intersection;sumGLbyD=68.22 +20 56969289 . GTTTGT G 600.69 PASS AF=0.0056;AF1=0.007726;BaseQRankSum=2.907;CI95=0.004425,0.01327;DP=9643;DP4=1892,1749,6,3;Dels=0.00;FQ=117;FR;FS=16.601;HP=5;HPLen=3;HR=3;HRun=0;HU=T;INDEL;InbreedingCoeff=0.0236;IndelType=DEL.NumRepetitions_3.EventLength_5.;MQ=92.59;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-2.134;NF;NR;PP;PV4=0.51,1,0.07,0.3;ReadPosRankSum=0.236;SC=TAAGGACGTTGTTTGTTTTGT;TC;TR=10;TU=GTTT;VQSLOD=5.8458;set=Intersection;sumGLbyD=39.51 +20 57187557 . AG A,AGG 1486.69 PASS AA=130;AB=0.55446;ABA=90;ABP=8.2132;ABR=112;AC=56,26;AF=0.0574,0.0266;AN=976;BL=3817;BR=5968;BVAR;BaseQRankSum=5.517;DEL;DP=14174;DP4=925,721,59,48;Dels=0.05;EL=52;EPP=14.302;ER=78;FR;FS=0.917;HETAR=44;HOMA=17;HOMR=864;HP=4;HPLen=4;HR=4;HRun=4;HU=G;INDEL;InbreedingCoeff=0.2856;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.21983;LRBP=1029.8;MQ=91.56;MQ0=0;MQ0Fraction=0.0000;MQM=63.631;MQRankSum=1.900;NF;NR;NS=925;PP;PV4=0.84,1,1,0.39;RA=2746;RL=44;RPP=32.476;RR=86;RUN=1;ReadPosRankSum=-0.639;SAB=0.44615;SAF=58;SAP=6.2842;SAR=72;SC=TCAGGCCCGCAGGGGTCAGGG;SRB=0.5772;SRF=1585;SRP=145.17;SRR=1161;TC;TR=4;TU=G;VQSLOD=7.7167;set=Intersection;sumGLbyD=14.85 +20 57282771 . T TG 506.43 PASS AA=34;AB=0.70312;ABA=19;ABP=25.946;ABR=45;AC=34;AF=0.0373;AN=912;BL=886;BR=1938;BVAR;BaseQRankSum=3.744;DP=4276;Dels=0.00;EL=18;EPP=3.2658;ER=16;FR;FS=0.639;HETAR=17;HOMA=9;HOMR=737;HP=9;HR=8;HRun=8;HU=G;INS;InbreedingCoeff=0.2149;IndelType=INS.NumRepetitions_8.EventLength_1.RepeatExpansion_G.;LEN=1;LRB=0.37252;LRBP=853.99;MQ0=0;MQ0Fraction=0.0000;MQM=49.706;MQRankSum=-0.051;NF;NR;NS=763;PP;RA=1822;RL=9;RPP=19.36;RR=25;RUN=1;ReadPosRankSum=-2.111;SAB=0.55882;SAF=19;SAP=4.0322;SAR=15;SC=TCGGGGGGCGTGGGGGGGGTG;SRB=0.51098;SRF=931;SRP=4.9172;SRR=891;TC;TR=8;TU=G;VQSLOD=5.7772;set=Intersection;sumGLbyD=7.95 +20 57419740 rs11481507 A AT 82613.57 PASS AA=3850;AB=0.41404;ABA=1786;ABP=198.63;ABR=1262;AC=919;AF=0.75328;AN=1220;BL=140665;BR=151383;BVAR;BaseQRankSum=-27.490;DB;DP=31794;DP4=588,585,1571,1721;Dels=0.00;EL=1924;EPP=3.0126;ER=1926;FQ=999;FR;FS=2.191;HETAR=482;HOMA=454;HOMR=135;HP=3;HPLen=3;HR=3;HRun=3;HU=T;INDEL;INS;InbreedingCoeff=0.0861;IndelType=INS.NumRepetitions_3.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.036699;LRBP=857.15;MQ=123.92;MQ0=0;MQ0Fraction=0.0000;MQM=91.654;MQRankSum=3.016;NF;NR;NS=1071;PP;PV4=0.16,1,0.12,1;RA=1850;RL=1874;RPP=8.8784;RR=1976;RUN=1;ReadPosRankSum=-0.685;SAB=0.47636;SAF=1834;SAP=21.693;SAR=2016;SC=TACACTAGTGATTTAACCCTA;SRB=0.49027;SRF=907;SRP=4.5315;SRR=943;TC;TR=3;TU=T;VQSLOD=9.2768;dbSNP=126;set=Intersection;sumGLbyD=22.78 +20 57558194 . CT C,CTT,CTTT 6470.30 PASS ABR=451;AC=104,161,177;AF=0.08919,0.13808,0.15180;BVAR;BaseQRankSum=1.172;DP=7985;FR;FS=2.202;HOMA=19;HOMR=778;HP=22;HR=15;HU=T;HaplotypeScore=16.1921;INS;InbreedingCoeff=0.6440;IndelType=MULTIALLELIC_INDEL;MQ=69.24;MQ0=27;MQ0Fraction=0.0109;MQRankSum=-0.003;NF;NR;NS=943;PP;QD=2.22;RA=2531;RUN=1;ReadPosRankSum=-0.104;SB=-2096.85;SC=GCCTTTTTTTCTTTTTTTTTT;SRB=0.34848;SRF=882;SRP=507.73;SRR=1649;TC;TR=15;TU=T;VQSLOD=6.5151;set=Intersection +20 57693627 . AG A 1991.90 PASS AA=52;AB=0.49462;ABA=47;ABP=3.0336;ABR=46;AC=15;AF=0.01227;AN=1222;BL=1902;BR=1478;BVAR;BaseQRankSum=-6.121;DEL;DP=26459;DP4=2647,2873,16,20;Dels=0.01;EL=25;EPP=3.1773;ER=27;FR;FS=3.135;HETAR=15;HOMA=1;HOMR=1064;HP=2;HPLen=3;HR=3;HRun=2;HU=A;INDEL;InbreedingCoeff=0.0866;IndelType=DEL.NumRepetitions_2.EventLength_1.RepeatExpansion_G.;LEN=1;LRB=0.12544;LRBP=118.51;MQ=116.26;MQ0=0;MQ0Fraction=0.0000;MQM=114.65;MQRankSum=1.942;NF;NR;NS=1080;PP;PV4=0.74,6.9e-08,1,0.38;RA=6781;RL=33;RPP=11.195;RR=19;RUN=1;ReadPosRankSum=-1.795;SAB=0.5;SAF=26;SAP=3.0103;SAR=26;SC=ATTGGAGGAAAGGCTTTTTCA;SRB=0.46247;SRF=3136;SRP=85.976;SRR=3645;TC;TR=3;TU=A;VQSLOD=8.6672;set=Intersection;sumGLbyD=13.55 +20 57716287 . A AT 66.47 PASS AC=6;AF=0.00506;AN=1186;BaseQRankSum=1.369;DP=2744;FS=3.834;HRun=8;HaplotypeScore=11.2046;InbreedingCoeff=0.1196;IndelType=INS.NumRepetitions_8.EventLength_1.RepeatExpansion_T.;MQ=73.00;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-0.086;QD=2.14;ReadPosRankSum=-2.588;SB=-53.80;VQSLOD=4.2080;set=VQSR +20 58121928 rs73625057 T TGG 6649.17 PASS AA=132;AB=0.57854;ABA=110;ABP=16.996;ABR=151;AC=57;AF=0.0617;AN=924;BL=4530;BR=4790;BVAR;BaseQRankSum=-13.456;DB;DP=30353;DP4=2107,2168,61,66;Dels=0.00;EL=67;EPP=3.0761;ER=65;FR;FS=0.708;HETAR=46;HOMA=8;HOMR=1023;HP=3;HPLen=2;HR=2;HRun=2;HU=G;INDEL;INS;InbreedingCoeff=0.1241;IndelType=INS.NumRepetitions_2.EventLength_1.RepeatExpansion_G.;LEN=2;LRB=0.027897;LRBP=18.76;MQ=109.61;MQ0=1;MQ0Fraction=0.0004;MQM=79.833;MQRankSum=-0.699;NF;NR;NS=1077;PP;PV4=0.79,1,0.49,0.036;RA=5754;RL=61;RPP=4.6554;RR=71;RUN=1;ReadPosRankSum=-3.309;SAB=0.45455;SAF=60;SAP=5.3792;SAR=72;SC=GATTAGAATGTGGATATCTTT;SRB=0.48836;SRF=2810;SRP=9.7866;SRR=2944;TC;TR=4;TU=GT;VQSLOD=8.5770;set=Intersection;sumGLbyD=27.19 +20 58468826 . ACAAG A 999 PASS AF=0.0014;AF1=0.003429;BaseQRankSum=4.082;CI95=0.003106,0.006211;DP=8461;DP4=2500,1817,8,2;Dels=0.01;FQ=999;FR;FS=5.034;HP=2;HPLen=1;HR=1;HRun=0;HU=C;INDEL;InbreedingCoeff=-0.0183;IndelType=DEL.NumRepetitions_1.EventLength_4.;MQ=120.69;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.141;NF;NR;PP;PV4=0.21,1,0.054,1;ReadPosRankSum=2.096;SC=ATCCTGAAACACAAGAAGAAA;TC;TR=5;TU=AC;VQSLOD=7.4928;set=Intersection;sumGLbyD=29.17 +20 58731262 . TC T 999 PASS AA=21;AB=0.48649;ABA=19;ABP=3.069;ABR=18;AC=7;AF=0.0101;AF1=0.01493;AN=694;BL=939;BR=848;BVAR;BaseQRankSum=4.205;CI95=0.01106,0.02212;DEL;DP=12598;DP4=1766,1428,11,15;Dels=0.01;EL=13;EPP=5.5954;ER=8;FQ=999;FR;FS=1.796;HETAR=8;HOMA=1;HOMR=1031;HP=7;HPLen=8;HR=8;HRun=2;HU=T;INDEL;InbreedingCoeff=-0.0030;IndelType=DEL.NumRepetitions_2.EventLength_1.RepeatExpansion_C.;LEN=1;LRB=0.050923;LRBP=13.073;MQ=124.57;MQ0=0;MQ0Fraction=0.0000;MQM=67.905;MQRankSum=1.103;NF;NR;NS=1040;PP;PV4=0.23,1,1,1;RA=4884;RL=10;RPP=3.1137;RR=11;RUN=1;ReadPosRankSum=-0.091;SAB=0.47619;SAF=10;SAP=3.1137;SAR=11;SC=TCATTTTTTTTCCTTGAAACT;SRB=0.58006;SRF=2833;SRP=274.9;SRR=2051;TC;TR=8;TU=T;VQSLOD=10.8783;set=Intersection;sumGLbyD=15.11 +20 59181229 rs11476579 CTT C,CT,CTTT,CTTTT 7787.17 PASS AC=19,195,104,91;AF=0.01599,0.16414,0.08754,0.07660;AF1=0.2124;AN=1188;BVAR;BaseQRankSum=6.347;CI95=0.146,0.2743;DB;DEL;DP=26140;DP4=932,880,352,375;Dels=0.13;FQ=85.6;FR;FS=11.914;HP=14;HR=14;HRun=14;HU=T;INDEL;INS;InbreedingCoeff=0.4183;IndelType=MULTIALLELIC_INDEL;MQ=86.88;MQ0=0;MQ0Fraction=0.0000;MQRankSum=1.469;NF;NR;PP;PV4=0.17,1,1,1;RUN=1;ReadPosRankSum=-1.055;SC=GGTGAGAAAGCTTTTTTTTTT;TC;TR=14;TU=T;VQSLOD=7.4340;dbSNP=120;set=Intersection;sumGLbyD=7.02 +20 59213979 rs112141381 G GC 9068 PASS AA=131;AB=0.47115;ABA=110;ABP=4.5136;ABR=98;AF=0.0586;AN=700;BL=5395;BR=5816;BVAR;BaseQRankSum=15.453;DB;DP=23381;DP4=2191,2184,71,49;Dels=0.00;EL=66;EPP=3.0269;ER=65;FR;FS=7.907;HETAR=35;HOMA=5;HOMR=1019;HP=2;HPLen=3;HR=3;HRun=0;HU=G;INDEL;INS;InbreedingCoeff=0.0283;IndelType=INS.NOVEL_1.Novel_C.;LEN=1;LRB=0.037552;LRBP=37.34;MQ=72.13;MQ0=0;MQ0Fraction=0.0000;MQM=54.496;MQRankSum=0.897;NF;NR;NS=1059;PP;PV4=0.052,1,0.066,1;RA=4976;RL=59;RPP=5.8117;RR=72;RUN=1;ReadPosRankSum=-0.811;SAB=0.58015;SAF=76;SAP=10.32;SAR=55;SC=GATGGACTGGGACAGTGACTC;SRB=0.49457;SRF=2461;SRP=4.2828;SRR=2515;TC;TR=3;TU=G;VQSLOD=9.3917;set=Intersection;sumGLbyD=28.58 +20 59252945 . CT C,CTT 557.18 PASS AA=24;AB=0.84868;ABA=23;ABP=163.53;ABR=129;AC=21,29;AF=0.01759,0.02429;BL=1217;BR=1336;BVAR;BaseQRankSum=5.135;DP=9970;Dels=0.01;EL=13;EPP=3.3722;ER=11;FS=2.302;HETAR=21;HOMA=1;HOMR=1012;HRun=9;INS;InbreedingCoeff=0.1549;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.046612;LRBP=15.055;MQ0=0;MQ0Fraction=0.0000;MQM=67.208;MQRankSum=0.086;NS=1034;RA=4421;RL=11;RPP=3.3722;RR=13;RUN=1;ReadPosRankSum=-1.826;SAB=0.41667;SAF=10;SAP=4.4579;SAR=14;SRB=0.49649;SRF=2195;SRP=3.4823;SRR=2226;VQSLOD=2.8923;set=filterInVQSR-2of5;sumGLbyD=5.47 +20 60016966 . CT C 42650 PASS AA=37;AB=0.97834;ABA=31;ABP=2847;ABR=1400;AC=15;AF=0.0163;AN=920;BL=2596;BR=778;BVAR;BaseQRankSum=-0.632;DEL;DP=10967;Dels=0.00;EL=14;EPP=7.7641;ER=23;FS=4.094;HETAR=421;HOMA=256;HOMR=385;HRun=1;InbreedingCoeff=-0.0051;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.53883;LRBP=2130.2;MQ0=0;MQ0Fraction=0.0000;MQM=120.3;MQRankSum=-0.911;NS=1072;RA=3413;RL=31;RPP=39.691;RR=6;RUN=1;ReadPosRankSum=-12.062;SAB=0.48649;SAF=18;SAP=3.069;SAR=19;SRB=0.47407;SRF=1618;SRP=22.943;SRR=1795;VQSLOD=3.3758;set=filterInVQSR-2of5;sumGLbyD=3.27 +20 60188651 . AG A 17624.52 PASS AA=462;AB=0.76548;ABA=409;ABP=1070.7;ABR=1335;AC=403;AF=0.34444;AN=1170;BL=13877;BR=25909;BVAR;BaseQRankSum=6.180;DEL;DP=9900;Dels=0.08;EL=353;EPP=282.84;ER=109;FR;FS=2699.057;HETAR=346;HOMA=26;HOMR=633;HP=3;HR=4;HRun=1;HU=A;InbreedingCoeff=-0.2900;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_G.;LEN=1;LRB=0.30242;LRBP=7904.3;MQ0Fraction=0.0004;MQM=56.119;MQRankSum=1.644;NF;NR;NS=1005;PP;RA=3521;RL=112;RPP=269.25;RR=350;RUN=1;ReadPosRankSum=2.490;SAB=0.0064935;SAF=3;SAP=980.34;SAR=459;SC=AGGCTTCAAAAGAAAAAAAAA;SRB=0.55978;SRF=1971;SRP=112.32;SRR=1550;TC;TR=4;TU=A;VQSLOD=-34.0667;set=filterInVQSR-2of5;sumGLbyD=7.81 +20 60195570 . GTACATACATACA ATACATACATACA,G,GTACATACA 20140 PASS ABR=102;AC=105,2;AF=0.08794,0.00168;AN=1194;BVAR;BaseQRankSum=-28.899;DB;DEL;DP=14347;Dels=0.02;FR;FS=52.125;HOMA=1;HOMR=1006;HP=1;HPLen=1;HR=1;HRun=0;HU=T;InbreedingCoeff=0.0695;IndelType=MIXED;MQ0Fraction=0.0007;MQRankSum=1.957;NF;NR;NS=1035;PP;RA=4759;RUN=1;ReadPosRankSum=-22.252;SAB=0.5;SAP=3.0103;SC=TGATAGATTCGTACATACATA;SRB=0.47615;SRF=2266;SRP=26.522;SRR=2493;TC;TR=21;TU=ACAT;VQSLOD=2.7673;set=filterInVQSR-2of5;sumGLbyD=19.14 +20 60670601 rs72127450 AT A,ATT 6401.59 PASS AC=177,79;AF=0.16239,0.07248;AF1=0.1602;AN=1090;BVAR;BaseQRankSum=8.618;CI95=0.1106,0.2058;DB;DEL;DP=17508;DP4=1285,1094,313,259;Dels=0.10;FQ=94.1;FR;FS=0.000;HP=12;HR=12;HRun=12;HU=T;INDEL;INS;InbreedingCoeff=0.1076;IndelType=MULTIALLELIC_INDEL;LEN=1;MQ=64.73;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.620;NF;NR;PP;PV4=0.78,1,0.012,1;RUN=1;ReadPosRankSum=-1.294;SC=AGCCAGGCACATTTTTTTTTT;TC;TR=12;TU=T;VQSLOD=6.1650;dbSNP=130;set=Intersection;sumGLbyD=5.80 +20 60685780 . TC T 1123.58 PASS AC=79;AF=0.07655;AN=1032;BaseQRankSum=14.949;DP=2084;FS=23.521;HRun=1;HaplotypeScore=19.7117;InbreedingCoeff=0.1356;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;MQ=53.57;MQ0=61;MQ0Fraction=0.0293;MQRankSum=-7.958;QD=4.35;ReadPosRankSum=-13.757;SB=-791.28;VQSLOD=6.3549;set=VQSR +20 60744906 rs113528167 CG C 422.53 PASS AC=48;AF=0.0732;AN=656;BaseQRankSum=17.669;DB;DP=1189;FS=0.356;HRun=1;HaplotypeScore=15.1808;InbreedingCoeff=0.2111;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_G.;MQ=82.83;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-10.455;QD=2.71;ReadPosRankSum=-16.887;SB=-326.46;VQSLOD=7.1707;set=VQSR +20 60848742 . CGT C,CGTGT 999 PASS AF=0.00980,0.01225;BaseQRankSum=5.597;DP=17065;DP4=1928,2188,17,13;Dels=0.01;FR;HP=1;HPLen=2;HR=2;HRun=0;HU=C;INDEL;InbreedingCoeff=0.2094;IndelType=MULTIALLELIC_INDEL;MQ=115.78;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.281;NF;NR;PP;PV4=0.36,0.4,0.12,0.12;ReadPosRankSum=-1.465;SB=-157.35;SC=TAGACGCTTCCGTGTGTGTGT;TC;TR=11;TU=GT;VQSLOD=1.7100;set=filterInVQSR-2of5;sumGLbyD=16.39 +20 61023668 rs57452309 G GAGC 6896.67 PASS AC=115;AF=0.1445;AN=796;BaseQRankSum=12.146;DB;DP=1423;FS=5.070;HRun=0;HaplotypeScore=29.8897;InbreedingCoeff=0.0740;IndelType=INS.NOVEL_3.;MQ=77.02;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-9.005;QD=19.16;ReadPosRankSum=-17.440;SB=-3045.82;VQSLOD=4.5788;set=VQSR +20 61180519 . C CA,CT 1774.30 PASS ABR=135;AC=27,15;AF=0.02538,0.01410;BVAR;BaseQRankSum=-2.189;DP=8393;FR;FS=27.692;HOMA=2;HOMR=825;HP=6;HPLen=3;HR=3;HU=T;HaplotypeScore=19.5313;INS;InbreedingCoeff=0.0868;IndelType=MULTIALLELIC_INDEL;LEN=1;MQ=56.11;MQ0=172;MQ0Fraction=0.0667;MQRankSum=2.605;NF;NR;NS=854;PP;QD=1.99;RA=2868;RUN=1;ReadPosRankSum=-7.324;SB=-385.54;SC=TTCTTTCTTTCTTTCTTTCTT;SRB=0.32741;SRF=939;SRP=745.08;SRR=1929;TC;TR=69;TU=CTTT;VQSLOD=3.4398;set=filterInVQSR-2of5 +20 61184281 . AC A 9798.10 PASS AA=24;AB=0.96507;ABA=16;ABP=863.43;ABR=442;AC=4;AF=0.00341;AN=1174;BL=349;BR=1039;BVAR;BaseQRankSum=2.048;DEL;DP=10073;Dels=0.00;EL=11;EPP=3.3722;ER=13;FS=2.097;HETAR=141;HOMA=69;HOMR=829;HRun=1;InbreedingCoeff=0.0697;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;LEN=1;LRB=0.49712;LRBP=747.85;MQ0=0;MQ0Fraction=0.0000;MQM=98.042;MQRankSum=1.881;NS=1042;RA=3625;RL=5;RPP=20.744;RR=19;RUN=1;ReadPosRankSum=-8.009;SAB=0.75;SAF=18;SAP=16.039;SAR=6;SRB=0.52662;SRF=1909;SRP=25.323;SRR=1716;VQSLOD=1.8117;set=filterInVQSR-2of5;sumGLbyD=5.55 +20 62074219 . C CTAT,CTGT 2328 PASS ABR=99;AC=20,6;AF=0.01754,0.00526;BVAR;BaseQRankSum=11.221;DP=9498;DS;FS=4.510;HOMA=15;HOMR=645;HaplotypeScore=82.8868;INS;InbreedingCoeff=0.0880;IndelType=MULTIALLELIC_INDEL;LEN=3;MQ=29.88;MQ0=1378;MQ0Fraction=0.2286;MQRankSum=-5.309;NS=689;QD=0.77;RA=1679;RUN=1;ReadPosRankSum=-3.510;SAR=1;SB=-93.21;SRB=0.70697;SRF=1187;SRP=627.71;SRR=492;VQSLOD=1.8325;set=filterInVQSR-2of5 +20 62304449 . CA C,CAA 6680.17 PASS AC=141,69;AF=0.12567,0.06150;AF1=0.08178;AN=1122;BVAR;BaseQRankSum=9.754;CI95=0.05088,0.1128;DEL;DP=15867;DP4=1252,1289,232,208;Dels=0.10;FQ=52.6;FR;FS=6.576;HP=11;HR=11;HRun=11;HU=A;INDEL;INS;InbreedingCoeff=0.1950;IndelType=MULTIALLELIC_INDEL;LEN=1;MQ=60.48;MQ0Fraction=0.0004;MQRankSum=-0.049;NF;NR;PP;PV4=0.2,1,1,1;RUN=1;ReadPosRankSum=-2.137;SC=GATTCTGTGTCAAAAAAAAAA;TC;TR=11;TU=A;VQSLOD=7.4714;set=Intersection;sumGLbyD=8.36 +20 62804895 rs57769591 CCTT C 1148 PASS AC=8;AF=0.0085;AF1=0.002839;AN=938;BaseQRankSum=4.952;CI95=0.002212,0.006637;DB;DP=8889;DP4=2574,1668,4,8;FQ=12.3;FS=2.289;HPLen=3;HRun=0;HaplotypeScore=29.4184;INDEL;InbreedingCoeff=-0.0270;IndelType=DEL.NumRepetitions_1.EventLength_3.;MQ0=876;MQ0Fraction=0.2674;MQRankSum=-0.641;PV4=0.074,1,1,1;QD=1.03;ReadPosRankSum=0.118;SB=-65.30;VQSLOD=6.4881;dbSNP=126;set=Intersection +20 62907688 . AAT A 6629.57 PASS AC=164;AF=0.13735;AN=1194;BaseQRankSum=27.368;DP=2746;FS=5.985;HRun=0;HaplotypeScore=14.7748;InbreedingCoeff=0.1433;IndelType=DEL.NumRepetitions_2.EventLength_2.RepeatExpansion_AT.;MQ=96.65;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-3.318;QD=10.81;ReadPosRankSum=0.789;SB=-2662.16;VQSLOD=6.1473;set=VQSR diff --git a/tests/tabix_data/vcf/20.vcf b/tests/tabix_data/vcf/20.vcf new file mode 100644 index 0000000..e14beb5 --- /dev/null +++ b/tests/tabix_data/vcf/20.vcf @@ -0,0 +1,307 @@ +##fileformat=VCFv4.1 +##INFO= +##INFO= +##INFO= +##INFO= +##reference=file:///humgen/1kg/reference/human_g1k_v37.fasta +#CHROM POS ID REF ALT QUAL FILTER INFO +20 207414 . G A . . PacBio=NoCall;Sqnm=NoCall +20 792106 . C G . . PacBio=Poly;Sqnm=NoCall +20 894031 . G A . . PacBio=Poly;Sqnm=Poly +20 1508892 . A G . . PacBio=Poly;Sqnm=Poly +20 1686745 . G A . . PacBio=Poly;Sqnm=NoCall +20 1818886 . C T . . PacBio=Poly;Sqnm=Poly +20 2062981 . A G . . PacBio=Poly;Sqnm=Poly +20 2773229 . A G . . PacBio=Poly;Sqnm=Poly +20 2817761 . T C . . PacBio=Poly;Sqnm=Poly +20 2994966 . G T . . PacBio=Poly;Sqnm=Poly +20 3126723 . C T . . PacBio=Poly;Sqnm=Poly +20 3523369 . G A . . PacBio=Poly;Sqnm=Poly +20 3635082 . A G . . PacBio=Poly;Sqnm=Poly +20 3714080 . C G . . PacBio=Poly;Sqnm=Poly +20 3905791 . G A . . PacBio=Poly;Sqnm=NoCall +20 3907250 . A G . . PacBio=Poly;Sqnm=Poly +20 4171994 . C T . . PacBio=Poly;Sqnm=Poly +20 4246375 . T C . . PacBio=Poly;Sqnm=NoCall +20 4375206 . C T . . PacBio=Poly;Sqnm=Poly +20 4434727 . A T . . PacBio=NoCall;Sqnm=Mono;Sanger=Mono +20 4495199 . G C . . PacBio=Poly;Sqnm=Poly +20 4835415 . C T . . PacBio=Poly;Sqnm=Poly +20 4915769 . T C . . PacBio=Poly;Sqnm=NoCall +20 4983198 . T C . . PacBio=Poly;Sqnm=Poly +20 5441171 . C T . . PacBio=Poly;Sqnm=NoCall +20 5978029 . T C . . PacBio=Poly;Sqnm=Poly +20 6061317 . C A . . PacBio=Poly;Sqnm=Poly +20 6328925 . C A . . PacBio=Poly;Sqnm=Poly +20 6675461 . C T . . PacBio=Poly;Sqnm=NoCall +20 6976115 . C T . . PacBio=Poly;Sqnm=Poly +20 7013349 . G A . . PacBio=NoCall;Sqnm=NoCall +20 7039302 . C T . . PacBio=Poly;Sqnm=Poly +20 7638704 . C A . . PacBio=Poly;Sqnm=Poly +20 7688381 . G A . . PacBio=Poly;Sqnm=Poly +20 7726350 . G T . . PacBio=Poly;Sqnm=Poly +20 7733957 . C T . . PacBio=Poly;Sqnm=Poly +20 7850516 . T C . . PacBio=Poly;Sqnm=Poly +20 8095059 . G A . . PacBio=NoCall;Sqnm=NoCall +20 8232012 . T A . . PacBio=Poly;Sqnm=Poly +20 8415290 . A C . . PacBio=Poly;Sqnm=Poly +20 8438535 . T C . . PacBio=Poly;Sqnm=NoCall +20 8815233 . G A . . PacBio=Mono;Sqnm=NoCall +20 8953629 . C G . . PacBio=Poly;Sqnm=Poly +20 9237267 . T A . . PacBio=Poly;Sqnm=Poly +20 9744549 . T C . . PacBio=Poly;Sqnm=Poly +20 9780416 . C A . . PacBio=Poly;Sqnm=Poly +20 10252552 . T C . . PacBio=Poly;Sqnm=Poly +20 10314038 . C G . . PacBio=Poly;Sqnm=Poly +20 10757416 . T C . . PacBio=Poly;Sqnm=Poly +20 11087688 . A G . . PacBio=Poly;Sqnm=Poly +20 11094107 . G A . . PacBio=NoCall;Sqnm=NoCall +20 11098680 . G A . . PacBio=Poly;Sqnm=Poly +20 11353163 . G C . . PacBio=Poly;Sqnm=Poly +20 11510559 . A G . . PacBio=Poly;Sqnm=Poly +20 11787224 . C T . . PacBio=Poly;Sqnm=Poly +20 11821024 . T C . . PacBio=Poly;Sqnm=Poly +20 11932295 . A G . . PacBio=Poly;Sqnm=Poly +20 11965311 . G T . . PacBio=Poly;Sqnm=Poly +20 12023599 . C T . . PacBio=Poly;Sqnm=Poly +20 12505523 . G T . . PacBio=Poly;Sqnm=Poly +20 12570054 . A C . . PacBio=NoCall;Sqnm=Poly +20 12667452 . A G . . PacBio=Poly;Sqnm=Poly +20 12678271 . G A . . PacBio=Poly;Sqnm=Mono +20 12704885 . T C . . PacBio=Poly;Sqnm=Poly +20 12733996 . C T . . PacBio=Poly;Sqnm=NoCall +20 12737269 . C T . . PacBio=NoCall;Sqnm=NoCall +20 12788981 . G A . . PacBio=Poly;Sqnm=Poly +20 12828594 . T C . . PacBio=Poly;Sqnm=Poly +20 12999157 . T C . . PacBio=Poly;Sqnm=Poly +20 13083804 . C G . . PacBio=Poly;Sqnm=Poly +20 13197077 . G T . . PacBio=Poly;Sqnm=NoCall +20 13217896 . A G . . PacBio=NoCall;Sqnm=Poly +20 13276778 . G A . . PacBio=Poly;Sqnm=Poly +20 13375116 . G A . . PacBio=Mono;Sqnm=NoCall;NotCalledInValidationSamples +20 13648056 . T C . . PacBio=Poly;Sqnm=Poly +20 13672895 . C T . . PacBio=Poly;Sqnm=Poly +20 14160159 . C G . . PacBio=Poly;Sqnm=Poly +20 14266815 . T A . . PacBio=Poly;Sqnm=Poly +20 14865143 . C T . . PacBio=Poly;Sqnm=Poly +20 14882868 . T G . . PacBio=Poly;Sqnm=Poly +20 15244725 . C A . . PacBio=Poly;Sqnm=Poly +20 15277072 . G A . . PacBio=Poly;Sqnm=Poly +20 15390867 . C T . . PacBio=Poly;Sqnm=Poly +20 15785205 . T C . . PacBio=Poly;Sqnm=Poly +20 15833020 . A G . . PacBio=Poly;Sqnm=Poly +20 15847620 . C T . . PacBio=Poly;Sqnm=Poly +20 15953253 . G A . . PacBio=Poly;Sqnm=NoCall +20 15964434 . G C . . PacBio=NoCall;Sqnm=NoCall +20 16183922 . G A . . PacBio=Poly;Sqnm=Poly +20 16190824 . A G . . PacBio=Poly;Sqnm=Poly +20 16557779 . A G . . PacBio=Poly;Sqnm=Poly +20 16730061 . C T . . PacBio=Poly;Sqnm=Poly +20 16794015 . T C . . PacBio=Poly;Sqnm=Poly +20 17048741 . G A . . PacBio=Poly;Sqnm=Poly +20 17299827 . G A . . PacBio=Poly;Sqnm=Poly +20 17299845 . C T . . PacBio=Poly;Sqnm=Poly +20 17390323 . G A . . PacBio=Poly;Sqnm=Poly +20 17624973 . C G . . PacBio=Poly;Sqnm=Poly +20 17666040 . G A . . PacBio=Poly;Sqnm=Poly +20 17735813 . T C . . PacBio=Poly;Sqnm=Poly +20 17794990 . A G . . PacBio=Mono;Sqnm=Mono;NotCalledInValidationSamples +20 17809418 . G A . . PacBio=Poly;Sqnm=Poly +20 17860794 . C T . . PacBio=Mono;Sqnm=NoCall +20 17881936 . A G . . PacBio=Poly;Sqnm=Poly +20 17893097 . C G . . PacBio=NoCall;Sqnm=NoCall +20 18188883 . A G . . PacBio=Poly;Sqnm=Poly +20 18199319 . G A . . PacBio=Poly;Sqnm=Poly +20 18233699 . C T . . PacBio=Poly;Sqnm=Poly +20 18536869 . G A . . PacBio=Poly;Sqnm=Poly +20 18637785 . T C . . PacBio=NoCall;Sqnm=Mono;Sanger=Mono;NotCalledInValidationSamples +20 18763166 . G A . . PacBio=Poly;Sqnm=Poly +20 19102715 . A G . . PacBio=NoCall;Sqnm=NoCall +20 19244609 . C T . . PacBio=Poly;Sqnm=Poly +20 19573719 . C T . . PacBio=Poly;Sqnm=Poly +20 19815613 . A G . . PacBio=NoCall;Sqnm=Poly +20 20511479 . C T . . PacBio=Poly;Sqnm=Poly;Sanger=Poly +20 20639358 . T C . . PacBio=Poly;Sqnm=Poly +20 21278490 . T C . . PacBio=Poly;Sqnm=Poly +20 21297718 . C G . . PacBio=Poly;Sqnm=Poly +20 21418269 . A T . . PacBio=Poly;Sqnm=Poly +20 21560553 . A T . . PacBio=Poly;Sqnm=Poly +20 21618451 . G A . . PacBio=NoCall;Sqnm=NoCall +20 21705723 . C A . . PacBio=Poly;Sqnm=Poly +20 22076189 . A G . . PacBio=Poly;Sqnm=Poly +20 22118677 . T A . . PacBio=Poly;Sqnm=Poly +20 22320721 . C T . . PacBio=Poly;Sqnm=Poly +20 22368918 . C A . . PacBio=Poly;Sqnm=Poly +20 23020003 . A G . . PacBio=Poly;Sqnm=Poly +20 23214163 . G A . . PacBio=Poly;Sqnm=Poly +20 23273877 . T C . . PacBio=Poly;Sqnm=Poly +20 23335790 . C T . . PacBio=Poly;Sqnm=NoCall +20 23790659 . C T . . PacBio=Poly;Sqnm=Poly +20 23830388 . T C . . PacBio=Poly;Sqnm=NoCall +20 23837678 . C G . . PacBio=Poly;Sqnm=Poly +20 23901081 . A C . . PacBio=Poly;Sqnm=Poly +20 23946361 . C T . . PacBio=Poly;Sqnm=Poly +20 23949242 . A G . . PacBio=Poly;Sqnm=Poly +20 24539119 . A G . . PacBio=Poly;Sqnm=Poly +20 24986457 . C T . . PacBio=Poly;Sqnm=Poly +20 25183729 . G A . . PacBio=NoCall;Sqnm=NoCall +20 25277133 . C T . . PacBio=Poly;Sqnm=Poly +20 25292464 . C T . . PacBio=Poly;Sqnm=NoCall +20 25528915 . G C . . PacBio=Poly;Sqnm=Poly +20 25851836 . A G . . PacBio=NoCall;Sqnm=NoCall +20 25970163 . C T . . PacBio=Poly;Sqnm=Poly +20 29920798 . C T . . PacBio=NoCall;Sqnm=NoCall +20 30007713 . T C . . PacBio=Poly;Sqnm=Poly +20 30051768 . T C . . PacBio=Poly;Sqnm=Poly +20 30183598 . T C . . PacBio=Poly;Sqnm=Poly +20 30604408 . G A . . PacBio=NoCall;Sqnm=NoCall +20 30759940 . G T . . PacBio=Poly;Sqnm=Poly +20 30881454 . G T . . PacBio=Poly;Sqnm=Poly +20 31356560 . C T . . PacBio=Poly;Sqnm=Poly +20 31450036 . A G . . PacBio=NoCall;Sqnm=Mono +20 31589920 . A T . . PacBio=Poly;Sqnm=Poly +20 31922121 . C T . . PacBio=NoCall;Sqnm=NoCall +20 32801430 . G C . . PacBio=Poly;Sqnm=Poly +20 32943975 . G T . . PacBio=Mono;Sqnm=Mono +20 33155812 . C A . . PacBio=Poly;Sqnm=Poly +20 34090682 . C T . . PacBio=Poly;Sqnm=Poly +20 34254080 . C T . . PacBio=Mono;Sqnm=NoCall;NotCalledInValidationSamples +20 34312126 . C T . . PacBio=Poly;Sqnm=NoCall +20 34481504 . G A . . PacBio=Poly;Sqnm=Poly +20 34694577 . G A . . PacBio=Poly;Sqnm=Poly +20 35026572 . T C . . PacBio=Poly;Sqnm=Poly +20 35472344 . T G . . PacBio=Poly;Sqnm=Poly +20 35882698 . G A . . PacBio=Poly;Sqnm=NoCall +20 36044719 . G A . . PacBio=Poly;Sqnm=NoCall +20 36047623 . C A . . PacBio=NoCall;Sqnm=NoCall +20 36204890 . C T . . PacBio=Poly;Sqnm=NoCall +20 36469514 . G C . . PacBio=NoCall;Sqnm=Poly +20 36840217 . T C . . PacBio=Poly;Sqnm=Poly +20 37460945 . C T . . PacBio=Mono;Sqnm=Poly +20 37665246 . G A . . PacBio=Poly;Sqnm=NoCall +20 37732397 . A G . . PacBio=Poly;Sqnm=Poly +20 37874645 . G T . . PacBio=Poly;Sqnm=Poly +20 37958191 . T C . . PacBio=Poly;Sqnm=Poly +20 37996273 . C T . . PacBio=Mono;Sqnm=NoCall;NotCalledInValidationSamples +20 38016547 . C T . . PacBio=Poly;Sqnm=Poly +20 38435682 . A G . . PacBio=Poly;Sqnm=Poly +20 38505534 . A T . . PacBio=Poly;Sqnm=Poly +20 38803278 . A G . . PacBio=Poly;Sqnm=Poly +20 38963803 . G C . . PacBio=Poly;Sqnm=Poly +20 38971986 . A G . . PacBio=Poly;Sqnm=Poly +20 39269586 . G A . . PacBio=Poly;Sqnm=Poly +20 39289390 . C A . . PacBio=Mono;Sqnm=Mono;NotCalledInValidationSamples +20 39318956 . T A . . PacBio=Poly;Sqnm=Poly +20 39736197 . A G . . PacBio=Poly;Sqnm=Poly +20 40241339 . T C . . PacBio=Poly;Sqnm=Poly +20 41473555 . G A . . PacBio=Poly;Sqnm=Poly +20 41878576 . T G . . PacBio=Poly;Sqnm=Poly +20 42022716 . A G . . PacBio=Poly;Sqnm=Poly +20 42033671 . A C . . PacBio=NoCall;Sqnm=NoCall +20 42270334 . C T . . PacBio=NoCall;Sqnm=NoCall +20 42449590 . C T . . PacBio=Poly;Sqnm=NoCall +20 42521157 . T G . . PacBio=Poly;Sqnm=Poly +20 42624300 . C A . . PacBio=Poly;Sqnm=Poly +20 42984548 . G A . . PacBio=Poly;Sqnm=Poly +20 43200148 . G C . . PacBio=Poly;Sqnm=Poly +20 43425384 . T G . . PacBio=Poly;Sqnm=Poly +20 43521990 . C G . . PacBio=Poly;Sqnm=Poly +20 43565804 . G A . . PacBio=Poly;Sqnm=Poly +20 43591237 . T C . . PacBio=Poly;Sqnm=Poly +20 43805929 . C T . . PacBio=Poly;Sqnm=Poly +20 43866692 . A G . . PacBio=Poly;Sqnm=Poly +20 43902088 . C T . . PacBio=Poly;Sqnm=Poly +20 44478507 . C A . . PacBio=Poly;Sqnm=Poly +20 44768810 . C T . . PacBio=Poly;Sqnm=Poly +20 45151582 . G A . . PacBio=Poly;Sqnm=Poly +20 45414003 . G A . . PacBio=Poly;Sqnm=Poly +20 45776825 . G C . . PacBio=Poly;Sqnm=Poly +20 46454905 . G A . . PacBio=Poly;Sqnm=NoCall +20 46823642 . C T . . PacBio=Poly;Sqnm=Poly +20 47001376 . C T . . PacBio=Poly;Sqnm=Poly +20 47079360 . G C . . PacBio=Poly;Sqnm=NoCall +20 47248953 . G A . . PacBio=Poly;Sqnm=Poly +20 47480655 . C T . . PacBio=Poly;Sqnm=Poly +20 47529099 . T C . . PacBio=Poly;Sqnm=Poly +20 47703355 . A C . . PacBio=Poly;Sqnm=Poly +20 47919541 . A G . . PacBio=Poly;Sqnm=Poly +20 48126120 . A C . . PacBio=Poly;Sqnm=Poly +20 48157380 . G A . . PacBio=Poly;Sqnm=Poly +20 48233077 . C T . . PacBio=Poly;Sqnm=Poly +20 48488571 . G A . . PacBio=Poly;Sqnm=Poly +20 48534468 . G A . . PacBio=Poly;Sqnm=NoCall +20 48631385 . G C . . PacBio=Poly;Sqnm=Poly +20 48654970 . G A . . PacBio=Poly;Sqnm=NoCall +20 48708007 . C T . . PacBio=Poly;Sqnm=Poly +20 48979827 . C A . . PacBio=Poly;Sqnm=Poly +20 49100106 . G A . . PacBio=Poly;Sqnm=Poly +20 49509102 . G A . . PacBio=Poly;Sqnm=Poly +20 49631170 . G A . . PacBio=Mono;Sqnm=Mono;NotCalledInValidationSamples +20 50210361 . C T . . PacBio=Poly;Sqnm=Poly +20 50309600 . C A . . PacBio=Poly;Sqnm=Poly +20 50681296 . T C . . PacBio=Poly;Sqnm=Poly +20 50750138 . A G . . PacBio=Poly;Sqnm=Poly +20 51639257 . G A . . PacBio=Mono;Sqnm=Poly +20 51814664 . T C . . PacBio=Poly;Sqnm=Poly +20 51891088 . C T . . PacBio=Poly;Sqnm=Poly +20 52299250 . A G . . PacBio=Poly;Sqnm=Poly +20 52363435 . G A . . PacBio=Poly;Sqnm=NoCall +20 52583941 . C T . . PacBio=Poly;Sqnm=Poly +20 52787584 . C T . . PacBio=Poly;Sqnm=Poly +20 53256945 . G A . . PacBio=Poly;Sqnm=Poly +20 54155398 . A G . . PacBio=Poly;Sqnm=Poly +20 54172374 . G T . . PacBio=Poly;Sqnm=Poly +20 54209446 . A G . . PacBio=Mono;Sqnm=Mono;NotCalledInValidationSamples;Sanger=Poly +20 54317862 . C T . . PacBio=Poly;Sqnm=Poly +20 54852735 . C T . . PacBio=Poly;Sqnm=NoCall +20 54889864 . G A . . PacBio=Poly;Sqnm=Poly +20 55208711 . G A . . PacBio=Poly;Sqnm=Poly +20 55220477 . G T . . PacBio=Poly;Sqnm=Poly +20 55224856 . G T . . PacBio=NoCall;Sqnm=NoCall +20 55441530 . C T . . PacBio=Poly;Sqnm=NoCall +20 55585710 . C T . . PacBio=Poly;Sqnm=Poly +20 55630163 . C T . . PacBio=Poly;Sqnm=Poly +20 56031994 . A G . . PacBio=Poly;Sqnm=Poly +20 56316071 . T G . . PacBio=Poly;Sqnm=Poly +20 56366198 . C T . . PacBio=Poly;Sqnm=Poly +20 56703987 . G A . . PacBio=Mono;Sqnm=Mono;NotCalledInValidationSamples;Sanger=Poly +20 56794829 . G C . . PacBio=Poly;Sqnm=Poly +20 56797026 . G A . . PacBio=Poly;Sqnm=Poly +20 56922427 . A G . . PacBio=Poly;Sqnm=Poly +20 57025102 . A T . . PacBio=Poly;Sqnm=Poly +20 57104529 . G A . . PacBio=Poly;Sqnm=Poly +20 57360225 . C T . . PacBio=Poly;Sqnm=Poly +20 57630386 . T A . . PacBio=NoCall;Sqnm=NoCall +20 57754033 . G A . . PacBio=Poly;Sqnm=Poly +20 57956631 . C T . . PacBio=Poly;Sqnm=Poly +20 57997801 . C T . . PacBio=Poly;Sqnm=NoCall +20 58046279 . C G . . PacBio=NoCall;Sqnm=NoCall +20 58186723 . A G . . PacBio=Poly;Sqnm=Poly +20 58214460 . C T . . PacBio=Poly;Sqnm=Poly +20 58317759 . A G . . PacBio=Poly;Sqnm=Poly +20 58491642 . A C . . PacBio=Poly;Sqnm=Poly +20 58560045 . C T . . PacBio=Poly;Sqnm=Poly +20 58629232 . C T . . PacBio=Poly;Sqnm=Poly +20 58805192 . G T . . PacBio=Poly;Sqnm=Poly +20 58869523 . A G . . PacBio=Poly;Sqnm=Poly +20 59337535 . T C . . PacBio=Poly;Sqnm=Poly +20 59441596 . G A . . PacBio=Poly;Sqnm=Poly +20 59445223 . G A . . PacBio=NoCall;Sqnm=NoCall +20 59605846 . C T . . PacBio=Poly;Sqnm=Poly +20 59864395 . G C . . PacBio=Poly;Sqnm=Poly +20 60099821 . G T . . PacBio=Poly;Sqnm=Poly +20 60290551 . A G . . PacBio=Mono;Sqnm=Mono;NotCalledInValidationSamples;Sanger=Poly +20 60362527 . G C . . PacBio=Poly;Sqnm=Poly +20 60516358 . C T . . PacBio=Poly;Sqnm=Poly +20 60559594 . C T . . PacBio=NoCall;Sqnm=Poly +20 60745115 . G A . . PacBio=Poly;Sqnm=Poly +20 60831300 . G A . . PacBio=Poly;Sqnm=Poly +20 60907675 . G A . . PacBio=Poly;Sqnm=Poly +20 61458191 . G A . . PacBio=Poly;Sqnm=Poly +20 61717607 . C T . . PacBio=Mono;Sqnm=Poly +20 61771154 . G A . . PacBio=Poly;Sqnm=Poly +20 61950497 . G A . . PacBio=Poly;Sqnm=Poly +20 62000091 . C T . . PacBio=Poly;Sqnm=Poly +20 62550780 . C T . . PacBio=NoCall;Sqnm=NoCall +20 62558259 . T C . . PacBio=Poly;Sqnm=Poly +20 62727205 . C T . . PacBio=Poly;Sqnm=Poly diff --git a/tests/tabix_data/vcf/21.vcf b/tests/tabix_data/vcf/21.vcf new file mode 100644 index 0000000..db6cec6 --- /dev/null +++ b/tests/tabix_data/vcf/21.vcf @@ -0,0 +1,310 @@ +##fileformat=VCFv4.1 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##reference=file:///humgen/1kg/reference/human_g1k_v37.fasta +#CHROM POS ID REF ALT QUAL FILTER INFO +20 207414 . G A 0 . Consensus=Poly;PacBio=NoCall;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 792106 . C G 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 894031 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 1508892 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 1686745 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 1818886 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 2062981 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 2773229 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 2817761 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 2994966 . G T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 3126723 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 3523369 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 3635082 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 3714080 . C G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 3905791 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 3907250 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 4171994 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 4246375 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 4375206 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 4434727 . A T 0 . Consensus=Mono;PacBio=Mono;Sqnm=Mono;Sanger=Mono;pcr454_ss=NoCall;pcr454_ps=Poly +20 4495199 . G C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 4835415 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 4915769 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=NoCall;pcr454_ps=NoCall +20 4983198 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 5441171 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 5978029 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 6061317 . C A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Mono;pcr454_ps=Poly +20 6328925 . C A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 6675461 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 6976115 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 7013349 . G A 0 . Consensus=Poly;PacBio=NoCall;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 7039302 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 7638704 . C A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 7688381 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 7726350 . G T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 7733957 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 7850516 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 8095059 . G A 0 . Consensus=Mono;PacBio=NoCall;Sqnm=NoCall;pcr454_ss=NoCall;pcr454_ps=NoCall +20 8232012 . T A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 8415290 . A C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 8438535 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 8815233 . G A 0 . Consensus=Poly;PacBio=Mono;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 8953629 . C G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Mono;pcr454_ps=Poly +20 9237267 . T A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 9744549 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 9780416 . C A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 10252552 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 10314038 . C G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 10757416 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 11087688 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 11094107 . G A 0 . Consensus=Poly;PacBio=NoCall;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 11098680 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 11353163 . G C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 11510559 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 11787224 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 11821024 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 11932295 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 11965311 . G T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 12023599 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 12505523 . G T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 12570054 . A C 0 . Consensus=Poly;PacBio=NoCall;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 12667452 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 12678271 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Mono;pcr454_ss=Poly;pcr454_ps=Poly +20 12704885 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 12733996 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 12737269 . C T 0 . Consensus=Poly;PacBio=NoCall;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 12788981 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 12828594 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 12999157 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 13083804 . C G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 13197077 . G T 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 13217896 . A G 0 . Consensus=Poly;PacBio=NoCall;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 13276778 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 13375116 . G A 0 . Consensus=Mono;PacBio=Mono;Sqnm=NoCall;NotCalledInValidationSamples;pcr454_ss=Mono;pcr454_ps=Mono +20 13648056 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 13672895 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 14160159 . C G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 14266815 . T A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 14865143 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 14882868 . T G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 15244725 . C A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 15277072 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 15390867 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 15785205 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 15833020 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 15847620 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 15953253 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 15964434 . G C 0 . Consensus=NoCall;PacBio=NoCall;Sqnm=NoCall;pcr454_ss=NoCall;pcr454_ps=NoCall +20 16183922 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 16190824 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 16557779 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 16730061 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 16794015 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 17048741 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 17299827 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 17299845 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 17390323 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 17624973 . C G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 17666040 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 17735813 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 17794990 . A G 0 . Consensus=Mono;PacBio=Mono;Sqnm=Mono;NotCalledInValidationSamples;pcr454_ss=NoCall;pcr454_ps=NoCall +20 17809418 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 17860794 . C T 0 . Consensus=Poly;PacBio=Mono;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 17881936 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 17893097 . C G 0 . Consensus=Mono;PacBio=NoCall;Sqnm=NoCall;pcr454_ss=Mono;pcr454_ps=Mono +20 18188883 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 18199319 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 18233699 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 18536869 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 18637785 . T C 0 . Consensus=Mono;PacBio=NoCall;Sqnm=Mono;Sanger=Mono;NotCalledInValidationSamples;pcr454_ss=Mono;pcr454_ps=Mono +20 18763166 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 19102715 . A G 0 . Consensus=Mono;PacBio=NoCall;Sqnm=NoCall;pcr454_ss=Mono;pcr454_ps=Mono +20 19244609 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 19573719 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 19815613 . A G 0 . Consensus=Poly;PacBio=NoCall;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 20511479 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;Sanger=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 20639358 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 21278490 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 21297718 . C G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 21418269 . A T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 21560553 . A T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 21618451 . G A 0 . Consensus=NoCall;PacBio=NoCall;Sqnm=NoCall;pcr454_ss=NoCall;pcr454_ps=NoCall +20 21705723 . C A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 22076189 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 22118677 . T A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 22320721 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 22368918 . C A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 23020003 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 23214163 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 23273877 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 23335790 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Mono +20 23790659 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 23830388 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 23837678 . C G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 23901081 . A C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 23946361 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 23949242 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 24539119 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 24986457 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 25183729 . G A 0 . Consensus=Mono;PacBio=NoCall;Sqnm=NoCall;pcr454_ss=Mono;pcr454_ps=Mono +20 25277133 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 25292464 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 25528915 . G C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 25851836 . A G 0 . Consensus=Poly;PacBio=NoCall;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 25970163 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 29920798 . C T 0 . Consensus=Poly;PacBio=NoCall;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 30007713 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 30051768 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 30183598 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 30604408 . G A 0 . Consensus=Poly;PacBio=NoCall;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 30759940 . G T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 30881454 . G T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=Poly +20 31356560 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 31450036 . A G 0 . Consensus=Poly;PacBio=NoCall;Sqnm=Mono;pcr454_ss=Poly;pcr454_ps=Poly +20 31589920 . A T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 31922121 . C T 0 . Consensus=Poly;PacBio=NoCall;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 32801430 . G C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 32943975 . G T 0 . Consensus=Mono;PacBio=Mono;Sqnm=Mono;pcr454_ss=NoCall;pcr454_ps=NoCall +20 33155812 . C A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 34090682 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 34254080 . C T 0 . Consensus=Mono;PacBio=Mono;Sqnm=NoCall;NotCalledInValidationSamples;pcr454_ss=Mono;pcr454_ps=Mono +20 34312126 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 34481504 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 34694577 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 35026572 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 35472344 . T G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 35882698 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 36044719 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 36047623 . C A 0 . Consensus=Poly;PacBio=NoCall;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 36204890 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 36469514 . G C 0 . Consensus=Poly;PacBio=NoCall;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 36840217 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 37460945 . C T 0 . Consensus=Poly;PacBio=Mono;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 37665246 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 37732397 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 37874645 . G T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 37958191 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 37996273 . C T 0 . Consensus=Mono;PacBio=Mono;Sqnm=NoCall;NotCalledInValidationSamples;pcr454_ss=Mono;pcr454_ps=Mono +20 38016547 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 38435682 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 38505534 . A T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 38803278 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 38963803 . G C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 38971986 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 39269586 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 39289390 . C A 0 . Consensus=Mono;PacBio=Mono;Sqnm=Mono;NotCalledInValidationSamples;pcr454_ss=NoCall;pcr454_ps=NoCall +20 39318956 . T A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=Poly +20 39736197 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 40241339 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 41473555 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 41878576 . T G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 42022716 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 42033671 . A C 0 . Consensus=Poly;PacBio=NoCall;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 42270334 . C T 0 . Consensus=NoCall;PacBio=NoCall;Sqnm=NoCall;pcr454_ss=NoCall;pcr454_ps=NoCall +20 42449590 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 42521157 . T G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 42624300 . C A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 42984548 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 43200148 . G C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 43425384 . T G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 43521990 . C G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 43565804 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 43591237 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 43805929 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 43866692 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 43902088 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 44478507 . C A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 44768810 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 45151582 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 45414003 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Mono;pcr454_ps=Mono +20 45776825 . G C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 46454905 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 46823642 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 47001376 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 47079360 . G C 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 47248953 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 47480655 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 47529099 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 47703355 . A C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 47919541 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 48126120 . A C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 48157380 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 48233077 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 48488571 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 48534468 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 48631385 . G C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 48654970 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 48708007 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 48979827 . C A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 49100106 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 49509102 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 49631170 . G A 0 . Consensus=Mono;PacBio=Mono;Sqnm=Mono;NotCalledInValidationSamples;pcr454_ss=Mono;pcr454_ps=Mono +20 50210361 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 50309600 . C A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 50681296 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 50750138 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 51639257 . G A 0 . Consensus=Poly;PacBio=Mono;Sqnm=Poly;pcr454_ss=Mono;pcr454_ps=Mono +20 51814664 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 51891088 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 52299250 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 52363435 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 52583941 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 52787584 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 53256945 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 54155398 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 54172374 . G T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=Poly +20 54209446 . A G 0 . Consensus=Poly;PacBio=Mono;Sqnm=Mono;NotCalledInValidationSamples;Sanger=Poly;pcr454_ss=Mono;pcr454_ps=Mono +20 54317862 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 54852735 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 54889864 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 55208711 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 55220477 . G T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 55224856 . G T 0 . Consensus=NoCall;PacBio=NoCall;Sqnm=NoCall;pcr454_ss=NoCall;pcr454_ps=NoCall +20 55441530 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 55585710 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 55630163 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 56031994 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 56316071 . T G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 56366198 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 56703987 . G A 0 . Consensus=Poly;PacBio=Mono;Sqnm=Mono;NotCalledInValidationSamples;Sanger=Poly;pcr454_ss=Mono;pcr454_ps=Mono +20 56794829 . G C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 56797026 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 56922427 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 57025102 . A T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 57104529 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 57360225 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 57630386 . T A 0 . Consensus=Poly;PacBio=NoCall;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 57754033 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 57956631 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 57997801 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 58046279 . C G 0 . Consensus=Poly;PacBio=NoCall;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 58186723 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 58214460 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 58317759 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 58491642 . A C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 58560045 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 58629232 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 58805192 . G T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 58869523 . A G 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 59337535 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 59441596 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 59445223 . G A 0 . Consensus=Poly;PacBio=NoCall;Sqnm=NoCall;pcr454_ss=Poly;pcr454_ps=Poly +20 59605846 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 59864395 . G C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=NoCall;pcr454_ps=NoCall +20 60099821 . G T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 60290551 . A G 0 . Consensus=Poly;PacBio=Mono;Sqnm=Mono;NotCalledInValidationSamples;Sanger=Poly;pcr454_ss=Mono;pcr454_ps=Mono +20 60362527 . G C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 60516358 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 60559594 . C T 0 . Consensus=Poly;PacBio=NoCall;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 60745115 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 60831300 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 60907675 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 61458191 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 61717607 . C T 0 . Consensus=Poly;PacBio=Mono;Sqnm=Poly;pcr454_ss=Mono;pcr454_ps=Mono +20 61771154 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 61950497 . G A 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 62000091 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 62550780 . C T 0 . Consensus=NoCall;PacBio=NoCall;Sqnm=NoCall;pcr454_ss=NoCall;pcr454_ps=NoCall +20 62558259 . T C 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly +20 62727205 . C T 0 . Consensus=Poly;PacBio=Poly;Sqnm=Poly;pcr454_ss=Poly;pcr454_ps=Poly diff --git a/tests/tabix_data/vcf/22.vcf b/tests/tabix_data/vcf/22.vcf new file mode 100644 index 0000000..ffb2fce --- /dev/null +++ b/tests/tabix_data/vcf/22.vcf @@ -0,0 +1,1000 @@ +##fileformat=VCFv4.0 +##FORMAT= +##FilterLiftedVariants="analysis_type=FilterLiftedVariants input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=null excludeIntervals=null reference_sequence=/local/sequence/reference/BWA_ref/hg19/hg19.fasta rodBind=[/local/scratch/xyliu/0.915136538286792.sorted.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=1 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false enable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null quiet_output_mode=false debug_mode=false help=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub" +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA15029 NA15036 NA15038 NA15056b NA15072 NA15144C NA15213_006 NA15215A NA15216_A2 NA15221b NA15223_6v2 NA15224_4 NA15226A NA15227b NA15236_6 NA15242_005 NA15245v2 NA15268 NA15324_A1 NA15385b NA15386A NA15510_A1 NA15590_4 NA15594_005 NA18500b NA18501 NA18502 NA18503 NA18504 NA18505 NA18506 NA18507 NA18508 NA18515 NA18516 NA18517 NA18521 NA18522 NA18523 NA18524_B1 NA18526_B2 NA18529_B1 NA18532_B1 NA18537_B1 NA18540_B1 NA18542_B1 NA18545_5 NA18547_B1 NA18550_B1 NA18555_A2 NA18561_A3 NA18562_B1 NA18563 NA18564_4 NA18566_3 NA18570_3 NA18571_3 NA18572_3 NA18573_B3 NA18576_4 NA18577_B1 NA18579_B1 NA18582_B1 NA18592_2 NA18593_B1 NA18594_B1 NA18603_B1 NA18605_B1 NA18608_B1 NA18609_B1 NA18611_B1 NA18612_B1 NA18620_3 NA18621_B1 NA18622_B1 NA18623_B1 NA18624 NA18632_3 NA18635_A1 NA18637_2 NA18852 NA18853 NA18854 NA18855 NA18856 NA18857 NA18858 NA18859 NA18860 NA18861 NA18862 NA18863 NA18870 NA18871 NA18872 NA18912 NA18913 NA18914 NA18940_3 NA19092 NA19093 NA19094 NA19098 NA19099 NA19100 NA19101 NA19102 NA19103 NA19116 NA19119b NA19120 NA19127 NA19128 NA19129 NA19130b NA19131 NA19132b NA19137 NA19138 NA19139 NA19140b NA19141 NA19142 NA19143 NA19144 NA19145 NA19152 NA19153 NA19154 NA19159 NA19160 NA19161 NA19171 NA19172 NA19173 NA19192 NA19193 NA19194 NA19200 NA19201 NA19202 NA19203 NA19204 NA19205 NA19206 NA19207 NA19208v2 NA19209 NA19210 NA19211 NA19221 NA19222 NA19223 NA19238 NA19239 NA19240 NA_pos103a NS12911_1 +chr1 5911136 . T TGCCATTCCAAAGAGGCACTCA . PASS VC=INDEL;AC=28;AF=0.09;AN=316 GT 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 17054990 . G GA . PASS VC=INDEL;AC=25;AF=0.12;AN=200 GT ./. ./. 0/1 ./. 0/0 ./. ./. ./. ./. 0/0 0/1 ./. ./. 0/0 ./. ./. 0/1 ./. ./. ./. ./. 0/0 0/1 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 ./. ./. ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/0 ./. 0/0 ./. ./. ./. ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 ./. 0/1 ./. 0/1 ./. 0/0 0/0 0/0 ./. 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. ./. 0/0 0/0 0/0 0/1 ./. ./. ./. 0/1 0/1 ./. 0/1 0/1 0/1 0/0 0/0 ./. 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 ./. ./. ./. 0/1 ./. ./. 0/0 ./. ./. ./. ./. ./. ./. ./. 0/1 0/1 ./. +chr1 17390953 . CT C . PASS VC=INDEL;AC=118;AF=0.37;AN=316 GT 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 +chr1 17754916 . CCT C . PASS VC=INDEL;AC=66;AF=0.21;AN=316;refseq.name=NM_018715;refseq.positionType=intron GT 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 +chr1 18293100 . C CCTC . PASS VC=INDEL;AC=263;AF=0.84;AN=314 GT 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 1/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 18823397 . T TTAAT . PASS VC=INDEL;AC=87;AF=0.28;AN=316 GT 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 1/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 19215209 . G GAG . PASS VC=INDEL;AC=2;AF=0.01;AN=316;refseq.name=NM_003748;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 19943821 . CACAG C . PASS VC=INDEL;AC=12;AF=0.04;AN=308;refseq.name=NM_001032363;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/1 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 20092486 . GAAG G . PASS VC=INDEL;AC=7;AF=0.02;AN=314;refseq.name=NM_181719;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 20977854 . A ATTC . PASS VC=INDEL;AC=152;AF=0.52;AN=292;refseq.name=NM_032409;refseq.positionType=exon GT 0/1 1/1 1/1 0/1 0/0 0/0 0/1 1/1 0/1 0/0 ./. 0/1 0/1 1/1 0/1 0/1 ./. 0/0 1/1 1/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 0/0 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 ./. 0/0 0/1 0/1 0/1 0/0 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 ./. ./. 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/1 1/1 1/1 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/0 ./. 0/0 ./. 0/0 1/1 1/1 1/1 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 ./. 0/1 1/1 1/1 0/0 0/1 0/1 1/1 ./. ./. 0/1 0/0 0/0 0/0 ./. 1/1 0/1 1/1 0/0 ./. 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 +chr1 21275058 . CTTTG C . PASS VC=INDEL;AC=30;AF=0.1;AN=296;refseq.name=NM_003760;refseq.positionType=intron GT ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/1 0/1 0/0 0/0 0/0 ./. ./. 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 +chr1 22642904 . A AAC . PASS VC=INDEL;AC=255;AF=0.85;AN=300 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 ./. ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 ./. 1/1 0/1 1/1 1/1 1/1 ./. 0/1 0/1 0/1 1/1 1/1 1/1 ./. 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 ./. 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 +chr1 22844297 . ATCT A . PASS VC=INDEL;AC=162;AF=0.51;AN=316;refseq.name=NM_001083621;refseq.positionType=intron GT 0/1 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/1 1/1 0/0 0/0 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 1/1 0/0 0/0 0/0 1/1 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/0 0/0 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 +chr1 22844299 . CTTC C . PASS VC=INDEL;AC=160;AF=0.51;AN=314;refseq.name=NM_001083621;refseq.positionType=intron GT 0/1 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/1 1/1 0/0 0/0 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 1/1 0/0 0/0 0/0 1/1 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/0 0/0 1/1 0/1 1/1 0/1 1/1 1/1 0/1 ./. 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 +chr1 23162393 . AA A . PASS VC=INDEL;AC=44;AF=0.14;AN=316;refseq.name=NM_004442;refseq.positionType=intron GT 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 +chr1 23882634 . T TAGGTG . PASS VC=INDEL;AC=24;AF=0.08;AN=284 GT 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 ./. 0/1 0/1 ./. 0/1 0/0 0/0 1/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 +chr1 25799681 . CTCTG C . PASS VC=INDEL;AC=49;AF=0.21;AN=230;refseq.name=NM_018202;refseq.positionType=intron GT 0/1 ./. 1/1 ./. 0/1 ./. 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/1 1/1 0/1 ./. ./. 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 1/1 ./. 1/1 0/0 0/1 1/1 ./. 0/1 ./. 0/1 ./. 0/1 0/1 0/0 1/1 0/1 ./. ./. 0/1 ./. 1/1 0/1 ./. 0/1 1/1 ./. ./. 0/1 ./. 0/1 ./. ./. 1/1 ./. 0/1 ./. 1/1 ./. 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. ./. 0/0 ./. ./. 0/0 ./. ./. ./. ./. ./. 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 ./. ./. 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 26081170 . CA C . PASS VC=INDEL;AC=17;AF=0.06;AN=308;refseq.name=NM_020379;refseq.positionType=intron GT 0/0 ./. 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 26240086 . GAT G . PASS VC=INDEL;AC=31;AF=0.1;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 26725650 . A ATGAAG . PASS VC=INDEL;AC=300;AF=0.95;AN=316 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 +chr1 26725655 . G GTGAAG . PASS VC=INDEL;AC=300;AF=0.95;AN=316 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 +chr1 27425097 . CTGG C . PASS VC=INDEL;AC=40;AF=0.16;AN=248;refseq.name=NM_003047;refseq.positionType=terminator GT 1/1 0/1 0/0 ./. 0/0 0/0 ./. 0/0 0/0 ./. ./. 0/0 0/0 ./. ./. 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 ./. 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. ./. 0/0 0/0 ./. ./. ./. ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 ./. ./. 0/0 ./. ./. ./. 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/1 0/1 0/1 ./. 0/1 ./. 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/1 0/1 0/1 ./. ./. 0/0 0/1 0/0 ./. 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 ./. 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/0 +chr1 27737240 . A AT . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_006990;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 27744410 . GATCCATG G . PASS VC=INDEL;AC=166;AF=0.56;AN=296;refseq.name=NM_006990;refseq.positionType=intron GT 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/0 1/1 ./. 0/1 0/0 ./. 0/0 ./. 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 1/1 0/0 0/0 ./. 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 ./. 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 ./. 1/1 0/1 1/1 ./. 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 ./. 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 ./. ./. +chr1 28156589 . G GGATG . PASS VC=INDEL;AC=127;AF=0.4;AN=314;refseq.name=NM_002713;refseq.positionType=promoter GT 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 1/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 ./. 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 1/1 0/1 1/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 +chr1 28721777 . TA T . PASS VC=INDEL;AC=287;AF=0.91;AN=316;refseq.name=NM_001048183;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 +chr1 28721778 . AA A . PASS VC=INDEL;AC=287;AF=0.91;AN=316;refseq.name=NM_001048183;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 +chr1 28907201 . GT G . PASS VC=INDEL;AC=3;AF=0.01;AN=224 GT 0/0 ./. 0/0 0/0 ./. ./. 0/0 ./. ./. 0/0 0/0 ./. ./. 0/0 ./. ./. 0/0 ./. ./. 0/0 ./. ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. ./. ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 ./. ./. 0/0 0/1 0/1 ./. ./. 0/0 ./. ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/1 ./. ./. ./. ./. +chr1 29223339 . G GTGAG . PASS VC=INDEL;AC=203;AF=0.7;AN=292;refseq.name=NM_004437;refseq.positionType=intron GT 1/1 1/1 ./. 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 ./. 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 0/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 ./. 1/1 0/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 ./. 0/1 1/1 1/1 ./. 1/1 1/1 0/1 1/1 0/1 ./. 1/1 0/1 0/0 0/0 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/0 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 0/0 ./. ./. 0/1 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 ./. 0/0 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 1/1 1/1 ./. 1/1 0/1 +chr1 29223342 . A AGCAA . PASS VC=INDEL;AC=71;AF=0.29;AN=242;refseq.name=NM_004437;refseq.positionType=intron GT 0/1 0/1 1/1 ./. 0/1 0/1 0/1 0/0 ./. 0/0 0/1 ./. 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/1 ./. 1/1 0/1 ./. ./. 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 ./. 0/1 ./. 0/1 ./. 0/1 0/1 ./. 0/1 0/1 ./. ./. 0/1 ./. ./. ./. ./. 0/1 ./. 0/0 ./. ./. ./. 0/1 0/1 0/0 0/1 0/0 0/1 ./. 0/0 0/0 0/0 ./. 0/1 0/1 0/1 0/0 0/0 ./. 0/0 ./. 0/1 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/1 0/0 0/1 ./. ./. 0/0 0/0 ./. 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 ./. 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/1 0/0 0/0 ./. 0/0 ./. 0/1 ./. ./. 0/0 +chr1 29865521 . G GCTCCGT . PASS VC=INDEL;AC=115;AF=0.36;AN=316 GT 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 +chr1 31128790 . C CT . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 31135886 . A AG . PASS VC=INDEL;AC=246;AF=0.92;AN=268 GT ./. 1/1 0/1 1/1 0/1 ./. 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 ./. 1/1 1/1 1/1 1/1 ./. 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 ./. ./. ./. 1/1 ./. 1/1 0/1 0/1 0/1 ./. 1/1 1/1 ./. ./. 0/1 1/1 1/1 ./. 1/1 1/1 ./. 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 ./. 1/1 1/1 1/1 ./. 0/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 ./. ./. ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. +chr1 31503645 . AAAAGA A . PASS VC=INDEL;AC=5;AF=0.02;AN=314;refseq.name=NM_001020658;refseq.positionType=intron GT 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 31504005 . C CAT . PASS VC=INDEL;AC=84;AF=0.27;AN=316;refseq.name=NM_001020658;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 +chr1 31731414 . CCTCT C . PASS VC=INDEL;AC=40;AF=0.13;AN=314 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 31775152 . A ACTA . PASS VC=INDEL;AC=47;AF=0.15;AN=308;refseq.name=NM_016505;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 31882582 . G GGCCTCA . PASS VC=INDEL;AC=163;AF=0.59;AN=274 GT 1/1 1/1 0/0 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 ./. 1/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 ./. 0/1 1/1 0/1 1/1 0/0 1/1 0/1 0/1 0/0 0/1 ./. 0/1 1/1 0/1 0/1 1/1 0/1 ./. 0/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 ./. 1/1 0/1 1/1 1/1 0/1 ./. ./. ./. 1/1 ./. 1/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 1/1 0/1 0/0 ./. 0/0 1/1 0/0 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 ./. 0/1 0/1 1/1 0/1 0/0 1/1 0/1 1/1 ./. 1/1 0/1 ./. 0/1 0/1 0/1 ./. 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 ./. 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 ./. 0/1 0/1 0/1 ./. ./. 0/1 0/1 ./. 0/0 0/1 ./. 0/1 ./. 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 +chr1 32010706 . GG G . PASS VC=INDEL;AC=312;AF=1;AN=312 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 32078865 . G GT . PASS VC=INDEL;AC=78;AF=0.25;AN=316 GT 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/1 1/1 0/0 0/0 0/1 0/0 0/0 1/1 1/1 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 +chr1 33422344 . G GAA . PASS VC=INDEL;AC=123;AF=0.39;AN=316;refseq.name=NM_153341;refseq.positionType=intron GT 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 1/1 0/0 1/1 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 +chr1 33634618 . TC T . PASS VC=INDEL;AC=238;AF=0.75;AN=316;refseq.name=NM_018207;refseq.positionType=intron GT 0/0 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/0 1/1 0/0 1/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 +chr1 33965999 . CCCAGTTC C . PASS VC=INDEL;AC=203;AF=0.65;AN=314 GT 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 1/1 0/1 1/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 ./. 0/1 1/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 +chr1 34176371 . GAAACATAAG G . PASS VC=INDEL;AC=252;AF=0.95;AN=266;refseq.name=NM_052896;refseq.positionType=intron GT 0/0 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 ./. ./. 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 ./. 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 ./. 0/1 1/1 ./. ./. ./. 0/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 ./. 0/1 1/1 ./. 0/1 0/1 1/1 ./. ./. 1/1 1/1 0/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 ./. 1/1 +chr1 34931817 . AT A . PASS VC=INDEL;AC=38;AF=0.12;AN=316 GT 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 +chr1 35879227 . CAT C . PASS VC=INDEL;AC=31;AF=0.1;AN=316;refseq.name=NM_005095;refseq.positionType=intron GT 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 +chr1 36429590 . A AG . PASS VC=INDEL;AC=181;AF=0.57;AN=316;refseq.name=NM_024852;refseq.positionType=intron GT 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/0 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 +chr1 36558240 . C CAC . PASS VC=INDEL;AC=11;AF=0.03;AN=316;refseq.name=NM_017825;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 37034721 . ATACT A . PASS VC=INDEL;AC=44;AF=0.16;AN=282 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/0 ./. ./. ./. 0/1 0/1 0/0 ./. 0/0 0/1 0/0 0/0 ./. 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/1 ./. ./. 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 +chr1 37142202 . AATA A . PASS VC=INDEL;AC=24;AF=0.08;AN=314 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 37169424 . TA T . PASS VC=INDEL;AC=176;AF=0.56;AN=316 GT 0/0 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/0 0/0 +chr1 37169427 . AA A . PASS VC=INDEL;AC=173;AF=0.56;AN=308 GT 0/0 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 1/1 0/0 0/1 ./. 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 ./. 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/0 ./. 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/0 0/0 +chr1 37638341 . T TAT . PASS VC=INDEL;AC=11;AF=0.05;AN=222 GT 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/1 ./. 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/1 ./. 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. ./. 0/0 ./. ./. ./. 0/0 0/1 ./. ./. ./. ./. ./. ./. ./. ./. ./. 0/0 0/0 0/0 0/0 0/1 0/0 ./. ./. 0/0 0/0 0/1 0/0 ./. 0/1 ./. ./. 0/0 ./. ./. ./. ./. 0/0 0/0 0/1 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. ./. ./. 0/0 +chr1 38077349 . CTTATCCCCATACTAGTTATTATCGAAACCATCAGCCTACTCATTCAACCAATAGCCCTGGCCGTACGCCTA C . PASS VC=INDEL;AC=209;AF=0.77;AN=272;refseq.name=NM_001038633;refseq.positionType=intron GT 0/1 1/1 1/1 1/1 1/1 ./. 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 0/1 1/1 ./. 1/1 ./. 0/1 1/1 1/1 1/1 ./. ./. 1/1 1/1 1/1 ./. 1/1 1/1 1/1 ./. 1/1 1/1 1/1 ./. ./. 1/1 1/1 ./. 0/1 ./. 1/1 1/1 0/1 0/1 1/1 ./. 1/1 1/1 1/1 0/1 1/1 ./. ./. ./. 1/1 0/1 1/1 0/1 0/1 0/0 1/1 0/1 ./. 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 ./. 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 ./. 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 1/1 ./. 1/1 0/0 0/1 0/0 1/1 1/1 1/1 ./. ./. 0/1 1/1 1/1 1/1 0/0 0/0 0/0 ./. 1/1 0/1 1/1 0/1 +chr1 38392549 . AT A . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_005540;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 38664242 . TA T . PASS VC=INDEL;AC=93;AF=0.29;AN=316 GT 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 +chr1 38739177 . GTG G . PASS VC=INDEL;AC=32;AF=0.1;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 39288395 . CTTC C . PASS VC=INDEL;AC=36;AF=0.12;AN=306 GT 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 ./. 0/0 0/0 0/1 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 +chr1 39615407 . C CGATAT . PASS VC=INDEL;AC=192;AF=0.63;AN=306;refseq.name=NM_012090;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 0/1 0/0 0/1 1/1 0/0 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 1/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 ./. 0/1 1/1 0/0 0/0 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/0 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 ./. 0/1 1/1 0/1 1/1 1/1 0/1 1/1 ./. 1/1 1/1 1/1 0/1 0/1 ./. 0/1 0/0 0/0 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/0 0/1 1/1 1/1 ./. 0/0 1/1 0/1 1/1 1/1 +chr1 39615412 . T TGATAT . PASS VC=INDEL;AC=200;AF=0.63;AN=316;refseq.name=NM_012090;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 0/1 0/0 0/1 1/1 0/0 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 1/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 1/1 0/0 0/0 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/0 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/0 0/0 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 +chr1 39736467 . T TATAT . PASS VC=INDEL;AC=27;AF=0.09;AN=316;refseq.name=NM_012090;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 39936801 . GTG G . PASS VC=INDEL;AC=23;AF=0.07;AN=314;refseq.name=NM_012090;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 40525320 . AACACAAGAAC A . PASS VC=INDEL;AC=21;AF=0.11;AN=196;refseq.name=NM_006367;refseq.positionType=intron GT ./. ./. 0/0 ./. 0/0 0/0 0/0 0/0 ./. ./. 0/1 0/0 0/0 0/1 1/1 1/1 0/1 ./. 1/1 ./. 0/0 1/1 0/0 1/1 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. ./. ./. 0/1 ./. 0/0 ./. ./. ./. 0/0 0/0 ./. ./. 0/0 ./. ./. ./. ./. ./. ./. ./. 0/0 0/0 ./. ./. ./. 0/1 0/1 0/0 ./. ./. ./. ./. ./. 0/0 ./. ./. ./. ./. ./. ./. 0/0 ./. 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 ./. ./. ./. 0/0 ./. 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 ./. ./. 0/1 0/0 0/0 ./. 0/0 0/0 0/0 ./. +chr1 40728529 . TA T . PASS VC=INDEL;AC=216;AF=0.68;AN=316;refseq.name=NM_005857;refseq.positionType=intron GT 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 +chr1 41281719 . CT C . PASS VC=INDEL;AC=142;AF=0.45;AN=316;refseq.name=NM_004700;refseq.positionType=intron GT 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 +chr1 41808814 . CT C . PASS VC=INDEL;AC=32;AF=0.1;AN=308 GT 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 41991662 . CCA C . PASS VC=INDEL;AC=17;AF=0.06;AN=304;refseq.name=NM_024503;refseq.positionType=intron GT 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 ./. 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 ./. +chr1 42083551 . C CT . PASS VC=INDEL;AC=139;AF=0.44;AN=316;refseq.name=NM_024503;refseq.positionType=intron GT 0/1 1/1 1/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 0/0 1/1 1/1 0/1 0/1 1/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 0/0 1/1 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 1/1 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 +chr1 42531504 . G GATAG . PASS VC=INDEL;AC=199;AF=0.66;AN=302 GT 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 1/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 1/1 1/1 ./. 0/0 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 ./. 1/1 1/1 1/1 ./. 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 ./. 0/1 0/1 0/1 0/0 ./. 0/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/0 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 1/1 1/1 0/0 0/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 0/1 +chr1 42835720 . C CTTG . PASS VC=INDEL;AC=297;AF=0.94;AN=316 GT 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 42835723 . G GTTG . PASS VC=INDEL;AC=297;AF=0.94;AN=316 GT 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 42880843 . A ACA . PASS VC=INDEL;AC=179;AF=0.57;AN=316;refseq.name=NM_173642;refseq.positionType=exon GT 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/1 1/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 1/1 0/0 0/1 0/0 0/0 1/1 1/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 1/1 1/1 1/1 0/0 0/0 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 1/1 1/1 0/1 +chr1 44114854 . C CGC . PASS VC=INDEL;AC=107;AF=0.45;AN=238;refseq.name=NM_014663;refseq.positionType=promoter GT 0/0 1/1 1/1 ./. 0/0 ./. ./. 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/0 ./. 0/1 1/1 ./. 0/1 0/1 0/1 0/0 0/1 0/1 ./. ./. 0/0 0/0 ./. 0/1 0/0 0/1 1/1 ./. 1/1 0/1 0/1 0/1 ./. 0/1 0/0 0/1 ./. 0/1 0/1 ./. 0/0 0/0 0/1 0/0 0/0 1/1 ./. 0/0 0/0 0/1 0/1 ./. ./. ./. 0/0 0/0 0/1 0/1 ./. 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 ./. 0/1 ./. 0/1 0/0 0/0 0/1 1/1 1/1 1/1 0/0 0/0 0/0 1/1 ./. 0/1 0/1 0/1 ./. ./. ./. 0/1 ./. 0/1 ./. 1/1 ./. 1/1 1/1 1/1 1/1 ./. ./. ./. 1/1 ./. 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 ./. ./. 0/1 1/1 0/1 ./. 0/0 0/1 1/1 0/1 0/1 ./. ./. 1/1 0/1 1/1 0/1 0/1 ./. ./. ./. 0/1 ./. 0/0 0/1 +chr1 44231607 . CA C . PASS VC=INDEL;AC=216;AF=0.69;AN=314;refseq.name=NM_006279;refseq.positionType=intron GT 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 0/0 0/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 1/1 1/1 0/1 0/0 0/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 0/0 0/0 0/0 1/1 ./. 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 +chr1 44231608 . AA A . PASS VC=INDEL;AC=215;AF=0.68;AN=314;refseq.name=NM_006279;refseq.positionType=intron GT 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 0/0 0/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 ./. 0/1 1/1 1/1 0/0 0/1 1/1 1/1 0/1 0/0 0/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 0/0 0/0 0/0 1/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 +chr1 44327106 . GCTGTCAGGACTTGTATAGA G . PASS VC=INDEL;AC=193;AF=0.66;AN=294;refseq.name=NM_006279;refseq.positionType=intron GT 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 ./. 0/0 0/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 0/1 0/1 ./. 1/1 1/1 1/1 1/1 ./. 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 ./. 1/1 ./. 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 ./. 0/1 ./. 1/1 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 ./. 0/0 1/1 0/1 0/1 0/1 0/1 ./. 0/1 ./. 1/1 1/1 +chr1 44730823 . G GGAGA . PASS VC=INDEL;AC=295;AF=0.96;AN=306;refseq.name=NM_024066;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 ./. 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 +chr1 44881687 . GCAT G . PASS VC=INDEL;AC=29;AF=0.09;AN=314;refseq.name=NM_018150;refseq.positionType=intron GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 +chr1 45223909 . GATTAGCTG G . PASS VC=INDEL;AC=167;AF=0.55;AN=306;refseq.name=NM_006845;refseq.positionType=intron GT 0/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 ./. 0/1 ./. 0/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 ./. ./. 0/1 1/1 1/1 ./. 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 +chr1 46900444 . T TGTGGGAATGC . PASS VC=INDEL;AC=2;AF=0.01;AN=296 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 +chr1 46900720 . C CTT . PASS VC=INDEL;AC=244;AF=0.79;AN=308 GT 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 1/1 0/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 ./. 1/1 ./. 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 0/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 +chr1 46900721 . T TTT . PASS VC=INDEL;AC=241;AF=0.79;AN=304 GT 1/1 1/1 1/1 1/1 1/1 ./. 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 1/1 0/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 ./. 1/1 ./. 1/1 0/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 ./. 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 +chr1 47052336 . TGAAA T . PASS VC=INDEL;AC=76;AF=0.24;AN=316;refseq.name=NM_003684;refseq.positionType=intron GT 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 +chr1 47167062 . TT T . PASS VC=INDEL;AC=174;AF=0.64;AN=272;refseq.name=NM_014774;refseq.positionType=intron GT ./. 0/1 0/1 0/1 ./. 0/0 0/0 1/1 1/1 0/1 1/1 0/1 ./. ./. 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 ./. 0/1 0/1 1/1 0/1 0/1 0/1 ./. 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 ./. 0/1 1/1 0/1 1/1 1/1 0/1 ./. 0/1 0/1 1/1 1/1 1/1 1/1 ./. 0/1 0/1 0/0 0/1 ./. 1/1 1/1 1/1 ./. ./. 0/0 ./. 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/0 ./. 0/1 1/1 ./. 0/1 0/1 1/1 1/1 0/0 0/1 1/1 1/1 ./. 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 ./. 1/1 ./. 1/1 0/1 0/1 1/1 0/1 0/1 0/0 ./. 0/1 ./. 0/1 1/1 0/1 1/1 ./. 1/1 ./. 0/0 +chr1 47324578 . CTACTACAAA C . PASS VC=INDEL;AC=150;AF=0.65;AN=232 GT 1/1 ./. ./. ./. ./. 0/1 0/0 0/1 0/0 ./. ./. 1/1 0/1 1/1 0/0 0/1 ./. 0/1 0/1 0/0 0/1 ./. 0/1 0/0 ./. 0/0 1/1 1/1 ./. 0/1 1/1 1/1 ./. 0/1 0/0 0/1 1/1 1/1 ./. 0/1 ./. 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 0/1 ./. 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 ./. 1/1 ./. 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 ./. 1/1 1/1 ./. 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 ./. ./. 0/1 0/1 0/1 ./. 1/1 0/1 0/0 0/1 ./. 0/1 1/1 0/1 ./. 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 ./. 1/1 ./. 0/0 0/1 0/0 ./. 1/1 1/1 1/1 ./. ./. 1/1 ./. ./. 0/0 ./. 0/1 0/1 ./. ./. 1/1 1/1 1/1 0/1 0/1 0/1 1/1 ./. ./. ./. 0/1 ./. 0/1 0/1 0/1 ./. 0/1 +chr1 47325281 . CA C . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 47891688 . AT A . PASS VC=INDEL;AC=84;AF=0.29;AN=294 GT 1/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 1/1 0/0 1/1 ./. 0/0 ./. 0/0 ./. 0/0 1/1 1/1 0/1 0/1 0/1 ./. 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 ./. 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/1 ./. 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 ./. 0/0 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 ./. 0/1 0/1 0/1 ./. ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 +chr1 47931769 . TTCTC T . PASS VC=INDEL;AC=2;AF=0.01;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 48000154 . G GTTT . PASS VC=INDEL;AC=11;AF=0.05;AN=232 GT ./. 0/1 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/1 ./. 0/0 0/0 ./. ./. 0/0 ./. 0/0 ./. 0/0 ./. 0/0 0/0 0/0 ./. ./. ./. 0/0 ./. ./. 0/0 0/0 0/1 0/0 0/1 ./. 0/1 0/1 ./. 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. ./. 0/0 ./. ./. 0/1 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. ./. ./. 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/1 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 ./. 0/0 0/0 +chr1 48146050 . CCTGA C . PASS VC=INDEL;AC=28;AF=0.09;AN=316 GT 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 48520865 . CAGGGTGAGTAGGCCTGGGCAG C . PASS VC=INDEL;AC=4;AF=0.01;AN=316 GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 48520886 . GAG G . PASS VC=INDEL;AC=31;AF=0.14;AN=216 GT ./. 0/0 0/1 0/0 0/0 ./. ./. 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. ./. 0/0 ./. ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/1 ./. 0/1 0/0 0/0 ./. 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/1 0/0 ./. ./. ./. 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. ./. 0/0 ./. 0/0 0/0 0/1 0/0 0/1 0/0 0/1 ./. 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. ./. ./. ./. ./. ./. 0/0 ./. 0/1 0/1 ./. 0/1 0/0 0/1 0/1 0/1 ./. 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 ./. ./. 0/0 ./. ./. ./. 0/0 1/1 0/0 0/1 ./. ./. 0/0 ./. 0/0 0/0 0/1 ./. 0/1 0/1 0/0 ./. ./. ./. +chr1 48544917 . G GTGTT . PASS VC=INDEL;AC=43;AF=0.14;AN=314 GT 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 49109456 . AGAGC A . PASS VC=INDEL;AC=31;AF=0.14;AN=226;refseq.name=NM_032785;refseq.positionType=intron GT 0/0 0/1 0/1 ./. 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 ./. ./. 0/0 0/0 0/1 0/0 ./. ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 ./. ./. 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 ./. ./. 0/1 0/0 0/1 0/0 ./. 0/0 0/0 ./. 0/0 0/1 ./. ./. 0/0 0/1 ./. ./. ./. ./. 0/1 0/0 ./. 0/0 ./. 0/0 0/0 0/0 ./. ./. ./. 0/0 ./. 0/0 ./. ./. ./. ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 ./. ./. 0/0 ./. ./. 0/0 0/0 0/1 ./. ./. ./. 0/1 0/1 0/1 +chr1 49124365 . C CGAG . PASS VC=INDEL;AC=93;AF=0.29;AN=316;refseq.name=NM_032785;refseq.positionType=intron GT 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 1/1 1/1 1/1 +chr1 49124368 . G GGAG . PASS VC=INDEL;AC=93;AF=0.29;AN=316;refseq.name=NM_032785;refseq.positionType=intron GT 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 1/1 1/1 1/1 +chr1 49126514 . C CTG . PASS VC=INDEL;AC=89;AF=0.3;AN=296;refseq.name=NM_032785;refseq.positionType=intron GT 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/1 0/0 0/1 ./. 0/0 0/0 0/0 1/1 0/1 ./. 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 ./. 0/0 ./. 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 ./. 0/1 ./. 0/0 ./. 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 1/1 1/1 1/1 +chr1 50107735 . G GA . PASS VC=INDEL;AC=68;AF=0.22;AN=312 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 ./. 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 ./. 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 50539498 . T TCT . PASS VC=INDEL;AC=312;AF=0.99;AN=316 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 50652516 . A AGAA . PASS VC=INDEL;AC=247;AF=0.78;AN=316;refseq.name=NM_021952;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 +chr1 51315116 . ACTG A . PASS VC=INDEL;AC=13;AF=0.04;AN=316;refseq.name=NM_007051;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 52336500 . TAATACA T . PASS VC=INDEL;AC=17;AF=0.07;AN=230;refseq.name=NM_002525;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 ./. 0/1 ./. ./. ./. 0/0 ./. ./. 0/0 ./. ./. 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. ./. 0/1 0/0 0/1 0/0 ./. 0/0 0/0 0/1 0/0 ./. ./. ./. 0/1 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/1 0/1 0/1 ./. 0/0 0/0 0/0 ./. ./. ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/1 0/0 ./. 0/0 ./. ./. ./. 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/0 ./. ./. 0/0 ./. 0/0 0/0 ./. ./. ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. +chr1 52798171 . A AT . PASS VC=INDEL;AC=307;AF=0.97;AN=316;refseq.name=NM_004799;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 53554533 . A AT . PASS VC=INDEL;AC=33;AF=0.11;AN=294;refseq.name=NM_006671;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 ./. 0/1 0/0 0/0 ./. 0/1 ./. 0/1 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/0 ./. ./. 0/1 +chr1 53986946 . TG T . PASS VC=INDEL;AC=188;AF=0.59;AN=316;refseq.name=NM_147193;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 1/1 1/1 +chr1 54168427 . C CTCTG . PASS VC=INDEL;AC=109;AF=0.35;AN=308;refseq.name=NM_147193;refseq.positionType=intron GT 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 ./. 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 1/1 0/1 1/1 1/1 ./. 1/1 0/0 0/0 ./. 1/1 0/1 0/1 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 1/1 1/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 +chr1 54558546 . T TAGAC . PASS VC=INDEL;AC=66;AF=0.21;AN=316;refseq.name=NM_153035;refseq.positionType=intron GT 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 54558548 . G GACAG . PASS VC=INDEL;AC=66;AF=0.21;AN=316;refseq.name=NM_153035;refseq.positionType=intron GT 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 54619996 . AC A . PASS VC=INDEL;AC=193;AF=0.64;AN=302;refseq.name=NM_201546;refseq.positionType=promoter GT 1/1 0/0 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 ./. 0/0 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 0/0 0/0 1/1 0/1 0/1 0/1 ./. 1/1 0/1 1/1 1/1 0/0 0/1 0/0 1/1 0/1 ./. 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 ./. ./. 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/1 0/1 ./. 0/1 0/0 0/1 ./. 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 1/1 +chr1 54757161 . C CCA . PASS VC=INDEL;AC=186;AF=0.59;AN=314;refseq.name=NM_001009955;refseq.positionType=intron GT 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 ./. 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 +chr1 54757166 . C CAC . PASS VC=INDEL;AC=185;AF=0.59;AN=312;refseq.name=NM_001009955;refseq.positionType=intron GT 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 ./. 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 ./. 1/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 +chr1 55566411 . TTAGTC T . PASS VC=INDEL;AC=207;AF=0.66;AN=316;refseq.name=NM_015306;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 +chr1 55743440 . C CCT . PASS VC=INDEL;AC=261;AF=0.84;AN=312 GT 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 ./. 1/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 ./. 1/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 +chr1 55888273 . T TC . PASS VC=INDEL;AC=265;AF=0.88;AN=302 GT 0/0 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 ./. 0/1 ./. 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 ./. 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 ./. 1/1 1/1 1/1 1/1 ./. 1/1 0/1 0/1 1/1 ./. 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 +chr1 55888274 . C CC . PASS VC=INDEL;AC=271;AF=0.89;AN=306 GT 0/0 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 ./. 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 ./. ./. 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 ./. 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 +chr1 55892282 . T TAGAAAA . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 55998244 . CGCACGCTC C . PASS VC=INDEL;AC=265;AF=0.84;AN=314 GT 1/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 ./. 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 +chr1 56495367 . CTGAG C . PASS VC=INDEL;AC=76;AF=0.24;AN=316 GT 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 57353886 . C CTA . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_000562;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 57854490 . AAT A . PASS VC=INDEL;AC=24;AF=0.08;AN=312;refseq.name=NM_021080;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 ./. 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 58391942 . G GAAA . PASS VC=INDEL;AC=10;AF=0.03;AN=314;refseq.name=NM_021080;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 +chr1 58413348 . A AG . PASS VC=INDEL;AC=50;AF=0.22;AN=226;refseq.name=NM_021080;refseq.positionType=intron GT 0/0 ./. ./. 0/1 0/0 ./. 0/1 0/1 0/1 1/1 0/0 ./. ./. 0/0 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/0 0/0 0/1 0/0 ./. ./. 0/1 ./. ./. 0/1 0/0 0/0 0/0 ./. ./. ./. 1/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 ./. 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. ./. ./. ./. 0/1 0/1 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. ./. ./. 0/1 0/1 0/0 ./. 0/0 0/0 0/0 0/1 0/1 0/1 ./. ./. ./. ./. ./. ./. 0/1 0/1 ./. 0/1 0/0 1/1 0/0 0/1 0/0 0/0 ./. ./. 0/0 0/0 0/1 ./. ./. 0/0 0/0 0/0 0/0 0/1 0/1 0/0 ./. 0/1 1/1 0/0 0/1 0/0 ./. 0/0 0/0 0/1 0/0 ./. 0/0 0/0 ./. 0/1 ./. 0/1 ./. 1/1 ./. 1/1 +chr1 58550673 . CT C . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_021080;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 58629900 . CAGA C . PASS VC=INDEL;AC=15;AF=0.05;AN=316;refseq.name=NM_021080;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 58999156 . AT A . PASS VC=INDEL;AC=151;AF=0.53;AN=286;refseq.name=NM_145243;refseq.positionType=intron GT ./. 1/1 1/1 0/1 0/1 0/0 1/1 ./. 0/1 1/1 0/1 1/1 0/1 0/0 1/1 1/1 0/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 ./. 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 1/1 1/1 1/1 0/0 1/1 ./. 0/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 ./. 0/1 0/0 0/0 0/1 0/0 0/1 0/1 ./. 1/1 0/0 0/0 0/0 0/1 1/1 ./. 1/1 0/1 0/0 0/0 ./. 0/0 0/0 0/1 1/1 0/1 ./. 0/0 0/1 0/0 0/1 0/1 0/0 ./. 0/0 0/1 0/0 0/1 ./. 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 ./. 0/0 0/1 0/0 ./. 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 1/1 +chr1 59009401 . T TT . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_145243;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 59104181 . GA G . PASS VC=INDEL;AC=271;AF=0.89;AN=304 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 ./. 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 ./. 1/1 1/1 ./. 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 +chr1 59319761 . AG A . PASS VC=INDEL;AC=195;AF=0.67;AN=290 GT 0/0 0/1 0/0 0/0 ./. 1/1 1/1 0/1 1/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 ./. 0/0 0/0 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 ./. 1/1 0/1 1/1 1/1 1/1 0/1 ./. 0/1 1/1 0/1 ./. 0/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 0/1 1/1 0/1 1/1 ./. 1/1 1/1 ./. 1/1 0/0 1/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 ./. ./. 1/1 1/1 1/1 1/1 0/1 0/1 0/0 ./. 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 ./. 1/1 1/1 1/1 0/1 +chr1 59319762 . GG G . PASS VC=INDEL;AC=200;AF=0.68;AN=296 GT 0/0 0/1 0/0 0/0 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 1/1 ./. 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 1/1 0/0 ./. 1/1 0/1 0/1 0/1 1/1 ./. 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 ./. 1/1 1/1 1/1 0/1 ./. 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 0/0 1/1 0/1 ./. 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 1/1 ./. 1/1 ./. 1/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 ./. 1/1 1/1 1/1 0/1 +chr1 59630873 . CT C . PASS VC=INDEL;AC=155;AF=0.49;AN=316 GT 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 1/1 1/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 +chr1 59635600 . TAT T . PASS VC=INDEL;AC=287;AF=0.91;AN=316 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 +chr1 60128716 . G GC . PASS VC=INDEL;AC=309;AF=0.98;AN=316;refseq.name=NM_018291;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 60128717 . C CC . PASS VC=INDEL;AC=309;AF=0.98;AN=316;refseq.name=NM_018291;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 60228311 . T TCT . PASS VC=INDEL;AC=250;AF=0.8;AN=314;refseq.name=NM_018291;refseq.positionType=exon GT 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 ./. 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 +chr1 60460874 . A ACTA . PASS VC=INDEL;AC=316;AF=1;AN=316;refseq.name=NM_152377;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 61786308 . ATCTTA A . PASS VC=INDEL;AC=126;AF=0.4;AN=316;refseq.name=NM_005595;refseq.positionType=intron GT 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 1/1 0/0 0/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 +chr1 62087979 . T TGACCTACTGTGCT . PASS VC=INDEL;AC=194;AF=0.63;AN=310 GT 1/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 ./. 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/0 0/0 ./. 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 ./. 1/1 0/0 0/1 1/1 0/0 0/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 +chr1 62128942 . CTTGCACA C . PASS VC=INDEL;AC=123;AF=0.39;AN=316 GT 0/0 1/1 1/1 0/0 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/0 +chr1 62940266 . T TG . PASS VC=INDEL;AC=133;AF=0.43;AN=312;refseq.name=NM_033407;refseq.positionType=intron GT 0/0 0/1 1/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 1/1 0/1 ./. 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 1/1 +chr1 63331690 . TA T . PASS VC=INDEL;AC=234;AF=0.74;AN=316 GT 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 +chr1 63331691 . AA A . PASS VC=INDEL;AC=232;AF=0.74;AN=314 GT 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 ./. 1/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 +chr1 63423181 . T TCAT . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 63907866 . A AATGTTT . PASS VC=INDEL;AC=229;AF=0.76;AN=300;refseq.name=NM_014288;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 1/1 0/0 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/0 1/1 ./. 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 ./. 0/1 1/1 1/1 0/1 0/0 0/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 ./. 1/1 1/1 0/1 0/1 ./. 1/1 ./. 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 ./. 1/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 0/1 0/1 +chr1 63907868 . T TGTTTAT . PASS VC=INDEL;AC=229;AF=0.77;AN=298;refseq.name=NM_014288;refseq.positionType=intron GT ./. 1/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 1/1 0/0 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/0 1/1 ./. ./. 0/1 0/0 1/1 0/1 0/0 0/1 0/0 ./. 0/0 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/0 1/1 ./. 1/1 1/1 1/1 0/1 ./. 0/1 1/1 1/1 0/1 0/0 0/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 ./. 1/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 ./. 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 +chr1 63985884 . ATCAT A . PASS VC=INDEL;AC=91;AF=0.31;AN=298;refseq.name=NM_014288;refseq.positionType=intron GT ./. 0/0 0/1 0/1 0/0 0/0 0/0 1/1 1/1 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 ./. 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/1 1/1 ./. 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 ./. 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 ./. 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 ./. 0/1 0/1 ./. 0/0 0/0 ./. 0/1 +chr1 63987096 . ATG A . PASS VC=INDEL;AC=37;AF=0.18;AN=202;refseq.name=NM_014288;refseq.positionType=intron GT ./. 0/0 0/1 ./. ./. ./. 0/0 0/1 ./. ./. ./. 0/0 ./. 0/1 0/0 0/1 0/0 ./. 0/0 ./. ./. 0/1 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/1 0/0 ./. 0/0 ./. 0/1 0/0 ./. 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/1 0/1 ./. ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 ./. 0/1 ./. 0/0 0/0 ./. ./. 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/1 0/0 0/1 0/0 ./. 0/1 ./. ./. ./. ./. 0/0 ./. ./. ./. 0/0 ./. 0/0 0/0 ./. ./. 0/0 0/0 ./. ./. 0/1 0/0 0/1 ./. ./. 0/1 0/0 0/1 ./. ./. 0/1 0/0 0/1 0/0 ./. ./. 0/0 0/0 ./. 0/0 0/0 0/1 ./. 0/1 0/1 ./. 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/1 ./. ./. ./. 0/0 ./. 0/0 0/1 ./. 0/0 0/1 0/0 0/1 ./. ./. 0/0 0/1 ./. 0/1 0/0 0/1 0/1 0/1 0/1 +chr1 64264921 . TTGTGTCAT T . PASS VC=INDEL;AC=136;AF=0.46;AN=298;refseq.name=NM_005012;refseq.positionType=intron GT 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 ./. 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/1 0/0 ./. 0/0 0/1 0/0 0/1 0/1 ./. 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 ./. 0/1 ./. 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 ./. ./. 0/1 1/1 0/0 1/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 +chr1 64463351 . GT G . PASS VC=INDEL;AC=244;AF=0.77;AN=316;refseq.name=NM_005012;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 +chr1 64627261 . A AAA . PASS VC=INDEL;AC=79;AF=0.25;AN=316;refseq.name=NM_005012;refseq.positionType=intron GT 0/0 1/1 0/1 1/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 65237568 . G GGTTA . PASS VC=INDEL;AC=237;AF=0.75;AN=316;refseq.name=NM_018211;refseq.positionType=intron GT 0/0 0/1 0/1 0/0 0/0 0/0 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 +chr1 65299673 . T TTAAG . PASS VC=INDEL;AC=10;AF=0.03;AN=314;refseq.name=NM_002227;refseq.positionType=exon GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 65545194 . A AT . PASS VC=INDEL;AC=316;AF=1;AN=316 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 65545195 . T TT . PASS VC=INDEL;AC=316;AF=1;AN=316 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 66063617 . ATGT A . PASS VC=INDEL;AC=212;AF=0.67;AN=316;refseq.name=NM_002303;refseq.positionType=intron GT 0/0 0/0 1/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 1/1 0/0 1/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 +chr1 66198019 . A ACCATCCA . PASS VC=INDEL;AC=76;AF=0.26;AN=296 GT 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 ./. 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 ./. ./. 0/1 0/1 0/1 0/0 0/0 0/1 1/1 0/0 0/0 1/1 0/0 ./. 0/0 ./. ./. 1/1 0/1 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/1 +chr1 66460193 . T TC . PASS VC=INDEL;AC=301;AF=0.95;AN=316;refseq.name=NM_001037341;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 66801086 . TGT T . PASS VC=INDEL;AC=19;AF=0.06;AN=316;refseq.name=NM_001037341;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 66952677 . A ATC . PASS VC=INDEL;AC=158;AF=0.65;AN=244 GT 0/1 1/1 1/1 0/0 1/1 ./. ./. 0/1 0/0 0/1 ./. 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/0 ./. 0/1 1/1 0/1 0/1 0/1 0/1 1/1 ./. 1/1 0/1 0/1 0/1 1/1 ./. 0/0 0/0 0/0 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 0/0 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 ./. 1/1 ./. 1/1 1/1 ./. 1/1 1/1 0/1 0/1 1/1 0/1 ./. 0/0 0/0 1/1 0/1 1/1 ./. 0/1 0/1 0/1 ./. 0/1 ./. 0/1 ./. ./. 1/1 0/1 ./. ./. 0/1 0/1 0/1 ./. 1/1 0/1 0/1 0/1 0/1 0/1 ./. 0/1 ./. 0/1 0/1 1/1 ./. ./. 0/1 0/1 0/1 1/1 1/1 ./. 0/1 0/0 ./. 0/1 ./. 0/1 0/0 0/0 0/1 0/1 0/0 ./. 0/0 0/1 ./. 1/1 0/1 0/1 ./. ./. 0/1 ./. 0/1 ./. 0/1 1/1 1/1 0/1 ./. 0/1 0/1 ./. 0/1 1/1 +chr1 67152254 . ATAATTTCACGA A . PASS VC=INDEL;AC=9;AF=0.03;AN=316;refseq.name=NM_032291;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 67206037 . AATTG A . PASS VC=INDEL;AC=50;AF=0.19;AN=268;refseq.name=NM_032291;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/0 0/1 ./. 0/0 0/0 0/1 0/1 ./. 0/0 0/1 0/0 0/0 0/1 ./. 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 ./. ./. 0/0 0/1 ./. ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 ./. 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 ./. ./. 0/1 0/0 ./. ./. 0/1 0/1 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/1 0/1 ./. ./. 0/1 0/1 0/1 ./. 0/0 0/1 0/0 ./. 0/1 1/1 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/1 0/1 0/1 0/1 +chr1 67459726 . T TT . PASS VC=INDEL;AC=54;AF=0.18;AN=300 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 ./. 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 ./. 0/1 0/1 0/0 0/1 ./. ./. 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 ./. 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 ./. +chr1 68038796 . ACA A . PASS VC=INDEL;AC=21;AF=0.08;AN=264 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/1 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 ./. 0/0 0/1 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 ./. 0/1 0/0 ./. 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 ./. 0/0 ./. 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 ./. 0/0 0/0 +chr1 68291788 . GC G . PASS VC=INDEL;AC=19;AF=0.06;AN=316;refseq.name=NM_018841;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 +chr1 68570194 . CCCT C . PASS VC=INDEL;AC=110;AF=0.35;AN=310;refseq.name=NM_001002292;refseq.positionType=intron GT 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/0 1/1 1/1 0/1 0/1 0/0 0/1 ./. 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 1/1 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 ./. 0/1 0/0 0/1 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 +chr1 69008683 . C CA . PASS VC=INDEL;AC=68;AF=0.3;AN=230 GT 0/0 ./. 0/0 ./. 0/0 ./. 0/1 0/0 ./. ./. 0/0 1/1 ./. 1/1 0/0 0/0 0/0 0/1 0/1 ./. 0/1 1/1 ./. ./. 1/1 0/1 1/1 0/0 0/1 0/0 1/1 0/0 0/1 1/1 1/1 1/1 0/1 0/0 1/1 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 ./. 0/1 0/1 0/0 ./. ./. ./. 1/1 0/1 1/1 0/0 ./. 1/1 0/1 ./. 0/1 0/0 ./. 0/0 0/1 ./. 0/1 0/0 0/0 ./. 0/1 0/0 ./. ./. 1/1 ./. ./. 0/0 0/0 0/1 0/1 0/1 1/1 ./. 1/1 1/1 ./. 0/1 0/0 1/1 ./. ./. ./. 0/0 ./. 1/1 ./. ./. 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 ./. 0/1 ./. ./. ./. 0/1 0/1 ./. 0/1 0/0 0/0 0/0 0/1 ./. +chr1 69398928 . CAAC C . PASS VC=INDEL;AC=66;AF=0.21;AN=316 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/1 1/1 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 1/1 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 +chr1 69424885 . AG A . PASS VC=INDEL;AC=257;AF=0.81;AN=316 GT 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 +chr1 69424886 . GG G . PASS VC=INDEL;AC=257;AF=0.81;AN=316 GT 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 +chr1 69702172 . T TT . PASS VC=INDEL;AC=186;AF=0.59;AN=316 GT 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 +chr1 69947085 . T TT . PASS VC=INDEL;AC=199;AF=0.87;AN=230 GT ./. 1/1 1/1 0/1 0/1 0/0 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 ./. 1/1 0/1 1/1 0/0 1/1 0/1 ./. ./. ./. 0/0 ./. 1/1 1/1 1/1 1/1 ./. ./. 1/1 ./. 1/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 0/1 0/1 0/1 1/1 1/1 ./. 1/1 ./. 1/1 1/1 1/1 ./. 1/1 ./. 1/1 1/1 1/1 ./. ./. 0/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 ./. 1/1 1/1 ./. 1/1 1/1 1/1 0/1 ./. 0/0 ./. ./. 1/1 ./. 1/1 ./. ./. 1/1 0/1 ./. 0/1 ./. 1/1 1/1 ./. 1/1 ./. 0/1 0/0 1/1 ./. 1/1 1/1 0/1 1/1 1/1 1/1 1/1 ./. ./. 1/1 1/1 ./. ./. ./. ./. ./. ./. 1/1 1/1 1/1 0/1 1/1 1/1 ./. 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 ./. ./. 1/1 1/1 +chr1 70116412 . T TAAT . PASS VC=INDEL;AC=236;AF=0.77;AN=308 GT 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 ./. 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 ./. 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 ./. 1/1 1/1 0/1 0/1 +chr1 70794740 . AAAAC A . PASS VC=INDEL;AC=49;AF=0.17;AN=288;refseq.name=NM_030816;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/1 0/0 0/0 ./. 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/1 0/0 ./. ./. 0/1 ./. 0/0 0/1 0/1 0/0 0/1 ./. ./. ./. 0/0 0/1 ./. 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/1 0/0 0/0 0/1 0/0 0/0 ./. 0/0 ./. 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 70796576 . TTACTT T . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_030816;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 71101845 . TG T . PASS VC=INDEL;AC=38;AF=0.12;AN=310 GT 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 ./. 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 71353307 . AT A . PASS VC=INDEL;AC=88;AF=0.28;AN=310;refseq.name=NM_000957;refseq.positionType=intron GT 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 0/0 0/0 0/1 ./. 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 ./. 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 ./. 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 +chr1 71366228 . AA A . PASS VC=INDEL;AC=123;AF=0.39;AN=314;refseq.name=NM_000957;refseq.positionType=intron GT 1/1 1/1 0/0 1/1 1/1 0/0 1/1 ./. 0/0 1/1 0/0 0/1 0/0 1/1 1/1 0/1 1/1 0/0 0/0 1/1 0/0 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/0 1/1 0/1 0/0 1/1 1/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 1/1 0/0 0/1 +chr1 71366595 . A AAGTG . PASS VC=INDEL;AC=108;AF=0.34;AN=316;refseq.name=NM_000957;refseq.positionType=intron GT 0/1 0/1 0/0 1/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/0 1/1 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 +chr1 71366598 . T TGAGT . PASS VC=INDEL;AC=109;AF=0.34;AN=316;refseq.name=NM_000957;refseq.positionType=intron GT 0/1 0/1 0/0 1/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/0 1/1 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 +chr1 71693491 . TGAG T . PASS VC=INDEL;AC=32;AF=0.1;AN=312 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 ./. 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 71693493 . AGGA A . PASS VC=INDEL;AC=34;AF=0.11;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 72053145 . AG A . PASS VC=INDEL;AC=229;AF=0.72;AN=316;refseq.name=NM_173808;refseq.positionType=intron GT 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 +chr1 72321086 . AA A . PASS VC=INDEL;AC=54;AF=0.17;AN=314;refseq.name=NM_173808;refseq.positionType=intron GT 0/1 1/1 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 1/1 1/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 +chr1 73854019 . T TTTTA . PASS VC=INDEL;AC=181;AF=0.59;AN=308 GT 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 1/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 ./. 0/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 ./. 0/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 ./. 0/1 0/1 0/0 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 ./. 0/0 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 +chr1 74227801 . AG A . PASS VC=INDEL;AC=2;AF=0.01;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 74404505 . TTT T . PASS VC=INDEL;AC=23;AF=0.07;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 1/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 74892891 . AG A . PASS VC=INDEL;AC=75;AF=0.24;AN=316;refseq.name=NM_001112808;refseq.positionType=intron GT 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 0/0 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 74896404 . ACTCAA A . PASS VC=INDEL;AC=26;AF=0.08;AN=316;refseq.name=NM_001112808;refseq.positionType=intron GT 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 75049490 . C CT . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_001002912;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 75156563 . GCTT G . PASS VC=INDEL;AC=259;AF=0.82;AN=316 GT 0/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 +chr1 75661521 . TTCTT T . PASS VC=INDEL;AC=7;AF=0.02;AN=312 GT 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 76005746 . A AC . PASS VC=INDEL;AC=184;AF=0.58;AN=316;refseq.name=NM_152697;refseq.positionType=intron GT 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/0 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/0 +chr1 76054645 . AT A . PASS VC=INDEL;AC=14;AF=0.05;AN=290;refseq.name=NM_152697;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/1 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 +chr1 76110056 . ATCAT A . PASS VC=INDEL;AC=202;AF=0.7;AN=290 GT 0/0 1/1 1/1 0/1 1/1 0/1 0/0 1/1 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 ./. 1/1 ./. 0/1 0/0 0/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 0/1 0/0 1/1 0/1 1/1 1/1 ./. 1/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/1 ./. 0/0 0/0 0/0 0/1 0/1 ./. 0/1 0/1 1/1 ./. 1/1 1/1 0/0 0/1 0/0 1/1 0/1 ./. 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 ./. 0/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 ./. 1/1 +chr1 76110059 . ATTCA A . PASS VC=INDEL;AC=198;AF=0.68;AN=290 GT ./. 1/1 1/1 0/1 1/1 0/1 0/0 1/1 ./. 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 ./. 1/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 ./. 0/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 ./. 1/1 1/1 1/1 0/1 0/0 0/0 ./. 0/1 0/1 ./. 1/1 0/1 ./. 1/1 1/1 1/1 1/1 1/1 0/1 ./. 0/0 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 ./. 0/1 0/1 0/1 ./. 1/1 1/1 1/1 1/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 0/1 0/0 1/1 0/1 ./. 1/1 1/1 0/1 0/1 0/1 0/0 1/1 +chr1 76603385 . A AA . PASS VC=INDEL;AC=45;AF=0.14;AN=316;refseq.name=NM_152996;refseq.positionType=intron GT 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 +chr1 76647177 . T TA . PASS VC=INDEL;AC=44;AF=0.15;AN=292;refseq.name=NM_152996;refseq.positionType=intron GT 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/1 0/1 0/0 0/1 ./. ./. 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 ./. 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 ./. 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 ./. 0/0 0/0 0/0 ./. 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 +chr1 76772246 . TAG T . PASS VC=INDEL;AC=71;AF=0.22;AN=316;refseq.name=NM_152996;refseq.positionType=intron GT 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/0 1/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 +chr1 77019040 . G GA . PASS VC=INDEL;AC=123;AF=0.39;AN=316;refseq.name=NM_152996;refseq.positionType=intron GT 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 1/1 0/0 0/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 +chr1 77019568 . TTCTG T . PASS VC=INDEL;AC=72;AF=0.23;AN=316;refseq.name=NM_152996;refseq.positionType=intron GT 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 +chr1 77147457 . T TG . PASS VC=INDEL;AC=307;AF=0.97;AN=316 GT 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 77154589 . T TA . PASS VC=INDEL;AC=300;AF=0.95;AN=316 GT 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 77350958 . GT G . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_030965;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 77412672 . T TCAAA . PASS VC=INDEL;AC=183;AF=0.58;AN=316;refseq.name=NM_030965;refseq.positionType=intron GT 0/1 0/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/0 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 1/1 1/1 0/0 0/0 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 +chr1 77412677 . C CAAAC . PASS VC=INDEL;AC=183;AF=0.58;AN=316;refseq.name=NM_030965;refseq.positionType=intron GT 0/1 0/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/0 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 1/1 1/1 0/0 0/0 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 +chr1 77761353 . ATTCT A . PASS VC=INDEL;AC=87;AF=0.28;AN=310;refseq.name=NM_174858;refseq.positionType=intron GT 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 ./. 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/1 ./. 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 +chr1 78436001 . T TCT . PASS VC=INDEL;AC=139;AF=0.45;AN=308;refseq.name=NM_003902;refseq.positionType=intron GT 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/1 ./. 0/0 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/1 0/1 ./. 1/1 1/1 ./. 1/1 ./. 0/1 0/0 0/0 0/0 +chr1 78477804 . T TAAGAC . PASS VC=INDEL;AC=294;AF=0.93;AN=316;refseq.name=NM_007034;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 78533885 . CAG C . PASS VC=INDEL;AC=126;AF=0.4;AN=316;refseq.name=NM_017655;refseq.positionType=intron GT 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/1 1/1 +chr1 78533886 . AGA A . PASS VC=INDEL;AC=126;AF=0.4;AN=316;refseq.name=NM_017655;refseq.positionType=intron GT 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/1 1/1 +chr1 78752617 . TC T . PASS VC=INDEL;AC=160;AF=0.51;AN=314 GT 0/1 1/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 ./. 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 +chr1 79595269 . T TC . PASS VC=INDEL;AC=37;AF=0.12;AN=312 GT 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 +chr1 79694557 . CTTGT C . PASS VC=INDEL;AC=173;AF=0.68;AN=254 GT 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 ./. ./. 0/0 0/1 ./. 0/0 0/0 0/0 0/1 0/1 0/0 0/0 1/1 ./. 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 ./. ./. ./. ./. 0/0 0/1 0/1 ./. 0/1 0/1 ./. 0/0 0/1 ./. ./. 0/1 1/1 0/1 0/1 ./. 0/1 0/1 ./. ./. 0/1 ./. 1/1 ./. 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 ./. ./. 1/1 ./. 1/1 1/1 1/1 0/1 1/1 ./. 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 ./. 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/0 ./. ./. 1/1 0/1 1/1 ./. 1/1 ./. 1/1 1/1 1/1 1/1 1/1 0/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 ./. 0/1 0/1 ./. 1/1 0/1 1/1 1/1 1/1 1/1 ./. 0/1 0/1 0/1 1/1 0/1 1/1 1/1 ./. 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/0 +chr1 80133716 . CA C . PASS VC=INDEL;AC=74;AF=0.27;AN=276 GT 0/1 0/1 0/0 0/1 1/1 0/0 0/0 0/1 0/1 0/0 ./. 0/0 ./. 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/1 ./. ./. 0/0 0/0 ./. 0/1 0/0 0/1 1/1 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 ./. 0/0 0/0 ./. 0/1 0/0 0/1 0/1 0/0 0/1 0/0 ./. 0/1 ./. 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/0 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 ./. 0/1 0/0 0/1 0/1 1/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 ./. ./. 0/1 ./. 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/1 ./. 0/1 0/1 0/0 1/1 0/1 0/0 0/0 +chr1 80193527 . CA C . PASS VC=INDEL;AC=0;AF=0;AN=314 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 80279810 . T TT . PASS VC=INDEL;AC=69;AF=0.22;AN=314 GT 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 1/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 1/1 ./. 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 +chr1 80415715 . C CATGTCTATTAT . PASS VC=INDEL;AC=197;AF=0.62;AN=316 GT 0/1 0/0 1/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 1/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 +chr1 80415717 . T TGTCTATTATAT . PASS VC=INDEL;AC=197;AF=0.62;AN=316 GT 0/1 0/0 1/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 1/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 +chr1 80606020 . GTAGGC G . PASS VC=INDEL;AC=282;AF=0.89;AN=316 GT 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 0/1 1/1 +chr1 80684057 . A AA . PASS VC=INDEL;AC=217;AF=0.69;AN=316 GT 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 0/1 0/0 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 0/0 1/1 1/1 +chr1 80857688 . AAATA A . PASS VC=INDEL;AC=97;AF=0.31;AN=316 GT 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/0 +chr1 81007659 . A AC . PASS VC=INDEL;AC=185;AF=0.59;AN=312 GT 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/0 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 ./. 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 0/1 ./. 0/0 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 0/0 0/0 +chr1 81007660 . C CC . PASS VC=INDEL;AC=185;AF=0.59;AN=314 GT 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/0 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 ./. 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/0 0/0 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 0/0 0/0 +chr1 81912884 . C CT . PASS VC=INDEL;AC=15;AF=0.05;AN=298 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/0 ./. 0/0 0/0 +chr1 82042397 . TCTT T . PASS VC=INDEL;AC=5;AF=0.02;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 82264610 . TG T . PASS VC=INDEL;AC=167;AF=0.54;AN=312;refseq.name=NM_012302;refseq.positionType=promoter GT 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 ./. 0/1 0/0 1/1 0/0 0/1 0/0 1/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/0 0/0 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/1 0/0 1/1 0/0 1/1 1/1 1/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 ./. 0/1 0/1 0/0 +chr1 82264994 . G GGTAG . PASS VC=INDEL;AC=49;AF=0.16;AN=316;refseq.name=NM_012302;refseq.positionType=promoter GT 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 +chr1 82280496 . ATGT A . PASS VC=INDEL;AC=84;AF=0.27;AN=316;refseq.name=NM_012302;refseq.positionType=intron GT 0/1 1/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/0 0/0 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 82315714 . G GAGTG . PASS VC=INDEL;AC=38;AF=0.12;AN=306;refseq.name=NM_012302;refseq.positionType=intron GT 0/1 0/0 0/1 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 +chr1 82316526 . TT T . PASS VC=INDEL;AC=209;AF=0.67;AN=312;refseq.name=NM_012302;refseq.positionType=intron GT 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 1/1 0/1 ./. 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/0 0/0 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 ./. 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 +chr1 82329993 . CATAT C . PASS VC=INDEL;AC=305;AF=0.97;AN=316;refseq.name=NM_012302;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 +chr1 82710650 . AA A . PASS VC=INDEL;AC=297;AF=0.96;AN=310 GT 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 83144930 . TC T . PASS VC=INDEL;AC=153;AF=0.55;AN=278 GT 1/1 1/1 0/1 1/1 0/1 0/0 1/1 1/1 0/0 1/1 0/1 0/0 0/1 ./. 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/0 ./. ./. 0/1 1/1 0/0 0/1 0/1 0/1 0/1 ./. 1/1 0/1 ./. 1/1 0/1 0/1 0/1 0/1 0/1 ./. 0/1 0/1 ./. 0/1 0/1 1/1 1/1 0/1 0/0 0/1 ./. 0/0 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 0/0 ./. 0/1 0/0 0/1 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 1/1 1/1 1/1 1/1 1/1 0/1 0/1 ./. 1/1 0/0 ./. 0/1 0/1 0/0 0/1 ./. 0/0 0/1 1/1 0/1 1/1 ./. 0/0 0/0 ./. 0/1 0/0 ./. 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 1/1 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/1 1/1 0/0 ./. 0/0 1/1 ./. ./. 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 ./. 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 +chr1 83208212 . C CAGAT . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 83208213 . A AGATA . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 83581070 . C CCAGA . PASS VC=INDEL;AC=188;AF=0.74;AN=254 GT ./. ./. 1/1 0/1 ./. 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 ./. ./. 1/1 0/1 ./. ./. ./. 1/1 1/1 ./. 0/0 0/1 0/1 1/1 ./. 0/1 1/1 0/1 0/1 ./. 0/0 1/1 0/1 0/1 ./. ./. 0/1 1/1 ./. 1/1 0/1 0/1 ./. ./. 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 ./. 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 ./. 0/1 0/0 0/1 ./. 0/1 1/1 1/1 1/1 0/1 ./. 1/1 0/1 0/1 ./. ./. ./. 0/1 1/1 ./. 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 ./. 0/1 0/1 ./. 1/1 0/1 1/1 ./. ./. 0/1 1/1 1/1 1/1 ./. 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 ./. 1/1 +chr1 84127066 . TCT T . PASS VC=INDEL;AC=71;AF=0.22;AN=316 GT 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/0 1/1 0/0 1/1 0/0 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/0 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 0/0 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 +chr1 84822658 . TCAATTAAAACTCACAG T . PASS VC=INDEL;AC=45;AF=0.16;AN=286 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 1/1 ./. 0/1 1/1 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 ./. 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 ./. 0/1 0/0 0/1 0/1 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 ./. 0/0 ./. ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 ./. 0/1 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 +chr1 85570521 . GTTC G . PASS VC=INDEL;AC=166;AF=0.53;AN=316;refseq.name=NM_145172;refseq.positionType=intron GT 0/1 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 1/1 1/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/0 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/1 +chr1 86565855 . T TCT . PASS VC=INDEL;AC=20;AF=0.06;AN=316;refseq.name=NM_152890;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +chr1 86714492 . T TA . PASS VC=INDEL;AC=263;AF=0.88;AN=300 GT 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 ./. ./. 1/1 1/1 1/1 ./. 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 ./. 1/1 1/1 ./. 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. ./. 1/1 1/1 +chr1 86786541 . CAG C . PASS VC=INDEL;AC=7;AF=0.02;AN=316 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 86839425 . TACTT T . PASS VC=INDEL;AC=15;AF=0.05;AN=280;refseq.name=NM_001007022;refseq.positionType=intron GT 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 ./. ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 +chr1 87558067 . CACATAC C . PASS VC=INDEL;AC=285;AF=0.97;AN=294;refseq.name=NM_012262;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 ./. 1/1 0/1 1/1 1/1 1/1 1/1 0/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 ./. ./. 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 ./. ./. 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 ./. 0/1 1/1 1/1 +chr1 88184554 . T TCA . PASS VC=INDEL;AC=40;AF=0.14;AN=276 GT 0/0 0/0 0/0 0/0 ./. ./. 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 1/1 ./. 0/1 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/1 ./. 0/0 ./. ./. 0/0 ./. 0/0 0/1 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/0 ./. 0/0 0/0 0/0 0/1 0/0 ./. ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 ./. 0/0 ./. 0/1 0/1 +chr1 88351056 . A AGT . PASS VC=INDEL;AC=222;AF=0.7;AN=316 GT 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 1/1 0/0 1/1 0/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 +chr1 88391828 . C CCTT . PASS VC=INDEL;AC=216;AF=0.7;AN=310 GT 0/1 0/0 0/1 1/1 1/1 1/1 0/0 0/1 1/1 0/0 0/1 0/0 1/1 1/1 0/1 0/0 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/0 ./. 0/1 1/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 ./. 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 1/1 ./. 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 +chr1 88391834 . T TCTT . PASS VC=INDEL;AC=219;AF=0.69;AN=316 GT 0/1 0/0 0/1 1/1 1/1 1/1 0/0 0/1 1/1 0/0 0/1 0/0 1/1 1/1 0/1 0/0 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 +chr1 88423056 . T TA . PASS VC=INDEL;AC=210;AF=0.8;AN=262 GT 1/1 0/0 1/1 ./. 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 ./. ./. ./. 1/1 1/1 ./. 0/1 0/1 0/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 ./. 0/1 1/1 0/1 0/1 ./. ./. 0/1 0/1 1/1 0/1 0/1 0/1 0/1 ./. ./. ./. 1/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/1 ./. 1/1 ./. 0/0 0/1 1/1 ./. 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 0/0 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 0/1 1/1 1/1 1/1 1/1 ./. 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 ./. ./. 1/1 1/1 ./. 1/1 0/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. ./. 1/1 1/1 1/1 1/1 1/1 0/1 0/1 +chr1 88878932 . TGAAG T . PASS VC=INDEL;AC=222;AF=0.71;AN=314 GT 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/0 0/0 1/1 1/1 0/1 0/0 1/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 1/1 ./. 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 88934449 . T TA . PASS VC=INDEL;AC=215;AF=0.71;AN=304 GT 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 ./. 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 0/1 ./. 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 0/0 ./. 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/0 +chr1 89147233 . C CTG . PASS VC=INDEL;AC=270;AF=0.94;AN=288;refseq.name=NM_006256;refseq.positionType=promoter GT 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 ./. 1/1 ./. ./. 1/1 1/1 0/1 0/1 ./. 1/1 1/1 1/1 ./. 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 ./. ./. 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 ./. 1/1 1/1 1/1 1/1 ./. 0/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 89147234 . T TGT . PASS VC=INDEL;AC=193;AF=0.91;AN=212;refseq.name=NM_006256;refseq.positionType=promoter GT ./. 1/1 1/1 1/1 ./. ./. 1/1 1/1 ./. 1/1 ./. ./. 1/1 1/1 ./. 1/1 ./. ./. ./. ./. ./. 1/1 1/1 ./. 0/1 1/1 0/1 ./. 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 ./. ./. ./. 1/1 1/1 ./. 0/1 ./. 1/1 1/1 1/1 ./. 0/1 1/1 1/1 1/1 1/1 ./. ./. ./. ./. ./. ./. ./. 1/1 ./. 1/1 ./. ./. ./. 0/1 ./. 1/1 ./. ./. 1/1 1/1 1/1 ./. 1/1 1/1 1/1 ./. ./. 1/1 1/1 ./. 1/1 0/1 0/1 ./. 0/0 0/1 ./. ./. ./. ./. 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 ./. 1/1 1/1 1/1 ./. ./. 1/1 ./. ./. ./. 1/1 +chr1 90055475 . TT T . PASS VC=INDEL;AC=35;AF=0.11;AN=316;refseq.name=NM_015350;refseq.positionType=intron GT 0/1 0/0 0/0 1/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 +chr1 90055577 . TATG T . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_015350;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 90305331 . G GA . PASS VC=INDEL;AC=301;AF=0.95;AN=316;refseq.name=NM_018103;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 91238816 . G GT . PASS VC=INDEL;AC=86;AF=0.29;AN=296 GT 0/0 0/0 ./. 1/1 0/0 0/0 0/1 ./. 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 ./. 0/1 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 ./. 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 ./. 0/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 ./. 0/0 0/1 0/0 0/1 0/0 0/1 1/1 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 1/1 1/1 1/1 0/0 1/1 ./. 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/1 ./. 0/0 0/0 1/1 0/1 1/1 1/1 0/0 0/0 ./. 0/0 0/1 0/1 0/1 0/0 ./. 0/1 +chr1 91308113 . GC G . PASS VC=INDEL;AC=8;AF=0.03;AN=282 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/1 0/1 ./. 0/0 0/0 ./. 0/0 ./. ./. 0/0 0/0 +chr1 91354296 . TT T . PASS VC=INDEL;AC=252;AF=0.83;AN=304 GT 1/1 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 ./. 1/1 0/0 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 ./. ./. 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 ./. 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 +chr1 91544957 . ACT A . PASS VC=INDEL;AC=99;AF=0.32;AN=314 GT 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/0 +chr1 91566585 . GTTA G . PASS VC=INDEL;AC=139;AF=0.45;AN=312 GT 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 1/1 1/1 1/1 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 ./. 0/1 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 ./. 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 +chr1 92219769 . C CTCCTCAA . PASS VC=INDEL;AC=54;AF=0.17;AN=314;refseq.name=NM_003243;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 93167519 . C CTG . PASS VC=INDEL;AC=276;AF=1;AN=276;refseq.name=NM_005665;refseq.positionType=intron GT 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. ./. 1/1 ./. 1/1 ./. 1/1 1/1 1/1 ./. 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. ./. ./. 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 93628710 . TACTC T . PASS VC=INDEL;AC=94;AF=0.31;AN=304;refseq.name=NM_016040;refseq.positionType=intron GT 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/1 ./. 0/0 0/1 1/1 0/1 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 0/0 ./. 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 ./. 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 ./. 0/0 0/1 +chr1 93704043 . T TCTAGAAAAATC . PASS VC=INDEL;AC=7;AF=0.02;AN=306;refseq.name=NM_206886;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 94443843 . G GAGAG . PASS VC=INDEL;AC=88;AF=0.3;AN=292 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 ./. 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/1 0/0 0/1 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/1 ./. 0/0 0/0 0/1 ./. 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 ./. 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 1/1 0/0 0/0 ./. 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 ./. 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/0 ./. 0/0 +chr1 94634727 . TGAGT T . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_004815;refseq.positionType=exon GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 95103314 . AGCATCCTAAA A . PASS VC=INDEL;AC=6;AF=0.03;AN=240 GT ./. ./. 0/0 0/0 0/0 ./. ./. 0/1 0/0 ./. 0/0 ./. 0/0 0/0 ./. ./. ./. 0/0 0/0 ./. 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 ./. ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/1 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 95167241 . TTAAC T . PASS VC=INDEL;AC=115;AF=0.36;AN=316 GT 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 1/1 0/0 0/0 0/1 1/1 0/0 1/1 0/0 1/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 1/1 +chr1 95167244 . ACTAA A . PASS VC=INDEL;AC=116;AF=0.37;AN=316 GT 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 1/1 0/0 0/0 0/1 1/1 0/0 1/1 0/0 1/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 1/1 +chr1 95266356 . A AAAATAAGAATCCA . PASS VC=INDEL;AC=212;AF=0.83;AN=256 GT 1/1 ./. 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 0/1 ./. 1/1 1/1 1/1 ./. ./. ./. 0/0 1/1 0/0 0/1 ./. 0/1 0/1 1/1 1/1 1/1 ./. 0/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 ./. 0/1 1/1 0/1 0/0 0/1 1/1 1/1 ./. 1/1 ./. 1/1 0/1 1/1 0/1 1/1 ./. ./. 0/1 ./. 0/1 1/1 0/1 0/1 0/1 ./. 0/1 ./. 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/0 0/0 ./. 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 1/1 1/1 ./. ./. ./. 0/1 0/1 1/1 ./. 0/1 1/1 0/1 0/1 0/1 1/1 1/1 ./. 0/1 ./. 1/1 ./. ./. ./. +chr1 95349846 . G GG . PASS VC=INDEL;AC=195;AF=0.65;AN=302;refseq.name=NM_001114106;refseq.positionType=intron GT 1/1 1/1 0/0 1/1 1/1 1/1 0/1 0/1 0/1 1/1 ./. 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 ./. 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 0/1 0/1 ./. 1/1 0/1 ./. 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/1 1/1 ./. 0/0 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 ./. 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 ./. 0/1 0/1 0/1 1/1 1/1 +chr1 95638470 . GTAG G . PASS VC=INDEL;AC=9;AF=0.03;AN=306;refseq.name=NM_152487;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 96578762 . CAG C . PASS VC=INDEL;AC=78;AF=0.25;AN=314 GT 1/1 0/0 0/0 0/1 1/1 0/1 0/0 1/1 0/0 1/1 0/1 1/1 1/1 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 1/1 +chr1 97069290 . G GT . PASS VC=INDEL;AC=57;AF=0.18;AN=316 GT 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 1/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 1/1 1/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 +chr1 97352585 . A AGA . PASS VC=INDEL;AC=167;AF=0.53;AN=316 GT 0/0 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/0 1/1 1/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/0 0/0 0/0 1/1 0/0 0/1 1/1 0/0 0/0 0/0 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 +chr1 97471673 . T TTA . PASS VC=INDEL;AC=39;AF=0.16;AN=238 GT 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/1 0/0 ./. 0/1 0/0 1/1 ./. 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/0 1/1 ./. 0/1 ./. 1/1 0/1 0/1 0/0 0/0 ./. 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 ./. ./. 0/1 0/0 0/0 0/1 ./. 0/1 1/1 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 ./. ./. 0/0 ./. ./. ./. 0/0 0/0 0/0 ./. 0/1 ./. 0/0 ./. 0/1 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 ./. 0/0 0/0 ./. ./. ./. ./. 0/0 0/1 ./. ./. ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 ./. 0/0 ./. ./. 0/1 0/0 0/1 0/0 ./. 0/0 ./. 0/0 ./. 0/0 ./. 0/0 0/1 +chr1 97654513 . GTTAT G . PASS VC=INDEL;AC=17;AF=0.06;AN=302;refseq.name=NM_000110;refseq.positionType=intron GT ./. 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 97728316 . AATA A . PASS VC=INDEL;AC=15;AF=0.05;AN=316;refseq.name=NM_000110;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 +chr1 97862494 . TCCT T . PASS VC=INDEL;AC=47;AF=0.18;AN=256;refseq.name=NM_000110;refseq.positionType=intron GT 0/0 0/1 ./. 0/1 0/0 0/1 ./. 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 ./. ./. 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/1 ./. 0/1 1/1 0/0 0/0 ./. ./. 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/1 0/1 0/0 ./. 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 ./. 0/1 0/1 ./. ./. 0/1 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/1 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 1/1 ./. 0/1 0/1 0/1 ./. 0/1 0/1 0/1 0/0 ./. 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 ./. +chr1 97940369 . TAACT T . PASS VC=INDEL;AC=37;AF=0.12;AN=306;refseq.name=NM_000110;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/1 0/1 0/0 0/1 0/0 ./. ./. 0/1 0/1 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +chr1 98400957 . C CGATAT . PASS VC=INDEL;AC=290;AF=0.92;AN=316 GT 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/0 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 99032443 . T TTC . PASS VC=INDEL;AC=230;AF=0.79;AN=292 GT 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 ./. 1/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 ./. ./. ./. ./. 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/1 ./. 0/1 1/1 1/1 1/1 ./. 1/1 1/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 ./. 0/1 0/1 0/0 1/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 ./. 0/0 1/1 +chr1 99032444 . T TCT . PASS VC=INDEL;AC=236;AF=0.8;AN=296 GT 0/1 0/1 0/1 1/1 1/1 ./. 0/1 0/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 ./. ./. 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 ./. 0/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 ./. 1/1 1/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 1/1 ./. 1/1 0/0 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 0/1 0/1 1/1 0/1 1/1 0/0 1/1 +chr1 99662955 . A AAGA . PASS VC=INDEL;AC=146;AF=0.46;AN=316 GT 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 1/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 +chr1 99714941 . GTTACAG G . PASS VC=INDEL;AC=6;AF=0.02;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 99848725 . AT A . PASS VC=INDEL;AC=50;AF=0.16;AN=316 GT 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 100194878 . C CCT . PASS VC=INDEL;AC=248;AF=0.78;AN=316;refseq.name=NM_001013660;refseq.positionType=intron GT 1/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/1 0/0 1/1 0/0 1/1 0/1 0/0 1/1 0/1 0/1 0/0 0/0 1/1 1/1 0/1 1/1 0/0 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 +chr1 100194903 . C CT . PASS VC=INDEL;AC=7;AF=0.02;AN=316;refseq.name=NM_001013660;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 100567908 . C CT . PASS VC=INDEL;AC=43;AF=0.14;AN=300;refseq.name=NM_194292;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 ./. ./. 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 ./. 0/0 0/1 0/1 0/1 0/0 0/0 +chr1 100793875 . CACTC C . PASS VC=INDEL;AC=105;AF=0.38;AN=274 GT 0/0 0/1 0/1 ./. 0/1 1/1 0/0 ./. 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 ./. ./. 0/0 0/1 0/1 0/1 1/1 ./. 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 1/1 1/1 1/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/0 ./. 0/1 0/1 0/0 ./. 0/1 ./. 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 ./. 0/1 0/1 0/1 0/1 ./. ./. 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/0 1/1 ./. 0/1 0/1 ./. 0/1 0/1 0/0 ./. 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/1 1/1 ./. 0/1 1/1 0/1 0/0 0/0 ./. 0/0 0/1 ./. 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 ./. 1/1 0/1 ./. ./. 0/1 0/1 0/1 0/1 ./. 0/1 0/1 0/1 0/0 +chr1 100808351 . TT T . PASS VC=INDEL;AC=27;AF=0.09;AN=294 GT ./. 0/0 0/0 1/1 0/0 0/0 1/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 ./. 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 1/1 ./. 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 100856872 . T TT . PASS VC=INDEL;AC=79;AF=0.25;AN=316;refseq.name=NM_003672;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 1/1 1/1 0/0 1/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 1/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/0 +chr1 101093845 . TTCTGTAGTCAC T . PASS VC=INDEL;AC=24;AF=0.08;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 101295925 . CTA C . PASS VC=INDEL;AC=82;AF=0.26;AN=314 GT 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 ./. 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/0 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 +chr1 101442572 . T TT . PASS VC=INDEL;AC=99;AF=0.31;AN=316;refseq.name=NM_133496;refseq.positionType=exon GT 0/0 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 1/1 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 +chr1 101482924 . CTGTG C . PASS VC=INDEL;AC=32;AF=0.1;AN=316;refseq.name=NM_001077394;refseq.positionType=intron GT 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 101859015 . G GA . PASS VC=INDEL;AC=107;AF=0.34;AN=316 GT 1/1 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 +chr1 102315705 . A ATCTC . PASS VC=INDEL;AC=185;AF=0.59;AN=316;refseq.name=NM_058170;refseq.positionType=intron GT 0/1 1/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 1/1 1/1 0/1 0/1 +chr1 102315708 . T TCTCT . PASS VC=INDEL;AC=185;AF=0.59;AN=316;refseq.name=NM_058170;refseq.positionType=intron GT 0/1 1/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 1/1 1/1 0/1 0/1 +chr1 103391817 . TTA T . PASS VC=INDEL;AC=0;AF=0;AN=244;refseq.name=NM_001854;refseq.positionType=intron GT 0/0 ./. 0/0 ./. 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 ./. 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. ./. ./. 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 ./. ./. 0/0 0/0 ./. ./. ./. ./. ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. ./. ./. 0/0 0/0 +chr1 103722297 . TGT T . PASS VC=INDEL;AC=32;AF=0.1;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 +chr1 104533187 . A AGTT . PASS VC=INDEL;AC=148;AF=0.47;AN=316 GT 0/0 0/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/0 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 +chr1 104896267 . GAG G . PASS VC=INDEL;AC=48;AF=0.15;AN=312 GT 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/1 0/0 1/1 1/1 1/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +chr1 104896390 . ATATT A . PASS VC=INDEL;AC=38;AF=0.14;AN=268 GT 0/0 0/1 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 1/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 ./. ./. 0/0 1/1 0/0 ./. 0/1 1/1 ./. 1/1 0/0 0/0 0/0 ./. 0/0 0/1 ./. 0/0 ./. 0/1 0/0 0/0 1/1 0/1 0/1 1/1 0/0 1/1 0/0 1/1 0/1 0/1 0/0 1/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 1/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 ./. 0/1 0/0 +chr1 105259435 . CACTAAACGTGCC C . PASS VC=INDEL;AC=6;AF=0.02;AN=250 GT ./. 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/1 0/0 0/0 0/0 ./. ./. 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. ./. ./. 0/0 ./. ./. 0/0 0/0 ./. ./. 0/1 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/1 ./. 0/0 +chr1 105451424 . A ATCTAGT . PASS VC=INDEL;AC=98;AF=0.31;AN=316 GT 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 1/1 +chr1 105504523 . C CTTT . PASS VC=INDEL;AC=82;AF=0.29;AN=282 GT ./. 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 ./. 0/1 0/0 ./. 0/1 0/1 0/1 ./. 1/1 0/0 0/1 0/0 ./. 1/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 ./. 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 ./. ./. 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/1 0/1 0/1 0/0 0/1 ./. 0/0 1/1 0/1 0/0 0/1 0/1 0/0 ./. 0/0 0/1 ./. 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/1 1/1 +chr1 105837170 . T TAA . PASS VC=INDEL;AC=67;AF=0.24;AN=280 GT 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/1 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 1/1 0/1 0/1 ./. 0/0 0/1 1/1 1/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 ./. 0/1 0/1 0/0 0/1 ./. ./. 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 1/1 ./. 0/1 1/1 0/1 1/1 ./. ./. ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 ./. 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 ./. 0/1 ./. 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 ./. ./. 0/0 +chr1 105868766 . ATACTT A . PASS VC=INDEL;AC=92;AF=0.34;AN=274 GT ./. 0/1 0/1 0/1 0/0 0/1 1/1 1/1 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/1 1/1 1/1 0/1 0/0 0/1 ./. 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 ./. 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 1/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 ./. 0/0 1/1 0/1 0/0 ./. 1/1 ./. 1/1 0/1 1/1 0/0 ./. ./. ./. 0/0 0/1 0/1 ./. 0/1 0/0 0/0 0/0 0/0 0/1 ./. ./. ./. 0/0 0/0 0/0 1/1 0/1 0/1 0/0 ./. 1/1 0/1 ./. 0/1 ./. 1/1 0/0 0/0 0/0 ./. 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/1 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 1/1 1/1 +chr1 106762526 . AACT A . PASS VC=INDEL;AC=87;AF=0.28;AN=316 GT 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 +chr1 106908645 . AC A . PASS VC=INDEL;AC=25;AF=0.08;AN=316 GT 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 +chr1 107217236 . A AGGATCA . PASS VC=INDEL;AC=240;AF=0.79;AN=302 GT 1/1 1/1 ./. 1/1 0/0 1/1 1/1 1/1 1/1 1/1 0/0 1/1 ./. 1/1 1/1 ./. 1/1 0/0 1/1 1/1 1/1 1/1 0/1 ./. 1/1 1/1 1/1 0/0 0/0 0/0 0/0 1/1 1/1 0/0 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 1/1 ./. 0/0 0/0 0/0 1/1 1/1 0/0 1/1 1/1 1/1 1/1 0/0 1/1 0/0 0/0 1/1 1/1 0/0 1/1 0/0 0/0 0/0 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 ./. 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 107979567 . TT T . PASS VC=INDEL;AC=150;AF=0.55;AN=274;refseq.name=NM_001113226;refseq.positionType=intron GT 1/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/0 1/1 0/1 ./. 1/1 0/1 0/1 0/1 0/0 0/0 1/1 1/1 0/1 0/1 ./. ./. 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 ./. 0/1 0/0 1/1 ./. ./. 0/1 1/1 1/1 1/1 0/0 1/1 ./. 1/1 0/1 0/1 0/1 0/1 0/1 0/1 ./. 0/0 1/1 ./. 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 ./. 0/1 ./. 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/0 1/1 ./. 1/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 ./. 1/1 0/1 0/1 0/1 0/1 0/1 ./. 0/1 0/1 ./. 0/1 0/1 0/0 0/1 ./. 1/1 ./. 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/0 ./. 0/0 1/1 0/1 ./. 0/1 1/1 0/0 1/1 0/1 0/1 1/1 ./. 0/1 0/1 0/1 ./. 1/1 1/1 0/1 1/1 +chr1 108737087 . GG G . PASS VC=INDEL;AC=99;AF=0.32;AN=308;refseq.name=NM_013386;refseq.positionType=intron GT 1/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 ./. 1/1 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/1 +chr1 109186604 . A ATA . PASS VC=INDEL;AC=3;AF=0.01;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 109295950 . TA T . PASS VC=INDEL;AC=54;AF=0.17;AN=312;refseq.name=NM_007269;refseq.positionType=intron GT 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/1 0/1 0/0 0/1 0/0 0/0 0/0 ./. 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 +chr1 109295955 . TTA T . PASS VC=INDEL;AC=57;AF=0.18;AN=310;refseq.name=NM_007269;refseq.positionType=intron GT 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 ./. 0/1 0/0 0/0 0/1 0/0 0/0 0/1 ./. 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 ./. 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 +chr1 109303951 . GTATAG G . PASS VC=INDEL;AC=89;AF=0.28;AN=316;refseq.name=NM_007269;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/0 0/0 1/1 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 +chr1 109429108 . G GGAGAAAT . PASS VC=INDEL;AC=33;AF=0.14;AN=234;refseq.name=NM_013296;refseq.positionType=intron GT 0/1 ./. ./. 0/0 0/0 0/0 0/0 0/1 ./. 0/1 0/0 ./. 0/1 ./. ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. ./. 0/1 ./. ./. 0/1 ./. 0/1 0/1 ./. ./. ./. 0/1 ./. 0/1 ./. 0/1 0/1 ./. ./. 0/1 ./. 0/1 0/1 ./. 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 ./. ./. ./. 0/1 ./. 0/1 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 ./. ./. 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/1 +chr1 109565068 . C CTC . PASS VC=INDEL;AC=304;AF=0.96;AN=316;refseq.name=NM_014969;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 +chr1 110418161 . CTTAG C . PASS VC=INDEL;AC=56;AF=0.18;AN=316 GT 0/0 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 0/0 0/1 1/1 1/1 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 +chr1 110911466 . AT A . PASS VC=INDEL;AC=67;AF=0.22;AN=310;refseq.name=NM_004696;refseq.positionType=intron GT 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 +chr1 111820993 . TTAAG T . PASS VC=INDEL;AC=46;AF=0.2;AN=232 GT 0/1 ./. 1/1 ./. 0/0 ./. 0/1 0/1 ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/1 0/0 0/0 0/1 1/1 ./. 0/1 0/0 0/1 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 ./. 0/0 0/0 0/1 ./. ./. ./. 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 ./. 0/0 0/1 ./. ./. 0/0 0/1 0/1 0/1 0/1 0/0 0/0 ./. ./. 0/1 ./. ./. 0/0 0/1 ./. 0/0 ./. 0/1 ./. 0/0 ./. 0/1 0/1 0/1 0/0 0/1 0/1 0/1 ./. 0/0 0/0 0/0 0/1 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/1 0/0 ./. ./. ./. 0/0 0/0 0/1 0/0 0/1 0/1 ./. 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. ./. ./. 0/0 0/0 0/0 ./. 0/0 ./. 0/1 0/1 ./. ./. ./. +chr1 111894729 . C CATG . PASS VC=INDEL;AC=32;AF=0.11;AN=302;refseq.name=NM_181643;refseq.positionType=exon GT 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 ./. 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/1 0/1 0/1 0/0 +chr1 112384059 . G GG . PASS VC=INDEL;AC=111;AF=0.35;AN=314;refseq.name=NM_004980;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/0 1/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 1/1 +chr1 112440856 . A ACTTA . PASS VC=INDEL;AC=138;AF=0.44;AN=312;refseq.name=NM_004980;refseq.positionType=intron GT 1/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/0 1/1 1/1 0/1 1/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/0 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 0/0 0/0 1/1 1/1 1/1 0/1 ./. 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 +chr1 112896532 . CTAAC C . PASS VC=INDEL;AC=1;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 112896636 . CA C . PASS VC=INDEL;AC=199;AF=0.64;AN=312 GT 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 1/1 0/0 0/0 1/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/0 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 ./. 1/1 0/0 0/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 ./. 1/1 +chr1 112896637 . AA A . PASS VC=INDEL;AC=199;AF=0.63;AN=316 GT 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 1/1 0/0 0/0 1/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/0 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/0 0/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 1/1 +chr1 113322895 . TTCTA T . PASS VC=INDEL;AC=73;AF=0.3;AN=246 GT 0/0 ./. 0/1 0/0 ./. 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 ./. 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 ./. 0/0 0/1 1/1 0/1 0/0 0/0 0/0 ./. ./. ./. 1/1 0/0 1/1 1/1 0/1 0/1 1/1 ./. ./. ./. 0/0 0/1 1/1 0/0 0/1 ./. ./. 0/0 ./. 0/1 1/1 0/1 0/0 0/1 0/1 ./. 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 ./. 0/0 0/0 ./. ./. ./. 0/0 0/0 0/0 0/0 0/1 ./. ./. ./. ./. ./. 0/0 0/1 1/1 ./. 0/0 0/0 0/0 ./. 0/0 0/1 ./. 0/1 0/0 0/0 ./. 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/1 ./. 0/0 0/0 1/1 0/0 0/1 0/0 0/0 ./. ./. 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 ./. 0/0 ./. 0/0 0/0 +chr1 113467083 . CC C . PASS VC=INDEL;AC=1;AF=0;AN=316;refseq.name=NM_003051;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 113635187 . C CTTTG . PASS VC=INDEL;AC=261;AF=0.83;AN=316;refseq.name=NM_014813;refseq.positionType=intron GT 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 +chr1 113635190 . T TGTTT . PASS VC=INDEL;AC=261;AF=0.83;AN=316;refseq.name=NM_014813;refseq.positionType=intron GT 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 +chr1 113640553 . GA G . PASS VC=INDEL;AC=111;AF=0.35;AN=314;refseq.name=NM_014813;refseq.positionType=intron GT 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/1 0/0 0/0 0/1 0/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 ./. 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 +chr1 113640556 . AA A . PASS VC=INDEL;AC=112;AF=0.35;AN=316;refseq.name=NM_014813;refseq.positionType=intron GT 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/1 0/0 0/0 0/1 0/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 +chr1 113689905 . GAG G . PASS VC=INDEL;AC=41;AF=0.13;AN=316 GT 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 114240320 . A AA . PASS VC=INDEL;AC=229;AF=0.72;AN=316;refseq.name=NM_006608;refseq.positionType=exon GT 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 114339956 . C CTAAA . PASS VC=INDEL;AC=210;AF=0.78;AN=270;refseq.name=NM_018364;refseq.positionType=intron GT 1/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 ./. ./. 1/1 0/1 0/0 0/1 1/1 0/0 0/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/0 0/0 0/1 0/0 1/1 0/1 1/1 0/1 ./. 1/1 ./. ./. 0/0 0/0 0/0 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/1 ./. ./. ./. 0/0 0/1 0/1 ./. ./. 0/0 0/1 0/0 0/1 ./. 0/0 ./. 0/1 0/1 1/1 ./. 1/1 ./. 1/1 1/1 1/1 1/1 0/1 0/1 ./. 1/1 1/1 1/1 ./. 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 0/1 0/1 ./. 1/1 0/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 114565357 . CGGAGG C . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 116298599 . A ACTT . PASS VC=INDEL;AC=54;AF=0.17;AN=316;refseq.name=NM_001232;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 +chr1 116435014 . ATAACCGA A . PASS VC=INDEL;AC=66;AF=0.26;AN=250 GT 1/1 1/1 ./. 1/1 0/1 0/1 0/1 ./. 0/0 0/0 ./. 0/1 0/1 0/0 0/0 0/1 1/1 0/0 0/0 1/1 0/0 0/1 0/1 1/1 ./. 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/1 0/1 ./. 0/0 0/0 0/1 0/0 1/1 0/0 ./. ./. 0/1 0/0 0/0 0/0 0/1 ./. 1/1 ./. 0/0 0/1 0/1 0/0 0/0 0/1 ./. 1/1 1/1 0/1 0/1 ./. 0/0 1/1 ./. 0/0 1/1 0/1 1/1 ./. 1/1 0/0 ./. 1/1 0/1 ./. ./. 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 ./. 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. ./. ./. 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/1 0/1 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/1 0/1 0/0 0/0 ./. 0/1 0/1 +chr1 116551982 . T TTAAAGC . PASS VC=INDEL;AC=31;AF=0.1;AN=304;refseq.name=NM_018420;refseq.positionType=intron GT 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 ./. 0/1 0/0 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 116662025 . T TGA . PASS VC=INDEL;AC=55;AF=0.17;AN=316;refseq.name=NM_152367;refseq.positionType=intron GT 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 +chr1 116662028 . G GAG . PASS VC=INDEL;AC=55;AF=0.17;AN=316;refseq.name=NM_152367;refseq.positionType=intron GT 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 +chr1 117459931 . AAC A . PASS VC=INDEL;AC=90;AF=0.28;AN=316;refseq.name=NM_020440;refseq.positionType=intron GT 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 117459932 . ACA A . PASS VC=INDEL;AC=90;AF=0.28;AN=316;refseq.name=NM_020440;refseq.positionType=intron GT 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 117592136 . TTG T . PASS VC=INDEL;AC=24;AF=0.08;AN=300 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. +chr1 117722836 . C CA . PASS VC=INDEL;AC=36;AF=0.11;AN=316;refseq.name=NM_024626;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 +chr1 120034138 . TCTAT T . PASS VC=INDEL;AC=99;AF=0.35;AN=284 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/1 ./. 0/0 ./. 0/0 0/0 ./. 0/0 0/1 0/0 ./. 0/0 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/0 ./. 0/1 0/1 0/1 ./. 0/1 0/1 0/1 ./. 0/1 0/1 0/0 1/1 0/1 1/1 ./. 0/1 0/1 0/1 0/1 0/1 1/1 1/1 ./. 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 ./. ./. 0/0 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/0 0/0 ./. 0/1 0/0 0/0 1/1 1/1 1/1 0/1 1/1 1/1 0/0 ./. 0/1 0/0 0/0 0/1 ./. 1/1 1/1 0/0 0/0 +chr1 120185496 . G GGATT . PASS VC=INDEL;AC=264;AF=0.84;AN=314;refseq.name=NM_001080470;refseq.positionType=intron GT 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 +chr1 120280730 . TAA T . PASS VC=INDEL;AC=73;AF=0.23;AN=314;refseq.name=NM_006623;refseq.positionType=intron GT 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 1/1 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 ./. 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 +chr1 144995277 . AG A . PASS VC=INDEL;AC=41;AF=0.16;AN=258;refseq.name=NM_014644;refseq.positionType=promoter GT 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 ./. 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/1 0/0 ./. 0/1 ./. ./. 0/0 ./. 0/1 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/1 0/0 ./. 0/1 0/1 0/1 0/0 ./. ./. ./. 0/0 ./. ./. 0/0 0/1 0/1 ./. 0/1 0/1 0/0 0/0 ./. ./. ./. 0/1 0/0 ./. 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 ./. 0/1 ./. 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/0 0/1 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 +chr1 145060382 . A AG . PASS VC=INDEL;AC=316;AF=1;AN=316;refseq.name=NM_022359;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 146556039 . CCAAC C . PASS VC=INDEL;AC=64;AF=0.21;AN=310 GT 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 1/1 0/1 1/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 ./. 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/0 ./. ./. 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 +chr1 146768690 . TC T . PASS VC=INDEL;AC=289;AF=0.91;AN=316 GT 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 1/1 1/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 +chr1 146979526 . CCT C . PASS VC=INDEL;AC=63;AF=0.2;AN=316 GT 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 +chr1 147047674 . AA A . PASS VC=INDEL;AC=101;AF=0.32;AN=314;refseq.name=NM_004326;refseq.positionType=intron GT 0/1 0/1 0/0 1/1 1/1 0/0 1/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 1/1 1/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 1/1 +chr1 147108091 . A AC . PASS VC=INDEL;AC=227;AF=0.72;AN=314 GT 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/0 0/1 ./. 1/1 +chr1 147392223 . CATGGCTC C . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 147393527 . A AAGAA . PASS VC=INDEL;AC=10;AF=0.05;AN=218 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/0 ./. ./. 0/0 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. ./. 0/1 0/0 ./. 0/0 0/0 ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. 0/0 0/0 ./. 0/0 ./. ./. ./. ./. 0/0 0/1 ./. ./. ./. ./. 0/0 0/0 0/0 0/1 ./. 0/1 ./. ./. ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/1 ./. 0/0 0/0 0/0 0/0 ./. ./. ./. 0/0 0/0 ./. 0/0 ./. 0/0 0/0 +chr1 147823728 . A AC . PASS VC=INDEL;AC=2;AF=0.01;AN=266 GT 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 ./. ./. 0/0 ./. ./. ./. ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. ./. 0/0 ./. 0/0 0/0 +chr1 151094921 . T TA . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 151094936 . CCTTA C . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 151743871 . AA A . PASS VC=INDEL;AC=98;AF=0.32;AN=308;refseq.name=NM_016178;refseq.positionType=terminator GT 1/1 0/1 ./. 0/0 0/1 0/0 1/1 0/0 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/1 ./. 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 ./. 0/1 0/0 1/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 ./. 0/0 0/1 1/1 1/1 0/0 1/1 0/1 0/0 0/0 1/1 0/0 0/1 1/1 0/1 1/1 0/0 0/0 1/1 1/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 1/1 0/0 0/1 1/1 0/1 +chr1 152348228 . TTAT T . PASS VC=INDEL;AC=9;AF=0.03;AN=316 GT 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 152442163 . AAACA A . PASS VC=INDEL;AC=212;AF=0.68;AN=310 GT 0/1 ./. 0/0 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 1/1 1/1 0/0 0/1 1/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/0 0/0 0/1 1/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 1/1 ./. 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 0/0 ./. 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 +chr1 152572426 . G GT . PASS VC=INDEL;AC=70;AF=0.25;AN=280;refseq.name=NM_178434;refseq.positionType=promoter GT 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 1/1 0/0 0/1 ./. 0/0 ./. 0/1 0/0 0/0 0/0 ./. ./. 0/1 0/1 0/1 0/1 ./. 0/0 0/0 0/0 0/1 0/1 ./. 0/1 ./. 0/0 ./. ./. 0/1 0/1 ./. 1/1 ./. 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 ./. 0/0 ./. 0/1 0/0 0/0 1/1 ./. 1/1 0/1 0/1 ./. 0/1 0/1 0/1 0/0 0/0 0/0 0/0 ./. 1/1 0/1 0/0 +chr1 152797773 . C CC . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_178348;refseq.positionType=promoter GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 153703019 . TGTGTCTCTGCTT T . PASS VC=INDEL;AC=1;AF=0;AN=316;refseq.name=NM_023015;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 154741714 . TAT T . PASS VC=INDEL;AC=1;AF=0;AN=316;refseq.name=NM_002249;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 155303581 . AT A . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 155559888 . C CTTAT . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 156565049 . A AAC . PASS VC=INDEL;AC=314;AF=0.99;AN=316;refseq.name=NM_015590;refseq.positionType=exon GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 156572952 . T TGAA . PASS VC=INDEL;AC=39;AF=0.12;AN=312;refseq.name=NM_015590;refseq.positionType=promoter GT 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 156859572 . C CCT . PASS VC=INDEL;AC=219;AF=0.73;AN=300 GT 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 ./. 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 ./. 0/0 0/1 0/0 0/0 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 ./. 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 0/0 0/1 ./. 0/0 ./. 0/1 0/0 0/0 0/0 ./. ./. 1/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 +chr1 156910892 . GCTCGTCTT G . PASS VC=INDEL;AC=39;AF=0.14;AN=270;refseq.name=NM_014784;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 ./. 0/0 0/1 0/0 ./. ./. 0/0 0/1 ./. ./. 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/1 0/1 ./. 0/1 0/0 0/0 0/1 0/0 0/0 0/0 ./. ./. ./. 0/0 0/1 ./. 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 ./. ./. 0/0 0/1 0/1 0/1 0/1 0/1 ./. 0/1 0/0 0/1 ./. ./. 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/1 0/0 0/0 0/0 0/0 +chr1 157531425 . CA C . PASS VC=INDEL;AC=16;AF=0.06;AN=260 GT 0/1 0/1 ./. 0/1 0/0 0/0 0/1 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 ./. 0/0 ./. 0/0 0/0 ./. ./. 0/1 ./. ./. 0/1 ./. 0/0 ./. 0/0 0/0 0/0 ./. 0/1 ./. 0/0 0/1 ./. 0/1 0/0 0/1 0/1 0/0 0/0 0/0 ./. 0/0 0/0 ./. ./. ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 +chr1 157807166 . TGTTA T . PASS VC=INDEL;AC=250;AF=0.81;AN=310;refseq.name=NM_005894;refseq.positionType=intron GT 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/0 0/0 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 +chr1 157818429 . AC A . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 157924621 . ATAAG A . PASS VC=INDEL;AC=24;AF=0.08;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 157932325 . T TT . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 158154060 . CT C . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_001766;refseq.positionType=exon GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 158684734 . CA C . PASS VC=INDEL;AC=90;AF=0.28;AN=316 GT 0/1 1/1 1/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 +chr1 158886780 . A AAGAT . PASS VC=INDEL;AC=241;AF=0.76;AN=316 GT 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 +chr1 158886783 . A ATAGA . PASS VC=INDEL;AC=240;AF=0.76;AN=314 GT 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 ./. 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 +chr1 158984187 . G GAGGC . PASS VC=INDEL;AC=26;AF=0.13;AN=198;refseq.name=NM_005531;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 1/1 1/1 ./. ./. 0/0 0/0 0/0 1/1 0/0 1/1 ./. 0/0 0/0 0/0 0/0 ./. ./. 0/0 ./. 0/0 0/0 ./. ./. ./. 0/0 0/0 ./. 0/0 ./. ./. 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 1/1 ./. ./. 0/0 ./. 0/0 ./. ./. 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 ./. ./. 0/0 ./. ./. 0/0 ./. ./. ./. 0/0 ./. ./. ./. 1/1 1/1 1/1 ./. 1/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. ./. 0/0 1/1 1/1 ./. 0/0 ./. 0/0 ./. ./. 0/0 ./. ./. ./. 0/0 0/0 ./. ./. 0/0 0/0 ./. ./. ./. ./. ./. 1/1 1/1 +chr1 158984259 . AATT A . PASS VC=INDEL;AC=130;AF=0.49;AN=266;refseq.name=NM_005531;refseq.positionType=intron GT ./. 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 ./. 1/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 ./. 1/1 1/1 0/1 ./. 0/0 0/0 0/1 0/0 0/1 0/0 ./. 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 1/1 0/0 ./. 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 ./. 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 ./. 0/1 ./. 1/1 0/0 0/1 0/1 1/1 0/1 ./. ./. 0/0 0/0 ./. 0/1 1/1 0/1 0/1 1/1 ./. ./. 0/0 0/1 0/0 0/1 1/1 ./. 0/1 0/1 ./. 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/0 ./. 0/0 0/1 0/0 ./. 0/0 0/1 0/1 ./. 0/1 0/1 ./. ./. ./. ./. ./. 0/1 0/1 1/1 0/1 0/1 0/1 ./. 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 +chr1 159500234 . CT C . PASS VC=INDEL;AC=19;AF=0.06;AN=316 GT 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 159741079 . TGT T . PASS VC=INDEL;AC=163;AF=0.52;AN=314 GT 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 ./. 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 1/1 1/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 +chr1 160004099 . GATGTAGATAG G . PASS VC=INDEL;AC=3;AF=0.01;AN=314;refseq.name=NM_145167;refseq.positionType=promoter GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 160081222 . TGAAAAG T . PASS VC=INDEL;AC=5;AF=0.02;AN=312 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 160430789 . C CAG . PASS VC=INDEL;AC=51;AF=0.16;AN=314 GT 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 +chr1 160464965 . AGTGAATTTTAGA A . PASS VC=INDEL;AC=12;AF=0.06;AN=214;refseq.name=NM_052931;refseq.positionType=intron GT ./. 0/0 0/0 ./. ./. ./. ./. 0/0 ./. 0/0 0/0 0/0 ./. 0/0 ./. ./. 0/0 ./. ./. 0/0 ./. ./. 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. ./. 0/1 ./. 0/0 0/0 ./. 0/1 0/0 ./. 0/0 0/0 ./. 0/0 ./. 0/0 0/0 ./. ./. 0/0 ./. ./. 0/0 0/0 ./. ./. ./. ./. 0/1 0/1 0/1 ./. ./. 0/1 ./. 0/0 0/0 ./. ./. ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 ./. ./. 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 ./. ./. 0/0 0/0 ./. 0/0 0/0 0/0 ./. ./. 0/1 ./. 0/1 ./. 0/1 +chr1 160578541 . C CA . PASS VC=INDEL;AC=277;AF=0.88;AN=316 GT 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 161765879 . T TCTT . PASS VC=INDEL;AC=77;AF=0.25;AN=310;refseq.name=NM_007348;refseq.positionType=intron GT 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 ./. 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/1 ./. 0/1 0/1 1/1 0/1 0/0 0/0 0/1 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 +chr1 161826110 . TT T . PASS VC=INDEL;AC=0;AF=0;AN=308;refseq.name=NM_007348;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 162354200 . AACAC A . PASS VC=INDEL;AC=32;AF=0.12;AN=262;refseq.name=NM_001085375;refseq.positionType=exon GT 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 1/1 0/0 0/0 ./. ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 ./. 0/0 0/0 ./. 0/1 ./. 0/0 ./. ./. 0/0 0/1 ./. ./. ./. ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 1/1 +chr1 162629796 . C CGTT . PASS VC=INDEL;AC=238;AF=0.75;AN=316;refseq.name=NM_001014796;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 163132415 . TCCTGAACA T . PASS VC=INDEL;AC=7;AF=0.02;AN=314;refseq.name=NM_003617;refseq.positionType=intron GT 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 163135904 . C CAGA . PASS VC=INDEL;AC=217;AF=0.84;AN=258;refseq.name=NM_003617;refseq.positionType=intron GT 1/1 1/1 1/1 ./. 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 ./. 0/1 0/0 ./. 0/1 0/0 ./. 1/1 ./. 0/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 ./. 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 0/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 ./. 1/1 ./. 1/1 0/1 ./. 0/1 ./. 1/1 1/1 1/1 0/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 ./. ./. ./. 1/1 1/1 0/1 1/1 0/1 1/1 ./. ./. 0/1 ./. 0/1 ./. 0/1 ./. 1/1 1/1 1/1 0/1 ./. ./. 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 ./. 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 ./. 1/1 +chr1 163136054 . T TTC . PASS VC=INDEL;AC=266;AF=0.84;AN=316;refseq.name=NM_003617;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 +chr1 163136055 . T TCT . PASS VC=INDEL;AC=265;AF=0.84;AN=314;refseq.name=NM_003617;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 +chr1 164351168 . ATTG A . PASS VC=INDEL;AC=261;AF=0.83;AN=316 GT 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 +chr1 164448310 . AAAC A . PASS VC=INDEL;AC=236;AF=0.75;AN=316 GT 0/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/0 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/1 1/1 0/0 1/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 +chr1 164548574 . TT T . PASS VC=INDEL;AC=11;AF=0.04;AN=308;refseq.name=NM_002585;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 +chr1 164790567 . C CT . PASS VC=INDEL;AC=164;AF=0.52;AN=314;refseq.name=NM_002585;refseq.positionType=intron GT 1/1 0/0 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/0 1/1 1/1 0/0 0/1 1/1 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 ./. 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 0/1 0/0 +chr1 165207456 . TAGA T . PASS VC=INDEL;AC=17;AF=0.05;AN=316;refseq.name=NM_177398;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 165218477 . AGAGATTACTCTG A . PASS VC=INDEL;AC=79;AF=0.28;AN=280;refseq.name=NM_177398;refseq.positionType=intron GT 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 ./. 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 1/1 0/1 0/0 0/0 1/1 ./. 1/1 1/1 0/0 0/1 ./. ./. 1/1 0/0 1/1 0/1 0/1 ./. 0/1 1/1 1/1 ./. 0/1 0/1 1/1 ./. 0/0 0/1 ./. 0/1 1/1 0/1 1/1 1/1 ./. 1/1 ./. 0/1 1/1 0/1 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 ./. ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 ./. 0/0 0/0 0/1 0/1 0/1 0/1 +chr1 165261980 . TA T . PASS VC=INDEL;AC=129;AF=0.42;AN=308;refseq.name=NM_177398;refseq.positionType=intron GT 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 ./. 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 ./. 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 1/1 ./. 1/1 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 1/1 ./. 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/1 1/1 1/1 1/1 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 +chr1 165286489 . AA A . PASS VC=INDEL;AC=23;AF=0.07;AN=314;refseq.name=NM_177398;refseq.positionType=intron GT 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 165349359 . G GT . PASS VC=INDEL;AC=130;AF=0.42;AN=306 GT 0/1 ./. 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/0 ./. 0/0 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 1/1 0/1 ./. 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 ./. 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 1/1 ./. 0/1 0/1 +chr1 165475542 . CT C . PASS VC=INDEL;AC=157;AF=0.5;AN=316 GT 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/0 0/0 1/1 0/1 0/1 1/1 0/0 0/1 1/1 0/1 0/0 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 1/1 0/0 0/1 0/0 0/1 1/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 +chr1 165627134 . AT A . PASS VC=INDEL;AC=144;AF=0.46;AN=314 GT 0/0 1/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 ./. 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 1/1 1/1 0/1 0/1 0/0 0/0 0/0 1/1 +chr1 165652540 . GTTAA G . PASS VC=INDEL;AC=202;AF=0.66;AN=304;refseq.name=NM_000696;refseq.positionType=intron GT 0/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 ./. ./. 1/1 0/1 1/1 0/0 ./. 0/1 0/0 0/1 0/0 0/1 ./. 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 1/1 1/1 1/1 0/0 0/0 0/0 ./. 1/1 +chr1 165685796 . GGCACAGAT G . PASS VC=INDEL;AC=155;AF=0.49;AN=314 GT 0/0 0/1 0/0 0/0 1/1 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/0 1/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 ./. 0/1 1/1 0/1 1/1 0/0 1/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 0/1 1/1 0/0 0/1 0/0 1/1 0/1 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 +chr1 165686450 . TAGG T . PASS VC=INDEL;AC=144;AF=0.46;AN=316 GT 0/1 0/1 1/1 0/1 0/0 1/1 1/1 0/0 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 +chr1 165686452 . GGAG G . PASS VC=INDEL;AC=145;AF=0.46;AN=316 GT 1/1 0/1 1/1 0/1 0/0 1/1 1/1 0/0 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 +chr1 166083223 . CCAC C . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_001017961;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 166602705 . TTGT T . PASS VC=INDEL;AC=73;AF=0.23;AN=316 GT 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 +chr1 166639248 . A AAT . PASS VC=INDEL;AC=289;AF=0.91;AN=316 GT 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 +chr1 166708316 . G GTAG . PASS VC=INDEL;AC=102;AF=0.32;AN=316 GT 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 1/1 1/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 +chr1 167512714 . TTCCAAAACCGA T . PASS VC=INDEL;AC=7;AF=0.02;AN=316;refseq.name=NM_003851;refseq.positionType=intron GT 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 167513042 . CA C . PASS VC=INDEL;AC=7;AF=0.02;AN=316;refseq.name=NM_003851;refseq.positionType=intron GT 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 167516739 . T TAA . PASS VC=INDEL;AC=1;AF=0;AN=316;refseq.name=NM_003851;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 167675717 . T TTC . PASS VC=INDEL;AC=22;AF=0.07;AN=296;refseq.name=NM_052862;refseq.positionType=terminator GT 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 ./. 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 167682039 . CCAAA C . PASS VC=INDEL;AC=68;AF=0.22;AN=316 GT 0/0 0/1 1/1 0/0 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 +chr1 167682041 . AAACA A . PASS VC=INDEL;AC=68;AF=0.22;AN=316 GT 0/0 0/1 1/1 0/0 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 +chr1 167697899 . GTG G . PASS VC=INDEL;AC=50;AF=0.16;AN=316;refseq.name=NM_003953;refseq.positionType=intron GT 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 +chr1 167985326 . TG T . PASS VC=INDEL;AC=144;AF=0.49;AN=294;refseq.name=NM_001017977;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/1 0/1 ./. 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 ./. 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 0/0 1/1 1/1 ./. 1/1 1/1 0/1 0/1 0/0 1/1 0/1 0/0 1/1 1/1 1/1 0/0 1/1 0/1 1/1 ./. ./. 1/1 0/1 0/1 1/1 0/1 ./. 0/1 0/1 0/0 1/1 0/0 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 ./. 1/1 ./. 0/1 1/1 0/1 0/0 ./. 0/1 0/0 0/0 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 ./. 0/1 1/1 0/1 +chr1 168053859 . ACTCA A . PASS VC=INDEL;AC=11;AF=0.03;AN=316;refseq.name=NM_153832;refseq.positionType=terminator GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 +chr1 168133510 . CCTAAC C . PASS VC=INDEL;AC=96;AF=0.3;AN=316 GT 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 1/1 0/0 0/1 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 1/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/1 +chr1 168200152 . GT G . PASS VC=INDEL;AC=135;AF=0.43;AN=316;refseq.name=NM_199344;refseq.positionType=intron GT 1/1 0/0 1/1 0/0 0/1 0/1 0/1 1/1 0/0 1/1 0/0 1/1 1/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 1/1 1/1 1/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 +chr1 168423776 . AGC A . PASS VC=INDEL;AC=4;AF=0.01;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 169066627 . T TC . PASS VC=INDEL;AC=301;AF=0.95;AN=316 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 +chr1 169066629 . C CC . PASS VC=INDEL;AC=301;AF=0.95;AN=316 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 +chr1 169095586 . T TAT . PASS VC=INDEL;AC=165;AF=0.52;AN=316;refseq.name=NM_001001787;refseq.positionType=intron GT 0/0 1/1 1/1 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 1/1 +chr1 169214437 . CA C . PASS VC=INDEL;AC=10;AF=0.03;AN=316;refseq.name=NM_013330;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 169875635 . AG A . PASS VC=INDEL;AC=2;AF=0.01;AN=314 GT 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 170054566 . CAAAT C . PASS VC=INDEL;AC=2;AF=0.01;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 170213713 . C CA . PASS VC=INDEL;AC=302;AF=0.96;AN=314 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 +chr1 170231599 . C CA . PASS VC=INDEL;AC=178;AF=0.57;AN=314 GT 0/1 0/1 0/0 1/1 1/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/0 1/1 0/1 0/0 0/1 1/1 0/1 0/0 1/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 1/1 1/1 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 ./. 0/0 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 1/1 0/1 +chr1 170412385 . A AA . PASS VC=INDEL;AC=247;AF=0.79;AN=312 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 ./. 0/0 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 +chr1 171564547 . T TT . PASS VC=INDEL;AC=141;AF=0.68;AN=206 GT 1/1 1/1 1/1 ./. 0/1 ./. 1/1 0/1 ./. 0/1 ./. ./. ./. 1/1 1/1 ./. 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 ./. 1/1 ./. 1/1 1/1 ./. ./. ./. 0/1 0/1 ./. ./. ./. 0/1 0/1 ./. 1/1 0/1 ./. 0/1 1/1 ./. 1/1 ./. ./. 0/1 ./. 0/1 ./. ./. ./. ./. 0/1 ./. 1/1 ./. 0/1 1/1 0/1 0/1 1/1 1/1 0/0 ./. ./. ./. ./. ./. 0/1 0/1 1/1 0/1 ./. 0/1 1/1 ./. 0/1 0/1 0/1 ./. 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 ./. 0/0 0/1 ./. 0/1 0/1 1/1 ./. 1/1 1/1 ./. 0/1 1/1 0/1 0/1 ./. 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 ./. ./. ./. ./. 1/1 ./. ./. 0/1 1/1 1/1 ./. 0/1 1/1 ./. ./. 0/1 ./. ./. 0/1 ./. 0/1 ./. ./. 1/1 ./. 1/1 1/1 1/1 0/1 +chr1 171668398 . C CATC . PASS VC=INDEL;AC=42;AF=0.13;AN=316 GT 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 1/1 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 171779854 . AAAG A . PASS VC=INDEL;AC=128;AF=0.46;AN=278 GT 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 ./. 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 1/1 0/1 1/1 0/1 1/1 0/1 ./. 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/1 ./. 0/1 0/1 ./. ./. ./. 1/1 0/1 ./. 0/1 1/1 0/1 0/1 1/1 0/1 ./. 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 ./. 0/0 0/1 1/1 0/1 1/1 1/1 ./. 1/1 0/1 0/1 1/1 ./. 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 ./. 0/0 0/1 0/0 ./. 0/0 0/1 0/0 0/1 ./. 1/1 ./. 0/1 0/1 0/1 0/0 1/1 0/1 ./. 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 ./. 0/1 0/1 0/1 0/0 0/0 0/0 0/1 ./. 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 ./. 0/1 0/1 +chr1 171799766 . A ACT . PASS VC=INDEL;AC=48;AF=0.18;AN=268 GT 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 ./. 0/1 ./. 0/0 0/1 0/0 0/0 ./. 0/0 0/1 0/0 ./. 0/1 0/1 0/1 0/1 0/0 0/1 0/0 ./. 0/1 ./. 0/0 0/1 ./. 0/1 0/1 0/0 0/0 ./. 0/1 0/1 0/1 0/1 0/0 0/0 ./. 0/0 0/1 0/0 ./. 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 ./. 0/0 ./. 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 ./. 0/0 0/0 0/0 ./. 0/1 ./. 0/1 0/1 0/1 0/1 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 ./. ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. ./. 0/1 0/1 0/0 0/0 +chr1 171806532 . C CAT . PASS VC=INDEL;AC=14;AF=0.05;AN=308 GT 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 +chr1 172312482 . AAG A . PASS VC=INDEL;AC=5;AF=0.02;AN=316;refseq.name=NM_015569;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 172415351 . GA G . PASS VC=INDEL;AC=75;AF=0.24;AN=316;refseq.name=NM_139240;refseq.positionType=intron GT 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 1/1 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 +chr1 172620138 . A ACT . PASS VC=INDEL;AC=134;AF=0.42;AN=316 GT 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 +chr1 172620139 . C CTC . PASS VC=INDEL;AC=134;AF=0.43;AN=314 GT 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 ./. 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 +chr1 173063473 . A ATGTC . PASS VC=INDEL;AC=124;AF=0.62;AN=200 GT 0/0 0/1 0/1 ./. 0/1 ./. ./. 1/1 0/1 0/0 0/1 ./. 0/1 1/1 ./. ./. 0/0 0/1 0/1 ./. 1/1 1/1 0/1 1/1 0/0 1/1 0/0 1/1 ./. 1/1 0/0 1/1 1/1 ./. ./. ./. ./. ./. ./. 1/1 ./. 0/1 ./. 1/1 0/1 1/1 ./. 1/1 ./. 0/1 ./. 0/1 1/1 ./. 1/1 0/1 ./. 0/1 0/1 ./. ./. 0/1 0/1 ./. ./. 0/1 ./. 0/1 ./. ./. 0/1 ./. 1/1 0/1 ./. 1/1 ./. ./. 0/1 ./. 1/1 1/1 ./. 1/1 0/1 ./. ./. 0/0 ./. 0/1 1/1 1/1 ./. 1/1 1/1 0/0 ./. ./. 0/1 0/0 ./. ./. 1/1 1/1 1/1 1/1 1/1 0/1 ./. 1/1 0/1 0/1 ./. ./. 0/1 0/1 0/1 0/0 ./. ./. 0/0 1/1 1/1 1/1 0/0 0/0 ./. 0/0 0/0 1/1 1/1 1/1 0/0 0/1 0/1 1/1 0/0 0/1 1/1 ./. ./. 1/1 0/0 ./. 0/1 ./. ./. 1/1 0/0 ./. ./. ./. 1/1 0/1 ./. 0/1 1/1 ./. +chr1 173541560 . CAA C . PASS VC=INDEL;AC=233;AF=0.74;AN=316;refseq.name=NM_178527;refseq.positionType=intron GT 0/0 0/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 1/1 0/0 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 0/0 +chr1 173749093 . T TC . PASS VC=INDEL;AC=316;AF=1;AN=316;refseq.name=NM_014458;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 173755936 . T TGAAG . PASS VC=INDEL;AC=182;AF=0.58;AN=316;refseq.name=NM_014458;refseq.positionType=terminator GT 0/0 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 1/1 1/1 1/1 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/1 0/0 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 0/0 0/0 0/0 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/0 +chr1 173870326 . ACTA A . PASS VC=INDEL;AC=235;AF=0.74;AN=316 GT 0/0 0/1 0/1 0/0 0/1 0/1 0/0 1/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/0 +chr1 174411392 . T TTGTAT . PASS VC=INDEL;AC=251;AF=0.8;AN=314;refseq.name=NM_014857;refseq.positionType=intron GT 0/0 0/1 0/1 0/0 0/1 0/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 +chr1 174524160 . T TAT . PASS VC=INDEL;AC=212;AF=0.67;AN=316;refseq.name=NM_014857;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 1/1 0/1 0/0 1/1 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 +chr1 175131961 . GA G . PASS VC=INDEL;AC=85;AF=0.28;AN=306 GT 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 ./. 1/1 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 ./. 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 ./. 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 1/1 ./. 0/1 0/1 1/1 ./. 0/1 0/0 0/1 +chr1 175299777 . CAT C . PASS VC=INDEL;AC=18;AF=0.06;AN=316;refseq.name=NM_003285;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 +chr1 175355790 . GG G . PASS VC=INDEL;AC=199;AF=0.74;AN=270;refseq.name=NM_003285;refseq.positionType=intron GT 1/1 0/1 1/1 1/1 1/1 ./. 1/1 0/1 1/1 0/1 1/1 0/0 1/1 1/1 0/1 1/1 0/0 0/0 0/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 0/1 ./. 0/1 0/1 1/1 0/1 0/1 0/1 ./. ./. 1/1 0/1 1/1 1/1 1/1 1/1 ./. ./. 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 ./. 0/0 ./. 0/1 0/0 0/0 0/0 ./. ./. 1/1 1/1 1/1 1/1 0/1 1/1 1/1 ./. 0/1 1/1 1/1 0/1 ./. 0/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 ./. 1/1 ./. ./. 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 ./. 0/1 1/1 0/1 1/1 1/1 1/1 ./. 1/1 1/1 0/1 1/1 1/1 0/1 1/1 ./. ./. 0/0 0/1 ./. 0/1 +chr1 175418807 . A AACA . PASS VC=INDEL;AC=118;AF=0.37;AN=316;refseq.name=NM_003285;refseq.positionType=intron GT 0/1 0/0 0/0 0/1 1/1 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 1/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 1/1 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 +chr1 175420618 . A AG . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_003285;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 175443036 . AGGAGA A . PASS VC=INDEL;AC=1;AF=0;AN=316;refseq.name=NM_003285;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 175472120 . C CTAATCAGGATCTTGACATGTGACACAAGATCCTTGAG . PASS VC=INDEL;AC=14;AF=0.04;AN=316;refseq.name=NM_003285;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 175584762 . CT C . PASS VC=INDEL;AC=45;AF=0.14;AN=314;refseq.name=NM_003285;refseq.positionType=intron GT 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 1/1 +chr1 177236388 . C CG . PASS VC=INDEL;AC=167;AF=0.54;AN=312;refseq.name=NM_021165;refseq.positionType=intron GT 1/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/0 1/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/0 ./. 0/1 ./. 0/0 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 1/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 +chr1 177236389 . G GG . PASS VC=INDEL;AC=166;AF=0.53;AN=316;refseq.name=NM_021165;refseq.positionType=intron GT 1/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/0 1/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 1/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 +chr1 177558539 . G GAGA . PASS VC=INDEL;AC=7;AF=0.02;AN=290 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 177558541 . G GAAG . PASS VC=INDEL;AC=10;AF=0.03;AN=296 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 ./. 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 178521563 . TAAGAC T . PASS VC=INDEL;AC=21;AF=0.09;AN=246 GT 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 ./. ./. 0/0 0/0 ./. ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. ./. 0/1 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 ./. 1/1 1/1 ./. ./. 0/0 ./. 0/0 ./. ./. ./. 0/0 0/0 ./. ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/1 0/0 0/1 ./. ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/1 0/1 0/0 0/0 ./. ./. ./. 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 1/1 0/0 1/1 0/1 0/0 0/0 +chr1 179038241 . GT G . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_014864;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 179293907 . CAA C . PASS VC=INDEL;AC=34;AF=0.11;AN=314;refseq.name=NM_003101;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 ./. 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 +chr1 179724329 . G GG . PASS VC=INDEL;AC=307;AF=0.97;AN=316;refseq.name=NM_173509;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 179762445 . GT G . PASS VC=INDEL;AC=85;AF=0.27;AN=316;refseq.name=NM_173509;refseq.positionType=intron GT 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/0 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 1/1 1/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 +chr1 179762446 . TT T . PASS VC=INDEL;AC=85;AF=0.27;AN=316;refseq.name=NM_173509;refseq.positionType=intron GT 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/0 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 1/1 1/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 +chr1 179773170 . CTTGTC C . PASS VC=INDEL;AC=77;AF=0.28;AN=274;refseq.name=NM_173509;refseq.positionType=intron GT 1/1 0/0 0/1 0/1 0/0 0/0 1/1 1/1 ./. 0/0 0/0 0/0 ./. 0/0 1/1 0/0 1/1 0/0 0/0 1/1 0/0 1/1 0/0 0/1 ./. 0/1 0/0 0/1 0/0 1/1 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 ./. ./. 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 ./. 1/1 ./. ./. ./. 0/0 0/0 ./. 0/0 0/1 0/1 0/1 ./. 0/1 1/1 1/1 0/0 ./. 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 ./. 0/1 0/1 0/0 0/1 0/1 ./. 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 ./. 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 ./. 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. 1/1 0/1 +chr1 180108217 . T TTATC . PASS VC=INDEL;AC=229;AF=0.72;AN=316 GT 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/0 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 +chr1 180722815 . TACTC T . PASS VC=INDEL;AC=4;AF=0.01;AN=316;refseq.name=NM_004736;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 180722816 . ACTCA A . PASS VC=INDEL;AC=5;AF=0.02;AN=316;refseq.name=NM_004736;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 180762626 . CAT C . PASS VC=INDEL;AC=12;AF=0.04;AN=296;refseq.name=NM_004736;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 +chr1 180866670 . CCC C . PASS VC=INDEL;AC=73;AF=0.29;AN=256 GT 0/0 0/1 0/1 0/0 ./. 0/0 ./. 0/1 ./. 0/0 ./. 0/1 ./. 0/1 0/0 0/0 0/0 0/1 0/0 0/0 ./. ./. 0/0 ./. 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/1 0/0 0/1 0/1 0/1 0/0 ./. 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 1/1 ./. 0/1 0/1 0/1 ./. 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 ./. 0/1 0/1 0/0 0/1 ./. 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 ./. 0/0 ./. 0/0 0/0 0/1 0/0 0/1 0/0 ./. 0/1 ./. 0/1 ./. 0/1 ./. ./. 0/0 0/0 0/0 0/1 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/0 ./. 0/0 0/0 0/0 0/1 0/1 0/0 ./. 0/1 ./. 0/0 0/0 0/0 0/0 ./. ./. ./. 0/1 0/1 0/1 0/1 +chr1 180974402 . A AA . PASS VC=INDEL;AC=0;AF=0;AN=298;refseq.name=NM_005819;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 +chr1 181233905 . AA A . PASS VC=INDEL;AC=1;AF=0;AN=266 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 ./. 0/0 0/0 ./. ./. ./. 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 +chr1 181456872 . CC C . PASS VC=INDEL;AC=2;AF=0.01;AN=300;refseq.name=NM_000721;refseq.positionType=intron GT ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 181610646 . CT C . PASS VC=INDEL;AC=58;AF=0.18;AN=314;refseq.name=NM_000721;refseq.positionType=intron GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 +chr1 182087446 . G GTCT . PASS VC=INDEL;AC=198;AF=0.68;AN=292 GT 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 ./. 1/1 0/1 0/1 0/1 ./. 0/1 ./. ./. 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 ./. 1/1 0/1 0/1 0/1 1/1 ./. 1/1 1/1 1/1 0/1 0/1 ./. 1/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/1 1/1 ./. 0/1 0/1 0/1 0/0 0/0 1/1 1/1 0/1 0/1 1/1 0/1 0/1 ./. 1/1 ./. 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 ./. 1/1 0/1 1/1 0/0 0/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 +chr1 182739634 . TAAGA T . PASS VC=INDEL;AC=65;AF=0.21;AN=316 GT 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 +chr1 182951675 . AGA A . PASS VC=INDEL;AC=78;AF=0.25;AN=316 GT 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 1/1 0/0 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 1/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 1/1 0/0 0/0 +chr1 183032447 . C CTAAG . PASS VC=INDEL;AC=125;AF=0.4;AN=316;refseq.name=NM_002293;refseq.positionType=intron GT 0/1 1/1 1/1 0/0 0/1 0/0 1/1 0/0 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/1 1/1 1/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 +chr1 183073109 . T TTG . PASS VC=INDEL;AC=125;AF=0.4;AN=316;refseq.name=NM_002293;refseq.positionType=intron GT 0/1 1/1 1/1 0/0 0/1 0/0 1/1 0/0 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/1 1/1 1/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 +chr1 183073111 . G GTG . PASS VC=INDEL;AC=125;AF=0.4;AN=316;refseq.name=NM_002293;refseq.positionType=intron GT 0/1 1/1 1/1 0/0 0/1 0/0 1/1 0/0 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/1 1/1 1/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 +chr1 183077296 . A AG . PASS VC=INDEL;AC=126;AF=0.4;AN=316;refseq.name=NM_002293;refseq.positionType=intron GT 0/1 1/1 1/1 0/0 0/1 0/0 1/1 0/0 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/0 0/0 0/1 1/1 1/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 +chr1 183097956 . G GTTA . PASS VC=INDEL;AC=127;AF=0.4;AN=314;refseq.name=NM_002293;refseq.positionType=intron GT 0/1 1/1 1/1 0/0 0/1 0/0 1/1 0/0 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/0 0/0 0/1 1/1 1/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 +chr1 183145207 . G GTAG . PASS VC=INDEL;AC=35;AF=0.11;AN=312 GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 +chr1 183180446 . GG G . PASS VC=INDEL;AC=54;AF=0.17;AN=316;refseq.name=NM_005562;refseq.positionType=intron GT 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 183330737 . TAA T . PASS VC=INDEL;AC=197;AF=0.63;AN=312;refseq.name=NM_015039;refseq.positionType=intron GT 0/1 1/1 1/1 0/1 1/1 0/0 1/1 0/0 0/1 0/1 ./. 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 ./. 0/0 0/0 0/1 1/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 1/1 1/1 1/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 1/1 0/1 1/1 +chr1 183589923 . A ATCTT . PASS VC=INDEL;AC=117;AF=0.37;AN=314 GT 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 1/1 0/1 0/1 ./. 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/0 0/0 0/1 0/0 0/1 0/0 +chr1 183712910 . AC A . PASS VC=INDEL;AC=131;AF=0.42;AN=312;refseq.name=NM_015149;refseq.positionType=intron GT 1/1 1/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 ./. 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 +chr1 183806728 . T TG . PASS VC=INDEL;AC=229;AF=0.85;AN=270;refseq.name=NM_015149;refseq.positionType=intron GT 1/1 ./. 1/1 ./. ./. 0/1 0/1 ./. 1/1 1/1 0/1 1/1 0/1 ./. 1/1 0/1 1/1 1/1 0/1 ./. 0/1 1/1 1/1 0/1 1/1 1/1 ./. ./. 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 ./. 0/1 ./. ./. 0/0 ./. 1/1 1/1 0/0 1/1 ./. 1/1 0/0 1/1 ./. 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 ./. ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 ./. 0/1 1/1 0/1 1/1 1/1 1/1 ./. 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 ./. 0/1 1/1 1/1 1/1 0/0 1/1 ./. 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/0 1/1 ./. 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 183996005 . C CTATTA . PASS VC=INDEL;AC=27;AF=0.09;AN=316;refseq.name=NM_015101;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 184391018 . C CTA . PASS VC=INDEL;AC=68;AF=0.22;AN=312;refseq.name=NM_030806;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 ./. 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 ./. 0/1 0/1 0/0 0/1 0/0 0/1 0/1 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 +chr1 184561827 . CAGA C . PASS VC=INDEL;AC=47;AF=0.15;AN=316;refseq.name=NM_030806;refseq.positionType=intron GT 0/0 0/1 1/1 0/0 1/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 184577643 . T TC . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_030806;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 185540897 . T TCCAG . PASS VC=INDEL;AC=136;AF=0.48;AN=286 GT 0/0 0/1 0/0 0/1 0/0 ./. 0/1 0/1 0/1 0/1 0/0 0/1 ./. 1/1 ./. 0/1 0/1 0/1 0/0 0/1 ./. 0/1 0/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/1 0/1 ./. 0/0 0/1 0/0 ./. 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/0 0/1 ./. 0/0 0/0 0/1 0/1 1/1 1/1 0/1 ./. 0/1 1/1 1/1 1/1 ./. 0/1 1/1 ./. 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 ./. 0/0 0/0 ./. 0/1 1/1 1/1 0/0 1/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 +chr1 185865550 . C CAT . PASS VC=INDEL;AC=53;AF=0.17;AN=310;refseq.name=NM_031935;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 ./. 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 +chr1 186378142 . CAGTT C . PASS VC=INDEL;AC=55;AF=0.21;AN=266;refseq.name=NM_017847;refseq.positionType=intron GT 0/1 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/1 0/0 ./. 0/1 1/1 0/1 ./. 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 ./. 0/1 0/0 0/1 ./. 0/0 0/0 0/0 1/1 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/1 0/0 1/1 0/0 0/0 0/0 0/0 ./. 0/1 0/0 0/0 ./. 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 ./. ./. 0/0 0/0 0/1 0/1 0/0 1/1 ./. 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 ./. ./. 0/0 0/1 ./. ./. 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 1/1 ./. 0/1 0/0 0/0 ./. ./. 0/0 0/1 0/0 0/0 0/0 0/0 ./. ./. 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 +chr1 186769215 . T TA . PASS VC=INDEL;AC=45;AF=0.14;AN=316 GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 186933480 . T TTAAT . PASS VC=INDEL;AC=135;AF=0.43;AN=316;refseq.name=NM_024420;refseq.positionType=intron GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/0 +chr1 187372829 . AGGCTT A . PASS VC=INDEL;AC=34;AF=0.11;AN=304 GT ./. 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 +chr1 187372830 . GGCTTG G . PASS VC=INDEL;AC=32;AF=0.1;AN=306 GT 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 ./. 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 +chr1 187685847 . CAATT C . PASS VC=INDEL;AC=112;AF=0.36;AN=314 GT 0/1 1/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 ./. 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 +chr1 187781028 . C CT . PASS VC=INDEL;AC=278;AF=0.9;AN=310 GT 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 ./. ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 +chr1 187815820 . A ACAA . PASS VC=INDEL;AC=21;AF=0.07;AN=314 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 1/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +chr1 187899550 . AAA A . PASS VC=INDEL;AC=65;AF=0.21;AN=314 GT 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 +chr1 188075358 . GTAAG G . PASS VC=INDEL;AC=63;AF=0.2;AN=316 GT 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/0 +chr1 188110355 . C CT . PASS VC=INDEL;AC=222;AF=0.71;AN=312 GT 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/0 ./. 0/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 1/1 1/1 ./. 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 0/0 0/1 1/1 1/1 +chr1 188372559 . CAAG C . PASS VC=INDEL;AC=230;AF=0.73;AN=314 GT 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 ./. 0/1 0/1 0/1 1/1 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 188397016 . C CA . PASS VC=INDEL;AC=9;AF=0.03;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +chr1 188526820 . C CT . PASS VC=INDEL;AC=262;AF=0.91;AN=288 GT 1/1 1/1 1/1 1/1 ./. 0/1 ./. 1/1 0/1 1/1 ./. 1/1 1/1 ./. 1/1 0/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 ./. 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 ./. 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 ./. 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 188533586 . G GTTCT . PASS VC=INDEL;AC=290;AF=0.92;AN=316 GT 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 188628449 . CAACT C . PASS VC=INDEL;AC=100;AF=0.32;AN=314 GT 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 ./. 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 1/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 +chr1 189027168 . C CTG . PASS VC=INDEL;AC=146;AF=0.69;AN=212 GT 1/1 ./. ./. ./. ./. ./. 0/1 1/1 0/1 0/1 ./. 0/1 ./. 0/1 ./. 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. ./. ./. ./. 0/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 1/1 ./. ./. 1/1 ./. 1/1 1/1 0/0 1/1 0/0 ./. 1/1 1/1 1/1 1/1 0/1 1/1 0/1 ./. 0/1 1/1 1/1 0/1 0/1 0/1 ./. ./. 1/1 1/1 1/1 0/1 0/1 0/0 ./. 0/1 0/1 ./. ./. 0/1 ./. 1/1 ./. ./. ./. 0/1 0/1 0/1 ./. 1/1 0/1 ./. 0/1 0/1 0/0 0/1 ./. 0/1 ./. 1/1 ./. 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 ./. 1/1 1/1 0/1 ./. ./. 1/1 ./. ./. 1/1 0/1 0/0 1/1 0/1 0/1 0/1 ./. ./. ./. ./. ./. 1/1 0/1 ./. ./. ./. ./. 1/1 1/1 ./. ./. 1/1 1/1 1/1 ./. ./. 1/1 ./. ./. ./. +chr1 189046798 . C CA . PASS VC=INDEL;AC=86;AF=0.27;AN=316 GT 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 +chr1 189087000 . TTA T . PASS VC=INDEL;AC=159;AF=0.53;AN=302 GT 0/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 0/0 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 ./. 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 ./. 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 ./. 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 ./. 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 ./. 0/0 0/1 ./. 0/0 0/1 1/1 +chr1 189190273 . AT A . PASS VC=INDEL;AC=2;AF=0.01;AN=316 GT 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 189547870 . A AAT . PASS VC=INDEL;AC=194;AF=0.79;AN=246 GT 0/1 ./. ./. 1/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/0 1/1 ./. 0/1 0/1 0/1 1/1 1/1 0/1 ./. ./. 0/1 ./. 0/0 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 ./. ./. 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 ./. ./. ./. 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 ./. 0/1 ./. ./. 0/1 1/1 0/0 ./. 1/1 1/1 ./. ./. ./. 0/0 1/1 ./. ./. 1/1 ./. 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 ./. 0/0 1/1 ./. 0/1 1/1 1/1 1/1 ./. ./. 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 ./. ./. 0/1 ./. 1/1 0/1 1/1 ./. 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 ./. ./. 0/1 1/1 1/1 ./. 0/1 1/1 0/1 0/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 +chr1 189629285 . A ATAACT . PASS VC=INDEL;AC=158;AF=0.59;AN=266 GT 0/1 1/1 0/0 1/1 ./. 0/1 1/1 0/1 0/0 0/0 1/1 0/1 ./. 1/1 ./. 0/1 ./. 0/1 0/1 1/1 0/1 ./. ./. 0/1 0/0 ./. 0/0 0/1 0/0 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 ./. 0/1 ./. 0/0 0/0 1/1 0/1 ./. 0/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 ./. 1/1 0/1 0/1 0/0 0/1 ./. 0/1 1/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 ./. ./. 0/1 1/1 1/1 1/1 0/1 ./. 1/1 0/1 0/0 0/1 1/1 1/1 1/1 0/0 0/1 0/1 ./. 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 ./. ./. 0/0 ./. 0/1 ./. 0/1 0/1 ./. 0/1 0/1 0/1 0/1 0/0 0/1 1/1 ./. ./. 1/1 1/1 1/1 ./. 0/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 ./. 0/1 0/1 1/1 1/1 1/1 0/1 0/1 +chr1 189867802 . G GC . PASS VC=INDEL;AC=23;AF=0.07;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 +chr1 190095126 . CTAACA C . PASS VC=INDEL;AC=143;AF=0.45;AN=316;refseq.name=NM_199051;refseq.positionType=intron GT 0/1 0/0 0/1 0/0 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 +chr1 190095129 . ACATAA A . PASS VC=INDEL;AC=143;AF=0.45;AN=316;refseq.name=NM_199051;refseq.positionType=intron GT 0/1 0/0 0/1 0/0 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 +chr1 190636901 . C CTAA . PASS VC=INDEL;AC=131;AF=0.42;AN=314 GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 +chr1 190886420 . AA A . PASS VC=INDEL;AC=76;AF=0.26;AN=292 GT 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 ./. 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 ./. 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 ./. 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 ./. 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 ./. 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 ./. 0/1 ./. 0/0 0/0 0/1 0/1 ./. 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 ./. 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 ./. ./. 0/0 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 +chr1 191196527 . A AAT . PASS VC=INDEL;AC=191;AF=0.6;AN=316 GT 0/0 0/1 1/1 1/1 1/1 0/0 1/1 0/0 0/1 1/1 0/0 0/1 1/1 0/0 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 1/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 +chr1 191340485 . TTAGA T . PASS VC=INDEL;AC=175;AF=0.59;AN=296 GT 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 ./. 0/1 1/1 1/1 1/1 ./. 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 1/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 ./. 0/0 ./. 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 ./. 0/1 ./. ./. 0/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 ./. 0/1 0/0 0/1 0/1 0/1 ./. 0/1 0/1 0/0 0/1 ./. 0/1 0/1 0/1 0/1 1/1 0/1 +chr1 191464816 . A ATTA . PASS VC=INDEL;AC=213;AF=0.7;AN=306 GT 0/0 0/0 0/0 0/1 0/0 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 1/1 0/0 1/1 ./. 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 ./. 0/0 0/1 1/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 ./. 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 0/0 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 +chr1 191588586 . C CA . PASS VC=INDEL;AC=190;AF=0.61;AN=310 GT 1/1 0/0 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/0 ./. 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/0 1/1 1/1 0/1 0/1 0/0 1/1 0/1 1/1 0/0 1/1 1/1 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 0/0 0/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 0/0 0/0 ./. 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 +chr1 191588587 . A AA . PASS VC=INDEL;AC=186;AF=0.61;AN=304 GT 1/1 0/0 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/1 ./. 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/0 1/1 1/1 0/1 0/1 0/0 1/1 0/1 1/1 0/0 1/1 1/1 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 ./. 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 ./. 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 ./. 0/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 0/0 0/0 ./. 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 +chr1 191752595 . T TCTTT . PASS VC=INDEL;AC=132;AF=0.42;AN=316 GT 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/1 1/1 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/0 0/0 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 0/0 0/0 +chr1 192047581 . TT T . PASS VC=INDEL;AC=1;AF=0;AN=314 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 192460381 . T TT . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 192612585 . T TCA . PASS VC=INDEL;AC=80;AF=0.25;AN=316;refseq.name=NM_002927;refseq.positionType=intron GT 0/0 0/1 0/1 0/0 1/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/0 1/1 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 1/1 1/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 +chr1 192726770 . C CT . PASS VC=INDEL;AC=121;AF=0.39;AN=314 GT 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 1/1 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 ./. 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 +chr1 193118950 . AGACT A . PASS VC=INDEL;AC=7;AF=0.02;AN=316;refseq.name=NM_024529;refseq.positionType=intron GT 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 193158515 . CTG C . PASS VC=INDEL;AC=7;AF=0.02;AN=316;refseq.name=NM_003783;refseq.positionType=promoter GT 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 193261423 . AAAGTA A . PASS VC=INDEL;AC=7;AF=0.02;AN=316 GT 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 193421510 . A ATCT . PASS VC=INDEL;AC=102;AF=0.33;AN=310 GT 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 1/1 0/1 1/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/1 1/1 ./. 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/0 0/1 1/1 0/0 1/1 ./. 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 +chr1 193482947 . CAA C . PASS VC=INDEL;AC=71;AF=0.22;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/0 1/1 0/0 1/1 0/1 1/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 1/1 +chr1 193569090 . C CG . PASS VC=INDEL;AC=85;AF=0.27;AN=312 GT 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 ./. 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 +chr1 193877310 . GG G . PASS VC=INDEL;AC=106;AF=0.34;AN=316 GT 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 1/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 1/1 0/0 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 +chr1 193881567 . T TT . PASS VC=INDEL;AC=4;AF=0.01;AN=314 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 194004698 . TCTT T . PASS VC=INDEL;AC=34;AF=0.11;AN=314 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 +chr1 194047765 . TAT T . PASS VC=INDEL;AC=48;AF=0.2;AN=238 GT ./. 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 ./. 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/0 ./. 0/1 0/0 0/1 0/0 0/1 ./. 0/0 0/1 0/1 0/0 0/0 0/0 ./. ./. 0/0 ./. 0/1 0/1 0/0 0/1 ./. ./. 0/0 ./. ./. 0/1 0/1 0/0 0/0 ./. ./. ./. 0/0 0/0 0/1 0/0 ./. 0/1 ./. 0/1 0/0 0/0 ./. 0/0 0/0 0/1 0/1 0/0 ./. 0/1 0/0 0/1 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/1 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 ./. ./. ./. 0/0 ./. 0/0 0/1 0/0 0/1 ./. 0/1 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/1 ./. 0/0 0/0 0/0 ./. ./. 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 ./. 0/1 ./. 1/1 0/1 ./. 0/0 ./. 0/0 ./. 0/0 0/0 ./. 0/0 0/1 +chr1 194160203 . TTAGT T . PASS VC=INDEL;AC=25;AF=0.12;AN=206 GT 0/1 0/0 0/1 0/0 ./. 0/1 0/0 ./. ./. ./. 0/1 ./. 0/0 ./. 0/1 ./. 0/0 0/1 0/1 0/1 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 ./. ./. ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/1 0/0 ./. ./. 0/1 0/0 ./. ./. ./. 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/1 ./. 0/0 0/0 ./. ./. 0/0 ./. 0/0 ./. ./. ./. ./. 0/1 ./. 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/1 ./. 0/0 ./. 0/0 ./. 0/0 0/0 ./. 0/0 ./. 0/0 ./. 0/0 0/0 0/1 ./. ./. 0/0 ./. 0/0 0/0 ./. ./. 0/1 ./. ./. 0/1 0/1 ./. 0/1 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/1 +chr1 194193740 . A AG . PASS VC=INDEL;AC=316;AF=1;AN=316 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 194339262 . ATGT A . PASS VC=INDEL;AC=67;AF=0.21;AN=316 GT 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 +chr1 194487871 . C CCTAT . PASS VC=INDEL;AC=302;AF=0.97;AN=312 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 194520551 . GG G . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 194563981 . TAAT T . PASS VC=INDEL;AC=169;AF=0.53;AN=316 GT 1/1 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 +chr1 194738670 . T TTT . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 194763917 . CATG C . PASS VC=INDEL;AC=267;AF=0.84;AN=316 GT 1/1 1/1 1/1 0/0 1/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 0/0 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 +chr1 195047681 . GG G . PASS VC=INDEL;AC=29;AF=0.1;AN=278 GT 0/0 0/0 ./. 0/0 0/0 0/0 1/1 1/1 0/0 ./. 0/0 1/1 0/0 0/0 ./. 0/0 0/1 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/1 ./. ./. ./. 0/1 ./. 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/1 0/0 ./. ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 ./. 0/1 0/0 0/1 0/0 1/1 1/1 +chr1 195637390 . TA T . PASS VC=INDEL;AC=90;AF=0.29;AN=314 GT 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 1/1 1/1 0/0 0/0 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 1/1 0/1 0/0 1/1 0/0 0/1 0/0 1/1 1/1 0/1 0/1 0/0 1/1 1/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/1 +chr1 195637391 . AA A . PASS VC=INDEL;AC=89;AF=0.28;AN=316 GT 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 1/1 1/1 0/0 0/0 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/0 1/1 0/0 0/1 0/0 1/1 1/1 0/1 0/1 0/0 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/1 +chr1 195877296 . T TAA . PASS VC=INDEL;AC=232;AF=0.73;AN=316 GT 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 1/1 1/1 1/1 +chr1 195877297 . A AAA . PASS VC=INDEL;AC=232;AF=0.73;AN=316 GT 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 1/1 1/1 1/1 +chr1 195934123 . CCTAT C . PASS VC=INDEL;AC=185;AF=0.59;AN=312 GT 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/0 ./. 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 ./. 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 +chr1 195934125 . TATCT T . PASS VC=INDEL;AC=184;AF=0.59;AN=312 GT 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 0/0 0/1 ./. 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 ./. 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 +chr1 196163677 . TT T . PASS VC=INDEL;AC=284;AF=0.9;AN=316 GT 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 +chr1 196344374 . C CA . PASS VC=INDEL;AC=153;AF=0.53;AN=290;refseq.name=NM_198503;refseq.positionType=intron GT 0/0 0/0 0/0 ./. 0/0 ./. 0/0 1/1 1/1 0/0 1/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/0 0/0 0/1 ./. 0/0 0/1 0/0 ./. 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/0 1/1 0/1 0/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 0/1 ./. 0/1 0/1 0/1 0/1 ./. 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 ./. 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 0/1 ./. ./. 0/0 +chr1 196448625 . ATG A . PASS VC=INDEL;AC=7;AF=0.03;AN=266;refseq.name=NM_198503;refseq.positionType=intron GT ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/1 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 ./. 0/0 ./. 0/0 ./. 0/1 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 +chr1 196448626 . TGTA T . PASS VC=INDEL;AC=8;AF=0.03;AN=302;refseq.name=NM_198503;refseq.positionType=intron GT ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 +chr1 197406760 . GAA G . PASS VC=INDEL;AC=78;AF=0.25;AN=312;refseq.name=NM_201253;refseq.positionType=intron GT 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/0 1/1 ./. 0/1 0/1 0/0 0/0 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 +chr1 197613756 . ACCT A . PASS VC=INDEL;AC=25;AF=0.08;AN=316;refseq.name=NM_144977;refseq.positionType=intron GT 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 +chr1 197690664 . T TG . PASS VC=INDEL;AC=291;AF=0.92;AN=316;refseq.name=NM_144977;refseq.positionType=intron GT 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 +chr1 198792990 . T TG . PASS VC=INDEL;AC=131;AF=0.41;AN=316 GT 0/1 0/1 0/0 1/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 +chr1 198940301 . C CCTT . PASS VC=INDEL;AC=258;AF=0.82;AN=316 GT 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 0/0 1/1 +chr1 198940306 . T TTCT . PASS VC=INDEL;AC=258;AF=0.82;AN=316 GT 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 0/0 1/1 +chr1 199277515 . AC A . PASS VC=INDEL;AC=36;AF=0.11;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 +chr1 200575750 . AAATA A . PASS VC=INDEL;AC=97;AF=0.31;AN=314;refseq.name=NM_014875;refseq.positionType=intron GT 0/0 0/0 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 ./. 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/1 1/1 0/0 0/1 1/1 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/1 1/1 1/1 1/1 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 +chr1 201173407 . AA A . PASS VC=INDEL;AC=56;AF=0.18;AN=314 GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 ./. 0/0 +chr1 201288249 . TATC T . PASS VC=INDEL;AC=209;AF=0.66;AN=316;refseq.name=NM_000299;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 1/1 0/0 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 +chr1 201457641 . AA A . PASS VC=INDEL;AC=55;AF=0.18;AN=310;refseq.name=NM_004078;refseq.positionType=intron GT 1/1 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 1/1 1/1 +chr1 201587178 . CA C . PASS VC=INDEL;AC=145;AF=0.47;AN=310 GT 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 1/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 1/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 ./. 0/1 1/1 ./. 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 +chr1 201733889 . G GG . PASS VC=INDEL;AC=46;AF=0.15;AN=316;refseq.name=NM_020443;refseq.positionType=intron GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 +chr1 203792216 . AA A . PASS VC=INDEL;AC=265;AF=0.93;AN=286;refseq.name=NM_014827;refseq.positionType=intron GT 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 ./. 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 ./. ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 ./. 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 0/1 0/1 ./. 1/1 ./. ./. 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 ./. 0/1 0/1 1/1 0/1 1/1 0/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 0/1 1/1 ./. ./. 1/1 +chr1 203829389 . CTCAAC C . PASS VC=INDEL;AC=195;AF=0.62;AN=316;refseq.name=NM_003094;refseq.positionType=promoter GT 0/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 1/1 0/0 1/1 1/1 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 1/1 0/1 +chr1 203848383 . C CTT . PASS VC=INDEL;AC=275;AF=0.87;AN=316 GT 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 +chr1 203848384 . T TTT . PASS VC=INDEL;AC=275;AF=0.87;AN=316 GT 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 +chr1 204049028 . T TG . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_005686;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 204452618 . T TGT . PASS VC=INDEL;AC=141;AF=0.47;AN=300;refseq.name=NM_002646;refseq.positionType=intron GT 1/1 0/0 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 ./. 0/0 0/0 0/1 1/1 0/1 0/1 0/1 ./. 1/1 0/1 0/1 1/1 1/1 ./. 1/1 0/1 0/0 1/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 ./. 1/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 ./. 0/1 0/1 0/1 0/1 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 ./. 1/1 0/1 0/0 0/1 0/0 1/1 1/1 +chr1 205036040 . T TG . PASS VC=INDEL;AC=69;AF=0.23;AN=302;refseq.name=NM_005076;refseq.positionType=intron GT 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 1/1 ./. 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 ./. 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 ./. 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 ./. 0/0 0/0 0/1 0/1 0/1 ./. 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 +chr1 205036041 . G GG . PASS VC=INDEL;AC=71;AF=0.23;AN=310;refseq.name=NM_005076;refseq.positionType=intron GT 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 ./. 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 +chr1 206303222 . C CAGCCTAGCT . PASS VC=INDEL;AC=105;AF=0.33;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/0 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/0 +chr1 206571046 . G GA . PASS VC=INDEL;AC=2;AF=0.01;AN=290;refseq.name=NM_015326;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. ./. 0/0 ./. +chr1 206862605 . G GA . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_004759;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 206955760 . TGTAA T . PASS VC=INDEL;AC=95;AF=0.31;AN=310 GT 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 0/0 1/1 0/1 1/1 1/1 1/1 0/0 0/0 0/1 0/0 0/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/0 ./. 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 +chr1 207260285 . T TCAATTCACAGGAGTATGTGA . PASS VC=INDEL;AC=197;AF=0.62;AN=316;refseq.name=NM_001017365;refseq.positionType=promoter GT 1/1 0/1 1/1 0/0 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/0 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 1/1 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 +chr1 207277350 . CC C . PASS VC=INDEL;AC=201;AF=0.64;AN=316;refseq.name=NM_000715;refseq.positionType=promoter GT 0/0 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 1/1 0/0 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 +chr1 207641329 . TTAAG T . PASS VC=INDEL;AC=13;AF=0.06;AN=216;refseq.name=NM_001006658;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. ./. ./. ./. ./. ./. ./. 0/0 ./. 0/0 0/1 0/0 ./. 0/0 ./. ./. ./. ./. 0/0 ./. 0/1 ./. 0/0 0/0 ./. ./. ./. ./. 0/0 0/0 0/1 ./. ./. ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/1 ./. 0/0 ./. ./. 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 1/1 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/0 0/0 ./. ./. 0/0 ./. 0/0 ./. ./. 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 ./. 0/0 ./. ./. 0/0 ./. +chr1 207824638 . A AATTC . PASS VC=INDEL;AC=153;AF=0.48;AN=316;refseq.name=NM_175710;refseq.positionType=intron GT 0/0 0/1 0/0 1/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/0 1/1 1/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 +chr1 208201207 . GT G . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_025179;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 208514674 . GTTAC G . PASS VC=INDEL;AC=165;AF=0.53;AN=314 GT 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/0 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 1/1 1/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 ./. 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 0/0 +chr1 208514676 . TACTT T . PASS VC=INDEL;AC=166;AF=0.53;AN=314 GT 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/0 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 1/1 1/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 ./. 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 0/0 +chr1 208609280 . GGAAG G . PASS VC=INDEL;AC=55;AF=0.21;AN=256 GT 0/0 ./. 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/1 0/1 1/1 0/1 ./. 0/1 ./. 1/1 0/1 ./. 0/1 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 ./. 0/0 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 ./. 1/1 0/0 1/1 0/1 ./. ./. 0/1 1/1 ./. ./. 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 1/1 ./. 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. ./. 0/0 ./. 0/0 0/1 0/0 ./. 0/0 ./. ./. 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/0 0/1 0/0 0/1 0/0 ./. 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 +chr1 208643013 . CA C . PASS VC=INDEL;AC=36;AF=0.12;AN=310 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 ./. 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 208643015 . AA A . PASS VC=INDEL;AC=39;AF=0.12;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 208763800 . C CA . PASS VC=INDEL;AC=175;AF=0.55;AN=316 GT 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/0 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/0 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 +chr1 209124169 . T TA . PASS VC=INDEL;AC=226;AF=0.72;AN=316 GT 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 0/1 0/0 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 +chr1 209124171 . A AA . PASS VC=INDEL;AC=226;AF=0.72;AN=316 GT 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 0/1 0/0 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 +chr1 209639686 . A AG . PASS VC=INDEL;AC=203;AF=0.64;AN=316 GT 0/0 0/1 0/1 0/1 1/1 0/1 0/0 1/1 1/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/0 1/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 +chr1 209662878 . T TG . PASS VC=INDEL;AC=205;AF=0.65;AN=316 GT 0/0 0/1 0/1 0/1 1/1 0/1 0/0 1/1 1/1 0/1 1/1 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 +chr1 209936964 . T TCA . PASS VC=INDEL;AC=184;AF=0.58;AN=316;refseq.name=NM_025228;refseq.positionType=intron GT 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 1/1 1/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/0 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/0 +chr1 210007940 . TCT T . PASS VC=INDEL;AC=190;AF=0.6;AN=316;refseq.name=NM_014388;refseq.positionType=intron GT 1/1 0/1 0/1 1/1 0/1 0/0 0/1 1/1 1/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 1/1 0/0 0/0 1/1 0/1 0/0 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 +chr1 210483472 . TG T . PASS VC=INDEL;AC=13;AF=0.04;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 210485101 . A AGGAC . PASS VC=INDEL;AC=232;AF=0.8;AN=290 GT 0/0 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 ./. 1/1 0/1 0/1 1/1 1/1 1/1 ./. ./. 0/1 0/1 0/1 0/1 ./. 1/1 0/1 1/1 0/0 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 ./. 0/0 1/1 0/1 0/0 ./. 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 0/0 1/1 0/1 1/1 1/1 0/1 1/1 1/1 ./. 0/1 ./. 1/1 0/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 ./. +chr1 210713503 . TT T . PASS VC=INDEL;AC=303;AF=0.96;AN=316;refseq.name=NM_018194;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 211710916 . CC C . PASS VC=INDEL;AC=55;AF=0.17;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 211786200 . TA T . PASS VC=INDEL;AC=147;AF=0.56;AN=264 GT ./. 1/1 1/1 1/1 1/1 0/0 1/1 0/0 0/0 ./. 0/0 1/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 ./. ./. 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 0/1 0/0 ./. ./. ./. 0/0 0/0 0/1 0/0 ./. 0/0 0/0 ./. 0/0 ./. 1/1 0/0 0/1 1/1 0/0 0/0 0/0 ./. 0/0 0/0 ./. ./. ./. 0/0 ./. 0/1 0/1 ./. ./. 0/0 ./. 0/0 1/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 1/1 0/0 0/1 ./. 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 ./. ./. 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/1 0/1 ./. 1/1 0/0 0/0 1/1 ./. 1/1 0/1 +chr1 212767202 . TTT T . PASS VC=INDEL;AC=63;AF=0.2;AN=316;refseq.name=NM_001030287;refseq.positionType=intron GT 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 +chr1 213150090 . T TGT . PASS VC=INDEL;AC=64;AF=0.21;AN=300;refseq.name=NM_024749;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 ./. 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 ./. 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 ./. 1/1 0/1 0/0 0/1 0/1 0/1 ./. 0/1 0/0 ./. ./. 0/0 +chr1 213160084 . A AG . PASS VC=INDEL;AC=129;AF=0.41;AN=312;refseq.name=NM_024749;refseq.positionType=intron GT 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 1/1 0/0 0/1 0/1 0/0 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 ./. 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/1 ./. 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 +chr1 213160085 . G GG . PASS VC=INDEL;AC=129;AF=0.41;AN=314;refseq.name=NM_024749;refseq.positionType=intron GT 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 1/1 0/0 0/1 0/1 0/0 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/1 ./. 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 +chr1 213393510 . AG A . PASS VC=INDEL;AC=62;AF=0.2;AN=316;refseq.name=NM_012424;refseq.positionType=intron GT 0/1 0/1 0/1 1/1 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 1/1 0/1 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 +chr1 213790399 . C CGA . PASS VC=INDEL;AC=2;AF=0.01;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 214136369 . CTTC C . PASS VC=INDEL;AC=93;AF=0.29;AN=316 GT 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 +chr1 214365999 . C CTG . PASS VC=INDEL;AC=164;AF=0.59;AN=278 GT 1/1 0/1 1/1 0/0 0/1 ./. 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/0 0/1 ./. 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 1/1 ./. 0/0 0/1 1/1 0/0 0/0 0/0 ./. 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 ./. 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/1 ./. 0/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/1 ./. 0/1 0/1 ./. 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/0 1/1 0/1 1/1 0/0 ./. 0/1 0/1 ./. ./. ./. 1/1 ./. ./. 1/1 0/1 ./. 1/1 1/1 1/1 0/1 ./. 0/1 0/0 0/1 0/0 ./. 1/1 1/1 0/0 0/0 0/0 0/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 ./. 0/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 ./. 0/1 1/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 +chr1 214573392 . G GTTC . PASS VC=INDEL;AC=271;AF=0.86;AN=316;refseq.name=NM_005401;refseq.positionType=intron GT 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/0 0/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 215120715 . AA A . PASS VC=INDEL;AC=36;AF=0.12;AN=312 GT 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 ./. 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 ./. 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 +chr1 216179286 . T TCAAT . PASS VC=INDEL;AC=30;AF=0.09;AN=316;refseq.name=NM_206933;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +chr1 216298294 . C CAG . PASS VC=INDEL;AC=113;AF=0.36;AN=316;refseq.name=NM_206933;refseq.positionType=intron GT 0/0 1/1 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 +chr1 216298296 . G GAG . PASS VC=INDEL;AC=112;AF=0.35;AN=316;refseq.name=NM_206933;refseq.positionType=intron GT 0/0 1/1 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 +chr1 216454053 . A AACA . PASS VC=INDEL;AC=224;AF=0.71;AN=316;refseq.name=NM_206933;refseq.positionType=intron GT 0/0 1/1 0/1 0/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 +chr1 216780749 . C CC . PASS VC=INDEL;AC=10;AF=0.03;AN=316;refseq.name=NM_206594;refseq.positionType=intron GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 +chr1 216835074 . A AGTTT . PASS VC=INDEL;AC=89;AF=0.28;AN=316;refseq.name=NM_206594;refseq.positionType=intron GT 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/1 +chr1 217026745 . AA A . PASS VC=INDEL;AC=13;AF=0.04;AN=304;refseq.name=NM_206594;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 +chr1 217057204 . G GC . PASS VC=INDEL;AC=231;AF=0.73;AN=316;refseq.name=NM_206594;refseq.positionType=intron GT 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 1/1 1/1 0/0 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 +chr1 217363476 . CTATT C . PASS VC=INDEL;AC=40;AF=0.19;AN=212 GT 0/0 1/1 1/1 0/0 0/1 ./. ./. 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/1 0/0 0/0 0/0 1/1 0/0 1/1 0/1 0/0 ./. 0/0 ./. 0/0 0/1 0/0 1/1 0/0 1/1 1/1 0/0 ./. 1/1 1/1 ./. ./. ./. 0/0 0/0 ./. 1/1 0/0 ./. 0/1 0/0 0/0 ./. 0/1 0/0 ./. ./. ./. ./. ./. ./. ./. 0/0 0/0 ./. 0/0 0/1 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/1 0/0 ./. ./. ./. 0/0 ./. ./. 0/0 0/0 ./. 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 ./. 0/1 0/0 0/0 ./. 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. ./. 0/0 ./. ./. 0/0 ./. ./. ./. ./. ./. ./. ./. +chr1 218217904 . C CG . PASS VC=INDEL;AC=130;AF=0.43;AN=302 GT 0/1 0/1 0/1 ./. 1/1 0/1 ./. 0/1 0/0 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 ./. 1/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 ./. 1/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/0 0/1 1/1 ./. 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 ./. 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. +chr1 218473680 . CGAG C . PASS VC=INDEL;AC=16;AF=0.05;AN=316;refseq.name=NM_016052;refseq.positionType=intron GT 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 218574584 . A AT . PASS VC=INDEL;AC=21;AF=0.09;AN=236;refseq.name=NM_003238;refseq.positionType=intron GT 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 ./. ./. 0/0 0/0 ./. 0/0 0/1 0/1 0/1 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/1 ./. 0/1 ./. 0/0 ./. 0/1 0/1 0/1 0/0 ./. 0/1 0/0 0/1 0/0 0/0 ./. 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. ./. ./. 0/1 0/0 ./. 0/0 ./. 0/0 0/0 ./. 0/0 ./. 0/0 ./. ./. 0/0 0/0 ./. 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 ./. ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. ./. 0/0 ./. 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 218845277 . TTTGT T . PASS VC=INDEL;AC=97;AF=0.31;AN=314 GT 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 1/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 ./. 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 219001503 . T TC . PASS VC=INDEL;AC=176;AF=0.56;AN=316 GT 1/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 1/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 1/1 0/1 0/1 1/1 +chr1 219293844 . A ACT . PASS VC=INDEL;AC=274;AF=0.89;AN=308 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 ./. 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 ./. 1/1 0/0 1/1 1/1 1/1 1/1 1/1 +chr1 219293846 . T TCT . PASS VC=INDEL;AC=199;AF=0.9;AN=222 GT 1/1 1/1 ./. 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 ./. ./. ./. 1/1 1/1 ./. 1/1 1/1 1/1 ./. 0/1 ./. ./. 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. ./. ./. 1/1 ./. ./. ./. 1/1 1/1 ./. 1/1 ./. 1/1 ./. ./. 0/1 0/0 1/1 ./. 1/1 1/1 ./. ./. 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. ./. 1/1 1/1 0/1 ./. 0/1 ./. 1/1 0/1 0/1 1/1 0/1 0/1 ./. 1/1 1/1 0/1 ./. 1/1 1/1 1/1 ./. 1/1 ./. ./. 1/1 1/1 ./. ./. 0/1 ./. 1/1 1/1 1/1 1/1 1/1 ./. ./. ./. 1/1 ./. 1/1 1/1 1/1 ./. 0/1 1/1 ./. 0/1 ./. 1/1 0/1 ./. 0/0 ./. 1/1 ./. 1/1 ./. +chr1 219467766 . AAC A . PASS VC=INDEL;AC=102;AF=0.32;AN=314 GT 0/0 1/1 1/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/0 1/1 1/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 ./. 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 +chr1 219839015 . C CATGG . PASS VC=INDEL;AC=73;AF=0.24;AN=306 GT 1/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 1/1 0/0 0/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/0 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 ./. 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 1/1 0/1 +chr1 221137225 . T TCTT . PASS VC=INDEL;AC=159;AF=0.61;AN=262 GT 0/0 ./. 0/1 0/1 0/1 ./. 1/1 1/1 ./. 0/1 1/1 1/1 0/1 ./. 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/0 0/1 1/1 0/1 ./. 0/1 0/1 0/1 0/1 1/1 ./. 0/1 0/1 0/0 0/1 0/1 ./. ./. 0/1 0/0 0/1 0/1 ./. 1/1 0/1 1/1 ./. 0/1 1/1 0/0 0/1 ./. ./. ./. 0/1 ./. 0/1 ./. 0/1 1/1 0/1 0/1 ./. 0/1 0/1 0/0 0/0 ./. 0/1 ./. 0/1 0/1 1/1 0/1 1/1 0/0 1/1 ./. 1/1 1/1 ./. 0/1 0/1 0/0 ./. 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 ./. 1/1 0/1 1/1 0/1 1/1 ./. 1/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 ./. 1/1 0/1 0/1 0/1 ./. 0/1 0/0 1/1 ./. ./. 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/0 +chr1 221202698 . GA G . PASS VC=INDEL;AC=82;AF=0.26;AN=310 GT 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 1/1 ./. 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 +chr1 221279126 . CC C . PASS VC=INDEL;AC=0;AF=0;AN=312 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 221315912 . TTCT T . PASS VC=INDEL;AC=94;AF=0.3;AN=312 GT 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 1/1 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/0 +chr1 222205539 . AATTGACC A . PASS VC=INDEL;AC=90;AF=0.29;AN=310 GT 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 ./. 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 +chr1 222493300 . T TGA . PASS VC=INDEL;AC=310;AF=0.98;AN=316 GT 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 222493301 . G GAG . PASS VC=INDEL;AC=310;AF=0.98;AN=316 GT 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 222990213 . ATTTG A . PASS VC=INDEL;AC=9;AF=0.04;AN=254 GT 0/1 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. ./. 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 ./. ./. ./. ./. 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. ./. ./. 0/0 ./. 0/0 0/0 0/0 ./. ./. ./. ./. 0/0 0/0 0/1 +chr1 223387015 . CTG C . PASS VC=INDEL;AC=6;AF=0.02;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 223657734 . A ATGAG . PASS VC=INDEL;AC=231;AF=0.99;AN=234 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. ./. ./. 1/1 ./. 1/1 1/1 ./. 1/1 1/1 1/1 ./. ./. 1/1 0/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 ./. 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. ./. ./. ./. 1/1 1/1 ./. 1/1 1/1 ./. 1/1 ./. 1/1 1/1 ./. 1/1 ./. ./. 0/1 ./. 1/1 ./. 1/1 1/1 1/1 1/1 ./. 1/1 0/1 ./. 1/1 1/1 1/1 ./. 1/1 ./. ./. 1/1 1/1 1/1 ./. 1/1 ./. 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 ./. ./. 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. ./. ./. 1/1 1/1 1/1 1/1 1/1 +chr1 223984835 . G GAA . PASS VC=INDEL;AC=194;AF=0.63;AN=306;refseq.name=NM_001031685;refseq.positionType=intron GT ./. 1/1 0/1 ./. 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 ./. 0/1 0/0 ./. 0/1 0/0 0/0 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 ./. 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/0 +chr1 224264255 . A AG . PASS VC=INDEL;AC=150;AF=0.66;AN=228 GT 0/1 1/1 0/1 0/1 1/1 ./. 0/1 ./. 1/1 1/1 ./. ./. ./. 1/1 ./. 0/1 0/0 ./. ./. 0/1 1/1 0/1 0/1 0/1 ./. 0/1 1/1 1/1 1/1 1/1 0/1 ./. 1/1 ./. 0/1 0/1 0/0 1/1 0/0 1/1 1/1 1/1 ./. 1/1 ./. 0/1 1/1 ./. 0/1 1/1 1/1 1/1 1/1 1/1 ./. 0/1 ./. 1/1 1/1 0/1 1/1 1/1 ./. 0/1 1/1 0/1 1/1 ./. 1/1 ./. 0/1 1/1 0/0 ./. 1/1 1/1 ./. ./. 1/1 1/1 0/1 ./. 0/0 0/1 0/1 ./. 0/0 1/1 0/1 0/1 1/1 ./. 1/1 ./. ./. 1/1 0/0 0/1 ./. 1/1 0/0 ./. 0/1 0/0 0/1 ./. ./. 1/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 ./. 0/0 0/1 0/1 1/1 0/1 ./. 0/0 1/1 ./. ./. ./. ./. 1/1 ./. 1/1 0/1 0/1 1/1 0/1 0/1 1/1 ./. 1/1 ./. ./. 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/1 ./. 0/1 0/1 0/1 ./. ./. +chr1 224264346 . TGAG T . PASS VC=INDEL;AC=154;AF=0.63;AN=244 GT 0/1 1/1 0/1 0/1 1/1 ./. ./. 1/1 ./. 1/1 0/0 1/1 1/1 ./. 0/1 ./. 0/1 ./. 1/1 0/1 1/1 0/1 0/1 ./. 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 ./. 0/1 0/1 0/0 ./. 0/0 1/1 1/1 1/1 0/1 1/1 ./. 0/1 1/1 ./. 0/1 1/1 1/1 1/1 1/1 1/1 ./. 0/1 ./. 1/1 1/1 0/1 1/1 1/1 0/1 0/1 ./. ./. ./. 0/1 ./. 1/1 0/1 ./. 0/0 ./. ./. 1/1 0/1 ./. 1/1 ./. 0/1 ./. 0/0 0/1 0/1 ./. 0/0 1/1 0/1 0/1 ./. 1/1 ./. 0/1 0/1 1/1 0/0 0/1 ./. 1/1 0/0 0/0 0/1 0/0 0/1 1/1 1/1 1/1 1/1 ./. 0/1 0/1 0/1 0/0 1/1 0/1 ./. 0/1 0/1 ./. 0/1 0/1 ./. 0/1 0/0 0/0 1/1 ./. 0/1 1/1 0/1 ./. 0/1 1/1 0/1 ./. 1/1 0/1 0/1 ./. 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 ./. 1/1 0/1 +chr1 224833844 . A AAGACGTAAGACAGT . PASS VC=INDEL;AC=215;AF=0.68;AN=314;refseq.name=NM_152495;refseq.positionType=intron GT 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 1/1 1/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 1/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 ./. 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/0 +chr1 225662220 . CT C . PASS VC=INDEL;AC=203;AF=0.66;AN=306 GT 0/1 1/1 0/1 0/1 1/1 0/1 ./. 0/0 ./. 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/0 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 ./. 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 ./. 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 ./. 0/0 0/1 1/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 +chr1 225974486 . T TG . PASS VC=INDEL;AC=187;AF=0.6;AN=310;refseq.name=NM_003133;refseq.positionType=intron GT 0/1 0/1 0/0 1/1 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 1/1 0/1 1/1 0/1 0/0 0/0 1/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 0/0 0/1 0/0 ./. 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 ./. 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 ./. 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 +chr1 225974487 . G GG . PASS VC=INDEL;AC=189;AF=0.6;AN=314;refseq.name=NM_003133;refseq.positionType=intron GT 0/1 0/1 0/0 1/1 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 1/1 0/0 1/1 0/1 0/0 0/0 1/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 0/0 0/1 0/0 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 ./. 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 +chr1 226014266 . ATGG A . PASS VC=INDEL;AC=30;AF=0.1;AN=310;refseq.name=NM_000120;refseq.positionType=intron GT 0/0 0/1 1/1 0/0 0/1 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. +chr1 226014267 . TGGT T . PASS VC=INDEL;AC=31;AF=0.1;AN=316;refseq.name=NM_000120;refseq.positionType=intron GT 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 226878226 . ACTC A . PASS VC=INDEL;AC=45;AF=0.15;AN=306;refseq.name=NM_002221;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 1/1 0/0 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 1/1 ./. 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 +chr1 226878233 . CTAC C . PASS VC=INDEL;AC=60;AF=0.21;AN=292;refseq.name=NM_002221;refseq.positionType=intron GT 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/1 ./. ./. 1/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 ./. 1/1 ./. ./. 0/0 0/0 0/0 1/1 0/0 0/1 0/1 ./. 0/0 ./. 0/0 0/0 0/1 0/1 0/0 ./. 0/0 ./. 0/1 0/0 +chr1 226913049 . GCCA G . PASS VC=INDEL;AC=14;AF=0.05;AN=302;refseq.name=NM_002221;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 ./. 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 226913051 . CACC C . PASS VC=INDEL;AC=6;AF=0.02;AN=280;refseq.name=NM_002221;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/1 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/0 ./. 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 227051261 . G GC . PASS VC=INDEL;AC=21;AF=0.07;AN=314 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 227252431 . TTTC T . PASS VC=INDEL;AC=21;AF=0.07;AN=316;refseq.name=NM_003607;refseq.positionType=intron GT 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 +chr1 227401072 . GC G . PASS VC=INDEL;AC=122;AF=0.39;AN=316;refseq.name=NM_003607;refseq.positionType=intron GT 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/0 +chr1 227560279 . G GTCATAG . PASS VC=INDEL;AC=316;AF=1;AN=316 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 228479392 . ATG A . PASS VC=INDEL;AC=12;AF=0.04;AN=316;refseq.name=NM_001098623;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 229074693 . TAGAGG T . PASS VC=INDEL;AC=102;AF=0.32;AN=316 GT 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/0 0/0 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 +chr1 229075090 . ATAGCCTG A . PASS VC=INDEL;AC=30;AF=0.11;AN=264 GT 1/1 0/0 0/0 ./. 0/0 ./. ./. 0/0 0/0 0/0 0/0 ./. ./. ./. 0/0 0/0 ./. 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 ./. 0/0 ./. 0/1 0/0 0/1 0/0 0/1 0/0 ./. 0/0 0/0 0/1 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/1 0/0 0/0 ./. 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 ./. ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. +chr1 229336842 . CATTT C . PASS VC=INDEL;AC=19;AF=0.06;AN=300 GT ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/1 0/1 0/1 ./. 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 ./. 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 +chr1 229631495 . A AC . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_018230;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 229922597 . CCTT C . PASS VC=INDEL;AC=144;AF=0.46;AN=316 GT 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/1 1/1 +chr1 229922599 . TTCT T . PASS VC=INDEL;AC=142;AF=0.45;AN=314 GT 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 ./. 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/1 1/1 +chr1 230272407 . GAG G . PASS VC=INDEL;AC=15;AF=0.05;AN=314;refseq.name=NM_004481;refseq.positionType=intron GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 230625946 . T TGA . PASS VC=INDEL;AC=302;AF=0.96;AN=316 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 230626726 . CTTTAAGTCCTGT C . PASS VC=INDEL;AC=59;AF=0.19;AN=314 GT 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 +chr1 230626728 . TTAAGTCCTGTTT T . PASS VC=INDEL;AC=59;AF=0.19;AN=316 GT 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 +chr1 230697057 . ACA A . PASS VC=INDEL;AC=152;AF=0.48;AN=316 GT 0/1 1/1 1/1 0/0 1/1 0/0 1/1 0/0 0/0 1/1 1/1 1/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 +chr1 230952100 . GG G . PASS VC=INDEL;AC=34;AF=0.11;AN=316 GT 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 +chr1 232200072 . CGACT C . PASS VC=INDEL;AC=86;AF=0.28;AN=312 GT 0/0 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/1 ./. 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 ./. 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 +chr1 232606995 . GTCTG G . PASS VC=INDEL;AC=54;AF=0.17;AN=316;refseq.name=NM_020808;refseq.positionType=intron GT 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 1/1 +chr1 232883964 . G GTT . PASS VC=INDEL;AC=279;AF=0.88;AN=316 GT 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 232883965 . T TTT . PASS VC=INDEL;AC=279;AF=0.88;AN=316 GT 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 232944224 . AAGAA A . PASS VC=INDEL;AC=17;AF=0.05;AN=316;refseq.name=NM_019090;refseq.positionType=exon GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 233013835 . C CT . PASS VC=INDEL;AC=38;AF=0.18;AN=214 GT 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/1 ./. ./. 0/1 0/0 ./. 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 ./. 0/0 ./. 0/1 1/1 ./. ./. ./. 1/1 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 ./. 0/0 0/0 0/0 0/1 1/1 1/1 0/1 ./. ./. 0/0 ./. 0/0 0/0 0/0 ./. ./. 0/1 0/0 ./. ./. ./. 0/1 ./. 0/1 0/1 ./. ./. ./. 0/0 0/1 ./. 0/1 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/1 0/0 ./. ./. 0/0 0/0 ./. 1/1 0/1 ./. 1/1 0/1 0/0 ./. 0/0 1/1 ./. ./. 0/0 1/1 ./. ./. 0/0 ./. 1/1 ./. 1/1 ./. ./. 0/0 ./. ./. +chr1 233013837 . T TT . PASS VC=INDEL;AC=78;AF=0.25;AN=310 GT 0/1 ./. 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 ./. 0/1 0/0 0/0 1/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 1/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 +chr1 233458691 . ACAC A . PASS VC=INDEL;AC=18;AF=0.06;AN=314 GT 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/1 +chr1 233593090 . TT T . PASS VC=INDEL;AC=257;AF=0.82;AN=312 GT 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 ./. 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 0/0 0/0 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 +chr1 233991847 . T TCA . PASS VC=INDEL;AC=220;AF=0.72;AN=306 GT 1/1 1/1 ./. 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 1/1 1/1 0/1 1/1 0/0 0/1 1/1 1/1 ./. 0/1 0/0 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/0 1/1 0/1 1/1 1/1 1/1 0/0 1/1 1/1 ./. 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/0 1/1 1/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 0/1 ./. 0/1 0/1 0/1 1/1 1/1 1/1 1/1 ./. 0/1 0/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 +chr1 234635298 . G GT . PASS VC=INDEL;AC=205;AF=0.65;AN=316 GT 0/1 0/0 0/0 0/1 0/0 1/1 0/0 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 +chr1 234704346 . TCT T . PASS VC=INDEL;AC=36;AF=0.12;AN=312 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 +chr1 235770627 . AATTA A . PASS VC=INDEL;AC=56;AF=0.18;AN=316;refseq.name=NM_004485;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 1/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 1/1 1/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 236043714 . ATCCTGTGTTGATTTA A . PASS VC=INDEL;AC=6;AF=0.02;AN=294 GT ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 236043717 . CTGTGTTGATTTATTA C . PASS VC=INDEL;AC=5;AF=0.02;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 236118487 . TT T . PASS VC=INDEL;AC=12;AF=0.04;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 +chr1 236195380 . GTG G . PASS VC=INDEL;AC=163;AF=0.52;AN=316;refseq.name=NM_002508;refseq.positionType=intron GT 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/0 1/1 0/0 1/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 +chr1 236375505 . T TG . PASS VC=INDEL;AC=130;AF=0.42;AN=310 GT 0/0 ./. 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/0 1/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 +chr1 236555148 . T TA . PASS VC=INDEL;AC=3;AF=0.01;AN=316;refseq.name=NM_145861;refseq.positionType=promoter GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 +chr1 236723352 . CGACCTCGCTCAGACTCTGTGAGGTGCTGAATAAGCAACA C . PASS VC=INDEL;AC=72;AF=0.23;AN=314;refseq.name=NM_018072;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 +chr1 236723354 . ACCTCGCTCAGACTCTGTGAGGTGCTGAATAAGCAACAGA A . PASS VC=INDEL;AC=72;AF=0.23;AN=312;refseq.name=NM_018072;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 +chr1 236848307 . A AG . PASS VC=INDEL;AC=62;AF=0.21;AN=300;refseq.name=NM_001103;refseq.positionType=promoter GT 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 ./. ./. 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 ./. 0/1 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/1 ./. 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 +chr1 237009685 . TAGC T . PASS VC=INDEL;AC=6;AF=0.02;AN=292;refseq.name=NM_000254;refseq.positionType=intron GT 0/1 0/0 0/0 ./. 0/1 0/0 0/0 ./. 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 237009687 . GCAG G . PASS VC=INDEL;AC=3;AF=0.01;AN=304;refseq.name=NM_000254;refseq.positionType=intron GT 0/1 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 237055125 . CA C . PASS VC=INDEL;AC=9;AF=0.03;AN=284;refseq.name=NM_000254;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 237277023 . C CA . PASS VC=INDEL;AC=18;AF=0.06;AN=312;refseq.name=NM_001035;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 +chr1 237535965 . AA A . PASS VC=INDEL;AC=0;AF=0;AN=280;refseq.name=NM_001035;refseq.positionType=intron GT 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 +chr1 237539975 . GCTTGA G . PASS VC=INDEL;AC=3;AF=0.01;AN=316;refseq.name=NM_001035;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 +chr1 237649833 . C CTCTT . PASS VC=INDEL;AC=140;AF=0.45;AN=312;refseq.name=NM_001035;refseq.positionType=intron GT 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/0 ./. 0/0 1/1 0/1 ./. 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 +chr1 237649835 . C CTTTC . PASS VC=INDEL;AC=138;AF=0.44;AN=312;refseq.name=NM_001035;refseq.positionType=intron GT 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 1/1 0/1 ./. 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 ./. 1/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 +chr1 237995162 . T TTTGA . PASS VC=INDEL;AC=301;AF=0.96;AN=312;refseq.name=NM_001035;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 ./. 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 238017296 . T TCT . PASS VC=INDEL;AC=80;AF=0.25;AN=316 GT 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 1/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/0 +chr1 238125441 . AGA A . PASS VC=INDEL;AC=26;AF=0.08;AN=316 GT 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 238152842 . C CGTAA . PASS VC=INDEL;AC=165;AF=0.52;AN=316 GT 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/0 1/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 1/1 1/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 0/0 0/1 0/0 1/1 1/1 0/0 0/1 1/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 +chr1 238152845 . A AAGTA . PASS VC=INDEL;AC=166;AF=0.53;AN=316 GT 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/0 1/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 1/1 1/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 0/0 0/1 0/0 1/1 1/1 0/0 0/1 1/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 +chr1 238257585 . TGAT T . PASS VC=INDEL;AC=159;AF=0.61;AN=262 GT 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 1/1 ./. 1/1 0/1 ./. 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 1/1 0/1 0/1 1/1 0/1 ./. 0/0 1/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 ./. 0/1 ./. 1/1 1/1 0/1 ./. 1/1 1/1 1/1 1/1 ./. 1/1 1/1 ./. 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 ./. 0/0 0/1 ./. 0/0 0/0 0/1 ./. 0/1 0/1 0/0 0/0 1/1 ./. 0/1 0/1 ./. 0/1 ./. 0/1 ./. 0/1 0/0 ./. 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 ./. 0/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 ./. 1/1 0/1 1/1 ./. ./. 0/0 1/1 0/1 ./. 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/1 0/1 ./. ./. ./. 0/1 0/1 ./. ./. 0/1 1/1 1/1 +chr1 238476744 . A ATCTA . PASS VC=INDEL;AC=283;AF=0.98;AN=290 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 0/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 ./. 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 ./. 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 ./. 1/1 ./. 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. ./. 1/1 +chr1 238497833 . G GAGAA . PASS VC=INDEL;AC=232;AF=0.76;AN=304 GT 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 0/0 0/0 0/0 0/1 1/1 1/1 ./. 1/1 1/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/0 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 ./. 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 ./. 1/1 0/0 0/1 0/0 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 ./. 0/0 ./. ./. 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 +chr1 238623394 . C CTTGA . PASS VC=INDEL;AC=178;AF=0.58;AN=308 GT 0/0 1/1 1/1 0/1 1/1 0/0 1/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 0/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 1/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 ./. 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 ./. ./. 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 ./. 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 1/1 1/1 +chr1 238699979 . T TATCT . PASS VC=INDEL;AC=97;AF=0.31;AN=314 GT 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 1/1 0/1 0/1 0/0 1/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 ./. 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/0 0/1 0/1 0/0 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/0 1/1 1/1 0/0 1/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 +chr1 238921290 . CATTCAT C . PASS VC=INDEL;AC=188;AF=0.59;AN=316 GT 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 1/1 1/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 1/1 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/0 1/1 0/1 0/1 0/0 +chr1 238933453 . C CA . PASS VC=INDEL;AC=26;AF=0.08;AN=314 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 238933454 . A AA . PASS VC=INDEL;AC=25;AF=0.08;AN=314 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 239644576 . C CAA . PASS VC=INDEL;AC=46;AF=0.15;AN=300 GT 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 ./. ./. 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 ./. 1/1 0/0 0/1 0/1 0/0 ./. 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 ./. 0/0 0/1 0/1 0/0 0/0 0/0 0/0 +chr1 240115184 . GAAG G . PASS VC=INDEL;AC=62;AF=0.2;AN=316 GT 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 +chr1 240170484 . ATCA A . PASS VC=INDEL;AC=30;AF=0.1;AN=310 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 +chr1 240469105 . A ACT . PASS VC=INDEL;AC=44;AF=0.14;AN=308;refseq.name=NM_020066;refseq.positionType=intron GT 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 ./. 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 +chr1 240556294 . A AG . PASS VC=INDEL;AC=180;AF=0.73;AN=248;refseq.name=NM_020066;refseq.positionType=intron GT ./. 0/1 1/1 ./. 1/1 0/1 1/1 1/1 ./. 0/1 1/1 0/1 1/1 0/1 ./. 0/0 1/1 1/1 0/0 0/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 ./. ./. ./. 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 ./. 0/1 0/1 0/1 ./. 0/1 1/1 0/0 1/1 0/1 1/1 0/0 1/1 0/1 0/0 0/1 ./. 1/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 ./. 0/0 0/0 0/1 ./. 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 ./. ./. ./. 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 ./. 0/1 1/1 0/1 ./. 1/1 1/1 ./. 1/1 0/1 ./. ./. 0/1 ./. 1/1 1/1 0/0 0/1 1/1 1/1 1/1 ./. ./. 1/1 0/1 1/1 ./. ./. ./. ./. 1/1 1/1 1/1 ./. ./. 1/1 1/1 1/1 1/1 ./. 0/1 0/1 0/0 ./. 0/0 0/1 ./. 0/1 1/1 0/1 +chr1 240750353 . A AT . PASS VC=INDEL;AC=1;AF=0;AN=208;refseq.name=NM_022469;refseq.positionType=intron GT 0/0 0/0 ./. ./. 0/0 0/0 ./. ./. ./. 0/0 ./. 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. ./. ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. ./. 0/0 ./. 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 ./. 0/0 ./. 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 ./. 0/0 0/0 ./. ./. 0/0 ./. 0/0 0/0 ./. 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. ./. ./. 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 ./. +chr1 241292738 . CGAC C . PASS VC=INDEL;AC=16;AF=0.06;AN=254;refseq.name=NM_002924;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 ./. 0/0 1/1 0/0 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 ./. 0/1 ./. ./. 0/0 ./. ./. ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. ./. 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 ./. ./. 0/0 0/0 ./. 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 ./. ./. ./. 0/0 ./. 0/1 0/1 0/0 0/0 +chr1 241342365 . TTCAA T . PASS VC=INDEL;AC=54;AF=0.18;AN=308;refseq.name=NM_002924;refseq.positionType=intron GT 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/0 0/0 0/0 ./. 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/0 ./. 1/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 1/1 ./. 0/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 +chr1 241864983 . A AGTCAAAC . PASS VC=INDEL;AC=235;AF=0.75;AN=314;refseq.name=NM_144625;refseq.positionType=intron GT 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 1/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 +chr1 241901460 . ACTG A . PASS VC=INDEL;AC=126;AF=0.4;AN=316;refseq.name=NM_144625;refseq.positionType=intron GT 0/0 0/0 0/1 0/1 0/1 0/0 0/0 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 1/1 1/1 1/1 0/0 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 +chr1 241920499 . TGTAG T . PASS VC=INDEL;AC=5;AF=0.02;AN=316;refseq.name=NM_144625;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 +chr1 241920501 . TAGGT T . PASS VC=INDEL;AC=5;AF=0.02;AN=316;refseq.name=NM_144625;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 +chr1 242055743 . C CTG . PASS VC=INDEL;AC=47;AF=0.15;AN=314 GT 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/0 +chr1 242257290 . TC T . PASS VC=INDEL;AC=59;AF=0.22;AN=270;refseq.name=NM_152666;refseq.positionType=intron GT 0/1 ./. 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 ./. 0/0 0/1 0/0 0/1 0/0 0/1 ./. ./. ./. 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/1 ./. ./. 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 ./. 0/0 ./. 0/1 0/1 0/0 ./. 0/1 0/0 ./. 0/0 0/0 0/1 0/0 ./. 0/0 0/0 ./. 0/1 ./. 0/0 0/0 0/0 0/1 ./. 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 ./. 0/1 ./. 0/0 1/1 0/1 1/1 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 ./. 0/1 0/1 0/1 0/0 +chr1 242281287 . T TCT . PASS VC=INDEL;AC=296;AF=0.95;AN=312;refseq.name=NM_152666;refseq.positionType=intron GT 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 +chr1 242328018 . CATTACACTACTTTT C . PASS VC=INDEL;AC=97;AF=0.4;AN=244;refseq.name=NM_152666;refseq.positionType=intron GT 1/1 0/1 0/1 ./. 1/1 0/0 0/1 0/0 1/1 0/1 ./. 0/0 ./. 0/1 0/0 0/1 0/1 ./. 0/1 0/0 1/1 0/0 0/1 ./. 0/0 0/1 1/1 1/1 0/1 ./. 0/0 0/1 1/1 0/1 1/1 0/0 ./. 0/0 ./. 1/1 0/0 0/1 0/1 0/0 0/1 0/1 ./. ./. ./. 0/1 0/1 ./. 0/0 1/1 0/1 0/1 0/1 0/1 ./. 0/1 ./. 1/1 ./. 0/0 0/0 1/1 0/1 0/1 ./. 1/1 0/1 1/1 0/1 ./. ./. 1/1 0/1 0/1 0/1 ./. ./. 0/0 1/1 0/1 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/1 ./. ./. 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 ./. ./. 0/0 0/1 0/1 0/1 ./. 1/1 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/0 ./. 0/0 0/1 0/0 0/1 0/0 0/1 ./. ./. 0/1 1/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 ./. ./. ./. 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 1/1 ./. 0/0 0/0 +chr1 242602261 . CC C . PASS VC=INDEL;AC=51;AF=0.16;AN=316;refseq.name=NM_152666;refseq.positionType=intron GT 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 1/1 0/0 0/1 1/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 +chr1 243409926 . AAGTT A . PASS VC=INDEL;AC=99;AF=0.32;AN=312;refseq.name=NM_014812;refseq.positionType=intron GT 1/1 1/1 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 1/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 1/1 1/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 ./. 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 +chr1 243410210 . G GTAT . PASS VC=INDEL;AC=137;AF=0.43;AN=316;refseq.name=NM_014812;refseq.positionType=intron GT 0/1 0/1 1/1 1/1 1/1 0/0 1/1 0/0 0/0 1/1 0/0 1/1 0/1 0/0 1/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 +chr1 243435760 . CATT C . PASS VC=INDEL;AC=26;AF=0.1;AN=272;refseq.name=NM_006642;refseq.positionType=intron GT 0/1 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/1 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/0 ./. 0/1 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 ./. 0/0 0/1 ./. 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/1 ./. 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 ./. ./. +chr1 244015225 . GTCTG G . PASS VC=INDEL;AC=70;AF=0.22;AN=316 GT 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 +chr1 244033256 . GTTGA G . PASS VC=INDEL;AC=18;AF=0.06;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 244186794 . T TT . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 244216819 . T TA . PASS VC=INDEL;AC=79;AF=0.25;AN=316;refseq.name=NM_006352;refseq.positionType=exon GT 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 +chr1 244216822 . A AA . PASS VC=INDEL;AC=79;AF=0.25;AN=312;refseq.name=NM_006352;refseq.positionType=exon GT 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 1/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 +chr1 244371962 . CAACTGGTCAAC C . PASS VC=INDEL;AC=2;AF=0.01;AN=314 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 244372739 . C CTA . PASS VC=INDEL;AC=70;AF=0.22;AN=312 GT 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/1 1/1 0/0 0/1 1/1 0/1 1/1 0/0 0/0 1/1 0/0 1/1 0/0 0/1 0/0 1/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 1/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 +chr1 244517491 . A AG . PASS VC=INDEL;AC=229;AF=0.72;AN=316;refseq.name=NM_001012970;refseq.positionType=intron GT 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/0 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 1/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 +chr1 244552134 . CATTT C . PASS VC=INDEL;AC=41;AF=0.13;AN=314;refseq.name=NM_001012970;refseq.positionType=intron GT 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 244794244 . T TAAC . PASS VC=INDEL;AC=2;AF=0.01;AN=316;refseq.name=NM_173807;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 245242885 . A ATT . PASS VC=INDEL;AC=3;AF=0.01;AN=316;refseq.name=NM_032328;refseq.positionType=intron GT 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 245242887 . T TTT . PASS VC=INDEL;AC=3;AF=0.01;AN=316;refseq.name=NM_032328;refseq.positionType=intron GT 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr1 245310839 . T TTAAAG . PASS VC=INDEL;AC=156;AF=0.59;AN=266 GT 0/1 ./. 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 ./. 1/1 1/1 1/1 0/0 0/1 0/1 ./. 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 ./. 1/1 0/0 0/0 0/1 ./. 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 ./. ./. 0/0 0/1 0/1 0/0 0/0 ./. 0/1 ./. 0/0 ./. ./. ./. 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 1/1 0/1 1/1 ./. 1/1 1/1 ./. 0/1 0/1 1/1 1/1 0/0 ./. 0/0 1/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 ./. 1/1 ./. 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 ./. ./. 0/1 ./. 0/1 0/0 0/1 0/0 1/1 0/0 0/1 ./. ./. ./. 0/1 ./. 1/1 1/1 1/1 0/1 0/1 0/1 1/1 ./. 1/1 +chr1 245453003 . G GCCAA . PASS VC=INDEL;AC=80;AF=0.26;AN=308;refseq.name=NM_018012;refseq.positionType=intron GT 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 ./. 0/0 0/1 ./. 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 ./. 0/1 0/1 0/0 0/1 +chr1 245709104 . A AGTCAAC . PASS VC=INDEL;AC=221;AF=0.7;AN=316;refseq.name=NM_018012;refseq.positionType=intron GT 1/1 0/1 1/1 0/1 0/1 1/1 0/0 1/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/0 0/0 1/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 +chr1 245868167 . G GTCTT . PASS VC=INDEL;AC=138;AF=0.44;AN=316 GT 0/1 0/0 0/0 1/1 0/1 1/1 1/1 0/0 0/0 0/0 1/1 0/0 1/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 +chr1 245868172 . T TCTTT . PASS VC=INDEL;AC=137;AF=0.43;AN=316 GT 0/1 0/0 0/0 1/1 0/1 1/1 1/1 0/0 0/0 0/0 1/1 0/0 1/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 +chr1 246124841 . A AAACAGAAG . PASS VC=INDEL;AC=316;AF=1;AN=316;refseq.name=NM_022743;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 246124843 . A ACAGAAGAA . PASS VC=INDEL;AC=316;AF=1;AN=316;refseq.name=NM_022743;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr1 246149511 . C CT . PASS VC=INDEL;AC=69;AF=0.32;AN=214;refseq.name=NM_022743;refseq.positionType=intron GT 1/1 ./. 0/1 0/1 1/1 ./. 0/1 1/1 0/0 ./. ./. 1/1 ./. ./. ./. 0/1 ./. 0/0 ./. ./. 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 ./. ./. ./. 0/1 ./. 1/1 0/1 ./. ./. ./. 1/1 0/1 ./. ./. 1/1 ./. 1/1 0/1 1/1 ./. 0/1 0/1 1/1 ./. 0/1 1/1 0/1 ./. 0/1 0/1 0/0 0/0 0/1 ./. 0/1 1/1 ./. ./. 1/1 ./. 1/1 0/1 ./. 0/1 0/1 ./. 0/1 0/1 0/0 ./. 0/1 ./. 0/0 0/1 ./. 0/1 0/1 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/1 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 ./. ./. 0/0 0/1 ./. 0/1 0/0 0/0 0/0 ./. ./. ./. 0/1 0/0 0/1 0/1 0/1 0/0 0/0 ./. ./. 0/0 ./. ./. 0/1 ./. +chr1 246152615 . GC G . PASS VC=INDEL;AC=164;AF=0.52;AN=316;refseq.name=NM_022743;refseq.positionType=intron GT 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 1/1 +chr1 247110970 . T TCA . PASS VC=INDEL;AC=157;AF=0.5;AN=316 GT 0/0 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/0 1/1 0/0 0/1 1/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/0 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 0/0 1/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 1/1 +chr1 247340579 . TTTCTT T . PASS VC=INDEL;AC=232;AF=0.74;AN=312 GT 1/1 0/0 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/0 1/1 0/0 0/0 1/1 0/1 0/0 1/1 1/1 ./. 0/0 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/1 1/1 0/1 0/0 1/1 0/0 0/1 1/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/0 1/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/0 1/1 0/0 0/1 0/1 0/1 1/1 ./. 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 +chr1 247694106 . C CTCCGTGGCCTAAACGGGCAGCCGAGCCCG . PASS VC=INDEL;AC=124;AF=0.62;AN=200;refseq.name=NM_198074;refseq.positionType=exon GT ./. ./. 1/1 1/1 1/1 0/1 ./. 1/1 0/1 ./. 1/1 1/1 0/1 0/1 ./. 0/1 ./. 1/1 ./. 1/1 1/1 ./. 1/1 ./. 0/1 0/1 ./. 0/1 0/1 ./. 0/1 0/1 0/1 ./. 0/1 ./. ./. 0/1 0/1 ./. 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 ./. 0/1 0/1 0/1 ./. 0/1 0/1 0/1 0/1 ./. 0/1 ./. 0/1 0/1 ./. 0/1 0/1 ./. 0/1 0/1 0/1 0/1 0/1 0/1 ./. 0/1 0/1 ./. ./. ./. 0/1 ./. ./. ./. 0/1 0/1 1/1 0/1 ./. 0/1 0/1 0/1 0/1 ./. 0/1 0/1 ./. 1/1 0/1 ./. ./. ./. 1/1 0/1 1/1 ./. ./. 1/1 0/1 1/1 ./. 1/1 1/1 1/1 ./. ./. ./. ./. ./. ./. ./. 0/1 0/1 ./. 0/1 ./. 0/1 0/1 0/1 0/1 0/1 ./. 0/1 0/1 0/1 ./. 0/1 ./. ./. ./. 0/1 ./. 0/1 ./. ./. 0/1 ./. ./. 1/1 ./. 1/1 1/1 1/1 1/1 ./. +chr1 248807991 . TATGA T . PASS VC=INDEL;AC=85;AF=0.34;AN=252 GT 0/0 ./. 0/1 0/1 ./. 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/0 1/1 0/0 0/1 0/1 ./. ./. 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 ./. 0/1 0/0 ./. 0/0 1/1 0/0 ./. 0/1 0/1 ./. ./. 0/0 0/1 0/0 ./. ./. 0/1 ./. 0/1 ./. 0/1 0/1 0/0 1/1 ./. ./. 1/1 0/1 1/1 0/1 0/0 1/1 ./. 0/1 1/1 0/0 ./. ./. 0/1 ./. 0/0 0/1 0/0 0/0 0/1 ./. 0/1 ./. 0/0 ./. 0/1 0/1 1/1 0/1 ./. ./. 0/0 1/1 0/1 0/0 0/1 ./. 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/1 0/1 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/1 1/1 ./. 1/1 0/1 0/1 ./. 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 +chr1 248809274 . GAACA G . PASS VC=INDEL;AC=79;AF=0.26;AN=304 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 1/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 1/1 0/0 0/0 ./. 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. ./. 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 ./. 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 +chr1 248809275 . AACAA A . PASS VC=INDEL;AC=79;AF=0.26;AN=306 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 1/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 1/1 0/0 0/0 ./. 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 ./. 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 +chr1 248809277 . C CAATT . PASS VC=INDEL;AC=9;AF=0.03;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr1 249122808 . C CAT . PASS VC=INDEL;AC=176;AF=0.58;AN=304;refseq.name=NM_030645;refseq.positionType=promoter GT 0/1 1/1 0/0 0/1 1/1 1/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/0 ./. 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 ./. 0/0 1/1 0/0 0/1 0/1 0/0 0/0 1/1 1/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 ./. 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 ./. 1/1 0/1 0/1 0/0 1/1 ./. 0/1 1/1 0/0 0/1 1/1 1/1 ./. 1/1 0/1 1/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/0 0/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 +chr1 249129038 . GCCTCTAACTT G . PASS VC=INDEL;AC=2;AF=0.01;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 311906 . TA T . PASS VC=INDEL;AC=148;AF=0.48;AN=308 GT 0/1 0/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 1/1 ./. 1/1 0/1 1/1 0/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 ./. 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 ./. 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 +chr2 341060 . TC T . PASS VC=INDEL;AC=52;AF=0.17;AN=314 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 ./. 1/1 1/1 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 1/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 +chr2 623863 . GTTC G . PASS VC=INDEL;AC=278;AF=0.9;AN=310 GT 1/1 0/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 ./. 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 ./. 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 +chr2 623869 . CTTC C . PASS VC=INDEL;AC=283;AF=0.9;AN=314 GT 1/1 0/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 +chr2 872231 . G GCC . PASS VC=INDEL;AC=46;AF=0.16;AN=284 GT 1/1 0/1 0/0 1/1 0/0 1/1 1/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 ./. 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 ./. 0/1 ./. 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 +chr2 872234 . C CCC . PASS VC=INDEL;AC=53;AF=0.21;AN=248 GT 1/1 0/1 0/0 1/1 0/0 1/1 1/1 0/1 ./. 0/0 0/1 0/1 ./. 0/0 0/0 ./. 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 ./. ./. 0/1 ./. ./. ./. 0/0 0/0 ./. ./. ./. 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/1 ./. ./. 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/1 0/0 0/0 0/1 ./. 0/0 0/0 ./. 0/0 0/0 0/1 ./. 0/1 0/0 ./. 0/1 0/1 0/1 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 ./. 0/1 ./. ./. ./. 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 ./. ./. 0/1 ./. 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 ./. 0/0 ./. 0/0 ./. +chr2 1131016 . TTTAGG T . PASS VC=INDEL;AC=189;AF=0.6;AN=316;refseq.name=NM_018968;refseq.positionType=intron GT 0/0 1/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/0 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 1/1 1/1 1/1 0/0 0/1 +chr2 1146399 . T TA . PASS VC=INDEL;AC=280;AF=0.89;AN=316;refseq.name=NM_018968;refseq.positionType=intron GT 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 +chr2 1146400 . A AA . PASS VC=INDEL;AC=280;AF=0.89;AN=316;refseq.name=NM_018968;refseq.positionType=intron GT 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 +chr2 1184342 . CAACTT C . PASS VC=INDEL;AC=94;AF=0.3;AN=316;refseq.name=NM_018968;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/0 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 +chr2 1369823 . AGC A . PASS VC=INDEL;AC=243;AF=0.77;AN=316;refseq.name=NM_018968;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 +chr2 1371776 . T TTTAA . PASS VC=INDEL;AC=50;AF=0.16;AN=312;refseq.name=NM_018968;refseq.positionType=terminator GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 ./. 0/0 0/0 1/1 0/1 0/1 0/0 0/0 1/1 0/0 0/1 ./. 1/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +chr2 1371779 . A AATTA . PASS VC=INDEL;AC=38;AF=0.13;AN=282;refseq.name=NM_018968;refseq.positionType=terminator GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/1 ./. 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 1/1 0/1 0/1 0/0 ./. ./. 0/0 0/1 0/0 0/0 ./. ./. 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 ./. 0/0 0/0 1/1 0/0 0/1 ./. ./. 1/1 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. +chr2 1379755 . A AA . PASS VC=INDEL;AC=5;AF=0.02;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 1789405 . A AT . PASS VC=INDEL;AC=63;AF=0.2;AN=316 GT 0/0 0/0 0/0 1/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 +chr2 2440845 . A AA . PASS VC=INDEL;AC=87;AF=0.32;AN=272 GT ./. 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 ./. 0/0 0/0 0/0 ./. 0/0 0/0 ./. ./. 0/1 0/0 0/0 0/0 0/1 0/1 ./. 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 ./. 0/0 0/0 0/0 0/0 0/1 0/1 ./. 1/1 0/1 1/1 ./. 0/0 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 ./. ./. ./. 0/1 ./. 0/1 ./. 0/0 ./. 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/0 ./. 0/1 0/1 0/0 1/1 0/1 ./. 0/1 ./. 0/1 ./. 1/1 1/1 ./. 0/1 ./. 1/1 0/1 0/1 0/1 ./. 0/0 0/1 +chr2 2656901 . TG T . PASS VC=INDEL;AC=278;AF=0.9;AN=310 GT 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 ./. 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 +chr2 3126017 . G GG . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 3424142 . CGCTGAC C . PASS VC=INDEL;AC=112;AF=0.46;AN=244;refseq.name=NM_016030;refseq.positionType=intron GT 0/1 0/1 ./. 0/0 0/1 ./. 1/1 0/1 0/1 0/0 ./. 1/1 0/0 0/1 ./. ./. 0/1 0/0 0/0 0/1 ./. 0/1 1/1 ./. 0/0 0/1 ./. 1/1 0/1 0/1 0/1 ./. ./. 0/0 0/0 ./. 1/1 1/1 1/1 0/0 0/0 0/0 1/1 0/0 0/1 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 1/1 0/0 0/1 1/1 0/0 1/1 0/1 1/1 ./. 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/1 ./. ./. ./. 0/1 0/1 1/1 1/1 ./. 1/1 ./. 0/0 ./. 0/1 0/0 1/1 ./. ./. 1/1 ./. 0/1 0/0 0/1 ./. 0/1 ./. 0/1 1/1 0/1 1/1 0/1 0/1 0/1 ./. 0/1 0/1 0/1 ./. 0/0 0/1 ./. ./. 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 1/1 ./. 0/1 1/1 0/1 0/1 ./. 0/0 0/1 ./. ./. 0/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 0/1 1/1 1/1 ./. +chr2 3658789 . ACAAA A . PASS VC=INDEL;AC=95;AF=0.33;AN=284;refseq.name=NM_024027;refseq.positionType=intron GT 0/1 0/1 0/0 0/1 0/1 0/1 0/1 ./. 0/0 0/1 0/0 0/0 0/1 0/0 ./. 0/1 0/1 ./. 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 ./. 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 ./. 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 ./. 0/1 0/0 ./. 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 ./. 0/1 0/0 ./. 0/0 0/1 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 ./. 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 ./. 0/1 0/1 0/1 0/0 0/1 0/1 0/1 ./. 0/0 ./. 0/0 ./. 0/1 +chr2 3749151 . GGAA G . PASS VC=INDEL;AC=163;AF=0.53;AN=310;refseq.name=NM_018436;refseq.positionType=exon GT 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 ./. 1/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 1/1 ./. 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 +chr2 3749158 . GAAG G . PASS VC=INDEL;AC=164;AF=0.53;AN=308;refseq.name=NM_018436;refseq.positionType=exon GT 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 ./. 1/1 0/1 0/1 ./. 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 ./. 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 ./. 0/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 +chr2 4140967 . G GA . PASS VC=INDEL;AC=125;AF=0.4;AN=312 GT 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 1/1 0/0 0/1 1/1 1/1 0/1 0/0 0/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 1/1 1/1 0/0 1/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/0 0/0 1/1 0/1 1/1 0/0 1/1 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 0/1 ./. 1/1 1/1 0/1 +chr2 4184693 . AGAG A . PASS VC=INDEL;AC=60;AF=0.22;AN=274 GT 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 ./. 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. ./. 0/0 0/0 ./. ./. ./. ./. ./. 0/0 0/1 0/1 0/0 0/1 ./. 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 ./. 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 ./. 0/0 0/1 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 ./. 1/1 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/1 0/1 1/1 0/0 0/1 0/1 ./. 0/0 0/0 0/1 0/1 0/1 ./. 0/0 +chr2 4296243 . ACCTGGCCTTTT A . PASS VC=INDEL;AC=19;AF=0.06;AN=312 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 ./. 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 +chr2 4604536 . ATCTG A . PASS VC=INDEL;AC=82;AF=0.27;AN=308 GT 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 ./. 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 1/1 1/1 1/1 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 ./. 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 ./. 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 +chr2 4607815 . TAT T . PASS VC=INDEL;AC=90;AF=0.28;AN=316 GT 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 1/1 1/1 1/1 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 +chr2 4874174 . CAT C . PASS VC=INDEL;AC=203;AF=0.64;AN=316 GT 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/0 +chr2 4933418 . GATC G . PASS VC=INDEL;AC=86;AF=0.28;AN=304 GT 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 ./. 0/1 0/1 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/0 +chr2 4987676 . A ACT . PASS VC=INDEL;AC=100;AF=0.32;AN=316 GT 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/0 +chr2 4994909 . G GT . PASS VC=INDEL;AC=122;AF=0.41;AN=294 GT 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 ./. 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 ./. 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 ./. 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 ./. 0/1 0/1 0/1 0/1 ./. 0/0 0/0 0/1 0/1 ./. 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 ./. 0/0 ./. 0/1 ./. 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 1/1 ./. 0/1 0/0 0/1 0/1 0/0 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 +chr2 5222830 . CTGTT C . PASS VC=INDEL;AC=127;AF=0.4;AN=314 GT 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/0 0/0 0/1 0/0 1/1 0/1 0/0 1/1 0/1 0/1 0/1 0/0 1/1 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/0 1/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 ./. 0/0 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 1/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 +chr2 5418395 . T TAA . PASS VC=INDEL;AC=147;AF=0.47;AN=314 GT 1/1 0/0 0/0 1/1 0/1 0/0 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/1 1/1 1/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 ./. 0/1 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 1/1 +chr2 5821332 . TTCAGTCCCCCTAATGCC T . PASS VC=INDEL;AC=261;AF=0.83;AN=316 GT 0/0 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 +chr2 5821334 . CAGTCCCCCTAATGCCTC C . PASS VC=INDEL;AC=261;AF=0.83;AN=316 GT 0/0 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 +chr2 7238500 . A ACTT . PASS VC=INDEL;AC=184;AF=0.58;AN=316 GT 0/0 0/0 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/0 +chr2 7238505 . T TTCT . PASS VC=INDEL;AC=184;AF=0.58;AN=316 GT 0/0 0/0 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/0 +chr2 7616680 . C CA . PASS VC=INDEL;AC=196;AF=0.62;AN=314 GT ./. 1/1 0/0 0/1 0/0 0/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 1/1 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 +chr2 10714143 . CAA C . PASS VC=INDEL;AC=143;AF=0.47;AN=306;refseq.name=NM_024894;refseq.positionType=intron GT 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/0 1/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 ./. 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 1/1 ./. 1/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 ./. 0/1 ./. 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 1/1 1/1 ./. 0/1 +chr2 11163207 . TCA T . PASS VC=INDEL;AC=63;AF=0.2;AN=316 GT 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/0 1/1 1/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 11163209 . ACA A . PASS VC=INDEL;AC=63;AF=0.2;AN=316 GT 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/0 1/1 1/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 11454443 . TTGTC T . PASS VC=INDEL;AC=85;AF=0.27;AN=310;refseq.name=NM_004850;refseq.positionType=intron GT 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 1/1 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 ./. 0/1 1/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 +chr2 11600452 . TT T . PASS VC=INDEL;AC=316;AF=1;AN=316;refseq.name=NM_198256;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr2 11843046 . C CAACT . PASS VC=INDEL;AC=157;AF=0.5;AN=316 GT 0/0 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 1/1 1/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/0 0/1 0/0 +chr2 11843047 . A AACTA . PASS VC=INDEL;AC=157;AF=0.5;AN=316 GT 0/0 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 1/1 1/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/0 0/1 0/0 +chr2 12317135 . T TT . PASS VC=INDEL;AC=2;AF=0.01;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 12787834 . GT G . PASS VC=INDEL;AC=0;AF=0;AN=314 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 12877501 . G GA . PASS VC=INDEL;AC=241;AF=0.76;AN=316;refseq.name=NM_021643;refseq.positionType=intron GT 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 +chr2 13123234 . A ACTTA . PASS VC=INDEL;AC=273;AF=0.89;AN=308 GT ./. 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 ./. 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 ./. 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 +chr2 13297277 . GC G . PASS VC=INDEL;AC=23;AF=0.07;AN=314 GT 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 13446741 . T TCACT . PASS VC=INDEL;AC=105;AF=0.41;AN=256 GT 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/1 1/1 ./. ./. 0/1 0/1 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 ./. ./. 0/1 0/0 0/0 ./. 0/0 0/1 1/1 0/1 0/0 0/0 0/0 1/1 ./. 0/1 ./. ./. 0/1 ./. 0/1 0/0 0/1 ./. 1/1 1/1 0/0 0/1 0/1 1/1 ./. 0/1 0/1 ./. ./. 0/1 0/1 0/0 0/1 ./. ./. 0/0 0/0 ./. 0/0 0/1 0/1 ./. 0/0 ./. 0/1 0/1 ./. 0/1 0/1 ./. 0/1 ./. 1/1 0/1 1/1 0/1 ./. 0/1 1/1 1/1 ./. 0/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 ./. ./. 0/0 0/1 1/1 ./. ./. 0/0 +chr2 13637137 . TTGCTG T . PASS VC=INDEL;AC=19;AF=0.06;AN=308 GT 0/0 ./. 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr2 13829513 . T TT . PASS VC=INDEL;AC=91;AF=0.29;AN=314 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/0 ./. 0/0 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 +chr2 13967190 . TAGAT T . PASS VC=INDEL;AC=22;AF=0.07;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 +chr2 14096044 . AAA A . PASS VC=INDEL;AC=47;AF=0.16;AN=298 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 1/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 ./. 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 ./. 0/0 ./. 0/0 0/1 0/1 0/1 0/1 0/0 ./. 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 ./. 1/1 0/0 0/0 +chr2 14214846 . C CT . PASS VC=INDEL;AC=40;AF=0.13;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 +chr2 14381137 . A ATC . PASS VC=INDEL;AC=0;AF=0;AN=280 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 14428427 . G GC . PASS VC=INDEL;AC=242;AF=0.77;AN=316 GT 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 1/1 +chr2 14428428 . C CC . PASS VC=INDEL;AC=241;AF=0.77;AN=314 GT 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 1/1 +chr2 14685393 . C CTTC . PASS VC=INDEL;AC=29;AF=0.09;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 +chr2 15208721 . A AC . PASS VC=INDEL;AC=116;AF=0.38;AN=304 GT 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/0 0/1 1/1 0/1 1/1 ./. 1/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 0/0 1/1 1/1 0/1 ./. 1/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/0 0/0 1/1 0/0 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 1/1 0/0 0/0 ./. 1/1 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 ./. 1/1 0/1 +chr2 15263072 . A AAGGA . PASS VC=INDEL;AC=86;AF=0.33;AN=262 GT 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 1/1 ./. 0/0 ./. ./. 0/0 0/0 0/0 ./. 1/1 ./. 1/1 1/1 0/1 0/0 0/0 0/0 0/1 0/1 ./. 0/1 0/0 0/1 1/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/1 ./. 0/0 0/1 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 ./. 0/1 0/1 0/0 0/0 ./. 1/1 0/0 0/0 0/0 ./. ./. 0/1 0/1 0/1 ./. 0/0 ./. 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 ./. 0/0 ./. 0/0 0/0 ./. 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 ./. 0/0 0/1 0/1 0/1 0/1 0/1 ./. 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 ./. 0/0 1/1 ./. 0/1 0/0 1/1 ./. 0/1 0/1 0/1 ./. 1/1 0/1 1/1 0/1 0/1 ./. ./. 0/1 0/0 0/0 +chr2 15744484 . CT C . PASS VC=INDEL;AC=48;AF=0.15;AN=314;refseq.name=NM_004939;refseq.positionType=intron GT 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 ./. 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 +chr2 15907161 . G GACTG . PASS VC=INDEL;AC=60;AF=0.19;AN=314 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 ./. 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 +chr2 16916657 . T TAGAA . PASS VC=INDEL;AC=153;AF=0.51;AN=298 GT 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/1 1/1 0/1 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/1 0/1 0/0 0/0 0/0 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 ./. 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 ./. 0/1 1/1 0/1 1/1 1/1 1/1 ./. 0/1 1/1 1/1 1/1 ./. 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/0 0/0 +chr2 16916659 . G GAAAG . PASS VC=INDEL;AC=145;AF=0.49;AN=294 GT 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 ./. ./. 0/1 ./. 0/1 1/1 1/1 1/1 ./. 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 ./. 1/1 ./. 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 ./. 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 ./. ./. ./. 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/0 0/0 +chr2 17460258 . C CC . PASS VC=INDEL;AC=54;AF=0.17;AN=316 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 +chr2 18018674 . TAT T . PASS VC=INDEL;AC=71;AF=0.23;AN=314 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 ./. 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 1/1 1/1 0/1 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/0 +chr2 18139969 . T TT . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 18291829 . TCT T . PASS VC=INDEL;AC=276;AF=0.87;AN=316 GT 0/1 0/1 0/1 1/1 0/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/0 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 +chr2 18382578 . G GC . PASS VC=INDEL;AC=304;AF=0.97;AN=314 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr2 18386046 . ACAGA A . PASS VC=INDEL;AC=1;AF=0;AN=314 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 18673070 . CT C . PASS VC=INDEL;AC=0;AF=0;AN=314 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 18704268 . C CCATGACAAGAACTGCT . PASS VC=INDEL;AC=210;AF=0.66;AN=316 GT 1/1 0/0 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 1/1 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 +chr2 18954606 . T TGTA . PASS VC=INDEL;AC=272;AF=0.87;AN=314 GT 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 +chr2 19229223 . A AG . PASS VC=INDEL;AC=230;AF=0.82;AN=280 GT 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 ./. 1/1 1/1 ./. 1/1 1/1 0/1 1/1 0/1 1/1 0/1 ./. 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 0/1 ./. 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 ./. 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 ./. 0/1 ./. 0/1 0/1 ./. 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 ./. 0/1 1/1 0/1 ./. 1/1 0/1 1/1 0/1 0/1 1/1 0/1 ./. 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 ./. 0/1 1/1 ./. ./. 1/1 +chr2 19416083 . CAAT C . PASS VC=INDEL;AC=26;AF=0.08;AN=312 GT 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 ./. 0/1 0/1 1/1 0/0 0/0 1/1 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 19486700 . C CGT . PASS VC=INDEL;AC=200;AF=0.9;AN=222 GT 0/1 ./. ./. ./. 0/1 0/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. ./. 1/1 0/1 1/1 ./. 1/1 1/1 ./. 1/1 1/1 1/1 ./. 1/1 1/1 0/1 ./. 1/1 1/1 1/1 1/1 0/1 1/1 ./. ./. ./. 0/1 ./. 1/1 ./. 0/1 ./. 0/1 0/1 0/1 ./. 1/1 ./. ./. ./. ./. 0/1 1/1 ./. ./. 0/1 1/1 1/1 0/1 1/1 ./. 0/1 1/1 0/1 1/1 ./. 0/1 0/1 0/1 0/1 1/1 1/1 1/1 ./. ./. ./. 1/1 1/1 ./. ./. 1/1 1/1 1/1 1/1 ./. ./. ./. 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 ./. ./. 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 0/1 ./. 1/1 1/1 1/1 1/1 1/1 ./. ./. ./. ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. ./. +chr2 19792293 . AAA A . PASS VC=INDEL;AC=92;AF=0.29;AN=316 GT 0/1 0/0 1/1 0/1 0/0 0/0 1/1 0/0 0/1 1/1 1/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 +chr2 19850365 . ATA A . PASS VC=INDEL;AC=17;AF=0.06;AN=302 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/1 0/1 0/0 ./. 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 +chr2 20061297 . A AATCA . PASS VC=INDEL;AC=10;AF=0.03;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 20902911 . G GC . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_021925;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 21209314 . GTG G . PASS VC=INDEL;AC=13;AF=0.04;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 21319809 . GACAA G . PASS VC=INDEL;AC=64;AF=0.2;AN=316 GT 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 21692599 . AA A . PASS VC=INDEL;AC=78;AF=0.25;AN=314 GT 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 ./. 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 +chr2 22508039 . GCCT G . PASS VC=INDEL;AC=70;AF=0.23;AN=300 GT 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 ./. 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 ./. 0/1 1/1 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 ./. 0/1 0/0 0/1 ./. 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 ./. 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 ./. 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 ./. 0/0 0/1 0/1 0/0 0/0 +chr2 23055890 . CTT C . PASS VC=INDEL;AC=32;AF=0.1;AN=310 GT 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 +chr2 23059421 . CC C . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 23080285 . C CC . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 23252488 . T TGTTT . PASS VC=INDEL;AC=261;AF=0.83;AN=314 GT 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 ./. 1/1 1/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/0 1/1 1/1 0/0 1/1 0/1 1/1 0/0 0/0 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr2 23656105 . CT C . PASS VC=INDEL;AC=78;AF=0.25;AN=314 GT 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 23929327 . T TAACT . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 25136190 . TC T . PASS VC=INDEL;AC=190;AF=0.68;AN=280;refseq.name=NM_004036;refseq.positionType=intron GT 0/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/0 1/1 1/1 0/0 0/0 0/0 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 ./. 0/1 1/1 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 ./. 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/1 1/1 0/0 0/0 0/1 ./. 1/1 0/1 1/1 0/1 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 0/0 0/1 ./. 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 ./. ./. ./. 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 ./. 1/1 1/1 ./. 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 ./. 1/1 1/1 0/1 0/1 ./. ./. ./. ./. 0/1 0/1 +chr2 25696290 . CA C . PASS VC=INDEL;AC=7;AF=0.02;AN=314;refseq.name=NM_021907;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 +chr2 25971939 . A AGTAAA . PASS VC=INDEL;AC=90;AF=0.28;AN=316;refseq.name=NM_018263;refseq.positionType=intron GT 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 +chr2 26471341 . T TTTC . PASS VC=INDEL;AC=10;AF=0.03;AN=316;refseq.name=NM_000183;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 +chr2 26547936 . GAC G . PASS VC=INDEL;AC=69;AF=0.22;AN=308;refseq.name=NM_153835;refseq.positionType=intron GT 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/1 ./. 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 1/1 0/0 0/1 ./. ./. 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 +chr2 26849198 . ACGGTT A . PASS VC=INDEL;AC=85;AF=0.28;AN=308;refseq.name=NM_001029881;refseq.positionType=intron GT 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 1/1 ./. 0/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/1 ./. 0/0 0/1 +chr2 26849199 . CGGTTC C . PASS VC=INDEL;AC=83;AF=0.27;AN=302;refseq.name=NM_001029881;refseq.positionType=intron GT 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 1/1 0/0 0/1 ./. 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 ./. ./. 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/1 ./. 0/0 0/1 +chr2 27134249 . ATA A . PASS VC=INDEL;AC=100;AF=0.32;AN=316;refseq.name=NM_020134;refseq.positionType=intron GT 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/0 1/1 0/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 0/1 0/0 0/0 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 +chr2 27787778 . AAATTAAAATTCTAC A . PASS VC=INDEL;AC=10;AF=0.03;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 28368075 . CACAG C . PASS VC=INDEL;AC=0;AF=0;AN=306;refseq.name=NM_199193;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 28792105 . A AATA . PASS VC=INDEL;AC=100;AF=0.32;AN=308;refseq.name=NM_153021;refseq.positionType=intron GT 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 1/1 ./. 1/1 ./. 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 ./. 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 ./. 1/1 0/1 +chr2 29191749 . GA G . PASS VC=INDEL;AC=87;AF=0.28;AN=316 GT 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 1/1 0/0 0/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 +chr2 29191750 . AA A . PASS VC=INDEL;AC=86;AF=0.27;AN=316 GT 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 1/1 0/0 0/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 +chr2 29738576 . TA T . PASS VC=INDEL;AC=284;AF=0.9;AN=316;refseq.name=NM_004304;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr2 29738577 . AA A . PASS VC=INDEL;AC=284;AF=0.9;AN=316;refseq.name=NM_004304;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr2 30158127 . C CA . PASS VC=INDEL;AC=192;AF=0.61;AN=316 GT 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 0/0 1/1 1/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 0/1 1/1 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 1/1 0/1 0/0 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 0/0 +chr2 30158129 . A AA . PASS VC=INDEL;AC=192;AF=0.61;AN=316 GT 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 0/0 1/1 1/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 0/1 1/1 0/0 0/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 1/1 0/1 0/0 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 0/0 +chr2 30645653 . A AAGCTTTTCTAATGAACATCTACAAGACTGTTGTG . PASS VC=INDEL;AC=303;AF=0.96;AN=316 GT 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 +chr2 30727159 . C CAGTCTATATGCC . PASS VC=INDEL;AC=189;AF=0.6;AN=316;refseq.name=NM_182551;refseq.positionType=intron GT 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 1/1 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/1 +chr2 30727390 . GTTG G . PASS VC=INDEL;AC=31;AF=0.1;AN=314;refseq.name=NM_182551;refseq.positionType=intron GT 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 +chr2 30855218 . CCATGGGA C . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_182551;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 30937800 . GATTTT G . PASS VC=INDEL;AC=14;AF=0.06;AN=244 GT 0/0 ./. ./. ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/1 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/1 ./. ./. ./. 0/0 0/1 0/0 ./. 0/1 0/1 0/1 ./. ./. 0/1 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. ./. ./. 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/1 0/0 0/0 0/0 ./. 0/1 ./. ./. 0/1 ./. ./. +chr2 31084461 . AATAAAATACAG A . PASS VC=INDEL;AC=36;AF=0.11;AN=316 GT 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/0 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/0 1/1 0/0 0/0 0/0 0/0 1/1 1/1 1/1 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 +chr2 31249797 . ATATC A . PASS VC=INDEL;AC=34;AF=0.11;AN=316;refseq.name=NM_024572;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr2 31249799 . ATCTA A . PASS VC=INDEL;AC=47;AF=0.16;AN=302;refseq.name=NM_024572;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 1/1 0/0 0/0 ./. 0/0 0/0 0/1 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 1/1 1/1 0/0 0/0 0/0 0/0 1/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 1/1 0/0 1/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 +chr2 31374768 . AGTA A . PASS VC=INDEL;AC=13;AF=0.05;AN=278 GT 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 ./. 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/1 ./. 0/0 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/1 ./. ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 31499486 . C CC . PASS VC=INDEL;AC=11;AF=0.03;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 32845664 . A AT . PASS VC=INDEL;AC=138;AF=0.44;AN=316 GT 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 1/1 1/1 1/1 1/1 0/0 0/1 1/1 0/0 1/1 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 1/1 1/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 1/1 +chr2 32845666 . T TT . PASS VC=INDEL;AC=138;AF=0.44;AN=316 GT 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 1/1 1/1 1/1 1/1 0/0 0/1 1/1 0/0 1/1 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 1/1 1/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 1/1 +chr2 33393523 . AGCAA A . PASS VC=INDEL;AC=10;AF=0.03;AN=308;refseq.name=NM_206943;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 33403610 . ATTG A . PASS VC=INDEL;AC=46;AF=0.15;AN=316;refseq.name=NM_206943;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 +chr2 33478311 . TGAGT T . PASS VC=INDEL;AC=2;AF=0.01;AN=314;refseq.name=NM_206943;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 33542959 . TT T . PASS VC=INDEL;AC=258;AF=0.82;AN=316;refseq.name=NM_206943;refseq.positionType=intron GT 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/0 0/0 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 +chr2 33760624 . C CC . PASS VC=INDEL;AC=5;AF=0.02;AN=216;refseq.name=NM_170672;refseq.positionType=intron GT 0/1 ./. 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/1 0/0 0/0 0/1 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. ./. 0/0 0/0 ./. ./. 0/0 ./. ./. ./. 0/0 ./. 0/0 ./. 0/0 ./. 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 ./. ./. 0/0 ./. 0/0 0/0 ./. ./. 0/0 0/0 ./. ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 ./. ./. ./. 0/0 ./. 0/0 ./. 0/0 ./. 0/0 ./. 0/0 ./. 0/0 0/0 ./. ./. 0/0 0/0 0/0 ./. 0/0 0/0 +chr2 33899643 . G GGAG . PASS VC=INDEL;AC=261;AF=0.83;AN=316 GT 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 1/1 0/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 +chr2 34119549 . A AA . PASS VC=INDEL;AC=45;AF=0.14;AN=316 GT 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 1/1 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/1 1/1 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 +chr2 34427438 . A AT . PASS VC=INDEL;AC=175;AF=0.76;AN=230 GT 0/1 0/1 ./. 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 ./. ./. 0/1 1/1 ./. ./. ./. ./. 0/0 0/1 0/1 ./. ./. ./. 0/1 1/1 0/1 0/1 0/1 1/1 ./. 0/1 1/1 ./. 1/1 ./. 1/1 0/1 ./. ./. 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 ./. 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 ./. 1/1 1/1 0/1 0/1 1/1 ./. 1/1 1/1 0/1 0/1 0/1 1/1 ./. 1/1 1/1 ./. 0/1 1/1 ./. 0/1 ./. ./. ./. ./. 1/1 1/1 ./. 1/1 1/1 ./. 1/1 1/1 0/1 ./. 1/1 0/1 0/1 1/1 ./. 0/1 1/1 0/1 ./. 0/1 1/1 1/1 0/1 0/0 0/0 0/1 ./. 1/1 ./. 1/1 1/1 1/1 ./. 1/1 1/1 0/0 0/0 0/1 0/1 1/1 0/0 ./. ./. 1/1 1/1 ./. 1/1 0/1 0/1 ./. 1/1 ./. 0/1 0/1 0/1 1/1 ./. ./. 0/1 0/1 ./. 1/1 0/0 1/1 1/1 0/1 +chr2 34841691 . TGAAT T . PASS VC=INDEL;AC=165;AF=0.79;AN=210 GT ./. ./. ./. 1/1 ./. ./. ./. 0/1 ./. 1/1 0/1 ./. 1/1 ./. ./. 1/1 1/1 1/1 1/1 1/1 0/1 ./. ./. ./. 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 ./. 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 ./. 1/1 1/1 ./. ./. 1/1 1/1 ./. ./. 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 0/1 0/1 0/0 ./. ./. ./. ./. 1/1 ./. 0/1 1/1 ./. 0/1 0/1 0/0 1/1 1/1 1/1 ./. 1/1 1/1 1/1 0/1 0/0 ./. ./. ./. 0/1 ./. ./. 1/1 0/1 ./. ./. 0/1 ./. ./. 0/1 0/1 1/1 ./. 0/1 ./. ./. ./. 0/1 ./. 0/1 0/0 1/1 ./. 0/1 ./. 0/1 0/1 ./. 0/1 0/0 0/1 1/1 1/1 ./. 0/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 ./. ./. 0/1 1/1 0/1 ./. ./. +chr2 35025338 . G GG . PASS VC=INDEL;AC=227;AF=0.72;AN=314 GT 0/1 0/0 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/0 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 1/1 0/0 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/0 1/1 1/1 0/1 1/1 1/1 0/0 0/0 1/1 1/1 0/1 0/0 1/1 0/1 1/1 ./. 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 0/0 +chr2 35255151 . TCT T . PASS VC=INDEL;AC=29;AF=0.09;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 35667838 . A AGG . PASS VC=INDEL;AC=54;AF=0.21;AN=252 GT 0/0 ./. ./. ./. 0/1 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 ./. ./. 0/0 ./. 0/0 0/0 ./. ./. 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 ./. ./. ./. ./. ./. 0/1 0/0 0/1 ./. 0/1 0/1 0/1 0/0 ./. 0/1 0/1 0/1 ./. 0/1 0/0 0/0 0/1 0/1 0/0 0/1 ./. 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 ./. 0/1 ./. 0/1 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/1 ./. 0/1 0/1 ./. 0/0 0/1 0/0 0/0 ./. 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 ./. 0/1 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/1 0/1 0/0 0/0 0/0 0/1 ./. 0/0 ./. ./. 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +chr2 35668564 . A AG . PASS VC=INDEL;AC=275;AF=0.87;AN=316 GT 0/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 +chr2 36779604 . C CTT . PASS VC=INDEL;AC=130;AF=0.44;AN=298;refseq.name=NM_001042548;refseq.positionType=exon GT 1/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 ./. 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 ./. 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 ./. 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/1 0/1 ./. 0/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 0/0 ./. 0/0 1/1 1/1 1/1 0/0 0/0 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 ./. 0/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 1/1 1/1 0/1 0/0 +chr2 37233064 . ACT A . PASS VC=INDEL;AC=48;AF=0.16;AN=302;refseq.name=NM_019024;refseq.positionType=intron GT 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 ./. 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 ./. 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 ./. 0/0 +chr2 37865906 . GA G . PASS VC=INDEL;AC=161;AF=0.51;AN=314 GT 0/0 1/1 0/1 0/1 0/1 0/0 0/0 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/0 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 1/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 ./. 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 +chr2 37960289 . A AG . PASS VC=INDEL;AC=1;AF=0;AN=302 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. +chr2 38003881 . T TAGA . PASS VC=INDEL;AC=312;AF=0.99;AN=316 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr2 38079466 . CAT C . PASS VC=INDEL;AC=93;AF=0.3;AN=308 GT 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 ./. 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/0 ./. 0/0 0/1 0/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 ./. 0/1 0/0 +chr2 38476518 . T TCA . PASS VC=INDEL;AC=179;AF=0.57;AN=316 GT 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 1/1 1/1 0/1 0/0 0/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/0 1/1 1/1 0/1 0/1 0/0 0/0 0/0 0/1 +chr2 38682923 . T TTTCTCTCT . PASS VC=INDEL;AC=35;AF=0.11;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 +chr2 38990657 . C CACTT . PASS VC=INDEL;AC=241;AF=0.76;AN=316 GT 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 +chr2 39202671 . TCAC T . PASS VC=INDEL;AC=68;AF=0.22;AN=314 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/0 ./. 1/1 1/1 0/1 1/1 1/1 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 +chr2 39848964 . GACTA G . PASS VC=INDEL;AC=92;AF=0.3;AN=304 GT 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 1/1 0/1 0/0 1/1 0/1 0/0 ./. 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 ./. 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 ./. 0/1 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 ./. 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 1/1 +chr2 40095196 . TCTT T . PASS VC=INDEL;AC=22;AF=0.07;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 40207026 . AA A . PASS VC=INDEL;AC=1;AF=0;AN=314 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 +chr2 40328669 . A ATC . PASS VC=INDEL;AC=182;AF=0.58;AN=316 GT 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 0/0 0/1 1/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/0 0/0 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 1/1 1/1 +chr2 40396501 . G GTCAG . PASS VC=INDEL;AC=13;AF=0.04;AN=310;refseq.name=NM_001112802;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 +chr2 40446174 . T TCTACCTGCAACCCTTGATTGGCCTC . PASS VC=INDEL;AC=196;AF=0.62;AN=314;refseq.name=NM_001112802;refseq.positionType=intron GT 1/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/1 0/1 ./. 0/0 1/1 1/1 1/1 0/0 0/1 0/0 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 0/0 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 1/1 +chr2 40527545 . T TGC . PASS VC=INDEL;AC=69;AF=0.22;AN=316;refseq.name=NM_001112802;refseq.positionType=intron GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 +chr2 40764424 . TATG T . PASS VC=INDEL;AC=6;AF=0.02;AN=314 GT ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 40840587 . A ATTG . PASS VC=INDEL;AC=15;AF=0.06;AN=242 GT ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. ./. ./. ./. 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 ./. 0/1 0/0 ./. ./. ./. ./. 0/0 ./. ./. 0/0 0/1 0/0 0/1 ./. 0/0 ./. 1/1 0/0 ./. 0/1 0/0 0/1 ./. ./. ./. ./. ./. ./. 0/0 0/0 0/0 0/0 0/0 ./. 1/1 0/0 1/1 0/0 0/0 0/1 ./. 0/0 0/1 ./. ./. ./. 0/0 0/0 +chr2 41367520 . A AT . PASS VC=INDEL;AC=187;AF=0.6;AN=314 GT 1/1 1/1 0/0 0/0 0/0 0/1 1/1 0/1 1/1 0/0 1/1 0/1 0/0 1/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 +chr2 41554849 . TCAGA T . PASS VC=INDEL;AC=231;AF=0.74;AN=314 GT ./. 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 1/1 1/1 +chr2 41554851 . AGACA A . PASS VC=INDEL;AC=233;AF=0.74;AN=316 GT 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 1/1 1/1 +chr2 41628974 . G GA . PASS VC=INDEL;AC=282;AF=0.9;AN=314 GT 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr2 41628975 . A AA . PASS VC=INDEL;AC=281;AF=0.9;AN=312 GT 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 ./. 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 ./. 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr2 41838136 . GGC G . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 42604189 . CTTATGGGTTAC C . PASS VC=INDEL;AC=3;AF=0.01;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 42773644 . C CC . PASS VC=INDEL;AC=111;AF=0.35;AN=316 GT 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 1/1 +chr2 43140881 . TA T . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 43205232 . A AAG . PASS VC=INDEL;AC=287;AF=0.91;AN=316 GT 0/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 +chr2 43324908 . C CA . PASS VC=INDEL;AC=316;AF=1;AN=316 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr2 43570900 . TCT T . PASS VC=INDEL;AC=84;AF=0.27;AN=316;refseq.name=NM_022065;refseq.positionType=intron GT 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 1/1 0/1 0/0 +chr2 44397082 . AAGAGTA A . PASS VC=INDEL;AC=39;AF=0.12;AN=316;refseq.name=NM_177968;refseq.positionType=intron GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +chr2 44735716 . TAAAC T . PASS VC=INDEL;AC=189;AF=0.6;AN=316;refseq.name=NM_024766;refseq.positionType=intron GT 1/1 0/0 0/0 1/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/0 1/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 +chr2 45472533 . T TATA . PASS VC=INDEL;AC=284;AF=0.92;AN=308 GT 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 ./. 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 +chr2 45472535 . T TAAT . PASS VC=INDEL;AC=291;AF=0.92;AN=316 GT 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 +chr2 47399270 . TCA T . PASS VC=INDEL;AC=140;AF=0.44;AN=316;refseq.name=NM_001743;refseq.positionType=intron GT 1/1 0/1 1/1 0/0 1/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/1 +chr2 48032874 . ACTAT A . PASS VC=INDEL;AC=254;AF=0.8;AN=316;refseq.name=NM_000179;refseq.positionType=intron GT 0/0 1/1 0/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 +chr2 49026643 . A AA . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 49468159 . C CTCTT . PASS VC=INDEL;AC=57;AF=0.18;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 +chr2 49514324 . GAAGAA G . PASS VC=INDEL;AC=179;AF=0.58;AN=310 GT 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 ./. 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 0/0 0/1 0/0 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 ./. 0/0 0/0 0/0 1/1 0/1 ./. 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/0 1/1 +chr2 49982314 . T TT . PASS VC=INDEL;AC=196;AF=0.64;AN=304 GT 1/1 0/1 1/1 1/1 0/0 ./. 0/0 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 1/1 0/1 0/0 1/1 0/0 0/0 1/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 ./. ./. 0/1 0/1 0/0 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 ./. 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 1/1 0/1 +chr2 50152899 . TTTTC T . PASS VC=INDEL;AC=26;AF=0.1;AN=268;refseq.name=NM_004801;refseq.positionType=intron GT ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. ./. 0/0 0/0 ./. 0/1 ./. 0/0 0/1 0/1 0/0 ./. 0/0 0/1 0/1 0/0 0/0 0/0 ./. 0/0 0/1 ./. ./. ./. 0/1 0/0 0/1 ./. 0/0 0/1 0/1 0/0 0/1 ./. 0/0 0/0 0/0 ./. 0/0 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 ./. 0/1 ./. 0/1 0/0 0/0 0/1 0/0 0/0 0/0 +chr2 50693504 . AAC A . PASS VC=INDEL;AC=193;AF=0.63;AN=306;refseq.name=NM_004801;refseq.positionType=intron GT 0/0 1/1 1/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 0/1 1/1 0/0 0/1 1/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 1/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 0/0 0/0 1/1 0/0 0/0 0/1 1/1 1/1 1/1 0/1 ./. 0/0 1/1 0/1 0/1 1/1 1/1 1/1 0/0 ./. 1/1 0/1 ./. ./. 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 ./. 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 1/1 1/1 0/1 0/1 1/1 0/1 +chr2 50703696 . C CTG . PASS VC=INDEL;AC=287;AF=0.91;AN=314;refseq.name=NM_004801;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr2 50703699 . T TGT . PASS VC=INDEL;AC=285;AF=0.9;AN=316;refseq.name=NM_004801;refseq.positionType=intron GT 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +chr2 51260591 . T TAT . PASS VC=INDEL;AC=0;AF=0;AN=316;refseq.name=NM_004801;refseq.positionType=promoter GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 51281539 . TT T . PASS VC=INDEL;AC=252;AF=0.8;AN=316 GT 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 +chr2 51315220 . A ATT . PASS VC=INDEL;AC=55;AF=0.19;AN=292 GT 0/0 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 ./. 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 ./. 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 ./. 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 ./. 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/0 ./. 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/1 +chr2 51315221 . T TTT . PASS VC=INDEL;AC=56;AF=0.19;AN=300 GT 0/0 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 ./. 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 ./. 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 +chr2 51355364 . TTT T . PASS VC=INDEL;AC=30;AF=0.1;AN=304 GT 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 +chr2 52397945 . A ATGCTATTCCAATATCTCAG . PASS VC=INDEL;AC=33;AF=0.15;AN=214 GT 0/1 ./. 0/0 0/0 0/1 0/0 0/0 0/0 ./. ./. ./. 0/1 ./. ./. ./. 0/1 ./. 0/1 0/1 ./. 0/1 0/1 ./. 0/1 ./. 0/0 0/1 0/0 ./. 0/0 ./. ./. 0/0 0/0 ./. 0/0 ./. ./. 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 ./. 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 0/1 ./. ./. 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 ./. 0/0 0/0 ./. ./. 0/1 0/0 ./. 0/1 ./. ./. 0/1 0/0 0/1 0/1 ./. 0/0 0/0 0/0 0/1 0/0 0/1 0/0 ./. ./. 0/1 ./. 0/1 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/1 ./. ./. ./. 0/0 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 ./. 0/0 ./. 0/0 ./. 0/0 0/1 ./. ./. 0/0 0/0 ./. 0/1 0/0 0/1 0/0 0/1 +chr2 52643648 . G GAG . PASS VC=INDEL;AC=140;AF=0.53;AN=266 GT 0/1 ./. 0/0 0/1 0/1 1/1 0/0 0/0 1/1 ./. 0/1 0/1 0/1 0/1 0/1 0/1 ./. 0/0 0/1 0/0 0/0 0/1 0/1 0/0 ./. ./. 0/1 0/0 0/1 0/0 0/1 1/1 ./. 0/0 0/1 0/0 1/1 1/1 1/1 0/1 0/0 ./. 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/0 0/1 0/0 1/1 0/0 ./. ./. ./. 0/0 ./. 1/1 0/1 0/1 0/0 0/1 ./. 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 ./. 1/1 1/1 0/1 ./. 1/1 1/1 1/1 0/1 0/0 ./. 0/1 0/1 1/1 ./. ./. ./. 0/1 1/1 ./. 1/1 0/1 ./. ./. 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/0 ./. 0/1 1/1 ./. 0/1 1/1 1/1 ./. 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 ./. 0/0 1/1 0/0 1/1 0/1 0/0 1/1 +chr2 53056176 . G GAG . PASS VC=INDEL;AC=131;AF=0.49;AN=270 GT 1/1 0/0 0/1 ./. ./. 0/0 ./. 1/1 0/1 0/1 0/1 ./. ./. ./. ./. 0/1 1/1 0/1 ./. 0/1 ./. 0/1 ./. 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 ./. 0/0 ./. 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 ./. 1/1 ./. 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/0 0/0 0/0 ./. 0/1 0/1 0/1 0/1 ./. 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 ./. 0/1 0/1 0/1 0/1 0/1 0/1 0/0 ./. 0/1 0/0 ./. 0/0 0/1 0/1 ./. 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 ./. 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 ./. 1/1 +chr2 53674036 . AA A . PASS VC=INDEL;AC=106;AF=0.34;AN=310 GT 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 1/1 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 ./. 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 ./. 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 1/1 1/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/1 0/1 1/1 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 +chr2 53737951 . AGGAT A . PASS VC=INDEL;AC=107;AF=0.35;AN=302 GT 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 ./. 0/0 ./. 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 ./. 1/1 1/1 0/1 0/0 ./. 0/1 0/0 0/0 0/0 0/0 1/1 ./. 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 0/0 0/1 ./. 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 +chr2 54573230 . AACA A . PASS VC=INDEL;AC=62;AF=0.2;AN=316;refseq.name=NM_001100396;refseq.positionType=intron GT 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/1 +chr2 54726113 . G GA . PASS VC=INDEL;AC=269;AF=0.87;AN=308;refseq.name=NM_003128;refseq.positionType=intron GT 1/1 0/0 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 ./. 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 ./. 0/1 1/1 1/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 +chr2 54726287 . T TGTTA . PASS VC=INDEL;AC=269;AF=0.85;AN=316;refseq.name=NM_003128;refseq.positionType=intron GT 1/1 0/0 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 +chr2 54783793 . C CTT . PASS VC=INDEL;AC=270;AF=0.85;AN=316;refseq.name=NM_003128;refseq.positionType=intron GT 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 +chr2 55080611 . GCTTT G . PASS VC=INDEL;AC=3;AF=0.01;AN=310 GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 55174675 . AC A . PASS VC=INDEL;AC=6;AF=0.02;AN=306 GT 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. +chr2 55208953 . A ATATGAATCACATACAAGCTAAGAAAC . PASS VC=INDEL;AC=211;AF=0.67;AN=316;refseq.name=NM_020532;refseq.positionType=intron GT 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/0 1/1 0/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/0 1/1 1/1 0/1 0/0 1/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 +chr2 55208955 . A ATGAATCACATACAAGCTAAGAAACTA . PASS VC=INDEL;AC=211;AF=0.67;AN=316;refseq.name=NM_020532;refseq.positionType=intron GT 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/0 1/1 0/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/0 1/1 1/1 0/1 0/0 1/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 +chr2 55284481 . AA A . PASS VC=INDEL;AC=90;AF=0.28;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 1/1 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 1/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 +chr2 55355370 . CTG C . PASS VC=INDEL;AC=0;AF=0;AN=316 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 55473492 . AA A . PASS VC=INDEL;AC=27;AF=0.11;AN=236;refseq.name=NM_002453;refseq.positionType=exon GT 0/1 ./. 0/0 ./. 0/0 0/1 0/1 0/0 0/0 0/0 0/0 ./. ./. 0/0 0/0 0/0 ./. 0/0 0/1 ./. 0/1 0/0 ./. ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. ./. 0/0 0/0 ./. 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 ./. 0/1 0/1 ./. 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 ./. 0/0 0/1 0/0 ./. 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/1 ./. ./. 0/0 0/0 0/0 0/0 ./. ./. 0/0 ./. 0/0 0/0 ./. 0/0 0/1 0/0 ./. ./. 0/0 ./. 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 ./. ./. 0/1 0/0 0/1 ./. 0/0 0/1 0/0 0/0 ./. 0/0 0/1 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/0 ./. 0/0 0/0 0/0 ./. +chr2 56088199 . TA T . PASS VC=INDEL;AC=21;AF=0.07;AN=316 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +chr2 56603301 . G GT . PASS VC=INDEL;AC=118;AF=0.39;AN=306;refseq.name=NM_001080433;refseq.positionType=intron GT 1/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 ./. 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 ./. 1/1 0/0 0/1 0/1 1/1 ./. 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 1/1 0/0 0/1 1/1 0/0 +chr2 57161556 . CCTT C . PASS VC=INDEL;AC=24;AF=0.1;AN=230 GT 0/1 ./. ./. 0/0 0/0 ./. 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 ./. ./. 0/1 ./. 0/0 0/0 ./. ./. ./. ./. 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 ./. 0/1 ./. 0/0 0/0 0/1 0/0 ./. ./. ./. ./. 0/0 ./. 0/0 0/0 0/0 0/0 0/1 ./. 0/0 ./. ./. ./. 0/0 ./. 0/1 0/1 ./. 0/1 ./. 0/1 0/1 ./. ./. ./. 0/1 0/0 0/0 0/1 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 ./. 0/0 0/0 0/1 ./. 0/0 0/0 ./. 0/0 ./. 0/1 ./. 0/1 0/0 0/0 ./. ./. ./. 0/1 ./. ./. ./. ./. 0/0 +chr2 58167700 . AA A . PASS VC=INDEL;AC=220;AF=0.73;AN=300 GT 0/1 1/1 0/1 0/0 1/1 1/1 0/0 1/1 0/0 1/1 ./. 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 1/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 ./. 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 ./. 0/1 1/1 0/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 ./. 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 ./. 1/1 1/1 ./. 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 ./. 0/1 1/1 +chr2 58193832 . A ACAA . PASS VC=INDEL;AC=35;AF=0.16;AN=222 GT 0/1 0/1 ./. 0/0 ./. ./. 0/0 0/0 0/0 ./. 0/1 0/0 ./. ./. 0/1 1/1 ./. ./. ./. 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 0/1 ./. 0/1 0/0 0/0 0/0 0/0 1/1 ./. 0/0 0/0 ./. ./. 0/0 ./. 0/0 0/1 1/1 0/0 ./. 0/0 ./. 0/0 ./. 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 0/0 ./. 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 ./. 0/1 ./. ./. 0/0 0/1 ./. 0/0 ./. 0/0 0/0 0/1 0/0 ./. 0/1 ./. ./. 0/0 ./. 0/1 ./. ./. ./. ./. ./. 0/0 0/0 0/0 0/0 0/1 0/0 0/1 ./. 0/0 ./. 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/0 ./. 0/0 ./. ./. 1/1 0/0 0/1 0/0 ./. 0/1 ./. 0/1 0/0 0/0 ./. 0/0 0/0 0/0 0/1 ./. 0/0 ./. 0/0 0/0 +chr2 58274884 . C CAGG . PASS VC=INDEL;AC=125;AF=0.4;AN=314;refseq.name=NM_006296;refseq.positionType=intron GT 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 ./. 0/0 0/1 1/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/0 0/0 +chr2 58274891 . A AGGA . PASS VC=INDEL;AC=123;AF=0.4;AN=308;refseq.name=NM_006296;refseq.positionType=intron GT 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 1/1 1/1 0/0 ./. 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 ./. 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 ./. 0/1 0/1 1/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 1/1 ./. 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/0 0/0 +chr2 58283746 . A ACT . PASS VC=INDEL;AC=268;AF=0.88;AN=304;refseq.name=NM_006296;refseq.positionType=intron GT 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 ./. 1/1 ./. 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 ./. 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 ./. 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 +chr2 58283749 . C CTC . PASS VC=INDEL;AC=266;AF=0.86;AN=308;refseq.name=NM_006296;refseq.positionType=intron GT 0/1 1/1 0/1 0/0 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 1/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 1/1 ./. 0/1 0/1 ./. 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 ./. 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 ./. 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 +chr2 58385305 . T TCTTA . PASS VC=INDEL;AC=79;AF=0.25;AN=316;refseq.name=NM_006296;refseq.positionType=intron GT 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 +chr2 58385307 . T TTACT . PASS VC=INDEL;AC=79;AF=0.25;AN=316;refseq.name=NM_006296;refseq.positionType=intron GT 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 diff --git a/tests/tabix_data/vcf/23.vcf b/tests/tabix_data/vcf/23.vcf new file mode 100644 index 0000000..9c9ed12 --- /dev/null +++ b/tests/tabix_data/vcf/23.vcf @@ -0,0 +1,419 @@ +##fileformat=VCFv4.1 +##ApplyRecalibration="analysis_type=ApplyRecalibration input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=[20] excludeIntervals=null reference_sequence=/humgen/1kg/reference/human_g1k_v37.fasta rodBind=[/humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/combined.phase1.chr20.raw.indels.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION nonDeterministicRandomSeed=false DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=1 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false disable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null help=false recal_file=/humgen/gsa-scr1/delangel/VQSRIndels/data/trainMills75_truthMills75_p15_12_12_pctb0.05_std12.0_mG8_QD_FS_HS_RP_IC.recal tranches_file=/humgen/gsa-scr1/delangel/VQSRIndels/data/trainMills75_truthMills75_p15_12_12_pctb0.05_std12.0_mG8_QD_FS_HS_RP_IC.tranches out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub ts_filter_level=93.0 ignore_filter=null mode=INDEL" +##CombineVariants="analysis_type=CombineVariants input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=[20:41000001-42000000] excludeIntervals=null reference_sequence=/humgen/1kg/reference/human_g1k_v37.fasta rodBind=[/humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/AFR/AFR.phase1.chr20.42.raw.indels.vcf, /humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/ASN/ASN.phase1.chr20.42.raw.indels.vcf, /humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/AMR/AMR.phase1.chr20.42.raw.indels.vcf, /humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/EUR/EUR.phase1.chr20.42.raw.indels.vcf, /humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/AFR.admix/AFR.admix.phase1.chr20.42.raw.indels.vcf, /humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/ASN.admix/ASN.admix.phase1.chr20.42.raw.indels.vcf, /humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/AMR.admix/AMR.admix.phase1.chr20.42.raw.indels.vcf, /humgen/gsa-hpprojects/dev/delangel/Phase1Calls/20110608VQSRConsensus/calls/chr20/EUR.admix/EUR.admix.phase1.chr20.42.raw.indels.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION nonDeterministicRandomSeed=false DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=1 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false disable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null help=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub genotypemergeoption=PRIORITIZE filteredrecordsmergetype=KEEP_IF_ANY_UNFILTERED rod_priority_list=AFR.admix,AMR.admix,EUR.admix,ASN.admix,AFR,AMR,EUR,ASN printComplexMerges=false filteredAreUncalled=false minimalVCF=false setKey=set assumeIdenticalSamples=false minimumN=1 masterMerge=false mergeInfoWithMaxAC=true" +##FILTER= +##FILTER== 4 && (MQ0 / (1.0 * DP)) > 0.1"> +##FILTER=10)"> +##FILTER=20.0"> +##FILTER= 7500"> +##FILTER==15"> +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER==-1.0"> +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##LeftAlignVariants="analysis_type=LeftAlignVariants input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=[20] excludeIntervals=null reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta rodBind=[/humgen/gsa-scr1/ebanks/ALL.chr20.Oxford.20110407.indels.genotypes.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION nonDeterministicRandomSeed=false DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=1 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false disable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null help=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub" +##SelectVariants="analysis_type=SelectVariants input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=[20] excludeIntervals=null reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta rodBind=[/humgen/gsa-scr1/delangel/officialCalls/20110201_chr20_phase1_indels/dindel/20110208.chr20.dindel2.ALL.sites.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION nonDeterministicRandomSeed=false DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=1 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false disable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null help=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sample=null select_expressions=[] excludeNonVariants=false excludeFiltered=false discordance= concordance= family_structure= mendelianViolation=false mendelianViolationQualThreshold=0.0 select_random_number=0 select_random_fraction=0.0 selectSNPs=false selectIndels=true" +##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/broad/shptmp/delangel/calls/chr20/CHB.phase1.chr20.42.cleaned.bam, /broad/shptmp/delangel/calls/chr20/CHS.phase1.chr20.42.cleaned.bam, /broad/shptmp/delangel/calls/chr20/CLM.phase1.chr20.42.cleaned.bam, /broad/shptmp/delangel/calls/chr20/JPT.phase1.chr20.42.cleaned.bam, /broad/shptmp/delangel/calls/chr20/MXL.phase1.chr20.42.cleaned.bam, /broad/shptmp/delangel/calls/chr20/PUR.phase1.chr20.42.cleaned.bam] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=[20:41000001-42000000] excludeIntervals=null reference_sequence=/humgen/1kg/reference/human_g1k_v37.fasta rodBind=[/humgen/gsa-scr1/delangel/otherIndelCallerAnalysis/ALL.indels.combined.chr20.vcf, /humgen/gsa-hpprojects/GATK/data/dbsnp_132_b37.leftAligned.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION nonDeterministicRandomSeed=false DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=50 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=8 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false disable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null help=false genotype_likelihoods_model=INDEL p_nonref_model=EXACT heterozygosity=0.0010 pcr_error_rate=1.0E-4 genotyping_mode=GENOTYPE_GIVEN_ALLELES output_mode=EMIT_ALL_SITES standard_min_confidence_threshold_for_calling=4.0 standard_min_confidence_threshold_for_emitting=4.0 noSLOD=false assume_single_sample_reads=null abort_at_too_much_coverage=-1 min_base_quality_score=17 min_mapping_quality_score=20 max_deletion_fraction=0.05 min_indel_count_for_genotyping=5 indel_heterozygosity=1.25E-4 indelGapContinuationPenalty=10.0 indelGapOpenPenalty=45.0 indelHaplotypeSize=80 doContextDependentGapPenalties=true getGapPenaltiesFromData=false indel_recal_file=indel.recal_data.csv indelDebug=false dovit=false GSA_PRODUCTION_ONLY=false exactCalculation=LINEAR_EXPERIMENTAL ignoreSNPAlleles=true output_all_callable_bases=false genotype=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub debug_file=null metrics_file=null annotation=[MappingQualityZeroFraction]" +##VariantAnnotator="analysis_type=VariantAnnotator input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=null excludeIntervals=null reference_sequence=/humgen/1kg/reference/human_g1k_v37.fasta rodBind=[./ALL.chr20.vqsr_2of5_union_sites_for_validation_boosted.vcf] rodToIntervalTrackName=variant BTI_merge_rule=UNION nonDeterministicRandomSeed=false DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=1 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false disable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null help=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sampleName=null annotation=[IndelType] group=[] expression=[] useAllAnnotations=false list=false assume_single_sample_reads=null vcfContainsOnlyIndels=false" +##VariantFiltration="analysis_type=VariantFiltration input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=[/humgen/1kg/processing/pipeline_test_bams/chr22_chunked.hg19.intervals] excludeIntervals=null reference_sequence=/humgen/1kg/reference/human_g1k_v37.fasta rodBind=[/broad/shptmp/rpoplin/ALL.phase1.chr22.raw.indels.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=1 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false enable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null quiet_output_mode=false debug_mode=false help=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub filterExpression=[MQ0 >= 4 && (MQ0 / (1.0 * DP)) > 0.1, QUAL<30.0, SB>=-1.0, QD<1.0, HRun>=15, HaplotypeScore>20.0] filterName=[HARD_TO_VALIDATE, LowQual, StrandBias, QualByDepth, HomopolymerRun, HaplotypeScore] genotypeFilterExpression=[] genotypeFilterName=[] clusterSize=3 clusterWindowSize=0 maskName=Mask missingValuesInExpressionsShouldEvaluateAsFailing=false" +##commandline="/share/software/freebayes/bin/freebayes --stdin --min-alternate-count 2 --genotype-combo-step-max 20 --genotype-variant-threshold 4 --no-marginals --pvar 0.0001 --indels --mnps --no-filters --binomial-obs-priors --allele-balance-priors --region 20:0..100000 --vcf /d1/data/1000G/20101123/populations/finalised.phase1/integrated/including454/wg/ALL/Pipeline/none//freebayes/freebayes.20:0-100000.baq.20110328.vcf --fasta-reference /d2/data/references/build_37/human_reference_v37.fa" +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##fileDate=2011-03-28 +##filedate=2011-02-08 +##filter="( SNP | MNP ) & ( MQM > 65 | QUAL > 1 ) & ABP < 30 & AB < 0.9 | ( INS | DEL ) & QUAL > 500" +##phasing=none +##reference=/lustre/scratch105/projects/g1k/ref/main_project/human_g1k_v37.fasta +##reference=file:///humgen/1kg/reference/human_g1k_v37.fasta +##source=Dindel2 +##source=SelectVariants +##source_20110031.1=/nfs/users/nfs_p/pd3/cvs/vcftools/perl/vcf-annotate -d /nfs/users/nfs_p/pd3/sandbox/hapmap/dbSNP-b132/non-1kg-vld.desc -a /nfs/users/nfs_p/pd3/sandbox/hapmap/dbSNP-b132/non-1kg-vld.tab.gz -c CHROM,FROM,INFO/VLD,INFO/KGPilot123,INFO/dbSNP +##vcfCTools=filter +#CHROM POS ID REF ALT QUAL FILTER INFO +20 458502 . G GA 4567.01 PASS AA=20;AB=0.61111;ABA=14;ABP=6.8707;ABR=22;AC=38;AF=0.0544;AN=698;BL=374;BR=1129;BVAR;BaseQRankSum=13.364;DP=15979;DP4=1882,2188,45,37;Dels=0.00;EL=5;EPP=13.868;ER=15;FR;FS=6.503;HETAR=11;HOMA=2;HOMR=985;HP=1;HPLen=2;HR=2;HRun=0;HU=G;INDEL;INS;InbreedingCoeff=0.0157;IndelType=INS.NOVEL_1.Novel_A.;LEN=1;LRB=0.50233;LRBP=826.56;MQ=66.16;MQ0Fraction=0.0110;MQM=70.5;MQRankSum=-3.158;NF;NR;NS=998;PP;PV4=0.15,1,0.42,0.15;RA=3173;RL=1;RPP=38.188;RR=19;RUN=1;ReadPosRankSum=-2.346;SAB=0.7;SAF=14;SAP=9.959;SAR=6;SC=GGGCGTGGTGGTGCATGTAAT;SET_INTEGRATION;SET_WGVQSR;SRB=0.50047;SRF=1588;SRP=3.0165;SRR=1585;TC;TR=9;TU=GGT;VQSLOD=10.0079;set=Intersection;sumGLbyD=23.94 +20 573764 . TA T 591.51 PASS AC=91;AF=0.1987;AN=458;BaseQRankSum=0.137;DP=519;FS=3.153;HRun=1;HaplotypeScore=14.0744;InbreedingCoeff=0.1460;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;MQ=48.16;MQ0=26;MQ0Fraction=0.0501;MQRankSum=-1.636;QD=3.63;ReadPosRankSum=-4.140;SB=-408.14;SET_INTEGRATION;SET_WGVQSR;VQSLOD=5.2458;set=VQSR +20 766143 . C CATCTGGTA 5521.70 PASS AA=24;AB=0.5;ABA=18;ABP=3.0103;ABR=18;AC=14;AF=0.0289;AF1=0.02038;AN=484;BL=655;BR=1542;BVAR;BaseQRankSum=3.801;CI95=0.01549,0.02655;DP=11749;DP4=2222,1998,14,8;Dels=0.00;EL=9;EPP=6.2675;ER=15;FQ=999;FR;FS=2.941;HETAR=9;HOMA=4;HOMR=901;HP=2;HPLen=2;HR=1;HRun=0;HU=A;INDEL;INS;InbreedingCoeff=0.0515;IndelType=INS.NumRepetitions_1.EventLength_8.;LEN=8;LRB=0.40373;LRBP=780.64;MQ=56.81;MQ0Fraction=0.0253;MQM=22.167;MQRankSum=-4.809;NF;NR;NS=914;PP;PV4=0.39,1,5.8e-07,1;RA=3093;RL=6;RPP=16.039;RR=18;RUN=1;ReadPosRankSum=-2.827;SAB=0.625;SAF=15;SAP=6.2675;SAR=9;SC=GCTTTAAATTCATCTGGTACT;SET_INTEGRATION;SET_WGVQSR;SRB=0.61623;SRF=1906;SRP=365.95;SRR=1187;TC;TR=1;TU=A;VQSLOD=7.0268;set=Intersection;sumGLbyD=50.23 +20 997076 rs11467490 CTG C 15379.78 PASS AA=195;AB=0.59878;ABA=132;ABP=30.896;ABR=197;AC=173;AF=0.14562;AN=1188;BL=7664;BR=7309;BVAR;BaseQRankSum=21.853;DB;DEL;DP=27127;DP4=1801,2002,241,282;Dels=0.13;EL=100;EPP=3.2887;ER=95;FQ=999;FR;FS=6.591;HETAR=77;HOMA=42;HOMR=815;HP=1;HPLen=1;HR=1;HRun=0;HU=T;INDEL;InbreedingCoeff=0.1284;IndelType=DEL.NumRepetitions_1.EventLength_2.RepeatExpansion_TG.;LEN=2;LRB=0.023709;LRBP=21.287;MQ=61.18;MQ0Fraction=0.0214;MQM=43.041;MQRankSum=6.886;NF;NR;NS=934;PP;PV4=0.61,1.5e-78,1,1;RA=2800;RL=120;RPP=25.56;RR=75;RUN=1;ReadPosRankSum=4.504;SAB=0.62051;SAF=121;SAP=27.609;SAR=74;SC=CAGCTAATTACTGTATTTTTA;SET_INTEGRATION;SET_WGVQSR;SRB=0.49821;SRF=1395;SRP=3.0879;SRR=1405;TC;TR=1;TU=T;VQSLOD=8.9396;set=Intersection;sumGLbyD=16.76 +20 1042261 rs10597473 CCCTG C 168658.05 PASS AA=4481;AB=0.29043;ABA=2128;ABP=1147.1;ABR=871;AC=1172;AF=0.97830;AN=1198;BL=169975;BR=194027;BVAR;BaseQRankSum=4.599;DB;DEL;DP=29418;DP4=29,47,1441,2403;Dels=0.84;EL=2358;EPP=29.772;ER=2123;FR;FS=9.122;HETAR=482;HOMA=559;HOMR=30;HP=2;HPLen=3;HR=3;HRun=0;HU=C;INDEL;InbreedingCoeff=0.0470;IndelType=DEL.NumRepetitions_2.EventLength_4.;LEN=4;LRB=0.066077;LRBP=3454.1;MQ=104.58;MQ0=4;MQ0Fraction=0.0014;MQM=58.257;MQRankSum=-3.368;NF;NR;NS=1071;PP;PV4=0.91,6.8e-09,2.8e-05,1;RA=1039;RL=2088;RPP=48.09;RR=2393;RUN=1;ReadPosRankSum=5.288;SAB=0.41442;SAF=1857;SAP=288.09;SAR=2624;SC=CCAAACCCAACCCTGCCTGGC;SET_INTEGRATION;SET_WGVQSR;SRB=0.48893;SRF=508;SRP=4.1159;SRR=531;TC;TR=8;TU=CCTG;VQSLOD=8.5148;dbSNP=120;set=Intersection;sumGLbyD=59.79 +20 1046297 rs33956316 C CT,CTT,CTTT 17698 PASS ABR=408;AC=432,79,230;AF=0.39779,0.07274,0.21179;BVAR;BaseQRankSum=-8.413;DB;DP=15649;DP4=147,199,534,436;FR;FS=11.580;HOMA=97;HOMR=457;HP=20;HR=16;HU=T;HaplotypeScore=16.0590;INDEL;INS;InbreedingCoeff=0.6018;IndelType=MULTIALLELIC_INDEL;KGPilot123;MQ0=19;MQ0Fraction=0.0093;MQRankSum=7.992;NF;NR;NS=767;PP;PV4=6e-05,1,1,1;QD=8.18;RA=1183;RUN=1;ReadPosRankSum=2.684;SB=-6384.08;SC=GGAAAATTTTCTTTTTTTTTT;SET_WGVQSR;SRB=0.40913;SRF=484;SRP=87.859;SRR=699;TC;TR=16;TU=T;VQSLOD=8.4941;dbSNP=132;set=Intersection +20 1405740 . T TA 257.28 PASS AF=0.0188;BaseQRankSum=-0.745;DP=3769;Dels=0.00;FS=0.742;HPLen=9;HRun=9;InbreedingCoeff=0.0462;IndelType=INS.NumRepetitions_9.EventLength_1.RepeatExpansion_A.;MQ0Fraction=0.0151;MQRankSum=-0.090;ReadPosRankSum=-1.582;SET_INTEGRATION;SET_WGVQSR;VQSLOD=5.6502;set=Intersection;sumGLbyD=6.94 +20 1690501 . TC T 27928 PASS AA=108;AB=0.91372;ABA=100;ABP=1726.1;ABR=1059;AC=35;AF=0.02966;AN=1180;BL=593;BR=6973;BVAR;BaseQRankSum=7.567;DEL;DP=10612;Dels=0.01;EL=50;EPP=4.2971;ER=58;FS=0.000;HETAR=378;HOMA=184;HOMR=477;HRun=1;InbreedingCoeff=0.0495;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;LEN=1;LRB=0.84325;LRBP=11685;MQ0=0;MQ0Fraction=0.0000;MQM=87.361;MQRankSum=4.088;NS=1045;RA=3125;RL=3;RPP=212.2;RR=105;RUN=1;ReadPosRankSum=-13.096;SAB=0.56481;SAF=61;SAP=6.9511;SAR=47;SRB=0.51776;SRF=1618;SRP=11.572;SRR=1507;VQSLOD=3.9824;set=filterInVQSR-2of5;sumGLbyD=4.07 +20 1991285 rs113891396 TAA T,TA,TAAA,TAAAAA,TAAAAAA,TAAAAAAA,TAAAAAAAA 39235.36 PASS AC=5,251,20,39,188,52,79;AF=0.0056,0.2789,0.0222,0.0433,0.2089,0.0578,0.0878;AN=900;BVAR;BaseQRankSum=1.124;DB;DEL;DP=54393;DP4=906,772,824,579;Dels=0.21;FR;FS=37.525;HP=12;HR=12;HRun=12;HU=A;INDEL;INS;InbreedingCoeff=0.6891;IndelType=MULTIALLELIC_INDEL;MQ=76.81;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-6.593;NF;NR;PP;PV4=0.0087,1,6.3e-19,1;RUN=1;ReadPosRankSum=-2.184;SC=ATCTGCCACTTAAAAAAAAAA;SET_WGVQSR;TC;TR=12;TU=A;VQSLOD=9.0007;dbSNP=132;set=Intersection;sumGLbyD=11.45 +20 2355911 . TA T 11723 PASS AA=79;AB=0.9393;ABA=57;ABP=1577;ABR=882;AC=38;AF=0.0411;AN=924;BL=644;BR=5536;BVAR;BaseQRankSum=2.434;DEL;DP=9687;Dels=0.00;EL=45;EPP=6.3362;ER=34;FS=3.043;HETAR=321;HOMA=182;HOMR=555;HRun=5;InbreedingCoeff=0.0412;IndelType=DEL.NumRepetitions_5.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.79159;LRBP=8411.9;MQ0=0;MQ0Fraction=0.0000;MQM=70.848;MQRankSum=0.137;NS=1058;RA=3415;RL=3;RPP=149.49;RR=76;RUN=1;ReadPosRankSum=-12.116;SAB=0.44304;SAF=35;SAP=5.2367;SAR=44;SRB=0.43572;SRF=1488;SRP=125.55;SRR=1927;VQSLOD=3.8910;set=filterInVQSR-2of5;sumGLbyD=4.88 +20 2771621 rs11479849 GT G,GTT 1605.60 PASS AA=80;AB=0.79825;ABA=69;ABP=267.24;ABR=273;AC=79,91;AF=0.06551,0.07546;AN=1206;BL=2593;BR=3805;BVAR;BaseQRankSum=7.825;DB;DP=9790;Dels=0.04;EL=37;EPP=3.9875;ER=43;FR;FS=4.751;HETAR=62;HOMA=5;HOMR=958;HP=11;HR=11;HRun=11;HU=T;INS;InbreedingCoeff=0.2646;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.18943;LRBP=501.57;MQ0=0;MQ0Fraction=0.0000;MQM=52.45;MQRankSum=-0.560;NF;NR;NS=1025;PP;RA=3949;RL=29;RPP=16.148;RR=51;RUN=1;ReadPosRankSum=-2.397;SAB=0.525;SAF=42;SAP=3.4446;SAR=38;SC=TCATTTTAACGTTTTTTTTTT;SET_WGVQSR;SRB=0.54368;SRF=2147;SRP=68.46;SRR=1802;TC;TR=11;TU=T;VQSLOD=3.5989;set=filterInVQSR-2of5;sumGLbyD=3.92 +20 2891235 . G GT,GTTT 2869.87 PASS AC=236,246;AF=0.2803,0.2922;AN=842;BaseQRankSum=8.979;DP=1067;FS=3.911;HaplotypeScore=20.3595;InbreedingCoeff=0.6511;IndelType=MULTIALLELIC_INDEL;MQ=44.86;MQ0=114;MQ0Fraction=0.1068;MQRankSum=-2.273;QD=4.00;ReadPosRankSum=-6.601;SB=-991.85;SET_INTEGRATION;SET_WGVQSR;VQSLOD=5.4379;set=VQSR +20 3033550 . TGAG T 2005.90 PASS AA=34;AB=0.51429;ABA=34;ABP=3.1344;ABR=36;AC=22;AF=0.0332;AN=662;BL=1374;BR=1649;BVAR;BaseQRankSum=5.192;DEL;DP=14639;DP4=2271,1492,12,21;Dels=0.02;EL=19;EPP=4.0322;ER=15;FR;FS=16.657;HETAR=17;HOMA=0;HOMR=914;HP=1;HPLen=1;HR=1;HRun=0;HU=G;INDEL;InbreedingCoeff=-0.0454;IndelType=DEL.NumRepetitions_1.EventLength_3.;LEN=3;LRB=0.090969;LRBP=57.333;MQ=53.99;MQ0Fraction=0.0304;MQM=46.735;MQRankSum=1.938;NF;NR;NS=931;PP;PV4=0.0068,9.4e-05,1,1;RA=2985;RL=11;RPP=12.207;RR=23;RUN=1;ReadPosRankSum=-0.466;SAB=0.41176;SAF=14;SAP=5.3095;SAR=20;SC=CTTGGGAGGCTGAGGTGGGAG;SET_INTEGRATION;SET_WGVQSR;SRB=0.62781;SRF=1874;SRP=426.52;SRR=1111;TC;TR=1;TU=G;VQSLOD=8.9194;set=Intersection;sumGLbyD=24.41 +20 3873327 rs61519218 A AAG 683.85 PASS AC=25;AF=0.0313;AN=800;BaseQRankSum=4.839;DB;DP=1718;FS=4.265;HRun=0;HaplotypeScore=20.5789;InbreedingCoeff=0.1055;IndelType=INS.NOVEL_2.;MQ=53.70;MQ0=37;MQ0Fraction=0.0215;MQRankSum=2.468;QD=6.30;ReadPosRankSum=4.254;SB=-403.21;SET_INTEGRATION;SET_WGVQSR;VQSLOD=6.1858;set=VQSR +20 4028835 . GC G 2511.30 PASS AA=66;AB=0.56954;ABA=65;ABP=9.3521;ABR=86;AC=22;AF=0.01836;AN=1198;BL=2303;BR=2463;BVAR;BaseQRankSum=7.621;DEL;DP=22795;DP4=1714,2774,22,37;Dels=0.02;EL=34;EPP=3.1419;ER=32;FQ=999;FR;FS=2.095;HETAR=21;HOMA=0;HOMR=1050;HP=2;HPLen=2;HR=2;HRun=2;HU=C;INDEL;InbreedingCoeff=0.0125;IndelType=DEL.NumRepetitions_2.EventLength_1.RepeatExpansion_C.;LEN=1;LRB=0.033571;LRBP=14.674;MQ=108.09;MQ0=0;MQ0Fraction=0.0000;MQM=53.318;MQRankSum=5.257;NF;NR;NS=1071;PP;PV4=1,5.4e-13,1,0.075;RA=6185;RL=36;RPP=4.1947;RR=30;RUN=1;ReadPosRankSum=-1.059;SAB=0.45455;SAF=30;SAP=4.1947;SAR=36;SC=TGCTGTCACTGCCTTCTCCTA;SET_INTEGRATION;SET_WGVQSR;SRB=0.42118;SRF=2605;SRP=336.76;SRR=3580;TC;TR=2;TU=C;VQSLOD=10.2409;set=Intersection;sumGLbyD=12.71 +20 4039609 rs67812039 G GA 43457 PASS AA=909;AB=0.54639;ABA=572;ABP=26.583;ABR=689;AC=302;AF=0.3455;AN=874;BL=37070;BR=38211;BVAR;BaseQRankSum=20.147;DB;DP=25595;DP4=1483,1374,528,542;Dels=0.00;EL=467;EPP=4.5033;ER=442;FQ=999;FR;FS=5.441;HETAR=243;HOMA=127;HOMR=608;HP=4;HPLen=3;HR=3;HRun=3;HU=A;INDEL;INS;InbreedingCoeff=0.1388;IndelType=INS.NumRepetitions_3.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.015157;LRBP=40.563;MQ=119.50;MQ0=0;MQ0Fraction=0.0000;MQM=83.197;MQRankSum=1.080;NF;NR;NS=978;PP;PV4=0.16,1,3.6e-12,1;RA=3033;RL=443;RPP=4.274;RR=466;RUN=1;ReadPosRankSum=-1.000;SAB=0.32233;SAF=293;SAP=252.24;SAR=616;SC=TATGTTGGGAGAAATATCAGT;SET_INTEGRATION;SET_WGVQSR;SRB=0.38378;SRF=1164;SRP=358.85;SRR=1869;TC;TR=4;TU=AG;VQSLOD=9.9146;dbSNP=130;set=Intersection;sumGLbyD=16.79 +20 4390056 . TC T 49312 PASS AA=91;AB=0.94353;ABA=86;ABP=2605.4;ABR=1437;AC=39;AF=0.03160;AN=1234;BL=6823;BR=731;BVAR;BaseQRankSum=2.727;DEL;DP=13149;Dels=0.00;EL=41;EPP=4.9431;ER=50;FS=4.002;HETAR=465;HOMA=313;HOMR=292;HRun=3;InbreedingCoeff=0.0326;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;LEN=1;LRB=0.80646;LRBP=10671;MQ0=0;MQ0Fraction=0.0000;MQM=69.824;MQRankSum=-0.903;NS=1073;RA=3078;RL=89;RPP=183.62;RR=2;RUN=1;ReadPosRankSum=-12.526;SAB=0.45055;SAF=41;SAP=4.9431;SAR=50;SRB=0.52567;SRF=1618;SRP=20.622;SRR=1460;VQSLOD=4.3235;set=Intersection;sumGLbyD=3.53 +20 4474622 . TA T,TAA,TAAA,TAAAA 94522.28 PASS ABR=114;AC=38,68,16,900;AF=0.03333,0.05965,0.01404,0.78947;AN=1140;BVAR;BaseQRankSum=9.741;DB;DP=16656;Dels=0.00;FR;FS=2.355;HOMA=3;HOMR=936;HP=10;HPLen=10;HR=10;HRun=10;HU=A;INS;InbreedingCoeff=0.4516;IndelType=MULTIALLELIC_INDEL;MQ0=2;MQ0Fraction=0.0008;MQRankSum=-4.096;NF;NR;NS=980;PP;RA=3766;RUN=1;ReadPosRankSum=2.380;SC=AGAAAAAAATTAAAAAAAAAA;SET_WGVQSR;SRB=0.49734;SRF=1873;SRP=3.2409;SRR=1893;TC;TR=10;TU=A;VQSLOD=8.8186;set=Intersection;sumGLbyD=38.79 +20 4824911 . AC A 41998.70 PASS AC=1172;AF=0.97342;AN=1204;BaseQRankSum=8.604;DP=3615;FS=9.934;HRun=1;HaplotypeScore=39.6843;InbreedingCoeff=0.0980;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;MQ=129.80;MQ0=1;MQ0Fraction=0.0003;MQRankSum=3.378;QD=11.62;ReadPosRankSum=6.967;SB=-16955.28;VQSLOD=4.2689;set=VQSR +20 4839897 rs35881880 TAA T,TA,TAAA,TAAAAA 3906.80 PASS AC=12,95,137,189;AF=0.01024,0.08106,0.11689,0.16126;AN=1172;BVAR;BaseQRankSum=15.271;DB;DEL;DP=15105;Dels=0.04;FR;FS=43.567;HP=19;HR=13;HRun=13;HU=A;INS;InbreedingCoeff=0.5716;IndelType=MULTIALLELIC_INDEL;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-2.569;NF;NR;PP;RUN=1;ReadPosRankSum=-13.794;SC=TGTTAAAAAATAAAAAAAAAA;TC;TR=13;TU=A;VQSLOD=8.1773;set=Intersection;sumGLbyD=3.77 +20 5507414 . G GCC 439.08 PASS AC=23;AF=0.01876;AN=1226;BaseQRankSum=3.051;DP=3023;FS=3.636;HRun=1;HaplotypeScore=30.3104;InbreedingCoeff=0.0204;IndelType=INS.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;MQ=112.09;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-2.065;QD=2.85;ReadPosRankSum=-2.709;SB=-302.22;VQSLOD=4.4311;set=VQSR +20 5609676 . GA G,GAA 799.89 PASS AA=42;AB=0.79096;ABA=37;ABP=133.16;ABR=140;AC=43,65;AF=0.03607,0.05453;AF1=0.02826;AN=1192;BL=1360;BR=2334;BVAR;BaseQRankSum=5.069;CI95=0.01242,0.04037;DP=15610;DP4=1548,2441,21,30;Dels=0.02;EL=18;EPP=4.8716;ER=24;FQ=12.1;FR;FS=0.000;HETAR=36;HOMA=1;HOMR=991;HP=13;HPLen=10;HR=10;HRun=10;HU=A;INDEL;INS;InbreedingCoeff=0.2001;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.26367;LRBP=560.68;MQ=63.29;MQ0Fraction=0.0003;MQM=44.143;MQRankSum=1.755;NF;NR;NS=1028;PP;PV4=0.77,1,0.0087,0.0053;RA=4114;RL=15;RPP=10.455;RR=27;RUN=1;ReadPosRankSum=-2.978;SAB=0.5;SAF=21;SAP=3.0103;SAR=21;SC=AAAAAAGAAAGAAAAAAAAAA;SET_WGVQSR;SRB=0.39742;SRF=1635;SRP=379;SRR=2479;TC;TR=11;TU=AAAG;VQSLOD=4.1229;set=filterInVQSR-2of5;sumGLbyD=7.95 +20 5736211 rs35303106 CT C,CTT 4384.40 PASS AA=117;AB=0.71499;ABA=116;ABP=166.4;ABR=291;AC=32,145;AF=0.02712,0.12288;AN=1180;BL=5556;BR=4901;BVAR;BaseQRankSum=2.708;DB;DP=9157;Dels=0.01;EL=54;EPP=4.5136;ER=63;FR;FS=2.802;HETAR=79;HOMA=1;HOMR=837;HP=16;HR=11;HRun=11;HU=T;INS;InbreedingCoeff=0.1903;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.062637;LRBP=92.1;MQ0Fraction=0.0273;MQM=48.932;MQRankSum=3.654;NF;NR;NS=917;PP;RA=2785;RL=79;RPP=34.209;RR=38;RUN=1;ReadPosRankSum=0.795;SAB=0.5641;SAF=66;SAP=7.1862;SAR=51;SC=TTTTCTTTTTCTTTTTTTTTT;SET_INTEGRATION;SET_WGVQSR;SRB=0.41795;SRF=1164;SRP=165.85;SRR=1621;TC;TR=11;TU=T;VQSLOD=5.0895;set=Intersection;sumGLbyD=4.66 +20 5898626 rs34483659 CAAA C,CA,CAA,CAAAAA 1140.16 PASS ABR=34;AC=19,98,56,199;AF=0.0227,0.1172,0.0670,0.2380;AF1=0.08519;BVAR;BaseQRankSum=5.049;CI95=0.03727,0.1273;DB;DEL;DP=5091;DP4=539,408,121,123;FQ=4.43;FR;FS=5.701;HOMA=64;HOMR=156;HP=19;HR=18;HU=A;HaplotypeScore=11.5333;INDEL;InbreedingCoeff=0.7405;IndelType=MULTIALLELIC_INDEL;MQ0=117;MQ0Fraction=0.0986;MQRankSum=6.290;NF;NR;NS=240;PP;PV4=0.043,1,1,0.0087;QD=1.22;RA=204;RUN=1;ReadPosRankSum=-2.684;SB=-1015.09;SC=ACTAAAAATACAAAAAAAAAA;SET_WGVQSR;SRB=0.35294;SRF=72;SRP=41.33;SRR=132;TC;TR=18;TU=A;VQSLOD=4.1696;set=filterInVQSR-2of5 +20 5975126 rs10541892 C CAG 504.78 PASS AC=79;AF=0.07004;AN=1128;BaseQRankSum=10.498;DB;DP=2050;FS=38.228;HRun=0;HaplotypeScore=14.1426;InbreedingCoeff=-0.0053;IndelType=INS.NOVEL_2.;MQ=60.40;MQ0=80;MQ0Fraction=0.0390;MQRankSum=5.098;QD=1.63;ReadPosRankSum=-4.851;SB=-590.69;VQSLOD=4.8517;set=VQSR +20 6040983 rs11087710 A AAAAAAGAG,AAAAAGAG,AAAAGAG,AAAAGAGAG,AAAGAG,AAAGAGAG,AAGAG,AAGAGAG,AG,AGAG,AGAGAG 66894.55 PASS ABR=468;AC=80,9,20,136,31,91,33,29,9,3,5;AF=0.0980,0.0110,0.0245,0.1667,0.0380,0.1115,0.0404,0.0355,0.0110,0.0037,0.0061;AN=816;BVAR;BaseQRankSum=-12.470;DB;DP=38726;DP4=426,611,310,472;Dels=0.00;FQ=999;FR;FS=6.635;HOMA=110;HOMR=506;HP=14;HR=15;HRun=0;HU=A;INDEL;INS;InbreedingCoeff=0.8291;IndelType=MULTIALLELIC_INDEL;KGPilot123;MQ=54.22;MQ0Fraction=0.0168;MQRankSum=-5.329;NF;NR;NS=861;PP;PV4=0.56,1,6.9e-09,0.31;RA=1828;RUN=1;ReadPosRankSum=-7.857;SC=AAAAAAAAAAAAGAGAGAGAG;SET_WGVQSR;SRB=0.62418;SRF=1141;SRP=247.85;SRR=687;TC;TR=15;TU=A;VQSLOD=9.0574;dbSNP=131;set=Intersection;sumGLbyD=36.72 +20 7024548 . G GAT 5041.27 PASS AC=123;AF=0.10336;AN=1190;BaseQRankSum=23.097;DP=3045;FS=7.979;HRun=0;HaplotypeScore=15.6967;InbreedingCoeff=0.1062;IndelType=INS.NumRepetitions_5.EventLength_2.RepeatExpansion_AT.;MQ=119.29;MQ0=2;MQ0Fraction=0.0007;MQRankSum=-3.725;QD=8.97;ReadPosRankSum=-1.636;SB=-2257.45;SET_INTEGRATION;SET_WGVQSR;VQSLOD=5.9332;set=VQSR +20 7484554 . A AT 5.09 PASS AC=0;AF=0.0000;AN=710;BaseQRankSum=-0.696;DP=1862;FS=2.835;HRun=9;HaplotypeScore=13.5425;InbreedingCoeff=0.0567;IndelType=INS.NumRepetitions_9.EventLength_1.RepeatExpansion_T.;MQ=76.92;MQ0=0;MQ0Fraction=0.0000;MQRankSum=1.932;ReadPosRankSum=-1.701;VQSLOD=4.3156;set=VQSR +20 7632194 rs77286341 GAA AAA,G 5324 PASS AC=0;AF=0.0000;AN=700;BaseQRankSum=-1.741;DB;DP=1772;FR;HP=4;HPLen=3;HR=3;HRun=0;HU=A;HaplotypeScore=60.1795;InbreedingCoeff=0.0017;IndelType=MIXED;MQ=70.69;MQ0=13;MQ0Fraction=0.0073;MQRankSum=-1.315;NF;NR;PP;ReadPosRankSum=-3.650;SC=GAGAGAGAGAGAAAGGTGTAA;TC;TR=13;TU=AG;set=filterInVQSR-2of5 +20 7767508 rs71329674 G GA 17914 PASS AA=415;AB=0.61617;ABA=337;ABP=105.94;ABR=541;AC=141;AF=0.11614;AN=1214;BL=15187;BR=20323;BVAR;BaseQRankSum=-13.946;DB;DP=28222;Dels=0.00;EL=184;EPP=14.569;ER=231;FQ=999;FR;FS=13.296;HETAR=178;HOMA=35;HOMR=822;HP=14;HPLen=9;HR=9;HRun=9;HU=A;INDEL;INS;InbreedingCoeff=0.0714;IndelType=INS.NumRepetitions_9.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.14464;LRBP=1616.1;MQ=89.69;MQ0=1;MQ0Fraction=0.0003;MQM=51.667;MQRankSum=0.664;NF;NR;NS=1035;PP;RA=3707;RL=171;RPP=30.894;RR=244;RUN=1;ReadPosRankSum=-1.120;SAB=0.45301;SAF=188;SAP=10.969;SAR=227;SC=ATTCTAAAAAGAAAAAAAAAT;SET_INTEGRATION;SET_WGVQSR;SRB=0.38495;SRF=1427;SRP=429.23;SRR=2280;TC;TR=9;TU=A;VQSLOD=9.0748;set=Intersection;sumGLbyD=11.09 +20 7920261 . TA T,TAA 802.15 PASS AA=28;AB=0.8;ABA=28;ABP=112.45;ABR=112;AC=22,39;AF=0.01836,0.03255;AN=1198;BL=943;BR=1487;BVAR;BaseQRankSum=2.233;DP=10645;Dels=0.01;EL=11;EPP=5.8022;ER=17;FR;FS=1.691;HETAR=20;HOMA=0;HOMR=1007;HP=10;HPLen=9;HR=9;HRun=9;HU=A;INS;InbreedingCoeff=0.2256;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.22387;LRBP=267.46;MQ0=0;MQ0Fraction=0.0000;MQM=57.571;MQRankSum=0.940;NF;NR;NS=1027;PP;RA=4776;RL=8;RPP=14.178;RR=20;RUN=1;ReadPosRankSum=-1.567;SAB=0.53571;SAF=15;SAP=3.3205;SAR=13;SC=GTAACTGCTATAAAAAAAAAC;SET_WGVQSR;SRB=0.48576;SRF=2320;SRP=11.42;SRR=2456;TC;TR=9;TU=A;VQSLOD=4.0815;set=filterInVQSR-2of5;sumGLbyD=5.37 +20 8012465 rs10595338 TATGA T 2104.41 PASS AF=0.03339;BaseQRankSum=10.662;DB;DP=11772;DS;Dels=0.01;FR;FS=7.678;HP=1;HPLen=1;HR=1;HRun=0;HU=A;InbreedingCoeff=0.0266;IndelType=DEL.NumRepetitions_1.EventLength_4.;MQ0Fraction=0.0731;MQRankSum=0.603;NF;NR;PP;ReadPosRankSum=1.276;SC=TGTATGTATGTATGATGTATG;TC;TR=19;TU=ATGT;VQSLOD=4.1376;set=filterInVQSR-2of5;sumGLbyD=6.53 +20 8573999 . CGTGT C,CGT,CGTGTGT,TGTGT 45865.96 PASS AC=458,0,731;AF=0.37727,0.00000,0.60214;AN=1214;BVAR;BaseQRankSum=-6.703;DEL;DP=37714;Dels=0.03;FR;FS=11.079;HP=2;HPLen=1;HR=1;HRun=0;HU=G;INDEL;INS;InbreedingCoeff=0.7632;IndelType=MIXED;LEN=2;MQ0Fraction=0.0026;MQRankSum=-1.394;NF;NR;PP;RUN=1;ReadPosRankSum=-2.102;SC=TGTGTGTGCGCGTGTGTGTGT;SET_INTEGRATION;SET_WGVQSR;TC;TR=18;TU=GT;VQSLOD=6.1435;set=Intersection;sumGLbyD=3.53 +20 8610455 rs10571111 TTTTC T 11763.51 PASS AC=190;AF=0.17056;AN=1114;BaseQRankSum=-14.397;DB;DP=2323;FS=2.321;HRun=0;HaplotypeScore=39.8020;InbreedingCoeff=0.2502;IndelType=DEL.NumRepetitions_2.EventLength_4.;MQ=53.39;MQ0=104;MQ0Fraction=0.0448;MQRankSum=3.519;QD=19.07;ReadPosRankSum=4.150;SB=-4067.02;SET_INTEGRATION;SET_WGVQSR;VQSLOD=5.0554;set=VQSR +20 9139079 . ATT A,AT,ATTT,ATTTT,ATTTTT 8777.90 PASS AC=23,140,114,69,113;AF=0.01993,0.12132,0.09879,0.05979,0.09792;AN=1154;BVAR;BaseQRankSum=-0.022;DEL;DP=25109;DP4=502,657,278,313;FR;FS=11.929;HP=16;HR=16;HU=T;HaplotypeScore=20.2361;INDEL;INS;InbreedingCoeff=0.5704;IndelType=MULTIALLELIC_INDEL;MQ0=16;MQ0Fraction=0.0067;MQRankSum=2.624;NF;NR;PP;PV4=0.14,1,1,1;QD=1.48;RUN=1;ReadPosRankSum=-0.480;SB=-2354.28;SC=CACCTGGCTAATTTTTTTTTT;SET_WGVQSR;TC;TR=16;TU=T;VQSLOD=6.9180;set=Intersection +20 9862448 . CT C 49312 PASS AA=60;AB=0.96003;ABA=53;ABP=2440.4;ABR=1273;AC=18;AF=0.01461;AN=1232;BL=3516;BR=140;BVAR;BaseQRankSum=-2.056;DEL;DP=11893;Dels=0.01;EL=35;EPP=6.6294;ER=25;FS=1.787;HETAR=396;HOMA=344;HOMR=334;HRun=1;InbreedingCoeff=0.0379;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.92341;LRBP=6772.5;MQ0Fraction=0.0006;MQM=54.267;MQRankSum=-0.907;NS=1074;RA=2990;RL=60;RPP=133.3;RR=0;RUN=1;ReadPosRankSum=-10.579;SAB=0.58333;SAF=35;SAP=6.6294;SAR=25;SRB=0.47826;SRF=1430;SRP=15.284;SRR=1560;VQSLOD=3.0237;set=filterInVQSR-2of5;sumGLbyD=2.84 +20 9863736 rs73618103 G GT 50570.21 PASS AA=2247;AB=0.48878;ABA=1412;ABP=6.0324;ABR=1350;AC=546;AF=0.44463;AN=1228;BL=86886;BR=95862;BVAR;BaseQRankSum=-23.978;DB;DP=32517;DP4=1125,1133,1017,1048;Dels=0.00;EL=1089;EPP=7.6113;ER=1158;FQ=999;FR;FS=2.529;HETAR=445;HOMA=201;HOMR=393;HP=4;HPLen=4;HR=4;HRun=4;HU=T;INDEL;INS;InbreedingCoeff=0.1393;IndelType=INS.NumRepetitions_4.EventLength_1.RepeatExpansion_T.;KGPilot123;LEN=1;LRB=0.049117;LRBP=960.35;MQ=68.10;MQ0=2;MQ0Fraction=0.0006;MQM=50.931;MQRankSum=-1.580;NF;NR;NS=1039;PP;PV4=0.71,1,0.11,1;RA=3139;RL=1089;RPP=7.6113;RR=1158;RUN=1;ReadPosRankSum=0.846;SAB=0.54161;SAF=1217;SAP=36.804;SAR=1030;SC=TGATTGTATGGTTTTGTCCTT;SET_INTEGRATION;SET_WGVQSR;SRB=0.53425;SRF=1677;SRP=34.987;SRR=1462;TC;TR=4;TU=T;VLD;VQSLOD=10.1800;dbSNP=131;set=Intersection;sumGLbyD=18.20 +20 10926959 . AG A 12239 PASS AA=65;AB=0.92801;ABA=64;ABP=1417.6;ABR=825;AC=24;AF=0.0264;AN=908;BL=616;BR=3782;BVAR;BaseQRankSum=9.990;DEL;DP=10708;Dels=0.01;EL=37;EPP=5.7163;ER=28;FS=1.652;HETAR=275;HOMA=70;HOMR=724;HRun=1;InbreedingCoeff=0.0102;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_G.;LEN=1;LRB=0.71987;LRBP=4952;MQ0=1;MQ0Fraction=0.0004;MQM=118.82;MQRankSum=1.018;NS=1069;RA=4746;RL=5;RPP=104.07;RR=60;RUN=1;ReadPosRankSum=-12.039;SAB=0.41538;SAF=27;SAP=7.0526;SAR=38;SRB=0.4764;SRF=2261;SRP=25.968;SRR=2485;VQSLOD=2.9713;set=filterInVQSR-2of5;sumGLbyD=4.10 +20 11299648 . TG T 49315 PASS AA=62;AB=0.95292;ABA=54;ABP=2046.7;ABR=1093;AC=28;AF=0.0373;AN=750;BL=3126;BR=528;BVAR;BaseQRankSum=-4.929;DEL;DP=10764;Dels=0.01;EL=26;EPP=6.5127;ER=36;FS=3.851;HETAR=366;HOMA=383;HOMR=304;HRun=1;InbreedingCoeff=0.0267;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_G.;LEN=1;LRB=0.711;LRBP=4014.1;MQ0=1;MQ0Fraction=0.0005;MQM=76.468;MQRankSum=1.327;NS=1070;RA=2588;RL=54;RPP=77.121;RR=8;RUN=1;ReadPosRankSum=-12.507;SAB=0.48387;SAF=30;SAP=3.1504;SAR=32;SRB=0.47643;SRF=1233;SRP=15.499;SRR=1355;VQSLOD=3.8673;set=filterInVQSR-2of5;sumGLbyD=3.00 +20 11561096 . CTA C 999 PASS AC=2;AF=0.0029;AF1=0.005602;BaseQRankSum=3.190;CI95=0.004425,0.01106;DP=7521;DP4=1998,1794,2,4;Dels=0.00;FQ=999;FR;FS=5.422;HP=3;HPLen=2;HR=1;HRun=0;HU=T;INDEL;InbreedingCoeff=0.0056;IndelType=DEL.NumRepetitions_1.EventLength_2.RepeatExpansion_TA.;MQ=113.88;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.297;NF;NR;PP;PV4=0.43,0.024,1,1;ReadPosRankSum=1.406;SC=CAATAGTATTCTATGTCAGTC;SET_INTEGRATION;SET_WGVQSR;TC;TR=1;TU=T;VQSLOD=8.6243;set=Intersection;sumGLbyD=21.89 +20 11723671 . C CA 1096.60 PASS AA=35;AB=0.69565;ABA=35;ABP=41.247;ABR=80;AC=10;AF=0.0141;AN=710;BL=2005;BR=1702;BVAR;BaseQRankSum=-3.427;DP=9819;Dels=0.00;EL=20;EPP=4.5614;ER=15;FR;FS=3.814;HETAR=20;HOMA=0;HOMR=1034;HP=8;HPLen=7;HR=7;HRun=7;HU=A;INS;InbreedingCoeff=0.0323;IndelType=INS.NumRepetitions_7.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.081737;LRBP=56.79;MQ0=0;MQ0Fraction=0.0000;MQM=81.057;MQRankSum=0.050;NF;NR;NS=1054;PP;RA=5562;RL=22;RPP=8.0357;RR=13;RUN=1;ReadPosRankSum=-2.012;SAB=0.71429;SAF=25;SAP=16.97;SAR=10;SC=ATATTGAAGACAAAAAAACAG;SET_INTEGRATION;SET_WGVQSR;SRB=0.49371;SRF=2746;SRP=4.9233;SRR=2816;TC;TR=7;TU=A;VQSLOD=7.4342;set=Intersection;sumGLbyD=8.30 +20 12238835 rs113904674 CTCTTCATGGTCT C 1813.44 PASS AA=7;AB=0.73077;ABA=7;ABP=15.037;ABR=19;AC=4;AF=0.0056;AN=712;BL=360;BR=368;BVAR;BaseQRankSum=3.891;DB;DEL;DP=10309;Dels=0.00;EL=4;EPP=3.3205;ER=3;FR;FS=0.000;HETAR=3;HOMA=0;HOMR=1076;HP=1;HPLen=2;HR=2;HRun=0;HU=C;InbreedingCoeff=-0.0381;IndelType=DEL.NumRepetitions_1.EventLength_10orMore.;LEN=12;LRB=0.010989;LRBP=3.2012;MQ0=0;MQ0Fraction=0.0000;MQM=37;MQRankSum=-3.793;NF;NR;NS=1079;PP;RA=6085;RL=4;RPP=3.3205;RR=3;RUN=1;ReadPosRankSum=1.319;SAB=0.42857;SAF=3;SAP=3.3205;SAR=4;SC=CTTAATGCTCCTCTTCATGGT;SET_INTEGRATION;SET_WGVQSR;SRB=0.51257;SRF=3119;SRP=11.364;SRR=2966;TC;TR=6;TU=CCT;VQSLOD=5.7551;set=Intersection;sumGLbyD=69.48 +20 12602812 . AT A 12344 PASS AA=47;AB=0.94372;ABA=43;ABP=1309.5;ABR=721;AC=14;AF=0.0196;AN=716;BL=2714;BR=217;BVAR;BaseQRankSum=1.424;DEL;DP=10743;Dels=0.00;EL=24;EPP=3.0565;ER=23;FS=0.629;HETAR=228;HOMA=65;HOMR=769;HRun=1;InbreedingCoeff=0.0233;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.85193;LRBP=4622.3;MQ0Fraction=0.0000;MQM=99.574;MQRankSum=1.901;NS=1080;RA=4839;RL=46;RPP=96.568;RR=1;RUN=1;ReadPosRankSum=-9.906;SAB=0.53191;SAF=25;SAP=3.4261;SAR=22;SRB=0.51106;SRF=2473;SRP=8.148;SRR=2366;VQSLOD=2.8161;set=filterInVQSR-2of5;sumGLbyD=3.67 +20 13600884 . CTG C,CTGTG 1278.10 PASS AA=85;AB=0.77994;ABA=79;ABP=247.38;ABR=280;AC=71,22;AF=0.05907,0.01830;AN=1202;BL=3279;BR=3205;BVAR;BaseQRankSum=8.852;DEL;DP=24185;DP4=1317,931,52,49;Dels=0.03;EL=45;EPP=3.649;ER=40;FQ=999;FR;FS=31.826;HETAR=75;HOMA=4;HOMR=926;HP=2;HPLen=1;HR=1;HRun=0;HU=T;INDEL;InbreedingCoeff=0.1566;IndelType=MULTIALLELIC_INDEL;LEN=2;LRB=0.011413;LRBP=4.8442;MQ=65.06;MQ0Fraction=0.0012;MQM=48.671;MQRankSum=-0.511;NF;NR;NS=1005;PP;PV4=0.18,1,0.39,0.27;RA=3342;RL=35;RPP=8.7583;RR=50;RUN=1;ReadPosRankSum=-2.329;SAB=0.43529;SAF=37;SAP=6.1015;SAR=48;SC=TCCCTTTACTCTGTGTGTGTG;SET_INTEGRATION;SET_WGVQSR;SRB=0.59066;SRF=1974;SRP=241.62;SRR=1368;TC;TR=15;TU=GT;VQSLOD=3.8635;set=filterInVQSR-2of5;sumGLbyD=4.23 +20 13666265 . T TATAG 556.88 PASS AC=21;AF=0.01959;AN=1072;BaseQRankSum=24.958;DP=2706;FS=2.581;HRun=0;HaplotypeScore=25.9952;InbreedingCoeff=0.1419;IndelType=INS.NOVEL_4.;MQ=72.43;MQ0=0;MQ0Fraction=0.0000;MQRankSum=2.888;QD=4.38;ReadPosRankSum=2.552;SB=-417.04;SET_INTEGRATION;SET_WGVQSR;VQSLOD=7.3380;set=VQSR +20 13861245 rs72422273 C CTCA 2685.46 PASS AC=140;AF=0.11589;AN=1208;BaseQRankSum=24.355;DB;DP=2910;FS=6.808;HRun=0;HaplotypeScore=19.3095;InbreedingCoeff=-0.0991;IndelType=INS.NumRepetitions_1.EventLength_3.;MQ=78.25;MQ0=22;MQ0Fraction=0.0076;MQRankSum=3.225;QD=3.64;ReadPosRankSum=2.607;SB=-1861.38;VQSLOD=4.1974;set=VQSR +20 13865746 . T TA,TAA 1416.23 PASS AA=63;AB=0.80417;ABA=47;ABP=195.87;ABR=193;AC=122,21;AF=0.10133,0.01744;AN=1204;BL=3673;BR=1145;BVAR;BaseQRankSum=-3.336;DP=10513;Dels=0.00;EL=62;EPP=131.27;ER=1;FR;FS=716.583;HETAR=45;HOMA=1;HOMR=998;HP=2;HR=1;HRun=1;HU=A;INS;InbreedingCoeff=0.0814;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.5247;LRBP=2883.3;MQ0=0;MQ0Fraction=0.0000;MQM=56.143;MQRankSum=-1.197;NF;NR;NS=1044;PP;RA=4529;RL=62;RPP=131.27;RR=1;RUN=1;ReadPosRankSum=-12.295;SAB=1;SAF=63;SAP=139.81;SAR=0;SC=GGAACATGGATACCCCCCTGC;SRB=0.52462;SRF=2376;SRP=26.853;SRR=2153;TC;TR=1;TU=A;VQSLOD=-4.2308;set=filterInVQSR-2of5;sumGLbyD=4.77 +20 13881703 . CTT C 152.85 PASS AC=8;AF=0.0093;AN=862;BaseQRankSum=3.941;DP=2063;FS=0.962;HRun=5;HaplotypeScore=24.0313;InbreedingCoeff=0.0790;IndelType=DEL.NumRepetitions_5.EventLength_1.RepeatExpansion_T.;MQ=55.05;MQ0=49;MQ0Fraction=0.0238;MQRankSum=-1.418;QD=3.47;ReadPosRankSum=-0.605;SB=-93.04;SET_INTEGRATION;SET_WGVQSR;VQSLOD=5.3874;set=VQSR +20 14260090 rs73619828 A AT 27935 PASS AA=596;AB=0.59484;ABA=487;ABP=96.922;ABR=715;AC=204;AF=0.17000;AN=1200;BL=21718;BR=28458;BVAR;BaseQRankSum=0.756;DB;DP=23629;DP4=1385,1492,287,328;Dels=0.00;EL=299;EPP=3.0249;ER=297;FQ=999;FR;FS=6.187;HETAR=218;HOMA=38;HOMR=788;HP=9;HPLen=9;HR=9;HRun=9;HU=T;INDEL;INS;InbreedingCoeff=0.0797;IndelType=INS.NumRepetitions_9.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.13433;LRBP=1969;MQ=100.81;MQ0=0;MQ0Fraction=0.0000;MQM=57.084;MQRankSum=2.224;NF;NR;NS=1044;PP;PV4=0.53,1,1.2e-11,1;RA=4143;RL=238;RPP=55.475;RR=358;RUN=1;ReadPosRankSum=0.198;SAB=0.46812;SAF=279;SAP=8.2714;SAR=317;SC=CCTTAAGTTGATTTTTTTTTC;SET_INTEGRATION;SET_WGVQSR;SRB=0.50374;SRF=2087;SRP=3.514;SRR=2056;TC;TR=9;TU=T;VQSLOD=9.0018;set=Intersection;sumGLbyD=10.82 +20 14260558 . AC A 238 PASS AC=1;AF=0.0014;AF1=0.003368;BaseQRankSum=2.868;CI95=0.003106,0.006211;DP=9724;DP4=2075,2329,1,7;Dels=0.00;FQ=106;FR;FS=10.678;HP=1;HPLen=2;HR=2;HRun=1;HU=A;INDEL;InbreedingCoeff=-0.0406;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;MQ=114.37;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.862;NF;NR;PP;PV4=0.074,0.0096,0.017,1;ReadPosRankSum=-0.042;SC=ATCAGGAATAACTGTGTGACC;SET_INTEGRATION;SET_WGVQSR;TC;TR=2;TU=A;VQSLOD=8.1618;set=Intersection;sumGLbyD=18.65 +20 14425481 . GTA G,GTATA 148.85 PASS AC=43,23;AF=0.03473,0.01858;AN=1238;BaseQRankSum=6.289;DP=25167;DP4=1800,2021,38,49;FR;FS=9.416;HP=2;HPLen=1;HR=1;HU=T;HaplotypeScore=17.7453;INDEL;InbreedingCoeff=0.0995;IndelType=MULTIALLELIC_INDEL;MQ0=21;MQ0Fraction=0.0058;MQRankSum=-0.200;NF;NR;PP;PV4=0.59,1,0.04,0.023;QD=0.35;ReadPosRankSum=-1.689;SB=-367.50;SC=CTGTGTGTGTGTATATATATA;SET_WGVQSR;TC;TR=13;TU=AT;VQSLOD=3.5796;set=filterInVQSR-2of5 +20 14943522 rs11478299 GA AA,G 1761.24 PASS AA=117;AB=0.68142;ABA=108;ABP=99.919;ABR=231;AC=0;AF=0.0000;AF1=0.04204;AN=712;BL=4931;BR=5802;BVAR;BaseQRankSum=9.118;CI95=0.02876,0.05752;DB;DEL;DP=13717;DP4=1908,1684,59,58;Dels=0.05;EL=60;EPP=3.1773;ER=57;FQ=81.9;FR;HETAR=56;HOMA=1;HOMR=1011;HP=8;HPLen=8;HR=8;HU=A;INDEL;InbreedingCoeff=0.1264;IndelType=MIXED;LEN=1;LRB=0.081152;LRBP=156.5;MQ=106.93;MQ0=0;MQ0Fraction=0.0000;MQM=96.855;MQRankSum=1.619;NF;NR;NS=1068;PP;PV4=0.57,1,0.0003,1;QD=7.40;RA=5080;RL=56;RPP=3.4743;RR=61;RUN=1;ReadPosRankSum=0.814;SAB=0.52137;SAF=61;SAP=3.4743;SAR=56;SB=-1122.51;SC=GTTGTTTGGGGAAAAAAAACT;SET_WGVQSR;SRB=0.51083;SRF=2595;SRP=8.1825;SRR=2485;TC;TR=8;TU=A;set=filterInVQSR-2of5;sumGLbyD=9.81 +20 14974486 . A AG 4101.40 PASS AA=57;AB=0.57143;ABA=51;ABP=8.2839;ABR=68;AC=22;AF=0.01846;AN=1192;BL=2286;BR=2834;BVAR;BaseQRankSum=8.711;DP=20538;DP4=2172,2100,19,13;Dels=0.00;EL=32;EPP=4.877;ER=25;FS=0.517;HETAR=20;HOMA=4;HOMR=1027;HRun=1;INDEL;INS;InbreedingCoeff=0.0677;IndelType=INS.NOVEL_1.Novel_G.;LEN=1;LRB=0.10703;LRBP=130.37;MQ=126.07;MQ0=0;MQ0Fraction=0.0000;MQM=56.088;MQRankSum=-10.756;NS=1051;PV4=0.38,3.5e-51,7.9e-34,1;RA=5203;RL=26;RPP=3.9627;RR=31;RUN=1;ReadPosRankSum=1.283;SAB=0.54386;SAF=31;SAP=3.9627;SAR=26;SET_INTEGRATION;SET_WGVQSR;SRB=0.51816;SRF=2696;SRP=17.918;SRR=2507;VQSLOD=8.0072;set=Intersection;sumGLbyD=25.60 +20 15111137 . GA G 13533 PASS AA=98;AB=0.84864;ABA=89;ABP=623.8;ABR=499;AC=47;AF=0.03796;AN=1238;BL=5324;BR=856;BVAR;BaseQRankSum=-11.577;DEL;DP=13384;Dels=0.01;EL=53;EPP=4.4284;ER=45;FS=6.099;HETAR=219;HOMA=845;HOMR=18;HRun=1;InbreedingCoeff=-0.0056;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.72298;LRBP=7017.4;MQ0Fraction=0.0003;MQM=90.449;MQRankSum=1.408;NS=1083;RA=590;RL=87;RPP=130.99;RR=11;RUN=1;ReadPosRankSum=-18.074;SAB=0.55102;SAF=54;SAP=5.2261;SAR=44;SRB=0.52373;SRF=309;SRP=5.8958;SRR=281;VQSLOD=4.1054;set=filterInVQSR-2of5;sumGLbyD=3.06 +20 15283028 . A AC,ACACACACACACAC 140844.83 PASS AA=180;AB=0.61442;ABA=123;ABP=39.285;ABR=196;AC=13,817;AF=0.01111,0.69829;AN=1170;BL=4453;BR=11407;BVAR;BaseQRankSum=24.686;DP=6365;Dels=0.00;EL=124;EPP=58.793;ER=56;FR;FS=10.912;HETAR=87;HOMA=48;HOMR=683;HP=1;HR=1;HRun=1;HU=T;INS;InbreedingCoeff=0.2074;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.43846;LRBP=6624;MQ0Fraction=0.0558;MQM=38.211;MQRankSum=-21.111;NF;NR;NS=818;PP;RA=1732;RL=0;RPP=393.88;RR=180;RUN=1;ReadPosRankSum=-7.620;SAB=0.31111;SAF=56;SAP=58.793;SAR=124;SC=ACACACACACATACACACATA;SRB=0.54042;SRF=936;SRP=27.584;SRR=796;TC;TR=21;TU=AC;VQSLOD=4.7569;set=Intersection;sumGLbyD=18.36 +20 15361056 . ATAACT A 4892.81 PASS AA=59;AB=0.63576;ABA=55;ABP=27.184;ABR=96;AC=34;AF=0.0487;AN=698;BL=3164;BR=1999;BVAR;BaseQRankSum=3.391;DEL;DP=7080;Dels=0.03;EL=27;EPP=3.9304;ER=32;FR;FS=4.816;HETAR=35;HOMA=6;HOMR=966;HP=2;HPLen=3;HR=3;HRun=0;HU=A;InbreedingCoeff=0.0785;IndelType=DEL.NumRepetitions_1.EventLength_5.;LEN=5;LRB=0.22564;LRBP=573.84;MQ0=0;MQ0Fraction=0.0000;MQM=70.034;MQRankSum=-8.732;NF;NR;NS=1008;PP;RA=3915;RL=42;RPP=26.013;RR=17;RUN=1;ReadPosRankSum=-0.735;SAB=0.44068;SAF=26;SAP=4.8137;SAR=33;SC=AGATTAGGAAATAACTTAGGG;SET_INTEGRATION;SET_WGVQSR;SRB=0.42682;SRF=1671;SRP=185.12;SRR=2244;TC;TR=3;TU=A;VQSLOD=7.0900;set=Intersection;sumGLbyD=43.38 +20 15579507 . AATTAGTC A,TATTAGTC 1936.38 PASS AA=16;AB=0.58974;ABA=16;ABP=5.7386;ABR=23;AC=64;AF=0.05229;AN=1224;BL=699;BR=775;BVAR;BaseQRankSum=-21.390;DEL;DP=21920;DP4=2099,2403,6,6;Dels=0.00;EL=8;EPP=3.0103;ER=8;FR;FS=2.920;HETAR=5;HOMA=0;HOMR=1063;HP=3;HPLen=4;HR=4;HU=A;INDEL;InbreedingCoeff=-0.0143;IndelType=MIXED;LEN=7;LRB=0.05156;LRBP=11.519;MQ=129.49;MQ0=0;MQ0Fraction=0.0000;MQM=51.938;MQRankSum=3.331;NF;NR;NS=1068;PP;PV4=1,0.019,1.3e-07,1;RA=5334;RL=5;RPP=7.8961;RR=11;RUN=1;ReadPosRankSum=-16.901;SAB=0.4375;SAF=7;SAP=3.5532;SAR=9;SC=CATACTACAAAATTAGTCATT;SET_INTEGRATION;SET_WGVQSR;SRB=0.41695;SRF=2224;SRP=322.58;SRR=3110;TC;TR=4;TU=A;VQSLOD=3.2237;set=filterInVQSR-2of5;sumGLbyD=43.57 +20 15752535 . CT C,GT 3775.20 PASS AA=92;AB=0.78636;ABA=47;ABP=159.71;ABR=173;AC=0;AF=0.0000;AN=608;BL=4955;BR=2380;BVAR;BaseQRankSum=2.910;DEL;DP=3429;Dels=0.04;EL=13;EPP=105.82;ER=79;FR;HETAR=92;HOMA=95;HOMR=544;HP=2;HPLen=2;HR=2;HU=T;InbreedingCoeff=0.0483;IndelType=MIXED;LEN=1;LRB=0.35106;LRBP=1966;MQ0Fraction=0.0232;MQM=35.293;MQRankSum=-2.199;NF;NR;NS=732;PP;QD=4.91;RA=1272;RL=81;RPP=118.66;RR=11;RUN=1;ReadPosRankSum=-1.077;SAB=0.021739;SAF=2;SAP=185.79;SAR=90;SB=-59.51;SC=CAAGACCATCCTTGGCTAACA;SET_INTEGRATION;SET_WGVQSR;SRB=0.14623;SRF=186;SRP=1385.8;SRR=1086;TC;TR=2;TU=T;set=filterInVQSR-2of5;sumGLbyD=9.70 +20 15883060 rs73619850 A AT 1325.60 PASS AA=38;AB=0.59302;ABA=35;ABP=9.4742;ABR=51;AC=14;AF=0.0156;AN=896;BL=1078;BR=1638;BVAR;BaseQRankSum=-4.526;DB;DP=19854;DP4=1632,1800,15,20;Dels=0.00;EL=18;EPP=3.2389;ER=20;FR;FS=0.000;HETAR=14;HOMA=1;HOMR=1014;HP=1;HPLen=1;HR=1;HRun=1;HU=T;INDEL;INS;InbreedingCoeff=-0.0131;IndelType=INS.NumRepetitions_1.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.20619;LRBP=253.74;MQ=118.40;MQ0=0;MQ0Fraction=0.0000;MQM=56.526;MQRankSum=0.892;NF;NR;NS=1029;PP;PV4=0.61,1,0.25,0.14;RA=4439;RL=14;RPP=8.7247;RR=24;RUN=1;ReadPosRankSum=-2.061;SAB=0.42105;SAF=16;SAP=5.0675;SAR=22;SC=GGATTGGCAGATAAAAAATGG;SET_INTEGRATION;SET_WGVQSR;SRB=0.46429;SRF=2061;SRP=52.168;SRR=2378;TC;TR=1;TU=T;VQSLOD=9.7576;set=Intersection;sumGLbyD=15.69 +20 16122099 . GA G 12914 PASS AA=85;AB=0.85915;ABA=80;ABP=639.4;ABR=488;AC=19;AF=0.01542;AN=1232;BL=805;BR=5457;BVAR;BaseQRankSum=-6.084;DEL;DP=13592;Dels=0.00;EL=45;EPP=3.649;ER=40;FS=0.935;HETAR=218;HOMA=841;HOMR=14;HRun=2;InbreedingCoeff=0.0250;IndelType=DEL.NumRepetitions_2.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.74289;LRBP=7507.5;MQ0=0;MQ0Fraction=0.0000;MQM=103.01;MQRankSum=2.843;NS=1075;RA=541;RL=2;RPP=170.62;RR=83;RUN=1;ReadPosRankSum=-16.222;SAB=0.49412;SAF=42;SAP=3.0358;SAR=43;SRB=0.44917;SRF=243;SRP=15.152;SRR=298;VQSLOD=3.9745;set=filterInVQSR-2of5;sumGLbyD=2.97 +20 16828509 . G GT 843.62 PASS AA=30;AB=0.70103;ABA=29;ABP=37.06;ABR=68;AC=10;AF=0.0140;AN=714;BL=1368;BR=1786;BVAR;BaseQRankSum=-4.061;DP=8682;Dels=0.01;EL=14;EPP=3.2998;ER=16;FR;FS=2.681;HETAR=22;HOMA=1;HOMR=1020;HP=8;HPLen=8;HR=8;HRun=8;HU=T;INS;InbreedingCoeff=0.1389;IndelType=INS.NumRepetitions_8.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.13253;LRBP=123.3;MQ0=0;MQ0Fraction=0.0000;MQM=62.8;MQRankSum=-1.491;NF;NR;NS=1043;PP;RA=4416;RL=11;RPP=7.6428;RR=19;RUN=1;ReadPosRankSum=-1.718;SAB=0.76667;SAF=23;SAP=21.54;SAR=7;SC=CCTTCAAAAGGTTTTTTTTGG;SET_INTEGRATION;SET_WGVQSR;SRB=0.5745;SRF=2537;SRP=215.91;SRR=1879;TC;TR=8;TU=T;VQSLOD=7.6258;set=Intersection;sumGLbyD=10.77 +20 17470034 . GC G 46975 PASS AA=57;AB=0.96043;ABA=52;ABP=2422.5;ABR=1262;AC=34;AF=0.02773;AN=1226;BL=418;BR=3446;BVAR;BaseQRankSum=-6.250;DEL;DP=12035;Dels=0.00;EL=22;EPP=9.4485;ER=35;FS=1.350;HETAR=416;HOMA=409;HOMR=244;HRun=1;InbreedingCoeff=0.0083;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;LEN=1;LRB=0.78364;LRBP=5155.6;MQ0=0;MQ0Fraction=0.0000;MQM=99.509;MQRankSum=2.192;NS=1076;RA=2396;RL=5;RPP=87.164;RR=52;RUN=1;ReadPosRankSum=-15.199;SAB=0.5614;SAF=32;SAP=4.877;SAR=25;SRB=0.52963;SRF=1269;SRP=21.285;SRR=1127;VQSLOD=3.8440;set=filterInVQSR-2of5;sumGLbyD=3.06 +20 17471374 . AGCGGC A 850.03 PASS AC=6;AF=0.0085;AF1=0.01301;AN=704;BaseQRankSum=6.259;CI95=0.00885,0.01991;DP=8180;DP4=2215,1878,4,5;Dels=0.01;FQ=131;FS=0.000;HRun=0;INDEL;InbreedingCoeff=0.0009;IndelType=DEL.NumRepetitions_1.EventLength_5.;MQ=104.41;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-5.521;PV4=0.74,0.37,0.0005,1;ReadPosRankSum=2.468;SET_INTEGRATION;SET_WGVQSR;VQSLOD=6.8773;set=Intersection;sumGLbyD=30.85 +20 18433202 rs35582929 G GA 2506.90 PASS AA=55;AB=0.5812;ABA=49;ABP=9.7103;ABR=68;AC=20;AF=0.0218;AN=918;BL=2263;BR=2175;BVAR;BaseQRankSum=-6.639;DB;DP=19467;DP4=1845,2365,27,26;Dels=0.00;EL=21;EPP=9.6826;ER=34;FQ=999;FR;FS=5.633;HETAR=16;HOMA=3;HOMR=1045;HP=2;HPLen=3;HR=3;HRun=1;HU=G;INDEL;INS;InbreedingCoeff=0.0700;IndelType=INS.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.019829;LRBP=6.7994;MQ=114.03;MQ0=0;MQ0Fraction=0.0000;MQM=83.345;MQRankSum=1.610;NF;NR;NS=1064;PP;PV4=0.33,1,1,1;RA=5380;RL=28;RPP=3.0498;RR=27;RUN=1;ReadPosRankSum=0.873;SAB=0.47273;SAF=26;SAP=3.3656;SAR=29;SC=TATTTCATGGGAGCATTAAAA;SET_INTEGRATION;SET_WGVQSR;SRB=0.42862;SRF=2306;SRP=241.07;SRR=3074;TC;TR=3;TU=G;VQSLOD=10.0372;dbSNP=126;set=Intersection;sumGLbyD=13.10 +20 18551314 rs10659122 CA C,CAA,CAAA,CAAAA,CAAAAA 18810.74 PASS ABR=243;AC=19,169,216,164,188;AF=0.01816,0.16157,0.20650,0.15679,0.17973;BVAR;BaseQRankSum=-5.742;DB;DP=17637;DP4=136,77,560,237;FR;FS=2.693;HOMA=177;HOMR=299;HP=17;HR=17;HU=A;HaplotypeScore=15.5048;INDEL;INS;InbreedingCoeff=0.8901;IndelType=MULTIALLELIC_INDEL;MQ0=11;MQ0Fraction=0.0069;MQRankSum=1.845;NF;NR;NS=658;PP;PV4=0.08,1,1,1;QD=12.66;RA=673;RUN=1;ReadPosRankSum=0.283;SB=-3514.45;SC=GATTCCATCTCAAAAAAAAAA;SET_WGVQSR;SRB=0.63596;SRF=428;SRP=111.06;SRR=245;TC;TR=17;TU=A;VQSLOD=10.6964;dbSNP=130;set=Intersection +20 18785519 . G GTC 415.55 PASS AC=28;AF=0.0400;AN=700;BaseQRankSum=10.889;DP=1929;FS=8.778;HRun=0;HaplotypeScore=27.6448;InbreedingCoeff=0.0510;IndelType=INS.NOVEL_2.;MQ=61.99;MQ0=36;MQ0Fraction=0.0187;MQRankSum=4.508;QD=3.08;ReadPosRankSum=8.080;SB=-437.03;SET_INTEGRATION;SET_WGVQSR;VQSLOD=4.9313;set=VQSR +20 20301041 rs35451634 ATATG A 200.42 PASS AC=21;AF=0.0449;AN=468;BaseQRankSum=5.251;DB;DP=579;FS=24.013;HRun=0;HaplotypeScore=27.8977;InbreedingCoeff=0.0113;IndelType=DEL.NumRepetitions_1.EventLength_4.;MQ=78.47;MQ0=26;MQ0Fraction=0.0449;MQRankSum=-5.284;QD=3.06;ReadPosRankSum=1.793;SB=-55.76;SET_INTEGRATION;SET_WGVQSR;VQSLOD=5.0981;set=VQSR +20 20378174 . TC T 245.55 PASS AC=23;AF=0.01879;AN=1224;BaseQRankSum=0.990;DP=3225;FS=10.413;HRun=1;HaplotypeScore=22.6109;InbreedingCoeff=0.0244;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;MQ=93.70;MQ0=3;MQ0Fraction=0.0009;MQRankSum=-3.349;QD=1.86;ReadPosRankSum=-7.227;SB=-188.62;VQSLOD=4.2553;set=VQSR +20 20809160 rs10571503 TAA AAA,T 3496 PASS AC=0;AF=0.0000;AN=612;BaseQRankSum=1.968;DB;DP=1092;FR;HP=4;HPLen=3;HR=3;HRun=0;HU=A;HaplotypeScore=26.1253;InbreedingCoeff=0.0603;IndelType=MIXED;MQ=68.98;MQ0=1;MQ0Fraction=0.0009;MQRankSum=1.520;NF;NR;PP;ReadPosRankSum=-4.042;SC=TATATATATATAAATTTAAAT;TC;TR=13;TU=AT;set=filterInVQSR-2of5 +20 22508765 . CT C 53877.84 PASS AA=187;AB=0.78077;ABA=171;ABP=537.09;ABR=609;AC=1017;AF=0.91787;AN=1108;BL=12690;BR=1718;BVAR;BaseQRankSum=13.773;DEL;DP=7430;Dels=0.02;EL=73;EPP=22.53;ER=114;FR;FS=16.352;HETAR=152;HOMA=9;HOMR=786;HP=8;HR=4;HRun=4;HU=T;InbreedingCoeff=0.3885;IndelType=DEL.NumRepetitions_4.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.76152;LRBP=18147;MQ0=0;MQ0Fraction=0.0000;MQM=46.086;MQRankSum=0.971;NF;NR;NS=947;PP;RA=2868;RL=177;RPP=326.86;RR=10;RUN=1;ReadPosRankSum=9.951;SAB=0.34759;SAF=65;SAP=40.738;SAR=122;SC=AAAAAATTTTCTTTTGAACTG;SET_INTEGRATION;SET_WGVQSR;SRB=0.46269;SRF=1327;SRP=37.684;SRR=1541;TC;TR=4;TU=T;VQSLOD=5.1182;set=Intersection;sumGLbyD=25.15 +20 22555082 rs11477526 AT A 11503 PASS AA=530;AB=0.50816;ABA=422;ABP=3.5063;ABR=436;AF=0.1614;AN=700;BL=21453;BR=23313;BVAR;BaseQRankSum=17.562;DB;DEL;DP=25587;DP4=1869,1600,283,201;Dels=0.14;EL=259;EPP=3.6003;ER=271;FQ=999;FR;FS=14.595;HETAR=159;HOMA=41;HOMR=846;HP=3;HPLen=3;HR=3;HRun=3;HU=T;INDEL;InbreedingCoeff=0.0995;IndelType=DEL.NumRepetitions_3.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.041549;LRBP=170.83;MQ=95.89;MQ0=0;MQ0Fraction=0.0000;MQM=72.162;MQRankSum=2.564;NF;NR;NS=1046;PP;PV4=0.058,6.6e-129,0.04,1;RA=4303;RL=264;RPP=3.0267;RR=266;RUN=1;ReadPosRankSum=0.176;SAB=0.58679;SAF=311;SAP=37.688;SAR=219;SC=GGGAAAGCTGATTTACTGATT;SET_INTEGRATION;SET_WGVQSR;SRB=0.54892;SRF=2362;SRP=92.453;SRR=1941;TC;TR=3;TU=T;VQSLOD=8.7746;dbSNP=120;set=Intersection;sumGLbyD=15.27 +20 22590907 . A AC 4204.88 PASS AA=67;AB=0.592;ABA=51;ABP=12.2;ABR=74;AF=0.0554;AF1=0.0468;AN=560;BL=2277;BR=2389;BVAR;BaseQRankSum=10.968;CI95=0.03759,0.05639;DP=14380;DP4=2514,2018,33,33;Dels=0.00;EL=22;EPP=20.155;ER=45;FQ=999;FR;FS=3.846;HETAR=25;HOMA=4;HOMR=1049;HP=4;HPLen=5;HR=5;HRun=0;HU=A;INDEL;INS;InbreedingCoeff=0.0719;IndelType=INS.NOVEL_1.Novel_C.;LEN=1;LRB=0.024003;LRBP=8.8481;MQ=110.68;MQ0=0;MQ0Fraction=0.0000;MQM=96.149;MQRankSum=2.668;NF;NR;NS=1078;PP;PV4=0.39,1,0.46,0.36;RA=5468;RL=33;RPP=3.0427;RR=34;RUN=1;ReadPosRankSum=-1.097;SAB=0.50746;SAF=34;SAP=3.0427;SAR=33;SC=TCATATCAAAAACATTACGTT;SET_INTEGRATION;SET_WGVQSR;SRB=0.54389;SRF=2974;SRP=94.508;SRR=2494;TC;TR=5;TU=A;VQSLOD=10.0712;set=Intersection;sumGLbyD=27.69 +20 22806326 rs11468890 ATTCCATCAC A 105320.99 PASS AC=567;AF=0.48795;AN=1162;BVAR;BaseQRankSum=32.858;DB;DEL;DP=26278;DP4=727,796,554,587;Dels=0.30;FQ=999;FR;FS=1.923;HP=3;HPLen=3;HR=2;HRun=0;HU=T;INDEL;InbreedingCoeff=0.2548;IndelType=DEL.NumRepetitions_2.EventLength_9.;LEN=9;MQ=89.42;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-23.545;NF;NR;PP;PV4=0.7,1,1.3e-167,1;RUN=1;ReadPosRankSum=4.384;SC=GGCTGCTCCCATTCCATCACT;SET_INTEGRATION;SET_WGVQSR;TC;TR=2;TU=T;VQSLOD=8.2594;set=Intersection;sumGLbyD=69.81 +20 22999898 rs55966257 CAGGA C 8019.97 PASS AA=23;AB=0.57778;ABA=19;ABP=5.3748;ABR=26;AC=214;AF=0.18838;AN=1136;BL=1143;BR=1040;BVAR;BaseQRankSum=29.294;DB;DEL;DP=8216;Dels=0.02;EL=11;EPP=3.1047;ER=12;FS=14.938;HETAR=14;HOMA=2;HOMR=948;HRun=0;InbreedingCoeff=0.0797;IndelType=DEL.NumRepetitions_1.EventLength_4.;LEN=4;LRB=0.047183;LRBP=13.563;MQ0=0;MQ0Fraction=0.0000;MQM=34.783;MQRankSum=-20.301;NS=964;RA=3637;RL=13;RPP=3.86;RR=10;RUN=1;ReadPosRankSum=-24.607;SAB=0.47826;SAF=11;SAP=3.1047;SAR=12;SRB=0.49024;SRF=1783;SRP=6.02;SRR=1854;VQSLOD=7.9163;set=Intersection;sumGLbyD=9.43 +20 23385964 rs57723772 GAA G 8170.95 PASS AC=257;AF=0.20928;AN=1228;BaseQRankSum=32.220;DB;DP=3291;FS=1.688;HRun=3;HaplotypeScore=22.6739;InbreedingCoeff=0.0171;IndelType=DEL.NumRepetitions_3.EventLength_1.RepeatExpansion_A.;MQ=58.44;MQ0=32;MQ0Fraction=0.0097;MQRankSum=-4.893;QD=6.55;ReadPosRankSum=-35.524;SB=-3631.67;VQSLOD=5.6549;set=VQSR +20 23534530 . TA T 3542.10 PASS AA=45;AB=0.75658;ABA=37;ABP=89.926;ABR=115;AC=35;AF=0.02991;AN=1170;BL=3090;BR=270;BVAR;BaseQRankSum=-6.892;DEL;DP=8108;Dels=0.00;EL=19;EPP=5.3748;ER=26;FS=1.026;HETAR=76;HOMA=896;HOMR=18;HRun=1;InbreedingCoeff=0.0551;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.83929;LRBP=5142.4;MQ0Fraction=0.0017;MQM=41.578;MQRankSum=0.818;NS=991;RA=203;RL=43;RPP=84.127;RR=2;RUN=1;ReadPosRankSum=-12.923;SAB=0.37778;SAF=17;SAP=8.8491;SAR=28;SRB=0.5665;SRF=115;SRP=10.808;SRR=88;VQSLOD=4.2093;set=Intersection;sumGLbyD=3.49 +20 23976810 rs5841018 A ATATTAAT 1782.38 PASS AF=0.1387;AF1=0.01507;BaseQRankSum=3.717;CI95=0.00188,0.03947;DB;DP=1712;DP4=357,376,7,2;Dels=0.00;FQ=31.1;FS=14.489;HPLen=2;HRun=0;INDEL;InbreedingCoeff=0.1123;IndelType=INS.NumRepetitions_1.EventLength_7.;MQ=49.53;MQ0=2;MQ0Fraction=0.0055;MQRankSum=-4.928;PV4=0.1,1,0.00085,0.016;ReadPosRankSum=-4.456;VQSLOD=5.3140;dbSNP=116;set=Intersection;sumGLbyD=19.98 +20 24222100 . CTTTTA C 4219.36 PASS AA=57;AB=0.59434;ABA=43;ABP=11.205;ABR=63;AF=0.01803;AF1=0.01547;AN=1220;BL=2073;BR=2345;BVAR;BaseQRankSum=7.990;CI95=0.0114,0.02137;DEL;DP=17536;DP4=2140,2346,7,12;Dels=0.01;EL=32;EPP=4.877;ER=25;FQ=104;FS=0.614;HETAR=21;HOMA=4;HOMR=1042;HRun=0;INDEL;InbreedingCoeff=0.1941;IndelType=DEL.NumRepetitions_2.EventLength_5.;LEN=5;LRB=0.061566;LRBP=39.374;MQ=73.32;MQ0Fraction=0.0021;MQM=39.614;MQRankSum=-5.728;NS=1067;PV4=0.37,1.1e-39,3.5e-09,1;RA=5527;RL=28;RPP=3.0484;RR=29;RUN=1;ReadPosRankSum=0.214;SAB=0.54386;SAF=31;SAP=3.9627;SAR=26;SET_INTEGRATION;SET_WGVQSR;SRB=0.49267;SRF=2723;SRP=5.588;SRR=2804;VQSLOD=7.5428;set=Intersection;sumGLbyD=38.08 +20 24395018 . AT A 49310 PASS AA=146;AB=0.91198;ABA=130;ABP=2180.5;ABR=1347;AC=50;AF=0.04045;AN=1236;BL=587;BR=9625;BVAR;BaseQRankSum=-4.610;DEL;DP=12793;Dels=0.01;EL=54;EPP=24.487;ER=92;FS=22.108;HETAR=485;HOMA=384;HOMR=210;HRun=2;InbreedingCoeff=0.0374;IndelType=DEL.NumRepetitions_2.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.88504;LRBP=17373;MQ0=0;MQ0Fraction=0.0000;MQM=102.26;MQRankSum=2.256;NS=1080;RA=2377;RL=1;RPP=311.42;RR=145;RUN=1;ReadPosRankSum=-16.347;SAB=0.63699;SAF=93;SAP=26.807;SAR=53;SRB=0.52167;SRF=1240;SRP=12.702;SRR=1137;VQSLOD=3.2421;set=filterInVQSR-2of5;sumGLbyD=3.80 +20 24411517 . C CA 246.18 PASS AF=0.01546;AF1=0.01095;BaseQRankSum=7.832;CI95=0.005698,0.01709;DP=7981;DP4=983,2037,7,7;Dels=0.00;FQ=27.9;FS=18.815;HPLen=3;HRun=3;INDEL;InbreedingCoeff=0.0175;IndelType=INS.NumRepetitions_3.EventLength_1.RepeatExpansion_A.;MQ=60.28;MQ0Fraction=0.0137;MQRankSum=-7.243;PV4=0.25,1,2.7e-05,1;ReadPosRankSum=-0.143;VQSLOD=4.3701;set=Intersection;sumGLbyD=6.56 +20 24421169 . AG A 27480 PASS AA=182;AB=0.8303;ABA=149;ABP=835;ABR=729;AC=89;AF=0.07224;AN=1232;BL=11276;BR=2214;BVAR;BaseQRankSum=-5.447;DEL;DP=11717;Dels=0.01;EL=103;EPP=9.8827;ER=79;FR;FS=15.492;HETAR=343;HOMA=607;HOMR=114;HP=4;HR=1;HRun=1;HU=G;InbreedingCoeff=0.0353;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_G.;LEN=1;LRB=0.67176;LRBP=13222;MQ0=0;MQ0Fraction=0.0000;MQM=88.324;MQRankSum=2.221;NF;NR;NS=1071;PP;RA=1226;RL=169;RPP=293.37;RR=13;RUN=1;ReadPosRankSum=-19.711;SAB=0.54945;SAF=100;SAP=6.876;SAR=82;SC=CCTTAGCCCCAGAAAACATCT;SRB=0.44535;SRF=546;SRP=34.814;SRR=680;TC;TR=1;TU=G;VQSLOD=4.2669;set=Intersection;sumGLbyD=3.91 +20 24765537 rs71841337 ATTT A,AT,ATT,ATTTT,ATTTTT 37852 PASS AC=13,120,527,51,92;AF=0.01102,0.10169,0.44661,0.04322,0.07797;AN=1180;BVAR;BaseQRankSum=8.172;DB;DEL;DP=39116;DP4=200,331,851,1169;FR;FS=2.394;HP=15;HR=15;HU=T;HaplotypeScore=20.8091;INDEL;INS;InbreedingCoeff=0.4815;IndelType=MULTIALLELIC_INDEL;MQ0=1;MQ0Fraction=0.0003;MQRankSum=4.344;NF;NR;PP;PV4=0.067,1,1,0.1;QD=7.90;RUN=1;ReadPosRankSum=1.798;SB=-8371.96;SC=CTCTGCAACAATTTTTTTTTT;SET_WGVQSR;TC;TR=15;TU=T;VQSLOD=9.9679;dbSNP=120;set=Intersection +20 25500689 . A AATTT 84980.72 PASS AC=1005;AF=0.89096;AN=1128;BaseQRankSum=17.400;DP=2324;FS=6.721;HRun=0;HaplotypeScore=25.3376;InbreedingCoeff=0.2148;IndelType=INS.NumRepetitions_1.EventLength_4.;MQ=75.19;MQ0=1;MQ0Fraction=0.0004;MQRankSum=-8.221;QD=38.28;ReadPosRankSum=4.504;SB=-34833.07;SET_INTEGRATION;SET_WGVQSR;VQSLOD=4.6038;set=VQSR +20 25550373 . GA G 11251.31 PASS AA=246;AB=0.42963;ABA=154;ABP=14.624;ABR=116;AC=566;AF=0.6521;AN=868;BL=5230;BR=11845;BVAR;BaseQRankSum=7.418;DEL;DP=8885;Dels=0.02;EL=99;EPP=23.348;ER=147;FR;FS=50.357;HETAR=150;HOMA=849;HOMR=14;HP=1;HR=2;HRun=1;HU=G;InbreedingCoeff=0.1365;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.38741;LRBP=5567.9;MQ0=0;MQ0Fraction=0.0000;MQM=97.561;MQRankSum=0.050;NF;NR;NS=1013;PP;RA=269;RL=75;RPP=84.361;RR=171;RUN=1;ReadPosRankSum=-7.128;SAB=0.52846;SAF=130;SAP=4.7404;SAR=116;SC=CACGGAGGCGGAGGAAGCAGC;SRB=0.42379;SRF=114;SRP=16.58;SRR=155;TC;TR=6;TU=AGG;VQSLOD=4.0103;set=filterInVQSR-2of5;sumGLbyD=4.58 +20 25903865 . TTC T 7459.23 PASS AC=277;AF=0.23316;AN=1188;BaseQRankSum=31.479;DP=2969;FS=137.723;HRun=0;HaplotypeScore=37.3300;InbreedingCoeff=-0.1755;IndelType=DEL.NumRepetitions_1.EventLength_2.RepeatExpansion_TC.;MQ=53.49;MQ0=50;MQ0Fraction=0.0168;MQRankSum=-25.506;QD=4.70;ReadPosRankSum=-5.913;SB=-1747.98;VQSLOD=5.4731;set=VQSR +20 25934237 . C CCACTT 771.36 PASS AC=37;AF=0.0426;AN=868;BaseQRankSum=16.331;DP=2253;FS=4.545;HRun=0;HaplotypeScore=29.9764;InbreedingCoeff=-0.0685;IndelType=INS.NOVEL_5.;MQ=48.12;MQ0=87;MQ0Fraction=0.0386;MQRankSum=-12.497;QD=3.37;ReadPosRankSum=-8.428;SB=-297.70;VQSLOD=4.2324;set=VQSR +20 26054751 rs112967123 TATC T 33244 PASS AA=1863;AB=0.79012;ABA=1788;ABP=6231;ABR=6731;AC=227;AF=0.18218;AN=1246;BL=74924;BR=72452;BVAR;BaseQRankSum=32.258;DB;DEL;DP=36404;DS;Dels=0.05;EL=931;EPP=3.0115;ER=932;FR;FS=265.752;HETAR=527;HOMA=2;HOMR=565;HP=1;HR=2;HRun=0;HU=T;InbreedingCoeff=-0.2137;IndelType=DEL.NumRepetitions_2.EventLength_3.;LEN=3;LRB=0.016773;LRBP=93.048;MQ0Fraction=0.0127;MQM=28.797;MQRankSum=-5.329;NF;NR;NS=1094;PP;RA=14604;RL=1014;RPP=34.743;RR=849;RUN=1;ReadPosRankSum=8.394;SAB=0.65486;SAF=1220;SAP=391.07;SAR=643;SC=TCACCATCATTATCATCATTA;SRB=0.56717;SRF=8283;SRP=575.39;SRR=6321;TC;TR=8;TU=ATC;VQSLOD=1.0486;set=filterInVQSR-2of5;sumGLbyD=6.54 +20 26120452 . CAG C 7863.19 PASS AA=163;AB=0.70489;ABA=157;ABP=196.99;ABR=375;AC=171;AF=0.1908;AN=896;BL=3455;BR=4877;BVAR;BaseQRankSum=25.536;DEL;DP=7014;Dels=0.10;EL=58;EPP=32.438;ER=105;FS=231.723;HETAR=90;HOMA=5;HOMR=387;HRun=0;InbreedingCoeff=-0.1966;IndelType=DEL.NumRepetitions_1.EventLength_2.RepeatExpansion_AG.;LEN=2;LRB=0.17067;LRBP=530;MQ0Fraction=0.0470;MQM=21.951;MQRankSum=-23.449;NS=482;RA=1117;RL=62;RPP=23.273;RR=101;RUN=1;ReadPosRankSum=1.904;SAB=0.37423;SAF=61;SAP=25.404;SAR=102;SRB=0.41719;SRF=466;SRP=69.544;SRR=651;VQSLOD=-0.9395;set=filterInVQSR-2of5;sumGLbyD=5.06 +20 26185812 . AG A 322.58 PASS AF=0.0342;BaseQRankSum=3.668;DP=3014;Dels=0.01;FR;FS=10.238;HP=8;HPLen=6;HR=6;HRun=6;HU=G;InbreedingCoeff=0.1504;IndelType=DEL.NumRepetitions_6.EventLength_1.RepeatExpansion_G.;MQ0Fraction=0.0473;MQRankSum=-5.464;NF;NR;PP;ReadPosRankSum=0.536;SC=GGGTGGGTGGAGGGGGGAGGG;SET_WGVQSR;TC;TR=6;TU=G;VQSLOD=5.0767;set=Intersection;sumGLbyD=8.46 +20 30963468 . AGTTT A 2041.12 PASS AA=38;AB=0.75694;ABA=35;ABP=85.587;ABR=109;AC=34;AF=0.0377;AN=902;BL=1974;BR=668;BVAR;BaseQRankSum=3.060;DEL;DP=22806;DP4=1997,1747,28,36;Dels=0.02;EL=17;EPP=3.9246;ER=21;FR;FS=16.034;HETAR=29;HOMA=1;HOMR=1009;HP=1;HPLen=1;HR=1;HRun=0;HU=G;INDEL;InbreedingCoeff=0.0752;IndelType=DEL.NumRepetitions_2.EventLength_4.;LEN=4;LRB=0.49432;LRBP=1404.9;MQ=87.17;MQ0Fraction=0.0013;MQM=98.079;MQRankSum=6.021;NF;NR;NS=1039;PP;PV4=0.13,1.5e-07,1,0.051;RA=4052;RL=36;RPP=69.069;RR=2;RUN=1;ReadPosRankSum=-1.847;SAB=0.5;SAF=19;SAP=3.0103;SAR=19;SC=AGAAGTAAGTAGTTTGTTTTT;SET_INTEGRATION;SET_WGVQSR;SRB=0.53776;SRF=2179;SRP=53.19;SRR=1873;TC;TR=9;TU=AAGT;VQSLOD=7.3578;set=Intersection;sumGLbyD=14.03 +20 31963212 . AAAAAAAAAAAAG A 727.15 PASS AC=5;AF=0.0080;AN=622;BaseQRankSum=4.037;DP=1480;FS=0.000;HRun=0;HaplotypeScore=43.3793;InbreedingCoeff=0.0350;IndelType=DEL.NumRepetitions_1.EventLength_10orMore.;MQ=51.77;MQ0=59;MQ0Fraction=0.0399;MQRankSum=-1.799;QD=22.72;ReadPosRankSum=3.591;SB=-364.04;VQSLOD=5.3166;set=VQSR +20 31997272 . CT C,CTT,CTTT 1837.10 PASS AA=63;AB=0.77559;ABA=57;ABP=170.57;ABR=197;AC=79,49,30;AF=0.06594,0.04090,0.02504;AN=1198;BL=2372;BR=2640;BVAR;BaseQRankSum=3.277;DP=9050;Dels=0.03;EL=24;EPP=10.766;ER=39;FR;FS=0.303;HETAR=45;HOMA=1;HOMR=981;HP=10;HPLen=10;HR=10;HRun=10;HU=T;INS;InbreedingCoeff=0.2796;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.053472;LRBP=34.128;MQ0Fraction=0.0000;MQM=50.889;MQRankSum=0.610;NF;NR;NS=1027;PP;RA=3776;RL=30;RPP=3.3205;RR=33;RUN=1;ReadPosRankSum=-0.800;SAB=0.39683;SAF=25;SAP=8.8354;SAR=38;SC=ACCCAACTTCCTTTTTTTTTT;SET_WGVQSR;SRB=0.46213;SRF=1745;SRP=50.049;SRR=2031;TC;TR=10;TU=T;VQSLOD=4.1189;set=filterInVQSR-2of5;sumGLbyD=3.66 +20 33446974 rs113250263 TAA T,TA,TAAA 17130.16 PASS AC=65,417,184;AF=0.05941,0.38117,0.16819;AN=1094;BVAR;BaseQRankSum=3.400;DB;DEL;DP=22362;DP4=221,247,418,524;Dels=0.33;FR;FS=15.409;HP=15;HR=14;HRun=14;HU=A;INDEL;INS;InbreedingCoeff=0.5215;IndelType=MULTIALLELIC_INDEL;MQ=61.32;MQ0Fraction=0.0021;MQRankSum=0.481;NF;NR;PP;PV4=0.33,1,1,1;RUN=1;ReadPosRankSum=-0.056;SC=CTCCGTCTCATAAAAAAAAAA;SET_WGVQSR;TC;TR=14;TU=A;VQSLOD=8.0974;dbSNP=132;set=Intersection;sumGLbyD=12.78 +20 33877149 . C CT 1784.40 PASS AA=58;AB=0.73096;ABA=53;ABP=94.289;ABR=144;AC=65;AF=0.05682;AN=1144;BL=3298;BR=1935;BVAR;BaseQRankSum=-2.066;DP=8074;Dels=0.02;EL=22;EPP=10.348;ER=36;FR;FS=11.452;HETAR=47;HOMA=3;HOMR=754;HP=16;HR=12;HRun=12;HU=T;INS;InbreedingCoeff=0.1178;IndelType=INS.NumRepetitions_10orMore.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.26046;LRBP=773.91;MQ0Fraction=0.0165;MQM=52.259;MQRankSum=0.734;NF;NR;NS=804;PP;RA=2141;RL=43;RPP=32.363;RR=15;RUN=1;ReadPosRankSum=-1.273;SAB=0.46552;SAF=27;SAP=3.6093;SAR=31;SC=ATTTTCTTTTCTTTTTTTTTT;SET_INTEGRATION;SET_WGVQSR;SRB=0.37553;SRF=804;SRP=291.14;SRR=1337;TC;TR=12;TU=T;VQSLOD=3.1540;set=filterInVQSR-2of5;sumGLbyD=2.84 +20 34387589 rs112431805 CT C,CTT 4039.10 PASS AA=121;AB=0.75368;ABA=117;ABP=268.53;ABR=358;AC=84,139;AF=0.07047,0.11661;AN=1192;BL=5557;BR=3901;BVAR;BaseQRankSum=2.693;DB;DP=10157;Dels=0.03;EL=47;EPP=16.093;ER=74;FR;FS=7.639;HETAR=89;HOMA=2;HOMR=913;HP=13;HR=11;HRun=11;HU=T;INS;InbreedingCoeff=0.2097;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.17509;LRBP=632.63;MQ0Fraction=0.0000;MQM=49.802;MQRankSum=-0.801;NF;NR;NS=1004;PP;RA=3789;RL=77;RPP=22.554;RR=44;RUN=1;ReadPosRankSum=-2.691;SAB=0.3719;SAF=45;SAP=20.256;SAR=76;SC=AAGAAGTGTTCTTTTTTTTTT;SET_WGVQSR;SRB=0.40987;SRF=1553;SRP=270.35;SRR=2236;TC;TR=11;TU=T;VQSLOD=4.0473;set=filterInVQSR-2of5;sumGLbyD=4.64 +20 34493409 rs73621682 C CAG 62288.93 PASS AA=1069;AB=0.54863;ABA=826;ABP=40.606;ABR=1004;AC=257;AF=0.3640;AN=706;BL=41524;BR=47039;BVAR;BaseQRankSum=-24.248;DB;DP=30195;DP4=1743,1636,614,487;Dels=0.00;EL=582;EPP=21.343;ER=487;FQ=999;FR;FS=5.080;HETAR=298;HOMA=63;HOMR=712;HP=1;HPLen=1;HR=1;HRun=0;HU=A;INDEL;INS;InbreedingCoeff=0.1437;IndelType=INS.NumRepetitions_2.EventLength_2.RepeatExpansion_AG.;LEN=2;LRB=0.062272;LRBP=748.76;MQ=77.99;MQ0=3;MQ0Fraction=0.0015;MQM=54.446;MQRankSum=0.160;NF;NR;NS=1073;PP;PV4=0.016,1,0.01,1;RA=4461;RL=526;RPP=3.5973;RR=543;RUN=1;ReadPosRankSum=-1.716;SAB=0.57343;SAF=613;SAP=53.08;SAR=456;SC=AGGAAGAGATCAGAGCTCCCC;SET_INTEGRATION;SET_WGVQSR;SRB=0.52634;SRF=2348;SRP=29.892;SRR=2113;TC;TR=4;TU=AG;VQSLOD=8.7047;dbSNP=130;set=Intersection;sumGLbyD=49.82 +20 35957317 . CTGACT C,CGACT 4370.96 PASS ABR=81;AC=22,1;AF=0.0321,0.0015;AF1=0.04523;AN=686;BVAR;BaseQRankSum=7.969;CI95=0.0354,0.05752;DEL;DP=16632;DP4=1942,1815,17,21;Dels=0.03;FQ=999;FR;FS=0.531;HOMA=1;HOMR=998;HP=2;HPLen=1;HR=1;HRun=0;HU=T;INDEL;InbreedingCoeff=0.0587;IndelType=MULTIALLELIC_INDEL;MQ=83.38;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-7.201;NF;NR;NS=1020;PP;PV4=0.42,0.00017,4.5e-12,1;RA=4620;RUN=1;ReadPosRankSum=-1.007;SC=CCTCTCAGCTCTGACTGAGTC;SET_WGVQSR;SRB=0.50043;SRF=2312;SRP=3.0178;SRR=2308;TC;TR=8;TU=ACTG;VQSLOD=9.9778;dbSNP=130;set=Intersection;sumGLbyD=36.45 +20 36136198 . GTGTC G 2078.76 PASS AA=35;AB=0.54167;ABA=33;ABP=4.096;ABR=39;AC=17;AF=0.01384;AN=1228;BL=1212;BR=1523;BVAR;BaseQRankSum=6.900;DEL;DP=22483;DP4=1696,2291,9,16;Dels=0.01;EL=9;EPP=20.94;ER=26;FQ=999;FR;FS=3.023;HETAR=13;HOMA=1;HOMR=1061;HP=1;HPLen=1;HR=1;HRun=0;HU=T;INDEL;InbreedingCoeff=0.1113;IndelType=DEL.NumRepetitions_2.EventLength_4.;LEN=4;LRB=0.11371;LRBP=79.803;MQ=93.98;MQ0=1;MQ0Fraction=0.0003;MQM=83.686;MQRankSum=-1.683;NF;NR;NS=1075;PP;PV4=0.55,1,0.0083,1;RA=5771;RL=19;RPP=3.5687;RR=16;RUN=1;ReadPosRankSum=0.618;SAB=0.37143;SAF=13;SAP=8.0357;SAR=22;SC=TATCATTTTAGTGTCTGTCTG;SET_INTEGRATION;SET_WGVQSR;SRB=0.44966;SRF=2595;SRP=130.03;SRR=3176;TC;TR=11;TU=CTGT;VQSLOD=10.1935;set=Intersection;sumGLbyD=31.66 +20 36250522 . CA C 37933 PASS AA=51;AB=0.95582;ABA=44;ABP=1800.5;ABR=952;AC=23;AF=0.01885;AN=1220;BL=691;BR=3464;BVAR;BaseQRankSum=-2.418;DEL;DP=11998;Dels=0.00;EL=18;EPP=12.59;ER=33;FS=2.307;HETAR=348;HOMA=534;HOMR=164;HRun=1;InbreedingCoeff=0.0763;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.66739;LRBP=4021.7;MQ0=2;MQ0Fraction=0.0006;MQM=53.647;MQRankSum=1.083;NS=1047;RA=1663;RL=2;RPP=97.065;RR=49;RUN=1;ReadPosRankSum=-12.726;SAB=0.68627;SAF=35;SAP=18.381;SAR=16;SRB=0.59651;SRF=992;SRP=137.56;SRR=671;VQSLOD=4.1346;set=filterInVQSR-2of5;sumGLbyD=3.29 +20 36285033 rs34715186 AT A 39417 PASS AA=530;AB=0.5406;ABA=447;ABP=16.939;ABR=526;AC=88;AF=0.0950;AN=926;BL=20722;BR=20406;BVAR;BaseQRankSum=15.611;DB;DEL;DP=36713;DP4=2551,2475,236,218;Dels=0.09;EL=241;EPP=12.45;ER=289;FQ=999;FR;FS=1.290;HETAR=141;HOMA=16;HOMR=926;HP=2;HPLen=3;HR=3;HRun=1;HU=A;INDEL;InbreedingCoeff=0.0742;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.0076833;LRBP=8.2825;MQ=104.81;MQ0=0;MQ0Fraction=0.0000;MQM=84.285;MQRankSum=-0.702;NF;NR;NS=1083;PP;PV4=0.62,1,1,1;RA=6562;RL=263;RPP=3.0759;RR=267;RUN=1;ReadPosRankSum=0.090;SAB=0.55849;SAF=296;SAP=18.76;SAR=234;SC=AAAAACACAAATCAGATCGTG;SET_INTEGRATION;SET_WGVQSR;SRB=0.51707;SRF=3393;SRP=19.614;SRR=3169;TC;TR=3;TU=A;VQSLOD=10.5533;dbSNP=126;set=Intersection;sumGLbyD=14.15 +20 36384872 . CTG C 43532.41 PASS AC=1213;AF=0.99589;AN=1218;BaseQRankSum=0.802;DP=3208;FS=9.727;HRun=0;HaplotypeScore=46.6153;InbreedingCoeff=0.1085;IndelType=DEL.NumRepetitions_7.EventLength_2.RepeatExpansion_TG.;MQ=58.37;MQ0=50;MQ0Fraction=0.0156;MQRankSum=-1.672;QD=13.57;ReadPosRankSum=2.063;SB=-18894.12;VQSLOD=4.7353;set=VQSR +20 36542802 . GTA G 31310.15 PASS AA=1481;AB=0.67546;ABA=1378;ABP=1138.4;ABR=2868;AC=437;AF=0.35938;AN=1216;BL=25719;BR=95500;BVAR;BaseQRankSum=9.478;DEL;DP=18068;DS;Dels=0.10;EL=889;EPP=132.34;ER=592;FS=320.726;HETAR=591;HOMA=44;HOMR=378;HRun=0;InbreedingCoeff=-0.4197;IndelType=DEL.NumRepetitions_1.EventLength_2.RepeatExpansion_TA.;LEN=2;LRB=0.57566;LRBP=87231;MQ0Fraction=0.0091;MQM=29.319;MQRankSum=-3.409;NS=1013;RA=4037;RL=3;RPP=3193;RR=1478;RUN=1;ReadPosRankSum=-6.687;SAB=0.40041;SAF=593;SAP=130.61;SAR=888;SRB=0.39014;SRF=1575;SRP=426.21;SRR=2462;VQSLOD=-1.6586;set=filterInVQSR-2of5;sumGLbyD=5.49 +20 36985025 . CCA C 4.57 PASS AC=0;AF=0.0000;AN=682;BaseQRankSum=4.199;DP=1504;FS=1.036;HRun=0;HaplotypeScore=18.5241;InbreedingCoeff=0.0460;IndelType=DEL.NumRepetitions_6.EventLength_2.RepeatExpansion_CA.;MQ=57.04;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-1.774;ReadPosRankSum=-2.105;VQSLOD=6.7455;set=VQSR +20 37139725 . CAG C 250.77 PASS AF=0.0084;AF1=0.0139;BaseQRankSum=4.131;CI95=0.00885,0.01991;DP=7973;DP4=1808,1990,2,7;Dels=0.01;FQ=104;FR;FS=11.160;HP=3;HPLen=2;HR=1;HRun=0;HU=A;INDEL;InbreedingCoeff=-0.0001;IndelType=DEL.NumRepetitions_3.EventLength_2.RepeatExpansion_AG.;MQ=103.71;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-3.378;NF;NR;PP;PV4=0.18,0.0011,0.041,1;ReadPosRankSum=0.605;SC=AGATGGGGAACAGAGAGCAAG;SET_INTEGRATION;SET_WGVQSR;TC;TR=6;TU=AG;VQSLOD=7.0630;set=Intersection;sumGLbyD=12.13 +20 37213224 . G GTA 3230.05 PASS AA=32;AB=0.50769;ABA=32;ABP=3.0437;ABR=33;AC=12;AF=0.0168;AF1=0.02635;AN=714;BL=1271;BR=1743;BVAR;BaseQRankSum=-7.288;CI95=0.02212,0.03319;DP=14304;DP4=2180,2256,13,21;Dels=0.00;EL=20;EPP=7.3532;ER=12;FQ=999;FR;FS=7.863;HETAR=9;HOMA=0;HOMR=1043;HP=1;HPLen=1;HR=1;HRun=0;HU=T;INDEL;INS;InbreedingCoeff=0.0410;IndelType=INS.NumRepetitions_1.EventLength_2.RepeatExpansion_TA.;LEN=2;LRB=0.1566;LRBP=163.52;MQ=95.56;MQ0=1;MQ0Fraction=0.0005;MQM=51.562;MQRankSum=0.420;NF;NR;NS=1052;PP;PV4=0.23,1,0.03,0.33;RA=5138;RL=11;RPP=9.7962;RR=21;RUN=1;ReadPosRankSum=-1.122;SAB=0.28125;SAF=9;SAP=16.311;SAR=23;SC=TTTGCATCCAGTAGCACCACT;SET_INTEGRATION;SET_WGVQSR;SRB=0.42293;SRF=2173;SRP=268.11;SRR=2965;TC;TR=1;TU=T;VQSLOD=9.7315;set=Intersection;sumGLbyD=36.69 +20 37282014 . ATGG A 2518.52 PASS AF=0.03519;BaseQRankSum=11.994;DP=24592;DP4=415,3804,8,49;DS;Dels=0.01;FQ=999;FR;FS=2.049;HP=1;HPLen=1;HR=1;HRun=0;HU=T;INDEL;InbreedingCoeff=0.1028;IndelType=DEL.NumRepetitions_5.EventLength_3.;MQ=51.01;MQ0Fraction=0.0139;MQRankSum=-5.912;NF;NR;PP;PV4=0.27,1,0.22,0.015;ReadPosRankSum=1.781;SC=GGTGGTGATGATGGTGGTGGT;TC;TR=17;TU=GGT;VQSLOD=2.1183;set=filterInVQSR-2of5;sumGLbyD=9.05 +20 37532218 . GTCCGTCCA ATCCGTCCA,G 76120.88 PASS AC=998;AF=0.92924;AN=1074;BaseQRankSum=-2.877;DP=3087;FR;FS=9.889;HP=2;HPLen=2;HR=1;HRun=0;HU=T;HaplotypeScore=71.6244;InbreedingCoeff=-0.0027;IndelType=MIXED;MQ=52.68;MQ0=543;MQ0Fraction=0.1759;MQRankSum=-1.750;NF;NR;PP;QD=24.98;ReadPosRankSum=-0.850;SB=-36635.43;SC=CCGTCCGTCCGTCCGTCCATC;TC;TR=19;TU=CCGT;VQSLOD=5.3068;set=Intersection +20 37712193 . AAG A 2670.33 PASS AA=106;AB=0.62821;ABA=87;ABP=36.418;ABR=147;AC=53;AF=0.0759;AN=698;BL=4672;BR=4303;BVAR;BaseQRankSum=13.696;DEL;DP=15155;DP4=1340,1852,32,52;Dels=0.06;EL=57;EPP=4.3214;ER=49;FR;FS=0.824;HETAR=43;HOMA=7;HOMR=982;HP=1;HPLen=2;HR=2;HRun=0;HU=A;INDEL;InbreedingCoeff=0.0861;IndelType=DEL.NumRepetitions_3.EventLength_2.RepeatExpansion_AG.;LEN=2;LRB=0.041114;LRBP=35.954;MQ=86.12;MQ0=0;MQ0Fraction=0.0000;MQM=54.236;MQRankSum=-5.745;NF;NR;NS=1034;PP;PV4=0.5,7.3e-26,1.1e-10,1;RA=4423;RL=58;RPP=5.0589;RR=48;RUN=1;ReadPosRankSum=2.617;SAB=0.38679;SAF=41;SAP=14.81;SAR=65;SC=GAAAATTCTGAAGAGAGTCAG;SET_INTEGRATION;SET_WGVQSR;SRB=0.43093;SRF=1906;SRP=186.29;SRR=2517;TC;TR=6;TU=AG;VQSLOD=9.8131;set=Intersection;sumGLbyD=14.20 +20 37739002 . T TCA 1395.38 PASS AA=16;AB=0.48387;ABA=16;ABP=3.0803;ABR=15;AC=11;AF=0.00950;AN=1158;BL=504;BR=630;BVAR;BaseQRankSum=-3.257;DP=13617;DP4=1660,883,7,5;Dels=0.00;EL=7;EPP=3.5532;ER=9;FR;FS=1.114;HETAR=9;HOMA=0;HOMR=991;HP=1;HPLen=2;HR=2;HRun=0;HU=T;INDEL;INS;InbreedingCoeff=0.0527;IndelType=INS.NumRepetitions_1.EventLength_2.RepeatExpansion_CA.;LEN=2;LRB=0.11111;LRBP=33.411;MQ=88.41;MQ0=0;MQ0Fraction=0.0000;MQM=83.75;MQRankSum=1.713;NF;NR;NS=1000;PP;PV4=0.76,1,1,0.5;RA=3257;RL=6;RPP=5.1818;RR=10;RUN=1;ReadPosRankSum=1.190;SAB=0.6875;SAF=11;SAP=7.8961;SAR=5;SC=CCTTTTTTGTTCATTTCTGCA;SET_INTEGRATION;SET_WGVQSR;SRB=0.68806;SRF=2241;SRP=1003.5;SRR=1016;TC;TR=2;TU=T;VQSLOD=10.2220;set=Intersection;sumGLbyD=41.32 +20 38395256 . TTGAG T 633.19 PASS AF=0.0028;BaseQRankSum=5.667;DP=3839;Dels=0.00;FR;FS=10.238;HP=2;HPLen=3;HR=3;HRun=0;HU=T;InbreedingCoeff=-0.0097;IndelType=DEL.NumRepetitions_1.EventLength_4.;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-1.276;NF;NR;PP;ReadPosRankSum=-1.016;SC=ATGTGTTTGTTTGAGTATGTT;SET_INTEGRATION;SET_WGVQSR;TC;TR=10;TU=GTTT;VQSLOD=6.4906;set=Intersection;sumGLbyD=10.83 +20 39345038 . CTGAACCATAATGTG C,CCCATAATGTG 60744.52 PASS AA=23;AB=0.67143;ABA=23;ABP=20.878;ABR=47;AC=232,2;AF=0.19366,0.00167;AN=1198;BL=1607;BR=1843;BVAR;BaseQRankSum=30.955;DEL;DP=31490;DP4=1729,2100,265,278;Dels=0.13;EL=6;EPP=14.434;ER=17;FQ=999;FR;FS=1.767;HETAR=18;HOMA=0;HOMR=1015;HP=1;HPLen=2;HR=2;HRun=0;HU=C;INDEL;InbreedingCoeff=0.1991;IndelType=MULTIALLELIC_INDEL;LEN=14;LRB=0.068406;LRBP=38.066;MQ=104.60;MQ0=0;MQ0Fraction=0.0000;MQM=189.83;MQRankSum=-16.579;NF;NR;NS=1033;PP;PV4=0.12,1,5.5e-137,1;RA=5286;RL=14;RPP=5.3706;RR=9;RUN=1;ReadPosRankSum=4.323;SAB=0.56522;SAF=13;SAP=3.86;SAR=10;SC=TGGGCTGGACCTGAACCATAA;SET_WGVQSR;SRB=0.46311;SRF=2448;SRP=65.493;SRR=2838;TC;TR=2;TU=C;VQSLOD=6.2643;dbSNP=130;set=Intersection;sumGLbyD=65.43 +20 39418008 . AG A 46796 PASS AA=113;AB=0.9511;ABA=80;ABP=2894.6;ABR=1556;AC=30;AF=0.02412;AN=1244;BL=638;BR=6936;BVAR;BaseQRankSum=7.280;DEL;DP=14307;Dels=0.00;EL=50;EPP=6.2579;ER=63;FR;FS=5.707;HETAR=473;HOMA=361;HOMR=246;HP=3;HR=3;HRun=3;HU=G;InbreedingCoeff=0.0272;IndelType=DEL.NumRepetitions_3.EventLength_1.RepeatExpansion_G.;LEN=1;LRB=0.83153;LRBP=11375;MQ0=0;MQ0Fraction=0.0000;MQM=62.398;MQRankSum=3.530;NF;NR;NS=1089;PP;RA=3000;RL=3;RPP=223.02;RR=110;RUN=1;ReadPosRankSum=-18.601;SAB=0.58407;SAF=66;SAP=9.9475;SAR=47;SC=ACTGGGGGAAAGGGATTCTAG;SRB=0.494;SRF=1482;SRP=3.9484;SRR=1518;TC;TR=3;TU=G;VQSLOD=4.5834;set=Intersection;sumGLbyD=3.06 +20 39876961 . GT G,GTT,GTTT 2302.10 PASS ABR=496;AC=45,51,45;AF=0.03664,0.04153,0.03664;AN=1228;BVAR;BaseQRankSum=4.462;DP=37649;DP4=1457,1975,57,59;Dels=0.02;FR;FS=9.938;HOMA=0;HOMR=978;HP=10;HPLen=10;HR=10;HRun=10;HU=T;INDEL;INS;InbreedingCoeff=0.2583;IndelType=MULTIALLELIC_INDEL;MQ=97.28;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.246;NF;NR;NS=1063;PP;PV4=0.15,1,1.9e-09,0.016;RA=5185;RUN=1;ReadPosRankSum=-4.954;SC=AGTTTCTCCGGTTTTTTTTTT;SET_WGVQSR;SRB=0.47464;SRF=2461;SRP=31.978;SRR=2724;TC;TR=10;TU=T;VQSLOD=4.9752;set=Intersection;sumGLbyD=4.39 +20 41013333 . TC T 20681 PASS AA=137;AB=0.89211;ABA=134;ABP=1661.6;ABR=1108;AC=68;AF=0.05601;AN=1214;BL=1091;BR=8981;BVAR;BaseQRankSum=1.354;DEL;DP=12998;Dels=0.01;EL=57;EPP=11.395;ER=80;FS=0.758;HETAR=359;HOMA=100;HOMR=610;HRun=1;InbreedingCoeff=0.0104;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;LEN=1;LRB=0.78336;LRBP=13424;MQ0=1;MQ0Fraction=0.0003;MQM=67.745;MQRankSum=2.563;NS=1072;RA=4447;RL=5;RPP=258.66;RR=132;RUN=1;ReadPosRankSum=-14.092;SAB=0.59124;SAF=81;SAP=12.917;SAR=56;SRB=0.54194;SRF=2410;SRP=70.947;SRR=2037;VQSLOD=3.7531;set=filterInVQSR-2of5;sumGLbyD=4.14 +20 41659532 . GC G 40544 PASS AA=42;AB=0.97149;ABA=39;ABP=2644.5;ABR=1329;AC=15;AF=0.0209;AN=716;BL=2531;BR=135;BVAR;BaseQRankSum=-2.537;DEL;DP=12219;Dels=0.00;EL=25;EPP=6.3192;ER=17;FS=2.656;HETAR=374;HOMA=155;HOMR=551;HRun=1;InbreedingCoeff=-0.0270;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;LEN=1;LRB=0.89872;LRBP=4678.9;MQ0=0;MQ0Fraction=0.0000;MQM=103.31;MQRankSum=2.828;NS=1088;RA=4736;RL=41;RPP=85.733;RR=1;RUN=1;ReadPosRankSum=-9.702;SAB=0.57143;SAF=24;SAP=4.8716;SAR=18;SRB=0.5625;SRF=2664;SRP=163.7;SRR=2072;VQSLOD=4.3267;set=Intersection;sumGLbyD=3.22 +20 41845580 . GA G 49310 PASS AA=83;AB=0.95258;ABA=69;ABP=2591.6;ABR=1386;AC=46;AF=0.03740;AN=1230;BL=1320;BR=5150;BVAR;BaseQRankSum=-1.121;DEL;DP=13336;Dels=0.00;EL=36;EPP=6.1759;ER=47;FR;FS=0.372;HETAR=442;HOMA=341;HOMR=295;HP=2;HR=3;HRun=1;HU=G;InbreedingCoeff=0.0238;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.59196;LRBP=4926.2;MQ0=0;MQ0Fraction=0.0000;MQM=89.048;MQRankSum=0.897;NF;NR;NS=1080;PP;RA=3006;RL=5;RPP=142.43;RR=78;RUN=1;ReadPosRankSum=-15.412;SAB=0.55422;SAF=46;SAP=5.1294;SAR=37;SC=CCAGCTGTGGGAGAGAAACAT;SRB=0.47971;SRF=1442;SRP=13.762;SRR=1564;TC;TR=6;TU=AG;VQSLOD=4.4669;set=Intersection;sumGLbyD=3.65 +20 42209428 . GC G 13163 PASS AA=89;AB=0.86677;ABA=83;ABP=730.96;ABR=540;AC=39;AF=0.03218;AN=1212;BL=950;BR=5334;BVAR;BaseQRankSum=-10.119;DEL;DP=10692;Dels=0.01;EL=48;EPP=4.2058;ER=41;FS=0.000;HETAR=259;HOMA=727;HOMR=54;HRun=1;InbreedingCoeff=0.0448;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;LEN=1;LRB=0.69764;LRBP=6644.4;MQ0=0;MQ0Fraction=0.0000;MQM=126.55;MQRankSum=4.223;NS=1040;RA=723;RL=12;RPP=106.09;RR=77;RUN=1;ReadPosRankSum=-17.362;SAB=0.39326;SAF=35;SAP=11.818;SAR=54;SRB=0.37898;SRF=274;SRP=94.99;SRR=449;VQSLOD=3.7157;set=filterInVQSR-2of5;sumGLbyD=3.48 +20 42281109 . T TAG 2321.12 PASS AC=181;AF=0.3740;AN=484;BaseQRankSum=8.977;DP=435;FS=17.001;HRun=0;HaplotypeScore=14.6734;InbreedingCoeff=0.2340;IndelType=INS.NOVEL_2.;MQ=53.88;MQ0=47;MQ0Fraction=0.1080;MQRankSum=0.762;QD=12.41;ReadPosRankSum=3.399;SB=-1299.73;SET_INTEGRATION;VQSLOD=4.8926;set=VQSR +20 42436117 . TC T 38933 PASS AA=18;AB=0.98435;ABA=17;ABP=2215.9;ABR=1069;AC=15;AF=0.01223;AN=1226;BL=498;BR=428;BVAR;BaseQRankSum=-7.224;DEL;DP=12436;Dels=0.00;EL=1;EPP=33.893;ER=17;FS=2.469;HETAR=303;HOMA=614;HOMR=123;HRun=1;InbreedingCoeff=0.0439;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;LEN=1;LRB=0.075594;LRBP=14.501;MQ0=0;MQ0Fraction=0.0000;MQM=98.611;MQRankSum=1.086;NS=1075;RA=1656;RL=10;RPP=3.4928;RR=8;RUN=1;ReadPosRankSum=-17.765;SAB=0.5;SAF=9;SAP=3.0103;SAR=9;SRB=0.49879;SRF=826;SRP=3.0313;SRR=830;VQSLOD=4.0821;set=filterInVQSR-2of5;sumGLbyD=3.04 +20 42682214 . C A,CAT 3904.51 PASS AA=24;AB=0.6383;ABA=17;ABP=10.818;ABR=30;AC=0;AF=0.0000;AN=636;BL=1119;BR=949;BVAR;BaseQRankSum=1.426;DP=6509;Dels=0.00;EL=9;EPP=6.2675;ER=15;FR;HETAR=12;HOMA=3;HOMR=876;HP=2;HPLen=1;HR=1;HRun=0;HU=A;INS;InbreedingCoeff=0.0006;IndelType=MIXED;LEN=2;LRB=0.082205;LRBP=33.356;MQ0Fraction=0.0046;MQM=40.792;MQRankSum=-0.296;NF;NR;NS=891;PP;QD=32.81;RA=2679;RL=15;RPP=6.2675;RR=9;RUN=1;ReadPosRankSum=-1.806;SAB=0.75;SAF=18;SAP=16.039;SAR=6;SB=-924.23;SC=TATACACACACATATATATAC;SET_INTEGRATION;SET_WGVQSR;SRB=0.66293;SRF=1776;SRP=620.76;SRR=903;TC;TR=9;TU=AC;set=filterInVQSR-2of5;sumGLbyD=32.75 +20 42973456 . CA C,CAA,CAAA 2675 PASS AA=90;AB=0.79177;ABA=86;ABP=308.39;ABR=327;AC=77,61,39;AF=0.06492,0.05143,0.03288;AN=1186;BL=2983;BR=4446;BVAR;BaseQRankSum=2.422;DP=9416;Dels=0.03;EL=39;EPP=6.4847;ER=51;FR;FS=31.555;HETAR=75;HOMA=1;HOMR=888;HP=11;HR=11;HRun=11;HU=A;INS;InbreedingCoeff=0.2696;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.19693;LRBP=628.63;MQ0=0;MQ0Fraction=0.0000;MQM=55.567;MQRankSum=1.777;NF;NR;NS=964;PP;RA=3601;RL=37;RPP=9.1869;RR=53;RUN=1;ReadPosRankSum=-4.991;SAB=0.55556;SAF=50;SAP=5.423;SAR=40;SC=TAGTGACTGTCAAAAAAAAAA;SET_WGVQSR;SRB=0.60622;SRF=2183;SRP=355.91;SRR=1418;TC;TR=11;TU=A;VQSLOD=1.0763;set=filterInVQSR-2of5;sumGLbyD=4.05 +20 43091870 . TC T 2455.60 PASS AA=120;AB=0.10619;ABA=101;ABP=155.22;ABR=12;AC=42;AF=0.03825;AN=1098;BL=573;BR=8744;BVAR;BaseQRankSum=-13.513;DEL;DP=9139;Dels=0.00;EL=64;EPP=4.1684;ER=56;FS=9.856;HETAR=118;HOMA=820;HOMR=0;HRun=1;InbreedingCoeff=0.0833;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;LEN=1;LRB=0.877;LRBP=15564;MQ0Fraction=0.0017;MQM=45.1;MQRankSum=2.266;NS=938;RA=24;RL=1;RPP=254.97;RR=119;RUN=1;ReadPosRankSum=-15.803;SAB=0.475;SAF=57;SAP=3.6617;SAR=63;SRB=0.54167;SRF=13;SRP=3.3722;SRR=11;VQSLOD=3.9930;set=filterInVQSR-2of5;sumGLbyD=3.09 +20 43233648 rs74585029 GA G,GAA 1504.40 PASS AA=113;AB=0.78652;ABA=95;ABP=320.31;ABR=350;AC=41,65;AF=0.03394,0.05381;AF1=0.0115;AN=1208;BL=4677;BR=5548;BVAR;BaseQRankSum=6.744;CI95=0.004274,0.01852;DB;DEL;DP=13996;DP4=1736,1549,15,17;Dels=0.03;EL=69;EPP=15.021;ER=44;FQ=14;FR;FS=12.174;HETAR=119;HOMA=15;HOMR=892;HP=11;HPLen=10;HR=10;HRun=10;HU=A;INDEL;InbreedingCoeff=0.2359;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.085183;LRBP=164.12;MQ=89.12;MQ0Fraction=0.0000;MQM=69.867;MQRankSum=2.513;NF;NR;NS=1027;PP;PV4=0.59,1,0.065,0.33;RA=3845;RL=46;RPP=11.485;RR=67;RUN=1;ReadPosRankSum=-4.957;SAB=0.33628;SAF=38;SAP=29.318;SAR=75;SC=AAAACAGCCAGAAAAAAAAAA;SET_INTEGRATION;SET_WGVQSR;SRB=0.43667;SRF=1679;SRP=136.95;SRR=2166;TC;TR=10;TU=A;VQSLOD=4.5121;set=Intersection;sumGLbyD=8.22 +20 43246548 . AC A,CC 41579.13 PASS AA=382;AB=0.72402;ABA=316;ABP=502.11;ABR=829;AC=1197;AF=0.99254;AN=1206;BL=9889;BR=14293;BVAR;BaseQRankSum=1.373;DEL;DP=10477;DS;Dels=0.05;EL=243;EPP=64.494;ER=139;FS=29.162;HETAR=291;HOMA=85;HOMR=624;HPLen=10;InbreedingCoeff=0.1392;IndelType=MIXED;LEN=1;LRB=0.18212;LRBP=1744.6;MQ0Fraction=0.0024;MQM=48.471;MQRankSum=5.726;NS=1001;RA=3138;RL=174;RPP=9.5816;RR=208;RUN=1;ReadPosRankSum=5.755;SAB=0.79843;SAF=305;SAP=298.51;SAR=77;SET_INTEGRATION;SET_WGVQSR;SRB=0.70363;SRF=2208;SRP=1133.2;SRR=930;VQSLOD=5.6318;set=Intersection;sumGLbyD=5.22 +20 43258646 . T TT 1107.17 PASS AC=97;AF=0.08420;AN=1152;BaseQRankSum=4.525;DP=2345;FS=19.308;HRun=9;HaplotypeScore=13.6276;InbreedingCoeff=0.1299;IndelType=INS.NumRepetitions_10orMore.EventLength_1.RepeatExpansion_T.;MQ=76.70;MQ0=0;MQ0Fraction=0.0000;MQRankSum=1.395;QD=2.67;ReadPosRankSum=-4.696;SB=-899.41;VQSLOD=5.4523;set=VQSR +20 43718299 . ATTACT A 5497.06 PASS AA=56;AB=0.51818;ABA=53;ABP=3.3262;ABR=57;AC=18;AF=0.0251;AF1=0.03729;AN=718;BL=2321;BR=2591;BVAR;BaseQRankSum=11.142;CI95=0.03319,0.04425;DEL;DP=17576;DP4=2460,2692,31,22;Dels=0.02;EL=28;EPP=3.0103;ER=28;FQ=999;FR;FS=9.689;HETAR=15;HOMA=1;HOMR=1068;HP=2;HPLen=2;HR=2;HRun=0;HU=T;INDEL;InbreedingCoeff=0.0448;IndelType=DEL.NumRepetitions_1.EventLength_5.;LEN=5;LRB=0.054967;LRBP=35.238;MQ=96.55;MQ0=0;MQ0Fraction=0.0000;MQM=50.286;MQRankSum=-5.149;NF;NR;NS=1084;PP;PV4=0.13,1,1.2e-12,1;RA=6745;RL=28;RPP=3.0103;RR=28;RUN=1;ReadPosRankSum=0.828;SAB=0.5;SAF=28;SAP=3.0103;SAR=28;SC=ATGACAGTGGATTACTTTAGT;SET_INTEGRATION;SET_WGVQSR;SRB=0.46835;SRF=3159;SRP=61.709;SRR=3586;TC;TR=2;TU=T;VQSLOD=7.8832;set=Intersection;sumGLbyD=46.60 +20 43981749 . A AAAAAAC,AC 20899.71 PASS ABR=192;AC=91,0;AF=0.1285,0.0000;AN=708;BVAR;BaseQRankSum=7.858;DP=23372;DP4=1554,1457,55,42;Dels=0.00;FR;FS=0.000;HOMA=4;HOMR=995;HP=6;HPLen=7;HR=7;HRun=0;HU=A;INDEL;INS;InbreedingCoeff=0.2109;IndelType=MULTIALLELIC_INDEL;MQ=95.59;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-12.081;NF;NR;NS=1051;PP;PV4=0.35,1,8.9e-73,1;RA=5027;RUN=1;ReadPosRankSum=-1.359;SC=TACACTAGCAAAAAAACAAAA;SET_WGVQSR;SRB=0.48518;SRF=2439;SRP=12.6;SRR=2588;TC;TR=7;TU=A;VQSLOD=8.0916;set=Intersection;sumGLbyD=54.33 +20 43999274 . TCAAA T 2948.85 PASS AA=59;AB=0.59441;ABA=58;ABP=14.08;ABR=85;AC=20;AF=0.0290;AF1=0.04249;AN=690;BL=2277;BR=2436;BVAR;BaseQRankSum=9.320;CI95=0.0354,0.05088;DEL;DP=14599;DP4=2052,2303,21,22;Dels=0.03;EL=32;EPP=3.9304;ER=27;FQ=999;FR;FS=0.000;HETAR=21;HOMA=0;HOMR=1043;HP=2;HPLen=1;HR=1;HRun=0;HU=C;INDEL;InbreedingCoeff=-0.0037;IndelType=DEL.NumRepetitions_1.EventLength_4.;LEN=4;LRB=0.033736;LRBP=14.658;MQ=90.05;MQ0=0;MQ0Fraction=0.0000;MQM=75.339;MQRankSum=-1.294;NF;NR;NS=1064;PP;PV4=0.88,1,0.0026,1;RA=5732;RL=27;RPP=3.9304;RR=32;RUN=1;ReadPosRankSum=-0.915;SAB=0.47458;SAF=28;SAP=3.3415;SAR=31;SC=GGTACACAGCTCAAACAGTCT;SET_INTEGRATION;SET_WGVQSR;SRB=0.4836;SRF=2772;SRP=16.4;SRR=2960;TC;TR=1;TU=C;VQSLOD=9.8086;set=Intersection;sumGLbyD=27.09 +20 44098622 . C CG 1092.40 PASS AA=129;AB=0.77301;ABA=74;ABP=214.06;ABR=252;AC=45;AF=0.0455;AN=988;BL=6586;BR=3029;BVAR;BaseQRankSum=2.802;DP=5177;Dels=0.00;EL=122;EPP=225.63;ER=7;FR;FS=355.273;HETAR=66;HOMA=11;HOMR=734;HP=6;HR=4;HRun=4;HU=G;INS;InbreedingCoeff=0.1759;IndelType=INS.NumRepetitions_4.EventLength_1.RepeatExpansion_G.;LEN=1;LRB=0.36994;LRBP=2860.4;MQ0=0;MQ0Fraction=0.0000;MQM=52.395;MQRankSum=1.946;NF;NR;NS=811;PP;RA=1981;RL=121;RPP=217.95;RR=8;RUN=1;ReadPosRankSum=-6.413;SAB=0.99225;SAF=128;SAP=274.51;SAR=1;SC=GCGGAAGTGGCGGGGACCCTT;SRB=0.41242;SRF=817;SRP=135;SRR=1164;TC;TR=4;TU=G;VQSLOD=-2.2690;set=filterInVQSR-2of5;sumGLbyD=4.04 +20 44327637 . A AG,AGGGGGG 14351.23 PASS AC=9,211;AF=0.0103,0.2409;AN=876;BaseQRankSum=15.517;DP=1704;FS=6.768;HaplotypeScore=31.5906;InbreedingCoeff=0.1538;IndelType=MULTIALLELIC_INDEL;MQ=54.64;MQ0=4;MQ0Fraction=0.0023;MQRankSum=-12.691;QD=20.83;ReadPosRankSum=-3.583;SB=-6278.99;VQSLOD=5.1556;set=VQSR +20 45202636 . GA G 13269 PASS AA=25;AB=0.96162;ABA=18;ABP=871.09;ABR=451;AC=24;AF=0.02013;AN=1192;BL=567;BR=1728;BVAR;BaseQRankSum=-5.361;DEL;DP=10873;Dels=0.00;EL=10;EPP=5.1818;ER=15;FS=0.928;HETAR=169;HOMA=831;HOMR=45;HRun=1;InbreedingCoeff=0.0999;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.50588;LRBP=1278.4;MQ0=0;MQ0Fraction=0.0000;MQM=170.56;MQRankSum=0.161;NS=1049;RA=632;RL=2;RPP=41.315;RR=23;RUN=1;ReadPosRankSum=-14.760;SAB=0.68;SAF=17;SAP=10.046;SAR=8;SRB=0.51424;SRF=325;SRP=4.1235;SRR=307;VQSLOD=3.9290;set=filterInVQSR-2of5;sumGLbyD=3.90 +20 45417828 . TGAGC T,TGC 4672.90 PASS ABR=317;AC=69,104;AF=0.05712,0.08609;BVAR;BaseQRankSum=18.527;DEL;DP=11835;DS;FS=184.873;HOMA=48;HOMR=575;HaplotypeScore=65.5875;InbreedingCoeff=0.0599;IndelType=MULTIALLELIC_INDEL;MQ=29.78;MQ0=2988;MQ0Fraction=0.3629;MQRankSum=5.052;NS=713;QD=1.11;RA=1581;RUN=1;ReadPosRankSum=6.574;SB=-2116.87;SRB=0.47502;SRF=751;SRP=11.582;SRR=830;VQSLOD=0.0651;set=filterInVQSR-2of5 +20 45525657 rs66759083 TA AA,T 49315 PASS AA=2361;AB=0.45241;ABA=1398;ABP=53.235;ABR=1155;AC=20;AF=0.01701;AN=1176;BL=94913;BR=100886;BVAR;BaseQRankSum=0.740;DB;DEL;DP=30636;DP4=1258,881,1206,999;Dels=0.48;EL=1133;EPP=11.311;ER=1228;FQ=999;FR;FS=7.072;HETAR=503;HOMA=310;HOMR=218;HP=6;HPLen=7;HR=7;HU=T;INDEL;InbreedingCoeff=0.2271;IndelType=MIXED;LEN=1;LRB=0.030506;LRBP=398.68;MQ=102.24;MQ0=0;MQ0Fraction=0.0000;MQM=75.359;MQRankSum=0.148;NF;NR;NS=1031;PP;PV4=0.0064,0,4.6e-23,0.47;RA=2042;RL=1183;RPP=3.0333;RR=1178;RUN=1;ReadPosRankSum=-2.999;SAB=0.52139;SAF=1231;SAP=12.392;SAR=1130;SC=AGGATTTTTTTAAAAAGTTTT;SET_INTEGRATION;SET_WGVQSR;SRB=0.55093;SRF=1125;SRP=49.017;SRR=917;TC;TR=7;TU=T;VQSLOD=7.1651;dbSNP=114;set=Intersection;sumGLbyD=18.51 +20 45783456 . T TG 2355.68 PASS AA=64;AB=0.78521;ABA=61;ABP=203.67;ABR=223;AC=15;AF=0.0165;AN=910;BL=815;BR=5486;BVAR;BaseQRankSum=8.593;DP=10348;Dels=0.00;EL=48;EPP=37.754;ER=16;FS=77.861;HETAR=56;HOMA=1;HOMR=970;HRun=1;INS;InbreedingCoeff=-0.0549;IndelType=INS.NOVEL_1.Novel_G.;LEN=1;LRB=0.74131;LRBP=7522.1;MQ0Fraction=0.0122;MQM=44.562;MQRankSum=-1.258;NS=1027;RA=4750;RL=0;RPP=141.98;RR=64;RUN=1;ReadPosRankSum=-7.047;SAB=0.25;SAF=16;SAP=37.754;SAR=48;SRB=0.6;SRF=2850;SRP=415.59;SRR=1900;VQSLOD=1.3146;set=filterInVQSR-2of5;sumGLbyD=6.03 +20 46517110 . C CT 868.55 PASS AC=15;AF=0.0218;AN=688;BaseQRankSum=8.522;DP=1752;FS=6.570;HRun=0;HaplotypeScore=14.9548;InbreedingCoeff=0.0452;IndelType=INS.NOVEL_1.Novel_T.;MQ=77.73;MQ0=0;MQ0Fraction=0.0000;MQRankSum=3.874;QD=10.98;ReadPosRankSum=-0.733;SB=-396.78;SET_INTEGRATION;SET_WGVQSR;VQSLOD=6.7740;set=VQSR +20 46629361 . TTTCTTTC T,TTTTC 13000.91 PASS AC=188,107;AF=0.2212,0.1259;AN=850;BaseQRankSum=7.214;DP=1846;FS=14.502;HaplotypeScore=40.8481;InbreedingCoeff=0.3210;IndelType=MULTIALLELIC_INDEL;MQ=50.74;MQ0=79;MQ0Fraction=0.0428;MQRankSum=-6.348;QD=13.59;ReadPosRankSum=3.943;SB=-3581.20;VQSLOD=5.9412;set=VQSR +20 46951099 . G GT 1662.30 PASS AA=55;AB=0.7713;ABA=51;ABP=145.58;ABR=172;AC=47;AF=0.03923;AN=1198;BL=3288;BR=2434;BVAR;BaseQRankSum=-4.014;DP=27423;DP4=1483,1590,58,42;Dels=0.01;EL=21;EPP=9.6826;ER=34;FR;FS=9.565;HETAR=48;HOMA=0;HOMR=913;HP=16;HPLen=10;HR=10;HRun=10;HU=T;INDEL;INS;InbreedingCoeff=0.0952;IndelType=INS.NumRepetitions_10orMore.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.14925;LRBP=279.78;MQ=70.36;MQ0Fraction=0.0124;MQM=52.545;MQRankSum=0.717;NF;NR;NS=961;PP;PV4=0.067,1,1,0.17;RA=3035;RL=38;RPP=20.422;RR=17;RUN=1;ReadPosRankSum=-3.014;SAB=0.47273;SAF=26;SAP=3.3656;SAR=29;SC=TTTGTTTTTTGTTTTTTTTTT;SET_INTEGRATION;SET_WGVQSR;SRB=0.36013;SRF=1093;SRP=518.73;SRR=1942;TC;TR=10;TU=T;VQSLOD=5.4779;set=Intersection;sumGLbyD=3.49 +20 47201076 rs58052846 C CT 982.16 PASS AC=50;AF=0.0551;AN=908;BaseQRankSum=12.598;DB;DP=2449;FS=35.648;HRun=0;HaplotypeScore=29.4602;InbreedingCoeff=-0.0542;IndelType=INS.NOVEL_1.Novel_T.;MQ=63.54;MQ0=0;MQ0Fraction=0.0000;MQRankSum=2.196;QD=3.16;ReadPosRankSum=-13.833;SB=-488.19;VQSLOD=6.0429;set=VQSR +20 47965974 rs60011158 G GA 999 PASS AA=21;AB=0.57143;ABA=21;ABP=5.1818;ABR=28;AC=7;AF=0.0101;AF1=0.02061;AN=690;BL=1043;BR=577;BVAR;BaseQRankSum=-3.087;CI95=0.01549,0.02655;DB;DP=14578;DP4=1554,3055,6,17;Dels=0.00;EL=11;EPP=3.1137;ER=10;FQ=999;FR;FS=5.982;HETAR=7;HOMA=0;HOMR=1041;HP=2;HPLen=1;HR=1;HRun=1;HU=A;INDEL;INS;InbreedingCoeff=0.0356;IndelType=INS.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.28765;LRBP=294.09;MQ=80.17;MQ0=0;MQ0Fraction=0.0000;MQM=64.19;MQRankSum=2.137;NF;NR;NS=1048;PP;PV4=0.51,1,1,1;RA=5224;RL=16;RPP=15.522;RR=5;RUN=1;ReadPosRankSum=0.236;SAB=0.38095;SAF=8;SAP=5.5954;SAR=13;SC=TTCATGTACAGAGCTGCTGTG;SET_INTEGRATION;SET_WGVQSR;SRB=0.31183;SRF=1629;SRP=1609.6;SRR=3595;TC;TR=4;TU=AG;VQSLOD=9.5466;dbSNP=129;set=Intersection;sumGLbyD=13.83 +20 48402974 rs57331436 GA G 27741 PASS AA=401;AB=0.5372;ABA=311;ABP=11.089;ABR=361;AC=84;AF=0.1186;AN=708;BL=16591;BR=14776;BVAR;BaseQRankSum=14.621;DB;DEL;DP=30607;DP4=1928,2310,195,225;Dels=0.11;EL=189;EPP=5.8749;ER=212;FQ=999;FR;FS=15.568;HETAR=110;HOMA=30;HOMR=923;HP=4;HPLen=3;HR=1;HRun=3;HU=A;INDEL;InbreedingCoeff=0.1263;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;KGPilot123;LEN=1;LRB=0.057863;LRBP=231.06;MQ=106.68;MQ0=0;MQ0Fraction=0.0000;MQM=63.005;MQRankSum=-2.010;NF;NR;NS=1063;PP;PV4=0.72,1,0.001,1;RA=5258;RL=223;RPP=13.976;RR=178;RUN=1;ReadPosRankSum=1.337;SAB=0.37656;SAF=151;SAP=56.084;SAR=250;SC=TGCCCTCAAAGAGAAAAAGGA;SET_INTEGRATION;SET_WGVQSR;SRB=0.38075;SRF=2002;SRP=652.44;SRR=3256;TC;TR=5;TU=AG;VQSLOD=8.7259;dbSNP=132;set=Intersection;sumGLbyD=15.86 +20 49101936 . C CT 404.46 PASS AC=40;AF=0.03559;AN=1124;BaseQRankSum=0.750;DP=2162;FS=14.291;HRun=2;HaplotypeScore=30.9513;InbreedingCoeff=-0.0082;IndelType=INS.NumRepetitions_2.EventLength_1.RepeatExpansion_T.;MQ=49.78;MQ0=113;MQ0Fraction=0.0523;MQRankSum=-1.289;QD=1.94;ReadPosRankSum=-2.041;SB=-385.48;VQSLOD=4.6365;set=VQSR +20 49731218 . ATTTTATTTTTTATT A,ATTTTATT 8398.93 PASS AF=0.0656,0.0156;AF1=0.0996;BaseQRankSum=13.996;CI95=0.07743,0.1239;DP=6308;DP4=951,1311,23,35;Dels=0.05;FQ=999;FR;FS=12.503;HP=7;HPLen=4;HR=4;HRun=0;HU=T;INDEL;InbreedingCoeff=0.1892;IndelType=MULTIALLELIC_INDEL;MQ=57.61;MQ0Fraction=0.0145;MQRankSum=-5.208;NF;NR;PP;PV4=0.79,1,6.3e-06,0.16;ReadPosRankSum=-2.239;SC=TATTTTATTTATTTTATTTTT;TC;TR=11;TU=ATTT;VQSLOD=4.3191;set=Intersection;sumGLbyD=42.27 +20 49894989 . TA T 172.25 PASS AF=0.0140;BaseQRankSum=7.220;DP=3882;Dels=0.00;FS=17.217;HPLen=2;HRun=1;InbreedingCoeff=0.0531;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;MQ0Fraction=0.0214;MQRankSum=-0.661;ReadPosRankSum=-0.592;SET_INTEGRATION;SET_WGVQSR;VQSLOD=3.0905;set=filterInVQSR-2of5;sumGLbyD=6.60 +20 50010923 rs66516522 C CT,CTGG 35851 PASS ABR=555;AC=310,11;AF=0.26451,0.00939;BVAR;BaseQRankSum=10.662;DB;DP=8188;FR;FS=34.411;HOMA=261;HOMR=399;HP=5;HR=6;HU=C;HaplotypeScore=45.1715;INS;InbreedingCoeff=0.2090;IndelType=MULTIALLELIC_INDEL;MQ=72.80;MQ0=0;MQ0Fraction=0.0000;MQRankSum=9.015;NF;NR;NS=831;PP;QD=9.69;RA=1986;RUN=1;ReadPosRankSum=-24.284;SB=-6038.55;SC=TGTCTGTCCCCCCTCAGCACT;SRB=0.45972;SRF=913;SRP=31.001;SRR=1073;TC;TR=6;TU=C;VQSLOD=6.1824;set=Intersection +20 50228709 rs71192536 TG T 20517 PASS AA=924;AB=0.50203;ABA=735;ABP=3.0633;ABR=741;AC=200;AF=0.16502;AN=1212;BL=35460;BR=34197;BVAR;BaseQRankSum=13.810;DB;DEL;DP=32402;DP4=1760,2065,395,449;Dels=0.16;EL=439;EPP=7.9831;ER=485;FQ=999;FR;FS=0.558;HETAR=242;HOMA=63;HOMR=764;HP=5;HPLen=3;HR=3;HRun=3;HU=G;INDEL;InbreedingCoeff=0.1050;IndelType=DEL.NumRepetitions_3.EventLength_1.RepeatExpansion_G.;LEN=1;LRB=0.018132;LRBP=52.738;MQ=105.83;MQ0=0;MQ0Fraction=0.0000;MQM=75.87;MQRankSum=3.895;NF;NR;NS=1069;PP;PV4=0.7,1.5e-173,1,1;RA=4708;RL=486;RPP=8.4249;RR=438;RUN=1;ReadPosRankSum=1.586;SAB=0.43615;SAF=403;SAP=35.733;SAR=521;SC=GTTTTCCAGGTGGGAAGACCG;SET_INTEGRATION;SET_WGVQSR;SRB=0.44074;SRF=2075;SRP=146.62;SRR=2633;TC;TR=3;TU=G;VQSLOD=10.4820;dbSNP=120;set=Intersection;sumGLbyD=15.35 +20 50236115 . AGG A,ACGGG,AG,AGGG 7429.57 PASS AC=192,13,221,183;AF=0.2115,0.0143,0.2434,0.2015;AN=908;BaseQRankSum=1.045;DP=1177;FS=13.479;HaplotypeScore=11.8294;InbreedingCoeff=0.7959;IndelType=MULTIALLELIC_INDEL;MQ=52.98;MQ0=6;MQ0Fraction=0.0051;MQRankSum=-1.482;QD=7.28;ReadPosRankSum=-2.380;SB=-1229.31;SET_WGVQSR;VQSLOD=8.3762;set=VQSR +20 51589568 . TAAAC AAAAC,T 12477.52 PASS AF=0.27949;BaseQRankSum=-28.122;DP=3777;Dels=0.00;FR;FS=31.799;HP=7;HPLen=4;HR=3;HRun=0;HU=A;InbreedingCoeff=-0.1429;IndelType=MIXED;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-1.196;NF;NR;PP;ReadPosRankSum=-16.483;SC=AAATTCAAAATAAACAAACAA;SET_INTEGRATION;SET_WGVQSR;TC;TR=18;TU=AAAC;VQSLOD=3.9201;set=filterInVQSR-2of5;sumGLbyD=52.43 +20 51617742 . TGC T,TGCGC 1374.91 PASS AF=0.06000,0.02000;BaseQRankSum=12.051;DP=6231;Dels=0.00;FS=189.609;HPLen=1;HRun=0;InbreedingCoeff=0.0862;IndelType=MULTIALLELIC_INDEL;MQ0Fraction=0.0180;MQRankSum=-2.959;ReadPosRankSum=-5.090;VQSLOD=-2.8715;set=filterInVQSR-2of5;sumGLbyD=3.97 +20 51770354 . AG A 1010.90 PASS AA=26;AB=0.52727;ABA=26;ABP=3.3656;ABR=29;AC=7;AF=0.0097;AF1=0.01637;AN=718;BL=1034;BR=964;BVAR;BaseQRankSum=5.588;CI95=0.01327,0.02212;DEL;DP=16259;DP4=2785,2239,15,10;Dels=0.01;EL=11;EPP=4.3466;ER=15;FQ=999;FR;FS=3.367;HETAR=8;HOMA=0;HOMR=1064;HP=2;HPLen=2;HR=2;HRun=2;HU=G;INDEL;InbreedingCoeff=0.0557;IndelType=DEL.NumRepetitions_2.EventLength_1.RepeatExpansion_G.;LEN=1;LRB=0.035035;LRBP=8.3357;MQ=90.48;MQ0=0;MQ0Fraction=0.0000;MQM=61.346;MQRankSum=-0.019;NF;NR;NS=1072;PP;PV4=0.69,2.1e-08,0.078,1;RA=6173;RL=13;RPP=3.0103;RR=13;RUN=1;ReadPosRankSum=-0.460;SAB=0.61538;SAF=16;SAP=6.017;SAR=10;SC=GTGGTCCTGCAGGTCAATAAT;SET_INTEGRATION;SET_WGVQSR;SRB=0.56342;SRF=3478;SRP=218.68;SRR=2695;TC;TR=2;TU=G;VQSLOD=10.1601;set=Intersection;sumGLbyD=14.60 +20 51848430 . AT A,ATT 999 PASS AA=39;AB=0.83408;ABA=37;ABP=219.19;ABR=186;AC=14,33;AF=0.0153,0.0359;AF1=0.03062;AN=918;BL=1676;BR=1732;BVAR;BaseQRankSum=3.338;CI95=0.02212,0.03982;DP=14886;DP4=1970,1762,22,31;Dels=0.01;EL=18;EPP=3.5114;ER=21;FQ=999;FR;FS=3.004;HETAR=31;HOMA=0;HOMR=1040;HP=10;HPLen=9;HR=9;HRun=9;HU=T;INDEL;INS;InbreedingCoeff=0.1629;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.016432;LRBP=5.0085;MQ=80.05;MQ0=0;MQ0Fraction=0.0000;MQM=56.667;MQRankSum=0.325;NF;NR;NS=1071;PP;PV4=0.13,1,0.0095,0.064;RA=5318;RL=21;RPP=3.5114;RR=18;RUN=1;ReadPosRankSum=-0.493;SAB=0.46154;SAF=18;SAP=3.5114;SAR=21;SC=ACAAAACAATATTTTTTTTTC;SET_WGVQSR;SRB=0.4968;SRF=2642;SRP=3.4823;SRR=2676;TC;TR=9;TU=T;VQSLOD=5.7417;set=Intersection;sumGLbyD=7.57 +20 51897203 . T TG 8427.20 PASS AA=237;AB=0.69846;ABA=215;ABP=246.92;ABR=498;AC=117;AF=0.1662;AN=704;BL=14961;BR=5990;BVAR;BaseQRankSum=22.203;DP=9710;Dels=0.00;EL=83;EPP=49.198;ER=154;FR;FS=9.450;HETAR=123;HOMA=9;HOMR=895;HP=5;HPLen=6;HR=6;HRun=0;HU=T;INS;InbreedingCoeff=-0.0513;IndelType=INS.NOVEL_1.Novel_G.;LEN=1;LRB=0.42819;LRBP=8344.3;MQ0Fraction=0.0291;MQM=45.861;MQRankSum=-10.426;NF;NR;NS=1027;PP;RA=4919;RL=210;RPP=309.85;RR=27;RUN=1;ReadPosRankSum=-1.843;SAB=0.29536;SAF=70;SAP=89.219;SAR=167;SC=TTTGTTTGTTTTTTGTTGTTG;SET_INTEGRATION;SET_WGVQSR;SRB=0.47794;SRF=2351;SRP=23.798;SRR=2568;TC;TR=23;TU=GTTT;VQSLOD=6.2670;set=Intersection;sumGLbyD=8.99 +20 52274070 . AAG A 1400.37 PASS AA=30;AB=0.74227;ABA=25;ABP=52.462;ABR=72;AC=21;AF=0.01756;AN=1196;BL=412;BR=1966;BVAR;BaseQRankSum=6.660;DEL;DP=9362;Dels=0.01;EL=16;EPP=3.2998;ER=14;FS=1.485;HETAR=18;HOMA=2;HOMR=1004;HRun=0;InbreedingCoeff=0.0317;IndelType=DEL.NumRepetitions_1.EventLength_2.RepeatExpansion_AG.;LEN=2;LRB=0.65349;LRBP=2208.2;MQ0Fraction=0.0022;MQM=46.133;MQRankSum=-4.743;NS=1024;RA=3931;RL=2;RPP=51.941;RR=28;RUN=1;ReadPosRankSum=-4.152;SAB=0.4;SAF=12;SAP=5.6161;SAR=18;SET_INTEGRATION;SET_WGVQSR;SRB=0.49784;SRF=1957;SRP=3.1699;SRR=1974;VQSLOD=5.6452;set=Intersection;sumGLbyD=11.11 +20 52351501 . TAC T 199.59 PASS AC=22;AF=0.0238;AN=926;BaseQRankSum=7.874;DP=22911;DP4=2146,1691,26,22;FR;FS=2.898;HP=4;HPLen=3;HR=1;HRun=0;HU=A;HaplotypeScore=18.6111;INDEL;InbreedingCoeff=-0.0326;IndelType=DEL.NumRepetitions_6.EventLength_2.RepeatExpansion_AC.;MQ0=2;MQ0Fraction=0.0007;MQRankSum=1.011;NF;NR;PP;PV4=0.88,0.14,0.16,0.24;QD=1.10;ReadPosRankSum=-1.053;SB=-306.09;SC=GACACACAAATACACACACAC;SET_INTEGRATION;SET_WGVQSR;TC;TR=13;TU=AC;VQSLOD=4.0486;set=filterInVQSR-2of5 +20 52447173 . CA C 503.89 PASS AC=23;AF=0.01891;AN=1216;BaseQRankSum=0.801;DP=3266;FS=2.606;HRun=2;HaplotypeScore=22.1543;InbreedingCoeff=-0.0097;IndelType=DEL.NumRepetitions_2.EventLength_1.RepeatExpansion_A.;MQ=118.02;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-1.309;QD=2.65;ReadPosRankSum=-7.872;SB=-279.27;VQSLOD=4.1900;set=VQSR +20 52498650 . GT G 24069 PASS AA=74;AB=0.90594;ABA=57;ABP=870.4;ABR=549;AC=28;AF=0.02333;AN=1200;BL=505;BR=4514;BVAR;BaseQRankSum=-3.837;DEL;DP=9798;Dels=0.01;EL=41;EPP=4.8883;ER=33;FS=4.085;HETAR=209;HOMA=663;HOMR=121;HRun=1;InbreedingCoeff=0.0334;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.79876;LRBP=6956.6;MQ0=2;MQ0Fraction=0.0007;MQM=57.784;MQRankSum=-2.951;NS=995;RA=957;RL=8;RPP=101.72;RR=66;RUN=1;ReadPosRankSum=-14.806;SAB=0.39189;SAF=29;SAP=10.522;SAR=45;SRB=0.39916;SRF=382;SRP=87.53;SRR=575;VQSLOD=3.8710;set=filterInVQSR-2of5;sumGLbyD=2.90 +20 52823602 rs11469056 CAAA C,CA,CAA,CAAAA,CAAAAA,CAAAAAA,CAAAAAAA,CAAAAAAAA,CAAAAAAAAA,CAAAAAAAAAA 14515.17 PASS AC=24,83,246,109,83,19,10,16,22,59;AF=0.02128,0.07358,0.21809,0.09663,0.07358,0.01684,0.00887,0.01418,0.01950,0.05230;AN=1128;BVAR;BaseQRankSum=4.150;DB;DEL;DP=28279;FR;FS=2.021;HP=17;HR=17;HU=A;HaplotypeScore=27.8032;INS;InbreedingCoeff=0.7740;IndelType=MULTIALLELIC_INDEL;MQ=69.00;MQ0=0;MQ0Fraction=0.0000;MQRankSum=1.418;NF;NR;PP;QD=7.90;RUN=1;ReadPosRankSum=-3.864;SB=-3244.40;SC=GGTCCTAAGGCAAAAAAAAAA;SET_WGVQSR;TC;TR=17;TU=A;VQSLOD=14.1033;set=Intersection +20 53308906 . CT C,CTT 2276 PASS AA=92;AB=0.84453;ABA=81;ABP=540.17;ABR=440;AC=53,81;AF=0.04351,0.06650;AN=1218;BL=3561;BR=4796;BVAR;BaseQRankSum=3.000;DP=11804;Dels=0.02;EL=48;EPP=3.3879;ER=44;FR;FS=13.197;HETAR=69;HOMA=3;HOMR=993;HP=11;HR=10;HRun=10;HU=T;INS;InbreedingCoeff=0.2297;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.14778;LRBP=399.32;MQ0=1;MQ0Fraction=0.0003;MQM=56.348;MQRankSum=3.154;NF;NR;NS=1065;PP;RA=5520;RL=39;RPP=7.6365;RR=53;RUN=1;ReadPosRankSum=-2.140;SAB=0.57609;SAF=53;SAP=7.6365;SAR=39;SC=AATCCAAAGTCTTTTTTTTTT;SET_WGVQSR;SRB=0.51576;SRF=2847;SRP=14.92;SRR=2673;TC;TR=10;TU=T;VQSLOD=2.4753;set=filterInVQSR-2of5;sumGLbyD=4.42 +20 53334602 . T TG,TGG 905.13 PASS ABR=325;AC=44,22;AF=0.03624,0.01812;BVAR;BaseQRankSum=-4.608;DP=15015;FR;FS=494.901;HOMA=0;HOMR=1004;HP=1;HR=1;HU=G;HaplotypeScore=20.5023;INS;InbreedingCoeff=0.0799;IndelType=MULTIALLELIC_INDEL;MQ=116.70;MQ0=0;MQ0Fraction=0.0000;MQRankSum=8.022;NF;NR;NS=1064;PP;QD=0.35;RA=5690;RUN=1;ReadPosRankSum=-14.522;SB=-311.57;SC=AGCCATTGGCTGTTTCACTGA;SRB=0.40738;SRF=2318;SRP=426.97;SRR=3372;TC;TR=1;TU=G;VQSLOD=-2.3042;set=filterInVQSR-2of5 +20 53729115 . T TG 15.48 PASS AC=1;AF=0.0015;AN=668;BaseQRankSum=-1.001;DP=1711;FS=9.048;HRun=2;HaplotypeScore=12.4681;InbreedingCoeff=-0.0320;IndelType=INS.NumRepetitions_2.EventLength_1.RepeatExpansion_G.;MQ=131.36;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.193;QD=4.57;ReadPosRankSum=0.407;SB=-5.35;SET_INTEGRATION;SET_WGVQSR;VQSLOD=4.8071;set=VQSR +20 54033830 . GTATTTTAAAATCA G 2220.86 PASS AF=0.0113;BaseQRankSum=5.506;DP=2577;Dels=0.01;FR;FS=6.533;HP=5;HPLen=4;HR=1;HRun=0;HU=T;InbreedingCoeff=0.0032;IndelType=DEL.NumRepetitions_1.EventLength_10orMore.;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-2.969;NF;NR;PP;ReadPosRankSum=1.322;SC=TCAATATTTTGTATTTTAAAA;SET_INTEGRATION;SET_WGVQSR;TC;TR=1;TU=T;VQSLOD=5.5145;set=Intersection;sumGLbyD=95.65 +20 54375236 . GT G 626.13 PASS AA=40;AB=0.63551;ABA=39;ABP=20.078;ABR=68;AC=18;AF=0.0256;AN=702;BL=1331;BR=1743;BVAR;BaseQRankSum=9.346;DEL;DP=8568;Dels=0.02;EL=26;EPP=10.828;ER=14;FS=0.610;HETAR=21;HOMA=1;HOMR=1035;HRun=1;InbreedingCoeff=-0.0056;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.13403;LRBP=122.92;MQ0=0;MQ0Fraction=0.0000;MQM=67.125;MQRankSum=-2.537;NS=1058;RA=4870;RL=17;RPP=4.9646;RR=23;RUN=1;ReadPosRankSum=-1.229;SAB=0.525;SAF=21;SAP=3.2274;SAR=19;SET_INTEGRATION;SET_WGVQSR;SRB=0.5271;SRF=2567;SRP=34.087;SRR=2303;VQSLOD=7.9228;set=Intersection;sumGLbyD=10.77 +20 54457331 . G GA 1793.40 PASS AA=77;AB=0.66667;ABA=74;ABP=56.573;ABR=148;AC=33;AF=0.02687;AN=1228;BL=3834;BR=1154;BVAR;BaseQRankSum=10.572;DP=10230;Dels=0.00;EL=77;EPP=170.21;ER=0;FS=139.433;HETAR=44;HOMA=1;HOMR=1001;HRun=1;INS;InbreedingCoeff=0.0023;IndelType=INS.NOVEL_1.Novel_A.;LEN=1;LRB=0.53729;LRBP=3129.8;MQ0Fraction=0.0095;MQM=4.7013;MQRankSum=-8.116;NS=1046;RA=4009;RL=77;RPP=170.21;RR=0;RUN=1;ReadPosRankSum=-6.026;SAB=1;SAF=77;SAP=170.21;SAR=0;SRB=0.57022;SRF=2286;SRP=174.7;SRR=1723;VQSLOD=1.1887;set=filterInVQSR-2of5;sumGLbyD=5.90 +20 54469810 . CA C 1697.62 PASS AA=93;AB=0.63855;ABA=90;ABP=44.53;ABR=159;AC=34;AF=0.0374;AF1=0.01719;AN=908;BL=3242;BR=5839;BVAR;BaseQRankSum=10.425;CI95=0.009317,0.02795;DEL;DP=15197;DP4=2134,1896,56,46;Dels=0.03;EL=34;EPP=17.604;ER=59;FQ=16;FR;FS=9.985;HETAR=41;HOMA=1;HOMR=1011;HP=9;HPLen=8;HR=8;HRun=8;HU=A;INDEL;InbreedingCoeff=-0.0472;IndelType=DEL.NumRepetitions_8.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.28598;LRBP=1615.8;MQ=83.37;MQ0=1;MQ0Fraction=0.0004;MQM=64.075;MQRankSum=3.036;NF;NR;NS=1053;PP;PV4=0.76,1,0.31,0.22;RA=5150;RL=28;RPP=34.975;RR=65;RUN=1;ReadPosRankSum=-0.252;SAB=0.5914;SAF=55;SAP=9.7582;SAR=38;SC=ATTGCTAAGACAAAAAAAAGA;SET_INTEGRATION;SET_WGVQSR;SRB=0.50621;SRF=2607;SRP=4.7374;SRR=2543;TC;TR=8;TU=A;VQSLOD=8.3677;set=Intersection;sumGLbyD=9.90 +20 54542453 . GTATA G,GTA 5109.66 PASS ABR=112;AC=66,56;AF=0.0682,0.0579;AN=968;BVAR;BaseQRankSum=17.089;DB;DEL;DP=5519;DS;Dels=0.06;FS=99.502;HOMA=15;HOMR=409;HRun=0;InbreedingCoeff=0.1584;IndelType=MULTIALLELIC_INDEL;MQ0Fraction=0.0178;MQRankSum=-6.854;NS=460;RA=864;RUN=1;ReadPosRankSum=0.855;SRB=0.79282;SRF=685;SRP=646.5;SRR=179;VQSLOD=0.6375;set=filterInVQSR-2of5;sumGLbyD=8.53 +20 54629773 . CA C 1799.50 PASS AA=49;AB=0.82707;ABA=46;ABP=250.17;ABR=220;AC=9;AF=0.00746;AN=1206;BL=173;BR=2277;BVAR;BaseQRankSum=5.240;DEL;DP=8557;Dels=0.01;EL=49;EPP=109.41;ER=0;FS=32.359;HETAR=35;HOMA=1;HOMR=325;HRun=1;InbreedingCoeff=0.0892;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_A.;LEN=1;LRB=0.85878;LRBP=3926.6;MQ0Fraction=0.0602;MQM=32.163;MQRankSum=-3.926;NS=361;RA=1091;RL=0;RPP=109.41;RR=49;RUN=1;ReadPosRankSum=-4.512;SAB=0;SAF=0;SAP=109.41;SAR=49;SRB=0.49404;SRF=539;SRP=3.3467;SRR=552;VQSLOD=1.1233;set=filterInVQSR-2of5;sumGLbyD=3.54 +20 54710245 . TA T 999 PASS AF=0.0084;AF1=0.0148;BaseQRankSum=3.954;CI95=0.00885,0.02212;DP=8043;DP4=2000,1849,10,7;Dels=0.01;FQ=999;FR;FS=0.000;HP=9;HPLen=6;HR=3;HRun=6;HU=A;INDEL;InbreedingCoeff=0.1181;IndelType=DEL.NumRepetitions_3.EventLength_1.RepeatExpansion_A.;MQ=78.51;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.095;NF;NR;PP;PV4=0.63,0.00056,1,1;ReadPosRankSum=-0.448;SC=CAACAAAAAATAAATAAATAA;SET_INTEGRATION;SET_WGVQSR;TC;TR=15;TU=AAAT;VQSLOD=7.8129;set=Intersection;sumGLbyD=19.02 +20 54968173 . A AAT,AATAT,AT,ATAT 89535.82 PASS ABR=994;AC=561,278,2,3;AF=0.50179,0.24866,0.00179,0.00268;AN=1118;BVAR;BaseQRankSum=-2.699;DB;DP=27837;DP4=168,177,1045,866;Dels=0.00;FQ=999;FR;FS=12.472;HOMA=71;HOMR=455;HP=3;HPLen=4;HR=4;HRun=0;HU=A;INDEL;INS;InbreedingCoeff=0.6391;IndelType=MULTIALLELIC_INDEL;KGPilot123;MQ=80.36;MQ0Fraction=0.0055;MQRankSum=-1.512;NF;NR;NS=913;PP;PV4=0.046,1,1,1;RA=2015;RUN=1;ReadPosRankSum=1.015;SC=GGCCACTTAAAATATATATAT;SET_WGVQSR;SRB=0.44864;SRF=904;SRP=49.187;SRR=1111;TC;TR=15;TU=AT;VQSLOD=9.0092;dbSNP=132;set=Intersection;sumGLbyD=42.33 +20 55176688 . TA T 421.84 PASS AF=0.01322;AF1=0.01845;BaseQRankSum=5.383;CI95=0.01282,0.02564;DP=10531;DP4=1975,2017,16,14;Dels=0.01;FQ=91.2;FR;FS=7.401;HP=6;HPLen=5;HR=5;HRun=5;HU=A;INDEL;InbreedingCoeff=0.0829;IndelType=DEL.NumRepetitions_5.EventLength_1.RepeatExpansion_A.;MQ=75.80;MQ0=1;MQ0Fraction=0.0003;MQRankSum=-0.471;NF;NR;PP;PV4=0.72,1,1,1;ReadPosRankSum=0.223;SC=CTGCAAAATATAAAAATTAGG;SET_INTEGRATION;SET_WGVQSR;TC;TR=5;TU=A;VQSLOD=6.6000;set=Intersection;sumGLbyD=12.15 +20 55664086 . GTT ATT,G,GT,GTTT 5622.44 PASS AC=6,71,136;AF=0.00498,0.05887,0.11277;AN=1206;BVAR;BaseQRankSum=3.173;DB;DEL;DP=40384;DP4=1567,1317,54,29;Dels=0.05;FR;FS=1.949;HP=14;HR=11;HRun=11;HU=T;INDEL;INS;InbreedingCoeff=0.3490;IndelType=MIXED;MQ=77.90;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.052;NF;NR;PP;PV4=0.057,1,0.2,1.2e-05;RUN=1;ReadPosRankSum=-13.646;SC=AATTTTATTTGTTTTTTTTTT;SET_INTEGRATION;SET_WGVQSR;TC;TR=11;TU=T;VQSLOD=11.7964;set=Intersection;sumGLbyD=8.09 +20 56045006 . TG T 342.15 PASS AC=72;AF=0.0940;AN=766;BaseQRankSum=4.992;DP=1238;FS=1.460;HRun=7;HaplotypeScore=20.2784;InbreedingCoeff=0.1795;IndelType=DEL.NumRepetitions_7.EventLength_1.RepeatExpansion_G.;MQ=66.42;MQ0=1;MQ0Fraction=0.0008;MQRankSum=-0.937;QD=1.84;ReadPosRankSum=-4.385;SB=-320.83;VQSLOD=5.2383;set=VQSR +20 56158711 . AG A 922.47 PASS AA=18;AB=0.575;ABA=17;ABP=4.9646;ABR=23;AC=2;AF=0.0028;AN=714;BL=953;BR=808;BVAR;BaseQRankSum=3.129;DEL;DP=10462;Dels=0.01;EL=9;EPP=3.0103;ER=9;FR;FS=8.724;HETAR=4;HOMA=0;HOMR=1058;HP=1;HPLen=2;HR=2;HRun=1;HU=A;InbreedingCoeff=0.0262;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_G.;LEN=1;LRB=0.08234;LRBP=28.936;MQ0=0;MQ0Fraction=0.0000;MQM=55.889;MQRankSum=2.052;NF;NR;NS=1062;PP;RA=6300;RL=9;RPP=3.0103;RR=9;RUN=1;ReadPosRankSum=-0.317;SAB=0.66667;SAF=12;SAP=7.3532;SAR=6;SC=TGGCCTAGCAAGCATCGTGAC;SET_INTEGRATION;SET_WGVQSR;SRB=0.48143;SRF=3033;SRP=21.883;SRR=3267;TC;TR=8;TU=AAGC;VQSLOD=8.3252;set=Intersection;sumGLbyD=13.22 +20 56258618 rs113670927 T C,TGC,TGTGC,TGTGTGC 37834.99 PASS ABR=441;AC=11,100,43;AF=0.0123,0.1119,0.0481;AN=894;BVAR;BaseQRankSum=19.514;DB;DP=23173;DP4=541,920,413,579;Dels=0.00;FQ=999;FR;FS=1.238;HOMA=28;HOMR=808;HP=2;HPLen=1;HR=1;HRun=0;HU=G;INDEL;INS;InbreedingCoeff=0.2154;IndelType=MIXED;MQ=57.25;MQ0Fraction=0.0275;MQRankSum=-6.684;NF;NR;NS=976;PP;PV4=0.023,1,1,1;RA=3294;RUN=1;ReadPosRankSum=11.873;SC=TGCGTGTGTGTGTGTGTGTGT;SRB=0.42441;SRF=1398;SRP=166.5;SRR=1896;TC;TR=30;TU=GT;VQSLOD=6.7457;dbSNP=114;set=Intersection;sumGLbyD=21.27 +20 56395857 . T TAGGCAG 6614.22 PASS AA=30;AB=0.63415;ABA=30;ABP=15.827;ABR=52;AC=14;AF=0.0197;AF1=0.03154;AN=710;BL=991;BR=1813;BVAR;BaseQRankSum=-4.589;CI95=0.02434,0.04204;DP=13879;DP4=1543,1833,12,14;Dels=0.00;EL=14;EPP=3.2998;ER=16;FQ=999;FR;FS=1.482;HETAR=11;HOMA=0;HOMR=1051;HP=1;HPLen=2;HR=2;HRun=0;HU=T;INDEL;INS;InbreedingCoeff=0.0774;IndelType=INS.NumRepetitions_2.EventLength_6.;LEN=6;LRB=0.29315;LRBP=526.27;MQ=90.42;MQ0=0;MQ0Fraction=0.0000;MQM=39.433;MQRankSum=-7.011;NF;NR;NS=1062;PP;PV4=1,1,3.7e-09,1;RA=5322;RL=9;RPP=13.433;RR=21;RUN=1;ReadPosRankSum=0.679;SAB=0.43333;SAF=13;SAP=4.1684;SAR=17;SC=AAGAGCATCTTAGGCAGAGGC;SET_INTEGRATION;SET_WGVQSR;SRB=0.47294;SRF=2517;SRP=36.853;SRR=2805;TC;TR=2;TU=T;VQSLOD=8.3045;set=Intersection;sumGLbyD=68.22 +20 56969289 . GTTTGT G 600.69 PASS AF=0.0056;AF1=0.007726;BaseQRankSum=2.907;CI95=0.004425,0.01327;DP=9643;DP4=1892,1749,6,3;Dels=0.00;FQ=117;FR;FS=16.601;HP=5;HPLen=3;HR=3;HRun=0;HU=T;INDEL;InbreedingCoeff=0.0236;IndelType=DEL.NumRepetitions_3.EventLength_5.;MQ=92.59;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-2.134;NF;NR;PP;PV4=0.51,1,0.07,0.3;ReadPosRankSum=0.236;SC=TAAGGACGTTGTTTGTTTTGT;SET_INTEGRATION;SET_WGVQSR;TC;TR=10;TU=GTTT;VQSLOD=5.8458;set=Intersection;sumGLbyD=39.51 +20 57187557 . AG A,AGG 1486.69 PASS AA=130;AB=0.55446;ABA=90;ABP=8.2132;ABR=112;AC=56,26;AF=0.0574,0.0266;AN=976;BL=3817;BR=5968;BVAR;BaseQRankSum=5.517;DEL;DP=14174;DP4=925,721,59,48;Dels=0.05;EL=52;EPP=14.302;ER=78;FR;FS=0.917;HETAR=44;HOMA=17;HOMR=864;HP=4;HPLen=4;HR=4;HRun=4;HU=G;INDEL;InbreedingCoeff=0.2856;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.21983;LRBP=1029.8;MQ=91.56;MQ0=0;MQ0Fraction=0.0000;MQM=63.631;MQRankSum=1.900;NF;NR;NS=925;PP;PV4=0.84,1,1,0.39;RA=2746;RL=44;RPP=32.476;RR=86;RUN=1;ReadPosRankSum=-0.639;SAB=0.44615;SAF=58;SAP=6.2842;SAR=72;SC=TCAGGCCCGCAGGGGTCAGGG;SET_INTEGRATION;SET_WGVQSR;SRB=0.5772;SRF=1585;SRP=145.17;SRR=1161;TC;TR=4;TU=G;VQSLOD=7.7167;set=Intersection;sumGLbyD=14.85 +20 57282771 . T TG 506.43 PASS AA=34;AB=0.70312;ABA=19;ABP=25.946;ABR=45;AC=34;AF=0.0373;AN=912;BL=886;BR=1938;BVAR;BaseQRankSum=3.744;DP=4276;Dels=0.00;EL=18;EPP=3.2658;ER=16;FR;FS=0.639;HETAR=17;HOMA=9;HOMR=737;HP=9;HR=8;HRun=8;HU=G;INS;InbreedingCoeff=0.2149;IndelType=INS.NumRepetitions_8.EventLength_1.RepeatExpansion_G.;LEN=1;LRB=0.37252;LRBP=853.99;MQ0=0;MQ0Fraction=0.0000;MQM=49.706;MQRankSum=-0.051;NF;NR;NS=763;PP;RA=1822;RL=9;RPP=19.36;RR=25;RUN=1;ReadPosRankSum=-2.111;SAB=0.55882;SAF=19;SAP=4.0322;SAR=15;SC=TCGGGGGGCGTGGGGGGGGTG;SET_INTEGRATION;SET_WGVQSR;SRB=0.51098;SRF=931;SRP=4.9172;SRR=891;TC;TR=8;TU=G;VQSLOD=5.7772;set=Intersection;sumGLbyD=7.95 +20 57419740 rs11481507 A AT 82613.57 PASS AA=3850;AB=0.41404;ABA=1786;ABP=198.63;ABR=1262;AC=919;AF=0.75328;AN=1220;BL=140665;BR=151383;BVAR;BaseQRankSum=-27.490;DB;DP=31794;DP4=588,585,1571,1721;Dels=0.00;EL=1924;EPP=3.0126;ER=1926;FQ=999;FR;FS=2.191;HETAR=482;HOMA=454;HOMR=135;HP=3;HPLen=3;HR=3;HRun=3;HU=T;INDEL;INS;InbreedingCoeff=0.0861;IndelType=INS.NumRepetitions_3.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.036699;LRBP=857.15;MQ=123.92;MQ0=0;MQ0Fraction=0.0000;MQM=91.654;MQRankSum=3.016;NF;NR;NS=1071;PP;PV4=0.16,1,0.12,1;RA=1850;RL=1874;RPP=8.8784;RR=1976;RUN=1;ReadPosRankSum=-0.685;SAB=0.47636;SAF=1834;SAP=21.693;SAR=2016;SC=TACACTAGTGATTTAACCCTA;SET_INTEGRATION;SET_WGVQSR;SRB=0.49027;SRF=907;SRP=4.5315;SRR=943;TC;TR=3;TU=T;VQSLOD=9.2768;dbSNP=126;set=Intersection;sumGLbyD=22.78 +20 57558194 . CT C,CTT,CTTT 6470.30 PASS ABR=451;AC=104,161,177;AF=0.08919,0.13808,0.15180;BVAR;BaseQRankSum=1.172;DP=7985;FR;FS=2.202;HOMA=19;HOMR=778;HP=22;HR=15;HU=T;HaplotypeScore=16.1921;INS;InbreedingCoeff=0.6440;IndelType=MULTIALLELIC_INDEL;MQ=69.24;MQ0=27;MQ0Fraction=0.0109;MQRankSum=-0.003;NF;NR;NS=943;PP;QD=2.22;RA=2531;RUN=1;ReadPosRankSum=-0.104;SB=-2096.85;SC=GCCTTTTTTTCTTTTTTTTTT;SET_WGVQSR;SRB=0.34848;SRF=882;SRP=507.73;SRR=1649;TC;TR=15;TU=T;VQSLOD=6.5151;set=Intersection +20 57693627 . AG A 1991.90 PASS AA=52;AB=0.49462;ABA=47;ABP=3.0336;ABR=46;AC=15;AF=0.01227;AN=1222;BL=1902;BR=1478;BVAR;BaseQRankSum=-6.121;DEL;DP=26459;DP4=2647,2873,16,20;Dels=0.01;EL=25;EPP=3.1773;ER=27;FR;FS=3.135;HETAR=15;HOMA=1;HOMR=1064;HP=2;HPLen=3;HR=3;HRun=2;HU=A;INDEL;InbreedingCoeff=0.0866;IndelType=DEL.NumRepetitions_2.EventLength_1.RepeatExpansion_G.;LEN=1;LRB=0.12544;LRBP=118.51;MQ=116.26;MQ0=0;MQ0Fraction=0.0000;MQM=114.65;MQRankSum=1.942;NF;NR;NS=1080;PP;PV4=0.74,6.9e-08,1,0.38;RA=6781;RL=33;RPP=11.195;RR=19;RUN=1;ReadPosRankSum=-1.795;SAB=0.5;SAF=26;SAP=3.0103;SAR=26;SC=ATTGGAGGAAAGGCTTTTTCA;SET_INTEGRATION;SET_WGVQSR;SRB=0.46247;SRF=3136;SRP=85.976;SRR=3645;TC;TR=3;TU=A;VQSLOD=8.6672;set=Intersection;sumGLbyD=13.55 +20 57716287 . A AT 66.47 PASS AC=6;AF=0.00506;AN=1186;BaseQRankSum=1.369;DP=2744;FS=3.834;HRun=8;HaplotypeScore=11.2046;InbreedingCoeff=0.1196;IndelType=INS.NumRepetitions_8.EventLength_1.RepeatExpansion_T.;MQ=73.00;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-0.086;QD=2.14;ReadPosRankSum=-2.588;SB=-53.80;SET_INTEGRATION;SET_WGVQSR;VQSLOD=4.2080;set=VQSR +20 58121928 rs73625057 T TGG 6649.17 PASS AA=132;AB=0.57854;ABA=110;ABP=16.996;ABR=151;AC=57;AF=0.0617;AN=924;BL=4530;BR=4790;BVAR;BaseQRankSum=-13.456;DB;DP=30353;DP4=2107,2168,61,66;Dels=0.00;EL=67;EPP=3.0761;ER=65;FR;FS=0.708;HETAR=46;HOMA=8;HOMR=1023;HP=3;HPLen=2;HR=2;HRun=2;HU=G;INDEL;INS;InbreedingCoeff=0.1241;IndelType=INS.NumRepetitions_2.EventLength_1.RepeatExpansion_G.;LEN=2;LRB=0.027897;LRBP=18.76;MQ=109.61;MQ0=1;MQ0Fraction=0.0004;MQM=79.833;MQRankSum=-0.699;NF;NR;NS=1077;PP;PV4=0.79,1,0.49,0.036;RA=5754;RL=61;RPP=4.6554;RR=71;RUN=1;ReadPosRankSum=-3.309;SAB=0.45455;SAF=60;SAP=5.3792;SAR=72;SC=GATTAGAATGTGGATATCTTT;SET_INTEGRATION;SET_WGVQSR;SRB=0.48836;SRF=2810;SRP=9.7866;SRR=2944;TC;TR=4;TU=GT;VQSLOD=8.5770;set=Intersection;sumGLbyD=27.19 +20 58468826 . ACAAG A 999 PASS AF=0.0014;AF1=0.003429;BaseQRankSum=4.082;CI95=0.003106,0.006211;DP=8461;DP4=2500,1817,8,2;Dels=0.01;FQ=999;FR;FS=5.034;HP=2;HPLen=1;HR=1;HRun=0;HU=C;INDEL;InbreedingCoeff=-0.0183;IndelType=DEL.NumRepetitions_1.EventLength_4.;MQ=120.69;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.141;NF;NR;PP;PV4=0.21,1,0.054,1;ReadPosRankSum=2.096;SC=ATCCTGAAACACAAGAAGAAA;SET_INTEGRATION;SET_WGVQSR;TC;TR=5;TU=AC;VQSLOD=7.4928;set=Intersection;sumGLbyD=29.17 +20 58731262 . TC T 999 PASS AA=21;AB=0.48649;ABA=19;ABP=3.069;ABR=18;AC=7;AF=0.0101;AF1=0.01493;AN=694;BL=939;BR=848;BVAR;BaseQRankSum=4.205;CI95=0.01106,0.02212;DEL;DP=12598;DP4=1766,1428,11,15;Dels=0.01;EL=13;EPP=5.5954;ER=8;FQ=999;FR;FS=1.796;HETAR=8;HOMA=1;HOMR=1031;HP=7;HPLen=8;HR=8;HRun=2;HU=T;INDEL;InbreedingCoeff=-0.0030;IndelType=DEL.NumRepetitions_2.EventLength_1.RepeatExpansion_C.;LEN=1;LRB=0.050923;LRBP=13.073;MQ=124.57;MQ0=0;MQ0Fraction=0.0000;MQM=67.905;MQRankSum=1.103;NF;NR;NS=1040;PP;PV4=0.23,1,1,1;RA=4884;RL=10;RPP=3.1137;RR=11;RUN=1;ReadPosRankSum=-0.091;SAB=0.47619;SAF=10;SAP=3.1137;SAR=11;SC=TCATTTTTTTTCCTTGAAACT;SET_INTEGRATION;SET_WGVQSR;SRB=0.58006;SRF=2833;SRP=274.9;SRR=2051;TC;TR=8;TU=T;VQSLOD=10.8783;set=Intersection;sumGLbyD=15.11 +20 59181229 rs11476579 CTT C,CT,CTTT,CTTTT 7787.17 PASS AC=19,195,104,91;AF=0.01599,0.16414,0.08754,0.07660;AF1=0.2124;AN=1188;BVAR;BaseQRankSum=6.347;CI95=0.146,0.2743;DB;DEL;DP=26140;DP4=932,880,352,375;Dels=0.13;FQ=85.6;FR;FS=11.914;HP=14;HR=14;HRun=14;HU=T;INDEL;INS;InbreedingCoeff=0.4183;IndelType=MULTIALLELIC_INDEL;MQ=86.88;MQ0=0;MQ0Fraction=0.0000;MQRankSum=1.469;NF;NR;PP;PV4=0.17,1,1,1;RUN=1;ReadPosRankSum=-1.055;SC=GGTGAGAAAGCTTTTTTTTTT;SET_WGVQSR;TC;TR=14;TU=T;VQSLOD=7.4340;dbSNP=120;set=Intersection;sumGLbyD=7.02 +20 59213979 rs112141381 G GC 9068 PASS AA=131;AB=0.47115;ABA=110;ABP=4.5136;ABR=98;AF=0.0586;AN=700;BL=5395;BR=5816;BVAR;BaseQRankSum=15.453;DB;DP=23381;DP4=2191,2184,71,49;Dels=0.00;EL=66;EPP=3.0269;ER=65;FR;FS=7.907;HETAR=35;HOMA=5;HOMR=1019;HP=2;HPLen=3;HR=3;HRun=0;HU=G;INDEL;INS;InbreedingCoeff=0.0283;IndelType=INS.NOVEL_1.Novel_C.;LEN=1;LRB=0.037552;LRBP=37.34;MQ=72.13;MQ0=0;MQ0Fraction=0.0000;MQM=54.496;MQRankSum=0.897;NF;NR;NS=1059;PP;PV4=0.052,1,0.066,1;RA=4976;RL=59;RPP=5.8117;RR=72;RUN=1;ReadPosRankSum=-0.811;SAB=0.58015;SAF=76;SAP=10.32;SAR=55;SC=GATGGACTGGGACAGTGACTC;SET_INTEGRATION;SET_WGVQSR;SRB=0.49457;SRF=2461;SRP=4.2828;SRR=2515;TC;TR=3;TU=G;VQSLOD=9.3917;set=Intersection;sumGLbyD=28.58 +20 59252945 . CT C,CTT 557.18 PASS AA=24;AB=0.84868;ABA=23;ABP=163.53;ABR=129;AC=21,29;AF=0.01759,0.02429;BL=1217;BR=1336;BVAR;BaseQRankSum=5.135;DP=9970;Dels=0.01;EL=13;EPP=3.3722;ER=11;FS=2.302;HETAR=21;HOMA=1;HOMR=1012;HRun=9;INS;InbreedingCoeff=0.1549;IndelType=MULTIALLELIC_INDEL;LEN=1;LRB=0.046612;LRBP=15.055;MQ0=0;MQ0Fraction=0.0000;MQM=67.208;MQRankSum=0.086;NS=1034;RA=4421;RL=11;RPP=3.3722;RR=13;RUN=1;ReadPosRankSum=-1.826;SAB=0.41667;SAF=10;SAP=4.4579;SAR=14;SET_WGVQSR;SRB=0.49649;SRF=2195;SRP=3.4823;SRR=2226;VQSLOD=2.8923;set=filterInVQSR-2of5;sumGLbyD=5.47 +20 60016966 . CT C 42650 PASS AA=37;AB=0.97834;ABA=31;ABP=2847;ABR=1400;AC=15;AF=0.0163;AN=920;BL=2596;BR=778;BVAR;BaseQRankSum=-0.632;DEL;DP=10967;Dels=0.00;EL=14;EPP=7.7641;ER=23;FS=4.094;HETAR=421;HOMA=256;HOMR=385;HRun=1;InbreedingCoeff=-0.0051;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_T.;LEN=1;LRB=0.53883;LRBP=2130.2;MQ0=0;MQ0Fraction=0.0000;MQM=120.3;MQRankSum=-0.911;NS=1072;RA=3413;RL=31;RPP=39.691;RR=6;RUN=1;ReadPosRankSum=-12.062;SAB=0.48649;SAF=18;SAP=3.069;SAR=19;SRB=0.47407;SRF=1618;SRP=22.943;SRR=1795;VQSLOD=3.3758;set=filterInVQSR-2of5;sumGLbyD=3.27 +20 60188651 . AG A 17624.52 PASS AA=462;AB=0.76548;ABA=409;ABP=1070.7;ABR=1335;AC=403;AF=0.34444;AN=1170;BL=13877;BR=25909;BVAR;BaseQRankSum=6.180;DEL;DP=9900;Dels=0.08;EL=353;EPP=282.84;ER=109;FR;FS=2699.057;HETAR=346;HOMA=26;HOMR=633;HP=3;HR=4;HRun=1;HU=A;InbreedingCoeff=-0.2900;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_G.;LEN=1;LRB=0.30242;LRBP=7904.3;MQ0Fraction=0.0004;MQM=56.119;MQRankSum=1.644;NF;NR;NS=1005;PP;RA=3521;RL=112;RPP=269.25;RR=350;RUN=1;ReadPosRankSum=2.490;SAB=0.0064935;SAF=3;SAP=980.34;SAR=459;SC=AGGCTTCAAAAGAAAAAAAAA;SRB=0.55978;SRF=1971;SRP=112.32;SRR=1550;TC;TR=4;TU=A;VQSLOD=-34.0667;set=filterInVQSR-2of5;sumGLbyD=7.81 +20 60195570 . GTACATACATACA ATACATACATACA,G,GTACATACA 20140 PASS ABR=102;AC=105,2;AF=0.08794,0.00168;AN=1194;BVAR;BaseQRankSum=-28.899;DB;DEL;DP=14347;Dels=0.02;FR;FS=52.125;HOMA=1;HOMR=1006;HP=1;HPLen=1;HR=1;HRun=0;HU=T;InbreedingCoeff=0.0695;IndelType=MIXED;MQ0Fraction=0.0007;MQRankSum=1.957;NF;NR;NS=1035;PP;RA=4759;RUN=1;ReadPosRankSum=-22.252;SAB=0.5;SAP=3.0103;SC=TGATAGATTCGTACATACATA;SET_INTEGRATION;SRB=0.47615;SRF=2266;SRP=26.522;SRR=2493;TC;TR=21;TU=ACAT;VQSLOD=2.7673;set=filterInVQSR-2of5;sumGLbyD=19.14 +20 60670601 rs72127450 AT A,ATT 6401.59 PASS AC=177,79;AF=0.16239,0.07248;AF1=0.1602;AN=1090;BVAR;BaseQRankSum=8.618;CI95=0.1106,0.2058;DB;DEL;DP=17508;DP4=1285,1094,313,259;Dels=0.10;FQ=94.1;FR;FS=0.000;HP=12;HR=12;HRun=12;HU=T;INDEL;INS;InbreedingCoeff=0.1076;IndelType=MULTIALLELIC_INDEL;LEN=1;MQ=64.73;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.620;NF;NR;PP;PV4=0.78,1,0.012,1;RUN=1;ReadPosRankSum=-1.294;SC=AGCCAGGCACATTTTTTTTTT;SET_WGVQSR;TC;TR=12;TU=T;VQSLOD=6.1650;dbSNP=130;set=Intersection;sumGLbyD=5.80 +20 60685780 . TC T 1123.58 PASS AC=79;AF=0.07655;AN=1032;BaseQRankSum=14.949;DP=2084;FS=23.521;HRun=1;HaplotypeScore=19.7117;InbreedingCoeff=0.1356;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;MQ=53.57;MQ0=61;MQ0Fraction=0.0293;MQRankSum=-7.958;QD=4.35;ReadPosRankSum=-13.757;SB=-791.28;VQSLOD=6.3549;set=VQSR +20 60744906 rs113528167 CG C 422.53 PASS AC=48;AF=0.0732;AN=656;BaseQRankSum=17.669;DB;DP=1189;FS=0.356;HRun=1;HaplotypeScore=15.1808;InbreedingCoeff=0.2111;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_G.;MQ=82.83;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-10.455;QD=2.71;ReadPosRankSum=-16.887;SB=-326.46;VQSLOD=7.1707;set=VQSR +20 60848742 . CGT C,CGTGT 999 PASS AF=0.00980,0.01225;BaseQRankSum=5.597;DP=17065;DP4=1928,2188,17,13;Dels=0.01;FR;HP=1;HPLen=2;HR=2;HRun=0;HU=C;INDEL;InbreedingCoeff=0.2094;IndelType=MULTIALLELIC_INDEL;MQ=115.78;MQ0=0;MQ0Fraction=0.0000;MQRankSum=0.281;NF;NR;PP;PV4=0.36,0.4,0.12,0.12;ReadPosRankSum=-1.465;SB=-157.35;SC=TAGACGCTTCCGTGTGTGTGT;SET_INTEGRATION;SET_WGVQSR;TC;TR=11;TU=GT;VQSLOD=1.7100;set=filterInVQSR-2of5;sumGLbyD=16.39 +20 61023668 rs57452309 G GAGC 6896.67 PASS AC=115;AF=0.1445;AN=796;BaseQRankSum=12.146;DB;DP=1423;FS=5.070;HRun=0;HaplotypeScore=29.8897;InbreedingCoeff=0.0740;IndelType=INS.NOVEL_3.;MQ=77.02;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-9.005;QD=19.16;ReadPosRankSum=-17.440;SB=-3045.82;VQSLOD=4.5788;set=VQSR +20 61180519 . C CA,CT 1774.30 PASS ABR=135;AC=27,15;AF=0.02538,0.01410;BVAR;BaseQRankSum=-2.189;DP=8393;FR;FS=27.692;HOMA=2;HOMR=825;HP=6;HPLen=3;HR=3;HU=T;HaplotypeScore=19.5313;INS;InbreedingCoeff=0.0868;IndelType=MULTIALLELIC_INDEL;LEN=1;MQ=56.11;MQ0=172;MQ0Fraction=0.0667;MQRankSum=2.605;NF;NR;NS=854;PP;QD=1.99;RA=2868;RUN=1;ReadPosRankSum=-7.324;SB=-385.54;SC=TTCTTTCTTTCTTTCTTTCTT;SRB=0.32741;SRF=939;SRP=745.08;SRR=1929;TC;TR=69;TU=CTTT;VQSLOD=3.4398;set=filterInVQSR-2of5 +20 61184281 . AC A 9798.10 PASS AA=24;AB=0.96507;ABA=16;ABP=863.43;ABR=442;AC=4;AF=0.00341;AN=1174;BL=349;BR=1039;BVAR;BaseQRankSum=2.048;DEL;DP=10073;Dels=0.00;EL=11;EPP=3.3722;ER=13;FS=2.097;HETAR=141;HOMA=69;HOMR=829;HRun=1;InbreedingCoeff=0.0697;IndelType=DEL.NumRepetitions_1.EventLength_1.RepeatExpansion_C.;LEN=1;LRB=0.49712;LRBP=747.85;MQ0=0;MQ0Fraction=0.0000;MQM=98.042;MQRankSum=1.881;NS=1042;RA=3625;RL=5;RPP=20.744;RR=19;RUN=1;ReadPosRankSum=-8.009;SAB=0.75;SAF=18;SAP=16.039;SAR=6;SRB=0.52662;SRF=1909;SRP=25.323;SRR=1716;VQSLOD=1.8117;set=filterInVQSR-2of5;sumGLbyD=5.55 +20 62074219 . C CTAT,CTGT 2328 PASS ABR=99;AC=20,6;AF=0.01754,0.00526;BVAR;BaseQRankSum=11.221;DP=9498;DS;FS=4.510;HOMA=15;HOMR=645;HaplotypeScore=82.8868;INS;InbreedingCoeff=0.0880;IndelType=MULTIALLELIC_INDEL;LEN=3;MQ=29.88;MQ0=1378;MQ0Fraction=0.2286;MQRankSum=-5.309;NS=689;QD=0.77;RA=1679;RUN=1;ReadPosRankSum=-3.510;SAR=1;SB=-93.21;SRB=0.70697;SRF=1187;SRP=627.71;SRR=492;VQSLOD=1.8325;set=filterInVQSR-2of5 +20 62304449 . CA C,CAA 6680.17 PASS AC=141,69;AF=0.12567,0.06150;AF1=0.08178;AN=1122;BVAR;BaseQRankSum=9.754;CI95=0.05088,0.1128;DEL;DP=15867;DP4=1252,1289,232,208;Dels=0.10;FQ=52.6;FR;FS=6.576;HP=11;HR=11;HRun=11;HU=A;INDEL;INS;InbreedingCoeff=0.1950;IndelType=MULTIALLELIC_INDEL;LEN=1;MQ=60.48;MQ0Fraction=0.0004;MQRankSum=-0.049;NF;NR;PP;PV4=0.2,1,1,1;RUN=1;ReadPosRankSum=-2.137;SC=GATTCTGTGTCAAAAAAAAAA;SET_WGVQSR;TC;TR=11;TU=A;VQSLOD=7.4714;set=Intersection;sumGLbyD=8.36 +20 62804895 rs57769591 CCTT C 1148 PASS AC=8;AF=0.0085;AF1=0.002839;AN=938;BaseQRankSum=4.952;CI95=0.002212,0.006637;DB;DP=8889;DP4=2574,1668,4,8;FQ=12.3;FS=2.289;HPLen=3;HRun=0;HaplotypeScore=29.4184;INDEL;InbreedingCoeff=-0.0270;IndelType=DEL.NumRepetitions_1.EventLength_3.;MQ0=876;MQ0Fraction=0.2674;MQRankSum=-0.641;PV4=0.074,1,1,1;QD=1.03;ReadPosRankSum=0.118;SB=-65.30;SET_INTEGRATION;SET_WGVQSR;VQSLOD=6.4881;dbSNP=126;set=Intersection +20 62907688 . AAT A 6629.57 PASS AC=164;AF=0.13735;AN=1194;BaseQRankSum=27.368;DP=2746;FS=5.985;HRun=0;HaplotypeScore=14.7748;InbreedingCoeff=0.1433;IndelType=DEL.NumRepetitions_2.EventLength_2.RepeatExpansion_AT.;MQ=96.65;MQ0=0;MQ0Fraction=0.0000;MQRankSum=-3.318;QD=10.81;ReadPosRankSum=0.789;SB=-2662.16;SET_INTEGRATION;SET_WGVQSR;VQSLOD=6.1473;set=VQSR diff --git a/tests/tabix_data/vcf/24.vcf b/tests/tabix_data/vcf/24.vcf new file mode 100644 index 0000000..a62e424 --- /dev/null +++ b/tests/tabix_data/vcf/24.vcf @@ -0,0 +1,724 @@ +##fileformat=VCFv4.1 +##INFO= +##INFO= +##INFO= +##INFO= +##reference=file:///humgen/1kg/reference/human_g1k_v37.fasta +#CHROM POS ID REF ALT QUAL FILTER INFO +20 256726 . T A . . Sample=HG00097;GT=0/1;PCR_454_AR=739;PCR_454_RR=885 +20 256726 . T A . . Sample=HG00099;GT=0/1;PCR_454_AR=723;PCR_454_RR=714 +20 256726 . T A . . Sample=HG00106;GT=0/1;PCR_454_AR=1092;PCR_454_RR=1102 +20 256726 . T A . . Sample=HG00112;GT=0/1;PCR_454_AR=947;PCR_454_RR=1005 +20 256726 . T A . . Sample=HG00104;GT=1/1;PCR_454_AR=1970;PCR_454_RR=52 +20 257977 . G C . . Sample=NA19438;GT=0/1;PCR_454_AR=1312;PCR_454_RR=1123 +20 330407 . C G . . Sample=HG00134;GT=0/1;PCR_454_AR=1034;PCR_454_RR=1037 +20 330407 . C G . . Sample=HG00148;GT=0/1;PCR_454_AR=840;PCR_454_RR=820 +20 330407 . C G . . Sample=HG00151;GT=0/1;PCR_454_AR=952;PCR_454_RR=982 +20 330407 . C G . . Sample=HG00358;GT=0/1;PCR_454_AR=880;PCR_454_RR=957 +20 330407 . C G . . Sample=HG01277;GT=0/1;PCR_454_AR=914;PCR_454_RR=984 +20 368826 . G A . . Sample=NA20346;GT=0/1;PCR_454_AR=632;PCR_454_RR=591 +20 371957 . G A . . Sample=HG00150;GT=0/1;PCR_454_AR=403;PCR_454_RR=424 +20 371957 . G A . . Sample=NA12287;GT=0/1;PCR_454_AR=401;PCR_454_RR=435 +20 467031 . T A . . Sample=NA20510;GT=0/0;PCR_454_AR=5;PCR_454_RR=1763 +20 741858 . G A . . Sample=NA18634;GT=0/1;PCR_454_AR=1273;PCR_454_RR=1301 +20 947853 . C T . . Sample=HG00578;GT=0/0;PCR_454_AR=0;PCR_454_RR=197 +20 947853 . C T . . Sample=NA18861;GT=0/1;PCR_454_AR=40;PCR_454_RR=39 +20 947853 . C T . . Sample=NA18868;GT=0/1;PCR_454_AR=88;PCR_454_RR=80 +20 947853 . C T . . Sample=NA18870;GT=0/1;PCR_454_AR=66;PCR_454_RR=99 +20 947853 . C T . . Sample=NA18917;GT=0/1;PCR_454_AR=96;PCR_454_RR=111 +20 947908 . C T . . Sample=NA11993;GT=0/1;PCR_454_AR=598;PCR_454_RR=2114 +20 947908 . C T . . Sample=NA18501;GT=0/1;PCR_454_AR=392;PCR_454_RR=1687 +20 947908 . C T . . Sample=NA18504;GT=0/1;PCR_454_AR=635;PCR_454_RR=2218 +20 947908 . C T . . Sample=NA18505;GT=0/1;PCR_454_AR=1312;PCR_454_RR=1429 +20 947908 . C T . . Sample=NA18507;GT=0/1;PCR_454_AR=598;PCR_454_RR=2127 +20 948715 . T G . . Sample=NA06989;GT=0/0;PCR_454_AR=4;PCR_454_RR=1252 +20 1144999 . C T . . Sample=NA18510;GT=0/1;PCR_454_AR=450;PCR_454_RR=447 +20 1144999 . C T . . Sample=NA19172;GT=0/1;PCR_454_AR=541;PCR_454_RR=531 +20 1285858 . A C . . Sample=NA19311;GT=0/1;PCR_454_AR=1210;PCR_454_RR=1315 +20 1285932 . G A . . Sample=HG00097;GT=0/1;PCR_454_AR=868;PCR_454_RR=867 +20 1285932 . G A . . Sample=HG00106;GT=0/1;PCR_454_AR=745;PCR_454_RR=680 +20 1285932 . G A . . Sample=HG00126;GT=0/1;PCR_454_AR=780;PCR_454_RR=838 +20 1285932 . G A . . Sample=HG00134;GT=0/1;PCR_454_AR=978;PCR_454_RR=944 +20 1285932 . G A . . Sample=HG00128;GT=1/1;PCR_454_AR=1499;PCR_454_RR=14 +20 1286090 . A G . . Sample=HG00235;GT=0/1;PCR_454_AR=1223;PCR_454_RR=1352 +20 1286090 . A G . . Sample=HG00351;GT=0/1;PCR_454_AR=799;PCR_454_RR=823 +20 1286090 . A G . . Sample=HG01125;GT=0/1;PCR_454_AR=1167;PCR_454_RR=1149 +20 1286090 . A G . . Sample=NA19773;GT=0/1;PCR_454_AR=1070;PCR_454_RR=1130 +20 1546804 . G A . . Sample=HG00141;GT=0/1;PCR_454_AR=1174;PCR_454_RR=1231 +20 1546804 . G A . . Sample=HG00149;GT=0/1;PCR_454_AR=1029;PCR_454_RR=1050 +20 1546804 . G A . . Sample=HG00151;GT=0/1;PCR_454_AR=1135;PCR_454_RR=1034 +20 1546804 . G A . . Sample=HG00177;GT=0/1;PCR_454_AR=1063;PCR_454_RR=1118 +20 1546804 . G A . . Sample=HG00179;GT=0/1;PCR_454_AR=1118;PCR_454_RR=954 +20 1551579 . T G . . Sample=NA20515;GT=0/0;PCR_454_AR=5;PCR_454_RR=1812 +20 1551579 . T G . . Sample=NA19466;GT=0/1;PCR_454_AR=1011;PCR_454_RR=1042 +20 1559334 . C T . . Sample=NA18941;GT=0/0;PCR_454_AR=1;PCR_454_RR=1193 +20 1615980 . G A . . Sample=NA19914;GT=0/1;PCR_454_AR=441;PCR_454_RR=492 +20 1616047 . C G . . Sample=NA07048;GT=0/1;PCR_454_AR=508;PCR_454_RR=813 +20 1629751 . T C . . Sample=HG00156;GT=0/1;PCR_454_AR=285;PCR_454_RR=282 +20 1896011 . C T . . Sample=NA18639;GT=0/0;PCR_454_AR=0;PCR_454_RR=29 +20 1896011 . C T . . Sample=NA19314;GT=0/0;PCR_454_AR=0;PCR_454_RR=47 +20 2291684 . T C . . Sample=NA19036;GT=0/1;PCR_454_AR=873;PCR_454_RR=1025 +20 2291684 . T C . . Sample=NA19347;GT=0/1;PCR_454_AR=1116;PCR_454_RR=1217 +20 2375127 . G A . . Sample=NA18615;GT=0/1;PCR_454_AR=1016;PCR_454_RR=1016 +20 2777844 . T C . . Sample=NA20819;GT=0/1;PCR_454_AR=908;PCR_454_RR=970 +20 2844678 . G A . . Sample=HG00360;GT=0/1;PCR_454_AR=1081;PCR_454_RR=1071 +20 2944927 . A T . . Sample=NA12347;GT=0/1;PCR_454_AR=704;PCR_454_RR=752 +20 2969014 . C G . . Sample=HG00151;GT=0/1;PCR_454_AR=684;PCR_454_RR=809 +20 2969014 . C G . . Sample=NA18511;GT=0/1;PCR_454_AR=666;PCR_454_RR=704 +20 2969014 . C G . . Sample=NA18523;GT=0/1;PCR_454_AR=767;PCR_454_RR=802 +20 2969014 . C G . . Sample=NA18549;GT=0/1;PCR_454_AR=772;PCR_454_RR=838 +20 2969014 . C G . . Sample=NA18858;GT=1/1;PCR_454_AR=1313;PCR_454_RR=8 +20 3026344 . A C . . Sample=NA18640;GT=0/1;PCR_454_AR=1652;PCR_454_RR=1336 +20 3128885 . G A . . Sample=NA19473;GT=0/1;PCR_454_AR=620;PCR_454_RR=669 +20 3128950 . G A . . Sample=NA18624;GT=0/1;PCR_454_AR=570;PCR_454_RR=517 +20 3128950 . G A . . Sample=NA18953;GT=0/1;PCR_454_AR=685;PCR_454_RR=700 +20 3128950 . G A . . Sample=NA18998;GT=0/1;PCR_454_AR=606;PCR_454_RR=638 +20 3128950 . G A . . Sample=NA19076;GT=0/1;PCR_454_AR=663;PCR_454_RR=643 +20 3128950 . G A . . Sample=NA19088;GT=0/1;PCR_454_AR=492;PCR_454_RR=472 +20 3171356 . T C . . Sample=NA12003;GT=0/0;PCR_454_AR=6;PCR_454_RR=1919 +20 3171356 . T C . . Sample=NA12872;GT=0/0;PCR_454_AR=6;PCR_454_RR=2324 +20 3193990 . G T . . Sample=NA12815;GT=0/0;PCR_454_AR=0;PCR_454_RR=1570 +20 3193990 . G T . . Sample=NA18505;GT=0/0;PCR_454_AR=0;PCR_454_RR=1586 +20 3204083 . G A . . Sample=HG00104;GT=0/1;PCR_454_AR=1059;PCR_454_RR=982 +20 3204083 . G A . . Sample=HG00118;GT=0/1;PCR_454_AR=1190;PCR_454_RR=1178 +20 3204083 . G A . . Sample=HG00122;GT=0/1;PCR_454_AR=1156;PCR_454_RR=1277 +20 3204083 . G A . . Sample=HG00099;GT=1/1;PCR_454_AR=2171;PCR_454_RR=12 +20 3204083 . G A . . Sample=HG00106;GT=1/1;PCR_454_AR=2027;PCR_454_RR=19 +20 3214580 . C T . . Sample=HG00097;GT=0/1;PCR_454_AR=852;PCR_454_RR=784 +20 3214580 . C T . . Sample=HG00099;GT=0/1;PCR_454_AR=628;PCR_454_RR=682 +20 3214580 . C T . . Sample=HG00129;GT=0/1;PCR_454_AR=869;PCR_454_RR=844 +20 3214580 . C T . . Sample=HG00130;GT=0/1;PCR_454_AR=651;PCR_454_RR=767 +20 3214580 . C T . . Sample=HG00128;GT=1/1;PCR_454_AR=1378;PCR_454_RR=3 +20 3214802 . T C . . Sample=NA18526;GT=0/1;PCR_454_AR=969;PCR_454_RR=1018 +20 3235915 . T C . . Sample=HG00560;GT=0/1;PCR_454_AR=795;PCR_454_RR=798 +20 3235915 . T C . . Sample=HG00566;GT=0/1;PCR_454_AR=688;PCR_454_RR=650 +20 3235915 . T C . . Sample=HG00596;GT=0/1;PCR_454_AR=863;PCR_454_RR=935 +20 3235915 . T C . . Sample=HG01124;GT=0/1;PCR_454_AR=802;PCR_454_RR=836 +20 3235915 . T C . . Sample=NA18487;GT=0/1;PCR_454_AR=942;PCR_454_RR=968 +20 3274851 . C T . . Sample=NA19704;GT=0/1;PCR_454_AR=486;PCR_454_RR=479 +20 3274851 . C T . . Sample=NA20334;GT=0/1;PCR_454_AR=512;PCR_454_RR=512 +20 3274851 . C T . . Sample=NA20336;GT=0/1;PCR_454_AR=510;PCR_454_RR=440 +20 3324372 . G C . . Sample=NA19003;GT=0/1;PCR_454_AR=1902;PCR_454_RR=1898 +20 3362102 . T G . . Sample=NA06994;GT=0/0;PCR_454_AR=0;PCR_454_RR=526 +20 3362102 . T G . . Sample=NA12249;GT=0/0;PCR_454_AR=0;PCR_454_RR=465 +20 3515923 . G A . . Sample=HG00122;GT=0/1;PCR_454_AR=237;PCR_454_RR=261 +20 3515923 . G A . . Sample=HG00126;GT=0/1;PCR_454_AR=299;PCR_454_RR=293 +20 3515923 . G A . . Sample=HG00130;GT=0/1;PCR_454_AR=307;PCR_454_RR=279 +20 3515923 . G A . . Sample=HG00128;GT=1/1;PCR_454_AR=633;PCR_454_RR=4 +20 3515923 . G A . . Sample=HG00129;GT=1/1;PCR_454_AR=580;PCR_454_RR=2 +20 3641233 . G T . . Sample=NA20773;GT=0/0;PCR_454_AR=3;PCR_454_RR=1477 +20 3650204 . G A . . Sample=HG00118;GT=0/1;PCR_454_AR=737;PCR_454_RR=771 +20 3650204 . G A . . Sample=HG00126;GT=0/1;PCR_454_AR=518;PCR_454_RR=552 +20 3650204 . G A . . Sample=HG00141;GT=0/1;PCR_454_AR=643;PCR_454_RR=668 +20 3650204 . G A . . Sample=HG00143;GT=0/1;PCR_454_AR=549;PCR_454_RR=613 +20 3650204 . G A . . Sample=HG00148;GT=0/1;PCR_454_AR=708;PCR_454_RR=830 +20 3652397 . G A . . Sample=NA18635;GT=0/1;PCR_454_AR=1604;PCR_454_RR=1658 +20 3672827 . A T . . Sample=HG00130;GT=0/0;PCR_454_AR=0;PCR_454_RR=941 +20 3672827 . A T . . Sample=HG00349;GT=0/0;PCR_454_AR=2;PCR_454_RR=943 +20 3675119 . G T . . Sample=NA20544;GT=0/1;PCR_454_AR=577;PCR_454_RR=657 +20 3687329 . T C . . Sample=NA18532;GT=0/1;PCR_454_AR=702;PCR_454_RR=746 +20 3842125 . C G . . Sample=NA12155;GT=0/1;PCR_454_AR=1193;PCR_454_RR=1178 +20 4680289 . G A . . Sample=NA18856;GT=0/1;PCR_454_AR=1335;PCR_454_RR=1278 +20 4680289 . G A . . Sample=NA19130;GT=0/1;PCR_454_AR=1273;PCR_454_RR=1286 +20 4680289 . G A . . Sample=NA19213;GT=0/1;PCR_454_AR=1305;PCR_454_RR=1241 +20 4680289 . G A . . Sample=NA19311;GT=0/1;PCR_454_AR=1332;PCR_454_RR=1400 +20 4680289 . G A . . Sample=NA19332;GT=0/1;PCR_454_AR=1272;PCR_454_RR=1275 +20 4848511 . G A . . Sample=NA19440;GT=0/0;PCR_454_AR=8;PCR_454_RR=2951 +20 4848511 . G A . . Sample=NA19448;GT=0/1;PCR_454_AR=1278;PCR_454_RR=1434 +20 4848511 . G A . . Sample=NA19461;GT=0/1;PCR_454_AR=1412;PCR_454_RR=1478 +20 5099300 . A G . . Sample=NA19138;GT=0/1;PCR_454_AR=511;PCR_454_RR=496 +20 5903387 . A C . . Sample=HG00566;GT=0/1;PCR_454_AR=1400;PCR_454_RR=1384 +20 5903387 . A C . . Sample=HG01124;GT=0/1;PCR_454_AR=856;PCR_454_RR=1007 +20 5903387 . A C . . Sample=HG01125;GT=0/1;PCR_454_AR=891;PCR_454_RR=816 +20 5903387 . A C . . Sample=HG01149;GT=0/1;PCR_454_AR=1011;PCR_454_RR=959 +20 5903387 . A C . . Sample=HG01278;GT=0/1;PCR_454_AR=1077;PCR_454_RR=1049 +20 5923222 . C T . . Sample=HG00592;GT=0/1;PCR_454_AR=968;PCR_454_RR=950 +20 5923222 . C T . . Sample=NA18567;GT=0/1;PCR_454_AR=678;PCR_454_RR=728 +20 5923222 . C T . . Sample=NA18602;GT=0/1;PCR_454_AR=926;PCR_454_RR=988 +20 5923222 . C T . . Sample=NA18624;GT=0/1;PCR_454_AR=991;PCR_454_RR=963 +20 5923222 . C T . . Sample=NA18632;GT=0/1;PCR_454_AR=892;PCR_454_RR=906 +20 5943955 . G C . . Sample=HG00565;GT=0/1;PCR_454_AR=259;PCR_454_RR=227 +20 5943955 . G C . . Sample=HG00566;GT=0/1;PCR_454_AR=245;PCR_454_RR=235 +20 5943955 . G C . . Sample=HG00577;GT=0/1;PCR_454_AR=264;PCR_454_RR=305 +20 5943955 . G C . . Sample=HG00578;GT=0/1;PCR_454_AR=210;PCR_454_RR=261 +20 5943955 . G C . . Sample=HG00593;GT=0/1;PCR_454_AR=261;PCR_454_RR=238 +20 6015109 . G A . . Sample=NA20796;GT=0/1;PCR_454_AR=440;PCR_454_RR=500 +20 6060150 . C T . . Sample=NA18961;GT=0/1;PCR_454_AR=384;PCR_454_RR=464 +20 7967973 . G A . . Sample=NA19371;GT=0/1;PCR_454_AR=281;PCR_454_RR=506 +20 7967973 . G A . . Sample=NA19390;GT=0/1;PCR_454_AR=410;PCR_454_RR=538 +20 8665657 . G A . . Sample=NA19740;GT=0/1;PCR_454_AR=724;PCR_454_RR=703 +20 9453955 . C A . . Sample=NA20314;GT=0/1;PCR_454_AR=1048;PCR_454_RR=1147 +20 9520132 . G A . . Sample=HG00143;GT=0/1;PCR_454_AR=472;PCR_454_RR=583 +20 9520132 . G A . . Sample=HG01624;GT=0/1;PCR_454_AR=589;PCR_454_RR=589 +20 9520132 . G A . . Sample=NA12046;GT=0/1;PCR_454_AR=688;PCR_454_RR=708 +20 9520132 . G A . . Sample=NA18517;GT=0/1;PCR_454_AR=566;PCR_454_RR=585 +20 9520132 . G A . . Sample=NA18858;GT=0/1;PCR_454_AR=550;PCR_454_RR=561 +20 9543621 . C T . . Sample=HG00097;GT=0/1;PCR_454_AR=499;PCR_454_RR=480 +20 9543621 . C T . . Sample=HG00104;GT=0/1;PCR_454_AR=524;PCR_454_RR=480 +20 9543621 . C T . . Sample=HG00112;GT=0/1;PCR_454_AR=467;PCR_454_RR=406 +20 9543621 . C T . . Sample=HG00099;GT=1/1;PCR_454_AR=1321;PCR_454_RR=9 +20 9543621 . C T . . Sample=HG00106;GT=1/1;PCR_454_AR=802;PCR_454_RR=6 +20 9547022 . G A . . Sample=NA18924;GT=0/1;PCR_454_AR=853;PCR_454_RR=944 +20 9560813 . T C . . Sample=NA12761;GT=0/1;PCR_454_AR=692;PCR_454_RR=734 +20 10030206 . C T . . Sample=NA19175;GT=0/1;PCR_454_AR=784;PCR_454_RR=759 +20 10030206 . C T . . Sample=NA19380;GT=0/1;PCR_454_AR=781;PCR_454_RR=739 +20 10030206 . C T . . Sample=NA19446;GT=0/1;PCR_454_AR=533;PCR_454_RR=540 +20 13098183 . A C . . Sample=NA19453;GT=0/1;PCR_454_AR=857;PCR_454_RR=1146 +20 16253907 . C A . . Sample=NA19087;GT=0/1;PCR_454_AR=868;PCR_454_RR=854 +20 16254032 . G A . . Sample=NA19651;GT=0/1;PCR_454_AR=299;PCR_454_RR=263 +20 16485159 . T G . . Sample=NA18625;GT=0/1;PCR_454_AR=160;PCR_454_RR=1004 +20 17474781 . G A . . Sample=NA18870;GT=0/1;PCR_454_AR=496;PCR_454_RR=536 +20 17585255 . C G . . Sample=NA18528;GT=0/1;PCR_454_AR=370;PCR_454_RR=390 +20 17923814 . C T . . Sample=HG00104;GT=0/0;PCR_454_AR=1;PCR_454_RR=1854 +20 17923814 . C T . . Sample=HG00126;GT=0/0;PCR_454_AR=1;PCR_454_RR=1724 +20 17928182 . T G . . Sample=NA18522;GT=0/1;PCR_454_AR=222;PCR_454_RR=1564 +20 17931030 . C G . . Sample=NA20508;GT=0/1;PCR_454_AR=495;PCR_454_RR=446 +20 17933265 . G A . . Sample=NA19137;GT=0/1;PCR_454_AR=300;PCR_454_RR=315 +20 17968811 . C G . . Sample=NA19222;GT=0/1;PCR_454_AR=150;PCR_454_RR=189 +20 18123396 . A G . . Sample=NA20507;GT=0/0;PCR_454_AR=5;PCR_454_RR=2239 +20 18125941 . T C . . Sample=NA12006;GT=0/0;PCR_454_AR=2;PCR_454_RR=2354 +20 18125941 . T C . . Sample=NA12762;GT=0/0;PCR_454_AR=4;PCR_454_RR=1116 +20 18374912 . T A . . Sample=NA19189;GT=0/1;PCR_454_AR=896;PCR_454_RR=888 +20 18440904 . G C . . Sample=NA19058;GT=0/1;PCR_454_AR=685;PCR_454_RR=881 +20 19698200 . C T . . Sample=NA18574;GT=0/1;PCR_454_AR=1012;PCR_454_RR=1086 +20 20020489 . T C . . Sample=NA19000;GT=0/1;PCR_454_AR=459;PCR_454_RR=436 +20 20028425 . C T . . Sample=NA20787;GT=0/1;PCR_454_AR=687;PCR_454_RR=739 +20 20033171 . G A . . Sample=NA19468;GT=0/0;PCR_454_AR=109;PCR_454_RR=1866 +20 20051634 . A G . . Sample=NA19711;GT=0/1;PCR_454_AR=659;PCR_454_RR=2324 +20 20051634 . A G . . Sample=NA20126;GT=0/1;PCR_454_AR=687;PCR_454_RR=2379 +20 20177371 . T C . . Sample=NA19713;GT=0/1;PCR_454_AR=882;PCR_454_RR=785 +20 21346240 . C T . . Sample=HG01125;GT=0/1;PCR_454_AR=707;PCR_454_RR=711 +20 21346240 . C T . . Sample=NA18489;GT=0/1;PCR_454_AR=670;PCR_454_RR=648 +20 21346240 . C T . . Sample=NA18498;GT=0/1;PCR_454_AR=706;PCR_454_RR=667 +20 21346240 . C T . . Sample=NA18502;GT=0/1;PCR_454_AR=698;PCR_454_RR=678 +20 21346240 . C T . . Sample=NA18505;GT=1/1;PCR_454_AR=1096;PCR_454_RR=2 +20 21494183 . C T . . Sample=HG00128;GT=0/1;PCR_454_AR=556;PCR_454_RR=605 +20 21494183 . C T . . Sample=HG00151;GT=0/1;PCR_454_AR=465;PCR_454_RR=425 +20 21494183 . C T . . Sample=HG00234;GT=0/1;PCR_454_AR=583;PCR_454_RR=487 +20 21494183 . C T . . Sample=HG00355;GT=0/1;PCR_454_AR=608;PCR_454_RR=521 +20 21494183 . C T . . Sample=HG00362;GT=0/1;PCR_454_AR=518;PCR_454_RR=577 +20 21687304 . C T . . Sample=NA19657;GT=0/1;PCR_454_AR=804;PCR_454_RR=862 +20 23028428 . C T . . Sample=NA18970;GT=0/1;PCR_454_AR=360;PCR_454_RR=418 +20 23028637 . C G . . Sample=NA18517;GT=0/1;PCR_454_AR=358;PCR_454_RR=374 +20 23028637 . C G . . Sample=NA19118;GT=0/1;PCR_454_AR=502;PCR_454_RR=432 +20 23420987 . G T . . Sample=NA19076;GT=0/0;PCR_454_AR=20;PCR_454_RR=1732 +20 23420993 . C G . . Sample=NA19076;GT=0/0;PCR_454_AR=40;PCR_454_RR=3495 +20 23424637 . C T . . Sample=HG00126;GT=0/1;PCR_454_AR=766;PCR_454_RR=721 +20 23424637 . C T . . Sample=HG00150;GT=0/1;PCR_454_AR=444;PCR_454_RR=435 +20 23424637 . C T . . Sample=HG00247;GT=0/1;PCR_454_AR=510;PCR_454_RR=486 +20 23424637 . C T . . Sample=HG00565;GT=0/1;PCR_454_AR=684;PCR_454_RR=609 +20 23424637 . C T . . Sample=HG00593;GT=0/1;PCR_454_AR=640;PCR_454_RR=676 +20 23545657 . A C . . Sample=NA18924;GT=0/1;PCR_454_AR=767;PCR_454_RR=780 +20 23548918 . T C . . Sample=NA18501;GT=0/1;PCR_454_AR=1397;PCR_454_RR=1168 +20 23548918 . T C . . Sample=NA18502;GT=0/1;PCR_454_AR=1373;PCR_454_RR=1383 +20 23548918 . T C . . Sample=NA18856;GT=0/1;PCR_454_AR=1376;PCR_454_RR=1446 +20 23548918 . T C . . Sample=NA18907;GT=0/1;PCR_454_AR=1522;PCR_454_RR=1533 +20 23548918 . T C . . Sample=NA19036;GT=0/1;PCR_454_AR=1549;PCR_454_RR=1624 +20 23667793 . G T . . Sample=NA11994;GT=0/0;PCR_454_AR=135;PCR_454_RR=1637 +20 23667793 . G T . . Sample=NA12400;GT=0/1;PCR_454_AR=651;PCR_454_RR=619 +20 23667793 . G T . . Sample=NA18527;GT=0/1;PCR_454_AR=816;PCR_454_RR=732 +20 23667793 . G T . . Sample=NA18566;GT=0/1;PCR_454_AR=928;PCR_454_RR=2446 +20 23667793 . G T . . Sample=NA19064;GT=0/1;PCR_454_AR=892;PCR_454_RR=2346 +20 23667834 . A C . . Sample=NA18510;GT=0/0;PCR_454_AR=27;PCR_454_RR=622 +20 23667834 . A C . . Sample=NA18858;GT=0/0;PCR_454_AR=32;PCR_454_RR=615 +20 23731469 . G T . . Sample=NA20544;GT=0/1;PCR_454_AR=292;PCR_454_RR=376 +20 23804690 . A C . . Sample=NA19749;GT=0/1;PCR_454_AR=1141;PCR_454_RR=1145 +20 23807156 . G C . . Sample=HG00129;GT=0/0;PCR_454_AR=0;PCR_454_RR=1447 +20 23807156 . G C . . Sample=HG00130;GT=0/0;PCR_454_AR=0;PCR_454_RR=1603 +20 23860201 . C T . . Sample=NA18553;GT=0/1;PCR_454_AR=722;PCR_454_RR=657 +20 23965921 . G A . . Sample=NA18549;GT=0/0;PCR_454_AR=21;PCR_454_RR=582 +20 23965921 . G A . . Sample=NA19000;GT=0/0;PCR_454_AR=19;PCR_454_RR=337 +20 24523782 . G A . . Sample=NA19921;GT=0/1;PCR_454_AR=933;PCR_454_RR=1005 +20 24523986 . C A . . Sample=HG00104;GT=0/1;PCR_454_AR=1056;PCR_454_RR=1346 +20 24954343 . G A . . Sample=NA19146;GT=0/1;PCR_454_AR=1208;PCR_454_RR=1132 +20 25058490 . T G . . Sample=NA11830;GT=0/0;PCR_454_AR=5;PCR_454_RR=1757 +20 25187224 . A G . . Sample=NA19137;GT=0/1;PCR_454_AR=69;PCR_454_RR=566 +20 25203611 . T C . . Sample=NA12006;GT=0/1;PCR_454_AR=1326;PCR_454_RR=1209 +20 25252066 . A G . . Sample=NA18637;GT=0/1;PCR_454_AR=1208;PCR_454_RR=1230 +20 25262768 . G A . . Sample=HG00099;GT=0/1;PCR_454_AR=920;PCR_454_RR=727 +20 25262768 . G A . . Sample=HG00106;GT=0/1;PCR_454_AR=733;PCR_454_RR=613 +20 25262768 . G A . . Sample=HG00112;GT=0/1;PCR_454_AR=756;PCR_454_RR=723 +20 25262768 . G A . . Sample=HG00130;GT=0/1;PCR_454_AR=854;PCR_454_RR=827 +20 25262768 . G A . . Sample=HG00152;GT=0/1;PCR_454_AR=798;PCR_454_RR=764 +20 25277132 . C T . . Sample=NA18861;GT=0/1;PCR_454_AR=415;PCR_454_RR=446 +20 25434162 . C T . . Sample=NA19346;GT=0/1;PCR_454_AR=566;PCR_454_RR=613 +20 25434162 . C T . . Sample=NA19395;GT=0/1;PCR_454_AR=504;PCR_454_RR=531 +20 25439088 . C T . . Sample=NA19095;GT=0/0;PCR_454_AR=1;PCR_454_RR=1220 +20 25439088 . C T . . Sample=NA19923;GT=0/1;PCR_454_AR=575;PCR_454_RR=834 +20 25457145 . G A . . Sample=NA12842;GT=0/1;PCR_454_AR=333;PCR_454_RR=438 +20 25457559 . G A . . Sample=NA19159;GT=0/1;PCR_454_AR=1225;PCR_454_RR=1285 +20 25457665 . C T . . Sample=NA20341;GT=0/1;PCR_454_AR=627;PCR_454_RR=1348 +20 25459659 . T C . . Sample=NA18647;GT=0/0;PCR_454_AR=5;PCR_454_RR=2809 +20 25459659 . T C . . Sample=NA18748;GT=0/0;PCR_454_AR=5;PCR_454_RR=2184 +20 25459659 . T C . . Sample=HG01274;GT=0/1;PCR_454_AR=1246;PCR_454_RR=1375 +20 25459659 . T C . . Sample=NA12275;GT=0/1;PCR_454_AR=1183;PCR_454_RR=1148 +20 25459659 . T C . . Sample=NA12718;GT=0/1;PCR_454_AR=1017;PCR_454_RR=1225 +20 25478961 . G A . . Sample=HG00104;GT=0/0;PCR_454_AR=1;PCR_454_RR=1933 +20 25478961 . G A . . Sample=HG00234;GT=0/0;PCR_454_AR=0;PCR_454_RR=1964 +20 25478961 . G A . . Sample=HG00364;GT=0/0;PCR_454_AR=2;PCR_454_RR=1909 +20 25478961 . G A . . Sample=HG00593;GT=0/0;PCR_454_AR=2;PCR_454_RR=2173 +20 25478961 . G A . . Sample=HG01271;GT=0/0;PCR_454_AR=0;PCR_454_RR=2082 +20 30407977 . A G . . Sample=NA12287;GT=0/1;PCR_454_AR=1313;PCR_454_RR=1488 +20 30432438 . C T . . Sample=NA19352;GT=0/1;PCR_454_AR=1043;PCR_454_RR=964 +20 30432438 . C T . . Sample=NA19654;GT=0/1;PCR_454_AR=937;PCR_454_RR=1465 +20 30432570 . T C . . Sample=NA18510;GT=0/1;PCR_454_AR=1224;PCR_454_RR=1413 +20 30432570 . T C . . Sample=NA18858;GT=0/1;PCR_454_AR=1050;PCR_454_RR=1052 +20 30432570 . T C . . Sample=NA18868;GT=0/1;PCR_454_AR=1087;PCR_454_RR=966 +20 30432570 . T C . . Sample=NA18871;GT=0/1;PCR_454_AR=1178;PCR_454_RR=1344 +20 30432570 . T C . . Sample=NA18522;GT=1/1;PCR_454_AR=1873;PCR_454_RR=7 +20 30602754 . C T . . Sample=NA19749;GT=0/1;PCR_454_AR=63;PCR_454_RR=409 +20 30729618 . G A . . Sample=NA11994;GT=0/0;PCR_454_AR=0;PCR_454_RR=1866 +20 30729618 . G A . . Sample=NA07037;GT=0/1;PCR_454_AR=1373;PCR_454_RR=1435 +20 30729618 . G A . . Sample=NA12058;GT=0/1;PCR_454_AR=963;PCR_454_RR=990 +20 30729618 . G A . . Sample=NA12144;GT=0/1;PCR_454_AR=1419;PCR_454_RR=1136 +20 30729618 . G A . . Sample=NA12282;GT=0/1;PCR_454_AR=1353;PCR_454_RR=1148 +20 30789767 . G A . . Sample=HG00350;GT=0/0;PCR_454_AR=36;PCR_454_RR=553 +20 30897726 . G A . . Sample=NA20507;GT=0/0;PCR_454_AR=239;PCR_454_RR=2404 +20 30918043 . C T . . Sample=NA19707;GT=0/1;PCR_454_AR=1147;PCR_454_RR=1123 +20 30918043 . C T . . Sample=NA20775;GT=0/1;PCR_454_AR=1234;PCR_454_RR=1140 +20 31021429 . G C . . Sample=NA18870;GT=0/1;PCR_454_AR=747;PCR_454_RR=929 +20 31021429 . G C . . Sample=NA19319;GT=0/1;PCR_454_AR=585;PCR_454_RR=657 +20 31021429 . G C . . Sample=NA19445;GT=0/1;PCR_454_AR=531;PCR_454_RR=553 +20 31021429 . G C . . Sample=NA20127;GT=0/1;PCR_454_AR=661;PCR_454_RR=679 +20 31021429 . G C . . Sample=NA20317;GT=0/1;PCR_454_AR=874;PCR_454_RR=917 +20 31022764 . C T . . Sample=NA18498;GT=0/1;PCR_454_AR=1455;PCR_454_RR=1259 +20 31022764 . C T . . Sample=NA18507;GT=0/1;PCR_454_AR=1020;PCR_454_RR=972 +20 31022764 . C T . . Sample=NA18511;GT=0/1;PCR_454_AR=1339;PCR_454_RR=1297 +20 31022764 . C T . . Sample=NA18856;GT=0/1;PCR_454_AR=1582;PCR_454_RR=1572 +20 31022764 . C T . . Sample=NA18870;GT=0/1;PCR_454_AR=1642;PCR_454_RR=1613 +20 31024033 . G A . . Sample=HG01356;GT=0/1;PCR_454_AR=1045;PCR_454_RR=1002 +20 31024033 . G A . . Sample=NA18537;GT=0/1;PCR_454_AR=794;PCR_454_RR=788 +20 31024033 . G A . . Sample=NA18557;GT=0/1;PCR_454_AR=830;PCR_454_RR=795 +20 31024033 . G A . . Sample=NA18558;GT=0/1;PCR_454_AR=833;PCR_454_RR=878 +20 31024033 . G A . . Sample=NA18637;GT=1/1;PCR_454_AR=1528;PCR_454_RR=6 +20 31040782 . G A . . Sample=HG00097;GT=0/1;PCR_454_AR=978;PCR_454_RR=1231 +20 31040782 . G A . . Sample=HG00179;GT=0/1;PCR_454_AR=1054;PCR_454_RR=993 +20 31040782 . G A . . Sample=HG01620;GT=0/1;PCR_454_AR=1091;PCR_454_RR=1111 +20 31040782 . G A . . Sample=NA12273;GT=0/1;PCR_454_AR=1073;PCR_454_RR=1182 +20 31040782 . G A . . Sample=NA12341;GT=0/1;PCR_454_AR=1102;PCR_454_RR=1318 +20 31375167 . G A . . Sample=NA18486;GT=0/1;PCR_454_AR=563;PCR_454_RR=523 +20 31375167 . G A . . Sample=NA19113;GT=0/1;PCR_454_AR=628;PCR_454_RR=620 +20 31388076 . C T . . Sample=NA18504;GT=0/1;PCR_454_AR=809;PCR_454_RR=773 +20 31388076 . C T . . Sample=NA18519;GT=0/1;PCR_454_AR=683;PCR_454_RR=752 +20 31388076 . C T . . Sample=NA18856;GT=0/1;PCR_454_AR=1012;PCR_454_RR=1073 +20 31388076 . C T . . Sample=NA18917;GT=0/1;PCR_454_AR=888;PCR_454_RR=931 +20 31388076 . C T . . Sample=NA18522;GT=1/1;PCR_454_AR=1422;PCR_454_RR=2 +20 31424592 . C T . . Sample=NA19146;GT=0/1;PCR_454_AR=237;PCR_454_RR=257 +20 31434427 . A G . . Sample=NA11995;GT=0/1;PCR_454_AR=325;PCR_454_RR=325 +20 31604884 . A G . . Sample=NA12748;GT=0/1;PCR_454_AR=1098;PCR_454_RR=1153 +20 31606483 . G C . . Sample=NA18740;GT=0/1;PCR_454_AR=595;PCR_454_RR=964 +20 31606907 . G A . . Sample=NA19753;GT=0/0;PCR_454_AR=0;PCR_454_RR=1627 +20 31606907 . G A . . Sample=NA19747;GT=0/1;PCR_454_AR=952;PCR_454_RR=884 +20 31622899 . A G . . Sample=NA19038;GT=0/1;PCR_454_AR=196;PCR_454_RR=111 +20 31626754 . G A . . Sample=NA18579;GT=0/1;PCR_454_AR=941;PCR_454_RR=902 +20 31643241 . A C . . Sample=NA18622;GT=0/1;PCR_454_AR=832;PCR_454_RR=877 +20 31659074 . G A . . Sample=NA19449;GT=0/1;PCR_454_AR=915;PCR_454_RR=863 +20 31672711 . A G . . Sample=NA20754;GT=0/1;PCR_454_AR=762;PCR_454_RR=820 +20 31680333 . C T . . Sample=HG00156;GT=0/1;PCR_454_AR=446;PCR_454_RR=438 +20 31680333 . C T . . Sample=HG00235;GT=0/1;PCR_454_AR=525;PCR_454_RR=435 +20 31680333 . C T . . Sample=HG01125;GT=0/1;PCR_454_AR=433;PCR_454_RR=415 +20 31680333 . C T . . Sample=NA12043;GT=0/1;PCR_454_AR=559;PCR_454_RR=477 +20 31680333 . C T . . Sample=NA12046;GT=0/1;PCR_454_AR=364;PCR_454_RR=330 +20 31695565 . C T . . Sample=NA19054;GT=0/1;PCR_454_AR=988;PCR_454_RR=944 +20 31889182 . T C . . Sample=HG01277;GT=0/1;PCR_454_AR=594;PCR_454_RR=639 +20 31889182 . T C . . Sample=HG01278;GT=0/1;PCR_454_AR=533;PCR_454_RR=540 +20 31889182 . T C . . Sample=HG01623;GT=0/1;PCR_454_AR=703;PCR_454_RR=668 +20 31889182 . T C . . Sample=NA18487;GT=0/1;PCR_454_AR=644;PCR_454_RR=647 +20 31889182 . T C . . Sample=NA18486;GT=1/1;PCR_454_AR=1419;PCR_454_RR=15 +20 31890796 . G A . . Sample=NA18595;GT=0/1;PCR_454_AR=36;PCR_454_RR=49 +20 31967485 . T C . . Sample=NA18757;GT=0/0;PCR_454_AR=4;PCR_454_RR=1506 +20 32162066 . G C . . Sample=HG00099;GT=0/1;PCR_454_AR=98;PCR_454_RR=92 +20 32162066 . G C . . Sample=NA12282;GT=0/1;PCR_454_AR=72;PCR_454_RR=74 +20 32162066 . G C . . Sample=NA12342;GT=0/1;PCR_454_AR=105;PCR_454_RR=134 +20 32162066 . G C . . Sample=NA12778;GT=0/1;PCR_454_AR=94;PCR_454_RR=122 +20 32162066 . G C . . Sample=NA19773;GT=0/1;PCR_454_AR=84;PCR_454_RR=115 +20 32295637 . A G . . Sample=NA19204;GT=0/1;PCR_454_AR=1263;PCR_454_RR=1230 +20 32298533 . G A . . Sample=HG01125;GT=0/1;PCR_454_AR=1577;PCR_454_RR=1574 +20 32298533 . G A . . Sample=NA18510;GT=0/1;PCR_454_AR=1537;PCR_454_RR=1597 +20 32298533 . G A . . Sample=NA18520;GT=0/1;PCR_454_AR=1689;PCR_454_RR=1754 +20 32298533 . G A . . Sample=NA19099;GT=0/1;PCR_454_AR=1900;PCR_454_RR=1940 +20 32298533 . G A . . Sample=NA19129;GT=0/1;PCR_454_AR=1900;PCR_454_RR=1840 +20 32336754 . G A . . Sample=HG00358;GT=0/1;PCR_454_AR=1185;PCR_454_RR=1161 +20 32336754 . G A . . Sample=HG00565;GT=0/1;PCR_454_AR=1018;PCR_454_RR=958 +20 32336754 . G A . . Sample=HG00595;GT=0/1;PCR_454_AR=1201;PCR_454_RR=1222 +20 32336754 . G A . . Sample=NA18532;GT=0/1;PCR_454_AR=1204;PCR_454_RR=1235 +20 32336754 . G A . . Sample=NA18542;GT=1/1;PCR_454_AR=2997;PCR_454_RR=11 +20 32358043 . A T . . Sample=NA18955;GT=0/1;PCR_454_AR=1050;PCR_454_RR=1022 +20 32881901 . T C . . Sample=NA19257;GT=0/1;PCR_454_AR=1007;PCR_454_RR=966 +20 33328321 . C T . . Sample=NA18487;GT=0/1;PCR_454_AR=637;PCR_454_RR=629 +20 33328321 . C T . . Sample=NA18516;GT=0/1;PCR_454_AR=613;PCR_454_RR=605 +20 33328321 . C T . . Sample=NA19044;GT=0/1;PCR_454_AR=629;PCR_454_RR=661 +20 33328321 . C T . . Sample=NA19102;GT=0/1;PCR_454_AR=680;PCR_454_RR=625 +20 33328321 . C T . . Sample=NA19175;GT=0/1;PCR_454_AR=652;PCR_454_RR=703 +20 33330691 . C G . . Sample=NA19189;GT=0/1;PCR_454_AR=604;PCR_454_RR=575 +20 33433247 . G A . . Sample=NA11919;GT=0/1;PCR_454_AR=196;PCR_454_RR=195 +20 33447313 . C T . . Sample=HG01125;GT=0/1;PCR_454_AR=260;PCR_454_RR=285 +20 33447313 . C T . . Sample=NA18504;GT=0/1;PCR_454_AR=231;PCR_454_RR=217 +20 33447313 . C T . . Sample=NA18517;GT=0/1;PCR_454_AR=298;PCR_454_RR=311 +20 33447313 . C T . . Sample=NA18520;GT=0/1;PCR_454_AR=254;PCR_454_RR=256 +20 33447313 . C T . . Sample=NA18522;GT=0/1;PCR_454_AR=286;PCR_454_RR=277 +20 33517251 . C T . . Sample=HG00126;GT=0/1;PCR_454_AR=685;PCR_454_RR=676 +20 33517301 . G A . . Sample=NA20282;GT=0/1;PCR_454_AR=1082;PCR_454_RR=1076 +20 33523396 . A C . . Sample=NA18910;GT=0/1;PCR_454_AR=879;PCR_454_RR=933 +20 33572880 . C T . . Sample=NA20516;GT=0/1;PCR_454_AR=935;PCR_454_RR=847 +20 33575007 . C T . . Sample=NA19118;GT=0/1;PCR_454_AR=793;PCR_454_RR=659 +20 33575043 . C T . . Sample=NA19036;GT=0/1;PCR_454_AR=972;PCR_454_RR=919 +20 33575043 . C T . . Sample=NA19308;GT=0/1;PCR_454_AR=801;PCR_454_RR=728 +20 33575043 . C T . . Sample=NA19434;GT=0/1;PCR_454_AR=825;PCR_454_RR=915 +20 33575043 . C T . . Sample=NA19439;GT=0/1;PCR_454_AR=1001;PCR_454_RR=1073 +20 33575043 . C T . . Sample=NA19466;GT=0/1;PCR_454_AR=936;PCR_454_RR=931 +20 33583330 . A G . . Sample=HG00097;GT=1/1;PCR_454_AR=651;PCR_454_RR=5 +20 33583330 . A G . . Sample=HG00099;GT=1/1;PCR_454_AR=326;PCR_454_RR=0 +20 33583330 . A G . . Sample=HG00104;GT=1/1;PCR_454_AR=430;PCR_454_RR=2 +20 33583330 . A G . . Sample=HG00106;GT=1/1;PCR_454_AR=613;PCR_454_RR=3 +20 33583330 . A G . . Sample=HG00112;GT=1/1;PCR_454_AR=632;PCR_454_RR=6 +20 33584196 . C T . . Sample=NA12286;GT=0/1;PCR_454_AR=989;PCR_454_RR=1638 +20 33584196 . C T . . Sample=NA12750;GT=0/1;PCR_454_AR=886;PCR_454_RR=1206 +20 33584196 . C T . . Sample=NA19750;GT=0/1;PCR_454_AR=1179;PCR_454_RR=1155 +20 33584196 . C T . . Sample=NA20807;GT=0/1;PCR_454_AR=1089;PCR_454_RR=1724 +20 33584196 . C T . . Sample=NA20826;GT=0/1;PCR_454_AR=1373;PCR_454_RR=1259 +20 33587399 . G A . . Sample=NA19328;GT=0/1;PCR_454_AR=893;PCR_454_RR=754 +20 33711732 . T A . . Sample=NA19347;GT=0/1;PCR_454_AR=887;PCR_454_RR=946 +20 33874473 . C A . . Sample=NA18626;GT=0/1;PCR_454_AR=1001;PCR_454_RR=1012 +20 33874719 . C T . . Sample=HG00099;GT=0/1;PCR_454_AR=585;PCR_454_RR=542 +20 33874719 . C T . . Sample=HG00141;GT=0/1;PCR_454_AR=499;PCR_454_RR=508 +20 33874719 . C T . . Sample=HG00142;GT=0/1;PCR_454_AR=541;PCR_454_RR=540 +20 33874719 . C T . . Sample=HG00143;GT=0/1;PCR_454_AR=699;PCR_454_RR=604 +20 33874719 . C T . . Sample=HG00156;GT=0/1;PCR_454_AR=722;PCR_454_RR=617 +20 34092317 . C A . . Sample=HG00128;GT=0/0;PCR_454_AR=0;PCR_454_RR=1205 +20 34092317 . C A . . Sample=HG00266;GT=0/0;PCR_454_AR=3;PCR_454_RR=3354 +20 34218898 . A G . . Sample=NA12763;GT=0/1;PCR_454_AR=295;PCR_454_RR=291 +20 34292440 . T C . . Sample=NA18639;GT=0/1;PCR_454_AR=481;PCR_454_RR=572 +20 34317286 . G A . . Sample=NA19204;GT=0/1;PCR_454_AR=665;PCR_454_RR=705 +20 34611604 . C T . . Sample=NA11893;GT=0/1;PCR_454_AR=1180;PCR_454_RR=1243 +20 35060852 . G A . . Sample=NA12283;GT=0/1;PCR_454_AR=433;PCR_454_RR=444 +20 35060852 . G A . . Sample=NA19676;GT=0/1;PCR_454_AR=368;PCR_454_RR=421 +20 35068262 . A C . . Sample=NA20759;GT=0/1;PCR_454_AR=1272;PCR_454_RR=1190 +20 35075140 . C T . . Sample=NA19444;GT=0/1;PCR_454_AR=1174;PCR_454_RR=605 +20 35075140 . C T . . Sample=NA19448;GT=0/1;PCR_454_AR=1574;PCR_454_RR=932 +20 35075309 . G A . . Sample=NA18549;GT=0/1;PCR_454_AR=923;PCR_454_RR=1559 +20 35075309 . G A . . Sample=NA19391;GT=0/1;PCR_454_AR=1114;PCR_454_RR=1064 +20 35075309 . G A . . Sample=NA19397;GT=0/1;PCR_454_AR=1198;PCR_454_RR=1233 +20 35176551 . A G . . Sample=NA20289;GT=0/1;PCR_454_AR=532;PCR_454_RR=1682 +20 35207263 . G A . . Sample=HG00234;GT=0/1;PCR_454_AR=235;PCR_454_RR=221 +20 35219406 . G C . . Sample=HG00105;GT=0/0;PCR_454_AR=57;PCR_454_RR=585 +20 35219406 . G C . . Sample=HG00130;GT=0/0;PCR_454_AR=58;PCR_454_RR=574 +20 35438474 . G A . . Sample=NA18642;GT=0/1;PCR_454_AR=1030;PCR_454_RR=1093 +20 35507540 . G A . . Sample=NA19740;GT=0/1;PCR_454_AR=466;PCR_454_RR=584 +20 35539699 . T C . . Sample=NA12717;GT=0/1;PCR_454_AR=336;PCR_454_RR=421 +20 35812756 . C T . . Sample=NA19726;GT=0/1;PCR_454_AR=1085;PCR_454_RR=1070 +20 35944759 . A C . . Sample=NA11831;GT=0/0;PCR_454_AR=1;PCR_454_RR=1726 +20 35944759 . A C . . Sample=NA11832;GT=0/0;PCR_454_AR=3;PCR_454_RR=1809 +20 36024598 . C T . . Sample=NA19682;GT=0/1;PCR_454_AR=677;PCR_454_RR=797 +20 36024598 . C T . . Sample=NA20528;GT=0/1;PCR_454_AR=691;PCR_454_RR=703 +20 36030944 . T C . . Sample=NA18618;GT=0/0;PCR_454_AR=0;PCR_454_RR=985 +20 36030944 . T C . . Sample=NA18626;GT=0/0;PCR_454_AR=2;PCR_454_RR=778 +20 36030944 . T C . . Sample=NA18916;GT=0/1;PCR_454_AR=454;PCR_454_RR=444 +20 36030944 . T C . . Sample=NA19150;GT=0/1;PCR_454_AR=471;PCR_454_RR=509 +20 36488331 . A G . . Sample=NA20340;GT=0/1;PCR_454_AR=1388;PCR_454_RR=1472 +20 36640610 . C G . . Sample=NA18508;GT=0/1;PCR_454_AR=985;PCR_454_RR=1026 +20 36641870 . G A . . Sample=HG00106;GT=0/1;PCR_454_AR=1062;PCR_454_RR=1095 +20 36641870 . G A . . Sample=NA11893;GT=0/1;PCR_454_AR=976;PCR_454_RR=1033 +20 36641870 . G A . . Sample=NA12399;GT=0/1;PCR_454_AR=971;PCR_454_RR=973 +20 36641870 . G A . . Sample=NA12489;GT=0/1;PCR_454_AR=1107;PCR_454_RR=1037 +20 36641870 . G A . . Sample=NA12749;GT=0/1;PCR_454_AR=947;PCR_454_RR=885 +20 36775155 . A G . . Sample=NA19067;GT=0/1;PCR_454_AR=771;PCR_454_RR=772 +20 36775233 . G A . . Sample=NA19352;GT=0/1;PCR_454_AR=732;PCR_454_RR=723 +20 36784261 . G A . . Sample=NA19171;GT=0/1;PCR_454_AR=1197;PCR_454_RR=1200 +20 36841848 . C T . . Sample=NA19449;GT=0/1;PCR_454_AR=402;PCR_454_RR=394 +20 36869075 . G A . . Sample=NA19185;GT=0/1;PCR_454_AR=1430;PCR_454_RR=1382 +20 36869206 . C T . . Sample=NA20287;GT=0/1;PCR_454_AR=584;PCR_454_RR=626 +20 36979308 . T A . . Sample=NA11894;GT=0/1;PCR_454_AR=973;PCR_454_RR=1087 +20 37001736 . C T . . Sample=NA18987;GT=0/1;PCR_454_AR=122;PCR_454_RR=88 +20 39798902 . C T . . Sample=NA18994;GT=0/1;PCR_454_AR=1212;PCR_454_RR=1202 +20 39981307 . G T . . Sample=NA18595;GT=0/1;PCR_454_AR=1273;PCR_454_RR=1102 +20 39981307 . G T . . Sample=NA18622;GT=0/1;PCR_454_AR=635;PCR_454_RR=623 +20 39981307 . G T . . Sample=NA18977;GT=0/1;PCR_454_AR=1251;PCR_454_RR=1141 +20 39981307 . G T . . Sample=NA18978;GT=0/1;PCR_454_AR=1286;PCR_454_RR=1331 +20 39981307 . G T . . Sample=NA18998;GT=0/1;PCR_454_AR=1174;PCR_454_RR=1225 +20 39986913 . G A . . Sample=NA20317;GT=0/1;PCR_454_AR=627;PCR_454_RR=535 +20 39987386 . G A . . Sample=NA19437;GT=0/1;PCR_454_AR=989;PCR_454_RR=971 +20 39992390 . G A . . Sample=NA18636;GT=0/1;PCR_454_AR=925;PCR_454_RR=969 +20 39993723 . C T . . Sample=NA18489;GT=0/1;PCR_454_AR=677;PCR_454_RR=819 +20 39993723 . C T . . Sample=NA18505;GT=0/1;PCR_454_AR=603;PCR_454_RR=578 +20 39993723 . C T . . Sample=NA18517;GT=0/1;PCR_454_AR=791;PCR_454_RR=747 +20 39993723 . C T . . Sample=NA19380;GT=0/1;PCR_454_AR=869;PCR_454_RR=972 +20 39993790 . G A . . Sample=NA18871;GT=0/1;PCR_454_AR=2297;PCR_454_RR=2512 +20 40033848 . A G . . Sample=HG00559;GT=0/0;PCR_454_AR=6;PCR_454_RR=2130 +20 40050233 . T G . . Sample=HG01133;GT=0/0;PCR_454_AR=2;PCR_454_RR=1613 +20 40050233 . T G . . Sample=NA18502;GT=0/0;PCR_454_AR=4;PCR_454_RR=1967 +20 40162202 . T C . . Sample=NA12874;GT=0/1;PCR_454_AR=171;PCR_454_RR=157 +20 42143783 . A G . . Sample=NA20334;GT=0/1;PCR_454_AR=1011;PCR_454_RR=632 +20 42143783 . A G . . Sample=NA20336;GT=0/1;PCR_454_AR=1556;PCR_454_RR=492 +20 42196587 . G A . . Sample=NA19312;GT=0/1;PCR_454_AR=522;PCR_454_RR=486 +20 42196587 . G A . . Sample=NA19383;GT=0/1;PCR_454_AR=693;PCR_454_RR=821 +20 42333997 . C T . . Sample=NA19058;GT=0/1;PCR_454_AR=994;PCR_454_RR=994 +20 42680115 . G A . . Sample=NA18611;GT=0/1;PCR_454_AR=1042;PCR_454_RR=1086 +20 42747246 . C T . . Sample=HG00097;GT=0/1;PCR_454_AR=1132;PCR_454_RR=1174 +20 42747246 . C T . . Sample=HG00106;GT=0/1;PCR_454_AR=899;PCR_454_RR=983 +20 42747246 . C T . . Sample=HG00112;GT=0/1;PCR_454_AR=901;PCR_454_RR=960 +20 42747246 . C T . . Sample=HG00135;GT=0/1;PCR_454_AR=677;PCR_454_RR=680 +20 42747246 . C T . . Sample=HG00142;GT=0/1;PCR_454_AR=928;PCR_454_RR=956 +20 42939738 . C T . . Sample=NA18611;GT=0/1;PCR_454_AR=1131;PCR_454_RR=984 +20 43243299 . G C . . Sample=NA18633;GT=0/1;PCR_454_AR=1194;PCR_454_RR=1277 +20 43255152 . G A . . Sample=HG00130;GT=0/0;PCR_454_AR=0;PCR_454_RR=2287 +20 43255152 . G A . . Sample=HG00234;GT=0/0;PCR_454_AR=1;PCR_454_RR=2172 +20 43255152 . G A . . Sample=NA18618;GT=0/0;PCR_454_AR=2;PCR_454_RR=2266 +20 43255152 . G A . . Sample=NA18956;GT=0/0;PCR_454_AR=0;PCR_454_RR=2152 +20 43255152 . G A . . Sample=NA19083;GT=0/1;PCR_454_AR=986;PCR_454_RR=974 +20 43723672 . G A . . Sample=NA18530;GT=0/1;PCR_454_AR=356;PCR_454_RR=401 +20 43723672 . G A . . Sample=NA18622;GT=0/1;PCR_454_AR=449;PCR_454_RR=391 +20 43739354 . G A . . Sample=NA18504;GT=0/1;PCR_454_AR=455;PCR_454_RR=1477 +20 43934213 . G T . . Sample=HG01345;GT=0/1;PCR_454_AR=1327;PCR_454_RR=1169 +20 44190750 . T G . . Sample=HG00143;GT=0/1;PCR_454_AR=898;PCR_454_RR=938 +20 44190750 . T G . . Sample=NA12340;GT=0/1;PCR_454_AR=882;PCR_454_RR=872 +20 44424037 . G A . . Sample=HG00152;GT=0/1;PCR_454_AR=603;PCR_454_RR=593 +20 44469565 . C T . . Sample=NA18549;GT=0/1;PCR_454_AR=999;PCR_454_RR=246 +20 44485866 . T A . . Sample=NA12890;GT=0/1;PCR_454_AR=536;PCR_454_RR=596 +20 44506417 . G A . . Sample=HG00099;GT=0/1;PCR_454_AR=1320;PCR_454_RR=1305 +20 44506417 . G A . . Sample=HG00118;GT=0/1;PCR_454_AR=1559;PCR_454_RR=1533 +20 44506417 . G A . . Sample=HG00097;GT=1/1;PCR_454_AR=3211;PCR_454_RR=20 +20 44506417 . G A . . Sample=HG00112;GT=1/1;PCR_454_AR=2632;PCR_454_RR=20 +20 44506417 . G A . . Sample=HG00122;GT=1/1;PCR_454_AR=2875;PCR_454_RR=6 +20 44506987 . G C . . Sample=NA19117;GT=0/1;PCR_454_AR=1387;PCR_454_RR=1532 +20 44511253 . C T . . Sample=NA20799;GT=0/1;PCR_454_AR=1286;PCR_454_RR=1280 +20 44519372 . G A . . Sample=NA19437;GT=0/0;PCR_454_AR=0;PCR_454_RR=2075 +20 44519372 . G A . . Sample=NA19917;GT=0/1;PCR_454_AR=1243;PCR_454_RR=1234 +20 44576246 . G A . . Sample=NA18912;GT=0/1;PCR_454_AR=458;PCR_454_RR=2154 +20 44576246 . G A . . Sample=NA18924;GT=0/1;PCR_454_AR=1131;PCR_454_RR=1078 +20 44576246 . G A . . Sample=NA20276;GT=0/1;PCR_454_AR=860;PCR_454_RR=852 +20 44576246 . G A . . Sample=NA20289;GT=0/1;PCR_454_AR=492;PCR_454_RR=2174 +20 44580998 . T C . . Sample=NA18566;GT=0/1;PCR_454_AR=877;PCR_454_RR=925 +20 44680318 . C G . . Sample=HG00592;GT=0/0;PCR_454_AR=0;PCR_454_RR=3602 +20 44680318 . C G . . Sample=HG01139;GT=0/0;PCR_454_AR=1;PCR_454_RR=3510 +20 44856207 . G A . . Sample=NA11995;GT=0/1;PCR_454_AR=127;PCR_454_RR=17 +20 44980779 . G A . . Sample=NA18553;GT=0/1;PCR_454_AR=993;PCR_454_RR=1022 +20 45919012 . C T . . Sample=NA19445;GT=0/1;PCR_454_AR=265;PCR_454_RR=525 +20 46271051 . C G . . Sample=NA18486;GT=0/1;PCR_454_AR=754;PCR_454_RR=749 +20 47262594 . C A . . Sample=NA20291;GT=0/1;PCR_454_AR=1210;PCR_454_RR=1153 +20 47558430 . C T . . Sample=NA20296;GT=0/1;PCR_454_AR=699;PCR_454_RR=682 +20 47733688 . T C . . Sample=NA18630;GT=0/0;PCR_454_AR=0;PCR_454_RR=806 +20 47739668 . G A . . Sample=NA19036;GT=0/0;PCR_454_AR=1;PCR_454_RR=2292 +20 47886859 . C T . . Sample=NA18956;GT=0/0;PCR_454_AR=1;PCR_454_RR=2153 +20 47990798 . C G . . Sample=HG00105;GT=0/0;PCR_454_AR=0;PCR_454_RR=387 +20 47990798 . C G . . Sample=HG00122;GT=0/0;PCR_454_AR=0;PCR_454_RR=534 +20 48124475 . C T . . Sample=NA19257;GT=0/1;PCR_454_AR=628;PCR_454_RR=644 +20 48273201 . A C . . Sample=NA19914;GT=0/1;PCR_454_AR=338;PCR_454_RR=323 +20 48713355 . T C . . Sample=NA12155;GT=0/0;PCR_454_AR=8;PCR_454_RR=1686 +20 48713355 . T C . . Sample=NA12815;GT=0/0;PCR_454_AR=10;PCR_454_RR=1607 +20 49218698 . C T . . Sample=NA19338;GT=0/1;PCR_454_AR=776;PCR_454_RR=682 +20 49218698 . C T . . Sample=NA19457;GT=0/1;PCR_454_AR=803;PCR_454_RR=759 +20 49219065 . C T . . Sample=NA18599;GT=0/1;PCR_454_AR=1018;PCR_454_RR=1080 +20 49354597 . A G . . Sample=HG00177;GT=0/1;PCR_454_AR=580;PCR_454_RR=617 +20 49354597 . A G . . Sample=NA11829;GT=0/1;PCR_454_AR=778;PCR_454_RR=869 +20 49354597 . A G . . Sample=NA20510;GT=0/1;PCR_454_AR=518;PCR_454_RR=631 +20 49354597 . A G . . Sample=NA20512;GT=0/1;PCR_454_AR=238;PCR_454_RR=333 +20 49354597 . A G . . Sample=NA20586;GT=0/1;PCR_454_AR=562;PCR_454_RR=642 +20 50048925 . G C . . Sample=NA20507;GT=0/1;PCR_454_AR=774;PCR_454_RR=809 +20 50051804 . C T . . Sample=NA19102;GT=0/1;PCR_454_AR=136;PCR_454_RR=155 +20 50071136 . C T . . Sample=NA18637;GT=0/1;PCR_454_AR=334;PCR_454_RR=349 +20 50140178 . G A . . Sample=NA18924;GT=0/1;PCR_454_AR=540;PCR_454_RR=481 +20 50140178 . G A . . Sample=NA19321;GT=0/1;PCR_454_AR=481;PCR_454_RR=652 +20 50235576 . G A . . Sample=HG00106;GT=0/1;PCR_454_AR=982;PCR_454_RR=886 +20 50235576 . G A . . Sample=HG00122;GT=0/1;PCR_454_AR=838;PCR_454_RR=717 +20 50235576 . G A . . Sample=HG00126;GT=0/1;PCR_454_AR=795;PCR_454_RR=769 +20 50235576 . G A . . Sample=HG00135;GT=0/1;PCR_454_AR=972;PCR_454_RR=930 +20 50235576 . G A . . Sample=HG00148;GT=0/1;PCR_454_AR=933;PCR_454_RR=931 +20 50310567 . C T . . Sample=NA19152;GT=0/1;PCR_454_AR=689;PCR_454_RR=773 +20 50310567 . C T . . Sample=NA19377;GT=0/1;PCR_454_AR=736;PCR_454_RR=683 +20 50406859 . G A . . Sample=NA19921;GT=0/1;PCR_454_AR=1045;PCR_454_RR=930 +20 50407501 . A C . . Sample=HG00118;GT=0/1;PCR_454_AR=569;PCR_454_RR=608 +20 50407508 . C T . . Sample=NA20534;GT=0/1;PCR_454_AR=753;PCR_454_RR=2120 +20 50408613 . A G . . Sample=NA18487;GT=0/1;PCR_454_AR=637;PCR_454_RR=634 +20 50408613 . A G . . Sample=NA18502;GT=0/1;PCR_454_AR=561;PCR_454_RR=553 +20 50408613 . A G . . Sample=NA18519;GT=0/1;PCR_454_AR=571;PCR_454_RR=554 +20 50408613 . A G . . Sample=NA18908;GT=0/1;PCR_454_AR=731;PCR_454_RR=791 +20 50408613 . A G . . Sample=NA18909;GT=0/1;PCR_454_AR=683;PCR_454_RR=634 +20 50803476 . G A . . Sample=NA19046;GT=0/1;PCR_454_AR=692;PCR_454_RR=685 +20 50803476 . G A . . Sample=NA19375;GT=0/1;PCR_454_AR=735;PCR_454_RR=803 +20 50803476 . G A . . Sample=NA19376;GT=0/1;PCR_454_AR=892;PCR_454_RR=831 +20 51872037 . G A . . Sample=NA18502;GT=0/1;PCR_454_AR=602;PCR_454_RR=654 +20 51872037 . G A . . Sample=NA18504;GT=0/1;PCR_454_AR=717;PCR_454_RR=760 +20 51872037 . G A . . Sample=NA18507;GT=0/1;PCR_454_AR=790;PCR_454_RR=822 +20 51872037 . G A . . Sample=NA18508;GT=0/1;PCR_454_AR=868;PCR_454_RR=914 +20 51872037 . G A . . Sample=NA18501;GT=1/1;PCR_454_AR=1687;PCR_454_RR=5 +20 52192483 . T C . . Sample=HG00266;GT=0/1;PCR_454_AR=1044;PCR_454_RR=1029 +20 52198279 . G A . . Sample=NA19065;GT=0/1;PCR_454_AR=1001;PCR_454_RR=1070 +20 52561468 . A G . . Sample=HG00118;GT=0/1;PCR_454_AR=398;PCR_454_RR=501 +20 52561468 . A G . . Sample=HG00126;GT=0/1;PCR_454_AR=228;PCR_454_RR=250 +20 52561468 . A G . . Sample=HG00130;GT=0/1;PCR_454_AR=472;PCR_454_RR=535 +20 52561468 . A G . . Sample=HG00134;GT=0/1;PCR_454_AR=462;PCR_454_RR=543 +20 52561468 . A G . . Sample=HG00143;GT=0/1;PCR_454_AR=355;PCR_454_RR=404 +20 52779394 . G T . . Sample=NA20540;GT=0/1;PCR_454_AR=470;PCR_454_RR=557 +20 53205268 . T C . . Sample=NA19038;GT=0/1;PCR_454_AR=447;PCR_454_RR=421 +20 53226967 . G A . . Sample=NA19462;GT=0/1;PCR_454_AR=770;PCR_454_RR=792 +20 54961540 . A T . . Sample=HG00106;GT=0/1;PCR_454_AR=457;PCR_454_RR=411 +20 54961540 . A T . . Sample=HG00112;GT=0/1;PCR_454_AR=466;PCR_454_RR=483 +20 54961540 . A T . . Sample=HG00134;GT=0/1;PCR_454_AR=480;PCR_454_RR=467 +20 54961540 . A T . . Sample=HG00143;GT=0/1;PCR_454_AR=522;PCR_454_RR=458 +20 54961540 . A T . . Sample=HG00097;GT=1/1;PCR_454_AR=937;PCR_454_RR=4 +20 54970682 . C T . . Sample=NA18912;GT=0/1;PCR_454_AR=683;PCR_454_RR=745 +20 54970682 . C T . . Sample=NA19171;GT=0/1;PCR_454_AR=819;PCR_454_RR=792 +20 55021021 . G A . . Sample=NA19087;GT=0/1;PCR_454_AR=1018;PCR_454_RR=1144 +20 55108414 . G A . . Sample=NA20756;GT=1/1;PCR_454_AR=1220;PCR_454_RR=3 +20 55206884 . C T . . Sample=NA19726;GT=0/1;PCR_454_AR=806;PCR_454_RR=864 +20 55206884 . C T . . Sample=NA19738;GT=0/1;PCR_454_AR=988;PCR_454_RR=1033 +20 56087684 . C T . . Sample=NA18599;GT=0/1;PCR_454_AR=1158;PCR_454_RR=1234 +20 56089789 . C T . . Sample=HG01277;GT=0/1;PCR_454_AR=737;PCR_454_RR=779 +20 56137833 . A G . . Sample=HG00099;GT=0/1;PCR_454_AR=794;PCR_454_RR=777 +20 56137833 . A G . . Sample=HG00106;GT=0/1;PCR_454_AR=1272;PCR_454_RR=1196 +20 56137833 . A G . . Sample=HG00097;GT=1/1;PCR_454_AR=1763;PCR_454_RR=4 +20 56137833 . A G . . Sample=HG00104;GT=1/1;PCR_454_AR=1726;PCR_454_RR=5 +20 56137833 . A G . . Sample=HG00112;GT=1/1;PCR_454_AR=1821;PCR_454_RR=3 +20 57036354 . C T . . Sample=NA19080;GT=0/1;PCR_454_AR=1722;PCR_454_RR=1581 +20 57036538 . C T . . Sample=NA19248;GT=0/1;PCR_454_AR=1224;PCR_454_RR=902 +20 57415535 . C T . . Sample=NA19722;GT=0/1;PCR_454_AR=291;PCR_454_RR=1503 +20 57415601 . G A . . Sample=NA20296;GT=0/1;PCR_454_AR=1262;PCR_454_RR=350 +20 57428947 . G T . . Sample=NA19311;GT=0/1;PCR_454_AR=1304;PCR_454_RR=553 +20 57572729 . C T . . Sample=NA19707;GT=0/1;PCR_454_AR=840;PCR_454_RR=1015 +20 57576684 . T G . . Sample=NA18747;GT=0/0;PCR_454_AR=3;PCR_454_RR=1578 +20 57597952 . C T . . Sample=NA20529;GT=0/1;PCR_454_AR=816;PCR_454_RR=883 +20 57768304 . G A . . Sample=NA20818;GT=0/1;PCR_454_AR=710;PCR_454_RR=535 +20 57769546 . C T . . Sample=NA18917;GT=0/0;PCR_454_AR=61;PCR_454_RR=810 +20 57769738 . A G . . Sample=NA18527;GT=0/1;PCR_454_AR=799;PCR_454_RR=792 +20 57769738 . A G . . Sample=NA18530;GT=0/1;PCR_454_AR=558;PCR_454_RR=527 +20 57769738 . A G . . Sample=NA18532;GT=0/1;PCR_454_AR=734;PCR_454_RR=719 +20 57769738 . A G . . Sample=NA18545;GT=0/1;PCR_454_AR=524;PCR_454_RR=502 +20 57769738 . A G . . Sample=NA18593;GT=0/1;PCR_454_AR=809;PCR_454_RR=835 +20 58444902 . C T . . Sample=NA19095;GT=0/1;PCR_454_AR=164;PCR_454_RR=144 +20 58467100 . C T . . Sample=NA19324;GT=0/1;PCR_454_AR=312;PCR_454_RR=301 +20 58560056 . C T . . Sample=HG00593;GT=0/1;PCR_454_AR=1491;PCR_454_RR=1378 +20 58560056 . C T . . Sample=NA18553;GT=0/1;PCR_454_AR=1226;PCR_454_RR=1216 +20 58564005 . G A . . Sample=NA19355;GT=0/0;PCR_454_AR=0;PCR_454_RR=2602 +20 58567458 . A C . . Sample=HG00143;GT=0/0;PCR_454_AR=1;PCR_454_RR=878 +20 58567458 . A C . . Sample=HG00149;GT=0/0;PCR_454_AR=0;PCR_454_RR=883 +20 58571705 . C T . . Sample=NA19319;GT=0/1;PCR_454_AR=342;PCR_454_RR=265 +20 60504808 . C T . . Sample=NA18639;GT=0/1;PCR_454_AR=1079;PCR_454_RR=1027 +20 60504808 . C T . . Sample=NA19921;GT=0/1;PCR_454_AR=914;PCR_454_RR=890 +20 60701482 . T A . . Sample=NA19651;GT=0/1;PCR_454_AR=540;PCR_454_RR=612 +20 60708462 . T C . . Sample=NA18962;GT=0/1;PCR_454_AR=891;PCR_454_RR=784 +20 60738559 . G A . . Sample=NA18965;GT=0/1;PCR_454_AR=1072;PCR_454_RR=896 +20 60838713 . C T . . Sample=NA20506;GT=0/1;PCR_454_AR=618;PCR_454_RR=642 +20 60866830 . A C . . Sample=NA18923;GT=0/0;PCR_454_AR=0;PCR_454_RR=211 +20 60868936 . C T . . Sample=NA19119;GT=0/1;PCR_454_AR=1424;PCR_454_RR=1554 +20 60878814 . G A . . Sample=NA18638;GT=0/1;PCR_454_AR=223;PCR_454_RR=1299 +20 60884465 . G A . . Sample=NA19681;GT=0/1;PCR_454_AR=928;PCR_454_RR=1002 +20 60885810 . C T . . Sample=HG00134;GT=0/0;PCR_454_AR=2;PCR_454_RR=2017 +20 60885810 . C T . . Sample=HG00350;GT=0/0;PCR_454_AR=4;PCR_454_RR=1963 +20 60886712 . T C . . Sample=NA19438;GT=0/1;PCR_454_AR=929;PCR_454_RR=721 +20 60891010 . C T . . Sample=NA19700;GT=0/1;PCR_454_AR=334;PCR_454_RR=389 +20 60893610 . C T . . Sample=HG00359;GT=0/0;PCR_454_AR=2;PCR_454_RR=2041 +20 60893610 . C T . . Sample=NA19758;GT=0/1;PCR_454_AR=1173;PCR_454_RR=1158 +20 60893636 . C T . . Sample=NA20520;GT=0/1;PCR_454_AR=847;PCR_454_RR=1197 +20 60893636 . C T . . Sample=NA20540;GT=0/1;PCR_454_AR=776;PCR_454_RR=1355 +20 60893960 . C T . . Sample=NA19236;GT=0/1;PCR_454_AR=1310;PCR_454_RR=1388 +20 60897486 . C T . . Sample=HG00099;GT=0/1;PCR_454_AR=454;PCR_454_RR=403 +20 60897486 . C T . . Sample=HG00122;GT=0/1;PCR_454_AR=465;PCR_454_RR=352 +20 60897486 . C T . . Sample=HG00097;GT=1/1;PCR_454_AR=849;PCR_454_RR=3 +20 60897486 . C T . . Sample=HG00104;GT=1/1;PCR_454_AR=925;PCR_454_RR=4 +20 60897486 . C T . . Sample=HG00118;GT=1/1;PCR_454_AR=799;PCR_454_RR=7 +20 60907674 . G A . . Sample=HG00104;GT=0/1;PCR_454_AR=279;PCR_454_RR=228 +20 60907674 . G A . . Sample=HG00106;GT=0/1;PCR_454_AR=334;PCR_454_RR=295 +20 60907674 . G A . . Sample=HG00097;GT=1/1;PCR_454_AR=739;PCR_454_RR=4 +20 60907674 . G A . . Sample=HG00099;GT=1/1;PCR_454_AR=395;PCR_454_RR=3 +20 60907674 . G A . . Sample=HG00112;GT=1/1;PCR_454_AR=980;PCR_454_RR=6 +20 60911433 . A C . . Sample=NA11920;GT=0/1;PCR_454_AR=341;PCR_454_RR=380 +20 60911433 . A C . . Sample=NA20278;GT=0/1;PCR_454_AR=398;PCR_454_RR=444 +20 60913173 . C T . . Sample=NA18522;GT=0/1;PCR_454_AR=1062;PCR_454_RR=1032 +20 60920914 . T C . . Sample=NA18530;GT=0/1;PCR_454_AR=937;PCR_454_RR=877 +20 60920914 . T C . . Sample=NA18873;GT=0/1;PCR_454_AR=791;PCR_454_RR=836 +20 60920914 . T C . . Sample=NA19038;GT=0/1;PCR_454_AR=895;PCR_454_RR=857 +20 60920914 . T C . . Sample=NA19099;GT=0/1;PCR_454_AR=1115;PCR_454_RR=1150 +20 60920914 . T C . . Sample=NA19317;GT=0/1;PCR_454_AR=1165;PCR_454_RR=1206 +20 60927411 . G A . . Sample=HG00099;GT=0/1;PCR_454_AR=330;PCR_454_RR=345 +20 60927411 . G A . . Sample=HG00112;GT=0/1;PCR_454_AR=389;PCR_454_RR=468 +20 60927411 . G A . . Sample=HG00118;GT=0/1;PCR_454_AR=1434;PCR_454_RR=538 +20 60927411 . G A . . Sample=HG00097;GT=1/1;PCR_454_AR=993;PCR_454_RR=7 +20 60927411 . G A . . Sample=HG00104;GT=1/1;PCR_454_AR=837;PCR_454_RR=8 +20 60937543 . A G . . Sample=HG00115;GT=0/0;PCR_454_AR=2;PCR_454_RR=3444 +20 60963387 . C T . . Sample=NA18992;GT=0/1;PCR_454_AR=689;PCR_454_RR=728 +20 60986026 . T C . . Sample=NA18511;GT=0/1;PCR_454_AR=510;PCR_454_RR=522 +20 60986026 . T C . . Sample=NA18520;GT=0/1;PCR_454_AR=384;PCR_454_RR=403 +20 60986026 . T C . . Sample=NA18861;GT=0/1;PCR_454_AR=372;PCR_454_RR=432 +20 60986026 . T C . . Sample=NA18908;GT=0/1;PCR_454_AR=428;PCR_454_RR=386 +20 60989186 . G T . . Sample=HG00351;GT=0/0;PCR_454_AR=0;PCR_454_RR=299 +20 60989186 . G T . . Sample=HG00099;GT=0/1;PCR_454_AR=1182;PCR_454_RR=966 +20 60989186 . G T . . Sample=HG01344;GT=0/1;PCR_454_AR=654;PCR_454_RR=302 +20 60989186 . G T . . Sample=NA12045;GT=0/1;PCR_454_AR=504;PCR_454_RR=534 +20 60989186 . G T . . Sample=HG00130;GT=1/1;PCR_454_AR=76;PCR_454_RR=2 +20 60992370 . C T . . Sample=NA18917;GT=0/1;PCR_454_AR=598;PCR_454_RR=363 +20 60992370 . C T . . Sample=NA19453;GT=0/1;PCR_454_AR=541;PCR_454_RR=677 +20 61288592 . G A . . Sample=HG01625;GT=0/1;PCR_454_AR=852;PCR_454_RR=871 +20 61288592 . G A . . Sample=NA12383;GT=0/1;PCR_454_AR=794;PCR_454_RR=737 +20 61288592 . G A . . Sample=NA19780;GT=0/1;PCR_454_AR=1012;PCR_454_RR=880 +20 61288592 . G A . . Sample=NA20508;GT=0/1;PCR_454_AR=913;PCR_454_RR=773 +20 61512157 . C T . . Sample=NA18933;GT=0/1;PCR_454_AR=1227;PCR_454_RR=1206 +20 61512157 . C T . . Sample=NA18934;GT=0/1;PCR_454_AR=1110;PCR_454_RR=1182 +20 61512157 . C T . . Sample=NA19771;GT=0/1;PCR_454_AR=1250;PCR_454_RR=1148 +20 61512982 . T A . . Sample=NA18559;GT=0/1;PCR_454_AR=1255;PCR_454_RR=1117 +20 61513433 . T C . . Sample=NA20810;GT=0/0;PCR_454_AR=1;PCR_454_RR=550 +20 61525226 . G A . . Sample=NA19428;GT=0/1;PCR_454_AR=719;PCR_454_RR=719 +20 61542496 . G C . . Sample=NA19648;GT=0/1;PCR_454_AR=237;PCR_454_RR=1305 +20 61574860 . C T . . Sample=NA19762;GT=0/1;PCR_454_AR=703;PCR_454_RR=488 +20 61591950 . T G . . Sample=HG00106;GT=0/0;PCR_454_AR=2;PCR_454_RR=1219 +20 61591950 . T G . . Sample=HG00122;GT=0/0;PCR_454_AR=0;PCR_454_RR=1227 +20 61833992 . G A . . Sample=NA18489;GT=0/1;PCR_454_AR=738;PCR_454_RR=786 +20 61833992 . G A . . Sample=NA19093;GT=0/1;PCR_454_AR=839;PCR_454_RR=739 +20 61834856 . G A . . Sample=NA19041;GT=0/1;PCR_454_AR=389;PCR_454_RR=374 +20 61834856 . G A . . Sample=NA19095;GT=0/1;PCR_454_AR=383;PCR_454_RR=364 +20 61834856 . G A . . Sample=NA19113;GT=0/1;PCR_454_AR=322;PCR_454_RR=325 +20 61834856 . G A . . Sample=NA19318;GT=0/1;PCR_454_AR=434;PCR_454_RR=399 +20 61834856 . G A . . Sample=NA19334;GT=0/1;PCR_454_AR=380;PCR_454_RR=343 +20 61943307 . G C . . Sample=NA19201;GT=0/1;PCR_454_AR=920;PCR_454_RR=890 +20 61943346 . G A . . Sample=NA19758;GT=0/1;PCR_454_AR=683;PCR_454_RR=705 +20 62187372 . C G . . Sample=NA19117;GT=0/0;PCR_454_AR=0;PCR_454_RR=963 +20 62187668 . C T . . Sample=NA12154;GT=0/1;PCR_454_AR=905;PCR_454_RR=664 +20 62194106 . C T . . Sample=NA18910;GT=0/1;PCR_454_AR=1083;PCR_454_RR=1040 +20 62194106 . C T . . Sample=NA19338;GT=0/1;PCR_454_AR=784;PCR_454_RR=854 +20 62194106 . C T . . Sample=NA19346;GT=0/1;PCR_454_AR=757;PCR_454_RR=817 +20 62194106 . C T . . Sample=NA19376;GT=0/1;PCR_454_AR=1152;PCR_454_RR=962 +20 62194106 . C T . . Sample=NA19439;GT=0/1;PCR_454_AR=1387;PCR_454_RR=1456 +20 62194211 . C A . . Sample=HG00156;GT=0/1;PCR_454_AR=1116;PCR_454_RR=536 +20 62194211 . C A . . Sample=NA07051;GT=0/1;PCR_454_AR=2089;PCR_454_RR=259 +20 62194211 . C A . . Sample=NA12003;GT=0/1;PCR_454_AR=1330;PCR_454_RR=796 +20 62194290 . C T . . Sample=NA19346;GT=0/1;PCR_454_AR=1000;PCR_454_RR=751 +20 62194290 . C T . . Sample=NA19351;GT=0/1;PCR_454_AR=901;PCR_454_RR=771 +20 62198552 . G C . . Sample=NA20542;GT=0/1;PCR_454_AR=1527;PCR_454_RR=1010 +20 62198883 . C T . . Sample=NA19346;GT=0/1;PCR_454_AR=1447;PCR_454_RR=1455 +20 62198883 . C T . . Sample=NA19351;GT=0/1;PCR_454_AR=903;PCR_454_RR=1401 +20 62198883 . C T . . Sample=NA20340;GT=0/1;PCR_454_AR=843;PCR_454_RR=892 +20 62198960 . G A . . Sample=NA20534;GT=0/1;PCR_454_AR=1223;PCR_454_RR=864 +20 62200240 . G A . . Sample=NA18910;GT=0/1;PCR_454_AR=1221;PCR_454_RR=1347 +20 62226984 . G C . . Sample=HG00559;GT=0/0;PCR_454_AR=2;PCR_454_RR=1774 +20 62226984 . G C . . Sample=NA12003;GT=0/0;PCR_454_AR=1;PCR_454_RR=1871 +20 62250734 . C T . . Sample=NA19473;GT=0/1;PCR_454_AR=607;PCR_454_RR=722 +20 62297382 . A T . . Sample=NA11993;GT=0/0;PCR_454_AR=3;PCR_454_RR=2573 +20 62297382 . A T . . Sample=NA19117;GT=0/0;PCR_454_AR=5;PCR_454_RR=1753 +20 62305427 . G A . . Sample=HG00104;GT=0/0;PCR_454_AR=10;PCR_454_RR=803 +20 62305427 . G A . . Sample=HG00122;GT=0/0;PCR_454_AR=28;PCR_454_RR=1300 +20 62319912 . G T . . Sample=HG00128;GT=0/0;PCR_454_AR=1;PCR_454_RR=1911 +20 62319912 . G T . . Sample=HG00560;GT=0/0;PCR_454_AR=0;PCR_454_RR=2111 +20 62324258 . C G . . Sample=NA18562;GT=0/1;PCR_454_AR=1126;PCR_454_RR=1126 +20 62324622 . C G . . Sample=NA18574;GT=0/1;PCR_454_AR=1153;PCR_454_RR=1158 +20 62325731 . G A . . Sample=NA18548;GT=0/1;PCR_454_AR=779;PCR_454_RR=2199 +20 62325821 . G A . . Sample=NA20278;GT=0/1;PCR_454_AR=819;PCR_454_RR=764 +20 62325821 . G A . . Sample=NA20507;GT=0/1;PCR_454_AR=1163;PCR_454_RR=1060 +20 62326150 . G A . . Sample=NA18870;GT=0/1;PCR_454_AR=1080;PCR_454_RR=892 +20 62326234 . C T . . Sample=HG00128;GT=0/0;PCR_454_AR=0;PCR_454_RR=761 +20 62326234 . C T . . Sample=HG00179;GT=0/0;PCR_454_AR=1;PCR_454_RR=1158 +20 62326811 . G T . . Sample=HG00149;GT=0/0;PCR_454_AR=0;PCR_454_RR=1467 +20 62326811 . G T . . Sample=HG00151;GT=0/0;PCR_454_AR=1;PCR_454_RR=1492 +20 62407154 . C T . . Sample=NA18987;GT=0/0;PCR_454_AR=181;PCR_454_RR=2041 +20 62421536 . C T . . Sample=NA20521;GT=0/1;PCR_454_AR=856;PCR_454_RR=910 +20 62421536 . C T . . Sample=NA20543;GT=0/1;PCR_454_AR=865;PCR_454_RR=854 +20 62593676 . C T . . Sample=NA20291;GT=0/1;PCR_454_AR=1038;PCR_454_RR=995 +20 62594479 . C T . . Sample=NA19746;GT=0/1;PCR_454_AR=349;PCR_454_RR=347 +20 62595981 . C T . . Sample=NA19172;GT=0/1;PCR_454_AR=440;PCR_454_RR=415 +20 62630426 . C T . . Sample=NA19428;GT=0/1;PCR_454_AR=1246;PCR_454_RR=1277 +20 62632542 . C T . . Sample=NA18501;GT=0/1;PCR_454_AR=1203;PCR_454_RR=1150 +20 62657404 . C T . . Sample=NA18612;GT=0/1;PCR_454_AR=1480;PCR_454_RR=1071 +20 62700725 . G A . . Sample=NA19020;GT=0/1;PCR_454_AR=832;PCR_454_RR=815 +20 62700725 . G A . . Sample=NA19036;GT=0/1;PCR_454_AR=1024;PCR_454_RR=966 +20 62729481 . C T . . Sample=NA20276;GT=0/1;PCR_454_AR=401;PCR_454_RR=408 +20 62899302 . T C . . Sample=HG00104;GT=0/0;PCR_454_AR=10;PCR_454_RR=871 +20 62899302 . T C . . Sample=HG00128;GT=0/0;PCR_454_AR=2;PCR_454_RR=950 diff --git a/tests/tabix_data/vcf/3.vcf b/tests/tabix_data/vcf/3.vcf new file mode 100644 index 0000000..a3f2e0f --- /dev/null +++ b/tests/tabix_data/vcf/3.vcf @@ -0,0 +1,1000 @@ +##fileformat=VCFv4.0 +##filedate=2010-06-21 +##reference=NCBI36 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +#CHROM POS ID REF ALT QUAL FILTER INFO +1 1000153 . TCACAC TC 100 PASS AF=0.115095;HP=1;NF=16;NR=13;NS=52;CA=0;DP=615 +1 1000906 . CAG CG 48 PASS AF=0.0772696;HP=1;NF=2;NR=9;NS=51;CA=0;DP=281 +1 1000950 rs60561655;-/G CGG CG 100 PASS AF=0.447771;HP=5;DB;NF=10;NR=20;NS=50;CA=M;DP=291 +1 1010786 rs36095298;-/G,mills,venter AC AGC 100 PASS AF=0.774334;HP=1;DB;NF=21;NR=27;NS=51;CA=0;DP=306 +1 1026158 . TG TGGGGGG 100 PASS AF=0.115637;HP=1;NF=5;NR=2;NS=52;CA=0;DP=591 +1 1028860 mills,venter ACTCC AC 10 PASS AF=0.0107751;HP=1;NF=5;NR=4;NS=52;CA=0;DP=522 +1 1040517 . CA CAA 100 PASS AF=0.0577672;HP=1;NF=7;NR=4;NS=52;CA=0;DP=426 +1 1043690 rs5772037;-/G,venter TG TGG 100 PASS AF=0.065857;HP=3;DB;NF=5;NR=8;NS=51;CA=0;DP=427 +1 1049375 . TA TACACACCTGAGCACACACACCTGTGCA 100 PASS AF=0.0808078;HP=1;NF=1;NR=1;NS=51;CA=M;DP=643 +1 1055459 venter ACC AC 100 PASS AF=0.936429;HP=2;NF=13;NR=24;NS=51;CA=M;DP=342 +1 1056251 rs34287831;-/A,venter CT CTT 100 PASS AF=0.725164;HP=1;DB;NF=31;NR=20;NS=52;CA=0;DP=375 +1 1057459 rs55853944;-/AG,venter CAGG CG 100 PASS AF=0.525146;HP=1;DB;NF=16;NR=18;NS=51;CA=0;DP=331 +1 1057537 rs35574593;-/CC,watson TG TGGG 100 PASS AF=0.591248;HP=1;DB;NF=30;NR=12;NS=50;CA=0;DP=341 +1 1058532 rs34990026;-/A GTT GT 100 PASS AF=0.702381;HP=4;DB;NF=29;NR=32;NS=52;CA=0;DP=405 +1 1058695 rs56086046;-/GCCTGCCTGCCCGGCC,watson CGCCGCCTGCCTGCCCGG CG 100 PASS AF=0.601284;HP=1;DB;NF=24;NR=23;NS=51;CA=0;DP=365 +1 1073880 . AC ACC 13 PASS AF=0.0555821;HP=2;NF=1;NR=6;NS=52;CA=0;DP=457 +1 1087270 mills,venter,watson CCCCAC CC 100 PASS AF=0.990156;HP=4;NF=32;NR=27;NS=50;CA=0;DP=339 +1 1088683 rs5772039;-/C,venter TCC TC 100 PASS AF=0.957928;HP=9;DB;NF=31;NR=26;NS=49;CA=0;DP=336 +1 1093553 . TC TCAC 100 PASS AF=0.962343;HP=5;NF=44;NR=17;NS=51;CA=0;DP=324 +1 1111698 rs57346441;-/TG,watson CA CTGA 100 PASS AF=0.0986662;HP=1;DB;NF=8;NR=5;NS=52;CA=0;DP=528 +1 1117471 . GT GTT 48 PASS AF=0.04843;HP=6;NF=20;NR=8;NS=52;CA=0;DP=510 +1 1118641 . CT CTTAT 38 PASS AF=0.0574453;HP=1;NF=5;NR=1;NS=51;CA=0;DP=424 +1 1119225 rs60117456;-/C AC ACC 50 PASS AF=0.0255886;HP=4;DB;NF=8;NR=5;NS=52;CA=0;DP=522 +1 1121774 . GCTGTTCAGACCTG GG 100 PASS AF=0.0749767;HP=1;NF=6;NR=6;NS=51;CA=0;DP=508 +1 1123178 . AACA AA 14 PASS AF=0.0195065;HP=3;NF=2;NR=3;NS=49;CA=0;DP=329 +1 1134362 . GGAG GG 100 PASS AF=0.142028;HP=2;NF=12;NR=17;NS=51;CA=0;DP=407 +1 1140087 . TCA TA 19 PASS AF=0.0635822;HP=1;NF=2;NR=5;NS=51;CA=0;DP=446 +1 1141951 . CTG CG 100 PASS AF=0.100135;HP=1;NF=7;NR=7;NS=52;CA=0;DP=463 +1 1148304 rs34808371;-/GT,venter GCAC GC 100 PASS AF=0.0786699;HP=1;DB;NF=11;NR=18;NS=52;CA=0;DP=687 +1 1148425 rs57524763;-/AC AACA AA 100 PASS AF=0.0744913;HP=2;DB;NF=17;NR=8;NS=51;CA=0;DP=647 +1 1149524 . GTTTTAT GT 100 PASS AF=0.0475567;HP=4;NF=19;NR=14;NS=50;CA=0;DP=395 +1 1150963 . CGCCACAGACACGGGCCACACACTCCACATG CG 100 PASS AF=0.111384;HP=1;NF=46;NR=28;NS=50;CA=0;DP=510 +1 1151863 . GT GCT 100 PASS AF=0.126132;HP=1;NF=8;NR=7;NS=52;CA=0;DP=416 +1 1153674 rs3831195;-/ACAG GG GGACAG 18 PASS AF=0.0388728;HP=2;DB;NF=3;NR=2;NS=51;CA=0;DP=418 +1 1154612 . GT GCT 100 PASS AF=0.0630518;HP=1;NF=7;NR=4;NS=52;CA=0;DP=531 +1 1155143 . GCAC GC 100 PASS AF=0.0991605;HP=1;NF=25;NR=23;NS=52;CA=0;DP=540 +1 1155183 . CATG CG 100 PASS AF=0.0714383;HP=1;NF=5;NR=8;NS=52;CA=0;DP=527 +1 1156953 rs57672822;-/ACCCCGGGA CCCCCGGGAAC CC 59 PASS AF=0.0847102;HP=5;DB;NF=5;NR=8;NS=50;CA=0;DP=312 +1 1164370 . AA AACATGCATCCA 100 PASS AF=0.0550752;HP=2;NF=2;NR=1;NS=51;CA=0;DP=481 +1 1166826 . AC ACC 11 PASS AF=0.0735648;HP=1;NF=1;NR=10;NS=52;CA=0;DP=379 +1 1167781 rs3835300;-/T CTG CG 100 PASS AF=0.0719128;HP=1;DB;NF=3;NR=3;NS=50;CA=0;DP=360 +1 1180776 rs35025185;-/T,mills CTT CT 15 PASS AF=0.0182173;HP=3;DB;NF=5;NR=1;NS=52;CA=0;DP=526 +1 1184391 . GC GCAC 16 PASS AF=0.0187867;HP=1;NF=2;NR=6;NS=51;CA=M;DP=521 +1 1204971 . TGG TG 100 PASS AF=0.0564084;HP=6;NF=11;NR=6;NS=50;CA=0;DP=419 +1 1207801 rs35647244;-/GT,watson CC CCAC 100 PASS AF=0.034013;HP=2;DB;NF=9;NR=4;NS=52;CA=0;DP=624 +1 1213486 . GTCT GT 100 PASS AF=0.504039;HP=1;NF=9;NR=5;NS=50;CA=M;DP=372 +1 1217527 rs3831920;-/CTCA,watson TTGAGT TT 100 PASS AF=0.098042;HP=2;DB;NF=11;NR=14;NS=51;CA=0;DP=444 +1 1224625 . AGG AG 40 PASS AF=0.0395551;HP=5;NF=4;NR=4;NS=51;CA=0;DP=406 +1 1228918 rs35156558;-/GGA,venter CC CCCTC 100 PASS AF=0.999996;HP=5;DB;NF=24;NR=30;NS=49;CA=0;DP=268 +1 1232491 . CTACCTGACCTTC CC 13 PASS AF=0.0510512;HP=1;NF=5;NR=5;NS=52;CA=0;DP=510 +1 1236119 . CGGCTCTGGGTCACAGGTG CG 17 PASS AF=0.0581287;HP=2;NF=6;NR=8;NS=49;CA=M;DP=277 +1 1245266 rs5772041;-/G,venter TGG TG 100 PASS AF=0.928175;HP=4;DB;NF=39;NR=39;NS=52;CA=0;DP=431 +1 1286232 venter,watson GACA GA 100 PASS AF=0.878082;HP=1;NF=31;NR=15;NS=50;CA=0;DP=249 +1 1292184 watson TG TGTGTGCAG 100 PASS AF=0.92351;HP=1;NF=36;NR=17;NS=51;CA=0;DP=633 +1 1475307 rs35008066;-/G,venter GCC GC 59 PASS AF=0.0854422;HP=2;DB;NF=2;NR=3;NS=52;CA=0;DP=372 +1 1476800 rs3835461;-/C AG AGG 100 PASS AF=0.239098;HP=1;DB;NF=13;NR=18;NS=52;CA=0;DP=491 +1 1482738 rs34962853;-/AT,watson CATA CA 100 PASS AF=0.1747;HP=1;DB;NF=28;NR=14;NS=51;CA=0;DP=441 +1 1483969 rs3835460;-/T,mills CG CAG 100 PASS AF=0.180671;HP=5;DB;NF=6;NR=13;NS=52;CA=0;DP=512 +1 1484993 rs35384209;-/CT CA CAGA 100 PASS AF=0.182804;HP=1;DB;NF=9;NR=15;NS=52;CA=0;DP=441 +1 1485720 . TC TCGTAC 39 PASS AF=0.0207216;HP=1;NF=1;NR=3;NS=51;CA=0;DP=498 +1 1487504 rs35885836;-/AGAA,venter,watson TTTTCT TT 100 PASS AF=0.210263;HP=4;DB;NF=16;NR=20;NS=52;CA=0;DP=574 +1 1490348 rs3835459;-/CATGATCCGCCTGCCTT CAAGGCAGGCGGATCATGA CA 59 PASS AF=0.230233;HP=2;DB;NF=5;NR=66;NS=51;CA=M;DP=377 +1 1490873 . GT GGGCCCGACGGTGCT 100 PASS AF=0.133846;HP=1;NF=8;NR=3;NS=52;CA=0;DP=572 +1 1495811 venter ACC AC 100 PASS AF=0.232263;HP=8;NF=12;NR=29;NS=52;CA=0;DP=481 +1 1502734 rs35576478;-/G,venter AC ACC 100 PASS AF=0.221604;HP=4;DB;NF=16;NR=9;NS=51;CA=0;DP=388 +1 1507556 . AC ACC 42 PASS AF=0.0176775;HP=1;NF=1;NR=4;NS=51;CA=0;DP=511 +1 1508235 . CT CTT 100 PASS AF=0.2555;HP=1;NF=18;NR=15;NS=51;CA=0;DP=535 +1 1508689 . CG CGG 100 PASS AF=0.0922424;HP=5;NF=19;NR=17;NS=51;CA=0;DP=568 +1 1510533 . TTTTGT TT 100 PASS AF=0.423696;HP=7;NF=37;NR=39;NS=52;CA=0;DP=387 +1 1511216 . TA TAATAATAATAAAA 39 PASS AF=0.542394;HP=2;NF=7;NR=3;NS=51;CA=0;DP=331 +1 1512041 . CAAAAGTAAA CA 33 PASS AF=0.0333379;HP=4;NF=12;NR=13;NS=52;CA=0;DP=440 +1 1514403 . TTTTAT TT 100 PASS AF=0.771875;HP=5;NF=24;NR=58;NS=50;CA=0;DP=243 +1 1520133 rs34595829;-/GT,venter GA GACA 100 PASS AF=0.432871;HP=1;DB;NF=24;NR=19;NS=52;CA=0;DP=966 +1 1520238 venter,watson TG TGAGACAG 100 PASS AF=0.606404;HP=1;NF=52;NR=36;NS=52;CA=M;DP=847 +1 1520271 . CA CAGA 100 PASS AF=0.169509;HP=1;NF=48;NR=39;NS=52;CA=M;DP=736 +1 1520357 . CAGAGAGA CA 100 PASS AF=0.218715;HP=1;NF=44;NR=30;NS=52;CA=M;DP=708 +1 1520549 . CAGA CA 100 PASS AF=0.257166;HP=1;NF=41;NR=40;NS=52;CA=0;DP=790 +1 1520595 . CAGA CA 100 PASS AF=0.107822;HP=1;NF=52;NR=44;NS=52;CA=M;DP=804 +1 1520983 . GA GAGAGAGACA 34 PASS AF=0.0372679;HP=1;NF=2;NR=3;NS=52;CA=0;DP=610 +1 1521139 . GA GAGACA 100 PASS AF=0.667375;HP=1;NF=10;NR=7;NS=52;CA=M;DP=537 +1 1521387 . GAGACA GA 100 PASS AF=0.361313;HP=1;NF=13;NR=34;NS=52;CA=M;DP=598 +1 1521833 . GACA GA 100 PASS AF=0.193306;HP=1;NF=23;NR=17;NS=52;CA=0;DP=737 +1 1522371 . CC CCCTCAGCTGGACTC 100 PASS AF=0.480499;HP=3;NF=11;NR=12;NS=51;CA=0;DP=535 +1 1530305 . AG AGG 15 PASS AF=0.0737746;HP=3;NF=13;NR=4;NS=51;CA=0;DP=569 +1 1536491 rs36101309;-/GA ATCT AT 100 PASS AF=0.128408;HP=1;DB;NF=22;NR=14;NS=51;CA=0;DP=621 +1 1537805 venter TT TCT 100 PASS AF=0.350404;HP=8;NF=3;NR=18;NS=52;CA=M;DP=419 +1 1539301 . CAAAAGA CA 56 PASS AF=0.0156055;HP=4;NF=9;NR=2;NS=51;CA=0;DP=577 +1 1549566 venter ATT AT 100 PASS AF=0.505899;HP=3;NF=25;NR=27;NS=52;CA=0;DP=451 +1 1554815 . TGG TG 100 PASS AF=0.158582;HP=6;NF=12;NR=6;NS=48;CA=0;DP=271 +1 1575329 . GCAAC GC 12 PASS AF=0.0174116;HP=1;NF=27;NR=21;NS=52;CA=0;DP=554 +1 1575977 rs35072492;-/A TCC TC 100 PASS AF=0.626664;HP=3;DB;NF=23;NR=50;NS=51;CA=0;DP=361 +1 1577203 venter,watson AA AAAACA 100 PASS AF=0.979791;HP=4;NF=59;NR=37;NS=52;CA=0;DP=498 +1 1584062 rs5772057;-/T,venter CT CTT 100 PASS AF=0.992883;HP=1;DB;NF=34;NR=22;NS=46;CA=0;DP=291 +1 1589954 . TTGT TT 100 PASS AF=0.0452889;HP=8;NF=5;NR=13;NS=51;CA=0;DP=424 +1 1611607 venter ATA AA 100 PASS AF=0.528232;HP=1;NF=7;NR=10;NS=50;CA=M;DP=243 +1 1615408 venter AC ACGC 100 PASS AF=0.553544;HP=9;NF=16;NR=20;NS=51;CA=M;DP=247 +1 1618248 . CTGA CA 100 PASS AF=0.0412633;HP=1;NF=5;NR=2;NS=51;CA=0;DP=789 +1 1637509 venter CG CTG 100 PASS AF=0.956642;HP=1;NF=57;NR=41;NS=52;CA=M;DP=533 +1 1637828 rs34259364;-/AT,mills CG CATG 100 PASS AF=0.24683;HP=1;DB;NF=5;NR=57;NS=52;CA=0;DP=744 +1 1638199 . GA GATGTTAA 100 PASS AF=0.962724;HP=1;NF=22;NR=22;NS=52;CA=0;DP=480 +1 1638366 venter AT ATT 100 PASS AF=0.471703;HP=4;NF=50;NR=16;NS=52;CA=0;DP=738 +1 1638469 rs34392519;-/AGC,mills GA GAGCA 100 PASS AF=0.428728;HP=1;DB;NF=34;NR=23;NS=52;CA=0;DP=804 +1 1639339 rs36127854;-/CT,venter TA TAGA 100 PASS AF=0.27562;HP=1;DB;NF=10;NR=15;NS=52;CA=0;DP=961 +1 1639610 . ATTCTC AC 59 PASS AF=0.0697107;HP=2;NF=31;NR=24;NS=52;CA=M;DP=817 +1 1640937 venter CG CTCGCTCTGTCACCCAGGCTG 100 PASS AF=0.639983;HP=2;NF=4;NR=3;NS=52;CA=M;DP=638 +1 1641995 rs34986248;-/ATT,venter,watson CT CTTAT 100 PASS AF=0.924551;HP=2;DB;NF=33;NR=29;NS=52;CA=0;DP=414 +1 1654133 rs34171153;-/ATCG TA TATCGA 100 PASS AF=0.2409;HP=1;DB;NF=10;NR=13;NS=52;CA=0;DP=463 +1 1656307 rs35516110;-/GTTT,venter GT GGTTTT 100 PASS AF=0.686901;HP=6;DB;NF=22;NR=20;NS=51;CA=0;DP=293 +1 1674207 venter CC CCCTC 100 PASS AF=0.303909;HP=3;NF=26;GC;NR=29;NS=52;CA=0;DP=534 +1 1675781 . TCCCTGGGACCGAAGTCGCCCCAC TC 100 PASS AF=0.270579;HP=3;NF=25;NR=24;NS=52;CA=0;DP=473 +1 1679986 rs35357728;-/TG,mills,venter,watson AA AACA 100 PASS AF=0.956895;HP=4;DB;NF=60;NR=58;NS=52;CA=0;DP=520 +1 1684058 . AAATGA AA 100 PASS AF=0.508762;HP=4;NF=48;NR=55;NS=52;CA=0;DP=471 +1 1684177 . TG TGGGGGGGG 100 PASS AF=0.126497;HP=1;NF=5;NR=3;NS=51;CA=0;DP=449 +1 1691268 rs35459537;-/AAAAACAAAAAC,mills,venter CAAAACAAAAACAA CA 100 PASS AF=0.305762;HP=4;DB;NF=54;NR=62;NS=51;CA=0;DP=443 +1 1697760 mills,venter GAAACA GA 100 PASS AF=0.276545;HP=3;NF=21;NR=43;NS=52;CA=0;DP=564 +1 1700966 rs34974144;-/AT,venter TT TTGT 100 PASS AF=0.37365;HP=3;DB;NF=34;NR=30;NS=52;CA=0;DP=445 +1 1715347 . TG TGGGGGG 24 PASS AF=0.0415083;HP=1;NF=4;NR=5;NS=52;CA=0;DP=519 +1 1717050 rs56070879;-/ACAAAAAA,venter TC TCAAAAAAAC 100 PASS AF=0.90619;HP=1;DB;NF=11;NR=7;NS=52;CA=0;DP=442 +1 1729683 . ACT AT 100 PASS AF=0.104273;HP=1;NF=9;NR=11;NS=52;CA=0;DP=587 +1 1729941 rs55730045;-/TTTG,watson TTTTGT TT 100 PASS AF=0.270089;HP=5;DB;NF=25;NR=44;NS=52;CA=M;DP=458 +1 1733706 rs4012956;-/GT,mills,venter TA TACA 100 PASS AF=0.737658;HP=1;DB;NF=58;NR=26;NS=52;CA=M;DP=547 +1 1750193 rs34820549;-/TG,venter TA TACA 100 PASS AF=0.417596;HP=1;DB;NF=42;NR=29;NS=52;CA=0;DP=495 +1 1761838 . GCAC GC 17 PASS AF=0.0186129;HP=1;NF=23;NR=23;NS=52;CA=0;DP=566 +1 1767123 . TACACACACACACACACACACACACACACACA TA 100 PASS AF=0.205885;HP=1;NF=32;NR=32;NS=52;CA=0;DP=560 +1 1767308 . AG ATG 12 PASS AF=0.363076;HP=2;NF=25;NR=12;NS=52;CA=0;DP=611 +1 1768358 . ACA AA 11 NoQCALL AF=0.0311546;HP=1;NF=1;NR=4;NS=52;CA=0;DP=502 +1 1768592 . AC ACAACAAAATCCCTTTTTC 100 PASS AF=0.0974177;HP=1;NF=2;NR=5;NS=52;CA=0;DP=597 +1 1769336 rs34011234;-/TA,venter,watson CT CTAT 100 PASS AF=0.385782;HP=1;DB;NF=21;NR=42;NS=52;CA=0;DP=534 +1 1769673 rs56979938;-/A,venter AGA AA 21 PASS AF=0.232442;HP=1;DB;NF=9;NR=3;NS=52;CA=0;DP=465 +1 1771291 . TG TGG 100 PASS AF=0.18937;HP=2;NF=5;NR=15;NS=52;CA=0;DP=590 +1 1778545 . TA TAAA 100 PASS AF=0.155668;HP=3;NF=5;NR=12;NS=52;CA=0;DP=621 +1 1778604 rs34483468;-/AGCC,venter GG GGGCTG 100 PASS AF=0.135521;HP=4;DB;NF=22;NR=28;NS=52;CA=0;DP=629 +1 1786587 watson ACCA AA 26 PASS AF=0.0677562;HP=2;NF=15;NR=22;NS=52;CA=M;DP=404 +1 1797136 rs59528461;-/C,venter TCC TC 100 PASS AF=0.94689;HP=10;DB;NF=58;NR=57;NS=52;CA=0;DP=531 +1 1797791 rs35226472;-/CT,venter CG CGAG 100 PASS AF=0.383219;HP=1;DB;NF=64;NR=38;NS=52;CA=0;DP=673 +1 1802225 rs34339560;-/A,mills,venter CAA CA 100 PASS AF=0.973419;HP=2;DB;NF=64;NR=71;NS=52;CA=0;DP=635 +1 1802305 . GGAG GG 100 PASS AF=0.273326;HP=2;NF=41;NR=34;NS=52;CA=0;DP=695 +1 1806743 . TTAGAT TT 100 PASS AF=0.179706;HP=2;NF=9;NR=6;NS=52;CA=0;DP=377 +1 1809681 . AG AGG 21 PASS AF=0.133833;HP=2;NF=7;NR=3;NS=52;CA=0;DP=482 +1 1810283 . AC ACC 30 PASS AF=0.0430128;HP=2;NF=4;NR=11;NS=52;CA=0;DP=523 +1 1810555 . CTTAAT CT 100 PASS AF=0.0498379;HP=2;NF=9;NR=7;NS=52;CA=0;DP=521 +1 1812953 rs34135959;-/TCTC CA CAGAGA 100 PASS AF=0.311555;HP=1;DB;NF=6;NR=8;NS=42;CA=0;DP=242 +1 1819911 . CATG CG 100 PASS AF=0.0319085;HP=1;NF=3;NR=6;NS=52;CA=0;DP=765 +1 1819947 rs60517384;-/AAGTTGGATATACACACAT CACACACATAAGTTGGATATA CA 100 PASS AF=0.0935091;HP=1;DB;NF=59;NR=69;NS=52;CA=0;DP=854 +1 1825723 venter AA AAAATAAATAAATA 100 PASS AF=0.348026;HP=4;NF=9;NR=10;NS=52;CA=0;DP=373 +1 1835530 . GTGAGAGTTGTTG GG 100 PASS AF=0.15298;HP=1;NF=12;NR=1;NS=51;CA=0;DP=528 +1 1838692 rs5772055;-/AC,mills AA AACA 100 PASS AF=0.0441449;HP=3;DB;NF=2;NR=3;NS=51;CA=0;DP=360 +1 1843475 rs3039777;-/ACTG,venter,watson TC TCTGAC 100 PASS AF=0.999998;HP=1;DB;NF=38;NR=39;NS=50;CA=0;DP=422 +1 1850674 . AGG AG 100 PASS AF=0.474687;HP=3;NF=7;NR=1;NS=49;CA=0;DP=271 +1 1855740 watson GT GTGTAT 100 PASS AF=0.646893;HP=1;NF=42;NR=28;NS=51;CA=0;DP=653 +1 1856762 . CACAGG CG 14 PASS AF=0.0324715;HP=1;NF=1;NR=2;NS=50;CA=M;DP=379 +1 1857166 . TACA TA 100 PASS AF=0.0531955;HP=1;NF=39;NR=29;NS=52;CA=0;DP=634 +1 1859140 mills ACACCAGGTCCACCTCTGGACACAGGTCCACCC AC 100 PASS AF=0.180806;HP=1;NF=26;NR=15;NS=52;CA=0;DP=672 +1 1859353 rs35385292;-/TC,venter ACTC AC 100 PASS AF=0.493919;HP=1;DB;NF=26;NR=38;NS=52;CA=M;DP=641 +1 1859424 rs34242289;-/CA,venter TCAG TG 100 PASS AF=0.3962;HP=1;DB;NF=40;NR=32;NS=52;CA=M;DP=695 +1 1859520 . TCAC TC 100 PASS AF=0.234548;HP=1;NF=26;NR=23;NS=52;CA=0;DP=729 +1 1859631 rs35205487;-/GA,venter AC ACTC 100 PASS AF=0.347295;HP=1;DB;NF=15;NR=28;NS=52;CA=0;DP=710 +1 1859792 rs34050188;-/AT,watson CG CATG 100 PASS AF=0.715253;HP=1;DB;NF=35;NR=44;NS=52;CA=0;DP=590 +1 1864576 . CG CGG 13 PASS AF=0.0158703;HP=1;NF=3;NR=2;NS=51;CA=0;DP=556 +1 1867274 rs34832935;-/C TGG TG 100 PASS AF=0.304336;HP=8;DB;NF=38;NR=23;NS=51;CA=0;DP=538 +1 1869711 rs56005703;-/ATAT,watson AA AATATA 100 PASS AF=0.652198;HP=3;DB;NF=16;NR=16;NS=51;CA=0;DP=349 +1 1870233 . TC TCCCTCCCTTCTTTCCTTCCCTTTCCCTCC 100 PASS AF=0.408049;HP=2;NF=11;NR=9;NS=52;CA=0;DP=814 +1 1870305 . CC CCTTTCCCTCCCTTACTCCTTCCTTCCTTC 100 PASS AF=0.121733;HP=4;NF=1;NR=5;NS=52;CA=0;DP=680 +1 1870363 . CT CTT 100 PASS AF=0.11398;HP=2;NF=4;NR=6;NS=52;CA=0;DP=680 +1 1870863 rs35875775;-/C,venter TT TGT 100 PASS AF=0.744276;HP=2;DB;NF=43;NR=22;NS=52;CA=0;DP=455 +1 1873164 . GT GTT 100 PASS AF=0.387355;HP=3;NF=20;NR=18;NS=52;CA=0;DP=523 +1 1873889 rs58267869;-/AAGA AA AAAAGA 100 PASS AF=0.252999;HP=5;DB;NF=57;NR=31;NS=52;CA=0;DP=536 +1 1874122 rs35595511;-/T TAA TA 100 PASS AF=0.338059;HP=9;DB;NF=38;NR=38;NS=51;CA=0;DP=519 +1 1876064 watson AG AGAGTG 100 PASS AF=0.0829624;HP=1;NF=6;NR=5;NS=52;CA=0;DP=465 +1 1876204 . AC ACAGC 100 PASS AF=0.256855;HP=1;NF=14;NR=10;NS=52;CA=0;DP=483 +1 1876616 . GC GCTGGTGCGCGTC 100 PASS AF=0.0656988;HP=1;NF=5;NR=2;NS=51;CA=0;DP=420 +1 1876971 rs3838975;-/G GCC GC 21 PASS AF=0.201137;HP=2;DB;NF=15;NR=6;NS=52;CA=0;DP=439 +1 1877704 . CCTGC CC 19 PASS AF=0.0183173;HP=2;NF=7;NR=13;NS=52;CA=0;DP=436 +1 1884832 rs34937714;-/T CA CAA 100 PASS AF=0.254902;HP=3;DB;NF=27;NR=6;NS=52;CA=0;DP=449 +1 1886549 rs3838974;-/T GG GAG 100 PASS AF=0.153123;HP=4;DB;NF=11;NR=10;NS=52;CA=0;DP=456 +1 1889260 rs55954278;-/ATGA GT GTGAAT 100 PASS AF=0.630203;HP=1;DB;NF=12;NR=17;NS=52;CA=0;DP=656 +1 1889311 . GTGAAT GT 100 PASS AF=0.167491;HP=1;NF=33;NR=18;NS=52;CA=0;DP=606 +1 1889402 rs34520694;-/GTGA AT ATGAGT 100 PASS AF=0.306146;HP=1;DB;NF=24;NR=32;NS=52;CA=0;DP=916 +1 1889884 rs56985589;-/G TGC TC 100 PASS AF=0.347999;HP=1;DB;NF=20;NR=28;NS=51;CA=0;DP=537 +1 1889966 rs61233860;-/CCT,watson TC TCTCC 100 PASS AF=0.211403;HP=1;DB;NF=12;NR=14;NS=52;CA=0;DP=554 +1 1892548 . ACTC AC 21 PASS AF=0.0207771;HP=1;NF=4;NR=3;NS=52;CA=0;DP=750 +1 1900826 . AACA AA 100 PASS AF=0.122368;HP=2;NF=13;NR=6;NS=52;CA=M;DP=435 +1 1908846 venter CT CTT 100 PASS AF=0.30139;HP=10;NF=11;NR=28;NS=51;CA=0;DP=350 +1 1910458 . TGAG TG 15 PASS AF=0.0208928;HP=1;NF=23;NR=12;NS=52;CA=0;DP=514 +1 1927207 rs61162553;-/GTTCTCTCTCTCTCTCTCTC,venter CTCTCTCTCTCTCTCTCTCGTT CT 100 PASS AF=0.399955;HP=1;DB;NF=34;NR=47;NS=51;CA=0;DP=427 +1 1929307 rs36066718;-/T CAA CA 30 PASS AF=0.114706;HP=10;DB;NF=24;NR=15;NS=52;CA=0;DP=520 +1 1933578 . CA CAAAATAAAATA 100 PASS AF=0.562689;HP=4;NF=21;NR=28;NS=52;CA=0;DP=359 +1 1947079 rs3831907;-/C CGG CG 100 PASS AF=0.131218;HP=3;DB;NF=4;NR=10;NS=52;CA=0;DP=316 +1 1949721 rs35354651;-/G GC GCC 100 PASS AF=0.218024;HP=1;DB;NF=11;NR=5;NS=51;CA=0;DP=306 +1 1965555 rs56225932;-/CA,venter TACA TA 100 PASS AF=0.743144;HP=1;DB;NF=50;NR=67;NS=52;CA=0;DP=679 +1 1966402 venter,watson GC GCCGCC 100 PASS AF=0.988372;HP=2;NF=36;NR=16;NS=46;CA=0;DP=232 +1 1989567 . AC ACC 12 PASS AF=0.0334278;HP=6;NF=10;NR=9;NS=52;CA=0;DP=367 +1 1992350 . CA CACCTGGGCGTGTGA 56 PASS AF=0.19029;HP=1;NF=6;NR=3;NS=52;CA=0;DP=412 +1 1993852 rs34106910;-/G,venter GCC GC 100 PASS AF=0.178292;HP=2;DB;NF=15;NR=7;NS=51;CA=0;DP=388 +1 1996153 . GT GTT 59 PASS AF=0.126167;HP=8;NF=7;NR=14;NS=51;CA=0;DP=436 +1 2010531 rs35300904;-/C,venter CA CGA 100 PASS AF=0.2131;HP=1;DB;NF=18;NR=7;NS=52;CA=0;DP=418 +1 2019409 rs55716481;-/AGTGACTAAGGTGACCAGG,venter CA CAGGTGACCAGGAGTGACTAA 100 PASS AF=0.901172;HP=1;DB;NF=17;NR=16;NS=52;CA=0;DP=600 +1 2019867 rs58602729;-/CT CCTC CC 100 PASS AF=0.15521;HP=3;DB;NF=6;NR=12;NS=52;CA=0;DP=542 +1 2019961 mills CGTTTTGTTTTG CG 100 PASS AF=0.239816;HP=1;NF=44;NR=59;NS=52;CA=0;DP=513 +1 2027926 . CT CTT 100 PASS AF=0.591615;HP=1;NF=7;NR=4;NS=51;CA=M;DP=262 +1 2028042 . CT CTT 100 PASS AF=0.242884;HP=1;NF=28;NR=12;NS=51;CA=M;DP=738 +1 2031773 . GA GGGTA 100 PASS AF=0.197429;HP=1;NF=15;NR=7;NS=51;CA=0;DP=405 +1 2036771 . AC ACCCC 100 PASS AF=0.173415;HP=3;NF=1;NR=5;NS=52;CA=0;DP=532 +1 2040362 venter CT CTT 100 PASS AF=0.61548;HP=3;NF=31;NR=33;NS=52;CA=0;DP=522 +1 2042747 . CG CGGGGG 100 PASS AF=0.132985;HP=2;NF=11;NR=6;NS=51;CA=0;DP=880 +1 2042976 . GT GTTATT 100 PASS AF=0.225391;HP=2;NF=13;NR=25;NS=51;CA=M;DP=882 +1 2045297 . GT GTAGTTATT 36 PASS AF=0.513037;HP=2;NF=5;NR=16;NS=46;CA=M;DP=269 +1 2048642 rs56348719;-/A CAG CG 100 PASS AF=0.626672;HP=1;DB;NF=15;NR=37;NS=51;CA=0;DP=337 +1 2055895 watson AT AATT 100 PASS AF=0.183323;HP=1;NF=10;NR=14;NS=52;CA=0;DP=511 +1 2058884 watson GCCTC GC 100 PASS AF=0.258368;HP=2;NF=23;NR=18;NS=51;CA=0;DP=533 +1 2068674 . CTCTAT CT 100 PASS AF=0.0693035;HP=1;NF=7;NR=5;NS=52;CA=0;DP=600 +1 2076576 . GTGAT GT 100 PASS AF=0.0691863;HP=1;NF=32;NR=24;NS=52;CA=0;DP=918 +1 2076741 . GTGAT GT 49 PASS AF=0.200249;HP=1;NF=13;NR=21;NS=51;CA=0;DP=758 +1 2076895 . GTGAT GT 100 PASS AF=0.134423;HP=1;NF=21;NR=19;NS=51;CA=0;DP=658 +1 2076954 rs60433546;-/ATG AA AATGA 100 PASS AF=0.310432;HP=2;DB;NF=12;NR=27;NS=52;CA=0;DP=664 +1 2079377 rs3835418;-/T CT CTT 100 PASS AF=0.201153;HP=1;DB;NF=13;NR=15;NS=52;CA=0;DP=451 +1 2081537 rs56068331;-/GTGT CGTGTG CG 13 PASS AF=0.276967;HP=1;DB;NF=58;NR=66;NS=52;CA=0;DP=516 +1 2085600 rs3835419;-/CTGGGCCAACCC GA GACCCCTGGGCCAA 100 PASS AF=0.243746;HP=1;DB;NF=11;NR=6;NS=52;CA=0;DP=535 +1 2087974 . GCC GC 15 PASS AF=0.0623565;HP=8;NF=7;NR=14;NS=52;CA=0;DP=325 +1 2089182 rs34571180;-/CTC,mills,venter GCCTC GC 100 PASS AF=0.116512;HP=2;DB;NF=9;NR=4;NS=51;CA=0;DP=440 +1 2089950 . CG CGGGG 100 PASS AF=0.178382;HP=2;NF=20;NR=7;NS=51;CA=0;DP=444 +1 2091793 rs56317708;-/GATA,venter,watson AA AAGATA 100 PASS AF=0.896718;HP=2;DB;NF=37;NR=55;NS=52;CA=0;DP=525 +1 2094394 watson TCCACC TC 100 PASS AF=0.191274;HP=2;NF=15;NR=11;NS=52;CA=0;DP=554 +1 2099298 . TG TGG 100 PASS AF=0.234547;HP=1;NF=15;NR=4;NS=51;CA=0;DP=434 +1 2101678 . AGACG AG 100 PASS AF=0.0220699;HP=1;NF=10;NR=4;NS=51;CA=0;DP=533 +1 2104518 rs55672189;-/CGTCTC,venter AG AGTCTCCG 32 PASS AF=0.0318159;HP=1;DB;NF=1;NR=2;NS=51;CA=0;DP=303 +1 2110593 rs34825103;-/C TG TGG 100 PASS AF=0.0674605;HP=1;DB;NF=1;NR=4;NS=52;CA=M;DP=336 +1 2114205 . TT TTTGT 14 PASS AF=0.0440601;HP=4;NF=24;NR=27;NS=52;CA=0;DP=414 +1 2118677 rs35613376;-/T,venter GA GAA 100 PASS AF=0.110597;HP=1;DB;NF=4;NR=6;NS=51;CA=0;DP=395 +1 2129208 venter CGTGTGTGTGTGTGTGTGTGTG CG 100 PASS AF=0.312577;HP=1;NF=50;NR=42;NS=51;CA=0;DP=395 +1 2136104 rs34745034;-/AC,venter,watson CTGT CT 100 PASS AF=0.148774;HP=1;DB;NF=9;NR=15;NS=51;CA=0;DP=394 +1 2147798 . CGG CG 100 PASS AF=0.069257;HP=5;NF=3;NR=7;NS=51;CA=0;DP=433 +1 2156467 rs34646035;-/A,venter GG GTG 100 PASS AF=0.0650203;HP=2;DB;NF=3;NR=2;NS=51;CA=0;DP=299 +1 2163248 rs34969427;-/CA,venter,watson CT CTGT 59 PASS AF=0.323344;HP=1;DB;NF=36;NR=42;NS=52;CA=0;DP=622 +1 2168152 rs34184068;-/C TG TGG 100 PASS AF=0.267631;HP=8;DB;NF=12;NR=25;NS=52;CA=0;DP=462 +1 2173905 rs59705675;-/C,venter GCC GC 100 PASS AF=0.519185;HP=4;DB;NF=28;NR=31;NS=52;CA=0;DP=472 +1 2178426 . ATCTCT AT 59 PASS AF=0.0153899;HP=1;NF=1;NR=2;NS=52;CA=0;DP=558 +1 2180516 . TG TGGG 15 PASS AF=0.10873;HP=1;NF=7;NR=3;NS=52;CA=0;DP=495 +1 2193017 rs35691128;-/C,venter TG TGG 100 PASS AF=0.296206;HP=9;DB;NF=9;NR=11;NS=52;CA=0;DP=367 +1 2204648 . AGGGG AG 100 PASS AF=0.0847086;HP=8;NF=9;NR=7;NS=52;CA=0;DP=441 +1 2211603 . TG TGGGGGGGGGG 100 PASS AF=0.176;HP=1;NF=5;NR=9;NS=52;CA=0;DP=507 +1 2211835 rs35471620;-/C,venter CG CGG 100 PASS AF=0.403922;HP=3;DB;NF=20;NR=20;NS=51;CA=0;DP=363 +1 2213004 rs35841716;-/G,mills,venter TGG TG 100 PASS AF=0.938006;HP=7;DB;NF=35;NR=9;NS=52;CA=0;DP=297 +1 2214726 . GC GCC 100 PASS AF=0.415474;HP=9;NF=18;NR=19;NS=51;CA=0;DP=416 +1 2220552 rs35472917;-/C,venter AGG AG 100 PASS AF=0.609848;HP=9;DB;NF=24;NR=22;NS=51;CA=0;DP=385 +1 2221276 . GC GCC 23 PASS AF=0.0895016;HP=2;NF=1;NR=11;NS=50;CA=0;DP=396 +1 2222657 . AC ACC 16 PASS AF=0.0530452;HP=2;NF=1;NR=3;NS=51;CA=0;DP=404 +1 2223900 . CAGGA CA 100 PASS AF=0.105506;HP=1;NF=9;NR=6;NS=52;CA=0;DP=517 +1 2232109 . CAGG CG 100 PASS AF=0.220422;HP=1;NF=14;NR=13;NS=51;CA=0;DP=430 +1 2233476 rs34394327;-/CGTTT,mills,venter,watson CC CCGTTTC 100 PASS AF=0.982218;HP=3;DB;NF=18;NR=31;NS=52;CA=0;DP=378 +1 2238242 rs56200665;-/C,mills GG GCG 100 PASS AF=0.745403;HP=4;DB;NF=37;NR=40;NS=51;CA=0;DP=419 +1 2242260 rs34121936;-/C AGG AG 100 PASS AF=0.107749;HP=4;DB;NF=7;NR=6;NS=51;CA=0;DP=427 +1 2246276 rs61120130;-/TGC,venter GG GGCTG 100 PASS AF=0.447977;HP=3;DB;NF=13;NR=17;NS=51;CA=0;DP=403 +1 2246469 . TT TTCCCTCCCTTCCTTCCTTCCCTCCCT 100 PASS AF=0.0710328;HP=3;NF=8;NR=6;NS=51;CA=B;DP=731 +1 2246586 rs59175712;-/CT CC CCTC 100 PASS AF=0.378253;HP=2;DB;NF=33;NR=29;NS=50;CA=0;DP=515 +1 2248450 rs61135926;-/CACA AA AACACA 100 PASS AF=0.367115;HP=3;DB;NF=24;NR=19;NS=51;CA=0;DP=445 +1 2248486 . CAGA CA 100 PASS AF=0.108968;HP=1;NF=14;NR=11;NS=51;CA=M;DP=382 +1 2248806 rs59142249;-/A CA CAA 100 PASS AF=0.0756571;HP=1;DB;NF=4;NR=12;NS=51;CA=0;DP=728 +1 2255198 . TGCTGGAAAGAACAG TG 100 PASS AF=0.115149;HP=1;NF=9;NR=12;NS=51;CA=0;DP=470 +1 2267148 . ACACACAGA AA 100 PASS AF=0.128331;HP=1;NF=4;NR=6;NS=51;CA=0;DP=681 +1 2268675 . TG TGG 10 PASS AF=0.0406249;HP=1;NF=7;NR=3;NS=52;CA=0;DP=508 +1 2269958 . GCACGCACACGCAC GC 40 PASS AF=0.0297002;HP=1;NF=6;NR=7;NS=50;CA=0;DP=288 +1 2270248 . CCTG CG 100 PASS AF=0.21901;HP=4;NF=14;NR=17;NS=52;CA=0;DP=478 +1 2272049 . AGGGGTGGCACGG AG 100 PASS AF=0.0657391;HP=4;NF=20;NR=19;NS=52;CA=0;DP=465 +1 2272576 rs35424701;-/T TA TAA 100 PASS AF=0.0794139;HP=1;DB;NF=5;NR=5;NS=51;CA=0;DP=426 +1 2273487 . TAA TA 10 PASS AF=0.0158231;HP=10;NF=25;NR=9;NS=51;CA=0;DP=564 +1 2282631 rs59328016;-/G AG AGG 100 PASS AF=0.230902;HP=1;DB;NF=1;NR=6;NS=52;CA=M;DP=310 +1 2282847 rs34534255;-/AG AC ACTC 100 PASS AF=0.108076;HP=1;DB;NF=5;NR=4;NS=50;CA=0;DP=293 +1 2284162 . CA CAA 12 PASS AF=0.0508845;HP=10;NF=7;NR=7;NS=52;CA=0;DP=406 +1 2285124 . TAAAAA TA 100 PASS AF=0.226133;HP=8;NF=14;NR=5;NS=52;CA=0;DP=315 +1 2288255 rs56670882;-/TACATAGAAAAA,venter,watson CAAAATACATAGAA CA 100 PASS AF=0.154865;HP=4;DB;NF=46;NR=50;NS=51;CA=0;DP=466 +1 2291012 venter ATAATT AT 100 PASS AF=0.140631;HP=1;NF=7;NR=9;NS=51;CA=0;DP=365 +1 2292525 rs60502597;-/CACAACAAC,venter CA CACAACCACAA 100 PASS AF=0.411828;HP=1;DB;NF=18;NR=3;NS=52;CA=0;DP=515 +1 2305015 rs35699260;-/T,venter CAG CG 100 PASS AF=0.283002;HP=1;DB;NF=14;NR=17;NS=51;CA=0;DP=451 +1 2310430 . AA AAAGA 100 PASS AF=0.382413;HP=6;NF=20;NR=11;NS=52;CA=0;DP=408 +1 2314333 venter CG CGGACGCCAGGCAGAGGACTTCATCCCAGGCTTCAGTGCTCCTG 100 PASS AF=0.736856;HP=2;NF=1;NR=2;NS=52;CA=0;DP=679 +1 2319273 rs57204595;-/C ACC AC 100 PASS AF=0.125223;HP=2;DB;NF=7;NR=13;NS=52;CA=0;DP=523 +1 2322519 . TCCT TT 100 PASS AF=0.200476;HP=2;NF=2;NR=10;NS=50;CA=0;DP=413 +1 2322562 . TCCACCCTCC TC 100 PASS AF=0.3747;HP=2;NF=8;NR=15;NS=51;CA=0;DP=325 +1 2322680 . CT CTT 100 PASS AF=0.284453;HP=1;NF=26;NR=24;NS=52;CA=M;DP=388 +1 2323804 venter TC TCC 100 PASS AF=0.865363;HP=3;NF=38;NR=47;NS=50;CA=0;DP=438 +1 2325452 . CG CGG 39 PASS AF=0.0242463;HP=3;NF=5;NR=8;NS=51;CA=0;DP=547 +1 2332518 . GA GAA 100 PASS AF=0.0862532;HP=1;NF=5;NR=13;NS=51;CA=0;DP=414 +1 2337697 rs55744642;-/CGACA,venter,watson GG GGGACAG 100 PASS AF=0.867582;HP=3;DB;NF=16;NR=23;NS=51;CA=0;DP=383 +1 2338712 rs34210450;-/AGCTTCCC,mills,venter GC GCCCAGCTTC 100 PASS AF=0.431742;HP=3;DB;NF=24;NR=15;NS=52;CA=0;DP=504 +1 2341261 . TCC TC 20 PASS AF=0.13716;HP=9;NF=4;NR=20;NS=51;CA=0;DP=258 +1 2343280 rs60532031;-/AAAAG,watson GA GAAGAAA 100 PASS AF=0.0544808;HP=2;DB;NF=2;NR=10;NS=49;CA=0;DP=348 +1 2343570 venter AA AAAACA 100 PASS AF=0.0882931;HP=6;NF=28;NR=18;NS=52;CA=0;DP=434 +1 2344468 . TTTTGT TT 100 PASS AF=0.233529;HP=7;NF=49;NR=55;NS=52;CA=0;DP=493 +1 2345597 rs35560781;-/T,venter TAA TA 100 PASS AF=0.501718;HP=6;DB;NF=36;NR=26;NS=52;CA=0;DP=532 +1 2352446 . CGTG CG 16 PASS AF=0.0185013;HP=1;NF=10;NR=25;NS=52;CA=0;DP=432 +1 2352629 rs35263617;-/CA,venter CG CGTG 100 PASS AF=0.4693;HP=1;DB;NF=44;NR=38;NS=51;CA=0;DP=539 +1 2355283 rs35314501;-/G TC TCC 100 PASS AF=0.408524;HP=4;DB;NF=21;NR=18;NS=52;CA=0;DP=436 +1 2356275 rs34090130;-/G,mills AGG AG 100 PASS AF=0.172214;HP=6;DB;NF=16;NR=9;NS=51;CA=0;DP=415 +1 2356753 rs58056215;-/TGGAGGC TGGCTGGAG TG 100 PASS AF=0.178356;HP=2;DB;NF=43;NR=59;NS=51;CA=0;DP=429 +1 2357119 . TGG TG 100 PASS AF=0.179635;HP=6;NF=12;NR=18;NS=52;CA=0;DP=495 +1 2357323 . TCCCT TT 100 PASS AF=0.0931072;HP=3;NF=8;NR=9;NS=52;CA=0;DP=484 +1 2357636 . CTCCACCTTT CT 100 PASS AF=0.252701;HP=1;NF=11;NR=9;NS=47;CA=M;DP=266 +1 2358758 . CAA CA 26 PASS AF=0.0241071;HP=3;NF=1;NR=3;NS=51;CA=0;DP=486 +1 2360543 rs34299371;-/G,venter GCC GC 100 PASS AF=0.460241;HP=7;DB;NF=18;NR=28;NS=51;CA=0;DP=403 +1 2365835 rs35499456;-/A GT GTT 100 PASS AF=0.299753;HP=3;DB;NF=19;NR=20;NS=52;CA=0;DP=431 +1 2370798 . AAACCA AA 100 PASS AF=0.315002;HP=4;NF=56;NR=52;NS=52;CA=0;DP=505 +1 2379981 rs35697743;-/C,venter TGC TC 100 PASS AF=0.0396508;HP=1;DB;NF=1;NR=5;NS=50;CA=0;DP=425 +1 2383170 rs35931789;-/T,venter CC CAC 100 PASS AF=0.441832;HP=7;DB;NF=24;NR=21;NS=52;CA=0;DP=453 +1 2383775 . ACC AC 19 PASS AF=0.0298335;HP=5;NF=6;NR=2;NS=52;CA=0;DP=442 +1 2388741 watson GCCTTCCTCAC GC 100 PASS AF=0.134128;HP=2;NF=6;NR=9;NS=47;CA=0;DP=257 +1 2394261 rs34886292;-/T,venter CA CAA 100 PASS AF=0.640008;HP=1;DB;NF=28;NR=33;NS=51;CA=0;DP=459 +1 2395694 venter AGG AG 100 PASS AF=0.518622;HP=3;NF=29;NR=23;NS=50;CA=0;DP=387 +1 2406522 rs35886782;-/CTCTGGACGCT,venter,watson TG TGCTCTCTGGACG 100 PASS AF=0.531691;HP=1;DB;NF=12;NR=19;NS=51;CA=0;DP=452 +1 2429911 rs3831090;-/AT,mills TT TTAT 100 PASS AF=0.138967;HP=3;DB;NF=24;NR=13;NS=52;CA=0;DP=328 +1 2458287 . CGTG CG 100 PASS AF=0.0696687;HP=1;NF=38;NR=32;NS=52;CA=0;DP=613 +1 2458465 . AGTG AG 31 PASS AF=0.0212179;HP=1;NF=18;NR=32;NS=51;CA=0;DP=600 +1 2460527 . TG TGCGGCCCATCTCAG 51 PASS AF=0.164756;HP=1;NF=1;NR=4;NS=51;CA=0;DP=496 +1 2477778 . AC ACCC 100 PASS AF=0.157812;HP=2;NF=2;NR=11;NS=51;CA=0;DP=389 +1 2501833 rs34000217;-/ATT AA AAATA 100 PASS AF=0.437274;HP=5;DB;NF=19;NR=23;NS=51;CA=0;DP=337 +1 2503512 rs59345997;-/CAAA AAAACA AA 100 PASS AF=0.46764;HP=4;DB;NF=44;NR=29;NS=52;CA=0;DP=456 +1 2506681 . TG TGGG 46 PASS AF=0.310909;HP=9;NF=14;NR=8;NS=51;CA=0;DP=273 +1 2513520 rs5772070;-/G,mills CGG CG 100 PASS AF=0.652792;HP=8;DB;NF=8;NR=34;NS=51;CA=0;DP=275 +1 2517761 . TGC TC 100 PASS AF=0.0839269;HP=1;NF=3;NR=6;NS=50;CA=0;DP=359 +1 2520201 rs34705971;-/C,venter AG AGG 100 PASS AF=0.612406;HP=1;DB;NF=42;NR=46;NS=52;CA=0;DP=518 +1 2521983 . TCAAACAAACAAAC TC 100 PASS AF=0.365407;HP=1;NF=35;NR=29;NS=52;CA=0;DP=501 +1 2522019 . CT CTGTT 100 PASS AF=0.523695;HP=1;NF=28;NR=12;NS=52;CA=0;DP=410 +1 2522313 rs34791736;-/A,venter CT CTT 100 PASS AF=0.621139;HP=1;DB;NF=47;NR=24;NS=52;CA=0;DP=472 +1 2524952 rs35090174;-/CT ACTC AC 100 PASS AF=0.224915;HP=1;DB;NF=19;NR=15;NS=51;CA=0;DP=517 +1 2529806 . CATA CA 100 PASS AF=0.236462;HP=1;NF=22;NR=13;NS=51;CA=0;DP=625 +1 2529841 . CACATA CA 100 PASS AF=0.190786;HP=1;NF=20;NR=19;NS=51;CA=0;DP=663 +1 2530205 rs61132608;-/CATATA,watson CA CACATATA 100 PASS AF=0.547698;HP=1;DB;NF=20;NR=28;NS=52;CA=0;DP=660 +1 2543402 rs5772073;-/GAG,mills TAGGA TA 100 PASS AF=0.24689;HP=1;DB;NF=12;NR=31;NS=52;CA=0;DP=543 +1 2547236 rs58240187;-/AGA,venter,watson GG GGAAG 100 PASS AF=0.531939;HP=2;DB;NF=25;NR=25;NS=52;CA=0;DP=444 +1 2551119 rs35955733;-/CCC,venter,watson GCCCC GC 100 PASS AF=0.606107;HP=9;DB;NF=24;NR=35;NS=52;CA=0;DP=492 +1 2551885 rs36036408;-/AC,venter CGTG CG 100 PASS AF=0.356574;HP=1;DB;NF=39;NR=38;NS=52;CA=0;DP=803 +1 2552076 . CGTG CG 100 PASS AF=0.066645;HP=1;NF=25;NR=15;NS=51;CA=0;DP=782 +1 2552384 . CTGT CT 12 PASS AF=0.0121638;HP=1;NF=13;NR=25;NS=52;CA=0;DP=612 +1 2556252 . ACACTC AC 59 PASS AF=0.143579;HP=1;NF=12;NR=9;NS=49;CA=0;DP=331 +1 2578474 . CCACACCCCCAG CG 100 PASS AF=0.930867;HP=3;NF=16;NR=12;NS=51;CA=M;DP=281 +1 2688911 rs34425096;-/TC,venter TTCT TT 100 PASS AF=0.26327;HP=5;DB;NF=17;NR=12;NS=52;CA=0;DP=451 +1 2691366 rs36213670;-/CTCTGGGCCA,mills,venter GCTCTGGGCCAC GC 39 PASS AF=0.191253;HP=1;DB;NF=21;NR=36;NS=52;CA=0;DP=344 +1 2691723 rs57511628;-/ACCCCAGGAGATCCCTGC TA TACCCCAGGAGATCCCTGCA 100 PASS AF=0.332823;HP=1;DB;NF=6;NR=7;NS=52;CA=0;DP=453 +1 2703254 . CA CAA 100 PASS AF=0.111948;HP=3;NF=8;NR=13;NS=51;CA=0;DP=502 +1 2703885 . AC ACC 100 PASS AF=0.0959517;HP=6;NF=24;NR=11;NS=51;CA=0;DP=531 +1 2725125 rs34936518;-/C,venter GCT GT 100 PASS AF=0.375093;HP=1;DB;NF=33;NR=32;NS=52;CA=0;DP=621 +1 2725735 . AACACA AA 24 PASS AF=0.0139746;HP=2;NF=16;NR=4;NS=51;CA=0;DP=639 +1 2726135 rs34620269;-/CA GCAC GC 100 PASS AF=0.0410325;HP=1;DB;NF=28;NR=22;NS=52;CA=0;DP=626 +1 2726213 . GC GCAC 13 PASS AF=0.0257105;HP=1;NF=8;NR=9;NS=52;CA=0;DP=552 +1 2746483 . AC ACC 40 PASS AF=0.0544668;HP=1;NF=4;NR=12;NS=51;CA=0;DP=544 +1 2747281 . TG TGAGAG 100 PASS AF=0.152256;HP=1;NF=11;NR=8;NS=52;CA=0;DP=855 +1 2754002 rs36202379;-/CTGCTTGT,mills,watson ATTGTCTGCT AT 100 PASS AF=0.260861;HP=2;DB;NF=32;NR=35;NS=52;CA=0;DP=496 +1 2755160 rs34916159;-/A TA TAA 100 PASS AF=0.532865;HP=7;DB;NF=10;NR=34;NS=52;CA=0;DP=533 +1 2755983 . GCC GC 100 PASS AF=0.106339;HP=3;NF=18;NR=26;NS=52;CA=M;DP=700 +1 2765711 . AA AAGGAAGGA 100 PASS AF=0.686149;HP=2;NF=11;NR=8;NS=50;CA=0;DP=364 +1 2765863 . AG AGG 100 PASS AF=0.999885;HP=1;NF=14;NR=36;NS=49;CA=0;DP=364 +1 2765952 . AG AGG 100 PASS AF=0.0789769;HP=1;NF=29;NR=29;NS=51;CA=B;DP=851 +1 2779479 . TTTTCTTCTCTTTCT TT 100 PASS AF=0.712577;HP=4;NF=29;NR=22;NS=50;CA=0;DP=322 +1 2794338 rs34131736;-/T CTG CG 100 PASS AF=0.089184;HP=1;DB;NF=7;NR=4;NS=51;CA=0;DP=440 +1 2801123 . TCCTCCCCACCCTGAC TC 48 PASS AF=0.0412327;HP=2;NF=13;NR=18;NS=51;CA=0;DP=343 +1 2803308 watson CATG CG 100 PASS AF=0.160766;HP=1;NF=23;NR=20;NS=52;CA=0;DP=816 +1 2805468 rs56260225;-/ACAA AAAACA AA 100 PASS AF=0.859977;HP=4;DB;NF=62;NR=35;NS=51;CA=0;DP=433 +1 2806441 rs34966309;-/G CG CGG 100 PASS AF=0.211987;HP=4;DB;NF=20;NR=11;NS=52;CA=0;DP=441 +1 2810388 . GCC GC 100 PASS AF=0.11183;HP=2;NF=8;NR=5;NS=51;CA=0;DP=431 +1 2822166 . TACATGCACACA TA 100 PASS AF=0.150719;HP=1;NF=43;NR=52;NS=52;CA=0;DP=844 +1 2822270 rs59677991;-/GC GGCG GG 18 NoQCALL AF=0.0194725;HP=2;DB;NF=15;NR=5;NS=52;CA=0;DP=806 +1 2822473 . CACACAC CC 100 PASS AF=0.138944;HP=1;NF=6;NR=7;NS=52;CA=0;DP=951 +1 2827616 . CAAGC CC 52 PASS AF=0.132317;HP=2;NF=8;NR=4;NS=51;CA=0;DP=300 +1 2828576 . CG CTG 100 PASS AF=0.168378;HP=1;NF=8;NR=2;NS=52;CA=0;DP=325 +1 2829365 rs35758696;-/A TAA TA 100 PASS AF=0.216995;HP=6;DB;NF=20;NR=20;NS=51;CA=0;DP=531 +1 2833106 . TG TGTTGGG 100 PASS AF=0.237115;HP=1;NF=11;NR=4;NS=52;CA=0;DP=336 +1 2834384 . AC ACC 32 PASS AF=0.0617917;HP=1;NF=3;NR=5;NS=52;CA=0;DP=592 +1 2835704 rs35824541;-/G AGG AG 100 PASS AF=0.188967;HP=3;DB;NF=15;NR=11;NS=52;CA=0;DP=691 +1 2836635 rs56691957;-/AT CATG CG 100 PASS AF=0.126742;HP=1;DB;NF=8;NR=13;NS=52;CA=0;DP=611 +1 2851063 . ATGTGTGTCT AT 100 PASS AF=0.224053;HP=1;NF=34;NR=32;NS=52;CA=0;DP=798 +1 2859183 rs34869376;-/CT ACTC AC 100 PASS AF=0.228335;HP=1;DB;NF=11;NR=14;NS=52;CA=0;DP=446 +1 2859269 rs34009406;-/C AC ACC 100 PASS AF=0.168197;HP=2;DB;NF=8;NR=14;NS=52;CA=0;DP=460 +1 2862455 rs34488344;-/T GT GTT 100 PASS AF=0.140555;HP=10;DB;NF=25;NR=16;NS=52;CA=0;DP=484 +1 2866073 . AC ACC 56 PASS AF=0.0758065;HP=1;NF=2;NR=11;NS=51;CA=0;DP=513 +1 2871504 . TA TACTAA 100 PASS AF=0.128765;HP=1;NF=11;NR=12;NS=52;CA=0;DP=676 +1 2871601 rs60410855;-/TCCA CC CCCATC 100 PASS AF=0.11635;HP=3;DB;NF=19;NR=14;NS=52;CA=0;DP=682 +1 2874709 . GT GTT 100 PASS AF=0.138394;HP=9;NF=8;NR=12;NS=51;CA=0;DP=534 +1 2876814 rs5772089;-/A,mills,venter GG GAG 100 PASS AF=0.999994;HP=10;DB;NF=39;NR=42;NS=50;CA=0;DP=343 +1 2877421 rs35085736;-/C,venter GC GCC 100 PASS AF=0.582204;HP=6;DB;NF=29;NR=37;NS=50;CA=0;DP=426 +1 2881114 . GG GTG 100 PASS AF=0.586283;HP=5;NF=16;NR=5;NS=47;CA=M;DP=256 +1 2883970 . GG GCG 16 PASS AF=0.516075;HP=4;NF=6;NR=2;NS=51;CA=M;DP=332 +1 2885504 . TCC TC 29 PASS AF=0.140908;HP=9;NF=12;NR=8;NS=51;CA=0;DP=353 +1 2886983 . AG AGG 50 PASS AF=0.0436199;HP=3;NF=7;NR=2;NS=50;CA=0;DP=401 +1 2887864 rs57379840;-/T,venter CG CTG 100 PASS AF=0.770236;HP=2;DB;NF=41;NR=25;NS=51;CA=0;DP=375 +1 2892284 . CAT CT 100 PASS AF=0.0885935;HP=1;NF=23;NR=17;NS=52;CA=0;DP=685 +1 2892433 venter AT ATCCATCCTCCATCCT 100 PASS AF=0.814532;HP=1;NF=13;NR=12;NS=52;CA=0;DP=620 +1 2892472 . CCCATC CC 100 PASS AF=0.181828;HP=3;NF=50;NR=61;NS=52;CA=0;DP=633 +1 2899352 . CTA CA 100 PASS AF=0.0433393;HP=1;NF=5;NR=2;NS=51;CA=0;DP=512 +1 2902379 . TAGA TA 40 PASS AF=0.0165292;HP=1;NF=3;NR=2;NS=51;CA=0;DP=476 +1 2903930 rs36097640;-/A TAA TA 12 PASS AF=0.0522384;HP=8;DB;NF=13;NR=15;NS=51;CA=0;DP=535 +1 2907194 rs35693840;-/G AG AGG 100 PASS AF=0.136995;HP=5;DB;NF=14;NR=8;NS=52;CA=0;DP=516 +1 2916313 . AC ACC 40 PASS AF=0.0606632;HP=1;NF=1;NR=13;NS=52;CA=0;DP=529 +1 2923107 . GA GGGGGGAA 35 PASS AF=0.311458;HP=1;NF=1;NR=2;NS=50;CA=0;DP=285 +1 2923994 . AAGGA AA 100 PASS AF=0.136914;HP=3;NF=4;NR=16;NS=52;CA=0;DP=475 +1 2926544 rs58065168;-/G TG TGG 100 PASS AF=0.231871;HP=7;DB;NF=23;NR=13;NS=51;CA=0;DP=445 +1 2927774 . GTCT GT 100 PASS AF=0.039848;HP=1;NF=24;NR=39;NS=52;CA=0;DP=466 +1 2928267 rs4013154;-/TCT CAGAA CA 100 PASS AF=0.176094;HP=1;DB;NF=10;GC;NR=20;NS=52;CA=0;DP=390 +1 2931584 . GTGGTGTTTTCATT GT 100 PASS AF=0.171247;HP=1;NF=23;NR=10;NS=52;CA=0;DP=486 +1 2932462 . GT GTGAT 56 PASS AF=0.766604;HP=1;NF=33;NR=13;NS=52;CA=M;DP=790 +1 2932531 . GT GTGGTGAT 56 PASS AF=0.365205;HP=1;NF=19;NR=4;NS=52;CA=M;DP=738 +1 2938240 rs57953122;-/AAGCC AC ACCAAGC 100 PASS AF=0.229942;HP=2;DB;NF=5;NR=7;NS=52;CA=0;DP=387 +1 2939820 rs35035410;-/C,venter GCC GC 100 PASS AF=0.270114;HP=6;DB;NF=15;NR=21;NS=52;CA=0;DP=477 +1 2940602 . GA GAA 100 PASS AF=0.245189;HP=10;NF=31;NR=30;NS=52;CA=0;DP=516 +1 2941986 . ACCC AC 100 PASS AF=0.242307;HP=10;NF=20;NR=20;NS=52;CA=0;DP=471 +1 2943041 rs34450334;-/G,mills CGG CG 100 PASS AF=0.212427;HP=8;DB;NF=13;NR=12;NS=52;CA=0;DP=523 +1 2943605 rs5772091;-/C,mills GC GCC 100 PASS AF=0.155328;HP=1;DB;NF=7;NR=7;NS=52;CA=0;DP=349 +1 2946559 . TT TTGT 100 PASS AF=0.174249;HP=3;NF=13;NR=14;NS=52;CA=0;DP=596 +1 2948391 . TT TTTTTCT 100 PASS AF=0.137955;HP=5;NF=19;NR=16;NS=52;CA=0;DP=557 +1 2949076 rs33910396;-/G,mills CG CGG 100 PASS AF=0.102902;HP=1;DB;NF=3;NR=8;NS=52;CA=0;DP=413 +1 2950056 . TC TCAAACAAAC 100 PASS AF=0.133966;HP=1;NF=9;NR=9;NS=51;CA=0;DP=587 +1 2950689 rs60031908;-/A CAA CA 100 PASS AF=0.200188;HP=8;DB;NF=20;NR=25;NS=51;CA=0;DP=517 +1 2958314 . CC CCCATC 100 PASS AF=0.190271;HP=3;NF=39;NR=18;NS=52;CA=M;DP=454 +1 2961502 rs60708459;-/T AT ATT 100 PASS AF=0.219472;HP=3;DB;NF=14;NR=16;NS=52;CA=0;DP=460 +1 2968615 . AG AGG 100 PASS AF=0.288912;HP=2;NF=11;NR=13;NS=51;CA=0;DP=324 +1 2982005 . GT GGGTT 100 PASS AF=0.189932;HP=5;NF=6;NR=5;NS=52;CA=0;DP=460 +1 2984462 rs34471979;-/C,venter TCC TC 100 PASS AF=0.423837;HP=2;DB;NF=20;NR=27;NS=51;CA=0;DP=459 +1 2985828 rs5772093;-/TTCGGGG,mills,venter,watson CT CTTCGGGGT 100 PASS AF=0.888966;HP=1;DB;NF=22;NR=15;NS=49;CA=0;DP=372 +1 2987353 . AGTG AG 39 PASS AF=0.0534166;HP=1;NF=13;NR=12;NS=51;CA=0;DP=341 +1 2990018 . TC TGC 51 PASS AF=0.347647;HP=1;NF=9;NR=5;NS=52;CA=0;DP=328 +1 2992552 rs55740340;-/TTGT,mills,venter,watson CT CTGTTT 100 PASS AF=0.633228;HP=1;DB;NF=31;NR=31;NS=52;CA=0;DP=471 +1 2994869 . TT TTTAT 48 PASS AF=0.246512;HP=4;NF=8;NR=15;NS=49;CA=0;DP=238 +1 2996339 rs60239912;-/TCATTCAT CT CTCATTCATT 100 PASS AF=0.288255;HP=1;DB;NF=27;NR=24;NS=52;CA=0;DP=550 +1 2996940 . TG TGGG 52 PASS AF=0.252534;HP=1;NF=5;NR=3;NS=51;CA=0;DP=485 +1 2997430 rs58914207;-/TC TTCT TT 17 PASS AF=0.0239916;HP=3;DB;NF=1;NR=3;NS=51;CA=0;DP=533 +1 2998548 rs3067411;-/GC,mills,watson TT TGCT 100 PASS AF=0.513959;HP=2;DB;NF=16;NR=33;NS=51;CA=0;DP=457 +1 2998746 rs33948447;-/CTGAGGGTAT,mills,watson CCTGAGGGTATC CC 100 PASS AF=0.567187;HP=2;DB;NF=32;NR=26;NS=51;CA=0;DP=446 +1 2998922 rs3067390;-/CA,mills,watson CTGT CT 100 PASS AF=0.344398;HP=1;DB;NF=25;NR=25;NS=52;CA=0;DP=544 +1 3001309 . TCTTCC TC 100 PASS AF=0.122521;HP=1;NF=13;NR=16;NS=51;CA=0;DP=463 +1 3003643 rs34727240;-/A CA CAA 100 PASS AF=0.30407;HP=4;DB;NF=23;NR=14;NS=51;CA=0;DP=462 +1 3003980 . ATTCT AT 100 PASS AF=0.0770408;HP=2;NF=12;NR=8;NS=51;CA=0;DP=436 +1 3015507 rs36215320;-/AATAAT,mills AAATAATA AA 100 PASS AF=0.341849;HP=4;DB;NF=19;NR=21;NS=52;CA=M;DP=287 +1 3020627 . GC GCGCGCAC 45 PASS AF=0.0864166;HP=1;NF=3;NR=4;NS=52;CA=0;DP=675 +1 3020729 . GCAC GC 100 PASS AF=0.270815;HP=1;NF=26;NR=22;NS=52;CA=0;DP=511 +1 3020780 . GCAC GC 100 PASS AF=0.0529136;HP=1;NF=14;NR=13;NS=52;CA=0;DP=580 +1 3020851 rs36140038;-/G,venter CC CGC 100 PASS AF=0.0570603;HP=2;DB;NF=7;NR=8;NS=52;CA=0;DP=580 +1 3020930 . GCAC GC 100 PASS AF=0.0608239;HP=1;NF=21;NR=20;NS=52;CA=0;DP=662 +1 3020996 . ACT AT 100 PASS AF=0.0376658;HP=1;NF=4;NR=2;NS=52;CA=0;DP=646 +1 3021049 rs58793198;-/CA AA AACA 100 PASS AF=0.0822964;HP=2;DB;NF=19;NR=18;NS=52;CA=0;DP=756 +1 3024532 . TGTGTGCG TG 100 PASS AF=0.0453628;HP=1;NF=12;NR=35;NS=51;CA=0;DP=585 +1 3035092 venter,watson CTCCCACCATGCTACTGGAGACCAT CT 100 PASS AF=0.175148;HP=1;NF=41;NR=54;NS=51;CA=0;DP=464 +1 3035605 rs56967751;-/TG,venter,watson AG AGTG 100 PASS AF=0.387697;HP=1;DB;NF=30;NR=25;NS=51;CA=0;DP=671 +1 3035812 . CGTG CG 100 PASS AF=0.051827;HP=1;NF=28;NR=20;NS=51;CA=0;DP=643 +1 3035887 . ATGT AT 50 PASS AF=0.0421027;HP=1;NF=24;NR=34;NS=52;CA=0;DP=556 +1 3036291 rs36033160;-/CCG CT CCCGT 100 PASS AF=0.0605711;HP=1;DB;NF=3;NR=5;NS=51;CA=0;DP=428 +1 3037949 rs34840011;-/A,venter TA TAA 100 PASS AF=0.096326;HP=8;DB;NF=5;NR=6;NS=52;CA=0;DP=462 +1 3046082 rs35271327;-/T AT ATT 19 PASS AF=0.0473995;HP=7;DB;NF=9;NR=8;NS=52;CA=0;DP=430 +1 3049499 . ACC AC 27 PASS AF=0.0269129;HP=3;NF=3;NR=1;NS=51;CA=0;DP=373 +1 3053337 . TGG TG 100 PASS AF=0.205181;HP=7;NF=15;NR=19;NS=52;CA=0;DP=424 +1 3058772 . TCATCC TC 100 PASS AF=0.716787;HP=1;NF=61;NR=51;NS=52;CA=0;DP=435 +1 3069377 . CATGGT CT 100 PASS AF=0.42044;HP=1;NF=3;NR=14;NS=48;CA=M;DP=257 +1 3076481 rs35945121;-/T,mills ATT AT 100 PASS AF=0.33892;HP=10;DB;NF=9;NR=38;NS=52;CA=0;DP=438 +1 3079028 . TA TCA 100 PASS AF=0.0528803;HP=1;NF=5;NR=3;NS=51;CA=0;DP=475 +1 3084256 watson AGTTTAGATACTG AG 100 PASS AF=0.123981;HP=1;NF=18;NR=14;NS=52;CA=0;DP=554 +1 3087172 rs34468831;-/A GAA GA 100 PASS AF=0.0618762;HP=3;DB;NF=2;NR=5;NS=50;CA=0;DP=475 +1 3087517 . CACACGCAGTCTTA CA 100 PASS AF=0.637316;HP=1;NF=41;NR=37;NS=52;CA=0;DP=973 +1 3087777 . TA TACA 100 PASS AF=0.377666;HP=1;NF=43;NR=55;NS=52;CA=M;DP=966 +1 3087871 . CACGGTCTTA CA 100 PASS AF=0.589214;HP=1;NF=16;NR=14;NS=51;CA=0;DP=710 +1 3087938 . AG AGTCTTACACAAGCGG 100 PASS AF=0.469462;HP=1;NF=28;NR=29;NS=52;CA=M;DP=816 +1 3088154 . GG GCAG 100 PASS AF=0.0511127;HP=2;NF=11;NR=10;NS=52;CA=M;DP=894 +1 3088232 rs35125658;-/TT GG GCAG 100 PASS AF=0.0967781;HP=2;DB;NF=3;NR=24;NS=51;CA=M;DP=938 +1 3088301 . CT CTTGCACACGCAGTTT 47 PASS AF=0.0188781;HP=2;NF=5;NR=2;NS=51;CA=M;DP=684 +1 3105704 rs35372326;-/G,mills CGG CG 100 PASS AF=0.0956114;HP=2;DB;NF=6;NR=4;NS=52;CA=0;DP=378 +1 3107408 rs5772098;-/G,mills AG AGG 100 PASS AF=0.107417;HP=5;DB;NF=19;NR=15;NS=52;CA=0;DP=504 +1 3107714 rs34461209;-/G,venter TG TGG 100 PASS AF=0.61875;HP=3;DB;NF=21;NR=28;NS=52;CA=0;DP=454 +1 3108534 rs59512254;-/GA GGAG GG 100 PASS AF=0.184609;HP=2;DB;NF=17;NR=11;NS=52;CA=0;DP=510 +1 3121064 . TG TGAG 59 PASS AF=0.0221492;HP=1;NF=7;NR=3;NS=52;CA=0;DP=555 +1 3131583 rs57750843;-/A GAA GA 100 PASS AF=0.166149;HP=9;DB;NF=21;NR=20;NS=52;CA=0;DP=490 +1 3131742 . GT GGGGGGGGGTT 27 PASS AF=0.243052;HP=3;NF=2;NR=1;NS=49;CA=0;DP=394 +1 3135855 rs34340862;-/TAA,mills CT CTAAT 100 PASS AF=0.183257;HP=1;DB;NF=11;NR=9;NS=51;CA=0;DP=520 +1 3146366 . GGAG GG 100 PASS AF=0.040688;HP=4;NF=13;NR=14;NS=51;CA=0;DP=434 +1 3152159 . AT ATT 100 PASS AF=0.0396994;HP=4;NF=8;NR=9;NS=52;CA=0;DP=489 +1 3157729 venter,watson AG AGGGGTGAGGTG 100 PASS AF=0.830079;HP=4;NF=30;NR=23;NS=51;CA=0;DP=548 +1 3158807 . AGG AG 100 PASS AF=0.705976;HP=6;NF=35;NR=30;NS=52;CA=0;DP=371 +1 3158885 . CATG CG 100 PASS AF=0.09216;HP=1;NF=6;NR=6;NS=51;CA=0;DP=375 +1 3163280 . CAAAATA CA 100 PASS AF=0.148526;HP=4;NF=13;NR=1;NS=49;CA=M;DP=326 +1 3164018 rs5772100;-/A,mills,venter TAA TA 100 PASS AF=0.999998;HP=3;DB;NF=67;NR=69;NS=52;CA=0;DP=511 +1 3174387 . CAGG CG 17 PASS AF=0.0141709;HP=1;NF=1;NR=2;NS=51;CA=0;DP=428 +1 3176024 . GACAGTCCCAGAGGAGCA GA 44 PASS AF=0.0444872;HP=1;NF=3;NR=10;NS=52;CA=M;DP=480 +1 3177102 . AG AGAGGAGGACAGTCGGGGAGGACAGTCCCGG 100 PASS AF=0.346135;HP=1;NF=8;NR=13;NS=52;CA=0;DP=550 +1 3179862 rs35987870;-/GTGG ATGTGT AT 100 PASS AF=0.0762534;HP=1;DB;NF=17;NR=17;NS=51;CA=0;DP=618 +1 3183094 rs33953525;-/GGTGCCGTGAACAGAGCCAGCGAGG,mills AG AGGTGCCGTGAACAGAGCCAGCGAGGG 100 PASS AF=0.665581;HP=2;DB;NF=15;NR=15;NS=52;CA=0;DP=424 +1 3183166 rs35451643;-/C,venter TCC TC 100 PASS AF=0.123295;HP=4;DB;NF=12;NR=6;NS=52;CA=0;DP=460 +1 3184208 rs59663829;-/GCACACACAA TA TGCACACACAAA 100 PASS AF=0.152939;HP=1;DB;NF=4;NR=4;NS=52;CA=0;DP=733 +1 3186299 . ACC AC 100 PASS AF=0.951135;HP=8;NF=16;NR=14;NS=51;CA=0;DP=311 +1 3202609 . TG TGGGGGGG 11 PASS AF=0.122471;HP=1;NF=3;NR=3;NS=52;CA=0;DP=479 +1 3292566 . TC TCGGGGTGCCC 12 PASS AF=0.209628;HP=1;NF=22;NR=17;NS=51;CA=0;DP=462 +1 3292669 . AAGA AA 100 PASS AF=0.312194;HP=8;NF=13;NR=14;NS=51;CA=0;DP=483 +1 3293018 rs35846516;-/A,venter GAA GA 100 PASS AF=0.791047;HP=9;DB;NF=59;NR=44;NS=51;CA=0;DP=507 +1 3293422 rs34150215;-/A,mills,venter TA TAA 100 PASS AF=0.418316;HP=7;DB;NF=27;NR=18;NS=52;CA=0;DP=481 +1 3307979 rs35082175;-/A,venter CAT CT 100 PASS AF=0.379363;HP=1;DB;NF=36;NR=25;NS=52;CA=0;DP=659 +1 3308056 . CATA CA 100 PASS AF=0.0313721;HP=1;NF=4;NR=5;NS=52;CA=0;DP=699 +1 3308306 rs34659426;-/AA CAAA CA 100 PASS AF=0.238591;HP=3;DB;NF=23;NR=22;NS=52;CA=0;DP=732 +1 3308692 . GC GCC 100 PASS AF=0.610676;HP=6;NF=23;NR=26;NS=52;CA=0;DP=447 +1 3309461 . ACCCTCCTCTGAGTCTTCCTCCCCTTCCCGTGC AC 100 PASS AF=0.218197;HP=3;NF=28;NR=41;NS=51;CA=0;DP=430 +1 3313004 . ATT AT 18 PASS AF=0.117282;HP=10;NF=22;NR=12;NS=51;CA=0;DP=407 +1 3315219 rs35154920;-/GT CG CGTG 100 PASS AF=0.407055;HP=1;DB;NF=23;NR=17;NS=52;CA=0;DP=498 +1 3315279 rs34306698;-/AT CG CATG 100 PASS AF=0.27165;HP=1;DB;NF=18;NR=10;NS=51;CA=0;DP=460 +1 3315552 rs61650876;-/ATGT CATGTG CG 100 PASS AF=0.074251;HP=1;DB;NF=10;NR=7;NS=52;CA=0;DP=612 +1 3315608 . CGTG CG 44 PASS AF=0.0200264;HP=1;NF=15;NR=25;NS=52;CA=0;DP=622 +1 3316180 rs34769314;-/GTGA TGTGAG TG 100 PASS AF=0.13026;HP=1;DB;NF=29;NR=21;NS=52;CA=0;DP=930 +1 3316258 rs57503175;-/TGTATGTGCGTGTGTGTGGTGTG GG GGTGTGTGGTGTGTGTATGTGCGTG 100 PASS AF=0.277124;HP=3;DB;NF=3;NR=11;NS=52;CA=0;DP=898 +1 3316338 rs34133894;-/GT GGTG GG 100 PASS AF=0.121606;HP=2;DB;NF=18;NR=27;NS=52;CA=0;DP=901 +1 3316408 . TGG TG 100 PASS AF=0.153074;HP=7;NF=23;NR=10;NS=52;CA=0;DP=898 +1 3316476 rs60842130;-/GTG TGTGG TG 43 PASS AF=0.0151943;HP=1;DB;NF=4;NR=1;NS=52;CA=0;DP=732 +1 3317481 rs34240659;-/AT CATA CA 100 PASS AF=0.127605;HP=1;DB;NF=14;NR=8;NS=52;CA=0;DP=538 +1 3319964 . ACC AC 100 PASS AF=0.0511239;HP=5;NF=12;NR=4;NS=52;CA=0;DP=505 +1 3327173 rs56093721;-/A,venter TAA TA 100 PASS AF=0.89527;HP=9;DB;NF=37;NR=68;NS=52;CA=0;DP=540 +1 3328302 . AG AGGGGGG 53 PASS AF=0.124625;HP=2;NF=13;NR=2;NS=52;CA=0;DP=585 +1 3335208 . CGG CG 100 PASS AF=0.0438559;HP=2;NF=3;NR=3;NS=52;CA=0;DP=448 +1 3335551 rs34869178;-/T CTC CC 100 PASS AF=0.0947355;HP=1;DB;NF=4;NR=8;NS=52;CA=0;DP=487 +1 3342021 rs34485545;-/A TA TAA 100 PASS AF=0.154806;HP=9;DB;NF=25;NR=23;NS=52;CA=0;DP=444 +1 3347098 venter CG CAG 100 PASS AF=0.931731;HP=1;NF=49;NR=54;NS=52;CA=0;DP=497 +1 3348129 rs55866341;-/G,venter CG CGG 100 PASS AF=0.883294;HP=1;DB;NF=55;NR=55;NS=52;CA=0;DP=521 +1 3352897 . AA ACA 46 PASS AF=0.0385898;HP=6;NF=2;NR=6;NS=51;CA=0;DP=407 +1 3353821 rs34792713;-/T AT ATT 36 PASS AF=0.0290672;HP=1;DB;NF=3;NR=3;NS=52;CA=0;DP=428 +1 3356271 . TTCCT TT 15 PASS AF=0.00990969;HP=3;NF=1;NR=1;NS=52;CA=0;DP=537 +1 3356391 rs4018597;-/TA TT TTAT 100 PASS AF=0.0517593;HP=2;DB;NF=13;NR=11;NS=52;CA=0;DP=475 +1 3356436 rs5772104;-/GT CGTG CG 100 PASS AF=0.82813;HP=1;DB;NF=59;NR=53;NS=51;CA=0;DP=449 +1 3356871 . CATG CG 26 PASS AF=0.0193592;HP=1;NF=1;NR=3;NS=51;CA=0;DP=430 +1 3359412 rs34037774;-/G,venter TGG TG 59 PASS AF=0.0301496;HP=2;DB;NF=4;NR=5;NS=52;CA=0;DP=451 +1 3370575 rs35597752;-/TG,venter,watson CTGT CT 100 PASS AF=0.760154;HP=1;DB;NF=43;NR=36;NS=52;CA=0;DP=405 +1 3372018 rs34109718;-/G,venter CGG CG 100 PASS AF=0.891318;HP=3;DB;NF=46;NR=36;NS=51;CA=0;DP=349 +1 3383745 rs57207202;-/C AC ACC 100 PASS AF=0.182529;HP=4;DB;NF=9;NR=7;NS=47;CA=D;DP=229 +1 3384084 rs5772105;-/G,mills,venter CG CGG 100 PASS AF=0.937697;HP=2;DB;NF=49;NR=47;NS=50;CA=0;DP=457 +1 3385833 rs5772106;-/CC,mills,venter,watson ACCC AC 100 PASS AF=0.778535;HP=5;DB;NF=33;NR=14;NS=51;CA=0;DP=418 +1 3387275 rs56102150;-/TC,venter CC CCTC 100 PASS AF=0.999995;HP=4;DB;NF=16;NR=36;NS=50;CA=0;DP=364 +1 3388739 rs58188396;-/GGGGGGCGGGTAGCC GG GGGGGGGCGGGTAGCCG 40 PASS AF=0.263678;HP=7;DB;NF=3;NR=2;NS=48;CA=0;DP=326 +1 3393157 . AAAAAATA AA 100 PASS AF=0.0549314;HP=6;NF=23;NR=18;NS=51;CA=0;DP=468 +1 3393524 . GGTGTG GG 23 PASS AF=0.017751;HP=2;NF=1;NR=19;NS=49;CA=0;DP=266 +1 3409800 . AAGA AA 100 PASS AF=0.0431791;HP=3;NF=1;NR=8;NS=51;CA=0;DP=643 +1 3410131 rs58666986;-/GTGT ATGTGT AT 100 PASS AF=0.0433727;HP=1;DB;NF=7;NR=13;NS=52;CA=0;DP=603 +1 3411485 rs60864742;-/ACACCGGTAGCAAGGCA,mills ACACCGGTAGCAAGGCACC AC 100 PASS AF=0.0858716;HP=1;DB;NF=8;NR=17;NS=52;CA=0;DP=523 +1 3417374 . GCACACGCCCCCACCC GC 20 PASS AF=0.0294079;HP=1;NF=4;NR=3;NS=50;CA=0;DP=447 +1 3429498 rs56204236;-/G CG CGG 100 PASS AF=0.596026;HP=10;DB;NF=6;NR=7;NS=51;CA=0;DP=322 +1 3435396 . CACAGA CA 100 PASS AF=0.0433621;HP=1;NF=2;NR=6;NS=52;CA=0;DP=457 +1 3442767 rs36106109;-/G CG CGG 100 PASS AF=0.112939;HP=5;DB;NF=5;NR=6;NS=50;CA=0;DP=369 +1 3451064 rs36030995;-/C GC GCC 100 PASS AF=0.385449;HP=5;DB;NF=22;NR=12;NS=50;CA=0;DP=388 +1 3456931 rs35289361;-/G AG AGG 100 PASS AF=0.0676076;HP=4;DB;NF=11;NR=9;NS=52;CA=0;DP=554 +1 3467274 watson GGGCTG GG 100 PASS AF=0.132596;HP=3;NF=16;NR=12;NS=51;CA=0;DP=428 +1 3475422 rs61428836;-/G TG TGG 100 PASS AF=0.0480433;HP=3;DB;NF=6;NR=10;NS=52;CA=0;DP=468 +1 3482055 . CA CGTCTTATA 100 PASS AF=0.593516;HP=1;NF=10;NR=11;NS=49;CA=M;DP=256 +1 3482413 mills,watson TCTCC TC 100 PASS AF=0.414589;HP=1;NF=24;NR=32;NS=51;CA=0;DP=496 +1 3485140 venter,watson CCAAC CC 100 PASS AF=0.714294;HP=2;NF=21;NR=32;NS=52;CA=0;DP=460 +1 3486991 rs35452084;-/G,venter AGG AG 100 PASS AF=0.744909;HP=4;DB;NF=15;NR=35;NS=50;CA=0;DP=363 +1 3492812 . CGTG CG 14 PASS AF=0.0148914;HP=1;NF=22;NR=26;NS=51;CA=0;DP=585 +1 3494290 . AC ACAGGACCGGCC 100 PASS AF=0.117184;HP=1;NF=2;NR=22;NS=52;CA=0;DP=464 +1 3496820 rs34860893;-/C,mills,venter ACC AC 100 PASS AF=0.924032;HP=7;DB;NF=33;NR=48;NS=52;CA=0;DP=386 +1 3504928 rs36094767;-/C,venter TC TCC 100 PASS AF=0.786142;HP=4;DB;NF=23;NR=43;NS=51;CA=0;DP=405 +1 3511572 rs3072238;-/TCAC,venter ACACTC AC 100 PASS AF=0.160871;HP=1;DB;NF=22;NR=22;NS=52;CA=0;DP=824 +1 3511789 rs59801836;-/CTCA,watson ACACTC AC 100 PASS AF=0.620819;HP=1;DB;NF=54;NR=52;NS=52;CA=0;DP=740 +1 3511919 . TACA TA 100 PASS AF=0.049568;HP=1;NF=20;NR=22;NS=52;CA=0;DP=729 +1 3511980 rs57128321;-/ACTC,venter,watson AC ACACTC 100 PASS AF=0.937206;HP=1;DB;NF=63;NR=38;NS=52;CA=0;DP=712 +1 3512089 rs61705210;-/TCACAC,venter,watson AACTCACA AA 100 PASS AF=0.658764;HP=3;DB;NF=65;NR=52;NS=52;CA=0;DP=808 +1 3516936 rs60239345;-/CA,venter CG CCAG 100 PASS AF=0.999997;HP=1;DB;NF=52;NR=26;NS=52;CA=0;DP=391 +1 3519155 rs35740208;-/G,venter AGG AG 100 PASS AF=0.108418;HP=3;DB;NF=7;NR=11;NS=51;CA=0;DP=505 +1 3523781 rs56339243;-/GGCTCC,venter,watson AC ACCGGCTC 100 PASS AF=0.603986;HP=3;DB;NF=20;NR=23;NS=52;CA=0;DP=449 +1 3526023 . GGCACTTCCCGCCCCCGTCACCCCTGCCGCCATG GG 100 PASS AF=0.227609;HP=2;NF=10;NR=15;NS=52;CA=0;DP=454 +1 3526486 rs35020651;-/C,venter TC TCC 100 PASS AF=0.389171;HP=3;DB;NF=32;NR=20;NS=52;CA=0;DP=470 +1 3530060 . TGG TG 100 PASS AF=0.033793;HP=3;NF=6;NR=1;NS=52;CA=0;DP=540 +1 3531966 rs3838971;-/C TG TGG 100 PASS AF=0.155382;HP=6;DB;NF=14;NR=11;NS=49;CA=0;DP=292 +1 3534095 rs35816205;-/A,mills,venter TAA TA 100 PASS AF=0.160054;HP=3;DB;NF=9;NR=10;NS=52;CA=0;DP=455 +1 3535035 rs58849058;-/TCTGGGAGCTCCTCCCCCT,venter,watson GTTCTGGGAGCTCCTCCCCCT GT 100 PASS AF=0.609724;HP=2;DB;NF=50;NR=48;NS=52;CA=0;DP=487 +1 3535985 . CCAAAC CC 100 PASS AF=0.116123;HP=2;NF=10;NR=13;NS=51;CA=0;DP=553 +1 3536124 rs55905548;-/GGCG,venter,watson CCGGGC CC 100 PASS AF=0.45742;HP=3;DB;NF=28;NR=31;NS=51;CA=0;DP=499 +1 3543853 . TC TCC 100 PASS AF=0.156605;HP=6;NF=12;NR=13;NS=52;CA=0;DP=527 +1 3549495 . AC ACCCCC 34 PASS AF=0.0959154;HP=1;NF=1;NR=3;NS=52;CA=0;DP=496 +1 3553372 rs34514629;-/C,venter GCA GA 100 PASS AF=0.652107;HP=1;DB;NF=45;NR=47;NS=52;CA=0;DP=551 +1 3556485 rs3831025;-/CAGCCTGC,venter,watson AGCAGGCTGC AC 100 PASS AF=0.38103;HP=1;DB;NF=13;NR=9;NS=49;CA=0;DP=292 +1 3556883 . CA CATA 14 PASS AF=0.0221011;HP=1;NF=9;NR=13;NS=50;CA=0;DP=436 +1 3563429 . CG CGGGGG 56 PASS AF=0.17049;HP=2;NF=3;NR=7;NS=52;CA=0;DP=586 +1 3564334 rs3034639;-/GT,mills GA GACA 100 PASS AF=0.227635;HP=1;DB;NF=10;NR=13;NS=50;CA=0;DP=364 +1 3564964 rs5772113;-/G TGG TG 100 PASS AF=0.220888;HP=2;DB;NF=11;NR=18;NS=50;CA=0;DP=408 +1 3565238 venter GGTCTCCTACAGTCATATTTTGGGGTGACGTATTCTAG GG 100 PASS AF=0.145422;HP=2;NF=1;NR=10;NS=52;CA=M;DP=323 +1 3566253 rs57149403;-/GTCCAGC AC ACGTCCAGC 100 PASS AF=0.0476733;HP=1;DB;NF=3;NR=3;NS=52;CA=0;DP=363 +1 3567114 . ATG AG 100 PASS AF=0.0358982;HP=1;NF=3;NR=5;NS=52;CA=0;DP=555 +1 3568146 rs3034606;-/TA GTAT GT 100 PASS AF=0.533957;HP=1;DB;NF=12;NR=29;NS=51;CA=0;DP=247 +1 3570893 rs34305694;-/C TCC TC 100 PASS AF=0.0467251;HP=2;DB;NF=5;NR=3;NS=52;CA=0;DP=443 +1 3574939 . CG CGTGTGTG 23 PASS AF=0.401022;HP=1;NF=46;NR=32;NS=52;CA=0;DP=481 +1 3586002 . ACTC AC 100 PASS AF=0.157197;HP=1;NF=17;NR=24;NS=52;CA=0;DP=691 +1 3586231 rs61542341;-/GTCTCT CTCTCTGT CT 12 PASS AF=0.0310208;HP=1;DB;NF=1;NR=11;NS=52;CA=M;DP=400 +1 3586281 . CTTT CT 21 PASS AF=0.115475;HP=3;NF=1;NR=3;NS=51;CA=M;DP=469 +1 3589610 rs57492244;-/G TGG TG 100 PASS AF=0.0691843;HP=7;DB;NF=11;NR=8;NS=51;CA=0;DP=527 +1 3593995 rs57765962;-/AT,watson AATG AG 100 PASS AF=0.127015;HP=2;DB;NF=10;NR=8;NS=52;CA=0;DP=423 +1 3603570 . GCGGGGCCCACCTCGCACCCGCGGCCCACGTCGCACCC GC 100 PASS AF=0.0758905;HP=1;NF=8;NR=12;NS=51;CA=0;DP=414 +1 3606881 rs5772119;-/A,venter TAG TG 100 PASS AF=0.333638;HP=1;DB;NF=12;NR=36;NS=51;CA=0;DP=522 +1 3618309 rs3841787;-/TG,watson CATG CG 100 PASS AF=0.219932;HP=1;DB;NF=14;NR=14;NS=50;CA=0;DP=449 +1 3619353 venter GCCCCTGCC GC 100 PASS AF=0.290838;HP=4;NF=18;NR=8;NS=51;CA=0;DP=322 +1 3629994 rs35939665;-/CTGC,mills,venter,watson TCTGCC TC 100 PASS AF=0.953969;HP=1;DB;NF=43;NR=31;NS=51;CA=0;DP=364 +1 3630547 rs35380007;-/A,venter TA TAA 100 PASS AF=0.373122;HP=2;DB;NF=20;NR=12;NS=51;CA=0;DP=293 +1 3632819 rs61728692;-/CGGA GT GCGGAT 100 PASS AF=0.63605;HP=1;DB;NF=18;NR=3;NS=48;CA=0;DP=238 +1 3632891 . GGATTG GG 46 PASS AF=0.024415;HP=2;NF=4;NR=2;NS=49;CA=0;DP=381 +1 3633325 . CG CGATGGATGGGTGG 100 PASS AF=0.870192;HP=1;NF=3;NR=4;NS=52;CA=0;DP=751 +1 3635416 rs3034587;-/CTCTCT,mills,venter AA AAGAGAGA 100 PASS AF=0.707697;HP=3;DB;NF=37;NR=27;NS=52;CA=0;DP=538 +1 3643833 . AC ACCC 25 PASS AF=0.0664372;HP=1;NF=3;NR=3;NS=51;CA=0;DP=511 +1 3648954 rs3216059;-/G AG AGG 100 PASS AF=0.42719;HP=4;DB;NF=35;NR=35;NS=51;CA=0;DP=551 +1 3660684 . GA GCA 100 PASS AF=0.136632;HP=1;NF=2;NR=10;NS=49;CA=0;DP=480 +1 3663009 rs35440871;-/AA CAAG CG 100 PASS AF=0.2595;HP=2;DB;NF=19;NR=14;NS=51;CA=0;DP=498 +1 3665663 rs60798590;-/TATTTAAAAAT,watson CA CAATTATTTAAAA 33 PASS AF=0.0338921;HP=2;DB;NF=8;NR=3;NS=51;CA=0;DP=388 +1 3665995 . TTTGAAACT TT 33 PASS AF=0.00986571;HP=4;NF=1;NR=3;NS=52;CA=0;DP=507 +1 3668078 . AGG AG 100 PASS AF=0.341281;HP=8;NF=21;NR=29;NS=52;CA=0;DP=467 +1 3677245 rs36002367;-/AG AAGA AA 100 PASS AF=0.137474;HP=3;DB;NF=6;NR=10;NS=52;CA=0;DP=521 +1 3680208 . TG TGG 10 PASS AF=0.0239017;HP=1;NF=7;NR=5;NS=51;CA=0;DP=448 +1 3681294 venter CC CGCAC 100 PASS AF=0.200075;HP=8;NF=7;NR=2;NS=50;CA=0;DP=245 +1 3682989 rs35616712;-/C TCC TC 100 PASS AF=0.0813904;HP=3;DB;NF=9;NR=3;NS=51;CA=0;DP=447 +1 3684305 venter CG CGG 100 PASS AF=0.0596707;HP=3;NF=4;NR=6;NS=51;CA=0;DP=416 +1 3686623 rs35661250;-/AG CA CAGA 100 PASS AF=0.0609898;HP=1;DB;NF=5;NR=6;NS=52;CA=0;DP=626 +1 3691009 rs35756038;-/A,venter CAA CA 100 PASS AF=0.444393;HP=2;DB;NF=24;NR=32;NS=52;CA=0;DP=562 +1 3696676 . CCTG CG 100 PASS AF=0.102585;HP=4;NF=7;NR=6;NS=52;CA=0;DP=502 +1 3697316 rs34679063;-/C,venter GC GCC 100 PASS AF=0.8246;HP=1;DB;NF=51;NR=32;NS=52;CA=0;DP=438 +1 3704105 . TT TTAATTTTTATATTAACCGTGTTAATAT 100 PASS AF=0.377269;HP=2;NF=17;NR=26;NS=52;CA=0;DP=476 +1 3708451 watson TG TGGAGG 43 PASS AF=0.0406373;HP=2;NF=3;NR=4;NS=52;CA=0;DP=587 +1 3710853 rs35447451;-/G,venter AG AGG 100 PASS AF=0.272856;HP=4;DB;NF=25;NR=31;NS=52;CA=0;DP=507 +1 3711553 rs36007194;-/T AT ATT 100 PASS AF=0.093968;HP=10;DB;NF=11;NR=13;NS=52;CA=0;DP=515 +1 3712668 rs35364504;-/GA,venter GGAG GG 100 PASS AF=0.369523;HP=5;DB;NF=18;NR=34;NS=51;CA=0;DP=320 +1 3713867 venter TTTTATTTAT TT 100 PASS AF=0.301438;HP=5;NF=21;NR=36;NS=49;CA=0;DP=294 +1 3714365 rs58666367;-/CTCAT,venter,watson GA GATCTCA 100 PASS AF=0.431722;HP=1;DB;NF=24;NR=17;NS=52;CA=0;DP=484 +1 3721514 rs3838969;-/A,venter CG CTG 100 PASS AF=0.472733;HP=2;DB;NF=27;NR=26;NS=52;CA=0;DP=461 +1 3726918 rs34085838;-/G CG CGG 100 PASS AF=0.242958;HP=1;DB;NF=17;NR=14;NS=52;CA=0;DP=479 +1 3728638 rs61301856;-/GA,venter,watson TGAG TG 100 PASS AF=0.446341;HP=1;DB;NF=54;NR=33;NS=52;CA=0;DP=666 +1 3729131 rs56900717;-/A TT TAT 100 PASS AF=0.489357;HP=2;DB;NF=33;NR=22;NS=52;CA=0;DP=466 +1 3733293 rs5772126;-/G,venter TG TGG 100 PASS AF=0.701257;HP=2;DB;NF=17;NR=26;NS=51;CA=0;DP=451 +1 3733413 . CA CAA 100 PASS AF=0.107016;HP=5;NF=12;NR=16;NS=52;CA=0;DP=523 +1 3735276 venter TA TAAA 100 PASS AF=0.491527;HP=1;NF=29;NR=33;NS=52;CA=0;DP=477 +1 3737219 rs61056063;-/A AGA AA 11 PASS AF=0.205567;HP=1;DB;NF=13;NR=6;NS=51;CA=0;DP=431 +1 3740075 rs35801288;-/C ACA AA 100 PASS AF=0.438207;HP=1;DB;NF=35;NR=12;NS=52;CA=0;DP=395 +1 3741588 rs34966926;-/T,venter GT GTT 100 PASS AF=0.212825;HP=10;DB;NF=21;NR=22;NS=51;CA=0;DP=541 +1 3748510 mills TTTTTTAT TT 53 PASS AF=0.0323102;HP=7;NF=21;NR=15;NS=51;CA=0;DP=420 +1 3759325 . CG CGGCCAAGGAG 100 PASS AF=0.391954;HP=2;NF=19;NR=18;NS=52;CA=0;DP=465 +1 3759824 . CG CGGG 22 PASS AF=0.0355289;HP=5;NF=4;NR=8;NS=52;CA=0;DP=591 +1 3760224 rs61309375;-/A,venter CAG CG 100 PASS AF=0.303624;HP=1;DB;NF=27;NR=13;NS=51;CA=0;DP=447 +1 3773150 . CTT CT 12 NoQCALL AF=0.0786801;HP=2;NF=1;NR=9;NS=52;CA=0;DP=540 +1 3774838 . GT GTT 11 PASS AF=0.0109686;HP=1;NF=2;NR=1;NS=52;CA=0;DP=492 +1 3774974 venter CG CTG 100 PASS AF=0.552417;HP=1;NF=26;NR=38;NS=52;CA=0;DP=559 +1 3776839 . TGG TG 100 PASS AF=0.0926011;HP=3;NF=5;NR=5;NS=52;CA=0;DP=441 +1 3780438 venter CT CTTT 100 PASS AF=0.113197;HP=2;NF=10;NR=13;NS=52;CA=0;DP=654 +1 3780687 rs34664006;-/G TGT TT 50 PASS AF=0.0614825;HP=1;DB;NF=4;NR=8;NS=50;CA=M;DP=299 +1 3784253 venter ACTGTGCCGGCTTTCTATTC AC 100 PASS AF=0.0567473;HP=1;NF=81;NR=75;NS=52;CA=0;DP=627 +1 3786092 . TACTCA TA 100 PASS AF=0.0330531;HP=1;NF=1;NR=6;NS=52;CA=0;DP=497 +1 3788460 rs35600694;-/ATA,watson CA CAATA 100 PASS AF=0.42686;HP=1;DB;NF=20;NR=17;NS=51;CA=0;DP=533 +1 3788666 rs34172576;-/T,venter GT GTT 100 PASS AF=0.481873;HP=1;DB;NF=26;NR=12;NS=52;CA=0;DP=409 +1 3804956 rs60302317;-/CAACA AACAACA AA 46 PASS AF=0.0866272;HP=2;DB;NF=6;NR=2;NS=52;CA=M;DP=556 +1 3805210 rs58663935;-/AAAG CA CAAAGA 100 PASS AF=0.0920558;HP=3;DB;NF=9;NR=2;NS=52;CA=0;DP=523 +1 3805480 . GAA GA 55 PASS AF=0.0675729;HP=8;NF=13;NR=11;NS=52;CA=0;DP=539 +1 3805914 . CCAGACACTGGCACCCCCCTTC CC 100 PASS AF=0.0288464;HP=2;NF=5;NR=4;NS=52;CA=0;DP=613 +1 3806447 rs35704040;-/C,mills GCC GC 100 PASS AF=0.0700176;HP=6;DB;NF=4;NR=8;NS=52;CA=0;DP=350 +1 3807398 rs35759189;-/G,venter AGG AG 100 PASS AF=0.324114;HP=3;DB;NF=21;NR=8;NS=50;CA=0;DP=355 +1 3808303 venter GT GTTCTTTTCTTT 100 PASS AF=0.475205;HP=2;NF=19;NR=9;NS=52;CA=0;DP=264 +1 3809301 . TACA TA 100 PASS AF=0.028676;HP=1;NF=26;NR=22;NS=52;CA=0;DP=553 +1 3813066 rs34938659;-/T ATT AT 100 PASS AF=0.131264;HP=2;DB;NF=8;NR=6;NS=52;CA=0;DP=521 +1 3814885 . TCACACACACACACACAC TC 34 PASS AF=0.149965;HP=1;NF=6;NR=2;NS=52;CA=M;DP=644 +1 3818483 . AC ACC 29 PASS AF=0.0676027;HP=3;NF=1;NR=7;NS=50;CA=0;DP=412 +1 3820456 . TGG TG 12 PASS AF=0.0215117;HP=4;NF=5;NR=1;NS=51;CA=0;DP=417 +1 3824944 . GCTC GC 100 PASS AF=0.174164;HP=1;NF=9;NR=17;NS=50;CA=0;DP=277 +1 3825911 . CG CGGGGGG 100 PASS AF=0.29134;HP=2;NF=24;NR=12;NS=52;CA=0;DP=514 +1 3827024 . TTCCCT TT 16 PASS AF=0.0318298;HP=2;NF=34;NR=70;NS=51;CA=M;DP=394 +1 3827604 . TG TGG 40 PASS AF=0.0159039;HP=1;NF=2;NR=5;NS=52;CA=0;DP=571 +1 3833062 watson TC TCCACC 100 PASS AF=0.312659;HP=2;NF=17;NR=16;NS=52;CA=0;DP=463 +1 3833266 venter,watson AT ATCAGT 100 PASS AF=0.497122;HP=1;NF=10;NR=19;NS=51;CA=0;DP=412 +1 3833395 . CTATCTT CT 24 PASS AF=0.0218407;HP=1;NF=7;NR=3;NS=50;CA=0;DP=400 +1 3833485 . GTCTAT GT 100 PASS AF=0.417779;HP=1;NF=11;NR=12;NS=50;CA=0;DP=323 +1 3833578 watson TTATCT TT 100 PASS AF=0.329625;HP=2;NF=27;NR=26;NS=51;CA=0;DP=388 +1 3833880 watson CA CATCTA 100 PASS AF=0.347946;HP=1;NF=11;NR=13;NS=52;CA=0;DP=458 +1 3906706 . TGG TG 100 PASS AF=0.149111;HP=3;NF=11;NR=9;NS=52;CA=0;DP=498 +1 3907565 rs34088401;-/C,mills TCC TC 100 PASS AF=0.191109;HP=6;DB;NF=11;NR=14;NS=51;CA=0;DP=478 +1 3909253 . AC ACC 100 PASS AF=0.0974891;HP=2;NF=10;NR=9;NS=52;CA=0;DP=591 +1 3909917 rs35302885;-/T,venter CTT CT 100 PASS AF=0.766256;HP=7;DB;NF=45;NR=61;NS=52;CA=0;DP=605 +1 3916501 rs55698528;-/A,venter GA GAA 100 PASS AF=0.624637;HP=1;DB;NF=37;NR=28;NS=52;CA=0;DP=488 +1 3920626 rs59758170;-/TAAATAAATA AATAAATAAATA AA 100 PASS AF=0.276985;HP=3;DB;NF=6;NR=6;NS=50;CA=M;DP=308 +1 3923069 . TCG TG 100 PASS AF=0.224119;HP=1;NF=23;NR=7;NS=52;CA=0;DP=488 +1 3925431 rs34400281;-/T,venter CTT CT 100 PASS AF=0.372459;HP=2;DB;NF=14;NR=10;NS=51;CA=0;DP=500 +1 3933527 . ATTCCCCACAGTGTCTATGGGGACTCTAGCACGGTCAGGGACCCT AT 100 PASS AF=0.0367516;HP=2;NF=29;NR=33;NS=51;CA=0;DP=622 +1 3934862 venter GCAC GC 100 PASS AF=0.565308;HP=1;NF=47;NR=42;NS=51;CA=0;DP=648 +1 3935044 . TCAC TC 40 PASS AF=0.0156518;HP=1;NF=25;NR=8;NS=52;CA=0;DP=717 +1 3937578 rs56700097;-/A,venter TG TAG 100 PASS AF=0.540707;HP=1;DB;NF=40;NR=17;NS=52;CA=0;DP=392 +1 3938627 rs58820377;-/ATAG TTAGAT TT 100 PASS AF=0.0846429;HP=2;DB;NF=10;NR=11;NS=52;CA=0;DP=489 +1 3945777 . CAGA CA 100 PASS AF=0.442957;HP=1;NF=49;NR=35;NS=52;CA=M;DP=511 +1 3967107 venter GAGAA GA 100 PASS AF=0.226936;HP=1;NF=10;NR=15;NS=52;CA=0;DP=543 +1 3971955 rs56102422;-/T AT ATT 100 PASS AF=0.275646;HP=10;DB;NF=12;NR=15;NS=52;CA=0;DP=477 +1 3973109 rs56883229;-/T,venter ATT AT 100 PASS AF=0.374332;HP=8;DB;NF=7;NR=38;NS=52;CA=0;DP=398 +1 3974590 . ATT AT 100 PASS AF=0.373956;HP=8;NF=19;NR=19;NS=51;CA=0;DP=352 +1 3976220 . TTCCAGCTGTTGGACTGGCAAACAGT TT 100 PASS AF=0.155908;HP=3;NF=51;NR=67;NS=52;CA=0;DP=702 +1 3983232 . GC GCC 100 PASS AF=0.153929;HP=3;NF=2;NR=12;NS=51;CA=0;DP=479 +1 3989673 rs34117538;-/T CTT CT 100 PASS AF=0.138005;HP=7;DB;NF=10;NR=16;NS=52;CA=0;DP=480 +1 3991472 . GT GTT 41 PASS AF=0.0921994;HP=10;NF=23;NR=19;NS=52;CA=0;DP=490 +1 3995340 . GAATA GA 100 PASS AF=0.126804;HP=2;NF=18;NR=25;NS=51;CA=0;DP=456 +1 3995701 rs35842317;-/A GA GAA 100 PASS AF=0.287765;HP=3;DB;NF=16;NR=28;NS=52;CA=0;DP=515 +1 3998289 rs34690250;-/C AT ATT 31 PASS AF=0.0505667;HP=1;DB;NF=5;NR=6;NS=50;CA=0;DP=373 +1 3998556 rs35439065;-/C,venter AC ACC 100 PASS AF=0.152989;HP=1;DB;NF=17;NR=4;NS=52;CA=0;DP=565 +1 4003805 . CCCTTC CC 100 PASS AF=0.497734;HP=3;NF=13;NR=9;NS=52;CA=M;DP=357 +1 4004467 . TA TAA 100 PASS AF=0.178845;HP=10;NF=39;NR=12;NS=52;CA=0;DP=482 +1 4005161 . AAGA AA 10 PASS AF=0.109604;HP=8;NF=5;NR=3;NS=52;CA=0;DP=418 +1 4009724 . GGAGAGGGAGAAG GG 100 PASS AF=0.0443217;HP=4;NF=7;NR=9;NS=51;CA=0;DP=347 +1 4010638 rs59300943;-/T CT CTT 100 PASS AF=0.238748;HP=5;DB;NF=17;NR=13;NS=52;CA=0;DP=424 +1 4018608 . GGGAG GG 14 PASS AF=0.0210215;HP=3;NF=11;NR=22;NS=52;CA=0;DP=439 +1 4020045 rs60135555;-/AAA,venter TA TAAAA 55 PASS AF=0.669408;HP=9;DB;NF=19;NR=3;NS=52;CA=0;DP=315 +1 4021381 . CTGGGAAC CC 26 PASS AF=0.0682584;HP=1;NF=1;NR=7;NS=52;CA=0;DP=500 +1 4022270 . TG TCG 59 PASS AF=0.0269606;HP=6;NF=2;NR=3;NS=52;CA=0;DP=522 +1 4022431 rs58149124;-/CC,watson TC TCCC 100 PASS AF=0.833755;HP=1;DB;NF=29;NR=41;NS=52;CA=0;DP=574 +1 4024133 rs56013829;-/GTCA,venter ACAGTC AC 100 PASS AF=0.444062;HP=1;DB;NF=29;NR=25;NS=52;CA=0;DP=599 +1 4024168 rs56372495;-/AC,venter TCAC TC 100 PASS AF=0.370935;HP=1;DB;NF=14;NR=39;NS=52;CA=0;DP=645 +1 4024408 rs55816119;-/TT,watson TC TCAC 100 PASS AF=0.479654;HP=1;DB;NF=17;NR=29;NS=52;CA=0;DP=726 +1 4024524 . ACTC AC 100 PASS AF=0.220192;HP=1;NF=11;NR=5;NS=52;CA=0;DP=721 +1 4024673 . TT TTCACT 100 PASS AF=0.173855;HP=2;NF=11;NR=13;NS=52;CA=0;DP=887 +1 4024704 . TCAG TG 100 PASS AF=0.0291681;HP=1;NF=6;NR=1;NS=52;CA=0;DP=750 +1 4024735 venter TC TCAC 100 PASS AF=0.247468;HP=1;NF=19;NR=5;NS=52;CA=0;DP=775 +1 4024928 . CTCAGT CT 100 PASS AF=0.0974879;HP=1;NF=11;NR=7;NS=52;CA=0;DP=919 +1 4025065 . TCAC TC 100 PASS AF=0.273013;HP=1;NF=7;NR=12;NS=52;CA=0;DP=714 +1 4025127 . ACTC AC 100 PASS AF=0.380734;HP=1;NF=17;NR=20;NS=52;CA=M;DP=574 +1 4025165 . TC TCACTCAC 100 PASS AF=0.0820414;HP=1;NF=1;NR=9;NS=52;CA=M;DP=574 +1 4025232 watson TC TCAC 100 PASS AF=0.631924;HP=1;NF=15;NR=11;NS=52;CA=M;DP=459 +1 4025339 . TTCACT TT 53 PASS AF=0.159738;HP=2;NF=17;NR=14;NS=51;CA=0;DP=609 +1 4025399 . CA CATA 100 PASS AF=0.0862676;HP=1;NF=4;NR=7;NS=52;CA=0;DP=506 +1 4025472 . CA CATTTA 39 PASS AF=0.0270865;HP=1;NF=2;NR=1;NS=52;CA=0;DP=538 +1 4025543 venter,watson TC TCAC 100 PASS AF=0.26036;HP=1;NF=9;NR=12;NS=52;CA=0;DP=482 +1 4025589 . AC ACTC 53 PASS AF=0.0696821;HP=1;NF=1;NR=1;NS=52;CA=0;DP=575 +1 4025678 watson TACTCA TA 100 PASS AF=0.299176;HP=1;NF=14;NR=7;NS=52;CA=0;DP=549 +1 4025718 . CATT CT 100 PASS AF=0.0815807;HP=1;NF=8;NR=6;NS=52;CA=0;DP=570 +1 4025810 watson TC TCAC 100 PASS AF=0.240222;HP=1;NF=8;NR=8;NS=52;CA=0;DP=442 +1 4025920 . ACTCACACTC AC 15 PASS AF=0.0440807;HP=1;NF=5;NR=6;NS=52;CA=0;DP=439 +1 4025988 . ATCACT AT 100 PASS AF=0.115745;HP=1;NF=7;NR=3;NS=52;CA=M;DP=409 +1 4026021 . ATTCGC AC 19 PASS AF=0.0230633;HP=2;NF=4;NR=4;NS=52;CA=0;DP=408 +1 4026091 . ACAGTC AC 100 PASS AF=0.239672;HP=1;NF=10;NR=12;NS=52;CA=0;DP=418 +1 4026188 . GTCACTCGTT GT 100 PASS AF=0.0942528;HP=1;NF=17;NR=15;NS=51;CA=M;DP=704 +1 4026243 . AC ACTCACTC 100 PASS AF=0.0701669;HP=1;NF=8;NR=2;NS=52;CA=0;DP=852 +1 4026341 . AC ACTC 100 PASS AF=0.180464;HP=1;NF=7;NR=12;NS=52;CA=0;DP=797 +1 4026433 . AC ACTCACAGTC 100 PASS AF=0.0755971;HP=1;NF=10;NR=4;NS=52;CA=0;DP=727 +1 4026489 . CCACTC CC 100 PASS AF=0.152175;HP=2;NF=20;NR=14;NS=52;CA=0;DP=896 +1 4026521 . AT ACT 18 PASS AF=0.0348752;HP=1;NF=8;NR=8;NS=52;CA=0;DP=896 +1 4026676 . ACACTC AC 100 PASS AF=0.345964;HP=1;NF=25;NR=27;NS=52;CA=0;DP=805 +1 4026745 . ACTC AC 100 PASS AF=0.277096;HP=1;NF=6;NR=11;NS=52;CA=0;DP=625 +1 4026831 . AC ACTC 100 PASS AF=0.158736;HP=1;NF=13;NR=9;NS=52;CA=0;DP=585 +1 4026904 . TACTCA TA 59 PASS AF=0.094457;HP=1;NF=7;NR=4;NS=52;CA=0;DP=594 +1 4026996 . TT TTCACT 100 PASS AF=0.0816069;HP=2;NF=19;NR=16;NS=52;CA=0;DP=668 +1 4027100 watson GT GTCACT 100 PASS AF=0.51624;HP=1;NF=22;NR=20;NS=52;CA=0;DP=958 +1 4027153 . AC ACTCACACTC 100 PASS AF=0.221157;HP=1;NF=11;NR=7;NS=52;CA=0;DP=694 +1 4027249 . ACACTCGCTCAGTC AC 100 PASS AF=0.191741;HP=1;NF=20;NR=16;NS=52;CA=0;DP=528 +1 4027301 . TCAC TC 100 PASS AF=0.21653;HP=1;NF=6;NR=9;NS=52;CA=0;DP=511 +1 4027378 . TT TTCACT 100 PASS AF=0.23813;HP=2;NF=19;NR=16;NS=52;CA=0;DP=565 +1 4027440 . TT TTCACT 100 PASS AF=0.351897;HP=2;NF=28;NR=13;NS=52;CA=0;DP=736 +1 4031776 venter,watson GC GCTGCTCC 100 PASS AF=0.57914;HP=1;NF=17;NR=13;NS=52;CA=0;DP=475 +1 4046995 rs60127181;-/ATG,watson GC GGATC 100 PASS AF=0.863384;HP=1;DB;NF=37;NR=32;NS=51;CA=0;DP=427 +1 4053051 . AC AACC 10 PASS AF=0.0731381;HP=1;NF=2;NR=3;NS=52;CA=0;DP=453 +1 4056743 rs57501900;-/T,venter ATT AT 100 PASS AF=0.863012;HP=6;DB;NF=63;NR=45;NS=52;CA=0;DP=485 +1 4078234 venter,watson CTGCCTGTGTGAGCAAGAT CT 100 PASS AF=0.308447;HP=1;NF=26;NR=18;NS=52;CA=0;DP=484 +1 4080449 rs35774756;-/T GTT GT 100 PASS AF=0.285891;HP=2;DB;NF=20;NR=24;NS=51;CA=0;DP=526 +1 4082493 rs35701497;-/G CGG CG 100 PASS AF=0.277913;HP=4;DB;NF=14;NR=16;NS=52;CA=0;DP=416 +1 4086137 . CA CTA 100 PASS AF=0.0260425;HP=1;NF=4;NR=2;NS=52;CA=0;DP=569 +1 4088196 . TTCT TT 100 PASS AF=0.0658972;HP=3;NF=67;NR=77;NS=51;CA=B;DP=647 +1 4091673 rs56198003;-/TTA GTTAT GT 100 PASS AF=0.0274099;HP=2;DB;NF=4;NR=7;NS=52;CA=0;DP=489 +1 4093407 rs35442233;-/G,venter TGG TG 100 PASS AF=0.056726;HP=4;DB;NF=4;NR=5;NS=51;CA=0;DP=432 +1 4097902 rs5772141;-/ATT,mills,venter,watson CA CATTA 100 PASS AF=0.999995;HP=1;DB;NF=38;NR=34;NS=52;CA=0;DP=432 +1 4106716 . AC ACACACACACACGC 100 PASS AF=0.316911;HP=1;NF=1;NR=1;NS=52;CA=0;DP=601 +1 4114274 rs60603556;-/CAT,watson AATCA AA 100 PASS AF=0.135224;HP=3;DB;NF=17;NR=9;NS=51;CA=0;DP=587 +1 4114592 rs56285575;-/ACA,venter AAACA AA 100 PASS AF=0.254759;HP=3;DB;NF=21;NR=18;NS=52;CA=0;DP=554 +1 4114812 . TTAT TT 33 PASS AF=0.14738;HP=3;NF=5;NR=4;NS=52;CA=0;DP=411 +1 4114996 . AA AATTATTA 11 PASS AF=0.228122;HP=2;NF=26;NR=29;NS=49;CA=0;DP=276 +1 4120825 . GAA GA 43 PASS AF=0.147904;HP=2;NF=11;NR=17;NS=51;CA=0;DP=328 +1 4121802 . ATGT AT 11 PASS AF=0.0113836;HP=1;NF=24;NR=16;NS=52;CA=0;DP=570 +1 4131826 . ATTGTTT AT 100 PASS AF=0.999996;HP=2;NF=38;NR=35;NS=52;CA=0;DP=456 +1 4134659 rs35271731;-/G TG TGG 100 PASS AF=0.417516;HP=5;DB;NF=21;NR=19;NS=52;CA=0;DP=429 +1 4139315 rs35859581;-/T,venter GT GTT 100 PASS AF=0.371694;HP=2;DB;NF=12;NR=16;NS=52;CA=0;DP=444 +1 4144542 . CAA CA 100 PASS AF=0.0915309;HP=2;NF=7;NR=8;NS=52;CA=M;DP=461 +1 4149378 rs35644791;-/CCT,venter,watson AC ACCTC 100 PASS AF=0.955034;HP=2;DB;NF=35;NR=24;NS=52;CA=0;DP=461 +1 4150078 . ATC AC 100 PASS AF=0.0248618;HP=1;NF=3;NR=1;NS=52;CA=0;DP=489 +1 4158176 rs61115653;-/A CA CAA 100 PASS AF=0.109858;HP=9;DB;NF=9;NR=8;NS=52;CA=0;DP=480 +1 4158371 rs35550030;-/G AGA AA 100 PASS AF=0.282272;HP=1;DB;NF=22;NR=13;NS=52;CA=0;DP=508 +1 4160853 . AG AGTG 100 PASS AF=0.883963;HP=1;NF=52;NR=40;NS=52;CA=0;DP=475 +1 4163479 rs35439066;-/T,venter ATT AT 100 PASS AF=0.421487;HP=7;DB;NF=35;NR=40;NS=52;CA=0;DP=580 +1 4165518 rs5772143;-/A,mills CAT CT 100 PASS AF=0.0997002;HP=1;DB;NF=8;NR=9;NS=52;CA=0;DP=569 +1 4168412 . TG TGG 100 PASS AF=0.0597927;HP=5;NF=7;NR=5;NS=50;CA=0;DP=411 +1 4174019 . CCTTTC CC 100 PASS AF=0.223832;HP=2;NF=5;NR=11;NS=51;CA=M;DP=369 +1 4176371 rs5772145;-/GGGCT,mills,venter,watson GG GGGGCTG 100 PASS AF=0.965127;HP=4;DB;NF=37;NR=39;NS=51;CA=0;DP=577 +1 4180359 rs35134459;-/T,venter CG CTG 100 PASS AF=0.994644;HP=2;DB;NF=70;NR=40;NS=52;CA=0;DP=510 +1 4198168 . GCCATTTACATCCCACC GC 100 PASS AF=0.0947023;HP=2;NF=47;NR=53;NS=52;CA=0;DP=625 +1 4203370 . TCAC TC 22 PASS AF=0.151126;HP=1;NF=40;NR=22;NS=51;CA=0;DP=481 +1 4224147 . ATGT AT 100 PASS AF=0.459042;HP=1;NF=45;NR=57;NS=52;CA=0;DP=508 +1 4236168 venter,watson GT GTCCTGTT 100 PASS AF=0.465028;HP=1;NF=21;NR=21;NS=51;CA=0;DP=473 +1 4238553 . TAG TG 100 PASS AF=0.0884036;HP=1;NF=3;NR=3;NS=52;CA=0;DP=313 +1 4243904 . TG TGGGGG 28 PASS AF=0.177328;HP=1;NF=6;NR=9;NS=52;CA=0;DP=598 +1 4252300 . AATTTA AA 27 PASS AF=0.0160294;HP=2;NF=16;NR=12;NS=52;CA=0;DP=550 +1 4256051 . CC CCTCAC 100 PASS AF=0.423907;HP=2;NF=10;NR=6;NS=52;CA=M;DP=450 +1 4256251 rs56817136;-/AATCCATC TC TCATCAATCC 27 PASS AF=0.483921;HP=1;DB;NF=24;NR=28;NS=52;CA=M;DP=501 +1 4256338 rs59859709;-/CCAT CCCATC CC 100 PASS AF=0.420087;HP=3;DB;NF=47;NR=73;NS=52;CA=0;DP=510 +1 4258560 rs35749795;-/G,venter TGG TG 100 PASS AF=0.563751;HP=3;DB;NF=30;NR=43;NS=52;CA=0;DP=533 +1 4270968 rs5772150;-/A,mills,venter TAA TA 100 PASS AF=0.863858;HP=2;DB;NF=66;NR=65;NS=52;CA=0;DP=554 +1 4272781 rs34523387;-/CA,venter,watson TCAC TC 100 PASS AF=0.221206;HP=1;DB;NF=55;NR=32;NS=52;CA=0;DP=555 +1 4276688 rs56762609;-/A CA CAA 25 PASS AF=0.0168189;HP=4;DB;NF=5;NR=7;NS=52;CA=0;DP=567 +1 4278344 rs33957131;-/A,mills TAT TT 100 PASS AF=0.260307;HP=1;DB;NF=13;NR=14;NS=52;CA=M;DP=390 +1 4280264 rs35972891;-/G,venter TG TGG 100 PASS AF=0.36321;HP=6;DB;NF=16;NR=21;NS=52;CA=0;DP=487 +1 4280920 rs3058085;-/AGA,mills,venter,watson AT ATCTT 100 PASS AF=0.75024;HP=1;DB;NF=34;NR=50;NS=52;CA=0;DP=518 +1 4281851 rs59086076;-/TTGT CTGTTT CT 100 PASS AF=0.15371;HP=1;DB;NF=12;NR=13;NS=52;CA=0;DP=454 +1 4287207 rs3986843;-/CCT CA CAGGA 100 PASS AF=0.100002;HP=1;DB;NF=8;NR=1;NS=52;CA=0;DP=451 +1 4289708 . GTGTTAG GG 37 PASS AF=0.0904846;HP=1;NF=3;NR=9;NS=52;CA=0;DP=447 +1 4291813 . CGC CC 41 PASS AF=0.05598;HP=1;NF=1;NR=9;NS=52;CA=0;DP=504 +1 4291856 rs33950418;-/C,mills ACA AA 53 PASS AF=0.0424203;HP=1;DB;NF=2;NR=10;NS=52;CA=M;DP=504 +1 4292024 rs33982329;-/CA,mills CG CATG 100 PASS AF=0.0974178;HP=1;DB;NF=14;NR=14;NS=52;CA=0;DP=697 +1 4296830 . CTT CT 100 PASS AF=0.101792;HP=2;NF=15;NR=4;NS=52;CA=0;DP=805 +1 4298115 rs34054009;-/G,venter AG AGG 100 PASS AF=0.314255;HP=2;DB;NF=25;NR=10;NS=52;CA=0;DP=565 +1 4310246 rs35999105;-/A TA TAA 100 PASS AF=0.229765;HP=5;DB;NF=23;NR=13;NS=52;CA=0;DP=488 +1 4310305 venter GA GAA 39 PASS AF=0.078696;HP=9;NF=15;NR=5;NS=52;CA=0;DP=455 +1 4312461 . GAAAGAAA GA 24 PASS AF=0.0372797;HP=3;NF=23;NR=6;NS=52;CA=M;DP=401 +1 4313453 . GG GTG 23 PASS AF=0.026167;HP=2;NF=2;NR=5;NS=52;CA=0;DP=614 +1 4315016 rs34078493;-/T,venter CT CTT 100 PASS AF=0.459017;HP=1;DB;NF=25;NR=37;NS=52;CA=0;DP=493 +1 4316236 rs35864764;-/TC ATCT AT 100 PASS AF=0.164629;HP=1;DB;NF=18;NR=15;NS=52;CA=0;DP=434 +1 4317119 rs35907112;-/AG AAGA AA 100 PASS AF=0.210583;HP=3;DB;NF=19;NR=13;NS=52;CA=0;DP=652 +1 4319781 rs34098980;-/AAAAA,mills,venter CC CAAAAAC 100 PASS AF=0.451406;HP=2;DB;NF=9;NR=1;NS=52;CA=0;DP=605 +1 4323411 . GT GTT 41 PASS AF=0.0448346;HP=6;NF=4;NR=5;NS=52;CA=0;DP=498 +1 4326343 . CG CGGGGGGGGGGG 100 PASS AF=0.212625;HP=2;NF=5;NR=11;NS=52;CA=0;DP=475 +1 4329138 . GTGAT GT 47 PASS AF=0.0168095;HP=1;NF=35;NR=37;NS=52;CA=0;DP=675 +1 4329500 venter ATGGTGATGGT AT 100 PASS AF=0.0491;HP=1;NF=35;NR=49;NS=52;CA=0;DP=718 +1 4333035 . CCACTC CC 100 PASS AF=0.0536691;HP=2;NF=18;NR=17;NS=52;CA=0;DP=614 +1 4333090 . CCCATC CC 100 PASS AF=0.896174;HP=3;NF=52;NR=56;NS=52;CA=0;DP=564 +1 4333868 rs34013096;-/CCAT AC ACCATC 100 PASS AF=0.411752;HP=2;DB;NF=63;NR=59;NS=52;CA=0;DP=556 +1 4352929 . TAA TA 100 PASS AF=0.0606075;HP=5;NF=10;NR=5;NS=51;CA=0;DP=422 +1 4360308 . CAA CA 100 PASS AF=0.160821;HP=3;NF=12;NR=13;NS=52;CA=0;DP=502 +1 4360675 rs55750624;-/A GAA GA 100 PASS AF=0.209252;HP=2;DB;NF=18;NR=10;NS=52;CA=0;DP=456 +1 4362123 rs57250327;-/AAATT TA TAATTAA 100 PASS AF=0.202867;HP=2;DB;NF=23;NR=24;NS=52;CA=0;DP=404 +1 4372014 rs34773421;-/A,venter TAA TA 100 PASS AF=0.507594;HP=2;DB;NF=43;NR=31;NS=52;CA=0;DP=496 +1 4373092 . CATTTA CA 100 PASS AF=0.155807;HP=1;NF=19;NR=10;NS=52;CA=0;DP=440 +1 4375952 . TCT TT 100 PASS AF=0.0215948;HP=1;NF=3;NR=2;NS=52;CA=0;DP=530 +1 4376164 rs57973702;-/TG,venter CG CGTG 100 PASS AF=0.555727;HP=1;DB;NF=33;NR=60;NS=52;CA=0;DP=552 +1 4382255 . GT GTT 100 PASS AF=0.134524;HP=8;NF=12;NR=14;NS=52;CA=0;DP=445 +1 4382929 . CG CGCCGTGCCCTGCTCAG 100 PASS AF=0.293977;HP=1;NF=3;NR=1;NS=52;CA=0;DP=423 +1 4386769 rs34696074;-/G TGG TG 100 PASS AF=0.524405;HP=3;DB;NF=43;NR=31;NS=51;CA=0;DP=586 +1 4386900 rs35831569;-/GTGA,watson TG TGTGAG 100 PASS AF=0.786341;HP=1;DB;NF=49;NR=47;NS=52;CA=0;DP=728 +1 4387089 rs35106948;-/GA,venter,watson TGAG TG 100 PASS AF=0.76407;HP=1;DB;NF=42;NR=48;NS=52;CA=0;DP=730 +1 4398343 rs56075652;-/AGCTAG,mills,venter,watson GGAGCTAG GG 100 PASS AF=0.850798;HP=2;DB;NF=51;NR=52;NS=52;CA=0;DP=535 +1 4403445 . ATC AC 100 PASS AF=0.0257077;HP=1;NF=3;NR=3;NS=52;CA=0;DP=579 +1 4413424 . GGAAG GG 100 PASS AF=0.0911622;HP=2;NF=13;NR=11;NS=52;CA=0;DP=539 +1 4415363 rs35655214;-/A,mills,venter CAA CA 100 PASS AF=0.279808;HP=10;DB;NF=16;NR=13;NS=52;CA=0;DP=623 +1 4419729 rs34301403;-/T,venter CT CTT 100 PASS AF=0.276688;HP=3;DB;NF=23;NR=17;NS=52;CA=0;DP=491 +1 4429935 . ACC AC 100 PASS AF=0.121066;HP=2;NF=8;NR=7;NS=52;CA=0;DP=509 +1 4432975 rs35185885;-/TTAT,venter TT TTTTAT 100 PASS AF=0.370788;HP=4;DB;NF=7;NR=50;NS=51;CA=0;DP=329 +1 4433724 . AC ACC 100 PASS AF=0.191535;HP=2;NF=16;NR=17;NS=52;CA=0;DP=609 +1 4434361 . GA GATGATATTGAAA 100 PASS AF=0.175787;HP=1;NF=8;NR=5;NS=52;CA=0;DP=496 +1 4439328 rs55695069;-/TGTG,watson TGTGAG TG 100 PASS AF=0.115075;HP=1;DB;NF=13;NR=10;NS=51;CA=0;DP=510 +1 4444447 . GC GCC 100 PASS AF=0.126735;HP=1;NF=8;NR=6;NS=52;CA=0;DP=442 +1 4444562 watson TTCG TG 100 PASS AF=0.167206;HP=3;NF=13;NR=9;NS=52;CA=0;DP=477 +1 4448379 rs55971665;-/A,venter GAA GA 100 PASS AF=0.999997;HP=5;DB;NF=29;NR=34;NS=51;CA=0;DP=398 +1 4456774 rs34368344;-/CTCA,watson TCTCAC TC 100 PASS AF=0.4985;HP=1;DB;NF=46;NR=35;NS=52;CA=0;DP=679 +1 4456823 . TT TTTTCTCTCT 100 PASS AF=0.281015;HP=3;NF=18;NR=7;NS=52;CA=0;DP=566 +1 4460399 . CAGA CA 17 PASS AF=0.0162627;HP=1;NF=4;NR=1;NS=52;CA=0;DP=437 +1 4461064 . TG TGGG 100 PASS AF=0.136493;HP=8;NF=11;NR=12;NS=52;CA=0;DP=516 +1 4461120 . GAGTCA GA 100 PASS AF=0.106497;HP=1;NF=4;NR=10;NS=52;CA=0;DP=513 +1 4462914 rs35786528;-/T,venter GTT GT 100 PASS AF=0.636288;HP=9;DB;NF=46;NR=44;NS=52;CA=0;DP=457 +1 4464201 rs35933446;-/G AGC AC 100 PASS AF=0.0422945;HP=1;DB;NF=3;NR=5;NS=52;CA=0;DP=559 +1 4465553 rs33984734;-/C,mills,venter GCC GC 100 PASS AF=0.832437;HP=3;DB;NF=43;NR=36;NS=52;CA=0;DP=507 +1 4465878 rs55781312;-/GAACA,watson TACAGAA TA 100 PASS AF=0.547352;HP=1;DB;NF=48;NR=55;NS=52;CA=0;DP=612 +1 4466414 rs34356738;-/T,venter AT ATT 100 PASS AF=0.0343632;HP=4;DB;NF=5;NR=2;NS=52;CA=0;DP=523 +1 4468803 . CT CTTTTCTTTTCTTT 100 PASS AF=0.185641;HP=2;NF=2;NR=1;NS=51;CA=0;DP=271 +1 4469024 . TT TTGTGT 26 PASS AF=0.65093;HP=2;NF=51;NR=54;NS=51;CA=0;DP=465 +1 4470162 rs34280110;-/T,venter CT CTT 100 PASS AF=0.19103;HP=3;DB;NF=13;NR=16;NS=52;CA=0;DP=581 +1 4472390 rs35540877;-/AAG TAAGA TA 100 PASS AF=0.0513799;HP=2;DB;NF=4;NR=3;NS=52;CA=0;DP=531 +1 4481812 rs34806922;-/A,venter GAA GA 100 PASS AF=0.0356083;HP=3;DB;NF=4;NR=4;NS=52;CA=0;DP=576 +1 4482705 . CA CATCTA 100 PASS AF=0.203301;HP=1;NF=34;NR=52;NS=50;CA=M;DP=382 +1 4482808 . CTA CA 16 PASS AF=0.0550307;HP=1;NF=1;NR=1;NS=51;CA=M;DP=356 +1 4482848 rs5772166;-/TCTCTCTC,mills ATCTCTCTCT AT 100 PASS AF=0.561639;HP=1;DB;NF=52;NR=17;NS=51;CA=M;DP=311 +1 4484471 rs3059158;-/CT,mills,watson AG ACTG 100 PASS AF=0.497825;HP=1;DB;NF=31;NR=34;NS=52;CA=0;DP=538 +1 4486660 rs34976033;-/CCCT,mills,venter,watson GCTCCC GC 100 PASS AF=0.593551;HP=1;DB;NF=42;NR=55;NS=52;CA=0;DP=566 +1 4486840 rs35808993;-/A,venter GAT GT 100 PASS AF=0.0446408;HP=1;DB;NF=4;NR=4;NS=52;CA=0;DP=539 +1 4495865 watson TGACCT TT 100 PASS AF=0.477912;HP=1;NF=15;NR=22;NS=52;CA=0;DP=386 +1 4498895 . TAAACTCA TA 100 PASS AF=0.365307;HP=3;NF=30;NR=28;NS=52;CA=0;DP=561 +1 4499763 . TT TTTTAGTTTAGTTTAGTTTAGTTTAGT 15 PASS AF=0.437504;HP=4;NF=5;NR=8;NS=51;CA=0;DP=440 +1 4500994 rs57293099;-/A,venter GG GAG 19 PASS AF=0.533167;HP=5;DB;NF=26;NR=15;NS=51;CA=0;DP=466 +1 4501978 rs34937816;-/T,mills,venter GT GTT 100 PASS AF=0.677682;HP=1;DB;NF=47;NR=42;NS=52;CA=0;DP=475 +1 4504724 venter,watson TAGACA TA 100 PASS AF=0.381777;HP=1;NF=34;NR=33;NS=52;CA=0;DP=728 +1 4504861 venter TACAGAGAGAGACAGAGAGA TA 100 PASS AF=0.208225;HP=1;NF=42;NR=31;NS=52;CA=0;DP=820 +1 4506249 rs56013880;-/T,mills,venter GC GTC 100 PASS AF=0.652109;HP=2;DB;NF=41;NR=48;NS=52;CA=0;DP=522 +1 4506287 venter TAG TG 100 PASS AF=0.348604;HP=1;NF=23;NR=27;NS=52;CA=0;DP=534 +1 4510123 rs35963445;-/C,venter TC TCC 100 PASS AF=0.750939;HP=6;DB;NF=32;NR=50;NS=52;CA=0;DP=488 +1 4511427 rs34235356;-/T,venter AT ATT 100 PASS AF=0.559297;HP=8;DB;NF=40;NR=27;NS=52;CA=0;DP=549 +1 4512561 rs57315980;-/GAG TGGAG TG 100 PASS AF=0.0276885;HP=2;DB;NF=7;NR=4;NS=52;CA=0;DP=581 +1 4512788 rs56318426;-/GGATAGTGTG TC TGTGTGGGATAC 100 PASS AF=0.145759;HP=1;DB;NF=7;NR=6;NS=52;CA=0;DP=570 +1 4513234 rs5772168;-/ATCA,venter,watson TA TATCAA 100 PASS AF=0.761132;HP=1;DB;NF=45;NR=38;NS=52;CA=0;DP=478 +1 4513552 rs34248962;-/G,venter CTC CC 100 PASS AF=0.397344;HP=1;DB;NF=19;NR=21;NS=52;CA=0;DP=502 +1 4518079 . CTTTATGTCAAC CC 31 PASS AF=0.0537494;HP=3;NF=13;NR=6;NS=52;CA=0;DP=567 +1 4519870 . CATAA CA 100 PASS AF=0.156873;HP=1;NF=25;NR=19;NS=52;CA=0;DP=518 +1 4520552 venter,watson ATATT AT 100 PASS AF=0.0454741;HP=1;NF=13;NR=21;NS=52;CA=0;DP=523 +1 4524683 rs60936673;-/A,venter GAC GC 100 PASS AF=0.0433734;HP=1;DB;NF=5;NR=1;NS=51;CA=0;DP=407 +1 4531795 . CG CGAGCAGATAG 100 PASS AF=0.0529244;HP=1;NF=2;NR=3;NS=52;CA=0;DP=598 +1 4533811 rs61232512;-/TCCCTCCTGGACAGCCAGG,watson TCCTCCTGGACAGCCAGGTCC TC 100 PASS AF=0.455665;HP=2;DB;NF=9;NR=12;NS=52;CA=0;DP=455 +1 4535415 rs34971058;-/C,mills,venter GC GCC 100 PASS AF=0.872856;HP=1;DB;NF=71;NR=50;NS=52;CA=0;DP=585 +1 4540778 rs5772169;-/T,mills CTG CG 100 PASS AF=0.129616;HP=1;DB;NF=9;NR=6;NS=52;CA=0;DP=518 +1 4541031 . TT TTTTCT 100 PASS AF=0.0665496;HP=6;NF=18;NR=24;NS=51;CA=0;DP=371 +1 4541492 rs5772170;-/G,mills,venter TG TGG 100 PASS AF=0.912727;HP=3;DB;NF=57;NR=39;NS=52;CA=0;DP=454 +1 4542962 . CC CCTCTCTCTCTC 100 PASS AF=0.767807;HP=2;NF=57;NR=35;NS=52;CA=0;DP=481 +1 4544333 rs3059964;-/CT,venter ACTC AC 100 PASS AF=0.941425;HP=1;DB;NF=54;NR=73;NS=52;CA=0;DP=591 +1 4547027 rs34146010;-/C ACC AC 100 PASS AF=0.974502;HP=2;DB;NF=55;NR=74;NS=52;CA=0;DP=535 +1 4547927 rs34056554;-/T,venter ATT AT 100 PASS AF=0.867021;HP=3;DB;NF=7;NR=12;NS=51;CA=0;DP=398 +1 4551259 rs34018288;-/TG,venter,watson CT CTGT 100 PASS AF=0.964821;HP=1;DB;NF=25;NR=27;NS=52;CA=0;DP=445 +1 4552887 . GT GTCT 100 PASS AF=0.155774;HP=1;NF=6;NR=7;NS=52;CA=0;DP=507 +1 4556585 rs3833958;-/GGGCT,venter GA GAGCCCA 100 PASS AF=0.248571;HP=1;DB;NF=9;NR=9;NS=52;CA=0;DP=416 +1 4558195 rs58248788;-/T,venter ATT AT 100 PASS AF=0.949748;HP=4;DB;NF=38;NR=18;NS=51;CA=0;DP=446 +1 4558625 . AGA AA 100 PASS AF=0.105248;HP=1;NF=12;NR=4;NS=52;CA=0;DP=526 +1 4570630 . GT GGGTTT 14 PASS AF=0.0570941;HP=1;NF=4;NR=2;NS=52;CA=0;DP=480 +1 4574298 . GC GAC 41 PASS AF=0.0333335;HP=2;NF=1;NR=4;NS=52;CA=0;DP=497 +1 4574507 . TT TTCCTCTAATGCT 100 PASS AF=0.406213;HP=2;NF=13;NR=8;NS=52;CA=0;DP=437 +1 4577694 rs33988719;-/G,mills,venter TG TGG 100 PASS AF=0.999997;HP=1;DB;NF=52;NR=28;NS=52;CA=0;DP=381 +1 4578235 . TAT TT 26 PASS AF=0.292482;HP=1;NF=8;NR=14;NS=51;CA=0;DP=330 +1 4580634 . ATAAAATA AA 100 PASS AF=0.328083;HP=1;NF=11;NR=4;NS=51;CA=M;DP=372 +1 4581760 . CTT CT 100 PASS AF=0.0551414;HP=2;NF=4;NR=7;NS=52;CA=0;DP=578 +1 4583153 rs35427335;-/CA,venter,watson GCAC GC 100 PASS AF=0.0310016;HP=1;DB;NF=3;NR=4;NS=52;CA=0;DP=483 +1 4586257 rs34899280;-/T GTC GC 100 PASS AF=0.311452;HP=1;DB;NF=16;NR=8;NS=51;CA=0;DP=441 +1 4589959 venter,watson GG GGGCCTG 100 PASS AF=0.0494854;HP=3;NF=3;NR=4;NS=52;CA=0;DP=469 +1 4590830 rs34057361;-/GCAAAGC,mills,venter,watson TGCAAAGCG TG 100 PASS AF=0.739178;HP=1;DB;NF=42;NR=52;NS=50;CA=0;DP=465 +1 4595540 rs56784481;-/T TCT TT 53 PASS AF=0.154234;HP=1;DB;NF=7;NR=21;NS=52;CA=0;DP=439 +1 4596270 . AC ACGCTGAGGCTGCAGCACCCCTCGTGGAGC 100 PASS AF=0.171201;HP=1;NF=6;NR=1;NS=52;CA=0;DP=498 +1 4600396 rs36042545;-/AT,venter CATA CA 100 PASS AF=0.185579;HP=1;DB;NF=24;NR=23;NS=52;CA=0;DP=357 +1 4603645 rs60786353;-/C,venter AC ACC 100 PASS AF=0.999998;HP=1;DB;NF=76;NR=57;NS=52;CA=0;DP=571 +1 4607282 . GTGAT GT 100 PASS AF=0.287968;HP=1;NF=38;NR=26;NS=52;CA=0;DP=810 +1 4607435 . GTGAT GT 100 PASS AF=0.347474;HP=1;NF=39;NR=53;NS=52;CA=0;DP=674 +1 4611309 . CGTGTG CG 100 PASS AF=0.311775;HP=1;NF=38;NR=31;NS=52;CA=0;DP=486 +1 4621966 rs35610947;-/GT TTGT TT 100 PASS AF=0.252136;HP=3;DB;NF=41;NR=42;NS=52;CA=0;DP=612 +1 4623256 rs59174221;-/CTCCAGAAAGCAC GGAAAGCACCTCCAG GG 100 PASS AF=0.248792;HP=2;DB;NF=24;NR=28;NS=52;CA=0;DP=458 +1 4623618 rs60584333;-/GTGTCGGGAGCAGAGACTG,venter GC GCTGGTGTCGGGAGCAGAGAC 100 PASS AF=0.624955;HP=1;DB;NF=8;NR=16;NS=51;CA=0;DP=518 +1 4628242 rs56871532;-/TG,venter,watson CTGT CT 100 PASS AF=0.630417;HP=1;DB;NF=46;NR=41;NS=52;CA=0;DP=605 +1 4631325 watson GAGGACATA GA 100 PASS AF=0.0694082;HP=1;NF=14;NR=10;NS=51;CA=0;DP=388 +1 4633949 . TCC TC 100 PASS AF=0.223776;HP=7;NF=13;NR=4;NS=51;CA=0;DP=492 +1 4637510 . TAAA TA 18 PASS AF=0.0428857;HP=9;NF=13;NR=6;NS=52;CA=0;DP=456 +1 4639728 . GGTGTGTGTGTGTGTG GG 56 PASS AF=0.223403;HP=3;NF=39;NR=66;NS=51;CA=0;DP=466 +1 4645583 rs59275910;-/G,venter AG AGG 100 PASS AF=0.999998;HP=1;DB;NF=41;NR=59;NS=51;CA=0;DP=416 +1 4649824 . CTT CT 100 PASS AF=0.0615007;HP=2;NF=3;NR=3;NS=52;CA=0;DP=371 +1 4653490 . GAG GG 19 PASS AF=0.016501;HP=1;NF=1;NR=2;NS=52;CA=0;DP=448 +1 4654099 rs3086606;-/GTCTGCA,mills CC CCAGTCTGC 100 PASS AF=0.299705;HP=2;DB;NF=11;NR=10;NS=52;CA=0;DP=440 +1 4655877 rs58828516;-/G TG TGG 100 PASS AF=0.083803;HP=6;DB;NF=13;NR=14;NS=52;CA=0;DP=553 +1 4656096 rs34592768;-/G,mills TGG TG 100 PASS AF=0.0586852;HP=2;DB;NF=6;NR=4;NS=52;CA=0;DP=486 +1 4656943 . GGTGTG GG 53 PASS AF=0.0156574;HP=2;NF=15;NR=18;NS=52;CA=0;DP=804 +1 4668803 . CTT CT 39 PASS AF=0.0748695;HP=8;NF=8;NR=6;NS=52;CA=0;DP=401 +1 4670089 rs34058244;-/AC,venter GA GACA 100 PASS AF=0.471432;HP=1;DB;NF=47;NR=39;NS=52;CA=0;DP=789 +1 4670383 rs35737766;-/TCAC,watson ACACTC AC 100 PASS AF=0.331554;HP=1;DB;NF=20;NR=35;NS=52;CA=0;DP=609 +1 4676654 . AGATG AG 10 PASS AF=0.011049;HP=1;NF=15;NR=18;NS=52;CA=0;DP=617 +1 4684590 . TCCTGCACCTGCTGTGCCCCTGGCTCCCAGCACC TC 100 PASS AF=0.0368566;HP=2;NF=13;NR=7;NS=52;CA=0;DP=543 +1 4689505 . TC TCTGTCCTCTCTCCTAGCTCTGGTGCCCTGAGATGC 100 PASS AF=0.355136;HP=1;NF=2;NR=3;NS=52;CA=0;DP=597 +1 4693342 rs3835539;-/TTCA CC CCATTC 100 PASS AF=0.307703;HP=2;DB;NF=60;NR=61;NS=52;CA=0;DP=594 +1 4695582 venter TGTGAGG TG 100 PASS AF=0.630317;HP=1;NF=17;NR=29;NS=52;CA=0;DP=408 +1 4700273 . GCCT GT 51 PASS AF=0.154012;HP=2;NF=3;NR=3;NS=52;CA=0;DP=402 +1 4700727 rs34897087;-/A,venter CG CGG 13 PASS AF=0.0702045;HP=8;DB;NF=22;NR=6;NS=51;CA=M;DP=305 +1 4702014 rs34592315;-/AA,venter TAAA TA 100 PASS AF=0.183045;HP=3;DB;NF=9;NR=20;NS=52;CA=0;DP=551 +1 4702135 . GCC GC 100 PASS AF=0.132917;HP=5;NF=18;NR=10;NS=52;CA=0;DP=561 +1 4702842 rs3835540;-/GAC TGACG TG 100 PASS AF=0.333162;HP=1;DB;NF=25;NR=19;NS=52;CA=0;DP=517 +1 4703849 rs35422518;-/TCTCCAGGC,mills,venter,watson AGCTCTCCAGG AG 100 PASS AF=0.461699;HP=1;DB;NF=52;NR=39;NS=52;CA=0;DP=558 +1 4704242 . ATT AT 100 PASS AF=0.124811;HP=6;NF=16;NR=12;NS=52;CA=0;DP=518 +1 4704545 . GCACAC GC 43 PASS AF=0.374122;HP=1;NF=68;NR=46;NS=52;CA=0;DP=586 +1 4709952 rs55677440;-/GT TT TTGT 100 PASS AF=0.111566;HP=3;DB;NF=37;NR=55;NS=52;CA=0;DP=757 +1 4712998 rs35177072;-/CTC,mills,venter,watson TCTCC TC 100 PASS AF=0.409205;HP=1;DB;NF=23;NR=30;NS=52;CA=0;DP=527 +1 4714785 rs3835541;-/A,venter CAA CA 100 PASS AF=0.207747;HP=2;DB;NF=12;NR=9;NS=52;CA=0;DP=525 +1 4715739 . GT GTT 100 PASS AF=0.0593871;HP=1;NF=4;NR=4;NS=52;CA=0;DP=486 +1 4717874 rs33969697;-/C,mills,venter TCA TA 100 PASS AF=0.644689;HP=1;DB;NF=37;NR=47;NS=52;CA=0;DP=521 +1 4720164 rs5772181;-/GA,mills,venter,watson TG TGAG 100 PASS AF=0.660601;HP=1;DB;NF=60;NR=61;NS=52;CA=0;DP=723 +1 4725394 venter AG AGAGAGACATGAGTGAAGAAGG 100 PASS AF=0.486541;HP=1;NF=34;NR=40;NS=52;CA=0;DP=600 +1 4726136 rs35816653;-/T,venter CT CTT 100 PASS AF=0.325542;HP=7;DB;NF=25;NR=33;NS=52;CA=0;DP=561 +1 4728249 rs35594902;-/TGTT CT CTGTTT 100 PASS AF=0.236832;HP=1;DB;NF=16;NR=16;NS=52;CA=0;DP=595 +1 4730619 rs56688128;-/AAGGC,venter,watson ACAAGGC AC 100 PASS AF=0.197783;HP=1;DB;NF=14;NR=10;NS=52;CA=0;DP=450 +1 4738491 . ATCTCTCTCTCTCTCTCTCTCT AT 100 PASS AF=0.109332;HP=1;NF=34;NR=36;NS=52;CA=0;DP=556 +1 4743143 rs34960969;-/T,venter ATT AT 100 PASS AF=0.443382;HP=2;DB;NF=27;NR=29;NS=51;CA=0;DP=521 +1 4750482 . AC ACC 44 PASS AF=0.0773717;HP=1;NF=1;NR=10;NS=52;CA=0;DP=532 +1 4751808 . CC CTC 100 PASS AF=0.287743;HP=6;NF=22;NR=19;NS=52;CA=0;DP=549 +1 4753639 rs56735073;-/G AG AGG 100 PASS AF=0.354197;HP=6;DB;NF=26;NR=25;NS=52;CA=0;DP=499 +1 4756338 . TGG TG 100 PASS AF=0.145276;HP=6;NF=12;NR=22;NS=52;CA=0;DP=505 +1 4756654 . CTGT CT 100 PASS AF=0.0253358;HP=1;NF=2;NR=3;NS=52;CA=0;DP=502 +1 4768227 rs34482713;-/A,venter CAC CC 100 PASS AF=0.624286;HP=1;DB;NF=16;NR=29;NS=52;CA=0;DP=382 +1 4769408 rs3030792;-/CA,venter TC TCAC 100 PASS AF=0.564397;HP=1;DB;NF=37;NR=45;NS=51;CA=0;DP=550 +1 4771107 rs59952959;-/TTATCGGTGGTTT ATTATCGGTGGTTTC AC 100 PASS AF=0.43732;HP=2;DB;NF=24;NR=26;NS=52;CA=0;DP=437 +1 4771150 . AGGCAGAGGATTTAGGGGGCAGTGAAACTA AA 100 PASS AF=0.365014;HP=2;NF=25;NR=17;NS=51;CA=0;DP=446 +1 4773228 . AACA AA 100 PASS AF=0.358433;HP=4;NF=49;NR=37;NS=51;CA=0;DP=403 +1 4779293 rs35799766;-/A,venter GAA GA 100 PASS AF=0.620558;HP=4;DB;NF=40;NR=44;NS=52;CA=0;DP=539 +1 4783405 . TACGTATATACATATACA TA 100 PASS AF=0.346752;HP=1;NF=20;NR=40;NS=52;CA=0;DP=331 +1 4784171 . TA TAAGA 100 PASS AF=0.058761;HP=2;NF=4;NR=4;NS=52;CA=0;DP=522 +1 4787548 rs35350740;-/CA,mills AACA AA 100 PASS AF=0.294238;HP=3;DB;NF=43;NR=40;NS=52;CA=0;DP=565 +1 4790642 rs5772184;-/T,venter ATT AT 100 PASS AF=0.360239;HP=10;DB;NF=23;NR=25;NS=52;CA=0;DP=544 +1 4794867 . AATA AA 59 PASS AF=0.0541594;HP=2;NF=6;NR=24;NS=52;CA=0;DP=316 +1 4794934 . CT CTCTCTTT 21 PASS AF=0.322809;HP=1;NF=7;NR=9;NS=50;CA=M;DP=241 +1 4800829 rs35005833;-/C,venter TC TCC 100 PASS AF=0.404199;HP=5;DB;NF=48;NR=15;NS=52;CA=0;DP=479 +1 4806476 . GC GCC 100 PASS AF=0.0973173;HP=6;NF=8;NR=8;NS=52;CA=M;DP=398 +1 4808450 rs34573971;-/A,venter GAA GA 100 PASS AF=0.332411;HP=9;DB;NF=26;NR=22;NS=52;CA=0;DP=474 +1 4809140 rs60726929;-/TCCA,venter,watson TC TCATCC 100 PASS AF=0.348085;HP=1;DB;NF=49;NR=32;NS=52;CA=0;DP=579 +1 4810276 rs3030822;-/TAGT,watson ATAGTT AT 100 PASS AF=0.242205;HP=1;DB;NF=27;NR=13;NS=52;CA=0;DP=582 +1 4831434 . TA TACCACACACACA 100 PASS AF=0.49717;HP=1;NF=18;NR=17;NS=52;CA=0;DP=675 +1 4831567 rs34042090;-/CA CCAC CC 100 PASS AF=0.535527;HP=4;DB;NF=52;NR=45;NS=52;CA=0;DP=738 +1 4833596 rs35226825;-/T AT ATT 100 PASS AF=0.237481;HP=5;DB;NF=19;NR=19;NS=52;CA=0;DP=498 +1 4839967 . TCCTGCCAGCCGGGGGC TC 100 PASS AF=0.0394386;HP=2;NF=5;NR=2;NS=52;CA=0;DP=565 +1 4840948 rs59349393;-/AAACCACATCCCTTGAACT GACTAAACCACATCCCTTGAA GA 100 PASS AF=0.144437;HP=1;DB;NF=16;NR=17;NS=52;CA=0;DP=578 +1 4846284 rs36118323;-/T,venter CT CTT 100 PASS AF=0.130437;HP=7;DB;NF=12;NR=15;NS=52;CA=0;DP=415 +1 4855247 venter GA GACACA 100 PASS AF=0.301971;HP=1;NF=19;NR=3;NS=52;CA=0;DP=635 +1 4864897 venter AT ATT 100 PASS AF=0.215684;HP=6;NF=17;NR=20;NS=52;CA=0;DP=450 +1 4865373 rs34273857;-/A,venter CA CAA 100 PASS AF=0.169967;HP=6;DB;NF=17;NR=15;NS=52;CA=0;DP=533 diff --git a/tests/tabix_data/vcf/4.vcf b/tests/tabix_data/vcf/4.vcf new file mode 100644 index 0000000..65ed14e --- /dev/null +++ b/tests/tabix_data/vcf/4.vcf @@ -0,0 +1,318 @@ +##fileformat=VCFv4.1 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##fileDate=20110524 +##reference=ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/human_g1k_v37.fasta.gz +##source=EricBanksValidationQC;fromGoncaloAbecasisValidationSelection +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT HG00127 HG00128 HG00136 HG00137 HG00138 HG00139 HG00152 HG00156 HG00234 HG00235 HG00237 HG00242 HG00244 HG00262 HG01055 HG01079 NA19138 NA18974 NA18523 NA12717 NA19209 NA18577 NA18973 NA18943 NA12873 NA18623 NA18622 NA18948 NA19171 NA19204 NA06994 NA18563 NA18547 NA18861 NA18608 NA12282 NA12751 NA18959 NA19331 NA19453 NA20537 NA12046 NA20515 NA20516 NA20521 NA20524 NA20528 NA20759 NA20768 NA20769 NA20774 NA20775 NA20783 NA20787 NA20790 NA20800 NA20819 NA20812 NA20505 NA20530 NA20540 NA20538 NA20581 NA20815 NA20544 NA20810 NA20807 NA20816 NA20504 NA20753 NA20502 NA12342 NA19150 NA19468 NA20336 NA19395 NA19257 NA19360 NA19700 NA18867 NA20317 NA18968 NA19107 HG00111 HG00108 NA19077 NA19684 NA18511 NA12044 NA19382 NA19457 NA18933 NA18923 NA18965 HG00141 NA20341 NA18740 HG00537 HG00346 HG01173 HG00702 HG00313 HG00150 NA18612 HG00339 NA12273 HG00250 NA18593 NA18621 HG00478 HG00251 HG01070 NA19160 NA18995 NA10851 NA18976 NA18603 NA19200 HG01204 HG01191 HG01101 HG00146 HG00306 NA18985 HG00160 HG00635 HG00372 HG00357 HG00634 NA18541 NA18950 NA19759 HG00351 HG00257 HG00118 HG00336 HG00448 HG01354 NA18609 HG00428 HG00326 NA11894 NA18956 HG00173 HG00117 NA11893 HG01251 HG01441 HG01437 HG00182 HG00330 HG01060 HG00329 NA18960 NA18856 NA07346 NA18871 NA19057 NA18868 NA18636 NA12830 NA19007 NA18910 NA18874 NA19056 NA19064 NA19066 NA18487 NA18642 NA19236 NA07056 NA18637 NA19235 NA19309 NA19311 NA19334 NA19346 NA19347 NA19372 NA19376 NA19383 NA19384 NA19394 NA19428 NA19430 NA19451 NA19466 NA19313 NA19321 NA19324 NA19332 HG00479 HG00608 NA18573 HG00375 NA19248 NA19093 HG01170 HG00534 HG01171 HG01522 NA18624 HG00683 HG01521 NA19005 NA20412 NA18971 HG00446 NA12748 HG00530 HG00690 HG01356 HG01516 NA20532 HG00344 HG00328 NA18542 HG00254 HG00321 HG00577 HG00656 HG00342 HG00524 HG00650 HG00557 HG00319 HG00457 HG00125 HG00578 HG00543 HG00638 HG00171 HG00699 HG00595 HG00187 HG00704 HG00533 HG00596 HG00268 HG01083 HG00651 HG01133 HG00671 HG00327 HG01148 HG00246 HG00672 HG00556 HG00436 HG00554 NA18633 NA20344 NA11993 NA07037 NA11930 HG01366 HG01389 HG00620 NA19740 HG00190 HG00419 NA18535 HG01495 NA18592 HG01497 HG00174 HG01140 NA12287 HG00689 HG01550 HG00334 HG01375 HG00637 NA18507 HG01113 NA18550 NA19129 HG01551 HG01462 HG00331 NA12413 HG01456 HG01360 HG00708 HG01350 HG00684 NA19099 HG00284 NA12399 NA12286 NA12777 HG00277 HG00266 NA19985 HG00353 HG01102 NA07347 NA07051 NA19900 NA18984 NA07048 HG00640 HG01066 NA12812 HG01174 HG01188 NA19390 NA19436 NA19439 NA19440 NA19463 NA19470 NA19471 NA19472 NA19676 NA19660 NA19661 NA19663 NA19722 NA19725 NA19728 NA19729 NA19731 NA19749 NA19755 NA19756 NA19758 NA19770 NA19773 NA19777 NA19780 NA19783 NA20525 NA20589 NA20765 NA20802 NA20804 NA18544 NA18602 NA18546 NA18610 NA18957 NA18615 NA18616 NA19010 NA18638 NA18639 NA18627 NA19072 NA18630 NA19074 NA19080 NA19081 NA19083 NA19085 NA19088 NA20287 NA19835 NA20276 NA19818 NA20278 NA20282 NA20342 NA20296 NA20314 NA20346 NA19712 NA19198 NA19108 NA18934 NA18916 NA18907 NA18917 NA06989 NA12058 NA12341 NA12546 NA12489 HG01197 NA18983 NA11843 NA11892 NA12749 +20 82176 rs11906362 T C 318 NOT_TYPED;PQ10 BCM.AC=16;DB;SRC=VQSR+2-OF-7;PQ=0 +20 249843 rs112456910 C T 1304 PASS BCM.AC=14;DB;SEQUENOM.AC=12;SRC=VQSR+INTERSECTION;PQ=29 GT 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . . 0/0 . . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . 0/0 . 0/0 0/0 . . . 0/0 . 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . . 0/0 0/1 . . 0/0 0/0 . 0/0 . . . 0/0 . 0/0 0/0 0/1 0/0 . . . 0/0 . 0/0 . . . . . . . . . 0/0 . . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . . 0/0 . 0/0 . 0/0 0/0 0/0 0/0 . 0/0 . . . . . 0/0 0/0 . . 0/0 . . 0/0 0/0 0/0 . . . 0/0 0/0 0/0 0/0 . 0/0 . . . . . 0/0 0/0 . . 0/1 . . 0/0 . 0/1 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 . . . . . 0/0 . . . . . 0/0 . 0/1 . . . . 0/0 . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 . 0/0 . . . 0/0 . 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 . 0/0 . 0/0 . . . 0/0 0/1 0/0 . . . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . . . 0/0 . 0/0 0/0 0/0 . . . . . . . 0/0 . 0/0 . . . . . . . . . . 0/0 . 0/0 . . 0/0 0/0 . . . . . 0/0 0/0 0/0 0/1 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . . 0/0 . . 0/0 . 0/0 0/0 . 0/0 . 0/0 . 0/0 0/0 . 0/0 0/0 . 0/1 0/1 0/0 . . 0/0 0/0 . . 0/0 0/1 . . 0/1 . . . 0/0 0/0 0/0 . . . . . 0/0 . +20 688672 rs116071340 C T 56 PASS BCM.AC=1;DB;SEQUENOM.AC=2;SRC=VQSR+2-OF-7;PQ=52 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 987773 rs6077519 T G 474 PASS DB;SEQUENOM.AC=73;SRC=VQSR-ONLY;PQ=42 GT . 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 1/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 1/1 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 1/1 1/1 0/0 1/1 0/0 0/0 0/0 0/0 1/1 1/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 1/1 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 +20 1166164 . G T 26 NOT_DESIGNED BCM.AC=20;SRC=VQSR+2-OF-7 +20 1333317 . A G 4 PASS SEQUENOM.AC=0;SRC=VQSR-ONLY;PQ=32 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1372898 rs112426678 C A 833 PASS BCM.AC=7;DB;SEQUENOM.AC=6;SRC=VQSR+INTERSECTION;PQ=46 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1526045 rs11908182 A G 847 PQ10 BCM.AC=6;DB;SEQUENOM.AC=6;SRC=VQSR+2-OF-7;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1565049 . C T 100 PASS SEQUENOM.AC=3;SRC=2-OF-7-ONLY;PQ=19 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1577285 . G A 4 HIGH_NO_CALL_RATE SEQUENOM.AC=0;SRC=VQSR-ONLY;PQ=57 GT . . . 0/0 0/0 . 0/0 . . . 0/0 0/0 . 0/0 . . 0/0 0/0 . . . 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 . 0/0 . 0/0 . 0/0 0/0 . . 0/0 . . . 0/0 . 0/0 . . . 0/0 . . . . . . 0/0 . 0/0 . 0/0 0/0 . 0/0 . . . 0/0 . . . . . 0/0 0/0 . . . . 0/0 0/0 . 0/0 . . 0/0 0/0 . . . . . 0/0 . 0/0 . . . 0/0 0/0 0/0 0/0 . . 0/0 0/0 . 0/0 . 0/0 0/0 0/0 . 0/0 0/0 . . . 0/0 0/0 0/0 0/0 0/0 . . . 0/0 0/0 . 0/0 0/0 . . . 0/0 . . 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 . . . . . 0/0 . 0/0 . 0/0 . . . 0/0 0/0 0/0 0/0 . . . . 0/0 . . . . . . . . 0/0 . . . 0/0 . . . . . . . . . . . . 0/0 . . 0/0 0/0 . 0/0 . . 0/0 . 0/0 . 0/0 . . 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 . . . 0/0 . . . 0/0 0/0 . . 0/0 0/0 0/0 . 0/0 . . 0/0 0/0 0/0 . . 0/0 . 0/0 0/0 . . . . . 0/0 0/0 0/0 0/0 . 0/0 . . 0/0 0/0 . . . 0/0 . 0/0 . . . 0/0 . 0/0 0/0 . . 0/0 . 0/0 0/0 . . 0/0 . . . . . . 0/0 . 0/0 0/0 . 0/0 . . . 0/0 . . . 0/0 . 0/0 0/0 . . . . 0/0 0/0 0/0 . . . . 0/0 0/0 . . . . . . 0/0 0/0 . . . . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 . . . . 0/0 0/0 0/0 . 0/0 . 0/0 . 0/0 0/0 . 0/0 . 0/0 . 0/0 . 0/0 . . . . . 0/0 0/0 0/0 . . 0/0 0/0 +20 1577845 . G A 267 HIGH_NO_CALL_RATE BCM.AC=42;SEQUENOM.AC=5;SRC=VQSR+2-OF-7;PQ=37 GT 0/0 . . 0/0 . . . . . . 0/0 . . 0/0 . . 0/0 0/0 . . . . 0/0 0/0 . 0/0 . 0/0 . . 0/0 0/0 . 1/1 0/0 0/0 . 0/0 . 0/0 0/0 . . 0/0 . . . . . 0/0 . 0/0 . 0/0 . . . . . . 0/0 . 0/0 . 0/0 . . 0/0 . . . 0/0 . . . . . . . . . . . 0/0 0/0 . 0/0 . . 0/0 0/0 0/0 . . . 0/0 0/0 0/0 0/0 . . . 0/0 0/0 . 0/0 . . 0/0 . . 0/0 . . 0/0 0/0 . . 0/0 . . . 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 0/0 . 0/0 0/0 . . . 0/0 0/0 . 0/0 0/0 . 0/0 . 0/0 0/0 0/0 . . . . . . 0/0 . 0/0 . 0/0 . . . 0/0 0/0 0/0 0/0 . . . . 0/0 . . 0/0 . . . . . 0/0 . . . . 0/0 . . . . . . . . . . . 0/0 . . 0/0 0/0 . 0/0 . . 0/0 . 0/0 . 0/0 . . 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 . 0/0 0/0 . 0/0 . . . 0/0 0/0 . . 0/0 0/0 . 0/0 0/0 . . 0/0 0/0 0/0 . . 0/0 . 0/0 0/0 . . . . . 0/0 0/0 0/0 0/0 . 0/0 . . 0/0 0/0 . . . 0/0 . 0/0 . . . 0/0 . 0/0 0/0 . 0/0 0/0 0/0 . 0/0 . . 0/0 . 0/0 . . . . . . 0/0 0/0 . 0/0 . . . 0/0 . . 0/0 0/0 0/0 . . . . . 0/0 0/0 0/0 0/0 0/0 . . . 0/0 0/0 . . . . 0/0 . 0/0 0/0 . . . . 0/0 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . . . . 0/0 0/0 0/0 . . . . 0/0 0/0 0/1 . 0/0 . . . 0/0 . 1/1 . . 0/0 . 0/0 0/0 . 0/0 . . 0/0 0/0 +20 1590306 . A G 16 AMBIGUOUS_SEQUENOM_CALLS SEQUENOM.AC=177;SRC=VQSR-ONLY;PQ=15 GT 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 . 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 . 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 . 0/0 . 0/1 0/1 0/1 . 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 . 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 . 0/0 0/0 . . . 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 . 0/1 0/1 0/1 0/1 . 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 . 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 . . 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 . 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 . 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 . 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 . 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 . 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 +20 1643825 . G T 24 PQ10 BCM.AC=3;SEQUENOM.AC=0;SRC=VQSR-ONLY;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1746733 . G A 9 NOT_DESIGNED SRC=VQSR-ONLY +20 1896670 . G C 16 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1934851 rs6045641 T C 53 NOT_DESIGNED BCM.AC=29;DB;SRC=VQSR-ONLY +20 2083617 . G A 9 NOT_DESIGNED BCM.AC=4;SRC=VQSR+2-OF-7 +20 2280790 rs214779 T A 57436 NOT_DESIGNED BCM.AC=758;DB;SRC=VQSR+2-OF-7 +20 2843004 rs118020362 T C 131 PASS BCM.AC=4;DB;SEQUENOM.AC=4;SRC=VQSR+INTERSECTION;PQ=57 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 2854191 . C T 78 POSSIBLE_PROBE_FAILURE BCM.AC=25;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 2999522 . G A 5 NOT_DESIGNED SRC=VQSR-ONLY +20 3935503 . G A 95 NOT_TYPED;PQ10 BCM.AC=1;SRC=VQSR+2-OF-7;PQ=9 +20 4015187 . G C 93 NOT_TYPED;PQ10 BCM.AC=14;SRC=VQSR+2-OF-7;PQ=0 +20 4260976 rs75912589 A G 8109 PASS BCM.AC=94;DB;SEQUENOM.AC=95;SRC=VQSR+INTERSECTION;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 +20 4557512 . C A 8 NOT_TYPED SRC=VQSR-ONLY;PQ=48 +20 4603711 . C T 20 PQ10 SEQUENOM.AC=1;SRC=VQSR-ONLY;PQ=9 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 5021712 rs115278430 C A 76 NOT_TYPED BCM.AC=2;DB;SRC=VQSR+2-OF-7;PQ=15 +20 5137904 . C T 70 PASS BCM.AC=0;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 5500990 rs116723001 C A 1701 PASS BCM.AC=14;DB;SEQUENOM.AC=13;SRC=VQSR+INTERSECTION;PQ=31 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 5524677 . C T 21 PASS BCM.AC=3;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=57 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 5601529 rs6085225 G A 1415 PQ10 BCM.AC=33;DB;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 5773125 . G A 165 NOT_TYPED BCM.AC=3;SRC=VQSR+INTERSECTION;PQ=13 +20 5986950 rs6085343 G A 1226 PASS BCM.AC=68;DB;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 6242013 . G A 10 NOT_TYPED;PQ10 SRC=2-OF-7-ONLY;PQ=0 +20 6320495 . C A 16 NOT_TYPED BCM.AC=2;SRC=VQSR+2-OF-7;PQ=29 +20 6575066 . T C 9.19 PASS BCM.AC=2;SEQUENOM.AC=2;SRC=2-OF-7-ONLY;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7228334 . A G 108 PQ10 BCM.AC=1;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7274968 . C T 39 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=46 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7321986 . C G 5 PQ10 SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7377337 . C T 180 PASS BCM.AC=1;SEQUENOM.AC=2;SRC=VQSR+INTERSECTION;PQ=57 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7400995 rs114967944 C T 426 PASS BCM.AC=8;DB;SEQUENOM.AC=6;SRC=VQSR+INTERSECTION;PQ=57 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7466093 . C G 4.11 PASS SEQUENOM.AC=0;SRC=2-OF-7-ONLY;PQ=36 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7575759 rs28491496 A G 308 POSSIBLE_PROBE_FAILURE;PQ10 BCM.AC=17;DB;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7678819 rs11699779 A G 12976 PASS BCM.AC=95;DB;SEQUENOM.AC=93;SRC=VQSR+INTERSECTION;PQ=37 GT . 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 . 0/1 . . 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 . 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 +20 7924363 . G A 301 PASS BCM.AC=2;SEQUENOM.AC=3;SRC=VQSR+INTERSECTION;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 8165430 rs61262870 T C 1699 NOT_DESIGNED DB;SRC=VQSR+2-OF-7 +20 8642873 . A G 19 NOT_DESIGNED BCM.AC=58;SRC=VQSR+2-OF-7 +20 8700342 . T G 102 PASS BCM.AC=0;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=53 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 8799615 . C T 38 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=29 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 9149281 . C T 11 PASS BCM.AC=0;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=60 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 9214590 . T C 99 PASS BCM.AC=3;SEQUENOM.AC=3;SRC=VQSR+2-OF-7;PQ=57 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 9276871 . C T 695 NOT_TYPED;PQ10 BCM.AC=11;SRC=VQSR+2-OF-7;PQ=9 +20 10226915 rs74843547 G A 120 PASS BCM.AC=1;DB;SEQUENOM.AC=2;SRC=VQSR+INTERSECTION;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 10259160 . T A 10 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=57 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 10482699 . G A 101 PASS BCM.AC=2;SEQUENOM.AC=2;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 10625431 . T C 17 PASS BCM.AC=0;SEQUENOM.AC=1;SRC=VQSR-ONLY;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 11506447 . G C 100 PASS SEQUENOM.AC=1;SRC=2-OF-7-ONLY;PQ=55 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 11565628 . G A 22 PASS BCM.AC=1;SEQUENOM.AC=3;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 11625368 rs111669054 A G 138 PASS BCM.AC=2;DB;SEQUENOM.AC=2;SRC=VQSR+INTERSECTION;PQ=38 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 11798908 . A G 14 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12006592 . A G 57 PASS SEQUENOM.AC=6;SRC=VQSR+2-OF-7;PQ=29 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12025988 . C T 34 NOT_DESIGNED BCM.AC=43;SRC=VQSR+2-OF-7 +20 12142653 . T A 12 PASS BCM.AC=2;SEQUENOM.AC=3;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12171235 . A G 60 PASS BCM.AC=2;SEQUENOM.AC=2;SRC=VQSR+2-OF-7;PQ=52 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12326082 . C T 118 NOT_TYPED;PQ10 SRC=VQSR+2-OF-7;PQ=0 +20 12364163 . A G 8 PASS SEQUENOM.AC=2;SRC=2-OF-7-ONLY;PQ=53 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12718574 rs112953117 G C 656 PASS BCM.AC=3;DB;SEQUENOM.AC=3;SRC=VQSR+INTERSECTION;PQ=40 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13241902 . A C 52 PQ10 BCM.AC=2;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=0 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13339930 rs6042043 A G 839 NOT_TYPED;PQ10 BCM.AC=143;DB;SRC=VQSR+2-OF-7;PQ=0 +20 13410135 rs77634879 T A 50 PASS BCM.AC=39;DB;SEQUENOM.AC=37;SRC=VQSR-ONLY;PQ=60 GT 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13764237 . C T 51 NOT_TYPED BCM.AC=1;SRC=VQSR+2-OF-7;PQ=37 +20 14283363 rs111719158 G A 197 NOT_TYPED;PQ10 BCM.AC=6;DB;SRC=VQSR+INTERSECTION;PQ=0 +20 14589314 rs2209596 G T 30806 INCORRECT_SEQUENOM_CALLS BCM.AC=253;DB;SEQUENOM.AC=315;SRC=VQSR+INTERSECTION;PQ=60 GT . 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 . 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 . 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 . 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 . 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 . 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 +20 14843271 . A G 78 NOT_DESIGNED BCM.AC=343;SRC=VQSR+2-OF-7 +20 15193914 . C T 48 PASS BCM.AC=2;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15581882 . C G 51 PASS BCM.AC=2;SEQUENOM.AC=2;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15699667 . C T 59 PASS BCM.AC=2;SEQUENOM.AC=3;SRC=VQSR+2-OF-7;PQ=52 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15913614 . G T 9 PASS SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16397068 . C G 1.16 PASS SEQUENOM.AC=0;SRC=2-OF-7-ONLY;PQ=20 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16475471 rs73597775 C T 234 HIGH_NO_CALL_RATE DB;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=60 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 . . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16487648 rs12479901 G A 1025 PASS BCM.AC=14;DB;SEQUENOM.AC=15;SRC=VQSR+INTERSECTION;PQ=23 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +20 16936995 . C A 102 PASS BCM.AC=2;SEQUENOM.AC=2;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 17430784 . T C 18 PQ10 BCM.AC=7;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 17828256 . C T 77 PASS BCM.AC=2;SEQUENOM.AC=4;SRC=VQSR+INTERSECTION;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 17938631 . T C 218 PASS BCM.AC=8;SEQUENOM.AC=2;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 17980474 . G A 34 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=23 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 17991241 . C T 49 NOT_DESIGNED SRC=VQSR-ONLY +20 18180100 . A G 100 NOT_TYPED;PQ10 SRC=2-OF-7-ONLY;PQ=0 +20 18198917 . C T 15 PASS SEQUENOM.AC=3;SRC=2-OF-7-ONLY;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 18232143 rs77523268 C T 952 PASS BCM.AC=8;DB;SEQUENOM.AC=8;SRC=VQSR+INTERSECTION;PQ=57 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 18584068 . C A 81 NOT_TYPED;PQ10 SRC=VQSR-ONLY;PQ=0 +20 19212550 . C A 11 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR-ONLY;PQ=46 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 19966683 rs199601 G A 56556 PASS BCM.AC=562;DB;SEQUENOM.AC=560;SRC=VQSR+INTERSECTION;PQ=60 GT 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 0/0 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 . 1/1 . 1/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/0 1/1 0/0 1/1 0/0 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 0/1 1/1 0/0 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 0/0 0/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 1/1 0/1 1/1 +20 20157470 rs74569344 G T 159 NOT_TYPED;PQ10 DB;SRC=VQSR-ONLY;PQ=0 +20 20850592 . G A 11.30 NOT_TYPED;PQ10 BCM.AC=1;SRC=2-OF-7-ONLY;PQ=0 +20 20987147 . T C 58 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21056309 . T C 12.30 PASS SEQUENOM.AC=2;SRC=2-OF-7-ONLY;PQ=33 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21195714 . A C 12 NOT_DESIGNED BCM.AC=1;SRC=VQSR+2-OF-7 +20 21477015 . G A 140 NOT_TYPED;PQ10 BCM.AC=2;SRC=VQSR+2-OF-7;PQ=9 +20 21491513 . C T 11 NOT_DESIGNED BCM.AC=1;SRC=VQSR+2-OF-7 +20 21530607 rs4627653 G A 3116 PASS BCM.AC=21;DB;SEQUENOM.AC=21;SRC=VQSR+2-OF-7;PQ=46 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21569638 . G C 35 PASS BCM.AC=0;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=29 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21579389 . C T 169 NOT_DESIGNED SRC=VQSR-ONLY +20 21624143 . T C 63 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=43 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21734208 . A G 5.74 PASS SEQUENOM.AC=0;SRC=2-OF-7-ONLY;PQ=55 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21754065 . G A 16 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21764267 . G A 164 PASS BCM.AC=3;SEQUENOM.AC=4;SRC=VQSR+INTERSECTION;PQ=41 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21863337 . T C 174 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+INTERSECTION;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21910648 . C A 145 PQ10 BCM.AC=5;SEQUENOM.AC=4;SRC=VQSR+2-OF-7;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 22016989 . G A 7 NOT_TYPED;PQ10 SRC=VQSR-ONLY;PQ=0 +20 22168952 . G T 107 PQ10 BCM.AC=1;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 23102548 . G C 15 PASS BCM.AC=0;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=57 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 23470735 . A T 12 NOT_DESIGNED SRC=VQSR-ONLY +20 23665595 . C T 205 PASS BCM.AC=4;SEQUENOM.AC=3;SRC=VQSR+2-OF-7;PQ=43 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 . 0/0 . . . . . 0/0 0/0 0/0 0/0 0/0 . . 0/0 . . 0/0 . 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 . . 0/0 . 0/0 0/0 0/0 0/0 . . . . . 0/0 . 0/0 . 0/0 0/0 0/0 0/0 . . . . . 0/0 . . 0/0 0/0 0/0 0/0 . . . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . . . . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 . . . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 . 0/0 . 0/0 . . . 0/0 0/0 . 0/0 0/0 . 0/0 0/0 . 0/0 0/0 . . . . 0/0 . . 0/0 0/0 . . . 0/0 0/0 . . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . . . +20 23758844 rs117686838 A T 1.18 NOT_DESIGNED DB;SRC=2-OF-7-ONLY +20 23785676 . G A 90 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=23 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 24126594 . C T 16 PASS BCM.AC=1;SEQUENOM.AC=2;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 24247752 . C T 6107 NOT_DESIGNED BCM.AC=42;SRC=VQSR+2-OF-7 +20 24432806 . T C 21 PASS BCM.AC=1;SEQUENOM.AC=2;SRC=VQSR-ONLY;PQ=57 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 24450030 . G A 8 NOT_TYPED SRC=VQSR-ONLY;PQ=60 +20 24792588 . C T 17 NOT_DESIGNED SRC=VQSR+2-OF-7 +20 24875997 rs6106960 T C 35367 PASS BCM.AC=238;DB;SEQUENOM.AC=233;SRC=VQSR+INTERSECTION;PQ=60 GT 0/0 1/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 1/1 1/1 1/1 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/1 . 0/0 . 1/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/0 0/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 0/0 0/0 0/1 1/1 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/0 . 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/1 1/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 1/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 . 0/0 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 +20 25133654 . G A 13.40 PQ10 SEQUENOM.AC=0;SRC=2-OF-7-ONLY;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 25388911 . G T 28 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=53 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 25574143 . G A 77 PQ10 SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 25659422 . A G 11 NOT_TYPED;PQ10 BCM.AC=1;SRC=VQSR+2-OF-7;PQ=0 +20 25700728 rs6037216 C G 1553 POSSIBLE_PROBE_FAILURE;PQ10 BCM.AC=7;DB;SEQUENOM.AC=0;SRC=VQSR+INTERSECTION;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 25741857 rs73347142 G T 41907 PQ10 DB;SEQUENOM.AC=0;SRC=VQSR-ONLY;PQ=9 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 25750038 . T G 86 NOT_TYPED;PQ10 BCM.AC=493;SRC=VQSR-ONLY;PQ=0 +20 25751184 . G C 100 NOT_TYPED;PQ10 BCM.AC=180;SRC=2-OF-7-ONLY;PQ=0 +20 25766473 . T A 124 NOT_TYPED;PQ10 SRC=VQSR+2-OF-7;PQ=0 +20 25789517 . A T 40 NOT_TYPED;PQ10 BCM.AC=319;SRC=VQSR+2-OF-7;PQ=0 +20 25794555 . G A 18 NOT_TYPED;PQ10 BCM.AC=181;SRC=VQSR-ONLY;PQ=0 +20 25922316 . T C 26 PASS BCM.AC=1;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=18 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 25999667 . C G 32 INCORRECT_SEQUENOM_CALLS;PQ10 BCM.AC=61;SEQUENOM.AC=1;SRC=VQSR-ONLY;PQ=0 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . . 0/0 0/0 0/0 0/0 . 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 26046637 . G A 26 NOT_TYPED;PQ10 BCM.AC=354;SRC=VQSR-ONLY;PQ=0 +20 26057903 . G A 100 NOT_TYPED;PQ10 SRC=2-OF-7-ONLY;PQ=0 +20 26071009 . T C 9 AMBIGUOUS_SEQUENOM_CALLS;PQ10 BCM.AC=586;SEQUENOM.AC=59;SRC=VQSR-ONLY;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 +20 26126724 . G C 23737 PASS SEQUENOM.AC=0;SRC=VQSR-ONLY;PQ=18 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 26217247 . C A 374 PQ10 BCM.AC=3;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 26246019 rs79506355 C A 999 NOT_TYPED DB;SRC=2-OF-7-ONLY;PQ=11 +20 26258231 rs79859288 C T 527 NOT_TYPED DB;SRC=VQSR+2-OF-7;PQ=13 +20 26265474 . G T 460.59 PQ10 SEQUENOM.AC=0;SRC=2-OF-7-ONLY;PQ=9 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 26272553 . C G 100 PQ10 SEQUENOM.AC=0;SRC=2-OF-7-ONLY;PQ=0 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 26275939 . A G 81 NOT_TYPED SRC=2-OF-7-ONLY;PQ=12 +20 26293152 . T C 100 PASS BCM.AC=14;SEQUENOM.AC=17;SRC=2-OF-7-ONLY;PQ=10 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 . 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 +20 26301426 . A G 63 AMBIGUOUS_SEQUENOM_CALLS SEQUENOM.AC=0;SRC=2-OF-7-ONLY;PQ=11 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 26301793 . C G 8 PASS SEQUENOM.AC=1;SRC=VQSR-ONLY;PQ=47 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 26304696 rs6051307 G A 100 PQ10 DB;SEQUENOM.AC=0;SRC=2-OF-7-ONLY;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 29494622 rs78775502 C T 935 PQ10 DB;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 29514290 rs6087354 T A 19181 AMBIGUOUS_SEQUENOM_CALLS;PQ10 DB;SEQUENOM.AC=278;SRC=VQSR+2-OF-7;PQ=0 GT 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 . 1/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 . 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 +20 29518801 rs113500384 G A 702.91 PQ10 DB;SEQUENOM.AC=0;SRC=2-OF-7-ONLY;PQ=0 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 29574811 rs73620522 G A 16281 HIGH_NO_CALL_RATE DB;SEQUENOM.AC=24;SRC=VQSR-ONLY;PQ=15 GT 0/1 1/1 1/1 . 1/1 1/1 0/1 1/1 1/1 . 1/1 1/1 . . 0/0 . . 1/1 . 1/1 1/1 . 1/1 1/1 0/1 1/1 . . 1/1 0/0 . 1/1 1/1 1/1 1/1 1/1 . 1/1 1/1 . 1/1 . . 1/1 . . . . 1/1 1/1 . . . . . . . . . . . 1/1 1/1 1/1 1/1 1/1 . 1/1 1/1 . . . . . 1/1 . 1/1 . 0/1 . . . 0/1 . 1/1 . 1/1 . 1/1 1/1 0/1 1/1 . . 1/1 . 1/1 . . . 1/1 1/1 . . 1/1 . . . 1/1 1/1 1/1 . 1/1 1/1 . 1/1 1/1 . 1/1 1/1 . 1/1 1/1 . 1/1 . 0/1 1/1 1/1 . 1/1 . . 1/1 1/1 . 1/1 1/1 1/1 1/1 1/1 . 1/1 1/1 . . 1/1 . 1/1 1/1 . . . . . 1/1 . 1/1 1/1 . 1/1 1/1 . 1/1 1/1 . 1/1 1/1 . 1/1 . . 1/1 1/1 . 1/1 . . 1/1 . . . 0/0 . 1/1 1/1 . . . . 1/1 1/1 . 1/1 1/1 . 1/1 . . . 1/1 . 1/1 1/1 . 1/1 . . . 1/1 1/1 1/1 1/1 . 1/1 . 1/1 . . . . . . . 1/1 . . . . . . . . . . 1/1 1/1 1/1 1/1 1/1 1/1 . . . . . 1/1 1/1 1/1 . 1/1 . . . . . . . 1/1 1/1 1/1 1/1 1/1 . 1/1 . . . . . . 1/1 1/1 1/1 . 1/1 0/0 . . . . . 1/1 1/1 1/1 1/1 1/1 . . 1/1 . 1/1 . 0/1 1/1 1/1 . 1/1 1/1 1/1 . . . . 1/1 . . . . . . . . . . . 1/1 1/1 . . 1/1 1/1 . 1/1 . 0/0 . . . . . . . 0/0 . . . . 1/1 . 1/1 1/1 1/1 1/1 1/1 1/1 . 1/1 . . . . 1/1 1/1 1/1 1/1 0/0 . . . 1/1 . . 1/1 . 1/1 1/1 1/1 1/1 1/1 . 1/1 1/1 . 1/1 . 1/1 . . 1/1 1/1 1/1 0/0 +20 29598472 rs73612735 T G 10639 NOT_TYPED;PQ10 DB;SRC=VQSR-ONLY;PQ=0 +20 29632410 . T C 5.11 NOT_TYPED;PQ10 SRC=2-OF-7-ONLY;PQ=0 +20 29642272 rs77298479 T A 100 NOT_TYPED;PQ10 DB;SRC=2-OF-7-ONLY;PQ=9 +20 29827087 rs62641496 G C 100 NOT_DESIGNED DB;SRC=2-OF-7-ONLY +20 30120025 . C G 1113 POSSIBLE_PROBE_FAILURE;PQ10 BCM.AC=9;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 30595334 rs62206358 C A 62 PASS BCM.AC=3;DB;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=20 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 30616314 . G A 176 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+INTERSECTION;PQ=52 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 30696393 rs76882848 T C 150 PASS BCM.AC=3;DB;SEQUENOM.AC=3;SRC=VQSR+2-OF-7;PQ=60 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 30884360 . C A 6 PQ10 BCM.AC=1;SEQUENOM.AC=0;SRC=VQSR-ONLY;PQ=9 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 30910907 . A T 24 NOT_DESIGNED SRC=VQSR-ONLY +20 31107862 . T C 46 PQ10 BCM.AC=6;SEQUENOM.AC=0;SRC=2-OF-7-ONLY;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 31316775 . T G 47 PASS BCM.AC=2;SEQUENOM.AC=1;SRC=VQSR-ONLY;PQ=37 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 31576854 . C T 66 PQ10 BCM.AC=8;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32840139 . G A 1158 PQ10 BCM.AC=11;SEQUENOM.AC=0;SRC=VQSR+INTERSECTION;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 33588848 . C T 17 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR-ONLY;PQ=34 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 33974818 . G A 959 NOT_TYPED BCM.AC=12;SRC=VQSR+INTERSECTION;PQ=16 +20 34147834 rs368386 G A 105 NOT_DESIGNED BCM.AC=3;DB;SRC=VQSR+2-OF-7 +20 34155930 . T C 1200 NOT_DESIGNED BCM.AC=23;SRC=VQSR+2-OF-7 +20 34589611 . C T 39 PQ10 SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 34595073 . T G 518 POSSIBLE_PROBE_FAILURE;PQ10 BCM.AC=4;SEQUENOM.AC=0;SRC=VQSR+INTERSECTION;PQ=8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 35255604 . C T 367 POSSIBLE_PROBE_FAILURE BCM.AC=5;SEQUENOM.AC=0;SRC=VQSR+INTERSECTION;PQ=46 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 35644471 rs8115057 C T 10677 PQ10 BCM.AC=174;DB;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 36480073 . T C 428 PASS BCM.AC=6;SEQUENOM.AC=6;SRC=VQSR+INTERSECTION;PQ=25 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 36563396 . G A 2.68 PASS SEQUENOM.AC=1;SRC=2-OF-7-ONLY;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 36645837 rs79088417 T C 342 NOT_DESIGNED DB;SRC=VQSR+2-OF-7 +20 36667909 . C T 659 NOT_TYPED;PQ10 BCM.AC=6;SRC=VQSR+INTERSECTION;PQ=0 +20 36932648 rs5743498 C T 107 PASS BCM.AC=3;DB;SEQUENOM.AC=3;SRC=VQSR+INTERSECTION;PQ=53 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37398143 . T A 31 PASS BCM.AC=1;SEQUENOM.AC=0;SRC=VQSR-ONLY;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37790289 . G A 26 PASS BCM.AC=2;SEQUENOM.AC=2;SRC=VQSR+2-OF-7;PQ=46 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37817201 . A G 222 PASS BCM.AC=2;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=37 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37873327 . A T 445 PASS BCM.AC=2;SEQUENOM.AC=2;SRC=VQSR+2-OF-7;PQ=60 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37980382 . A G 78 PASS BCM.AC=2;SEQUENOM.AC=2;SRC=VQSR+INTERSECTION;PQ=20 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 38302429 rs73906408 C T 5149 PASS BCM.AC=24;DB;SEQUENOM.AC=24;SRC=VQSR+INTERSECTION;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 38369195 . C T 43 NOT_TYPED;PQ10 BCM.AC=56;SRC=VQSR+2-OF-7;PQ=0 +20 38901146 . C T 2046 NOT_TYPED;PQ10 BCM.AC=60;SRC=VQSR+2-OF-7;PQ=0 +20 39110108 . C T 4.13 PASS SEQUENOM.AC=0;SRC=2-OF-7-ONLY;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 39624865 . G A 584 NOT_TYPED BCM.AC=9;SRC=VQSR+2-OF-7;PQ=29 +20 40505598 . A G 16 PASS SEQUENOM.AC=1;SRC=2-OF-7-ONLY;PQ=41 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 40927704 . T C 12 PASS BCM.AC=0;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=60 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41093733 . T C 5 NOT_DESIGNED SRC=VQSR-ONLY +20 41137712 rs230167 C T 24 NOT_DESIGNED DB;SRC=VQSR+2-OF-7 +20 41311175 . C T 75 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=57 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41642529 . T G 72 PQ10 BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=9 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41756929 . C T 32 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41818162 rs117637352 G A 391 PASS BCM.AC=30;DB;SEQUENOM.AC=29;SRC=VQSR+2-OF-7;PQ=60 GT 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42153349 . C T 25 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=2-OF-7-ONLY;PQ=57 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42171267 . A G 88.70 PASS SEQUENOM.AC=13;SRC=2-OF-7-ONLY;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42330199 . G A 590 PASS BCM.AC=5;SEQUENOM.AC=3;SRC=VQSR+INTERSECTION;PQ=60 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42474396 . G A 100 PASS BCM.AC=2;SEQUENOM.AC=2;SRC=VQSR+2-OF-7;PQ=23 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42483892 . T C 112 NOT_TYPED BCM.AC=1;SRC=VQSR+2-OF-7;PQ=29 +20 42500754 rs6513891 C A 619 PQ10 DB;SEQUENOM.AC=0;SRC=VQSR-ONLY;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42575810 . T C 3.60 PASS SEQUENOM.AC=2;SRC=2-OF-7-ONLY;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42762553 rs5014517 C T 759.47 NOT_DESIGNED BCM.AC=366;DB;SRC=2-OF-7-ONLY +20 42908494 . T C 42 PASS BCM.AC=3;SEQUENOM.AC=3;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42927494 . C G 17 PQ10 BCM.AC=3;SEQUENOM.AC=0;SRC=VQSR-ONLY;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43033625 . G A 100 NOT_DESIGNED SRC=2-OF-7-ONLY +20 43066015 rs6093982 C T 290 PASS BCM.AC=2;DB;SEQUENOM.AC=5;SRC=VQSR+2-OF-7;PQ=31 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43506182 . T C 28 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43582424 rs79775916 C T 9 PASS BCM.AC=1;DB;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=43 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43744100 . G C 4.80 PASS SEQUENOM.AC=0;SRC=2-OF-7-ONLY;PQ=43 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43899736 . G A 35 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=46 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 44373763 . C T 730 PASS BCM.AC=6;SEQUENOM.AC=6;SRC=VQSR+INTERSECTION;PQ=43 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 45097507 rs454429 C T 25449 PASS BCM.AC=302;DB;SEQUENOM.AC=300;SRC=VQSR+INTERSECTION;PQ=60 GT 0/0 0/0 0/1 0/1 0/0 0/0 . 0/0 0/0 0/0 0/1 . 0/0 0/1 0/0 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 . 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/1 . 0/1 0/0 0/1 0/0 0/0 0/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/0 1/1 0/0 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 1/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/0 1/1 1/1 1/1 0/0 0/1 0/0 1/1 1/1 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 . 1/1 1/1 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 . 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 1/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 +20 45919615 . T C 46 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=29 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 46997402 rs34772061 C G 19 NOT_TYPED;PQ10 DB;SRC=VQSR+2-OF-7;PQ=0 +20 47502684 . G A 66 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=55 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 48045398 . A G 20 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=37 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 48124745 . C T 10.30 PASS SEQUENOM.AC=1;SRC=2-OF-7-ONLY;PQ=39 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 48422538 rs73269151 A G 13012 NOT_TYPED;PQ10 BCM.AC=282;DB;SRC=VQSR+INTERSECTION;PQ=0 +20 48669886 rs73276465 G C 106 NOT_TYPED BCM.AC=8;DB;SRC=VQSR+2-OF-7;PQ=60 +20 48691248 . A G 95 PASS BCM.AC=2;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=23 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 48917711 rs116072324 T C 129 NOT_DESIGNED BCM.AC=1;DB;SRC=VQSR+2-OF-7 +20 49098380 . A T 115 PASS BCM.AC=1;SEQUENOM.AC=2;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49206794 rs116083969 G A 19 PASS BCM.AC=1;DB;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49360238 . G A 50 PQ10 BCM.AC=3;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49712636 rs113933231 T A 93 PASS BCM.AC=3;DB;SEQUENOM.AC=3;SRC=VQSR+INTERSECTION;PQ=52 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 50309600 . C A 46 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=46 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 50599968 rs6096700 T C 10667 NOT_TYPED;PQ10 BCM.AC=426;DB;SRC=VQSR+2-OF-7;PQ=0 +20 50601297 . A T 7 PASS BCM.AC=0;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=57 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 50603254 rs6021599 A G 13052 NOT_TYPED;PQ10 BCM.AC=520;DB;SRC=VQSR+2-OF-7;PQ=0 +20 50810123 rs28420712 A T 2671 NOT_DESIGNED BCM.AC=228;DB;SRC=VQSR+2-OF-7 +20 50892806 . A G 37 NOT_DESIGNED BCM.AC=1;SRC=VQSR+2-OF-7 +20 51511870 . C T 116 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=43 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 51818730 . C T 130 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+INTERSECTION;PQ=54 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 51958269 . G C 48 PASS BCM.AC=1;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=23 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 52285202 rs113200595 T G 11071 NOT_DESIGNED BCM.AC=198;DB;SRC=VQSR+2-OF-7 +20 52308503 . T C 651 PASS BCM.AC=5;SEQUENOM.AC=5;SRC=VQSR+INTERSECTION;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 52470222 rs28606974 A G 72 NOT_DESIGNED BCM.AC=22;DB;SRC=VQSR-ONLY +20 52485230 . G T 74 NOT_DESIGNED BCM.AC=21;SRC=VQSR-ONLY +20 53017837 rs112388078 T C 1190 PASS BCM.AC=8;DB;SEQUENOM.AC=8;SRC=VQSR+2-OF-7;PQ=37 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 53031638 . T G 4 PASS SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 53272023 rs4362623 G A 70728 PASS BCM.AC=692;DB;SEQUENOM.AC=690;SRC=VQSR+INTERSECTION;PQ=57 GT 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 . 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 +20 53423667 . T A 214 PASS BCM.AC=2;SEQUENOM.AC=2;SRC=VQSR+INTERSECTION;PQ=55 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 53580904 . T C 32 PASS BCM.AC=1;SEQUENOM.AC=2;SRC=VQSR+INTERSECTION;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 53599478 . C T 34 NOT_TYPED;PQ10 BCM.AC=1;SRC=VQSR+2-OF-7;PQ=9 +20 54004274 rs114966870 A G 602 PASS BCM.AC=40;DB;SEQUENOM.AC=9;SRC=VQSR-ONLY;PQ=57 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54096380 . G A 46 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54146938 . G A 27 POLYMORPHIC_SAMPLES_FAILED BCM.AC=1;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=53 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54163701 . A G 130 PASS BCM.AC=3;SEQUENOM.AC=3;SRC=VQSR+INTERSECTION;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . 0/0 0/0 . 0/0 0/0 0/0 0/0 . . 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . . 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . +20 54199759 . T C 198 NOT_DESIGNED BCM.AC=9;SRC=VQSR+2-OF-7 +20 54313664 rs112885916 A T 98 PASS BCM.AC=10;DB;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=57 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54424603 . T C 116 PQ10 BCM.AC=8;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54542220 . C T 33 NOT_DESIGNED SRC=VQSR-ONLY +20 54628591 . G A 87 POLYMORPHIC_SAMPLES_FAILED;PQ10 BCM.AC=2;SEQUENOM.AC=4;SRC=VQSR+2-OF-7;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54793377 . C T 8 HIGH_NO_CALL_RATE BCM.AC=1;SEQUENOM.AC=0;SRC=VQSR-ONLY;PQ=60 GT . . . . . . . . . . . . 0/0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0/0 . . . . . . . . . . . . . . . . . . . . . . . 0/0 . . . . . . . . . . . 0/0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0/0 . . . . . . . . . . . 0/0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0/0 . . . . . . . . . . . . . . . . . . . . . 0/0 0/0 0/0 . . . . . . . . . . . 0/0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0/0 0/0 . . . . . . . . . . 0/0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +20 55067830 . G A 6 PASS SEQUENOM.AC=1;SRC=2-OF-7-ONLY;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 55113534 . T G 21 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=16 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 55195413 . A G 20 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=2-OF-7-ONLY;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 55483325 . C T 17 NOT_TYPED;PQ10 BCM.AC=1;SRC=VQSR-ONLY;PQ=0 +20 55598554 . T C 22.30 PASS SEQUENOM.AC=1;SRC=2-OF-7-ONLY;PQ=48 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 55790632 . G T 39 HIGH_NO_CALL_RATE BCM.AC=2;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 . . 0/0 . . . . 0/0 0/0 . . 0/0 . . 0/0 . . . . . . . 0/0 0/0 0/0 . . . 0/0 0/0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0/0 . . . . . . . . . . . . . 0/0 . . . . . . . . . . . . . . . . . 0/0 0/0 0/0 . . . . . . . . . 0/0 0/0 0/0 0/0 . . . . . . . . 0/0 0/0 0/0 0/0 . 0/0 . . . . . . 0/0 0/0 0/0 . 0/0 0/0 . . 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 . . 0/0 0/0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0/0 0/0 0/0 . . . . . 0/0 . 0/0 . 0/0 0/0 0/0 . . . . . . . 0/0 0/0 0/0 0/0 0/0 . . . . . . . 0/0 . . . 0/0 . . . . . . . . . . 0/0 0/0 . . . . 0/0 . . . . . . 0/0 0/0 . . . . . . 0/0 0/0 0/0 0/0 0/0 . . . . . 0/0 0/0 . . 0/0 0/0 0/0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0/0 . . . . . . . . . . . . . . . . . . . . . . . 0/0 . . . . . . . . . +20 55870101 . C T 129 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 56029723 rs74833660 G A 21 PASS BCM.AC=1;DB;SEQUENOM.AC=3;SRC=VQSR+2-OF-7;PQ=29 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 56309506 . C G 6.38 PASS SEQUENOM.AC=1;SRC=2-OF-7-ONLY;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 56335703 . G C 33 PASS BCM.AC=2;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=35 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 56549982 rs6099866 T C 999 PASS DB;SEQUENOM.AC=9;SRC=2-OF-7-ONLY;PQ=32 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 56792927 . C T 207 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+INTERSECTION;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 57266953 . C A 46 PASS BCM.AC=1;SEQUENOM.AC=2;SRC=VQSR+2-OF-7;PQ=60 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 57566637 rs149265 C T 58555 PASS BCM.AC=513;DB;SEQUENOM.AC=505;SRC=VQSR+INTERSECTION;PQ=60 GT 1/1 1/1 0/1 0/1 0/1 1/1 . 1/1 1/1 1/1 1/1 . 0/1 0/0 0/1 0/1 0/0 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 . 1/1 . 1/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 0/1 0/1 . 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 0/0 1/1 1/1 0/0 0/0 1/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 0/0 0/1 1/1 0/1 0/0 0/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 . 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 1/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 1/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 . 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 1/1 0/0 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 +20 57653509 rs6026678 C T 489 PASS BCM.AC=4;DB;SEQUENOM.AC=4;SRC=VQSR+INTERSECTION;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 57728647 . C T 13 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 58308048 . A G 35 PASS BCM.AC=2;SEQUENOM.AC=4;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 58335635 . C T 7 PQ10 BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 59211281 . A G 4.33 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=2-OF-7-ONLY;PQ=43 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 59286435 . T C 5.69 PASS SEQUENOM.AC=1;SRC=2-OF-7-ONLY;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 60262734 rs73915327 C A 576 PASS BCM.AC=10;DB;SEQUENOM.AC=10;SRC=VQSR+INTERSECTION;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 60291372 . A G 100 NOT_DESIGNED BCM.AC=21;SRC=2-OF-7-ONLY +20 60520698 . T C 428 NOT_DESIGNED SRC=VQSR-ONLY +20 60547414 . G T 10 PASS SEQUENOM.AC=0;SRC=2-OF-7-ONLY;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 60560062 . C T 25 NOT_TYPED BCM.AC=343;SRC=VQSR-ONLY;PQ=50 +20 60578895 . G T 34 PASS BCM.AC=2;SEQUENOM.AC=2;SRC=VQSR+2-OF-7;PQ=52 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 60641243 . G A 16 NOT_DESIGNED BCM.AC=150;SRC=VQSR+2-OF-7 +20 60641369 . G A 16 PASS BCM.AC=159;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=43 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 60730826 . G A 11 AMBIGUOUS_SEQUENOM_CALLS BCM.AC=0;SEQUENOM.AC=0;SRC=VQSR-ONLY;PQ=60 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 61206227 . C T 4.25 NOT_TYPED SRC=2-OF-7-ONLY;PQ=37 +20 61286252 rs13433258 C T 123 PASS BCM.AC=3;DB;SEQUENOM.AC=2;SRC=VQSR+INTERSECTION;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 61497927 . A C 47 PQ10 BCM.AC=3;SEQUENOM.AC=0;SRC=2-OF-7-ONLY;PQ=9 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 61766484 . G T 58 NOT_DESIGNED BCM.AC=157;SRC=VQSR+2-OF-7 +20 61788338 . C G 7 NOT_DESIGNED SRC=VQSR-ONLY +20 61830486 . G A 48 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 62191452 rs113748232 C T 143 PASS BCM.AC=7;DB;SEQUENOM.AC=7;SRC=VQSR+INTERSECTION;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 62462285 . G A 66 NOT_DESIGNED BCM.AC=304;SRC=VQSR+2-OF-7 +20 62480353 . T A 100 PASS SEQUENOM.AC=0;SRC=2-OF-7-ONLY;PQ=11 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 62724959 . G T 10 NOT_DESIGNED SRC=VQSR-ONLY +20 62888718 . T C 57 POLYMORPHIC_SAMPLES_FAILED BCM.AC=1;SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=60 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 62918298 . G A 33 NOT_DESIGNED SRC=VQSR+2-OF-7 +20 62961477 . T C 17 AMBIGUOUS_SEQUENOM_CALLS;PQ10 SEQUENOM.AC=0;SRC=VQSR+2-OF-7;PQ=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 diff --git a/tests/tabix_data/vcf/5.vcf b/tests/tabix_data/vcf/5.vcf new file mode 100644 index 0000000..a23ed89 --- /dev/null +++ b/tests/tabix_data/vcf/5.vcf @@ -0,0 +1,1000 @@ +##fileformat=VCFv4.0 +##fileDate=2011-07-18 +##source=Platypus_Version_0.1 +##platypusOptions={'bamFiles': ['/data/lindah/illumina_projects/rimmer_indels/AllData.bam'], 'labels': None, 'refFile': '/ib/groups/bsg/scratch/rimmer/Genomes/human_g1k_v37_ebv.fa', 'maxHaplotypes': 256, 'maxSize': 250, 'parseNCBI': 0, 'ploidy': 2, 'bufferSize': 1000000, 'nCPU': 1, 'minFlank': 3, 'minPosterior': 5, 'logFileName': 'log.txt', 'regions': ['20'], 'processRegionSize': 30000000, 'maxVariants': 8, 'maxReads': 5000000, 'genIndels': 1, 'minReads': 2, 'dataType': 'population', 'minMapQual': 20, 'rlen': 150, 'nInd': 1, 'getVariantsFromBAMs': 1, 'genSNPs': 1, 'strandFilter': 0, 'verbosity': 2, 'sourceFile': None, 'callOnlyIndels': 0, 'output': 'test.vcf', 'minBaseQual': 20} +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT AllData.bam +20 67500 . T TTGGTATCTAG . PASS FR=0.5;HP=2;NF=6;NR=2;PP=100.0;SC=CCTGATTTCCTTGGTATTAAA;TC=20;TR=8 GT:GL:GQ 0/1:-198.02,-21.47,-166.02:100 +20 69506 . G GAC,GACACAC . PASS FR=0.5,0.5;HP=1;NF=1,3;NR=1,0;PP=44.0,72.0;SC=TGGACACGTGGACACACACAC;TC=20;TR=2,3 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 70484 . CTCTT C . PASS FR=0.5;HP=2;NF=13;NR=3;PP=100.0;SC=GTCTATGTCTCTCTTTCTCTT;TC=31;TR=16 GT:GL:GQ 0/1:-189.04,-24.53,-147.47:100 +20 72104 . TA T . PASS FR=0.5;HP=4;NF=9;NR=10;PP=100.0;SC=TTTAAGTCTGTAAAACCATAC;TC=39;TR=19 GT:GL:GQ 0/1:-173.69,-34.04,-169.85:100 +20 74729 . G GT . PASS FR=0.5;HP=9;NF=4;NR=4;PP=100.0;SC=AAGTTTTTTGGTTTTTTTTTA;TC=29;TR=8 GT:GL:GQ 0/1:-83.86,-25.71,-59.16:100 +20 117309 . G GCAGGATTTCAT . PASS FR=0.5;HP=1;NF=4;NR=4;PP=100.0;SC=CAGGATTTCTGCAGGATTTCA;TC=25;TR=8 GT:GL:GQ 0/1:-259.57,-46.67,-146.18:100 +20 119645 . G GT . PASS FR=1.0;HP=5;NF=6;NR=5;PP=100.0;SC=TTGTTTGTTTGTTGTTGTTGT;TC=16;TR=11 GT:GL:GQ 1/1:-157.48,-18.84,-7.1:77 +20 120122 . A AAG . PASS FR=1.0;HP=6;NF=10;NR=8;PP=100.0;SC=ATAAAGAAAAAAATTTTAAAA;TC=27;TR=18 GT:GL:GQ 1/1:-266.98,-24.1,-5.49:100 +20 120750 . C CAATT . PASS FR=1.0;HP=6;NF=10;NR=10;PP=100.0;SC=TTTTATAAAACAATTGAGACT;TC=21;TR=20 GT:GL:GQ 1/1:-319.22,-18.71,-2.07:100 +20 122806 . T TTA . PASS FR=0.5;HP=2;NF=8;NR=7;PP=100.0;SC=CAGAAAAGAATTATATATATA;TC=29;TR=15 GT:GL:GQ 0/1:-181.3,-19.86,-96.14:100 +20 126155 . GCAAA G . PASS FR=0.5;HP=1;NF=5;NR=5;PP=100.0;SC=GCAATGTGCGGCAAACAAAGG;TC=32;TR=10 GT:GL:GQ 0/1:-122.73,-27.0,-209.16:100 +20 126310 . ACC A . PASS FR=0.5;HP=5;NF=3;NR=8;PP=100.0;SC=GATGGCTCCTACCCCCGTTTC;TC=26;TR=11 GT:GL:GQ 0/1:-153.97,-42.91,-110.82:100 +20 131505 . CTCT C . PASS FR=1.0;HP=2;NF=11;NR=11;PP=100.0;SC=TACTTGTGATCTCTTGTCTTT;TC=24;TR=22 GT:GL:GQ 1/1:-487.46,-251.24,-235.3:100 +20 131948 . C CCA . PASS FR=1.0;HP=1;NF=2;NR=11;PP=100.0;SC=TTATCTTACACCACACACACA;TC=27;TR=13 GT:GL:GQ 1/1:-201.6,-36.32,-23.94:100 +20 135116 . T TTTGCATTCACAGGAAGACTATAAATA . PASS FR=1.0;HP=2;NF=2;NR=1;PP=100.0;SC=TCTAGAGAAGTGCTCTCCAAT;TC=15;TR=3 GT:GL:GQ 1/1:-603.73,-461.77,-448.12:100 +20 135119 . TC T . PASS FR=1.0;HP=2;NF=2;NR=2;PP=100.0;SC=AGAGAAGTGCTCTCCAATAGA;TC=21;TR=4 GT:GL:GQ 1/1:-603.73,-576.89,-572.06:100 +20 137518 . GTA G . PASS FR=0.5005;HP=2;NF=5;NR=5;PP=100.0;SC=GTGTGTGTGTGTATATATATA;TC=21;TR=10 GT:GL:GQ 1/0:-210.61,-46.97,-32.7:29 +20 138178 . GC G . PASS FR=1.0;HP=3;NF=21;NR=5;PP=100.0;SC=CTTCTGGAAAGCCTGGCCATG;TC=29;TR=26 GT:GL:GQ 1/1:-267.55,-29.21,-9.21:100 +20 138570 . ATATGTGTGTG ATG,A . PASS FR=0.5,0.5;HP=2;NF=6,2;NR=9,2;PP=100.0,10.0;SC=TCAAATATATATATGTGTGTG;TC=28;TR=15,4 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:65 +20 140396 . TTTG T . PASS FR=1.0;HP=2;NF=15;NR=4;PP=100.0;SC=AGGTTTTTGCTTTGTTGTTGT;TC=34;TR=19 GT:GL:GQ 1/1:-246.82,-30.67,-15.42:100 +20 144832 . C CT . PASS FR=1.0;HP=3;NF=12;NR=22;PP=100.0;SC=TCCTAAAACTCTTGTAATATC;TC=35;TR=34 GT:GL:GQ 1/1:-541.89,-322.78,-299.72:100 +20 144884 . CCTT C . PASS FR=1.0;HP=1;NF=9;NR=16;PP=100.0;SC=TGTAATGACACCTTCTTTTTC;TC=29;TR=25 GT:GL:GQ 1/1:-590.4,-430.25,-411.02:100 +20 145257 . G GC . PASS FR=1.0;HP=2;NF=11;NR=8;PP=100.0;SC=ATGGTGGCAGGGCCTGTAATC;TC=21;TR=19 GT:GL:GQ 1/1:-258.74,-106.61,-91.83:100 +20 153298 . T TTC . PASS FR=1.0;HP=2;NF=13;NR=17;PP=100.0;SC=CAGGATTTCTTTGTTTTAAGA;TC=34;TR=30 GT:GL:GQ 1/1:-447.58,-228.67,-205.19:100 +20 160111 . A AT . PASS FR=1.0;HP=10;NF=8;NR=9;PP=100.0;SC=GAGCTCTTGAATTTTTTTTTT;TC=25;TR=17 GT:GL:GQ 1/1:-115.49,-38.32,-28.08:85 +20 163607 . A AAT . PASS FR=1.0;HP=2;NF=12;NR=14;PP=100.0;SC=ACATTAAATGATTCAAATGAT;TC=31;TR=26 GT:GL:GQ 1/1:-308.34,-35.98,-14.5:100 +20 163741 . T TACACAC . PASS FR=0.5243;HP=1;NF=13;NR=6;PP=100.0;SC=GAACCCTCTGTACACACACAC;TC=28;TR=19 GT:GL:GQ 0/1:-416.01,-75.48,-55.48:13 +20 164279 . G GAAAAC . PASS FR=0.5;HP=8;NF=1;NR=1;PP=100.0;SC=GAAAAGAAAAGAAAAGAAAAC;TC=34;TR=2 GT:GL:GQ 0/1:-492.01,-428.61,-448.28:100 +20 164284 . G GAAAAC,C . PASS FR=0.5,0.5;HP=8;NF=5,10;NR=11,9;PP=100.0,100.0;SC=GAAAAGAAAAGAAAACTCATC;TC=33;TR=16,19 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 176386 . CGTGTGT C . PASS FR=1.0;HP=2;NF=3;NR=2;PP=100.0;SC=TAATCCCATTCGTGTGTGTGT;TC=25;TR=5 GT:GL:GQ 1/1:-176.18,-68.1,-61.92:77 +20 179735 . TTAAAA T . PASS FR=0.5;HP=1;NF=4;NR=4;PP=100.0;SC=ACCTTTGATCTTAAAATAAAA;TC=27;TR=8 GT:GL:GQ 0/1:-142.0,-61.37,-164.64:100 +20 218255 . A AG . PASS FR=0.5;HP=1;NF=5;NR=3;PP=100.0;SC=TGCTCACTGCAATAAAAAGAA;TC=17;TR=8 GT:GL:GQ 0/1:-99.61,-20.66,-85.67:100 +20 222539 . C CA . PASS FR=0.5;HP=2;NF=1;NR=9;PP=100.0;SC=TACCCAGCTACTTCTCTTAAG;TC=31;TR=10 GT:GL:GQ 0/1:-113.51,-40.72,-197.06:100 +20 230058 . CAT C . PASS FR=0.5;HP=1;NF=6;NR=2;PP=100.0;SC=GACTCCATCTCATAAAAAAAA;TC=33;TR=8 GT:GL:GQ 0/1:-215.64,-148.07,-177.0:100 +20 236459 . G GAT . PASS FR=0.5001;HP=2;NF=1;NR=1;PP=100.0;SC=TTGGAATACAGATATATATAT;TC=14;TR=2 GT:GL:GQ 0/1:-82.0,-46.74,-54.25:35 +20 237649 . CAGAT C . PASS FR=0.5;HP=2;NF=1;NR=1;PP=79.0;SC=AGATAGATGACAGATAGATAG;TC=23;TR=2 GT:GL:GQ 0/1:-209.52,-180.44,-254.54:100 +20 237816 . A AT . PASS FR=0.5;HP=4;NF=4;NR=7;PP=100.0;SC=CATTTTCATCATTTTAATAAC;TC=32;TR=11 GT:GL:GQ 0/1:-124.3,-28.61,-145.84:100 +20 243223 . C CT . PASS FR=0.5;HP=1;NF=12;NR=4;PP=100.0;SC=ATCTGTGTGACTGTGATCAAA;TC=33;TR=16 GT:GL:GQ 0/1:-191.55,-34.68,-144.05:100 +20 246483 . T TTAAA . PASS FR=0.5;HP=1;NF=3;NR=4;PP=100.0;SC=AGACTCCATCTTAAATAAATA;TC=25;TR=7 GT:GL:GQ 0/1:-110.34,-17.05,-40.1:100 +20 251373 . ACTT A . PASS FR=0.5;HP=2;NF=1;NR=4;PP=100.0;SC=TTGCTCCAGCACTTCTTCTGG;TC=19;TR=5 GT:GL:GQ 0/1:-99.2,-52.91,-150.48:100 +20 271135 . G GC . PASS FR=1.0;HP=2;NF=3;NR=4;PP=100.0;SC=AAGACCGAGGGCGACCTCGAG;TC=16;TR=7 GT:GL:GQ 1/1:-163.65,-94.48,-85.08:78 +20 286648 . TAAATA T . PASS FR=0.5;HP=6;NF=5;NR=5;PP=100.0;SC=TCTAAATAAATAAATAAAAGG;TC=22;TR=10 GT:GL:GQ 0/1:-240.51,-100.72,-176.05:100 +20 299585 . AC A . PASS FR=1.0;HP=2;NF=4;NR=7;PP=21.0;SC=ACAGGGAGAGACCTTGTCGAA;TC=14;TR=11 GT:GL:GQ 1/1:-152.36,-140.91,-138.05:46 +20 334317 . TC T . PASS FR=1.0;HP=6;NF=9;NR=8;PP=100.0;SC=CCTGGATCCTTCCCCCCTTCT;TC=24;TR=17 GT:GL:GQ 1/1:-177.37,-48.79,-33.34:100 +20 337392 . ACC A . PASS FR=0.5;HP=6;NF=5;NR=1;PP=100.0;SC=CCTTGTTACCACCCCTCCCTG;TC=19;TR=6 GT:GL:GQ 0/1:-91.61,-45.67,-115.7:100 +20 340044 . GCAC G . PASS FR=0.5;HP=1;NF=2;NR=5;PP=100.0;SC=ATGAAGGCTGGCACCACCAGT;TC=22;TR=7 GT:GL:GQ 0/1:-122.54,-28.81,-115.11:100 +20 343323 . A ATG . PASS FR=0.5;HP=2;NF=8;NR=4;PP=100.0;SC=GATAAACAGGATGTCCACCAG;TC=23;TR=12 GT:GL:GQ 0/1:-150.99,-48.03,-125.5:100 +20 346702 . AGCCTCCCAAAGGAG A . PASS FR=0.5;HP=1;NF=4;NR=3;PP=100.0;SC=CACCCACCTCAGCCTCCCAAA;TC=17;TR=7 GT:GL:GQ 0/1:-191.1,-120.01,-173.49:100 +20 347858 . A AAAACAAAC . PASS FR=0.5;HP=4;NF=2;NR=1;PP=100.0;SC=TCCGTCTCCAAAAACAAACAA;TC=22;TR=3 GT:GL:GQ 0/1:-270.04,-201.07,-226.88:100 +20 347878 . A AAAAC . PASS FR=0.5;HP=3;NF=2;NR=1;PP=100.0;SC=AAAAAACAAAACAAACAAACA;TC=22;TR=3 GT:GL:GQ 0/1:-258.23,-262.98,-327.72:100 +20 348365 . G GT . PASS FR=0.5;HP=2;NF=5;NR=4;PP=100.0;SC=ACGGCCCATGGGATCGAATAG;TC=19;TR=9 GT:GL:GQ 0/1:-127.12,-35.07,-72.46:100 +20 349321 . ACT A . PASS FR=0.5;HP=3;NF=10;NR=3;PP=100.0;SC=CCAGGCCTCCACTCTCTGCTG;TC=20;TR=13 GT:GL:GQ 0/1:-183.61,-95.19,-129.48:100 +20 355549 . A AC . PASS FR=1.0;HP=10;NF=12;NR=9;PP=100.0;SC=AACAACAACAAAAAAAAAAAC;TC=24;TR=21 GT:GL:GQ 1/1:-171.74,-97.15,-84.12:100 +20 356670 . T TCAAA . PASS FR=0.5;HP=3;NF=4;NR=2;PP=100.0;SC=AGACACTGCCTCAAAAAAACA;TC=16;TR=6 GT:GL:GQ 0/1:-204.44,-131.78,-155.8:100 +20 356675 . A AAAAC . PASS FR=1.0;HP=6;NF=2;NR=3;PP=100.0;SC=CTGCCTCAAAAAAACAAACAA;TC=17;TR=5 GT:GL:GQ 1/1:-201.68,-85.68,-76.1:85 +20 358147 . CA C . PASS FR=1.0;HP=4;NF=10;NR=5;PP=100.0;SC=TGGGATTTGACAAACCCAGCT;TC=18;TR=15 GT:GL:GQ 1/1:-150.87,-32.16,-20.25:100 +20 360927 . TAA T . PASS FR=1.0;HP=7;NF=4;NR=7;PP=100.0;SC=ATGTGCTTTATAAAAAAGGGG;TC=18;TR=11 GT:GL:GQ 1/1:-185.94,-114.38,-104.3:84 +20 380790 . C CT . PASS FR=1.0;HP=3;NF=16;NR=12;PP=100.0;SC=CACCACACCCCGACCCTAATT;TC=32;TR=28 GT:GL:GQ 1/1:-323.67,-24.71,-1.84:100 +20 385989 . T TA . PASS FR=0.5;HP=7;NF=7;NR=4;PP=100.0;SC=AGATTTTTTTTAAAAAACTCT;TC=29;TR=11 GT:GL:GQ 0/1:-131.67,-23.75,-80.28:100 +20 386575 . GTTCT G . PASS FR=0.5;HP=3;NF=2;NR=3;PP=100.0;SC=TGATAAGAATGTTCTTTCTTT;TC=24;TR=5 GT:GL:GQ 0/1:-109.28,-29.71,-86.14:100 +20 387657 . G GA . PASS FR=1.0;HP=8;NF=13;NR=19;PP=100.0;SC=ATGCTGAGAAGAAAAAATGAA;TC=38;TR=32 GT:GL:GQ 1/1:-284.64,-52.81,-28.53:100 +20 396023 . A AAAAC . PASS FR=1.0;HP=4;NF=9;NR=9;PP=100.0;SC=AAAAAAAACAAAAACAAACAA;TC=25;TR=18 GT:GL:GQ 1/1:-279.26,-33.44,-17.73:100 +20 403158 . GA G . PASS FR=0.5;HP=2;NF=4;NR=7;PP=89.0;SC=ATCTATGAAGGAAGGACAGCA;TC=20;TR=11 GT:GL:GQ 0/1:-137.87,-107.23,-160.58:100 +20 405057 . A AC . PASS FR=0.5;HP=2;NF=5;NR=4;PP=100.0;SC=AAACACATACACAGACCTCCT;TC=25;TR=9 GT:GL:GQ 0/1:-136.78,-33.82,-124.47:100 +20 421805 . T TCCA . PASS FR=0.5;HP=2;NF=2;NR=4;PP=100.0;SC=AGAACACATTTCCAACTAAAC;TC=29;TR=6 GT:GL:GQ 0/1:-108.14,-30.52,-185.93:100 +20 425206 . GTTTT G . PASS FR=0.5;HP=7;NF=2;NR=7;PP=100.0;SC=TTGTTTGTTTGTTTTGTTTTT;TC=25;TR=9 GT:GL:GQ 0/1:-158.57,-21.01,-100.22:100 +20 430158 . GA G . PASS FR=0.5;HP=3;NF=2;NR=4;PP=100.0;SC=AGAGTCGCTTGAAACCCAGGA;TC=16;TR=6 GT:GL:GQ 0/1:-74.97,-35.93,-74.51:100 +20 434939 . G GA . PASS FR=0.5;HP=10;NF=6;NR=2;PP=100.0;SC=AAGAAAAAAGGAAAAAAAAAA;TC=22;TR=8 GT:GL:GQ 0/1:-99.4,-65.02,-85.64:92 +20 436981 . TTTCATCCA T . PASS FR=0.5;HP=2;NF=1;NR=2;PP=100.0;SC=AGGTGTGTCCTTTCATCCATT;TC=27;TR=3 GT:GL:GQ 0/1:-88.19,-26.08,-154.96:100 +20 525046 . G GT . PASS FR=0.5;HP=10;NF=5;NR=8;PP=100.0;SC=AAAATACAGTGTTTTTTTTTC;TC=33;TR=13 GT:GL:GQ 0/1:-160.44,-103.25,-141.37:100 +20 538639 . C CA . PASS FR=1.0;HP=9;NF=14;NR=9;PP=100.0;SC=ACCACCACAACAAAAAAACCC;TC=36;TR=23 GT:GL:GQ 1/1:-261.69,-66.02,-42.16:100 +20 539756 . G GT . PASS FR=0.5;HP=1;NF=6;NR=2;PP=100.0;SC=AATGTGAGCAGTCTAGGTAAA;TC=24;TR=8 GT:GL:GQ 0/1:-130.62,-70.51,-165.77:100 +20 540198 . T TG . PASS FR=1.0;HP=1;NF=9;NR=16;PP=100.0;SC=AGAGTCGCTGTTATTAAAACC;TC=26;TR=25 GT:GL:GQ 1/1:-262.05,-37.69,-19.11:100 +20 545849 . A AT . PASS FR=1.0;HP=9;NF=6;NR=13;PP=100.0;SC=CTCTGGACTGATTTTTTTTTA;TC=24;TR=19 GT:GL:GQ 1/1:-225.47,-140.74,-126.39:100 +20 555243 . C CT . PASS FR=0.5;HP=1;NF=3;NR=4;PP=100.0;SC=TTGGGGCCTCCTGGGTCCCAG;TC=23;TR=7 GT:GL:GQ 0/1:-124.01,-59.66,-144.99:100 +20 559298 . TACAC T . PASS FR=0.5081;HP=1;NF=1;NR=1;PP=100.0;SC=GGCACACATGTACACACACAC;TC=20;TR=2 GT:GL:GQ 0/1:-95.31,-59.31,-62.75:17 +20 570945 . A AACAC . PASS FR=1.0;HP=1;NF=7;NR=2;PP=100.0;SC=AGAAGGCAATAACACACACAC;TC=28;TR=9 GT:GL:GQ 1/1:-281.44,-73.27,-58.53:100 +20 576287 . T TTTA . PASS FR=1.0;HP=3;NF=2;NR=9;PP=100.0;SC=CTGGAAAAGTTTTATTATTAT;TC=26;TR=11 GT:GL:GQ 1/1:-188.46,-27.21,-14.74:100 +20 593205 . AG A . PASS FR=0.5;HP=6;NF=2;NR=2;PP=100.0;SC=GGGAGTGCGGAGGGGACTCCT;TC=14;TR=4 GT:GL:GQ 0/1:-90.79,-21.16,-46.9:100 +20 635817 . C CAGAAAAAAA . PASS FR=1.0;HP=1;NF=6;NR=7;PP=100.0;SC=GAGACTCTCTCAGAAAAAAAA;TC=23;TR=13 GT:GL:GQ 1/1:-318.1,-28.61,-13.35:100 +20 666340 . AAATAATAATAAT AAATAAT,A . PASS FR=0.5,0.5;HP=2;NF=1,2;NR=3,3;PP=100.0,100.0;SC=ATACAAATACAAATAATAATA;TC=16;TR=4,5 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 671463 . AGTGT A . PASS FR=1.0;HP=1;NF=6;NR=2;PP=100.0;SC=CATGCATGCAAGTGTGTGTGT;TC=25;TR=8 GT:GL:GQ 1/1:-248.41,-147.67,-140.04:63 +20 675799 . G GTA . PASS FR=0.5;HP=2;NF=7;NR=3;PP=100.0;SC=TAATGAACATGTATATATACA;TC=20;TR=10 GT:GL:GQ 0/1:-154.12,-35.67,-66.33:100 +20 704073 . CTCT C . PASS FR=0.5;HP=3;NF=3;NR=3;PP=100.0;SC=CTTCATTCTTCTCTTTTCTTT;TC=20;TR=6 GT:GL:GQ 0/1:-159.89,-91.96,-171.96:100 +20 704111 . C CTTTCT . PASS FR=0.5;HP=4;NF=2;NR=3;PP=100.0;SC=TTCCTCCTCTCTTTGTCTAGT;TC=20;TR=5 GT:GL:GQ 0/1:-189.74,-115.92,-237.08:100 +20 714136 . TA T . PASS FR=1.0;HP=2;NF=12;NR=13;PP=100.0;SC=CTGTGGTTGTTAACTGTAGTC;TC=30;TR=25 GT:GL:GQ 1/1:-253.68,-26.24,-6.67:100 +20 715254 . G GGT,GGTGTGT . PASS FR=0.5,0.5;HP=1;NF=3,4;NR=0,1;PP=57.0,100.0;SC=ATAGTTTATAGGTGTGTGTGT;TC=23;TR=3,5 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 715847 . C CA . PASS FR=1.0;HP=7;NF=10;NR=6;PP=100.0;SC=GGCTCCGTCTCAAAAAAATAA;TC=26;TR=16 GT:GL:GQ 1/1:-157.25,-40.0,-26.17:100 +20 718268 . A AAATAAT . PASS FR=0.5;HP=3;NF=1;NR=1;PP=81.0;SC=AAAAAATACAAAATAATAATA;TC=15;TR=2 GT:GL:GQ 0/1:-64.86,-29.69,-87.73:100 +20 724447 . A AG . PASS FR=0.5;HP=2;NF=12;NR=9;PP=100.0;SC=GGGTGTTGTGAGACTGATTGA;TC=42;TR=21 GT:GL:GQ 0/1:-229.53,-40.83,-188.06:100 +20 726275 . CAGA C . PASS FR=0.5;HP=3;NF=10;NR=10;PP=100.0;SC=ACATATATAACAGAAGGAGAG;TC=41;TR=20 GT:GL:GQ 0/1:-286.26,-52.94,-197.08:100 +20 728851 . CT C . PASS FR=0.5;HP=1;NF=5;NR=1;PP=21.0;SC=GATCACACCACTGCAGTCCAG;TC=22;TR=6 GT:GL:GQ 0/1:-200.76,-185.85,-212.48:67 +20 732117 . CTTTATTTTAT C . PASS FR=0.9998;HP=4;NF=1;NR=1;PP=80.0;SC=TCAGGTATGTCTTTATTTTAT;TC=14;TR=2 GT:GL:GQ 1/1:-96.6,-68.07,-66.69:34 +20 739616 . CGTGTGTGT C . PASS FR=1.0;HP=1;NF=4;NR=4;PP=100.0;SC=TAAAAGTGCTCGTGTGTGTGT;TC=20;TR=8 GT:GL:GQ 1/1:-222.59,-24.43,-16.81:63 +20 744662 . A ACAGGTCAAT . PASS FR=0.5;HP=1;NF=3;NR=4;PP=100.0;SC=AAAGGACAAGACAGATCCCTG;TC=16;TR=7 GT:GL:GQ 0/1:-105.45,-32.23,-150.03:100 +20 746855 . A AG . PASS FR=1.0;HP=1;NF=9;NR=5;PP=100.0;SC=CTGGGATTACAGTGTGAGCCA;TC=22;TR=14 GT:GL:GQ 1/1:-242.45,-177.27,-167.62:80 +20 747680 . A ATAG . PASS FR=0.5;HP=1;NF=3;NR=3;PP=100.0;SC=CTTGTTGGTAATAGCAAGTTA;TC=17;TR=6 GT:GL:GQ 0/1:-177.8,-96.72,-120.09:100 +20 755106 . C CA . PASS FR=1.0;HP=3;NF=7;NR=15;PP=100.0;SC=GCTGAGAGGTCAAACCACAAA;TC=27;TR=22 GT:GL:GQ 1/1:-255.81,-41.84,-23.33:100 +20 757564 . T TG . PASS FR=0.5;HP=3;NF=3;NR=1;PP=78.0;SC=GGTGGAGCCATGGGTGTCAAA;TC=10;TR=4 GT:GL:GQ 0/1:-67.44,-38.36,-58.29:89 +20 757919 . A AC . PASS FR=0.5;HP=9;NF=3;NR=9;PP=100.0;SC=AAAAAACAAAAAAAAAACACC;TC=27;TR=12 GT:GL:GQ 0/1:-172.2,-112.42,-144.61:100 +20 762893 . G GA . PASS FR=1.0;HP=6;NF=8;NR=9;PP=100.0;SC=TCTTGGGGGGGAAAAAATGGG;TC=24;TR=17 GT:GL:GQ 1/1:-215.19,-64.36,-48.0:100 +20 782496 . CAAATAAAT C . PASS FR=0.5;HP=3;NF=2;NR=1;PP=100.0;SC=GACTCTGCCTCAAATAAATAA;TC=17;TR=3 GT:GL:GQ 0/1:-87.5,-27.65,-92.5:100 +20 786252 . AAG A . PASS FR=1.0;HP=5;NF=4;NR=13;PP=100.0;SC=TTAATTAAAAAAGATATTGCA;TC=19;TR=17 GT:GL:GQ 1/1:-216.25,-31.31,-17.45:100 +20 786764 . T TA . PASS FR=1.0;HP=3;NF=17;NR=12;PP=100.0;SC=ACTATATATATAATATATTTT;TC=33;TR=29 GT:GL:GQ 1/1:-388.27,-147.23,-125.36:100 +20 787870 . T TTTTATTTATTTATTTATTTA . PASS FR=1.0;HP=3;NF=2;NR=1;PP=100.0;SC=ATATCAAGCATTTTATTTATT;TC=19;TR=3 GT:GL:GQ 1/1:-317.88,-65.36,-53.59:99 +20 787893 . T TATTTATTTA . PASS FR=0.5;HP=4;NF=1;NR=1;PP=100.0;SC=TTTATTTATTTTTGAGATGGA;TC=20;TR=2 GT:GL:GQ 0/1:-356.98,-227.18,-263.76:5 +20 789767 . T TA . PASS FR=1.0;HP=10;NF=8;NR=5;PP=100.0;SC=CAAAGCCAATTAAAAAAAAAA;TC=29;TR=13 GT:GL:GQ 1/1:-124.57,-44.47,-30.25:100 +20 795148 . T TTTTA . PASS FR=1.0;HP=4;NF=9;NR=1;PP=100.0;SC=ATAAGTTTATTTTTATTTATT;TC=16;TR=10 GT:GL:GQ 1/1:-136.44,-12.46,-4.83:63 +20 797336 . GA G . PASS FR=1.0;HP=10;NF=18;NR=11;PP=100.0;SC=CCATTTATGTGAAAAAAAAAA;TC=35;TR=29 GT:GL:GQ 1/1:-156.82,-42.02,-20.72:100 +20 801157 . T TTTC . PASS FR=1.0;HP=6;NF=1;NR=6;PP=100.0;SC=CTTCTCTTTCTTTTTTTCTTT;TC=13;TR=7 GT:GL:GQ 1/1:-142.57,-41.24,-32.92:92 +20 825082 . TGCCCAGGTC T . PASS FR=0.5;HP=1;NF=5;NR=1;PP=100.0;SC=CTGCTCAGGTTGCCCAGGTCG;TC=8;TR=6 GT:GL:GQ 1/0:-180.72,-60.67,-71.61:61 +20 833239 . ACT A . PASS FR=0.5;HP=1;NF=3;NR=5;PP=100.0;SC=GGAGAAATAGACTCTCTCTCT;TC=21;TR=8 GT:GL:GQ 0/1:-96.13,-31.34,-89.12:100 +20 835500 . TTGTG T . PASS FR=1.0;HP=2;NF=8;NR=2;PP=100.0;SC=GTGTTTGTGTTTGTGTGTGTG;TC=29;TR=10 GT:GL:GQ 1/1:-258.26,-62.01,-52.79:77 +20 855678 . TC T . PASS FR=0.5;HP=2;NF=3;NR=5;PP=100.0;SC=TCTTTTTCTTTCTTTTTTTTC;TC=28;TR=8 GT:GL:GQ 0/1:-124.38,-62.93,-124.85:100 +20 860945 . A AG . PASS FR=0.5;HP=6;NF=2;NR=6;PP=100.0;SC=GTATATTAAGAGGGGGTGAAA;TC=23;TR=8 GT:GL:GQ 0/1:-96.52,-33.16,-85.46:100 +20 863148 . C CTAT . PASS FR=0.5;HP=2;NF=3;NR=12;PP=100.0;SC=CCAGAGAAGGCTATTGCTCTC;TC=37;TR=15 GT:GL:GQ 0/1:-223.19,-48.7,-208.9:100 +20 899789 . CTCTT C . PASS FR=0.5;HP=3;NF=1;NR=3;PP=100.0;SC=TTTCCTTCTTCTCTTTCTTTC;TC=21;TR=4 GT:GL:GQ 0/1:-62.34,-23.94,-85.48:100 +20 900698 . T TC . PASS FR=1.0;HP=4;NF=11;NR=5;PP=100.0;SC=AGGAAGGCAGTCCCCTTTCCT;TC=29;TR=16 GT:GL:GQ 1/1:-292.54,-113.13,-95.49:100 +20 902060 . T TG,G . PASS FR=0.5,0.5;HP=5;NF=2,7;NR=2,4;PP=100.0,100.0;SC=TTGACTGCCCTCCTCCACTTT;TC=19;TR=4,11 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 909945 . TTATGG TTGG,T . PASS FR=0.5,0.5;HP=2;NF=10,8;NR=5,5;PP=100.0,100.0;SC=TTAGTTTAGTTTATGGTATCC;TC=32;TR=15,13 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 913303 . A AT . PASS FR=1.0;HP=10;NF=9;NR=4;PP=100.0;SC=AGATTTAAAGATTTTTTTTTT;TC=21;TR=13 GT:GL:GQ 1/1:-227.97,-180.37,-171.35:75 +20 922916 . A AT . PASS FR=1.0;HP=6;NF=2;NR=1;PP=27.0;SC=TTATTTATTTATTTATTTTTT;TC=7;TR=3 GT:GL:GQ 1/1:-68.71,-54.63,-52.11:41 +20 933970 . GTTAT G . PASS FR=1.0;HP=4;NF=5;NR=5;PP=100.0;SC=CAGGCTAATTGTTATTTATTT;TC=24;TR=10 GT:GL:GQ 1/1:-169.08,-10.86,-0.46:87 +20 934153 . A AT . PASS FR=1.0;HP=7;NF=4;NR=5;PP=100.0;SC=ATTTTTTTGTATTTTTTAATA;TC=11;TR=9 GT:GL:GQ 1/1:-123.08,-66.05,-59.03:57 +20 945474 . CAT C . PASS FR=1.0;HP=2;NF=2;NR=6;PP=100.0;SC=CACACACACACATATATATAT;TC=31;TR=8 GT:GL:GQ 1/1:-229.9,-58.37,-41.73:100 +20 954102 . A ATTGT . PASS FR=0.5;HP=6;NF=4;NR=1;PP=100.0;SC=TGTTTGTTTTATTGTTTGTTT;TC=30;TR=5 GT:GL:GQ 0/1:-77.28,-28.19,-134.91:100 +20 972071 . A AT . PASS FR=0.5;HP=8;NF=7;NR=5;PP=100.0;SC=ATTAAAAAAGATTTTTTTTGT;TC=27;TR=12 GT:GL:GQ 0/1:-76.99,-19.47,-57.49:100 +20 995685 . CAAAT C . PASS FR=1.0;HP=3;NF=3;NR=2;PP=100.0;SC=AACTCTATCTCAAATAAATAA;TC=15;TR=5 GT:GL:GQ 1/1:-96.06,-12.82,-6.68:77 +20 1000562 . TTTCA T . PASS FR=0.5;HP=2;NF=10;NR=1;PP=100.0;SC=TCACCCTTTCTTTCATTCACT;TC=23;TR=11 GT:GL:GQ 0/1:-127.76,-31.92,-110.25:100 +20 1005659 . CTCAG C . PASS FR=1.0;HP=3;NF=15;NR=6;PP=100.0;SC=AACAAACAAACTCAGTCTGTC;TC=34;TR=21 GT:GL:GQ 1/1:-379.32,-49.71,-26.34:100 +20 1018266 . CAAT C . PASS FR=1.0;HP=4;NF=10;NR=7;PP=100.0;SC=GAAGTAACAACAATAATAATA;TC=26;TR=17 GT:GL:GQ 1/1:-307.78,-61.51,-42.82:100 +20 1023817 . C CCCT . PASS FR=1.0;HP=3;NF=7;NR=3;PP=100.0;SC=CAGTGCCCACCCCTCCTCTCC;TC=22;TR=10 GT:GL:GQ 1/1:-230.45,-50.55,-37.14:100 +20 1024121 . A AT . PASS FR=1.0;HP=6;NF=5;NR=3;PP=100.0;SC=CGGGTCAGGCATTTTTTATCA;TC=16;TR=8 GT:GL:GQ 1/1:-95.55,-28.09,-20.26:65 +20 1042261 . CCCTG C . PASS FR=1.0;HP=2;NF=10;NR=10;PP=100.0;SC=CCAAACCCAACCCTGCCTGGC;TC=25;TR=20 GT:GL:GQ 1/1:-365.29,-133.94,-117.57:100 +20 1050585 . AT A . PASS FR=1.0;HP=10;NF=9;NR=15;PP=100.0;SC=TTCTAATTCCATTTTTTTTTT;TC=33;TR=24 GT:GL:GQ 1/1:-288.37,-205.98,-189.27:100 +20 1059991 . G GAATT . PASS FR=1.0;HP=2;NF=10;NR=6;PP=100.0;SC=AACATTTGTTGAATTAATTAA;TC=25;TR=16 GT:GL:GQ 1/1:-290.89,-32.75,-16.81:100 +20 1072882 . CAG C . PASS FR=0.5;HP=6;NF=5;NR=6;PP=100.0;SC=ATCAGAAAAACAGAGACCACA;TC=23;TR=11 GT:GL:GQ 0/1:-124.42,-26.5,-135.46:100 +20 1084744 . TG T . PASS FR=1.0;HP=5;NF=9;NR=12;PP=100.0;SC=ACCATAAATGTGGGGCTACTG;TC=23;TR=21 GT:GL:GQ 1/1:-326.86,-192.89,-179.07:100 +20 1100621 . TAG T . PASS FR=0.5;HP=4;NF=6;NR=3;PP=100.0;SC=GCTTCTCAAATAGAGTCTTAA;TC=23;TR=9 GT:GL:GQ 0/1:-166.5,-71.13,-124.84:100 +20 1105206 . C CAT . PASS FR=1.0;HP=1;NF=15;NR=11;PP=100.0;SC=AATTTATCCACGTGTACCAGA;TC=32;TR=26 GT:GL:GQ 1/1:-427.57,-192.92,-171.28:100 +20 1114638 . C CTCTT . PASS FR=1.0;HP=4;NF=9;NR=17;PP=100.0;SC=TGTGTCCTCTCTTTGTATTTG;TC=34;TR=26 GT:GL:GQ 1/1:-420.88,-72.2,-49.92:100 +20 1118278 . GAA G . PASS FR=1.0;HP=5;NF=13;NR=8;PP=100.0;SC=AGAAAAGGGAGAAAAGGAGGC;TC=24;TR=21 GT:GL:GQ 1/1:-206.9,-16.17,-0.92:100 +20 1127807 . TCATCATCATCATCAC T . PASS FR=0.5;HP=1;NF=2;NR=3;PP=100.0;SC=ATCATCATCATCATCATCATC;TC=18;TR=5 GT:GL:GQ 1/0:-246.11,-143.41,-171.3:100 +20 1133620 . GC G . PASS FR=1.0;HP=3;NF=17;NR=8;PP=100.0;SC=TAAGGACCAAGCCCTGTTTAT;TC=28;TR=25 GT:GL:GQ 1/1:-266.52,-52.99,-34.3:100 +20 1162839 . AG A . PASS FR=0.5;HP=10;NF=1;NR=6;PP=100.0;SC=GGGGTGGGGGAGGGGGTAGAA;TC=27;TR=7 GT:GL:GQ 0/1:-154.34,-117.72,-158.43:100 +20 1165265 . TACAC T . PASS FR=1.0;HP=1;NF=2;NR=1;PP=100.0;SC=CACACGCGCGTACACACACAC;TC=13;TR=3 GT:GL:GQ 1/1:-65.7,-24.93,-20.64:52 +20 1168799 . T TAC . PASS FR=0.5;HP=3;NF=1;NR=3;PP=100.0;SC=ATATATATAATACACACACAC;TC=33;TR=4 GT:GL:GQ 0/1:-146.28,-74.63,-149.77:100 +20 1194678 . A AT . PASS FR=1.0;HP=8;NF=13;NR=12;PP=100.0;SC=TACAAGATTAATTTTTTTTGT;TC=37;TR=25 GT:GL:GQ 1/1:-428.37,-300.25,-279.55:89 +20 1195705 . AAAG A . PASS FR=1.0;HP=2;NF=10;NR=12;PP=100.0;SC=AGAGATGGCCAAAGAAGACAT;TC=27;TR=22 GT:GL:GQ 1/1:-481.8,-237.54,-219.64:100 +20 1200593 . GA G . PASS FR=0.5;HP=5;NF=7;NR=5;PP=100.0;SC=TTTTTTAAAAGATCAACAAAA;TC=31;TR=12 GT:GL:GQ 0/1:-291.7,-258.36,-302.47:100 +20 1202056 . C CT . PASS FR=0.5;HP=6;NF=2;NR=1;PP=73.0;SC=TTCTTTCTTTCTTTCTTTCTT;TC=17;TR=3 GT:GL:GQ 0/1:-78.02,-50.24,-96.3:100 +20 1217230 . C CT . PASS FR=0.5;HP=3;NF=6;NR=7;PP=100.0;SC=TGAATCTGAACTTTCTCTATT;TC=29;TR=13 GT:GL:GQ 0/1:-136.34,-37.11,-139.78:100 +20 1238533 . TATC T . PASS FR=0.5;HP=1;NF=6;NR=8;PP=100.0;SC=ATTCCCTTATTATCCTTTTAA;TC=32;TR=14 GT:GL:GQ 0/1:-203.0,-27.66,-145.09:100 +20 1258183 . GTGTC G . PASS FR=0.5;HP=2;NF=9;NR=7;PP=100.0;SC=CTGTGCATGTGTGTCTGTGTG;TC=40;TR=16 GT:GL:GQ 0/1:-393.66,-270.04,-334.02:100 +20 1258199 . C CTG . PASS FR=1.0;HP=2;NF=10;NR=8;PP=100.0;SC=GTGTGTGTATCTGTGTGTGTG;TC=39;TR=18 GT:GL:GQ 1/1:-443.43,-273.82,-255.93:100 +20 1258268 . C CTG . PASS FR=1.0;HP=1;NF=14;NR=7;PP=100.0;SC=GTATGTGTGCCTGTGTGTGTG;TC=36;TR=21 GT:GL:GQ 1/1:-385.28,-210.98,-205.13:73 +20 1258437 . GTGTGCCTGTGTGTGTC G . PASS FR=0.5;HP=2;NF=3;NR=4;PP=100.0;SC=GCCTGTGTATGTGTGCCTGTG;TC=40;TR=7 GT:GL:GQ 0/1:-300.85,-170.75,-363.46:100 +20 1258704 . C CTGTT . PASS FR=0.5;HP=2;NF=6;NR=3;PP=100.0;SC=GTGTGTGTGTCTGTGTGTGTA;TC=34;TR=9 GT:GL:GQ 0/1:-182.12,-58.28,-233.67:100 +20 1270442 . CA C . PASS FR=1.0;HP=2;NF=5;NR=12;PP=100.0;SC=CACTGCACTCCAAGCCTAGGT;TC=17;TR=17 GT:GL:GQ 1/1:-162.61,-26.2,-14.46:98 +20 1272295 . CTCTGT C . PASS FR=1.0;HP=1;NF=13;NR=7;PP=100.0;SC=CCAAGTTCTGCTCTGTTGATT;TC=25;TR=20 GT:GL:GQ 1/1:-389.78,-103.27,-85.17:100 +20 1272815 . C CATAG . PASS FR=1.0;HP=2;NF=11;NR=10;PP=100.0;SC=TAGTCTAAGGCATAGCATCCT;TC=27;TR=21 GT:GL:GQ 1/1:-368.78,-50.48,-32.46:100 +20 1291149 . GCAA G . PASS FR=0.5;HP=1;NF=2;NR=3;PP=100.0;SC=CCTGGATACAGCAACAACAGT;TC=25;TR=5 GT:GL:GQ 0/1:-151.35,-93.7,-185.23:100 +20 1292033 . C CTTGT . PASS FR=0.5;HP=2;NF=7;NR=5;PP=100.0;SC=CTTACATTTGCTTGTTTGATA;TC=29;TR=12 GT:GL:GQ 0/1:-444.32,-314.49,-337.3:100 +20 1292718 . GT G . PASS FR=1.0;HP=8;NF=9;NR=3;PP=100.0;SC=TAATTTTTTAGTTTTTTTTGT;TC=17;TR=12 GT:GL:GQ 1/1:-140.26,-85.11,-76.3:73 +20 1292776 . T TA . PASS FR=1.0;HP=1;NF=14;NR=10;PP=100.0;SC=CTCCTGGACTTAGTGATCCTC;TC=25;TR=24 GT:GL:GQ 1/1:-310.19,-119.02,-102.21:100 +20 1303648 . A AG . PASS FR=0.5;HP=4;NF=6;NR=2;PP=100.0;SC=GGCAACACTCACCCGGCTGAG;TC=19;TR=8 GT:GL:GQ 0/1:-115.57,-32.83,-76.0:100 +20 1312294 . A AT . PASS FR=1.0;HP=7;NF=5;NR=6;PP=100.0;SC=CACCTGGCTAATTTTTTTATT;TC=17;TR=11 GT:GL:GQ 1/1:-196.82,-109.27,-98.21:93 +20 1318554 . TCCCACAGAGAAGTCC T . PASS FR=1.0;HP=3;NF=5;NR=4;PP=100.0;SC=ACCTAAGCATTCCCACAGAGA;TC=12;TR=9 GT:GL:GQ 1/1:-228.16,-15.45,-7.14:62 +20 1322791 . G GCACACA,GCACACACA . PASS FR=0.5,0.5;HP=1;NF=3,3;NR=0,4;PP=43.0,100.0;SC=GAGAACAAATGCACACACACA;TC=18;TR=3,7 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 1333430 . C CT . PASS FR=1.0;HP=2;NF=18;NR=9;PP=100.0;SC=ATGAAGGTGACTTCTCAGGTG;TC=32;TR=27 GT:GL:GQ 1/1:-276.34,-27.55,-7.09:100 +20 1342649 . AT A . PASS FR=1.0;HP=6;NF=17;NR=10;PP=100.0;SC=AGTGTATGAGATTTTTTGTTA;TC=29;TR=27 GT:GL:GQ 1/1:-209.72,-24.22,-4.14:100 +20 1349439 . C CCCT . PASS FR=0.5;HP=4;NF=2;NR=6;PP=100.0;SC=CCCACATTCCCCCTCCTCTGA;TC=22;TR=8 GT:GL:GQ 0/1:-157.47,-56.31,-133.86:100 +20 1358694 . C CAGTTTGGGCACTAACACCTACTT . PASS FR=0.5;HP=1;NF=4;NR=1;PP=100.0;SC=CTATACGGGTCAGTTTGGGCA;TC=19;TR=5 GT:GL:GQ 0/1:-272.45,-105.91,-212.24:100 +20 1364390 . G GA . PASS FR=1.0;HP=2;NF=9;NR=6;PP=100.0;SC=GATCAAGTGGGAGATCACTTG;TC=25;TR=15 GT:GL:GQ 1/1:-334.68,-154.31,-139.66:100 +20 1369478 . CG C . PASS FR=0.5;HP=2;NF=7;NR=4;PP=100.0;SC=TAAAAACCAACGAGGCTCCAC;TC=23;TR=11 GT:GL:GQ 0/1:-184.87,-113.86,-180.77:100 +20 1372404 . GA G . PASS FR=1.0;HP=7;NF=8;NR=5;PP=100.0;SC=GAGGGAGTGGGAAAAAAAGAG;TC=17;TR=13 GT:GL:GQ 1/1:-147.21,-77.38,-68.31:75 +20 1379453 . C CTG . PASS FR=1.0;HP=2;NF=4;NR=11;PP=100.0;SC=TGCCAGGACTCTCCTCGCTGT;TC=19;TR=15 GT:GL:GQ 1/1:-192.19,-47.83,-35.2:100 +20 1381135 . AG A . PASS FR=0.5;HP=2;NF=3;NR=5;PP=100.0;SC=CTTGAGGACAAGGCATTATAG;TC=26;TR=8 GT:GL:GQ 0/1:-99.07,-46.56,-212.4:100 +20 1386382 . AGAG A . PASS FR=0.5;HP=3;NF=7;NR=1;PP=100.0;SC=ACTAATTAAAAGAGAACCCTG;TC=26;TR=8 GT:GL:GQ 0/1:-184.22,-117.09,-276.56:100 +20 1389225 . CGTGTGT C . PASS FR=1.0;HP=1;NF=1;NR=1;PP=100.0;SC=TATGAAGACTCGTGTGTGTGT;TC=12;TR=2 GT:GL:GQ 1/1:-80.8,-37.12,-33.18:48 +20 1392633 . AT A . PASS FR=0.5;HP=9;NF=8;NR=5;PP=100.0;SC=AAGCCAACACATTTTTTTTTC;TC=29;TR=13 GT:GL:GQ 0/1:-142.17,-103.31,-156.4:100 +20 1399660 . A AAAAAC . PASS FR=0.5;HP=2;NF=1;NR=7;PP=100.0;SC=TGTTTATGTTAGAAACAAAAC;TC=28;TR=8 GT:GL:GQ 0/1:-237.24,-123.87,-245.2:100 +20 1401887 . T TC . PASS FR=0.5;HP=6;NF=3;NR=5;PP=100.0;SC=TGACTTTTTTTCTCCCTGAGA;TC=26;TR=8 GT:GL:GQ 0/1:-140.81,-26.64,-103.7:100 +20 1403888 . G GT . PASS FR=0.5;HP=1;NF=3;NR=5;PP=100.0;SC=CAGAGAGGGCGTAAGATTGGA;TC=18;TR=8 GT:GL:GQ 0/1:-134.33,-94.6,-144.84:100 +20 1411174 . G GT . PASS FR=1.0;HP=1;NF=14;NR=18;PP=100.0;SC=TTCCAACAGTGACAAGGGTTT;TC=34;TR=32 GT:GL:GQ 1/1:-370.91,-42.86,-18.85:100 +20 1411544 . TG T . PASS FR=0.5;HP=4;NF=7;NR=2;PP=36.0;SC=ATTTATAAAATGTTTTTGTTG;TC=28;TR=9 GT:GL:GQ 0/1:-275.92,-257.59,-310.84:82 +20 1420200 . CT C . PASS FR=1.0;HP=2;NF=13;NR=7;PP=100.0;SC=AAGATGGAACCTTAAGTTCAA;TC=24;TR=20 GT:GL:GQ 1/1:-229.24,-45.08,-29.19:100 +20 1421627 . GC G . PASS FR=1.0;HP=4;NF=12;NR=6;PP=100.0;SC=GGAGCCCAACGCCCATTTAAA;TC=24;TR=18 GT:GL:GQ 1/1:-219.35,-32.03,-15.65:100 +20 1428402 . A ATCTAT . PASS FR=0.5;HP=2;NF=6;NR=3;PP=100.0;SC=AATAGCTGATATCAGTTAAGG;TC=30;TR=9 GT:GL:GQ 0/1:-414.87,-348.43,-419.1:100 +20 1428454 . TC T . PASS FR=0.5;HP=2;NF=11;NR=7;PP=100.0;SC=TTACACCGACTCTGTGCAGGT;TC=37;TR=18 GT:GL:GQ 0/1:-456.05,-415.06,-465.1:100 +20 1448428 . AC A . PASS FR=1.0;HP=2;NF=12;NR=6;PP=100.0;SC=ACGGTAAACAACCTTCCCGCG;TC=21;TR=18 GT:GL:GQ 1/1:-289.43,-190.83,-179.1:98 +20 1450561 . A AAATAAT . PASS FR=1.0;HP=8;NF=6;NR=4;PP=100.0;SC=CTGTCTCAAAAAAAAATAATA;TC=23;TR=10 GT:GL:GQ 1/1:-324.02,-170.06,-160.02:94 +20 1454025 . GCACACACGCA G . PASS FR=1.0;HP=1;NF=5;NR=3;PP=100.0;SC=ACGCACACATGCACACACGCA;TC=23;TR=8 GT:GL:GQ 1/1:-298.98,-49.31,-43.52:72 +20 1455718 . AC A . PASS FR=0.5;HP=8;NF=5;NR=3;PP=100.0;SC=TGGTGGTAGCACCCCCCCAGG;TC=26;TR=8 GT:GL:GQ 0/1:-122.23,-68.33,-113.23:100 +20 1466298 . C CCA . PASS FR=0.5;HP=1;NF=3;NR=2;PP=100.0;SC=CACACACACACCACACACACA;TC=25;TR=5 GT:GL:GQ 0/1:-174.97,-31.68,-40.82:42 +20 1470727 . TG T . PASS FR=1.0;HP=4;NF=9;NR=10;PP=100.0;SC=CAACAATCATTGGGGAATATT;TC=24;TR=19 GT:GL:GQ 1/1:-243.08,-66.7,-50.7:100 +20 1473489 . ATAATT A . PASS FR=0.5;HP=2;NF=13;NR=9;PP=100.0;SC=TTACTTACAAATAATTTTATT;TC=35;TR=22 GT:GL:GQ 0/1:-297.03,-26.79,-121.41:100 +20 1475430 . C CTCT . PASS FR=0.5;HP=3;NF=5;NR=7;PP=100.0;SC=CTCATTTCTTCTCTTTTCATT;TC=31;TR=12 GT:GL:GQ 0/1:-179.5,-26.21,-143.42:100 +20 1477952 . AGTCTACACGT A . PASS FR=0.5;HP=1;NF=1;NR=2;PP=100.0;SC=TTGTCTTTTCAGTCTACACGT;TC=26;TR=3 GT:GL:GQ 0/1:-132.31,-83.49,-272.8:100 +20 1485444 . TGAGAGAGA T . PASS FR=0.5;HP=2;NF=1;NR=2;PP=100.0;SC=TGTGTGTGTGTGAGAGAGAGA;TC=17;TR=3 GT:GL:GQ 1/0:-294.27,-239.82,-244.87:100 +20 1498426 . G GA . PASS FR=1.0;HP=6;NF=18;NR=13;PP=100.0;SC=TACAACGGAAGAAAAGCCTAA;TC=33;TR=31 GT:GL:GQ 1/1:-335.62,-79.86,-57.15:100 +20 1499276 . TGAGA T . PASS FR=0.5;HP=2;NF=4;NR=2;PP=100.0;SC=TCAAAGTGAATGAGAGAGAGG;TC=23;TR=6 GT:GL:GQ 0/1:-190.39,-128.87,-245.46:100 +20 1500650 . A AG . PASS FR=1.0;HP=1;NF=9;NR=8;PP=100.0;SC=AAGGAGCAGCAGTTCTGAGAG;TC=19;TR=17 GT:GL:GQ 1/1:-187.24,-32.97,-19.25:100 +20 1510246 . CA C . PASS FR=1.0;HP=10;NF=15;NR=6;PP=100.0;SC=AACTCTGTCTCAAAAAAAAAA;TC=29;TR=21 GT:GL:GQ 1/1:-113.89,-25.37,-8.27:100 +20 1510966 . C CTA . PASS FR=1.0;HP=2;NF=10;NR=3;PP=100.0;SC=TTTTATCTCTCTGTGTCATTT;TC=21;TR=13 GT:GL:GQ 1/1:-215.34,-14.55,0.0:100 +20 1512623 . TTGTC T . PASS FR=0.5;HP=1;NF=2;NR=7;PP=100.0;SC=ACTCCATAGATTGTCTGGGTA;TC=27;TR=9 GT:GL:GQ 0/1:-204.17,-64.36,-220.46:100 +20 1516154 . A AAG . PASS FR=0.5;HP=1;NF=9;NR=1;PP=100.0;SC=GTTTTATAAGAAGAGAGAGAG;TC=28;TR=10 GT:GL:GQ 0/1:-197.81,-103.51,-159.44:100 +20 1524117 . G GTGA . PASS FR=1.0;HP=2;NF=12;NR=14;PP=100.0;SC=TGGGATCAGGGTATTCCCTTC;TC=27;TR=26 GT:GL:GQ 1/1:-368.49,-35.51,-15.43:100 +20 1525024 . CT C . PASS FR=0.5;HP=7;NF=3;NR=3;PP=96.0;SC=CCTTCTTTGTCTTTTTTGATC;TC=18;TR=6 GT:GL:GQ 0/1:-53.12,-20.94,-98.55:100 +20 1525853 . G GT . PASS FR=0.5;HP=5;NF=7;NR=4;PP=100.0;SC=CCTGAAGTGTGTTTTCCAACT;TC=29;TR=11 GT:GL:GQ 0/1:-133.05,-52.13,-148.67:100 +20 1597255 . TG T . PASS FR=0.5;HP=2;NF=13;NR=3;PP=100.0;SC=GTAAAAGTACTGGAAGAAAAG;TC=39;TR=16 GT:GL:GQ 0/1:-269.31,-182.14,-334.79:100 +20 1627288 . ATTTGT A . PASS FR=0.5;HP=3;NF=4;NR=2;PP=100.0;SC=ACTTTTTTTCATTTGTTTTGT;TC=20;TR=6 GT:GL:GQ 0/1:-133.15,-70.66,-175.26:100 +20 1629280 . T TAATAAAATAA . PASS FR=0.5;HP=3;NF=1;NR=4;PP=100.0;SC=ACTTAAAGTATAATAAAATAA;TC=18;TR=5 GT:GL:GQ 0/1:-155.63,-27.66,-95.67:100 +20 1648829 . CTTTCTTTTTCTTTTCT C . PASS FR=0.5;HP=6;NF=1;NR=1;PP=74.0;SC=TTCTTTCTTTCTTTCTTTTTC;TC=20;TR=2 GT:GL:GQ 0/1:-191.4,-160.88,-232.59:100 +20 1653387 . T TTTG . PASS FR=0.5;HP=2;NF=2;NR=7;PP=100.0;SC=CGGCCAATCATTTGTTGTTGT;TC=25;TR=9 GT:GL:GQ 0/1:-189.9,-54.75,-106.65:100 +20 1656519 . GT G . PASS FR=0.5;HP=9;NF=4;NR=5;PP=100.0;SC=GAGCTGCACTGTTTTTTTTCT;TC=20;TR=9 GT:GL:GQ 0/1:-62.34,-19.97,-47.7:100 +20 1658890 . ACT A . PASS FR=0.5;HP=2;NF=6;NR=2;PP=100.0;SC=CATGTGATACACTGTGGGCCC;TC=27;TR=8 GT:GL:GQ 0/1:-198.65,-163.08,-324.51:100 +20 1660493 . AT A . PASS FR=0.5;HP=1;NF=6;NR=5;PP=100.0;SC=CATTTGGGAGATGCTATTACC;TC=31;TR=11 GT:GL:GQ 0/1:-160.86,-59.8,-177.36:100 +20 1661355 . TG T . PASS FR=0.5;HP=1;NF=6;NR=7;PP=100.0;SC=GAAAAACACATGATTATCCAT;TC=34;TR=13 GT:GL:GQ 0/1:-171.31,-99.84,-269.81:100 +20 1661478 . G GT . PASS FR=0.5;HP=9;NF=7;NR=5;PP=100.0;SC=ATACTTTCTTGTTTTTTTGGC;TC=35;TR=12 GT:GL:GQ 0/1:-150.06,-61.16,-108.32:100 +20 1661816 . C CA . PASS FR=0.5;HP=1;NF=1;NR=6;PP=100.0;SC=AATTTGCAATCATACAGAAAG;TC=24;TR=7 GT:GL:GQ 0/1:-96.53,-29.07,-136.56:100 +20 1662592 . GATATAACTA G . PASS FR=0.5;HP=1;NF=4;NR=5;PP=100.0;SC=TATGGATATGGATATAACTAA;TC=23;TR=9 GT:GL:GQ 0/1:-238.09,-62.84,-220.35:100 +20 1665050 . A ATG . PASS FR=0.5;HP=2;NF=6;NR=6;PP=100.0;SC=ATACACACATATATATATGTA;TC=34;TR=12 GT:GL:GQ 0/1:-151.91,-67.61,-244.28:100 +20 1667770 . TG T . PASS FR=0.5;HP=6;NF=5;NR=5;PP=100.0;SC=AGGGTTATGATGGGGGGAGAA;TC=29;TR=10 GT:GL:GQ 0/1:-75.51,-17.52,-115.09:100 +20 1674714 . A AT . PASS FR=1.0;HP=6;NF=12;NR=9;PP=100.0;SC=AAGGAGAATCATTTTTTCTTA;TC=26;TR=21 GT:GL:GQ 1/1:-198.16,-29.36,-11.98:100 +20 1679689 . TACACAC TACACACACAC,T . PASS FR=0.5,0.5;HP=3;NF=2,1;NR=0,1;PP=100.0,100.0;SC=TTAGATGCCCTACACACACAC;TC=23;TR=2,2 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 1680048 . G GA . PASS FR=0.5;HP=9;NF=4;NR=9;PP=100.0;SC=GAAAACAACAGAAAAAAAACT;TC=30;TR=13 GT:GL:GQ 0/1:-157.3,-90.19,-130.66:100 +20 1680109 . GA G . PASS FR=0.5;HP=4;NF=9;NR=8;PP=100.0;SC=AACAGCAAGAGAAATTATAAA;TC=32;TR=17 GT:GL:GQ 0/1:-210.03,-97.05,-217.17:100 +20 1682621 . A AT . PASS FR=1.0;HP=3;NF=18;NR=11;PP=100.0;SC=AATATATCATATTACACAGTG;TC=31;TR=29 GT:GL:GQ 1/1:-304.45,-32.07,-10.59:100 +20 1683112 . T TC . PASS FR=1.0;HP=2;NF=6;NR=11;PP=100.0;SC=CAAACCCTCTTCCTATACCAC;TC=23;TR=17 GT:GL:GQ 1/1:-265.19,-181.47,-172.55:74 +20 1683153 . CA C . PASS FR=0.5;HP=2;NF=5;NR=7;PP=100.0;SC=GCAGCAGCTGCAAGAAGTCTC;TC=22;TR=12 GT:GL:GQ 0/1:-291.99,-237.27,-279.09:100 +20 1683250 . ATAGCTCTACCAGT A . PASS FR=0.5;HP=1;NF=5;NR=4;PP=100.0;SC=AGTTCGAATCATAGCTCTACC;TC=22;TR=9 GT:GL:GQ 0/1:-267.9,-88.45,-154.18:100 +20 1683813 . C CT . PASS FR=0.5;HP=6;NF=12;NR=13;PP=100.0;SC=AAGAGAATGTCTTTTTAAAAT;TC=53;TR=25 GT:GL:GQ 0/1:-327.36,-122.23,-224.07:100 +20 1683959 . C CA . PASS FR=0.5;HP=8;NF=4;NR=9;PP=100.0;SC=TCAACAATGACAAAAAAAGCA;TC=24;TR=13 GT:GL:GQ 0/1:-130.55,-27.62,-42.34:66 +20 1684576 . A AATGTATAATAC . PASS FR=0.5;HP=2;NF=5;NR=4;PP=96.0;SC=ATACTGTTTAAATATTTCCTG;TC=24;TR=9 GT:GL:GQ 0/1:-370.23,-353.25,-494.05:100 +20 1688002 . AAAAC A . PASS FR=1.0;HP=3;NF=4;NR=6;PP=100.0;SC=ACTCCCTCTCAAAACAAACAA;TC=22;TR=10 GT:GL:GQ 1/1:-132.2,-18.69,-9.78:74 +20 1690549 . CCT C . PASS FR=0.5;HP=3;NF=6;NR=6;PP=100.0;SC=GAAATCTTCCCCTGTCTGTGA;TC=32;TR=12 GT:GL:GQ 0/1:-184.81,-148.16,-332.53:100 +20 1694183 . CT C . PASS FR=0.5;HP=3;NF=8;NR=5;PP=100.0;SC=TATACAAAGACTTTATAACCA;TC=29;TR=13 GT:GL:GQ 0/1:-144.04,-44.56,-141.78:100 +20 1699510 . T TCCCA . PASS FR=0.5;HP=3;NF=10;NR=2;PP=100.0;SC=AATGTCTCATTCCCACATCCT;TC=19;TR=12 GT:GL:GQ 0/1:-164.23,-17.54,-74.37:100 +20 1701571 . TTAAAATAAAA T . PASS FR=0.5;HP=4;NF=5;NR=2;PP=100.0;SC=CATCTCAAAATTAAAATAAAA;TC=21;TR=7 GT:GL:GQ 0/1:-177.13,-95.66,-194.53:100 +20 1716144 . A AGTGT . PASS FR=0.5;HP=8;NF=3;NR=4;PP=100.0;SC=GGTTTTTTTTAGTGTGTGTGT;TC=23;TR=7 GT:GL:GQ 0/1:-151.21,-52.44,-109.8:100 +20 1719870 . TG T . PASS FR=0.5;HP=1;NF=3;NR=11;PP=100.0;SC=ATCAAACCTCTGTGGGAGAGA;TC=27;TR=14 GT:GL:GQ 0/1:-146.54,-22.92,-111.48:100 +20 1721789 . GT G . PASS FR=0.5;HP=9;NF=6;NR=4;PP=100.0;SC=GCACTTGGGAGTTTTTTTTTC;TC=23;TR=10 GT:GL:GQ 0/1:-60.27,-22.43,-60.17:100 +20 1722316 . CCTTT C . PASS FR=1.0;HP=2;NF=2;NR=1;PP=100.0;SC=TTTCTCTCTTCCTTTCTTTCT;TC=7;TR=3 GT:GL:GQ 1/1:-85.7,-30.24,-25.46:57 +20 1727042 . T TA . PASS FR=1.0;HP=2;NF=10;NR=8;PP=100.0;SC=AATTAAATTATATAGAGGAAG;TC=20;TR=18 GT:GL:GQ 1/1:-223.19,-104.73,-92.26:100 +20 1728298 . G GT . PASS FR=1.0;HP=4;NF=11;NR=14;PP=100.0;SC=AAGAACAGAGGTTTTAAGCAT;TC=28;TR=25 GT:GL:GQ 1/1:-297.24,-94.99,-75.97:100 +20 1730788 . T TGATA . PASS FR=1.0;HP=3;NF=3;NR=6;PP=100.0;SC=AGATGATAAATGATAGATAGA;TC=36;TR=9 GT:GL:GQ 1/1:-190.89,-23.51,-13.12:87 +20 1731625 . CA C . PASS FR=1.0;HP=9;NF=5;NR=8;PP=100.0;SC=GACTCCATCTCAAAAAAAAAG;TC=23;TR=13 GT:GL:GQ 1/1:-93.68,-29.69,-18.4:95 +20 1734082 . AAAAAT A . PASS FR=0.5;HP=4;NF=6;NR=3;PP=100.0;SC=CAATAGCTATAAAAATAAAAT;TC=38;TR=9 GT:GL:GQ 0/1:-124.98,-23.78,-220.83:100 +20 1738324 . T TC . PASS FR=1.0;HP=3;NF=7;NR=10;PP=100.0;SC=ACACTCCTTTTCCTTCATGAT;TC=22;TR=17 GT:GL:GQ 1/1:-213.69,-47.59,-33.85:100 +20 1738519 . A AG . PASS FR=1.0;HP=1;NF=13;NR=11;PP=100.0;SC=CTGTCAAACTAGCCTCTGGCT;TC=29;TR=24 GT:GL:GQ 1/1:-269.52,-42.45,-23.17:100 +20 1741051 . T TAA . PASS FR=1.0;HP=1;NF=12;NR=12;PP=100.0;SC=TAAATATATATGACTATTTTT;TC=35;TR=24 GT:GL:GQ 1/1:-395.96,-52.09,-26.1:100 +20 1745352 . A ACAATAATCACATCAAAGAT . PASS FR=1.0;HP=2;NF=4;NR=8;PP=100.0;SC=CAAGACCATTACACTAATCAC;TC=17;TR=12 GT:GL:GQ 1/1:-425.27,-43.37,-23.58:100 +20 1746606 . GTA G . PASS FR=1.0;HP=2;NF=1;NR=4;PP=100.0;SC=ATATATATGTGTATATATATA;TC=9;TR=5 GT:GL:GQ 1/1:-98.72,-49.48,-45.34:50 +20 1768362 . G GAA . PASS FR=1.0;HP=2;NF=7;NR=14;PP=100.0;SC=TAGAGTGATGGAAGAGACTGG;TC=27;TR=21 GT:GL:GQ 1/1:-269.69,-41.32,-23.11:100 +20 1778684 . A AGTGCTT . PASS FR=0.5;HP=2;NF=1;NR=1;PP=83.0;SC=ATTGCCCTCCATTGGAGGCTG;TC=14;TR=2 GT:GL:GQ 1/0:-256.33,-220.54,-244.27:69 +20 1833292 . TA T . PASS FR=0.5;HP=3;NF=5;NR=5;PP=100.0;SC=ATATTATGTATAATCTCAATT;TC=25;TR=10 GT:GL:GQ 0/1:-147.42,-89.75,-210.06:100 +20 1848829 . CTTTTCT C . PASS FR=1.0;HP=8;NF=6;NR=15;PP=100.0;SC=CTTTTCTTTTCTTTTCTTTTC;TC=25;TR=21 GT:GL:GQ 1/1:-409.42,-172.01,-156.56:100 +20 1848853 . CTT C . PASS FR=0.5;HP=4;NF=3;NR=4;PP=100.0;SC=CTTTCTTTCTCTTTCTTTCTT;TC=26;TR=7 GT:GL:GQ 0/1:-469.4,-397.68,-416.1:83 +20 1848877 . C CTT . PASS FR=0.9999;HP=4;NF=2;NR=1;PP=100.0;SC=TTCTTTCTTTCTCTTTCTTTC;TC=26;TR=3 GT:GL:GQ 1/1:-373.17,-284.63,-280.27:37 +20 1852149 . CCA C . PASS FR=0.5;HP=1;NF=4;NR=1;PP=100.0;SC=CACCCCCTCTCCACACACACA;TC=23;TR=5 GT:GL:GQ 0/1:-139.51,-90.17,-161.53:100 +20 1855569 . AACACAC A . PASS FR=1.0;HP=1;NF=7;NR=3;PP=100.0;SC=GTCACTCTACAACACACACAC;TC=14;TR=10 GT:GL:GQ 1/1:-159.46,-18.21,-11.49:84 +20 1857852 . TC T . PASS FR=1.0;HP=6;NF=4;NR=19;PP=100.0;SC=CCCGTGTCCATCCCCCCTGTA;TC=58;TR=23 GT:GL:GQ 1/1:-667.45,-637.23,-632.11:63 +20 1857976 . G GT . PASS FR=1.0;HP=5;NF=12;NR=1;PP=100.0;SC=GCTTTGTTTTGTCAGTTGTTT;TC=22;TR=13 GT:GL:GQ 1/1:-196.6,-28.45,-14.03:100 +20 1872437 . AT A . PASS FR=0.5;HP=2;NF=2;NR=4;PP=100.0;SC=TCCCTGGCTAATTCCCCCCAC;TC=23;TR=6 GT:GL:GQ 0/1:-111.11,-55.77,-134.66:100 +20 1890990 . CTT C . PASS FR=1.0;HP=5;NF=11;NR=12;PP=100.0;SC=TGTTTCATTACTTTTTAACTT;TC=24;TR=23 GT:GL:GQ 1/1:-245.45,-38.39,-20.54:100 +20 1895466 . T TATAG . PASS FR=1.0;HP=1;NF=11;NR=5;PP=100.0;SC=AGATTAGAATTAGCCCAGCTC;TC=24;TR=16 GT:GL:GQ 1/1:-500.31,-454.72,-448.18:79 +20 1895484 . ACT A . PASS FR=1.0;HP=1;NF=14;NR=4;PP=52.0;SC=CTCAGATGTGACTCTTCCAGA;TC=23;TR=18 GT:GL:GQ 1/1:-454.69,-436.37,-433.13:53 +20 1912065 . AC A . PASS FR=0.5;HP=2;NF=7;NR=8;PP=100.0;SC=TGCCTTCATCACTGTTCCCAT;TC=25;TR=15 GT:GL:GQ 0/1:-166.95,-40.53,-113.76:100 +20 1930288 . TAAG T . PASS FR=0.5;HP=2;NF=9;NR=4;PP=100.0;SC=TATAAGTTGTTAAGAAGAAAA;TC=31;TR=13 GT:GL:GQ 0/1:-196.67,-58.02,-140.92:100 +20 1940722 . GTT G . PASS FR=0.5;HP=2;NF=6;NR=7;PP=100.0;SC=AAAAACCCAGGTTATATATAC;TC=25;TR=13 GT:GL:GQ 0/1:-178.3,-32.72,-93.72:100 +20 1940980 . G GA . PASS FR=0.5;HP=3;NF=5;NR=3;PP=100.0;SC=AACTACTCAGGGGCTGAGATG;TC=20;TR=8 GT:GL:GQ 0/1:-91.81,-43.36,-126.02:100 +20 1941170 . A AC . PASS FR=0.5;HP=1;NF=10;NR=2;PP=100.0;SC=ATACCTGTATAGAAAAAAAGT;TC=31;TR=12 GT:GL:GQ 0/1:-250.35,-208.27,-291.77:100 +20 1943171 . T TG . PASS FR=0.5;HP=7;NF=1;NR=1;PP=56.0;SC=AGGGGAAGCCTGGGGGGGTTG;TC=19;TR=2 GT:GL:GQ 0/1:-65.38,-41.58,-85.08:100 +20 1949783 . C CT . PASS FR=0.5;HP=10;NF=3;NR=4;PP=100.0;SC=GTGCTGAGCCCTTTTTTTTTT;TC=26;TR=7 GT:GL:GQ 0/1:-82.34,-46.95,-63.27:73 +20 1959266 . A ATG . PASS FR=0.5;HP=2;NF=3;NR=4;PP=100.0;SC=CAACCTGAATATGTGTGTGTG;TC=24;TR=7 GT:GL:GQ 0/1:-140.42,-42.47,-66.02:100 +20 1967894 . GATGA G . PASS FR=0.5;HP=2;NF=2;NR=4;PP=100.0;SC=TTGAGTGATTGATGAATGAAT;TC=24;TR=6 GT:GL:GQ 0/1:-113.7,-41.87,-83.28:100 +20 1977448 . A ACACACACACG . PASS FR=0.5;HP=1;NF=1;NR=1;PP=100.0;SC=ACACACACACATAGAAGGCCA;TC=32;TR=2 GT:GL:GQ 0/1:-253.96,-71.96,-163.76:100 +20 1996777 . CT C . PASS FR=0.5;HP=2;NF=4;NR=7;PP=100.0;SC=GTGTTTTAGGCTGTTATTTCA;TC=21;TR=11 GT:GL:GQ 0/1:-127.06,-33.79,-125.68:100 +20 1997708 . CAT C . PASS FR=0.5;HP=2;NF=5;NR=4;PP=100.0;SC=CACACACACACATACAAAATA;TC=31;TR=9 GT:GL:GQ 0/1:-145.15,-85.85,-245.36:100 +20 2004765 . T TG . PASS FR=0.5;HP=1;NF=2;NR=2;PP=76.0;SC=AGGATTTTTCTATCAGTCCAC;TC=12;TR=4 GT:GL:GQ 0/1:-54.31,-25.7,-84.4:100 +20 2034931 . G GTTC . PASS FR=0.5;HP=2;NF=6;NR=4;PP=100.0;SC=AGATAGGTAAGTTCTTCCCCA;TC=24;TR=10 GT:GL:GQ 0/1:-162.21,-52.77,-146.87:100 +20 2035677 . AACACAC AAC,A . PASS FR=0.5,0.5;HP=2;NF=2,3;NR=0,2;PP=39.0,100.0;SC=TTTTATAATAAACACACACAC;TC=29;TR=2,5 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:88 +20 2050099 . AATTG A . PASS FR=0.5;HP=2;NF=10;NR=5;PP=100.0;SC=TCTTATTCTTAATTGATCTAA;TC=35;TR=15 GT:GL:GQ 0/1:-259.54,-91.86,-224.89:100 +20 2052246 . AC A . PASS FR=0.5;HP=1;NF=3;NR=6;PP=100.0;SC=GGTCCCAGCTACTCAGGAGGC;TC=19;TR=9 GT:GL:GQ 0/1:-113.96,-44.77,-115.57:100 +20 2053863 . C CA . PASS FR=0.5;HP=9;NF=3;NR=4;PP=96.0;SC=ACTAAAAATACAAAAAAAATA;TC=16;TR=7 GT:GL:GQ 0/1:-46.07,-13.04,-34.97:98 +20 2054845 . AAAGAGGAAAAAG A . PASS FR=0.5;HP=4;NF=7;NR=1;PP=100.0;SC=AAAAGAGGAAAAAGAGGAAAA;TC=27;TR=8 GT:GL:GQ 0/1:-251.05,-86.54,-294.87:100 +20 2055452 . AAAGG A . PASS FR=0.5;HP=4;NF=4;NR=4;PP=100.0;SC=AAGAAAAGAAAAAGGAAGGAA;TC=27;TR=8 GT:GL:GQ 0/1:-227.92,-152.39,-281.38:100 +20 2077127 . AAC A . PASS FR=0.5;HP=3;NF=1;NR=3;PP=97.0;SC=TCTCTACTAAAACACACACAC;TC=17;TR=4 GT:GL:GQ 0/1:-57.31,-24.65,-94.33:100 +20 2078747 . CCT C . PASS FR=0.5;HP=3;NF=3;NR=2;PP=100.0;SC=AGAAAATTCCCCTGTGGCCCT;TC=15;TR=5 GT:GL:GQ 0/1:-78.54,-32.73,-103.05:100 +20 2120509 . AAAGGT A . PASS FR=0.5;HP=2;NF=8;NR=1;PP=100.0;SC=CTGAAATGAGAAAGGTAAGGA;TC=19;TR=9 GT:GL:GQ 0/1:-189.27,-90.48,-174.84:100 +20 2122413 . CT C . PASS FR=0.5;HP=4;NF=3;NR=8;PP=100.0;SC=GTAACCTACCCTTTTCCACCT;TC=23;TR=11 GT:GL:GQ 0/1:-132.75,-34.8,-69.03:100 +20 2126052 . T TCTATGTGA . PASS FR=0.5;HP=2;NF=3;NR=1;PP=100.0;SC=CATTTCCGTTTCTATGTGACC;TC=22;TR=4 GT:GL:GQ 0/1:-179.74,-76.1,-178.95:100 +20 2131707 . T TGG . PASS FR=0.5;HP=2;NF=7;NR=1;PP=100.0;SC=CCCTGTTGCCTGACCTGAGCC;TC=20;TR=8 GT:GL:GQ 0/1:-145.56,-92.76,-163.87:100 +20 2153043 . C CTTTATTTA . PASS FR=0.5;HP=3;NF=1;NR=2;PP=100.0;SC=GGTGACATCACTTTATTTATT;TC=21;TR=3 GT:GL:GQ 0/1:-97.11,-28.78,-48.32:87 +20 2155932 . C CAT . PASS FR=0.5;HP=7;NF=4;NR=3;PP=100.0;SC=AATTAAAAAACATATATATAT;TC=32;TR=7 GT:GL:GQ 0/1:-176.17,-66.01,-150.43:100 +20 2160585 . AT A . PASS FR=0.5;HP=7;NF=9;NR=11;PP=100.0;SC=GTTTTTAAATATTTTTTAATT;TC=41;TR=20 GT:GL:GQ 0/1:-237.9,-137.73,-264.06:100 +20 2162113 . A ATT . PASS FR=0.5;HP=1;NF=2;NR=4;PP=100.0;SC=TATCAGGAATAATTTTTTTTT;TC=25;TR=6 GT:GL:GQ 0/1:-145.37,-128.61,-213.61:100 +20 2165761 . GTTAT G . PASS FR=0.5;HP=3;NF=4;NR=1;PP=100.0;SC=CTAATAACCTGTTATTTATTT;TC=28;TR=5 GT:GL:GQ 0/1:-79.63,-28.99,-73.78:100 +20 2171122 . CAAACA C . PASS FR=0.5;HP=4;NF=4;NR=1;PP=100.0;SC=AACAAACAGACAAACAAAACA;TC=18;TR=5 GT:GL:GQ 0/1:-113.12,-57.95,-91.54:100 +20 2171346 . TA T . PASS FR=0.5;HP=8;NF=4;NR=5;PP=100.0;SC=AATTTTTTTTTAAAATCCTTA;TC=20;TR=9 GT:GL:GQ 0/1:-174.43,-122.88,-194.49:100 +20 2171402 . T TA . PASS FR=0.5;HP=2;NF=3;NR=1;PP=92.0;SC=TGATTGATCCTAACTTAATGA;TC=23;TR=4 GT:GL:GQ 0/1:-112.12,-79.99,-224.63:100 +20 2198337 . AAG A . PASS FR=0.5;HP=2;NF=17;NR=3;PP=100.0;SC=CAACCAAAGAAAGAATGGGAG;TC=38;TR=20 GT:GL:GQ 0/1:-234.35,-51.22,-161.95:100 +20 2199055 . G GCCACACACTTCTAAA . PASS FR=0.5;HP=2;NF=2;NR=5;PP=100.0;SC=AGGGGGAAGTGCCATCAGATG;TC=20;TR=7 GT:GL:GQ 0/1:-318.25,-129.11,-238.35:100 +20 2199168 . T TG . PASS FR=0.5;HP=9;NF=3;NR=6;PP=100.0;SC=TGAGATTTGGTGGGGGGGACA;TC=37;TR=9 GT:GL:GQ 0/1:-144.44,-70.03,-129.92:100 +20 2209336 . A AGTG . PASS FR=0.5;HP=1;NF=4;NR=1;PP=100.0;SC=GCTGGAGTGCAGTGGTACAAT;TC=18;TR=5 GT:GL:GQ 0/1:-105.48,-46.83,-99.81:100 +20 2215492 . T TA . PASS FR=1.0;HP=1;NF=17;NR=16;PP=100.0;SC=TGGATGAACGTATTTATTTAA;TC=37;TR=33 GT:GL:GQ 1/1:-589.49,-315.53,-293.02:100 +20 2215506 . G GT . PASS FR=1.0;HP=3;NF=18;NR=13;PP=100.0;SC=TATTTAACCAGTTTCTCTTGA;TC=36;TR=31 GT:GL:GQ 1/1:-602.79,-346.63,-325.98:100 +20 2216792 . CAG C . PASS FR=0.5;HP=1;NF=6;NR=7;PP=100.0;SC=TGCGTTCATGCAGTTTATGGG;TC=25;TR=13 GT:GL:GQ 0/1:-181.42,-37.01,-108.03:100 +20 2217535 . CCT C . PASS FR=0.5;HP=1;NF=6;NR=6;PP=100.0;SC=CATTGCATCACCTGCCTCTGA;TC=32;TR=12 GT:GL:GQ 0/1:-224.94,-75.19,-157.78:100 +20 2218702 . CA C . PASS FR=0.5;HP=1;NF=3;NR=5;PP=100.0;SC=AATCACGACTCATTGTAGCCT;TC=18;TR=8 GT:GL:GQ 0/1:-111.7,-55.95,-90.25:100 +20 2221607 . TTTTCTTTCTTTCTTTTTCC T . PASS FR=0.5;HP=4;NF=4;NR=2;PP=100.0;SC=AAAGTTTTCTTTTTCTTTCTT;TC=29;TR=6 GT:GL:GQ 0/1:-196.61,-29.28,-142.76:100 +20 2241427 . AAAAC A . PASS FR=1.0;HP=4;NF=4;NR=3;PP=100.0;SC=CTTGTCTCTAAAAACAAACAA;TC=19;TR=7 GT:GL:GQ 1/1:-166.73,-37.97,-27.83:84 +20 2263098 . TG T . PASS FR=1.0;HP=4;NF=5;NR=5;PP=100.0;SC=TGACGGATGGTGGAGTGAGAA;TC=12;TR=10 GT:GL:GQ 1/1:-115.83,-17.15,-8.29:71 +20 2278675 . A ATGAATGGCACT . PASS FR=1.0;HP=4;NF=8;NR=9;PP=100.0;SC=ACTCTGAAAAATGGTCACAGA;TC=18;TR=17 GT:GL:GQ 1/1:-567.99,-218.0,-199.44:100 +20 2280081 . C CT . PASS FR=1.0;HP=3;NF=15;NR=9;PP=100.0;SC=TAACTTCATGCGGCTCCACCC;TC=30;TR=24 GT:GL:GQ 1/1:-287.69,-60.5,-41.43:100 +20 2280751 . TA T . PASS FR=1.0;HP=10;NF=11;NR=3;PP=100.0;SC=AGACTCCATTTAAAAAAAAAA;TC=22;TR=14 GT:GL:GQ 1/1:-139.24,-88.42,-77.92:88 +20 2280882 . A AAAAG . PASS FR=1.0;HP=6;NF=2;NR=2;PP=100.0;SC=AAGAAAGAAAAAAAGAAAGAA;TC=21;TR=4 GT:GL:GQ 1/1:-160.24,-78.2,-70.5:63 +20 2285898 . AGTCACTG A . PASS FR=1.0;HP=1;NF=9;NR=3;PP=100.0;SC=CCAAGTCTCTAGTCACTGGTT;TC=19;TR=12 GT:GL:GQ 1/1:-272.68,-30.42,-16.26:99 +20 2287002 . TAAG T . PASS FR=1.0;HP=2;NF=12;NR=8;PP=100.0;SC=GAAAAATCTCTAAGAAGGCTC;TC=24;TR=20 GT:GL:GQ 1/1:-245.61,-20.38,-4.14:100 +20 2294297 . A ACT . PASS FR=1.0;HP=2;NF=5;NR=3;PP=100.0;SC=AATCACACACACTCTCTCTCT;TC=24;TR=8 GT:GL:GQ 1/1:-199.54,-41.84,-28.04:100 +20 2297084 . AT A . PASS FR=1.0;HP=2;NF=10;NR=7;PP=100.0;SC=GGTGGCACGCATTAACACCAG;TC=18;TR=17 GT:GL:GQ 1/1:-184.14,-27.34,-14.78:100 +20 2297605 . CT C . PASS FR=0.5;HP=3;NF=4;NR=6;PP=100.0;SC=CAATCATGGCCTTTGGCTTCC;TC=24;TR=10 GT:GL:GQ 0/1:-137.24,-29.13,-84.17:100 +20 2298589 . C CAT,T . PASS FR=0.5,0.5;HP=1;NF=5,2;NR=2,3;PP=100.0,100.0;SC=ATATATATATCATATATATAT;TC=23;TR=7,5 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 2316853 . G GC . PASS FR=1.0;HP=4;NF=3;NR=6;PP=100.0;SC=TCACCCTGTAGCCCCTGTGCC;TC=15;TR=9 GT:GL:GQ 1/1:-147.72,-38.92,-28.94:83 +20 2318317 . GATCACACC G . PASS FR=1.0;HP=2;NF=8;NR=8;PP=100.0;SC=AGTGAGCCGAGATCACACCAC;TC=22;TR=16 GT:GL:GQ 1/1:-356.42,-104.52,-90.96:100 +20 2318716 . AG A . PASS FR=1.0;HP=3;NF=13;NR=4;PP=100.0;SC=CACTCAGAGCAGGGCACCGAT;TC=26;TR=17 GT:GL:GQ 1/1:-256.21,-181.8,-170.54:94 +20 2323655 . A AT . PASS FR=1.0;HP=8;NF=11;NR=9;PP=100.0;SC=AGGAAAAAAAAACACTGATGT;TC=31;TR=20 GT:GL:GQ 1/1:-290.56,-28.0,-5.91:100 +20 2326944 . G GA . PASS FR=1.0;HP=5;NF=6;NR=12;PP=100.0;SC=AGATACAGAGGAAAAATGAAG;TC=25;TR=18 GT:GL:GQ 1/1:-204.47,-32.24,-15.14:100 +20 2329825 . T TC . PASS FR=1.0;HP=1;NF=16;NR=4;PP=100.0;SC=ATATGGGTTGTCTTTGAGACT;TC=22;TR=20 GT:GL:GQ 1/1:-212.37,-32.28,-17.55:100 +20 2334719 . CTAT C . PASS FR=1.0;HP=3;NF=14;NR=16;PP=100.0;SC=TTCCCAGGTTCTATTATGTAG;TC=36;TR=30 GT:GL:GQ 1/1:-368.57,-33.34,-9.9:100 +20 2335944 . C CTG . PASS FR=1.0;HP=4;NF=10;NR=19;PP=100.0;SC=GCTGAGAAAACTATATCCAAA;TC=34;TR=29 GT:GL:GQ 1/1:-370.96,-31.85,-8.29:100 +20 2340299 . TTGTC T . PASS FR=1.0;HP=2;NF=10;NR=15;PP=100.0;SC=ATCCTGTAGGTTGTCTGTTTA;TC=27;TR=25 GT:GL:GQ 1/1:-327.39,-42.17,-22.8:100 +20 2342117 . T TG . PASS FR=1.0;HP=5;NF=14;NR=14;PP=100.0;SC=TGCTTATTTTTTCCACTTAAT;TC=32;TR=28 GT:GL:GQ 1/1:-450.6,-326.69,-308.08:100 +20 2344369 . TAAG T . PASS FR=1.0;HP=2;NF=13;NR=10;PP=100.0;SC=TGAGAGGTGGTAAGAAGAAGA;TC=36;TR=23 GT:GL:GQ 1/1:-351.7,-76.99,-56.29:100 +20 2344451 . G GAGGA . PASS FR=1.0;HP=2;NF=12;NR=3;PP=100.0;SC=ACACCCAACAGAGGAAGGTTA;TC=20;TR=15 GT:GL:GQ 1/1:-372.02,-158.89,-145.61:100 +20 2344539 . T TTTTGTTTG . PASS FR=1.0;HP=3;NF=8;NR=4;PP=100.0;SC=ACTACCCCAGTTTTGTTTGTT;TC=23;TR=12 GT:GL:GQ 1/1:-243.77,-36.7,-24.92:99 +20 2345269 . TCCTGGC T . PASS FR=1.0;HP=2;NF=7;NR=13;PP=100.0;SC=ATCGAGACCATCCTGGCTAAC;TC=21;TR=20 GT:GL:GQ 1/1:-260.12,-24.22,-9.67:100 +20 2346660 . T TAATAAATAAATAAATA . PASS FR=1.0;HP=3;NF=3;NR=4;PP=100.0;SC=CAATTCCTTATAATAAATAAA;TC=13;TR=7 GT:GL:GQ 1/1:-305.93,-18.69,-7.6:93 +20 2352930 . AC A . PASS FR=1.0;HP=2;NF=10;NR=8;PP=100.0;SC=TTTCAGGCCTACCTCTCAAGC;TC=21;TR=18 GT:GL:GQ 1/1:-216.23,-90.38,-78.46:100 +20 2362643 . C CTG . PASS FR=1.0;HP=3;NF=11;NR=8;PP=100.0;SC=AAGAACTTGTCTTAGATGCTG;TC=21;TR=19 GT:GL:GQ 1/1:-259.19,-87.0,-72.75:100 +20 2379170 . TC T . PASS FR=0.5;HP=4;NF=1;NR=3;PP=99.0;SC=AGCTTGGGCTTCCCCACAATA;TC=23;TR=4 GT:GL:GQ 0/1:-84.89,-51.93,-137.5:100 +20 2401510 . ATGT A . PASS FR=0.5;HP=2;NF=2;NR=4;PP=100.0;SC=CATTATATGGATGTACACAGT;TC=23;TR=6 GT:GL:GQ 0/1:-138.83,-80.65,-217.86:100 +20 2406090 . AACT A . PASS FR=0.5;HP=3;NF=8;NR=7;PP=100.0;SC=GTTGCCACAAAACTTCAATTT;TC=36;TR=15 GT:GL:GQ 0/1:-277.31,-158.31,-369.27:100 +20 2407722 . A AT . PASS FR=0.5;HP=9;NF=4;NR=11;PP=100.0;SC=AATTGCTATAATTTTTTTTTC;TC=38;TR=15 GT:GL:GQ 0/1:-112.13,-34.3,-69.71:100 +20 2409340 . C CAATA . PASS FR=0.5;HP=2;NF=4;NR=3;PP=100.0;SC=CATAATAAATCAATCAATAAA;TC=22;TR=7 GT:GL:GQ 0/1:-189.45,-43.56,-132.72:100 +20 2409613 . G GCA . PASS FR=0.5;HP=1;NF=6;NR=4;PP=57.0;SC=GGGATTATAGGCACAACACCA;TC=25;TR=10 GT:GL:GQ 0/1:-231.71,-206.44,-319.84:100 +20 2411731 . CAG C . PASS FR=0.5;HP=1;NF=1;NR=2;PP=36.0;SC=GTGGATGAGCCAGAGAGAAGT;TC=13;TR=3 GT:GL:GQ 0/1:-55.56,-36.89,-120.4:84 +20 2414786 . G GA . PASS FR=1.0;HP=8;NF=8;NR=10;PP=100.0;SC=GAAGCTTTCAGAAAAAAACCC;TC=23;TR=18 GT:GL:GQ 1/1:-173.45,-78.53,-65.46:100 +20 2418166 . GTGTT G . PASS FR=0.5;HP=1;NF=1;NR=4;PP=100.0;SC=CACCTGGCTAGTGTTTGTTTG;TC=21;TR=5 GT:GL:GQ 0/1:-134.79,-72.62,-117.78:100 +20 2425523 . A ATTTATTTTATTTTAT . PASS FR=0.5;HP=7;NF=3;NR=2;PP=100.0;SC=ATTTTATTTTATTTATTTTAT;TC=23;TR=5 GT:GL:GQ 0/1:-149.61,-12.23,-46.02:100 +20 2425934 . T TA . PASS FR=0.5;HP=8;NF=8;NR=4;PP=67.0;SC=TTAATCAATTTAAAAAAAATG;TC=25;TR=12 GT:GL:GQ 0/1:-160.28,-133.72,-162.95:100 +20 2430943 . ATGTG A . PASS FR=0.5;HP=1;NF=1;NR=1;PP=100.0;SC=GTGCGTGTGCATGTGTGTGTG;TC=29;TR=2 GT:GL:GQ 0/1:-164.1,-78.49,-99.2:92 +20 2433931 . TC T . PASS FR=0.5;HP=5;NF=1;NR=1;PP=26.0;SC=CCCTGGAAGCTCCCCTTTGTG;TC=10;TR=2 GT:GL:GQ 0/1:-34.79,-18.58,-53.81:73 +20 2436455 . A AAAAAAG,AAAAAG . PASS FR=0.5,0.5;HP=9;NF=3,3;NR=1,4;PP=50.0,100.0;SC=CTACCAAAAAAAAAAGAAAAG;TC=25;TR=4,7 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 2436835 . A AC . PASS FR=0.5;HP=1;NF=7;NR=8;PP=100.0;SC=ACAATGATGTACATTTTTCAG;TC=37;TR=15 GT:GL:GQ 0/1:-177.52,-36.56,-198.23:100 +20 2448573 . CCT C . PASS FR=0.5;HP=2;NF=6;NR=5;PP=100.0;SC=CCCATGCCACCCTGTTTTAGC;TC=34;TR=11 GT:GL:GQ 0/1:-159.22,-114.6,-320.68:100 +20 2450954 . CA C . PASS FR=0.5;HP=2;NF=1;NR=4;PP=100.0;SC=CAAACTTCCGCAAGTCTGAGC;TC=22;TR=5 GT:GL:GQ 0/1:-106.22,-51.15,-126.38:100 +20 2452700 . TAAAAAAGAA T . PASS FR=0.5;HP=6;NF=4;NR=5;PP=100.0;SC=TTTCTTGGATTAAAAAAGAAA;TC=32;TR=9 GT:GL:GQ 0/1:-216.2,-29.76,-153.35:100 +20 2458350 . G GA . PASS FR=0.5;HP=3;NF=4;NR=6;PP=100.0;SC=CAAGGTGGGAGAATTGCTTGA;TC=27;TR=10 GT:GL:GQ 0/1:-156.97,-38.22,-122.55:100 +20 2477736 . A AT . PASS FR=0.5;HP=10;NF=4;NR=3;PP=100.0;SC=AAAAAAAAAAATTTTACCATC;TC=23;TR=7 GT:GL:GQ 0/1:-89.51,-39.15,-127.81:100 +20 2498012 . GTA G . PASS FR=0.5;HP=2;NF=3;NR=6;PP=100.0;SC=GTATATGTGTGTATATATATA;TC=22;TR=9 GT:GL:GQ 0/1:-140.02,-17.32,-103.73:100 +20 2516178 . GA G . PASS FR=0.5;HP=8;NF=3;NR=5;PP=100.0;SC=GTTTAATTGGGAAAAAAAATA;TC=17;TR=8 GT:GL:GQ 0/1:-52.67,-14.95,-45.28:100 +20 2520604 . T TAGCA . PASS FR=0.5;HP=4;NF=4;NR=3;PP=100.0;SC=CTCCCGCAAATAGCACACAAG;TC=20;TR=7 GT:GL:GQ 0/1:-194.0,-75.16,-105.67:100 +20 2522684 . G GA . PASS FR=0.5;HP=7;NF=5;NR=6;PP=83.0;SC=TTTCTTATTTGAAAAAAACTT;TC=31;TR=11 GT:GL:GQ 0/1:-153.71,-123.52,-187.08:100 +20 2523586 . T TA . PASS FR=1.0;HP=4;NF=11;NR=6;PP=100.0;SC=TTTTTCTTTTTAAAACAAAAT;TC=23;TR=17 GT:GL:GQ 1/1:-179.22,-18.0,-3.45:100 +20 2526468 . GAAGA G . PASS FR=0.5001;HP=2;NF=2;NR=4;PP=100.0;SC=AGAGGAAGAGGAAGAAAGAAA;TC=25;TR=6 GT:GL:GQ 0/1:-210.76,-128.72,-136.62:37 +20 2526552 . A AAG . PASS FR=0.5;HP=6;NF=5;NR=8;PP=100.0;SC=GAAAGAAAGAAAAAAAGAAAG;TC=30;TR=13 GT:GL:GQ 0/1:-215.19,-78.8,-144.35:100 +20 2527129 . G GTTGGGCATAAGCTGTAGATC . PASS FR=0.5;HP=2;NF=3;NR=1;PP=100.0;SC=AACCTGCAGAGTTGGGCATAA;TC=18;TR=4 GT:GL:GQ 0/1:-243.57,-136.91,-199.82:100 +20 2534184 . T TGTTTTGTGTGAC . PASS FR=0.5;HP=1;NF=5;NR=9;PP=100.0;SC=GATACAGGTCTGTTTTTGTCT;TC=31;TR=14 GT:GL:GQ 0/1:-444.44,-61.75,-181.17:100 +20 2546156 . TGG T . PASS FR=0.5;HP=3;NF=4;NR=12;PP=100.0;SC=CCCAAAGTGCTGGGATTACAG;TC=31;TR=16 GT:GL:GQ 0/1:-172.01,-63.37,-146.93:100 +20 2568176 . G GT . PASS FR=1.0;HP=10;NF=12;NR=9;PP=100.0;SC=ATTTGGGAATGTTTTTTTTTA;TC=27;TR=21 GT:GL:GQ 1/1:-116.08,-18.72,-6.68:100 +20 2577356 . A AAT . PASS FR=0.5;HP=6;NF=1;NR=2;PP=100.0;SC=ATCAGAAAAAAATATATATGT;TC=26;TR=3 GT:GL:GQ 0/1:-199.48,-88.19,-98.9:49 +20 2579040 . C CTTTATTTA . PASS FR=0.5;HP=3;NF=1;NR=2;PP=100.0;SC=CTTGCCTCTACTTTATTTATT;TC=16;TR=3 GT:GL:GQ 0/1:-103.59,-10.59,-52.57:100 +20 2586119 . GGA G . PASS FR=0.5;HP=1;NF=2;NR=1;PP=30.0;SC=GCATGTGCATGGAGAGAGAGA;TC=23;TR=3 GT:GL:GQ 0/1:-35.49,-18.23,-170.44:77 +20 2594696 . A AT . PASS FR=0.5;HP=8;NF=2;NR=7;PP=100.0;SC=TTTCTGTCACATTTTTTTTCG;TC=24;TR=9 GT:GL:GQ 0/1:-70.9,-30.05,-77.99:100 +20 2597210 . TAAAG T . PASS FR=0.5;HP=7;NF=2;NR=2;PP=100.0;SC=GAAAGGAAAATAAAGAAGGAG;TC=20;TR=4 GT:GL:GQ 0/1:-85.33,-27.89,-144.98:100 +20 2611781 . A ATATCT . PASS FR=0.5;HP=1;NF=8;NR=8;PP=100.0;SC=ATTATAATTAATATAACAAAC;TC=31;TR=16 GT:GL:GQ 0/1:-408.96,-183.07,-309.58:100 +20 2613623 . T TTTG . PASS FR=0.5;HP=3;NF=2;NR=2;PP=100.0;SC=CTTCCATGGGTTTGTTGTTGT;TC=18;TR=4 GT:GL:GQ 0/1:-165.53,-112.66,-139.53:100 +20 2613971 . TA T . PASS FR=0.5;HP=4;NF=4;NR=7;PP=100.0;SC=CTTGGACACATAAACAGCCCT;TC=27;TR=11 GT:GL:GQ 0/1:-121.36,-29.89,-140.29:100 +20 2614405 . T TGGGTAGG . PASS FR=0.5;HP=3;NF=2;NR=2;PP=52.0;SC=ACTACAGAACTGGGTAGGGGA;TC=30;TR=4 GT:GL:GQ 0/1:-185.89,-156.26,-363.71:100 +20 2616002 . C CT . PASS FR=0.5;HP=4;NF=5;NR=5;PP=100.0;SC=ACCTCCACCTCCCCCTCTCAG;TC=22;TR=10 GT:GL:GQ 0/1:-182.46,-117.29,-171.16:100 +20 2617861 . C CCT . PASS FR=0.5;HP=2;NF=2;NR=5;PP=100.0;SC=ATGGTGAACCCGTCTCTACTA;TC=17;TR=7 GT:GL:GQ 0/1:-111.22,-36.32,-97.76:100 +20 2625967 . TGAG T . PASS FR=0.5;HP=1;NF=2;NR=3;PP=100.0;SC=CTGAGTAGGCTGAGGAGGAGG;TC=15;TR=5 GT:GL:GQ 0/1:-133.1,-85.47,-137.74:100 +20 2627766 . TTTTATTTA T . PASS FR=0.5;HP=3;NF=1;NR=1;PP=86.0;SC=ACTGAATTTATTTTATTTATT;TC=19;TR=2 GT:GL:GQ 0/1:-102.46,-70.95,-132.69:100 +20 2630436 . T TACC . PASS FR=0.5;HP=2;NF=6;NR=5;PP=100.0;SC=ACATGCCAGGTACACCATTGT;TC=23;TR=11 GT:GL:GQ 0/1:-159.47,-31.83,-143.4:100 +20 2634285 . CTG C . PASS FR=0.5;HP=1;NF=3;NR=15;PP=100.0;SC=CTTGTGGGCACTGTAGTGACA;TC=29;TR=18 GT:GL:GQ 0/1:-229.42,-26.07,-86.72:100 +20 2641823 . C CTG . PASS FR=0.5;HP=5;NF=2;NR=2;PP=100.0;SC=ATTGCATTTTCTGTGTGTGTG;TC=21;TR=4 GT:GL:GQ 0/1:-96.78,-48.19,-99.13:100 +20 2643833 . G GAAATGCAAT . PASS FR=0.5;HP=4;NF=9;NR=2;PP=100.0;SC=TGGTATTCCAGAAATGCAATG;TC=31;TR=11 GT:GL:GQ 0/1:-379.88,-109.48,-180.95:100 +20 2650007 . T TACACACACACACACACAC . PASS FR=1.0;HP=1;NF=3;NR=1;PP=100.0;SC=ACCCTTTTCTTACACACACAC;TC=19;TR=4 GT:GL:GQ 1/1:-231.82,-84.82,-75.66:76 +20 2650235 . C CT . PASS FR=1.0;HP=9;NF=12;NR=9;PP=100.0;SC=TTTATTGGGCCTTTTTTTTTG;TC=28;TR=21 GT:GL:GQ 1/1:-325.44,-296.08,-289.77:79 +20 2656886 . AT A . PASS FR=1.0;HP=6;NF=17;NR=6;PP=100.0;SC=ATAAATAATAATTTTTTAAAA;TC=29;TR=23 GT:GL:GQ 1/1:-339.94,-246.4,-231.12:100 +20 2663020 . G GGAA . PASS FR=1.0;HP=1;NF=8;NR=7;PP=100.0;SC=AAGAGGAAGAGGAAGAAGACA;TC=28;TR=15 GT:GL:GQ 1/1:-408.26,-206.61,-189.41:100 +20 2665268 . TA T . PASS FR=1.0;HP=8;NF=2;NR=1;PP=43.0;SC=TATGCAGCCATAAAAAAATGA;TC=4;TR=3 GT:GL:GQ 1/1:-20.74,-4.04,-1.38:43 +20 2665956 . AG A . PASS FR=1.0;HP=1;NF=9;NR=5;PP=100.0;SC=CCCAGGCTATAGTGCAGTGGC;TC=16;TR=14 GT:GL:GQ 1/1:-156.94,-33.67,-23.62:84 +20 2666401 . TA T . PASS FR=0.5;HP=2;NF=8;NR=7;PP=100.0;SC=ACTTTTCTATTAAGAAACGCA;TC=38;TR=15 GT:GL:GQ 0/1:-158.74,-28.32,-160.06:100 +20 2668149 . A ATG . PASS FR=0.5;HP=2;NF=1;NR=2;PP=100.0;SC=ATATATATATATGTGTGTGTG;TC=17;TR=3 GT:GL:GQ 0/1:-54.4,-18.57,-68.0:100 +20 2671350 . GTA G . PASS FR=1.0;HP=2;NF=8;NR=5;PP=100.0;SC=ATATATATGTGTATATATATA;TC=23;TR=13 GT:GL:GQ 1/1:-348.62,-348.37,-348.16:60 +20 2676135 . C CAG . PASS FR=0.5;HP=1;NF=6;NR=2;PP=100.0;SC=TGCTGGGATGCAGAGGGCTTC;TC=17;TR=8 GT:GL:GQ 0/1:-189.45,-108.27,-131.01:100 +20 2678198 . A AAAAG . PASS FR=1.0;HP=10;NF=1;NR=2;PP=100.0;SC=CTCAAAAAAAAAAAGAAAGAA;TC=16;TR=3 GT:GL:GQ 1/1:-113.89,-62.27,-58.08:51 +20 2691794 . AAAT A . PASS FR=1.0;HP=3;NF=2;NR=4;PP=100.0;SC=ACCCTGTCTAAAATAATAATA;TC=12;TR=6 GT:GL:GQ 1/1:-83.97,-10.76,-5.22:69 +20 2713483 . C CAG . PASS FR=0.5;HP=2;NF=7;NR=1;PP=100.0;SC=TTTTTTGAGACGGAATTATAA;TC=28;TR=8 GT:GL:GQ 0/1:-114.91,-36.16,-205.08:100 +20 2717474 . A ACAAAGGTCTC . PASS FR=1.0;HP=2;NF=9;NR=5;PP=100.0;SC=AGTCATAAGGACAAAGGACCC;TC=17;TR=14 GT:GL:GQ 1/1:-343.26,-32.05,-17.5:94 +20 2724519 . AG A . PASS FR=0.5;HP=3;NF=6;NR=7;PP=100.0;SC=CCAGATATTTAGGGTGTCCAT;TC=28;TR=13 GT:GL:GQ 0/1:-149.48,-35.03,-149.61:100 +20 2734607 . C CCCCCTTGGTTTTGAAACTTT . PASS FR=1.0;HP=4;NF=2;NR=4;PP=100.0;SC=TCTGTGGGCACCCCCTTGGGC;TC=12;TR=6 GT:GL:GQ 1/1:-301.3,-108.37,-98.31:100 +20 2742852 . C CCAGCAATCCTCAGT . PASS FR=0.5;HP=1;NF=1;NR=5;PP=100.0;SC=CTCAATAGCACCTGAGGATGA;TC=16;TR=6 GT:GL:GQ 0/1:-233.59,-35.77,-130.91:100 +20 2766949 . C CT . PASS FR=1.0;HP=10;NF=5;NR=10;PP=100.0;SC=ACTTCATTCCCTTTTTTTTTT;TC=28;TR=15 GT:GL:GQ 1/1:-134.68,-37.76,-21.4:100 +20 2782855 . AC A . PASS FR=1.0;HP=4;NF=3;NR=8;PP=100.0;SC=AATCACTTGTACCCCGGGGGC;TC=25;TR=11 GT:GL:GQ 1/1:-262.64,-187.36,-174.92:100 +20 2789088 . AC A . PASS FR=1.0;HP=9;NF=1;NR=4;PP=100.0;SC=CAAAAAAAAAACCAAAAAACA;TC=13;TR=5 GT:GL:GQ 1/1:-119.81,-36.46,-27.82:89 +20 2796485 . C CCTTTT . PASS FR=0.5;HP=4;NF=1;NR=4;PP=100.0;SC=CATCAGGCCCCCTTTTCTCCT;TC=18;TR=5 GT:GL:GQ 0/1:-128.25,-42.55,-123.81:100 +20 2797764 . AG A . PASS FR=1.0;HP=3;NF=1;NR=4;PP=100.0;SC=CTGCCTTGGCAGGGCCCAGAC;TC=14;TR=5 GT:GL:GQ 1/1:-134.46,-67.08,-59.42:63 +20 2834884 . T TAC . PASS FR=0.5;HP=1;NF=2;NR=1;PP=100.0;SC=ACCCCGTCTCTACACACACAC;TC=22;TR=3 GT:GL:GQ 0/1:-64.62,-28.32,-80.82:100 +20 2849974 . AT A . PASS FR=0.5;HP=10;NF=4;NR=6;PP=99.0;SC=TTGGTTTGCAATTTTTTTTTT;TC=36;TR=10 GT:GL:GQ 0/1:-66.95,-34.01,-107.66:100 +20 2850721 . ACT A . PASS FR=0.5;HP=1;NF=4;NR=4;PP=100.0;SC=CCAGTGAAAGACTCTTGGGGT;TC=17;TR=8 GT:GL:GQ 0/1:-88.06,-17.99,-74.67:100 +20 2858849 . GT G . PASS FR=0.5;HP=8;NF=1;NR=5;PP=52.0;SC=GACAGCTGTAGTTTTTTTTAA;TC=15;TR=6 GT:GL:GQ 0/1:-33.96,-11.94,-50.39:98 +20 2867547 . AT A . PASS FR=0.5;HP=6;NF=5;NR=6;PP=100.0;SC=AAATAAAAAAATGTAGTATCT;TC=32;TR=11 GT:GL:GQ 0/1:-115.49,-28.1,-161.94:100 +20 2880787 . C CCT . PASS FR=0.5;HP=1;NF=4;NR=5;PP=100.0;SC=GAAAAATCTGCCTCCTTTTTT;TC=27;TR=9 GT:GL:GQ 0/1:-140.77,-68.5,-172.28:100 +20 2890657 . C CAT . PASS FR=0.5003;HP=1;NF=2;NR=1;PP=100.0;SC=TATCATATATCATATATAATC;TC=5;TR=3 GT:GL:GQ 0/1:-44.82,-3.47,-10.33:32 +20 2890805 . CAT C . PASS FR=0.5017;HP=1;NF=1;NR=6;PP=100.0;SC=TACTATACGTCATATATAATA;TC=9;TR=7 GT:GL:GQ 0/1:-87.98,-14.06,-19.03:24 +20 2894312 . CTTATT C . PASS FR=0.5;HP=4;NF=3;NR=5;PP=100.0;SC=GTGCTGTGTTCTTATTTTATC;TC=22;TR=8 GT:GL:GQ 0/1:-141.94,-29.98,-159.98:100 +20 2896142 . T TTATC . PASS FR=1.0;HP=2;NF=9;NR=10;PP=100.0;SC=TAAGAGTTCTTTATTCTGATA;TC=30;TR=19 GT:GL:GQ 1/1:-399.17,-94.52,-74.73:100 +20 2912364 . T TTG . PASS FR=0.5004;HP=1;NF=1;NR=1;PP=75.0;SC=GGGTCTTGGCTTGTGTGTGTG;TC=20;TR=2 GT:GL:GQ 0/1:-121.99,-92.59,-99.11:31 +20 2926228 . GGTGTGTGT G . PASS FR=0.5;HP=1;NF=1;NR=9;PP=100.0;SC=ATAATTGGCAGGTGTGTGTGT;TC=27;TR=10 GT:GL:GQ 0/1:-233.62,-33.54,-77.33:100 +20 2937307 . AAAATAAAT A . PASS FR=0.5;HP=4;NF=3;NR=3;PP=100.0;SC=TCAGTAAATAAAAATAAATAA;TC=17;TR=6 GT:GL:GQ 0/1:-165.86,-12.93,-101.78:100 +20 2950624 . T TAATA,TAATAAATAAATA . PASS FR=0.5,0.5;HP=5;NF=5,2;NR=2,2;PP=100.0,100.0;SC=TCTAAATAAATAATAAATAAA;TC=24;TR=7,4 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 2966530 . CTTGTTTGT CTTGT,C . PASS FR=0.5,0.5;HP=2;NF=1,1;NR=2,1;PP=100.0,27.0;SC=CAGCTGTCTCCTTGTTTGTTT;TC=22;TR=3,2 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:80 +20 2973326 . T TTTAGGGTTTTTC . PASS FR=0.5;HP=4;NF=1;NR=5;PP=100.0;SC=CATATCCAAATATTACGATTC;TC=15;TR=6 GT:GL:GQ 0/0:-275.74,-159.4,-213.4:3 +20 2977781 . CATAT C . PASS FR=0.5;HP=5;NF=3;NR=6;PP=100.0;SC=TGTGAGAAAACATATGTGGGA;TC=26;TR=9 GT:GL:GQ 0/1:-131.98,-30.22,-206.04:100 +20 2979576 . T TTATTA . PASS FR=0.5;HP=2;NF=2;NR=5;PP=100.0;SC=TATTTATAATTTATTATATAT;TC=21;TR=7 GT:GL:GQ 0/1:-148.89,-17.32,-97.42:100 +20 2982245 . CT C . PASS FR=0.5;HP=3;NF=8;NR=4;PP=100.0;SC=CTGTGGAAATCTTATGTGAAG;TC=27;TR=12 GT:GL:GQ 0/1:-126.56,-21.8,-132.46:100 +20 2982823 . CA C . PASS FR=1.0;HP=7;NF=10;NR=9;PP=100.0;SC=TTCCATCTGACAAAAAATTGG;TC=21;TR=19 GT:GL:GQ 1/1:-196.74,-95.2,-82.42:100 +20 2989926 . AT A . PASS FR=0.5;HP=10;NF=2;NR=5;PP=29.0;SC=GAGTTGTGTGATTTTTTTTTT;TC=36;TR=7 GT:GL:GQ 0/1:-66.0,-49.11,-118.97:76 +20 3005541 . TC T . PASS FR=0.5;HP=5;NF=7;NR=7;PP=100.0;SC=AGCAGTTTTTTCTGTAAGAGC;TC=32;TR=14 GT:GL:GQ 0/1:-167.85,-53.03,-186.47:100 +20 3007694 . A AGGT . PASS FR=0.5;HP=3;NF=4;NR=5;PP=100.0;SC=CCAGGGCCTGAGGTGGGAGCA;TC=22;TR=9 GT:GL:GQ 0/1:-162.22,-42.91,-117.4:100 +20 3012419 . C CTGTT . PASS FR=0.5;HP=2;NF=5;NR=3;PP=100.0;SC=CCTCCTTACTCTGTGTGTTTT;TC=26;TR=8 GT:GL:GQ 0/1:-154.4,-24.26,-143.38:100 +20 3022136 . GAATT G . PASS FR=0.5;HP=7;NF=8;NR=1;PP=100.0;SC=AAAAGAAAAAGAATTAATTAA;TC=20;TR=9 GT:GL:GQ 1/0:-190.17,-78.0,-90.9:100 +20 3039218 . GT G . PASS FR=1.0;HP=5;NF=12;NR=13;PP=100.0;SC=TGTTGTTGTTGTTTGTTTGTT;TC=29;TR=25 GT:GL:GQ 1/1:-226.7,-48.88,-31.11:100 +20 3042034 . T TA . PASS FR=1.0;HP=10;NF=5;NR=14;PP=100.0;SC=AAGACACTGATAAAAAAAAAT;TC=25;TR=19 GT:GL:GQ 1/1:-125.74,-31.3,-15.65:100 +20 3047853 . A ATTCCCCCATT . PASS FR=0.5;HP=2;NF=6;NR=1;PP=100.0;SC=ACTCCCTCTCATTCCCCCATT;TC=20;TR=7 GT:GL:GQ 0/1:-258.31,-36.83,-99.91:100 +20 3050529 . A AT . PASS FR=0.5;HP=10;NF=4;NR=1;PP=23.0;SC=GCAAAAAAAAAAATTTTTATT;TC=22;TR=5 GT:GL:GQ 0/1:-257.11,-262.46,-292.84:73 +20 3050531 . A ATTT,T . PASS FR=0.5,0.5;HP=10;NF=3,13;NR=0,6;PP=97.0,100.0;SC=AAAAAAAAAAATTTTTATTTT;TC=22;TR=3,19 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 3051123 . A AT . PASS FR=0.5;HP=6;NF=2;NR=1;PP=69.0;SC=TCAAGAAAAAAATATATATAT;TC=17;TR=3 GT:GL:GQ 0/1:-107.95,-81.12,-160.4:100 +20 3058938 . C CTT . PASS FR=1.0;HP=2;NF=19;NR=9;PP=100.0;SC=ACTGGATACTCTGAACTCCTA;TC=30;TR=28 GT:GL:GQ 1/1:-404.4,-115.7,-94.26:100 +20 3060201 . C CAAT . PASS FR=0.5;HP=4;NF=13;NR=9;PP=100.0;SC=ACAAAGTCAACAATAATTCAT;TC=44;TR=22 GT:GL:GQ 0/1:-325.42,-43.13,-189.79:100 +20 3062903 . T TC . PASS FR=0.5;HP=3;NF=1;NR=5;PP=94.0;SC=TCCAGGCCTTTCCCTCTCTGC;TC=19;TR=6 GT:GL:GQ 0/1:-95.35,-62.58,-147.62:100 +20 3072606 . A AAGG . PASS FR=1.0;HP=5;NF=4;NR=4;PP=100.0;SC=CCAAGTAAAAAAGGGCGGGGG;TC=22;TR=8 GT:GL:GQ 1/1:-220.94,-78.12,-65.62:100 +20 3126086 . CCT TCT,C . PASS FR=0.5,0.5;HP=7;NF=1,1;NR=3,1;PP=8.0,36.0;SC=GCCTTTTTTTCCTTTTTTTTT;TC=19;TR=4,2 GT:GL:GQ 2/1:-1.0,-1.0,-1.0:42 +20 3159346 . C CA . PASS FR=1.0;HP=2;NF=3;NR=12;PP=100.0;SC=GCTGGGACTACGGCATTTACT;TC=15;TR=15 GT:GL:GQ 1/1:-149.15,-11.32,-0.92:87 +20 3161722 . C CAGAT,CAGATAGAT . PASS FR=0.5,0.5;HP=2;NF=2,1;NR=2,2;PP=35.0,42.0;SC=GATAGATAGACAGATAGATAG;TC=18;TR=4,3 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:99 +20 3161783 . CTA C . PASS FR=1.0;HP=2;NF=9;NR=7;PP=100.0;SC=TTTTATATATCTATATATATA;TC=25;TR=16 GT:GL:GQ 1/1:-263.89,-139.12,-127.54:97 +20 3162560 . CAT C . PASS FR=0.5369;HP=2;NF=1;NR=3;PP=100.0;SC=CACACACACACATGGTCCATG;TC=6;TR=4 GT:GL:GQ 0/1:-84.99,-50.52,-52.5:11 +20 3169476 . T TTTG . PASS FR=0.5;HP=3;NF=5;NR=9;PP=100.0;SC=AATGTTTACTTTTAATAAACT;TC=35;TR=14 GT:GL:GQ 0/1:-273.66,-64.07,-202.46:100 +20 3169541 . A AT . PASS FR=0.5;HP=7;NF=5;NR=9;PP=100.0;SC=AGGATCATAGATTTTTTTCCT;TC=23;TR=14 GT:GL:GQ 0/1:-204.2,-123.3,-145.94:100 +20 3172618 . GACAC G . PASS FR=0.7893;HP=1;NF=3;NR=1;PP=100.0;SC=TTGCTCCCCTGACACACACAC;TC=16;TR=4 GT:GL:GQ 1/1:-154.29,-100.95,-101.25:3 +20 3172771 . C CAT . PASS FR=1.0;HP=1;NF=13;NR=6;PP=100.0;SC=CCGAGACACACGAGTGGTAAT;TC=24;TR=19 GT:GL:GQ 1/1:-267.07,-44.87,-28.98:100 +20 3177159 . T TA . PASS FR=1.0;HP=5;NF=6;NR=3;PP=87.0;SC=CTGTCTCCACTAAAAATACAA;TC=15;TR=9 GT:GL:GQ 1/1:-169.92,-142.98,-139.57:56 +20 3177517 . C CAT . PASS FR=1.0;HP=2;NF=15;NR=10;PP=100.0;SC=TAATAAATAACGTTACTGGAT;TC=26;TR=25 GT:GL:GQ 1/1:-294.64,-37.59,-18.88:100 +20 3188342 . A AAACAACAACAACAAC . PASS FR=0.5;HP=3;NF=2;NR=2;PP=100.0;SC=CTCCATCTCAAAACAACAACA;TC=17;TR=4 GT:GL:GQ 0/1:-131.35,-46.51,-82.74:100 +20 3192138 . T TTTTGTTTGTTTG . PASS FR=0.5;HP=3;NF=3;NR=1;PP=99.0;SC=TTTTGTTTTGTTTTGTTTGTT;TC=17;TR=4 GT:GL:GQ 0/1:-79.23,-33.31,-124.52:100 +20 3192798 . C CAG . PASS FR=0.5;HP=2;NF=2;NR=6;PP=100.0;SC=GCCTGGGTGACAGAGAGAGAG;TC=20;TR=8 GT:GL:GQ 0/1:-108.84,-41.85,-123.5:100 +20 3198551 . G GTT . PASS FR=0.5;HP=2;NF=1;NR=2;PP=63.0;SC=AGTTTTTGTGGGTTTTTTTTT;TC=22;TR=3 GT:GL:GQ 0/1:-111.88,-112.41,-193.71:91 +20 3202220 . GTGGC G . PASS FR=0.5;HP=2;NF=2;NR=5;PP=100.0;SC=TGTCCCGGGTGTGGCTGGCGA;TC=19;TR=7 GT:GL:GQ 0/1:-150.53,-63.82,-136.14:100 +20 3276659 . CT C . PASS FR=1.0;HP=3;NF=5;NR=6;PP=100.0;SC=ACATCGGGAACTTTCGGTTTC;TC=16;TR=11 GT:GL:GQ 1/1:-135.26,-24.21,-14.73:79 +20 3290980 . A AAAAG . PASS FR=0.9998;HP=4;NF=1;NR=1;PP=30.0;SC=AAGAGAAAGAAAAAGAAAGAA;TC=7;TR=2 GT:GL:GQ 1/1:-37.89,-18.65,-17.26:34 +20 3313547 . G GGTGT . PASS FR=1.0;HP=1;NF=1;NR=3;PP=100.0;SC=GTGTGCGTGTGGTGTGTGTGT;TC=20;TR=4 GT:GL:GQ 1/1:-194.22,-148.74,-144.19:56 +20 3314333 . G GT . PASS FR=1.0;HP=10;NF=9;NR=9;PP=100.0;SC=CTTATTAAAGGTTTTTTTTTT;TC=34;TR=18 GT:GL:GQ 1/1:-126.24,-28.85,-19.8:75 +20 3317061 . G GT . PASS FR=1.0;HP=10;NF=5;NR=7;PP=100.0;SC=GTTTTGTTCAGTTTTTTTTTT;TC=20;TR=12 GT:GL:GQ 1/1:-81.13,-22.72,-13.12:80 +20 3318622 . TATAAAATATATAATAC T . PASS FR=0.5;HP=2;NF=3;NR=5;PP=100.0;SC=ATATATAATATATAAAATATA;TC=21;TR=8 GT:GL:GQ 1/0:-309.41,-50.93,-55.49:45 +20 3320964 . AGTTT A . PASS FR=1.0;HP=1;NF=6;NR=12;PP=100.0;SC=AATCATACCTAGTTTGTACTA;TC=22;TR=18 GT:GL:GQ 1/1:-403.07,-167.86,-153.33:100 +20 3320971 . A AC . PASS FR=1.0;HP=1;NF=6;NR=13;PP=100.0;SC=CCTAGTTTGTACTATAAAAAA;TC=19;TR=19 GT:GL:GQ 1/1:-403.07,-261.66,-248.63:100 +20 3323678 . AT A . PASS FR=1.0;HP=5;NF=3;NR=1;PP=100.0;SC=TCTGATGATTATTTCTATTGC;TC=28;TR=4 GT:GL:GQ 1/1:-575.25,-570.95,-570.67:100 +20 3323683 . T TAAA . PASS FR=1.0;HP=1;NF=13;NR=11;PP=100.0;SC=TGATTATTTCTATTGCTGTGC;TC=29;TR=24 GT:GL:GQ 1/1:-597.36,-560.99,-550.34:86 +20 3323709 . T TA . PASS FR=1.0;HP=2;NF=16;NR=21;PP=100.0;SC=CATGTTCATTTGTTAGGTCCC;TC=38;TR=37 GT:GL:GQ 1/1:-694.83,-570.91,-558.14:100 +20 3325237 . TACACACAC T . PASS FR=1.0;HP=2;NF=4;NR=2;PP=100.0;SC=TACACACACATACACACACAC;TC=33;TR=6 GT:GL:GQ 1/1:-276.44,-185.04,-177.42:63 +20 3332481 . TTTTA T . PASS FR=1.0;HP=3;NF=7;NR=10;PP=100.0;SC=GTTTGTGTTATTTTATTTATT;TC=28;TR=17 GT:GL:GQ 1/1:-276.75,-43.8,-27.83:100 +20 3333166 . TCA T . PASS FR=1.0;HP=1;NF=9;NR=10;PP=100.0;SC=TGGCTGTCATTCACATTCCAG;TC=22;TR=19 GT:GL:GQ 1/1:-222.99,-23.7,-9.78:100 +20 3333493 . T TTA . PASS FR=1.0;HP=2;NF=6;NR=7;PP=100.0;SC=TTCAAAATATTTATATATATA;TC=27;TR=13 GT:GL:GQ 1/1:-272.96,-96.81,-86.7:65 +20 3336192 . G GC . PASS FR=1.0;HP=2;NF=5;NR=10;PP=100.0;SC=CTGCACTCCAGCCTGGGTGAC;TC=18;TR=15 GT:GL:GQ 1/1:-163.64,-31.05,-19.12:100 +20 3338276 . G GCTTAT . PASS FR=1.0;HP=1;NF=8;NR=10;PP=100.0;SC=CACCCATCCAGCTTTATCTTT;TC=23;TR=18 GT:GL:GQ 1/1:-329.33,-26.75,-8.74:100 +20 3345587 . C CT . PASS FR=1.0;HP=6;NF=1;NR=10;PP=100.0;SC=CCTTCTTTTCCTTTTTTCTTT;TC=27;TR=11 GT:GL:GQ 1/1:-267.74,-155.91,-141.96:100 +20 3346020 . TTTTATTTA T . PASS FR=1.0;HP=3;NF=7;NR=6;PP=100.0;SC=TTTGATAACATTTTATTTATT;TC=29;TR=13 GT:GL:GQ 1/1:-347.46,-36.68,-23.65:100 +20 3349612 . T TA . PASS FR=1.0;HP=2;NF=8;NR=3;PP=100.0;SC=ACCCCATTTCTCTAAAAATAC;TC=11;TR=11 GT:GL:GQ 1/1:-135.85,-60.43,-52.97:61 +20 3377965 . G GTTTTGTT . PASS FR=1.0;HP=8;NF=3;NR=2;PP=100.0;SC=TTTTTGTTTTGTTTTGTTTTT;TC=16;TR=5 GT:GL:GQ 1/1:-157.49,-62.9,-56.59:79 +20 3378366 . TG T . PASS FR=1.0;HP=10;NF=6;NR=4;PP=100.0;SC=AGATTTTTTTTGGGGGGGGGG;TC=22;TR=10 GT:GL:GQ 1/1:-84.99,-30.32,-19.67:66 +20 3382249 . T TA . PASS FR=1.0;HP=2;NF=7;NR=9;PP=100.0;SC=AATTATTATCTTTCATTCAAT;TC=19;TR=16 GT:GL:GQ 1/1:-178.1,-44.13,-31.76:100 +20 3382515 . TC T . PASS FR=1.0;HP=6;NF=2;NR=10;PP=100.0;SC=TGGGGAGGGCTCCCCCGCCCC;TC=19;TR=12 GT:GL:GQ 1/1:-132.42,-42.62,-32.12:88 +20 3398847 . T TAC . PASS FR=0.5;HP=2;NF=2;NR=1;PP=82.0;SC=AATAACAACATACACACACAC;TC=26;TR=3 GT:GL:GQ 0/1:-87.09,-56.01,-103.69:100 +20 3418279 . TACACACACAC T . PASS FR=0.5;HP=3;NF=2;NR=1;PP=100.0;SC=CACACGAGGGTACACACACAC;TC=17;TR=3 GT:GL:GQ 0/1:-117.7,-66.19,-77.13:50 +20 3419562 . TACAC T . PASS FR=0.5;HP=2;NF=2;NR=2;PP=100.0;SC=TCAAAATACATACACACACAC;TC=29;TR=4 GT:GL:GQ 0/1:-141.17,-79.46,-166.16:100 +20 3426771 . T TC . PASS FR=1.0;HP=1;NF=13;NR=10;PP=100.0;SC=TTGCAGAAACTGACAAAATAG;TC=25;TR=23 GT:GL:GQ 1/1:-297.92,-207.29,-192.68:100 +20 3439128 . AT A . PASS FR=1.0;HP=4;NF=4;NR=3;PP=100.0;SC=TGTCTCAAAAATATATATATA;TC=13;TR=7 GT:GL:GQ 1/1:-127.06,-48.08,-43.43:57 +20 3439712 . CATTTATTTATTT CATTTATTT,C . PASS FR=0.5,0.5;HP=1;NF=2,5;NR=1,1;PP=100.0,100.0;SC=AACATAAAATCATTTATTTAT;TC=23;TR=3,6 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 3441674 . G GA . PASS FR=0.5;HP=7;NF=13;NR=3;PP=100.0;SC=TTCTTATTAGGAAAAAAACCA;TC=23;TR=16 GT:GL:GQ 0/1:-122.74,-20.86,-35.93:68 +20 3456629 . CA C . PASS FR=0.5;HP=8;NF=3;NR=5;PP=100.0;SC=TCCTCACTACCAAAAAAAAGA;TC=22;TR=8 GT:GL:GQ 0/1:-62.73,-25.03,-67.91:100 +20 3462307 . A ATTC . PASS FR=0.5;HP=2;NF=7;NR=2;PP=100.0;SC=TAAATTTTTAATTAAGTTTTC;TC=17;TR=9 GT:GL:GQ 0/1:-213.54,-117.72,-169.88:100 +20 3465413 . G GTTA . PASS FR=0.5;HP=3;NF=4;NR=7;PP=100.0;SC=TATATTTCCAGTTTAGGTCTC;TC=32;TR=11 GT:GL:GQ 0/1:-171.48,-39.39,-198.21:100 +20 3465556 . AATT A . PASS FR=0.5;HP=3;NF=3;NR=3;PP=100.0;SC=TGGATTTTAAAATTATTATTA;TC=23;TR=6 GT:GL:GQ 0/1:-128.2,-26.49,-64.94:100 +20 3467027 . TTTTCC T . PASS FR=0.5;HP=3;NF=3;NR=10;PP=100.0;SC=GTTGTTTTTCTTTTCCTTTTT;TC=35;TR=13 GT:GL:GQ 0/1:-205.57,-36.22,-212.27:100 +20 3468732 . AT A . PASS FR=0.5;HP=1;NF=7;NR=3;PP=100.0;SC=GTTGGCTAACATGTTCCCTGC;TC=24;TR=10 GT:GL:GQ 0/1:-129.57,-23.07,-107.21:100 +20 3472426 . T TA . PASS FR=0.5;HP=1;NF=4;NR=5;PP=100.0;SC=CCCCAAAACTTATCTAAGTAT;TC=30;TR=9 GT:GL:GQ 0/1:-164.9,-36.91,-163.8:100 +20 3473769 . TTGTGTGTGTG TTGTGTGTG,T . PASS FR=0.5,0.5;HP=2;NF=3,2;NR=1,0;PP=100.0,100.0;SC=GTACGTTTGTTTGTGTGTGTG;TC=10;TR=4,2 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 3489906 . C CAG . PASS FR=0.5;HP=3;NF=7;NR=5;PP=100.0;SC=TGTAATGAGTCAAATATTGAA;TC=30;TR=12 GT:GL:GQ 0/1:-218.47,-143.39,-285.84:100 +20 3495915 . T TG . PASS FR=0.5;HP=1;NF=8;NR=2;PP=100.0;SC=GTGTTACCATTCTAGAGATGA;TC=24;TR=10 GT:GL:GQ 0/1:-170.31,-150.44,-250.52:100 +20 3509359 . CTAAAA C . PASS FR=0.5;HP=1;NF=7;NR=9;PP=100.0;SC=CCCCTTGAACCTAAAATAAAA;TC=36;TR=16 GT:GL:GQ 0/1:-259.32,-75.45,-201.38:100 +20 3516100 . GA G . PASS FR=0.5;HP=2;NF=4;NR=5;PP=100.0;SC=AACATTACTTGATAACCTTTC;TC=24;TR=9 GT:GL:GQ 0/1:-89.87,-17.09,-134.48:100 +20 3517232 . T TA . PASS FR=0.5;HP=4;NF=5;NR=10;PP=100.0;SC=TTTATTCATTTAAAAGCAACA;TC=33;TR=15 GT:GL:GQ 0/1:-148.46,-23.56,-134.17:100 +20 3518135 . TTG T . PASS FR=0.5;HP=1;NF=2;NR=7;PP=100.0;SC=TATTTTTTTCTTGTTTTTTTT;TC=24;TR=9 GT:GL:GQ 0/1:-164.48,-76.63,-118.93:100 +20 3520111 . TGAGAAACAGAAA T . PASS FR=0.5;HP=1;NF=6;NR=4;PP=100.0;SC=GTCAAATACTTGAGAAACAGA;TC=30;TR=10 GT:GL:GQ 0/1:-291.42,-56.72,-205.51:100 +20 3533082 . C CTA . PASS FR=0.5;HP=6;NF=5;NR=7;PP=100.0;SC=CCAGATGTCCCCCCCAGTTAA;TC=28;TR=12 GT:GL:GQ 0/1:-172.54,-164.36,-281.23:100 +20 3536203 . CA C . PASS FR=0.5;HP=5;NF=5;NR=1;PP=100.0;SC=TGGTAGACCACAAAACAAAAT;TC=20;TR=6 GT:GL:GQ 0/1:-93.07,-22.5,-78.34:100 +20 3549166 . A AT . PASS FR=0.5;HP=7;NF=6;NR=5;PP=100.0;SC=ACTCAAAAAAAATATATTTCA;TC=27;TR=11 GT:GL:GQ 0/1:-132.66,-26.81,-119.92:100 +20 3550790 . AT A . PASS FR=0.5;HP=10;NF=9;NR=3;PP=100.0;SC=AATTGTCTCAATTTTTTTTTT;TC=36;TR=12 GT:GL:GQ 0/1:-95.8,-54.46,-109.39:100 +20 3554405 . TTTTA T . PASS FR=0.5;HP=3;NF=5;NR=3;PP=100.0;SC=TTTTATTTTATTTTATTTATT;TC=28;TR=8 GT:GL:GQ 0/1:-169.52,-76.02,-126.65:100 +20 3557342 . G GTCTATCTATCTATCTATCTA,GTCTGTCTGTCTATCTA . PASS FR=0.5,0.5;HP=2;NF=0,1;NR=2,1;PP=100.0,100.0;SC=CTGTCTGTCTGTCTATCTATC;TC=14;TR=2,2 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 3577359 . AACTTT A . PASS FR=0.5;HP=3;NF=8;NR=4;PP=100.0;SC=GTTCTCTTAAAACTTTACTTT;TC=28;TR=12 GT:GL:GQ 0/1:-187.21,-26.31,-190.0:100 +20 3587084 . A ACT . PASS FR=0.5;HP=2;NF=5;NR=2;PP=100.0;SC=TTCTCTCTTCACTGTTTCCTG;TC=27;TR=7 GT:GL:GQ 0/1:-175.39,-93.87,-225.08:100 +20 3587106 . TGTG T . PASS FR=0.5;HP=1;NF=4;NR=3;PP=100.0;SC=ATGTGGGACTTGTGGTGCCAC;TC=26;TR=7 GT:GL:GQ 0/1:-197.29,-142.58,-281.02:100 +20 3597598 . AT A . PASS FR=0.5;HP=5;NF=5;NR=7;PP=29.0;SC=CAAGGATCGCATTTTTATCCC;TC=39;TR=12 GT:GL:GQ 0/1:-225.54,-208.64,-370.51:76 +20 3599489 . G GGTT . PASS FR=0.5;HP=1;NF=6;NR=4;PP=100.0;SC=TGGTGGTGGTGGTTTTGTTTC;TC=28;TR=10 GT:GL:GQ 0/1:-173.69,-38.78,-110.57:100 +20 3601166 . T TAC . PASS FR=0.5;HP=1;NF=1;NR=5;PP=100.0;SC=GTACTGGGATTAGGCGTGAGC;TC=23;TR=6 GT:GL:GQ 0/1:-99.56,-38.65,-114.14:100 +20 3607044 . TAAAAA T . PASS FR=0.5;HP=5;NF=6;NR=1;PP=100.0;SC=TTTTCTCTCTTAAAAAGAAAA;TC=23;TR=7 GT:GL:GQ 0/1:-96.17,-24.47,-167.72:100 +20 3608928 . A AAG . PASS FR=0.5;HP=2;NF=6;NR=2;PP=100.0;SC=GAAAACTAGAAAGAAACTTCT;TC=32;TR=8 GT:GL:GQ 0/1:-96.19,-24.02,-201.47:100 +20 3610589 . G GT . PASS FR=0.5;HP=7;NF=7;NR=8;PP=100.0;SC=ATCATTCTGAGTTTTTTTATT;TC=36;TR=15 GT:GL:GQ 0/1:-148.28,-61.67,-123.51:100 +20 3612124 . A AC . PASS FR=0.5;HP=1;NF=5;NR=1;PP=100.0;SC=GTCTGTTGAGACTGTGTCCTA;TC=17;TR=6 GT:GL:GQ 0/1:-86.01,-27.19,-97.39:100 +20 3627840 . C CA . PASS FR=0.5;HP=6;NF=4;NR=7;PP=100.0;SC=CTCAACTGTGCAAAAAACAAA;TC=27;TR=11 GT:GL:GQ 0/1:-99.01,-25.59,-91.79:100 +20 3627925 . A ATTAAC . PASS FR=0.5;HP=2;NF=2;NR=9;PP=100.0;SC=AGTCAGATGAATTGTTTTCAT;TC=29;TR=11 GT:GL:GQ 0/1:-210.42,-38.37,-176.36:100 +20 3635158 . A AT . PASS FR=0.5;HP=2;NF=8;NR=5;PP=100.0;SC=CAAGAAAGCCATAGACCGGAA;TC=23;TR=13 GT:GL:GQ 0/1:-191.76,-111.36,-148.51:100 +20 3642221 . TTC T . PASS FR=1.0;HP=2;NF=12;NR=3;PP=100.0;SC=TCGCCACCATTTCTCCAGAAC;TC=20;TR=15 GT:GL:GQ 1/1:-312.08,-172.82,-161.67:43 +20 3643129 . TC T . PASS FR=1.0;HP=9;NF=4;NR=4;PP=100.0;SC=CGGGGTGGTATCCCCCCCCCA;TC=20;TR=8 GT:GL:GQ 1/1:-89.01,-45.99,-37.4:71 +20 3645120 . AAAAC A . PASS FR=1.0;HP=5;NF=1;NR=4;PP=100.0;SC=TTTTTTTTAAAAAACAAACAA;TC=18;TR=5 GT:GL:GQ 1/1:-88.2,-13.8,-7.58:77 +20 3650540 . A ACACCACC . PASS FR=1.0;HP=1;NF=3;NR=4;PP=100.0;SC=CCAGGCTCTGACAGCAGCCTG;TC=12;TR=7 GT:GL:GQ 1/1:-183.63,-21.64,-13.12:68 +20 3664603 . AG A . PASS FR=1.0;HP=6;NF=3;NR=9;PP=100.0;SC=TTCTGTAGACAGGGGGGTCTC;TC=16;TR=12 GT:GL:GQ 1/1:-110.02,-26.49,-16.31:85 +20 3667748 . C CG . PASS FR=1.0;HP=2;NF=12;NR=5;PP=100.0;SC=AAAGTTCACCCGCCCCCAACT;TC=24;TR=17 GT:GL:GQ 1/1:-221.42,-44.79,-28.21:100 +20 3677095 . T TGCTG . PASS FR=1.0;HP=1;NF=4;NR=13;PP=100.0;SC=GGAGGCCTTCTGCTGGCTGGA;TC=22;TR=17 GT:GL:GQ 1/1:-297.16,-58.83,-44.05:100 +20 3685444 . A AT . PASS FR=1.0;HP=7;NF=6;NR=4;PP=100.0;SC=TTGTTTTTTAATTTTTTTGTA;TC=15;TR=10 GT:GL:GQ 1/1:-93.4,-15.67,-6.68:75 +20 3699376 . AAAAT A . PASS FR=1.0;HP=5;NF=4;NR=2;PP=100.0;SC=CAAAAAATAAAAAATAAATAA;TC=21;TR=6 GT:GL:GQ 1/1:-124.16,-19.34,-11.28:66 +20 3700024 . TTTAC T . PASS FR=0.5;HP=2;NF=3;NR=4;PP=100.0;SC=TATTTATTTATTTACTTACTT;TC=22;TR=7 GT:GL:GQ 0/1:-142.54,-24.82,-34.29:44 +20 3702676 . C CT . PASS FR=1.0;HP=9;NF=9;NR=6;PP=100.0;SC=ATATGTTGAACTTTTTTTTTA;TC=20;TR=15 GT:GL:GQ 1/1:-102.25,-23.87,-11.51:100 +20 3703373 . GAATA G . PASS FR=1.0;HP=3;NF=3;NR=4;PP=100.0;SC=TATACATGGAGAATAAATAAA;TC=24;TR=7 GT:GL:GQ 1/1:-129.84,-26.73,-19.11:63 +20 3705235 . G GGAAA . PASS FR=1.0;HP=3;NF=3;NR=2;PP=100.0;SC=AAGAAAGAAAGGAAAGAAATA;TC=24;TR=5 GT:GL:GQ 1/1:-319.51,-157.83,-145.36:98 +20 3717704 . AAAATAAATAAATAAAT AAAATAAATAAAT,A . PASS FR=0.5,0.5;HP=4;NF=1,0;NR=1,2;PP=100.0,55.0;SC=CTCTGCCTCAAAAATAAATAA;TC=12;TR=2,2 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 3719488 . AGT A . PASS FR=0.5;HP=2;NF=4;NR=6;PP=100.0;SC=TCTGTGAGTGAGTGTGTGTGT;TC=28;TR=10 GT:GL:GQ 0/1:-149.53,-25.54,-102.21:100 +20 3736407 . CCCCCAGCCCAGTGG C . PASS FR=0.5;HP=4;NF=3;NR=1;PP=100.0;SC=AGCTGATCGACCCCCAGCCCA;TC=22;TR=4 GT:GL:GQ 0/1:-177.03,-114.74,-207.47:100 +20 3740620 . GCA G . PASS FR=1.0;HP=1;NF=4;NR=6;PP=100.0;SC=ACTCACACATGCACACACACA;TC=17;TR=10 GT:GL:GQ 1/1:-154.32,-36.11,-25.75:86 +20 3751453 . G GT . PASS FR=1.0;HP=6;NF=1;NR=1;PP=100.0;SC=CAAACACACGGTTTTTTGTTT;TC=25;TR=2 GT:GL:GQ 1/1:-234.3,-199.49,-191.92:62 +20 3752464 . A AACAC,AACACAC . PASS FR=0.5,0.5;HP=3;NF=4,3;NR=3,3;PP=100.0,100.0;SC=AAAAAGAGAAAACACACACAC;TC=29;TR=7,6 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 3755004 . G GACA . PASS FR=1.0;HP=2;NF=1;NR=7;PP=100.0;SC=GACAGAGTGAGACATCTCATA;TC=13;TR=8 GT:GL:GQ 1/1:-134.63,-25.28,-17.61:63 +20 3768789 . A AAAAG . PASS FR=0.5;HP=8;NF=4;NR=3;PP=100.0;SC=ATCTCAAAAAAAAAGAAAGAA;TC=28;TR=7 GT:GL:GQ 0/1:-141.47,-38.74,-119.72:100 +20 3770324 . T TAATAATA . PASS FR=0.5;HP=8;NF=1;NR=2;PP=29.0;SC=GGCCAAAAAATAATAATAAAT;TC=11;TR=3 GT:GL:GQ 0/1:-67.44,-43.02,-52.14:42 +20 3774219 . AATTTT A . PASS FR=0.5;HP=1;NF=2;NR=3;PP=100.0;SC=GGTTTTAGAGAATTTTATTTT;TC=20;TR=5 GT:GL:GQ 0/1:-126.4,-91.22,-154.58:100 +20 3775162 . GTT G . PASS FR=0.5;HP=10;NF=3;NR=6;PP=100.0;SC=TCTCGGGGCAGTTTTTTTTTT;TC=26;TR=9 GT:GL:GQ 0/1:-103.9,-68.26,-117.09:100 +20 3776005 . C CA . PASS FR=0.5;HP=8;NF=1;NR=4;PP=23.0;SC=GACTCCATCCCAAAAAAAACA;TC=14;TR=5 GT:GL:GQ 0/1:-145.51,-129.15,-148.62:73 +20 3776021 . AAAC A . PASS FR=0.5;HP=3;NF=3;NR=1;PP=100.0;SC=AAACAAAACAAAACAAAAAGA;TC=21;TR=4 GT:GL:GQ 0/1:-163.41,-119.44,-232.96:100 +20 3780857 . T TGGACTGGAGACCTGGTGCTAG . PASS FR=0.5;HP=6;NF=4;NR=1;PP=100.0;SC=TACTCCCCCCTGGACTGGGGG;TC=10;TR=5 GT:GL:GQ 0/1:-153.98,-19.16,-34.72:70 +20 3786892 . C CT . PASS FR=1.0;HP=4;NF=10;NR=2;PP=100.0;SC=CTTGTCCCTTCTTCTCCCAAT;TC=16;TR=12 GT:GL:GQ 1/1:-171.33,-64.44,-53.38:92 +20 3787614 . CAT C . PASS FR=1.0;HP=2;NF=11;NR=13;PP=100.0;SC=AGTGCACACACATGTCAGGCA;TC=30;TR=24 GT:GL:GQ 1/1:-451.43,-312.17,-297.5:100 +20 3789927 . C CCCG . PASS FR=1.0;HP=2;NF=2;NR=10;PP=100.0;SC=AGTTACCACGCGCTCTCTTTC;TC=17;TR=12 GT:GL:GQ 1/1:-241.99,-120.76,-110.7:78 +20 3790246 . ATATAT A . PASS FR=1.0;HP=8;NF=5;NR=2;PP=92.0;SC=TCAAAAAAAAATATATATATA;TC=14;TR=7 GT:GL:GQ 1/1:-198.37,-176.0,-172.1:52 +20 3795480 . AGGCGTGAGCCACCGCGCCC A . PASS FR=0.5;HP=2;NF=2;NR=2;PP=100.0;SC=CTGGGATTACAGGCGTGAGCC;TC=12;TR=4 GT:GL:GQ 0/1:-109.14,-46.17,-99.46:100 +20 3824585 . TTTTAC T . PASS FR=1.0;HP=3;NF=18;NR=4;PP=100.0;SC=AGATGATTTATTTTACTTTAT;TC=28;TR=22 GT:GL:GQ 1/1:-337.35,-36.39,-16.32:100 +20 3843259 . A AT . PASS FR=0.5;HP=10;NF=3;NR=7;PP=100.0;SC=AGTTTTCCAAATTTTTTTTTT;TC=31;TR=10 GT:GL:GQ 0/1:-80.23,-37.02,-73.45:100 +20 3859483 . TCACACACACA TCA,T . PASS FR=0.5,0.5;HP=1;NF=1,2;NR=1,1;PP=100.0,85.0;SC=TGAGACTCTGTCACACACACA;TC=21;TR=2,3 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 3860757 . AAAAC A . PASS FR=0.5;HP=4;NF=5;NR=2;PP=100.0;SC=GTCTCTACTAAAAACAAACAA;TC=18;TR=7 GT:GL:GQ 0/1:-108.81,-21.22,-75.5:100 +20 3860858 . GC G . PASS FR=0.5;HP=1;NF=5;NR=1;PP=100.0;SC=AACCCAGGAGGCGGAGCTTGT;TC=16;TR=6 GT:GL:GQ 0/1:-84.65,-31.03,-99.29:100 +20 3865910 . A AGGC . PASS FR=0.5;HP=3;NF=8;NR=4;PP=100.0;SC=TCTGTCACCCAGGCTCAAGTT;TC=27;TR=12 GT:GL:GQ 0/1:-249.42,-106.14,-180.19:100 +20 3873092 . TTTTA T . PASS FR=1.0;HP=5;NF=6;NR=8;PP=100.0;SC=ACTAAATCTTTTTTATTTATT;TC=25;TR=14 GT:GL:GQ 1/1:-225.87,-50.85,-37.99:100 +20 3879882 . AGT A . PASS FR=1.0;HP=1;NF=4;NR=4;PP=100.0;SC=GCAGTGATGTAGTGTAGGCTC;TC=17;TR=8 GT:GL:GQ 1/1:-213.63,-128.83,-121.45:61 +20 3882311 . TTTTG T . PASS FR=1.0;HP=3;NF=15;NR=11;PP=100.0;SC=AAGTCAGTACTTTTGTTTATT;TC=29;TR=26 GT:GL:GQ 1/1:-341.87,-21.25,-0.46:100 +20 3883619 . GACACACACACACACAC G . PASS FR=0.5013;HP=2;NF=4;NR=1;PP=100.0;SC=GATGTGTATAGACACACACAC;TC=14;TR=5 GT:GL:GQ 0/1:-204.43,-28.1,-33.39:25 +20 3885810 . GACTGCACC G . PASS FR=1.0;HP=1;NF=4;NR=7;PP=100.0;SC=CATCGCTTGTGACTGCACCAC;TC=19;TR=11 GT:GL:GQ 1/1:-301.58,-43.69,-32.0:95 +20 3899973 . T TTGA . PASS FR=1.0;HP=3;NF=18;NR=6;PP=100.0;SC=AGAAAAACCCTTGAACATTCC;TC=30;TR=24 GT:GL:GQ 1/1:-376.13,-29.44,-7.6:100 +20 3900864 . T TA . PASS FR=1.0;HP=10;NF=11;NR=11;PP=100.0;SC=AAGTTAACCTTAAAAAAAAAA;TC=30;TR=22 GT:GL:GQ 1/1:-160.94,-53.86,-35.6:100 +20 3929292 . G GA . PASS FR=1.0;HP=1;NF=16;NR=6;PP=100.0;SC=TACATACCAGGATAACTGTTG;TC=29;TR=22 GT:GL:GQ 1/1:-330.17,-190.24,-173.09:100 +20 3930806 . T TGACTGG . PASS FR=1.0;HP=2;NF=7;NR=14;PP=100.0;SC=CCTTGTATAGTGATGAATGTG;TC=26;TR=21 GT:GL:GQ 1/1:-450.24,-61.65,-40.95:100 +20 3945171 . A AT . PASS FR=1.0;HP=10;NF=7;NR=12;PP=100.0;SC=TTTTCAAGTAATTTTTTTTTT;TC=29;TR=19 GT:GL:GQ 1/1:-126.38,-32.45,-22.97:79 +20 3956227 . C CA . PASS FR=1.0;HP=5;NF=12;NR=13;PP=100.0;SC=ATTGTGTTCTCAAAAAGATAT;TC=28;TR=25 GT:GL:GQ 1/1:-249.31,-33.1,-13.35:100 +20 3965697 . AACC A . PASS FR=1.0;HP=1;NF=9;NR=9;PP=100.0;SC=GAACAACAACAACCACAACAA;TC=26;TR=18 GT:GL:GQ 1/1:-461.94,-340.35,-326.48:100 +20 3971557 . G GTTCCATGATAACAT . PASS FR=1.0;HP=2;NF=12;NR=8;PP=100.0;SC=ATTTGGCACAGTTCCATGATA;TC=27;TR=20 GT:GL:GQ 1/1:-553.38,-41.98,-23.08:100 +20 3990695 . CACAAACAA C . PASS FR=1.0;HP=1;NF=6;NR=4;PP=100.0;SC=GAGACCCTGTCACAAACAAAC;TC=23;TR=10 GT:GL:GQ 1/1:-176.37,-39.86,-31.94:65 +20 3995386 . GCACACA G . PASS FR=1.0;HP=2;NF=1;NR=1;PP=100.0;SC=ACTTGAATGCGCACACACACA;TC=18;TR=2 GT:GL:GQ 1/1:-95.82,-46.66,-41.67:61 +20 4008931 . C CTCTT . PASS FR=1.0;HP=2;NF=1;NR=4;PP=100.0;SC=TCTCATCTCTCTGTCTTTCTC;TC=9;TR=5 GT:GL:GQ 1/1:-127.43,-46.42,-40.22:77 +20 4021562 . C CGA . PASS FR=1.0;HP=2;NF=8;NR=2;PP=100.0;SC=GAAGAGAAAGCGAGAGAGAGA;TC=21;TR=10 GT:GL:GQ 1/1:-216.37,-85.41,-73.73:98 +20 4025709 . TGA T . PASS FR=1.0;HP=2;NF=12;NR=9;PP=100.0;SC=AAATACATAATGAGAGAGAGA;TC=26;TR=21 GT:GL:GQ 1/1:-247.4,-21.57,-4.6:100 +20 4035810 . T TGTTTGTATTACA . PASS FR=1.0;HP=2;NF=10;NR=4;PP=100.0;SC=TAGCTGGGCATGGTGGCGGGT;TC=15;TR=14 GT:GL:GQ 1/1:-361.94,-174.62,-163.57:92 +20 4042278 . A AT . PASS FR=1.0;HP=2;NF=7;NR=15;PP=100.0;SC=AAACACATAAATCTCTCTCTC;TC=29;TR=22 GT:GL:GQ 1/1:-269.48,-66.17,-47.18:100 +20 4044153 . C CA . PASS FR=1.0;HP=6;NF=8;NR=10;PP=100.0;SC=GCCCCAGGGACGGGGGGCTGG;TC=21;TR=18 GT:GL:GQ 1/1:-167.11,-27.75,-13.35:100 +20 4048870 . AGAGTTATCTTGCCTGAG A . PASS FR=0.5;HP=4;NF=9;NR=5;PP=100.0;SC=CACGTGCCCCAGAGTTATCTT;TC=24;TR=14 GT:GL:GQ 1/0:-626.63,-331.02,-449.96:74 +20 4050067 . A AT . PASS FR=1.0;HP=8;NF=14;NR=11;PP=100.0;SC=TAAGTTTTAAATTTTTTTTGT;TC=36;TR=25 GT:GL:GQ 1/1:-400.71,-316.84,-301.94:100 +20 4052527 . A AT . PASS FR=1.0;HP=1;NF=15;NR=9;PP=100.0;SC=CTAAGCATGAAGTGGTCTCAG;TC=27;TR=24 GT:GL:GQ 1/1:-335.51,-240.21,-229.69:88 +20 4057207 . G GT . PASS FR=1.0;HP=3;NF=17;NR=11;PP=100.0;SC=TAGATTATTTGGTTTTTTTTT;TC=40;TR=28 GT:GL:GQ 1/1:-398.27,-278.49,-261.61:100 +20 4057861 . T TTTCC . PASS FR=1.0;HP=4;NF=8;NR=13;PP=100.0;SC=CTGATGATTTTTATGTTTTCT;TC=33;TR=21 GT:GL:GQ 1/1:-430.04,-131.81,-113.85:100 +20 4058335 . T TATTA . PASS FR=1.0;HP=2;NF=14;NR=5;PP=100.0;SC=TTAATATGTTTATTATACATA;TC=19;TR=19 GT:GL:GQ 1/1:-424.99,-369.88,-364.34:69 +20 4060198 . CTCTT C . PASS FR=0.5;HP=3;NF=8;NR=6;PP=100.0;SC=TTCTATTGTTCTCTTTGTTTT;TC=37;TR=14 GT:GL:GQ 0/1:-273.47,-128.98,-306.0:100 +20 4060592 . C CTTTA . PASS FR=0.5;HP=3;NF=4;NR=8;PP=100.0;SC=ATAATTTTTGCTTTATTTATT;TC=31;TR=12 GT:GL:GQ 0/1:-163.9,-38.86,-129.26:100 +20 4070170 . GTA G . PASS FR=0.5;HP=2;NF=3;NR=2;PP=100.0;SC=GTGTGTGTGTGTATATATATA;TC=25;TR=5 GT:GL:GQ 0/1:-276.88,-237.9,-267.79:100 +20 4070252 . A ATGTATATATG . PASS FR=1.0;HP=2;NF=3;NR=1;PP=100.0;SC=GTGTGTATATATGTATATATG;TC=16;TR=4 GT:GL:GQ 1/1:-231.61,-30.38,-18.61:81 +20 4070382 . ATATGTGTGTGTG A . PASS FR=1.0;HP=2;NF=1;NR=2;PP=100.0;SC=ATGTGTATATATATGTGTGTG;TC=25;TR=3 GT:GL:GQ 1/1:-347.8,-231.66,-223.35:51 +20 4070396 . GTGTGTGTGTGTGTATATATATATATA G . PASS FR=0.5;HP=2;NF=4;NR=4;PP=100.0;SC=GTGTGTGTGTGTGTGTGTGTG;TC=18;TR=8 GT:GL:GQ 1/0:-384.34,-235.32,-225.8:62 +20 4071341 . CA C . PASS FR=0.5026;HP=9;NF=5;NR=5;PP=100.0;SC=CTGATTATGGCAAAAAAAAAC;TC=20;TR=10 GT:GL:GQ 0/1:-155.5,-119.13,-123.71:22 +20 4071895 . G GT . PASS FR=0.5;HP=8;NF=3;NR=3;PP=72.0;SC=TGGGACCTTTGTTTTTGCAAA;TC=22;TR=6 GT:GL:GQ 0/1:-127.95,-100.32,-170.75:100 +20 4074739 . G GA . PASS FR=0.5;HP=9;NF=2;NR=4;PP=75.0;SC=ACTACATCTCGAAAAAAAAAG;TC=16;TR=6 GT:GL:GQ 0/1:-104.75,-76.46,-99.49:100 +20 4077346 . ATATTAT A . PASS FR=0.5;HP=1;NF=2;NR=2;PP=100.0;SC=TATGAGGACAATATTATTATT;TC=23;TR=4 GT:GL:GQ 0/1:-62.56,-10.62,-98.18:100 +20 4092195 . G GTCAGCCAGAGAGGCTC . PASS FR=1.0;HP=1;NF=7;NR=5;PP=100.0;SC=AGGTAAGACAGTCAGCCAGAG;TC=21;TR=12 GT:GL:GQ 1/1:-408.88,-45.59,-29.88:100 +20 4092421 . A AT . PASS FR=0.5;HP=4;NF=5;NR=6;PP=100.0;SC=CTGGCAGCAGATTTTCCCTTA;TC=31;TR=11 GT:GL:GQ 0/1:-137.54,-52.61,-154.29:100 +20 4095639 . T TATAC . PASS FR=0.5;HP=2;NF=3;NR=6;PP=100.0;SC=TATATATATATACACACACAT;TC=30;TR=9 GT:GL:GQ 0/1:-239.61,-67.33,-166.02:100 +20 4096614 . T TG . PASS FR=0.5;HP=1;NF=3;NR=8;PP=100.0;SC=TTTGATGGCTTGTGAAGCCCA;TC=42;TR=11 GT:GL:GQ 0/1:-166.13,-48.49,-243.23:100 +20 4099234 . C CTCT . PASS FR=1.0;HP=1;NF=2;NR=7;PP=100.0;SC=CTTCTTCTTCCTCTTCTTCCT;TC=17;TR=9 GT:GL:GQ 1/1:-213.81,-121.18,-113.85:91 +20 4106279 . C CA . PASS FR=1.0;HP=4;NF=9;NR=14;PP=100.0;SC=ATGATCCACCCCCTTGGCCTC;TC=27;TR=23 GT:GL:GQ 1/1:-261.7,-33.57,-14.72:100 +20 4106498 . AC A . PASS FR=0.5;HP=3;NF=4;NR=6;PP=100.0;SC=ACCCGCCACCACGTCAAGCTA;TC=17;TR=10 GT:GL:GQ 0/1:-151.03,-63.2,-86.55:100 +20 4107003 . T TCTAA . PASS FR=0.5;HP=2;NF=4;NR=9;PP=100.0;SC=TGGAGGTAACTCTAGGACATA;TC=28;TR=13 GT:GL:GQ 0/1:-216.14,-60.6,-196.15:100 +20 4108348 . A AC . PASS FR=1.0;HP=3;NF=9;NR=6;PP=100.0;SC=TTCTATGGAAAAGAGCAGTCA;TC=22;TR=15 GT:GL:GQ 1/1:-263.65,-164.58,-152.76:96 +20 4111438 . CA C . PASS FR=1.0;HP=2;NF=13;NR=9;PP=100.0;SC=GGTGATCACACAGGGGCATGG;TC=27;TR=22 GT:GL:GQ 1/1:-393.14,-310.63,-301.96:68 +20 4111530 . T TG . PASS FR=1.0;HP=1;NF=13;NR=14;PP=100.0;SC=CATCAAAACTTGCAGAAGTAT;TC=30;TR=27 GT:GL:GQ 1/1:-576.34,-531.28,-526.81:55 +20 4112367 . TA T . PASS FR=0.5;HP=2;NF=7;NR=2;PP=100.0;SC=AGACTTTAGTTAATAATAATA;TC=25;TR=9 GT:GL:GQ 0/1:-105.53,-48.17,-185.05:100 +20 4124037 . TACAC TAC,T . PASS FR=0.5,0.5;HP=2;NF=0,1;NR=6,6;PP=100.0,100.0;SC=TGTATGTGTATACACACACAC;TC=29;TR=6,7 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 4165244 . C CAG . PASS FR=0.5;HP=3;NF=9;NR=7;PP=100.0;SC=TAAAACTCAACAGTTATATTT;TC=28;TR=16 GT:GL:GQ 0/1:-164.36,-34.34,-133.84:100 +20 4189405 . A AGTGTTCT . PASS FR=1.0;HP=1;NF=8;NR=19;PP=100.0;SC=TGATCACAGAAGTGTTGAATG;TC=31;TR=27 GT:GL:GQ 1/1:-510.65,-52.94,-31.94:100 +20 4193006 . T TA . PASS FR=1.0;HP=9;NF=5;NR=11;PP=100.0;SC=TGTGTTTGATTAAAAAAAAAT;TC=25;TR=16 GT:GL:GQ 1/1:-189.06,-113.86,-103.2:89 +20 4204545 . CAACAGGTTT C . PASS FR=0.5;HP=3;NF=5;NR=5;PP=100.0;SC=TTTCAATTTACAACAGGTTTA;TC=29;TR=10 GT:GL:GQ 0/1:-264.93,-66.16,-208.86:100 +20 4210072 . T TA . PASS FR=0.5;HP=5;NF=7;NR=3;PP=100.0;SC=GGAAGGAAGATGGGGGCGAGT;TC=33;TR=10 GT:GL:GQ 0/1:-169.78,-122.55,-232.56:100 +20 4211685 . T TTTTCTTTC . PASS FR=1.0;HP=4;NF=3;NR=1;PP=100.0;SC=CTTTCTTTCTTTTTCTTTCTT;TC=17;TR=4 GT:GL:GQ 1/1:-163.69,-62.85,-59.76:50 +20 4222606 . TG T,AG . PASS FR=0.5,0.5;HP=2;NF=14,3;NR=8,0;PP=72.0,7.0;SC=CAGCACAGCCTGATGGCTCTG;TC=29;TR=22,3 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:41 +20 4223993 . CG C . PASS FR=1.0;HP=4;NF=10;NR=1;PP=100.0;SC=CTGGGCTCCTCGGGGCATCCG;TC=14;TR=11 GT:GL:GQ 1/1:-180.73,-119.68,-111.91:64 +20 4255571 . TGAAA T . PASS FR=1.0;HP=1;NF=5;NR=4;PP=100.0;SC=AGGTATGCTCTGAAAGGAAGA;TC=15;TR=9 GT:GL:GQ 1/1:-155.75,-66.2,-58.38:79 +20 4260218 . C CA . PASS FR=0.5;HP=3;NF=1;NR=9;PP=100.0;SC=CTGGTCTCCCCAGCATCTAGT;TC=27;TR=10 GT:GL:GQ 0/1:-138.73,-38.26,-150.01:100 +20 4280077 . G GTGA . PASS FR=0.5;HP=1;NF=2;NR=4;PP=100.0;SC=GATGTCTTTGGTGATGATGAT;TC=23;TR=6 GT:GL:GQ 0/1:-118.58,-26.45,-67.22:100 +20 4300671 . G GT . PASS FR=1.0;HP=9;NF=9;NR=7;PP=100.0;SC=TATTTTTTAAGTTTTTTTTTC;TC=22;TR=16 GT:GL:GQ 1/1:-112.49,-30.96,-17.5:100 +20 4305010 . C CCTGT . PASS FR=1.0;HP=1;NF=9;NR=14;PP=100.0;SC=AGGTTTGGCTCCTGTCTGACA;TC=27;TR=23 GT:GL:GQ 1/1:-478.98,-124.12,-105.32:100 +20 4306264 . GT G . PASS FR=0.5;HP=3;NF=7;NR=4;PP=100.0;SC=ACAATATAAGGTTTACTTCAA;TC=24;TR=11 GT:GL:GQ 0/1:-115.0,-27.63,-111.62:100 +20 4310291 . T TC . PASS FR=1.0;HP=1;NF=20;NR=9;PP=100.0;SC=CTCCTACGTGTCATGCCAGCT;TC=32;TR=29 GT:GL:GQ 1/1:-333.81,-66.33,-44.4:100 +20 4310977 . GC G . PASS FR=0.5;HP=1;NF=14;NR=6;PP=100.0;SC=CCTGAAACTGGCGTAATTTAT;TC=41;TR=20 GT:GL:GQ 0/1:-231.9,-39.91,-159.66:100 +20 4321071 . A AG . PASS FR=0.5;HP=5;NF=3;NR=2;PP=100.0;SC=AAGTCAAATCAGGGGGAGGAA;TC=19;TR=5 GT:GL:GQ 0/1:-50.11,-15.88,-71.26:100 +20 4322091 . CA C . PASS FR=0.5;HP=1;NF=11;NR=7;PP=100.0;SC=GCCGTGTGTCCAGCCAAAACT;TC=33;TR=18 GT:GL:GQ 0/1:-210.17,-46.06,-156.61:100 +20 4329185 . TC T . PASS FR=0.5;HP=1;NF=8;NR=2;PP=100.0;SC=AATTCTAGGTTCTTTCTCTCA;TC=28;TR=10 GT:GL:GQ 0/1:-148.46,-71.81,-182.2:100 +20 4330761 . GGTGTGTGT G . PASS FR=1.0;HP=3;NF=1;NR=3;PP=100.0;SC=TAATTCATGGGGTGTGTGTGT;TC=30;TR=4 GT:GL:GQ 1/1:-224.07,-44.24,-35.58:72 +20 4332044 . TG T . PASS FR=1.0;HP=6;NF=5;NR=2;PP=57.0;SC=TTTGTTTTTTTGTTTTTTTTT;TC=24;TR=7 GT:GL:GQ 1/1:-226.96,-113.86,-100.61:42 +20 4343821 . TA T . PASS FR=0.5;HP=8;NF=5;NR=8;PP=100.0;SC=CATTTTTTTTTAAAATTTTTG;TC=35;TR=13 GT:GL:GQ 1/0:-274.8,-111.87,-90.41:100 +20 4349378 . A AT . PASS FR=0.5;HP=3;NF=11;NR=7;PP=100.0;SC=TTTTGAAGGCATTTCCAGGGT;TC=27;TR=18 GT:GL:GQ 0/1:-181.47,-28.52,-69.89:100 +20 4366637 . AAAAC A . PASS FR=1.0;HP=3;NF=8;NR=10;PP=100.0;SC=AAAACAAAACAAAACAAACAA;TC=29;TR=18 GT:GL:GQ 1/1:-255.42,-38.69,-23.59:100 +20 4378952 . A AAAC . PASS FR=1.0;HP=2;NF=5;NR=8;PP=100.0;SC=CAAAACAAACAAACAACAACA;TC=26;TR=13 GT:GL:GQ 1/1:-242.03,-34.58,-19.38:100 +20 4380979 . CACAT C . PASS FR=1.0;HP=2;NF=6;NR=6;PP=100.0;SC=CACACACACACACATACAAGC;TC=29;TR=12 GT:GL:GQ 1/1:-310.99,-41.83,-21.18:100 +20 4381267 . T TGTGTATTGTGGA . PASS FR=1.0;HP=2;NF=4;NR=9;PP=100.0;SC=GACAGCCTCCTTCAACAAAAA;TC=23;TR=13 GT:GL:GQ 1/1:-573.3,-462.6,-447.82:96 +20 4381268 . TC T . PASS FR=1.0;HP=1;NF=4;NR=9;PP=100.0;SC=ACAGCCTCCTTCAACAAAAAA;TC=27;TR=13 GT:GL:GQ 1/1:-573.3,-567.48,-566.42:96 +20 4384878 . TAGAC T . PASS FR=0.5;HP=4;NF=7;NR=6;PP=100.0;SC=ATGGAAGAAATAGACAGAGAG;TC=32;TR=13 GT:GL:GQ 0/1:-215.18,-58.15,-186.03:100 +20 4390996 . ACT A . PASS FR=0.5;HP=1;NF=5;NR=4;PP=100.0;SC=AACACTCGAGACTCTCCAGCT;TC=25;TR=9 GT:GL:GQ 0/1:-160.6,-43.63,-115.25:100 +20 4392384 . T TTG . PASS FR=0.5;HP=1;NF=2;NR=1;PP=100.0;SC=GGGAATATAGTTGTGTGTGTG;TC=26;TR=3 GT:GL:GQ 0/1:-141.31,-92.22,-156.97:100 +20 4403198 . CGT CGTGT,C . PASS FR=0.5,0.5;HP=2;NF=3,3;NR=2,0;PP=100.0,91.0;SC=TGTGTGTGTGCGTGTGTGTGT;TC=16;TR=5,3 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 4418283 . TCC T . PASS FR=1.0;HP=5;NF=9;NR=17;PP=100.0;SC=TGAAAAATGCTCCCCAGGTTT;TC=26;TR=26 GT:GL:GQ 1/1:-235.22,-17.92,0.0:100 +20 4422138 . A AAGAGGCAAGGCTTCCCCACATGCTCAGAATGG,G . PASS FR=0.5,0.5;HP=1;NF=2,3;NR=0,5;PP=100.0,87.0;SC=CTACAGAAAGATGATGGAGGT;TC=14;TR=2,8 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:23 +20 4422142 . T TG . PASS FR=1.0;HP=2;NF=8;NR=6;PP=100.0;SC=AGAAAGATGATGGAGGTACTA;TC=19;TR=14 GT:GL:GQ 1/1:-319.37,-289.62,-286.77:23 +20 4427312 . A AGCTTCTAT . PASS FR=0.5;HP=2;NF=1;NR=1;PP=100.0;SC=TGTATAATAGAGTCCAGAGTC;TC=11;TR=2 GT:GL:GQ 1/0:-513.43,-441.06,-437.62:42 +20 4431651 . TA T . PASS FR=0.5;HP=5;NF=9;NR=13;PP=100.0;SC=TCTAGACCCTTAAAAATAACA;TC=34;TR=22 GT:GL:GQ 0/1:-196.04,-30.01,-107.67:100 +20 4438168 . T TTACACAAATGTAACCTATGTAACAA . PASS FR=0.5;HP=1;NF=2;NR=3;PP=100.0;SC=CCTGCACATGTACCCTTGAAC;TC=16;TR=5 GT:GL:GQ 0/1:-418.07,-256.53,-367.22:100 +20 4439599 . GT G . PASS FR=0.5;HP=2;NF=11;NR=12;PP=100.0;SC=TGTGGGGAGAGTTAGCAAGAG;TC=36;TR=23 GT:GL:GQ 0/1:-329.81,-228.22,-300.4:100 +20 4442338 . CTTTATTTTATTTTAT CTTTATTTTAT,C . PASS FR=0.5,0.5;HP=3;NF=2,1;NR=0,3;PP=100.0,100.0;SC=AAGTATCTAACTTTATTTTAT;TC=21;TR=2,4 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 4445547 . T TAA . PASS FR=1.0;HP=1;NF=18;NR=22;PP=100.0;SC=TGTTTCCAGTTGTTATACTTT;TC=39;TR=40 GT:GL:GQ 1/1:-459.22,-244.89,-221.84:100 +20 4452980 . TACAC T . PASS FR=1.0;HP=2;NF=1;NR=2;PP=100.0;SC=TTAATTCTTATACACACACAC;TC=21;TR=3 GT:GL:GQ 1/1:-75.87,-32.41,-30.31:43 +20 4460649 . G GA . PASS FR=0.5;HP=9;NF=5;NR=8;PP=100.0;SC=TTTCCTCGGAGAAAAAAAACA;TC=39;TR=13 GT:GL:GQ 0/1:-191.57,-119.31,-159.65:100 +20 4462152 . GGTCAATGTTATAAACTTTGC G . PASS FR=0.5;HP=2;NF=6;NR=5;PP=100.0;SC=CTACTTCTTGGGTCAATGTTA;TC=18;TR=11 GT:GL:GQ 1/0:-501.72,-174.1,-171.31:67 +20 4462516 . T TTC . PASS FR=0.5;HP=1;NF=16;NR=1;PP=100.0;SC=GGGTTTAAAGTTCTCTAATGA;TC=41;TR=17 GT:GL:GQ 0/1:-181.56,-38.08,-223.18:100 +20 4462799 . C CTT . PASS FR=0.5;HP=1;NF=1;NR=1;PP=100.0;SC=TCTTCTTCGTCCTTTTTTTTT;TC=36;TR=2 GT:GL:GQ 0/1:-520.7,-504.74,-499.84:81 +20 4465737 . TG T . PASS FR=1.0;HP=2;NF=9;NR=18;PP=100.0;SC=CTCCTTGACATGGACTGAGAA;TC=27;TR=27 GT:GL:GQ 1/1:-258.03,-34.15,-15.14:100 +20 4468340 . TA T . PASS FR=0.5;HP=10;NF=5;NR=2;PP=57.0;SC=ATATATATATTAAAAAAAAAA;TC=21;TR=7 GT:GL:GQ 0/1:-41.89,-18.73,-52.45:100 +20 4469569 . C CT . PASS FR=0.5;HP=4;NF=3;NR=6;PP=100.0;SC=CAAGTAAAGACTTTTGATTGT;TC=23;TR=9 GT:GL:GQ 0/1:-113.7,-24.95,-84.55:100 +20 4474613 . GA G . PASS FR=0.5;HP=8;NF=4;NR=6;PP=100.0;SC=ATTAGGAACAGAAAAAAATTA;TC=37;TR=10 GT:GL:GQ 0/1:-311.99,-245.02,-353.92:100 +20 4474629 . A AAAT . PASS FR=0.5;HP=9;NF=11;NR=5;PP=100.0;SC=AATTAAAAAAAAAATATACAC;TC=32;TR=16 GT:GL:GQ 0/1:-322.36,-111.27,-187.62:100 +20 4475883 . AT A . PASS FR=0.5;HP=5;NF=1;NR=3;PP=100.0;SC=AAATATATATATTTTAATATA;TC=14;TR=4 GT:GL:GQ 0/1:-74.26,-40.07,-92.44:100 +20 4481373 . A AG . PASS FR=1.0;HP=1;NF=5;NR=6;PP=100.0;SC=TCTTTTTTCAAGTTTTTAGCT;TC=13;TR=11 GT:GL:GQ 1/1:-84.43,-9.42,-0.46:74 +20 4484587 . T TA . PASS FR=0.5;HP=9;NF=4;NR=9;PP=100.0;SC=TCTCTGATTTTAAAAAAAAAG;TC=46;TR=13 GT:GL:GQ 0/1:-163.36,-92.55,-141.98:100 +20 4487527 . TG T . PASS FR=0.5006;HP=5;NF=8;NR=7;PP=100.0;SC=TACTAGGGGCTGGGGGCAGGG;TC=34;TR=15 GT:GL:GQ 0/1:-421.09,-350.88,-356.92:29 +20 4492336 . C CA . PASS FR=1.0;HP=1;NF=11;NR=14;PP=100.0;SC=ACATTCTTGCCACCTTTGGTA;TC=27;TR=25 GT:GL:GQ 1/1:-281.59,-90.33,-72.03:100 +20 4493592 . C CG . PASS FR=1.0;HP=2;NF=20;NR=17;PP=100.0;SC=GCATTTTGGACATCTCACCCT;TC=39;TR=37 GT:GL:GQ 1/1:-454.89,-182.56,-157.87:100 +20 4497462 . TTA T . PASS FR=0.5;HP=2;NF=2;NR=2;PP=88.0;SC=TAAATCAACTTTATATATATA;TC=14;TR=4 GT:GL:GQ 1/0:-149.41,-117.69,-112.45:46 +20 4500613 . G GC . PASS FR=1.0;HP=2;NF=12;NR=13;PP=100.0;SC=ATGCCCAAGGGTGTCCCAGAG;TC=29;TR=25 GT:GL:GQ 1/1:-293.02,-49.83,-29.64:100 +20 4502874 . CT C . PASS FR=1.0;HP=4;NF=11;NR=7;PP=100.0;SC=TACAGCCCTTCTTGGGAGCCC;TC=24;TR=18 GT:GL:GQ 1/1:-204.97,-36.44,-20.43:100 +20 4512447 . AAAACAAAC AAAAC,A . PASS FR=0.5,0.5;HP=3;NF=3,4;NR=0,1;PP=100.0,100.0;SC=ACTCCATCTCAAAACAAACAA;TC=20;TR=3,5 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 4519983 . GA G . PASS FR=0.5;HP=3;NF=7;NR=13;PP=100.0;SC=TCCAAACTAAGACAGGTATTA;TC=36;TR=20 GT:GL:GQ 0/1:-201.76,-27.24,-148.43:100 +20 4524299 . AGTGTGT A . PASS FR=0.5;HP=3;NF=2;NR=1;PP=100.0;SC=TCTGTGCTTTAGTGTGTGTGT;TC=28;TR=3 GT:GL:GQ 0/1:-144.55,-75.64,-138.78:100 +20 4530940 . CTT C . PASS FR=0.5002;HP=6;NF=2;NR=9;PP=80.0;SC=TTCTTTCTTTCTTTCTCTCTC;TC=25;TR=11 GT:GL:GQ 0/1:-323.77,-294.9,-301.87:33 +20 4541935 . A AGAG . PASS FR=0.5;HP=2;NF=8;NR=4;PP=100.0;SC=GTGGCAGATTAGAGGAGACAT;TC=32;TR=12 GT:GL:GQ 0/1:-211.5,-48.19,-198.54:100 +20 4547067 . G GA . PASS FR=0.5116;HP=10;NF=5;NR=1;PP=100.0;SC=TATAGAGAGAGAAAAAAAAAC;TC=18;TR=6 GT:GL:GQ 0/1:-156.12,-119.31,-122.4:16 +20 4553580 . GT G . PASS FR=0.5;HP=10;NF=1;NR=1;PP=71.0;SC=TTTTGTTTTTGTTTTTGTTTT;TC=17;TR=2 GT:GL:GQ 1/0:-197.42,-152.57,-154.01:100 +20 4553925 . T TC . PASS FR=1.0;HP=1;NF=7;NR=5;PP=100.0;SC=CGGCCCCTCTTCACTTTTAAG;TC=16;TR=12 GT:GL:GQ 1/1:-135.25,-18.29,-7.82:87 +20 4560578 . C CCTTA . PASS FR=1.0;HP=1;NF=11;NR=12;PP=100.0;SC=ATGTTATATACCTTTTAGAGA;TC=32;TR=23 GT:GL:GQ 1/1:-416.23,-42.65,-19.11:100 +20 4566007 . G GC . PASS FR=0.5;HP=1;NF=9;NR=3;PP=100.0;SC=AGCTGGGGCTGACTCATCTGA;TC=27;TR=12 GT:GL:GQ 0/1:-150.18,-87.47,-213.89:100 +20 4572622 . T TA . PASS FR=0.5;HP=1;NF=5;NR=4;PP=100.0;SC=AAAGGGGTGCTAGGAATTCCA;TC=21;TR=9 GT:GL:GQ 0/1:-105.47,-33.77,-107.56:100 +20 4580659 . ATTG A . PASS FR=0.5;HP=3;NF=9;NR=11;PP=100.0;SC=AATAATTTATATTGTTATTAT;TC=41;TR=20 GT:GL:GQ 0/1:-343.69,-136.17,-313.1:100 +20 4580822 . AAC A . PASS FR=0.5;HP=1;NF=7;NR=7;PP=100.0;SC=TATCTTACATAACAGTGTATC;TC=27;TR=14 GT:GL:GQ 0/1:-159.59,-31.47,-183.78:100 +20 4589159 . TAC T . PASS FR=0.5;HP=1;NF=5;NR=5;PP=100.0;SC=CACACACACGTACACACACAC;TC=25;TR=10 GT:GL:GQ 0/1:-134.67,-33.29,-88.29:100 +20 4590266 . T TCTGGCC . PASS FR=0.5;HP=3;NF=3;NR=4;PP=100.0;SC=GCTGGCAGCCTCTGGCCCTGG;TC=20;TR=7 GT:GL:GQ 0/1:-180.62,-56.12,-103.3:100 +20 4613873 . T TATA . PASS FR=0.5;HP=3;NF=6;NR=2;PP=100.0;SC=CTCTTTCTTTTATAATAATAA;TC=26;TR=8 GT:GL:GQ 0/1:-121.23,-16.51,-65.45:100 +20 4616453 . G GAGTAGA . PASS FR=0.5;HP=3;NF=5;NR=7;PP=100.0;SC=CACAGAGTAGGGGTTCAATAA;TC=22;TR=12 GT:GL:GQ 0/1:-211.56,-25.38,-113.94:100 +20 4617264 . G GAGAA . PASS FR=0.5;HP=2;NF=3;NR=1;PP=100.0;SC=GAAAGCAAGAGAGAAAGAAGA;TC=22;TR=4 GT:GL:GQ 0/1:-126.22,-46.88,-138.67:100 +20 4617272 . AG A . PASS FR=0.5;HP=1;NF=1;NR=3;PP=20.0;SC=GAGAGAAAGAAGAGAAGAGAA;TC=22;TR=4 GT:GL:GQ 0/1:-134.04,-119.35,-223.11:66 +20 4617303 . G GAGGA . PASS FR=0.5;HP=2;NF=2;NR=3;PP=100.0;SC=GGGAGGGAGAGAGGAAGGAAG;TC=19;TR=5 GT:GL:GQ 0/1:-154.78,-90.63,-135.29:100 +20 4655424 . G GA . PASS FR=0.5;HP=8;NF=13;NR=4;PP=100.0;SC=GTTCTTTAGAGAAAAAAAGAT;TC=30;TR=17 GT:GL:GQ 0/1:-186.33,-114.25,-152.75:100 +20 4668235 . AT A . PASS FR=0.5;HP=10;NF=12;NR=5;PP=100.0;SC=TAGGAAATAGATTTTTTTTTT;TC=33;TR=17 GT:GL:GQ 0/1:-91.71,-31.87,-60.05:100 +20 4673330 . C CTTT . PASS FR=0.5;HP=5;NF=6;NR=8;PP=100.0;SC=TGAAGAAAATCTTTTCTTCCT;TC=24;TR=14 GT:GL:GQ 0/1:-183.35,-23.94,-71.42:100 +20 4684173 . TG T . PASS FR=0.5;HP=1;NF=5;NR=1;PP=100.0;SC=CAGGCACAGTTGCTCACGCCT;TC=17;TR=6 GT:GL:GQ 0/1:-81.87,-25.35,-94.89:100 +20 4691383 . CA C . PASS FR=1.0;HP=2;NF=14;NR=12;PP=100.0;SC=TGGGGTCATCCAAGCATGGCT;TC=29;TR=26 GT:GL:GQ 1/1:-259.65,-39.57,-19.54:100 +20 4692075 . C CA . PASS FR=0.5;HP=9;NF=5;NR=3;PP=95.0;SC=AGTAATTGGACAAAAAAAACA;TC=26;TR=8 GT:GL:GQ 0/1:-67.83,-34.9,-96.78:100 +20 4704696 . A ATG . PASS FR=0.5;HP=2;NF=5;NR=3;PP=100.0;SC=ATATGTATATATGTGTGTGTA;TC=30;TR=8 GT:GL:GQ 0/1:-168.25,-105.64,-257.19:100 +20 4706654 . GTGCCATCA G . PASS FR=1.0;HP=2;NF=7;NR=4;PP=100.0;SC=TTACAGGTGTGTGCCATCATG;TC=17;TR=11 GT:GL:GQ 1/1:-236.92,-30.58,-21.39:67 +20 4727159 . C CATTTTATTTT . PASS FR=1.0;HP=1;NF=2;NR=4;PP=100.0;SC=ATAGCATTTGCATTTTATTTT;TC=27;TR=6 GT:GL:GQ 1/1:-510.26,-402.24,-397.15:63 +20 4735780 . T TTTCTTTCTTTCTTTCTTTCTTTCTTTC,C . PASS FR=0.5,0.5;HP=3;NF=0,5;NR=3,16;PP=100.0,100.0;SC=CCTTTCTTTCTTTTCTTTCTT;TC=27;TR=3,21 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 4737530 . T TA . PASS FR=1.0;HP=1;NF=11;NR=14;PP=100.0;SC=TTAAATGTATTGAGGCTCATT;TC=26;TR=25 GT:GL:GQ 1/1:-245.38,-21.97,-3.97:100 +20 4737701 . T TTGA . PASS FR=1.0;HP=1;NF=12;NR=7;PP=100.0;SC=ACTTTCTGTCTTGACCTGTCT;TC=19;TR=19 GT:GL:GQ 1/1:-227.02,-18.69,-5.52:100 +20 4741155 . G GGA . PASS FR=1.0;HP=1;NF=5;NR=11;PP=100.0;SC=AACACACCAGGTGTGTCAAAA;TC=22;TR=16 GT:GL:GQ 1/1:-218.41,-31.08,-15.98:100 +20 4743693 . G GTTAA . PASS FR=1.0;HP=2;NF=6;NR=7;PP=100.0;SC=AGCCCAGGAGGTTAAGTCTGC;TC=16;TR=13 GT:GL:GQ 1/1:-225.23,-59.89,-50.88:75 +20 4743774 . A AAAATAAAT . PASS FR=1.0;HP=5;NF=4;NR=3;PP=100.0;SC=AAAAGGAGAAAAAATAAATAA;TC=16;TR=7 GT:GL:GQ 1/1:-319.93,-209.77,-203.54:78 +20 4748739 . A ACTAT . PASS FR=1.0;HP=1;NF=12;NR=7;PP=100.0;SC=TCTTTCACCAACTATTTTCAC;TC=23;TR=19 GT:GL:GQ 1/1:-501.66,-334.66,-319.16:100 +20 4761877 . T TG . PASS FR=0.5;HP=8;NF=1;NR=4;PP=100.0;SC=ACAGATATTTTGGGGGGGGCA;TC=23;TR=5 GT:GL:GQ 0/1:-97.23,-58.4,-90.76:100 +20 4768475 . A AAGGGACT . PASS FR=1.0;HP=2;NF=7;NR=8;PP=100.0;SC=CAGGGGTCCAAAGGCACCTTA;TC=23;TR=15 GT:GL:GQ 1/1:-372.13,-36.56,-17.94:100 +20 4783543 . CATAT C . PASS FR=0.5;HP=2;NF=1;NR=2;PP=100.0;SC=TATATATATACATATATATAT;TC=23;TR=3 GT:GL:GQ 0/1:-115.71,-29.18,-62.14:100 +20 4794428 . CGT C . PASS FR=0.5;HP=3;NF=3;NR=2;PP=100.0;SC=CAGTGTGTGGCGTGTGTGTGT;TC=28;TR=5 GT:GL:GQ 0/1:-119.46,-68.74,-106.78:100 +20 4796034 . TACC T . PASS FR=0.5;HP=1;NF=7;NR=5;PP=100.0;SC=TATCTGAGGCTACCACCACCC;TC=27;TR=12 GT:GL:GQ 0/1:-222.6,-98.55,-189.77:100 +20 4802486 . G GCC . PASS FR=0.5;HP=2;NF=5;NR=4;PP=100.0;SC=GACTGCCACAGCCTAGGCATC;TC=24;TR=9 GT:GL:GQ 0/1:-135.36,-38.11,-126.44:100 +20 4803072 . CT C . PASS FR=0.5;HP=1;NF=1;NR=5;PP=100.0;SC=GTGCACGCAGCTGTTGAGAGG;TC=15;TR=6 GT:GL:GQ 0/1:-82.81,-37.85,-91.55:100 +20 4823348 . AT A . PASS FR=1.0;HP=8;NF=17;NR=7;PP=100.0;SC=AATATTTTCCATTTTTTTTGA;TC=32;TR=24 GT:GL:GQ 1/1:-298.64,-180.3,-160.97:100 +20 4850186 . GAC G . PASS FR=0.5;HP=1;NF=3;NR=2;PP=49.0;SC=ATCTCCAAATGACACACACAC;TC=34;TR=5 GT:GL:GQ 0/1:-186.75,-165.14,-349.63:96 +20 4880132 . AGCTCAATGCCTTCTGC A . PASS FR=1.0;HP=1;NF=3;NR=4;PP=100.0;SC=CAAACGGCGCAGCTCAATGCC;TC=17;TR=7 GT:GL:GQ 1/1:-255.52,-55.88,-53.61:44 +20 4883735 . G GGA . PASS FR=1.0;HP=1;NF=13;NR=18;PP=100.0;SC=GGTGAAAAGAGTAATTCTAAA;TC=34;TR=31 GT:GL:GQ 1/1:-361.9,-346.05,-342.67:97 +20 4886527 . GA G . PASS FR=0.5;HP=3;NF=5;NR=6;PP=100.0;SC=ACTCTACTGAGAAGAACAGAT;TC=19;TR=11 GT:GL:GQ 0/1:-166.67,-86.72,-123.24:100 +20 4892485 . AATTT A . PASS FR=0.5;HP=1;NF=2;NR=7;PP=100.0;SC=TTTATTTATGAATTTATTTAT;TC=34;TR=9 GT:GL:GQ 0/1:-148.07,-23.75,-121.86:100 +20 4922648 . CTAAACTAACT C . PASS FR=0.5;HP=5;NF=1;NR=10;PP=100.0;SC=TCTATATTTTCTAAACTAACT;TC=33;TR=11 GT:GL:GQ 0/1:-284.06,-37.14,-228.78:100 +20 4942899 . C CA . PASS FR=0.5;HP=7;NF=4;NR=3;PP=100.0;SC=ACCCCCGCCCCAAAAAAACAG;TC=28;TR=7 GT:GL:GQ 0/1:-99.42,-46.78,-95.55:100 +20 4947451 . G GTTTGA . PASS FR=0.5;HP=4;NF=4;NR=4;PP=100.0;SC=ACTTTTGATAGTTTTACACAC;TC=18;TR=8 GT:GL:GQ 0/1:-283.81,-185.62,-217.52:100 +20 4947582 . TG T . PASS FR=0.5;HP=4;NF=9;NR=4;PP=100.0;SC=GATTACATGATGGGGAGCAGG;TC=22;TR=13 GT:GL:GQ 0/1:-139.84,-55.72,-119.49:100 +20 4947775 . T TA . PASS FR=0.5;HP=6;NF=8;NR=4;PP=100.0;SC=GAAATCTAAATAAACACAGGG;TC=24;TR=12 GT:GL:GQ 0/1:-128.76,-21.0,-91.02:100 +20 4949766 . CTT C . PASS FR=0.5;HP=3;NF=8;NR=4;PP=100.0;SC=GAGTTTCCCTCTTGTTACCCA;TC=25;TR=12 GT:GL:GQ 0/1:-147.72,-32.95,-112.56:100 +20 4954109 . G GGACTT . PASS FR=0.5;HP=2;NF=4;NR=8;PP=100.0;SC=ATGGCTGGAAGGACTTAACTA;TC=30;TR=12 GT:GL:GQ 0/1:-203.74,-23.32,-169.48:100 +20 4965192 . C CT . PASS FR=0.5;HP=2;NF=5;NR=3;PP=100.0;SC=GAGCAAGACTCTGTCTCAAAA;TC=26;TR=8 GT:GL:GQ 0/1:-134.47,-59.87,-111.38:100 +20 4969015 . AG A . PASS FR=1.0;HP=8;NF=4;NR=5;PP=100.0;SC=TGGGAAACCGAGGGGGGGCCA;TC=12;TR=9 GT:GL:GQ 1/1:-67.79,-12.99,-5.52:61 +20 4970270 . C CTTAATAT . PASS FR=0.5;HP=1;NF=4;NR=1;PP=100.0;SC=TGCAGTGAGCCATGATCTTGC;TC=22;TR=5 GT:GL:GQ 0/1:-247.44,-164.56,-281.24:100 +20 4972366 . TCA TCACACA,T . PASS FR=0.5,0.5;HP=2;NF=1,0;NR=1,2;PP=100.0,49.0;SC=AGACTCCGTTTCACACACACA;TC=15;TR=2,2 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:97 +20 4979252 . ATGAGG A . PASS FR=0.5;HP=1;NF=5;NR=2;PP=100.0;SC=AAATGAATTAATGAGGTGAGG;TC=24;TR=7 GT:GL:GQ 0/1:-146.48,-63.04,-172.38:100 +20 4985646 . A AAAAT . PASS FR=0.5;HP=4;NF=2;NR=1;PP=100.0;SC=CTCCGTCTCAAAAATAAATAA;TC=22;TR=3 GT:GL:GQ 0/1:-69.57,-20.73,-73.7:100 +20 4987193 . T TTTTA . PASS FR=1.0;HP=3;NF=5;NR=7;PP=100.0;SC=GTAAAAGCCATTTTATTTATT;TC=33;TR=12 GT:GL:GQ 1/1:-198.93,-19.38,-8.29:93 +20 5003823 . C CA . PASS FR=1.0;HP=2;NF=2;NR=1;PP=69.0;SC=CTCAGCCTCCCAGTAGCTGGG;TC=5;TR=3 GT:GL:GQ 1/1:-35.46,-12.52,-9.15:55 +20 5006924 . GTATATATATGTGTA G . PASS FR=0.5;HP=2;NF=3;NR=1;PP=100.0;SC=ATGTATATATGTATATATATG;TC=17;TR=4 GT:GL:GQ 0/1:-102.23,-17.74,-69.04:100 +20 5019857 . C CT . PASS FR=1.0;HP=1;NF=5;NR=1;PP=100.0;SC=CACCCCTGCACTCCAGCCTGG;TC=10;TR=6 GT:GL:GQ 1/1:-78.84,-38.79,-34.59:51 +20 5021323 . T TC . PASS FR=1.0;HP=10;NF=8;NR=5;PP=100.0;SC=CTTTTTTTTTTTCAATGGCAA;TC=18;TR=13 GT:GL:GQ 1/1:-164.3,-19.64,-6.44:82 +20 5021471 . G GA . PASS FR=1.0;HP=1;NF=11;NR=14;PP=100.0;SC=ACATAATGCTGGTTAAAGAGG;TC=33;TR=25 GT:GL:GQ 1/1:-406.51,-306.39,-293.23:100 +20 5033824 . G GTATA . PASS FR=1.0;HP=8;NF=6;NR=6;PP=100.0;SC=CCAAAAAAAAGTATATATATA;TC=19;TR=12 GT:GL:GQ 1/1:-293.31,-92.78,-80.65:100 +20 5034013 . GGCAT G . PASS FR=1.0;HP=1;NF=8;NR=10;PP=100.0;SC=ATGACAGCCAGGCATGGGGGC;TC=24;TR=18 GT:GL:GQ 1/1:-275.61,-34.13,-17.26:100 +20 5044461 . A AAATTTTTAT . PASS FR=1.0;HP=4;NF=13;NR=12;PP=100.0;SC=GTTAACTTGGAAAAATTTCTA;TC=29;TR=25 GT:GL:GQ 1/1:-660.59,-158.53,-137.22:100 +20 5058110 . G GGGGGCT . PASS FR=1.0;HP=2;NF=6;NR=6;PP=100.0;SC=CAACATTTTGGGAGGTGGGTG;TC=14;TR=12 GT:GL:GQ 1/1:-206.1,-87.92,-82.33:69 +20 5062840 . AAAG A . PASS FR=1.0;HP=4;NF=12;NR=4;PP=100.0;SC=AATTTTTTAAAAAGAAGAAGA;TC=21;TR=16 GT:GL:GQ 1/1:-217.23,-55.74,-43.97:99 +20 5079870 . AAATAAATAAATCAATC A . PASS FR=0.5;HP=2;NF=4;NR=6;PP=100.0;SC=ATAAATAAATAAATAAATAAA;TC=24;TR=10 GT:GL:GQ 1/0:-419.18,-202.82,-208.38:27 +20 5094493 . T TA . PASS FR=1.0;HP=1;NF=7;NR=16;PP=100.0;SC=AAAATGAACTTACTACTGGAC;TC=26;TR=23 GT:GL:GQ 1/1:-300.98,-148.38,-131.87:100 +20 5097837 . AC A . PASS FR=1.0;HP=1;NF=15;NR=5;PP=100.0;SC=TAAAGGTTATACGCCTAACTT;TC=25;TR=20 GT:GL:GQ 1/1:-243.65,-32.97,-15.65:100 +20 5100990 . AAG A . PASS FR=1.0;HP=1;NF=10;NR=6;PP=100.0;SC=TTGCAGCCTGAAGAGAGTACA;TC=18;TR=16 GT:GL:GQ 1/1:-198.64,-18.46,-5.29:100 +20 5105482 . C CATTTTAGG . PASS FR=1.0;HP=2;NF=6;NR=11;PP=100.0;SC=GTTCAGACCACATGTTATCCA;TC=22;TR=17 GT:GL:GQ 1/1:-471.45,-181.5,-164.38:100 +20 5118209 . A AT . PASS FR=0.5;HP=8;NF=3;NR=2;PP=100.0;SC=TTTAAGTCTTATTTTTTCAAA;TC=16;TR=5 GT:GL:GQ 0/1:-55.51,-21.15,-68.35:100 +20 5145860 . A AC . PASS FR=0.5;HP=5;NF=6;NR=2;PP=100.0;SC=TTTTTTGGAAACCCCCGTATT;TC=29;TR=8 GT:GL:GQ 0/1:-81.29,-28.9,-130.37:100 +20 5150896 . G GC . PASS FR=0.5;HP=3;NF=2;NR=5;PP=100.0;SC=ACCTCGCTGTGCCCAGAGGAG;TC=17;TR=7 GT:GL:GQ 0/1:-79.22,-17.13,-53.13:100 +20 5156258 . CCT C . PASS FR=0.5093;HP=2;NF=6;NR=6;PP=100.0;SC=ATGGTGAAACCCTGTCTCTAC;TC=16;TR=12 GT:GL:GQ 0/1:-101.9,-26.13,-29.44:17 +20 5156432 . AAAAC A . PASS FR=0.5;HP=3;NF=5;NR=3;PP=100.0;SC=ACTCCATCTCAAAACAAACAA;TC=23;TR=8 GT:GL:GQ 0/1:-98.71,-15.69,-97.38:100 +20 5173014 . C CA . PASS FR=1.0;HP=2;NF=8;NR=13;PP=100.0;SC=GAAGGGGGGTCTAGGAAGCCG;TC=22;TR=21 GT:GL:GQ 1/1:-250.84,-61.97,-47.15:100 +20 5178081 . C CCT . PASS FR=0.5;HP=1;NF=5;NR=6;PP=100.0;SC=AGAGGTCAGCCGTGTCTGCCC;TC=22;TR=11 GT:GL:GQ 0/1:-193.35,-72.27,-102.13:100 +20 5181165 . C CA . PASS FR=0.5;HP=8;NF=1;NR=6;PP=91.0;SC=TTAGACACAACAAAAAAGAGA;TC=22;TR=7 GT:GL:GQ 0/1:-61.45,-29.38,-90.08:100 +20 5187401 . A AC . PASS FR=0.5;HP=6;NF=4;NR=3;PP=100.0;SC=TTTTCATGTCACCCCCGAGGT;TC=17;TR=7 GT:GL:GQ 0/1:-139.03,-104.99,-121.15:73 +20 5187831 . G GAATC . PASS FR=0.5;HP=5;NF=5;NR=3;PP=100.0;SC=TGAAAGGAAAGAAGCATGTTT;TC=22;TR=8 GT:GL:GQ 0/1:-144.73,-26.29,-132.63:100 +20 5192127 . A AATT . PASS FR=0.5;HP=3;NF=2;NR=7;PP=100.0;SC=AATGTGTTAAAATTATATAAG;TC=32;TR=9 GT:GL:GQ 0/1:-228.5,-119.37,-283.27:100 +20 5212592 . TA T . PASS FR=1.0;HP=9;NF=20;NR=10;PP=100.0;SC=CCTGCCATATTAAAAAAAAAC;TC=39;TR=30 GT:GL:GQ 1/1:-191.03,-64.37,-41.93:100 +20 5223122 . TA T . PASS FR=0.5;HP=2;NF=2;NR=4;PP=100.0;SC=GAATAAGACCTAGTATTTGCT;TC=11;TR=6 GT:GL:GQ 0/1:-63.8,-25.4,-69.29:100 +20 5234499 . AAC A . PASS FR=0.5;HP=1;NF=1;NR=1;PP=25.0;SC=GTGCCTTCACAACACACACAC;TC=26;TR=2 GT:GL:GQ 0/1:-75.14,-59.09,-216.84:72 +20 5236854 . A AATTAT . PASS FR=1.0;HP=1;NF=17;NR=9;PP=100.0;SC=AAAAGACATGAATTATCATTA;TC=29;TR=26 GT:GL:GQ 1/1:-427.74,-26.55,-5.07:100 +20 5240296 . CT C . PASS FR=0.5;HP=1;NF=7;NR=6;PP=100.0;SC=AATTGATACACTACAATGGCC;TC=39;TR=13 GT:GL:GQ 0/1:-220.75,-129.27,-297.86:100 +20 5242946 . A AC . PASS FR=0.5;HP=3;NF=6;NR=5;PP=100.0;SC=AGCTGGAACCACTGTTGTGGA;TC=22;TR=11 GT:GL:GQ 0/1:-141.29,-37.29,-109.65:100 +20 5246342 . GC G . PASS FR=0.5;HP=7;NF=6;NR=8;PP=100.0;SC=AACCGAGACAGCCCCCCCTTT;TC=21;TR=14 GT:GL:GQ 0/1:-107.74,-25.34,-35.96:49 +20 5247531 . T TTGCAGTAGAGAAACTCCC . PASS FR=0.5;HP=1;NF=3;NR=5;PP=100.0;SC=TTGCAGGTTATTGCAGTAGAG;TC=31;TR=8 GT:GL:GQ 0/1:-296.8,-101.13,-189.63:100 +20 5251109 . ACTCTCTCTCTCTCTCTCT A . PASS FR=0.5;HP=1;NF=3;NR=2;PP=37.0;SC=CATCCAGTGTACTCTCTCTCT;TC=27;TR=5 GT:GL:GQ 0/1:-322.05,-299.54,-356.33:100 +20 5251154 . G GTGTA . PASS FR=0.5;HP=2;NF=1;NR=4;PP=100.0;SC=CTCTGTGTGTGTGTATGTGTG;TC=19;TR=5 GT:GL:GQ 0/1:-297.98,-257.24,-280.47:100 +20 5256228 . GAAAAAC G . PASS FR=0.5;HP=5;NF=8;NR=3;PP=100.0;SC=CAAATGTTTTGAAAAACAAAA;TC=29;TR=11 GT:GL:GQ 0/1:-159.47,-21.9,-134.38:100 +20 5256836 . CT C . PASS FR=0.5;HP=10;NF=4;NR=7;PP=58.0;SC=TCTCAACTCACTTTTTTTTTT;TC=23;TR=11 GT:GL:GQ 0/1:-145.3,-121.72,-154.45:100 +20 5260631 . G GA . PASS FR=0.5;HP=9;NF=6;NR=2;PP=100.0;SC=TTTAATGAAGGAAAAAAAAAT;TC=25;TR=8 GT:GL:GQ 0/1:-133.97,-86.93,-109.55:100 +20 5261161 . ACT A . PASS FR=0.5;HP=2;NF=9;NR=8;PP=100.0;SC=CTTGAATGAAACTTATCTAAC;TC=33;TR=17 GT:GL:GQ 0/1:-246.04,-189.54,-319.81:100 +20 5275657 . CAAAATAACTATTACAAATAACA C . PASS FR=0.5;HP=6;NF=2;NR=1;PP=100.0;SC=TCAAACATAACAAAATAACTA;TC=27;TR=3 GT:GL:GQ 0/1:-135.83,-52.75,-276.31:100 +20 5277471 . C CCTT . PASS FR=0.5;HP=1;NF=11;NR=5;PP=100.0;SC=GTATCCATGTCCTAGGGTACA;TC=27;TR=16 GT:GL:GQ 0/1:-278.16,-87.4,-130.16:100 +20 5278336 . TA T . PASS FR=0.5;HP=4;NF=3;NR=6;PP=100.0;SC=TTGAACTCTTTAAAAGTTTGA;TC=24;TR=9 GT:GL:GQ 0/1:-132.29,-83.79,-178.99:100 +20 5280465 . TTG T . PASS FR=0.5;HP=4;NF=6;NR=8;PP=100.0;SC=GATGGGGTTTTTGGCCATGTT;TC=30;TR=14 GT:GL:GQ 0/1:-161.14,-49.68,-168.09:100 +20 5280839 . T TATA . PASS FR=0.5;HP=1;NF=9;NR=3;PP=100.0;SC=ACCACAAATGTATAATACAAA;TC=30;TR=12 GT:GL:GQ 0/1:-228.47,-89.38,-201.59:100 +20 5285786 . T TG . PASS FR=0.5;HP=1;NF=3;NR=2;PP=21.0;SC=GGCTAATCAGTTCACTCTAAG;TC=24;TR=5 GT:GL:GQ 0/1:-80.46,-64.62,-184.45:71 +20 5289619 . GA G . PASS FR=0.5;HP=1;NF=9;NR=5;PP=100.0;SC=GAAGATCTAGGATGAAGCTGG;TC=22;TR=14 GT:GL:GQ 0/1:-219.59,-148.82,-190.02:100 +20 5291220 . TGATCA T . PASS FR=0.5;HP=2;NF=6;NR=6;PP=100.0;SC=GTTTAGAACCTGATCAGAGAA;TC=27;TR=12 GT:GL:GQ 0/1:-284.71,-179.16,-294.64:100 +20 5291304 . G GACTTATGGGGAGCTGGGGTATAAATACCCCAGCTCCCTCCT . PASS FR=0.5;HP=1;NF=1;NR=1;PP=100.0;SC=CCTCATCAATGACCTCCCACC;TC=8;TR=2 GT:GL:GQ 0/1:-488.84,-441.13,-506.41:71 +20 5293792 . ATG A . PASS FR=0.5;HP=3;NF=6;NR=12;PP=100.0;SC=TACAATTATTATGTGTCAATT;TC=42;TR=18 GT:GL:GQ 0/1:-201.09,-30.39,-231.82:100 +20 5303337 . CAGCT C . PASS FR=0.5;HP=2;NF=7;NR=7;PP=100.0;SC=AAATGTCACACAGCTAGCTGG;TC=32;TR=14 GT:GL:GQ 0/1:-273.85,-111.21,-258.62:100 +20 5313928 . TA T . PASS FR=0.5;HP=10;NF=9;NR=8;PP=100.0;SC=ATACAGTTGATAAAAAAAAAC;TC=39;TR=17 GT:GL:GQ 0/1:-100.8,-36.94,-107.23:100 +20 5316589 . GT G . PASS FR=1.0;HP=2;NF=7;NR=11;PP=100.0;SC=GAATATCTGGGTAAAATTTAA;TC=22;TR=18 GT:GL:GQ 1/1:-227.4,-66.98,-52.55:100 +20 5320851 . AT A . PASS FR=0.5;HP=6;NF=5;NR=10;PP=100.0;SC=ATCTCAATAGATTTTTTAAAA;TC=39;TR=15 GT:GL:GQ 0/1:-177.77,-103.88,-250.39:100 +20 5323468 . GA G . PASS FR=0.5;HP=10;NF=2;NR=4;PP=85.0;SC=GGCAACAAAAGAAAAAATAGA;TC=23;TR=6 GT:GL:GQ 0/1:-61.27,-31.53,-121.44:100 +20 5326511 . G GT . PASS FR=0.5;HP=9;NF=11;NR=2;PP=100.0;SC=TTGATTCAAAGTTTTTTTTTA;TC=29;TR=13 GT:GL:GQ 0/1:-178.07,-139.61,-153.82:64 +20 5326660 . T TA . PASS FR=0.5;HP=8;NF=4;NR=6;PP=100.0;SC=CTTTATCCTTTAAAAAAAATC;TC=26;TR=10 GT:GL:GQ 0/1:-181.43,-128.15,-159.02:100 +20 5328799 . CA C . PASS FR=1.0;HP=4;NF=10;NR=6;PP=100.0;SC=AACCACCTTCCAAAATGTGGA;TC=20;TR=16 GT:GL:GQ 1/1:-179.33,-21.23,-7.37:100 +20 5351875 . T TACACACAC . PASS FR=0.5;HP=6;NF=1;NR=1;PP=38.0;SC=ATCTTAAAAATACACACACAC;TC=12;TR=2 GT:GL:GQ 0/1:-48.31,-20.86,-63.23:100 +20 5354510 . G GGC . PASS FR=0.5;HP=1;NF=5;NR=5;PP=100.0;SC=CCTCCTCCCTGCAGAGCTCCT;TC=28;TR=10 GT:GL:GQ 0/1:-148.18,-38.3,-173.54:100 +20 5373349 . A AATTT . PASS FR=0.5;HP=6;NF=1;NR=2;PP=96.0;SC=CTAATTTTTTAATTTTTTTTT;TC=20;TR=3 GT:GL:GQ 0/1:-100.6,-64.12,-96.6:100 +20 5390447 . C CA . PASS FR=0.5;HP=6;NF=4;NR=5;PP=100.0;SC=CATTAGCATACAAAAACCATC;TC=26;TR=9 GT:GL:GQ 0/1:-88.65,-28.46,-120.44:100 +20 5408475 . AAAAC A . PASS FR=0.5;HP=4;NF=4;NR=5;PP=100.0;SC=CTCTGTCTCAAAAACAAACAA;TC=29;TR=9 GT:GL:GQ 0/1:-128.94,-29.02,-144.52:100 +20 5410361 . G GA . PASS FR=1.0;HP=9;NF=6;NR=7;PP=100.0;SC=CTGGGTTGGGGAAAAAAAAAG;TC=25;TR=13 GT:GL:GQ 1/1:-119.78,-34.18,-19.33:100 +20 5419440 . CTCCCTGTG C . PASS FR=0.5;HP=3;NF=1;NR=4;PP=100.0;SC=TGTTGTTCCCCTCCCTGTGTC;TC=19;TR=5 GT:GL:GQ 0/1:-128.97,-30.52,-125.82:100 +20 5432204 . A AG . PASS FR=0.5;HP=8;NF=2;NR=3;PP=100.0;SC=AAAGAAAGAGAAAAAAAAAGG;TC=19;TR=5 GT:GL:GQ 0/1:-83.51,-76.05,-116.49:100 +20 5432394 . G GT . PASS FR=1.0;HP=5;NF=9;NR=14;PP=100.0;SC=TTCCTCAATTGAAAAATCTTA;TC=26;TR=23 GT:GL:GQ 1/1:-328.05,-211.91,-196.14:100 +20 5435136 . GAGAAAA G . PASS FR=0.5;HP=3;NF=3;NR=6;PP=44.0;SC=AAAAAAAGGGGAGAAAAAGAA;TC=24;TR=9 GT:GL:GQ 0/1:-190.59,-169.15,-271.82:96 +20 5435153 . A ATTT . PASS FR=0.5;HP=8;NF=4;NR=10;PP=100.0;SC=AGAAAAAAAAATTTTAATGTT;TC=22;TR=14 GT:GL:GQ 0/1:-325.96,-275.2,-333.88:100 +20 5435908 . G GTTAAT . PASS FR=0.5;HP=2;NF=5;NR=2;PP=100.0;SC=ACCAGGCCCAGTTATTTTTTG;TC=16;TR=7 GT:GL:GQ 0/1:-176.12,-112.78,-176.63:100 +20 5443418 . A ACAGGGGCAC . PASS FR=0.5;HP=4;NF=3;NR=1;PP=100.0;SC=GCTTTGTCCCACAGCCTGATG;TC=15;TR=4 GT:GL:GQ 0/1:-94.87,-42.4,-160.11:100 +20 5443724 . C CT . PASS FR=0.5;HP=3;NF=6;NR=4;PP=38.0;SC=GTTACCTTTCCCCTGAGATGC;TC=20;TR=10 GT:GL:GQ 0/1:-163.73,-143.91,-199.73:89 +20 5452897 . G GA . PASS FR=0.5;HP=10;NF=2;NR=2;PP=26.0;SC=TCAGTCAGAAGAAAAAAAATT;TC=15;TR=4 GT:GL:GQ 0/1:-34.37,-17.3,-53.75:77 +20 5460271 . C CA . PASS FR=0.5;HP=10;NF=2;NR=2;PP=67.0;SC=ACCCCTGTCTCAAAAAAAAAA;TC=21;TR=4 GT:GL:GQ 0/1:-56.83,-30.33,-56.83:100 +20 5473577 . A AGT . PASS FR=0.5;HP=2;NF=2;NR=8;PP=100.0;SC=AACTGAGCAGAGTTCCTTTTT;TC=29;TR=10 GT:GL:GQ 0/1:-165.26,-86.94,-217.65:100 +20 5475853 . CTTATTTAT CTTATTTATTTAT,C . PASS FR=0.5,0.5;HP=4;NF=1,1;NR=2,2;PP=100.0,100.0;SC=GAAGGCTCTTCTTATTTATTT;TC=18;TR=3,3 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 5485434 . C CT . PASS FR=0.5001;HP=10;NF=4;NR=1;PP=63.0;SC=TTTTTATCTTCTTTTTTTTCC;TC=9;TR=5 GT:GL:GQ 0/1:-37.99,-12.58,-20.26:36 +20 5518456 . C CG . PASS FR=0.5;HP=7;NF=7;NR=6;PP=100.0;SC=GTGACAAATGCGGGGGGTCTT;TC=27;TR=13 GT:GL:GQ 0/1:-115.32,-28.55,-76.08:100 +20 5546352 . A AAG . PASS FR=1.0;HP=1;NF=13;NR=12;PP=100.0;SC=AAGTAGTCACAAGCTGTGATT;TC=26;TR=25 GT:GL:GQ 1/1:-322.1,-20.79,0.0:100 +20 5596481 . TTATG T . PASS FR=1.0;HP=2;NF=4;NR=4;PP=100.0;SC=TGCTACTGGTTTATGTATGTA;TC=20;TR=8 GT:GL:GQ 1/1:-167.17,-32.77,-22.47:86 +20 5596891 . ATGTGTGTG A . PASS FR=1.0;HP=2;NF=3;NR=4;PP=100.0;SC=AATTTGGGGTATGTGTGTGTG;TC=23;TR=7 GT:GL:GQ 1/1:-241.36,-45.12,-34.38:90 +20 5600458 . A AG . PASS FR=1.0;HP=2;NF=3;NR=3;PP=100.0;SC=TCTTGACCTGAGTGATACACC;TC=16;TR=6 GT:GL:GQ 1/1:-146.08,-65.05,-55.59:79 +20 5613790 . GA G . PASS FR=1.0;HP=4;NF=11;NR=9;PP=100.0;SC=CATGATTTCTGAAAACAAGCT;TC=26;TR=20 GT:GL:GQ 1/1:-222.44,-43.9,-26.57:100 +20 5624959 . C CCTCCTTACCCT . PASS FR=0.5;HP=1;NF=1;NR=1;PP=100.0;SC=AACTTGTCCACCTCCATTACC;TC=28;TR=2 GT:GL:GQ 0/1:-225.26,-176.16,-303.27:100 +20 5627592 . AT A . PASS FR=0.5;HP=6;NF=4;NR=3;PP=100.0;SC=TCTCAAAAAAATAATAAAGTT;TC=19;TR=7 GT:GL:GQ 0/1:-112.89,-28.55,-78.51:100 +20 5629324 . T TTAC . PASS FR=0.5;HP=1;NF=3;NR=3;PP=100.0;SC=ATTATTACTATTATTATTATT;TC=26;TR=6 GT:GL:GQ 1/0:-227.05,-75.82,-72.8:100 +20 5635153 . TGGAATATGAAAGAG T . PASS FR=1.0;HP=2;NF=7;NR=11;PP=100.0;SC=CAAGCCTGTTTGGAATATGAA;TC=27;TR=18 GT:GL:GQ 1/1:-490.0,-56.65,-38.89:100 +20 5635246 . T TTGTGTG,TTGTGTGTG . PASS FR=0.5,0.5;HP=1;NF=2,0;NR=2,3;PP=100.0,100.0;SC=AAAATGAATATTGTGTGTGTG;TC=22;TR=4,3 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 5644716 . GTCTCTCTCTCTC G . PASS FR=1.0;HP=1;NF=1;NR=6;PP=100.0;SC=ATGAGACCTCGTCTCTCTCTC;TC=22;TR=7 GT:GL:GQ 1/1:-261.18,-61.24,-58.02:52 +20 5654462 . C CGTGTGTGTGTGTGT . PASS FR=0.5;HP=1;NF=3;NR=1;PP=100.0;SC=TATACATATACGTGTGTGTGT;TC=16;TR=4 GT:GL:GQ 0/1:-129.11,-28.26,-136.2:100 +20 5654661 . AAAAAAATTTTTTTTGCTT A . PASS FR=0.5;HP=6;NF=7;NR=3;PP=100.0;SC=ATTTTTTGCCAAAAAAATTTT;TC=21;TR=10 GT:GL:GQ 0/1:-264.68,-158.41,-268.38:100 +20 5655925 . ACG A . PASS FR=0.5047;HP=2;NF=4;NR=3;PP=100.0;SC=TTGCATGCGCACGCGCGCACA;TC=34;TR=7 GT:GL:GQ 0/1:-234.34,-106.46,-110.43:20 +20 5674501 . T TTTTG . PASS FR=0.5;HP=4;NF=2;NR=2;PP=100.0;SC=AGATTTAGATTTTTGTTTGTT;TC=22;TR=4 GT:GL:GQ 0/1:-64.3,-21.33,-64.69:100 +20 5691054 . A AC . PASS FR=0.5;HP=6;NF=4;NR=5;PP=100.0;SC=GTATAGTGAGACCCCCCATCT;TC=18;TR=9 GT:GL:GQ 0/1:-137.75,-89.82,-120.86:100 +20 5696589 . AAAG A . PASS FR=0.5;HP=2;NF=3;NR=9;PP=100.0;SC=AGAAAACCATAAAGAAGAGAA;TC=35;TR=12 GT:GL:GQ 0/1:-142.07,-32.31,-238.04:100 +20 5706639 . T TA . PASS FR=0.5;HP=9;NF=5;NR=2;PP=98.0;SC=TTGTCTCAATTAAAAAAAAAT;TC=31;TR=7 GT:GL:GQ 0/1:-60.75,-27.2,-75.24:100 +20 5707109 . A ATTTTTCCC . PASS FR=0.5;HP=7;NF=2;NR=2;PP=100.0;SC=TGCCCAGCTGATTTTTTTAAA;TC=15;TR=4 GT:GL:GQ 0/1:-95.63,-40.43,-104.52:100 +20 5740635 . T TAC,TACAC . PASS FR=0.5,0.5;HP=2;NF=3,1;NR=7,4;PP=100.0,100.0;SC=TGTATTTTTATACACACACAC;TC=23;TR=10,5 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 5747768 . ATTTTC ATTTTCTTTTC,A . PASS FR=0.5,0.5;HP=4;NF=1,4;NR=1,1;PP=100.0,100.0;SC=CTCCATTCACATTTTCTTTTC;TC=17;TR=2,5 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 5754003 . A AT . PASS FR=0.5;HP=9;NF=6;NR=4;PP=100.0;SC=AGAGAGTGGAATTTTTTTTTG;TC=33;TR=10 GT:GL:GQ 0/1:-69.42,-30.04,-87.94:100 +20 5762289 . A AT . PASS FR=0.5;HP=8;NF=2;NR=3;PP=95.0;SC=CTGCCCAGCTATTTTTTTGTA;TC=13;TR=5 GT:GL:GQ 0/1:-43.82,-10.94,-28.53:79 +20 5767540 . AGATCATTT A . PASS FR=1.0;HP=2;NF=5;NR=6;PP=100.0;SC=TTCTCAAGCCAGATCATTTGA;TC=16;TR=11 GT:GL:GQ 1/1:-333.85,-224.08,-215.75:69 +20 5768941 . AGTT A . PASS FR=0.5;HP=1;NF=4;NR=9;PP=100.0;SC=TATATTCAGTAGTTGTTGTTT;TC=21;TR=13 GT:GL:GQ 0/1:-159.07,-13.83,-29.97:73 +20 5771896 . CAAATAAATA C . PASS FR=1.0;HP=3;NF=11;NR=5;PP=100.0;SC=AAAATCTTAGCAAATAAATAA;TC=26;TR=16 GT:GL:GQ 1/1:-433.86,-58.29,-43.98:62 +20 5778212 . AAAG A . PASS FR=1.0;HP=5;NF=6;NR=12;PP=100.0;SC=CCATCTCAAAAAAGAAGAAGA;TC=23;TR=18 GT:GL:GQ 1/1:-251.53,-37.12,-21.87:100 +20 5781503 . GCGTA G . PASS FR=1.0;HP=1;NF=9;NR=6;PP=100.0;SC=GTGTGTGTGTGCGTATGTCTA;TC=23;TR=15 GT:GL:GQ 1/1:-450.31,-256.77,-243.2:93 +20 5788895 . C CAGCCTGGGTGACAG . PASS FR=1.0;HP=1;NF=3;NR=6;PP=100.0;SC=CACTGCACTCCAGCAAGACTC;TC=11;TR=9 GT:GL:GQ 1/1:-304.26,-23.03,-12.43:73 +20 5798352 . CTGGCATTA C . PASS FR=0.5;HP=1;NF=1;NR=3;PP=100.0;SC=CTGGCTGTGCCTGGCATTATG;TC=29;TR=4 GT:GL:GQ 1/0:-390.33,-302.72,-305.99:100 +20 5798359 . T TGC . PASS FR=0.5;HP=1;NF=6;NR=6;PP=100.0;SC=TGCCTGGCATTATGACTTAGT;TC=26;TR=12 GT:GL:GQ 0/1:-390.33,-366.98,-362.46:100 +20 5807781 . T TG . PASS FR=1.0;HP=3;NF=7;NR=3;PP=100.0;SC=TGAGTGGGCGTGGCACCCACA;TC=10;TR=10 GT:GL:GQ 1/1:-98.15,-11.06,-4.14:57 +20 5808542 . C CT . PASS FR=1.0;HP=3;NF=16;NR=16;PP=100.0;SC=ATCATTCACTCTTGTGGGTAG;TC=33;TR=32 GT:GL:GQ 1/1:-408.08,-203.57,-182.32:100 +20 5808967 . T TGTGTAGTAG . PASS FR=1.0;HP=2;NF=7;NR=18;PP=100.0;SC=CTTAGAACAGTGTGATAGGTC;TC=28;TR=25 GT:GL:GQ 1/1:-678.96,-93.79,-70.92:100 +20 5809144 . TTGA T . PASS FR=1.0;HP=1;NF=10;NR=16;PP=100.0;SC=GAGTCATTTCTTGATGACTCC;TC=34;TR=26 GT:GL:GQ 1/1:-408.43,-70.02,-46.73:100 +20 5809747 . CCTGGGCTCA C . PASS FR=1.0;HP=1;NF=13;NR=15;PP=100.0;SC=GGTCTCAACTCCTGGGCTCAA;TC=33;TR=28 GT:GL:GQ 1/1:-583.71,-71.8,-56.82:48 +20 5810527 . G GA . PASS FR=1.0;HP=9;NF=9;NR=9;PP=100.0;SC=TCTTCTTTAGGAAAAAAAAAC;TC=26;TR=18 GT:GL:GQ 1/1:-296.92,-216.99,-203.12:100 +20 5820132 . A AAGATAGAT,AAGATAGATAGAT . PASS FR=0.5,0.5;HP=2;NF=4,2;NR=2,6;PP=100.0,100.0;SC=ATTAGATAGAAAGATAGATAG;TC=36;TR=6,8 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 5822610 . A AAAG . PASS FR=0.5;HP=2;NF=4;NR=6;PP=100.0;SC=GACTATGGAGAAAGAGAACAT;TC=30;TR=10 GT:GL:GQ 0/1:-160.25,-33.5,-176.54:100 +20 5830758 . C CAATAATAAT . PASS FR=1.0;HP=2;NF=2;NR=2;PP=100.0;SC=GACCCCGTCTCAATAATAATA;TC=8;TR=4 GT:GL:GQ 1/1:-112.77,-19.78,-14.93:60 +20 5848219 . C CAAAAT . PASS FR=1.0;HP=7;NF=10;NR=13;PP=100.0;SC=ATTAAACACTCAAAAAAATAA;TC=29;TR=23 GT:GL:GQ 1/1:-431.75,-125.0,-103.09:100 +20 5848530 . A AAT . PASS FR=1.0;HP=1;NF=13;NR=10;PP=100.0;SC=ATATATATAGAATATATATAT;TC=33;TR=23 GT:GL:GQ 1/1:-409.72,-328.74,-317.3:96 +20 5850230 . A AT . PASS FR=1.0;HP=6;NF=1;NR=1;PP=100.0;SC=TAATTTTTGCATTTTTTGTTT;TC=22;TR=2 GT:GL:GQ 1/1:-134.01,-105.23,-98.33:86 +20 5854908 . A AATTTTATTTT . PASS FR=1.0;HP=3;NF=3;NR=7;PP=100.0;SC=CATATACTTTAATTTTATTTT;TC=28;TR=10 GT:GL:GQ 1/1:-352.01,-27.1,-12.2:100 +20 5856355 . CTAAA C . PASS FR=1.0;HP=4;NF=2;NR=2;PP=100.0;SC=GACCCTATTTCTAAATAAATA;TC=15;TR=4 GT:GL:GQ 1/1:-57.0,-6.23,-2.76:42 +20 5860647 . TGAG T . PASS FR=1.0;HP=4;NF=8;NR=6;PP=100.0;SC=AGAAAGAAAATGAGGAGCGAA;TC=18;TR=14 GT:GL:GQ 1/1:-182.28,-15.91,-4.13:99 +20 5879792 . CAA C . PASS FR=1.0;HP=10;NF=14;NR=15;PP=100.0;SC=ACAATAACATCAAAAAAAAAA;TC=39;TR=29 GT:GL:GQ 1/1:-170.66,-28.34,-5.76:100 +20 5898748 . GAA G . PASS FR=1.0;HP=2;NF=5;NR=5;PP=100.0;SC=AGCCAAGATTGAACTCCATTG;TC=13;TR=10 GT:GL:GQ 1/1:-132.95,-97.25,-91.93:66 +20 5900669 . G GC . PASS FR=0.5;HP=1;NF=4;NR=2;PP=100.0;SC=CATGACAGATGCATTTCCCTG;TC=15;TR=6 GT:GL:GQ 0/1:-72.42,-12.46,-72.17:100 +20 5911588 . TCA T . PASS FR=0.5;HP=2;NF=6;NR=1;PP=100.0;SC=CTGGCAAATCTCACACACACA;TC=19;TR=7 GT:GL:GQ 0/1:-115.11,-26.04,-76.51:100 +20 5923828 . CAGAGAGAATACATGCTTA C . PASS FR=0.5;HP=1;NF=3;NR=5;PP=100.0;SC=TGTATTCTTCCAGAGAGAATA;TC=22;TR=8 GT:GL:GQ 0/1:-297.99,-115.43,-361.46:100 +20 5928403 . T TA . PASS FR=0.5;HP=2;NF=3;NR=2;PP=100.0;SC=ACCTAGGTGCTTTGAAACACT;TC=18;TR=5 GT:GL:GQ 0/1:-52.7,-18.59,-121.61:100 +20 5930573 . A AG . PASS FR=0.5;HP=3;NF=4;NR=4;PP=100.0;SC=ACAGGTGATTAGGGTGTGGAG;TC=26;TR=8 GT:GL:GQ 0/1:-121.38,-46.04,-144.61:100 +20 5932104 . C CT . PASS FR=0.5;HP=2;NF=5;NR=6;PP=100.0;SC=TCTTTATTTACTTGTATACTT;TC=20;TR=11 GT:GL:GQ 0/1:-138.34,-48.83,-107.16:100 +20 5934084 . GGTGT GGT,G . PASS FR=0.5,0.5;HP=3;NF=1,2;NR=3,2;PP=100.0,100.0;SC=TCTCATGAGGGGTGTGTGTGT;TC=32;TR=4,4 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 5938650 . A AT . PASS FR=0.5;HP=3;NF=3;NR=6;PP=100.0;SC=TTTTCCTTAAATTTCTTTTTT;TC=36;TR=9 GT:GL:GQ 0/1:-182.01,-137.8,-289.15:100 +20 5939638 . G GT . PASS FR=0.5;HP=7;NF=8;NR=7;PP=100.0;SC=ATTAGTGTCTGTTTTTTACCT;TC=37;TR=15 GT:GL:GQ 0/1:-244.24,-166.31,-240.23:100 +20 5946414 . TTTTACTTCTTAGAGTATGC T . PASS FR=0.5;HP=3;NF=2;NR=4;PP=100.0;SC=TAAGTGCTGGTTTTACTTCTT;TC=34;TR=6 GT:GL:GQ 0/1:-213.07,-102.23,-466.92:100 +20 5948421 . CATT C . PASS FR=0.5;HP=1;NF=6;NR=8;PP=100.0;SC=CTAGTTGAGTCATTGTAGGGA;TC=25;TR=14 GT:GL:GQ 0/1:-180.5,-26.28,-114.93:100 +20 5958367 . TATA T . PASS FR=0.5;HP=2;NF=1;NR=12;PP=100.0;SC=TAAATCAGGATATAATAATAC;TC=28;TR=13 GT:GL:GQ 0/1:-168.03,-21.02,-138.69:100 +20 5958971 . AT A . PASS FR=0.5;HP=8;NF=7;NR=10;PP=100.0;SC=ATTTGTGATCATTTTTTTTAA;TC=36;TR=17 GT:GL:GQ 0/1:-190.15,-122.85,-187.1:100 +20 5972522 . TC T . PASS FR=0.5;HP=2;NF=3;NR=8;PP=100.0;SC=AGTTTTCATCTCTTCAGCTTC;TC=35;TR=11 GT:GL:GQ 0/1:-138.05,-67.95,-261.75:100 +20 5974701 . T TTTTG . PASS FR=0.5;HP=6;NF=12;NR=8;PP=100.0;SC=TTAGCTTGATTTTTTTCAGCT;TC=40;TR=20 GT:GL:GQ 0/1:-282.01,-46.13,-199.33:100 +20 5979818 . CTA C . PASS FR=0.5;HP=1;NF=4;NR=2;PP=100.0;SC=CACACACACACTATATAGAGT;TC=23;TR=6 GT:GL:GQ 0/1:-148.54,-97.12,-217.3:100 +20 5979861 . T TAG . PASS FR=0.5;HP=1;NF=1;NR=6;PP=100.0;SC=GTATATATACTAGTGTGTATA;TC=23;TR=7 GT:GL:GQ 0/1:-206.33,-148.87,-246.11:100 +20 5979921 . ATATATATTATATATAC A . PASS FR=0.5;HP=2;NF=2;NR=3;PP=100.0;SC=TCTATAAAGTATATATATTAT;TC=15;TR=5 GT:GL:GQ 0/1:-143.6,-52.22,-114.36:100 +20 5980041 . CTATA C . PASS FR=0.5;HP=1;NF=6;NR=4;PP=100.0;SC=TATATATACACTATATATAGT;TC=35;TR=10 GT:GL:GQ 0/1:-130.29,-26.74,-240.87:100 +20 5982833 . CTT C . PASS FR=0.5;HP=5;NF=2;NR=5;PP=100.0;SC=GCAATGCACTCTTTTGCTTAC;TC=22;TR=7 GT:GL:GQ 0/1:-154.07,-87.47,-142.2:100 +20 5984269 . CTT C . PASS FR=0.5;HP=5;NF=6;NR=7;PP=100.0;SC=AATCCTTTCTCTTTTCACGTT;TC=31;TR=13 GT:GL:GQ 0/1:-161.92,-47.17,-162.99:100 +20 5986173 . A ATAATT . PASS FR=0.5;HP=3;NF=9;NR=5;PP=100.0;SC=AAAATTTAAAATAAAAACTAT;TC=31;TR=14 GT:GL:GQ 0/1:-275.95,-89.41,-205.85:100 +20 5997120 . T TGTGTGA . PASS FR=0.5;HP=2;NF=2;NR=2;PP=100.0;SC=TGTGTGTGTGTGAGTTTTCTT;TC=20;TR=4 GT:GL:GQ 0/1:-128.89,-41.21,-139.69:100 +20 5999929 . G GTTA . PASS FR=0.5;HP=5;NF=7;NR=6;PP=100.0;SC=CTTTTGACCAGTTTTTAAGTT;TC=34;TR=13 GT:GL:GQ 0/1:-145.72,-26.46,-192.55:100 +20 6013970 . C CG . PASS FR=0.5;HP=4;NF=4;NR=1;PP=100.0;SC=TTAGTAGAGACGGGGTTTCAC;TC=18;TR=5 GT:GL:GQ 0/1:-76.07,-30.4,-70.18:100 +20 6019907 . TTGTGTGTGTGTGTGTG T . PASS FR=0.5;HP=2;NF=1;NR=1;PP=100.0;SC=GCAGTTTTGTTTGTGTGTGTG;TC=27;TR=2 GT:GL:GQ 0/1:-146.39,-89.3,-170.65:100 +20 6052252 . CT C . PASS FR=1.0;HP=2;NF=5;NR=9;PP=100.0;SC=ATCCCCAGCCCTTCCTGGCTT;TC=21;TR=14 GT:GL:GQ 1/1:-166.42,-15.59,-2.3:100 +20 6054897 . T TG . PASS FR=1.0;HP=3;NF=4;NR=7;PP=100.0;SC=TGGGCAAGGCTGGGAAGGAAG;TC=16;TR=11 GT:GL:GQ 1/1:-170.6,-33.42,-22.33:90 +20 6056042 . T TA . PASS FR=1.0;HP=2;NF=8;NR=17;PP=100.0;SC=ACATCAAGTATATACGGTACA;TC=29;TR=25 GT:GL:GQ 1/1:-301.61,-48.56,-28.73:100 +20 6163149 . CATTT C . PASS FR=1.0;HP=1;NF=11;NR=10;PP=100.0;SC=AACCTCTGAGCATTTATTTCA;TC=24;TR=21 GT:GL:GQ 1/1:-265.47,-16.86,-0.92:100 +20 6169158 . C CT . PASS FR=1.0;HP=1;NF=11;NR=21;PP=100.0;SC=AATTGCAAGACCTTAAGAACC;TC=38;TR=32 GT:GL:GQ 1/1:-377.27,-55.22,-28.98:100 +20 6186522 . G GC . PASS FR=1.0;HP=6;NF=10;NR=10;PP=100.0;SC=TAAAAAATGTGTTTTTAATCA;TC=21;TR=20 GT:GL:GQ 1/1:-309.42,-177.87,-163.8:100 +20 6186628 . C CA . PASS FR=0.5;HP=3;NF=5;NR=12;PP=100.0;SC=TTCATCACCTCAAACATTTAT;TC=33;TR=17 GT:GL:GQ 0/1:-173.72,-30.0,-131.16:100 +20 6189872 . C CCTT . PASS FR=0.5;HP=1;NF=1;NR=10;PP=100.0;SC=CTTCCTCCCTCCTTTCCCTCT;TC=26;TR=11 GT:GL:GQ 0/1:-217.8,-111.28,-184.18:100 +20 6190124 . C CTT . PASS FR=0.5;HP=2;NF=2;NR=4;PP=92.0;SC=TCCTGCCTCTCTCTTTCCTCC;TC=16;TR=6 GT:GL:GQ 0/1:-129.79,-96.5,-151.55:100 +20 6190921 . A AT . PASS FR=0.5;HP=2;NF=5;NR=4;PP=100.0;SC=CCATAAGTACATTAAAAAAAA;TC=24;TR=9 GT:GL:GQ 0/1:-121.19,-85.53,-104.7:86 +20 6202427 . C CT . PASS FR=1.0;HP=6;NF=6;NR=13;PP=100.0;SC=GAAATCCTTTCTTTCCCCCTA;TC=20;TR=19 GT:GL:GQ 1/1:-165.74,-14.09,-0.92:100 +20 6211244 . GT G . PASS FR=0.5;HP=10;NF=5;NR=6;PP=100.0;SC=TTGATTTCCAGTTTTTTTTTT;TC=33;TR=11 GT:GL:GQ 0/1:-97.67,-63.78,-117.4:100 +20 6217057 . T TA . PASS FR=0.5;HP=2;NF=4;NR=7;PP=100.0;SC=TCTCTACAACTAACCATCAAC;TC=33;TR=11 GT:GL:GQ 0/1:-151.16,-56.84,-189.09:100 +20 6227811 . TTTTTCTTTTC T . PASS FR=0.5;HP=6;NF=3;NR=2;PP=100.0;SC=TATACTGCTTTTTTTCTTTTC;TC=28;TR=5 GT:GL:GQ 0/1:-171.28,-80.47,-279.48:100 +20 6228139 . TA T . PASS FR=0.5;HP=8;NF=6;NR=7;PP=100.0;SC=ACTGGTTGTTTAAAAAAAACA;TC=27;TR=13 GT:GL:GQ 0/1:-101.53,-37.68,-71.46:100 +20 6229361 . G GTA . PASS FR=0.5;HP=2;NF=7;NR=5;PP=100.0;SC=TGCTTTTGAAGTATACCTTTA;TC=28;TR=12 GT:GL:GQ 0/1:-168.24,-128.05,-263.48:100 +20 6232719 . T TA . PASS FR=1.0;HP=4;NF=10;NR=14;PP=100.0;SC=CGTACCTCAATAAGTACTGTT;TC=26;TR=24 GT:GL:GQ 1/1:-246.13,-19.86,-1.84:100 +20 6235756 . T TA . PASS FR=0.5;HP=10;NF=4;NR=2;PP=51.0;SC=ATATAAAAGTTAAAAAAAAAA;TC=22;TR=6 GT:GL:GQ 0/1:-59.89,-37.16,-67.02:100 +20 6242610 . GCAGACC G . PASS FR=0.5;HP=1;NF=7;NR=3;PP=100.0;SC=ACTGGGAGAGGCAGACCCACC;TC=27;TR=10 GT:GL:GQ 0/1:-180.6,-46.65,-174.85:100 +20 6245977 . A AT . PASS FR=0.5;HP=6;NF=7;NR=5;PP=100.0;SC=CTTAGTTTTCATTTTTTAGCA;TC=29;TR=12 GT:GL:GQ 0/1:-149.75,-66.4,-136.45:100 +20 6258987 . CT C . PASS FR=0.5;HP=6;NF=4;NR=10;PP=100.0;SC=GTATGTTCTTCTTTTGTCCCC;TC=34;TR=14 GT:GL:GQ 0/1:-185.84,-121.45,-268.81:100 +20 6272029 . T TA . PASS FR=0.5;HP=3;NF=4;NR=9;PP=100.0;SC=TAATAGCTGGTAAACCCAACC;TC=39;TR=13 GT:GL:GQ 0/1:-151.49,-56.11,-226.05:100 +20 6293812 . G GA . PASS FR=1.0;HP=7;NF=15;NR=12;PP=100.0;SC=GGAAAAGAAAGAAAAGAAAAA;TC=35;TR=27 GT:GL:GQ 1/1:-393.29,-260.24,-242.04:100 +20 6296458 . T TA . PASS FR=1.0;HP=8;NF=5;NR=17;PP=100.0;SC=GAAAGCACAATTTTTTTTTCT;TC=39;TR=22 GT:GL:GQ 1/1:-284.36,-128.48,-104.71:100 +20 6304002 . A ATG . PASS FR=1.0;HP=2;NF=6;NR=5;PP=100.0;SC=ATATATATATATATGTGTGTG;TC=30;TR=11 GT:GL:GQ 1/1:-328.64,-256.07,-245.8:100 +20 6307745 . GTA G . PASS FR=1.0;HP=3;NF=4;NR=7;PP=100.0;SC=TATATATGTTGTATATATATA;TC=16;TR=11 GT:GL:GQ 1/1:-114.94,-15.25,-6.19:75 +20 6307849 . TATATATATGGTATATATATC T . PASS FR=0.5034;HP=1;NF=2;NR=2;PP=100.0;SC=ATATATGGTGTATATATATGG;TC=11;TR=4 GT:GL:GQ 0/1:-108.24,-70.67,-74.96:21 +20 6307908 . TG T . PASS FR=0.5;HP=2;NF=3;NR=4;PP=100.0;SC=ATATCATATATGGTGTATATA;TC=21;TR=7 GT:GL:GQ 0/1:-127.13,-92.55,-148.07:100 +20 6308166 . G GTA,GTATA . PASS FR=0.5,0.5;HP=2;NF=2,1;NR=0,3;PP=86.0,100.0;SC=GTGTGTGTGTGTATATATATA;TC=16;TR=2,4 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 6308279 . G GTA . PASS FR=1.0;HP=2;NF=5;NR=4;PP=100.0;SC=TATATATGGTGTATATATATA;TC=12;TR=9 GT:GL:GQ 1/1:-129.24,-92.18,-87.75:54 +20 6308322 . GTGTGTGTATATATATATATATATA G . PASS FR=1.0;HP=2;NF=1;NR=2;PP=88.0;SC=ATGTATGTGTGTGTGTGTATA;TC=16;TR=3 GT:GL:GQ 1/1:-227.62,-141.11,-132.99:40 +20 6319701 . G GGT . PASS FR=0.5;HP=1;NF=1;NR=5;PP=100.0;SC=GAGTCTATGTGGTGTGTGTGT;TC=19;TR=6 GT:GL:GQ 0/1:-99.44,-38.84,-115.36:100 +20 6345189 . G GT . PASS FR=0.5;HP=8;NF=8;NR=3;PP=100.0;SC=ATTGTTTTCAGTTTTTTTTCT;TC=31;TR=11 GT:GL:GQ 0/1:-92.31,-34.03,-73.88:100 +20 6346428 . C CTCTGTATG . PASS FR=0.5;HP=4;NF=5;NR=1;PP=45.0;SC=TATTCTCTATCTTTAATTTAA;TC=31;TR=6 GT:GL:GQ 0/1:-234.84,-191.03,-405.18:86 +20 6349738 . TAC T . PASS FR=0.5;HP=1;NF=2;NR=1;PP=86.0;SC=GACACATACGTACACACACAC;TC=15;TR=3 GT:GL:GQ 0/1:-95.85,-65.71,-99.67:100 +20 6364214 . ACTCTT A . PASS FR=0.5;HP=3;NF=5;NR=10;PP=100.0;SC=TCTTTACAAAACTCTTCTAGA;TC=36;TR=15 GT:GL:GQ 0/1:-210.3,-34.68,-236.21:100 +20 6373382 . TCTACCTAC T . PASS FR=1.0;HP=1;NF=9;NR=8;PP=100.0;SC=ATTTCCTCTATCTACCTACCT;TC=38;TR=17 GT:GL:GQ 1/1:-510.97,-41.39,-20.72:100 +20 6384835 . TACACACAC TAC,T . PASS FR=0.5,0.5;HP=2;NF=2,2;NR=7,1;PP=100.0,51.0;SC=GGATGACACATACACACACAC;TC=32;TR=9,3 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 6390974 . TAA T . PASS FR=1.0;HP=3;NF=19;NR=16;PP=100.0;SC=CTGCCTACCTTAAACACATAA;TC=42;TR=35 GT:GL:GQ 1/1:-376.88,-34.87,-5.52:100 +20 6401100 . A AT . PASS FR=1.0;HP=9;NF=15;NR=9;PP=100.0;SC=TTCAAAAAGCATTTTTTTTTG;TC=34;TR=24 GT:GL:GQ 1/1:-148.27,-28.49,-8.51:100 +20 6406758 . C CT . PASS FR=1.0;HP=7;NF=4;NR=16;PP=100.0;SC=TCTCTCCCCTCTTTTTTCTCC;TC=31;TR=20 GT:GL:GQ 1/1:-235.73,-83.65,-66.42:100 +20 6410888 . CAGGGCTTGGCCCTGGAGT C . PASS FR=0.5;HP=1;NF=2;NR=4;PP=100.0;SC=TTCTCCACTCCAGGGCTTGGC;TC=24;TR=6 GT:GL:GQ 0/1:-188.53,-25.15,-199.92:100 +20 6426272 . T TCTC,TTTC . PASS FR=0.5,0.5;HP=1;NF=11,6;NR=5,5;PP=100.0,100.0;SC=TTAAAAATTATCTCATTTCCT;TC=28;TR=16,11 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 6428681 . CA C . PASS FR=0.5009;HP=2;NF=4;NR=5;PP=100.0;SC=GGTGGGCCACCAACAGTGTCT;TC=20;TR=9 GT:GL:GQ 0/1:-312.7,-243.18,-248.77:27 +20 6430456 . A AT . PASS FR=0.5;HP=10;NF=10;NR=6;PP=100.0;SC=TAATATTTAAATTTTTTTTTT;TC=35;TR=16 GT:GL:GQ 0/1:-143.54,-83.39,-119.6:100 +20 6438083 . TA T . PASS FR=0.5;HP=7;NF=2;NR=8;PP=100.0;SC=AACAGATATATAAAAAATGCT;TC=21;TR=10 GT:GL:GQ 0/1:-86.86,-14.54,-78.87:100 +20 6441903 . C CT . PASS FR=0.5;HP=9;NF=10;NR=11;PP=100.0;SC=AAATTAAATACTTTTTTTTTA;TC=43;TR=21 GT:GL:GQ 0/1:-221.48,-121.14,-137.31:73 +20 6443155 . TTA T . PASS FR=0.5005;HP=5;NF=2;NR=2;PP=100.0;SC=AAACAGTTTTTTATATATATA;TC=14;TR=4 GT:GL:GQ 0/1:-162.1,-119.94,-126.23:30 +20 6443546 . G GTA . PASS FR=0.5;HP=2;NF=1;NR=2;PP=100.0;SC=ATATATATGTGTATATATATA;TC=14;TR=3 GT:GL:GQ 0/1:-156.72,-103.24,-116.61:61 +20 6447485 . C CA . PASS FR=0.5;HP=3;NF=4;NR=13;PP=100.0;SC=TTTTGAATTTCAAATATTTTC;TC=38;TR=17 GT:GL:GQ 0/1:-255.09,-105.01,-200.26:100 +20 6448179 . TAATAA T . PASS FR=0.5;HP=5;NF=3;NR=4;PP=100.0;SC=TATCTCGAAATAATAAAATAA;TC=36;TR=7 GT:GL:GQ 0/1:-185.97,-96.1,-256.82:100 +20 6456952 . ATT AT,A . PASS FR=0.5,0.5;HP=10;NF=7,8;NR=4,5;PP=100.0,100.0;SC=CAATGATGTCATTTTTTTTTT;TC=27;TR=11,13 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 6458185 . GA G . PASS FR=0.5;HP=10;NF=11;NR=4;PP=100.0;SC=AAATAAAAATGAAAAAAAAAA;TC=48;TR=15 GT:GL:GQ 0/1:-255.96,-202.85,-273.91:100 +20 6459292 . G GA . PASS FR=0.5;HP=10;NF=2;NR=6;PP=49.0;SC=TATCCTATCAGAAAAAAAAAC;TC=30;TR=8 GT:GL:GQ 0/1:-83.74,-61.52,-111.1:99 +20 6473904 . TAGGTGAAATTTTCTTTTCTGTTTTTTTAA T . PASS FR=0.5;HP=1;NF=2;NR=1;PP=100.0;SC=TCCCTAATTCTAGGTGAAATT;TC=25;TR=3 GT:GL:GQ 0/1:-202.85,-99.33,-502.66:100 +20 6481086 . T TTGTC . PASS FR=1.0;HP=2;NF=7;NR=5;PP=100.0;SC=TTGTTCCTCTTTGTCAGAGCA;TC=21;TR=12 GT:GL:GQ 1/1:-268.34,-19.84,-4.6:100 +20 6488178 . CTTG C . PASS FR=1.0;HP=2;NF=13;NR=13;PP=100.0;SC=AAGCTACTTGCTTGTTGTTGA;TC=32;TR=26 GT:GL:GQ 1/1:-335.98,-26.27,-4.81:100 +20 6520175 . C CTT . PASS FR=1.0;HP=3;NF=12;NR=17;PP=100.0;SC=TTACTTAAGACTTTCTATTGA;TC=35;TR=29 GT:GL:GQ 1/1:-362.42,-32.47,-7.59:100 +20 6524976 . GACTAC G . PASS FR=1.0;HP=2;NF=12;NR=13;PP=100.0;SC=CTATGAAATTGACTACACTAC;TC=32;TR=25 GT:GL:GQ 1/1:-403.49,-65.81,-45.47:100 +20 6531643 . GT G . PASS FR=1.0;HP=4;NF=17;NR=11;PP=100.0;SC=CAGATAAAGTGTTTAATTCAT;TC=31;TR=28 GT:GL:GQ 1/1:-281.56,-58.08,-38.11:100 +20 6544912 . CAGAT CAGATAGATAGATAGAT,C . PASS FR=0.5,0.5;HP=1;NF=1,1;NR=4,1;PP=100.0,100.0;SC=TATTCACTGCCAGATAGATAG;TC=24;TR=5,2 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 6548435 . A AAGAG . PASS FR=1.0;HP=2;NF=5;NR=8;PP=100.0;SC=GAGAAACAGAAAGAGAGAGAG;TC=33;TR=13 GT:GL:GQ 1/1:-316.58,-47.12,-29.98:100 +20 6549783 . C CTT . PASS FR=1.0;HP=9;NF=3;NR=10;PP=100.0;SC=TGGTCCAGGCCTTTTTTTTTG;TC=24;TR=13 GT:GL:GQ 1/1:-145.52,-61.65,-53.62:66 +20 6553955 . TTATA T . PASS FR=1.0;HP=3;NF=12;NR=6;PP=100.0;SC=ATTTTACATTTTATATATATA;TC=30;TR=18 GT:GL:GQ 1/1:-272.92,-35.6,-20.34:100 +20 6563467 . CTAGGTAGGTAGG C . PASS FR=1.0;HP=1;NF=3;NR=6;PP=100.0;SC=ACATGCATTCCTAGGTAGGTA;TC=22;TR=9 GT:GL:GQ 1/1:-367.98,-150.14,-139.95:85 +20 6565618 . CGTGT C . PASS FR=1.0;HP=2;NF=4;NR=3;PP=100.0;SC=TGTGTGTGTTCGTGTGTGTGT;TC=19;TR=7 GT:GL:GQ 1/1:-220.73,-126.68,-119.85:85 +20 6565651 . G GTA . PASS FR=0.5286;HP=2;NF=3;NR=2;PP=100.0;SC=GTGTATATGTGTATATATATA;TC=16;TR=5 GT:GL:GQ 0/1:-258.66,-193.34,-195.57:12 +20 6585232 . C CT . PASS FR=1.0;HP=2;NF=15;NR=16;PP=100.0;SC=ACAAACCCATCTCCTAAAATC;TC=33;TR=31 GT:GL:GQ 1/1:-314.24,-29.76,-6.91:100 +20 6590623 . C CCTGCTT . PASS FR=1.0;HP=1;NF=17;NR=14;PP=100.0;SC=AGAGTTATCTCCTGCTGTCAT;TC=32;TR=31 GT:GL:GQ 1/1:-527.33,-38.07,-14.51:100 +20 6603635 . C CA . PASS FR=1.0;HP=4;NF=12;NR=8;PP=100.0;SC=TTAGTCAAGCCAAAATCACAT;TC=27;TR=20 GT:GL:GQ 1/1:-325.58,-214.53,-199.34:100 +20 6609608 . CTT C . PASS FR=1.0;HP=3;NF=10;NR=9;PP=100.0;SC=TGTTTTGATGCTTTCTGGCTT;TC=27;TR=19 GT:GL:GQ 1/1:-576.75,-576.47,-576.51:100 +20 6609611 . T TGGAGGAGGA . PASS FR=1.0;HP=2;NF=9;NR=9;PP=100.0;SC=TTTGATGCTTTCTGGCTTGGA;TC=23;TR=18 GT:GL:GQ 1/1:-576.75,-311.9,-294.35:100 +20 6644452 . C CTGTAG . PASS FR=1.0;HP=1;NF=14;NR=16;PP=100.0;SC=ATAAAAGGCACTGTAGCATAG;TC=35;TR=30 GT:GL:GQ 1/1:-563.91,-35.77,-9.44:100 +20 6647434 . A ATC . PASS FR=1.0;HP=2;NF=4;NR=14;PP=100.0;SC=GGATACTGAGATTCTAAGTAG;TC=21;TR=18 GT:GL:GQ 1/1:-241.28,-23.07,-7.83:100 +20 6655343 . T TG . PASS FR=1.0;HP=6;NF=6;NR=9;PP=100.0;SC=AGTCTAAAGATTTTTTTCTGG;TC=18;TR=15 GT:GL:GQ 1/1:-141.83,-27.31,-14.91:95 +20 6655876 . GTATATA GTA,G . PASS FR=0.5,0.5;HP=1;NF=8,2;NR=11,1;PP=100.0,58.0;SC=TACATATATAGTATATATATA;TC=31;TR=19,3 GT:GL:GQ 1/2:-1.0,-1.0,-1.0:100 +20 6664331 . C CTG . PASS FR=1.0;HP=5;NF=5;NR=10;PP=100.0;SC=GGTTTAAAAACTGTGTGTGTG;TC=30;TR=15 GT:GL:GQ 1/1:-232.49,-35.13,-29.16:74 +20 6668238 . CT C . PASS FR=1.0;HP=10;NF=7;NR=15;PP=100.0;SC=ACTGGAGAAACTTTTTTTTTT;TC=30;TR=22 GT:GL:GQ 1/1:-332.94,-279.88,-269.29:89 +20 6677392 . CTGTGTG C . PASS FR=0.5;HP=2;NF=1;NR=6;PP=100.0;SC=GTGTGTGGCCCTGTGTGTGTG;TC=24;TR=7 GT:GL:GQ 0/1:-156.67,-56.12,-128.5:100 +20 6687137 . CAT C . PASS FR=1.0;HP=2;NF=12;NR=13;PP=100.0;SC=ATAAGATCCACATGAGACAAT;TC=26;TR=25 GT:GL:GQ 1/1:-279.85,-22.16,-4.14:100 +20 6690400 . T TG . PASS FR=1.0;HP=2;NF=22;NR=8;PP=100.0;SC=TTAATACATTTGTATGCCCTG;TC=31;TR=30 GT:GL:GQ 1/1:-315.1,-40.57,-19.1:100 +20 6694813 . GAA G . PASS FR=1.0;HP=6;NF=5;NR=4;PP=100.0;SC=AAGAAAGAAAGAAAGAGAAAG;TC=13;TR=9 GT:GL:GQ 1/1:-119.78,-18.28,-9.43:64 +20 6717401 . G GA . PASS FR=1.0;HP=10;NF=14;NR=6;PP=100.0;SC=CTCTCTTAAGGAAAAAAAAAA;TC=27;TR=20 GT:GL:GQ 1/1:-134.21,-33.86,-20.0:100 +20 6723994 . A AAC . PASS FR=1.0;HP=4;NF=10;NR=3;PP=100.0;SC=CACATACAAAAACACACACAC;TC=23;TR=13 GT:GL:GQ 1/1:-174.48,-22.71,-13.76:74 +20 6746236 . C CTTAT . PASS FR=0.5;HP=2;NF=2;NR=4;PP=100.0;SC=CTGGAGACTACTTATTTATTT;TC=23;TR=6 GT:GL:GQ 0/1:-115.46,-26.87,-109.86:100 +20 6759758 . A AAT . PASS FR=0.5;HP=2;NF=2;NR=3;PP=100.0;SC=TAAATACATAAATATATATAT;TC=21;TR=5 GT:GL:GQ 0/1:-98.2,-23.97,-51.3:100 +20 6765134 . A AACAC . PASS FR=0.5;HP=1;NF=2;NR=5;PP=100.0;SC=TTGAGAATCTAACACACACAC;TC=25;TR=7 GT:GL:GQ 0/1:-145.56,-56.64,-151.12:100 diff --git a/tests/tabix_data/vcf/6.vcf b/tests/tabix_data/vcf/6.vcf new file mode 100644 index 0000000..fa039b1 --- /dev/null +++ b/tests/tabix_data/vcf/6.vcf @@ -0,0 +1,278 @@ +##fileformat=VCFv4.1 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FILTER= +##FILTER= +##fileDate=20110531 +##reference=ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/human_g1k_v37.fasta.gz +##source=EricBanksValidationQC;fromGertonLunterValidationSelection +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT HG00127 HG00128 HG00136 HG00137 HG00138 HG00139 HG00152 HG00156 HG00234 HG00235 HG00237 HG00242 HG00244 HG00262 HG01055 HG01079 NA19138 NA18974 NA18523 NA12717 NA19209 NA18577 NA18973 NA18943 NA12873 NA18623 NA18622 NA18948 NA19171 NA19204 NA06994 NA18563 NA18547 NA18861 NA18608 NA18995 NA10851 NA18976 NA18603 NA19200 HG01204 HG01191 HG01101 HG00146 HG00306 NA18985 HG00160 HG00635 HG00372 HG00357 HG00634 NA18541 NA18950 NA19759 HG00351 HG00257 HG00118 HG00336 HG00448 HG01354 NA18609 HG00428 HG00326 NA11894 NA18956 HG00173 HG00117 NA11893 HG01251 HG01441 HG01437 HG00182 HG00330 HG01060 HG00329 NA18960 NA18856 NA07346 NA18871 NA19057 NA18868 NA18636 NA12830 NA19007 NA18910 NA18874 NA19056 NA19064 NA19066 NA18487 NA18642 NA19236 NA07056 NA18637 NA19235 NA19309 NA19311 NA19334 NA19346 NA19347 NA19372 NA19376 NA19383 NA19384 NA19394 NA19428 NA19430 NA19451 NA19466 NA19313 NA19321 NA19324 NA19332 NA19390 NA19436 NA19439 NA19440 NA19463 NA19470 NA19471 NA19472 NA19676 NA19660 NA19661 NA19663 NA19722 NA19725 NA19728 NA19729 NA19731 NA19749 NA19755 NA19756 NA19758 NA19770 NA19773 NA19777 NA19780 NA19783 NA20525 NA20589 NA20765 NA20802 NA20804 NA18544 NA18602 NA18546 NA18610 NA18957 NA18615 NA18616 NA19010 NA18638 NA18639 NA18627 NA19072 NA18630 NA19074 NA19080 NA19081 NA19083 NA19085 NA19088 NA20287 NA19835 NA20276 NA19818 NA20278 NA20282 NA20342 NA20296 NA20314 NA20346 NA19712 NA19198 NA19108 NA18934 NA18916 NA18907 NA18917 NA06989 NA12058 NA12341 NA12546 NA12489 HG01197 NA18983 NA11843 NA11892 NA12749 NA12282 NA12751 NA18959 NA19331 NA19453 NA20537 NA12046 NA20515 NA20516 NA20521 NA20524 NA20528 NA20759 NA20768 NA20769 NA20774 NA20775 NA20783 NA20787 NA20790 NA20800 NA20819 NA20812 NA20505 NA20530 NA20540 NA20538 NA20581 NA20815 NA20544 NA20810 NA20807 NA20816 NA20504 NA20753 NA20502 NA12342 NA19150 NA19468 NA20336 NA19395 NA19257 NA19360 NA19700 NA18867 NA20317 NA18968 NA19107 HG00111 HG00108 NA19077 NA19684 NA18511 NA12044 NA19382 NA19457 NA18933 NA18923 NA18965 HG00141 NA20341 NA18740 HG00537 HG00346 HG01173 HG00702 HG00313 HG00150 NA18612 HG00339 NA12273 HG00250 NA18593 NA18621 HG00478 HG00251 HG01070 NA19160 HG00479 HG00608 NA18573 HG00375 NA19248 NA19093 HG01170 HG00534 HG01171 HG01522 NA18624 HG00683 HG01521 NA19005 NA20412 NA18971 HG00446 NA12748 HG00530 HG00690 HG01356 HG01516 NA20532 HG00344 HG00328 NA18542 HG00254 HG00321 HG00577 HG00656 HG00342 HG00524 HG00650 HG00557 HG00319 HG00457 HG00125 HG00578 HG00543 HG00638 HG00171 HG00699 HG00595 HG00187 HG00704 HG00533 HG00596 HG00268 HG01083 HG00651 HG01133 HG00671 HG00327 HG01148 HG00246 HG00672 HG00556 HG00436 HG00554 NA18633 NA20344 NA11993 NA07037 NA11930 HG01366 HG01389 HG00620 NA19740 HG00190 HG00419 NA18535 HG01495 NA18592 HG01497 HG00174 HG01140 NA12287 HG00689 HG01550 HG00334 HG01375 HG00637 NA18507 HG01113 NA18550 NA19129 HG01551 HG01462 HG00331 NA12413 HG01456 HG01360 HG00708 HG01350 HG00684 NA19099 HG00284 NA12399 NA12286 NA12777 HG00277 HG00266 NA19985 HG00353 HG01102 NA07347 NA07051 NA19900 NA18984 NA07048 HG00640 HG01066 NA12812 HG01174 HG01188 +20 669442 . TG T 99 PASS SEQUENCING.AC=101;CallSetAC=116,128,155,72,71;CallSetAC2=2,2,2,2,2;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=7;HU=G;IH=1;TR=7;TU=G;Set=SAMTOOLS;SEQUENOM.AC=54 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 676148 . A AC 99 PASS SEQUENCING.AC=3;CallSetAC=0,0,3,0,0;CallSetAC2=0,0,1,0,0;Groups=DINDEL;HR=3;HU=A;IH=0;TR=6;TU=AAG;Set=DINDEL;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 719486 . C CT 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,2,1,2;CallSetAC2=0,0,1,1,1;Groups=DINDEL,OX,SAMTOOLS;HR=2;HU=C;IH=0;TR=2;TU=C;Set=OX;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 890696 . C CAT 99 PASS SEQUENCING.AC=6;CallSetAC=8,7,0,6,9;CallSetAC2=1,2,0,2,2;Groups=BC,BI,OX,SAMTOOLS;HR=3;HU=C;IH=0;TR=3;TU=C;Set=OX;SEQUENOM.AC=6 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1102516 . CT C 99 PASS SEQUENCING.AC=6;CallSetAC=0,7,11,4,7;CallSetAC2=0,0,2,0,0;Groups=BI,DINDEL,OX,SAMTOOLS;HR=3;HU=T;IH=0;TR=3;TU=T;Set=SAMTOOLS;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1149576 . CT C 99 PASS SEQUENCING.AC=2;CallSetAC=0,3,2,2,0;CallSetAC2=0,1,1,1,0;Groups=BI,DINDEL,OX;HR=5;HU=T;IH=0;TR=5;TU=T;Set=DINDEL;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1195706 . AAG A 99 PASS SEQUENCING.AC=273;CallSetAC=0,569,0,0,4;CallSetAC2=0,8,0,0,0;Groups=BI,SAMTOOLS;HR=3;HU=A;IH=0;TR=7;TU=AAG;Set=SAMTOOLS;SEQUENOM.AC=334 GT 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 1/1 1/1 0/1 0/0 0/0 1/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/0 1/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 . 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 1/1 1/1 0/1 0/0 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 1/1 0/0 0/1 1/1 0/0 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 1/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 1/1 +20 1342549 . A AAGAT 99 PASS SEQUENCING.AC=7;CallSetAC=8,6,12,8,7;CallSetAC2=0,0,2,0,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=2;HU=A;IH=0;TR=2;TU=A;Set=OX;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1366475 . CT C 99 PASS SEQUENCING.AC=12;CallSetAC=0,0,12,0,0;CallSetAC2=0,0,1,0,0;Groups=DINDEL;HR=2;HU=T;IH=0;TR=2;TU=T;Set=DINDEL;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1550416 . C CT 99 PASS SEQUENCING.AC=28;CallSetAC=32,0,0,0,0;CallSetAC2=1,0,0,0,0;Groups=BC;HR=2;HU=T;IH=0;TR=2;TU=T;Set=BC;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1655540 . AT A 99 PASS SEQUENCING.AC=4;CallSetAC=7,5,4,4,4;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=3;HU=A;IH=0;TR=3;TU=A;Set=DINDEL;SEQUENOM.AC=4 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 2889034 . AAAAT A 99 PASS SEQUENCING.AC=8;CallSetAC=10,9,10,7,8;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=5;HU=A;IH=0;TR=5;TU=A;Set=BC;SEQUENOM.AC=6 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 3203741 . CT C 99 PASS SEQUENCING.AC=5;CallSetAC=12,5,9,6,6;CallSetAC2=2,1,0,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=7;HU=C;IH=1;TR=7;TU=C;Set=SAMTOOLS;SEQUENOM.AC=4 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 3700705 . CTTTGGG C 99 PASS SEQUENCING.AC=3;CallSetAC=4,0,0,0,0;CallSetAC2=1,0,0,0,0;Groups=BC;HR=3;HU=T;IH=0;TR=7;TU=CTT;Set=BC;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 4037626 . TC T 99 TOO_MANY_ALT_ALLELES SEQUENCING.AC=1;CallSetAC=2,0,0,0,0;CallSetAC2=1,0,0,0,0;Groups=BC;HR=3;HU=C;IH=0;TR=3;TU=C;Set=BC;SEQUENOM.AC=194 GT 0/1 0/1 0/0 0/0 0/0 1/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 . 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/0 1/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 +20 4210074 . G GA 99 PASS SEQUENCING.AC=1124;CallSetAC=159,1498,819,1501,0;CallSetAC2=0,11,5,8,0;Groups=BC,BI,DINDEL,OX;HR=5;HU=G;IH=0;TR=5;TU=G;Set=BC;SEQUENOM.AC=565 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 0/0 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 0/0 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 0/1 0/0 0/1 1/1 0/0 1/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/0 1/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 . 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 . 1/1 1/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 +20 4363519 . CATT C 99 PASS SEQUENCING.AC=15;CallSetAC=18,20,15,14,16;CallSetAC2=0,1,0,0,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=1;TU=A;Set=SAMTOOLS;SEQUENOM.AC=7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 4366806 . CAAAT C 99 PASS SEQUENCING.AC=2;CallSetAC=0,1,44,1,4;CallSetAC2=0,0,1,0,0;Groups=BI,DINDEL,OX,SAMTOOLS;HR=3;HU=A;IH=0;TR=3;TU=A;Set=BI;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 4641550 . CCTTGA C 99 PASS SEQUENCING.AC=3;CallSetAC=0,0,13,4,3;CallSetAC2=0,0,2,1,1;Groups=DINDEL,OX,SAMTOOLS;HR=2;HU=C;IH=0;TR=2;TU=C;Set=SAMTOOLS;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 5105482 . C CATTTTAGG 99 PASS SEQUENCING.AC=150;CallSetAC=165,256,230,156,127;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=4;TU=AC;Set=OX;SEQUENOM.AC=101 GT 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 0/0 . 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 5289619 . GA G 99 PASS SEQUENCING.AC=968;CallSetAC=1106,1033,956,1020,1090;CallSetAC2=9,10,9,9,9;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=2;HU=G;IH=0;TR=2;TU=G;Set=DINDEL;SEQUENOM.AC=377 GT 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/0 1/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 1/1 1/1 0/0 1/1 0/0 1/1 0/0 1/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 1/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 . 0/0 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/0 1/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/0 1/1 0/0 0/0 0/1 0/0 +20 5416109 . CA C 99 PASS SEQUENCING.AC=5;CallSetAC=0,7,6,5,6;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=3;HU=A;IH=0;TR=3;TU=A;Set=BI;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 5432262 . AGT A 99 PASS SEQUENCING.AC=8;CallSetAC=9,10,9,8,9;CallSetAC2=1,1,2,0,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=G;IH=0;TR=7;TU=GT;Set=DINDEL;SEQUENOM.AC=4 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 5724449 . T TC 99 PASS SEQUENCING.AC=15;CallSetAC=0,0,15,0,0;CallSetAC2=0,0,1,0,0;Groups=DINDEL;HR=4;HU=T;IH=0;TR=4;TU=T;Set=DINDEL;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 6877907 . CA C 99 PASS SEQUENCING.AC=2;CallSetAC=0,2,3,2,4;CallSetAC2=0,1,2,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=2;HU=A;IH=0;TR=2;TU=A;Set=OX;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 6969412 . CAAAGAAT C 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,4,1,1;CallSetAC2=0,0,1,0,0;Groups=DINDEL,OX,SAMTOOLS;HR=3;HU=A;IH=0;TR=3;TU=A;Set=OX;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7229260 . T TA 99 PASS SEQUENCING.AC=4;CallSetAC=0,3,0,5,5;CallSetAC2=0,1,0,1,1;Groups=BI,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=1;TU=A;Set=BI;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7239075 . AG A 99 PASS SEQUENCING.AC=6;CallSetAC=0,6,8,7,6;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=3;HU=G;IH=0;TR=3;TU=G;Set=OX;SEQUENOM.AC=5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7942727 . A AC 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,0,0,1;CallSetAC2=0,0,0,0,1;Groups=SAMTOOLS;HR=2;HU=C;IH=0;TR=2;TU=C;Set=SAMTOOLS;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7950562 . C CT 99 PASS SEQUENCING.AC=5;CallSetAC=0,6,7,4,5;CallSetAC2=0,1,2,0,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=1;HU=T;IH=0;TR=4;TU=AC;Set=BI;SEQUENOM.AC=4 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 8195466 . C CT 99 PASS SEQUENCING.AC=6;CallSetAC=14,3,9,6,7;CallSetAC2=1,0,0,0,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=6;HU=T;IH=1;TR=6;TU=T;Set=OX;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 8233352 . TACTC T 99 PASS SEQUENCING.AC=146;CallSetAC=167,156,155,119,140;CallSetAC2=1,1,0,0,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=2;HU=T;IH=0;TR=2;TU=T;Set=SAMTOOLS;SEQUENOM.AC=56 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 +20 8504000 . TAG T 99 PASS SEQUENCING.AC=11;CallSetAC=16,10,39,10,13;CallSetAC2=1,1,0,0,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=2;HU=T;IH=0;TR=4;TU=AG;Set=BI;SEQUENOM.AC=5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 9231138 . AT A 99 PASS SEQUENCING.AC=11;CallSetAC=0,0,11,0,0;CallSetAC2=0,0,1,0,0;Groups=DINDEL;HR=4;HU=T;IH=0;TR=7;TU=AT;Set=DINDEL;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 9921724 . AAAGT A 99 PASS SEQUENCING.AC=10;CallSetAC=12,15,22,11,12;CallSetAC2=0,1,0,0,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=3;HU=A;IH=0;TR=3;TU=A;Set=DINDEL;SEQUENOM.AC=11 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 9925738 . T TG 99 PASS SEQUENCING.AC=2;CallSetAC=3,3,3,3,3;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=2;HU=T;IH=0;TR=2;TU=T;Set=OX;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 10090376 . T TG 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,0,0,2;CallSetAC2=0,0,0,0,1;Groups=SAMTOOLS;HR=3;HU=T;IH=0;TR=3;TU=T;Set=SAMTOOLS;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 11229169 . T TA 99 PASS SEQUENCING.AC=4;CallSetAC=0,5,0,4,0;CallSetAC2=0,1,0,1,0;Groups=BI,OX;HR=6;HU=A;IH=1;TR=6;TU=A;Set=OX;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 11511920 . AC A 99 PASS SEQUENCING.AC=3;CallSetAC=0,4,4,4,3;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=3;HU=C;IH=0;TR=3;TU=C;Set=SAMTOOLS;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 11893900 . ATTAG A 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,4,1,1;CallSetAC2=0,0,2,0,0;Groups=DINDEL,OX,SAMTOOLS;HR=2;HU=T;IH=0;TR=7;TU=ATT;Set=OX;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12021825 . A AG 99 PASS SEQUENCING.AC=11;CallSetAC=14,10,15,11,13;CallSetAC2=1,0,0,0,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=G;IH=0;TR=1;TU=G;Set=BI;SEQUENOM.AC=5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12063752 . CTT C 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,5,2,2;CallSetAC2=0,0,1,1,1;Groups=DINDEL,OX,SAMTOOLS;HR=2;HU=T;IH=0;TR=6;TU=CT;Set=DINDEL;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12094344 . TCAGGAGGC T 99 PASS SEQUENCING.AC=29;CallSetAC=37,59,27,15,33;CallSetAC2=1,2,1,1,2;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=3;HU=T;IH=0;TR=3;TU=T;Set=SAMTOOLS;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12114989 . CTA C 99 PASS SEQUENCING.AC=3;CallSetAC=0,4,4,3,4;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=1;HU=T;IH=0;TR=1;TU=T;Set=BI;SEQUENOM.AC=4 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12371546 . GACA G 99 PASS SEQUENCING.AC=20;CallSetAC=27,23,20,17,22;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=7;TU=AAC;Set=SAMTOOLS;SEQUENOM.AC=10 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12512723 . G GTT 99 PASS SEQUENCING.AC=13;CallSetAC=15,16,27,14,13;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=3;HU=T;IH=0;TR=3;TU=T;Set=SAMTOOLS;SEQUENOM.AC=6 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12634463 . TGA T 99 PASS SEQUENCING.AC=182;CallSetAC=208,0,0,0,0;CallSetAC2=1,0,0,0,0;Groups=BC;HR=2;HU=T;IH=0;TR=2;TU=T;Set=BC;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12692743 . TTATC T 99 PASS SEQUENCING.AC=10;CallSetAC=0,12,61,10,10;CallSetAC2=0,0,1,0,0;Groups=BI,DINDEL,OX,SAMTOOLS;HR=3;HU=T;IH=0;TR=3;TU=T;Set=SAMTOOLS;SEQUENOM.AC=8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12837095 . G GA 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,0,0,1;CallSetAC2=0,0,0,0,1;Groups=SAMTOOLS;HR=1;HU=T;IH=0;TR=1;TU=T;Set=SAMTOOLS;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12928028 . TG T 99 PASS SEQUENCING.AC=22;CallSetAC=0,32,0,15,0;CallSetAC2=0,1,0,1,0;Groups=BI,OX;HR=6;HU=T;IH=1;TR=6;TU=T;Set=BI;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13003323 . GGGA G 99 PASS SEQUENCING.AC=2;CallSetAC=0,3,5,3,3;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=4;HU=G;IH=0;TR=7;TU=AGG;Set=DINDEL;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13128894 . CT C 99 PASS SEQUENCING.AC=27;CallSetAC=31,29,29,26,27;CallSetAC2=0,1,0,0,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=4;HU=C;IH=0;TR=4;TU=C;Set=OX;SEQUENOM.AC=10 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 +20 13287841 . CAT C 99 TOO_MANY_ALT_ALLELES SEQUENCING.AC=36;CallSetAC=0,64,0,38,18;CallSetAC2=0,1,0,0,0;Groups=BI,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=1;TU=A;Set=BI;SEQUENOM.AC=626 GT 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 0/0 0/1 0/1 . 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 0/0 0/1 1/1 1/1 0/1 . 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 . 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 +20 13365589 . T TG 99 PASS SEQUENCING.AC=9;CallSetAC=11,9,9,8,11;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=3;HU=G;IH=0;TR=3;TU=G;Set=BI;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13566260 rs78090544 AAATTG A 99 TOO_MANY_ALT_ALLELES SEQUENCING.AC=6;CallSetAC=0,161,6,5,0;CallSetAC2=0,2,0,0,0;Groups=BI,DINDEL,OX;HR=3;HU=A;IH=0;TR=3;TU=A;Set=OX;SEQUENOM.AC=390 GT 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 1/1 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/0 0/1 0/0 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 1/1 0/1 . 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 1/1 0/0 0/1 0/1 1/1 1/1 1/1 0/0 0/1 1/1 0/0 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/1 1/1 0/0 0/0 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/1 1/1 0/0 1/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 1/1 1/1 0/0 0/0 0/1 1/1 0/1 0/0 0/0 +20 13685184 . AT A 99 PASS SEQUENCING.AC=1;CallSetAC=0,2,10,2,2;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=2;HU=T;IH=0;TR=2;TU=T;Set=BI;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13716193 . GAGAA G 99 PASS SEQUENCING.AC=2;CallSetAC=0,3,0,0,3;CallSetAC2=0,1,0,0,1;Groups=BI,SAMTOOLS;HR=1;HU=A;IH=0;TR=6;TU=AG;Set=SAMTOOLS;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13926445 . TA T 99 PASS SEQUENCING.AC=7;CallSetAC=0,0,7,0,0;CallSetAC2=0,0,1,0,0;Groups=DINDEL;HR=2;HU=A;IH=0;TR=2;TU=A;Set=DINDEL;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13960028 . TC T 99 TOO_MANY_ALT_ALLELES SEQUENCING.AC=8;CallSetAC=10,0,0,0,0;CallSetAC2=1,0,0,0,0;Groups=BC;HR=3;HU=T;IH=0;TR=3;TU=T;Set=BC;SEQUENOM.AC=188 GT 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 . 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 . . 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 . 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 +20 14159734 . T TA 99 PASS SEQUENCING.AC=1;CallSetAC=0,1,1,3,1;CallSetAC2=0,0,0,1,0;Groups=BI,DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=1;TU=A;Set=DINDEL;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 14287634 . AGT A 99 PASS SEQUENCING.AC=2;CallSetAC=0,0,0,0,3;CallSetAC2=0,0,0,0,1;Groups=SAMTOOLS;HR=3;HU=A;IH=0;TR=5;TU=GT;Set=SAMTOOLS;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 14383135 . TA T 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,15,1,1;CallSetAC2=0,0,1,0,0;Groups=DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=6;TU=ATC;Set=OX;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 14669226 . G GA 99 AMBIGUOUS_SEQUENOM_CALLS SEQUENCING.AC=268;CallSetAC=306,304,274,234,282;CallSetAC2=0,1,2,0,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=3;HU=A;IH=0;TR=3;TU=A;Set=OX;SEQUENOM.AC=121 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 +20 14697473 . TTC T 99 PASS SEQUENCING.AC=17;CallSetAC=20,22,17,15,16;CallSetAC2=0,1,0,0,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=2;HU=T;IH=0;TR=2;TU=T;Set=BC;SEQUENOM.AC=9 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 14983337 . AGCC A 99 PASS SEQUENCING.AC=3;CallSetAC=0,4,0,0,0;CallSetAC2=0,1,0,0,0;Groups=BI;HR=6;HU=A;IH=1;TR=6;TU=A;Set=BI;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15037520 . A AG 99 PASS SEQUENCING.AC=6;CallSetAC=0,0,6,0,0;CallSetAC2=0,0,1,0,0;Groups=DINDEL;HR=1;HU=G;IH=0;TR=1;TU=G;Set=DINDEL;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15141272 . T TC 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,0,0,1;CallSetAC2=0,0,0,0,1;Groups=SAMTOOLS;HR=2;HU=C;IH=0;TR=2;TU=C;Set=SAMTOOLS;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15189597 . GA G 99 TOO_MANY_ALT_ALLELES SEQUENCING.AC=5;CallSetAC=6,0,0,0,0;CallSetAC2=1,0,0,0,0;Groups=BC;HR=1;HU=A;IH=0;TR=1;TU=A;Set=BC;SEQUENOM.AC=311 GT 1/1 0/1 0/0 0/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/0 1/1 1/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 0/1 . 0/1 0/0 0/1 1/1 0/0 0/0 0/1 1/1 0/0 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 1/1 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/1 . 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 1/1 0/1 0/1 1/1 0/0 1/1 0/0 0/0 0/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 1/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 1/1 . 1/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 +20 15265098 . TG T 99 PASS SEQUENCING.AC=31;CallSetAC=27,79,0,41,4;CallSetAC2=1,1,0,1,0;Groups=BC,BI,OX,SAMTOOLS;HR=6;HU=T;IH=1;TR=6;TU=T;Set=BC;SEQUENOM.AC=125 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/1 +20 15410763 . TGA T 99 PASS SEQUENCING.AC=54;CallSetAC=55,68,57,57,56;CallSetAC2=1,2,0,1,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=G;IH=0;TR=1;TU=G;Set=SAMTOOLS;SEQUENOM.AC=29 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15543319 . AG A 99 PASS SEQUENCING.AC=11;CallSetAC=13,12,10,12,14;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=3;HU=G;IH=0;TR=3;TU=G;Set=BC;SEQUENOM.AC=7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 15550845 . TG T 99 PASS SEQUENCING.AC=50;CallSetAC=58,58,56,47,53;CallSetAC2=2,2,2,1,2;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=2;HU=T;IH=0;TR=7;TU=GTT;Set=BC;SEQUENOM.AC=34 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15703503 . TG T 99 TOO_MANY_ALT_ALLELES SEQUENCING.AC=9;CallSetAC=11,0,0,0,0;CallSetAC2=1,0,0,0,0;Groups=BC;HR=4;HU=T;IH=0;TR=4;TU=T;Set=BC;SEQUENOM.AC=87 GT 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 . 0/0 0/0 0/1 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/1 0/0 0/1 0/0 . 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 . 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15871330 . AG A 99 PASS SEQUENCING.AC=1;CallSetAC=2,2,2,2,2;CallSetAC2=0,0,1,0,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=3;HU=A;IH=0;TR=3;TU=A;Set=BC;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16016504 . TA T 99 TOO_MANY_ALT_ALLELES SEQUENCING.AC=17;CallSetAC=4,36,0,18,0;CallSetAC2=0,1,0,0,0;Groups=BC,BI,OX;HR=1;HU=A;IH=0;TR=1;TU=A;Set=OX;SEQUENOM.AC=578 GT 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 1/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 . 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/0 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 1/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 +20 16192114 . AT A 99 INCORRECT_SEQUENOM_CALLS SEQUENCING.AC=45;CallSetAC=52,49,48,42,48;CallSetAC2=3,2,3,2,3;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=3;HU=A;IH=0;TR=4;TU=CT;Set=BC;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16259934 . C CAA 99 PASS SEQUENCING.AC=1;CallSetAC=0,2,0,0,2;CallSetAC2=0,1,0,0,1;Groups=BI,SAMTOOLS;HR=1;HU=T;IH=0;TR=4;TU=CT;Set=BI;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16312599 . CTA C 99 PASS SEQUENCING.AC=5;CallSetAC=0,6,5,3,6;CallSetAC2=0,1,0,0,0;Groups=BI,DINDEL,OX,SAMTOOLS;HR=1;HU=T;IH=0;TR=1;TU=T;Set=BI;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16723642 . GGTT G 99 PASS SEQUENCING.AC=9;CallSetAC=11,11,9,9,11;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=2;HU=G;IH=0;TR=2;TU=G;Set=BI;SEQUENOM.AC=6 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16747221 . CA C 99 TOO_MANY_ALT_ALLELES SEQUENCING.AC=1;CallSetAC=1,0,0,0,0;CallSetAC2=1,0,0,0,0;Groups=BC;HR=1;HU=A;IH=0;TR=1;TU=A;Set=BC;SEQUENOM.AC=473 GT 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/0 1/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 1/1 1/1 0/0 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 1/1 0/0 1/1 0/0 1/1 0/1 0/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 0/0 1/1 0/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 0/0 1/1 0/0 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 . 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/0 0/1 1/1 0/0 0/1 1/1 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/0 1/1 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 +20 16813850 . C CA 99 PASS SEQUENCING.AC=10;CallSetAC=12,12,11,7,8;CallSetAC2=1,1,3,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=5;HU=A;IH=0;TR=5;TU=A;Set=SAMTOOLS;SEQUENOM.AC=7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 17250858 . T TC 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,0,0,1;CallSetAC2=0,0,0,0,1;Groups=SAMTOOLS;HR=1;HU=C;IH=0;TR=4;TU=CT;Set=SAMTOOLS;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 17331332 . TA T 99 TOO_MANY_ALT_ALLELES SEQUENCING.AC=18;CallSetAC=0,0,0,19,0;CallSetAC2=0,0,0,1,0;Groups=OX;HR=2;HU=T;IH=0;TR=2;TU=T;Set=OX;SEQUENOM.AC=682 GT 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 . 0/1 . 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 0/1 0/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 +20 17473782 . TGC T 99 PASS SEQUENCING.AC=2;CallSetAC=0,3,4,2,3;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=2;HU=T;IH=0;TR=2;TU=T;Set=BI;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 17607627 . A AGT 99 PASS SEQUENCING.AC=1;CallSetAC=0,2,2,2,2;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=1;HU=G;IH=0;TR=4;TU=AG;Set=SAMTOOLS;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 17753474 . C CA 99 PASS SEQUENCING.AC=3;CallSetAC=0,0,3,0,0;CallSetAC2=0,0,1,0,0;Groups=DINDEL;HR=1;HU=A;IH=0;TR=4;TU=AC;Set=DINDEL;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 18417481 . AC A 99 PASS SEQUENCING.AC=8;CallSetAC=9,0,0,0,0;CallSetAC2=1,0,0,0,0;Groups=BC;HR=6;HU=A;IH=1;TR=6;TU=A;Set=BC;SEQUENOM.AC=17 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 18445795 . AAG A 99 PASS SEQUENCING.AC=15;CallSetAC=20,20,15,14,16;CallSetAC2=1,1,0,0,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=3;HU=A;IH=0;TR=4;TU=AG;Set=DINDEL;SEQUENOM.AC=5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 18520672 . A ATT 99 PASS SEQUENCING.AC=85;CallSetAC=98,0,0,0,0;CallSetAC2=1,0,0,0,0;Groups=BC;HR=4;HU=A;IH=0;TR=4;TU=A;Set=BC;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 18522725 . ATTAAC A 99 PASS SEQUENCING.AC=4;CallSetAC=0,5,5,4,5;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=2;HU=T;IH=0;TR=2;TU=T;Set=BI;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 18915562 . TAA T 99 PASS SEQUENCING.AC=6;CallSetAC=0,8,6,5,8;CallSetAC2=0,2,1,1,2;Groups=BI,DINDEL,OX,SAMTOOLS;HR=2;HU=A;IH=0;TR=6;TU=AAT;Set=BI;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 19111235 . C CT 99 PASS SEQUENCING.AC=7;CallSetAC=8,7,9,7,8;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=T;IH=0;TR=1;TU=T;Set=OX;SEQUENOM.AC=4 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 19188693 . T TC 99 PASS SEQUENCING.AC=15;CallSetAC=0,0,15,0,0;CallSetAC2=0,0,1,0,0;Groups=DINDEL;HR=1;HU=G;IH=0;TR=1;TU=G;Set=DINDEL;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 19437778 . GGCCTGGGATGTAAA G 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,2,1,0;CallSetAC2=0,0,1,0,0;Groups=DINDEL,OX;HR=2;HU=G;IH=0;TR=4;TU=GT;Set=DINDEL;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 19805154 . CCTT C 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,1,1,1;CallSetAC2=0,0,1,1,1;Groups=DINDEL,OX,SAMTOOLS;HR=3;HU=C;IH=0;TR=6;TU=CTT;Set=SAMTOOLS;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 20030869 . CT C 99 TOO_MANY_ALT_ALLELES SEQUENCING.AC=5;CallSetAC=1,11,0,0,0;CallSetAC2=0,1,0,0,0;Groups=BC,BI;HR=1;HU=T;IH=0;TR=1;TU=T;Set=BI;SEQUENOM.AC=404 GT 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 1/1 0/1 0/0 0/0 0/1 0/0 1/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 1/1 1/1 1/1 0/1 0/0 0/0 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/0 0/0 1/1 0/1 1/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 0/0 0/0 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/0 0/0 1/1 0/1 1/1 0/0 1/1 0/0 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/0 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/0 1/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 +20 20286529 . A AC 99 PASS SEQUENCING.AC=1;CallSetAC=0,1,1,0,1;CallSetAC2=0,1,1,0,1;Groups=BI,DINDEL,SAMTOOLS;HR=2;HU=C;IH=0;TR=2;TU=C;Set=SAMTOOLS;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 20404656 . ATTACAGACT A 99 PASS SEQUENCING.AC=11;CallSetAC=12,19,14,11,13;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=3;HU=A;IH=0;TR=3;TU=A;Set=OX;SEQUENOM.AC=7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 20434198 . TA T 99 PASS SEQUENCING.AC=17;CallSetAC=0,0,0,18,0;CallSetAC2=0,0,0,1,0;Groups=OX;HR=3;HU=T;IH=0;TR=3;TU=T;Set=OX;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 20716329 . CA C 99 PASS SEQUENCING.AC=4;CallSetAC=0,5,6,4,5;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=3;HU=A;IH=0;TR=3;TU=A;Set=BI;SEQUENOM.AC=4 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 20760474 . TG T 99 PASS SEQUENCING.AC=21;CallSetAC=28,23,21,19,24;CallSetAC2=2,1,2,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=G;IH=0;TR=1;TU=G;Set=DINDEL;SEQUENOM.AC=15 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 20952825 . T TC 99 PASS SEQUENCING.AC=1;CallSetAC=0,1,2,1,1;CallSetAC2=0,1,2,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=1;HU=C;IH=0;TR=4;TU=CT;Set=SAMTOOLS;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 20990240 . TC T 99 PASS SEQUENCING.AC=16;CallSetAC=0,0,16,0,0;CallSetAC2=0,0,2,0,0;Groups=DINDEL;HR=2;HU=C;IH=0;TR=2;TU=C;Set=DINDEL;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21406859 . ACTT A 99 PASS SEQUENCING.AC=3;CallSetAC=4,4,4,4,4;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=4;HU=A;IH=0;TR=6;TU=CTT;Set=BI;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21480245 . AG A 99 PASS SEQUENCING.AC=1;CallSetAC=0,1,3,1,1;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=3;HU=A;IH=0;TR=3;TU=A;Set=SAMTOOLS;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21852048 . CA C 99 TOO_MANY_ALT_ALLELES SEQUENCING.AC=13;CallSetAC=12,49,0,14,0;CallSetAC2=1,0,0,0,0;Groups=BC,BI,OX;HR=2;HU=C;IH=0;TR=2;TU=C;Set=OX;SEQUENOM.AC=432 GT 0/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/0 1/1 0/0 1/1 1/1 1/1 0/0 1/1 0/1 1/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/0 1/1 0/0 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 1/1 0/0 1/1 0/0 1/1 0/1 0/0 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 0/1 1/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 . 0/1 0/0 1/1 0/1 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 0/0 0/1 1/1 1/1 0/0 0/1 0/0 0/0 1/1 0/1 1/1 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 0/1 0/0 0/0 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 0/0 1/1 . 1/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 0/0 0/1 1/1 0/1 0/0 0/1 0/0 0/1 1/1 0/0 1/1 0/0 0/1 0/0 0/1 1/1 0/0 0/1 1/1 1/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/0 1/1 +20 21968507 . AC A 99 PASS SEQUENCING.AC=10;CallSetAC=0,12,10,12,7;CallSetAC2=0,1,0,0,0;Groups=BI,DINDEL,OX,SAMTOOLS;HR=5;HU=C;IH=0;TR=5;TU=C;Set=DINDEL;SEQUENOM.AC=7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 22434333 . C CA 99 PASS SEQUENCING.AC=26;CallSetAC=30,32,31,23,26;CallSetAC2=0,1,0,0,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=4;HU=C;IH=0;TR=4;TU=C;Set=SAMTOOLS;SEQUENOM.AC=8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 22637424 . C CAGCCA 99 PASS SEQUENCING.AC=4;CallSetAC=0,5,4,4,6;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=1;TU=A;Set=OX;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 22655862 . TATC T 99 PASS SEQUENCING.AC=12;CallSetAC=14,15,18,11,14;CallSetAC2=1,1,0,0,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=4;TU=AT;Set=OX;SEQUENOM.AC=6 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 23200197 . ATT A 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,0,0,1;CallSetAC2=0,0,0,0,1;Groups=SAMTOOLS;HR=4;HU=T;IH=0;TR=4;TU=T;Set=SAMTOOLS;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 23293728 . CA C 99 PASS SEQUENCING.AC=11;CallSetAC=15,12,15,9,13;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=1;TU=A;Set=BI;SEQUENOM.AC=8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 23813095 . CT C 99 PASS SEQUENCING.AC=18;CallSetAC=0,27,17,0,21;CallSetAC2=0,1,0,0,0;Groups=BI,DINDEL,SAMTOOLS;HR=4;HU=C;IH=0;TR=4;TU=C;Set=DINDEL;SEQUENOM.AC=26 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 23815381 . CT C 99 PASS SEQUENCING.AC=2;CallSetAC=0,4,3,2,2;CallSetAC2=0,1,2,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=2;HU=T;IH=0;TR=6;TU=CTT;Set=OX;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 23889003 . GA G 99 PASS SEQUENCING.AC=1;CallSetAC=2,1,1,2,3;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=6;TU=ATG;Set=DINDEL;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 24710482 . GT G 99 PASS SEQUENCING.AC=9;CallSetAC=0,0,9,0,0;CallSetAC2=0,0,1,0,0;Groups=DINDEL;HR=5;HU=T;IH=0;TR=5;TU=T;Set=DINDEL;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 24855121 . CT C 99 PASS SEQUENCING.AC=11;CallSetAC=14,13,10,12,12;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=5;HU=C;IH=0;TR=5;TU=C;Set=DINDEL;SEQUENOM.AC=6 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 25503211 . CATA C 99 PASS SEQUENCING.AC=1;CallSetAC=0,1,2,1,1;CallSetAC2=0,1,2,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=7;TU=AAT;Set=SAMTOOLS;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 25905250 . GT G 99 TOO_MANY_ALT_ALLELES SEQUENCING.AC=56;CallSetAC=0,58,57,0,0;CallSetAC2=0,1,1,0,0;Groups=BI,DINDEL;HR=6;HU=T;IH=1;TR=6;TU=T;Set=DINDEL;SEQUENOM.AC=764 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 . 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +20 29589873 . CCTT C 99 PASS SEQUENCING.AC=239;CallSetAC=333,196,0,0,0;CallSetAC2=1,1,0,0,0;Groups=BC,BI;HR=2;HU=C;IH=0;TR=6;TU=CTT;Set=BC;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 29628180 . C CCACAAGAAG 99 PASS SEQUENCING.AC=7;CallSetAC=0,8,0,0,0;CallSetAC2=0,1,0,0,0;Groups=BI;HR=2;HU=C;IH=0;TR=6;TU=CTT;Set=BI;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 29804699 . A AC 99 PASS SEQUENCING.AC=23;CallSetAC=27,0,0,0,0;CallSetAC2=1,0,0,0,0;Groups=BC;HR=2;HU=A;IH=0;TR=2;TU=A;Set=BC;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 29913425 . TATATC T 99 PASS SEQUENCING.AC=24;CallSetAC=30,25,82,25,26;CallSetAC2=0,0,1,0,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=2;HU=T;IH=0;TR=5;TU=AT;Set=SAMTOOLS;SEQUENOM.AC=15 GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 30390854 . TTATACTA T 99 PASS SEQUENCING.AC=4;CallSetAC=0,6,5,4,4;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=2;HU=T;IH=0;TR=4;TU=AT;Set=SAMTOOLS;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 30534847 . ACAAT A 99 PASS SEQUENCING.AC=3;CallSetAC=0,3,5,2,4;CallSetAC2=0,0,2,0,0;Groups=BI,DINDEL,OX,SAMTOOLS;HR=3;HU=A;IH=0;TR=3;TU=A;Set=SAMTOOLS;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 30567910 . T TG 99 PASS SEQUENCING.AC=45;CallSetAC=52,7,0,48,0;CallSetAC2=1,0,0,1,0;Groups=BC,BI,OX;HR=3;HU=G;IH=0;TR=3;TU=G;Set=BC;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 31412616 . CT C 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,0,0,2;CallSetAC2=0,0,0,0,1;Groups=SAMTOOLS;HR=3;HU=T;IH=0;TR=3;TU=T;Set=SAMTOOLS;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 31760870 . CG C 99 PASS SEQUENCING.AC=1;CallSetAC=2,0,0,0,0;CallSetAC2=1,0,0,0,0;Groups=BC;HR=2;HU=G;IH=0;TR=4;TU=AC;Set=BC;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32015223 . CT C 99 PASS SEQUENCING.AC=9;CallSetAC=11,11,11,9,9;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=2;HU=T;IH=0;TR=2;TU=T;Set=BC;SEQUENOM.AC=5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32158330 . CAG C 99 PASS SEQUENCING.AC=18;CallSetAC=23,24,16,15,21;CallSetAC2=0,1,0,0,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=4;TU=AG;Set=OX;SEQUENOM.AC=4 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32456076 . GT G 99 PASS SEQUENCING.AC=1;CallSetAC=0,1,6,1,1;CallSetAC2=0,0,1,0,0;Groups=BI,DINDEL,OX,SAMTOOLS;HR=3;HU=G;IH=0;TR=4;TU=GT;Set=OX;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32509752 . A AG 99 PASS SEQUENCING.AC=2;CallSetAC=0,0,0,3,3;CallSetAC2=0,0,0,1,1;Groups=OX,SAMTOOLS;HR=2;HU=G;IH=0;TR=2;TU=G;Set=SAMTOOLS;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32700247 . GGCGTCTGA G 99 PASS SEQUENCING.AC=3;CallSetAC=0,4,7,4,4;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=2;HU=G;IH=0;TR=6;TU=CGG;Set=DINDEL;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32968409 . GTC G 99 PASS SEQUENCING.AC=121;CallSetAC=0,127,0,0,0;CallSetAC2=0,1,0,0,0;Groups=BI;HR=1;HU=T;IH=0;TR=6;TU=ATG;Set=BI;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 33541746 . A AAG 99 PASS SEQUENCING.AC=8;CallSetAC=9,11,9,9,10;CallSetAC2=0,1,1,0,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=4;HU=A;IH=0;TR=5;TU=AG;Set=BC;SEQUENOM.AC=4 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 34251969 . C CA 99 PASS SEQUENCING.AC=1;CallSetAC=0,2,0,0,2;CallSetAC2=0,1,0,0,1;Groups=BI,SAMTOOLS;HR=1;HU=A;IH=0;TR=4;TU=AG;Set=SAMTOOLS;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 34313574 . A AT 99 PASS SEQUENCING.AC=8;CallSetAC=0,9,0,0,0;CallSetAC2=0,1,0,0,0;Groups=BI;HR=4;HU=T;IH=0;TR=4;TU=T;Set=BI;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 34633573 . TAA T 99 PASS SEQUENCING.AC=1;CallSetAC=0,2,3,2,2;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=6;HU=T;IH=1;TR=6;TU=T;Set=OX;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 34831930 . CT C 99 PASS SEQUENCING.AC=13;CallSetAC=22,14,20,14,14;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=4;HU=T;IH=0;TR=4;TU=T;Set=OX;SEQUENOM.AC=7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 35329008 . ATC A 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,3,1,1;CallSetAC2=0,0,2,0,0;Groups=DINDEL,OX,SAMTOOLS;HR=1;HU=T;IH=0;TR=6;TU=ATC;Set=DINDEL;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 35357903 . GA G 99 PASS SEQUENCING.AC=11;CallSetAC=12,12,12,12,11;CallSetAC2=2,2,2,2,2;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=2;HU=A;IH=0;TR=2;TU=A;Set=BC;SEQUENOM.AC=5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 35847597 . CTT C 99 PASS SEQUENCING.AC=1;CallSetAC=0,1,7,1,2;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=5;HU=T;IH=0;TR=5;TU=T;Set=SAMTOOLS;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 36658020 . TG T 99 PASS SEQUENCING.AC=11;CallSetAC=15,12,12,8,12;CallSetAC2=1,1,1,0,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=2;HU=G;IH=0;TR=2;TU=G;Set=OX;SEQUENOM.AC=6 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 36704724 . TC T 99 PASS SEQUENCING.AC=12;CallSetAC=15,13,14,10,14;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=2;HU=C;IH=0;TR=2;TU=C;Set=DINDEL;SEQUENOM.AC=8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 36711544 . TAAAG T 99 PASS SEQUENCING.AC=2;CallSetAC=0,0,3,0,1;CallSetAC2=0,0,1,0,1;Groups=DINDEL,SAMTOOLS;HR=3;HU=A;IH=0;TR=3;TU=A;Set=SAMTOOLS;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 36947086 . ATAC A 99 PASS SEQUENCING.AC=93;CallSetAC=107,109,94,86,100;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=T;IH=0;TR=6;TU=ACT;Set=OX;SEQUENOM.AC=33 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37139725 . CAG C 99 PASS SEQUENCING.AC=5;CallSetAC=0,6,6,5,7;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=6;TU=AG;Set=DINDEL;SEQUENOM.AC=5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37278654 . CAG C 99 PASS SEQUENCING.AC=17;CallSetAC=20,18,17,13,17;CallSetAC2=0,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=1;TU=A;Set=DINDEL;SEQUENOM.AC=7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37391272 . TG T 99 PASS SEQUENCING.AC=8;CallSetAC=14,9,9,9,10;CallSetAC2=1,0,0,0,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=2;HU=G;IH=0;TR=2;TU=G;Set=DINDEL;SEQUENOM.AC=4 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37608002 . CAT C 99 PASS SEQUENCING.AC=8;CallSetAC=8,13,12,9,10;CallSetAC2=0,1,1,0,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=5;TU=AC;Set=SAMTOOLS;SEQUENOM.AC=7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37678954 . C CTGG 99 PASS SEQUENCING.AC=7;CallSetAC=0,10,22,6,4;CallSetAC2=0,1,1,0,0;Groups=BI,DINDEL,OX,SAMTOOLS;HR=1;HU=G;IH=0;TR=4;TU=CG;Set=SAMTOOLS;SEQUENOM.AC=7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37712193 . AAG A 99 PASS SEQUENCING.AC=44;CallSetAC=52,57,44,21,47;CallSetAC2=1,1,2,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=2;HU=A;IH=0;TR=6;TU=AG;Set=SAMTOOLS;SEQUENOM.AC=29 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37836124 . AAAT A 99 PASS SEQUENCING.AC=3;CallSetAC=4,4,6,3,3;CallSetAC2=1,1,1,0,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=4;HU=A;IH=0;TR=4;TU=A;Set=BC;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37954797 . A AGT 99 PASS SEQUENCING.AC=110;CallSetAC=126,0,0,0,0;CallSetAC2=1,0,0,0,0;Groups=BC;HR=1;HU=T;IH=0;TR=5;TU=AT;Set=BC;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37962643 . T TAA 99 PASS SEQUENCING.AC=370;CallSetAC=395,424,394,367,423;CallSetAC2=4,4,4,3,3;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=2;HU=A;IH=0;TR=4;TU=AT;Set=DINDEL;SEQUENOM.AC=178 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 1/1 0/1 0/0 1/1 1/1 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 . 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 1/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 1/1 1/1 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 1/1 1/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 +20 38336199 . TA T 99 PASS SEQUENCING.AC=1;CallSetAC=0,2,4,2,2;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=2;HU=T;IH=0;TR=2;TU=T;Set=SAMTOOLS;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 38495835 . T TA 99 AMBIGUOUS_SEQUENOM_CALLS SEQUENCING.AC=147;CallSetAC=0,0,0,153,0;CallSetAC2=0,0,0,1,0;Groups=OX;HR=3;HU=A;IH=0;TR=4;TU=AT;Set=OX;SEQUENOM.AC=14 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 38696054 . GAAGA G 99 PASS SEQUENCING.AC=2;CallSetAC=0,3,5,3,3;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=2;HU=A;IH=0;TR=6;TU=AAG;Set=SAMTOOLS;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 38784318 . CCTT C 99 PASS SEQUENCING.AC=17;CallSetAC=20,19,19,15,17;CallSetAC2=2,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=2;HU=C;IH=0;TR=7;TU=CTT;Set=SAMTOOLS;SEQUENOM.AC=7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 39042026 . T TG 99 PASS SEQUENCING.AC=11;CallSetAC=0,0,11,0,0;CallSetAC2=0,0,3,0,0;Groups=DINDEL;HR=4;HU=T;IH=0;TR=4;TU=T;Set=DINDEL;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 39420665 . AG A 99 TOO_MANY_ALT_ALLELES SEQUENCING.AC=24;CallSetAC=3,51,0,25,0;CallSetAC2=0,2,0,1,0;Groups=BC,BI,OX;HR=2;HU=A;IH=0;TR=4;TU=GT;Set=OX;SEQUENOM.AC=688 GT 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 . 1/1 . 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 0/0 0/0 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 . 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 +20 39607037 . C CA 99 AMBIGUOUS_SEQUENOM_CALLS SEQUENCING.AC=4;CallSetAC=0,0,4,0,0;CallSetAC2=0,0,1,0,0;Groups=DINDEL;HR=1;HU=T;IH=0;TR=1;TU=T;Set=DINDEL;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 39868369 . T TG 99 PASS SEQUENCING.AC=5;CallSetAC=0,6,0,0,0;CallSetAC2=0,1,0,0,0;Groups=BI;HR=2;HU=T;IH=0;TR=4;TU=GT;Set=BI;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 40006262 . TGAG T 99 AMBIGUOUS_SEQUENOM_CALLS SEQUENCING.AC=4;CallSetAC=0,4,6,0,0;CallSetAC2=0,0,2,0,0;Groups=BI,DINDEL;HR=1;HU=G;IH=0;TR=6;TU=AGG;Set=BI;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 40110981 . A AG 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,0,0,1;CallSetAC2=0,0,0,0,1;Groups=SAMTOOLS;HR=1;HU=G;IH=0;TR=4;TU=AG;Set=SAMTOOLS;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 40445967 . TG T 99 PASS SEQUENCING.AC=4;CallSetAC=5,5,15,6,5;CallSetAC2=1,1,2,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=G;IH=0;TR=4;TU=GT;Set=BI;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 40742257 . TG T 99 PASS SEQUENCING.AC=1;CallSetAC=0,2,10,2,2;CallSetAC2=0,0,2,0,0;Groups=BI,DINDEL,OX,SAMTOOLS;HR=2;HU=G;IH=0;TR=2;TU=G;Set=SAMTOOLS;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41000677 . T TG 99 PASS SEQUENCING.AC=4;CallSetAC=0,5,8,5,0;CallSetAC2=0,1,2,1,0;Groups=BI,DINDEL,OX;HR=6;HU=G;IH=1;TR=6;TU=G;Set=BI;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41149621 . T TATCA 99 PASS SEQUENCING.AC=6;CallSetAC=6,6,10,8,0;CallSetAC2=0,1,1,1,0;Groups=BC,BI,DINDEL,OX;HR=1;HU=A;IH=0;TR=1;TU=A;Set=BC;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41364251 . A AAG 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,0,0,1;CallSetAC2=0,0,0,0,1;Groups=SAMTOOLS;HR=3;HU=A;IH=0;TR=4;TU=AC;Set=SAMTOOLS;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41543685 . CTAAGGAGGGAAAAAGATATAAT C 99 PASS SEQUENCING.AC=29;CallSetAC=0,36,29,22,0;CallSetAC2=0,1,1,1,0;Groups=BI,DINDEL,OX;HR=1;HU=T;IH=0;TR=1;TU=T;Set=OX;SEQUENOM.AC=12 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41851636 . TA T 99 PASS SEQUENCING.AC=208;CallSetAC=234,229,215,195,238;CallSetAC2=3,4,3,2,3;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=1;TU=A;Set=OX;SEQUENOM.AC=83 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 +20 41964672 . A AT 99 PASS SEQUENCING.AC=243;CallSetAC=0,0,0,253,0;CallSetAC2=0,0,0,1,0;Groups=OX;HR=2;HU=T;IH=0;TR=2;TU=T;Set=OX;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42145613 . TG T 99 TOO_MANY_ALT_ALLELES SEQUENCING.AC=300;CallSetAC=88,565,0,544,14;CallSetAC2=1,8,0,3,0;Groups=BC,BI,OX,SAMTOOLS;HR=5;HU=T;IH=0;TR=5;TU=T;Set=OX;SEQUENOM.AC=762 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 . 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 . 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +20 42159695 . GC G 99 TOO_MANY_ALT_ALLELES SEQUENCING.AC=6;CallSetAC=7,0,0,0,0;CallSetAC2=1,0,0,0,0;Groups=BC;HR=3;HU=G;IH=0;TR=3;TU=G;Set=BC;SEQUENOM.AC=87 GT 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 . 0/0 . 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 +20 42261635 . C CATTT 99 PASS SEQUENCING.AC=54;CallSetAC=62,75,76,57,58;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=5;TU=AC;Set=DINDEL;SEQUENOM.AC=24 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42470352 . CACTT C 99 PASS SEQUENCING.AC=37;CallSetAC=43,44,42,37,41;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=7;TU=AC;Set=DINDEL;SEQUENOM.AC=19 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 42585924 . T TA 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,1,1,1;CallSetAC2=0,0,1,1,1;Groups=DINDEL,OX,SAMTOOLS;HR=2;HU=A;IH=0;TR=2;TU=A;Set=SAMTOOLS;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42856201 . CT C 99 PASS SEQUENCING.AC=4;CallSetAC=0,5,5,3,4;CallSetAC2=0,1,2,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=4;HU=C;IH=0;TR=4;TU=C;Set=OX;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42909154 . T TGGGTC 99 PASS SEQUENCING.AC=5;CallSetAC=5,6,8,7,4;CallSetAC2=0,1,1,1,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=3;HU=G;IH=0;TR=3;TU=G;Set=OX;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42918721 . AG A 99 PASS SEQUENCING.AC=1;CallSetAC=0,1,1,1,1;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=2;HU=G;IH=0;TR=2;TU=G;Set=SAMTOOLS;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42930748 . A AG 99 PASS SEQUENCING.AC=30;CallSetAC=48,20,0,0,0;CallSetAC2=1,0,0,0,0;Groups=BC,BI;HR=2;HU=G;IH=0;TR=2;TU=G;Set=BI;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43245783 . AG A 99 PASS SEQUENCING.AC=2;CallSetAC=3,0,0,0,0;CallSetAC2=1,0,0,0,0;Groups=BC;HR=3;HU=A;IH=0;TR=3;TU=A;Set=BC;SEQUENOM.AC=8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43371647 . GGGCTGTAA G 99 PASS SEQUENCING.AC=138;CallSetAC=158,179,179,128,155;CallSetAC2=0,2,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=3;HU=G;IH=0;TR=3;TU=G;Set=SAMTOOLS;SEQUENOM.AC=80 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +20 43434234 . AG A 99 PASS SEQUENCING.AC=7;CallSetAC=8,8,16,7,6;CallSetAC2=1,1,3,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=2;HU=G;IH=0;TR=2;TU=G;Set=BC;SEQUENOM.AC=4 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43539258 . T TAG 99 PASS SEQUENCING.AC=2;CallSetAC=0,3,18,3,3;CallSetAC2=0,0,2,0,0;Groups=BI,DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=1;TU=A;Set=OX;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43606638 . T TC 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,0,0,2;CallSetAC2=0,0,0,0,1;Groups=SAMTOOLS;HR=2;HU=C;IH=0;TR=2;TU=C;Set=SAMTOOLS;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43826992 . GC G 99 PASS SEQUENCING.AC=9;CallSetAC=11,0,0,0,0;CallSetAC2=1,0,0,0,0;Groups=BC;HR=3;HU=G;IH=0;TR=3;TU=G;Set=BC;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43993933 . CA C 99 TOO_MANY_ALT_ALLELES SEQUENCING.AC=12;CallSetAC=5,22,0,0,0;CallSetAC2=0,1,0,0,0;Groups=BC,BI;HR=2;HU=C;IH=0;TR=2;TU=C;Set=BC;SEQUENOM.AC=565 GT 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 0/0 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/0 1/1 0/0 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 0/0 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 1/1 0/1 0/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/0 1/1 1/1 0/1 0/1 0/1 0/0 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/0 0/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 0/0 1/1 0/0 0/0 0/0 1/1 1/1 0/0 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 1/1 0/0 1/1 1/1 1/1 0/1 . 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 +20 44071585 . C CT 99 PASS SEQUENCING.AC=293;CallSetAC=310,351,323,302,335;CallSetAC2=0,1,0,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=T;IH=0;TR=4;TU=CT;Set=SAMTOOLS;SEQUENOM.AC=132 GT 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 +20 44220528 . T TC 99 PASS SEQUENCING.AC=29;CallSetAC=34,38,0,0,18;CallSetAC2=0,1,0,0,0;Groups=BC,BI,SAMTOOLS;HR=5;HU=T;IH=0;TR=5;TU=T;Set=BI;SEQUENOM.AC=59 GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +20 44340276 . AACAG A 99 PASS SEQUENCING.AC=36;CallSetAC=42,88,46,33,36;CallSetAC2=1,1,0,0,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=3;HU=A;IH=0;TR=3;TU=A;Set=BC;SEQUENOM.AC=37 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 44464600 . T TA 99 PASS SEQUENCING.AC=57;CallSetAC=66,63,74,53,52;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=4;HU=T;IH=0;TR=4;TU=T;Set=BC;SEQUENOM.AC=19 GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 44470843 . GAGTGTCGT G 99 PASS SEQUENCING.AC=8;CallSetAC=0,31,0,9,5;CallSetAC2=0,1,0,0,0;Groups=BI,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=1;TU=A;Set=OX;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 44572563 . GA G 99 PASS SEQUENCING.AC=3;CallSetAC=6,4,4,4,4;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=1;TU=A;Set=BC;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 44889286 . G GC 99 PASS SEQUENCING.AC=25;CallSetAC=29,28,39,22,26;CallSetAC2=0,0,1,0,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=2;HU=C;IH=0;TR=2;TU=C;Set=BC;SEQUENOM.AC=13 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +20 45092013 . GT G 99 PASS SEQUENCING.AC=5;CallSetAC=5,7,6,6,6;CallSetAC2=0,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=2;HU=T;IH=0;TR=2;TU=T;Set=BI;SEQUENOM.AC=4 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 45300827 . CT C 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,3,1,1;CallSetAC2=0,0,2,0,0;Groups=DINDEL,OX,SAMTOOLS;HR=1;HU=T;IH=0;TR=1;TU=T;Set=SAMTOOLS;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 45406096 . T TTC 99 PASS SEQUENCING.AC=8;CallSetAC=9,13,7,7,9;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=3;HU=T;IH=0;TR=5;TU=CT;Set=DINDEL;SEQUENOM.AC=4 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 45668403 . CTG C 99 PASS SEQUENCING.AC=186;CallSetAC=213,221,191,166,197;CallSetAC2=2,3,2,1,2;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=T;IH=0;TR=4;TU=GT;Set=SAMTOOLS;SEQUENOM.AC=86 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +20 46051811 . T TAAGC 99 PASS SEQUENCING.AC=6;CallSetAC=0,4,9,9,3;CallSetAC2=0,0,1,1,0;Groups=BI,DINDEL,OX,SAMTOOLS;HR=2;HU=T;IH=0;TR=2;TU=T;Set=BI;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 46353646 . A AG 99 PASS SEQUENCING.AC=3;CallSetAC=0,0,3,0,0;CallSetAC2=0,0,1,0,0;Groups=DINDEL;HR=3;HU=A;IH=0;TR=3;TU=A;Set=DINDEL;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 46413551 . TC T 99 PASS SEQUENCING.AC=5;CallSetAC=6,6,9,3,4;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=C;IH=0;TR=1;TU=C;Set=BI;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 46569465 . CTG C 99 PASS SEQUENCING.AC=14;CallSetAC=15,18,16,15,15;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=T;IH=0;TR=1;TU=T;Set=BC;SEQUENOM.AC=10 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 46720983 . ATACTTGG A 99 PASS SEQUENCING.AC=5;CallSetAC=0,8,5,4,7;CallSetAC2=0,1,0,0,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=2;HU=A;IH=0;TR=2;TU=A;Set=DINDEL;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 47032179 . GC G 99 PASS SEQUENCING.AC=1;CallSetAC=0,2,3,2,2;CallSetAC2=0,1,2,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=2;HU=C;IH=0;TR=2;TU=C;Set=BI;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 47136092 . A AGTC 99 PASS SEQUENCING.AC=4;CallSetAC=6,5,5,4,5;CallSetAC2=0,0,1,0,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=3;HU=A;IH=0;TR=3;TU=A;Set=BI;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 47335386 . GC G 99 PASS SEQUENCING.AC=4;CallSetAC=7,4,4,4,5;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=3;HU=G;IH=0;TR=3;TU=G;Set=OX;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 47428163 . C CA 99 TOO_MANY_ALT_ALLELES SEQUENCING.AC=141;CallSetAC=70,232,0,0,0;CallSetAC2=0,2,0,0,0;Groups=BC,BI;HR=7;HU=C;IH=1;TR=7;TU=C;Set=BC;SEQUENOM.AC=766 GT 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 +20 47988904 . CA C 99 TOO_MANY_ALT_ALLELES SEQUENCING.AC=2;CallSetAC=3,0,0,0,0;CallSetAC2=1,0,0,0,0;Groups=BC;HR=1;HU=A;IH=0;TR=4;TU=CT;Set=BC;SEQUENOM.AC=187 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 1/1 0/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 1/1 0/0 0/0 1/1 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/1 . 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 +20 48262933 . CCTA C 99 PASS SEQUENCING.AC=29;CallSetAC=33,32,30,27,31;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=3;HU=C;IH=0;TR=3;TU=C;Set=OX;SEQUENOM.AC=7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49438742 . G GT 99 PASS SEQUENCING.AC=11;CallSetAC=13,15,16,10,10;CallSetAC2=0,1,0,0,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=T;IH=0;TR=1;TU=T;Set=DINDEL;SEQUENOM.AC=8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49451656 . T TG 99 PASS SEQUENCING.AC=6;CallSetAC=0,0,6,0,0;CallSetAC2=0,0,1,0,0;Groups=DINDEL;HR=4;HU=T;IH=0;TR=4;TU=T;Set=DINDEL;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49537420 . AG A 99 PASS SEQUENCING.AC=10;CallSetAC=12,11,12,9,11;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=3;HU=G;IH=0;TR=3;TU=G;Set=BI;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49561273 . A AG 99 PASS SEQUENCING.AC=2;CallSetAC=0,0,4,2,0;CallSetAC2=0,0,1,0,0;Groups=DINDEL,OX;HR=2;HU=G;IH=0;TR=4;TU=AG;Set=OX;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49765611 . A AC 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,1,0,0;CallSetAC2=0,0,1,0,0;Groups=DINDEL;HR=1;HU=C;IH=0;TR=1;TU=C;Set=DINDEL;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 50136971 . TTTTC T 99 PASS SEQUENCING.AC=10;CallSetAC=0,20,12,8,9;CallSetAC2=0,1,1,0,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=4;HU=T;IH=0;TR=4;TU=T;Set=DINDEL;SEQUENOM.AC=8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 50373155 . A AT 99 PASS SEQUENCING.AC=10;CallSetAC=12,11,13,11,11;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=T;IH=0;TR=4;TU=AT;Set=SAMTOOLS;SEQUENOM.AC=7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 50772065 . T TC 99 PASS SEQUENCING.AC=7;CallSetAC=0,0,7,0,0;CallSetAC2=0,0,2,0,0;Groups=DINDEL;HR=7;HU=T;IH=1;TR=7;TU=T;Set=DINDEL;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 50806976 . G GAA 99 PASS SEQUENCING.AC=309;CallSetAC=357,333,309,296,330;CallSetAC2=0,1,0,1,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=2;HU=G;IH=0;TR=7;TU=AGG;Set=DINDEL;SEQUENOM.AC=128 GT 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 . 0/0 . 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 +20 50961401 . G GT 99 PASS SEQUENCING.AC=10;CallSetAC=12,11,13,10,11;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=T;IH=0;TR=1;TU=T;Set=SAMTOOLS;SEQUENOM.AC=4 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 51547787 . AC A 99 PASS SEQUENCING.AC=1;CallSetAC=0,1,14,1,1;CallSetAC2=0,0,2,0,0;Groups=BI,DINDEL,OX,SAMTOOLS;HR=3;HU=A;IH=0;TR=3;TU=A;Set=OX;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 51838824 . GA G 99 PASS SEQUENCING.AC=1;CallSetAC=2,0,0,0,0;CallSetAC2=1,0,0,0,0;Groups=BC;HR=3;HU=G;IH=0;TR=4;TU=AC;Set=BC;SEQUENOM.AC=4 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 51961394 . ATTTG A 99 PASS SEQUENCING.AC=14;CallSetAC=19,15,18,15,14;CallSetAC2=0,0,2,0,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=3;HU=T;IH=0;TR=3;TU=T;Set=OX;SEQUENOM.AC=8 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 53081927 . CATGA C 99 PASS SEQUENCING.AC=9;CallSetAC=11,11,10,8,9;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=1;TU=A;Set=SAMTOOLS;SEQUENOM.AC=5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 53538294 . T TG 99 PASS SEQUENCING.AC=2;CallSetAC=0,0,2,0,0;CallSetAC2=0,0,2,0,0;Groups=DINDEL;HR=1;HU=G;IH=0;TR=7;TU=GT;Set=DINDEL;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 53602394 . T TA 99 PASS SEQUENCING.AC=15;CallSetAC=18,18,15,15,14;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=4;TU=AC;Set=BC;SEQUENOM.AC=7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54124185 . T TC 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,0,0,1;CallSetAC2=0,0,0,0,1;Groups=SAMTOOLS;HR=2;HU=T;IH=0;TR=5;TU=CT;Set=SAMTOOLS;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54150907 . CAG C 99 PASS SEQUENCING.AC=3;CallSetAC=0,4,3,4,4;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=4;TU=AG;Set=SAMTOOLS;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54166824 . AC A 99 PASS SEQUENCING.AC=5;CallSetAC=6,6,8,4,5;CallSetAC2=1,1,2,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=4;HU=A;IH=0;TR=4;TU=A;Set=OX;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54230743 . CAT C 99 PASS SEQUENCING.AC=6;CallSetAC=8,7,8,6,6;CallSetAC2=2,1,2,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=4;TU=AC;Set=BI;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54262948 . A AC 99 PASS SEQUENCING.AC=684;CallSetAC=0,0,0,710,0;CallSetAC2=0,0,0,3,0;Groups=OX;HR=6;HU=A;IH=1;TR=6;TU=A;Set=OX;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54309727 . TGAGC T 99 PASS SEQUENCING.AC=19;CallSetAC=24,20,0,12,22;CallSetAC2=1,1,0,1,1;Groups=BC,BI,OX,SAMTOOLS;HR=1;HU=G;IH=0;TR=1;TU=G;Set=BC;SEQUENOM.AC=7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54379666 . GT G 99 TOO_MANY_ALT_ALLELES SEQUENCING.AC=8;CallSetAC=4,15,0,0,0;CallSetAC2=0,1,0,0,0;Groups=BC,BI;HR=1;HU=T;IH=0;TR=1;TU=T;Set=BC;SEQUENOM.AC=172 GT 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/1 1/1 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/1 0/1 1/1 0/0 0/0 0/0 1/1 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 1/1 1/1 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 +20 55264363 . AG A 99 TOO_MANY_ALT_ALLELES SEQUENCING.AC=12;CallSetAC=7,0,0,19,0;CallSetAC2=1,0,0,0,0;Groups=BC,OX;HR=1;HU=G;IH=0;TR=5;TU=AG;Set=OX;SEQUENOM.AC=530 GT 1/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/0 0/0 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/0 0/1 1/1 0/0 1/1 0/0 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/0 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 1/1 0/0 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 1/1 0/0 1/1 1/1 0/1 1/1 0/0 1/1 0/1 0/1 0/0 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 0/0 0/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 . 1/1 . 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/0 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 1/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/0 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 0/0 0/1 0/0 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 +20 55608811 . CT C 99 TOO_MANY_ALT_ALLELES SEQUENCING.AC=1;CallSetAC=2,0,0,0,0;CallSetAC2=1,0,0,0,0;Groups=BC;HR=2;HU=C;IH=0;TR=4;TU=CT;Set=BC;SEQUENOM.AC=35 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 +20 55611547 . CAA C 99 PASS SEQUENCING.AC=2;CallSetAC=0,3,6,3,3;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=3;HU=A;IH=0;TR=3;TU=A;Set=SAMTOOLS;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 55658161 . GT G 99 PASS SEQUENCING.AC=129;CallSetAC=0,136,0,0,0;CallSetAC2=0,1,0,0,0;Groups=BI;HR=1;HU=T;IH=0;TR=5;TU=GT;Set=BI;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 55989765 . CA C 99 TOO_MANY_ALT_ALLELES SEQUENCING.AC=15;CallSetAC=17,0,0,0,0;CallSetAC2=1,0,0,0,0;Groups=BC;HR=1;HU=A;IH=0;TR=1;TU=A;Set=BC;SEQUENOM.AC=208 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 1/1 0/1 0/1 0/0 1/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/0 1/1 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 +20 56249865 . T TGAGG 99 PASS SEQUENCING.AC=5;CallSetAC=0,6,5,6,6;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=2;HU=T;IH=0;TR=2;TU=T;Set=BI;SEQUENOM.AC=4 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 56344957 . GT G 99 PASS SEQUENCING.AC=3;CallSetAC=0,4,5,4,4;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=3;HU=T;IH=0;TR=3;TU=T;Set=OX;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 56419021 . T TG 99 PASS SEQUENCING.AC=10;CallSetAC=0,11,0,0,0;CallSetAC2=0,1,0,0,0;Groups=BI;HR=1;HU=G;IH=0;TR=1;TU=G;Set=BI;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 56915853 . TG T 99 PASS SEQUENCING.AC=27;CallSetAC=36,29,37,24,29;CallSetAC2=2,2,2,2,2;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=4;HU=G;IH=0;TR=6;TU=GGT;Set=BC;SEQUENOM.AC=17 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 57676578 . CCTTT C 99 PASS SEQUENCING.AC=10;CallSetAC=14,11,14,8,9;CallSetAC2=1,1,1,1,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=2;HU=C;IH=0;TR=2;TU=C;Set=BI;SEQUENOM.AC=7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 58288793 . TC T 99 PASS SEQUENCING.AC=87;CallSetAC=101,106,87,65,66;CallSetAC2=2,3,2,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=C;IH=0;TR=1;TU=C;Set=SAMTOOLS;SEQUENOM.AC=44 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 59153061 . CTG C 99 PASS SEQUENCING.AC=2;CallSetAC=0,2,5,3,3;CallSetAC2=0,0,2,0,0;Groups=BI,DINDEL,OX,SAMTOOLS;HR=1;HU=T;IH=0;TR=1;TU=T;Set=DINDEL;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 59186675 . TATTA T 99 PASS SEQUENCING.AC=1;CallSetAC=0,0,13,1,1;CallSetAC2=0,0,2,0,0;Groups=DINDEL,OX,SAMTOOLS;HR=1;HU=A;IH=0;TR=7;TU=AT;Set=SAMTOOLS;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 59349754 . CCT C 99 PASS SEQUENCING.AC=26;CallSetAC=108,28,0,0,30;CallSetAC2=0,1,0,0,0;Groups=BC,BI,SAMTOOLS;HR=3;HU=C;IH=0;TR=3;TU=C;Set=BI;SEQUENOM.AC=168 GT 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 1/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 1/1 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 1/1 0/1 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/1 0/1 0/0 0/1 1/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 . 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 +20 59365768 . TG T 99 PASS SEQUENCING.AC=4;CallSetAC=0,5,26,4,5;CallSetAC2=0,0,1,0,0;Groups=BI,DINDEL,OX,SAMTOOLS;HR=2;HU=G;IH=0;TR=2;TU=G;Set=SAMTOOLS;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 59769242 . C CT 99 PASS SEQUENCING.AC=4;CallSetAC=7,4,8,5,5;CallSetAC2=1,1,1,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=T;IH=0;TR=1;TU=T;Set=BC;SEQUENOM.AC=4 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 60337932 . AC A 99 PASS SEQUENCING.AC=1;CallSetAC=0,2,6,2,2;CallSetAC2=0,1,1,1,1;Groups=BI,DINDEL,OX,SAMTOOLS;HR=2;HU=A;IH=0;TR=6;TU=AAC;Set=OX;SEQUENOM.AC=3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 60925525 . GC G 99 PASS SEQUENCING.AC=1;CallSetAC=0,2,6,0,2;CallSetAC2=0,1,1,0,1;Groups=BI,DINDEL,SAMTOOLS;HR=2;HU=C;IH=0;TR=2;TU=C;Set=SAMTOOLS;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 61000018 . GC G 99 PASS SEQUENCING.AC=318;CallSetAC=0,348,0,317,0;CallSetAC2=0,1,0,2,0;Groups=BI,OX;HR=3;HU=G;IH=0;TR=3;TU=G;Set=OX;SEQUENOM.AC=203 GT 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/1 1/1 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/1 1/1 . 0/1 . 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 1/1 0/0 1/1 0/1 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 1/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 +20 61531765 . AG A 99 PASS SEQUENCING.AC=1;CallSetAC=0,2,8,2,2;CallSetAC2=0,0,2,0,0;Groups=BI,DINDEL,OX,SAMTOOLS;HR=1;HU=G;IH=0;TR=4;TU=CG;Set=BI;SEQUENOM.AC=0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 61983510 . TCTGC T 99 PASS SEQUENCING.AC=124;CallSetAC=142,187,162,95,108;CallSetAC2=0,0,2,1,0;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=1;HU=C;IH=0;TR=7;TU=CCT;Set=SAMTOOLS;SEQUENOM.AC=75 GT 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 +20 62154368 . G GA 99 PASS SEQUENCING.AC=2;CallSetAC=0,3,0,0,3;CallSetAC2=0,1,0,0,1;Groups=BI,SAMTOOLS;HR=4;HU=G;IH=0;TR=4;TU=G;Set=BI;SEQUENOM.AC=2 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 62310426 . CTT C 99 PASS SEQUENCING.AC=1;CallSetAC=0,2,6,2,2;CallSetAC2=0,0,2,0,0;Groups=BI,DINDEL,OX,SAMTOOLS;HR=4;HU=T;IH=0;TR=4;TU=T;Set=OX;SEQUENOM.AC=1 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 62871860 . C CCCGCA 99 PASS SEQUENCING.AC=26;CallSetAC=29,49,32,20,30;CallSetAC2=0,1,2,1,1;Groups=BC,BI,DINDEL,OX,SAMTOOLS;HR=4;HU=C;IH=0;TR=4;TU=C;Set=SAMTOOLS;SEQUENOM.AC=27 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 diff --git a/tests/tabix_data/vcf/7.vcf b/tests/tabix_data/vcf/7.vcf new file mode 100644 index 0000000..33e3ca7 --- /dev/null +++ b/tests/tabix_data/vcf/7.vcf @@ -0,0 +1,317 @@ +##fileformat=VCFv4.1 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##fileDate=20110524 +##reference=ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/human_g1k_v37.fasta.gz +##source=EricBanksValidationQC;fromGoncaloAbecasisValidationSelection +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT HG00127 HG00128 HG00136 HG00137 HG00138 HG00139 HG00152 HG00156 HG00234 HG00235 HG00237 HG00242 HG00244 HG00262 HG01055 HG01079 NA19138 NA18974 NA18523 NA12717 NA19209 NA18577 NA18973 NA18943 NA12873 NA18623 NA18622 NA18948 NA19171 NA19204 NA06994 NA18563 NA18547 NA18861 NA18608 NA12282 NA12751 NA18959 NA19331 NA19453 NA20537 NA12046 NA20515 NA20516 NA20521 NA20524 NA20528 NA20759 NA20768 NA20769 NA20774 NA20775 NA20783 NA20787 NA20790 NA20800 NA20819 NA20812 NA20505 NA20530 NA20540 NA20538 NA20581 NA20815 NA20544 NA20810 NA20807 NA20816 NA20504 NA20753 NA20502 NA12342 NA19150 NA19468 NA20336 NA19395 NA19257 NA19360 NA19700 NA18867 NA20317 NA18968 NA19107 HG00111 HG00108 NA19077 NA19684 NA18511 NA12044 NA19382 NA19457 NA18933 NA18923 NA18965 HG00141 NA20341 NA18740 HG00537 HG00346 HG01173 HG00702 HG00313 HG00150 NA18612 HG00339 NA12273 HG00250 NA18593 NA18621 HG00478 HG00251 HG01070 NA19160 NA18995 NA10851 NA18976 NA18603 NA19200 HG01204 HG01191 HG01101 HG00146 HG00306 NA18985 HG00160 HG00635 HG00372 HG00357 HG00634 NA18541 NA18950 NA19759 HG00351 HG00257 HG00118 HG00336 HG00448 HG01354 NA18609 HG00428 HG00326 NA11894 NA18956 HG00173 HG00117 NA11893 HG01251 HG01441 HG01437 HG00182 HG00330 HG01060 HG00329 NA18960 NA18856 NA07346 NA18871 NA19057 NA18868 NA18636 NA12830 NA19007 NA18910 NA18874 NA19056 NA19064 NA19066 NA18487 NA18642 NA19236 NA07056 NA18637 NA19235 NA19309 NA19311 NA19334 NA19346 NA19347 NA19372 NA19376 NA19383 NA19384 NA19394 NA19428 NA19430 NA19451 NA19466 NA19313 NA19321 NA19324 NA19332 HG00479 HG00608 NA18573 HG00375 NA19248 NA19093 HG01170 HG00534 HG01171 HG01522 NA18624 HG00683 HG01521 NA19005 NA20412 NA18971 HG00446 NA12748 HG00530 HG00690 HG01356 HG01516 NA20532 HG00344 HG00328 NA18542 HG00254 HG00321 HG00577 HG00656 HG00342 HG00524 HG00650 HG00557 HG00319 HG00457 HG00125 HG00578 HG00543 HG00638 HG00171 HG00699 HG00595 HG00187 HG00704 HG00533 HG00596 HG00268 HG01083 HG00651 HG01133 HG00671 HG00327 HG01148 HG00246 HG00672 HG00556 HG00436 HG00554 NA18633 NA20344 NA11993 NA07037 NA11930 HG01366 HG01389 HG00620 NA19740 HG00190 HG00419 NA18535 HG01495 NA18592 HG01497 HG00174 HG01140 NA12287 HG00689 HG01550 HG00334 HG01375 HG00637 NA18507 HG01113 NA18550 NA19129 HG01551 HG01462 HG00331 NA12413 HG01456 HG01360 HG00708 HG01350 HG00684 NA19099 HG00284 NA12399 NA12286 NA12777 HG00277 HG00266 NA19985 HG00353 HG01102 NA07347 NA07051 NA19900 NA18984 NA07048 HG00640 HG01066 NA12812 HG01174 HG01188 NA19390 NA19436 NA19439 NA19440 NA19463 NA19470 NA19471 NA19472 NA19676 NA19660 NA19661 NA19663 NA19722 NA19725 NA19728 NA19729 NA19731 NA19749 NA19755 NA19756 NA19758 NA19770 NA19773 NA19777 NA19780 NA19783 NA20525 NA20589 NA20765 NA20802 NA20804 NA18544 NA18602 NA18546 NA18610 NA18957 NA18615 NA18616 NA19010 NA18638 NA18639 NA18627 NA19072 NA18630 NA19074 NA19080 NA19081 NA19083 NA19085 NA19088 NA20287 NA19835 NA20276 NA19818 NA20278 NA20282 NA20342 NA20296 NA20314 NA20346 NA19712 NA19198 NA19108 NA18934 NA18916 NA18907 NA18917 NA06989 NA12058 NA12341 NA12546 NA12489 HG01197 NA18983 NA11843 NA11892 NA12749 +20 82176 rs11906362 T C 318 NOT_DESIGNED BCM.AC=16;DB;SRC=VQSR+2-OF-7 +20 249843 rs112456910 C T 1304 PASS BCM.AC=14;DB;SEQUENOM.AC=12;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . . 0/0 . . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . 0/0 . 0/0 0/0 . . . 0/0 . 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . . 0/0 0/1 . . 0/0 0/0 . 0/0 . . . 0/0 . 0/0 0/0 0/1 0/0 . . . 0/0 . 0/0 . . . . . . . . . 0/0 . . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . . 0/0 . 0/0 . 0/0 0/0 0/0 0/0 . 0/0 . . . . . 0/0 0/0 . . 0/0 . . 0/0 0/0 0/0 . . . 0/0 0/0 0/0 0/0 . 0/0 . . . . . 0/0 0/0 . . 0/1 . . 0/0 . 0/1 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 . . . . . 0/0 . . . . . 0/0 . 0/1 . . . . 0/0 . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 . 0/0 . . . 0/0 . 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 . 0/0 . 0/0 . . . 0/0 0/1 0/0 . . . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . . . 0/0 . 0/0 0/0 0/0 . . . . . . . 0/0 . 0/0 . . . . . . . . . . 0/0 . 0/0 . . 0/0 0/0 . . . . . 0/0 0/0 0/0 0/1 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . . 0/0 . . 0/0 . 0/0 0/0 . 0/0 . 0/0 . 0/0 0/0 . 0/0 0/0 . 0/1 0/1 0/0 . . 0/0 0/0 . . 0/0 0/1 . . 0/1 . . . 0/0 0/0 0/0 . . . . . 0/0 . +20 688672 rs116071340 C T 56 PASS BCM.AC=1;DB;SEQUENOM.AC=2;SRC=VQSR+2-OF-7 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 987773 rs6077519 T G 474 PASS DB;HW_VIOLATION;SEQUENOM.AC=73;SRC=VQSR-ONLY GT . 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 1/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 1/1 1/1 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 1/1 1/1 0/0 1/1 0/0 0/0 0/0 0/0 1/1 1/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 1/1 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 +20 1166164 . G T 26 NOT_DESIGNED BCM.AC=20;SRC=VQSR+2-OF-7 +20 1333317 . A G 4 PASS SEQUENOM.AC=0;SRC=VQSR-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1372898 rs112426678 C A 833 PASS BCM.AC=7;DB;SEQUENOM.AC=6;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1526045 rs11908182 A G 847 PASS BCM.AC=6;DB;SEQUENOM.AC=6;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1565049 . C T 100 PASS SEQUENOM.AC=3;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1577285 . G A 4 HIGH_NO_CALL_RATE SEQUENOM.AC=0;SRC=VQSR-ONLY GT . . . 0/0 0/0 . 0/0 . . . 0/0 0/0 . 0/0 . . 0/0 0/0 . . . 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 . 0/0 . 0/0 . 0/0 0/0 . . 0/0 . . . 0/0 . 0/0 . . . 0/0 . . . . . . 0/0 . 0/0 . 0/0 0/0 . 0/0 . . . 0/0 . . . . . 0/0 0/0 . . . . 0/0 0/0 . 0/0 . . 0/0 0/0 . . . . . 0/0 . 0/0 . . . 0/0 0/0 0/0 0/0 . . 0/0 0/0 . 0/0 . 0/0 0/0 0/0 . 0/0 0/0 . . . 0/0 0/0 0/0 0/0 0/0 . . . 0/0 0/0 . 0/0 0/0 . . . 0/0 . . 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 . . . . . 0/0 . 0/0 . 0/0 . . . 0/0 0/0 0/0 0/0 . . . . 0/0 . . . . . . . . 0/0 . . . 0/0 . . . . . . . . . . . . 0/0 . . 0/0 0/0 . 0/0 . . 0/0 . 0/0 . 0/0 . . 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 . . . 0/0 . . . 0/0 0/0 . . 0/0 0/0 0/0 . 0/0 . . 0/0 0/0 0/0 . . 0/0 . 0/0 0/0 . . . . . 0/0 0/0 0/0 0/0 . 0/0 . . 0/0 0/0 . . . 0/0 . 0/0 . . . 0/0 . 0/0 0/0 . . 0/0 . 0/0 0/0 . . 0/0 . . . . . . 0/0 . 0/0 0/0 . 0/0 . . . 0/0 . . . 0/0 . 0/0 0/0 . . . . 0/0 0/0 0/0 . . . . 0/0 0/0 . . . . . . 0/0 0/0 . . . . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 . . . . 0/0 0/0 0/0 . 0/0 . 0/0 . 0/0 0/0 . 0/0 . 0/0 . 0/0 . 0/0 . . . . . 0/0 0/0 0/0 . . 0/0 0/0 +20 1577845 . G A 267 HIGH_NO_CALL_RATE BCM.AC=42;SEQUENOM.AC=5;SRC=VQSR+2-OF-7 GT 0/0 . . 0/0 . . . . . . 0/0 . . 0/0 . . 0/0 0/0 . . . . 0/0 0/0 . 0/0 . 0/0 . . 0/0 0/0 . 1/1 0/0 0/0 . 0/0 . 0/0 0/0 . . 0/0 . . . . . 0/0 . 0/0 . 0/0 . . . . . . 0/0 . 0/0 . 0/0 . . 0/0 . . . 0/0 . . . . . . . . . . . 0/0 0/0 . 0/0 . . 0/0 0/0 0/0 . . . 0/0 0/0 0/0 0/0 . . . 0/0 0/0 . 0/0 . . 0/0 . . 0/0 . . 0/0 0/0 . . 0/0 . . . 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 0/0 . 0/0 0/0 . . . 0/0 0/0 . 0/0 0/0 . 0/0 . 0/0 0/0 0/0 . . . . . . 0/0 . 0/0 . 0/0 . . . 0/0 0/0 0/0 0/0 . . . . 0/0 . . 0/0 . . . . . 0/0 . . . . 0/0 . . . . . . . . . . . 0/0 . . 0/0 0/0 . 0/0 . . 0/0 . 0/0 . 0/0 . . 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 . 0/0 0/0 . 0/0 . . . 0/0 0/0 . . 0/0 0/0 . 0/0 0/0 . . 0/0 0/0 0/0 . . 0/0 . 0/0 0/0 . . . . . 0/0 0/0 0/0 0/0 . 0/0 . . 0/0 0/0 . . . 0/0 . 0/0 . . . 0/0 . 0/0 0/0 . 0/0 0/0 0/0 . 0/0 . . 0/0 . 0/0 . . . . . . 0/0 0/0 . 0/0 . . . 0/0 . . 0/0 0/0 0/0 . . . . . 0/0 0/0 0/0 0/0 0/0 . . . 0/0 0/0 . . . . 0/0 . 0/0 0/0 . . . . 0/0 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . . . . 0/0 0/0 0/0 . . . . 0/0 0/0 0/1 . 0/0 . . . 0/0 . 1/1 . . 0/0 . 0/0 0/0 . 0/0 . . 0/0 0/0 +20 1590306 . A G 16 AMBIGUOUS_SEQUENOM_CALLS SEQUENOM.AC=177;SRC=VQSR-ONLY GT 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 . 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 . 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 . 0/0 . 0/1 0/1 0/1 . 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 . 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 . 0/0 0/0 . . . 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 . 0/1 0/1 0/1 0/1 . 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 . 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 . . 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 . 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 . 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 . 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 . 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/1 . 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 +20 1643825 . G T 24 PASS BCM.AC=3;SEQUENOM.AC=0;SRC=VQSR-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1746733 . G A 9 NOT_DESIGNED SRC=VQSR-ONLY +20 1896670 . G C 16 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1934851 rs6045641 T C 53 NOT_DESIGNED BCM.AC=29;DB;SRC=VQSR-ONLY +20 2083617 . G A 9 NOT_DESIGNED BCM.AC=4;SRC=VQSR+2-OF-7 +20 2280790 rs214779 T A 57436 NOT_DESIGNED BCM.AC=758;DB;SRC=VQSR+2-OF-7 +20 2843004 rs118020362 T C 131 PASS BCM.AC=4;DB;SEQUENOM.AC=4;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 2854191 . C T 78 POSSIBLE_PROBE_FAILURE BCM.AC=25;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 2999522 . G A 5 NOT_DESIGNED SRC=VQSR-ONLY +20 3935503 . G A 95 NOT_DESIGNED BCM.AC=1;SRC=VQSR+2-OF-7 +20 4015187 . G C 93 DUPLICATE_MAPPING BCM.AC=14;SRC=VQSR+2-OF-7 +20 4260976 rs75912589 A G 8109 PASS BCM.AC=94;DB;SEQUENOM.AC=95;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 +20 4557512 . C A 8 NOT_DESIGNED SRC=VQSR-ONLY +20 4603711 . C T 20 PASS SEQUENOM.AC=1;SRC=VQSR-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 5021712 rs115278430 C A 76 NOT_DESIGNED BCM.AC=2;DB;SRC=VQSR+2-OF-7 +20 5137904 . C T 70 PASS BCM.AC=0;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 5500990 rs116723001 C A 1701 PASS BCM.AC=14;DB;SEQUENOM.AC=13;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 5524677 . C T 21 PASS BCM.AC=3;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 5601529 rs6085225 G A 1415 PASS BCM.AC=33;DB;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 5773125 . G A 165 NOT_DESIGNED BCM.AC=3;SRC=VQSR+INTERSECTION +20 5986950 rs6085343 G A 1226 PASS BCM.AC=68;DB;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 6242013 . G A 10 DUPLICATE_MAPPING SRC=2-OF-7-ONLY +20 6320495 . C A 16 NOT_DESIGNED BCM.AC=2;SRC=VQSR+2-OF-7 +20 6575066 . T C 9.19 PASS BCM.AC=2;SEQUENOM.AC=2;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7228334 . A G 108 PASS BCM.AC=1;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7274968 . C T 39 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7321986 . C G 5 PASS SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7377337 . C T 180 PASS BCM.AC=1;SEQUENOM.AC=2;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7400995 rs114967944 C T 426 PASS BCM.AC=8;DB;SEQUENOM.AC=6;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7466093 . C G 4.11 PASS SEQUENOM.AC=0;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7575759 rs28491496 A G 308 POSSIBLE_PROBE_FAILURE BCM.AC=17;DB;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7678819 rs11699779 A G 12976 PASS BCM.AC=95;DB;SEQUENOM.AC=93;SRC=VQSR+INTERSECTION GT . 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 . 0/1 . . 0/1 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 . 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 . 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 +20 7924363 . G A 301 PASS BCM.AC=2;SEQUENOM.AC=3;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 8165430 rs61262870 T C 1699 NOT_DESIGNED DB;SRC=VQSR+2-OF-7 +20 8642873 . A G 19 NOT_DESIGNED BCM.AC=58;SRC=VQSR+2-OF-7 +20 8700342 . T G 102 PASS BCM.AC=0;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 8799615 . C T 38 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 9149281 . C T 11 PASS BCM.AC=0;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 9214590 . T C 99 PASS BCM.AC=3;SEQUENOM.AC=3;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 9276871 . C T 695 NOT_DESIGNED BCM.AC=11;SRC=VQSR+2-OF-7 +20 10226915 rs74843547 G A 120 PASS BCM.AC=1;DB;SEQUENOM.AC=2;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 10259160 . T A 10 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 10482699 . G A 101 PASS BCM.AC=2;SEQUENOM.AC=2;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 10625431 . T C 17 PASS BCM.AC=0;SEQUENOM.AC=1;SRC=VQSR-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 11506447 . G C 100 PASS SEQUENOM.AC=1;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 11565628 . G A 22 PASS BCM.AC=1;SEQUENOM.AC=3;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 11625368 rs111669054 A G 138 PASS BCM.AC=2;DB;SEQUENOM.AC=2;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 11798908 . A G 14 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12006592 . A G 57 PASS SEQUENOM.AC=6;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12025988 . C T 34 NOT_DESIGNED BCM.AC=43;SRC=VQSR+2-OF-7 +20 12142653 . T A 12 PASS BCM.AC=2;SEQUENOM.AC=3;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12171235 . A G 60 PASS BCM.AC=2;SEQUENOM.AC=2;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12326082 . C T 118 NOT_DESIGNED SRC=VQSR+2-OF-7 +20 12364163 . A G 8 PASS SEQUENOM.AC=2;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12718574 rs112953117 G C 656 PASS BCM.AC=3;DB;SEQUENOM.AC=3;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13241902 . A C 52 PASS BCM.AC=2;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13339930 rs6042043 A G 839 NOT_DESIGNED BCM.AC=143;DB;SRC=VQSR+2-OF-7 +20 13410135 rs77634879 T A 50 PASS BCM.AC=39;DB;SEQUENOM.AC=37;SRC=VQSR-ONLY GT 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13764237 . C T 51 NOT_DESIGNED BCM.AC=1;SRC=VQSR+2-OF-7 +20 14283363 rs111719158 G A 197 NOT_DESIGNED BCM.AC=6;DB;SRC=VQSR+INTERSECTION +20 14589314 rs2209596 G T 30806 INCORRECT_SEQUENOM_CALLS BCM.AC=253;DB;SEQUENOM.AC=315;SRC=VQSR+INTERSECTION GT . 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 . 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 . 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 . 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 . 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 . 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 +20 14843271 . A G 78 NOT_DESIGNED BCM.AC=343;SRC=VQSR+2-OF-7 +20 15193914 . C T 48 PASS BCM.AC=2;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15581882 . C G 51 PASS BCM.AC=2;SEQUENOM.AC=2;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15699667 . C T 59 PASS BCM.AC=2;SEQUENOM.AC=3;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15913614 . G T 9 PASS SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16397068 . C G 1.16 PASS SEQUENOM.AC=0;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16475471 rs73597775 C T 234 HIGH_NO_CALL_RATE DB;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 . . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16487648 rs12479901 G A 1025 PASS BCM.AC=14;DB;SEQUENOM.AC=15;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 +20 16936995 . C A 102 PASS BCM.AC=2;SEQUENOM.AC=2;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 17430784 . T C 18 PASS BCM.AC=7;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 17828256 . C T 77 PASS BCM.AC=2;SEQUENOM.AC=4;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 17938631 . T C 218 PASS BCM.AC=8;SEQUENOM.AC=2;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 17980474 . G A 34 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 17991241 . C T 49 NOT_DESIGNED SRC=VQSR-ONLY +20 18180100 . A G 100 NOT_DESIGNED SRC=2-OF-7-ONLY +20 18198917 . C T 15 PASS SEQUENOM.AC=3;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 18232143 rs77523268 C T 952 PASS BCM.AC=8;DB;SEQUENOM.AC=8;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 18584068 . C A 81 DUPLICATE_MAPPING SRC=VQSR-ONLY +20 19212550 . C A 11 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 19966683 rs199601 G A 56556 PASS BCM.AC=562;DB;SEQUENOM.AC=560;SRC=VQSR+INTERSECTION GT 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/1 1/1 1/1 0/1 0/0 0/1 0/1 1/1 0/0 1/1 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 . 1/1 . 1/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/0 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/0 1/1 0/0 1/1 0/0 1/1 1/1 1/1 0/1 0/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/0 0/1 0/1 1/1 1/1 0/1 1/1 0/0 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/0 1/1 0/0 0/1 1/1 1/1 1/1 1/1 0/0 1/1 0/1 1/1 0/0 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 0/0 0/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/0 0/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/0 1/1 1/1 0/1 1/1 +20 20157470 rs74569344 G T 159 NOT_DESIGNED DB;SRC=VQSR-ONLY +20 20850592 . G A 11.30 NOT_DESIGNED BCM.AC=1;SRC=2-OF-7-ONLY +20 20987147 . T C 58 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21056309 . T C 12.30 PASS SEQUENOM.AC=2;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21195714 . A C 12 NOT_DESIGNED BCM.AC=1;SRC=VQSR+2-OF-7 +20 21477015 . G A 140 NOT_DESIGNED BCM.AC=2;SRC=VQSR+2-OF-7 +20 21491513 . C T 11 NOT_DESIGNED BCM.AC=1;SRC=VQSR+2-OF-7 +20 21530607 rs4627653 G A 3116 PASS BCM.AC=21;DB;SEQUENOM.AC=21;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21569638 . G C 35 PASS BCM.AC=0;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21579389 . C T 169 NOT_DESIGNED SRC=VQSR-ONLY +20 21624143 . T C 63 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21734208 . A G 5.74 PASS SEQUENOM.AC=0;SRC=2-OF-7-ONLY GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21754065 . G A 16 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21764267 . G A 164 PASS BCM.AC=3;SEQUENOM.AC=4;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21863337 . T C 174 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 21910648 . C A 145 PASS BCM.AC=5;SEQUENOM.AC=4;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 22016989 . G A 7 NOT_DESIGNED SRC=VQSR-ONLY +20 22168952 . G T 107 PASS BCM.AC=1;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 23102548 . G C 15 PASS BCM.AC=0;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 23470735 . A T 12 NOT_DESIGNED SRC=VQSR-ONLY +20 23665595 . C T 205 PASS BCM.AC=4;SEQUENOM.AC=3;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 . . 0/0 0/0 0/0 0/0 0/0 . 0/0 . . . . . 0/0 0/0 0/0 0/0 0/0 . . 0/0 . . 0/0 . 0/0 0/0 0/0 0/0 0/0 . . 0/0 0/0 . . 0/0 . 0/0 0/0 0/0 0/0 . . . . . 0/0 . 0/0 . 0/0 0/0 0/0 0/0 . . . . . 0/0 . . 0/0 0/0 0/0 0/0 . . . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . . . . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 . . . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 . 0/0 . 0/0 . . . 0/0 0/0 . 0/0 0/0 . 0/0 0/0 . 0/0 0/0 . . . . 0/0 . . 0/0 0/0 . . . 0/0 0/0 . . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . . . +20 23758844 rs117686838 A T 1.18 NOT_DESIGNED DB;SRC=2-OF-7-ONLY +20 23785676 . G A 90 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 24126594 . C T 16 PASS BCM.AC=1;SEQUENOM.AC=2;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 24247752 . C T 6107 NOT_DESIGNED BCM.AC=42;SRC=VQSR+2-OF-7 +20 24432806 . T C 21 PASS BCM.AC=1;SEQUENOM.AC=2;SRC=VQSR-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 24450030 . G A 8 NOT_DESIGNED SRC=VQSR-ONLY +20 24792588 . C T 17 NOT_DESIGNED SRC=VQSR+2-OF-7 +20 24875997 rs6106960 T C 35367 PASS BCM.AC=238;DB;SEQUENOM.AC=233;SRC=VQSR+INTERSECTION GT 0/0 1/1 0/0 0/0 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 1/1 1/1 1/1 0/0 1/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 1/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/1 . 0/0 . 1/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/0 0/1 0/0 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/0 0/1 1/1 0/0 0/0 0/1 1/1 0/0 1/1 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/0 0/1 1/1 0/1 0/0 0/1 0/0 . 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 1/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/0 0/1 0/1 0/0 0/1 0/1 0/0 1/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 0/1 1/1 0/0 1/1 1/1 1/1 1/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/1 1/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 1/1 0/0 0/0 0/0 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 1/1 0/1 0/0 1/1 0/1 0/0 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/1 0/0 1/1 0/1 1/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 . 0/0 0/0 0/1 1/1 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 +20 25133654 . G A 13.40 PASS SEQUENOM.AC=0;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 25388911 . G T 28 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 25574143 . G A 77 PASS SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 25659422 . A G 11 NOT_DESIGNED BCM.AC=1;SRC=VQSR+2-OF-7 +20 25700728 rs6037216 C G 1553 POSSIBLE_PROBE_FAILURE BCM.AC=7;DB;SEQUENOM.AC=0;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 25741857 rs73347142 G T 41907 PASS DB;SEQUENOM.AC=0;SRC=VQSR-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 25750038 . T G 86 DUPLICATE_MAPPING BCM.AC=493;SRC=VQSR-ONLY +20 25751184 . G C 100 DUPLICATE_MAPPING BCM.AC=180;SRC=2-OF-7-ONLY +20 25766473 . T A 124 DUPLICATE_MAPPING SRC=VQSR+2-OF-7 +20 25789517 . A T 40 DUPLICATE_MAPPING BCM.AC=319;SRC=VQSR+2-OF-7 +20 25794555 . G A 18 DUPLICATE_MAPPING BCM.AC=181;SRC=VQSR-ONLY +20 25922316 . T C 26 PASS BCM.AC=1;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 25999667 . C G 32 DUPLICATE_MAPPING;INCORRECT_SEQUENOM_CALLS BCM.AC=61;SEQUENOM.AC=1;SRC=VQSR-ONLY GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 . . 0/0 0/0 0/0 0/0 . 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 26046637 . G A 26 DUPLICATE_MAPPING BCM.AC=354;SRC=VQSR-ONLY +20 26057903 . G A 100 NOT_DESIGNED SRC=2-OF-7-ONLY +20 26071009 . T C 9 DUPLICATE_MAPPING;AMBIGUOUS_SEQUENOM_CALLS BCM.AC=586;SEQUENOM.AC=59;SRC=VQSR-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 +20 26126724 . G C 23737 PASS SEQUENOM.AC=0;SRC=VQSR-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 26217247 . C A 374 PASS BCM.AC=3;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 26246019 rs79506355 C A 999 NOT_DESIGNED DB;SRC=2-OF-7-ONLY +20 26258231 rs79859288 C T 527 NOT_DESIGNED DB;SRC=VQSR+2-OF-7 +20 26265474 . G T 460.59 PASS SEQUENOM.AC=0;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 26272553 . C G 100 PASS SEQUENOM.AC=0;SRC=2-OF-7-ONLY GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 26275939 . A G 81 NOT_DESIGNED SRC=2-OF-7-ONLY +20 26293152 . T C 100 PASS BCM.AC=14;SEQUENOM.AC=17;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 . 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 +20 26301426 . A G 63 AMBIGUOUS_SEQUENOM_CALLS SEQUENOM.AC=0;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 26301793 . C G 8 PASS SEQUENOM.AC=1;SRC=VQSR-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 26304696 rs6051307 G A 100 PASS DB;SEQUENOM.AC=0;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 29494622 rs78775502 C T 935 PASS DB;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 29514290 rs6087354 T A 19181 AMBIGUOUS_SEQUENOM_CALLS DB;SEQUENOM.AC=278;SRC=VQSR+2-OF-7 GT 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 . 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1 . 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/1 0/1 0/0 +20 29518801 rs113500384 G A 702.91 PASS DB;SEQUENOM.AC=0;SRC=2-OF-7-ONLY GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 29574811 rs73620522 G A 16281 HIGH_NO_CALL_RATE DB;SEQUENOM.AC=24;SRC=VQSR-ONLY GT 0/1 0/0 0/0 . 0/0 0/0 0/1 0/0 0/0 . 0/0 0/0 . . 1/1 . . 0/0 . 0/0 0/0 . 0/0 0/0 0/1 0/0 . . 0/0 1/1 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . 0/0 . . 0/0 . . . . 0/0 0/0 . . . . . . . . . . . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . . . . . 0/0 . 0/0 . 0/1 . . . 0/1 . 0/0 . 0/0 . 0/0 0/0 0/1 0/0 . . 0/0 . 0/0 . . . 0/0 0/0 . . 0/0 . . . 0/0 0/0 0/0 . 0/0 0/0 . 0/0 0/0 . 0/0 0/0 . 0/0 0/0 . 0/0 . 0/1 0/0 0/0 . 0/0 . . 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . . 0/0 . 0/0 0/0 . . . . . 0/0 . 0/0 0/0 . 0/0 0/0 . 0/0 0/0 . 0/0 0/0 . 0/0 . . 0/0 0/0 . 0/0 . . 0/0 . . . 1/1 . 0/0 0/0 . . . . 0/0 0/0 . 0/0 0/0 . 0/0 . . . 0/0 . 0/0 0/0 . 0/0 . . . 0/0 0/0 0/0 0/0 . 0/0 . 0/0 . . . . . . . 0/0 . . . . . . . . . . 0/0 0/0 0/0 0/0 0/0 0/0 . . . . . 0/0 0/0 0/0 . 0/0 . . . . . . . 0/0 0/0 0/0 0/0 0/0 . 0/0 . . . . . . 0/0 0/0 0/0 . 0/0 1/1 . . . . . 0/0 0/0 0/0 0/0 0/0 . . 0/0 . 0/0 . 0/1 0/0 0/0 . 0/0 0/0 0/0 . . . . 0/0 . . . . . . . . . . . 0/0 0/0 . . 0/0 0/0 . 0/0 . 1/1 . . . . . . . 1/1 . . . . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . . . . 0/0 0/0 0/0 0/0 1/1 . . . 0/0 . . 0/0 . 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . 0/0 . 0/0 . . 0/0 0/0 0/0 1/1 +20 29598472 rs73612735 T G 10639 NOT_DESIGNED DB;SRC=VQSR-ONLY +20 29632410 . T C 5.11 NOT_DESIGNED SRC=2-OF-7-ONLY +20 29642272 rs77298479 T A 100 NOT_DESIGNED DB;SRC=2-OF-7-ONLY +20 29827087 rs62641496 G C 100 NOT_DESIGNED DB;SRC=2-OF-7-ONLY +20 30120025 . C G 1113 POSSIBLE_PROBE_FAILURE BCM.AC=9;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 30595334 rs62206358 C A 62 PASS BCM.AC=3;DB;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 30616314 . G A 176 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 30696393 rs76882848 T C 150 PASS BCM.AC=3;DB;SEQUENOM.AC=3;SRC=VQSR+2-OF-7 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 30884360 . C A 6 PASS BCM.AC=1;SEQUENOM.AC=0;SRC=VQSR-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 30910907 . A T 24 NOT_DESIGNED SRC=VQSR-ONLY +20 31107862 . T C 46 PASS BCM.AC=6;SEQUENOM.AC=0;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 31316775 . T G 47 PASS BCM.AC=2;SEQUENOM.AC=1;SRC=VQSR-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 31576854 . C T 66 PASS BCM.AC=8;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32840139 . G A 1158 PASS BCM.AC=11;SEQUENOM.AC=0;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 33588848 . C T 17 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 33974818 . G A 959 NOT_DESIGNED BCM.AC=12;SRC=VQSR+INTERSECTION +20 34147834 rs368386 G A 105 NOT_DESIGNED BCM.AC=3;DB;SRC=VQSR+2-OF-7 +20 34155930 . T C 1200 NOT_DESIGNED BCM.AC=23;SRC=VQSR+2-OF-7 +20 34589611 . C T 39 PASS SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 34595073 . T G 518 POSSIBLE_PROBE_FAILURE BCM.AC=4;SEQUENOM.AC=0;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 35255604 . C T 367 POSSIBLE_PROBE_FAILURE BCM.AC=5;SEQUENOM.AC=0;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 35644471 rs8115057 C T 10677 PASS BCM.AC=174;DB;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 36480073 . T C 428 PASS BCM.AC=6;SEQUENOM.AC=6;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 36563396 . G A 2.68 PASS SEQUENOM.AC=1;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 36645837 rs79088417 T C 342 NOT_DESIGNED DB;SRC=VQSR+2-OF-7 +20 36667909 . C T 659 NOT_DESIGNED BCM.AC=6;SRC=VQSR+INTERSECTION +20 36932648 rs5743498 C T 107 PASS BCM.AC=3;DB;SEQUENOM.AC=3;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37398143 . T A 31 PASS BCM.AC=1;SEQUENOM.AC=0;SRC=VQSR-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37790289 . G A 26 PASS BCM.AC=2;SEQUENOM.AC=2;SRC=VQSR+2-OF-7 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37817201 . A G 222 PASS BCM.AC=2;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37873327 . A T 445 PASS BCM.AC=2;SEQUENOM.AC=2;SRC=VQSR+2-OF-7 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37980382 . A G 78 PASS BCM.AC=2;SEQUENOM.AC=2;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 38302429 rs73906408 C T 5149 PASS BCM.AC=24;DB;SEQUENOM.AC=24;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 38369195 . C T 43 DUPLICATE_MAPPING BCM.AC=56;SRC=VQSR+2-OF-7 +20 38901146 . C T 2046 NOT_DESIGNED BCM.AC=60;SRC=VQSR+2-OF-7 +20 39110108 . C T 4.13 PASS SEQUENOM.AC=0;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 39624865 . G A 584 NOT_DESIGNED BCM.AC=9;SRC=VQSR+2-OF-7 +20 40505598 . A G 16 PASS SEQUENOM.AC=1;SRC=2-OF-7-ONLY GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 40927704 . T C 12 PASS BCM.AC=0;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41093733 . T C 5 NOT_DESIGNED SRC=VQSR-ONLY +20 41137712 rs230167 C T 24 NOT_DESIGNED DB;SRC=VQSR+2-OF-7 +20 41311175 . C T 75 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41642529 . T G 72 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41756929 . C T 32 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41818162 rs117637352 G A 391 PASS BCM.AC=30;DB;SEQUENOM.AC=29;SRC=VQSR+2-OF-7 GT 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42153349 . C T 25 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42171267 . A G 88.70 PASS SEQUENOM.AC=13;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 0/1 0/0 0/0 0/1 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42330199 . G A 590 PASS BCM.AC=5;SEQUENOM.AC=3;SRC=VQSR+INTERSECTION GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42474396 . G A 100 PASS BCM.AC=2;SEQUENOM.AC=2;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42483892 . T C 112 NOT_DESIGNED BCM.AC=1;SRC=VQSR+2-OF-7 +20 42500754 rs6513891 C A 619 PASS DB;SEQUENOM.AC=0;SRC=VQSR-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42575810 . T C 3.60 PASS SEQUENOM.AC=2;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42762553 rs5014517 C T 759.47 NOT_DESIGNED BCM.AC=366;DB;SRC=2-OF-7-ONLY +20 42908494 . T C 42 PASS BCM.AC=3;SEQUENOM.AC=3;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42927494 . C G 17 PASS BCM.AC=3;SEQUENOM.AC=0;SRC=VQSR-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43033625 . G A 100 NOT_DESIGNED SRC=2-OF-7-ONLY +20 43066015 rs6093982 C T 290 PASS BCM.AC=2;DB;SEQUENOM.AC=5;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43506182 . T C 28 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43582424 rs79775916 C T 9 PASS BCM.AC=1;DB;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43744100 . G C 4.80 PASS SEQUENOM.AC=0;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43899736 . G A 35 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 44373763 . C T 730 PASS BCM.AC=6;SEQUENOM.AC=6;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 45097507 rs454429 C T 25449 PASS BCM.AC=302;DB;SEQUENOM.AC=300;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/1 0/1 0/0 0/0 . 0/0 0/0 0/0 0/1 . 0/0 0/1 0/0 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 1/1 0/1 0/0 1/1 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/0 0/0 1/1 0/1 1/1 0/0 0/1 0/0 0/0 0/1 0/0 . 0/1 1/1 0/1 0/0 0/0 0/1 0/0 0/1 1/1 0/0 0/1 0/1 . 0/1 0/0 0/1 0/0 0/0 0/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 1/1 1/1 0/1 0/0 0/0 1/1 0/0 0/1 1/1 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/1 0/1 0/0 0/0 1/1 0/0 0/1 0/0 0/1 1/1 0/0 0/0 0/1 0/1 0/1 0/0 0/0 0/0 0/0 0/0 1/1 0/1 1/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/0 1/1 1/1 1/1 0/0 0/1 0/0 1/1 1/1 0/0 1/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 . 1/1 1/1 1/1 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/0 0/0 0/1 1/1 0/1 0/1 0/0 1/1 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 1/1 0/0 0/0 0/0 0/1 0/1 1/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 1/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 1/1 0/1 1/1 0/1 0/0 0/0 0/0 0/1 0/0 1/1 1/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/0 0/0 0/1 . 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/1 0/0 0/0 0/1 1/1 1/1 0/0 0/1 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 1/1 0/0 0/1 0/0 0/1 0/1 0/1 0/0 0/0 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/0 1/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 0/0 0/0 0/0 0/0 +20 45919615 . T C 46 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 46997402 rs34772061 C G 19 NOT_DESIGNED DB;SRC=VQSR+2-OF-7 +20 47502684 . G A 66 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 48045398 . A G 20 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 48124745 . C T 10.30 PASS SEQUENOM.AC=1;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 48422538 rs73269151 A G 13012 NOT_DESIGNED BCM.AC=282;DB;SRC=VQSR+INTERSECTION +20 48669886 rs73276465 G C 106 NOT_DESIGNED BCM.AC=8;DB;SRC=VQSR+2-OF-7 +20 48691248 . A G 95 PASS BCM.AC=2;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 48917711 rs116072324 T C 129 NOT_DESIGNED BCM.AC=1;DB;SRC=VQSR+2-OF-7 +20 49098380 . A T 115 PASS BCM.AC=1;SEQUENOM.AC=2;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49206794 rs116083969 G A 19 PASS BCM.AC=1;DB;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49360238 . G A 50 PASS BCM.AC=3;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49712636 rs113933231 T A 93 PASS BCM.AC=3;DB;SEQUENOM.AC=3;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 50309600 . C A 46 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 50599968 rs6096700 T C 10667 NOT_DESIGNED BCM.AC=426;DB;SRC=VQSR+2-OF-7 +20 50601297 . A T 7 PASS BCM.AC=0;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 50603254 rs6021599 A G 13052 NOT_DESIGNED BCM.AC=520;DB;SRC=VQSR+2-OF-7 +20 50810123 rs28420712 A T 2671 NOT_DESIGNED BCM.AC=228;DB;SRC=VQSR+2-OF-7 +20 50892806 . A G 37 NOT_DESIGNED BCM.AC=1;SRC=VQSR+2-OF-7 +20 51511870 . C T 116 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 51818730 . C T 130 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 51958269 . G C 48 PASS BCM.AC=1;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 52285202 rs113200595 T G 11071 NOT_DESIGNED BCM.AC=198;DB;SRC=VQSR+2-OF-7 +20 52308503 . T C 651 PASS BCM.AC=5;SEQUENOM.AC=5;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 52470222 rs28606974 A G 72 NOT_DESIGNED BCM.AC=22;DB;SRC=VQSR-ONLY +20 52485230 . G T 74 NOT_DESIGNED BCM.AC=21;SRC=VQSR-ONLY +20 53017837 rs112388078 T C 1190 PASS BCM.AC=8;DB;SEQUENOM.AC=8;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 53031638 . T G 4 PASS SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 53272023 rs4362623 G A 70728 PASS BCM.AC=692;DB;SEQUENOM.AC=690;SRC=VQSR+INTERSECTION GT 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 0/0 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 0/1 1/1 . 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/0 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 +20 53423667 . T A 214 PASS BCM.AC=2;SEQUENOM.AC=2;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 53580904 . T C 32 PASS BCM.AC=1;SEQUENOM.AC=2;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 53599478 . C T 34 NOT_DESIGNED BCM.AC=1;SRC=VQSR+2-OF-7 +20 54004274 rs114966870 A G 602 PASS BCM.AC=40;DB;SEQUENOM.AC=9;SRC=VQSR-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54096380 . G A 46 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54146938 . G A 27 POLYMORPHIC_SAMPLES_FAILED BCM.AC=1;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54163701 . A G 130 PASS BCM.AC=3;SEQUENOM.AC=3;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . 0/0 0/0 . 0/0 0/0 0/0 0/0 . . 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . . 0/0 . 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . . +20 54199759 . T C 198 NOT_DESIGNED BCM.AC=9;SRC=VQSR+2-OF-7 +20 54313664 rs112885916 A T 98 PASS BCM.AC=10;DB;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54424603 . T C 116 PASS BCM.AC=8;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54542220 . C T 33 NOT_DESIGNED SRC=VQSR-ONLY +20 54628591 . G A 87 POLYMORPHIC_SAMPLES_FAILED BCM.AC=2;SEQUENOM.AC=4;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54793377 . C T 8 HIGH_NO_CALL_RATE BCM.AC=1;SEQUENOM.AC=0;SRC=VQSR-ONLY GT . . . . . . . . . . . . 0/0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0/0 . . . . . . . . . . . . . . . . . . . . . . . 0/0 . . . . . . . . . . . 0/0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0/0 . . . . . . . . . . . 0/0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0/0 . . . . . . . . . . . . . . . . . . . . . 0/0 0/0 0/0 . . . . . . . . . . . 0/0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0/0 0/0 . . . . . . . . . . 0/0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +20 55067830 . G A 6 PASS SEQUENOM.AC=1;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 55113534 . T G 21 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 55195413 . A G 20 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 55483325 . C T 17 NOT_DESIGNED BCM.AC=1;SRC=VQSR-ONLY +20 55598554 . T C 22.30 PASS SEQUENOM.AC=1;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 55790632 . G T 39 HIGH_NO_CALL_RATE BCM.AC=2;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 . . 0/0 . . . . 0/0 0/0 . . 0/0 . . 0/0 . . . . . . . 0/0 0/0 0/0 . . . 0/0 0/0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0/0 . . . . . . . . . . . . . 0/0 . . . . . . . . . . . . . . . . . 0/0 0/0 0/0 . . . . . . . . . 0/0 0/0 0/0 0/0 . . . . . . . . 0/0 0/0 0/0 0/0 . 0/0 . . . . . . 0/0 0/0 0/0 . 0/0 0/0 . . 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . . 0/0 . . 0/0 0/0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0/0 0/0 0/0 . . . . . 0/0 . 0/0 . 0/0 0/0 0/0 . . . . . . . 0/0 0/0 0/0 0/0 0/0 . . . . . . . 0/0 . . . 0/0 . . . . . . . . . . 0/0 0/0 . . . . 0/0 . . . . . . 0/0 0/0 . . . . . . 0/0 0/0 0/0 0/0 0/0 . . . . . 0/0 0/0 . . 0/0 0/0 0/0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0/0 . . . . . . . . . . . . . . . . . . . . . . . 0/0 . . . . . . . . . +20 55870101 . C T 129 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 56029723 rs74833660 G A 21 PASS BCM.AC=1;DB;SEQUENOM.AC=3;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 56309506 . C G 6.38 PASS SEQUENOM.AC=1;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 56335703 . G C 33 PASS BCM.AC=2;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 56549982 rs6099866 T C 999 PASS DB;SEQUENOM.AC=9;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 56792927 . C T 207 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 57266953 . C A 46 PASS BCM.AC=1;SEQUENOM.AC=2;SRC=VQSR+2-OF-7 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 57566637 rs149265 C T 58555 PASS BCM.AC=513;DB;SEQUENOM.AC=505;SRC=VQSR+INTERSECTION GT 1/1 1/1 0/1 0/1 0/1 1/1 . 1/1 1/1 1/1 1/1 . 0/1 0/0 0/1 0/1 0/0 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 0/0 0/1 . 1/1 . 1/1 0/1 0/1 0/0 0/1 1/1 1/1 0/1 0/1 0/1 . 1/1 1/1 1/1 0/1 0/1 0/1 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 1/1 0/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 0/0 0/0 0/0 1/1 1/1 0/0 0/0 1/1 0/1 1/1 0/0 0/1 0/1 1/1 0/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 1/1 1/1 0/0 1/1 1/1 1/1 0/0 0/1 1/1 0/1 0/0 0/1 1/1 1/1 0/1 0/0 1/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/0 1/1 1/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 0/0 0/0 0/0 0/1 . 0/1 0/0 0/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/0 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/1 0/0 0/0 1/1 1/1 1/1 0/1 1/1 0/1 0/0 1/1 1/1 0/0 0/1 0/1 0/0 1/1 0/1 0/1 1/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 . 1/1 1/1 0/1 1/1 1/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/0 1/1 0/0 1/1 0/0 1/1 1/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/0 0/1 0/0 0/1 1/1 0/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 1/1 0/1 0/1 0/1 1/1 1/1 1/1 0/1 1/1 1/1 0/1 0/1 0/0 0/0 1/1 0/1 0/1 0/1 1/1 1/1 0/1 0/1 0/1 1/1 0/1 1/1 0/1 0/1 0/1 1/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 +20 57653509 rs6026678 C T 489 PASS BCM.AC=4;DB;SEQUENOM.AC=4;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 57728647 . C T 13 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 58308048 . A G 35 PASS BCM.AC=2;SEQUENOM.AC=4;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 1/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 58335635 . C T 7 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 59211281 . A G 4.33 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 59286435 . T C 5.69 PASS SEQUENOM.AC=1;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 60262734 rs73915327 C A 576 PASS BCM.AC=10;DB;SEQUENOM.AC=10;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/1 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 60291372 . A G 100 NOT_DESIGNED BCM.AC=21;SRC=2-OF-7-ONLY +20 60520698 . T C 428 NOT_DESIGNED SRC=VQSR-ONLY +20 60547414 . G T 10 PASS SEQUENOM.AC=0;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 60560062 . C T 25 NOT_DESIGNED BCM.AC=343;SRC=VQSR-ONLY +20 60578895 . G T 34 PASS BCM.AC=2;SEQUENOM.AC=2;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 60641243 . G A 16 NOT_DESIGNED BCM.AC=150;SRC=VQSR+2-OF-7 +20 60641369 . G A 16 PASS BCM.AC=159;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 60730826 . G A 11 AMBIGUOUS_SEQUENOM_CALLS BCM.AC=0;SEQUENOM.AC=0;SRC=VQSR-ONLY GT . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 61206227 . C T 4.25 NOT_DESIGNED SRC=2-OF-7-ONLY +20 61286252 rs13433258 C T 123 PASS BCM.AC=3;DB;SEQUENOM.AC=2;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 61497927 . A C 47 PASS BCM.AC=3;SEQUENOM.AC=0;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 61766484 . G T 58 NOT_DESIGNED BCM.AC=157;SRC=VQSR+2-OF-7 +20 61788338 . C G 7 NOT_DESIGNED SRC=VQSR-ONLY +20 61830486 . G A 48 PASS BCM.AC=1;SEQUENOM.AC=1;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 62191452 rs113748232 C T 143 PASS BCM.AC=7;DB;SEQUENOM.AC=7;SRC=VQSR+INTERSECTION GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 62462285 . G A 66 NOT_DESIGNED BCM.AC=304;SRC=VQSR+2-OF-7 +20 62480353 . T A 100 PASS SEQUENOM.AC=0;SRC=2-OF-7-ONLY GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 62724959 . G T 10 NOT_DESIGNED SRC=VQSR-ONLY +20 62888718 . T C 57 POLYMORPHIC_SAMPLES_FAILED BCM.AC=1;SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 62918298 . G A 33 NOT_DESIGNED SRC=VQSR+2-OF-7 +20 62961477 . T C 17 AMBIGUOUS_SEQUENOM_CALLS SEQUENOM.AC=0;SRC=VQSR+2-OF-7 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 diff --git a/tests/tabix_data/vcf/8.vcf b/tests/tabix_data/vcf/8.vcf new file mode 100644 index 0000000..4ec2daf --- /dev/null +++ b/tests/tabix_data/vcf/8.vcf @@ -0,0 +1,84 @@ +##fileformat=VCFv4.0 +##FILTER= +##FILTER= +##FILTER= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##ValidationMetrics_HardyWeinbergViolations="25 (8%)" +##ValidationMetrics_HomVarViolations="0 (0%)" +##ValidationMetrics_NoCallViolations="13 (4%)" +##ValidationMetrics_PolymorphicPassingRecords="195 (75%)" +##ValidationMetrics_RecordsPassingFilters="258 (87%)" +##ValidationMetrics_RecordsProcessed=296 +##ValidationMetrics_SamplesAssayed=383 +##VariantValidationAssessor="analysis_type=VariantValidationAssessor input_file=[] sample_metadata=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=null excludeIntervals=null reference_sequence=/humgen/1kg/reference/human_g1k_v37.fasta rodBind=[rawData/plink.renamed.sorted.fixed.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION nonDeterministicRandomSeed=false DBSNP=null downsampling_type=null downsample_to_fraction=null downsample_to_coverage=null baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities=false defaultBaseQualities=-1 validation_strictness=SILENT unsafe=null num_threads=1 interval_merging=ALL read_group_black_list=null processingTracker=null restartProcessingTracker=false processingTrackerStatusFile=null processingTrackerID=-1 allow_intervals_with_unindexed_bam=false disable_experimental_low_memory_sharding=false logging_level=INFO log_to_file=null help=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub maxHardy=20.0 maxNoCall=0.05 maxHomVar=1.1" +##source=PLINK +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT HG00127 HG00128 HG00136 HG00137 HG00138 HG00139 HG00152 HG00156 HG00234 HG00235 HG00237 HG00242 HG00244 HG00262 HG01055 HG01079 NA19138 NA18974 NA18523 NA12717 NA19209 NA18577 NA18973 NA18943 NA12873 NA18623 NA18622 NA18948 NA19171 NA19204 NA06994 NA18563 NA18547 NA18861 NA18608 NA18995 NA10851 NA18976 NA18603 NA19200 HG01204 HG01191 HG01101 HG00146 HG00306 NA18985 HG00160 HG00635 HG00372 HG00357 HG00634 NA18541 NA18950 NA19759 HG00351 HG00257 HG00118 HG00336 HG00448 HG01354 NA18609 HG00428 HG00326 NA11894 NA18956 HG00173 HG00117 NA11893 HG01251 HG01441 HG01437 HG00182 HG00330 HG01060 HG00329 NA18960 NA18856 NA07346 NA18871 NA19057 NA18868 NA18636 NA12830 NA19007 NA18910 NA18874 NA19056 NA19064 NA19066 NA18487 NA18642 NA19236 NA07056 NA18637 NA19235 NA19309 NA19311 NA19334 NA19346 NA19347 NA19372 NA19376 NA19383 NA19384 NA19394 NA19428 NA19430 NA19451 NA19466 NA19313 NA19321 NA19324 NA19332 NA19390 NA19436 NA19439 NA19440 NA19463 NA19470 NA19471 NA19472 NA19676 NA19660 NA19661 NA19663 NA19722 NA19725 NA19728 NA19729 NA19731 NA19749 NA19755 NA19756 NA19758 NA19770 NA19773 NA19777 NA19780 NA19783 NA20525 NA20589 NA20765 NA20802 NA20804 NA18544 NA18602 NA18546 NA18610 NA18957 NA18615 NA18616 NA19010 NA18638 NA18639 NA18627 NA19072 NA18630 NA19074 NA19080 NA19081 NA19083 NA19085 NA19088 NA20287 NA19835 NA20276 NA19818 NA20278 NA20282 NA20342 NA20296 NA20314 NA20346 NA19712 NA19198 NA19108 NA18934 NA18916 NA18907 NA18917 NA06989 NA12058 NA12341 NA12546 NA12489 HG01197 NA18983 NA11843 NA11892 NA12749 NA12282 NA12751 NA18959 NA19331 NA19453 NA20537 NA12046 NA20515 NA20516 NA20521 NA20524 NA20528 NA20759 NA20768 NA20769 NA20774 NA20775 NA20783 NA20787 NA20790 NA20800 NA20819 NA20812 NA20505 NA20530 NA20540 NA20538 NA20581 NA20815 NA20544 NA20810 NA20807 NA20816 NA20504 NA20753 NA20502 NA12342 NA19150 NA19468 NA20336 NA19395 NA19257 NA19360 NA19700 NA18867 NA20317 NA18968 NA19107 HG00111 HG00108 NA19077 NA19684 NA18511 NA12044 NA19382 NA19457 NA18933 NA18923 NA18965 HG00141 NA20341 NA18740 HG00537 HG00346 HG01173 HG00702 HG00313 HG00150 NA18612 HG00339 NA12273 HG00250 NA18593 NA18621 HG00478 HG00251 HG01070 NA19160 HG00479 HG00608 NA18573 HG00375 NA19248 NA19093 HG01170 HG00534 HG01171 HG01522 NA18624 HG00683 HG01521 NA19005 NA20412 NA18971 HG00446 NA12748 HG00530 HG00690 HG01356 HG01516 NA20532 HG00344 HG00328 NA18542 HG00254 HG00321 HG00577 HG00656 HG00342 HG00524 HG00650 HG00557 HG00319 HG00457 HG00125 HG00578 HG00543 HG00638 HG00171 HG00699 HG00595 HG00187 HG00704 HG00533 HG00596 HG00268 HG01083 HG00651 HG01133 HG00671 HG00327 HG01148 HG00246 HG00672 HG00556 HG00436 HG00554 NA18633 NA20344 NA11993 NA07037 NA11930 HG01366 HG01389 HG00620 NA19740 HG00190 HG00419 NA18535 HG01495 NA18592 HG01497 HG00174 HG01140 NA12287 HG00689 HG01550 HG00334 HG01375 HG00637 NA18507 HG01113 NA18550 NA19129 HG01551 HG01462 HG00331 NA12413 HG01456 HG01360 HG00708 HG01350 HG00684 NA19099 HG00284 NA12399 NA12286 NA12777 HG00277 HG00266 NA19985 HG00353 HG01102 NA07347 NA07051 NA19900 NA18984 NA07048 HG00640 HG01066 NA12812 HG01174 HG01188 +20 676148 . A AC . PASS AC=0;AN=758;HW=0.00;HetPct=0.0;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=1.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1342549 . A AAGAT . PASS AC=0;AN=760;HW=0.00;HetPct=0.0;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1366475 . CT C . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 1550416 . C CT . PASS AC=0;AN=760;HW=0.00;HetPct=0.0;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 3700705 . CTTTGGG C . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 5724449 . T TC . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 7942727 . A AC . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 9231138 . AT A . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 10090376 . T TG . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12094344 . TCAGGAGGC T . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12634463 . TGA T . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12837095 . G GA . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 12928028 . TG T . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13365589 . T TG . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 13926445 . TA T . PASS AC=0;AN=756;HW=0.00;HetPct=0.0;HomRefPct=98.7;HomVarPct=0.0;NoCallPct=1.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 14287634 . AGT A . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 14983337 . AGCC A . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15037520 . A AG . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 15141272 . T TC . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16192114 . AT A . PASS AC=0;AN=760;HW=0.00;HetPct=0.0;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 16259934 . C CAA . PASS AC=0;AN=758;HW=0.00;HetPct=0.0;HomRefPct=99.0;HomVarPct=0.0;NoCallPct=1.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 17250858 . T TC . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 17753474 . C CA . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 18520672 . A ATT . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 19188693 . T TC . PASS AC=0;AN=760;HW=0.00;HetPct=0.0;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 19437778 . GGCCTGGGATGTAAA G . PASS AC=0;AN=760;HW=0.00;HetPct=0.0;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 20434198 . TA T . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 20990240 . TC T . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 24710482 . GT G . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 25905250 . GT G . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 29589873 . CCTT C . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 29628180 . C CCACAAGAAG . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 29804699 . A AC . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 30567910 . T TG . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 31760870 . CG C . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32456076 . GT G . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 32968409 . GTC G . PASS AC=0;AN=754;HW=0.00;HetPct=0.0;HomRefPct=98.4;HomVarPct=0.0;NoCallPct=1.6 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 34313574 . A AT . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 35329008 . ATC A . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 37954797 . A AGT . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 39607037 . C CA . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 39868369 . T TG . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 40006262 . TGAG T . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 40110981 . A AG . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 40742257 . TG T . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 41964672 . A AT . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42145613 . TG T . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 42930748 . A AG . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43606638 . T TC . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 43826992 . GC G . PASS AC=0;AN=748;HW=0.00;HetPct=0.0;HomRefPct=97.7;HomVarPct=0.0;NoCallPct=2.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 44470843 . GAGTGTCGT G . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 45300827 . CT C . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 46353646 . A AG . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 47428163 . C CA . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49451656 . T TG . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49561273 . A AG . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 49765611 . A AC . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 50772065 . T TC . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 53538294 . T TG . PASS AC=0;AN=764;HW=0.00;HetPct=0.0;HomRefPct=99.7;HomVarPct=0.0;NoCallPct=0.3 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 54262948 . A AC . PASS AC=0;AN=760;HW=0.00;HetPct=0.0;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 55658161 . GT G . PASS AC=0;AN=760;HW=0.00;HetPct=0.0;HomRefPct=99.2;HomVarPct=0.0;NoCallPct=0.8 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 59186675 . TATTA T . PASS AC=0;AN=762;HW=0.00;HetPct=0.0;HomRefPct=99.5;HomVarPct=0.0;NoCallPct=0.5 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 . 0/0 . 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 +20 61531765 . AG A . PASS AC=0;AN=766;HW=0.00;HetPct=0.0;HomRefPct=100.0;HomVarPct=0.0;NoCallPct=0.0 GT 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 diff --git a/tests/tabix_data/vcf/9.vcf b/tests/tabix_data/vcf/9.vcf new file mode 100644 index 0000000..e0d112c --- /dev/null +++ b/tests/tabix_data/vcf/9.vcf @@ -0,0 +1,1000 @@ +##fileformat=VCFv4.0 +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT DNA_pool_A +chr1 1281168 . A G 14 . DP=37;AF1=0.6243;CI95=0.5,1;DP4=4,0,6,0;MQ=15;PV4=1,0.027,1,1 PL:GT:GQ 43,0,4:0/1:6 +chr1 1281205 . T C 26 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=41 PL:GT:GQ 58,9,0:1/1:63 +chr1 1281206 . G C 25 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=41 PL:GT:GQ 57,9,0:1/1:63 +chr1 1922737 . G C 13.2 . DP=21;AF1=1;CI95=1,1;DP4=0,0,0,21;MQ=22 PL:GT:GQ 46,63,0:1/1:99 +chr1 21197513 . A G 55.1 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=41 PL:GT:GQ 88,21,0:1/1:84 +chr1 21343209 . T C 5.45 . DP=17;AF1=1;CI95=1,1;DP4=0,0,17,0;MQ=14 PL:GT:GQ 37,51,0:1/1:99 +chr1 22097362 . T C 4.75 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=30 PL:GT:GQ 35,9,0:1/1:63 +chr1 22254012 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 40,6,0:1/1:49 +chr1 22650927 . G A 48.1 . DP=11;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=24 PL:GT:GQ 81,21,0:1/1:84 +chr1 23535401 . C T 40.4 . DP=25;AF1=1;CI95=0.5,1;DP4=0,16,0,5;MQ=19;PV4=1,0.2,1,1 PL:GT:GQ 73,13,0:1/1:65 +chr1 23543855 . T C 49.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=44 PL:GT:GQ 82,18,0:1/1:90 +chr1 24245107 . C G 32 . DP=4;AF1=0.5001;CI95=0.5,0.5;DP4=0,2,0,2;MQ=36;PV4=1,1,1,1 PL:GT:GQ 62,0,35:0/1:38 +chr1 24274412 . G C 39.5 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=32 PL:GT:GQ 72,12,0:1/1:72 +chr1 36529832 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=46 PL:GT:GQ 73,6,0:1/1:49 +chr1 37788090 . A G 89.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=49 PL:GT:GQ 122,12,0:1/1:72 +chr1 43120440 . C T 34 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=0,1,0,2;MQ=49;PV4=1,1,1,1 PL:GT:GQ 64,0,31:0/1:34 +chr1 43980466 . C T 43 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,15;MQ=19 PL:GT:GQ 76,45,0:1/1:99 +chr1 46047795 . T C 29.1 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=31 PL:GT:GQ 62,18,0:1/1:90 +chr1 48860309 . C T 99 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=46 PL:GT:GQ 141,18,0:1/1:90 +chr1 49415599 . T C 4.61 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=34 PL:GT:GQ 34,6,0:1/1:49 +chr1 51601816 . G T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=50 PL:GT:GQ 40,6,0:1/1:49 +chr1 51955459 . G C 89.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=49 PL:GT:GQ 122,12,0:1/1:72 +chr1 68479569 . T G 12 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 43,6,0:1/1:49 +chr1 69032455 . A G 15.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=29 PL:GT:GQ 47,9,0:1/1:63 +chr1 71888225 . G T 9.31 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=43 PL:GT:GQ 40,6,0:1/1:49 +chr1 72381528 . T C 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=41 PL:GT:GQ 76,9,0:1/1:63 +chr1 82004013 . A G 37.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=50 PL:GT:GQ 70,12,0:1/1:72 +chr1 86289622 . C T 18 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=42 PL:GT:GQ 50,9,0:1/1:63 +chr1 90267663 . A G 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=45 PL:GT:GQ 54,9,0:1/1:63 +chr1 92699542 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=45 PL:GT:GQ 40,6,0:1/1:49 +chr1 94867317 . G A 26.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=45 PL:GT:GQ 58,6,0:1/1:49 +chr1 96428713 . C G 3.98 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=27 PL:GT:GQ 33,6,0:1/1:49 +chr1 100466329 . G C 4.85 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,6;MQ=22 PL:GT:GQ 36,18,0:1/1:90 +chr1 101909281 . G A 70 . DP=11;AF1=0.5;CI95=0.5,0.5;DP4=4,0,5,0;MQ=46;PV4=1,1,0.096,1 PL:GT:GQ 100,0,88:0/1:91 +chr1 106216572 . T A 22 . DP=18;AF1=1;CI95=1,1;DP4=0,0,16,0;MQ=21 PL:GT:GQ 55,48,0:1/1:99 +chr1 107901770 . T C 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 40,6,0:1/1:49 +chr1 108431179 . A G 99 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=41 PL:GT:GQ 155,24,0:1/1:96 +chr1 112005344 . C T 99 . DP=52;AF1=1;CI95=1,1;DP4=7,0,27,0;MQ=44;PV4=1,1,1,1 PL:GT:GQ 196,25,0:1/1:99 +chr1 116625452 . C T 36 . DP=44;AF1=0.5;CI95=0.5,0.5;DP4=0,23,0,20;MQ=49;PV4=1,2.3e-69,0.42,1 PL:GT:GQ 66,0,179:0/1:69 +chr1 118060710 . G T 6.98 . DP=8;AF1=0.4999;CI95=0.5,0.5;DP4=4,0,3,0;MQ=47;PV4=1,0.0071,1,1 PL:GT:GQ 36,0,73:0/1:39 +chr1 118198177 . A G 15.9 . DP=23;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=43 PL:GT:GQ 47,6,0:1/1:49 +chr1 118586346 . T C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr1 120809555 . G A 20 . DP=8;AF1=0.5;CI95=0.5,0.5;DP4=6,0,2,0;MQ=46;PV4=1,1,1,1 PL:GT:GQ 50,0,106:0/1:53 +chr1 130723110 . C A 20.7 . DP=8;AF1=0.5939;CI95=0.5,1;DP4=0,6,0,2;MQ=26;PV4=1,1,1,1 PL:GT:GQ 50,0,5:0/1:7 +chr1 133979895 . T C 14.9 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=43 PL:GT:GQ 46,6,0:1/1:49 +chr1 134977940 . C T 30 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=0,1,0,2;MQ=38;PV4=1,1,0.26,1 PL:GT:GQ 60,0,31:0/1:34 +chr1 141768589 . G A 18.1 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=4,0,4,0;MQ=51;PV4=1,2.7e-05,1,1 PL:GT:GQ 48,0,100:0/1:51 +chr1 141768590 . G A 22 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=2,0,4,0;MQ=50;PV4=1,0.0033,1,1 PL:GT:GQ 52,0,40:0/1:43 +chr1 146506051 . T C 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=43 PL:GT:GQ 76,9,0:1/1:63 +chr1 150997009 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr1 162915612 . G C 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr1 168455400 . A G 4.12 . DP=28;AF1=1;CI95=1,1;DP4=0,0,0,27;MQ=10 PL:GT:GQ 35,81,0:1/1:99 +chr1 172784744 . T C 17.8 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=48 PL:GT:GQ 49,6,0:1/1:49 +chr1 183627307 . G A 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr1 185789457 . T C 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=50 PL:GT:GQ 73,6,0:1/1:49 +chr1 187081827 . T C 4.77 . DP=10;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=17 PL:GT:GQ 36,30,0:1/1:99 +chr1 188468339 . C T 33 . DP=25;AF1=1;CI95=1,1;DP4=0,0,0,13;MQ=24 PL:GT:GQ 66,39,0:1/1:99 +chr1 188595435 . C T 41.8 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr1 188670561 . G C 3.55 . DP=22;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=18 PL:GT:GQ 34,27,0:1/1:99 +chr1 188924877 . G A 6.2 . DP=10;AF1=0.9999;CI95=0.5,1;DP4=2,0,3,0;MQ=21;PV4=1,1,1,0.3 PL:GT:GQ 35,3,0:1/1:41 +chr1 190536295 . G A 68 . DP=38;AF1=1;CI95=1,1;DP4=0,0,36,0;MQ=18 PL:GT:GQ 101,108,0:1/1:99 +chr1 191129408 . T A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=48 PL:GT:GQ 40,6,0:1/1:49 +chr1 195937816 . T C 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr1 198857619 . T C 89 . DP=61;AF1=0.5;CI95=0.5,0.5;DP4=0,38,0,17;MQ=30;PV4=1,0.032,1,1 PL:GT:GQ 119,0,139:0/1:99 +chr1 199057483 . T C 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=32 PL:GT:GQ 44,6,0:1/1:49 +chr1 200133619 . G C 5.83 . DP=49;AF1=1;CI95=0.5,1;DP4=2,0,8,0;MQ=17;PV4=1,0.059,1,0.2 PL:GT:GQ 37,12,0:1/1:72 +chr1 200729661 . A T 36 . DP=15;AF1=1;CI95=1,1;DP4=0,0,14,0;MQ=27 PL:GT:GQ 69,42,0:1/1:99 +chr1 201374519 . T C 69.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=39 PL:GT:GQ 102,12,0:1/1:72 +chr1 202811668 . G A 20.2 . DP=4;AF1=0.5163;CI95=0.5,1;DP4=0,1,0,3;MQ=24;PV4=1,1,1,1 PL:GT:GQ 50,0,12:0/1:15 +chr1 202960650 . C T 16.6 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=27 PL:GT:GQ 49,12,0:1/1:72 +chr1 205686638 . C T 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=42 PL:GT:GQ 43,9,0:1/1:63 +chr1 205949857 . A G 3.14 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=21 PL:GT:GQ 33,15,0:1/1:75 +chr1 209806643 . A G 13.2 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=21 PL:GT:GQ 46,24,0:1/1:96 +chr1 209871501 . C T 25 . DP=12;AF1=0.5;CI95=0.5,0.5;DP4=5,0,4,0;MQ=41;PV4=1,7.7e-06,1,1 PL:GT:GQ 55,0,84:0/1:58 +chr1 211051323 . G A 99 . DP=14;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=49 PL:GT:GQ 176,24,0:1/1:96 +chr1 211389716 . C T 12 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=32 PL:GT:GQ 43,6,0:1/1:49 +chr1 211868415 . G A 3.54 . DP=11;AF1=1;CI95=1,1;DP4=0,0,0,11;MQ=14 PL:GT:GQ 34,33,0:1/1:99 +chr1 211914531 . C T 84.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,1,0,4;MQ=46;PV4=1,1,1,1 PL:GT:GQ 116,7,0:1/1:57 +chr1 214691313 . A G 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=49 PL:GT:GQ 54,9,0:1/1:63 +chr1 215184650 . C T 40.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=46 PL:GT:GQ 72,6,0:1/1:49 +chr1 215995258 . A G 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=50 PL:GT:GQ 100,9,0:1/1:63 +chr1 217031394 . G C 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr1 217986960 . T C 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=36 PL:GT:GQ 76,9,0:1/1:63 +chr1 218086681 . A G 99 . DP=10;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=34 PL:GT:GQ 142,27,0:1/1:99 +chr1 218546019 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 40,6,0:1/1:49 +chr1 218632417 . G T 17.1 . DP=19;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=26 PL:GT:GQ 50,21,0:1/1:84 +chr1 218833355 . C G 23 . DP=7;AF1=0.5;CI95=0.5,0.5;DP4=5,0,2,0;MQ=39;PV4=1,1,1,1 PL:GT:GQ 53,0,63:0/1:56 +chr1 219303186 . T C 7.79 . DP=25;AF1=1;CI95=1,1;DP4=0,0,0,25;MQ=12 PL:GT:GQ 40,75,0:1/1:99 +chr1 219517634 . G A 26.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=42 PL:GT:GQ 59,12,0:1/1:72 +chr1 219590158 . T C 3.27 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 33,12,0:1/1:72 +chr1 219709853 . A T 99 . DP=124;AF1=0.5;CI95=0.5,0.5;DP4=80,0,41,0;MQ=44;PV4=1,0.26,1,1 PL:GT:GQ 143,0,156:0/1:99 +chr1 222457988 . A G 11.1 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=23 PL:GT:GQ 42,6,0:1/1:49 +chr1 222477914 . A G 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=39 PL:GT:GQ 43,9,0:1/1:63 +chr1 223010233 . A G 18.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 51,12,0:1/1:72 +chr1 223796360 . G A 6.79 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=21 PL:GT:GQ 37,6,0:1/1:49 +chr1 224273784 . A T 14.2 . DP=18;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=15 PL:GT:GQ 47,30,0:1/1:99 +chr1 224454685 . C T 46.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=32 PL:GT:GQ 79,15,0:1/1:75 +chr1 224514706 . G C 21 . DP=38;AF1=1;CI95=1,1;DP4=0,0,38,0;MQ=19 PL:GT:GQ 54,114,0:1/1:99 +chr1 224515793 . C T 99 . DP=26;AF1=1;CI95=1,1;DP4=0,0,26,0;MQ=45 PL:GT:GQ 211,78,0:1/1:99 +chr1 224692969 . C A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=36 PL:GT:GQ 40,6,0:1/1:49 +chr1 225607249 . A G 34 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=1,0,2,0;MQ=45;PV4=1,1,0,1 PL:GT:GQ 64,0,31:0/1:34 +chr1 226923918 . C A 29.1 . DP=52;AF1=1;CI95=0.5,1;DP4=0,2,0,10;MQ=27;PV4=1,1,1,1 PL:GT:GQ 62,18,0:1/1:90 +chr1 227125189 . T C 56.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=41 PL:GT:GQ 89,12,0:1/1:72 +chr1 227133712 . A T 20.1 . DP=26;AF1=0.5;CI95=0.5,0.5;DP4=11,0,10,0;MQ=23;PV4=1,1,0.48,1 PL:GT:GQ 50,0,39:0/1:42 +chr1 227943954 . G C 47 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=37 PL:GT:GQ 79,9,0:1/1:63 +chr1 227943974 . G A 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=34 PL:GT:GQ 66,12,0:1/1:72 +chr1 228067480 . A G 42.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=45 PL:GT:GQ 75,15,0:1/1:75 +chr1 228067510 . A G 99 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=45 PL:GT:GQ 140,15,0:1/1:75 +chr1 228088778 . C T 6.79 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=23 PL:GT:GQ 37,6,0:1/1:49 +chr1 228117888 . A C 13.9 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=40 PL:GT:GQ 45,6,0:1/1:49 +chr1 228139641 . T C 44.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=35 PL:GT:GQ 77,12,0:1/1:72 +chr1 228577146 . T C 26 . DP=41;AF1=0.5;CI95=0.5,0.5;DP4=0,25,0,14;MQ=22;PV4=1,1,1,0.027 PL:GT:GQ 56,0,77:0/1:59 +chr1 229001369 . C A 45 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=41 PL:GT:GQ 77,9,0:1/1:63 +chr1 229001386 . C T 8.44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 39,6,0:1/1:49 +chr1 229348080 . T C 18.1 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=0,1,0,2;MQ=40;PV4=1,0.33,0.17,0.33 PL:GT:GQ 48,0,31:0/1:34 +chr1 229439710 . C T 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=32 PL:GT:GQ 66,12,0:1/1:72 +chr1 229655149 . T C 30 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=30 PL:GT:GQ 63,24,0:1/1:96 +chr1 229660873 . C G 81 . DP=28;AF1=0.5;CI95=0.5,0.5;DP4=0,20,0,7;MQ=36;PV4=1,1,1,1 PL:GT:GQ 111,0,120:0/1:99 +chr2a 3661005 . C G 24 . DP=13;AF1=0.5001;CI95=0.5,0.5;DP4=7,0,4,0;MQ=27;PV4=1,1.1e-05,1,1 PL:GT:GQ 54,0,34:0/1:37 +chr2a 4140063 . G A 81 . DP=26;AF1=0.6671;CI95=0.5,1;DP4=18,0,8,0;MQ=24;PV4=1,8.3e-09,1,1 PL:GT:GQ 110,0,3:0/1:5 +chr2a 4248440 . T C 20 . DP=28;AF1=0.5;CI95=0.5,0.5;DP4=11,0,7,0;MQ=25;PV4=1,1,0.47,1 PL:GT:GQ 50,0,92:0/1:53 +chr2a 4707656 . A G 63 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 95,9,0:1/1:63 +chr2a 5194801 . G A 7.59 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=24 PL:GT:GQ 38,6,0:1/1:49 +chr2a 14111103 . A G 7.84 . DP=7;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=20 PL:GT:GQ 40,21,0:1/1:84 +chr2a 17799746 . A G 11.3 . DP=5;AF1=0.5001;CI95=0.5,0.5;DP4=0,3,0,2;MQ=32;PV4=1,1,1,1 PL:GT:GQ 41,0,35:0/1:37 +chr2a 24728910 . G A 45.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=28 PL:GT:GQ 78,15,0:1/1:75 +chr2a 29627939 . G T 5.44 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=27 PL:GT:GQ 36,9,0:1/1:63 +chr2a 31373164 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=44 PL:GT:GQ 73,6,0:1/1:49 +chr2a 33935228 . T C 41.8 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=51 PL:GT:GQ 73,6,0:1/1:49 +chr2a 36311856 . G A 99 . DP=30;AF1=1;CI95=1,1;DP4=0,0,0,29;MQ=44 PL:GT:GQ 213,87,0:1/1:99 +chr2a 39281204 . T C 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 100,9,0:1/1:63 +chr2a 41087565 . C T 74.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=38 PL:GT:GQ 107,12,0:1/1:72 +chr2a 45574768 . C A 11.3 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=18 PL:GT:GQ 43,9,0:1/1:63 +chr2a 55464464 . T C 26.1 . DP=7;AF1=0.9966;CI95=0.5,1;DP4=5,0,2,0;MQ=26;PV4=1,1,1,1 PL:GT:GQ 55,1,0:1/1:23 +chr2a 63107673 . T A 70.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=34 PL:GT:GQ 103,12,0:1/1:72 +chr2a 63141732 . A T 22.8 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 54,6,0:1/1:49 +chr2a 63141910 . G A 3.41 . DP=16;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=32 PL:GT:GQ 32,6,0:1/1:49 +chr2a 63141911 . C T 9.55 . DP=16;AF1=0.5031;CI95=0.5,0.5;DP4=0,2,0,3;MQ=33;PV4=1,0.43,1,1 PL:GT:GQ 39,0,19:0/1:22 +chr2a 63143543 . C T 28 . DP=18;AF1=1;CI95=1,1;DP4=0,1,0,17;MQ=16;PV4=1,1,1,1 PL:GT:GQ 61,42,0:1/1:99 +chr2a 66419805 . G A 3.69 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=23 PL:GT:GQ 34,15,0:1/1:75 +chr2a 66563922 . C T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=51 PL:GT:GQ 40,6,0:1/1:49 +chr2a 67719136 . C T 39.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 71,6,0:1/1:49 +chr2a 72781453 . A C 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=50 PL:GT:GQ 73,6,0:1/1:49 +chr2a 76733211 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr2a 78190502 . A C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr2a 85021209 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr2a 88554861 . A T 39 . DP=74;AF1=0.5;CI95=0.5,0.5;DP4=0,7,0,4;MQ=46;PV4=1,1,1,1 PL:GT:GQ 69,0,92:0/1:72 +chr2a 88554877 . A G 92 . DP=90;AF1=0.5;CI95=0.5,0.5;DP4=0,23,0,13;MQ=41;PV4=1,0.3,1,1 PL:GT:GQ 122,0,128:0/1:99 +chr2a 88824857 . G A 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=37 PL:GT:GQ 45,6,0:1/1:49 +chr2a 93546675 . C T 26 . DP=6;AF1=0.5;CI95=0.5,0.5;DP4=4,0,2,0;MQ=46;PV4=1,1,1,1 PL:GT:GQ 56,0,87:0/1:59 +chr2a 94788853 . A G 34.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=43 PL:GT:GQ 67,15,0:1/1:75 +chr2a 96738146 . T C 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=40 PL:GT:GQ 43,9,0:1/1:63 +chr2a 102737384 . A G 12.3 . DP=18;AF1=1;CI95=1,1;DP4=0,0,18,0;MQ=11 PL:GT:GQ 45,54,0:1/1:99 +chr2a 103407172 . A G 35 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=19 PL:GT:GQ 68,24,0:1/1:96 +chr2a 105774580 . T G 99 . DP=13;AF1=1;CI95=1,1;DP4=0,0,13,0;MQ=30 PL:GT:GQ 135,39,0:1/1:99 +chr2a 106376301 . C G 24.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=19 PL:GT:GQ 57,18,0:1/1:90 +chr2a 106376315 . C T 8.75 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=19 PL:GT:GQ 41,18,0:1/1:90 +chr2a 112422267 . C T 30 . DP=20;AF1=0.5;CI95=0.5,0.5;DP4=14,0,5,0;MQ=39;PV4=1,1,1,1 PL:GT:GQ 60,0,131:0/1:63 +chr2b 3049384 . A C 14.9 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 46,6,0:1/1:49 +chr2b 3049385 . G C 14.9 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 46,6,0:1/1:49 +chr2b 3049406 . C G 99 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=36 PL:GT:GQ 135,18,0:1/1:90 +chr2b 4213802 . T C 89.5 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=49 PL:GT:GQ 122,12,0:1/1:72 +chr2b 5022895 . G A 66 . DP=10;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=49 PL:GT:GQ 99,30,0:1/1:99 +chr2b 6037666 . G T 56 . DP=18;AF1=1;CI95=1,1;DP4=0,0,0,13;MQ=17 PL:GT:GQ 89,39,0:1/1:99 +chr2b 13656952 . G A 19.2 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=21 PL:GT:GQ 52,18,0:1/1:90 +chr2b 15026944 . A G 6.79 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=32 PL:GT:GQ 37,6,0:1/1:49 +chr2b 23362613 . A G 5.64 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=22 PL:GT:GQ 37,15,0:1/1:75 +chr2b 45947861 . C G 68 . DP=11;AF1=1;CI95=1,1;DP4=0,0,0,11;MQ=50 PL:GT:GQ 101,33,0:1/1:99 +chr2b 46597824 . T C 65.6 . DP=39;AF1=0.5939;CI95=0.5,1;DP4=23,0,10,0;MQ=22;PV4=1,0.014,1,1 PL:GT:GQ 95,0,5:0/1:7 +chr2b 49665191 . G T 34.1 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=37 PL:GT:GQ 67,21,0:1/1:84 +chr2b 61001546 . A G 48 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=26 PL:GT:GQ 81,24,0:1/1:96 +chr2b 88502851 . T C 4.77 . DP=4;AF1=0.5;CI95=0.5,0.5;DP4=0,2,0,2;MQ=37;PV4=1,1,0.46,1 PL:GT:GQ 33,0,34:0/1:33 +chr2b 91675431 . C T 30 . DP=14;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=27 PL:GT:GQ 63,24,0:1/1:96 +chr2b 91870148 . T G 67 . DP=14;AF1=1;CI95=1,1;DP4=0,1,0,13;MQ=47;PV4=1,1,1,1 PL:GT:GQ 100,31,0:1/1:99 +chr2b 97066826 . G A 20.1 . DP=9;AF1=0.5001;CI95=0.5,0.5;DP4=0,6,0,2;MQ=31;PV4=1,1,1,1 PL:GT:GQ 50,0,35:0/1:38 +chr2b 97670822 . G A 4.85 . DP=6;AF1=1;CI95=1,1;DP4=0,0,0,6;MQ=18 PL:GT:GQ 36,18,0:1/1:90 +chr2b 102773175 . A G 17.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=38 PL:GT:GQ 49,9,0:1/1:63 +chr2b 109805532 . T C 99 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=45 PL:GT:GQ 176,24,0:1/1:96 +chr2b 110841448 . A G 11.1 . DP=20;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=44 PL:GT:GQ 42,6,0:1/1:49 +chr2b 123217025 . T C 31.5 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=37 PL:GT:GQ 64,12,0:1/1:72 +chr2b 123263214 . A G 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=35 PL:GT:GQ 43,9,0:1/1:63 +chr2b 127747292 . C T 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=52 PL:GT:GQ 100,9,0:1/1:63 +chr2b 130121958 . A G 89.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=43 PL:GT:GQ 122,15,0:1/1:75 +chr2b 130253633 . A G 14.9 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=42 PL:GT:GQ 46,6,0:1/1:49 +chr2b 130692761 . C T 49.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=51 PL:GT:GQ 82,18,0:1/1:90 +chr2b 130743365 . A G 99 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=42 PL:GT:GQ 140,15,0:1/1:75 +chr2b 131553874 . A C 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=37 PL:GT:GQ 43,9,0:1/1:63 +chr2b 131716894 . A G 99 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=40 PL:GT:GQ 137,24,0:1/1:96 +chr2b 131716936 . G A 99 . DP=14;AF1=1;CI95=1,1;DP4=0,0,0,12;MQ=36 PL:GT:GQ 173,36,0:1/1:99 +chr2b 131716952 . A G 99 . DP=22;AF1=0.5;CI95=0.5,0.5;DP4=0,7,0,14;MQ=36;PV4=1,1,1,1 PL:GT:GQ 152,0,43:0/1:46 +chr2b 133360184 . C T 99 . DP=20;AF1=1;CI95=1,1;DP4=0,0,0,20;MQ=32 PL:GT:GQ 163,60,0:1/1:99 +chr2b 133644741 . T A 16.4 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=27 PL:GT:GQ 49,15,0:1/1:75 +chr2b 133720595 . T C 41 . DP=15;AF1=1;CI95=1,1;DP4=0,0,0,12;MQ=29 PL:GT:GQ 74,36,0:1/1:99 +chr2b 133727192 . C T 19.3 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=23 PL:GT:GQ 52,15,0:1/1:75 +chr2b 133727260 . G A 3.56 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=18 PL:GT:GQ 34,24,0:1/1:95 +chr2b 133800294 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=23 PL:GT:GQ 40,6,0:1/1:49 +chr2b 134582754 . A C 56.1 . DP=37;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=36 PL:GT:GQ 89,21,0:1/1:84 +chr2b 134582763 . G C 78 . DP=37;AF1=1;CI95=1,1;DP4=0,0,0,36;MQ=34 PL:GT:GQ 111,108,0:1/1:99 +chr2b 134809668 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr3 527814 . C G 46 . DP=9;AF1=0.5;CI95=0.5,0.5;DP4=6,0,3,0;MQ=43;PV4=1,1,1,1 PL:GT:GQ 76,0,106:0/1:79 +chr3 559510 . G A 38 . DP=27;AF1=0.5;CI95=0.5,0.5;DP4=10,0,17,0;MQ=28;PV4=1,1,0.014,1 PL:GT:GQ 68,0,111:0/1:71 +chr3 879433 . T G 32 . DP=4;AF1=0.5001;CI95=0.5,0.5;DP4=2,0,2,0;MQ=43;PV4=1,1,1,1 PL:GT:GQ 62,0,34:0/1:37 +chr3 1809645 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=51 PL:GT:GQ 73,6,0:1/1:49 +chr3 3235812 . C T 7.59 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=45 PL:GT:GQ 38,6,0:1/1:49 +chr3 3250176 . A G 83 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=32 PL:GT:GQ 116,24,0:1/1:96 +chr3 5049073 . T A 99 . DP=25;AF1=0.5;CI95=0.5,0.5;DP4=16,0,9,0;MQ=39;PV4=1,1,1,1 PL:GT:GQ 136,0,129:0/1:99 +chr3 5142874 . G A 99 . DP=38;AF1=1;CI95=1,1;DP4=0,0,38,0;MQ=28 PL:GT:GQ 179,114,0:1/1:99 +chr3 5554864 . T C 3.54 . DP=7;AF1=0.4999;CI95=0.5,0.5;DP4=0,4,0,3;MQ=27;PV4=1,1,1,1 PL:GT:GQ 31,0,35:0/1:33 +chr3 5749648 . G A 21.2 . DP=26;AF1=0.7303;CI95=0.5,1;DP4=0,7,0,7;MQ=26;PV4=1,0.16,1,0.17 PL:GT:GQ 50,0,2:0/1:3 +chr3 16451708 . A T 71.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=38 PL:GT:GQ 104,15,0:1/1:75 +chr3 23410276 . G A 99 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=45 PL:GT:GQ 140,15,0:1/1:75 +chr3 51368824 . A G 28 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=48 PL:GT:GQ 60,9,0:1/1:63 +chr3 53000453 . A G 54 . DP=10;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=19 PL:GT:GQ 87,30,0:1/1:99 +chr3 53000463 . A G 54 . DP=10;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=19 PL:GT:GQ 87,30,0:1/1:99 +chr3 59077423 . C T 77.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=33 PL:GT:GQ 110,15,0:1/1:75 +chr3 60040501 . T C 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=35 PL:GT:GQ 43,9,0:1/1:63 +chr3 64203481 . A G 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=49 PL:GT:GQ 66,12,0:1/1:72 +chr3 67947441 . C T 17.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=25 PL:GT:GQ 50,12,0:1/1:72 +chr3 76372631 . A G 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=36 PL:GT:GQ 76,9,0:1/1:63 +chr3 80611316 . C G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr3 81554381 . G T 17.6 . DP=24;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=26 PL:GT:GQ 50,12,0:1/1:72 +chr3 87614647 . A G 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=34 PL:GT:GQ 45,6,0:1/1:49 +chr3 93900455 . A T 11.6 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=13 PL:GT:GQ 44,15,0:1/1:75 +chr3 96174457 . A G 4.11 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=24 PL:GT:GQ 34,9,0:1/1:63 +chr3 96215569 . A C 3.41 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=32 PL:GT:GQ 32,6,0:1/1:49 +chr3 96587998 . A C 7.08 . DP=9;AF1=1;CI95=1,1;DP4=0,0,6,0;MQ=17 PL:GT:GQ 39,18,0:1/1:90 +chr3 99711220 . A C 12.8 . DP=11;AF1=0.9998;CI95=0.5,1;DP4=1,0,2,0;MQ=35;PV4=1,1,1,1 PL:GT:GQ 42,2,0:1/1:37 +chr3 99789741 . C G 99 . DP=18;AF1=1;CI95=1,1;DP4=0,0,17,0;MQ=47 PL:GT:GQ 210,51,0:1/1:99 +chr3 103667651 . A C 3.98 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=37 PL:GT:GQ 33,6,0:1/1:49 +chr3 104604896 . G C 55 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=50 PL:GT:GQ 87,9,0:1/1:63 +chr3 104997217 . G A 33.1 . DP=18;AF1=1;CI95=1,1;DP4=1,0,16,0;MQ=34;PV4=1,3e-10,0.17,0.36 PL:GT:GQ 66,19,0:1/1:76 +chr3 106097816 . A G 28 . DP=15;AF1=1;CI95=1,1;DP4=0,0,0,15;MQ=26 PL:GT:GQ 61,45,0:1/1:99 +chr3 106822259 . G C 99 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=50 PL:GT:GQ 140,15,0:1/1:75 +chr3 109946413 . G A 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=34 PL:GT:GQ 44,6,0:1/1:49 +chr3 121238963 . T C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=51 PL:GT:GQ 40,6,0:1/1:49 +chr3 126248567 . A G 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=33 PL:GT:GQ 45,6,0:1/1:49 +chr3 129733836 . A G 6.2 . DP=4;AF1=0.5003;CI95=0.5,0.5;DP4=1,0,3,0;MQ=43;PV4=1,0.02,0.31,1 PL:GT:GQ 35,0,28:0/1:30 +chr3 131372785 . C T 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=34 PL:GT:GQ 76,9,0:1/1:63 +chr3 132290987 . C T 22 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=45 PL:GT:GQ 54,9,0:1/1:63 +chr3 136054421 . C T 73 . DP=82;AF1=1;CI95=1,1;DP4=0,0,78,0;MQ=28 PL:GT:GQ 106,235,0:1/1:99 +chr3 141075246 . G A 30.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=41 PL:GT:GQ 62,6,0:1/1:49 +chr3 141075262 . T G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=41 PL:GT:GQ 73,6,0:1/1:49 +chr3 141430649 . G T 81.8 . DP=6;AF1=1;CI95=0.5,1;DP4=0,1,0,4;MQ=41;PV4=1,0.34,1,0.25 PL:GT:GQ 113,6,0:1/1:49 +chr3 143617747 . G T 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=29 PL:GT:GQ 54,9,0:1/1:63 +chr3 163576128 . C T 5.6 . DP=4;AF1=0.7302;CI95=0.5,1;DP4=2,0,2,0;MQ=23;PV4=1,1,1,1 PL:GT:GQ 33,0,2:0/1:3 +chr3 163839828 . A G 4.45 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=26 PL:GT:GQ 35,12,0:1/1:72 +chr3 175839340 . G T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=51 PL:GT:GQ 40,6,0:1/1:49 +chr3 190193258 . G T 3.98 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 33,6,0:1/1:49 +chr3 190777007 . G A 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr3 190970350 . A G 61 . DP=11;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=37 PL:GT:GQ 94,30,0:1/1:99 +chr3 198686408 . G A 36.6 . DP=17;AF1=1;CI95=0.5,1;DP4=0,1,0,16;MQ=25;PV4=1,1,0.026,1 PL:GT:GQ 69,11,0:1/1:66 +chr3 199277478 . T C 3.61 . DP=6;AF1=1;CI95=1,1;DP4=0,0,0,6;MQ=21 PL:GT:GQ 34,18,0:1/1:90 +chr3 199780181 . G T 77 . DP=45;AF1=0.5;CI95=0.5,0.5;DP4=0,35,0,10;MQ=33;PV4=1,1,1,1 PL:GT:GQ 107,0,114:0/1:99 +chr3 199889335 . A C 9.54 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=18 PL:GT:GQ 42,24,0:1/1:96 +chr3 200018161 . A G 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=31 PL:GT:GQ 45,6,0:1/1:49 +chr4 195475 . A G 13 . DP=13;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 44,6,0:1/1:49 +chr4 639141 . C A 14.9 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 46,6,0:1/1:49 +chr4 639152 . C T 15.2 . DP=17;AF1=0.5016;CI95=0.5,0.5;DP4=0,2,0,2;MQ=33;PV4=1,1,1,1 PL:GT:GQ 45,0,22:0/1:25 +chr4 986497 . G T 99 . DP=10;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=33 PL:GT:GQ 163,30,0:1/1:99 +chr4 986516 . C T 55.1 . DP=8;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=37 PL:GT:GQ 88,21,0:1/1:84 +chr4 1207485 . A C 14.9 . DP=22;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=45 PL:GT:GQ 46,6,0:1/1:49 +chr4 1323502 . G A 13.2 . DP=13;AF1=1;CI95=1,1;DP4=0,0,11,0;MQ=22 PL:GT:GQ 46,33,0:1/1:99 +chr4 1613521 . G A 89 . DP=16;AF1=1;CI95=1,1;DP4=0,0,16,0;MQ=32 PL:GT:GQ 122,48,0:1/1:99 +chr4 1748790 . C T 38 . DP=21;AF1=0.5005;CI95=0.5,0.5;DP4=6,0,8,0;MQ=40;PV4=1,0.09,1,1 PL:GT:GQ 68,0,27:0/1:30 +chr4 2255732 . T C 99 . DP=29;AF1=1;CI95=1,1;DP4=0,0,28,0;MQ=31 PL:GT:GQ 186,84,0:1/1:99 +chr4 3010159 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=31 PL:GT:GQ 45,6,0:1/1:49 +chr4 3545023 . A G 99 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=38 PL:GT:GQ 145,27,0:1/1:99 +chr4 3586344 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=44 PL:GT:GQ 73,6,0:1/1:49 +chr4 3879337 . A G 16.6 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 49,12,0:1/1:72 +chr4 3940733 . A G 47.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=31 PL:GT:GQ 80,15,0:1/1:75 +chr4 4410338 . T C 13.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=31 PL:GT:GQ 46,15,0:1/1:75 +chr4 4796408 . T C 41 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,16;MQ=17 PL:GT:GQ 74,48,0:1/1:99 +chr4 4796414 . A G 11.3 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,15;MQ=17 PL:GT:GQ 44,45,0:1/1:99 +chr4 6436959 . T C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 40,6,0:1/1:49 +chr4 9494256 . T C 3.41 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=37 PL:GT:GQ 32,6,0:1/1:49 +chr4 24881479 . G A 14.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=42 PL:GT:GQ 46,9,0:1/1:63 +chr4 26128644 . A G 23 . DP=18;AF1=0.5006;CI95=0.5,0.5;DP4=8,0,10,0;MQ=22;PV4=1,1,1,1 PL:GT:GQ 53,0,26:0/1:29 +chr4 42109100 . G A 17.1 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=48 PL:GT:GQ 49,9,0:1/1:63 +chr4 42309652 . C T 68 . DP=17;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=50 PL:GT:GQ 100,9,0:1/1:63 +chr4 46913966 . C T 9.08 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=16 PL:GT:GQ 41,12,0:1/1:72 +chr4 50335142 . A G 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=41 PL:GT:GQ 76,9,0:1/1:63 +chr4 51658550 . C A 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=48 PL:GT:GQ 44,6,0:1/1:49 +chr4 58258023 . T C 26 . DP=5;AF1=0.5002;CI95=0.5,0.5;DP4=0,3,0,2;MQ=34;PV4=1,1,1,0.05 PL:GT:GQ 56,0,32:0/1:35 +chr4 59219112 . C A 42.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=50 PL:GT:GQ 75,12,0:1/1:72 +chr4 62746067 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr4 67404338 . G T 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=39 PL:GT:GQ 66,12,0:1/1:72 +chr4 73353380 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr4 73946294 . G C 4.77 . DP=51;AF1=0.4999;CI95=0.5,0.5;DP4=0,5,0,3;MQ=40;PV4=1,0.19,0.37,0.11 PL:GT:GQ 33,0,64:0/1:36 +chr4 79607484 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr4 82337365 . G C 90 . DP=54;AF1=1;CI95=1,1;DP4=0,0,0,16;MQ=28 PL:GT:GQ 123,48,0:1/1:99 +chr4 82653801 . A G 4.11 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=29 PL:GT:GQ 34,9,0:1/1:63 +chr4 87130164 . C T 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=26 PL:GT:GQ 43,9,0:1/1:63 +chr4 87130176 . G A 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=26 PL:GT:GQ 43,9,0:1/1:63 +chr4 91459729 . C A 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr4 96130778 . G C 99 . DP=19;AF1=1;CI95=1,1;DP4=0,0,0,19;MQ=45 PL:GT:GQ 211,57,0:1/1:99 +chr4 100709417 . A G 45.1 . DP=16;AF1=0.505;CI95=0.5,0.5;DP4=12,0,4,0;MQ=24;PV4=1,1,1,1 PL:GT:GQ 75,0,17:0/1:20 +chr4 107276770 . C T 70 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=0,9,0,6;MQ=31;PV4=1,1,1,1 PL:GT:GQ 100,0,97:0/1:98 +chr4 115327550 . G C 42 . DP=67;AF1=1;CI95=1,1;DP4=0,1,0,66;MQ=35;PV4=1,3.2e-24,0.13,1 PL:GT:GQ 75,162,0:1/1:99 +chr4 136558502 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr4 159572459 . G A 15.1 . DP=126;AF1=0.5;CI95=0.5,0.5;DP4=0,69,0,57;MQ=39;PV4=1,4.1e-96,0.077,1 PL:GT:GQ 45,0,175:0/1:48 +chr4 174968484 . G C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=42 PL:GT:GQ 40,6,0:1/1:49 +chr4 175030633 . T C 14.3 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=29 PL:GT:GQ 47,18,0:1/1:90 +chr4 183410027 . G T 6.2 . DP=31;AF1=0.5003;CI95=0.5,0.5;DP4=2,0,2,0;MQ=45;PV4=1,0.035,1,0.21 PL:GT:GQ 35,0,28:0/1:30 +chr4 190907368 . T C 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=50 PL:GT:GQ 66,12,0:1/1:72 +chr4 192175690 . A G 76.8 . DP=7;AF1=0.95;CI95=0.5,1;DP4=0,3,0,4;MQ=35;PV4=1,1,1,1 PL:GT:GQ 105,0,0:1/1:10 +chr4 192673268 . G A 14.2 . DP=9;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=22 PL:GT:GQ 47,27,0:1/1:99 +chr4 192943966 . T C 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=44 PL:GT:GQ 73,6,0:1/1:49 +chr4 195460104 . C G 23.1 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=19 PL:GT:GQ 56,24,0:1/1:96 +chr4 198277830 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr5 170098 . A G 13 . DP=12;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=30 PL:GT:GQ 44,6,0:1/1:49 +chr5 395814 . T C 4.77 . DP=4;AF1=0.5;CI95=0.5,0.5;DP4=0,2,0,2;MQ=36;PV4=1,1,0.48,1 PL:GT:GQ 33,0,33:0/1:33 +chr5 414024 . T A 10.4 . DP=17;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=20 PL:GT:GQ 42,9,0:1/1:63 +chr5 496767 . T C 13.9 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=36 PL:GT:GQ 45,6,0:1/1:49 +chr5 805676 . C G 45 . DP=17;AF1=1;CI95=1,1;DP4=0,0,17,0;MQ=32 PL:GT:GQ 78,51,0:1/1:99 +chr5 1252896 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr5 1418370 . G A 3.65 . DP=8;AF1=0.7301;CI95=0.5,1;DP4=4,0,4,0;MQ=13;PV4=1,1,1,1 PL:GT:GQ 30,0,2:0/1:3 +chr5 1494911 . G C 62 . DP=9;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=46 PL:GT:GQ 95,24,0:1/1:96 +chr5 1494932 . C T 6.98 . DP=8;AF1=0.5001;CI95=0.5,0.5;DP4=1,0,2,0;MQ=46;PV4=1,0.1,0.077,1 PL:GT:GQ 36,0,31:0/1:33 +chr5 1506037 . T C 24.1 . DP=24;AF1=1;CI95=0.5,1;DP4=11,0,13,0;MQ=16;PV4=1,1,1,1 PL:GT:GQ 55,5,0:1/1:46 +chr5 1509406 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=47 PL:GT:GQ 73,6,0:1/1:49 +chr5 1733649 . A G 99 . DP=25;AF1=1;CI95=1,1;DP4=0,0,0,25;MQ=47 PL:GT:GQ 212,75,0:1/1:99 +chr5 1747304 . A G 12.3 . DP=12;AF1=1;CI95=1,1;DP4=0,0,0,12;MQ=19 PL:GT:GQ 45,36,0:1/1:99 +chr5 1747308 . C A 44 . DP=12;AF1=1;CI95=1,1;DP4=0,0,0,12;MQ=19 PL:GT:GQ 77,36,0:1/1:99 +chr5 3519783 . C T 21.1 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=18 PL:GT:GQ 54,24,0:1/1:96 +chr5 4101593 . A G 69.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=43 PL:GT:GQ 102,12,0:1/1:72 +chr5 7204332 . T A 4.61 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=24 PL:GT:GQ 34,6,0:1/1:49 +chr5 11510398 . A C 34 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=1,0,2,0;MQ=51;PV4=1,1,0,1 PL:GT:GQ 64,0,31:0/1:34 +chr5 15406720 . T C 6.02 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=51 PL:GT:GQ 36,6,0:1/1:49 +chr5 25152417 . C A 10.9 . DP=28;AF1=0.5718;CI95=0.5,1;DP4=0,2,0,6;MQ=25;PV4=1,1,0.21,1 PL:GT:GQ 40,0,6:0/1:8 +chr5 39072637 . A G 35.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=50 PL:GT:GQ 68,15,0:1/1:75 +chr5 46022699 . G A 44 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=35 PL:GT:GQ 76,9,0:1/1:63 +chr5 55664181 . C G 10.4 . DP=8;AF1=0.9999;CI95=0.5,1;DP4=3,0,5,0;MQ=18;PV4=1,1,1,1 PL:GT:GQ 40,3,0:1/1:41 +chr5 56253386 . T C 50.1 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=36 PL:GT:GQ 83,21,0:1/1:84 +chr5 56253447 . C T 42.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=45 PL:GT:GQ 75,12,0:1/1:72 +chr5 71950166 . G T 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=40 PL:GT:GQ 43,9,0:1/1:63 +chr5 72703090 . C T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=46 PL:GT:GQ 40,6,0:1/1:49 +chr5 73570280 . G T 5.45 . DP=41;AF1=1;CI95=1,1;DP4=0,0,41,0;MQ=15 PL:GT:GQ 37,123,0:1/1:99 +chr5 73701762 . G T 40.8 . DP=13;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=43 PL:GT:GQ 72,6,0:1/1:49 +chr5 76956867 . T C 10.2 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=46 PL:GT:GQ 41,6,0:1/1:49 +chr5 79097961 . C G 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=40 PL:GT:GQ 54,9,0:1/1:63 +chr5 87026167 . T C 22 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 54,9,0:1/1:63 +chr5 97680525 . T C 3.27 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=23 PL:GT:GQ 33,12,0:1/1:72 +chr5 100674737 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr5 105389966 . T C 3.52 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=15 PL:GT:GQ 33,9,0:1/1:63 +chr5 109998341 . A C 12.7 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=35 PL:GT:GQ 45,12,0:1/1:72 +chr5 120629105 . C T 6.79 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 37,6,0:1/1:49 +chr5 128383954 . C T 23 . DP=10;AF1=0.5;CI95=0.5,0.5;DP4=0,5,0,5;MQ=48;PV4=1,3.3e-07,1,1 PL:GT:GQ 53,0,98:0/1:56 +chr5 133925142 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr5 135375404 . T C 11.8 . DP=6;AF1=1;CI95=0.5,1;DP4=1,0,3,0;MQ=31;PV4=1,0.03,1,1 PL:GT:GQ 42,4,0:1/1:45 +chr5 136498281 . T G 13.9 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=37 PL:GT:GQ 45,6,0:1/1:49 +chr5 136717285 . A G 82.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=48 PL:GT:GQ 115,12,0:1/1:72 +chr5 136910734 . G A 62 . DP=19;AF1=1;CI95=1,1;DP4=0,1,0,13;MQ=23;PV4=1,1,1,1 PL:GT:GQ 95,31,0:1/1:99 +chr5 141208149 . C G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr5 148056348 . C A 37.1 . DP=4;AF1=0.9966;CI95=0.5,1;DP4=1,0,2,0;MQ=38;PV4=1,1,1,1 PL:GT:GQ 66,1,0:1/1:23 +chr5 151941534 . G T 46.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=34 PL:GT:GQ 79,12,0:1/1:72 +chr5 159967229 . G C 22.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=35 PL:GT:GQ 55,12,0:1/1:72 +chr5 174024541 . T G 29.5 . DP=3;AF1=0.9998;CI95=0.5,1;DP4=0,1,0,2;MQ=32;PV4=1,1,1,1 PL:GT:GQ 59,2,0:1/1:37 +chr5 175525290 . A G 3.27 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=20 PL:GT:GQ 33,12,0:1/1:72 +chr5 175988954 . A C 14.2 . DP=23;AF1=0.5;CI95=0.5,0.5;DP4=0,6,0,4;MQ=47;PV4=1,1,0.2,1 PL:GT:GQ 44,0,76:0/1:47 +chr5 176782226 . T C 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=43 PL:GT:GQ 40,6,0:1/1:49 +chr5 179132834 . C G 99 . DP=28;AF1=1;CI95=1,1;DP4=0,0,0,28;MQ=41 PL:GT:GQ 207,84,0:1/1:99 +chr5 180155809 . G C 3.01 . DP=36;AF1=0.4997;CI95=0.5,0.5;DP4=25,0,9,0;MQ=35;PV4=1,1e-15,1,1 PL:GT:GQ 30,0,121:0/1:33 +chr5 181282819 . T G 38.3 . DP=11;AF1=1;CI95=0.5,1;DP4=0,2,0,9;MQ=23;PV4=1,1,1,1 PL:GT:GQ 71,14,0:1/1:70 +chr5 182426125 . G C 29 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=26 PL:GT:GQ 61,9,0:1/1:63 +chr5 182443682 . G A 3.69 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=21 PL:GT:GQ 34,15,0:1/1:75 +chr5 183008993 . C T 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 54,9,0:1/1:63 +chr5 183312016 . G T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr6_cox_hap1 519146 . G A 17.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=30 PL:GT:GQ 49,9,0:1/1:63 +chr6_cox_hap1 687497 . A G 33 . DP=6;AF1=0.9999;CI95=0.5,1;DP4=2,0,4,0;MQ=35;PV4=1,0.0016,1,1 PL:GT:GQ 63,3,0:1/1:41 +chr6_qbl_hap2 120066 . T C 99 . DP=12;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=37 PL:GT:GQ 139,27,0:1/1:99 +chr6 277954 . C T 53 . DP=41;AF1=1;CI95=1,1;DP4=4,0,37,0;MQ=19;PV4=1,1,0.3,1 PL:GT:GQ 86,49,0:1/1:99 +chr6 593158 . A G 4.61 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=32 PL:GT:GQ 34,6,0:1/1:49 +chr6 2865562 . T G 25 . DP=9;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=23 PL:GT:GQ 58,27,0:1/1:99 +chr6 3751403 . G A 42.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=32 PL:GT:GQ 75,15,0:1/1:75 +chr6 3884989 . A G 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=36 PL:GT:GQ 45,6,0:1/1:49 +chr6 4127278 . A T 13.9 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr6 5887783 . C G 99 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=34 PL:GT:GQ 142,21,0:1/1:84 +chr6 5887811 . C T 55.1 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=34 PL:GT:GQ 88,21,0:1/1:84 +chr6 6937170 . G C 99 . DP=47;AF1=1;CI95=1,1;DP4=0,0,0,47;MQ=28 PL:GT:GQ 157,141,0:1/1:99 +chr6 7262317 . C T 13.2 . DP=50;AF1=0.5;CI95=0.5,0.5;DP4=21,0,9,0;MQ=36;PV4=1,4e-05,0.17,0.26 PL:GT:GQ 43,0,158:0/1:46 +chr6 7533214 . A G 10.4 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=26 PL:GT:GQ 42,9,0:1/1:63 +chr6 20979907 . A G 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=38 PL:GT:GQ 76,9,0:1/1:63 +chr6 22321632 . A G 41 . DP=5;AF1=0.5004;CI95=0.5,0.5;DP4=1,0,3,0;MQ=46;PV4=1,0.24,0.19,0.33 PL:GT:GQ 71,0,28:0/1:31 +chr6 25352296 . G A 7.8 . DP=4;AF1=0.5003;CI95=0.5,0.5;DP4=0,1,0,3;MQ=38;PV4=1,1,0.16,1 PL:GT:GQ 37,0,28:0/1:30 +chr6 26298040 . T A 34 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=0,1,0,2;MQ=48;PV4=1,1,0.21,0.33 PL:GT:GQ 64,0,31:0/1:34 +chr6 33428755 . G A 70 . DP=14;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=32 PL:GT:GQ 103,27,0:1/1:99 +chr6 39512099 . G A 55.1 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=50 PL:GT:GQ 88,21,0:1/1:84 +chr6 39961094 . G A 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr6 40452120 . A G 40.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 72,6,0:1/1:49 +chr6 43204766 . A G 99 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=51 PL:GT:GQ 176,24,0:1/1:96 +chr6 52696512 . C T 70 . DP=76;AF1=0.5;CI95=0.5,0.5;DP4=0,34,0,42;MQ=18;PV4=1,0.11,1,1 PL:GT:GQ 100,0,51:0/1:54 +chr6 53785550 . A G 99 . DP=20;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=46 PL:GT:GQ 190,30,0:1/1:99 +chr6 53897484 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=36 PL:GT:GQ 45,6,0:1/1:49 +chr6 57038290 . C T 10.2 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=36 PL:GT:GQ 41,6,0:1/1:49 +chr6 62925087 . G C 35 . DP=5;AF1=0.5008;CI95=0.5,0.5;DP4=1,0,4,0;MQ=36;PV4=1,1,0.2,1 PL:GT:GQ 65,0,25:0/1:28 +chr6 62925094 . T C 25.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=36 PL:GT:GQ 58,15,0:1/1:75 +chr6 70834405 . G A 72.1 . DP=13;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=29 PL:GT:GQ 105,21,0:1/1:84 +chr6 71026058 . C T 48.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=42 PL:GT:GQ 81,18,0:1/1:90 +chr6 74420752 . T C 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=39 PL:GT:GQ 76,9,0:1/1:63 +chr6 77498624 . T C 16.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=33 PL:GT:GQ 48,6,0:1/1:49 +chr6 80416836 . T C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 40,6,0:1/1:49 +chr6 113611590 . A G 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=46 PL:GT:GQ 100,9,0:1/1:63 +chr6 119308431 . T C 38.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=40 PL:GT:GQ 71,12,0:1/1:72 +chr6 151758592 . T C 3.07 . DP=17;AF1=0.9966;CI95=0.5,1;DP4=0,8,0,9;MQ=13;PV4=1,1,1,1 PL:GT:GQ 29,1,0:1/1:23 +chr6 151759358 . A G 99 . DP=27;AF1=0.5;CI95=0.5,0.5;DP4=12,0,15,0;MQ=44;PV4=1,1,1,0.19 PL:GT:GQ 171,0,128:0/1:99 +chr6 154741755 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 40,6,0:1/1:49 +chr6 161061053 . C A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=52 PL:GT:GQ 40,6,0:1/1:49 +chr6 161474189 . C T 6.02 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 36,6,0:1/1:49 +chr6 164304657 . C T 10.4 . DP=63;AF1=0.5;CI95=0.5,0.5;DP4=0,29,0,19;MQ=22;PV4=1,7.7e-11,1,0.049 PL:GT:GQ 40,0,37:0/1:38 +chr6 164703105 . T C 99 . DP=11;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=40 PL:GT:GQ 165,30,0:1/1:99 +chr6 167518328 . A G 78 . DP=41;AF1=0.5;CI95=0.5,0.5;DP4=27,0,14,0;MQ=33;PV4=1,0.026,0.43,0.056 PL:GT:GQ 108,0,149:0/1:99 +chr6 169906323 . G A 41.8 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr6 171893912 . G A 69.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=33 PL:GT:GQ 102,15,0:1/1:75 +chr6 173631604 . A G 6.98 . DP=7;AF1=0.5;CI95=0.5,0.5;DP4=4,0,3,0;MQ=37;PV4=1,0.069,1,1 PL:GT:GQ 36,0,34:0/1:35 +chr7 835856 . C T 27.5 . DP=13;AF1=0.9998;CI95=0.5,1;DP4=4,0,6,0;MQ=23;PV4=1,0.46,1,1 PL:GT:GQ 57,2,0:1/1:37 +chr7 1046005 . C T 11.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=36 PL:GT:GQ 43,9,0:1/1:63 +chr7 1564339 . C T 71 . DP=66;AF1=0.5;CI95=0.5,0.5;DP4=36,0,24,0;MQ=29;PV4=1,1,0.35,1 PL:GT:GQ 101,0,134:0/1:99 +chr7 1806266 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 73,6,0:1/1:49 +chr7 1936013 . G T 7.77 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=17 PL:GT:GQ 39,9,0:1/1:63 +chr7 2319532 . C A 4.11 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=14 PL:GT:GQ 34,9,0:1/1:63 +chr7 2682121 . C T 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=33 PL:GT:GQ 44,6,0:1/1:49 +chr7 3248116 . T C 36.5 . DP=3;AF1=0.9998;CI95=0.5,1;DP4=0,1,0,2;MQ=37;PV4=1,1,1,1 PL:GT:GQ 66,2,0:1/1:37 +chr7 3624766 . C T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=41 PL:GT:GQ 40,6,0:1/1:49 +chr7 5291140 . G C 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=37 PL:GT:GQ 45,6,0:1/1:49 +chr7 5314457 . C A 3.56 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=18 PL:GT:GQ 34,24,0:1/1:95 +chr7 5595072 . T A 79 . DP=13;AF1=0.5;CI95=0.5,0.5;DP4=8,0,5,0;MQ=31;PV4=1,1,1,1 PL:GT:GQ 109,0,57:0/1:60 +chr7 5646060 . G C 7.79 . DP=11;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=10 PL:GT:GQ 40,30,0:1/1:99 +chr7 6056816 . C G 7.08 . DP=6;AF1=0.9966;CI95=0.5,1;DP4=0,2,0,3;MQ=23;PV4=1,1,1,1 PL:GT:GQ 35,1,0:1/1:23 +chr7 6412641 . C T 40 . DP=11;AF1=1;CI95=1,1;DP4=0,0,11,0;MQ=33 PL:GT:GQ 73,33,0:1/1:99 +chr7 6766874 . A G 34.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=43 PL:GT:GQ 67,15,0:1/1:75 +chr7 8482729 . C T 5.08 . DP=16;AF1=0.8276;CI95=0.5,1;DP4=3,0,3,0;MQ=22;PV4=1,1,1,0.19 PL:GT:GQ 32,0,1:1/1:5 +chr7 9238362 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr7 9687781 . G A 33 . DP=29;AF1=0.5;CI95=0.5,0.5;DP4=0,16,0,12;MQ=48;PV4=1,6.5e-38,1,1 PL:GT:GQ 63,0,170:0/1:66 +chr7 9752803 . A T 14.2 . DP=17;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=18 PL:GT:GQ 47,27,0:1/1:99 +chr7 10240910 . T C 45.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=35 PL:GT:GQ 78,12,0:1/1:72 +chr7 11046187 . C T 86.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=47 PL:GT:GQ 119,12,0:1/1:72 +chr7 11548207 . C G 14.6 . DP=13;AF1=1;CI95=0.5,1;DP4=6,1,0,5;MQ=18;PV4=0.015,1,1,1 PL:GT:GQ 46,7,0:1/1:57 +chr7 11580317 . C T 42 . DP=12;AF1=1;CI95=1,1;DP4=0,1,0,10;MQ=22;PV4=1,1,1,1 PL:GT:GQ 75,23,0:1/1:92 +chr7 11585384 . G A 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=46 PL:GT:GQ 73,6,0:1/1:49 +chr7 13498356 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=47 PL:GT:GQ 73,6,0:1/1:49 +chr7 13500887 . G A 15.1 . DP=11;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=22 PL:GT:GQ 48,30,0:1/1:99 +chr7 13827079 . C T 6.02 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 36,6,0:1/1:49 +chr7 14403976 . T G 59 . DP=30;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=39 PL:GT:GQ 92,24,0:1/1:96 +chr7 14756588 . A G 44 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=5,0,10,0;MQ=44;PV4=1,5.3e-18,1,1 PL:GT:GQ 74,0,70:0/1:72 +chr7 14756619 . T G 44 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=5,0,10,0;MQ=44;PV4=1,6.4e-10,1,1 PL:GT:GQ 74,0,70:0/1:72 +chr7 36734598 . A C 11.1 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=40 PL:GT:GQ 42,6,0:1/1:49 +chr7 36734599 . A T 11.1 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=40 PL:GT:GQ 42,6,0:1/1:49 +chr7 36734603 . G C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=40 PL:GT:GQ 40,6,0:1/1:49 +chr7 40634921 . A C 55 . DP=13;AF1=1;CI95=1,1;DP4=0,0,13,0;MQ=39 PL:GT:GQ 88,39,0:1/1:99 +chr7 48271285 . A T 73 . DP=15;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=25 PL:GT:GQ 106,30,0:1/1:99 +chr7 56264700 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=51 PL:GT:GQ 40,6,0:1/1:49 +chr7 62326003 . C A 26.1 . DP=35;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=28 PL:GT:GQ 59,18,0:1/1:90 +chr7 109468934 . T G 5.13 . DP=10;AF1=0.9998;CI95=0.5,1;DP4=0,1,0,2;MQ=39;PV4=1,0.031,1,1 PL:GT:GQ 33,2,0:1/1:37 +chr7 110208327 . C G 16.9 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=44 PL:GT:GQ 48,6,0:1/1:49 +chr7 125654934 . A G 4.11 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=27 PL:GT:GQ 34,9,0:1/1:63 +chr7 125770209 . A C 32 . DP=31;AF1=0.5;CI95=0.5,0.5;DP4=11,0,13,0;MQ=34;PV4=1,0.00017,0.16,0.22 PL:GT:GQ 62,0,105:0/1:65 +chr7 125770265 . G C 36 . DP=16;AF1=0.5;CI95=0.5,0.5;DP4=0,5,0,5;MQ=48;PV4=1,0.0047,0.016,0.035 PL:GT:GQ 66,0,110:0/1:69 +chr7 126687042 . A G 21.1 . DP=36;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=22 PL:GT:GQ 54,21,0:1/1:84 +chr7 132292897 . G T 99 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=43 PL:GT:GQ 167,21,0:1/1:84 +chr7 132334562 . A C 23 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=23 PL:GT:GQ 56,30,0:1/1:99 +chr7 132431838 . C T 13.3 . DP=5;AF1=1;CI95=0.5,1;DP4=1,0,4,0;MQ=23;PV4=1,1,1,1 PL:GT:GQ 44,5,0:1/1:46 +chr7 136324945 . T C 13.7 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=35 PL:GT:GQ 46,12,0:1/1:72 +chr7 136957634 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=43 PL:GT:GQ 40,6,0:1/1:49 +chr7 141746871 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 40,6,0:1/1:49 +chr7 146831870 . C T 4.77 . DP=14;AF1=0.5003;CI95=0.5,0.5;DP4=1,0,3,0;MQ=37;PV4=1,0.0029,0.28,1 PL:GT:GQ 33,0,28:0/1:30 +chr7 147142770 . T C 45 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=31 PL:GT:GQ 77,9,0:1/1:63 +chr7 147713906 . C T 4.77 . DP=8;AF1=0.5002;CI95=0.5,0.5;DP4=2,0,4,0;MQ=35;PV4=1,8.9e-06,0.48,0.27 PL:GT:GQ 33,0,29:0/1:31 +chr7 148742642 . G A 68 . DP=14;AF1=0.5032;CI95=0.5,0.5;DP4=4,0,10,0;MQ=28;PV4=1,1,1,1 PL:GT:GQ 98,0,19:0/1:22 +chr7 148879148 . C T 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=48 PL:GT:GQ 54,9,0:1/1:63 +chr7 149484407 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=45 PL:GT:GQ 73,6,0:1/1:49 +chr7 152444478 . A G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=36 PL:GT:GQ 44,6,0:1/1:49 +chr7 154106613 . C T 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=51 PL:GT:GQ 100,9,0:1/1:63 +chr7 154776891 . G T 14.4 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=31 PL:GT:GQ 47,15,0:1/1:75 +chr7 155882061 . A C 29 . DP=24;AF1=0.502;CI95=0.5,0.5;DP4=0,1,0,4;MQ=46;PV4=1,0.018,0.15,0.29 PL:GT:GQ 59,0,21:0/1:24 +chr7 155956844 . G C 23 . DP=11;AF1=0.5;CI95=0.5,0.5;DP4=0,7,0,4;MQ=38;PV4=1,1,0.38,1 PL:GT:GQ 53,0,103:0/1:56 +chr7 156277694 . G A 62 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=46 PL:GT:GQ 95,24,0:1/1:96 +chr7 156720588 . T C 16.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=29 PL:GT:GQ 48,9,0:1/1:63 +chr7 156807649 . T C 3.01 . DP=30;AF1=0.4997;CI95=0.5,0.5;DP4=0,4,0,3;MQ=43;PV4=1,0.16,0.15,1 PL:GT:GQ 30,0,72:0/1:33 +chr7 157331292 . G T 43.1 . DP=7;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=34 PL:GT:GQ 76,21,0:1/1:84 +chr7 157382957 . T C 33.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=43 PL:GT:GQ 66,12,0:1/1:72 +chr8 556382 . A G 37.1 . DP=5;AF1=0.9966;CI95=0.5,1;DP4=2,0,3,0;MQ=31;PV4=1,1,1,1 PL:GT:GQ 66,1,0:1/1:23 +chr8 1661673 . T C 9.31 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr8 7379751 . C A 6.24 . DP=8;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=19 PL:GT:GQ 38,21,0:1/1:84 +chr8 8160505 . A T 68.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=35 PL:GT:GQ 101,12,0:1/1:72 +chr8 8160508 . C T 24.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=35 PL:GT:GQ 57,12,0:1/1:72 +chr8 16781011 . A G 55.5 . DP=9;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=34 PL:GT:GQ 88,12,0:1/1:72 +chr8 18716499 . A T 20 . DP=10;AF1=0.5;CI95=0.5,0.5;DP4=0,4,0,2;MQ=29;PV4=1,1,1,1 PL:GT:GQ 50,0,52:0/1:51 +chr8 23326483 . A G 60 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=47 PL:GT:GQ 92,9,0:1/1:63 +chr8 25842819 . T A 12 . DP=18;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=47 PL:GT:GQ 43,6,0:1/1:49 +chr8 26300279 . T C 34 . DP=44;AF1=1;CI95=1,1;DP4=0,0,41,0;MQ=21 PL:GT:GQ 67,123,0:1/1:99 +chr8 29673470 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=41 PL:GT:GQ 73,6,0:1/1:49 +chr8 29673473 . C G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=41 PL:GT:GQ 40,6,0:1/1:49 +chr8 31685466 . C T 34 . DP=17;AF1=0.5;CI95=0.5,0.5;DP4=10,0,5,0;MQ=28;PV4=1,0.072,1,0.36 PL:GT:GQ 64,0,50:0/1:53 +chr8 37378739 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=34 PL:GT:GQ 45,6,0:1/1:49 +chr8 51325952 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr8 59221963 . G A 16.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=29 PL:GT:GQ 48,9,0:1/1:63 +chr8 62764995 . T G 20 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=32 PL:GT:GQ 52,9,0:1/1:63 +chr8 63157426 . C G 41.6 . DP=22;AF1=1;CI95=0.5,1;DP4=0,7,0,15;MQ=19;PV4=1,1,1,0.25 PL:GT:GQ 74,11,0:1/1:66 +chr8 68710444 . G A 30 . DP=5;AF1=0.6671;CI95=0.5,1;DP4=3,0,2,0;MQ=32;PV4=1,1,1,1 PL:GT:GQ 59,0,3:0/1:5 +chr8 76416560 . G A 89.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=46 PL:GT:GQ 122,12,0:1/1:72 +chr8 81425275 . T G 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=50 PL:GT:GQ 100,9,0:1/1:63 +chr8 89842286 . G C 4.61 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=30 PL:GT:GQ 34,6,0:1/1:49 +chr8 100926281 . G A 38 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=41 PL:GT:GQ 70,9,0:1/1:63 +chr8 102746002 . G C 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr8 107850176 . C T 43.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=45 PL:GT:GQ 76,18,0:1/1:90 +chr8 109966441 . T C 27.3 . DP=9;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=38 PL:GT:GQ 60,15,0:1/1:75 +chr8 118811716 . G T 99 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=50 PL:GT:GQ 155,18,0:1/1:90 +chr8 119440254 . A T 58.5 . DP=5;AF1=0.8277;CI95=0.5,1;DP4=2,0,3,0;MQ=34;PV4=1,1,1,0.14 PL:GT:GQ 87,0,1:1/1:5 +chr8 121236024 . G A 39.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=48 PL:GT:GQ 71,6,0:1/1:49 +chr8 125489079 . C T 13 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr8 128502549 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=45 PL:GT:GQ 73,6,0:1/1:49 +chr8 128502551 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=45 PL:GT:GQ 73,6,0:1/1:49 +chr8 130951113 . G A 4.61 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=19 PL:GT:GQ 34,6,0:1/1:49 +chr8 135307123 . G A 6.02 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=45 PL:GT:GQ 36,6,0:1/1:49 +chr8 138814155 . C T 57.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=46 PL:GT:GQ 90,18,0:1/1:90 +chr8 140566111 . A G 18.1 . DP=12;AF1=1;CI95=1,1;DP4=0,0,0,12;MQ=15 PL:GT:GQ 51,36,0:1/1:99 +chr8 141586480 . T G 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=40 PL:GT:GQ 76,9,0:1/1:63 +chr8 143376712 . A G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr8 150662729 . T C 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr8 150741294 . A G 25.1 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=34 PL:GT:GQ 58,18,0:1/1:90 +chr8 150975618 . A G 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 40,6,0:1/1:49 +chr8 151580103 . T C 6.02 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=20 PL:GT:GQ 36,6,0:1/1:49 +chr8 151634410 . G T 48 . DP=17;AF1=0.5;CI95=0.5,0.5;DP4=0,12,0,5;MQ=39;PV4=1,0.072,1,1 PL:GT:GQ 78,0,125:0/1:81 +chr8 151709267 . G A 91.1 . DP=8;AF1=0.5064;CI95=0.5,0.5;DP4=0,1,0,7;MQ=40;PV4=1,1,0.28,0.37 PL:GT:GQ 121,0,16:0/1:19 +chr8 152636420 . G A 8.75 . DP=3;AF1=0.9966;CI95=0.5,1;DP4=0,1,0,2;MQ=30;PV4=1,1,1,1 PL:GT:GQ 37,1,0:1/1:23 +chr8 152706967 . G A 3.01 . DP=10;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=16 PL:GT:GQ 33,30,0:1/1:99 +chr8 152786522 . T C 80.1 . DP=16;AF1=0.5102;CI95=0.5,0.5;DP4=0,4,0,12;MQ=31;PV4=1,0.25,1,1 PL:GT:GQ 110,0,14:0/1:17 +chr8 152863132 . T G 5.44 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=30 PL:GT:GQ 36,9,0:1/1:63 +chr9 23235268 . C T 12 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=32 PL:GT:GQ 43,6,0:1/1:49 +chr9 26391176 . T C 15.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 47,6,0:1/1:49 +chr9 26868232 . C G 63 . DP=20;AF1=0.5025;CI95=0.5,0.5;DP4=7,0,13,0;MQ=22;PV4=1,0.2,1,0.44 PL:GT:GQ 93,0,20:0/1:23 +chr9 34223668 . C T 22 . DP=16;AF1=0.5;CI95=0.5,0.5;DP4=0,9,0,7;MQ=27;PV4=1,0.14,0.34,1 PL:GT:GQ 52,0,79:0/1:55 +chr9 39696645 . G A 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=41 PL:GT:GQ 43,9,0:1/1:63 +chr9 40654130 . T G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 44,6,0:1/1:49 +chr9 41145321 . T G 46.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=33 PL:GT:GQ 79,12,0:1/1:72 +chr9 42273483 . G A 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr9 55633192 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr9 58705807 . T C 70 . DP=10;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=24 PL:GT:GQ 103,30,0:1/1:99 +chr9 61697149 . C G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr9 63152790 . A C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 40,6,0:1/1:49 +chr9 63703913 . C G 90.1 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=38 PL:GT:GQ 123,21,0:1/1:84 +chr9 65116068 . T C 70 . DP=13;AF1=1;CI95=1,1;DP4=0,0,0,13;MQ=49 PL:GT:GQ 103,39,0:1/1:99 +chr9 71266598 . C A 3.98 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 33,6,0:1/1:49 +chr9 73188677 . G T 52 . DP=294;AF1=1;CI95=1,1;DP4=44,0,245,0;MQ=33;PV4=1,0.28,0.0092,1 PL:GT:GQ 85,147,0:1/1:99 +chr9 78854179 . G T 22 . DP=97;AF1=0.5;CI95=0.5,0.5;DP4=21,0,12,0;MQ=44;PV4=1,0.02,0.032,0.0033 PL:GT:GQ 52,0,158:0/1:55 +chr9 82964679 . A C 13.2 . DP=19;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=36 PL:GT:GQ 45,9,0:1/1:63 +chr9 84124545 . G T 57 . DP=11;AF1=0.5;CI95=0.5,0.5;DP4=2,0,3,0;MQ=49;PV4=1,1,0.024,1 PL:GT:GQ 87,0,59:0/1:62 +chr9 86552862 . C T 14.4 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=26 PL:GT:GQ 47,15,0:1/1:75 +chr9 87548941 . A G 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=49 PL:GT:GQ 54,9,0:1/1:63 +chr9 89021101 . G A 89.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=49 PL:GT:GQ 122,12,0:1/1:72 +chr9 90447825 . G A 9.31 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=46 PL:GT:GQ 40,6,0:1/1:49 +chr9 92462035 . C A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=36 PL:GT:GQ 40,6,0:1/1:49 +chr9 93077294 . T G 5.44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=31 PL:GT:GQ 36,9,0:1/1:63 +chr9 93998137 . G A 68 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=46 PL:GT:GQ 100,9,0:1/1:63 +chr9 93998148 . C T 21.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=36 PL:GT:GQ 54,15,0:1/1:75 +chr9 95028964 . C A 99 . DP=83;AF1=0.5;CI95=0.5,0.5;DP4=0,57,0,26;MQ=32;PV4=1,9.3e-08,1,0.092 PL:GT:GQ 134,0,120:0/1:99 +chr9 103829155 . A G 33 . DP=96;AF1=1;CI95=1,1;DP4=0,0,96,0;MQ=16 PL:GT:GQ 66,255,0:1/1:99 +chr9 104981331 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=43 PL:GT:GQ 73,6,0:1/1:49 +chr9 111070656 . G A 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr9 117395657 . T C 16.4 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=23 PL:GT:GQ 49,15,0:1/1:75 +chr9 117718907 . A G 46.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=29 PL:GT:GQ 79,18,0:1/1:90 +chr9 119149161 . T C 3.14 . DP=65;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=22 PL:GT:GQ 33,15,0:1/1:75 +chr9 124528802 . G A 78 . DP=23;AF1=1;CI95=1,1;DP4=0,0,13,0;MQ=25 PL:GT:GQ 111,39,0:1/1:99 +chr9 126707903 . G A 26 . DP=37;AF1=0.5;CI95=0.5,0.5;DP4=0,21,0,8;MQ=46;PV4=1,2.6e-07,0.21,0.42 PL:GT:GQ 56,0,175:0/1:59 +chr9 128700686 . C G 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=50 PL:GT:GQ 66,12,0:1/1:72 +chr9 129084077 . G A 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=41 PL:GT:GQ 43,9,0:1/1:63 +chr9 129116900 . A T 20 . DP=13;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=30 PL:GT:GQ 52,9,0:1/1:63 +chr9 130290720 . C G 21.8 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=42 PL:GT:GQ 53,6,0:1/1:49 +chr9 130306057 . C G 71 . DP=14;AF1=1;CI95=1,1;DP4=0,0,14,0;MQ=28 PL:GT:GQ 104,42,0:1/1:99 +chr9 130528990 . G A 99 . DP=31;AF1=1;CI95=1,1;DP4=0,0,31,0;MQ=27 PL:GT:GQ 174,93,0:1/1:99 +chr9 130529002 . A T 7.79 . DP=30;AF1=1;CI95=1,1;DP4=0,0,11,0;MQ=15 PL:GT:GQ 40,33,0:1/1:99 +chr9 130639996 . A G 8.44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=51 PL:GT:GQ 39,6,0:1/1:49 +chr9 130704890 . A G 3.27 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=26 PL:GT:GQ 33,12,0:1/1:72 +chr9 130708345 . G A 13.3 . DP=11;AF1=0.9966;CI95=0.5,1;DP4=0,2,0,3;MQ=38;PV4=1,0.096,1,1 PL:GT:GQ 42,1,0:1/1:23 +chr9 131001601 . T A 3.98 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=31 PL:GT:GQ 33,6,0:1/1:49 +chr9 131058539 . T A 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=44 PL:GT:GQ 44,6,0:1/1:49 +chr9 131808965 . C T 42 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=37 PL:GT:GQ 75,27,0:1/1:99 +chr9 132551867 . C T 17.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=25 PL:GT:GQ 49,9,0:1/1:63 +chr9 132685120 . A G 4.75 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=25 PL:GT:GQ 35,9,0:1/1:63 +chr9 133175050 . A G 18.1 . DP=30;AF1=1;CI95=1,1;DP4=0,0,17,0;MQ=20 PL:GT:GQ 51,51,0:1/1:99 +chr9 133584978 . A G 99 . DP=25;AF1=1;CI95=1,1;DP4=0,0,25,0;MQ=45 PL:GT:GQ 212,75,0:1/1:99 +chr9 133661895 . A G 99 . DP=17;AF1=1;CI95=1,1;DP4=0,0,14,0;MQ=31 PL:GT:GQ 138,42,0:1/1:99 +chr9 133670376 . T C 68 . DP=19;AF1=1;CI95=1,1;DP4=0,1,0,16;MQ=39;PV4=1,1.4e-20,1,1 PL:GT:GQ 101,39,0:1/1:99 +chr9 133843777 . T C 99 . DP=9;AF1=0.5129;CI95=0.5,0.5;DP4=1,0,8,0;MQ=43;PV4=1,1,1,1 PL:GT:GQ 154,0,13:0/1:16 +chr9 134017265 . G C 3.27 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=13 PL:GT:GQ 33,12,0:1/1:72 +chr9 134105563 . T C 34.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=39 PL:GT:GQ 67,18,0:1/1:90 +chr9 134608906 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=46 PL:GT:GQ 73,6,0:1/1:49 +chr9 134861929 . T A 9.49 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=30 PL:GT:GQ 41,9,0:1/1:63 +chr10 796662 . A G 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=46 PL:GT:GQ 54,9,0:1/1:63 +chr10 1216716 . T A 18.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 51,12,0:1/1:72 +chr10 1220781 . G A 21 . DP=9;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=18 PL:GT:GQ 54,27,0:1/1:99 +chr10 1225208 . T C 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=47 PL:GT:GQ 100,9,0:1/1:63 +chr10 1727946 . T C 14.2 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=27 PL:GT:GQ 47,21,0:1/1:84 +chr10 5986542 . T C 83 . DP=93;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=39 PL:GT:GQ 116,30,0:1/1:99 +chr10 6436277 . G A 6.02 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 36,6,0:1/1:49 +chr10 7704114 . C A 35 . DP=6;AF1=0.9999;CI95=0.5,1;DP4=0,2,0,4;MQ=29;PV4=1,0.27,1,0.27 PL:GT:GQ 65,3,0:1/1:41 +chr10 10881734 . A G 9.52 . DP=9;AF1=0.5;CI95=0.5,0.5;DP4=4,0,5,0;MQ=42;PV4=1,0.0026,0.14,1 PL:GT:GQ 39,0,91:0/1:42 +chr10 13099383 . G A 27.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=48 PL:GT:GQ 60,12,0:1/1:72 +chr10 15764077 . G C 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=40 PL:GT:GQ 43,9,0:1/1:63 +chr10 18091502 . T C 47 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=38 PL:GT:GQ 79,9,0:1/1:63 +chr10 19645913 . A T 15.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=43 PL:GT:GQ 47,6,0:1/1:49 +chr10 22845062 . C T 18.1 . DP=8;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=18 PL:GT:GQ 51,21,0:1/1:84 +chr10 28282802 . T C 69 . DP=12;AF1=1;CI95=1,1;DP4=0,0,12,0;MQ=42 PL:GT:GQ 102,36,0:1/1:99 +chr10 28496872 . T G 8.44 . DP=11;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=45 PL:GT:GQ 39,6,0:1/1:49 +chr10 32746793 . G A 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=46 PL:GT:GQ 73,6,0:1/1:49 +chr10 41437604 . T G 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=39 PL:GT:GQ 43,9,0:1/1:63 +chr10 43051239 . C T 6.98 . DP=3;AF1=0.5001;CI95=0.5,0.5;DP4=1,0,2,0;MQ=40;PV4=1,0.33,0.33,1 PL:GT:GQ 36,0,31:0/1:33 +chr10 44455192 . C T 4.41 . DP=6;AF1=0.8276;CI95=0.5,1;DP4=0,3,0,3;MQ=21;PV4=1,1,1,1 PL:GT:GQ 31,0,1:1/1:5 +chr10 48387336 . A G 13 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr10 51561705 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=45 PL:GT:GQ 40,6,0:1/1:49 +chr10 51561712 . C G 39.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=45 PL:GT:GQ 71,6,0:1/1:49 +chr10 55617954 . G A 8.44 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=31 PL:GT:GQ 39,6,0:1/1:49 +chr10 55718281 . T A 3.41 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=32 PL:GT:GQ 32,6,0:1/1:49 +chr10 55888771 . T C 23.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=43 PL:GT:GQ 56,12,0:1/1:72 +chr10 56025569 . C G 34.1 . DP=3;AF1=0.5064;CI95=0.5,0.5;DP4=0,1,0,2;MQ=39;PV4=1,1,1,1 PL:GT:GQ 64,0,16:0/1:19 +chr10 57384943 . G T 84 . DP=29;AF1=0.5;CI95=0.5,0.5;DP4=16,0,13,0;MQ=26;PV4=1,0.015,1,1 PL:GT:GQ 114,0,110:0/1:99 +chr10 59873077 . T G 49 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=42 PL:GT:GQ 82,24,0:1/1:96 +chr10 61329572 . C T 15.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 47,6,0:1/1:49 +chr10 63790636 . T G 32.1 . DP=19;AF1=1;CI95=1,1;DP4=1,0,10,0;MQ=28;PV4=1,0.14,1,1 PL:GT:GQ 65,22,0:1/1:88 +chr10 64466048 . C G 18.2 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=28 PL:GT:GQ 51,18,0:1/1:90 +chr10 65053440 . G T 99 . DP=10;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=39 PL:GT:GQ 153,30,0:1/1:99 +chr10 65407358 . C G 84.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=45 PL:GT:GQ 117,15,0:1/1:75 +chr10 65605291 . G A 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=51 PL:GT:GQ 73,6,0:1/1:49 +chr10 66104447 . T C 99 . DP=47;AF1=0.5;CI95=0.5,0.5;DP4=0,25,0,21;MQ=34;PV4=1,1,0.15,1 PL:GT:GQ 136,0,162:0/1:99 +chr10 82160859 . G C 99 . DP=17;AF1=1;CI95=1,1;DP4=0,0,0,13;MQ=36 PL:GT:GQ 153,39,0:1/1:99 +chr10 82198579 . C T 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr10 87086290 . A G 4.13 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=17 PL:GT:GQ 35,27,0:1/1:99 +chr10 89550621 . T G 74 . DP=47;AF1=1;CI95=1,1;DP4=0,0,0,45;MQ=45 PL:GT:GQ 107,135,0:1/1:99 +chr10 92325046 . G A 42.3 . DP=18;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=45 PL:GT:GQ 75,15,0:1/1:75 +chr10 94488050 . A G 5.46 . DP=4;AF1=0.5;CI95=0.5,0.5;DP4=2,0,2,0;MQ=43;PV4=1,0.16,1,1 PL:GT:GQ 34,0,34:0/1:34 +chr10 95024815 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=36 PL:GT:GQ 45,6,0:1/1:49 +chr10 95466306 . G A 53 . DP=7;AF1=0.6671;CI95=0.5,1;DP4=0,4,0,3;MQ=33;PV4=1,1,1,1 PL:GT:GQ 82,0,3:0/1:5 +chr10 100256777 . T G 3.83 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=23 PL:GT:GQ 34,12,0:1/1:72 +chr10 101510485 . T C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr10 101530760 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr10 101879744 . T C 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=44 PL:GT:GQ 54,9,0:1/1:63 +chr10 102147276 . G C 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=33 PL:GT:GQ 43,9,0:1/1:63 +chr10 102642248 . T G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr10 107666616 . T C 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=43 PL:GT:GQ 40,6,0:1/1:49 +chr10 108319945 . C G 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=29 PL:GT:GQ 43,9,0:1/1:63 +chr10 109734371 . G A 12.7 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=35 PL:GT:GQ 45,12,0:1/1:72 +chr10 112870604 . C T 46.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=36 PL:GT:GQ 79,12,0:1/1:72 +chr10 115304673 . T C 11.3 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=42 PL:GT:GQ 43,9,0:1/1:63 +chr10 119380588 . G A 14.2 . DP=4;AF1=0.502;CI95=0.5,0.5;DP4=1,0,3,0;MQ=43;PV4=1,0.18,0.32,1 PL:GT:GQ 44,0,21:0/1:24 +chr10 123063756 . C T 14.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=23 PL:GT:GQ 46,9,0:1/1:63 +chr10 128424770 . T G 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=30 PL:GT:GQ 45,6,0:1/1:49 +chr10 131229204 . T C 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=40 PL:GT:GQ 76,9,0:1/1:63 +chr10 132420570 . G C 89.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=49 PL:GT:GQ 122,12,0:1/1:72 +chr10 132528066 . C T 99 . DP=19;AF1=1;CI95=1,1;DP4=0,0,19,0;MQ=42 PL:GT:GQ 213,57,0:1/1:99 +chr10 132644619 . G A 19.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=23 PL:GT:GQ 52,15,0:1/1:75 +chr10 132707581 . G C 9.11 . DP=51;AF1=0.9998;CI95=0.5,1;DP4=1,0,2,0;MQ=25;PV4=1,1,1,1 PL:GT:GQ 38,2,0:1/1:37 +chr10 133026892 . T C 55.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=44 PL:GT:GQ 88,18,0:1/1:90 +chr11 768033 . T C 33.5 . DP=4;AF1=0.8277;CI95=0.5,1;DP4=0,2,0,2;MQ=32;PV4=1,1,1,1 PL:GT:GQ 62,0,1:1/1:5 +chr11 768042 . T C 33.5 . DP=6;AF1=0.8277;CI95=0.5,1;DP4=0,2,0,2;MQ=32;PV4=1,1,1,1 PL:GT:GQ 62,0,1:1/1:5 +chr11 874568 . G C 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=33 PL:GT:GQ 66,12,0:1/1:72 +chr11 1009210 . T C 4 . DP=70;AF1=0.6241;CI95=0.5,1;DP4=0,3,0,8;MQ=24;PV4=1,1,0.5,1 PL:GT:GQ 31,0,4:0/1:6 +chr11 1016692 . C T 27 . DP=39;AF1=1;CI95=1,1;DP4=0,0,0,38;MQ=22 PL:GT:GQ 60,114,0:1/1:99 +chr11 1034477 . A G 66 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=42 PL:GT:GQ 98,9,0:1/1:63 +chr11 1074037 . G A 4.13 . DP=9;AF1=0.5001;CI95=0.5,0.5;DP4=4,0,5,0;MQ=24;PV4=1,1,0.43,1 PL:GT:GQ 32,0,30:0/1:31 +chr11 1556298 . G A 11.8 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=33 PL:GT:GQ 44,12,0:1/1:72 +chr11 1824777 . T C 27 . DP=10;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=28 PL:GT:GQ 60,30,0:1/1:99 +chr11 3395801 . C T 22 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 54,9,0:1/1:63 +chr11 3411901 . G A 4.75 . DP=17;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=29 PL:GT:GQ 35,9,0:1/1:63 +chr11 3731606 . A C 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=39 PL:GT:GQ 43,9,0:1/1:63 +chr11 3783855 . C T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=44 PL:GT:GQ 40,6,0:1/1:49 +chr11 3967636 . A G 4.29 . DP=20;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=24 PL:GT:GQ 35,15,0:1/1:75 +chr11 4385618 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=31 PL:GT:GQ 45,6,0:1/1:49 +chr11 4424365 . T A 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr11 5295586 . C T 3.01 . DP=52;AF1=0.4997;CI95=0.5,0.5;DP4=33,0,10,0;MQ=29;PV4=1,0.0045,0.3,0.17 PL:GT:GQ 30,0,131:0/1:33 +chr11 6157144 . C G 45.1 . DP=14;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=35 PL:GT:GQ 78,21,0:1/1:84 +chr11 6352044 . C T 18 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=31 PL:GT:GQ 50,9,0:1/1:63 +chr11 6767356 . T C 9.63 . DP=3;AF1=0.9966;CI95=0.5,1;DP4=1,0,2,0;MQ=29;PV4=1,1,1,1 PL:GT:GQ 38,1,0:1/1:23 +chr11 6999404 . G C 21 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=37 PL:GT:GQ 53,9,0:1/1:63 +chr11 9120930 . C G 17.6 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=25 PL:GT:GQ 50,12,0:1/1:72 +chr11 9373125 . T C 19.8 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 51,6,0:1/1:49 +chr11 9585101 . C T 67 . DP=16;AF1=1;CI95=1,1;DP4=0,0,14,0;MQ=45 PL:GT:GQ 100,42,0:1/1:99 +chr11 10266192 . A C 14.3 . DP=22;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=27 PL:GT:GQ 47,18,0:1/1:90 +chr11 10303263 . T C 8.64 . DP=17;AF1=1;CI95=1,1;DP4=0,0,0,17;MQ=18 PL:GT:GQ 41,51,0:1/1:99 +chr11 10420170 . T C 35 . DP=17;AF1=1;CI95=1,1;DP4=0,1,0,15;MQ=28;PV4=1,0.12,1,0.4 PL:GT:GQ 68,36,0:1/1:99 +chr11 10912169 . G A 99 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=49 PL:GT:GQ 155,18,0:1/1:90 +chr11 11315826 . T G 6.29 . DP=27;AF1=1;CI95=1,1;DP4=0,0,0,6;MQ=19 PL:GT:GQ 38,18,0:1/1:90 +chr11 11603859 . A C 22 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=0,9,0,6;MQ=34;PV4=1,9.5e-13,0.22,1 PL:GT:GQ 52,0,115:0/1:55 +chr11 11700034 . C T 33 . DP=11;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=30 PL:GT:GQ 66,27,0:1/1:99 +chr11 11822758 . G A 15.1 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=0,7,0,3;MQ=38;PV4=1,0.18,1,1 PL:GT:GQ 45,0,88:0/1:48 +chr11 11976636 . C T 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=24 PL:GT:GQ 54,9,0:1/1:63 +chr11 14380517 . C G 16.1 . DP=10;AF1=0.5;CI95=0.5,0.5;DP4=5,0,5,0;MQ=48;PV4=1,2.1e-05,0.13,1 PL:GT:GQ 46,0,113:0/1:49 +chr11 14419212 . A G 91.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=38 PL:GT:GQ 124,18,0:1/1:90 +chr11 14846792 . A G 55 . DP=11;AF1=1;CI95=1,1;DP4=0,0,0,11;MQ=19 PL:GT:GQ 88,33,0:1/1:99 +chr11 15494556 . C T 99 . DP=38;AF1=0.5;CI95=0.5,0.5;DP4=22,0,14,0;MQ=34;PV4=1,0.0071,1,1 PL:GT:GQ 146,0,159:0/1:99 +chr11 16262879 . A C 16.1 . DP=4;AF1=0.5004;CI95=0.5,0.5;DP4=0,1,0,3;MQ=43;PV4=1,0.061,0.24,0.33 PL:GT:GQ 46,0,28:0/1:31 +chr11 21514947 . T C 24.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=41 PL:GT:GQ 57,12,0:1/1:72 +chr11 22532576 . C G 28 . DP=17;AF1=1;CI95=1,1;DP4=0,0,0,17;MQ=17 PL:GT:GQ 61,51,0:1/1:99 +chr11 23529238 . G T 4.29 . DP=13;AF1=0.5334;CI95=0.5,1;DP4=1,0,3,0;MQ=37;PV4=1,1,0.34,0.21 PL:GT:GQ 32,0,9:0/1:12 +chr11 24249554 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=48 PL:GT:GQ 73,6,0:1/1:49 +chr11 24853167 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=51 PL:GT:GQ 73,6,0:1/1:49 +chr11 33353903 . T C 24.3 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=36 PL:GT:GQ 57,15,0:1/1:75 +chr11 35126569 . T C 24.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=43 PL:GT:GQ 57,12,0:1/1:72 +chr11 35132248 . C T 18.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 51,12,0:1/1:72 +chr11 35155482 . T C 68 . DP=22;AF1=1;CI95=1,1;DP4=0,0,22,0;MQ=46 PL:GT:GQ 101,66,0:1/1:99 +chr11 52494088 . T C 99 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=37 PL:GT:GQ 140,27,0:1/1:99 +chr11 57899943 . C G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr11 62261460 . G T 19.1 . DP=15;AF1=0.5;CI95=0.5,0.5;DP4=0,7,0,5;MQ=27;PV4=1,1.1e-06,1,1 PL:GT:GQ 49,0,58:0/1:51 +chr11 67456049 . C T 39.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=19 PL:GT:GQ 72,18,0:1/1:90 +chr11 68509708 . C G 3.65 . DP=9;AF1=0.7301;CI95=0.5,1;DP4=0,5,0,4;MQ=17;PV4=1,1,1,1 PL:GT:GQ 30,0,2:0/1:3 +chr11 70115115 . T A 99 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=49 PL:GT:GQ 140,15,0:1/1:75 +chr11 72643951 . T C 70 . DP=23;AF1=1;CI95=1,1;DP4=0,0,22,0;MQ=39 PL:GT:GQ 103,66,0:1/1:99 +chr11 72647930 . G A 36 . DP=4;AF1=0.5004;CI95=0.5,0.5;DP4=0,1,0,3;MQ=41;PV4=1,1,0.3,1 PL:GT:GQ 66,0,28:0/1:31 +chr11 73330148 . C T 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr11 81720893 . A G 5.83 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=19 PL:GT:GQ 37,12,0:1/1:72 +chr11 83813797 . A G 23.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=43 PL:GT:GQ 56,12,0:1/1:72 +chr11 85949488 . C A 54 . DP=17;AF1=1;CI95=1,1;DP4=0,0,14,0;MQ=37 PL:GT:GQ 87,42,0:1/1:99 +chr11 87634829 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=51 PL:GT:GQ 40,6,0:1/1:49 +chr11 90913093 . A T 35.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=46 PL:GT:GQ 67,6,0:1/1:49 +chr11 93793348 . G A 99 . DP=8;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=31 PL:GT:GQ 139,24,0:1/1:96 +chr11 100802294 . T C 16.6 . DP=21;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=35 PL:GT:GQ 49,12,0:1/1:72 +chr11 107455449 . C T 8.44 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=26 PL:GT:GQ 39,6,0:1/1:49 +chr11 111344355 . A G 69.5 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=43 PL:GT:GQ 102,12,0:1/1:72 +chr11 111611115 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr11 113050466 . G C 6.02 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=30 PL:GT:GQ 36,6,0:1/1:49 +chr11 114332544 . T C 3.54 . DP=17;AF1=0.4999;CI95=0.5,0.5;DP4=0,4,0,5;MQ=37;PV4=1,0.32,0.13,1 PL:GT:GQ 31,0,37:0/1:33 +chr11 114332549 . G A 3.54 . DP=17;AF1=0.4998;CI95=0.5,0.5;DP4=0,9,0,8;MQ=36;PV4=1,3.1e-10,0.088,1 PL:GT:GQ 31,0,127:0/1:34 +chr11 114843578 . G C 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=50 PL:GT:GQ 73,6,0:1/1:49 +chr11 115580279 . A G 99 . DP=15;AF1=1;CI95=1,1;DP4=0,0,15,0;MQ=48 PL:GT:GQ 190,45,0:1/1:99 +chr11 116434328 . G A 17.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 50,12,0:1/1:72 +chr11 125914161 . A G 20.8 . DP=7;AF1=0.95;CI95=0.5,1;DP4=3,0,4,0;MQ=38;PV4=1,0.074,1,1 PL:GT:GQ 49,0,0:1/1:10 +chr11 125917089 . C T 12.3 . DP=41;AF1=0.5;CI95=0.5,0.5;DP4=0,28,0,12;MQ=44;PV4=1,4.7e-25,1,1 PL:GT:GQ 42,0,167:0/1:45 +chr11 127194100 . A G 60 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=49 PL:GT:GQ 93,24,0:1/1:96 +chr12 70856 . G A 27.5 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=49 PL:GT:GQ 60,12,0:1/1:72 +chr12 153693 . T C 52.3 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=38 PL:GT:GQ 85,15,0:1/1:75 +chr12 924547 . C G 37.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=50 PL:GT:GQ 69,6,0:1/1:49 +chr12 1555916 . G A 7.18 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=23 PL:GT:GQ 39,15,0:1/1:75 +chr12 1919860 . G T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr12 2283756 . G A 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=34 PL:GT:GQ 45,6,0:1/1:49 +chr12 2805983 . G C 12.7 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=35 PL:GT:GQ 45,12,0:1/1:72 +chr12 6088203 . T C 72.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=37 PL:GT:GQ 105,15,0:1/1:75 +chr12 7099460 . G C 10.8 . DP=6;AF1=0.8277;CI95=0.5,1;DP4=3,0,3,0;MQ=26;PV4=1,0.027,1,1 PL:GT:GQ 39,0,1:1/1:5 +chr12 7099464 . G A 13.3 . DP=6;AF1=0.9966;CI95=0.5,1;DP4=2,0,3,0;MQ=28;PV4=1,0.16,1,1 PL:GT:GQ 42,1,0:1/1:23 +chr12 7198516 . T G 4.61 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 34,6,0:1/1:49 +chr12 23331895 . C T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr12 28209020 . T G 14.4 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=31 PL:GT:GQ 47,15,0:1/1:75 +chr12 30074073 . C T 32.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 64,6,0:1/1:49 +chr12 30563452 . T C 25 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=46 PL:GT:GQ 57,9,0:1/1:63 +chr12 30563453 . A G 25 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=46 PL:GT:GQ 57,9,0:1/1:63 +chr12 30563464 . C A 78.8 . DP=8;AF1=1;CI95=0.5,1;DP4=0,2,0,5;MQ=34;PV4=1,0.29,1,1 PL:GT:GQ 110,6,0:1/1:49 +chr12 31505085 . G A 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr12 34041336 . G A 5.46 . DP=5;AF1=0.5;CI95=0.5,0.5;DP4=2,0,2,0;MQ=36;PV4=1,1,0.48,0.21 PL:GT:GQ 34,0,34:0/1:34 +chr12 49003648 . C G 42 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=39 PL:GT:GQ 75,24,0:1/1:96 +chr12 51280690 . G A 69 . DP=98;AF1=0.5;CI95=0.5,0.5;DP4=13,0,18,0;MQ=45;PV4=1,1,0.051,1 PL:GT:GQ 99,0,84:0/1:87 +chr12 69206633 . T C 17.1 . DP=12;AF1=1;CI95=1,1;DP4=0,0,0,11;MQ=17 PL:GT:GQ 50,33,0:1/1:99 +chr12 80417253 . T C 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=48 PL:GT:GQ 73,6,0:1/1:49 +chr12 86633033 . C T 34 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=0,1,0,2;MQ=43;PV4=1,1,0.33,1 PL:GT:GQ 64,0,31:0/1:34 +chr12 98097274 . C T 47.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=31 PL:GT:GQ 80,15,0:1/1:75 +chr12 105269319 . C T 19 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=26 PL:GT:GQ 51,9,0:1/1:63 +chr12 109053425 . G A 9.53 . DP=8;AF1=0.5012;CI95=0.5,0.5;DP4=2,0,6,0;MQ=25;PV4=1,1,0.19,1 PL:GT:GQ 39,0,23:0/1:26 +chr12 111904540 . A G 3.41 . DP=65;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=31 PL:GT:GQ 32,6,0:1/1:49 +chr12 115038686 . T C 15.2 . DP=7;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=27 PL:GT:GQ 48,21,0:1/1:84 +chr12 115039419 . A G 4.11 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=30 PL:GT:GQ 34,9,0:1/1:63 +chr12 115103890 . G A 66 . DP=39;AF1=1;CI95=1,1;DP4=0,0,0,38;MQ=49 PL:GT:GQ 99,114,0:1/1:99 +chr12 115833830 . G A 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 100,9,0:1/1:63 +chr12 116361873 . T G 6.34 . DP=5;AF1=0.7302;CI95=0.5,1;DP4=0,2,0,2;MQ=23;PV4=1,1,1,1 PL:GT:GQ 34,0,2:0/1:3 +chr12 123583527 . G A 14.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=25 PL:GT:GQ 46,9,0:1/1:63 +chr12 124115330 . A G 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=38 PL:GT:GQ 76,9,0:1/1:63 +chr12 125062296 . G A 41.8 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=50 PL:GT:GQ 73,6,0:1/1:49 +chr12 126718106 . A G 8.76 . DP=50;AF1=0.5163;CI95=0.5,1;DP4=2,0,6,0;MQ=26;PV4=1,0.33,0.37,1 PL:GT:GQ 38,0,12:0/1:15 +chr12 133348311 . G A 24 . DP=18;AF1=0.5;CI95=0.5,0.5;DP4=14,0,3,0;MQ=35;PV4=1,1,1,1 PL:GT:GQ 54,0,118:0/1:57 +chr12 134494475 . C T 28 . DP=18;AF1=0.6671;CI95=0.5,1;DP4=8,0,10,0;MQ=18;PV4=1,1,1,1 PL:GT:GQ 57,0,3:0/1:5 +chr12 134831761 . C T 41.3 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=27 PL:GT:GQ 74,15,0:1/1:75 +chr12 134992770 . A C,T 84 . DP=47;AF1=1;CI95=1,1;DP4=0,0,26,0;MQ=29 PL:GT:GQ 117,72,114,0,44,114:1/1:99 +chr12 135261117 . G A 49.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=46 PL:GT:GQ 82,18,0:1/1:90 +chr12 135261144 . A G 99 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=46 PL:GT:GQ 155,18,0:1/1:90 +chr12 135460302 . G A 99 . DP=25;AF1=1;CI95=1,1;DP4=0,0,23,0;MQ=40 PL:GT:GQ 198,69,0:1/1:99 +chr12 135463758 . A G 83 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,16;MQ=26 PL:GT:GQ 116,48,0:1/1:99 +chr12 135523325 . G A 99 . DP=23;AF1=1;CI95=1,1;DP4=0,0,22,0;MQ=26 PL:GT:GQ 136,66,0:1/1:99 +chr12 135782401 . T C 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr12 135795472 . G T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 40,6,0:1/1:49 +chr13 18040027 . G C 42 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=33 PL:GT:GQ 74,9,0:1/1:63 +chr13 19494625 . G T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 73,6,0:1/1:49 +chr13 20121126 . A G 15.1 . DP=36;AF1=0.5;CI95=0.5,0.5;DP4=25,0,9,0;MQ=36;PV4=1,1,0.13,1 PL:GT:GQ 45,0,153:0/1:48 +chr13 21536703 . A G 9.31 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr13 23160035 . G T 3.98 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=36 PL:GT:GQ 33,6,0:1/1:49 +chr13 23476554 . C A 6.79 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=52 PL:GT:GQ 37,6,0:1/1:49 +chr13 26632967 . C G 32 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=34 PL:GT:GQ 65,27,0:1/1:99 +chr13 26790010 . T C 89.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=35 PL:GT:GQ 122,15,0:1/1:75 +chr13 36083571 . T C 43 . DP=84;AF1=1;CI95=1,1;DP4=1,0,37,0;MQ=16;PV4=1,1,1,0.3 PL:GT:GQ 76,99,0:1/1:99 +chr13 44432419 . C T 3.58 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=19 PL:GT:GQ 34,21,0:1/1:84 +chr13 46592359 . T C 16.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 48,6,0:1/1:49 +chr13 52764657 . A T 3.14 . DP=32;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=22 PL:GT:GQ 33,15,0:1/1:75 +chr13 53084193 . C T 9.11 . DP=3;AF1=0.9998;CI95=0.5,1;DP4=0,1,0,2;MQ=29;PV4=1,1,1,1 PL:GT:GQ 38,2,0:1/1:37 +chr13 57763228 . C T 45 . DP=555;AF1=1;CI95=1,1;DP4=2,0,21,0;MQ=23;PV4=1,0.00021,1,0.3 PL:GT:GQ 78,45,0:1/1:99 +chr13 73857921 . G C 31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=49 PL:GT:GQ 63,9,0:1/1:63 +chr13 76718001 . G A 59 . DP=4;AF1=0.5004;CI95=0.5,0.5;DP4=1,0,3,0;MQ=45;PV4=1,1,0.12,1 PL:GT:GQ 89,0,28:0/1:31 +chr13 100912695 . A T 23 . DP=22;AF1=0.5;CI95=0.5,0.5;DP4=0,16,0,6;MQ=31;PV4=1,0.029,1,0.35 PL:GT:GQ 53,0,103:0/1:56 +chr13 101332001 . G C 21 . DP=23;AF1=1;CI95=1,1;DP4=0,0,23,0;MQ=21 PL:GT:GQ 54,69,0:1/1:99 +chr13 102637334 . C T 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 100,9,0:1/1:63 +chr13 102895627 . C T 63 . DP=9;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=48 PL:GT:GQ 96,27,0:1/1:99 +chr13 103830322 . T C 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 73,6,0:1/1:49 +chr13 112842448 . G A 39 . DP=18;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=27 PL:GT:GQ 72,27,0:1/1:99 +chr13 113310291 . C T 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=43 PL:GT:GQ 66,12,0:1/1:72 +chr13 114775162 . A G 80 . DP=17;AF1=1;CI95=1,1;DP4=0,0,17,0;MQ=21 PL:GT:GQ 113,51,0:1/1:99 +chr13 115267482 . A G 16.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=29 PL:GT:GQ 48,9,0:1/1:63 +chr13 116068676 . C T 3.83 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=27 PL:GT:GQ 34,12,0:1/1:72 +chr13 116455918 . A G 33 . DP=29;AF1=0.5;CI95=0.5,0.5;DP4=13,0,15,0;MQ=42;PV4=1,1.8e-20,0.3,1 PL:GT:GQ 63,0,146:0/1:66 +chr13 116765012 . G A 30.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 62,6,0:1/1:49 +chr13 116779773 . C T 17.1 . DP=38;AF1=0.5;CI95=0.5,0.5;DP4=27,0,11,0;MQ=24;PV4=1,4.5e-35,1,1 PL:GT:GQ 47,0,106:0/1:50 +chr13 116779791 . C T 57 . DP=38;AF1=0.5;CI95=0.5,0.5;DP4=24,0,14,0;MQ=24;PV4=1,1,1,1 PL:GT:GQ 87,0,103:0/1:90 +chr14 20159250 . C T 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=39 PL:GT:GQ 43,9,0:1/1:63 +chr14 23510676 . T C 52 . DP=22;AF1=1;CI95=1,1;DP4=0,0,22,0;MQ=32 PL:GT:GQ 85,66,0:1/1:99 +chr14 24735256 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr14 29525577 . G A 21 . DP=10;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=16 PL:GT:GQ 54,27,0:1/1:99 +chr14 36186389 . C T 6.79 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=20 PL:GT:GQ 37,6,0:1/1:49 +chr14 36186394 . A G 6.79 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=20 PL:GT:GQ 37,6,0:1/1:49 +chr14 37440609 . A G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=33 PL:GT:GQ 44,6,0:1/1:49 +chr14 40432807 . A G 18.6 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=23 PL:GT:GQ 51,12,0:1/1:72 +chr14 59466268 . T C 15.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=25 PL:GT:GQ 47,9,0:1/1:63 +chr14 61368162 . G T 7.18 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=17 PL:GT:GQ 39,15,0:1/1:75 +chr14 65152922 . G A 92 . DP=33;AF1=0.5;CI95=0.5,0.5;DP4=0,18,0,15;MQ=36;PV4=1,0.059,0.35,1 PL:GT:GQ 122,0,144:0/1:99 +chr14 69749148 . G T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=25 PL:GT:GQ 40,6,0:1/1:49 +chr14 74877658 . C T 45 . DP=48;AF1=1;CI95=1,1;DP4=0,1,0,12;MQ=36;PV4=1,0.02,1,0.39 PL:GT:GQ 78,28,0:1/1:99 +chr14 75546678 . C T 19.2 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=17 PL:GT:GQ 52,18,0:1/1:90 +chr14 76439185 . T C 67.1 . DP=7;AF1=0.505;CI95=0.5,0.5;DP4=0,1,0,6;MQ=33;PV4=1,1,0.056,0.29 PL:GT:GQ 97,0,17:0/1:20 +chr14 77313295 . T A 99 . DP=12;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=48 PL:GT:GQ 191,30,0:1/1:99 +chr14 77673422 . G A 11.5 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=24 PL:GT:GQ 44,18,0:1/1:90 +chr14 78646125 . T C 99 . DP=8;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=40 PL:GT:GQ 153,24,0:1/1:96 +chr14 91702449 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr14 91769842 . G A 63 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=47 PL:GT:GQ 95,9,0:1/1:63 +chr14 91775899 . C G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=45 PL:GT:GQ 73,6,0:1/1:49 +chr14 91775924 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=45 PL:GT:GQ 40,6,0:1/1:49 +chr14 93482918 . A C 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=49 PL:GT:GQ 100,9,0:1/1:63 +chr14 93665819 . C T 75 . DP=7;AF1=0.5002;CI95=0.5,0.5;DP4=0,3,0,4;MQ=42;PV4=1,1,1,1 PL:GT:GQ 105,0,31:0/1:34 +chr14 95422276 . A G 55.1 . DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=45 PL:GT:GQ 88,21,0:1/1:84 +chr14 95731986 . C T 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 100,9,0:1/1:63 +chr14 96045464 . A G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=33 PL:GT:GQ 44,6,0:1/1:49 +chr14 97172020 . C T 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=51 PL:GT:GQ 100,9,0:1/1:63 +chr14 100515480 . A G 6.98 . DP=3;AF1=0.5002;CI95=0.5,0.5;DP4=1,0,2,0;MQ=45;PV4=1,0.14,0.085,0.33 PL:GT:GQ 36,0,30:0/1:32 +chr14 100770214 . A T 8.69 . DP=20;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=16 PL:GT:GQ 41,21,0:1/1:84 +chr14 101258303 . G A 82 . DP=15;AF1=1;CI95=1,1;DP4=0,0,15,0;MQ=26 PL:GT:GQ 115,45,0:1/1:99 +chr14 101701492 . C G 66 . DP=10;AF1=1;CI95=1,1;DP4=0,0,10,0;MQ=49 PL:GT:GQ 99,30,0:1/1:99 +chr14 102113772 . T C 3.98 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=30 PL:GT:GQ 33,6,0:1/1:49 +chr14 102751431 . A C 36.5 . DP=3;AF1=0.9998;CI95=0.5,1;DP4=1,0,2,0;MQ=35;PV4=1,1,1,1 PL:GT:GQ 66,2,0:1/1:37 +chr14 103708033 . A G 99 . DP=13;AF1=1;CI95=1,1;DP4=0,0,0,12;MQ=27 PL:GT:GQ 141,36,0:1/1:99 +chr14 104744582 . G A 3.52 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=25 PL:GT:GQ 33,9,0:1/1:63 +chr14 105989100 . C T 3.14 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=23 PL:GT:GQ 33,15,0:1/1:75 +chr14 105989162 . C T 3.65 . DP=12;AF1=0.7301;CI95=0.5,1;DP4=0,6,0,6;MQ=15;PV4=1,1,1,1 PL:GT:GQ 30,0,2:0/1:3 +chr14 106234810 . G A 25.3 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=39 PL:GT:GQ 58,15,0:1/1:75 +chr14 106995572 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr14 107283057 . T C 5.5 . DP=8;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=20 PL:GT:GQ 37,21,0:1/1:84 +chr14 107285319 . T C 33 . DP=36;AF1=1;CI95=1,1;DP4=0,0,0,35;MQ=22 PL:GT:GQ 66,105,0:1/1:99 +chr14 107640449 . A G 11.8 . DP=7;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=36 PL:GT:GQ 44,12,0:1/1:72 +chr15 20082092 . T G 18.3 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=24 PL:GT:GQ 51,15,0:1/1:75 +chr15 22955884 . T C 67 . DP=12;AF1=1;CI95=1,1;DP4=0,0,12,0;MQ=48 PL:GT:GQ 100,36,0:1/1:99 +chr15 22971987 . A G 5.29 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=22 PL:GT:GQ 35,6,0:1/1:49 +chr15 23233324 . C A 47 . DP=16;AF1=1;CI95=1,1;DP4=0,0,14,0;MQ=31 PL:GT:GQ 80,42,0:1/1:99 +chr15 25175286 . C T 36.5 . DP=3;AF1=0.9998;CI95=0.5,1;DP4=1,0,2,0;MQ=42;PV4=1,1,1,1 PL:GT:GQ 66,2,0:1/1:37 +chr15 25385709 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=48 PL:GT:GQ 40,6,0:1/1:49 +chr15 27372396 . A G 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=40 PL:GT:GQ 76,9,0:1/1:63 +chr15 35998093 . C T 9.53 . DP=9;AF1=1;CI95=1,1;DP4=0,0,9,0;MQ=17 PL:GT:GQ 42,27,0:1/1:99 +chr15 36716538 . C G 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=36 PL:GT:GQ 45,6,0:1/1:49 +chr15 36793360 . G T 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=42 PL:GT:GQ 76,9,0:1/1:63 +chr15 53783097 . A G 10.5 . DP=31;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=16 PL:GT:GQ 43,21,0:1/1:84 +chr15 54180175 . C T 10.4 . DP=7;AF1=0.5001;CI95=0.5,0.5;DP4=4,0,3,0;MQ=27;PV4=1,1.2e-05,1,1 PL:GT:GQ 40,0,32:0/1:34 +chr15 54939306 . C T 99 . DP=34;AF1=0.5;CI95=0.5,0.5;DP4=0,18,0,16;MQ=49;PV4=1,1,0.18,1 PL:GT:GQ 172,0,181:0/1:99 +chr15 59377916 . C T 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 73,6,0:1/1:49 +chr15 59685961 . G C 68 . DP=11;AF1=1;CI95=1,1;DP4=0,0,0,11;MQ=36 PL:GT:GQ 101,33,0:1/1:99 +chr15 60306384 . A G 18.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=25 PL:GT:GQ 51,12,0:1/1:72 +chr15 60345642 . G C 14.9 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 46,6,0:1/1:49 +chr15 60367387 . G A 13.2 . DP=6;AF1=0.5001;CI95=0.5,0.5;DP4=3,0,3,0;MQ=34;PV4=1,0.098,0.24,1 PL:GT:GQ 43,0,35:0/1:37 +chr15 60367446 . C T 44 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=41 PL:GT:GQ 76,9,0:1/1:63 +chr15 61763755 . G A 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=45 PL:GT:GQ 100,9,0:1/1:63 +chr15 61831362 . C G 11.3 . DP=5;AF1=0.5;CI95=0.5,0.5;DP4=0,2,0,3;MQ=30;PV4=1,0.00077,0.47,1 PL:GT:GQ 41,0,42:0/1:41 +chr15 63978880 . G C 60 . DP=6;AF1=0.9999;CI95=0.5,1;DP4=2,0,4,0;MQ=35;PV4=1,1,1,1 PL:GT:GQ 90,3,0:1/1:41 +chr15 64342445 . A G 12.2 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=18 PL:GT:GQ 44,9,0:1/1:63 +chr15 65424859 . T C 11.3 . DP=10;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=21 PL:GT:GQ 44,30,0:1/1:99 +chr15 65603698 . C T 60 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 92,9,0:1/1:63 +chr15 67005078 . G A 13.9 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr15 71133512 . G C 22.3 . DP=19;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=25 PL:GT:GQ 55,15,0:1/1:75 +chr15 72619009 . A G 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=48 PL:GT:GQ 54,9,0:1/1:63 +chr15 73272688 . C T 70.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=39 PL:GT:GQ 103,15,0:1/1:75 +chr15 73699335 . T A 99 . DP=9;AF1=1;CI95=1,1;DP4=0,0,0,9;MQ=45 PL:GT:GQ 175,27,0:1/1:99 +chr15 74513352 . C T 99 . DP=10;AF1=1;CI95=1,1;DP4=0,0,0,10;MQ=37 PL:GT:GQ 139,30,0:1/1:99 +chr15 75540536 . G A 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=44 PL:GT:GQ 40,6,0:1/1:49 +chr15 75822537 . C A 17.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=23 PL:GT:GQ 50,15,0:1/1:75 +chr15 78554005 . T C 12 . DP=18;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=46 PL:GT:GQ 43,6,0:1/1:49 +chr15 80089369 . G A 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=28 PL:GT:GQ 40,6,0:1/1:49 +chr15 83089149 . C G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=33 PL:GT:GQ 40,6,0:1/1:49 +chr15 86839307 . T C 90.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=43 PL:GT:GQ 123,15,0:1/1:75 +chr15 89836258 . T C 99 . DP=10;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=39 PL:GT:GQ 141,24,0:1/1:96 +chr15 89837706 . G A 4.13 . DP=8;AF1=0.4998;CI95=0.5,0.5;DP4=0,4,0,4;MQ=30;PV4=1,1,0.25,1 PL:GT:GQ 32,0,59:0/1:35 +chr15 89857648 . T C 99 . DP=27;AF1=0.5;CI95=0.5,0.5;DP4=8,0,8,0;MQ=40;PV4=1,1,0.3,1 PL:GT:GQ 133,0,130:0/1:99 +chr15 89864228 . A C 32 . DP=4;AF1=0.5002;CI95=0.5,0.5;DP4=2,0,2,0;MQ=42;PV4=1,1,1,1 PL:GT:GQ 62,0,31:0/1:34 +chr15 91261235 . G A 7.8 . DP=4;AF1=0.5002;CI95=0.5,0.5;DP4=1,0,2,0;MQ=44;PV4=1,1,0.32,1 PL:GT:GQ 37,0,30:0/1:32 +chr16 256990 . A C 10.4 . DP=16;AF1=0.5008;CI95=0.5,0.5;DP4=4,0,3,0;MQ=23;PV4=1,0.34,1,1 PL:GT:GQ 40,0,25:0/1:28 +chr16 260794 . T C 3.01 . DP=19;AF1=0.4999;CI95=0.5,0.5;DP4=13,0,2,0;MQ=24;PV4=1,1,1,1 PL:GT:GQ 30,0,32:0/1:31 +chr16 419905 . A G 7.9 . DP=5;AF1=0.9966;CI95=0.5,1;DP4=0,2,0,3;MQ=22;PV4=1,1,1,1 PL:GT:GQ 36,1,0:1/1:23 +chr16 824086 . T C 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=48 PL:GT:GQ 54,9,0:1/1:63 +chr16 1085063 . C T 52 . DP=12;AF1=0.5;CI95=0.5,0.5;DP4=6,0,6,0;MQ=42;PV4=1,1,0.014,1 PL:GT:GQ 82,0,128:0/1:85 +chr16 1221305 . T C 54 . DP=7;AF1=0.5;CI95=0.5,0.5;DP4=0,3,0,3;MQ=40;PV4=1,1,1,1 PL:GT:GQ 84,0,60:0/1:63 +chr16 1411728 . A G 32.3 . DP=11;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=35 PL:GT:GQ 65,15,0:1/1:75 +chr16 1443197 . C G 64 . DP=26;AF1=1;CI95=1,1;DP4=0,0,25,0;MQ=36 PL:GT:GQ 97,75,0:1/1:99 +chr16 1478746 . A T 32 . DP=20;AF1=1;CI95=1,1;DP4=0,0,8,0;MQ=28 PL:GT:GQ 65,24,0:1/1:96 +chr16 1514438 . A C 45 . DP=49;AF1=1;CI95=1,1;DP4=0,0,48,0;MQ=26 PL:GT:GQ 78,144,0:1/1:99 +chr16 1601989 . T C 99 . DP=13;AF1=1;CI95=1,1;DP4=0,0,13,0;MQ=29 PL:GT:GQ 133,39,0:1/1:99 +chr16 2043883 . C T 30 . DP=33;AF1=1;CI95=1,1;DP4=0,0,0,33;MQ=14 PL:GT:GQ 63,99,0:1/1:99 +chr16 2137470 . A C 39 . DP=38;AF1=0.5016;CI95=0.5,0.5;DP4=4,0,6,0;MQ=34;PV4=1,0.02,1,1 PL:GT:GQ 69,0,22:0/1:25 +chr16 2537260 . A G 99 . DP=11;AF1=1;CI95=1,1;DP4=0,0,11,0;MQ=40 PL:GT:GQ 177,33,0:1/1:99 +chr16 2564737 . T C 99 . DP=25;AF1=1;CI95=1,1;DP4=0,0,0,22;MQ=41 PL:GT:GQ 199,66,0:1/1:99 +chr16 2612605 . A T 62.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=28 PL:GT:GQ 95,15,0:1/1:75 +chr16 2704518 . G A 41 . DP=48;AF1=0.5;CI95=0.5,0.5;DP4=0,17,0,12;MQ=48;PV4=1,1.9e-23,0.24,0.034 PL:GT:GQ 71,0,175:0/1:74 +chr16 3274307 . G T 68 . DP=39;AF1=0.5;CI95=0.5,0.5;DP4=0,30,0,8;MQ=37;PV4=1,1,1,1 PL:GT:GQ 98,0,138:0/1:99 +chr16 5467292 . G C 37.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 69,6,0:1/1:49 +chr16 10079145 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr16 11483702 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=44 PL:GT:GQ 40,6,0:1/1:49 +chr16 12038227 . A T 23 . DP=47;AF1=0.5;CI95=0.5,0.5;DP4=0,22,0,23;MQ=32;PV4=1,4.4e-66,0.47,0.028 PL:GT:GQ 53,0,135:0/1:56 +chr16 21336880 . G C 55 . DP=35;AF1=0.5;CI95=0.5,0.5;DP4=0,12,0,19;MQ=47;PV4=1,5.6e-21,1,1 PL:GT:GQ 85,0,121:0/1:88 +chr16 21980241 . C T 16.1 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=29 PL:GT:GQ 48,9,0:1/1:63 +chr16 23275383 . C G 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 44,6,0:1/1:49 +chr16 27546495 . G T 25 . DP=35;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=43 PL:GT:GQ 57,9,0:1/1:63 +chr16 27700399 . A T 17.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=17 PL:GT:GQ 50,12,0:1/1:72 +chr16 28021935 . A G 18.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=23 PL:GT:GQ 51,15,0:1/1:75 +chr16 29070016 . G T 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr16 29478618 . C T 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=42 PL:GT:GQ 43,9,0:1/1:63 +chr16 29718140 . C T 46.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=31 PL:GT:GQ 79,15,0:1/1:75 +chr16 30700759 . T C 17.1 . DP=14;AF1=1;CI95=1,1;DP4=0,0,0,14;MQ=14 PL:GT:GQ 50,42,0:1/1:99 +chr16 35139103 . A G 46.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=37 PL:GT:GQ 79,12,0:1/1:72 +chr16 35473348 . G A 3.83 . DP=11;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 34,12,0:1/1:72 +chr16 36213667 . A G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 73,6,0:1/1:49 +chr16 36705528 . G A 14.4 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=32 PL:GT:GQ 47,15,0:1/1:75 +chr16 43831353 . C T 69.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=42 PL:GT:GQ 102,12,0:1/1:72 +chr16 44715166 . A C 25 . DP=18;AF1=1;CI95=1,1;DP4=0,0,0,8;MQ=32 PL:GT:GQ 58,24,0:1/1:96 +chr16 44957661 . T C 7.03 . DP=23;AF1=1;CI95=1,1;DP4=0,0,0,7;MQ=18 PL:GT:GQ 39,21,0:1/1:84 +chr16 44958698 . C T 42.3 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=49 PL:GT:GQ 75,15,0:1/1:75 +chr16 44959163 . T C 33.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=48 PL:GT:GQ 66,12,0:1/1:72 +chr16 45167959 . C T 4.45 . DP=16;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=24 PL:GT:GQ 35,12,0:1/1:72 +chr16 50254956 . C T 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=36 PL:GT:GQ 45,6,0:1/1:49 +chr16 52383122 . A C 46.5 . DP=19;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=42 PL:GT:GQ 79,12,0:1/1:72 +chr16 55978159 . C T 10.7 . DP=20;AF1=0.5336;CI95=0.5,1;DP4=2,0,5,0;MQ=35;PV4=1,0.038,1,0.059 PL:GT:GQ 40,0,9:0/1:12 +chr16 61358878 . T A 15.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=32 PL:GT:GQ 47,6,0:1/1:49 +chr16 61392487 . G A 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=31 PL:GT:GQ 44,6,0:1/1:49 +chr16 61621603 . G T 6.59 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=22 PL:GT:GQ 38,12,0:1/1:72 +chr16 69120890 . G C 51.3 . DP=36;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=42 PL:GT:GQ 84,15,0:1/1:75 +chr16 70778219 . A G 21.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=39 PL:GT:GQ 53,6,0:1/1:49 +chr16 71899519 . T C 40 . DP=11;AF1=1;CI95=1,1;DP4=0,0,11,0;MQ=33 PL:GT:GQ 73,33,0:1/1:99 +chr16 72079251 . A G 11.3 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=41 PL:GT:GQ 43,9,0:1/1:63 +chr16 72093003 . G C 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr16 72672428 . A G 68 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=49 PL:GT:GQ 100,9,0:1/1:63 +chr16 72864515 . A G 13.9 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=35 PL:GT:GQ 45,6,0:1/1:49 +chr16 72890560 . G A 47.1 . DP=10;AF1=0.5064;CI95=0.5,0.5;DP4=0,1,0,7;MQ=49;PV4=1,0.0019,0.0033,1 PL:GT:GQ 77,0,16:0/1:19 +chr16 73048929 . A G 6.29 . DP=4;AF1=0.9966;CI95=0.5,1;DP4=1,0,2,0;MQ=27;PV4=1,1,1,0.33 PL:GT:GQ 34,1,0:1/1:23 +chr16 73177179 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr16 73191468 . C T 69.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=40 PL:GT:GQ 102,12,0:1/1:72 +chr16 73367439 . A C 7.41 . DP=36;AF1=1;CI95=0.5,1;DP4=0,2,0,13;MQ=26;PV4=1,1,0.027,1 PL:GT:GQ 37,4,0:1/1:45 +chr16 74259316 . C T 89.5 . DP=13;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=49 PL:GT:GQ 122,12,0:1/1:72 +chr16 75271450 . C G 6.99 . DP=15;AF1=0.5015;CI95=0.5,0.5;DP4=0,1,0,3;MQ=44;PV4=1,0.065,0.31,1 PL:GT:GQ 36,0,22:0/1:25 +chr16 76199870 . G A 26 . DP=14;AF1=0.5;CI95=0.5,0.5;DP4=8,0,6,0;MQ=47;PV4=1,1.2e-06,0.32,1 PL:GT:GQ 56,0,141:0/1:59 +chr16 77723692 . A G 89.5 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=50 PL:GT:GQ 122,12,0:1/1:72 +chr17 165875 . G A 40.8 . DP=11;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=42 PL:GT:GQ 72,6,0:1/1:49 +chr17 1443809 . C G 9.31 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=50 PL:GT:GQ 40,6,0:1/1:49 +chr17 1618253 . C T 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=39 PL:GT:GQ 54,9,0:1/1:63 +chr17 2815309 . T G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 40,6,0:1/1:49 +chr17 3537486 . T G 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=50 PL:GT:GQ 73,6,0:1/1:49 +chr17 3734367 . C A 23.5 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=36 PL:GT:GQ 56,12,0:1/1:72 +chr17 5634764 . T C 13 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=35 PL:GT:GQ 44,6,0:1/1:49 +chr17 6408090 . C G 3.54 . DP=5;AF1=0.4998;CI95=0.5,0.5;DP4=3,0,2,0;MQ=40;PV4=1,1,0.36,1 PL:GT:GQ 31,0,66:0/1:34 +chr17 7089723 . A G 9.31 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=47 PL:GT:GQ 40,6,0:1/1:49 +chr17 8731503 . G C 11.1 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=46 PL:GT:GQ 42,6,0:1/1:49 +chr17 9282935 . T C,G 24.5 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=40 PL:GT:GQ 57,12,61,0,3,61:1/1:72 +chr17 17284831 . T C 29 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,3;MQ=25 PL:GT:GQ 61,9,0:1/1:63 +chr17 18439515 . G A 4.11 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=25 PL:GT:GQ 34,9,0:1/1:63 +chr17 18602146 . C T 4.76 . DP=20;AF1=1;CI95=1,1;DP4=0,0,0,11;MQ=16 PL:GT:GQ 36,33,0:1/1:99 +chr17 19427888 . C T 57 . DP=104;AF1=0.5;CI95=0.5,0.5;DP4=45,0,29,0;MQ=39;PV4=1,2.2e-12,1,1 PL:GT:GQ 87,0,131:0/1:90 +chr17 19604159 . T C 9.31 . DP=5;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=45 PL:GT:GQ 40,6,0:1/1:49 +chr17 19610366 . C T 13 . DP=13;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=48 PL:GT:GQ 44,6,0:1/1:49 +chr17 20484706 . C G 51 . DP=35;AF1=0.5001;CI95=0.5,0.5;DP4=0,11,0,21;MQ=21;PV4=1,0.39,0.49,1 PL:GT:GQ 81,0,36:0/1:39 +chr17 20555720 . A G 26.3 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,5;MQ=28 PL:GT:GQ 59,15,0:1/1:75 +chr17 24328984 . A C 15.4 . DP=34;AF1=1;CI95=0.5,1;DP4=0,0,5,0;MQ=25 PL:GT:GQ 48,15,0:1/1:75 +chr17 26237090 . G A 41.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=44 PL:GT:GQ 73,6,0:1/1:49 +chr17 28394766 . C A 13.9 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=31 PL:GT:GQ 45,6,0:1/1:49 +chr17 31218277 . A G 3.62 . DP=38;AF1=0.5161;CI95=0.5,0.5;DP4=0,1,0,2;MQ=38;PV4=1,0.26,1,1 PL:GT:GQ 31,0,12:0/1:15 +chr17 31254021 . C T 15.1 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=35 PL:GT:GQ 47,9,0:1/1:63 +chr17 32516798 . G A 37.8 . DP=2;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=49 PL:GT:GQ 69,6,0:1/1:49 +chr17 32600253 . A G 16.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=25 PL:GT:GQ 49,12,0:1/1:72 +chr17 34255214 . G C 19.2 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=21 PL:GT:GQ 52,18,0:1/1:90 +chr17 34365900 . T C 93.1 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,6,0;MQ=38 PL:GT:GQ 126,18,0:1/1:90 +chr17 35380386 . A T 6.79 . DP=44;AF1=1;CI95=0.5,1;DP4=0,0,0,2;MQ=46 PL:GT:GQ 37,6,0:1/1:49 +chr17 41993344 . C T 64 . DP=41;AF1=1;CI95=1,1;DP4=0,0,0,41;MQ=16 PL:GT:GQ 97,123,0:1/1:99 +chr17 42128201 . A G 4.13 . DP=5;AF1=0.4998;CI95=0.5,0.5;DP4=0,2,0,2;MQ=52;PV4=1,0.0041,1,1 PL:GT:GQ 32,0,62:0/1:35 +chr17 42984490 . C A 56 . DP=33;AF1=0.5001;CI95=0.5,0.5;DP4=6,0,12,0;MQ=42;PV4=1,0.004,1,1 PL:GT:GQ 86,0,34:0/1:37 +chr17 43419457 . G A 99 . DP=16;AF1=1;CI95=1,1;DP4=0,0,0,14;MQ=45 PL:GT:GQ 185,42,0:1/1:99 +chr17 43421225 . A G 65.1 . DP=31;AF1=1;CI95=0.5,1;DP4=0,6,0,17;MQ=43;PV4=1,0.004,1,1 PL:GT:GQ 98,18,0:1/1:90 +chr17 45206897 . G A 22 . DP=3;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=47 PL:GT:GQ 54,9,0:1/1:63 +chr17 45381302 . T C 18.6 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,0,4;MQ=25 PL:GT:GQ 51,12,0:1/1:72 +chr17 45530812 . C A 3.54 . DP=6;AF1=0.4998;CI95=0.5,0.5;DP4=0,3,0,2;MQ=40;PV4=1,1,0.37,1 PL:GT:GQ 31,0,58:0/1:34 +chr17 50242633 . G A 44 . DP=42;AF1=0.5;CI95=0.5,0.5;DP4=0,25,0,13;MQ=32;PV4=1,0.084,0.14,1 PL:GT:GQ 74,0,154:0/1:77 +chr17 51275317 . G A 14.9 . DP=10;AF1=1;CI95=0.5,1;DP4=0,0,2,0;MQ=31 PL:GT:GQ 46,6,0:1/1:49 +chr17 52325530 . C T 29 . DP=19;AF1=1;CI95=1,1;DP4=0,0,0,18;MQ=24 PL:GT:GQ 62,54,0:1/1:99 +chr17 52411748 . T G 18.6 . DP=4;AF1=1;CI95=0.5,1;DP4=0,0,4,0;MQ=25 PL:GT:GQ 51,12,0:1/1:72 +chr17 53190746 . C G 62.1 . DP=20;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=40 PL:GT:GQ 95,18,0:1/1:90 +chr17 58289916 . T C 18.2 . DP=8;AF1=1;CI95=0.5,1;DP4=0,0,0,6;MQ=22 PL:GT:GQ 51,18,0:1/1:90 +chr17 59796875 . C T 42 . DP=6;AF1=1;CI95=0.5,1;DP4=0,0,3,0;MQ=35 PL:GT:GQ 74,9,0:1/1:63 diff --git a/tests/tabix_data/vcf/README.txt b/tests/tabix_data/vcf/README.txt new file mode 100644 index 0000000..d6d26ec --- /dev/null +++ b/tests/tabix_data/vcf/README.txt @@ -0,0 +1,11 @@ +Edits that were necessary to parse these files: + +23.vcf: change +##INFO= +to +##INFO= + +similar changes in 16.vcf and 2.vcf + +13.vcf +Flag should not have a value. diff --git a/tests/tabix_data/vcf/issue85.vcf b/tests/tabix_data/vcf/issue85.vcf new file mode 100644 index 0000000..31695cc --- /dev/null +++ b/tests/tabix_data/vcf/issue85.vcf @@ -0,0 +1,26 @@ +##fileformat=VCFv4.1 +##samtoolsVersion=0.1.18 (r982:295) +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= diff --git a/tests/tabix_data/vcf/vcf_v42.vcf b/tests/tabix_data/vcf/vcf_v42.vcf new file mode 100644 index 0000000..11dbc0a --- /dev/null +++ b/tests/tabix_data/vcf/vcf_v42.vcf @@ -0,0 +1,25 @@ +##fileformat=VCFv4.2 +##fileDate=20090805 +##source=myImputationProgramV3.1 +##reference=file:///seq/references/1000GenomesPilot-NCBI36.fasta +##contig= +##phasing=partial +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FILTER= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003 +20 14370 rs6054257 G A 29 PASS NS=3;DP=14;AF=0.5;DB;H2 GT:GQ:DP:HQ 0|0:48:1:51,51 1|0:48:8:51,51 1/1:43:5:.,. +20 17330 . T A 3 q10 NS=3;DP=11;AF=0.017 GT:GQ:DP:HQ 0|0:49:3:58,50 0|1:3:5:65,3 0/0:41:3 +20 1110696 rs6040355 A G,T 67 PASS NS=2;DP=10;AF=0.333,0.667;AA=T;DB GT:GQ:DP:HQ 1|2:21:6:23,27 2|1:2:0:18,2 2/2:35:4 +20 1230237 . T . 47 PASS NS=3;DP=13;AA=T GT:GQ:DP:HQ 0|0:54:7:56,60 0|0:48:4:51,51 0/0:61:2 +20 1234567 microsat1 GTC G,GTCT 50 PASS NS=3;DP=9;AA=G GT:GQ:DP 0/1:35:4 0/2:17:2 1/1:40:3 diff --git a/tests/tabix_test.py b/tests/tabix_test.py new file mode 100644 index 0000000..013ff86 --- /dev/null +++ b/tests/tabix_test.py @@ -0,0 +1,1255 @@ +#!/usr/bin/env python +'''unit testing code for pysam. + +Execute in the :file:`tests` directory as it requires the Makefile +and data files located there. +''' + +import sys +import os +import shutil +import gzip +import pysam +import unittest +import subprocess +import glob +import re +import copy +import tempfile +from TestUtils import checkURL, load_and_convert, TABIX_DATADIR, get_temp_filename + +IS_PYTHON3 = sys.version_info[0] >= 3 + + +def myzip_open(infile, mode="r"): + '''open compressed file and decode.''' + + def _convert(f): + for l in f: + yield l.decode("ascii") + + if IS_PYTHON3: + if mode == "r": + return _convert(gzip.open(infile, "r")) + else: + return gzip.open(mode) + + +def splitToBytes(s): + '''split string and return list of bytes.''' + return [x.encode("ascii") for x in s.split("\t")] + + +def checkBinaryEqual(filename1, filename2): + '''return true if the two files are binary equal.''' + if os.path.getsize(filename1) != os.path.getsize(filename2): + return False + + with open(filename1, "rb") as infile: + d1 = infile.read() + + with open(filename2, "rb") as infile: + d2 = infile.read() + + if len(d1) != len(d2): + return False + + found = False + for c1, c2 in zip(d1, d2): + if c1 != c2: + break + else: + found = True + + return found + + +class TestIndexing(unittest.TestCase): + filename = os.path.join(TABIX_DATADIR, "example.gtf.gz") + filename_idx = os.path.join(TABIX_DATADIR, "example.gtf.gz.tbi") + + def setUp(self): + + self.tmpfilename = get_temp_filename(suffix="gtf.gz") + shutil.copyfile(self.filename, self.tmpfilename) + + def test_indexing_with_preset_works(self): + '''test indexing via preset.''' + + pysam.tabix_index(self.tmpfilename, preset="gff") + self.assertTrue(checkBinaryEqual( + self.tmpfilename + ".tbi", self.filename_idx)) + + def test_indexing_to_custom_location_works(self): + '''test indexing a file with a non-default location.''' + + index_path = get_temp_filename(suffix='custom.tbi') + pysam.tabix_index(self.tmpfilename, preset="gff", + index=index_path, force=True) + self.assertTrue(checkBinaryEqual(index_path, self.filename_idx)) + os.unlink(index_path) + + def test_indexing_with_explict_columns_works(self): + '''test indexing via preset.''' + + pysam.tabix_index(self.tmpfilename, + seq_col=0, + start_col=3, + end_col=4, + line_skip=0, + zerobased=False) + self.assertTrue(checkBinaryEqual( + self.tmpfilename + ".tbi", self.filename_idx)) + + def test_indexing_with_lineskipping_works(self): + '''test indexing via preset and lineskip.''' + pysam.tabix_index(self.tmpfilename, + seq_col=0, + start_col=3, + end_col=4, + line_skip=1, + zerobased=False) + self.assertFalse(checkBinaryEqual( + self.tmpfilename + ".tbi", self.filename_idx)) + + def tearDown(self): + os.unlink(self.tmpfilename) + if os.path.exists(self.tmpfilename + ".tbi"): + os.unlink(self.tmpfilename + ".tbi") + + +class TestCompression(unittest.TestCase): + filename = os.path.join(TABIX_DATADIR, "example.gtf.gz") + filename_idx = os.path.join(TABIX_DATADIR, "example.gtf.gz.tbi") + preset = "gff" + + def setUp(self): + self.tmpfilename = get_temp_filename(suffix="gtf") + with gzip.open(self.filename, "rb") as infile, \ + open(self.tmpfilename, "wb") as outfile: + outfile.write(infile.read()) + + def testCompression(self): + '''see also issue 106''' + pysam.tabix_compress(self.tmpfilename, self.tmpfilename + ".gz") + checkBinaryEqual(self.tmpfilename, self.tmpfilename + ".gz") + + def testIndexPresetUncompressed(self): + '''test indexing via preset.''' + + pysam.tabix_index(self.tmpfilename, preset=self.preset) + # check if uncompressed file has been removed + self.assertEqual(os.path.exists(self.tmpfilename), False) + checkBinaryEqual(self.tmpfilename + ".gz", self.filename) + checkBinaryEqual(self.tmpfilename + ".gz.tbi", self.filename_idx) + + def testIndexPresetCompressed(self): + '''test indexing via preset.''' + + pysam.tabix_compress(self.tmpfilename, self.tmpfilename + ".gz") + pysam.tabix_index(self.tmpfilename + ".gz", preset=self.preset) + checkBinaryEqual(self.tmpfilename + ".gz", self.filename) + checkBinaryEqual(self.tmpfilename + ".gz.tbi", self.filename_idx) + + def tearDown(self): + if os.path.exists(self.tmpfilename): + os.unlink(self.tmpfilename) + if os.path.exists(self.tmpfilename + ".gz"): + os.unlink(self.tmpfilename + ".gz") + if os.path.exists(self.tmpfilename + ".gz.tbi"): + os.unlink(self.tmpfilename + ".gz.tbi") + + +class TestCompressionSam(TestCompression): + filename = os.path.join(TABIX_DATADIR, "example.sam.gz") + filename_index = os.path.join(TABIX_DATADIR, "example.sam.gz.tbi") + preset = "sam" + + +class TestCompressionBed(TestCompression): + filename = os.path.join(TABIX_DATADIR, "example.bed.gz") + filename_index = os.path.join(TABIX_DATADIR, "example.bed.gz.tbi") + preset = "bed" + + +class TestCompressionVCF(TestCompression): + filename = os.path.join(TABIX_DATADIR, "example.vcf.gz") + filename_index = os.path.join(TABIX_DATADIR, "example.vcf.gz.tbi") + preset = "vcf" + + +class IterationTest(unittest.TestCase): + + with_comments = False + + def setUp(self): + + lines = [] + with gzip.open(self.filename, "rb") as inf: + for line in inf: + line = line.decode('ascii') + if line.startswith("#"): + if not self.with_comments: + continue + lines.append(line) + + # creates index of contig, start, end, adds content without newline. + self.compare = [ + (x[0][0], int(x[0][3]), int(x[0][4]), x[1]) + for x in [(y.split("\t"), y[:-1]) for y in lines + if not y.startswith("#")]] + + self.comments = [x[:-1] for x in lines if x.startswith("#")] + + def getSubset(self, contig=None, start=None, end=None): + + if contig is None: + # all lines + subset = [x[3] for x in self.compare] + else: + if start is not None and end is None: + # until end of contig + subset = [x[3] + for x in self.compare if x[0] == contig and + x[2] > start] + elif start is None and end is not None: + # from start of contig + subset = [x[3] + for x in self.compare if x[0] == contig and + x[1] <= end] + elif start is None and end is None: + subset = [x[3] for x in self.compare if x[0] == contig] + else: + # all within interval + subset = [x[3] for x in self.compare if x[0] == contig and + min(x[2], end) - max(x[1], start) > 0] + + if self.with_comments: + subset.extend(self.comments) + + return subset + + def checkPairwise(self, result, ref): + '''check pairwise results. + ''' + result.sort() + ref.sort() + a = set(result) + b = set(ref) + + self.assertEqual( + len(result), len(ref), + "unexpected number of results: " + "result=%i, expected ref=%i, differences are %s: %s" + % (len(result), len(ref), + a.difference(b), + b.difference(a))) + + for x, d in enumerate(list(zip(result, ref))): + self.assertEqual( + d[0], d[1], + "unexpected results in pair %i:\n'%s', expected\n'%s'" % + (x, d[0], d[1])) + + +class TestGZFile(IterationTest): + + filename = os.path.join(TABIX_DATADIR, "example.gtf.gz") + with_comments = True + + def setUp(self): + + IterationTest.setUp(self) + self.gzfile = pysam.GZIterator(self.filename) + + def testAll(self): + result = list(self.gzfile) + ref = self.getSubset() + self.checkPairwise(result, ref) + + +class TestIterationWithoutComments(IterationTest): + + '''test iterating with TabixFile.fetch() when + there are no comments in the file.''' + + filename = os.path.join(TABIX_DATADIR, + "example.gtf.gz") + + def setUp(self): + IterationTest.setUp(self) + self.tabix = pysam.TabixFile(self.filename) + + def tearDown(self): + self.tabix.close() + + def testRegionStrings(self): + """test if access with various region strings + works""" + + self.assertEqual(218, len(list( + self.tabix.fetch("chr1")))) + self.assertEqual(218, len(list( + self.tabix.fetch("chr1", 1000)))) + self.assertEqual(218, len(list( + self.tabix.fetch("chr1", end=1000000)))) + self.assertEqual(218, len(list( + self.tabix.fetch("chr1", 1000, 1000000)))) + + def testAll(self): + result = list(self.tabix.fetch()) + ref = self.getSubset() + self.checkPairwise(result, ref) + + def testPerContig(self): + for contig in ("chr1", "chr2", "chr1", "chr2"): + result = list(self.tabix.fetch(contig)) + ref = self.getSubset(contig) + self.checkPairwise(result, ref) + + def testPerContigToEnd(self): + + end = None + for contig in ("chr1", "chr2", "chr1", "chr2"): + for start in range(0, 200000, 1000): + result = list(self.tabix.fetch(contig, start, end)) + ref = self.getSubset(contig, start, end) + self.checkPairwise(result, ref) + + def testPerContigFromStart(self): + + start = None + for contig in ("chr1", "chr2", "chr1", "chr2"): + for end in range(0, 200000, 1000): + result = list(self.tabix.fetch(contig, start, end)) + ref = self.getSubset(contig, start, end) + self.checkPairwise(result, ref) + + def testPerContig2(self): + + start, end = None, None + for contig in ("chr1", "chr2", "chr1", "chr2"): + result = list(self.tabix.fetch(contig, start, end)) + ref = self.getSubset(contig, start, end) + self.checkPairwise(result, ref) + + def testPerInterval(self): + + start, end = None, None + for contig in ("chr1", "chr2", "chr1", "chr2"): + for start in range(0, 200000, 2000): + for end in range(start, start + 2000, 500): + result = list(self.tabix.fetch(contig, start, end)) + ref = self.getSubset(contig, start, end) + self.checkPairwise(result, ref) + + def testInvalidIntervals(self): + + # invalid intervals (start > end) + self.assertRaises(ValueError, self.tabix.fetch, "chr1", 0, -10) + self.assertRaises(ValueError, self.tabix.fetch, "chr1", 200, 0) + + # out of range intervals + self.assertRaises(ValueError, self.tabix.fetch, "chr1", -10, 200) + self.assertRaises(ValueError, self.tabix.fetch, "chr1", -10, -20) + + # unknown chromosome + self.assertRaises(ValueError, self.tabix.fetch, "chrUn") + + # out of range access + # to be implemented + # self.assertRaises(IndexError, self.tabix.fetch, "chr1", 1000000, 2000000) + + # raise no error for empty intervals + self.tabix.fetch("chr1", 100, 100) + + def testGetContigs(self): + self.assertEqual(sorted(self.tabix.contigs), ["chr1", "chr2"]) + # check that contigs is read-only + self.assertRaises( + AttributeError, setattr, self.tabix, "contigs", ["chr1", "chr2"]) + + def testHeader(self): + ref = [] + with gzip.open(self.filename) as inf: + for x in inf: + x = x.decode("ascii") + if not x.startswith("#"): + break + ref.append(x[:-1]) + + header = list(self.tabix.header) + self.assertEqual(ref, header) + + def testReopening(self): + '''test repeated opening of the same file.''' + def func1(): + # opens any tabix file + with pysam.TabixFile(self.filename) as inf: + pass + + for i in range(1000): + func1() + + +class TestIterationWithComments(TestIterationWithoutComments): + + '''test iterating with TabixFile.fetch() when + there are comments in the file. + + Tests will create plenty of warnings on stderr. + ''' + + filename = os.path.join(TABIX_DATADIR, "example_comments.gtf.gz") + + def setUp(self): + TestIterationWithoutComments.setUp(self) + + +class TestIterators(unittest.TestCase): + filename = os.path.join(TABIX_DATADIR, "example.gtf.gz") + + iterator = pysam.tabix_generic_iterator + parser = pysam.asTuple + is_compressed = False + + def setUp(self): + + self.tabix = pysam.TabixFile(self.filename) + self.compare = load_and_convert(self.filename) + self.tmpfilename_uncompressed = 'tmp_TestIterators' + with gzip.open(self.filename, "rb") as infile, \ + open(self.tmpfilename_uncompressed, "wb") as outfile: + outfile.write(infile.read()) + + def tearDown(self): + self.tabix.close() + os.unlink(self.tmpfilename_uncompressed) + + def open(self): + + if self.is_compressed: + infile = gzip.open(self.filename) + else: + infile = open(self.tmpfilename_uncompressed) + return infile + + def testIteration(self): + + with self.open() as infile: + for x, r in enumerate(self.iterator(infile, self.parser())): + self.assertEqual(self.compare[x], list(r)) + self.assertEqual(len(self.compare[x]), len(r)) + + # test indexing + for c in range(0, len(r)): + self.assertEqual(self.compare[x][c], r[c]) + + # test slicing access + for c in range(0, len(r) - 1): + for cc in range(c + 1, len(r)): + self.assertEqual(self.compare[x][c:cc], + r[c:cc]) + + def testClosedFile(self): + '''test for error when iterating from closed file.''' + infile = self.open() + infile.close() + + # iterating from a closed file should raise a value error + self.assertRaises(ValueError, self.iterator, infile, self.parser()) + + def testClosedFileIteration(self): + '''test for error when iterating from file that has been closed''' + + infile = self.open() + + i = self.iterator(infile, self.parser()) + x = i.next() + infile.close() + # Not implemented + # self.assertRaises(ValueError, i.next) + + +class TestIteratorsGenericCompressed(TestIterators): + is_compressed = True + + +class TestIteratorsFileCompressed(TestIterators): + iterator = pysam.tabix_file_iterator + is_compressed = True + + +class TestIteratorsFileUncompressed(TestIterators): + iterator = pysam.tabix_file_iterator + is_compressed = False + + +class TestIterationMalformattedGTFFiles(unittest.TestCase): + + '''test reading from malformatted gtf files.''' + + iterator = pysam.tabix_generic_iterator + parser = pysam.asGTF + + def testGTFTooManyFields(self): + + with gzip.open(os.path.join( + TABIX_DATADIR, + "gtf_toomany_fields.gtf.gz")) as infile: + iterator = self.iterator( + infile, + parser=self.parser()) + self.assertRaises(ValueError, iterator.next) + + def testGTFTooFewFields(self): + + with gzip.open(os.path.join( + TABIX_DATADIR, + "gtf_toofew_fields.gtf.gz")) as infile: + iterator = self.iterator( + infile, + parser=self.parser()) + self.assertRaises(ValueError, iterator.next) + + +class TestBed(unittest.TestCase): + filename = os.path.join(TABIX_DATADIR, "example.bed.gz") + + def setUp(self): + + self.tabix = pysam.TabixFile(self.filename) + self.compare = load_and_convert(self.filename) + + def tearDown(self): + self.tabix.close() + + def testRead(self): + + for x, r in enumerate(self.tabix.fetch(parser=pysam.asBed())): + c = self.compare[x] + self.assertEqual(len(c), len(r)) + self.assertEqual(c, str(r).split("\t")) + self.assertEqual(c[0], r.contig) + self.assertEqual(int(c[1]), r.start) + self.assertEqual(int(c[2]), r.end) + self.assertEqual(list(c), list(r)) + self.assertEqual("\t".join(map(str, c)), + str(r)) + + def testWrite(self): + + for x, r in enumerate(self.tabix.fetch(parser=pysam.asBed())): + c = self.compare[x] + self.assertEqual(c, str(r).split("\t")) + self.assertEqual(list(c), list(r)) + + r.contig = "test" + self.assertEqual("test", r.contig) + self.assertEqual("test", r[0]) + + r.start += 1 + self.assertEqual(int(c[1]) + 1, r.start) + self.assertEqual(str(int(c[1]) + 1), r[1]) + + r.end += 1 + self.assertEqual(int(c[2]) + 1, r.end) + self.assertEqual(str(int(c[2]) + 1), r[2]) + + +class TestVCF(unittest.TestCase): + + filename = os.path.join(TABIX_DATADIR, "example.vcf40") + + def setUp(self): + self.tmpfilename = get_temp_filename(suffix="vcf") + shutil.copyfile(self.filename, self.tmpfilename) + pysam.tabix_index(self.tmpfilename, preset="vcf") + + def tearDown(self): + os.unlink(self.tmpfilename + ".gz") + if os.path.exists(self.tmpfilename + ".gz.tbi"): + os.unlink(self.tmpfilename + ".gz.tbi") + + +if IS_PYTHON3: + class TestUnicode(unittest.TestCase): + + '''test reading from a file with non-ascii characters.''' + + filename = os.path.join(TABIX_DATADIR, "example_unicode.vcf") + + def setUp(self): + self.tmpfilename = get_temp_filename(suffix="vcf") + shutil.copyfile(self.filename, self.tmpfilename) + pysam.tabix_index(self.tmpfilename, preset="vcf") + + def tearDown(self): + os.unlink(self.tmpfilename + ".gz") + if os.path.exists(self.tmpfilename + ".gz.tbi"): + os.unlink(self.tmpfilename + ".gz.tbi") + + def testFromTabix(self): + + # use ascii encoding - should raise error + with pysam.TabixFile( + self.tmpfilename + ".gz", encoding="ascii") as t: + results = list(t.fetch(parser=pysam.asVCF())) + self.assertRaises(UnicodeDecodeError, + getattr, results[1], "id") + + with pysam.TabixFile( + self.tmpfilename + ".gz", encoding="utf-8") as t: + results = list(t.fetch(parser=pysam.asVCF())) + self.assertEqual(getattr(results[1], "id"), u"Rene\xe9") + + def testFromVCF(self): + self.vcf = pysam.VCF() + self.assertRaises( + UnicodeDecodeError, + self.vcf.connect, + self.tmpfilename + ".gz", + "ascii") + self.vcf.connect(self.tmpfilename + ".gz", encoding="utf-8") + v = self.vcf.getsamples()[0] + + +class TestVCFFromTabix(TestVCF): + + columns = ("contig", "pos", "id", + "ref", "alt", "qual", + "filter", "info", "format") + + def setUp(self): + + TestVCF.setUp(self) + + self.tabix = pysam.TabixFile(self.tmpfilename + ".gz") + self.compare = load_and_convert(self.filename) + + def tearDown(self): + self.tabix.close() + TestVCF.tearDown(self) + + def testRead(self): + + ncolumns = len(self.columns) + + for x, r in enumerate(self.tabix.fetch(parser=pysam.asVCF())): + c = self.compare[x] + for y, field in enumerate(self.columns): + # it is ok to have a missing format column + if y == 8 and y == len(c): + continue + if field == "pos": + self.assertEqual(int(c[y]) - 1, getattr(r, field)) + self.assertEqual(int(c[y]) - 1, r.pos) + else: + self.assertEqual(c[y], getattr(r, field), + "mismatch in field %s: %s != %s" % + (field, c[y], getattr(r, field))) + if len(c) == 8: + self.assertEqual(0, len(r)) + else: + self.assertEqual(len(c), len(r) + ncolumns) + + for y in range(len(c) - ncolumns): + self.assertEqual(c[ncolumns + y], r[y]) + self.assertEqual("\t".join(map(str, c)), + str(r)) + + def testWrite(self): + + ncolumns = len(self.columns) + + for x, r in enumerate(self.tabix.fetch(parser=pysam.asVCF())): + c = self.compare[x] + # check unmodified string + cmp_string = str(r) + ref_string = "\t".join([x for x in c]) + + self.assertEqual(ref_string, cmp_string) + + # set fields and compare field-wise + for y, field in enumerate(self.columns): + # it is ok to have a missing format column + if y == 8 and y == len(c): + continue + if field == "pos": + rpos = getattr(r, field) + self.assertEqual(int(c[y]) - 1, rpos) + self.assertEqual(int(c[y]) - 1, r.pos) + # increment pos by 1 + setattr(r, field, rpos + 1) + self.assertEqual(getattr(r, field), rpos + 1) + c[y] = str(int(c[y]) + 1) + else: + setattr(r, field, "test_%i" % y) + c[y] = "test_%i" % y + self.assertEqual(c[y], getattr(r, field), + "mismatch in field %s: %s != %s" % + (field, c[y], getattr(r, field))) + + if len(c) == 8: + self.assertEqual(0, len(r)) + else: + self.assertEqual(len(c), len(r) + ncolumns) + + for y in range(len(c) - ncolumns): + c[ncolumns + y] = "test_%i" % y + r[y] = "test_%i" % y + self.assertEqual(c[ncolumns + y], r[y]) + + +class TestVCFFromVCF(TestVCF): + + columns = ("chrom", "pos", "id", + "ref", "alt", "qual", + "filter", "info", "format") + + # tests failing while parsing + fail_on_parsing = ( + (5, "Flag fields should not have a value"), + (9, "aouao"), + (12, "Error BAD_NUMBER_OF_PARAMETERS"), + (13, "aoeu"), + (18, "Error BAD_NUMBER_OF_PARAMETERS"), + (24, "Error HEADING_NOT_SEPARATED_BY_TABS")) + + # tests failing on opening + fail_on_opening = ((24, "Error HEADING_NOT_SEPARATED_BY_TABS"), + ) + + fail_on_samples = [] + + check_samples = False + coordinate_offset = 1 + + # value returned for missing values + missing_value = "." + missing_quality = -1 + + def setUp(self): + + TestVCF.setUp(self) + + self.vcf = pysam.VCF() + self.compare = load_and_convert(self.filename, encode=False) + + def tearDown(self): + TestVCF.tearDown(self) + self.vcf.close() + + def open_vcf(self, fn): + return self.vcf.connect(fn) + + def get_failure_stage(self): + + fn = os.path.basename(self.filename) + for x, msg in self.fail_on_opening: + if "{}.vcf".format(x) == fn: + return "opening" + + for x, msg in self.fail_on_parsing: + if "{}.vcf".format(x) == fn: + return "parsing" + + for x, msg in self.fail_on_samples: + if "{}.vcf".format(x) == fn: + return "samples" + + return None + + def testConnecting(self): + + if self.get_failure_stage() == "opening": + self.assertRaises(ValueError, + self.open_vcf, + self.tmpfilename + ".gz") + else: + self.open_vcf(self.tmpfilename + ".gz") + + def get_iterator(self): + + with open(self.filename) as f: + fn = os.path.basename(self.filename) + return list(self.vcf.parse(f)) + + def get_field_value(self, record, field): + return record[field] + + def sample2value(self, r, v): + return r, v + + def alt2value(self, r, v): + if r == ".": + return [], v + else: + return r.split(","), list(v) + + def filter2value(self, r, v): + if r == "PASS": + return [], v + elif r == ".": + return [], v + else: + return r.split(";"), v + + def testParsing(self): + + if self.get_failure_stage() in ("opening", "parsing"): + return + + itr = self.get_iterator() + if itr is None: + return + + fn = os.path.basename(self.filename) + + check_samples = self.check_samples + for vcf_code, msg in self.fail_on_samples: + if "%i.vcf" % vcf_code == fn: + check_samples = False + + for x, r in enumerate(itr): + c = self.compare[x] + for y, field in enumerate(self.columns): + # it is ok to have a missing format column + if y == 8 and y == len(c): + continue + + val = self.get_field_value(r, field) + if field == "pos": + self.assertEqual(int(c[y]) - self.coordinate_offset, + val) + elif field == "alt" or field == "alts": + cc, vv = self.alt2value(c[y], val) + if cc != vv: + # import pdb; pdb.set_trace() + pass + self.assertEqual( + cc, vv, + "mismatch in field %s: expected %s, got %s" % + (field, cc, vv)) + + elif field == "filter": + cc, vv = self.filter2value(c[y], val) + self.assertEqual( + cc, vv, + "mismatch in field %s: expected %s, got %s" % + (field, cc, vv)) + + elif field == "info": + # tests for info field not implemented + pass + + elif field == "qual" and c[y] == ".": + self.assertEqual( + self.missing_quality, val, + "mismatch in field %s: expected %s, got %s" % + (field, c[y], val)) + + elif field == "format": + # format field converted to list + self.assertEqual( + c[y].split(":"), list(val), + "mismatch in field %s: expected %s, got %s" % + (field, c[y], val)) + + elif type(val) in (int, float): + if c[y] == ".": + self.assertEqual( + None, val, + "mismatch in field %s: expected %s, got %s" % + (field, c[y], val)) + else: + self.assertAlmostEqual( + float(c[y]), float(val), 2, + "mismatch in field %s: expected %s, got %s" % + (field, c[y], val)) + else: + if c[y] == ".": + ref_val = self.missing_value + else: + ref_val = c[y] + self.assertEqual( + ref_val, val, + "mismatch in field %s: expected %s(%s), got %s(%s)" % + (field, ref_val, type(ref_val), val, type(val))) + # parse samples + if check_samples: + if len(c) == 8: + for x, s in enumerate(r.samples): + self.assertEqual( + [], r.samples[s].values(), + "mismatch in sample {}: " + "expected [], got {}, src={}, line={}".format( + s, r.samples[s].values(), + r.samples[s].items(), r)) + else: + for x, s in enumerate(r.samples): + ref, comp = self.sample2value( + c[9 + x], + r.samples[s]) + self.compare_samples(ref, comp, s, r) + + def compare_samples(self, ref, comp, s, r): + + if ref != comp: + + # check if GT not at start, not VCF conform and + # not supported by cbcf.pyx + k = r.format.keys() + if "GT" in k and k[0] != "GT": + return + + # perform an element-wise checto work around rounding differences + for a, b in zip(re.split("[:,;]", ref), + re.split("[:,;]", comp)): + is_float = True + try: + a = float(a) + b = float(b) + except ValueError: + is_float = False + + if is_float: + self.assertAlmostEqual( + a, b, 2, + "mismatch in sample {}: " + "expected {}, got {}, src={}, line={}" + .format( + s, ref, comp, + r.samples[s].items(), r)) + else: + self.assertEqual( + a, b, + "mismatch in sample {}: " + "expected {}, got {}, src={}, line={}" + .format( + s, ref, comp, + r.samples[s].items(), r)) + + +############################################################################ +# create a test class for each example vcf file. +# Two samples are created - +# 1. Testing pysam/tabix access +# 2. Testing the VCF class +vcf_files = glob.glob(os.path.join(TABIX_DATADIR, "vcf", "*.vcf")) + +for vcf_file in vcf_files: + n = "VCFFromTabixTest_%s" % os.path.basename(vcf_file[:-4]) + globals()[n] = type(n, (TestVCFFromTabix,), dict(filename=vcf_file,)) + n = "VCFFromVCFTest_%s" % os.path.basename(vcf_file[:-4]) + globals()[n] = type(n, (TestVCFFromVCF,), dict(filename=vcf_file,)) + + +class TestVCFFromVariantFile(TestVCFFromVCF): + + columns = ("chrom", "pos", "id", + "ref", "alts", "qual", + "filter", "info", "format") + + fail_on_parsing = [ + (24, "Could not parse the header, sample line not found"), + ("issue85", "empty VCF"), + ] + fail_on_opening = [ + (24, "Could not parse the header, sample line not found"), + ("issue85", "empty VCF"), + ] + coordinate_offset = 0 + check_samples = True + fail_on_samples = [ + (9, "PL field not defined. Expected to be scalar, but is array"), + (12, "PL field not defined. Expected to be scalar, but is array"), + (18, "PL field not defined. Expected to be scalar, but is array"), + ] + + # value returned for missing values + missing_value = None + missing_quality = None + + vcf = None + + def filter2value(self, r, v): + if r == "PASS": + return ["PASS"], list(v) + elif r == ".": + return [], list(v) + else: + return r.split(";"), list(v) + + def alt2value(self, r, v): + if r == ".": + return None, v + else: + return r.split(","), list(v) + + def sample2value(self, r, smp): + + def convert_field(f): + if f is None: + return "." + elif isinstance(f, tuple): + return ",".join(map(convert_field, f)) + else: + return str(f) + + v = smp.values() + + if 'GT' in smp: + alleles = [ + str(a) if a is not None else '.' for a in smp.allele_indices] + v[0] = '/|'[smp.phased].join(alleles) + + comp = ":".join(map(convert_field, v)) + + if comp.endswith(":."): + comp = comp[:-2] + + return r, comp + + def setUp(self): + TestVCF.setUp(self) + self.compare = load_and_convert(self.filename, encode=False) + + def tearDown(self): + if self.vcf: + self.vcf.close() + self.vcf = None + TestVCF.tearDown(self) + + def get_iterator(self): + self.vcf = pysam.VariantFile(self.filename) + return self.vcf.fetch() + + def get_field_value(self, record, field): + return getattr(record, field) + + def open_vcf(self, fn): + with pysam.VariantFile(fn) as inf: + pass + + +for vcf_file in vcf_files: + p = os.path.basename(vcf_file[:-4]) + n = "TestVCFFromVariantFile_%s" % p + globals()[n] = type(n, (TestVCFFromVariantFile,), dict(filename=vcf_file,)) + + +class TestRemoteFileHTTP(unittest.TestCase): + + url = "http://genserv.anat.ox.ac.uk/downloads/pysam/test/example.gtf.gz" + region = "chr1:1-1000" + local = os.path.join(TABIX_DATADIR, "example.gtf.gz") + + def setUp(self): + if not pysam.config.HAVE_LIBCURL or not checkURL(self.url): + self.remote_file = None + else: + self.remote_file = pysam.TabixFile(self.url, "r") + + self.local_file = pysam.TabixFile(self.local, "r") + + def tearDown(self): + if self.remote_file is None: + return + + self.remote_file.close() + self.local_file.close() + + def testFetchAll(self): + if self.remote_file is None: + return + + remote_result = list(self.remote_file.fetch()) + local_result = list(self.local_file.fetch()) + + self.assertEqual(len(remote_result), len(local_result)) + for x, y in zip(remote_result, local_result): + self.assertEqual(x, y) + + def testHeader(self): + if self.remote_file is None: + return + + self.assertEqual(list(self.local_file.header), []) + + +class TestRemoteFileHTTPWithHeader(TestRemoteFileHTTP): + + url = "http://genserv.anat.ox.ac.uk/downloads/pysam/test/example_comments.gtf.gz" + region = "chr1:1-1000" + local = os.path.join(TABIX_DATADIR, "example_comments.gtf.gz") + + def setUp(self): + if not pysam.config.HAVE_LIBCURL or not checkURL(self.url): + self.remote_file = None + else: + self.remote_file = pysam.TabixFile(self.url, "r") + self.local_file = pysam.TabixFile(self.local, "r") + + def testHeader(self): + if self.remote_file is None: + return + + self.assertEqual(list(self.local_file.header), ["# comment at start"]) + self.assertEqual(list(self.local_file.header), self.remote_file.header) + + +class TestIndexArgument(unittest.TestCase): + + filename_src = os.path.join(TABIX_DATADIR, "example.vcf.gz") + filename_dst = "tmp_example.vcf.gz" + index_src = os.path.join(TABIX_DATADIR, "example.vcf.gz.tbi") + index_dst = "tmp_index_example.vcf.gz.tbi" + index_dst_dat = "tmp_index_example.vcf.gz.tbi.dat" + preset = "vcf" + + def testFetchAll(self): + shutil.copyfile(self.filename_src, self.filename_dst) + shutil.copyfile(self.index_src, self.index_dst) + + with pysam.TabixFile( + self.filename_src, "r", index=self.index_src) as same_basename_file: + same_basename_results = list(same_basename_file.fetch()) + + with pysam.TabixFile( + self.filename_dst, "r", index=self.index_dst) as diff_index_file: + diff_index_result = list(diff_index_file.fetch()) + + self.assertEqual(len(same_basename_results), len(diff_index_result)) + for x, y in zip(same_basename_results, diff_index_result): + self.assertEqual(x, y) + + os.unlink(self.filename_dst) + os.unlink(self.index_dst) + + def testLoadIndexWithoutTbiExtension(self): + shutil.copyfile(self.filename_src, self.filename_dst) + shutil.copyfile(self.index_src, self.index_dst_dat) + + with pysam.TabixFile( + self.filename_src, "r", index=self.index_src) as same_basename_file: + same_basename_results = list(same_basename_file.fetch()) + + with pysam.TabixFile( + self.filename_dst, "r", index=self.index_dst_dat) as diff_index_file: + diff_index_result = list(diff_index_file.fetch()) + + self.assertEqual(len(same_basename_results), len(diff_index_result)) + for x, y in zip(same_basename_results, diff_index_result): + self.assertEqual(x, y) + + os.unlink(self.filename_dst) + os.unlink(self.index_dst_dat) + + +def _TestMultipleIteratorsHelper(filename, multiple_iterators): + '''open file within scope, return iterator.''' + + tabix = pysam.TabixFile(filename) + iterator = tabix.fetch(parser=pysam.asGTF(), + multiple_iterators=multiple_iterators) + tabix.close() + return iterator + + +class TestBackwardsCompatibility(unittest.TestCase): + """check if error is raised if a tabix file from an + old version is accessed from pysam""" + + def check(self, filename, raises=None): + with pysam.TabixFile(filename) as tf: + ref = load_and_convert(filename) + if raises is None: + self.assertEqual(len(list(tf.fetch())), len(ref)) + else: + self.assertRaises(raises, tf.fetch) + + def testVCF0v23(self): + self.check(os.path.join(TABIX_DATADIR, "example_0v23.vcf.gz"), + ValueError) + + def testBED0v23(self): + self.check(os.path.join(TABIX_DATADIR, "example_0v23.bed.gz"), + ValueError) + + def testVCF0v26(self): + self.check(os.path.join(TABIX_DATADIR, "example_0v26.vcf.gz"), + ValueError) + + def testBED0v26(self): + self.check(os.path.join(TABIX_DATADIR, "example_0v26.bed.gz"), + ValueError) + + def testVCF(self): + self.check(os.path.join(TABIX_DATADIR, "example.vcf.gz")) + + def testBED(self): + self.check(os.path.join(TABIX_DATADIR, "example.bed.gz")) + + def testEmpty(self): + self.check(os.path.join(TABIX_DATADIR, "empty.bed.gz")) + + +class TestMultipleIterators(unittest.TestCase): + + filename = os.path.join(TABIX_DATADIR, "example.gtf.gz") + + def testJoinedIterators(self): + + # two iterators working on the same file + with pysam.TabixFile(self.filename) as tabix: + a = tabix.fetch(parser=pysam.asGTF()).next() + b = tabix.fetch(parser=pysam.asGTF()).next() + # the first two lines differ only by the feature field + self.assertEqual(a.feature, "UTR") + self.assertEqual(b.feature, "exon") + self.assertEqual(re.sub("UTR", "", str(a)), + re.sub("exon", "", str(b))) + + def testDisjointIterators(self): + # two iterators working on the same file + with pysam.TabixFile(self.filename) as tabix: + a = tabix.fetch(parser=pysam.asGTF(), + multiple_iterators=True).next() + b = tabix.fetch(parser=pysam.asGTF(), + multiple_iterators=True).next() + # both iterators are at top of file + self.assertEqual(str(a), str(b)) + + def testScope(self): + # technically it does not really test if the scope is correct + i = _TestMultipleIteratorsHelper(self.filename, + multiple_iterators=True) + self.assertTrue(i.next()) + i = _TestMultipleIteratorsHelper(self.filename, + multiple_iterators=False) + self.assertRaises(IOError, i.next) + + def testDoubleFetch(self): + + with pysam.TabixFile(self.filename) as f: + + for a, b in zip(f.fetch(multiple_iterators=True), + f.fetch(multiple_iterators=True)): + self.assertEqual(str(a), str(b)) + + +class TestContextManager(unittest.TestCase): + + filename = os.path.join(TABIX_DATADIR, "example.gtf.gz") + + def testManager(self): + + with pysam.TabixFile(self.filename) as tabixfile: + tabixfile.fetch() + self.assertEqual(tabixfile.closed, True) + + +if __name__ == "__main__": + subprocess.call("make -C %s" % TABIX_DATADIR, shell=True) + unittest.main() diff --git a/tests/tabixproxies_test.py b/tests/tabixproxies_test.py new file mode 100644 index 0000000..32f8e42 --- /dev/null +++ b/tests/tabixproxies_test.py @@ -0,0 +1,362 @@ +import unittest +import pysam +import os +import sys +import re +import copy +import gzip +from TestUtils import load_and_convert, TABIX_DATADIR + + +class TestParser(unittest.TestCase): + + filename = os.path.join(TABIX_DATADIR, "example.gtf.gz") + + def setUp(self): + + self.tabix = pysam.TabixFile(self.filename) + self.compare = load_and_convert(self.filename) + + def tearDown(self): + self.tabix.close() + + def testRead(self): + + for x, r in enumerate(self.tabix.fetch(parser=pysam.asTuple())): + c = self.compare[x] + self.assertEqual(c, list(r)) + self.assertEqual(len(c), len(r)) + + # test indexing + for y in range(0, len(r)): + self.assertEqual(c[y], r[y]) + + # test slicing access + for y in range(0, len(r) - 1): + for cc in range(y + 1, len(r)): + self.assertEqual(c[y:cc], + r[y:cc]) + self.assertEqual("\t".join(map(str, c)), + str(r)) + + def testWrite(self): + + for x, r in enumerate(self.tabix.fetch(parser=pysam.asTuple())): + self.assertEqual(self.compare[x], list(r)) + c = list(r) + for y in range(len(r)): + r[y] = "test_%05i" % y + c[y] = "test_%05i" % y + self.assertEqual([x for x in c], list(r)) + self.assertEqual("\t".join(c), str(r)) + # check second assignment + for y in range(len(r)): + r[y] = "test_%05i" % y + self.assertEqual([x for x in c], list(r)) + self.assertEqual("\t".join(c), str(r)) + + def testUnset(self): + for x, r in enumerate(self.tabix.fetch(parser=pysam.asTuple())): + self.assertEqual(self.compare[x], list(r)) + c = list(r) + e = list(r) + for y in range(len(r)): + r[y] = None + c[y] = None + e[y] = "" + self.assertEqual(c, list(r)) + self.assertEqual("\t".join(e), str(r)) + + def testIteratorCompressed(self): + '''test iteration from compressed file.''' + with gzip.open(self.filename) as infile: + for x, r in enumerate(pysam.tabix_iterator( + infile, pysam.asTuple())): + self.assertEqual(self.compare[x], list(r)) + self.assertEqual(len(self.compare[x]), len(r)) + + # test indexing + for c in range(0, len(r)): + self.assertEqual(self.compare[x][c], r[c]) + + # test slicing access + for c in range(0, len(r) - 1): + for cc in range(c + 1, len(r)): + self.assertEqual(self.compare[x][c:cc], + r[c:cc]) + + def testIteratorUncompressed(self): + '''test iteration from uncompressed file.''' + tmpfilename = 'tmp_testIteratorUncompressed' + with gzip.open(self.filename, "rb") as infile, \ + open(tmpfilename, "wb") as outfile: + outfile.write(infile.read()) + + with open(tmpfilename) as infile: + for x, r in enumerate(pysam.tabix_iterator( + infile, pysam.asTuple())): + self.assertEqual(self.compare[x], list(r)) + self.assertEqual(len(self.compare[x]), len(r)) + + # test indexing + for c in range(0, len(r)): + self.assertEqual(self.compare[x][c], r[c]) + + # test slicing access + for c in range(0, len(r) - 1): + for cc in range(c + 1, len(r)): + self.assertEqual(self.compare[x][c:cc], + r[c:cc]) + + os.unlink(tmpfilename) + + def testCopy(self): + a = self.tabix.fetch(parser=pysam.asTuple()).next() + b = copy.copy(a) + self.assertEqual(a, b) + + a = self.tabix.fetch(parser=pysam.asGTF()).next() + b = copy.copy(a) + self.assertEqual(a, b) + + +class TestGTF(TestParser): + + parser = pysam.asGTF + + def build_attribute_string(self, d): + """build attribute string from dictionary d""" + s = "; ".join(["{} \"{}\"".format(x, y) for (x, y) in d.items()]) + ";" + # remove quotes around numeric values + s = re.sub("\"(\d+)\"", r"\1", s) + return s + + def testRead(self): + + for x, r in enumerate(self.tabix.fetch(parser=self.parser())): + c = self.compare[x] + self.assertEqual(len(c), len(r)) + self.assertEqual(list(c), list(r)) + self.assertEqual(c, str(r).split("\t")) + self.assertTrue(r.gene_id.startswith("ENSG")) + if r.feature != 'gene': + self.assertTrue(r.transcript_id.startswith("ENST")) + self.assertEqual(c[0], r.contig) + self.assertEqual("\t".join(map(str, c)), + str(r)) + + def test_setting_fields(self): + + r = self.tabix.fetch(parser=self.parser()).next() + + r.contig = r.contig + "_test_contig" + r.source = r.source + "_test_source" + r.feature = r.feature + "_test_feature" + r.start += 10 + r.end += 10 + r.score = 20 + r.strand = "+" + r.frame = 0 + r.attributes = 'gene_id "0001";' + r.transcript_id = "0002" + sr = str(r) + self.assertTrue("_test_contig" in sr) + self.assertTrue("_test_source" in sr) + self.assertTrue("_test_feature" in sr) + self.assertTrue("gene_id \"0001\"" in sr) + self.assertTrue("transcript_id \"0002\"" in sr) + + def test_setAttribute_makes_changes(self): + + r = self.tabix.fetch(parser=self.parser()).next() + r.setAttribute("transcript_id", "abcd") + sr = str(r) + self.assertEqual(r.transcript_id, "abcd") + self.assertTrue("transcript_id \"abcd\"" in sr) + + def test_added_attribute_is_output(self): + r = self.tabix.fetch(parser=self.parser()).next() + + r.new_int_attribute = 12 + self.assertTrue("new_int_attribute 12" in str(r).split("\t")[8]) + + r.new_float_attribute = 12.0 + self.assertTrue("new_float_attribute 12.0" in str(r).split("\t")[8]) + + r.new_text_attribute = "abc" + self.assertTrue("new_text_attribute \"abc\"" in str(r).split("\t")[8]) + + def test_setting_start_is_one_based(self): + + r = self.tabix.fetch(parser=self.parser()).next() + r.start = 1800 + self.assertEqual(r.start, 1800) + self.assertEqual(str(r).split("\t")[3], "1801") + + def test_setting_end_is_one_based(self): + + r = self.tabix.fetch(parser=self.parser()).next() + r.end = 2100 + self.assertEqual(r.end, 2100) + self.assertEqual(str(r).split("\t")[4], "2100") + + def test_setting_frame_to_none_produces_dot(self): + + r = self.tabix.fetch(parser=self.parser()).next() + r.frame = None + self.assertEqual(str(r).split("\t")[7], ".") + + r.frame = 2 + self.assertEqual(str(r).split("\t")[7], "2") + + r = self.tabix.fetch(parser=self.parser()).next() + r.frame = "." + self.assertEqual(r.frame, None) + self.assertEqual(str(r).split("\t")[7], ".") + + def test_setting_source_to_none_produces_dot(self): + + r = self.tabix.fetch(parser=self.parser()).next() + r.source = None + self.assertEqual(str(r).split("\t")[1], ".") + + r.source = "source" + self.assertEqual(str(r).split("\t")[1], "source") + + r = self.tabix.fetch(parser=self.parser()).next() + r.source = "." + self.assertEqual(r.source, None) + self.assertEqual(str(r).split("\t")[1], ".") + + def test_setting_feature_to_none_produces_dot(self): + + r = self.tabix.fetch(parser=self.parser()).next() + r.feature = None + self.assertEqual(str(r).split("\t")[2], ".") + + r.feature = "feature" + self.assertEqual(str(r).split("\t")[2], "feature") + + r = self.tabix.fetch(parser=self.parser()).next() + r.feature = "." + self.assertEqual(r.feature, None) + self.assertEqual(str(r).split("\t")[2], ".") + + def test_setting_strand_to_none_produces_dot(self): + + r = self.tabix.fetch(parser=self.parser()).next() + r.strand = None + self.assertEqual(str(r).split("\t")[6], ".") + + r.strand = "-" + self.assertEqual(str(r).split("\t")[6], "-") + + r = self.tabix.fetch(parser=self.parser()).next() + r.strand = "." + self.assertEqual(r.strand, None) + self.assertEqual(str(r).split("\t")[6], ".") + + def test_setting_score_to_none_produces_dot(self): + + r = self.tabix.fetch(parser=self.parser()).next() + r.score = None + self.assertEqual(str(r).split("\t")[5], ".") + + r.score = 12.0 + self.assertEqual(str(r).split("\t")[5], "12.0") + + r.score = -12.0 + self.assertEqual(str(r).split("\t")[5], "-12.0") + + r = self.tabix.fetch(parser=self.parser()).next() + r.score = "." + self.assertEqual(r.score, None) + self.assertEqual(str(r).split("\t")[5], ".") + + r.score = 12 + self.assertEqual(str(r).split("\t")[5], "12") + + r.score = -12 + self.assertEqual(str(r).split("\t")[5], "-12") + + def test_asdict_contains_attributes(self): + r = self.tabix.fetch(parser=self.parser()).next() + d = r.to_dict() + c = self.compare[0] + s = self.build_attribute_string(d) + self.assertEqual(s, c[8]) + + def test_asdict_can_be_modified(self): + r = self.tabix.fetch(parser=self.parser()).next() + d = r.to_dict() + d["gene_id"] = "new_gene_id" + self.assertTrue("gene_id \"new_gene_id\"", str(r)) + + +class TestGFF3(TestGTF): + + parser = pysam.asGFF3 + filename = os.path.join(TABIX_DATADIR, "example.gff3.gz") + + def build_attribute_string(self, d): + """build attribute string from dictionary d""" + s = ";".join(["{}={}".format(x, y) for (x, y) in d.items()]) + ";" + return s + + def build_attribute_string(self, d): + """build attribute string from dictionary d""" + s = ";".join(["{}={}".format(x, y) for (x, y) in d.items()]) + ";" + return s + + def testRead(self): + for x, r in enumerate(self.tabix.fetch(parser=self.parser())): + c = self.compare[x] + self.assertEqual(len(c), len(r)) + self.assertEqual(list(c), list(r)) + self.assertEqual(c, str(r).split("\t")) + self.assertEqual(c[0], r.contig) + self.assertEqual("\t".join(map(str, c)), + str(r)) + self.assertTrue(r.ID.startswith("MI00")) + + def test_setting_fields(self): + + for r in self.tabix.fetch(parser=self.parser()): + r.contig = r.contig + "_test_contig" + r.source = "test_source" + r.feature = "test_feature" + r.start += 10 + r.end += 10 + r.score = 20 + r.strand = "+" + r.frame = 0 + r.ID = "test" + sr = str(r) + self.assertTrue("test_contig" in sr) + self.assertTrue("test_source" in sr) + self.assertTrue("test_feature" in sr) + self.assertTrue("ID=test" in sr) + + def test_setAttribute_makes_changes(self): + + r = self.tabix.fetch(parser=self.parser()).next() + r.setAttribute("transcript_id", "abcd") + sr = str(r) + self.assertEqual(r.transcript_id, "abcd") + self.assertTrue("transcript_id=abcd" in sr) + + def test_added_attribute_is_output(self): + r = self.tabix.fetch(parser=self.parser()).next() + + r.new_int_attribute = 12 + self.assertTrue("new_int_attribute=12" in str(r).split("\t")[8]) + + r.new_float_attribute = 12.0 + self.assertTrue("new_float_attribute=12.0" in str(r).split("\t")[8]) + + r.new_text_attribute = "abc" + self.assertTrue("new_text_attribute=abc" in str(r).split("\t")[8]) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_samtools_python.py b/tests/test_samtools_python.py new file mode 100644 index 0000000..6088ce7 --- /dev/null +++ b/tests/test_samtools_python.py @@ -0,0 +1,46 @@ +import pysam +import os +from TestUtils import BAM_DATADIR + + +def test_idxstats_parse_split_lines(): + bam_filename = os.path.join(BAM_DATADIR, "ex2.bam") + # Test pysam 0.8.X style output, which returns a list of lines + lines = pysam.idxstats(bam_filename, split_lines=True) + for line in lines: + _seqname, _seqlen, nmapped, _nunmapped = line.split() + + +def test_bedcov_split_lines(): + bam_filename = os.path.join(BAM_DATADIR, "ex1.bam") + bed_filename = os.path.join(BAM_DATADIR, "ex1.bed") + # Test pysam 0.8.X style output, which returns a list of lines + lines = pysam.bedcov(bed_filename, bam_filename, split_lines=True) + for line in lines: + fields = line.split('\t') + assert len(fields) in [4, 5], \ + ("bedcov should give tab delimited output with 4 or 5 fields. " + "Split line (%s) gives %d fields." % (fields, len(fields))) + + +def test_idxstats_parse(): + bam_filename = os.path.join(BAM_DATADIR, "ex2.bam") + # Test pysam 0.9.X style output, which returns a string that needs to be split by \n + idxstats_string = pysam.idxstats(bam_filename, split_lines=False) + lines = idxstats_string.splitlines() + for line in lines: + splt = line.split("\t") + _seqname, _seqlen, nmapped, _nunmapped = splt + + +def test_bedcov(): + bam_filename = os.path.join(BAM_DATADIR, "ex1.bam") + bed_filename = os.path.join(BAM_DATADIR, "ex1.bed") + # Test pysam 0.9.X style output, which returns a string that needs to be split by \n + bedcov_string = pysam.bedcov(bed_filename, bam_filename, split_lines=False) + lines = bedcov_string.splitlines() + for line in lines: + fields = line.split('\t') + assert len(fields) in [4, 5], \ + ("bedcov should give tab delimited output with 4 or 5 fields. " + "Split line (%s) gives %d fields." % (fields, len(fields))) diff --git a/win32/getopt.c b/win32/getopt.c new file mode 100644 index 0000000..3cd998f --- /dev/null +++ b/win32/getopt.c @@ -0,0 +1,1261 @@ +/* Getopt for GNU. + NOTE: getopt is now part of the C library, so if you don't know what + "Keep this file name-space clean" means, talk to drepper@gnu.org + before changing it! + Copyright (C) 1987,88,89,90,91,92,93,94,95,96,98,99,2000,2001 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +/* This tells Alpha OSF/1 not to define a getopt prototype in . + Ditto for AIX 3.2 and . */ +#ifndef _NO_PROTO +# define _NO_PROTO +#endif + +#ifdef HAVE_CONFIG_H +# include +#endif + +#if !defined __STDC__ || !__STDC__ +/* This is a separate conditional since some stdc systems + reject `defined (const)'. */ +# ifndef const +# define const +# endif +#endif + +#include + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself. This code is part of the GNU C + Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object files, + it is simpler to just do this in the source for each such file. */ + +#define GETOPT_INTERFACE_VERSION 2 +#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 +# include +# if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION +# define ELIDE_CODE +# endif +#endif + +#ifndef ELIDE_CODE + + +/* This needs to come after some library #include + to get __GNU_LIBRARY__ defined. */ +#ifdef __GNU_LIBRARY__ +/* Don't include stdlib.h for non-GNU C libraries because some of them + contain conflicting prototypes for getopt. */ +# include +# include +#endif /* GNU C library. */ + +#ifdef VMS +# include +# if HAVE_STRING_H - 0 +# include +# endif +#endif + +#ifndef _ +/* This is for other GNU distributions with internationalized messages. */ +# if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC +# include +# ifndef _ +# define _(msgid) gettext (msgid) +# endif +# else +# define _(msgid) (msgid) +# endif +# if defined _LIBC && defined USE_IN_LIBIO +# include +# endif +#endif + +/* This version of `getopt' appears to the caller like standard Unix `getopt' + but it behaves differently for the user, since it allows the user + to intersperse the options with the other arguments. + + As `getopt' works, it permutes the elements of ARGV so that, + when it is done, all the options precede everything else. Thus + all application programs are extended to handle flexible argument order. + + Setting the environment variable POSIXLY_CORRECT disables permutation. + Then the behavior is completely standard. + + GNU application programs can use a third alternative mode in which + they can distinguish the relative order of options and other arguments. */ + +#include "getopt.h" + +/* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +/* 1003.2 says this must be 1 before any call. */ +int optind = 1; + +/* Formerly, initialization of getopt depended on optind==0, which + causes problems with re-calling getopt as programs generally don't + know that. */ + +int __getopt_initialized; + +/* The next char to be scanned in the option-element + in which the last option character we returned was found. + This allows us to pick up the scan where we left off. + + If this is zero, or a null string, it means resume the scan + by advancing to the next ARGV-element. */ + +static char *nextchar; + +/* Callers store zero here to inhibit the error message + for unrecognized options. */ + +int opterr = 1; + +/* Set to an option character which was unrecognized. + This must be initialized on some systems to avoid linking in the + system's own getopt implementation. */ + +int optopt = '?'; + +/* Describe how to deal with options that follow non-option ARGV-elements. + + If the caller did not specify anything, + the default is REQUIRE_ORDER if the environment variable + POSIXLY_CORRECT is defined, PERMUTE otherwise. + + REQUIRE_ORDER means don't recognize them as options; + stop option processing when the first non-option is seen. + This is what Unix does. + This mode of operation is selected by either setting the environment + variable POSIXLY_CORRECT, or using `+' as the first character + of the list of option characters. + + PERMUTE is the default. We permute the contents of ARGV as we scan, + so that eventually all the non-options are at the end. This allows options + to be given in any order, even with programs that were not written to + expect this. + + RETURN_IN_ORDER is an option available to programs that were written + to expect options and other ARGV-elements in any order and that care about + the ordering of the two. We describe each non-option ARGV-element + as if it were the argument of an option with character code 1. + Using `-' as the first character of the list of option characters + selects this mode of operation. + + The special argument `--' forces an end of option-scanning regardless + of the value of `ordering'. In the case of RETURN_IN_ORDER, only + `--' can cause `getopt' to return -1 with `optind' != ARGC. */ + +static enum +{ + REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER +} ordering; + +/* Value of POSIXLY_CORRECT environment variable. */ +static char *posixly_correct; + +#ifdef __GNU_LIBRARY__ +/* We want to avoid inclusion of string.h with non-GNU libraries + because there are many ways it can cause trouble. + On some systems, it contains special magic macros that don't work + in GCC. */ +# include +# define my_index strchr +#else + +/* +# if HAVE_STRING_H || WIN32 /* Pete Wilson mod 7/28/02 * / +# include +# else +# include +# endif +*/ + +/* Avoid depending on library functions or files + whose names are inconsistent. */ + +#ifndef getenv +extern char *getenv (); +#endif + +static char * +my_index (str, chr) + const char *str; + int chr; +{ + while (*str) + { + if (*str == chr) + return (char *) str; + str++; + } + return 0; +} + +/* If using GCC, we can safely declare strlen this way. + If not using GCC, it is ok not to declare it. */ +#ifdef __GNUC__ +/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. + That was relevant to code that was here before. */ +# if (!defined __STDC__ || !__STDC__) && !defined strlen +/* gcc with -traditional declares the built-in strlen to return int, + and has done so at least since version 2.4.5. -- rms. */ +extern int strlen (const char *); +# endif /* not __STDC__ */ +#endif /* __GNUC__ */ + +#endif /* not __GNU_LIBRARY__ */ + +/* Handle permutation of arguments. */ + +/* Describe the part of ARGV that contains non-options that have + been skipped. `first_nonopt' is the index in ARGV of the first of them; + `last_nonopt' is the index after the last of them. */ + +static int first_nonopt; +static int last_nonopt; + +#ifdef _LIBC +/* Stored original parameters. + XXX This is no good solution. We should rather copy the args so + that we can compare them later. But we must not use malloc(3). */ +extern int __libc_argc; +extern char **__libc_argv; + +/* Bash 2.0 gives us an environment variable containing flags + indicating ARGV elements that should not be considered arguments. */ + +# ifdef USE_NONOPTION_FLAGS +/* Defined in getopt_init.c */ +extern char *__getopt_nonoption_flags; + +static int nonoption_flags_max_len; +static int nonoption_flags_len; +# endif + +# ifdef USE_NONOPTION_FLAGS +# define SWAP_FLAGS(ch1, ch2) \ + if (nonoption_flags_len > 0) \ + { \ + char __tmp = __getopt_nonoption_flags[ch1]; \ + __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ + __getopt_nonoption_flags[ch2] = __tmp; \ + } +# else +# define SWAP_FLAGS(ch1, ch2) +# endif +#else /* !_LIBC */ +# define SWAP_FLAGS(ch1, ch2) +#endif /* _LIBC */ + +/* Exchange two adjacent subsequences of ARGV. + One subsequence is elements [first_nonopt,last_nonopt) + which contains all the non-options that have been skipped so far. + The other is elements [last_nonopt,optind), which contains all + the options processed since those non-options were skipped. + + `first_nonopt' and `last_nonopt' are relocated so that they describe + the new indices of the non-options in ARGV after they are moved. */ + +#if defined __STDC__ && __STDC__ +static void exchange (char **); +#endif + +static void +exchange (argv) + char **argv; +{ + int bottom = first_nonopt; + int middle = last_nonopt; + int top = optind; + char *tem; + + /* Exchange the shorter segment with the far end of the longer segment. + That puts the shorter segment into the right place. + It leaves the longer segment in the right place overall, + but it consists of two parts that need to be swapped next. */ + +#if defined _LIBC && defined USE_NONOPTION_FLAGS + /* First make sure the handling of the `__getopt_nonoption_flags' + string can work normally. Our top argument must be in the range + of the string. */ + if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len) + { + /* We must extend the array. The user plays games with us and + presents new arguments. */ + char *new_str = malloc (top + 1); + if (new_str == NULL) + nonoption_flags_len = nonoption_flags_max_len = 0; + else + { + memset (__mempcpy (new_str, __getopt_nonoption_flags, + nonoption_flags_max_len), + '\0', top + 1 - nonoption_flags_max_len); + nonoption_flags_max_len = top + 1; + __getopt_nonoption_flags = new_str; + } + } +#endif + + while (top > middle && middle > bottom) + { + if (top - middle > middle - bottom) + { + /* Bottom segment is the short one. */ + int len = middle - bottom; + register int i; + + /* Swap it with the top part of the top segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[top - (middle - bottom) + i]; + argv[top - (middle - bottom) + i] = tem; + SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); + } + /* Exclude the moved bottom segment from further swapping. */ + top -= len; + } + else + { + /* Top segment is the short one. */ + int len = top - middle; + register int i; + + /* Swap it with the bottom part of the bottom segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[middle + i]; + argv[middle + i] = tem; + SWAP_FLAGS (bottom + i, middle + i); + } + /* Exclude the moved top segment from further swapping. */ + bottom += len; + } + } + + /* Update records for the slots the non-options now occupy. */ + + first_nonopt += (optind - last_nonopt); + last_nonopt = optind; +} + +/* Initialize the internal data when the first call is made. */ + +#if defined __STDC__ && __STDC__ +static const char *_getopt_initialize (int, char *const *, const char *); +#endif +static const char * +_getopt_initialize (argc, argv, optstring) + int argc; + char *const *argv; + const char *optstring; +{ + /* Start processing options with ARGV-element 1 (since ARGV-element 0 + is the program name); the sequence of previously skipped + non-option ARGV-elements is empty. */ + + first_nonopt = last_nonopt = optind; + + nextchar = NULL; + + posixly_correct = getenv ("POSIXLY_CORRECT"); + + /* Determine how to handle the ordering of options and nonoptions. */ + + if (optstring[0] == '-') + { + ordering = RETURN_IN_ORDER; + ++optstring; + } + else if (optstring[0] == '+') + { + ordering = REQUIRE_ORDER; + ++optstring; + } + else if (posixly_correct != NULL) + ordering = REQUIRE_ORDER; + else + ordering = PERMUTE; + +#if defined _LIBC && defined USE_NONOPTION_FLAGS + if (posixly_correct == NULL + && argc == __libc_argc && argv == __libc_argv) + { + if (nonoption_flags_max_len == 0) + { + if (__getopt_nonoption_flags == NULL + || __getopt_nonoption_flags[0] == '\0') + nonoption_flags_max_len = -1; + else + { + const char *orig_str = __getopt_nonoption_flags; + int len = nonoption_flags_max_len = strlen (orig_str); + if (nonoption_flags_max_len < argc) + nonoption_flags_max_len = argc; + __getopt_nonoption_flags = + (char *) malloc (nonoption_flags_max_len); + if (__getopt_nonoption_flags == NULL) + nonoption_flags_max_len = -1; + else + memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), + '\0', nonoption_flags_max_len - len); + } + } + nonoption_flags_len = nonoption_flags_max_len; + } + else + nonoption_flags_len = 0; +#endif + + return optstring; +} + +/* Scan elements of ARGV (whose length is ARGC) for option characters + given in OPTSTRING. + + If an element of ARGV starts with '-', and is not exactly "-" or "--", + then it is an option element. The characters of this element + (aside from the initial '-') are option characters. If `getopt' + is called repeatedly, it returns successively each of the option characters + from each of the option elements. + + If `getopt' finds another option character, it returns that character, + updating `optind' and `nextchar' so that the next call to `getopt' can + resume the scan with the following option character or ARGV-element. + + If there are no more option characters, `getopt' returns -1. + Then `optind' is the index in ARGV of the first ARGV-element + that is not an option. (The ARGV-elements have been permuted + so that those that are not options now come last.) + + OPTSTRING is a string containing the legitimate option characters. + If an option character is seen that is not listed in OPTSTRING, + return '?' after printing an error message. If you set `opterr' to + zero, the error message is suppressed but we still return '?'. + + If a char in OPTSTRING is followed by a colon, that means it wants an arg, + so the following text in the same ARGV-element, or the text of the following + ARGV-element, is returned in `optarg'. Two colons mean an option that + wants an optional arg; if there is text in the current ARGV-element, + it is returned in `optarg', otherwise `optarg' is set to zero. + + If OPTSTRING starts with `-' or `+', it requests different methods of + handling the non-option ARGV-elements. + See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. + + Long-named options begin with `--' instead of `-'. + Their names may be abbreviated as long as the abbreviation is unique + or is an exact match for some defined option. If they have an + argument, it follows the option name in the same ARGV-element, separated + from the option name by a `=', or else the in next ARGV-element. + When `getopt' finds a long-named option, it returns 0 if that option's + `flag' field is nonzero, the value of the option's `val' field + if the `flag' field is zero. + + The elements of ARGV aren't really const, because we permute them. + But we pretend they're const in the prototype to be compatible + with other systems. + + LONGOPTS is a vector of `struct option' terminated by an + element containing a name which is zero. + + LONGIND returns the index in LONGOPT of the long-named option found. + It is only valid when a long-named option has been found by the most + recent call. + + If LONG_ONLY is nonzero, '-' as well as '--' can introduce + long-named options. */ + +int +_getopt_internal (argc, argv, optstring, longopts, longind, long_only) + int argc; + char *const *argv; + const char *optstring; + const struct option *longopts; + int *longind; + int long_only; +{ + int print_errors = opterr; + if (optstring[0] == ':') + print_errors = 0; + + if (argc < 1) + return -1; + + optarg = NULL; + + if (optind == 0 || !__getopt_initialized) + { + if (optind == 0) + optind = 1; /* Don't scan ARGV[0], the program name. */ + optstring = _getopt_initialize (argc, argv, optstring); + __getopt_initialized = 1; + } + + /* Test whether ARGV[optind] points to a non-option argument. + Either it does not have option syntax, or there is an environment flag + from the shell indicating it is not an option. The later information + is only used when the used in the GNU libc. */ +#if defined _LIBC && defined USE_NONOPTION_FLAGS +# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \ + || (optind < nonoption_flags_len \ + && __getopt_nonoption_flags[optind] == '1')) +#else +# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0') +#endif + + if (nextchar == NULL || *nextchar == '\0') + { + /* Advance to the next ARGV-element. */ + + /* Give FIRST_NONOPT and LAST_NONOPT rational values if OPTIND has been + moved back by the user (who may also have changed the arguments). */ + if (last_nonopt > optind) + last_nonopt = optind; + if (first_nonopt > optind) + first_nonopt = optind; + + if (ordering == PERMUTE) + { + /* If we have just processed some options following some non-options, + exchange them so that the options come first. */ + + if (first_nonopt != last_nonopt && last_nonopt != optind) + exchange ((char **) argv); + else if (last_nonopt != optind) + first_nonopt = optind; + + /* Skip any additional non-options + and extend the range of non-options previously skipped. */ + + while (optind < argc && NONOPTION_P) + optind++; + last_nonopt = optind; + } + + /* The special ARGV-element `--' means premature end of options. + Skip it like a null option, + then exchange with previous non-options as if it were an option, + then skip everything else like a non-option. */ + + if (optind != argc && !strcmp (argv[optind], "--")) + { + optind++; + + if (first_nonopt != last_nonopt && last_nonopt != optind) + exchange ((char **) argv); + else if (first_nonopt == last_nonopt) + first_nonopt = optind; + last_nonopt = argc; + + optind = argc; + } + + /* If we have done all the ARGV-elements, stop the scan + and back over any non-options that we skipped and permuted. */ + + if (optind == argc) + { + /* Set the next-arg-index to point at the non-options + that we previously skipped, so the caller will digest them. */ + if (first_nonopt != last_nonopt) + optind = first_nonopt; + return -1; + } + + /* If we have come to a non-option and did not permute it, + either stop the scan or describe it to the caller and pass it by. */ + + if (NONOPTION_P) + { + if (ordering == REQUIRE_ORDER) + return -1; + optarg = argv[optind++]; + return 1; + } + + /* We have found another option-ARGV-element. + Skip the initial punctuation. */ + + nextchar = (argv[optind] + 1 + + (longopts != NULL && argv[optind][1] == '-')); + } + + /* Decode the current option-ARGV-element. */ + + /* Check whether the ARGV-element is a long option. + + If long_only and the ARGV-element has the form "-f", where f is + a valid short option, don't consider it an abbreviated form of + a long option that starts with f. Otherwise there would be no + way to give the -f short option. + + On the other hand, if there's a long option "fubar" and + the ARGV-element is "-fu", do consider that an abbreviation of + the long option, just like "--fu", and not "-f" with arg "u". + + This distinction seems to be the most useful approach. */ + + if (longopts != NULL + && (argv[optind][1] == '-' + || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) + { + char *nameend; + const struct option *p; + const struct option *pfound = NULL; + int exact = 0; + int ambig = 0; + int indfound = -1; + int option_index; + + for (nameend = nextchar; *nameend && *nameend != '='; nameend++) + /* Do nothing. */ ; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, nextchar, nameend - nextchar)) + { + if ((unsigned int) (nameend - nextchar) + == (unsigned int) strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else if (long_only + || pfound->has_arg != p->has_arg + || pfound->flag != p->flag + || pfound->val != p->val) + /* Second or later nonexact match found. */ + ambig = 1; + } + + if (ambig && !exact) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + __asprintf (&buf, _("%s: option `%s' is ambiguous\n"), + argv[0], argv[optind]); + + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#else + fprintf (stderr, _("%s: option `%s' is ambiguous\n"), + argv[0], argv[optind]); +#endif + } + nextchar += strlen (nextchar); + optind++; + optopt = 0; + return '?'; + } + + if (pfound != NULL) + { + option_index = indfound; + optind++; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + optarg = nameend + 1; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; +#endif + + if (argv[optind - 1][1] == '-') + { + /* --option */ +#if defined _LIBC && defined USE_IN_LIBIO + __asprintf (&buf, _("\ +%s: option `--%s' doesn't allow an argument\n"), + argv[0], pfound->name); +#else + fprintf (stderr, _("\ +%s: option `--%s' doesn't allow an argument\n"), + argv[0], pfound->name); +#endif + } + else + { + /* +option or -option */ +#if defined _LIBC && defined USE_IN_LIBIO + __asprintf (&buf, _("\ +%s: option `%c%s' doesn't allow an argument\n"), + argv[0], argv[optind - 1][0], + pfound->name); +#else + fprintf (stderr, _("\ +%s: option `%c%s' doesn't allow an argument\n"), + argv[0], argv[optind - 1][0], pfound->name); +#endif + } + +#if defined _LIBC && defined USE_IN_LIBIO + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#endif + } + + nextchar += strlen (nextchar); + + optopt = pfound->val; + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (optind < argc) + optarg = argv[optind++]; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + __asprintf (&buf, + _("%s: option `%s' requires an argument\n"), + argv[0], argv[optind - 1]); + + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#else + fprintf (stderr, + _("%s: option `%s' requires an argument\n"), + argv[0], argv[optind - 1]); +#endif + } + nextchar += strlen (nextchar); + optopt = pfound->val; + return optstring[0] == ':' ? ':' : '?'; + } + } + nextchar += strlen (nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + + /* Can't find it as a long option. If this is not getopt_long_only, + or the option starts with '--' or is not a valid short + option, then it's an error. + Otherwise interpret it as a short option. */ + if (!long_only || argv[optind][1] == '-' + || my_index (optstring, *nextchar) == NULL) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; +#endif + + if (argv[optind][1] == '-') + { + /* --option */ +#if defined _LIBC && defined USE_IN_LIBIO + __asprintf (&buf, _("%s: unrecognized option `--%s'\n"), + argv[0], nextchar); +#else + fprintf (stderr, _("%s: unrecognized option `--%s'\n"), + argv[0], nextchar); +#endif + } + else + { + /* +option or -option */ +#if defined _LIBC && defined USE_IN_LIBIO + __asprintf (&buf, _("%s: unrecognized option `%c%s'\n"), + argv[0], argv[optind][0], nextchar); +#else + fprintf (stderr, _("%s: unrecognized option `%c%s'\n"), + argv[0], argv[optind][0], nextchar); +#endif + } + +#if defined _LIBC && defined USE_IN_LIBIO + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#endif + } + nextchar = (char *) ""; + optind++; + optopt = 0; + return '?'; + } + } + + /* Look at and handle the next short option-character. */ + + { + char c = *nextchar++; + char *temp = my_index (optstring, c); + + /* Increment `optind' when we start to process its last character. */ + if (*nextchar == '\0') + ++optind; + + if (temp == NULL || c == ':') + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; +#endif + + if (posixly_correct) + { + /* 1003.2 specifies the format of this message. */ +#if defined _LIBC && defined USE_IN_LIBIO + __asprintf (&buf, _("%s: illegal option -- %c\n"), + argv[0], c); +#else + fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c); +#endif + } + else + { +#if defined _LIBC && defined USE_IN_LIBIO + __asprintf (&buf, _("%s: invalid option -- %c\n"), + argv[0], c); +#else + fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c); +#endif + } + +#if defined _LIBC && defined USE_IN_LIBIO + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#endif + } + optopt = c; + return '?'; + } + /* Convenience. Treat POSIX -W foo same as long option --foo */ + if (temp[0] == 'W' && temp[1] == ';') + { + char *nameend; + const struct option *p; + const struct option *pfound = NULL; + int exact = 0; + int ambig = 0; + int indfound = 0; + int option_index; + + /* This is an option that requires an argument. */ + if (*nextchar != '\0') + { + optarg = nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + optind++; + } + else if (optind == argc) + { + if (print_errors) + { + /* 1003.2 specifies the format of this message. */ +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + __asprintf (&buf, _("%s: option requires an argument -- %c\n"), + argv[0], c); + + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#else + fprintf (stderr, _("%s: option requires an argument -- %c\n"), + argv[0], c); +#endif + } + optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + return c; + } + else + /* We already incremented `optind' once; + increment it again when taking next ARGV-elt as argument. */ + optarg = argv[optind++]; + + /* optarg is now the argument, see if it's in the + table of longopts. */ + + for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++) + /* Do nothing. */ ; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, nextchar, nameend - nextchar)) + { + if ((unsigned int) (nameend - nextchar) == strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else + /* Second or later nonexact match found. */ + ambig = 1; + } + if (ambig && !exact) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + __asprintf (&buf, _("%s: option `-W %s' is ambiguous\n"), + argv[0], argv[optind]); + + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#else + fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"), + argv[0], argv[optind]); +#endif + } + nextchar += strlen (nextchar); + optind++; + return '?'; + } + if (pfound != NULL) + { + option_index = indfound; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + optarg = nameend + 1; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + __asprintf (&buf, _("\ +%s: option `-W %s' doesn't allow an argument\n"), + argv[0], pfound->name); + + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#else + fprintf (stderr, _("\ +%s: option `-W %s' doesn't allow an argument\n"), + argv[0], pfound->name); +#endif + } + + nextchar += strlen (nextchar); + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (optind < argc) + optarg = argv[optind++]; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + __asprintf (&buf, _("\ +%s: option `%s' requires an argument\n"), + argv[0], argv[optind - 1]); + + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#else + fprintf (stderr, + _("%s: option `%s' requires an argument\n"), + argv[0], argv[optind - 1]); +#endif + } + nextchar += strlen (nextchar); + return optstring[0] == ':' ? ':' : '?'; + } + } + nextchar += strlen (nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + nextchar = NULL; + return 'W'; /* Let the application handle it. */ + } + if (temp[1] == ':') + { + if (temp[2] == ':') + { + /* This is an option that accepts an argument optionally. */ + if (*nextchar != '\0') + { + optarg = nextchar; + optind++; + } + else + optarg = NULL; + nextchar = NULL; + } + else + { + /* This is an option that requires an argument. */ + if (*nextchar != '\0') + { + optarg = nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + optind++; + } + else if (optind == argc) + { + if (print_errors) + { + /* 1003.2 specifies the format of this message. */ +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + __asprintf (&buf, + _("%s: option requires an argument -- %c\n"), + argv[0], c); + + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#else + fprintf (stderr, + _("%s: option requires an argument -- %c\n"), + argv[0], c); +#endif + } + optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + } + else + /* We already incremented `optind' once; + increment it again when taking next ARGV-elt as argument. */ + optarg = argv[optind++]; + nextchar = NULL; + } + } + return c; + } +} + +int +getopt (argc, argv, optstring) + int argc; + char *const *argv; + const char *optstring; +{ + return _getopt_internal (argc, argv, optstring, + (const struct option *) 0, + (int *) 0, + 0); +} + +#endif /* Not ELIDE_CODE. */ + + +/* Compile with -DTEST to make an executable for use in testing + the above definition of `getopt'. */ + +/* #define TEST */ /* Pete Wilson mod 7/28/02 */ +#ifdef TEST + +#ifndef exit /* Pete Wilson mod 7/28/02 */ + int exit(int); /* Pete Wilson mod 7/28/02 */ +#endif /* Pete Wilson mod 7/28/02 */ + +int +main (argc, argv) + int argc; + char **argv; +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + + c = getopt (argc, argv, "abc:d:0123456789"); + if (c == -1) + break; + + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value `%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */ + diff --git a/win32/getopt.h b/win32/getopt.h new file mode 100644 index 0000000..df780a9 --- /dev/null +++ b/win32/getopt.h @@ -0,0 +1,187 @@ +/* getopt.h */ +/* Declarations for getopt. + Copyright (C) 1989-1994, 1996-1999, 2001 Free Software + Foundation, Inc. This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute + it and/or modify it under the terms of the GNU Lesser + General Public License as published by the Free Software + Foundation; either version 2.1 of the License, or + (at your option) any later version. + + The GNU C Library is distributed in the hope that it will + be useful, but WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A + PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with the GNU C Library; if not, write + to the Free Software Foundation, Inc., 59 Temple Place, + Suite 330, Boston, MA 02111-1307 USA. */ + + + + +#ifndef _GETOPT_H + +#ifndef __need_getopt +# define _GETOPT_H 1 +#endif + +/* If __GNU_LIBRARY__ is not already defined, either we are being used + standalone, or this is the first header included in the source file. + If we are being used with glibc, we need to include , but + that does not exist if we are standalone. So: if __GNU_LIBRARY__ is + not defined, include , which will pull in for us + if it's from glibc. (Why ctype.h? It's guaranteed to exist and it + doesn't flood the namespace with stuff the way some other headers do.) */ +#if !defined __GNU_LIBRARY__ +# include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +extern char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +extern int optind; + +/* Callers store zero here to inhibit the error message `getopt' prints + for unrecognized options. */ + +extern int opterr; + +/* Set to an option character which was unrecognized. */ + +extern int optopt; + +#ifndef __need_getopt +/* Describe the long-named options requested by the application. + The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector + of `struct option' terminated by an element containing a name which is + zero. + + The field `has_arg' is: + no_argument (or 0) if the option does not take an argument, + required_argument (or 1) if the option requires an argument, + optional_argument (or 2) if the option takes an optional argument. + + If the field `flag' is not NULL, it points to a variable that is set + to the value given in the field `val' when the option is found, but + left unchanged if the option is not found. + + To have a long-named option do something other than set an `int' to + a compiled-in constant, such as set a value from `optarg', set the + option's `flag' field to zero and its `val' field to a nonzero + value (the equivalent single-letter option character, if there is + one). For long options that have a zero `flag' field, `getopt' + returns the contents of the `val' field. */ + +struct option +{ +# if (defined __STDC__ && __STDC__) || defined __cplusplus + const char *name; +# else + char *name; +# endif + /* has_arg can't be an enum because some compilers complain about + type mismatches in all the code that assumes it is an int. */ + int has_arg; + int *flag; + int val; +}; + +/* Names for the values of the `has_arg' field of `struct option'. */ + +# define no_argument 0 +# define required_argument 1 +# define optional_argument 2 +#endif /* need getopt */ + + +/* Get definitions and prototypes for functions to process the + arguments in ARGV (ARGC of them, minus the program name) for + options given in OPTS. + + Return the option character from OPTS just read. Return -1 when + there are no more options. For unrecognized options, or options + missing arguments, `optopt' is set to the option letter, and '?' is + returned. + + The OPTS string is a list of characters which are recognized option + letters, optionally followed by colons, specifying that that letter + takes an argument, to be placed in `optarg'. + + If a letter in OPTS is followed by two colons, its argument is + optional. This behavior is specific to the GNU `getopt'. + + The argument `--' causes premature termination of argument + scanning, explicitly telling `getopt' that there are no more + options. + + If OPTS begins with `--', then non-option arguments are treated as + arguments to the option '\0'. This behavior is specific to the GNU + `getopt'. */ + +#if (defined __STDC__ && __STDC__) || defined __cplusplus +# ifdef __GNU_LIBRARY__ +/* Many other libraries have conflicting prototypes for getopt, with + differences in the consts, in stdlib.h. To avoid compilation + errors, only prototype getopt for the GNU C library. */ +extern int getopt (int ___argc, char *const *___argv, const char *__shortopts); +# else /* not __GNU_LIBRARY__ */ +extern int getopt (); +# endif /* __GNU_LIBRARY__ */ + +# ifndef __need_getopt +extern int getopt_long (int ___argc, char *const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind); +extern int getopt_long_only (int ___argc, char *const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind); + +/* Internal only. Users should not call this directly. */ +extern int _getopt_internal (int ___argc, char *const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind, + int __long_only); +# endif +#else /* not __STDC__ */ +extern int getopt (); +# ifndef __need_getopt +extern int getopt_long (); +extern int getopt_long_only (); + +extern int _getopt_internal (); +# endif +#endif /* __STDC__ */ + +#ifdef __cplusplus +} +#endif + +/* Make sure we later can get all the definitions and declarations. */ +#undef __need_getopt + +#endif /* getopt.h */ diff --git a/win32/stdint.h b/win32/stdint.h new file mode 100644 index 0000000..12c108a --- /dev/null +++ b/win32/stdint.h @@ -0,0 +1,799 @@ +/* A portable stdint.h + **************************************************************************** + * BSD License: + **************************************************************************** + * + * Copyright (c) 2005-2007 Paul Hsieh + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + **************************************************************************** + * + * Version 0.1.11 + * + * The ANSI C standard committee, for the C99 standard, specified the + * inclusion of a new standard include file called stdint.h. This is + * a very useful and long desired include file which contains several + * very precise definitions for integer scalar types that is + * critically important for making portable several classes of + * applications including cryptography, hashing, variable length + * integer libraries and so on. But for most developers its likely + * useful just for programming sanity. + * + * The problem is that most compiler vendors have decided not to + * implement the C99 standard, and the next C++ language standard + * (which has a lot more mindshare these days) will be a long time in + * coming and its unknown whether or not it will include stdint.h or + * how much adoption it will have. Either way, it will be a long time + * before all compilers come with a stdint.h and it also does nothing + * for the extremely large number of compilers available today which + * do not include this file, or anything comparable to it. + * + * So that's what this file is all about. Its an attempt to build a + * single universal include file that works on as many platforms as + * possible to deliver what stdint.h is supposed to. A few things + * that should be noted about this file: + * + * 1) It is not guaranteed to be portable and/or present an identical + * interface on all platforms. The extreme variability of the + * ANSI C standard makes this an impossibility right from the + * very get go. Its really only meant to be useful for the vast + * majority of platforms that possess the capability of + * implementing usefully and precisely defined, standard sized + * integer scalars. Systems which are not intrinsically 2s + * complement may produce invalid constants. + * + * 2) There is an unavoidable use of non-reserved symbols. + * + * 3) Other standard include files are invoked. + * + * 4) This file may come in conflict with future platforms that do + * include stdint.h. The hope is that one or the other can be + * used with no real difference. + * + * 5) In the current verison, if your platform can't represent + * int32_t, int16_t and int8_t, it just dumps out with a compiler + * error. + * + * 6) 64 bit integers may or may not be defined. Test for their + * presence with the test: #ifdef INT64_MAX or #ifdef UINT64_MAX. + * Note that this is different from the C99 specification which + * requires the existence of 64 bit support in the compiler. If + * this is not defined for your platform, yet it is capable of + * dealing with 64 bits then it is because this file has not yet + * been extended to cover all of your system's capabilities. + * + * 7) (u)intptr_t may or may not be defined. Test for its presence + * with the test: #ifdef PTRDIFF_MAX. If this is not defined + * for your platform, then it is because this file has not yet + * been extended to cover all of your system's capabilities, not + * because its optional. + * + * 8) The following might not been defined even if your platform is + * capable of defining it: + * + * WCHAR_MIN + * WCHAR_MAX + * (u)int64_t + * PTRDIFF_MIN + * PTRDIFF_MAX + * (u)intptr_t + * + * 9) The following have not been defined: + * + * WINT_MIN + * WINT_MAX + * + * 10) The criteria for defining (u)int_least(*)_t isn't clear, + * except for systems which don't have a type that precisely + * defined 8, 16, or 32 bit types (which this include file does + * not support anyways). Default definitions have been given. + * + * 11) The criteria for defining (u)int_fast(*)_t isn't something I + * would trust to any particular compiler vendor or the ANSI C + * committee. It is well known that "compatible systems" are + * commonly created that have very different performance + * characteristics from the systems they are compatible with, + * especially those whose vendors make both the compiler and the + * system. Default definitions have been given, but its strongly + * recommended that users never use these definitions for any + * reason (they do *NOT* deliver any serious guarantee of + * improved performance -- not in this file, nor any vendor's + * stdint.h). + * + * 12) The following macros: + * + * PRINTF_INTMAX_MODIFIER + * PRINTF_INT64_MODIFIER + * PRINTF_INT32_MODIFIER + * PRINTF_INT16_MODIFIER + * PRINTF_LEAST64_MODIFIER + * PRINTF_LEAST32_MODIFIER + * PRINTF_LEAST16_MODIFIER + * PRINTF_INTPTR_MODIFIER + * + * are strings which have been defined as the modifiers required + * for the "d", "u" and "x" printf formats to correctly output + * (u)intmax_t, (u)int64_t, (u)int32_t, (u)int16_t, (u)least64_t, + * (u)least32_t, (u)least16_t and (u)intptr_t types respectively. + * PRINTF_INTPTR_MODIFIER is not defined for some systems which + * provide their own stdint.h. PRINTF_INT64_MODIFIER is not + * defined if INT64_MAX is not defined. These are an extension + * beyond what C99 specifies must be in stdint.h. + * + * In addition, the following macros are defined: + * + * PRINTF_INTMAX_HEX_WIDTH + * PRINTF_INT64_HEX_WIDTH + * PRINTF_INT32_HEX_WIDTH + * PRINTF_INT16_HEX_WIDTH + * PRINTF_INT8_HEX_WIDTH + * PRINTF_INTMAX_DEC_WIDTH + * PRINTF_INT64_DEC_WIDTH + * PRINTF_INT32_DEC_WIDTH + * PRINTF_INT16_DEC_WIDTH + * PRINTF_INT8_DEC_WIDTH + * + * Which specifies the maximum number of characters required to + * print the number of that type in either hexadecimal or decimal. + * These are an extension beyond what C99 specifies must be in + * stdint.h. + * + * Compilers tested (all with 0 warnings at their highest respective + * settings): Borland Turbo C 2.0, WATCOM C/C++ 11.0 (16 bits and 32 + * bits), Microsoft Visual C++ 6.0 (32 bit), Microsoft Visual Studio + * .net (VC7), Intel C++ 4.0, GNU gcc v3.3.3 + * + * This file should be considered a work in progress. Suggestions for + * improvements, especially those which increase coverage are strongly + * encouraged. + * + * Acknowledgements + * + * The following people have made significant contributions to the + * development and testing of this file: + * + * Chris Howie + * John Steele Scott + * Dave Thorup + * + */ + +#include +#include +#include + +/* + * For gcc with _STDINT_H, fill in the PRINTF_INT*_MODIFIER macros, and + * do nothing else. On the Mac OS X version of gcc this is _STDINT_H_. + */ + +#if ((defined(__STDC__) && __STDC__ && __STDC_VERSION__ >= 199901L) || (defined (__WATCOMC__) && (defined (_STDINT_H_INCLUDED) || __WATCOMC__ >= 1250)) || (defined(__GNUC__) && (defined(_STDINT_H) || defined(_STDINT_H_)) )) && !defined (_PSTDINT_H_INCLUDED) +#include +#define _PSTDINT_H_INCLUDED +# ifndef PRINTF_INT64_MODIFIER +# define PRINTF_INT64_MODIFIER "ll" +# endif +# ifndef PRINTF_INT32_MODIFIER +# define PRINTF_INT32_MODIFIER "l" +# endif +# ifndef PRINTF_INT16_MODIFIER +# define PRINTF_INT16_MODIFIER "h" +# endif +# ifndef PRINTF_INTMAX_MODIFIER +# define PRINTF_INTMAX_MODIFIER PRINTF_INT64_MODIFIER +# endif +# ifndef PRINTF_INT64_HEX_WIDTH +# define PRINTF_INT64_HEX_WIDTH "16" +# endif +# ifndef PRINTF_INT32_HEX_WIDTH +# define PRINTF_INT32_HEX_WIDTH "8" +# endif +# ifndef PRINTF_INT16_HEX_WIDTH +# define PRINTF_INT16_HEX_WIDTH "4" +# endif +# ifndef PRINTF_INT8_HEX_WIDTH +# define PRINTF_INT8_HEX_WIDTH "2" +# endif +# ifndef PRINTF_INT64_DEC_WIDTH +# define PRINTF_INT64_DEC_WIDTH "20" +# endif +# ifndef PRINTF_INT32_DEC_WIDTH +# define PRINTF_INT32_DEC_WIDTH "10" +# endif +# ifndef PRINTF_INT16_DEC_WIDTH +# define PRINTF_INT16_DEC_WIDTH "5" +# endif +# ifndef PRINTF_INT8_DEC_WIDTH +# define PRINTF_INT8_DEC_WIDTH "3" +# endif +# ifndef PRINTF_INTMAX_HEX_WIDTH +# define PRINTF_INTMAX_HEX_WIDTH PRINTF_INT64_HEX_WIDTH +# endif +# ifndef PRINTF_INTMAX_DEC_WIDTH +# define PRINTF_INTMAX_DEC_WIDTH PRINTF_INT64_DEC_WIDTH +# endif + +/* + * Something really weird is going on with Open Watcom. Just pull some of + * these duplicated definitions from Open Watcom's stdint.h file for now. + */ + +# if defined (__WATCOMC__) && __WATCOMC__ >= 1250 +# if !defined (INT64_C) +# define INT64_C(x) (x + (INT64_MAX - INT64_MAX)) +# endif +# if !defined (UINT64_C) +# define UINT64_C(x) (x + (UINT64_MAX - UINT64_MAX)) +# endif +# if !defined (INT32_C) +# define INT32_C(x) (x + (INT32_MAX - INT32_MAX)) +# endif +# if !defined (UINT32_C) +# define UINT32_C(x) (x + (UINT32_MAX - UINT32_MAX)) +# endif +# if !defined (INT16_C) +# define INT16_C(x) (x) +# endif +# if !defined (UINT16_C) +# define UINT16_C(x) (x) +# endif +# if !defined (INT8_C) +# define INT8_C(x) (x) +# endif +# if !defined (UINT8_C) +# define UINT8_C(x) (x) +# endif +# if !defined (UINT64_MAX) +# define UINT64_MAX 18446744073709551615ULL +# endif +# if !defined (INT64_MAX) +# define INT64_MAX 9223372036854775807LL +# endif +# if !defined (UINT32_MAX) +# define UINT32_MAX 4294967295UL +# endif +# if !defined (INT32_MAX) +# define INT32_MAX 2147483647L +# endif +# if !defined (INTMAX_MAX) +# define INTMAX_MAX INT64_MAX +# endif +# if !defined (INTMAX_MIN) +# define INTMAX_MIN INT64_MIN +# endif +# endif +#endif + +#ifndef _PSTDINT_H_INCLUDED +#define _PSTDINT_H_INCLUDED + +#ifndef SIZE_MAX +# define SIZE_MAX (~(size_t)0) +#endif + +/* + * Deduce the type assignments from limits.h under the assumption that + * integer sizes in bits are powers of 2, and follow the ANSI + * definitions. + */ + +#ifndef UINT8_MAX +# define UINT8_MAX 0xff +#endif +#ifndef uint8_t +# if (UCHAR_MAX == UINT8_MAX) || defined (S_SPLINT_S) + typedef unsigned char uint8_t; +# define UINT8_C(v) ((uint8_t) v) +# else +# error "Platform not supported" +# endif +#endif + +#ifndef INT8_MAX +# define INT8_MAX 0x7f +#endif +#ifndef INT8_MIN +# define INT8_MIN INT8_C(0x80) +#endif +#ifndef int8_t +# if (SCHAR_MAX == INT8_MAX) || defined (S_SPLINT_S) + typedef signed char int8_t; +# define INT8_C(v) ((int8_t) v) +# else +# error "Platform not supported" +# endif +#endif + +#ifndef UINT16_MAX +# define UINT16_MAX 0xffff +#endif +#ifndef uint16_t +#if (UINT_MAX == UINT16_MAX) || defined (S_SPLINT_S) + typedef unsigned int uint16_t; +# ifndef PRINTF_INT16_MODIFIER +# define PRINTF_INT16_MODIFIER "" +# endif +# define UINT16_C(v) ((uint16_t) (v)) +#elif (USHRT_MAX == UINT16_MAX) + typedef unsigned short uint16_t; +# define UINT16_C(v) ((uint16_t) (v)) +# ifndef PRINTF_INT16_MODIFIER +# define PRINTF_INT16_MODIFIER "h" +# endif +#else +#error "Platform not supported" +#endif +#endif + +#ifndef INT16_MAX +# define INT16_MAX 0x7fff +#endif +#ifndef INT16_MIN +# define INT16_MIN INT16_C(0x8000) +#endif +#ifndef int16_t +#if (INT_MAX == INT16_MAX) || defined (S_SPLINT_S) + typedef signed int int16_t; +# define INT16_C(v) ((int16_t) (v)) +# ifndef PRINTF_INT16_MODIFIER +# define PRINTF_INT16_MODIFIER "" +# endif +#elif (SHRT_MAX == INT16_MAX) + typedef signed short int16_t; +# define INT16_C(v) ((int16_t) (v)) +# ifndef PRINTF_INT16_MODIFIER +# define PRINTF_INT16_MODIFIER "h" +# endif +#else +#error "Platform not supported" +#endif +#endif + +#ifndef UINT32_MAX +# define UINT32_MAX (0xffffffffUL) +#endif +#ifndef uint32_t +#if (ULONG_MAX == UINT32_MAX) || defined (S_SPLINT_S) + typedef unsigned long uint32_t; +# define UINT32_C(v) v ## UL +# ifndef PRINTF_INT32_MODIFIER +# define PRINTF_INT32_MODIFIER "l" +# endif +#elif (UINT_MAX == UINT32_MAX) + typedef unsigned int uint32_t; +# ifndef PRINTF_INT32_MODIFIER +# define PRINTF_INT32_MODIFIER "" +# endif +# define UINT32_C(v) v ## U +#elif (USHRT_MAX == UINT32_MAX) + typedef unsigned short uint32_t; +# define UINT32_C(v) ((unsigned short) (v)) +# ifndef PRINTF_INT32_MODIFIER +# define PRINTF_INT32_MODIFIER "" +# endif +#else +#error "Platform not supported" +#endif +#endif + +#ifndef INT32_MAX +# define INT32_MAX (0x7fffffffL) +#endif +#ifndef INT32_MIN +# define INT32_MIN INT32_C(0x80000000) +#endif +#ifndef int32_t +#if (LONG_MAX == INT32_MAX) || defined (S_SPLINT_S) + typedef signed long int32_t; +# define INT32_C(v) v ## L +# ifndef PRINTF_INT32_MODIFIER +# define PRINTF_INT32_MODIFIER "l" +# endif +#elif (INT_MAX == INT32_MAX) + typedef signed int int32_t; +# define INT32_C(v) v +# ifndef PRINTF_INT32_MODIFIER +# define PRINTF_INT32_MODIFIER "" +# endif +#elif (SHRT_MAX == INT32_MAX) + typedef signed short int32_t; +# define INT32_C(v) ((short) (v)) +# ifndef PRINTF_INT32_MODIFIER +# define PRINTF_INT32_MODIFIER "" +# endif +#else +#error "Platform not supported" +#endif +#endif + +/* + * The macro stdint_int64_defined is temporarily used to record + * whether or not 64 integer support is available. It must be + * defined for any 64 integer extensions for new platforms that are + * added. + */ + +#undef stdint_int64_defined +#if (defined(__STDC__) && defined(__STDC_VERSION__)) || defined (S_SPLINT_S) +# if (__STDC__ && __STDC_VERSION >= 199901L) || defined (S_SPLINT_S) +# define stdint_int64_defined + typedef long long int64_t; + typedef unsigned long long uint64_t; +# define UINT64_C(v) v ## ULL +# define INT64_C(v) v ## LL +# ifndef PRINTF_INT64_MODIFIER +# define PRINTF_INT64_MODIFIER "ll" +# endif +# endif +#endif + +#if !defined (stdint_int64_defined) +# if defined(__GNUC__) +# define stdint_int64_defined + __extension__ typedef long long int64_t; + __extension__ typedef unsigned long long uint64_t; +# define UINT64_C(v) v ## ULL +# define INT64_C(v) v ## LL +# ifndef PRINTF_INT64_MODIFIER +# define PRINTF_INT64_MODIFIER "ll" +# endif +# elif defined(__MWERKS__) || defined (__SUNPRO_C) || defined (__SUNPRO_CC) || defined (__APPLE_CC__) || defined (_LONG_LONG) || defined (_CRAYC) || defined (S_SPLINT_S) +# define stdint_int64_defined + typedef long long int64_t; + typedef unsigned long long uint64_t; +# define UINT64_C(v) v ## ULL +# define INT64_C(v) v ## LL +# ifndef PRINTF_INT64_MODIFIER +# define PRINTF_INT64_MODIFIER "ll" +# endif +# elif (defined(__WATCOMC__) && defined(__WATCOM_INT64__)) || (defined(_MSC_VER) && _INTEGRAL_MAX_BITS >= 64) || (defined (__BORLANDC__) && __BORLANDC__ > 0x460) || defined (__alpha) || defined (__DECC) +# define stdint_int64_defined + typedef __int64 int64_t; + typedef unsigned __int64 uint64_t; +# define UINT64_C(v) v ## UI64 +# define INT64_C(v) v ## I64 +# ifndef PRINTF_INT64_MODIFIER +# define PRINTF_INT64_MODIFIER "I64" +# endif +# endif +#endif + +#if !defined (LONG_LONG_MAX) && defined (INT64_C) +# define LONG_LONG_MAX INT64_C (9223372036854775807) +#endif +#ifndef ULONG_LONG_MAX +# define ULONG_LONG_MAX UINT64_C (18446744073709551615) +#endif + +#if !defined (INT64_MAX) && defined (INT64_C) +# define INT64_MAX INT64_C (9223372036854775807) +#endif +#if !defined (INT64_MIN) && defined (INT64_C) +# define INT64_MIN INT64_C (-9223372036854775808) +#endif +#if !defined (UINT64_MAX) && defined (INT64_C) +# define UINT64_MAX UINT64_C (18446744073709551615) +#endif + +/* + * Width of hexadecimal for number field. + */ + +#ifndef PRINTF_INT64_HEX_WIDTH +# define PRINTF_INT64_HEX_WIDTH "16" +#endif +#ifndef PRINTF_INT32_HEX_WIDTH +# define PRINTF_INT32_HEX_WIDTH "8" +#endif +#ifndef PRINTF_INT16_HEX_WIDTH +# define PRINTF_INT16_HEX_WIDTH "4" +#endif +#ifndef PRINTF_INT8_HEX_WIDTH +# define PRINTF_INT8_HEX_WIDTH "2" +#endif + +#ifndef PRINTF_INT64_DEC_WIDTH +# define PRINTF_INT64_DEC_WIDTH "20" +#endif +#ifndef PRINTF_INT32_DEC_WIDTH +# define PRINTF_INT32_DEC_WIDTH "10" +#endif +#ifndef PRINTF_INT16_DEC_WIDTH +# define PRINTF_INT16_DEC_WIDTH "5" +#endif +#ifndef PRINTF_INT8_DEC_WIDTH +# define PRINTF_INT8_DEC_WIDTH "3" +#endif + +/* + * Ok, lets not worry about 128 bit integers for now. Moore's law says + * we don't need to worry about that until about 2040 at which point + * we'll have bigger things to worry about. + */ + +#ifdef stdint_int64_defined + typedef int64_t intmax_t; + typedef uint64_t uintmax_t; +# define INTMAX_MAX INT64_MAX +# define INTMAX_MIN INT64_MIN +# define UINTMAX_MAX UINT64_MAX +# define UINTMAX_C(v) UINT64_C(v) +# define INTMAX_C(v) INT64_C(v) +# ifndef PRINTF_INTMAX_MODIFIER +# define PRINTF_INTMAX_MODIFIER PRINTF_INT64_MODIFIER +# endif +# ifndef PRINTF_INTMAX_HEX_WIDTH +# define PRINTF_INTMAX_HEX_WIDTH PRINTF_INT64_HEX_WIDTH +# endif +# ifndef PRINTF_INTMAX_DEC_WIDTH +# define PRINTF_INTMAX_DEC_WIDTH PRINTF_INT64_DEC_WIDTH +# endif +#else + typedef int32_t intmax_t; + typedef uint32_t uintmax_t; +# define INTMAX_MAX INT32_MAX +# define UINTMAX_MAX UINT32_MAX +# define UINTMAX_C(v) UINT32_C(v) +# define INTMAX_C(v) INT32_C(v) +# ifndef PRINTF_INTMAX_MODIFIER +# define PRINTF_INTMAX_MODIFIER PRINTF_INT32_MODIFIER +# endif +# ifndef PRINTF_INTMAX_HEX_WIDTH +# define PRINTF_INTMAX_HEX_WIDTH PRINTF_INT32_HEX_WIDTH +# endif +# ifndef PRINTF_INTMAX_DEC_WIDTH +# define PRINTF_INTMAX_DEC_WIDTH PRINTF_INT32_DEC_WIDTH +# endif +#endif + +/* + * Because this file currently only supports platforms which have + * precise powers of 2 as bit sizes for the default integers, the + * least definitions are all trivial. Its possible that a future + * version of this file could have different definitions. + */ + +#ifndef stdint_least_defined + typedef int8_t int_least8_t; + typedef uint8_t uint_least8_t; + typedef int16_t int_least16_t; + typedef uint16_t uint_least16_t; + typedef int32_t int_least32_t; + typedef uint32_t uint_least32_t; +# define PRINTF_LEAST32_MODIFIER PRINTF_INT32_MODIFIER +# define PRINTF_LEAST16_MODIFIER PRINTF_INT16_MODIFIER +# define UINT_LEAST8_MAX UINT8_MAX +# define INT_LEAST8_MAX INT8_MAX +# define UINT_LEAST16_MAX UINT16_MAX +# define INT_LEAST16_MAX INT16_MAX +# define UINT_LEAST32_MAX UINT32_MAX +# define INT_LEAST32_MAX INT32_MAX +# define INT_LEAST8_MIN INT8_MIN +# define INT_LEAST16_MIN INT16_MIN +# define INT_LEAST32_MIN INT32_MIN +# ifdef stdint_int64_defined + typedef int64_t int_least64_t; + typedef uint64_t uint_least64_t; +# define PRINTF_LEAST64_MODIFIER PRINTF_INT64_MODIFIER +# define UINT_LEAST64_MAX UINT64_MAX +# define INT_LEAST64_MAX INT64_MAX +# define INT_LEAST64_MIN INT64_MIN +# endif +#endif +#undef stdint_least_defined + +/* + * The ANSI C committee pretending to know or specify anything about + * performance is the epitome of misguided arrogance. The mandate of + * this file is to *ONLY* ever support that absolute minimum + * definition of the fast integer types, for compatibility purposes. + * No extensions, and no attempt to suggest what may or may not be a + * faster integer type will ever be made in this file. Developers are + * warned to stay away from these types when using this or any other + * stdint.h. + */ + +typedef int_least8_t int_fast8_t; +typedef uint_least8_t uint_fast8_t; +typedef int_least16_t int_fast16_t; +typedef uint_least16_t uint_fast16_t; +typedef int_least32_t int_fast32_t; +typedef uint_least32_t uint_fast32_t; +#define UINT_FAST8_MAX UINT_LEAST8_MAX +#define INT_FAST8_MAX INT_LEAST8_MAX +#define UINT_FAST16_MAX UINT_LEAST16_MAX +#define INT_FAST16_MAX INT_LEAST16_MAX +#define UINT_FAST32_MAX UINT_LEAST32_MAX +#define INT_FAST32_MAX INT_LEAST32_MAX +#define INT_FAST8_MIN INT_LEAST8_MIN +#define INT_FAST16_MIN INT_LEAST16_MIN +#define INT_FAST32_MIN INT_LEAST32_MIN +#ifdef stdint_int64_defined + typedef int_least64_t int_fast64_t; + typedef uint_least64_t uint_fast64_t; +# define UINT_FAST64_MAX UINT_LEAST64_MAX +# define INT_FAST64_MAX INT_LEAST64_MAX +# define INT_FAST64_MIN INT_LEAST64_MIN +#endif + +#undef stdint_int64_defined + +/* + * Whatever piecemeal, per compiler thing we can do about the wchar_t + * type limits. + */ + +#if defined(__WATCOMC__) || defined(_MSC_VER) || defined (__GNUC__) +# include +# ifndef WCHAR_MIN +# define WCHAR_MIN 0 +# endif +# ifndef WCHAR_MAX +# define WCHAR_MAX ((wchar_t)-1) +# endif +#endif + +/* + * Whatever piecemeal, per compiler/platform thing we can do about the + * (u)intptr_t types and limits. + */ + +#if defined (_MSC_VER) && defined (_UINTPTR_T_DEFINED) +# define STDINT_H_UINTPTR_T_DEFINED +#endif + +#ifndef STDINT_H_UINTPTR_T_DEFINED +# if defined (__alpha__) || defined (__ia64__) || defined (__x86_64__) || defined (_WIN64) +# define stdint_intptr_bits 64 +# elif defined (__WATCOMC__) || defined (__TURBOC__) +# if defined(__TINY__) || defined(__SMALL__) || defined(__MEDIUM__) +# define stdint_intptr_bits 16 +# else +# define stdint_intptr_bits 32 +# endif +# elif defined (__i386__) || defined (_WIN32) || defined (WIN32) +# define stdint_intptr_bits 32 +# elif defined (__INTEL_COMPILER) +/* TODO -- what will Intel do about x86-64? */ +# endif + +# ifdef stdint_intptr_bits +# define stdint_intptr_glue3_i(a,b,c) a##b##c +# define stdint_intptr_glue3(a,b,c) stdint_intptr_glue3_i(a,b,c) +# ifndef PRINTF_INTPTR_MODIFIER +# define PRINTF_INTPTR_MODIFIER stdint_intptr_glue3(PRINTF_INT,stdint_intptr_bits,_MODIFIER) +# endif +# ifndef PTRDIFF_MAX +# define PTRDIFF_MAX stdint_intptr_glue3(INT,stdint_intptr_bits,_MAX) +# endif +# ifndef PTRDIFF_MIN +# define PTRDIFF_MIN stdint_intptr_glue3(INT,stdint_intptr_bits,_MIN) +# endif +# ifndef UINTPTR_MAX +# define UINTPTR_MAX stdint_intptr_glue3(UINT,stdint_intptr_bits,_MAX) +# endif +# ifndef INTPTR_MAX +# define INTPTR_MAX stdint_intptr_glue3(INT,stdint_intptr_bits,_MAX) +# endif +# ifndef INTPTR_MIN +# define INTPTR_MIN stdint_intptr_glue3(INT,stdint_intptr_bits,_MIN) +# endif +# ifndef INTPTR_C +# define INTPTR_C(x) stdint_intptr_glue3(INT,stdint_intptr_bits,_C)(x) +# endif +# ifndef UINTPTR_C +# define UINTPTR_C(x) stdint_intptr_glue3(UINT,stdint_intptr_bits,_C)(x) +# endif + typedef stdint_intptr_glue3(uint,stdint_intptr_bits,_t) uintptr_t; + typedef stdint_intptr_glue3( int,stdint_intptr_bits,_t) intptr_t; +# else +/* TODO -- This following is likely wrong for some platforms, and does + nothing for the definition of uintptr_t. */ + typedef ptrdiff_t intptr_t; +# endif +# define STDINT_H_UINTPTR_T_DEFINED +#endif + +/* + * Assumes sig_atomic_t is signed and we have a 2s complement machine. + */ + +#ifndef SIG_ATOMIC_MAX +# define SIG_ATOMIC_MAX ((((sig_atomic_t) 1) << (sizeof (sig_atomic_t)*CHAR_BIT-1)) - 1) +#endif + +#endif + +#if defined (__TEST_PSTDINT_FOR_CORRECTNESS) + +/* + * Please compile with the maximum warning settings to make sure macros are not + * defined more than once. + */ + +#include +#include +#include + +#define glue3_aux(x,y,z) x ## y ## z +#define glue3(x,y,z) glue3_aux(x,y,z) + +#define DECLU(bits) glue3(uint,bits,_t) glue3(u,bits,=) glue3(UINT,bits,_C) (0); +#define DECLI(bits) glue3(int,bits,_t) glue3(i,bits,=) glue3(INT,bits,_C) (0); + +#define DECL(us,bits) glue3(DECL,us,) (bits) + +#define TESTUMAX(bits) glue3(u,bits,=) glue3(~,u,bits); if (glue3(UINT,bits,_MAX) glue3(!=,u,bits)) printf ("Something wrong with UINT%d_MAX\n", bits) + +int main () { + DECL(I,8) + DECL(U,8) + DECL(I,16) + DECL(U,16) + DECL(I,32) + DECL(U,32) +#ifdef INT64_MAX + DECL(I,64) + DECL(U,64) +#endif + intmax_t imax = INTMAX_C(0); + uintmax_t umax = UINTMAX_C(0); + char str0[256], str1[256]; + + sprintf (str0, "%d %x\n", 0, ~0); + + sprintf (str1, "%d %x\n", i8, ~0); + if (0 != strcmp (str0, str1)) printf ("Something wrong with i8 : %s\n", str1); + sprintf (str1, "%u %x\n", u8, ~0); + if (0 != strcmp (str0, str1)) printf ("Something wrong with u8 : %s\n", str1); + sprintf (str1, "%d %x\n", i16, ~0); + if (0 != strcmp (str0, str1)) printf ("Something wrong with i16 : %s\n", str1); + sprintf (str1, "%u %x\n", u16, ~0); + if (0 != strcmp (str0, str1)) printf ("Something wrong with u16 : %s\n", str1); + sprintf (str1, "%" PRINTF_INT32_MODIFIER "d %x\n", i32, ~0); + if (0 != strcmp (str0, str1)) printf ("Something wrong with i32 : %s\n", str1); + sprintf (str1, "%" PRINTF_INT32_MODIFIER "u %x\n", u32, ~0); + if (0 != strcmp (str0, str1)) printf ("Something wrong with u32 : %s\n", str1); +#ifdef INT64_MAX + sprintf (str1, "%" PRINTF_INT64_MODIFIER "d %x\n", i64, ~0); + if (0 != strcmp (str0, str1)) printf ("Something wrong with i64 : %s\n", str1); +#endif + sprintf (str1, "%" PRINTF_INTMAX_MODIFIER "d %x\n", imax, ~0); + if (0 != strcmp (str0, str1)) printf ("Something wrong with imax : %s\n", str1); + sprintf (str1, "%" PRINTF_INTMAX_MODIFIER "u %x\n", umax, ~0); + if (0 != strcmp (str0, str1)) printf ("Something wrong with umax : %s\n", str1); + + TESTUMAX(8); + TESTUMAX(16); + TESTUMAX(32); +#ifdef INT64_MAX + TESTUMAX(64); +#endif + + return EXIT_SUCCESS; +} + +#endif diff --git a/win32/unistd.h b/win32/unistd.h new file mode 100644 index 0000000..e74e84a --- /dev/null +++ b/win32/unistd.h @@ -0,0 +1,26 @@ +#ifndef _UNISTD_H +#define _UNISTD_H 1 + +/* This file intended to serve as a drop-in replacement for + * * unistd.h on Windows + * * Please add functionality as neeeded + * */ + +#include +#include +#include /* getopt from: http://www.pwilson.net/sample.html. */ + +#define srandom srand +#define random rand + +/* +const W_OK = 2; +const R_OK = 4; +*/ + +#define access _access +#define ftruncate _chsize + +#define ssize_t int + +#endif /* unistd.h */ -- 2.30.2